diff options
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r-- | archaeological_warehouse/models.py | 39 |
1 files changed, 39 insertions, 0 deletions
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 = ( |