diff options
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r-- | archaeological_operations/models.py | 44 |
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")) |