diff options
| author | Cefin <kevon@tuta.io> | 2022-02-18 15:36:17 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:21:00 +0100 | 
| commit | 2c9c7956072021dc94424216df3c5c503412570c (patch) | |
| tree | febae59af1c4fdb999383d5ccaf366ee9afb171b | |
| parent | eb43d8ff163d347c7ac29a44a1a467a9925aba22 (diff) | |
| download | Ishtar-2c9c7956072021dc94424216df3c5c503412570c.tar.bz2 Ishtar-2c9c7956072021dc94424216df3c5c503412570c.zip  | |
File - Parcels - Modify: adapting conditions and tests for selection_form #5227
| -rw-r--r-- | archaeological_files/tests.py | 24 | ||||
| -rw-r--r-- | archaeological_files/views.py | 41 | 
2 files changed, 59 insertions, 6 deletions
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 \  | 
