summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_treatments.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/models_treatments.py')
-rw-r--r--archaeological_finds/models_treatments.py51
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)