diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-12-11 18:31:27 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-12-11 18:32:12 +0100 |
commit | 7ba31396a8cf7e523537e8f6fb1d8bc4cc41ea12 (patch) | |
tree | 7d5391e7eb706d346080ec30a802ebf88bc218bd /archaeological_finds/models_treatments.py | |
parent | 4f93740ad6bb2f9e47eeab63224651b8b1cbb8c6 (diff) | |
download | Ishtar-7ba31396a8cf7e523537e8f6fb1d8bc4cc41ea12.tar.bz2 Ishtar-7ba31396a8cf7e523537e8f6fb1d8bc4cc41ea12.zip |
Manage treatment state and effective execution
Diffstat (limited to 'archaeological_finds/models_treatments.py')
-rw-r--r-- | archaeological_finds/models_treatments.py | 46 |
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): |