diff options
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r-- | archaeological_finds/forms.py | 341 |
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 # |