diff options
Diffstat (limited to 'archaeological_operations/forms.py')
| -rw-r--r-- | archaeological_operations/forms.py | 95 |
1 files changed, 72 insertions, 23 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 84af8f287..6ef3d5a21 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -235,15 +235,26 @@ class ParcelFormSet(FormSet): values[number] = {} values[number][field] = value + if field == 'parcel': + if not value: + continue + try: + parcel = models.Parcel.objects.get(pk=value) + except models.Parcel.DoesNotExist: + continue + ordering_keys[number] = [ + parcel.town, parcel.year, parcel.section, + parcel.parcel_number] + continue if number not in ordering_keys: ordering_keys[number] = ['', '', '', ''] if field == 'town': ordering_keys[number][0] = value - if field == 'year': + elif field == 'year': ordering_keys[number][1] = value - if field == 'section': + elif field == 'section': ordering_keys[number][2] = value - if field == 'parcel_number': + elif field == 'parcel_number': ordering_keys[number][3] = value reverse_ordering_keys = {} @@ -365,6 +376,17 @@ class RecordRelationsForm(forms.Form): for rel, opes in nc]) return rendered + def clean(self): + cleaned_data = self.cleaned_data + if (cleaned_data.get('relation_type', None) and + not cleaned_data.get('right_record', None)): + raise forms.ValidationError(_(u"You should select an operation.")) + if (not cleaned_data.get('relation_type', None) and + cleaned_data.get('right_record', None)): + raise forms.ValidationError( + _(u"You should select a relation type.")) + return cleaned_data + @classmethod def get_formated_datas(cls, cleaned_datas): result, current, deleted = [], [], [] @@ -466,12 +488,12 @@ class OperationSelect(TableSelect): report_processing = forms.ChoiceField(label=_(u"Report processing"), choices=[]) virtual_operation = forms.NullBooleanField(label=_(u"Virtual operation")) - # archaeological_sites = forms.IntegerField( - # label=_("Archaelogical site"), - # widget=widgets.JQueryAutoComplete( - # reverse_lazy('autocomplete-archaeologicalsite'), - # associated_model=models.ArchaeologicalSite), - # validators=[valid_id(models.ArchaeologicalSite)]) + archaeological_sites = forms.IntegerField( + label=_("Archaelogical site"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-archaeologicalsite'), + associated_model=models.ArchaeologicalSite), + validators=[valid_id(models.ArchaeologicalSite)]) history_creator = forms.IntegerField( label=_(u"Created by"), widget=widgets.JQueryAutoComplete( @@ -670,7 +692,7 @@ class OperationFormGeneral(forms.Form): 'operator': Organization, 'operation_type': models.OperationType, 'report_processing': models.ReportState, - 'archaeological_site': models.ArchaeologicalSite} + } pk = forms.IntegerField(required=False, widget=forms.HiddenInput) if settings.COUNTRY == 'fr': code_patriarche = forms.IntegerField(label=u"Code PATRIARCHE", @@ -683,10 +705,6 @@ class OperationFormGeneral(forms.Form): initial=lambda: datetime.datetime.now().year, validators=[validators.MinValueValidator(1900), validators.MaxValueValidator(2100)]) - operation_code = forms.IntegerField( - label=_(u"Operation code"), - initial=models.Operation.get_available_operation_code, - widget=OperationCodeInput(attrs={'readonly': 'readonly'})) scientist = forms.IntegerField( label=_("Head scientist"), widget=widgets.JQueryAutoComplete( @@ -719,9 +737,9 @@ class OperationFormGeneral(forms.Form): label=_(u"Total surface (m2)"), validators=[validators.MinValueValidator(0), validators.MaxValueValidator(999999999)]) - archaeological_site = widgets.MultipleAutocompleteField( - model=models.ArchaeologicalSite, - label=_("Associated archaeological sites"), new=True, required=False) + # archaeological_site = widgets.MultipleAutocompleteField( + # model=models.ArchaeologicalSite, + # label=_("Associated archaeological sites"), new=True, required=False) start_date = forms.DateField( label=_(u"Start date"), required=False, widget=widgets.JQueryDate) excavation_end_date = forms.DateField( @@ -768,10 +786,12 @@ class OperationFormGeneral(forms.Form): models.ReportState.get_help() self.fields['record_quality'].choices = \ [('', '--')] + list(models.QUALITY) - # data POSTED - if kwargs and kwargs['data'] \ - and 'readonly' in self.fields['operation_code'].widget.attrs: - self.fields['operation_code'].widget.attrs.pop('readonly') + if 'operation_code' in self.fields: + self.fields.keyOrder = list(self.fields.keyOrder) + self.fields.keyOrder.pop(self.fields.keyOrder.index( + 'operation_code')) + self.fields.keyOrder.insert(self.fields.keyOrder.index('year'), + 'operation_code') def clean(self): cleaned_data = self.cleaned_data @@ -787,7 +807,9 @@ class OperationFormGeneral(forms.Form): _(u"The excavation end date cannot be before the start " u"date.")) year = self.cleaned_data.get("year") - operation_code = cleaned_data.get("operation_code") + 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) # manage unique operation ID @@ -917,6 +939,32 @@ SelectedParcelGeneralFormSet = formset_factory(ParcelForm, can_delete=True, formset=ParcelFormSet) SelectedParcelGeneralFormSet.form_label = _("Parcels") +""" +class SelectedParcelFormSet(forms.Form): + form_label = _("Parcels") + base_model = 'parcel' + associated_models = {'parcel': models.Parcel} + parcel = forms.MultipleChoiceField( + label=_("Parcel"), required=False, choices=[], + widget=forms.CheckboxSelectMultiple) + + def __init__(self, *args, **kwargs): + parcels = None + print(kwargs) + if 'data' in kwargs and 'PARCELS' in kwargs['data']: + parcels = kwargs['data']['PARCELS'] + # clean data if not "real" data + prefix_value = kwargs['prefix'] + '-parcel' + 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(SelectedParcelFormSet, self).__init__(*args, **kwargs) + if parcels: + self.fields['parcel'].choices = [('', '--')] + parcels +""" + class RemainForm(forms.Form): form_label = _("Remain types") @@ -1000,7 +1048,8 @@ class ArchaeologicalSiteBasicForm(forms.Form): reverse_lazy('autocomplete-archaeologicalsite'), associated_model=models.ArchaeologicalSite, new=True), - validators=[valid_id(models.ArchaeologicalSite)]) + validators=[valid_id(models.ArchaeologicalSite)], + required=False) ArchaeologicalSiteFormSet = formset_factory(ArchaeologicalSiteBasicForm, |
