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