summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/forms.py77
-rw-r--r--ishtar/furnitures/models.py9
2 files changed, 78 insertions, 8 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py
index 12c9ae9c0..6723b99a6 100644
--- a/ishtar/furnitures/forms.py
+++ b/ishtar/furnitures/forms.py
@@ -23,10 +23,13 @@ Forms definition
import datetime
from django.core.urlresolvers import reverse
+from django.core.validators import MaxLengthValidator
+from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import ugettext_lazy as _
from django.template import Context, RequestContext
from django.shortcuts import render_to_response
from django.forms.formsets import formset_factory, BaseFormSet
+
from django import forms
from formwizard.forms import NamedUrlSessionFormWizard
@@ -198,7 +201,35 @@ class Wizard(NamedUrlSessionFormWizard):
**kwargs)
class FileWizard(Wizard):
- pass
+ def get_form(self, request, storage, step=None, data=None, files=None):
+ """
+ Manage formset
+ """
+ if data:
+ data = data.copy()
+ else:
+ data = {}
+ # manage the dynamic choice of towns
+ if not step:
+ step = self.determine_step(request, storage)
+ form = self.get_form_list(request, storage)[step]
+ if step == '3' and hasattr(form, 'management_form') \
+ and storage.prefix in request.session \
+ and 'step_data' in request.session[storage.prefix] \
+ and '2' in request.session[storage.prefix]['step_data']:
+ towns = []
+ qdict = request.session[storage.prefix]['step_data']['2']
+ for k in qdict.keys():
+ if k.endswith("town") and qdict[k]:
+ try:
+ town = models.Town.objects.get(pk=int(qdict[k]))
+ towns.append((town.pk, unicode(town)))
+ except (ObjectDoesNotExist, ValueError):
+ pass
+ data['TOWNS'] = sorted(towns, key=lambda x:x[1])
+ form = super(FileWizard, self).get_form(request, storage, step, data,
+ files)
+ return form
class FileForm1(forms.Form):
form_label = _("General")
@@ -231,7 +262,7 @@ class TownForm(forms.Form):
town = forms.IntegerField(label=_(u"Town"),
widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \
'autocomplete-town', associated_model=models.Town),
- validators=[models.Town.valid_id], required=False)
+ validators=[models.Town.valid_id])
class TownFormSet(FormSet):
def clean(self):
@@ -251,7 +282,41 @@ class TownFormSet(FormSet):
TownFormSet = formset_factory(TownForm, can_delete=True, formset=TownFormSet)
TownFormSet.form_label = _("Towns")
-class FileForm3(forms.Form):
+class ParcelFormSet(FormSet):
+ def __init__(self, *args, **kwargs):
+ super(FormSet, self).__init__(*args, **kwargs)
+
+
+class ParcelForm(forms.Form):
+ form_label = _("Parcels")
+ town = forms.ChoiceField(label=_("Town"), choices=(),
+ validators=[models.Town.valid_id])
+ section = forms.CharField(label=_(u"Section"),
+ validators=[MaxLengthValidator(4)])
+ parcel_number = forms.CharField(label=_(u"Parcel number"),
+ validators=[MaxLengthValidator(6)])
+ year = forms.IntegerField(label=_("Year"),
+ initial=lambda:datetime.datetime.now().year)
+ def __init__(self, *args, **kwargs):
+ towns = None
+ if 'data' in kwargs and 'TOWNS' in kwargs['data']:
+ towns = kwargs['data']['TOWNS']
+ # clean data if not "real" data
+ prefix_value = kwargs['prefix'] + '-town'
+ if not [k for k in kwargs['data'].keys()
+ if k.startswith(prefix_value) and kwargs['data'][k]]:
+ kwargs.pop('data')
+ if 'files' in kwargs:
+ kwargs.pop('files')
+ super(ParcelForm, self).__init__(*args, **kwargs)
+ if towns:
+ self.fields['town'].choices = [('', '--')] + towns
+
+ParcelFormSet = formset_factory(ParcelForm, can_delete=True,
+ formset=ParcelFormSet)
+ParcelFormSet.form_label = _("Parcels")
+
+class FileForm4(forms.Form):
form_label = _("Preventive informations")
associated_models = {'general_contractor':models.Organization,
'saisine_type':models.SaisineType}
@@ -283,7 +348,7 @@ def is_preventive(form_name, file_type_key='file_type'):
return False
return func
-file_creation_wizard = FileWizard([FileForm1, FileForm2, TownFormSet, FileForm3,
- FinalForm],
- url_name='file_creation', condition_list={'3':is_preventive('0')})
+file_creation_wizard = FileWizard([FileForm1, FileForm2, TownFormSet,
+ ParcelFormSet, FileForm4, FinalForm],
+ url_name='file_creation', condition_list={'4':is_preventive('0')})
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 9d7dc3aa5..6e623d321 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -301,8 +301,13 @@ class Operation(BaseHistorizedItem, OwnPerms):
class Parcel(LightHistorizedItem) :
- operation = models.ForeignKey(Operation, related_name='+',
- verbose_name=_(u"Operation"))
+ associated_file = models.ForeignKey(File, related_name='+', blank=True,
+ null=True, verbose_name=_(u"File"))
+ operation = models.ForeignKey(Operation, related_name='+', blank=True,
+ null=True, verbose_name=_(u"Operation"))
+ year = models.IntegerField(_(u"Year"),
+ default=lambda:datetime.datetime.now().year)
+ town = models.ForeignKey("Town", related_name='+', verbose_name=_(u"Town"))
section = models.CharField(_(u"Section"), max_length=4)
parcel_number = models.CharField(_(u"Parcel number"), max_length=6)