diff options
| author | Étienne Loks <etienne.loks@proxience.com> | 2015-07-07 01:46:08 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@proxience.com> | 2015-07-07 01:46:08 +0200 | 
| commit | ed1a90e62ab9c4a4dda8ee9b0eeb4431db299081 (patch) | |
| tree | 0ebf696b91b46b631a64ef9f9fa1276d4364a8ba | |
| parent | c1af8517f3758694069df23448f22633ffb0d352 (diff) | |
| parent | a71e40bb7463bcaf549281cd200e7a06ee41d709 (diff) | |
| download | Ishtar-ed1a90e62ab9c4a4dda8ee9b0eeb4431db299081.tar.bz2 Ishtar-ed1a90e62ab9c4a4dda8ee9b0eeb4431db299081.zip | |
Merge branch 'stable'
| -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 bd41384e6..575f2d640 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -435,6 +435,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) @@ -704,6 +722,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'), @@ -776,7 +817,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")) | 
