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 f13ee4ca9..3011d8076 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -458,17 +458,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): @@ -790,12 +780,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 \ @@ -808,11 +845,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): | 
