diff options
Diffstat (limited to 'archaeological_operations')
-rw-r--r-- | archaeological_operations/forms.py | 3 | ||||
-rw-r--r-- | archaeological_operations/models.py | 19 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 29 |
3 files changed, 33 insertions, 18 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] |