diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-21 17:06:53 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-24 18:09:08 +0100 |
commit | bc6cf94def73926e6f6bb986d61e5861a17584e2 (patch) | |
tree | ba4a7438cd6594c02938ad3211d523c6dd28a79f /archaeological_finds/models_treatments.py | |
parent | 1b72554283f5c9e0644262a3f182409376870991 (diff) | |
download | Ishtar-bc6cf94def73926e6f6bb986d61e5861a17584e2.tar.bz2 Ishtar-bc6cf94def73926e6f6bb986d61e5861a17584e2.zip |
✨ treatment state refactoring -> distinct input status and treatment status (refs #6182) - treatments: search criteria
Diffstat (limited to 'archaeological_finds/models_treatments.py')
-rw-r--r-- | archaeological_finds/models_treatments.py | 128 |
1 files changed, 103 insertions, 25 deletions
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py index 81b1df7df..0c684d98a 100644 --- a/archaeological_finds/models_treatments.py +++ b/archaeological_finds/models_treatments.py @@ -41,22 +41,23 @@ from archaeological_context_records.models import Dating from archaeological_warehouse.models import Warehouse, Container from ishtar_common.model_managers import ExternalIdManager from ishtar_common.models import ( + BaseHistorizedItem, + DashboardFormItem, Document, + document_attached_changed, + DocumentItem, GeneralType, + HistoryModel, ImageModel, - BaseHistorizedItem, + MainItem, + OrderedType, + Organization, OwnPerms, Person, - Organization, - ValueGetter, post_save_cache, - ShortMenuItem, - DashboardFormItem, - document_attached_changed, - MainItem, - HistoryModel, SearchVectorConfig, - DocumentItem, + ShortMenuItem, + ValueGetter, ) from ishtar_common.models_common import CompleteIdentifierItem, HistoricalRecords from ishtar_common.utils import ( @@ -73,8 +74,25 @@ class TreatmentState(GeneralType): order = models.IntegerField(verbose_name=_("Order"), default=10) class Meta: - verbose_name = _("Treatment state type") - verbose_name_plural = _("Treatment state types") + verbose_name = _("Treatment state type - deprecated") + verbose_name_plural = _("Treatment state types - deprecated") + ordering = ( + "order", + "label", + ) + ADMIN_SECTION = _("Treatments") + + +post_save.connect(post_save_cache, sender=TreatmentState) +post_delete.connect(post_save_cache, sender=TreatmentState) + + +class TreatmentInputStatus(OrderedType): + executed = models.BooleanField(_("Treatment is executed"), default=False) + + class Meta: + verbose_name = _("Treatment - Input status type") + verbose_name_plural = _("Treatment - Input status types") ordering = ( "order", "label", @@ -83,23 +101,47 @@ class TreatmentState(GeneralType): @classmethod def get_default(cls): - q = cls.objects.filter(executed=True) + q = cls.objects.filter(executed=False) if not q.count(): return None return q.all()[0].pk @classmethod + def get_validated_state(cls): + treat_state, __ = cls.objects.get_or_create( + txt_idx='validated', + defaults={ + 'label': _("Validated"), 'executed': True, + 'available': True}) + return treat_state + + +post_save.connect(post_save_cache, sender=TreatmentInputStatus) +post_delete.connect(post_save_cache, sender=TreatmentInputStatus) + + +class TreatmentStatus(OrderedType): + class Meta: + verbose_name = _("Treatment - Treatment status type") + verbose_name_plural = _("Treatment - Treatment status types") + ordering = ( + "order", + "label", + ) + ADMIN_SECTION = _("Treatments") + + @classmethod def get_completed_state(cls): treat_state, __ = cls.objects.get_or_create( txt_idx='completed', defaults={ - 'label': _("Completed"), 'executed': True, + 'label': _("Completed"), 'available': True}) return treat_state -post_save.connect(post_save_cache, sender=TreatmentState) -post_delete.connect(post_save_cache, sender=TreatmentState) +post_save.connect(post_save_cache, sender=TreatmentStatus) +post_delete.connect(post_save_cache, sender=TreatmentStatus) class AssociatedFindBasket: @@ -171,7 +213,7 @@ class Treatment( "year", "index", "treatment_types__label", - "treatment_state__label", + "treatment_status__label", "label", "scientific_monitoring_manager__cached_label", "person__cached_label", @@ -195,8 +237,8 @@ class Treatment( "downstream_cached_label": _("Downstream find"), "upstream_cached_label": _("Upstream find"), "treatment_types__label": _("Type"), - "treatment_state__label": _("State"), - "person__cached_label": _("Responsible"), + "treatment_status__label": _("State"), + "person__cached_label": _("Responsible of the treatment"), "scientific_monitoring_manager__cached_label": _( "Scientific monitoring manager" ), @@ -232,6 +274,26 @@ class Treatment( "scientific_monitoring_manager__cached_label__iexact", related_name="scientific_monitoring_manager" ), + "input_status": SearchAltName( + pgettext_lazy("key for text search", "input-status"), + "input_status__label__iexact", + ), + "treatment_status": SearchAltName( + pgettext_lazy("key for text search", "treatment-status"), + "treatment_status__label__iexact", + ), + "location": SearchAltName( + pgettext_lazy("key for text search", "location"), + "location__name__iexact", + ), + "person": SearchAltName( + pgettext_lazy("key for text search", "responsible-of-treatment"), + "person__cached_label__iexact", + ), + "organization": SearchAltName( + pgettext_lazy("key for text search", "organization"), + "organization__name__iexact", + ), } ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES) ALT_NAMES.update(DocumentItem.ALT_NAMES) @@ -242,7 +304,7 @@ class Treatment( BASE_SEARCH_VECTORS = [ SearchVectorConfig("treatment_types__label"), - SearchVectorConfig("treatment_state__label"), + SearchVectorConfig("treatment_status__label"), SearchVectorConfig("label"), SearchVectorConfig("goal", "local"), SearchVectorConfig("external_id"), @@ -294,10 +356,26 @@ class Treatment( ) treatment_state = models.ForeignKey( TreatmentState, - verbose_name=_("State"), - default=TreatmentState.get_default, + verbose_name=_("State - deprecated use input_status and treatment_status"), + blank=True, + null=True, on_delete=models.PROTECT, ) + input_status = models.ForeignKey( + TreatmentInputStatus, + verbose_name=_("Input status"), + default=TreatmentInputStatus.get_default, + blank=True, + null=True, + on_delete=models.SET_NULL, + ) + treatment_status = models.ForeignKey( + TreatmentStatus, + verbose_name=_("Treatment status"), + blank=True, + null=True, + on_delete=models.SET_NULL, + ) executed = models.BooleanField(_("Treatment have been executed"), default=False) location = models.ForeignKey( Warehouse, @@ -311,7 +389,7 @@ class Treatment( ) person = models.ForeignKey( Person, - verbose_name=_("Responsible"), + verbose_name=_("Responsible of the treatment"), blank=True, null=True, on_delete=models.SET_NULL, @@ -340,7 +418,7 @@ class Treatment( description = models.TextField(_("Description"), blank=True, default="") goal = models.TextField(_("Goal"), blank=True, default="") start_date = models.DateField(_("Start date"), blank=True, null=True) - end_date = models.DateField(_("Closing date"), blank=True, null=True) + end_date = models.DateField(_("End date"), blank=True, null=True) creation_date = models.DateTimeField(default=datetime.datetime.now) container = models.ForeignKey( Container, @@ -718,7 +796,7 @@ class Treatment( super().save(*args, **kwargs) # reinit cached values self.clean_cache() - to_be_executed = not self.executed and self.treatment_state.executed + to_be_executed = not self.executed and self.input_status.executed updated = [] # baskets @@ -1313,7 +1391,7 @@ class TreatmentFile( blank=True, null=True, ) - end_date = models.DateField(_("Closing date"), null=True, blank=True) + end_date = models.DateField(_("End date"), null=True, blank=True) creation_date = models.DateField( _("Creation date"), default=datetime.date.today, blank=True, null=True ) |