diff options
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r-- | archaeological_operations/models.py | 68 |
1 files changed, 51 insertions, 17 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index e76de8dd9..fb8cd722b 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -451,17 +451,7 @@ def operation_post_save(sender, **kwargs): # manage parcel association if FILES_AVAILABLE and operation.associated_file: for parcel in operation.parcels.all(): - keys = {'town':parcel.town, 'section':parcel.section, - 'parcel_number':parcel.parcel_number} - if not operation.associated_file.parcels.filter(**keys).count(): - keys['address'] = parcel.address - keys['year'] = parcel.year - keys['associated_file'] = operation.associated_file - new_p = Parcel.objects.create(**keys) - for owning in parcel.owners.all(): - ParcelOwner.objects.create(owner=owning.owner, - parcel=new_p, start_date=owning.start_date, - end_date=owning.end_date) + parcel.copy_to_file() post_save.connect(operation_post_save, sender=Operation) class OperationByDepartment(models.Model): @@ -782,12 +772,59 @@ class Parcel(LightHistorizedItem): if item] return settings.JOINT.join(items) + def copy_to_file(self): + """ + Copy from operation to file when associating file to operation + """ + if not self.operation or not self.operation.associated_file: + # not concerned + return + keys = {'town':self.town, 'section':self.section, + 'parcel_number':self.parcel_number} + if self.operation.associated_file.parcels.filter(**keys).count(): + # everything is OK + return + keys['address'] = self.address + keys['year'] = self.year + keys['associated_file'] = self.operation.associated_file + new_p = Parcel.objects.create(**keys) + # also copy owning + 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 copy_to_operation(self): + """ + Parcel cannot have operation and associated_file but on + new parcel association a copy have to be done before cleaning + """ + if not (self.operation and self.associated_file): + # everything is OK + return + keys = {'town':self.town, 'section':self.section, + 'parcel_number':self.parcel_number, + 'operation':self.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) + self.operation = None + self.save() + def parcel_post_save(sender, **kwargs): if not kwargs['instance']: return parcel = kwargs['instance'] if not parcel.external_id and (parcel.section or parcel.parcel_number): - parcel.external_id = (parcel.section or "") + (parcel.parcel_number or "") + parcel.external_id = unicode(parcel.section or "") + \ + unicode(parcel.parcel_number or "") parcel.save() return if parcel.operation and parcel.operation.pk and \ @@ -800,11 +837,8 @@ def parcel_post_save(sender, **kwargs): if not FILES_AVAILABLE: return if parcel.operation and parcel.associated_file: - return - if parcel.operation and parcel.operation.associated_file: - parcel.associated_file = parcel.operation.associated_file - parcel.save() - return + # parcels are copied between files and operations + parcel.copy_to_operation() post_save.connect(parcel_post_save, sender=Parcel) class ParcelOwner(LightHistorizedItem): |