diff options
| 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 | 
| commit | 99209de93445c7f760b8f6f594c4700134aefb04 (patch) | |
| tree | a667bc72d80244a271c403ceb490ef2c45aa4db6 | |
| parent | b6178af0b0ffe1d8a93b8f117ab9802f097fcbb1 (diff) | |
| download | Ishtar-99209de93445c7f760b8f6f594c4700134aefb04.tar.bz2 Ishtar-99209de93445c7f760b8f6f594c4700134aefb04.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.html | 3 | ||||
| -rw-r--r-- | archaeological_files_pdl/forms.py | 11 | ||||
| -rw-r--r-- | archaeological_files_pdl/models.py | 2 | ||||
| -rw-r--r-- | archaeological_files_pdl/templates/ishtar/wizard/wizard_preventiveplanning.html | 7 | ||||
| -rw-r--r-- | ishtar_common/wizards.py | 37 | 
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") % { | 
