diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-08 00:45:10 +0200 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-08 00:45:10 +0200 |
| commit | 4900d779ffeb44d8d172880d0d0191edc757c9aa (patch) | |
| tree | 516f3c6ff96f41b1421910274fb8ea9dbd2fd91d | |
| parent | 7e96b330e5c0d5410372b181d33fb3f6360b64cc (diff) | |
| download | Ishtar-4900d779ffeb44d8d172880d0d0191edc757c9aa.tar.bz2 Ishtar-4900d779ffeb44d8d172880d0d0191edc757c9aa.zip | |
First work to modularize the application: archaeologicals files forms
| -rw-r--r-- | ishtar/furnitures/forms.py | 318 | ||||
| -rw-r--r-- | ishtar/furnitures/forms_files.py | 354 | ||||
| -rw-r--r-- | ishtar/furnitures/forms_main.py | 5 | ||||
| -rw-r--r-- | ishtar/locale/fr/LC_MESSAGES/django.po | 2 |
4 files changed, 358 insertions, 321 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index 7e55567db..4f23b49b2 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -640,324 +640,6 @@ def get_now(): value = datetime.datetime.now().strftime(format) return value -class FileWizard(Wizard): - model = models.File - object_parcel_type = 'associated_file' - - def get_form(self, request, storage, step=None, data=None, files=None): - """ - Manage towns - """ - 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] - town_form_key = 'towns-' + self.url_name - if step.startswith('parcels-') and hasattr(form, 'management_form') \ - and self.session_has_key(request, storage, town_form_key): - towns = [] - qdict = request.session[storage.prefix]['step_data'][town_form_key] - 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 - - def get_extra_model(self, dct, request, storage, form_list): - dct = super(FileWizard, self).get_extra_model(dct, request, storage, - form_list) - current_ref = models.File.objects.filter(year=dct['year'] - ).aggregate(Max('numeric_reference'))["numeric_reference__max"] - dct['numeric_reference'] = current_ref and current_ref + 1 or 1 - return dct - - def done(self, request, storage, form_list, **kwargs): - ''' - Save parcels - ''' - r = super(FileWizard, self).done(request, storage, form_list, - return_object=True, **kwargs) - if type(r) not in (list, tuple) or len(r) != 2: - return r - obj, res = r - obj.parcels.clear() - for form in form_list: - if not hasattr(form, 'prefix') \ - or not form.prefix.startswith('parcels-') \ - or not hasattr(form, 'forms'): - continue - for frm in form.forms: - if not frm.is_valid(): - continue - dct = frm.cleaned_data.copy() - if 'parcel' in dct: - try: - parcel = models.Parcel.objects.get(pk=dct['parcel']) - setattr(parcel, self.object_parcel_type, obj) - parcel.save() - except (ValueError, ObjectDoesNotExist): - continue - continue - try: - dct['town'] = models.Town.objects.get(pk=int(dct['town'])) - except (ValueError, ObjectDoesNotExist): - continue - dct['associated_file'], dct['operation'] = None, None - dct[self.object_parcel_type] = obj - if 'DELETE' in dct: - dct.pop('DELETE') - parcel = models.Parcel.objects.filter(**dct).count() - if not parcel: - dct['history_modifier'] = request.user - parcel = models.Parcel(**dct) - parcel.save() - return res - -class FileSelect(forms.Form): - towns = forms.IntegerField(label=_(u"Town"), - widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ - 'autocomplete-town', associated_model=models.Town), - validators=[models.valid_id(models.Town)]) - file_type = forms.ChoiceField(label=_("File type"), - choices=models.FileType.get_types()) - saisine_type = forms.ChoiceField(label=_("Saisine type"), - choices=models.SaisineType.get_types()) - year = forms.IntegerField(label=_("Year")) - -class FileFormSelection(forms.Form): - form_label = _("Archaeological file") - associated_models = {'pk':models.File} - currents = {'pk':models.File} - pk = forms.IntegerField(label="", required=False, - widget=widgets.JQueryJqGrid(reverse_lazy('get-file'), - FileSelect(), models.File), - validators=[models.valid_id(models.File)]) - - def clean(self): - cleaned_data = self.cleaned_data - if 'pk' not in cleaned_data or not cleaned_data['pk']: - raise forms.ValidationError(_(u"You should select a file.")) - return cleaned_data - -class FileFormGeneral(forms.Form): - form_label = _("General") - associated_models = {'in_charge':models.Person, - 'related_file':models.File, - 'file_type':models.FileType} - in_charge = forms.IntegerField(label=_("Person in charge"), - widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person', - args=[models.PersonType.objects.get(txt_idx='sra_agent').pk]), - associated_model=models.Person), - validators=[models.valid_id(models.Person)]) - year = forms.IntegerField(label=_("Year"), - initial=lambda:datetime.datetime.now().year, - validators=[validators.MinValueValidator(1900), - validators.MaxValueValidator(2100)]) - numeric_reference = forms.IntegerField(label=_("Numeric reference"), - widget=forms.HiddenInput, required=False) - internal_reference = forms.CharField(label=_(u"Internal reference"), -max_length=60, validators=[models.is_unique(models.File, 'internal_reference')]) - creation_date = forms.DateField(label=_(u"Creation date"), - initial=get_now, widget=widgets.JQueryDate) - file_type = forms.ChoiceField(label=_("File type"), - choices=models.FileType.get_types()) - related_file = forms.IntegerField(label=_("Related file"), required=False, - widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'), - associated_model=models.File), - validators=[models.valid_id(models.File)]) - comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, - required=False) - -class FileFormGeneralRO(FileFormGeneral): - year = forms.IntegerField(label=_("Year"), - widget=forms.TextInput(attrs={'readonly':True})) - numeric_reference = forms.IntegerField(label=_("Numeric reference"), - widget=forms.TextInput(attrs={'readonly':True})) - internal_reference = forms.CharField(label=_(u"Internal reference"), - widget=forms.TextInput(attrs={'readonly':True},)) - -class FileFormAddress(forms.Form): - form_label = _("Address") - associated_models = {'town':models.Town} - total_surface = forms.IntegerField(required=False, - widget=widgets.AreaWidget, - label=_(u"Total surface"), - validators=[validators.MinValueValidator(0), - validators.MaxValueValidator(999999999)]) - address = forms.CharField(label=_(u"Main address"), widget=forms.Textarea) - address_complement = forms.CharField(label=_(u"Main address - complement"), - required=False) - postal_code = forms.CharField(label=_(u"Main address - postal code"), - max_length=10) - -class TownForm(forms.Form): - form_label = _("Towns") - associated_models = {'town':models.Town} - # !FIXME hard_link, reverse_lazy doen't seem to work with formsets - town = forms.IntegerField(label=_(u"Town"), required=False, - widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ - 'autocomplete-town', associated_model=models.Town), - validators=[models.valid_id(models.Town)]) - -class TownFormSet(FormSet): - def clean(self): - """Checks that no towns are duplicated.""" - if any(self.errors): - return - towns = [] - for i in range(0, self.total_form_count()): - form = self.forms[i] - if not form.is_valid(): - continue - if 'town' not in form.cleaned_data or not form.cleaned_data['town']: - continue - town = form.cleaned_data['town'] - if town in towns: - raise forms.ValidationError, _("There are identical towns.") - towns.append(town) - -TownFormSet = formset_factory(TownForm, can_delete=True, formset=TownFormSet) -TownFormSet.form_label = _("Towns") - -class ParcelForm(forms.Form): - form_label = _("Parcels") - base_model = 'parcel' - associated_models = {'parcel':models.Parcel, 'town':models.Town} - town = forms.ChoiceField(label=_("Town"), choices=(), required=False, - validators=[models.valid_id(models.Town)]) - section = forms.CharField(label=_(u"Section"), required=False, - validators=[validators.MaxLengthValidator(4)]) - parcel_number = forms.CharField(label=_(u"Parcel number"), required=False, - validators=[validators.MaxLengthValidator(6)]) - year = forms.IntegerField(label=_("Year"), required=False, - initial=lambda:datetime.datetime.now().year, - validators=[validators.MinValueValidator(1900), - validators.MaxValueValidator(2100)]) - 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['data'] = None - if 'files' in kwargs: - kwargs.pop('files') - super(ParcelForm, self).__init__(*args, **kwargs) - if towns: - self.fields['town'].choices = [('', '--')] + towns - - def clean(self): - """Check required fields""" - if any(self.errors): - return - if not self.cleaned_data or DELETION_FIELD_NAME in self.cleaned_data \ - and self.cleaned_data[DELETION_FIELD_NAME]: - return - for key in ('town', 'parcel_number', 'year'): - if not key in self.cleaned_data or not self.cleaned_data[key]: - raise forms.ValidationError(_(u"All fields are required")) - return self.cleaned_data - - -class ParcelFormSet(FormSet): - def clean(self): - """Checks that no parcels are duplicated.""" - return clean_duplicated(self, ('town', 'parcel_number', 'year')) - -ParcelFormSet = formset_factory(ParcelForm, can_delete=True, - formset=ParcelFormSet) -ParcelFormSet.form_label = _("Parcels") - -class FileFormPreventive(forms.Form): - form_label = _("Preventive informations") - associated_models = {'general_contractor':models.Person, - 'saisine_type':models.SaisineType, - 'permit_type':models.PermitType, - 'town_planning_service':models.Organization} - general_contractor = forms.IntegerField(label=_(u"General contractor"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-person', - args=[models.PersonType.objects.get(txt_idx='general_contractor').pk]), - associated_model=models.Person), - validators=[models.valid_id(models.Person)]) - town_planning_service = forms.IntegerField(required=False, - label=_(u"Town planning service"), - widget=widgets.JQueryAutoComplete( - reverse_lazy('autocomplete-organization', - args=[models.OrganizationType.objects.get(txt_idx='planning_service').pk]), - associated_model=models.Organization), - validators=[models.valid_id(models.Organization)]) - permit_type = forms.ChoiceField(label=_("Permit type"), required=False, - choices=models.PermitType.get_types()) - permit_reference = forms.CharField(label=_(u"Permit reference"), - required=False, validators=[validators.MaxLengthValidator(60)]) - total_developed_surface = forms.IntegerField(widget=widgets.AreaWidget, - label=_(u"Total developed surface"), - required=False, validators=[validators.MinValueValidator(0), - validators.MaxValueValidator(999999999)]) - if settings.COUNTRY == 'fr': - saisine_type = forms.ChoiceField(label=_("Saisine type"), - choices=models.SaisineType.get_types()) - reception_date = forms.DateField(label=_(u"Reception date"), - initial=get_now, widget=widgets.JQueryDate) - -def is_preventive(form_name, model, type_key='file_type', key=''): - def func(self, request, storage): - if storage.prefix not in request.session or \ - 'step_data' not in request.session[storage.prefix] or \ - form_name not in request.session[storage.prefix]['step_data'] or\ - form_name + '-' + type_key not in \ - request.session[storage.prefix]['step_data'][form_name]: - return False - try: - type = int(request.session[storage.prefix]['step_data']\ - [form_name][form_name+'-'+type_key]) - return model.is_preventive(type, key) - except ValueError: - return False - return func - -file_search_wizard = SearchWizard([('general-file_search', FileFormSelection)], - url_name='file_search',) - -file_creation_wizard = FileWizard([ - ('general-file_creation', FileFormGeneral), - ('address-file_creation', FileFormAddress), - ('towns-file_creation', TownFormSet), - ('parcels-file_creation', ParcelFormSet), - ('preventive-file_creation', FileFormPreventive), - ('final-file_creation', FinalForm)], - condition_list={ -'preventive-file_creation':is_preventive('general-file_creation', models.FileType) - }, - url_name='file_creation',) - -file_modification_wizard = FileWizard([ - ('selec-file_modification', FileFormSelection), - ('general-file_modification', FileFormGeneralRO), - ('adress-file_modification', FileFormAddress), - ('towns-file_modification', TownFormSet), - ('parcels-file_modification', ParcelFormSet), - ('preventive-file_modification', FileFormPreventive), - ('final-file_modification', FinalForm)], - condition_list={ -'preventive-file_modification':is_preventive('general-file_modification', - models.FileType) - }, - url_name='file_modification',) - class DeletionWizard(Wizard): def get_formated_datas(self, forms): datas = super(DeletionWizard, self).get_formated_datas(forms) diff --git a/ishtar/furnitures/forms_files.py b/ishtar/furnitures/forms_files.py new file mode 100644 index 000000000..ae52fc8cc --- /dev/null +++ b/ishtar/furnitures/forms_files.py @@ -0,0 +1,354 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2010-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# See the file COPYING for details. + +""" +Files forms definitions +""" +import datetime + +from django import forms +from django.core import validators +from django.core.exceptions import ObjectDoesNotExist +from django.db.models import Max +from django.utils.translation import ugettext_lazy as _ + +from ishtar import settings + +import models +import widgets +from forms import Wizard, FinalForm, FormSet, SearchWizard, formset_factory, \ + get_now, reverse_lazy + +class FileWizard(Wizard): + model = models.File + object_parcel_type = 'associated_file' + + def get_form(self, request, storage, step=None, data=None, files=None): + """ + Manage towns + """ + 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] + town_form_key = 'towns-' + self.url_name + if step.startswith('parcels-') and hasattr(form, 'management_form') \ + and self.session_has_key(request, storage, town_form_key): + towns = [] + qdict = request.session[storage.prefix]['step_data'][town_form_key] + 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 + + def get_extra_model(self, dct, request, storage, form_list): + dct = super(FileWizard, self).get_extra_model(dct, request, storage, + form_list) + current_ref = models.File.objects.filter(year=dct['year'] + ).aggregate(Max('numeric_reference'))["numeric_reference__max"] + dct['numeric_reference'] = current_ref and current_ref + 1 or 1 + return dct + + def done(self, request, storage, form_list, **kwargs): + ''' + Save parcels + ''' + r = super(FileWizard, self).done(request, storage, form_list, + return_object=True, **kwargs) + if type(r) not in (list, tuple) or len(r) != 2: + return r + obj, res = r + obj.parcels.clear() + for form in form_list: + if not hasattr(form, 'prefix') \ + or not form.prefix.startswith('parcels-') \ + or not hasattr(form, 'forms'): + continue + for frm in form.forms: + if not frm.is_valid(): + continue + dct = frm.cleaned_data.copy() + if 'parcel' in dct: + try: + parcel = models.Parcel.objects.get(pk=dct['parcel']) + setattr(parcel, self.object_parcel_type, obj) + parcel.save() + except (ValueError, ObjectDoesNotExist): + continue + continue + try: + dct['town'] = models.Town.objects.get(pk=int(dct['town'])) + except (ValueError, ObjectDoesNotExist): + continue + dct['associated_file'], dct['operation'] = None, None + dct[self.object_parcel_type] = obj + if 'DELETE' in dct: + dct.pop('DELETE') + parcel = models.Parcel.objects.filter(**dct).count() + if not parcel: + dct['history_modifier'] = request.user + parcel = models.Parcel(**dct) + parcel.save() + return res + +class FileSelect(forms.Form): + towns = forms.IntegerField(label=_(u"Town"), + widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ + 'autocomplete-town', associated_model=models.Town), + validators=[models.valid_id(models.Town)]) + file_type = forms.ChoiceField(label=_("File type"), + choices=models.FileType.get_types()) + saisine_type = forms.ChoiceField(label=_("Saisine type"), + choices=models.SaisineType.get_types()) + year = forms.IntegerField(label=_("Year")) + +class FileFormSelection(forms.Form): + form_label = _("Archaeological file") + associated_models = {'pk':models.File} + currents = {'pk':models.File} + pk = forms.IntegerField(label="", required=False, + widget=widgets.JQueryJqGrid(reverse_lazy('get-file'), + FileSelect(), models.File), + validators=[models.valid_id(models.File)]) + + def clean(self): + cleaned_data = self.cleaned_data + if 'pk' not in cleaned_data or not cleaned_data['pk']: + raise forms.ValidationError(_(u"You should select a file.")) + return cleaned_data + +class FileFormGeneral(forms.Form): + form_label = _("General") + associated_models = {'in_charge':models.Person, + 'related_file':models.File, + 'file_type':models.FileType} + in_charge = forms.IntegerField(label=_("Person in charge"), + widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person', + args=[models.PersonType.objects.get(txt_idx='sra_agent').pk]), + associated_model=models.Person), + validators=[models.valid_id(models.Person)]) + year = forms.IntegerField(label=_("Year"), + initial=lambda:datetime.datetime.now().year, + validators=[validators.MinValueValidator(1900), + validators.MaxValueValidator(2100)]) + numeric_reference = forms.IntegerField(label=_("Numeric reference"), + widget=forms.HiddenInput, required=False) + internal_reference = forms.CharField(label=_(u"Internal reference"), +max_length=60, validators=[models.is_unique(models.File, 'internal_reference')]) + creation_date = forms.DateField(label=_(u"Creation date"), + initial=get_now, widget=widgets.JQueryDate) + file_type = forms.ChoiceField(label=_("File type"), + choices=models.FileType.get_types()) + related_file = forms.IntegerField(label=_("Related file"), required=False, + widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'), + associated_model=models.File), + validators=[models.valid_id(models.File)]) + comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, + required=False) + +class FileFormGeneralRO(FileFormGeneral): + year = forms.IntegerField(label=_("Year"), + widget=forms.TextInput(attrs={'readonly':True})) + numeric_reference = forms.IntegerField(label=_("Numeric reference"), + widget=forms.TextInput(attrs={'readonly':True})) + internal_reference = forms.CharField(label=_(u"Internal reference"), + widget=forms.TextInput(attrs={'readonly':True},)) + +class FileFormAddress(forms.Form): + form_label = _("Address") + associated_models = {'town':models.Town} + total_surface = forms.IntegerField(required=False, + widget=widgets.AreaWidget, + label=_(u"Total surface"), + validators=[validators.MinValueValidator(0), + validators.MaxValueValidator(999999999)]) + address = forms.CharField(label=_(u"Main address"), widget=forms.Textarea) + address_complement = forms.CharField(label=_(u"Main address - complement"), + required=False) + postal_code = forms.CharField(label=_(u"Main address - postal code"), + max_length=10) + +class TownForm(forms.Form): + form_label = _("Towns") + associated_models = {'town':models.Town} + # !FIXME hard_link, reverse_lazy doen't seem to work with formsets + town = forms.IntegerField(label=_(u"Town"), required=False, + widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ + 'autocomplete-town', associated_model=models.Town), + validators=[models.valid_id(models.Town)]) + +class TownFormSet(FormSet): + def clean(self): + """Checks that no towns are duplicated.""" + if any(self.errors): + return + towns = [] + for i in range(0, self.total_form_count()): + form = self.forms[i] + if not form.is_valid(): + continue + if 'town' not in form.cleaned_data or not form.cleaned_data['town']: + continue + town = form.cleaned_data['town'] + if town in towns: + raise forms.ValidationError, _("There are identical towns.") + towns.append(town) + +TownFormSet = formset_factory(TownForm, can_delete=True, formset=TownFormSet) +TownFormSet.form_label = _("Towns") + +class ParcelForm(forms.Form): + form_label = _("Parcels") + base_model = 'parcel' + associated_models = {'parcel':models.Parcel, 'town':models.Town} + town = forms.ChoiceField(label=_("Town"), choices=(), required=False, + validators=[models.valid_id(models.Town)]) + section = forms.CharField(label=_(u"Section"), required=False, + validators=[validators.MaxLengthValidator(4)]) + parcel_number = forms.CharField(label=_(u"Parcel number"), required=False, + validators=[validators.MaxLengthValidator(6)]) + year = forms.IntegerField(label=_("Year"), required=False, + initial=lambda:datetime.datetime.now().year, + validators=[validators.MinValueValidator(1900), + validators.MaxValueValidator(2100)]) + 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['data'] = None + if 'files' in kwargs: + kwargs.pop('files') + super(ParcelForm, self).__init__(*args, **kwargs) + if towns: + self.fields['town'].choices = [('', '--')] + towns + + def clean(self): + """Check required fields""" + if any(self.errors): + return + if not self.cleaned_data or DELETION_FIELD_NAME in self.cleaned_data \ + and self.cleaned_data[DELETION_FIELD_NAME]: + return + for key in ('town', 'parcel_number', 'year'): + if not key in self.cleaned_data or not self.cleaned_data[key]: + raise forms.ValidationError(_(u"All fields are required")) + return self.cleaned_data + + +class ParcelFormSet(FormSet): + def clean(self): + """Checks that no parcels are duplicated.""" + return clean_duplicated(self, ('town', 'parcel_number', 'year')) + +ParcelFormSet = formset_factory(ParcelForm, can_delete=True, + formset=ParcelFormSet) +ParcelFormSet.form_label = _("Parcels") + +class FileFormPreventive(forms.Form): + form_label = _("Preventive informations") + associated_models = {'general_contractor':models.Person, + 'saisine_type':models.SaisineType, + 'permit_type':models.PermitType, + 'town_planning_service':models.Organization} + general_contractor = forms.IntegerField(label=_(u"General contractor"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-person', + args=[models.PersonType.objects.get(txt_idx='general_contractor').pk]), + associated_model=models.Person), + validators=[models.valid_id(models.Person)]) + town_planning_service = forms.IntegerField(required=False, + label=_(u"Town planning service"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-organization', + args=[models.OrganizationType.objects.get(txt_idx='planning_service').pk]), + associated_model=models.Organization), + validators=[models.valid_id(models.Organization)]) + permit_type = forms.ChoiceField(label=_("Permit type"), required=False, + choices=models.PermitType.get_types()) + permit_reference = forms.CharField(label=_(u"Permit reference"), + required=False, validators=[validators.MaxLengthValidator(60)]) + total_developed_surface = forms.IntegerField(widget=widgets.AreaWidget, + label=_(u"Total developed surface"), + required=False, validators=[validators.MinValueValidator(0), + validators.MaxValueValidator(999999999)]) + if settings.COUNTRY == 'fr': + saisine_type = forms.ChoiceField(label=_("Saisine type"), + choices=models.SaisineType.get_types()) + reception_date = forms.DateField(label=_(u"Reception date"), + initial=get_now, widget=widgets.JQueryDate) + +def is_preventive(form_name, model, type_key='file_type', key=''): + def func(self, request, storage): + if storage.prefix not in request.session or \ + 'step_data' not in request.session[storage.prefix] or \ + form_name not in request.session[storage.prefix]['step_data'] or\ + form_name + '-' + type_key not in \ + request.session[storage.prefix]['step_data'][form_name]: + return False + try: + type = int(request.session[storage.prefix]['step_data']\ + [form_name][form_name+'-'+type_key]) + return model.is_preventive(type, key) + except ValueError: + return False + return func + +file_search_wizard = SearchWizard([('general-file_search', FileFormSelection)], + url_name='file_search',) + +file_creation_wizard = FileWizard([ + ('general-file_creation', FileFormGeneral), + ('address-file_creation', FileFormAddress), + ('towns-file_creation', TownFormSet), + ('parcels-file_creation', ParcelFormSet), + ('preventive-file_creation', FileFormPreventive), + ('final-file_creation', FinalForm)], + condition_list={ +'preventive-file_creation':is_preventive('general-file_creation', models.FileType) + }, + url_name='file_creation',) + +file_modification_wizard = FileWizard([ + ('selec-file_modification', FileFormSelection), + ('general-file_modification', FileFormGeneralRO), + ('adress-file_modification', FileFormAddress), + ('towns-file_modification', TownFormSet), + ('parcels-file_modification', ParcelFormSet), + ('preventive-file_modification', FileFormPreventive), + ('final-file_modification', FinalForm)], + condition_list={ +'preventive-file_modification':is_preventive('general-file_modification', + models.FileType) + }, + url_name='file_modification',) diff --git a/ishtar/furnitures/forms_main.py b/ishtar/furnitures/forms_main.py index d44ecfd87..951f2d234 100644 --- a/ishtar/furnitures/forms_main.py +++ b/ishtar/furnitures/forms_main.py @@ -1,6 +1,6 @@ -#/usr/bin/env python +#!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -18,5 +18,6 @@ # See the file COPYING for details. from forms_administrative import * +from forms_files import * from forms import * diff --git a/ishtar/locale/fr/LC_MESSAGES/django.po b/ishtar/locale/fr/LC_MESSAGES/django.po index dd6e6810c..021a07488 100644 --- a/ishtar/locale/fr/LC_MESSAGES/django.po +++ b/ishtar/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: alpha\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-08 00:36+0200\n" +"POT-Creation-Date: 2011-06-08 00:40+0200\n" "PO-Revision-Date: 2010-12-09\n" "Last-Translator: Étienne Loks <etienne.loks at peacefrogs net>\n" "Language-Team: \n" |
