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