diff options
Diffstat (limited to 'archaeological_files_pdl/forms.py')
-rw-r--r-- | archaeological_files_pdl/forms.py | 208 |
1 files changed, 202 insertions, 6 deletions
diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py index 87221f24c..53d473b96 100644 --- a/archaeological_files_pdl/forms.py +++ b/archaeological_files_pdl/forms.py @@ -21,20 +21,22 @@ import datetime from django import forms 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 +from ishtar_common.models import Person, PersonType, valid_id from archaeological_files import models -from ishtar_common.forms import get_now +from ishtar_common.forms import get_now, reverse_lazy +from ishtar_common.forms_common import get_advanced_town_field +from archaeological_files.forms import GENERAL_CONTRACTOR, \ + RESPONSIBLE_PLANNING_SERVICE from ishtar_common import widgets class FileFormGeneral(forms.Form): form_label = _("General") - associated_models = {'in_charge':Person, - 'related_file':models.File, - 'file_type':models.FileType} + associated_models = {'file_type':models.FileType} file_type = forms.ChoiceField(label=_("File type"), choices=[]) year = forms.IntegerField(label=_("Year"), initial=lambda:datetime.datetime.now().year, @@ -43,9 +45,203 @@ class FileFormGeneral(forms.Form): creation_date = forms.DateField(label=_(u"Creation date"), initial=get_now, widget=widgets.JQueryDate) reception_date = forms.DateField(label=_(u"Reception date"), - initial=get_now, widget=widgets.JQueryDate) + widget=widgets.JQueryDate) def __init__(self, *args, **kwargs): super(FileFormGeneral, self).__init__(*args, **kwargs) self.fields['file_type'].choices = models.FileType.get_types() self.fields['file_type'].help_text = models.FileType.get_help() + +class FileFormPreventiveType(forms.Form): + form_label = u"Saisine" + associated_models = {'saisine_type':models.SaisineType, + 'permit_type':models.PermitType} + permit_type = forms.ChoiceField(label=_(u"Permit type"), required=False, + choices=[]) + saisine_type = forms.ChoiceField(label=_(u"Saisine type"), + choices=[]) + def __init__(self, *args, **kwargs): + super(FileFormPreventiveType, self).__init__(*args, **kwargs) + self.fields['saisine_type'].choices = models.SaisineType.get_types() + self.fields['saisine_type'].help_text = models.SaisineType.get_help() + self.fields['permit_type'].choices = models.PermitType.get_types( + default='NP') + self.fields['permit_type'].help_text = models.PermitType.get_help() + +class FileFormPlanning(forms.Form): + form_label = _(u"Planning") + associated_models = {'main_town':models.Town} + name = forms.CharField(label=_(u"Planning name"), required=False, + max_length=100) + main_town = get_advanced_town_field(required=True) + locality = forms.CharField(label=_(u"Locality"), max_length=100, + required=False) + address = forms.CharField(label=_(u"Address (number/street)"), + widget=forms.Textarea( + attrs={"placeholder":_(u"Number/street")}), + required=False, + ) + postal_code = forms.CharField(label=_(u"Postal code"), max_length=10, + required=False) + total_surface = forms.IntegerField(required=False, + widget=widgets.AreaWidget, + label=_(u"Total surface (m²)"), + validators=[validators.MinValueValidator(0), + validators.MaxValueValidator(999999999)]) + total_developed_surface = forms.IntegerField(widget=widgets.AreaWidget, + label=_(u"Total developed surface (m²)"), + required=False, validators=[validators.MinValueValidator(0), + validators.MaxValueValidator(999999999)]) + +class FileFormResearchAddress(forms.Form): + form_label = _(u"Address") + associated_models = {'main_town':models.Town} + main_town = get_advanced_town_field(required=True) + locality = forms.CharField(label=_(u"Locality"), max_length=100, + required=False) + address = forms.CharField(label=_(u"Address (number/street)"), + widget=forms.Textarea( + attrs={"placeholder":_(u"Number/street")}), + required=False, + ) + postal_code = forms.CharField(label=_(u"Postal code"), max_length=10, + required=False) + +class PersonOrgaForm(forms.Form): + PERSON_FIELD = 'TO BE DEFINED' + ORGA_FIELD = 'TO BE DEFINED' + PERSON_TYPE = GENERAL_CONTRACTOR + + def _media(self): + if self.status == 'corporation': + return forms.Media(js=('pdl/JQueryCorporation.js',)) + media = property(_media) + + def __init__(self, *args, **kwargs): + + # get the status: natural person or corporation + DEFAULT_STATUS = 'natural' + current_status = '' + if 'data' in kwargs: + current_item_key = ((kwargs['prefix'] + '-') if kwargs.get('prefix')\ + else '') + self.PERSON_FIELD + if kwargs['data'] and kwargs['data'].get(current_item_key): + model = self.associated_models[self.PERSON_FIELD] + try: + item = model.objects.get(pk=kwargs['data'][current_item_key]) + current_status = 'natural' + except (model.DoesNotExist, ValueError): + pass + current_item_key = ((kwargs['prefix'] + '-') if kwargs.get('prefix')\ + else '') + self.ORGA_FIELD + if kwargs['data'] and kwargs['data'].get(current_item_key): + current_status = 'corporation' + + status = '' + if 'status' in kwargs: + status = kwargs.pop('status') + if current_status != status: + if kwargs.get('data'): + # status is different from the existing - clear fields + kwargs.pop('data') + elif current_status: + status = current_status + else: + status = DEFAULT_STATUS + + self.status = status + + if status not in ('natural', 'corporation'): + status = DEFAULT_STATUS + super(PersonOrgaForm, self).__init__(*args, **kwargs) + + # distinct widget for natural and corporation + if status == 'natural': + self.fields[self.PERSON_FIELD] = forms.IntegerField( + label=self.fields[self.ORGA_FIELD].label, + required=False, + widget=widgets.JQueryPersonOrganization( + reverse_lazy('autocomplete-person', + args=[self.PERSON_TYPE.pk]), + reverse_lazy('person_create'), + model=Person, + limit={'person_types':[self.PERSON_TYPE.pk], + 'attached_to__isnull':True}, + js_template='ishtar/blocks/JQueryNaturalPerson.js', + new=True), + validators=[valid_id(Person)]) + +class FileFormGeneralContractor(PersonOrgaForm): + form_label = _(u"General contractor") + associated_models = {'general_contractor':models.Person} + raw_general_contractor = forms.CharField(label=_(u"General contractor"), + required=False, max_length=200) + PERSON_FIELD = 'general_contractor' + ORGA_FIELD = 'raw_general_contractor' + PERSON_TYPE = GENERAL_CONTRACTOR + +class FileFormPlanningService(PersonOrgaForm): + form_label = _(u"Town planning service") + associated_models = {'responsible_town_planning_service':models.Person} + + reference_number = forms.IntegerField(label=_(u"File reference"), + required=False) + raw_town_planning_service = forms.CharField( + label=_(u"Responsible town planning service"), required=False, + max_length=200) + PERSON_FIELD = 'responsible_town_planning_service' + ORGA_FIELD = 'raw_town_planning_service' + PERSON_TYPE = RESPONSIBLE_PLANNING_SERVICE + + def __init__(self, *args, **kwargs): + super(FileFormPlanningService, self).__init__(*args, **kwargs) + self.fields.keyOrder = [] + if self.ORGA_FIELD in self.fields: + self.fields.keyOrder.append(self.ORGA_FIELD) + elif self.PERSON_FIELD in self.fields: + self.fields.keyOrder.append(self.PERSON_FIELD) + self.fields.keyOrder.append('reference_number') + +class FileFormInstruction(forms.Form): + form_label = u"Instruction SRA" + associated_models = {'in_charge':models.Person} + in_charge = forms.IntegerField(label=_("Person in charge"), + widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person', + args=[PersonType.objects.get(txt_idx='sra_agent').pk]), + limit={'person_types':[PersonType.objects.get(txt_idx='sra_agent').pk]}, + associated_model=Person, new=True), + validators=[valid_id(Person)]) + related_file = forms.IntegerField(label=_("Related file"), required=False, + widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'), + associated_model=models.File), + validators=[valid_id(models.File)]) + comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, + required=False) + instruction_deadline = forms.DateField(widget=widgets.JQueryDate, + required=False) + year = forms.IntegerField(label=_("Year"), + validators=[validators.MinValueValidator(1900), + validators.MaxValueValidator(2100)]) + numeric_reference = forms.IntegerField(label=_("Numeric reference"), + required=False) + end_date = forms.DateField(initial=get_now, widget=widgets.JQueryDate, + required=False) + + def __init__(self, *args, **kwargs): + c_year = datetime.date.today().year + if 'year' in kwargs: + c_year = kwargs.pop('year') + super(FileFormInstruction, self).__init__(*args, **kwargs) + self.fields['year'].initial = c_year + self.fields['year'].widget.attrs.update({'readonly':'readonly'}) + c_num, lasts = 0, "" + q = models.File.objects.filter(numeric_reference__isnull=False, + year=c_year).order_by('-numeric_reference') + if q.count(): + num = q.all()[0].numeric_reference + lasts = u"SRA %s-%d" % (unicode(c_year), num) + lbl = self.fields['numeric_reference'].label + if lasts: + lbl += u"<br/>(dernière entrée : %s)" % lasts + self.fields['numeric_reference'].label = mark_safe(lbl) + self.fields['numeric_reference'].initial = c_num + 1 |