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 #  | 
