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) | 
