From 458b534bb4dd9918cd1236ac505730102b7951bd Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 15 Nov 2018 17:39:37 +0100 Subject: Treatments: manage treatment without find duplication --- .../migrations/0039_auto_20181113_1600.py | 37 ----------------- .../migrations/0039_auto_20181115_1649.py | 36 +++++++++++++++++ archaeological_finds/models_finds.py | 1 + archaeological_finds/models_treatments.py | 46 ++++++++++++++-------- .../templates/ishtar/sheet_find.html | 39 ++++++++++++++++-- .../templates/ishtar/sheet_treatment.html | 5 +++ 6 files changed, 108 insertions(+), 56 deletions(-) delete mode 100644 archaeological_finds/migrations/0039_auto_20181113_1600.py create mode 100644 archaeological_finds/migrations/0039_auto_20181115_1649.py diff --git a/archaeological_finds/migrations/0039_auto_20181113_1600.py b/archaeological_finds/migrations/0039_auto_20181113_1600.py deleted file mode 100644 index 08877d66b..000000000 --- a/archaeological_finds/migrations/0039_auto_20181113_1600.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.10 on 2018-11-13 16:00 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import virtualtime - - -class Migration(migrations.Migration): - - dependencies = [ - ('archaeological_finds', '0038_auto_20181112_1625'), - ] - - operations = [ - migrations.AddField( - model_name='historicaltreatment', - name='creation_date', - field=models.DateTimeField(default=virtualtime.virtual_datetime.now), - ), - migrations.AddField( - model_name='historicaltreatment', - name='find', - field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.Find'), - ), - migrations.AddField( - model_name='treatment', - name='creation_date', - field=models.DateTimeField(default=virtualtime.virtual_datetime.now), - ), - migrations.AddField( - model_name='treatment', - name='find', - field=models.ForeignKey(blank=True, help_text='Related find for non-destructive treatment', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='treatments', to='archaeological_finds.Find', verbose_name='Find'), - ), - ] diff --git a/archaeological_finds/migrations/0039_auto_20181115_1649.py b/archaeological_finds/migrations/0039_auto_20181115_1649.py new file mode 100644 index 000000000..3752c173c --- /dev/null +++ b/archaeological_finds/migrations/0039_auto_20181115_1649.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-11-15 16:49 +from __future__ import unicode_literals + +from django.db import migrations, models +import virtualtime + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0038_auto_20181112_1625'), + ] + + operations = [ + migrations.AddField( + model_name='historicaltreatment', + name='creation_date', + field=models.DateTimeField(default=virtualtime.virtual_datetime.now), + ), + migrations.AddField( + model_name='treatment', + name='creation_date', + field=models.DateTimeField(default=virtualtime.virtual_datetime.now), + ), + migrations.AddField( + model_name='treatment', + name='finds', + field=models.ManyToManyField(blank=True, help_text='Related finds for non-destructive treatment', related_name='treatments', to='archaeological_finds.Find', verbose_name='Finds'), + ), + migrations.AddField( + model_name='treatmenttype', + name='destructive', + field=models.BooleanField(default=False, verbose_name='Destructive'), + ), + ] diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index e53ad6e6d..3483113d7 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -91,6 +91,7 @@ post_delete.connect(post_save_cache, sender=ConservatoryState) class TreatmentType(HierarchicalType): order = models.IntegerField(_(u"Order"), default=10) virtual = models.BooleanField(_(u"Virtual")) + destructive = models.BooleanField(_(u"Destructive"), default=False) upstream_is_many = models.BooleanField( _(u"Upstream is many"), default=False, help_text=_( diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py index 0bf3cad38..61d4ce5be 100644 --- a/archaeological_finds/models_treatments.py +++ b/archaeological_finds/models_treatments.py @@ -148,9 +148,9 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, start_date = models.DateField(_(u"Start date"), blank=True, null=True) end_date = models.DateField(_(u"Closing date"), blank=True, null=True) creation_date = models.DateTimeField(default=datetime.datetime.now) - find = models.ForeignKey( - "Find", verbose_name=_(u"Find"), related_name='treatments', blank=True, - null=True, help_text=_(u"Related find for non-destructive treatment")) + finds = models.ManyToManyField( + "Find", verbose_name=_(u"Finds"), related_name='treatments', blank=True, + help_text=_(u"Related finds for non-destructive treatment")) container = models.ForeignKey(Container, verbose_name=_(u"Container"), blank=True, null=True) estimated_cost = models.FloatField(_(u"Estimated cost"), @@ -181,6 +181,7 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, ("change_own_treatment", u"Can change own Treatment"), ("delete_own_treatment", u"Can delete own Treatment"), ) + ordering = ("start_date", ) def __unicode__(self): if self.cached_label: @@ -193,6 +194,10 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, def short_class_name(self): return _(u"TREATMENT") + @property + def limited_finds(self): + return self.finds.all()[:15] + def natural_key(self): return (self.external_id, ) @@ -300,21 +305,30 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem, updated = [] if hasattr(items, "items"): items = items.items.all() + + tps = list(self.treatment_types.all()) + has_destructive_tp = bool([tp for tp in tps if tp.destructive]) for item in items: - new = item.duplicate(user) - item.downstream_treatment = self - item.save() - new.upstream_treatment = self - for k in extra_args_for_new: - setattr(new, k, extra_args_for_new[k]) - new.save() - updated.append(new.pk) - # update baskets - for basket in \ - FindBasket.objects.filter(items__pk=item.pk).all(): - basket.items.remove(item) - basket.items.add(new) + if not has_destructive_tp: + self.finds.add(item) + else: + new = item.duplicate(user) + item.downstream_treatment = self + item.save() + new.upstream_treatment = self + for k in extra_args_for_new: + setattr(new, k, extra_args_for_new[k]) + new.save() + updated.append(new.pk) + # update baskets + for basket in \ + FindBasket.objects.filter(items__pk=item.pk).all(): + basket.items.remove(item) + basket.items.add(new) + # manage containers + if not self.container: + return for find in Find.objects.filter(upstream_treatment=self).all(): if find.container != self.container: find.container = self.container diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html index 021ea5652..a3ad9fca5 100644 --- a/archaeological_finds/templates/ishtar/sheet_find.html +++ b/archaeological_finds/templates/ishtar/sheet_find.html @@ -167,8 +167,41 @@ {% endif %} -{% if item.upstream_treatment or item.downstream_treatment %} +{% if item.upstream_treatment or item.downstream_treatment or item.treatments.count %}

{% trans "Treatments"%}

+ + + + + + + + + + + + + + {% for treatment in item.treatments.all %} + + + + + + + + + + + + + {% endfor %} +
 {% trans "Year - index" %}{% trans "Label" %}{% trans "Type" %}{% trans "State" %}{% trans "Related finds (max. 15 displayed)" %}{% trans "Doer" %}{% trans "Container" %}{% trans "Start date" %}{% trans "End date" %}
+ + + + {{ treatment.year }} - {{treatment.index}}{{ treatment.label|default_if_none:"-" }}{{ treatment.treatment_types_lbl }}{{ treatment.treatment_state|default_if_none:"-" }}{% for it in treatment.limited_finds %}{{it}} {{it|link_to_window}}{% endfor %}{{ treatment.person|default_if_none:"-" }}{{ treatment.container|default_if_none:"-" }}{{ treatment.start_date|default_if_none:"-" }}{{ treatment.end_date|default_if_none:"-" }}
{% if item.upstream_treatment %}

{% trans "Upstream treatment" %}

@@ -197,7 +230,7 @@ {{ treatment.label|default_if_none:"-" }} {{ treatment.treatment_types_lbl }} {{ treatment.treatment_state|default_if_none:"-" }} - {% for item in items %}{{item}} {{ item|link_to_window}}{% endfor %} + {% for it in items %}{{it}} {{it|link_to_window}}{% endfor %} {{ treatment.person|default_if_none:"-" }} {{ treatment.container|default_if_none:"-" }} {{ treatment.start_date|default_if_none:"-" }} @@ -235,7 +268,7 @@ {{ treatment.label|default_if_none:"-" }} {{ treatment.treatment_types_lbl }} {{ treatment.treatment_state|default_if_none:"-" }} - {% for item in items %}{{item}} {{ item|link_to_window}}{% endfor %} + {% for it in items %}{{it}} {{ it|link_to_window}}{% endfor %} {{ treatment.person|default_if_none:"" }} {{ treatment.container|default_if_none:"-" }} {{ treatment.start_date|default_if_none:"" }} diff --git a/archaeological_finds/templates/ishtar/sheet_treatment.html b/archaeological_finds/templates/ishtar/sheet_treatment.html index e9c9c0758..94569b5f6 100644 --- a/archaeological_finds/templates/ishtar/sheet_treatment.html +++ b/archaeological_finds/templates/ishtar/sheet_treatment.html @@ -53,6 +53,11 @@ {% include "ishtar/blocks/sheet_json.html" %} +{% trans "Related finds" as finds %} +{% if item.finds.count %} +{% dynamic_table_document finds 'finds_for_treatment' 'treatments' item.pk 'TABLE_COLS_FOR_OPE' output %} +{% endif %} + {% trans "Upstream finds" as finds %} {% if item.upstream.count %} {% dynamic_table_document finds 'finds_for_treatment' 'downstream_treatment' item.pk 'TABLE_COLS_FOR_OPE' output %} -- cgit v1.2.3