summaryrefslogtreecommitdiff
path: root/archaeological_files_pdl/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_files_pdl/forms.py')
-rw-r--r--archaeological_files_pdl/forms.py208
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