summaryrefslogtreecommitdiff
path: root/archaeological_operations/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r--archaeological_operations/models.py68
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):