summaryrefslogtreecommitdiff
path: root/archaeological_operations/models.py
diff options
context:
space:
mode:
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
commitba337429e0f062195c23cf12950826ddf8eaf18a (patch)
treed9670b2cfda751566edb6cde81aedf81eb9fa6e8 /archaeological_operations/models.py
parentf02eaa8d0ab5a381b64b7108dc9f4a7c3ffdbcef (diff)
downloadIshtar-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.py29
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)