diff options
Diffstat (limited to 'archaeological_finds/wizards.py')
| -rw-r--r-- | archaeological_finds/wizards.py | 350 | 
1 files changed, 198 insertions, 152 deletions
diff --git a/archaeological_finds/wizards.py b/archaeological_finds/wizards.py index d49529bf8..c4c191e4e 100644 --- a/archaeological_finds/wizards.py +++ b/archaeological_finds/wizards.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3  # -*- coding: utf-8 -*-  # Copyright (C) 2012-2016  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> @@ -22,8 +22,12 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied  from ishtar_common.utils import ugettext_lazy as _, pgettext  from ishtar_common.forms import reverse_lazy -from ishtar_common.wizards import Wizard, DeletionWizard, SearchWizard, \ -    MultipleDeletionWizard +from ishtar_common.wizards import ( +    Wizard, +    DeletionWizard, +    SearchWizard, +    MultipleDeletionWizard, +)  from archaeological_operations.wizards import OperationAdministrativeActWizard  from archaeological_operations.models import AdministrativeAct @@ -37,19 +41,19 @@ class FindSearch(SearchWizard):  class FindWizard(Wizard):      model = models.Find -    wizard_done_window = reverse_lazy('show-find') +    wizard_done_window = reverse_lazy("show-find")      redirect_url = "find_modification"      def get_current_contextrecord(self):          step = self.steps.current          if not step:              return -        if step.endswith('_creation'):  # a context record has been selected -            main_form_key = 'selecrecord-' + self.url_name +        if step.endswith("_creation"):  # a context record has been selected +            main_form_key = "selecrecord-" + self.url_name              try: -                idx = int(self.session_get_value(main_form_key, 'pk')) +                idx = int(self.session_get_value(main_form_key, "pk"))                  return ContextRecord.objects.get(pk=idx) -            except(TypeError, ValueError, ObjectDoesNotExist): +            except (TypeError, ValueError, ObjectDoesNotExist):                  pass          current_item = self.get_current_object()          if current_item: @@ -66,12 +70,14 @@ class FindWizard(Wizard):      def get_form_kwargs(self, step=None):          kwargs = super(FindWizard, self).get_form_kwargs(step)          if step not in ( -                'find-find_creation', 'find-find_modification', -                'simplefind-find_modification',): +            "find-find_creation", +            "find-find_modification", +            "simplefind-find_modification", +        ):              return kwargs -        kwargs['context_record'] = self.get_current_contextrecord() -        if step == 'simplefind-find_modification': -            kwargs['base_finds'] = self.get_current_basefinds() +        kwargs["context_record"] = self.get_current_contextrecord() +        if step == "simplefind-find_modification": +            kwargs["base_finds"] = self.get_current_basefinds()          return kwargs      def get_context_data(self, form, **kwargs): @@ -80,42 +86,57 @@ class FindWizard(Wizard):          """          context = super(FindWizard, self).get_context_data(form, **kwargs)          current_cr = self.get_current_contextrecord() -        if not current_cr or self.steps.current.startswith('select-'): +        if not current_cr or self.steps.current.startswith("select-"):              return context -        context['reminders'] = ( +        context["reminders"] = (              (_("Operation"), str(current_cr.operation)), -            (_("Context record"), str(current_cr))) +            (_("Context record"), str(current_cr)), +        )          return context      def get_extra_model(self, dct, m2m, form_list):          dct = super(FindWizard, self).get_extra_model(dct, m2m, form_list) -        dct['order'] = 1 -        if 'pk' in dct and type(dct['pk']) == ContextRecord: -            dct['base_finds__context_record'] = dct.pop('pk') +        dct["order"] = 1 +        if "pk" in dct and type(dct["pk"]) == ContextRecord: +            dct["base_finds__context_record"] = dct.pop("pk")          return dct  class FindModificationWizard(FindWizard):      modification = True -    main_item_select_keys = ('selec-', 'selecw-') +    main_item_select_keys = ("selec-", "selecw-")      filter_owns = { -        'selec-find_modification': ['pk'], -        'selecw-find_modification': ['pk'], +        "selec-find_modification": ["pk"], +        "selecw-find_modification": ["pk"],      }      wizard_templates = { -        'simplefind-find_modification': -            'ishtar/wizard/wizard_simplefind.html', +        "simplefind-find_modification": "ishtar/wizard/wizard_simplefind.html",      }  class FindDeletionWizard(MultipleDeletionWizard):      model = models.Find -    main_item_select_keys = ('selec-', 'selecw-') -    fields = ['label', 'material_types', 'datings', 'find_number', -              'object_types', 'description', 'conservatory_state', 'mark', -              'preservation_to_considers', 'integrities', 'remarkabilities', -              'volume', 'weight', 'length', 'width', 'height', 'diameter', -              'comment'] +    main_item_select_keys = ("selec-", "selecw-") +    fields = [ +        "label", +        "material_types", +        "datings", +        "find_number", +        "object_types", +        "description", +        "conservatory_state", +        "mark", +        "preservation_to_considers", +        "integrities", +        "remarkabilities", +        "volume", +        "weight", +        "length", +        "width", +        "height", +        "diameter", +        "comment", +    ]      redirect_url = "find_deletion" @@ -125,7 +146,7 @@ class TreatmentSearch(SearchWizard):  class TreatmentBase(Wizard):      model = models.Treatment -    wizard_done_window = reverse_lazy('show-treatment') +    wizard_done_window = reverse_lazy("show-treatment")      base_url = ""      saved_args = {"treatment_type_list": []}      redirect_url = "treatment_search" @@ -134,55 +155,54 @@ class TreatmentBase(Wizard):          step = self.steps.current          if not step:              return -        find_form_key = 'selecfind-' + self.base_url +        find_form_key = "selecfind-" + self.base_url          find_ids = self.session_get_value(find_form_key, "resulting_pk")          try:              return [                  models.Find.objects.get(pk=int(find_id.strip())) -                for find_id in find_ids.split(',') +                for find_id in find_ids.split(",")              ] -        except(TypeError, ValueError, AttributeError, ObjectDoesNotExist): +        except (TypeError, ValueError, AttributeError, ObjectDoesNotExist):              pass      def get_form_initial(self, step, data=None):          initial = super(TreatmentBase, self).get_form_initial(step) -        base_step = 'basetreatment-' + self.base_url +        base_step = "basetreatment-" + self.base_url          if step != base_step:              return initial          finds = self.get_current_finds()          if not finds:              return initial -        locations = [find.container.location.pk for find in finds -                     if find.container] +        locations = [find.container.location.pk for find in finds if find.container]          # no location or multiple locations          if not locations or len(set(locations)) != 1:              return initial          if not initial:              initial = {} -        initial['location'] = locations[0] +        initial["location"] = locations[0]          return initial      def get_extra_model(self, dct, m2m, form_list):          dct = super(TreatmentBase, self).get_extra_model(dct, m2m, form_list) -        dct['treatment_type_list'] = [] +        dct["treatment_type_list"] = []          for k, v in m2m: -            if k == 'treatment_type': +            if k == "treatment_type":                  if type(v) not in (list, tuple):                      v = [v] -                dct['treatment_type_list'] += v +                dct["treatment_type_list"] += v          return dct  class TreatmentWizard(TreatmentBase): -    basket_step = 'basetreatment-treatment_creation' +    basket_step = "basetreatment-treatment_creation"      saved_args = {"items": [], "treatment_type_list": []} -    base_url = 'treatment_creation' +    base_url = "treatment_creation"      def get_form_kwargs(self, step, **kwargs):          kwargs = super(TreatmentWizard, self).get_form_kwargs(step, **kwargs)          if self.basket_step not in step:              return kwargs -        kwargs['user'] = self.request.user +        kwargs["user"] = self.request.user          return kwargs      def get_extra_model(self, dct, m2m, form_list): @@ -190,13 +210,13 @@ class TreatmentWizard(TreatmentBase):          Get items concerned by the treatment          """          dct = super(TreatmentWizard, self).get_extra_model(dct, m2m, form_list) -        if 'resulting_pk' in dct: -            dct['items'] = [] -            pks = dct.pop('resulting_pk') +        if "resulting_pk" in dct: +            dct["items"] = [] +            pks = dct.pop("resulting_pk")              if isinstance(pks, models.Find):                  pks = [pks]              if not isinstance(pks, (list, tuple)): -                pks = str(pks).split(',') +                pks = str(pks).split(",")              for pk in pks:                  if isinstance(pk, models.Find): @@ -206,17 +226,18 @@ class TreatmentWizard(TreatmentBase):                          find = models.Find.objects.get(pk=pk)                      except models.Find.DoesNotExist:                          raise PermissionDenied -                dct['items'].append(find) -        if 'basket' in dct: -            basket = dct.pop('basket') -            if basket.user.pk != dct['history_modifier'].pk: +                dct["items"].append(find) +        if "basket" in dct: +            basket = dct.pop("basket") +            if basket.user.pk != dct["history_modifier"].pk:                  raise PermissionDenied -            dct['items'] = list(basket.items.all()) +            dct["items"] = list(basket.items.all()) -        if 'items' in dct: -            for find in dct['items']: -                if 'own' in self.current_right \ -                        and not find.is_own(dct['history_modifier']): +        if "items" in dct: +            for find in dct["items"]: +                if "own" in self.current_right and not find.is_own( +                    dct["history_modifier"] +                ):                      raise PermissionDenied          return dct @@ -226,9 +247,12 @@ class TreatmentModificationWizard(TreatmentWizard):  class TreatmentN1Wizard(TreatmentBase): -    saved_args = {"upstream_items": [], "resulting_find": None, -                  "treatment_type_list": []} -    base_url = 'treatment_creation_n1' +    saved_args = { +        "upstream_items": [], +        "resulting_find": None, +        "treatment_type_list": [], +    } +    base_url = "treatment_creation_n1"      def _update_simple_initial_from_finds(self, initial, find, k):          r_k = "resulting_" + k @@ -242,7 +266,7 @@ class TreatmentN1Wizard(TreatmentBase):      def _update_multi_initial_from_finds(self, initial, find, k):          r_k = "resulting_" + k -        for value in getattr(find, k + 's').all(): +        for value in getattr(find, k + "s").all():              if value.pk not in initial[r_k]:                  initial[r_k].append(value.pk)          return initial @@ -256,7 +280,7 @@ class TreatmentN1Wizard(TreatmentBase):          initial[r_k] += getattr(find, k)          return initial -    def _update_char_initial_from_finds(self, initial, find, k, sep=' ; '): +    def _update_char_initial_from_finds(self, initial, find, k, sep=" ; "):          r_k = "resulting_" + k          value = getattr(find, k)          if not value: @@ -266,24 +290,27 @@ class TreatmentN1Wizard(TreatmentBase):              initial[r_k] = value          else:              # new value is entirely inside the current value -            if value == initial[r_k] or (value + sep) in initial[r_k] or \ -                    (sep + value) in initial[r_k]: +            if ( +                value == initial[r_k] +                or (value + sep) in initial[r_k] +                or (sep + value) in initial[r_k] +            ):                  return initial              initial[r_k] += sep + value          return initial      def get_form_initial(self, step, data=None):          initial = super(TreatmentN1Wizard, self).get_form_initial(step) -        if step != 'resultingfind-treatment_creation_n1': +        if step != "resultingfind-treatment_creation_n1":              return initial          finds = self.get_current_finds()          if not finds:              return initial -        simple_key = ['material_type_quality'] -        multi_key = ['material_type', 'object_type', 'communicabilitie'] -        numeric_key = ['find_number', 'min_number_of_individuals'] -        desc_key = ['decoration', 'inscription', 'comment', 'dating_comment'] -        char_key = ['manufacturing_place'] +        simple_key = ["material_type_quality"] +        multi_key = ["material_type", "object_type", "communicabilitie"] +        numeric_key = ["find_number", "min_number_of_individuals"] +        desc_key = ["decoration", "inscription", "comment", "dating_comment"] +        char_key = ["manufacturing_place"]          for k in simple_key + numeric_key + desc_key + char_key:              initial["resulting_" + k] = None @@ -292,20 +319,19 @@ class TreatmentN1Wizard(TreatmentBase):          for find in finds:              for k in simple_key: -                initial = self._update_simple_initial_from_finds( -                    initial, find, k) +                initial = self._update_simple_initial_from_finds(initial, find, k)              for k in multi_key: -                initial = self._update_multi_initial_from_finds( -                    initial, find, k) +                initial = self._update_multi_initial_from_finds(initial, find, k)              for k in numeric_key: -                initial = self._update_num_initial_from_finds( -                    initial, find, k) +                initial = self._update_num_initial_from_finds(initial, find, k)              for k in char_key:                  initial = self._update_char_initial_from_finds( -                    initial, find, k, sep=' ; ') +                    initial, find, k, sep=" ; " +                )              for k in desc_key:                  initial = self._update_char_initial_from_finds( -                    initial, find, k, sep='\n') +                    initial, find, k, sep="\n" +                )          for k in list(initial.keys()):              if initial[k] is None: @@ -316,16 +342,15 @@ class TreatmentN1Wizard(TreatmentBase):          """          Get items concerned by the treatment          """ -        dct = super(TreatmentN1Wizard, self).get_extra_model( -            dct, m2m, form_list) -        if 'resulting_pk' not in dct: +        dct = super(TreatmentN1Wizard, self).get_extra_model(dct, m2m, form_list) +        if "resulting_pk" not in dct:              return dct -        dct['upstream_items'] = [] +        dct["upstream_items"] = []          # manage upstream items -        pks = dct.pop('resulting_pk') -        if hasattr(pks, 'split'): -            pks = pks.split(',')  # string +        pks = dct.pop("resulting_pk") +        if hasattr(pks, "split"): +            pks = pks.split(",")  # string          for pk in pks:              if isinstance(pk, models.Find):                  find = pk @@ -334,60 +359,59 @@ class TreatmentN1Wizard(TreatmentBase):                      find = models.Find.objects.get(pk=pk)                  except models.Find.DoesNotExist:                      raise PermissionDenied -            dct['upstream_items'].append(find) +            dct["upstream_items"].append(find) -        for find in dct['upstream_items']: -            if 'own' in self.current_right \ -                    and not find.is_own(dct['history_modifier']): +        for find in dct["upstream_items"]: +            if "own" in self.current_right and not find.is_own(dct["history_modifier"]):                  raise PermissionDenied          # extract data of the new find -        dct['resulting_find'] = {} +        dct["resulting_find"] = {}          for k in list(dct.keys()): -            if k.startswith('resulting_') and k != "resulting_find": -                dct['resulting_find'][ -                    k[len('resulting_'):] -                ] = dct.pop(k) +            if k.startswith("resulting_") and k != "resulting_find": +                dct["resulting_find"][k[len("resulting_") :]] = dct.pop(k)          return dct  class Treatment1NWizard(TreatmentBase): -    saved_args = {"upstream_item": None, "resulting_finds": None, -                  "treatment_type_list": []} -    base_url = 'treatment_creation_1n' +    saved_args = { +        "upstream_item": None, +        "resulting_finds": None, +        "treatment_type_list": [], +    } +    base_url = "treatment_creation_1n"      redirect_url = "find_modification"      open_created_in_redirect = False      def get_form_kwargs(self, step, **kwargs):          kwargs = super(Treatment1NWizard, self).get_form_kwargs(step, **kwargs) -        if step != 'resultingfind-treatment_creation_1n': +        if step != "resultingfind-treatment_creation_1n":              return kwargs -        kwargs['user'] = self.request.user +        kwargs["user"] = self.request.user          return kwargs      def get_form_initial(self, step, data=None):          initial = super(Treatment1NWizard, self).get_form_initial(step) -        if step != 'resultingfinds-treatment_creation_1n': +        if step != "resultingfinds-treatment_creation_1n":              return initial          finds = self.get_current_finds()          if not finds:              return initial          lbl = finds[0].label -        initial['resultings_basket_name'] = str(_("Basket")) + " - " + lbl -        initial['resultings_label'] = lbl + "-" +        initial["resultings_basket_name"] = str(_("Basket")) + " - " + lbl +        initial["resultings_label"] = lbl + "-"          return initial      def get_extra_model(self, dct, m2m, form_list):          """          Get items concerned by the treatment          """ -        dct = super(Treatment1NWizard, self).get_extra_model( -            dct, m2m, form_list) -        if 'resulting_pk' not in dct: +        dct = super(Treatment1NWizard, self).get_extra_model(dct, m2m, form_list) +        if "resulting_pk" not in dct:              return dct          # manage upstream item -        pk = dct.pop('resulting_pk') +        pk = dct.pop("resulting_pk")          if isinstance(pk, models.Find):              find = pk          else: @@ -395,46 +419,61 @@ class Treatment1NWizard(TreatmentBase):                  find = models.Find.objects.get(pk=pk)              except models.Find.DoesNotExist:                  raise PermissionDenied -        dct['upstream_item'] = find +        dct["upstream_item"] = find -        if 'own' in self.current_right \ -                and not find.is_own(dct['history_modifier']): +        if "own" in self.current_right and not find.is_own(dct["history_modifier"]):              raise PermissionDenied          # extract attributes to generate the new find -        dct['resulting_finds'] = {} +        dct["resulting_finds"] = {}          for k in list(dct.keys()): -            if k.startswith('resultings_'): -                dct['resulting_finds'][ -                    k[len('resultings_'):] -                ] = dct.pop(k) +            if k.startswith("resultings_"): +                dct["resulting_finds"][k[len("resultings_") :]] = dct.pop(k)          messages.add_message( -            self.request, messages.INFO, -            str(_("The new basket: \"{}\" have been created with the " -                  "resulting items. This search have been pinned.") -                ).format(dct["resulting_finds"]["basket_name"]) +            self.request, +            messages.INFO, +            str( +                _( +                    'The new basket: "{}" have been created with the ' +                    "resulting items. This search have been pinned." +                ) +            ).format(dct["resulting_finds"]["basket_name"]),          )          self.request.session["pin-search-find"] = '{}="{}"'.format(              str(pgettext("key for text search", "basket")), -            dct["resulting_finds"]["basket_name"]) -        self.request.session['find'] = '' +            dct["resulting_finds"]["basket_name"], +        ) +        self.request.session["find"] = ""          return dct  class TreatmentDeletionWizard(DeletionWizard):      model = models.Treatment -    wizard_confirm = 'ishtar/wizard/wizard_treatement_deletion.html' -    fields = ['label', 'other_reference', 'year', 'index', -              'treatment_types', 'location', 'person', 'organization', -              'external_id', 'comment', 'description', -              'goal', 'start_date', 'end_date', 'container'] +    wizard_confirm = "ishtar/wizard/wizard_treatement_deletion.html" +    fields = [ +        "label", +        "other_reference", +        "year", +        "index", +        "treatment_types", +        "location", +        "person", +        "organization", +        "external_id", +        "comment", +        "description", +        "goal", +        "start_date", +        "end_date", +        "container", +    ]      redirect_url = "treatment_deletion"  class TreatmentAdministrativeActWizard(OperationAdministrativeActWizard):      model = models.Treatment -    current_obj_slug = 'administrativeacttreatment' -    ref_object_key = 'treatment' +    current_obj_slug = "administrativeacttreatment" +    ref_object_key = "treatment"      redirect_url = "treatment_admacttreatment_modification"      def get_reminder(self): @@ -455,7 +494,7 @@ class TreatmentFileSearch(SearchWizard):  class TreatmentFileWizard(Wizard):      model = models.TreatmentFile -    wizard_done_window = reverse_lazy('show-treatmentfile') +    wizard_done_window = reverse_lazy("show-treatmentfile")      redirect_url = "treatmentfile_modification" @@ -465,29 +504,40 @@ class TreatmentFileModificationWizard(TreatmentFileWizard):  class TreatmentFileDeletionWizard(MultipleDeletionWizard):      model = models.TreatmentFile -    fields = ['name', 'internal_reference', 'external_id', 'year', -              'index', 'type', 'in_charge', 'reception_date', -              'creation_date', 'end_date', 'comment'] +    fields = [ +        "name", +        "internal_reference", +        "external_id", +        "year", +        "index", +        "type", +        "in_charge", +        "reception_date", +        "creation_date", +        "end_date", +        "comment", +    ]      redirect_url = "treatmentfile_deletion" -class TreatmentFileAdministrativeActWizard( -        OperationAdministrativeActWizard): +class TreatmentFileAdministrativeActWizard(OperationAdministrativeActWizard):      model = models.TreatmentFile -    current_obj_slug = 'administrativeacttreatmentfile' -    ref_object_key = 'treatment_file' +    current_obj_slug = "administrativeacttreatmentfile" +    ref_object_key = "treatment_file"      redirect_url = "treatmentfle_admacttreatmentfle_modification"      def get_reminder(self): -        form_key = 'selec-' + self.url_name -        if self.url_name.endswith('_administrativeactop'): +        form_key = "selec-" + self.url_name +        if self.url_name.endswith("_administrativeactop"):              # modification and deletion are suffixed with '_modification'              # and '_deletion' so it is creation              pk = self.session_get_value(form_key, "pk")              try:                  return ( -                    (_("Treatment request"), -                     str(models.TreatmentFile.objects.get(pk=pk))), +                    ( +                        _("Treatment request"), +                        str(models.TreatmentFile.objects.get(pk=pk)), +                    ),                  )              except models.TreatmentFile.DoesNotExist:                  return @@ -497,15 +547,12 @@ class TreatmentFileAdministrativeActWizard(                  admin = AdministrativeAct.objects.get(pk=admin_id)                  if not admin.operation:                      return -                return ( -                    (_("Operation"), str(admin.operation)), -                ) +                return ((_("Operation"), str(admin.operation)),)              except AdministrativeAct.DoesNotExist:                  return -class TreatmentFileEditAdministrativeActWizard( -        TreatmentFileAdministrativeActWizard): +class TreatmentFileEditAdministrativeActWizard(TreatmentFileAdministrativeActWizard):      model = AdministrativeAct      edit = True @@ -519,25 +566,24 @@ class FindBasketSearch(SearchWizard):  class FindBasketWizard(Wizard):      model = models.FindBasket -    wizard_done_window = reverse_lazy('show-findbasket') +    wizard_done_window = reverse_lazy("show-findbasket")      redirect_url = "find_basket_modification"  class FindBasketEditWizard(FindBasketWizard):      edit = True -    alt_is_own_method = 'get_write_query_owns' +    alt_is_own_method = "get_write_query_owns"      def get_form_kwargs(self, step, **kwargs): -        kwargs = super(FindBasketEditWizard, self).get_form_kwargs( -            step, **kwargs) -        if step != 'basket-find_basket_modification': +        kwargs = super(FindBasketEditWizard, self).get_form_kwargs(step, **kwargs) +        if step != "basket-find_basket_modification":              return kwargs -        kwargs['basket_pk'] = self.get_current_object().pk -        kwargs['user'] = self.request.user +        kwargs["basket_pk"] = self.get_current_object().pk +        kwargs["user"] = self.request.user          return kwargs  class FindBasketDeletionWizard(DeletionWizard):      model = models.FindBasket      redirect_url = "find_basket_deletion" -    wizard_confirm = 'ishtar/wizard/wizard_findbasket_deletion.html' +    wizard_confirm = "ishtar/wizard/wizard_findbasket_deletion.html"  | 
