From 2c9c7956072021dc94424216df3c5c503412570c Mon Sep 17 00:00:00 2001 From: Cefin Date: Fri, 18 Feb 2022 15:36:17 +0100 Subject: File - Parcels - Modify: adapting conditions and tests for selection_form #5227 --- archaeological_files/tests.py | 24 ++++++++++++++++++------ archaeological_files/views.py | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 6 deletions(-) (limited to 'archaeological_files') diff --git a/archaeological_files/tests.py b/archaeological_files/tests.py index 2f8f1e158..1d54584da 100644 --- a/archaeological_files/tests.py +++ b/archaeological_files/tests.py @@ -542,8 +542,6 @@ class FileOperationTest(TestCase, OperationInitTest, FileInit): f"form-{idx}-DELETE": '', }) data.update({ - "_town": town_2.pk, - "_parcel_selection": "2013:XD:10", "form-0-pk": parcel_1.pk, "form-0-year": 2021, "form-0-section": "SCT1", @@ -575,16 +573,30 @@ class FileOperationTest(TestCase, OperationInitTest, FileInit): self.assertContains(response, "002") self.assertContains(response, "003") self.assertContains(response, "XXX") - self.assertContains(response, 2013) - self.assertContains(response, "XD") - self.assertContains(response, "10") parcels = Parcel.objects.all() - self.assertEqual(parcels.count(), 3) + self.assertEqual(parcels.count(), 2) deleted_parcel = Parcel.objects.filter(pk=parcel_1.pk) self.assertEqual(deleted_parcel.count(), 0) + data.update({ + "_town": town_2.pk, + "_parcel_selection": "2013:XD:10 to 20, YD:24", + }) + + post_response = c.post("/file-parcels-modify/" + str(self.item.pk) + "/", data) + response = c.get(reverse("file-parcels-modify", kwargs={"pk": self.item.pk})) + + self.assertContains(response, 2013) + self.assertContains(response, "XD") + self.assertContains(response, "YD") + self.assertContains(response, "24") + for i in range(10, 20): + self.assertContains(response, i) + parcels = Parcel.objects.all() + self.assertEqual(parcels.count(), 14) + def testFileAssociation(self): # parcel association diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 36bd6f79d..061085710 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -27,6 +27,7 @@ from django.views.generic.edit import UpdateView from django.shortcuts import redirect, render from django.urls import reverse from ishtar_common.utils import ugettext_lazy as _ +from archaeological_operations.utils import parse_parcels from ishtar_common.views import wizard_is_available from ishtar_common.views_item import get_item, show_item, revert_item, check_permission @@ -377,6 +378,46 @@ def file_modify_parcels(request, pk): new_data = {k: new_data[k][0] for k in new_data} # convert POST to classic dict new_data.update(data) formset = formset_class(new_data) + parcel_selection = new_data.get('_parcel_selection', None) + + if parcel_selection: + selected_town = new_data.get("_town") + _parcels = parse_parcels(parcel_selection) + existant_parcel = None + + for p in _parcels: + p_year = p["year"] + p_section = p["section"] + p_parcel_number = p["parcel_number"] + p_town = models.Town.objects.get(pk=int(selected_town)) + q = Parcel.objects.filter( + section=p_section, parcel_number=p_parcel_number, town=p_town, associated_file=file + ) + nb = q.count() + # parcels_who_cant_be_deleted = 0 + + if nb > 1: # if duplicates parcels, keep just one + while nb > 1: + for d in q: + d.delete() + nb -= 1 + elif nb == 1: + # parcels_who_cant_be_deleted += 1 + pass + else: + added_parcel = Parcel.objects.create( + section = p_section, + parcel_number = p_parcel_number, + town = p_town, + associated_file = file, + ) + if p_year: + added_parcel.year = p_year + added_parcel.save() + # if parcels_who_cant_be_deleted > 0: + # raise ValidationError(str(parcels_who_cant_be_deleted) + " parcels could not be created because there already exists.") + return redirect(reverse("operation-parcels-modify", args=[pk])) + if formset.is_valid(): for data in formset.cleaned_data: if (not data.get('parcel_number') or not data.get('section')) and \ -- cgit v1.2.3