summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_treatments.py
diff options
context:
space:
mode:
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
commitbc6cf94def73926e6f6bb986d61e5861a17584e2 (patch)
treeba4a7438cd6594c02938ad3211d523c6dd28a79f /archaeological_finds/models_treatments.py
parent1b72554283f5c9e0644262a3f182409376870991 (diff)
downloadIshtar-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.py128
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
)