diff options
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r-- | archaeological_operations/forms.py | 185 |
1 files changed, 110 insertions, 75 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 841131da6..6ba343508 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -49,9 +49,9 @@ from ishtar_common import widgets from ishtar_common.forms import FinalForm, FormSet, get_now, \ reverse_lazy, get_form_selection, TableSelect, get_data_from_formset, \ - ManageOldType + ManageOldType, CustomForm, FieldType from ishtar_common.forms_common import TownFormSet, SourceForm, SourceSelect, \ - get_town_field + get_town_field, TownForm from archaeological_operations.utils import parse_parcels @@ -366,10 +366,6 @@ class ParcelFormSet(FormSet): if hasattr(self, 'cleaned_data') and self.cleaned_data: return self.cleaned_data -ParcelFormSet = formset_factory(ParcelForm, can_delete=True, - formset=ParcelFormSet) -ParcelFormSet.form_label = _(u"Parcels") - class RecordRelationsForm(ManageOldType, forms.Form): base_model = 'right_relation' @@ -477,6 +473,8 @@ class RecordRelationsFormSetBase(FormSet): RecordRelationsFormSet = formset_factory( RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase) RecordRelationsFormSet.form_label = _(u"Relations") +RecordRelationsFormSet.form_admin_name = _(u"Operation - 080 - Relations") +RecordRelationsFormSet.form_slug = "operation-080-relations" class OperationSelect(TableSelect): @@ -675,12 +673,15 @@ class OperationFormFileChoice(forms.Form): validators=[valid_id(File)], required=False) -class OperationFormAbstract(forms.Form): +class OperationFormAbstract(CustomForm, forms.Form): form_label = _(u"Abstract") + form_admin_name = _(u"Operation - 090 - Abstract") + form_slug = "operation-090-abstract" abstract = forms.CharField( label=_(u"Abstract"), widget=forms.Textarea(attrs={'class': 'xlarge'}), required=False) + SLICING = (("month", _(u"months")), ('year', _(u"years")),) DATE_SOURCE = (('creation', _(u"Creation date")), @@ -761,8 +762,11 @@ class DashboardForm(forms.Form): return fltr -class OperationFormGeneral(ManageOldType, forms.Form): +class OperationFormGeneral(ManageOldType, CustomForm, forms.Form): form_label = _(u"General") + form_admin_name = _(u"Operation - 010 - General") + form_slug = "operation-010-general" + file_upload = True associated_models = {'scientist': Person, 'in_charge': Person, @@ -882,33 +886,36 @@ class OperationFormGeneral(ManageOldType, forms.Form): 'height': settings.IMAGE_MAX_SIZE[1]}), max_length=255, required=False, widget=widgets.ImageFileInput()) + FILE_FIELDS = [ + 'report_delivery_date', + 'report_processing', + 'cira_rapporteur', + 'cira_date', + 'negative_result' + ] + WAREHOUSE_FIELDS = [ + 'documentation_deadline', + 'documentation_received', + 'finds_deadline', + 'finds_received', + ] + TYPES = [ + FieldType('operation_type', models.OperationType), + FieldType('report_processing', models.ReportState), + ] + def __init__(self, *args, **kwargs): super(OperationFormGeneral, self).__init__(*args, **kwargs) profile = get_current_profile() if not profile.files: - self.fields.pop('report_delivery_date') - self.fields.pop('report_processing') - self.fields.pop('cira_rapporteur') - self.fields.pop('cira_date') - self.fields.pop('negative_result') + for key in self.FILE_FIELDS: + self.remove_field(key) if not profile.warehouse: - self.fields.pop('documentation_deadline') - self.fields.pop('documentation_received') - self.fields.pop('finds_deadline') - self.fields.pop('finds_received') - self.fields['operation_type'].choices = \ - models.OperationType.get_types( - initial=self.init_data.get('operation_type')) - self.fields['operation_type'].help_text = \ - models.OperationType.get_help() - if 'report_processing' in self.fields: - self.fields['report_processing'].choices = \ - models.ReportState.get_types( - initial=self.init_data.get('report_processing')) - self.fields['report_processing'].help_text = \ - models.ReportState.get_help() - self.fields['record_quality'].choices = \ - [('', '--')] + list(models.QUALITY) + for key in self.WAREHOUSE_FIELDS: + self.remove_field(key) + if 'record_quality' in self.fields: + self.fields['record_quality'].choices = \ + [('', '--')] + list(models.QUALITY) if 'operation_code' in self.fields: fields = OrderedDict() ope_code = self.fields.pop('operation_code') @@ -920,17 +927,20 @@ class OperationFormGeneral(ManageOldType, forms.Form): def clean(self): cleaned_data = self.cleaned_data + # verify the logic between start date and excavation end date - if cleaned_data.get('excavation_end_date'): + if self.are_available(['excavation_end_date', 'start_date']) \ + and cleaned_data.get('excavation_end_date'): if not self.cleaned_data['start_date']: raise forms.ValidationError( - _(u"If you want to set an excavation end date you have to " - u"provide a start date.")) + _(u"If you want to set an excavation end date you " + u"have to provide a start date.")) if cleaned_data['excavation_end_date'] \ < cleaned_data['start_date']: raise forms.ValidationError( _(u"The excavation end date cannot be before the start " u"date.")) + # verify patriarche code_p = self.cleaned_data.get('code_patriarche', None) @@ -942,11 +952,13 @@ class OperationFormGeneral(ManageOldType, forms.Form): msg = u"Ce code OA a déjà été affecté à une "\ u"autre opération" raise forms.ValidationError(msg) + # manage unique operation ID year = self.cleaned_data.get("year") operation_code = cleaned_data.get("operation_code", None) if not operation_code: return self.cleaned_data + ops = models.Operation.objects.filter(year=year, operation_code=operation_code) if 'pk' in cleaned_data and cleaned_data['pk']: @@ -989,14 +1001,18 @@ class OperationFormModifGeneral(OperationFormGeneral): fields[key] = value self.fields = fields + OperationFormModifGeneral.associated_models = \ OperationFormGeneral.associated_models.copy() OperationFormModifGeneral.associated_models['associated_file'] = File -class CollaboratorForm(forms.Form): +class CollaboratorForm(CustomForm, forms.Form): form_label = _(u"Collaborators") + form_admin_name = _(u"Operation - 020 - Collaborators") + form_slug = "operation-020-collaborators" + base_models = ['collaborator'] associated_models = {'collaborator': Person, } collaborator = widgets.Select2MultipleField( @@ -1004,11 +1020,15 @@ class CollaboratorForm(forms.Form): def __init__(self, *args, **kwargs): super(CollaboratorForm, self).__init__(*args, **kwargs) - self.fields['collaborator'].widget.attrs['full-width'] = True + if 'collaborator' in self.fields: + self.fields['collaborator'].widget.attrs['full-width'] = True -class OperationFormPreventive(forms.Form): +class OperationFormPreventive(CustomForm, forms.Form): form_label = _(u"Preventive informations - excavation") + form_admin_name = _(u"Operation - 033 - Preventive - Excavation") + form_slug = "operation-033-preventive-excavation" + cost = forms.IntegerField(label=_(u"Cost (euros)"), required=False) scheduled_man_days = forms.IntegerField(label=_(u"Scheduled man-days"), required=False) @@ -1023,8 +1043,11 @@ class OperationFormPreventive(forms.Form): validators.MaxValueValidator(100)]) -class OperationFormPreventiveDiag(forms.Form): +class OperationFormPreventiveDiag(CustomForm, forms.Form): form_label = _("Preventive informations - diagnostic") + form_admin_name = _(u"Operation - 037 - Preventive - Diagnostic") + form_slug = "operation-037-preventive-diagnostic" + if settings.COUNTRY == 'fr': zoning_prescription = forms.NullBooleanField( required=False, label=_(u"Prescription on zoning")) @@ -1049,9 +1072,17 @@ class SelectedTownForm(forms.Form): if towns and towns != -1: self.fields['town'].choices = [('', '--')] + towns + SelectedTownFormset = formset_factory(SelectedTownForm, can_delete=True, formset=TownFormSet) SelectedTownFormset.form_label = _(u"Towns") +SelectedTownFormset.form_admin_name = _(u"Operation - 040 - Towns") +SelectedTownFormset.form_slug = "operation-040-towns" + +TownFormset = formset_factory(TownForm, can_delete=True, formset=TownFormSet) +TownFormset.form_label = _("Towns") +TownFormset.form_admin_name = _(u"Operation - 040 - Towns (2)") +TownFormset.form_slug = "operation-040-towns-2" class SelectedParcelForm(forms.Form): @@ -1068,13 +1099,19 @@ class SelectedParcelForm(forms.Form): if parcels: self.fields['parcel'].choices = [('', '--')] + parcels + SelectedParcelFormSet = formset_factory(SelectedParcelForm, can_delete=True, formset=ParcelFormSet) SelectedParcelFormSet.form_label = _("Parcels") +SelectedParcelFormSet.form_admin_name = _(u"Operation - 050 - Parcels") +SelectedParcelFormSet.form_slug = "operation-050-parcels" SelectedParcelGeneralFormSet = formset_factory(ParcelForm, can_delete=True, formset=ParcelFormSet) SelectedParcelGeneralFormSet.form_label = _("Parcels") +SelectedParcelGeneralFormSet.form_admin_name = _( + u"Operation - 050 - Parcels (2)") +SelectedParcelGeneralFormSet.form_slug = "operation-050-parcels-2" """ class SelectedParcelFormSet(forms.Form): @@ -1102,36 +1139,36 @@ class SelectedParcelFormSet(forms.Form): """ -class RemainForm(ManageOldType, forms.Form): - form_label = _("Remain types") +class RemainForm(CustomForm, ManageOldType, forms.Form): + form_label = _(u"Remain types") + form_admin_name = _(u"Operation - 060 - Remains") + form_slug = "operation-060-remains" + base_model = 'remain' associated_models = {'remain': models.RemainType} remain = forms.MultipleChoiceField( label=_("Remain type"), required=False, choices=[], widget=forms.CheckboxSelectMultiple) - def __init__(self, *args, **kwargs): - super(RemainForm, self).__init__(*args, **kwargs) - self.fields['remain'].choices = models.RemainType.get_types( - initial=self.init_data.get('remain'), - empty_first=False) - self.fields['remain'].help_text = models.RemainType.get_help() + TYPES = [ + FieldType('remain', models.RemainType, True), + ] -class PeriodForm(ManageOldType, forms.Form): - form_label = _("Periods") +class PeriodForm(CustomForm, ManageOldType, forms.Form): + form_label = _(u"Periods") + form_admin_name = _(u"Operation - 070 - Periods") + form_slug = "operation-070-periods" + base_model = 'period' associated_models = {'period': models.Period} period = forms.MultipleChoiceField( label=_("Period"), required=False, choices=[], widget=forms.CheckboxSelectMultiple) - def __init__(self, *args, **kwargs): - super(PeriodForm, self).__init__(*args, **kwargs) - self.fields['period'].choices = models.Period.get_types( - initial=self.init_data.get('period'), - empty_first=False) - self.fields['period'].help_text = models.Period.get_help() + TYPES = [ + FieldType('period', models.Period, True), + ] class ArchaeologicalSiteForm(ManageOldType, forms.Form): @@ -1144,21 +1181,16 @@ class ArchaeologicalSiteForm(ManageOldType, forms.Form): label=_("Remains"), choices=[], widget=widgets.Select2Multiple, required=False) + TYPES = [ + FieldType('periods', models.Period, True), + FieldType('remains', models.RemainType, True), + ] + def __init__(self, *args, **kwargs): self.limits = {} if 'limits' in kwargs: kwargs.pop('limits') super(ArchaeologicalSiteForm, self).__init__(*args, **kwargs) - self.fields['periods'].choices = \ - models.Period.get_types( - empty_first=False, - initial=self.init_data.get('periods')) - self.fields['periods'].help_text = models.Period.get_help() - self.fields['remains'].choices = \ - models.RemainType.get_types( - initial=self.init_data.get('remains'), - empty_first=False) - self.fields['remains'].help_text = models.RemainType.get_help() def clean_reference(self): reference = self.cleaned_data['reference'] @@ -1194,9 +1226,12 @@ class ArchaeologicalSiteBasicForm(forms.Form): required=False) -ArchaeologicalSiteFormSet = formset_factory(ArchaeologicalSiteBasicForm, - can_delete=True, formset=FormSet) -ArchaeologicalSiteFormSet.form_label = _("Archaeological sites") +ArchaeologicalSiteFormSet = formset_factory( + ArchaeologicalSiteBasicForm, can_delete=True, formset=FormSet) +ArchaeologicalSiteFormSet.form_label = _(u"Archaeological sites") +ArchaeologicalSiteFormSet.form_admin_name = _( + u"Operation - 030 - Archaeological sites") +ArchaeologicalSiteFormSet.form_slug = "operation-030-archaeological-sites" class ArchaeologicalSiteSelectionForm(forms.Form): @@ -1371,8 +1406,11 @@ class AdministrativeActOpeFormSelection(forms.Form): return cleaned_data -class AdministrativeActOpeForm(ManageOldType, forms.Form): +class AdministrativeActOpeForm(CustomForm, ManageOldType, forms.Form): form_label = _("General") + form_admin_name = _(u"Operation - Administrative act - General") + form_slug = "operation-adminact-general" + associated_models = {'act_type': models.ActType, } # 'signatory':Person} act_type = forms.ChoiceField(label=_("Act type"), choices=[]) @@ -1388,13 +1426,10 @@ class AdministrativeActOpeForm(ManageOldType, forms.Form): ref_sra = forms.CharField(label=u"Autre référence", max_length=15, required=False) - def __init__(self, *args, **kwargs): - super(AdministrativeActOpeForm, self).__init__(*args, **kwargs) - self.fields['act_type'].choices = models.ActType.get_types( - initial=self.init_data.get('act_type'), - dct={'intented_to': 'O'}) - self.fields['act_type'].help_text = models.ActType.get_help( - dct={'intented_to': 'O'}) + TYPES = [ + FieldType('act_type', models.ActType, + extra_args={"dct": {'intented_to': 'O'}}), + ] class AdministrativeActModifForm(object): @@ -1410,7 +1445,7 @@ class AdministrativeActModifForm(object): def clean(self): # manage unique act ID - year = self.cleaned_data.get("signature_date") + year = self.cleaned_data.get("signature_date", None) if not year or not hasattr(year, 'year'): return self.cleaned_data year = year.year |