diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-01-27 13:24:25 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-02-28 12:15:24 +0100 | 
| commit | f53b0fec14bc4a5aef2527bc70597fa112fdda43 (patch) | |
| tree | eb0e09d72e58d4cd71e363ad22a6c2a7c7fe1abc | |
| parent | 53036766f9968fa9be995efe53ad3e3f802ec38f (diff) | |
| download | Ishtar-f53b0fec14bc4a5aef2527bc70597fa112fdda43.tar.bz2 Ishtar-f53b0fec14bc4a5aef2527bc70597fa112fdda43.zip | |
Operation parcel: fix add/modification
| -rw-r--r-- | archaeological_operations/forms.py | 3 | ||||
| -rw-r--r-- | archaeological_operations/models.py | 19 | ||||
| -rw-r--r-- | archaeological_operations/tests.py | 29 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/wizard/parcels_wizard.html | 4 | 
4 files changed, 35 insertions, 20 deletions
| diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 98f263ab6..3714b2e6a 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -67,6 +67,7 @@ class ParcelForm(IshtarForm):      form_label = _("Parcels")      base_model = 'parcel'      associated_models = {'parcel': models.Parcel, 'town': models.Town, } +    pk = forms.IntegerField(required=False, widget=forms.HiddenInput)      town = forms.ChoiceField(label=_("Town"), choices=(), required=False,                               validators=[valid_id(models.Town)])      year = forms.IntegerField(label=_("Year"), required=False, @@ -361,7 +362,7 @@ class ParcelFormSet(FormSet):              self.management_form.is_valid()          # Checks that no parcels are duplicated.          self.check_duplicate(('town', 'section', 'parcel_number', -                             'year'), _(u"There are identical parcels.")) +                             'year'), _("There are identical parcels."))          if hasattr(self, 'cleaned_data') and self.cleaned_data:              return self.cleaned_data diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 246934d91..0c4f6330b 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -685,16 +685,16 @@ class ClosedItem(object):  class ParcelItem:      def clean_parcel_duplicates(self): -        parcels = [] +        parcels = {}          for p in self.parcels.order_by('pk').all():              if p.associated_file:                  continue              key = (p.section, p.parcel_number, p.year, p.town.pk,                     p.public_domain)              if key in parcels: -                p.delete() +                parcels[key].merge(p)              else: -                parcels.append(key) +                parcels[key] = p  class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, @@ -1399,10 +1399,10 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem,          return self.towns.values('numero_insee').all()[0]['numero_insee'][:2]      def grouped_parcels(self): -        return Parcel.grouped_parcels(list(self.parcels.all())) +        return Parcel.grouped_parcels(list(self.parcels.distinct().all()))      def render_parcels(self): -        return Parcel.render_parcels(list(self.parcels.all())) +        return Parcel.render_parcels(list(self.parcels.distinct().all()))      def get_town_centroid(self):          q = self.towns.filter(center__isnull=False).annotate( @@ -2511,8 +2511,11 @@ class Parcel(LightHistorizedItem):                      grouped[-1].parcel_numbers = []                  nb = ""                  if parcel.parcel_number: -                    nb = "0" * (12 - len(parcel.parcel_number)) + \ -                        parcel.parcel_number +                    if parcel.parcel_number == "0": +                        nb = "0" +                    else: +                        nb = "0" * (12 - len(parcel.parcel_number)) + \ +                            parcel.parcel_number                  if parcel.public_domain:                      if nb:                          nb += " " @@ -2542,7 +2545,7 @@ class Parcel(LightHistorizedItem):              res += parcels.section + ' '              res += ", ".join(parcels.parcel_numbers)              if parcels.year: -                res += " (%s)" % str(parcels.year) +                res += " ({})".format(parcels.year)          return res      def long_label(self): diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index 67f4484e2..7ff7d87ac 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -2806,7 +2806,7 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):              error_expected='general'          ),          FormData( -            "Operation: add a parcel", +            "Operation: change a parcel",              form_datas={                  'selec': {},                  'general': { @@ -2870,18 +2870,19 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):          for idx in range(0, 5):              for t in towns:                  self.form_datas[idx].append('townsgeneral', t) -            self.form_datas[idx].append('parcelsgeneral', parcel_data) - -        p = parcel_data.copy() -        p['parcel_number'] = '43' -        self.form_datas[4].append('parcelsgeneral', p) +            if idx != 4: +                self.form_datas[idx].append('parcelsgeneral', parcel_data)          parcel_data_2 = {              'town': init_parcel.town.pk, 'year': init_parcel.year or '',              'section': init_parcel.section, +            'pk': init_parcel.pk,              'parcel_number': init_parcel.parcel_number}          data['parcelsgeneral'].append(parcel_data_2) -        # no init parcel for data2 and data3 + +        p = parcel_data.copy() +        p['parcel_number'] = '43' +        self.form_datas[4].form_datas['parcelsgeneral'] = [p]          self.operation_number = models.Operation.objects.count()          self.parcel_number = models.Parcel.objects.count() @@ -2899,6 +2900,11 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):              test_object.assertEqual(operation.parcels.count(),                                      test_object.parcel_number + 1) +        def pre_second_wizard(test_object): +            test_object.form_datas[1].form_datas[ +                      'parcelsgeneral-operation_modification'][0]["pk"] = \ +                models.Parcel.objects.get(parcel_number="42").pk +          def post_second_wizard(test_object, final_step_response):              test_object.assertEqual(models.Operation.objects.count(),                                      test_object.operation_number) @@ -2909,6 +2915,7 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):              test_object.assertEqual(operation.year, 2017)              test_object.assertEqual(models.Parcel.objects.count(),                                      test_object.parcel_number + 1) +              # the init parcel is not submited but have a context record              # the init parcel is not detached from the operation              test_object.assertEqual(operation.parcels.count(), @@ -2944,6 +2951,9 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):              operation = models.Operation.objects.get(                  pk=test_object.operations[0].pk)              test_object.operation_parcel_number = operation.parcels.count() +            test_object.form_datas[4].form_datas[ +                'parcelsgeneral-operation_modification'][0]["pk"] = \ +                models.Parcel.objects.get(parcel_number="42").pk          def post_fifth_wizard(test_object, final_step_response):              test_object.assertEqual(models.Operation.objects.count(), @@ -2951,11 +2961,12 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):              operation = models.Operation.objects.get(                  pk=test_object.operations[0].pk)              test_object.assertEqual(models.Parcel.objects.count(), -                                    test_object.parcel_number + 1) +                                    test_object.parcel_number)              test_object.assertEqual(operation.parcels.count(), -                                    test_object.operation_parcel_number + 1) +                                    test_object.operation_parcel_number)          self.form_datas[0].extra_tests = [post_first_wizard] +        self.form_datas[1].pre_tests = [pre_second_wizard]          self.form_datas[1].extra_tests = [post_second_wizard]          self.form_datas[2].pre_tests = [pre_third_wizard]          self.form_datas[2].extra_tests = [post_third_wizard] diff --git a/ishtar_common/templates/ishtar/wizard/parcels_wizard.html b/ishtar_common/templates/ishtar/wizard/parcels_wizard.html index d8c902c72..93addd7a2 100644 --- a/ishtar_common/templates/ishtar/wizard/parcels_wizard.html +++ b/ishtar_common/templates/ishtar/wizard/parcels_wizard.html @@ -23,8 +23,8 @@  <table class='inline-table' id='parcel-table'>    <tr>{% for field in wizard.form.forms.0 %} -    {% if field.required %}<th{%else%}<td{% endif %}{% if not forloop.last %} rowspan='2'{% endif %}> -    {{ field.label_tag }}{% if field.required %}</th>{%else%}</td>{% endif %}{% endfor %} +    {% if field.name != 'pk' %}{% if field.required %}<th{%else%}<td{% endif %}{% if not forloop.last %} rowspan='2'{% endif %}> +    {{ field.label_tag }}{% if field.required %}</th>{%else%}</td>{% endif %}{% endif %}{% endfor %}    </tr>    <tr><td>({% trans "all"%} <input type='checkbox' name='check-all' class='check-all'/>)</td></tr>    {% inline_formset 'Parcels' wizard.form.forms False %} | 
