diff options
Diffstat (limited to 'archaeological_finds/models_treatments.py')
-rw-r--r-- | archaeological_finds/models_treatments.py | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py index 68935f142..b1ad5fa41 100644 --- a/archaeological_finds/models_treatments.py +++ b/archaeological_finds/models_treatments.py @@ -74,7 +74,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, } # extra keys than can be passed to save method EXTRA_SAVED_KEYS = ('items', 'user', 'resulting_find', 'upstream_items', - 'resulting_finds', 'upstream_item') + 'resulting_finds', 'upstream_item', + 'treatment_type_list') # alternative names of fields for searches ALT_NAMES = { @@ -295,7 +296,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, if q.count(): self.index = q.all().aggregate(Max('index'))['index__max'] + 1 - def _create_n_1_resulting_find(self, resulting_find, upstream_items): + def _create_n_1_resulting_find(self, resulting_find, upstream_items, + treatment_types): """ Manage creation of n<->1 treatment """ @@ -319,6 +321,9 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, except TypeError: m2m_field.add(m2m[k]) + create_new_find = bool([tp for tp in treatment_types + if tp.create_new_find]) + dating_keys = ["period", "start_date", "end_date", "dating_type", "quality", "precise_dating"] current_datings = [] @@ -361,14 +366,19 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, new_find.data = update_data(new_find.data, upstream_item.data, merge=True) - upstream_item.downstream_treatment = self - upstream_item.history_modifier = self.history_modifier - upstream_item.save() + if create_new_find: + upstream_item.downstream_treatment = self + upstream_item.history_modifier = self.history_modifier + upstream_item.save() + else: + self.finds.add(upstream_item) + new_find.upstream_treatment = self new_find.skip_history_when_saving = True new_find.save() - def _create_1_n_resulting_find(self, resulting_finds, upstream_item, user): + def _create_1_n_resulting_find(self, resulting_finds, upstream_item, user, + treatment_types): """ Manage creation of 1<->n treatment """ @@ -384,9 +394,15 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, new_find.save() new_items.append(new_find) - upstream_item.downstream_treatment = self - upstream_item.skip_history_when_saving = True - upstream_item.save() + create_new_find = bool([tp for tp in treatment_types + if tp.create_new_find]) + + if create_new_find: + upstream_item.downstream_treatment = self + upstream_item.skip_history_when_saving = True + upstream_item.save() + else: + self.finds.add(upstream_item) if getattr(user, 'ishtaruser', None): b = FindBasket.objects.create( @@ -397,6 +413,7 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, def save(self, *args, **kwargs): items, user, extra_args_for_new, resulting_find = [], None, [], None upstream_items, upstream_item, resulting_finds = [], None, None + treatment_types = [] if "items" in kwargs: items = kwargs.pop('items') if "resulting_find" in kwargs: @@ -411,6 +428,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, user = kwargs.pop('user') if "extra_args_for_new" in kwargs: extra_args_for_new = kwargs.pop('extra_args_for_new') + if "treatment_type_list" in kwargs: + treatment_types = kwargs.pop('treatment_type_list') self.pre_save() super(Treatment, self).save(*args, **kwargs) updated = [] @@ -421,18 +440,20 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, upstream_items = upstream_items.items.all() if upstream_items and resulting_find: - self._create_n_1_resulting_find(resulting_find, upstream_items) + self._create_n_1_resulting_find(resulting_find, upstream_items, + treatment_types) return if upstream_item and resulting_finds: - self._create_1_n_resulting_find(resulting_finds, upstream_item, - self.history_modifier) + self._create_1_n_resulting_find( + resulting_finds, upstream_item, self.history_modifier, + treatment_types) return - tps = list(self.treatment_types.all()) - has_destructive_tp = bool([tp for tp in tps if tp.destructive]) + create_new_find = bool([tp for tp in treatment_types + if tp.create_new_find]) for item in items: - if not has_destructive_tp: + if not create_new_find: self.finds.add(item) else: new = item.duplicate(user) |