summaryrefslogtreecommitdiff
path: root/archaeological_files/views.py
diff options
context:
space:
mode:
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
commitb46aa637fa1018a151f623138c94e145efa8288c (patch)
tree00066ed170255d1adb18de7de2d368772600b202 /archaeological_files/views.py
parentcbf4b6cfba17564c169cbacd4dbd6fcaeb5ef319 (diff)
downloadIshtar-b46aa637fa1018a151f623138c94e145efa8288c.tar.bz2
Ishtar-b46aa637fa1018a151f623138c94e145efa8288c.zip
Refactor and improve parcel for operation and file
Diffstat (limited to 'archaeological_files/views.py')
-rw-r--r--archaeological_files/views.py133
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):