summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/models_finds.py12
-rw-r--r--archaeological_warehouse/models.py39
2 files changed, 49 insertions, 2 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 4bf6778fd..0d7ee8b71 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -3398,7 +3398,7 @@ class Find(
set_static_localisation_9.post_save = True
- def update_current_full_location(self, full_location=None):
+ def update_current_full_location(self, full_location=None, return_value=False):
"""
If relevant update full location of current container
:param full_location: provided if update is triggered from container
@@ -3412,14 +3412,18 @@ class Find(
full_location = self.container.generate_full_location()
if full_location == self.container_fisrt_full_location:
return False
+ if return_value:
+ return full_location
self.container_fisrt_full_location = full_location
else:
if self.container_fisrt_full_location == "":
return False
+ if return_value:
+ return ""
self.container_fisrt_full_location = ""
return True
- def update_ref_full_location(self, full_location=None):
+ def update_ref_full_location(self, full_location=None, return_value=False):
"""
If relevant update full location of reference container
:param full_location: provided if update is triggered from container
@@ -3433,10 +3437,14 @@ class Find(
full_location = self.container_ref.generate_full_location()
if full_location == self.container_ref_fisrt_full_location:
return False
+ if return_value:
+ return full_location
self.container_ref_fisrt_full_location = full_location
else:
if self.container_ref_fisrt_full_location == "":
return False
+ if return_value:
+ return ""
self.container_ref_fisrt_full_location = ""
return True
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 8c9a94f06..193d8d15a 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -2027,9 +2027,44 @@ class Container(
q.update(cached_division="")
return ((self.__class__, q.values_list("id", flat=True)),)
+ def _update_childs_divisions(self):
+ Find = apps.get_model("archaeological_finds", "Find")
+ q = Container.objects.filter(parent_id=self.id)
+ for child in q.all():
+ self.update_weight()
+ cached_division = child._generate_cached_division()
+ cached_label = child._generate_cached_label()
+ cached_weight = child._generate_cached_weight()
+ Container.objects.filter(pk=child.pk).update(
+ cached_division=cached_division,
+ cached_label=cached_label,
+ cached_weight=cached_weight
+ )
+ child._update_childs_divisions()
+
+ # update location of associated find
+ full_location = self.generate_full_location()
+ # TODO update last treatment?
+ # warning - if a new treatment is created via move container
+ # it will be created after this is triggered... not eady to manage...
+ for find in child.finds_ref.all():
+ value = find.update_ref_full_location(full_location, return_value=True)
+ if value is not False:
+ Find.objects.filter(pk=find.pk).update(
+ container_ref_fisrt_full_location=value
+ )
+ for find in child.finds.all():
+ value = find.update_current_full_location(full_location, return_value=True)
+ if value is not False:
+ Find.objects.filter(pk=find.pk).update(
+ container_fisrt_full_location=value
+ )
+
def save(self, *args, **kwargs):
+ self._cached_location, self._cached_parent = None, None
if self.pk:
logger.debug(f"[ishtar] archaeological_warehouse.models.Container.save - {self.pk} - {self.cached_label}")
+ self._cached_location, self._cached_parent = Container.objects.filter(pk=self.pk).values_list("location_id", "parent_id").all()[0]
self.pre_save()
super().save(*args, **kwargs)
self.update_find_location()
@@ -2040,6 +2075,10 @@ class Container(
updated += self._calculate_weight()
+ # update cached_label for childs
+ if self._cached_location != self.location_id or self._cached_parent != self.parent_id:
+ self._update_childs_divisions()
+
if not self.index and not self.container_type.stationary:
self.skip_history_when_saving = True
q = (