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.py46
1 files changed, 43 insertions, 3 deletions
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py
index ba1c29dc8..c79ef976c 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -41,10 +41,20 @@ from ishtar_common.utils import cached_label_changed, get_current_year, \
class TreatmentState(GeneralType):
+ executed = models.BooleanField(_(u"Treatment is executed"), default=False)
+ order = models.IntegerField(verbose_name=_(u"Order"), default=10)
+
class Meta:
verbose_name = _(u"Treatment state type")
verbose_name_plural = _(u"Treatment state types")
- ordering = ('label',)
+ ordering = ('order', 'label',)
+
+ @classmethod
+ def get_default(cls):
+ q = cls.objects.filter(executed=True)
+ if not q.count():
+ return None
+ return q.all()[0].pk
post_save.connect(post_save_cache, sender=TreatmentState)
@@ -132,8 +142,11 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
treatment_types = models.ManyToManyField(
TreatmentType, verbose_name=_(u"Treatment type"))
treatment_state = models.ForeignKey(
- TreatmentState, verbose_name=_(u"State"), blank=True, null=True,
+ TreatmentState, verbose_name=_(u"State"),
+ default=TreatmentState.get_default
)
+ executed = models.BooleanField(
+ _(u"Treatment have been executed"), default=False)
location = models.ForeignKey(
Warehouse, verbose_name=_(u"Location"), blank=True, null=True,
help_text=_(
@@ -432,30 +445,49 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
treatment_types = kwargs.pop('treatment_type_list')
self.pre_save()
super(Treatment, self).save(*args, **kwargs)
+ to_be_executed = not self.executed and self.treatment_state.executed
+
updated = []
# baskets
if hasattr(items, "items"):
items = items.items.all()
if hasattr(upstream_items, "items"):
upstream_items = upstream_items.items.all()
+ if not items and self.finds.count():
+ items = list(self.finds.all())
+ if not treatment_types and self.treatment_types.count():
+ treatment_types = list(self.treatment_types.all())
+ # execute the treatment
if upstream_items and resulting_find:
+ if not to_be_executed:
+ # should not happen but bad validation check...
+ return
self._create_n_1_resulting_find(resulting_find, upstream_items,
treatment_types)
+ self.executed = True
+ self.save()
return
if upstream_item and resulting_finds:
+ if not to_be_executed:
+ # should not happen but bad validation check...
+ return
self._create_1_n_resulting_find(
resulting_finds, upstream_item, self.history_modifier,
treatment_types)
+ self.executed = True
+ self.save()
return
create_new_find = bool([tp for tp in treatment_types
if tp.create_new_find])
+
for item in items:
- if not create_new_find:
+ if not create_new_find or not to_be_executed:
self.finds.add(item)
else:
+ self.finds.clear()
new = item.duplicate(user)
item.downstream_treatment = self
item.save()
@@ -470,6 +502,9 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
basket.items.remove(item)
basket.items.add(new)
+ if not to_be_executed:
+ return
+
if create_new_find:
q = Find.objects.filter(upstream_treatment=self)
else:
@@ -485,6 +520,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
# don't record twice history
find.skip_history_when_saving = True
find.save()
+ self.executed = True
+ self.save()
break
# manage containers
@@ -502,6 +539,7 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
continue
container_attrs.append('container_ref')
+ print(container_attrs)
if not container_attrs:
# non consistent treatment
return
@@ -514,6 +552,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
# don't record twice history
find.skip_history_when_saving = True
find.save()
+ self.executed = True
+ self.save()
@property
def associated_filename(self):