diff options
Diffstat (limited to 'archaeological_warehouse/models.py')
| -rw-r--r-- | archaeological_warehouse/models.py | 39 | 
1 files changed, 24 insertions, 15 deletions
| diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 5cadc46da..6341db8b8 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -380,6 +380,7 @@ class WarehouseDivisionLinkManager(models.Manager):                          container_type__txt_idx=container_type) +  class ContainerType(GeneralType):      stationary = models.BooleanField(          _("Stationary"), default=False, @@ -426,6 +427,7 @@ class WarehouseDivisionLink(models.Model):          return self.warehouse.uuid, self.container_type.txt_idx +  class ContainerTree(models.Model):      CREATE_SQL = """      CREATE VIEW containers_tree AS @@ -739,6 +741,7 @@ class Container(DocumentItem, Merge, LightHistorizedItem, QRCodeItem, GeoItem,      DISABLE_POLYGONS = False      MERGE_ATTRIBUTE = "get_cached_division" +    MERGE_STRING_FIELDS = ["old_reference"]      class Meta:          verbose_name = _("Container") @@ -810,19 +813,24 @@ class Container(DocumentItem, Merge, LightHistorizedItem, QRCodeItem, GeoItem,      def _get_base_image_path(self):          return self.location._get_base_image_path() + "/" + self.external_id -    def merge(self, item, keep_old=False): -        # TODO: change localisation management -        locas = [ -            cl.division.division.txt_idx -            for cl in ContainerLocalisation.objects.filter(container=self).all() -        ] -        for loca in ContainerLocalisation.objects.filter(container=item).all(): -            if loca.division.division.txt_idx not in locas: -                loca.container = self -                loca.save() +    def merge(self, item, keep_old=False, exclude_fields=None): +        # merge child containers +        child_references = {} +        for child in Container.objects.filter(parent=self).all(): +            key = (child.reference, child.container_type.pk) +            child_references[key] = child +        for child in Container.objects.filter(parent=item).all(): +            key = (child.reference, child.container_type.pk) +            if key in child_references.keys(): +                # parent field can cause integrity error before the end of +                # the merge +                child_references[key].index = None +                child_references[key].merge(child, exclude_fields=["parent"])              else: -                loca.delete() -        super(Container, self).merge(item, keep_old=keep_old) +                child.parent = self +                child.save() +        super(Container, self).merge(item, keep_old=keep_old, +                                     exclude_fields=exclude_fields)      @classmethod      def get_query_owns(cls, ishtaruser): @@ -1176,10 +1184,10 @@ m2m_changed.connect(document_attached_changed,  class ContainerLocalisationManager(models.Manager):      #TODO: to be deleted.... -    def get_by_natural_key(self, container, warehouse, division): +    def get_by_natural_key(self, container, warehouse, container_type):          return self.get(container__uuid=container,                          division__warehouse__uuid=warehouse, -                        division__division__txt_idx=division) +                        division__container_type__txt_idx=container_type)  class ContainerLocalisation(models.Model): @@ -1190,6 +1198,7 @@ class ContainerLocalisation(models.Model):                                   verbose_name=_("Division"))      reference = models.CharField(_("Reference"), max_length=200, default='')      objects = ContainerLocalisationManager() +    TO_BE_DELETED = True      class Meta:          verbose_name = _("Container localisation") @@ -1204,7 +1213,7 @@ class ContainerLocalisation(models.Model):      def natural_key(self):          return self.container.uuid, self.division.warehouse.uuid,\ -               self.division.division.txt_idx +               self.division.container_type.txt_idx      def save(self, *args, **kwargs):          super(ContainerLocalisation, self).save(*args, **kwargs) | 
