summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-11-15 17:39:37 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-11-28 11:40:16 +0100
commita5bb90fa9926c2593965dcfe2859388bc542a08c (patch)
tree42b5d3f49b490ca9f99b10e2a1379250e97c88ff
parent63ec480b4e617157d7bbb22820272496f14bb771 (diff)
downloadIshtar-a5bb90fa9926c2593965dcfe2859388bc542a08c.tar.bz2
Ishtar-a5bb90fa9926c2593965dcfe2859388bc542a08c.zip
Treatments: manage treatment without find duplication
-rw-r--r--archaeological_finds/migrations/0039_auto_20181115_1649.py (renamed from archaeological_finds/migrations/0039_auto_20181113_1600.py)17
-rw-r--r--archaeological_finds/models_finds.py1
-rw-r--r--archaeological_finds/models_treatments.py46
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html39
-rw-r--r--archaeological_finds/templates/ishtar/sheet_treatment.html5
5 files changed, 80 insertions, 28 deletions
diff --git a/archaeological_finds/migrations/0039_auto_20181113_1600.py b/archaeological_finds/migrations/0039_auto_20181115_1649.py
index 08877d66b..3752c173c 100644
--- a/archaeological_finds/migrations/0039_auto_20181113_1600.py
+++ b/archaeological_finds/migrations/0039_auto_20181115_1649.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.11.10 on 2018-11-13 16:00
+# Generated by Django 1.11.10 on 2018-11-15 16:49
from __future__ import unicode_literals
from django.db import migrations, models
-import django.db.models.deletion
import virtualtime
@@ -20,18 +19,18 @@ class Migration(migrations.Migration):
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'),
+ 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 @@
</div>
{% endif %}
-{% if item.upstream_treatment or item.downstream_treatment %}
+{% if item.upstream_treatment or item.downstream_treatment or item.treatments.count %}
<h3>{% trans "Treatments"%}</h3>
+ <table id='{{window_id}}-treatments' class="table table-striped">
+ <tr>
+ <th>&nbsp;</th>
+ <th>{% trans "Year - index" %}</th>
+ <th>{% trans "Label" %}</th>
+ <th>{% trans "Type" %}</th>
+ <th>{% trans "State" %}</th>
+ <th>{% trans "Related finds (max. 15 displayed)" %}</th>
+ <th>{% trans "Doer" %}</th>
+ <th>{% trans "Container" %}</th>
+ <th>{% trans "Start date" %}</th>
+ <th>{% trans "End date" %}</th>
+ </tr>
+ {% for treatment in item.treatments.all %}
+ <tr>
+ <td>
+ <a class="display_details" href="#"
+ onclick="load_window('{% url 'show-treatment' treatment.id %}/');">
+ <i class="fa fa-info-circle" aria-hidden="true"></i>
+ </a>
+ </td>
+ <td class='string'>{{ treatment.year }} - {{treatment.index}}</td>
+ <td class='string'>{{ treatment.label|default_if_none:"-" }}</td>
+ <td class='string'>{{ treatment.treatment_types_lbl }}</td>
+ <td class='string'>{{ treatment.treatment_state|default_if_none:"-" }}</td>
+ <td class='item-list'>{% for it in treatment.limited_finds %}<span>{{it}} {{it|link_to_window}}</span>{% endfor %}</td>
+ <td class='string'>{{ treatment.person|default_if_none:"-" }}</td>
+ <td class='string'>{{ treatment.container|default_if_none:"-" }}</td>
+ <td class='string'>{{ treatment.start_date|default_if_none:"-" }}</td>
+ <td class='string'>{{ treatment.end_date|default_if_none:"-" }}</td>
+ </tr>
+ {% endfor %}
+ </table>
{% if item.upstream_treatment %}
<h3>{% trans "Upstream treatment" %}</h3>
@@ -197,7 +230,7 @@
<td class='string'>{{ treatment.label|default_if_none:"-" }}</td>
<td class='string'>{{ treatment.treatment_types_lbl }}</td>
<td class='string'>{{ treatment.treatment_state|default_if_none:"-" }}</td>
- <td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td>
+ <td class='item-list'>{% for it in items %}<span>{{it}} {{it|link_to_window}}</span>{% endfor %}</td>
<td class='string'>{{ treatment.person|default_if_none:"-" }}</td>
<td class='string'>{{ treatment.container|default_if_none:"-" }}</td>
<td class='string'>{{ treatment.start_date|default_if_none:"-" }}</td>
@@ -235,7 +268,7 @@
<td class='string'>{{ treatment.label|default_if_none:"-" }}</td>
<td class='string'>{{ treatment.treatment_types_lbl }}</td>
<td class='string'>{{ treatment.treatment_state|default_if_none:"-" }}</td>
- <td class='item-list'>{% for item in items %}<span>{{item}} {{ item|link_to_window}}</span>{% endfor %}</td>
+ <td class='item-list'>{% for it in items %}<span>{{it}} {{ it|link_to_window}}</span>{% endfor %}</td>
<td class='string'>{{ treatment.person|default_if_none:"" }}</td>
<td class='string'>{{ treatment.container|default_if_none:"-" }}</td>
<td class='string'>{{ treatment.start_date|default_if_none:"" }}</td>
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" %}
</div>
+{% 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 %}