diff options
| -rw-r--r-- | archaeological_files/models.py | 12 | ||||
| -rw-r--r-- | archaeological_files/urls.py | 3 | ||||
| -rw-r--r-- | archaeological_files/views.py | 34 | ||||
| -rw-r--r-- | archaeological_files_pdl/forms.py | 4 | ||||
| -rw-r--r-- | ishtar_common/models.py | 17 | 
5 files changed, 46 insertions, 24 deletions
| diff --git a/archaeological_files/models.py b/archaeological_files/models.py index ddee0f6cc..1e8876e66 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -26,6 +26,7 @@ from django.contrib.postgres.indexes import GinIndex  from django.core.cache import cache  from django.db.models import Q, Count, Sum  from django.db.models.signals import post_save, m2m_changed, post_delete +from django.core.urlresolvers import reverse  from ishtar_common.utils import ugettext_lazy as _, pgettext_lazy  from ishtar_common.utils import cached_label_changed, get_cache, \ @@ -706,6 +707,17 @@ class File(ClosedItem, DocumentItem, BaseHistorizedItem, CompleteIdentifierItem,              self.general_contractor.save()          return True +    def get_extra_actions(self, request): +        # url, base_text, icon, extra_text, extra css class, is a quick action +        actions = super(File, self).get_extra_actions(request) +        if self.can_do(request, 'add_administrativeact'): +            actions += [ +                (reverse('file-add-adminact', args=[self.pk]), +                 _("Add associated administrative act"), "fa fa-plus", +                 _("admin. act"), "", False), +            ] +        return actions +      def save(self, *args, **kwargs):          returned = super(File, self).save(*args, **kwargs)          if not getattr(self, '_no_new_add', None) and self.main_town and \ diff --git a/archaeological_files/urls.py b/archaeological_files/urls.py index 2b1e70b8c..cb8a63369 100644 --- a/archaeological_files/urls.py +++ b/archaeological_files/urls.py @@ -86,6 +86,9 @@ urlpatterns = [          views.show_file, name='show-historized-file'),      url(r'revert-file/(?P<pk>.+)/(?P<date>.+)$',          views.revert_file, name='revert-file'), +    url(r'^file-add-adminact/(?P<pk>[0-9-]+)/$', +        check_rights(['add_administrativeact'])(views.file_adminact_add), +        name='file-add-adminact'),      url(r'dashboard_file/$', views.dashboard_file, name='dashboard-file'),      url(r'file_administrativeact_document/$',          administrativeactfile_document, diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 7917af6b8..a29ae8b15 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -33,7 +33,8 @@ from archaeological_operations.wizards import AdministrativeActDeletionWizard, \      is_preventive, is_not_preventive  from ishtar_common.wizards import SearchWizard -from archaeological_files.wizards import FileSearch, FileWizard, \ +from archaeological_files import wizards +from archaeological_files.wizards import FileWizard, \      FileModificationWizard, FileClosingWizard, FileDeletionWizard, \      FileAdministrativeActWizard, FileEditAdministrativeActWizard @@ -105,11 +106,11 @@ def dashboard_file(request, *args, **kwargs):      dct = {'dashboard': models.FileDashboard()}      return render(request, 'ishtar/dashboards/dashboard_file.html', dct) -file_search_wizard = FileSearch.as_view( +file_search_wizard = wizards.FileSearch.as_view(      [('general-file_search', forms.FileFormSelection)],      label=_(u"File search"), url_name='file_search',) -file_creation_wizard = FileWizard.as_view( +file_creation_wizard = wizards.FileWizard.as_view(      [('general-file_creation', forms.FileFormGeneral),       ('towns-file_creation', TownFormset),       ('parcels-file_creation', forms.ParcelFormset), @@ -127,7 +128,7 @@ file_creation_wizard = FileWizard.as_view(      },      url_name='file_creation',) -file_modification_wizard = FileModificationWizard.as_view( +file_modification_wizard = wizards.FileModificationWizard.as_view(      [('selec-file_modification', forms.FileFormSelection),       ('general-file_modification', forms.FileFormGeneralRO),       ('towns-file_modification', TownFormset), @@ -157,13 +158,13 @@ def file_modify(request, pk):      return redirect(reverse('file_modification',                      kwargs={'step': 'general-file_modification'})) -file_closing_wizard = FileClosingWizard.as_view( +file_closing_wizard = wizards.FileClosingWizard.as_view(      [('selec-file_closing', forms.FileFormSelection),       ('date-file_closing', ClosingDateFormSelection),       ('final-file_closing', forms.FinalFileClosingForm)],      label=_(u"File closing"), url_name='file_closing',) -file_deletion_wizard = FileDeletionWizard.as_view( +file_deletion_wizard = wizards.FileDeletionWizard.as_view(      [('selec-file_deletion', forms.FileFormMultiSelection),       ('final-file_deletion', forms.FinalFileDeleteForm)],      label=_(u"File deletion"), @@ -174,7 +175,7 @@ def file_delete(request, pk):      if not wizard_is_available(file_deletion_wizard, request, models.File, pk):          return HttpResponseRedirect("/") -    FileDeletionWizard.session_set_value( +    wizards.FileDeletionWizard.session_set_value(          request, 'selec-file_deletion', 'pks', pk, reset=True)      return redirect(reverse('file_deletion',                              kwargs={'step': 'final-file_deletion'})) @@ -187,7 +188,7 @@ file_administrativeactfile_search_wizard = \          url_name='file_administrativeactfile_search',)  file_administrativeactfile_wizard = \ -    FileAdministrativeActWizard.as_view([ +    wizards.FileAdministrativeActWizard.as_view([          ('selec-file_administrativeactfile', forms.FileFormSelection),          ('administrativeact-file_administrativeactfile',           forms.AdministrativeActFileForm), @@ -196,7 +197,7 @@ file_administrativeactfile_wizard = \          url_name='file_administrativeactfile',)  file_administrativeactfile_modification_wizard = \ -    FileEditAdministrativeActWizard.as_view([ +    wizards.FileEditAdministrativeActWizard.as_view([          ('selec-file_administrativeactfile_modification',           forms.AdministrativeActFileModifyFormSelection),          ('administrativeact-file_administrativeactfile_modification', @@ -210,7 +211,7 @@ def file_administrativeactfile_modify(request, pk):      if not wizard_is_available(file_administrativeactfile_modification_wizard,                                 request, AdministrativeAct, pk):          return HttpResponseRedirect("/") -    FileEditAdministrativeActWizard.session_set_value( +    wizards.FileEditAdministrativeActWizard.session_set_value(          request, 'selec-file_administrativeactfile_modification',          'pk', pk, reset=True)      return redirect( @@ -245,6 +246,19 @@ def file_administrativeact_delete(request, pk):                  kwargs={'step': 'final-file_administrativeactfile_deletion'})) +def file_adminact_add(request, pk, current_right=None): +    try: +        models.File.objects.get(pk=pk) +    except models.File.DoesNotExist: +        raise Http404() +    file_administrativeactfile_wizard(request) +    wizards.FileAdministrativeActWizard.session_set_value( +        request, 'selec-file_administrativeactfile', 'pk', pk, reset=True) +    return redirect(reverse( +        'file_administrativeactfile', +        kwargs={'step': 'administrativeact-file_administrativeactfile'})) + +  def reset_wizards(request):      for wizard_class, url_name in (              (FileWizard, 'file_creation'), diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py index d8cfd8fb8..c69886de4 100644 --- a/archaeological_files_pdl/forms.py +++ b/archaeological_files_pdl/forms.py @@ -339,7 +339,7 @@ class FileFormPlanningService(CustomForm, IshtarForm):          validators=[valid_id(models.Organization)]      )      responsible_town_planning_service = forms.IntegerField( -        label=_(u"In charge"), +        label=_("In charge"),          required=False,          widget=widgets.JQueryAutoComplete(              reverse_lazy('autocomplete-person', @@ -357,7 +357,7 @@ class FileFormPlanningService(CustomForm, IshtarForm):              new=True),          validators=[valid_id(Person)]      ) -    permit_reference = forms.CharField(label=_(u"File reference"), +    permit_reference = forms.CharField(label=_("File reference"),                                         required=False, max_length=200)      def clean(self): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index c7406acfa..ac3755e13 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -156,11 +156,7 @@ class ValueGetter(object):      def _get_values_update_sub_filter(self, filtr, prefix):          if not filtr:              return -        new_filtr = [] -        for k in filtr: -            if k.startswith(prefix): -                new_filtr.append(k[len(prefix):]) -        return new_filtr +        return [k[len(prefix):] for k in filtr if k.startswith(prefix)]      def get_values(self, prefix='', no_values=False, filtr=None, **kwargs):          if not prefix: @@ -190,16 +186,13 @@ class ValueGetter(object):          values.update(self._get_values_documents(prefix=prefix, filtr=filtr))          for extra_field in self.GET_VALUES_EXTRA:              values[prefix + extra_field] = getattr(self, extra_field) or '' -        for key in values.keys(): -            val = values[key] +        for key, val in values.items():              if val is None:                  val = ''              elif (key in self.GET_VALUES_EXTRA_TYPES or "type" in key) and (                    val.__class__.__name__.split('.')[0] == 'ManyRelatedManager'):                  val = " ; ".join([str(v) for v in val.all()]) -            elif isinstance(val, (tuple, list, dict)): -                pass -            else: +            elif not isinstance(val, (tuple, list, dict)):                  val = str(val)                  if val.endswith('.None'):                      val = '' @@ -208,10 +201,10 @@ class ValueGetter(object):              # do not provide KEYS and VALUES for sub-items              return values          value_list = [] -        for key in values.keys(): +        for key, value_ in values.items():              if key in ('KEYS', 'VALUES'):                  continue -            value_list.append((key, str(values[key]))) +            value_list.append((key, str(value_)))          for global_var in GlobalVar.objects.all():              values[global_var.slug] = global_var.value or ""          return values | 
