summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-08-28 12:11:41 +0200
committerÉtienne Loks <etienne.loks@proxience.com>2015-08-28 12:11:41 +0200
commiteb6c62736d57d9efb8ba9fc35b16d26b9e88cb03 (patch)
treea667bc72d80244a271c403ceb490ef2c45aa4db6
parent51a047d697917141fda34a310c8706b4729592c1 (diff)
downloadIshtar-eb6c62736d57d9efb8ba9fc35b16d26b9e88cb03.tar.bz2
Ishtar-eb6c62736d57d9efb8ba9fc35b16d26b9e88cb03.zip
Archaeological files: add departments to preventive forms - Wizards manage several many to many in one form
-rw-r--r--archaeological_files/templates/ishtar/sheet_file.html3
-rw-r--r--archaeological_files_pdl/forms.py11
-rw-r--r--archaeological_files_pdl/models.py2
-rw-r--r--archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html7
-rw-r--r--ishtar_common/wizards.py37
5 files changed, 38 insertions, 22 deletions
diff --git a/archaeological_files/templates/ishtar/sheet_file.html b/archaeological_files/templates/ishtar/sheet_file.html
index 2d7b6262d..fc5ddbe70 100644
--- a/archaeological_files/templates/ishtar/sheet_file.html
+++ b/archaeological_files/templates/ishtar/sheet_file.html
@@ -57,7 +57,8 @@
{% if item.comment %}<p><label>{%trans "Comment:"%}</label> <span class='value'>{{ item.comment }}</span></p>{%endif%}
<h3>{% trans "Localisation"%}</h3>
-<p><label>{%trans "Towns:"%}</label> <span class='value'>{{ item.towns.all|join:", " }}</span></p>
+{% if item.towns.count %}<p><label>{%trans "Towns:"%}</label> <span class='value'>{{ item.towns.all|join:", " }}</span></p>{% endif %}
+{% if item.departments.count %}<p><label>{%trans "Departments:"%}</label> <span class='value'>{{ item.departments.all|join:", " }}</span></p>{% endif %}
{% if item.address %}
<p><label>{%trans "Main address:"%}</label> <span class='value'>{{ item.address }}</span></p>
{% if item.address_complement %}<p><label>{%trans "Complement:"%}</label> <span class='value'>{{ item.address_complement }}</span></p>{%endif%}
diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py
index a0c5037e7..3b5ed4601 100644
--- a/archaeological_files_pdl/forms.py
+++ b/archaeological_files_pdl/forms.py
@@ -24,7 +24,7 @@ from django.core import validators
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
-from ishtar_common.models import Person, PersonType, Town, valid_id
+from ishtar_common.models import Person, PersonType, Town, Department, valid_id
from archaeological_files import models
from ishtar_common.forms import get_now, reverse_lazy
@@ -74,12 +74,14 @@ class FileFormPreventiveType(forms.Form):
class FileFormPlanning(forms.Form):
form_label = _(u"Planning")
- base_model = 'town'
- associated_models = {'town': Town}
+ base_models = ['town', 'department']
+ associated_models = {'town': Town, 'department': Department}
name = forms.CharField(label=_(u"Planning name"), required=False,
max_length=100)
town = widgets.MultipleAutocompleteField(
model=Town, label=_("Towns"), required=False)
+ department = widgets.MultipleAutocompleteField(
+ model=Department, label=_("Departments"), required=False)
locality = forms.CharField(label=_(u"Locality"), max_length=100,
required=False)
address = forms.CharField(
@@ -266,7 +268,6 @@ class FileFormPlanningService(forms.Form):
def is_valid(self, *args, **kwargs):
c = super(FileFormPlanningService, self).is_valid(*args, **kwargs)
- print(self.cleaned_data)
return c
@@ -283,7 +284,7 @@ class FileFormInstruction(forms.Form):
limit={
'person_types': [
PersonType.objects.get(txt_idx='sra_agent').pk]
- },
+ },
associated_model=Person, new=True),
validators=[valid_id(Person)])
related_file = forms.IntegerField(
diff --git a/archaeological_files_pdl/models.py b/archaeological_files_pdl/models.py
index 71a836239..6b2021999 100644
--- a/archaeological_files_pdl/models.py
+++ b/archaeological_files_pdl/models.py
@@ -1,3 +1 @@
-from django.db import models
-
# Create your models here.
diff --git a/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html b/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html
index 6bd5598b6..1be5b1b36 100644
--- a/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html
+++ b/archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html
@@ -32,6 +32,13 @@
</tr>
<tr>
+ <th colspan='2'><label for="id_preventiveplanning-{{CURRENT_ACTION}}-department">{% trans "Departments" %}</label></th>
+</tr>
+<tr>
+ <td>{{wizard.form.department|safe}}</td>
+</tr>
+
+<tr>
<th colspan='2'><label for="id_preventiveplanning-{{CURRENT_ACTION}}-locality">Lieu-dit</label></th>
</tr>
<tr>
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 7da654b80..cc371b5e2 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -284,6 +284,8 @@ class Wizard(NamedUrlWizardView):
frm = form.forms[0]
if hasattr(frm, 'base_model') and frm.base_model:
whole_associated_models.append(frm.base_model)
+ elif hasattr(frm, 'base_models') and frm.base_models:
+ whole_associated_models += frm.base_models
else:
whole_associated_models += associated_models.keys()
fields = frm.fields.copy()
@@ -291,8 +293,9 @@ class Wizard(NamedUrlWizardView):
fields.pop('DELETE')
multi = len(fields) > 1
if multi:
- assert hasattr(frm, 'base_model'), \
- u"Must define a base_model for " + \
+ assert hasattr(frm, 'base_model') or \
+ hasattr(frm, 'base_models'), \
+ u"Must define a base_model(s) for " + \
unicode(frm.__class__)
for frm in form.forms:
if not frm.is_valid():
@@ -314,7 +317,11 @@ class Wizard(NamedUrlWizardView):
else:
m2m.append((key, value))
if multi and vals:
- m2m.append((frm.base_model, vals))
+ if hasattr(frm, 'base_models'):
+ for m in frm.base_models:
+ m2m.append((frm.base_model, m))
+ else:
+ m2m.append((frm.base_model, vals))
elif type(form.cleaned_data) == dict:
for key in form.cleaned_data:
if key.startswith('hidden_'):
@@ -336,15 +343,17 @@ class Wizard(NamedUrlWizardView):
value = model.objects.get(pk=value)
else:
value = None
- if hasattr(form, 'base_model') and form.base_model and \
- form.base_model == key:
- whole_associated_models.append(form.base_model)
+ if (hasattr(form, 'base_model') and form.base_model and
+ form.base_model == key) or (
+ hasattr(form, 'base_models') and
+ key in form.base_models):
+ whole_associated_models.append(key)
if value:
vals = value
if type(vals) not in (list, tuple):
vals = [vals]
for val in vals:
- m2m.append((form.base_model, val))
+ m2m.append((key, val))
else:
dct[key] = value
return self.save_model(dct, m2m, whole_associated_models, form_list,
@@ -445,27 +454,27 @@ class Wizard(NamedUrlWizardView):
obj.save()
m2m_items = {}
for model in whole_associated_models:
- getattr(obj, model+'s').clear()
+ getattr(obj, model + 's').clear()
for key, value in m2m:
if key not in m2m_items:
if type(key) == dict:
vals = []
- for item in getattr(obj, key+'s').all():
+ for item in getattr(obj, key + 's').all():
v = {}
for k in value.keys():
v[k] = getattr(item, k)
vals.append(v)
m2m_items[key] = vals
else:
- m2m_items[key] = getattr(obj, key+'s').all()
+ m2m_items[key] = getattr(obj, key + 's').all()
if value not in m2m_items[key]:
if type(value) == dict:
- model = getattr(obj, key+'s').model
+ model = getattr(obj, key + 's').model
if issubclass(model, models.BaseHistorizedItem):
value['history_modifier'] = self.request.user
value = model.objects.create(**value)
value.save()
- getattr(obj, key+'s').add(value)
+ getattr(obj, key + 's').add(value)
# necessary to manage interaction between models like
# material_index management for baseitems
obj.save()
@@ -979,7 +988,7 @@ class AccountWizard(Wizard):
continue
for key in form.cleaned_data:
if key == 'hidden_password' and form.cleaned_data[key]:
- datas[-1][1].append((_("New password"), "*"*8))
+ datas[-1][1].append((_("New password"), "*" * 8))
return datas
def done(self, form_list, **kwargs):
@@ -1032,7 +1041,7 @@ class AccountWizard(Wizard):
'password': dct['password'],
'app_name': app_name,
'site': site and site.domain or ""
- })
+ })
t = loader.get_template('account_activation_email.txt')
msg = t.render(context)
subject = _(u"[%(app_name)s] Account creation/modification") % {