diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-23 13:30:02 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-23 13:30:02 +0100 |
commit | ba337429e0f062195c23cf12950826ddf8eaf18a (patch) | |
tree | d9670b2cfda751566edb6cde81aedf81eb9fa6e8 /archaeological_operations/models.py | |
parent | f02eaa8d0ab5a381b64b7108dc9f4a7c3ffdbcef (diff) | |
download | Ishtar-ba337429e0f062195c23cf12950826ddf8eaf18a.tar.bz2 Ishtar-ba337429e0f062195c23cf12950826ddf8eaf18a.zip |
Parcels: on associated operation or file detachment remove the parcel
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r-- | archaeological_operations/models.py | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index c8c291752..4a900c276 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -557,14 +557,6 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms, def is_active(self): return not bool(self.end_date) - def save(self, *args, **kwargs): - # put a default year if start_date is defined - if self.start_date and not self.year: - self.year = self.start_date.year - if self.operation_code is None: - self.operation_code = self.get_available_operation_code(self.year) - return super(Operation, self).save(*args, **kwargs) - @property def nb_parcels(self): _(u"Number of parcels") @@ -767,6 +759,14 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms, res['mode'] = u" ; ".join([str(m) for m in mode(finds)]) return res + def save(self, *args, **kwargs): + # put a default year if start_date is defined + if self.start_date and not self.year: + self.year = self.start_date.year + if self.operation_code is None: + self.operation_code = self.get_available_operation_code(self.year) + return super(Operation, self).save(*args, **kwargs) + m2m_changed.connect(cached_label_changed, sender=Operation.towns.through) @@ -1193,10 +1193,10 @@ class Parcel(LightHistorizedItem): associated_file = models.ForeignKey( 'archaeological_files.File', related_name='parcels', verbose_name=_(u"File"), - blank=True, null=True) + blank=True, null=True, on_delete=models.CASCADE) operation = models.ForeignKey( Operation, related_name='parcels', blank=True, null=True, - verbose_name=_(u"Operation")) + verbose_name=_(u"Operation"), on_delete=models.CASCADE) year = models.IntegerField(_(u"Year"), blank=True, null=True) town = models.ForeignKey(Town, related_name='parcels', verbose_name=_(u"Town")) @@ -1356,6 +1356,13 @@ def parcel_post_save(sender, **kwargs): if not kwargs['instance']: return parcel = kwargs['instance'] + created = kwargs.get('created', None) + + # remove when the parcel is linked to nothing + if not getattr(parcel, '_updated_id', None) and not created and not \ + parcel.operation and not parcel.associated_file: + parcel.delete() + return updated = False if not parcel.external_id or parcel.auto_external_id: @@ -1365,6 +1372,7 @@ def parcel_post_save(sender, **kwargs): parcel.auto_external_id = True parcel.external_id = external_id if updated: + parcel._updated_id = True parcel.save() return @@ -1378,6 +1386,7 @@ def parcel_post_save(sender, **kwargs): if parcel.operation and parcel.associated_file: # parcels are copied between files and operations parcel.copy_to_operation() + post_save.connect(parcel_post_save, sender=Parcel) |