diff options
Diffstat (limited to 'archaeological_warehouse/models.py')
-rw-r--r-- | archaeological_warehouse/models.py | 34 |
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) |