diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-07 00:40:14 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-07 00:40:14 +0100 |
| commit | 693469193a93c4569472c7aabb9e5565825f62ad (patch) | |
| tree | 01d846a45aa262dd6bfa45e5fe7c81489a52fbc6 | |
| parent | 000359b99c3a39be870fe744df295e3e39db9d7f (diff) | |
| download | Ishtar-693469193a93c4569472c7aabb9e5565825f62ad.tar.bz2 Ishtar-693469193a93c4569472c7aabb9e5565825f62ad.zip | |
Manage Parcels (refs #14)
| -rw-r--r-- | ishtar/furnitures/forms.py | 77 | ||||
| -rw-r--r-- | ishtar/furnitures/models.py | 9 |
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) |
