summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse/models.py')
-rw-r--r--archaeological_warehouse/models.py34
1 files changed, 33 insertions, 1 deletions
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 038910d17..81660bf43 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -27,7 +27,7 @@ from django.utils.translation import ugettext_lazy as _, ugettext
from ishtar_common.utils import cached_label_changed
-from ishtar_common.models import GeneralType, \
+from ishtar_common.models import GeneralType, get_external_id, \
LightHistorizedItem, OwnPerms, Address, Person, post_save_cache
@@ -53,6 +53,9 @@ class Warehouse(Address, OwnPerms):
'WarehouseDivision', verbose_name=_("Divisions"), blank=True,
through='WarehouseDivisionLink'
)
+ external_id = models.TextField(_(u"External ID"), blank=True, null=True)
+ auto_external_id = models.BooleanField(
+ _(u"External ID is set automatically"), default=False)
TABLE_COLS = ['name', 'warehouse_type']
@@ -80,6 +83,18 @@ class Warehouse(Address, OwnPerms):
for container in self.containers.all():
cached_label_changed(Container, instance=container)
+ self.skip_history_when_saving = True
+ if not self.external_id or self.auto_external_id:
+ external_id = get_external_id('warehouse_external_id', self)
+ if external_id != self.external_id:
+ updated = True
+ self.auto_external_id = True
+ self.external_id = external_id
+
+ self._cached_label_checked = False
+ self.save()
+ return
+
class Collection(LightHistorizedItem):
name = models.CharField(_(u"Name"), max_length=200,
@@ -168,6 +183,9 @@ class Container(LightHistorizedItem):
cached_location = models.CharField(_(u"Cached location"), max_length=500,
null=True, blank=True)
index = models.IntegerField(u"Index", default=0)
+ external_id = models.TextField(_(u"External ID"), blank=True, null=True)
+ auto_external_id = models.BooleanField(
+ _(u"External ID is set automatically"), default=False)
class Meta:
verbose_name = _(u"Container")
@@ -223,6 +241,7 @@ class Container(LightHistorizedItem):
def save(self, *args, **kwargs):
super(Container, self).save(*args, **kwargs)
+ updated = False
if not self.index:
self.skip_history_when_saving = True
q = Container.objects.filter(responsible=self.responsible).order_by(
@@ -231,8 +250,21 @@ class Container(LightHistorizedItem):
self.index = q.all()[0].index + 1
else:
self.index = 1
+ updated = True
+
+ self.skip_history_when_saving = True
+ if not self.external_id or self.auto_external_id:
+ external_id = get_external_id('container_external_id', self)
+ if external_id != self.external_id:
+ updated = True
+ self.auto_external_id = True
+ self.external_id = external_id
+
+ if updated:
self._cached_label_checked = False
self.save()
+ return
+
# remove old location in warehouse
q = ContainerLocalisation.objects.filter(container=self).exclude(
division__warehouse=self.location)