summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_operations/models.py44
1 files changed, 43 insertions, 1 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 922c51271..3c796a169 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -428,6 +428,24 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,
# put a default year if start_date is defined
if self.start_date and not self.year:
self.year = self.start_date.year
+ # manage parcel association
+ if FILES_AVAILABLE and self.associated_file:
+ for parcel in self.associated_file.parcels.exclude(
+ operation=self).all():
+ parcel.operation = self
+ parcel.save()
+ for parcel in self.parcels.exclude(
+ associated_file=self.associated_file).all():
+ parcel.associated_file = self.associated_file
+ parcel.save()
+ parcels = {}
+ for parcel in self.parcels.all():
+ keys = (parcel.town, parcel.section, parcel.parcel_number)
+ if keys in parcels.keys():
+ parcel.merge(parcels[keys])
+ else:
+ parcels[keys] = parcel
+
return super(Operation, self).save(*args, **kwargs)
m2m_changed.connect(cached_label_changed, sender=Operation.towns.through)
@@ -696,6 +714,29 @@ class Parcel(LightHistorizedItem):
def __unicode__(self):
return self.short_label
+ def merge(self, parcel):
+ # cannot automatically merge
+ if self.address and parcel.address and self.address != parcel.address:
+ return
+ if self.external_id and parcel.external_id and \
+ self.external_id != parcel.external_id:
+ return
+ if self.year and parcel.year and \
+ self.year != parcel.year:
+ return
+ self.address = self.address or parcel.address
+ self.external_id = self.external_id or parcel.external_id
+ self.year = self.year or parcel.year
+ self.save()
+ for owner in parcel.owners.all():
+ owner.parcel = self
+ owner.save()
+ if hasattr(parcel, 'context_record'):
+ for cr in parcel.context_record.all():
+ cr.parcel = self
+ cr.save()
+ parcel.delete()
+
@classmethod
def grouped_parcels(cls, parcels):
sortkeyfn = lambda s:(getattr(s, 'town_id'),
@@ -768,7 +809,8 @@ post_save.connect(parcel_post_save, sender=Parcel)
class ParcelOwner(LightHistorizedItem):
owner = models.ForeignKey(Person, verbose_name=_(u"Owner"),
related_name="parcel_owner")
- parcel = models.ForeignKey(Parcel, verbose_name=_(u"Parcel"))
+ parcel = models.ForeignKey(Parcel, verbose_name=_(u"Parcel"),
+ related_name='owners')
start_date = models.DateField(_(u"Start date"))
end_date = models.DateField(_(u"End date"))