diff options
Diffstat (limited to 'archaeological_files/views.py')
-rw-r--r-- | archaeological_files/views.py | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 58454092f..36bd6f79d 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -57,7 +57,7 @@ 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 RE_YEAR_INDEX = re.compile(r"([1-2][0-9]{3})-([0-9]+)") # eg.: 2014-123 @@ -373,7 +373,52 @@ def file_modify_parcels(request, pk): } if request.method == 'POST': - pass + 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) + 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_to_add = 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) |