diff options
Diffstat (limited to 'archaeological_operations/forms.py')
| -rw-r--r-- | archaeological_operations/forms.py | 68 | 
1 files changed, 51 insertions, 17 deletions
| diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 27ab4670a..86bea4ed5 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -72,7 +72,7 @@ class ParcelForm(forms.Form):      town = forms.ChoiceField(label=_("Town"), choices=(), required=False,                               validators=[valid_id(models.Town)])      year = forms.IntegerField(label=_("Year"), required=False, -                              validators=[validators.MinValueValidator(1900), +                              validators=[validators.MinValueValidator(1600),                                            validators.MaxValueValidator(2100)])      section = forms.CharField(label=_(u"Section"), required=False,                                validators=[validators.MaxLengthValidator(4)]) @@ -387,6 +387,9 @@ class RecordRelationsForm(ManageOldType, forms.Form):          validators=[valid_id(models.Operation)], required=False)      def __init__(self, *args, **kwargs): +        self.left_record = None +        if 'left_record' in kwargs: +            self.left_record = kwargs.pop('left_record')          super(RecordRelationsForm, self).__init__(*args, **kwargs)          self.fields['relation_type'].choices = \              models.RelationType.get_types( @@ -413,6 +416,9 @@ class RecordRelationsForm(ManageOldType, forms.Form):                  cleaned_data.get('right_record', None)):              raise forms.ValidationError(                  _(u"You should select a relation type.")) +        if str(cleaned_data.get('right_record')) == str(self.left_record.pk): +            raise forms.ValidationError( +                _(u"An operation cannot be related to herself."))          return cleaned_data      @classmethod @@ -447,7 +453,27 @@ class RecordRelationsForm(ManageOldType, forms.Form):              result.append((_("Deleted relations"), u" ; ".join(deleted)))          return result -RecordRelationsFormSet = formset_factory(RecordRelationsForm, can_delete=True) + +class RecordRelationsFormSetBase(FormSet): +    # passing left_record should be nicely done with form_kwargs with Django 1.9 +    # with no need of all these complications + +    def __init__(self, *args, **kwargs): +        self.left_record = None +        if 'left_record' in kwargs: +            self.left_record = kwargs.pop('left_record') +        super(RecordRelationsFormSetBase, self).__init__(*args, **kwargs) + +    def _construct_forms(self): +        # instantiate all the forms and put them in self.forms +        self.forms = [] +        for i in xrange(self.total_form_count()): +            self.forms.append(self._construct_form( +                i, left_record=self.left_record)) + + +RecordRelationsFormSet = formset_factory( +    RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase)  RecordRelationsFormSet.form_label = _(u"Relations") @@ -733,10 +759,11 @@ class DashboardForm(forms.Form):  class OperationFormGeneral(ManageOldType, forms.Form):      form_label = _(u"General") -    base_model = 'archaeological_site' +    base_models = ['collaborator']      file_upload = True      associated_models = {'scientist': Person,                           'in_charge': Person, +                         'collaborator': Person,                           'cira_rapporteur': Person,                           'operator': Organization,                           'operation_type': models.OperationType, @@ -755,7 +782,7 @@ class OperationFormGeneral(ManageOldType, forms.Form):                                         choices=[])      year = forms.IntegerField(label=_(u"Year"),                                initial=lambda: datetime.datetime.now().year, -                              validators=[validators.MinValueValidator(1900), +                              validators=[validators.MinValueValidator(1600),                                            validators.MaxValueValidator(2100)])      old_code = forms.CharField(          label=_(u"Old code"), required=False, @@ -792,14 +819,13 @@ class OperationFormGeneral(ManageOldType, forms.Form):              limit={'person_types': [person_type_pk_lazy('sra_agent')]},              new=True),          validators=[valid_id(Person)], required=False) +    collaborator = widgets.Select2MultipleField( +        model=Person, label=_("Collaborators"), required=False, remote=True)      surface = forms.IntegerField(          required=False, widget=widgets.AreaWidget,          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)      start_date = forms.DateField(          label=_(u"Start date"), required=False, widget=widgets.JQueryDate)      excavation_end_date = forms.DateField( @@ -857,21 +883,29 @@ class OperationFormGeneral(ManageOldType, forms.Form):      def __init__(self, *args, **kwargs):          super(OperationFormGeneral, self).__init__(*args, **kwargs) -        if not get_current_profile().warehouse: -            self.fields.pop('documentation_deadline') -            self.fields.pop('documentation_received') -            self.fields.pop('finds_deadline') -            self.fields.pop('finds_received') +        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') +            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() -        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() +        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)          if 'operation_code' in self.fields: | 
