summaryrefslogtreecommitdiff
path: root/archaeological_finds/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r--archaeological_finds/forms.py341
1 files changed, 37 insertions, 304 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 541778d5c..78a415abf 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -21,7 +21,6 @@
Finds forms definitions
"""
-import datetime
import logging
from django import forms
@@ -32,21 +31,53 @@ from django.forms.formsets import formset_factory
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
-from ishtar_common.models import Person, valid_id, valid_ids, \
- get_current_profile, Organization
+from ishtar_common.models import valid_id, valid_ids, get_current_profile
from archaeological_operations.models import Period, ArchaeologicalSite, \
RelationType as OpeRelationType
from archaeological_context_records.models import DatingType, DatingQuality, \
ContextRecord
-from archaeological_warehouse.models import Warehouse, Container
import models
-from ishtar_common import widgets
-from archaeological_operations.widgets import OAWidget
from ishtar_common.forms import FormSet, FloatField, \
get_form_selection, reverse_lazy, TableSelect, get_now, FinalForm, \
ManageOldType
+
from ishtar_common.forms_common import get_town_field, SourceSelect
+from ishtar_common import widgets
+from archaeological_operations.widgets import OAWidget
+
+from archaeological_finds.forms_treatments import TreatmentSelect, \
+ TreatmentFormSelection, BaseTreatmentForm, ModifyTreatmentForm, \
+ AdministrativeActTreatmentForm, TreatmentFormFileChoice, \
+ TreatmentDeletionForm, TreatmentFileSelect, TreatmentFileFormSelection, \
+ TreatmentFileForm, ModifyTreatmentFileForm, TreatmentFileDeletionForm, \
+ AdministrativeActTreatmentFormSelection, \
+ AdministrativeActTreatmentModifForm, \
+ AdministrativeActTreatmentFileForm, \
+ AdministrativeActTreatmentFileFormSelection, \
+ AdministrativeActTreatmentFileModifForm
+
+__all__ = ['TreatmentSelect', 'TreatmentFormSelection', 'BaseTreatmentForm',
+ 'ModifyTreatmentForm', 'AdministrativeActTreatmentForm',
+ 'TreatmentFormFileChoice', 'TreatmentDeletionForm',
+ 'AdministrativeActTreatmentModifForm',
+ 'TreatmentFileSelect', 'TreatmentFileFormSelection',
+ 'TreatmentFileForm', 'ModifyTreatmentFileForm',
+ 'TreatmentFileDeletionForm', 'AdministrativeActTreatmentFileForm',
+ 'AdministrativeActTreatmentFileFormSelection',
+ 'AdministrativeActTreatmentFormSelection',
+ 'AdministrativeActTreatmentFileModifForm',
+ 'RecordFormSelection',
+ 'FindForm', 'DateForm', 'DatingFormSet', 'FindSelect',
+ 'FindFormSelection', 'MultipleFindFormSelection',
+ 'FindMultipleFormSelection', 'check_form', 'check_exist',
+ 'check_not_exist', 'check_value', 'check_type_field',
+ 'check_type_not_field', 'check_treatment', 'ResultFindForm',
+ 'ResultFindFormSet', 'FindDeletionForm',
+ 'UpstreamFindFormSelection', 'SourceFindFormSelection',
+ 'FindSourceSelect', 'FindSourceFormSelection',
+ 'NewFindBasketForm', 'SelectFindBasketForm', 'DeleteFindBasketForm',
+ 'FindBasketAddItemForm']
logger = logging.getLogger(__name__)
@@ -604,304 +635,6 @@ class FindBasketAddItemForm(forms.Form):
return basket
-class TreatmentSelect(TableSelect):
- label = forms.CharField(label=_(u"Label"))
- other_reference = forms.CharField(label=_(u"Other ref."))
- year = forms.IntegerField(label=_(u"Year"))
- index = forms.IntegerField(label=_(u"Index"))
- treatment_types = forms.ChoiceField(label=_(u"Treatment type"), choices=[])
- image = forms.NullBooleanField(label=_(u"Has an image?"))
-
- def __init__(self, *args, **kwargs):
- super(TreatmentSelect, self).__init__(*args, **kwargs)
- self.fields['treatment_types'].choices = \
- models.TreatmentType.get_types()
- self.fields['treatment_types'].help_text = \
- models.TreatmentType.get_help()
-
-
-class TreatmentFormSelection(forms.Form):
- form_label = _("Treatment search")
- associated_models = {'pk': models.Treatment}
- currents = {'pk': models.Treatment}
- pk = forms.IntegerField(
- label="", required=False,
- widget=widgets.JQueryJqGrid(
- reverse_lazy('get-treatment'),
- TreatmentSelect, models.Treatment),
- validators=[valid_id(models.Treatment)])
-
-
-class BaseTreatmentForm(ManageOldType, forms.Form):
- form_label = _(u"Base treatment")
- base_models = ['treatment_type']
- associated_models = {'treatment_type': models.TreatmentType,
- 'person': Person,
- 'location': Warehouse,
- 'organization': Organization,
- 'container': Container,
- }
- file_upload = True
- need_user_for_initialization = True
-
- label = forms.CharField(label=_(u"Label"),
- max_length=200, required=False)
- other_reference = forms.CharField(
- label=_(u"Other ref."), max_length=200, required=False)
- year = forms.IntegerField(label=_("Year"),
- initial=lambda: datetime.datetime.now().year,
- validators=[validators.MinValueValidator(1900),
- validators.MaxValueValidator(2100)])
- treatment_type = forms.MultipleChoiceField(
- label=_(u"Treatment type"), choices=[],
- widget=widgets.CheckboxSelectMultiple)
- target_is_basket = forms.NullBooleanField(label=_(u"Target"))
- person = forms.IntegerField(
- label=_(u"Responsible"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-person'), associated_model=Person,
- new=True),
- validators=[valid_id(Person)], required=False)
- organization = forms.IntegerField(
- label=_(u"Organization"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-organization'),
- associated_model=Organization, new=True),
- validators=[valid_id(Organization)], required=False)
- location = forms.IntegerField(
- label=_(u"Location"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-warehouse'), associated_model=Warehouse,
- new=True),
- validators=[valid_id(Warehouse)])
- container = forms.IntegerField(
- label=_(u"Container (relevant for packaging)"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-container'),
- associated_model=Container, new=True),
- validators=[valid_id(Container)], required=False)
- external_id = forms.CharField(
- label=_(u"External ref."), max_length=200, required=False)
- comment = forms.CharField(label=_(u"Comment"),
- widget=forms.Textarea, required=False)
- description = forms.CharField(label=_(u"Description"),
- widget=forms.Textarea, required=False)
- goal = forms.CharField(label=_(u"Goal"),
- widget=forms.Textarea, required=False)
- start_date = forms.DateField(label=_(u"Start date"), required=False,
- widget=widgets.JQueryDate)
- end_date = forms.DateField(label=_(u"End date"), required=False,
- widget=widgets.JQueryDate)
- image = forms.ImageField(
- label=_(u"Image"), help_text=mark_safe(
- _(u"<p>Heavy images are resized to: %(width)dx%(height)d "
- u"(ratio is preserved).</p>") % {
- 'width': settings.IMAGE_MAX_SIZE[0],
- 'height': settings.IMAGE_MAX_SIZE[1]}),
- max_length=255, required=False, widget=widgets.ImageFileInput())
-
- def __init__(self, *args, **kwargs):
- user = kwargs.pop('user')
- super(BaseTreatmentForm, self).__init__(*args, **kwargs)
- q = Person.objects.filter(ishtaruser__pk=user.pk)
- if q.count():
- person = q.all()[0]
- self.fields['person'].initial = person.pk
- if person.attached_to:
- self.fields['organization'].initial = person.attached_to.pk
- self.fields['target_is_basket'].widget.choices = \
- ((False, _(u"Single find")), (True, _(u"Basket")))
- self.fields['treatment_type'].choices = models.TreatmentType.get_types(
- initial=self.init_data.get('treatment_type'),
- dct={'upstream_is_many': False, 'downstream_is_many': False},
- empty_first=False
- )
- self.fields['treatment_type'].help_text = \
- models.TreatmentType.get_help(
- dct={'upstream_is_many': False, 'downstream_is_many': False})
- # TODO
- """
- self.fields['basket'].required = False
- self.fields['basket'].help_text = \
- _(u"Leave it blank if you want to select a single item")
- self.fields.keyOrder.pop(self.fields.keyOrder.index('basket'))
- self.fields.keyOrder.insert(self.fields.keyOrder.index('description'),
- 'basket')
- """
-
- def clean(self, *args, **kwargs):
- data = self.cleaned_data
- packaging = models.TreatmentType.get_cache('packaging')
- if not packaging:
- logger.warning("No 'packaging' treatment type defined")
- return
- if data.get('container', None) \
- and str(packaging.pk) not in data.get('treatment_type', []):
- raise forms.ValidationError(
- _(u"The container field is attached to the treatment. If "
- u"no packaging treatment is done it is not relevant."))
- if not data.get('container', None) \
- and str(packaging.pk) in data.get('treatment_type', []):
- raise forms.ValidationError(
- _(u"If a packaging treatment is done, the container field "
- u"must be filled."))
- if not data.get('person', None) and not data.get('organization', None):
- raise forms.ValidationError(
- _(u"A responsible or an organization must be defined."))
- return data
- # TODO
- """
- for treatment_type in self.cleaned_data.get('treatment_type', []):
- try:
- treatment = models.TreatmentType.objects.get(
- pk=treatment_type, available=True)
- except models.TreatmentType.DoesNotExist:
- raise forms.ValidationError(_(u"This treatment type is not "
- u"available."))
- if treatment.upstream_is_many and \
- not self.cleaned_data.get('basket'):
- raise forms.ValidationError(_(u"This treatment needs a "
- u"basket."))
- """
-
-
-class ModifyTreatmentForm(BaseTreatmentForm):
- index = forms.IntegerField(_(u"Index"))
- id = forms.IntegerField(' ', widget=forms.HiddenInput, required=False)
-
- def clean(self, *args, **kwargs):
- super(ModifyTreatmentForm, self).clean(*args, **kwargs)
- cleaned_data = self.cleaned_data
- year = cleaned_data.get('year')
- pk = cleaned_data.get('id')
- index = cleaned_data.get('index')
- q = models.Treatment.objects\
- .filter(year=year, index=index).exclude(pk=pk)
- if index and q.count():
- raise forms.ValidationError(
- _(u"Another treatment with this index exists for {}."
- ).format(year))
- return cleaned_data
-
-
-class TreatmentFormFileChoice(forms.Form):
- form_label = _(u"Associated file")
- associated_models = {'file': models.TreatmentFile, }
- currents = {'file': models.TreatmentFile}
- file = forms.IntegerField(
- label=_(u"Treatment file"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-treatmentfile'),
- associated_model=models.TreatmentFile),
- validators=[valid_id(models.TreatmentFile)], required=False)
-
-
-class TreatmentDeletionForm(FinalForm):
- confirm_msg = _(
- u"Are you sure you want to delete this treatment? All modification "
- u"made to the associated finds since this treatment record will be "
- u"lost!")
- confirm_end_msg = _(u"Would you like to delete this treatment?")
-
-
-class TreatmentFileSelect(TableSelect):
- name = forms.CharField(label=_(u"Name"))
- internal_reference = forms.CharField(label=_(u"Internal ref."))
- year = forms.IntegerField(label=_(u"Year"))
- index = forms.IntegerField(label=_(u"Index"))
- type = forms.ChoiceField(label=_(u"Treatment file type"), choices=[])
-
- def __init__(self, *args, **kwargs):
- super(TreatmentFileSelect, self).__init__(*args, **kwargs)
- self.fields['type'].choices = models.TreatmentFileType.get_types()
- self.fields['type'].help_text = models.TreatmentFileType.get_help()
-
-
-class TreatmentFileFormSelection(forms.Form):
- form_label = _("Treatment file search")
- associated_models = {'pk': models.TreatmentFile}
- currents = {'pk': models.TreatmentFile}
- pk = forms.IntegerField(
- label="", required=False,
- widget=widgets.JQueryJqGrid(
- reverse_lazy('get-treatmentfile'),
- TreatmentFileSelect, models.TreatmentFile),
- validators=[valid_id(models.Treatment)])
-
-
-class TreatmentFileForm(ManageOldType, forms.Form):
- form_label = _(u"Treatment file")
- base_models = ['treatment_type_type']
- associated_models = {'type': models.TreatmentFileType,
- 'in_charge': Person}
- need_user_for_initialization = True
-
- name = forms.CharField(label=_(u"Name"),
- max_length=1000, required=False)
- internal_reference = forms.CharField(
- label=_(u"Internal ref."), max_length=60, required=False)
- year = forms.IntegerField(label=_("Year"),
- initial=lambda: datetime.datetime.now().year,
- validators=[validators.MinValueValidator(1900),
- validators.MaxValueValidator(2100)])
- type = forms.ChoiceField(
- label=_(u"Treatment file type"), choices=[])
- in_charge = forms.IntegerField(
- label=_(u"Responsible"),
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-person'), associated_model=Person,
- new=True),
- validators=[valid_id(Person)])
- external_id = forms.CharField(
- label=_(u"External ref."), max_length=200, required=False)
- comment = forms.CharField(label=_(u"Comment"),
- widget=forms.Textarea, required=False)
- creation_date = forms.DateField(label=_(u"Start date"), required=False,
- widget=widgets.JQueryDate,
- initial=lambda: datetime.datetime.now())
- reception_date = forms.DateField(label=_(u"Reception date"), required=False,
- widget=widgets.JQueryDate,
- initial=lambda: datetime.datetime.now())
- end_date = forms.DateField(label=_(u"Closing date"), required=False,
- widget=widgets.JQueryDate)
-
- def __init__(self, *args, **kwargs):
- user = kwargs.pop('user')
- super(TreatmentFileForm, self).__init__(*args, **kwargs)
- q = Person.objects.filter(ishtaruser__pk=user.pk)
- if q.count():
- person = q.all()[0]
- self.fields['in_charge'].initial = person.pk
- self.fields['type'].choices = models.TreatmentFileType.get_types(
- initial=[self.init_data.get('type')], empty_first=False
- )
- self.fields['type'].help_text = models.TreatmentFileType.get_help()
-
-
-class ModifyTreatmentFileForm(TreatmentFileForm):
- index = forms.IntegerField(_(u"Index"))
- id = forms.IntegerField(' ', widget=forms.HiddenInput, required=False)
-
- def clean(self, *args, **kwargs):
- super(ModifyTreatmentFileForm, self).clean(*args, **kwargs)
- cleaned_data = self.cleaned_data
- year = cleaned_data.get('year')
- pk = cleaned_data.get('id')
- index = cleaned_data.get('index')
- q = models.TreatmentFile.objects\
- .filter(year=year, index=index).exclude(pk=pk)
- if index and q.count():
- raise forms.ValidationError(
- _(u"Another treatment file with this index exists for {}."
- ).format(year))
- return cleaned_data
-
-
-class TreatmentFileDeletionForm(FinalForm):
- confirm_msg = _(u"Are you sure you want to delete this treatment file?")
- confirm_end_msg = _(u"Would you like to delete this treatment file?")
-
-
"""
####################################
# Source management for treatments #