diff options
Diffstat (limited to 'archaeological_operations')
-rw-r--r-- | archaeological_operations/models.py | 31 | ||||
-rw-r--r-- | archaeological_operations/wizards.py | 4 |
2 files changed, 34 insertions, 1 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 57f538383..293b1e933 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -2260,6 +2260,12 @@ def operation_post_save(sender, **kwargs): post_save_geo(sender=sender, **kwargs) operation = kwargs["instance"] + + # on creation associate parcel from a file if the file exist + if kwargs.get("created", False) and operation.associated_file: + for parcel in operation.associated_file.parcels.all(): + parcel.copy_from_file_to_operation(operation) + operation.skip_history_when_saving = True if operation.fnap_financing and operation.cost: fnap_cost = int(float(operation.cost) / 100 * operation.fnap_financing) @@ -3194,6 +3200,31 @@ class Parcel(LightHistorizedItem): self.operation = None self.save() + def copy_from_file_to_operation(self, operation): + """ + Used to copy parcel from file on operation creation + """ + if not self.associated_file: + return + keys = { + "town": self.town, + "section": self.section, + "parcel_number": self.parcel_number, + "operation": operation, + "associated_file": None, + "defaults": {"address": self.address, "year": self.year}, + } + new_p, created = Parcel.objects.get_or_create(**keys) + # copy owning only if created + if created: + for owning in self.owners.all(): + ParcelOwner.objects.create( + owner=owning.owner, + parcel=new_p, + start_date=owning.start_date, + end_date=owning.end_date, + ) + def clean_orphan(self): """ Remove when the parcel is linked to nothing diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py index 44b3988eb..cafb7598b 100644 --- a/archaeological_operations/wizards.py +++ b/archaeological_operations/wizards.py @@ -138,7 +138,7 @@ class OperationWizard(Wizard): Show a specific warning if no archaeological file is provided """ datas = super(OperationWizard, self).get_formated_datas(forms) - # if the general town form is used the advertissement is relevant + # if the general town form is used the advertisement is relevant has_no_af = [ form.prefix for form in forms if form.prefix == "townsgeneral-operation" ] and True @@ -186,6 +186,8 @@ class OperationWizard(Wizard): (("total_surface",), "surface"), ) initial.update(self.__copy_fields(file, keys)) + if "town" not in initial: + initial["town"] = [idx for idx, __ in self.get_towns()] if file.is_preventive(): return initial keys = ( |