summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-11-21 10:22:04 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-11-28 11:40:17 +0100
commit3e14b1202b3435113d070fa53f93ab62b2833c8d (patch)
tree502ce32ca69676471356322b03f3a83febd9caec
parentc943fb4cbfa56163f93f88e50614613839fc77c8 (diff)
downloadIshtar-3e14b1202b3435113d070fa53f93ab62b2833c8d.tar.bz2
Ishtar-3e14b1202b3435113d070fa53f93ab62b2833c8d.zip
Manage treatment with no creation new of item
-rw-r--r--archaeological_files/wizards.py4
-rw-r--r--archaeological_finds/admin.py5
-rw-r--r--archaeological_finds/forms.py7
-rw-r--r--archaeological_finds/migrations/0040_auto_20181120_1027.py33
-rw-r--r--archaeological_finds/models_finds.py4
-rw-r--r--archaeological_finds/models_treatments.py51
-rw-r--r--archaeological_finds/wizards.py38
-rw-r--r--archaeological_operations/wizards.py2
-rw-r--r--archaeological_warehouse/wizards.py2
-rw-r--r--ishtar_common/wizards.py8
10 files changed, 115 insertions, 39 deletions
diff --git a/archaeological_files/wizards.py b/archaeological_files/wizards.py
index 106008192..c9b1ba9c2 100644
--- a/archaeological_files/wizards.py
+++ b/archaeological_files/wizards.py
@@ -43,8 +43,8 @@ class FileWizard(OperationWizard):
town_step_keys = ['towns-']
wizard_done_window = reverse_lazy('show-file')
- def get_extra_model(self, dct, form_list):
- dct = super(FileWizard, self).get_extra_model(dct, form_list)
+ def get_extra_model(self, dct, m2m, form_list):
+ dct = super(FileWizard, self).get_extra_model(dct, m2m, form_list)
if not dct.get('numeric_reference'):
current_ref = models.File.objects.filter(year=dct['year'])\
.aggregate(Max('numeric_reference'))["numeric_reference__max"]
diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py
index 1513c7eeb..033d5bb96 100644
--- a/archaeological_finds/admin.py
+++ b/archaeological_finds/admin.py
@@ -157,7 +157,10 @@ admin_site.register(models.CommunicabilityType, HierarchicalTypeAdmin)
class TreatmentTypeAdmin(GeneralTypeAdmin):
list_display = HierarchicalTypeAdmin.list_display + [
- 'order', 'virtual', 'upstream_is_many', 'downstream_is_many']
+ 'order', 'virtual', 'destructive', 'create_new_find',
+ 'upstream_is_many', 'downstream_is_many']
+ list_filter = ['virtual', 'destructive', 'create_new_find',
+ 'upstream_is_many', 'downstream_is_many']
model = models.TreatmentType
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index b95ac90c6..90e1390bf 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -532,19 +532,20 @@ class QAFindFormMulti(QAForm):
MULTI = True
REPLACE_FIELDS = [
- 'qa_ue', 'qa_manufacturing_place', 'qa_checked_type', 'qa_check_date'
+ 'qa_denomination', 'qa_ue', 'qa_manufacturing_place', 'qa_checked_type',
+ 'qa_check_date'
]
HEADERS = {
'qa_ue': FormHeader(_(u"Context record")),
- 'qa_label': FormHeader(_(u"Identification")),
+ 'qa_denomination': FormHeader(_(u"Identification")),
'qa_description': FormHeader(_(u"Description")),
'qa_checked_type': FormHeader(_(u"Sheet")),
'qa_period': FormHeader(_(u"Datation")),
}
SINGLE_FIELDS = [
- 'qa_label', 'qa_denomination', 'qa_previous_id',
+ 'qa_label', 'qa_previous_id',
'qa_get_first_base_find__excavation_id', 'qa_museum_id',
'qa_seal_number', 'qa_mark'
]
diff --git a/archaeological_finds/migrations/0040_auto_20181120_1027.py b/archaeological_finds/migrations/0040_auto_20181120_1027.py
new file mode 100644
index 000000000..fd649dd8f
--- /dev/null
+++ b/archaeological_finds/migrations/0040_auto_20181120_1027.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-11-20 10:27
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+def init_create_new_find(apps, schema):
+ TreatmentType = apps.get_model('archaeological_finds', 'TreatmentType')
+ for tp in TreatmentType.objects.all():
+ if (tp.upstream_is_many or tp.downstream_is_many) and not tp.virtual:
+ tp.create_new_find = True
+ tp.save()
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_finds', '0039_auto_20181115_1649'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='treatment',
+ options={'ordering': ('start_date',), 'permissions': (('view_treatment', 'Can view all Treatments'), ('view_own_treatment', 'Can view own Treatment'), ('add_own_treatment', 'Can add own Treatment'), ('change_own_treatment', 'Can change own Treatment'), ('delete_own_treatment', 'Can delete own Treatment')), 'verbose_name': 'Treatment', 'verbose_name_plural': 'Treatments'},
+ ),
+ migrations.AddField(
+ model_name='treatmenttype',
+ name='create_new_find',
+ field=models.BooleanField(default=False, help_text='If True when this treatment is applied a new version of the object will be created.', verbose_name='Create a new find'),
+ ),
+ migrations.RunPython(init_create_new_find)
+ ]
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index e856cb8ca..c7bd3f64e 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -92,6 +92,10 @@ class TreatmentType(HierarchicalType):
order = models.IntegerField(_(u"Order"), default=10)
virtual = models.BooleanField(_(u"Virtual"))
destructive = models.BooleanField(_(u"Destructive"), default=False)
+ create_new_find = models.BooleanField(
+ _(u"Create a new find"), default=False,
+ help_text=_(u"If True when this treatment is applied a new version "
+ u"of the object will be created."))
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 68935f142..b1ad5fa41 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -74,7 +74,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
}
# extra keys than can be passed to save method
EXTRA_SAVED_KEYS = ('items', 'user', 'resulting_find', 'upstream_items',
- 'resulting_finds', 'upstream_item')
+ 'resulting_finds', 'upstream_item',
+ 'treatment_type_list')
# alternative names of fields for searches
ALT_NAMES = {
@@ -295,7 +296,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
if q.count():
self.index = q.all().aggregate(Max('index'))['index__max'] + 1
- def _create_n_1_resulting_find(self, resulting_find, upstream_items):
+ def _create_n_1_resulting_find(self, resulting_find, upstream_items,
+ treatment_types):
"""
Manage creation of n<->1 treatment
"""
@@ -319,6 +321,9 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
except TypeError:
m2m_field.add(m2m[k])
+ create_new_find = bool([tp for tp in treatment_types
+ if tp.create_new_find])
+
dating_keys = ["period", "start_date", "end_date", "dating_type",
"quality", "precise_dating"]
current_datings = []
@@ -361,14 +366,19 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
new_find.data = update_data(new_find.data, upstream_item.data,
merge=True)
- upstream_item.downstream_treatment = self
- upstream_item.history_modifier = self.history_modifier
- upstream_item.save()
+ if create_new_find:
+ upstream_item.downstream_treatment = self
+ upstream_item.history_modifier = self.history_modifier
+ upstream_item.save()
+ else:
+ self.finds.add(upstream_item)
+
new_find.upstream_treatment = self
new_find.skip_history_when_saving = True
new_find.save()
- def _create_1_n_resulting_find(self, resulting_finds, upstream_item, user):
+ def _create_1_n_resulting_find(self, resulting_finds, upstream_item, user,
+ treatment_types):
"""
Manage creation of 1<->n treatment
"""
@@ -384,9 +394,15 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
new_find.save()
new_items.append(new_find)
- upstream_item.downstream_treatment = self
- upstream_item.skip_history_when_saving = True
- upstream_item.save()
+ create_new_find = bool([tp for tp in treatment_types
+ if tp.create_new_find])
+
+ if create_new_find:
+ upstream_item.downstream_treatment = self
+ upstream_item.skip_history_when_saving = True
+ upstream_item.save()
+ else:
+ self.finds.add(upstream_item)
if getattr(user, 'ishtaruser', None):
b = FindBasket.objects.create(
@@ -397,6 +413,7 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
def save(self, *args, **kwargs):
items, user, extra_args_for_new, resulting_find = [], None, [], None
upstream_items, upstream_item, resulting_finds = [], None, None
+ treatment_types = []
if "items" in kwargs:
items = kwargs.pop('items')
if "resulting_find" in kwargs:
@@ -411,6 +428,8 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
user = kwargs.pop('user')
if "extra_args_for_new" in kwargs:
extra_args_for_new = kwargs.pop('extra_args_for_new')
+ if "treatment_type_list" in kwargs:
+ treatment_types = kwargs.pop('treatment_type_list')
self.pre_save()
super(Treatment, self).save(*args, **kwargs)
updated = []
@@ -421,18 +440,20 @@ class Treatment(DashboardFormItem, ValueGetter, BaseHistorizedItem,
upstream_items = upstream_items.items.all()
if upstream_items and resulting_find:
- self._create_n_1_resulting_find(resulting_find, upstream_items)
+ self._create_n_1_resulting_find(resulting_find, upstream_items,
+ treatment_types)
return
if upstream_item and resulting_finds:
- self._create_1_n_resulting_find(resulting_finds, upstream_item,
- self.history_modifier)
+ self._create_1_n_resulting_find(
+ resulting_finds, upstream_item, self.history_modifier,
+ treatment_types)
return
- tps = list(self.treatment_types.all())
- has_destructive_tp = bool([tp for tp in tps if tp.destructive])
+ create_new_find = bool([tp for tp in treatment_types
+ if tp.create_new_find])
for item in items:
- if not has_destructive_tp:
+ if not create_new_find:
self.finds.add(item)
else:
new = item.duplicate(user)
diff --git a/archaeological_finds/wizards.py b/archaeological_finds/wizards.py
index bd16a55de..29ca50056 100644
--- a/archaeological_finds/wizards.py
+++ b/archaeological_finds/wizards.py
@@ -86,8 +86,8 @@ class FindWizard(Wizard):
(_(u"Context record"), unicode(current_cr)))
return context
- def get_extra_model(self, dct, form_list):
- dct = super(FindWizard, self).get_extra_model(dct, form_list)
+ def get_extra_model(self, dct, m2m, form_list):
+ dct = super(FindWizard, self).get_extra_model(dct, m2m, form_list)
dct['order'] = 1
if 'pk' in dct and type(dct['pk']) == ContextRecord:
dct['base_finds__context_record'] = dct.pop('pk')
@@ -125,6 +125,7 @@ class TreatmentBase(Wizard):
model = models.Treatment
wizard_done_window = reverse_lazy('show-treatment')
base_url = ""
+ saved_args = {"treatment_type_list": []}
def get_current_finds(self):
step = self.steps.current
@@ -158,10 +159,20 @@ class TreatmentBase(Wizard):
initial['location'] = locations[0]
return initial
+ def get_extra_model(self, dct, m2m, form_list):
+ dct = super(TreatmentBase, self).get_extra_model(dct, m2m, form_list)
+ dct['treatment_type_list'] = []
+ for k, v in m2m:
+ if k == 'treatment_type':
+ if type(v) not in (list, tuple):
+ v = [v]
+ dct['treatment_type_list'] += v
+ return dct
+
class TreatmentWizard(TreatmentBase):
basket_step = 'basetreatment-treatment_creation'
- saved_args = {"items": []}
+ saved_args = {"items": [], "treatment_type_list": []}
base_url = 'treatment_creation'
def get_form_kwargs(self, step, **kwargs):
@@ -171,11 +182,11 @@ class TreatmentWizard(TreatmentBase):
kwargs['user'] = self.request.user
return kwargs
- def get_extra_model(self, dct, form_list):
+ def get_extra_model(self, dct, m2m, form_list):
"""
Get items concerned by the treatment
"""
- dct = super(TreatmentWizard, self).get_extra_model(dct, form_list)
+ dct = super(TreatmentWizard, self).get_extra_model(dct, m2m, form_list)
if 'resulting_pk' in dct:
dct['items'] = []
pks = dct.pop('resulting_pk').split(u',')
@@ -203,7 +214,8 @@ class TreatmentModificationWizard(TreatmentWizard):
class TreatmentN1Wizard(TreatmentBase):
- saved_args = {"upstream_items": [], "resulting_find": None}
+ saved_args = {"upstream_items": [], "resulting_find": None,
+ "treatment_type_list": []}
base_url = 'treatment_creation_n1'
def _update_simple_initial_from_finds(self, initial, find, k):
@@ -282,11 +294,12 @@ class TreatmentN1Wizard(TreatmentBase):
initial.pop(k)
return initial
- def get_extra_model(self, dct, form_list):
+ def get_extra_model(self, dct, m2m, form_list):
"""
Get items concerned by the treatment
"""
- dct = super(TreatmentN1Wizard, self).get_extra_model(dct, form_list)
+ dct = super(TreatmentN1Wizard, self).get_extra_model(
+ dct, m2m, form_list)
if 'resulting_pk' not in dct:
return dct
@@ -318,7 +331,8 @@ class TreatmentN1Wizard(TreatmentBase):
class Treatment1NWizard(TreatmentBase):
- saved_args = {"upstream_item": None, "resulting_finds": None}
+ saved_args = {"upstream_item": None, "resulting_finds": None,
+ "treatment_type_list": []}
base_url = 'treatment_creation_1n'
def get_form_kwargs(self, step, **kwargs):
@@ -340,11 +354,12 @@ class Treatment1NWizard(TreatmentBase):
initial['resultings_label'] = lbl + u"-"
return initial
- def get_extra_model(self, dct, form_list):
+ def get_extra_model(self, dct, m2m, form_list):
"""
Get items concerned by the treatment
"""
- dct = super(Treatment1NWizard, self).get_extra_model(dct, form_list)
+ dct = super(Treatment1NWizard, self).get_extra_model(
+ dct, m2m, form_list)
if 'resulting_pk' not in dct:
return dct
@@ -373,7 +388,6 @@ class Treatment1NWizard(TreatmentBase):
u"resulting items. This search have been pinned.")
).format(dct["resulting_finds"]["basket_name"])
)
-
self.request.session["pin-search-find"] = u'{}="{}"'.format(
unicode(pgettext("key for text search", u"basket")),
dct["resulting_finds"]["basket_name"])
diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py
index de38beb95..798e622b4 100644
--- a/archaeological_operations/wizards.py
+++ b/archaeological_operations/wizards.py
@@ -332,7 +332,7 @@ class OperationAdministrativeActWizard(OperationWizard):
except models.AdministrativeAct.DoesNotExist:
return
- def get_extra_model(self, dct, form_list):
+ def get_extra_model(self, dct, m2m, form_list):
dct['history_modifier'] = self.request.user
return dct
diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py
index 8ee2c2972..a0d46e892 100644
--- a/archaeological_warehouse/wizards.py
+++ b/archaeological_warehouse/wizards.py
@@ -49,7 +49,7 @@ class PackagingWizard(TreatmentWizard):
def save_model(self, dct, m2m, whole_associated_models, form_list,
return_object):
- dct = self.get_extra_model(dct, form_list)
+ dct = self.get_extra_model(dct, m2m, form_list)
obj = self.get_current_saved_object()
dct['location'] = dct['container'].location
items = None
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 7fd19f721..b3fc4b55a 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -439,7 +439,7 @@ class Wizard(IshtarWizard):
datas.append((form.form_label, form_datas))
return datas
- def get_extra_model(self, dct, form_list):
+ def get_extra_model(self, dct, m2m, form_list):
dct['history_modifier'] = self.request.user
return dct
@@ -552,7 +552,7 @@ class Wizard(IshtarWizard):
def save_model(self, dct, m2m, whole_associated_models, form_list,
return_object):
- dct = self.get_extra_model(dct, form_list)
+ dct = self.get_extra_model(dct, m2m, form_list)
obj = self.get_current_saved_object()
data = {}
if obj and hasattr(obj, 'data'):
@@ -1787,8 +1787,8 @@ class AccountWizard(Wizard):
class SourceWizard(Wizard):
model = None
- def get_extra_model(self, dct, form_list):
- dct = super(SourceWizard, self).get_extra_model(dct, form_list)
+ def get_extra_model(self, dct, m2m, form_list):
+ dct = super(SourceWizard, self).get_extra_model(dct, m2m, form_list)
if 'history_modifier' in dct:
dct.pop('history_modifier')
return dct