diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-11-16 17:56:34 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:23:19 +0100 |
commit | b46aa637fa1018a151f623138c94e145efa8288c (patch) | |
tree | 00066ed170255d1adb18de7de2d368772600b202 /archaeological_files | |
parent | cbf4b6cfba17564c169cbacd4dbd6fcaeb5ef319 (diff) | |
download | Ishtar-b46aa637fa1018a151f623138c94e145efa8288c.tar.bz2 Ishtar-b46aa637fa1018a151f623138c94e145efa8288c.zip |
Refactor and improve parcel for operation and file
Diffstat (limited to 'archaeological_files')
-rw-r--r-- | archaeological_files/views.py | 133 |
1 files changed, 6 insertions, 127 deletions
diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 5988ba1c0..117f9849c 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -27,7 +27,6 @@ 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, OrganizationPersonCreate, \ OrganizationPersonEdit @@ -51,15 +50,13 @@ from archaeological_files.wizards import ( ) from ishtar_common.views import IshtarMixin, LoginRequiredMixin from archaeological_operations.wizards import OperationWizard -from archaeological_operations.views import operation_creation_wizard +from archaeological_operations.views import operation_creation_wizard, get_parcel_modify -from archaeological_operations.forms import FinalAdministrativeActDeleteForm, \ - SelectedParcelGeneralFormSet +from archaeological_operations.forms import FinalAdministrativeActDeleteForm from ishtar_common.forms import ClosingDateFormSelection from . import forms, models -from archaeological_operations.models import Operation, AdministrativeAct, Parcel -from archaeological_context_records.models import ContextRecord +from archaeological_operations.models import Operation, AdministrativeAct RE_YEAR_INDEX = re.compile(r"([1-2][0-9]{3})-([0-9]+)") # eg.: 2014-123 @@ -387,127 +384,9 @@ def file_add_operation(request, pk, current_right=None): PARCEL_FORMSET_EXTRA_FORM = 3 -def file_modify_parcels(request, pk): - formset_class = SelectedParcelGeneralFormSet - file = models.File.objects.get(pk=pk) - parcels = Parcel.objects.filter(associated_file=pk).all() - available_towns = [(town.pk, str(town)) for town in file.towns.all()] - - initial = [] - for parcel in parcels: - town = models.Town.objects.get(pk=parcel.town_id) - available_towns.append((town.pk, str(town))) - initial.append({ - "pk": parcel.pk, - "town": town.pk, - "year": parcel.year, - "section": parcel.section, - "parcel_number": parcel.parcel_number, - "public_domain": parcel.public_domain - }) - - data = { - 'TOWNS': available_towns, - 'form-TOTAL_FORMS': len(initial) + PARCEL_FORMSET_EXTRA_FORM, - 'form-INITIAL_FORMS': 0, - 'form-MIN_NUM_FORMS': 0, - 'form-MAX_NUM_FORMS': 100, - } - - if request.method == 'POST': - new_data = dict(request.POST) - 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) - - 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("file-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 \ - not data.get('public_domain'): - continue - - current_parcel = None - if data.get("pk"): - try: - current_parcel = Parcel.objects.get(pk=data.get("pk")) - except Parcel.DoesNotExist: - pass - - if current_parcel: - not_deleted_or_associated = True - for key, value in data.items(): - - if key == "DELETE" and value is True: - parcel_associated_by_context_record = ContextRecord.objects.filter(parcel=current_parcel.pk).all() - if parcel_associated_by_context_record.count() > 0: - raise ValidationError("This parcel is associated with a context record. It can't be deleted.") - else: - current_parcel.delete() - not_deleted_or_associated = False - - if not_deleted_or_associated: - current_parcel.year = data.get("year") - current_parcel.section = data.get("section") - current_parcel.parcel_number = data.get("parcel_number") - current_parcel.town = models.Town.objects.get(pk=int(data.get("town"))) - current_parcel.public_domain = data.get("public_domain") - current_parcel.save() - else: - Parcel.objects.create( - year=data.get("year"), - section=data.get("section"), - parcel_number=data.get("parcel_number"), - town=models.Town.objects.get(pk=int(data.get("town"))), - public_domain=data.get("public_domain"), - associated_file=file, - ) - return redirect(reverse("file-parcels-modify", args=[pk])) - else: - formset = formset_class(initial=initial, data=data) - - return render(request, 'ishtar/forms/modify_parcels.html', { - 'formset': formset, - "url": reverse("file-parcels-modify", args=[pk]), - }) +file_modify_parcels = get_parcel_modify( + models.File, "associated_file", "file-parcels-modify" +) def reset_wizards(request): |