#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2016-2017 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # See the file COPYING for details. from collections import OrderedDict import datetime import logging from django import forms from django.conf import settings from django.core import validators from django.db.models import Max from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from ishtar_common.models import Person, valid_id, Organization, \ get_current_profile from archaeological_operations.models import ActType, AdministrativeAct from archaeological_warehouse.models import Warehouse, Container import models from archaeological_operations.forms import AdministrativeActOpeForm, \ AdministrativeActOpeFormSelection, AdministrativeActModifForm from ishtar_common.forms import reverse_lazy, TableSelect, FinalForm, \ ManageOldType, get_form_selection from ishtar_common.forms_common import SourceForm, SourceSelect, \ SourceDeletionForm from ishtar_common import widgets logger = logging.getLogger(__name__) # Treatment 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, 'treatment_state': models.TreatmentState, } 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(1600), validators.MaxValueValidator(2100)]) treatment_type = forms.MultipleChoiceField( label=_(u"Treatment type"), choices=[], widget=widgets.CheckboxSelectMultiple) treatment_state = forms.ChoiceField(label=_(u"State"), choices=[], required=False) 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) goal = forms.CharField(label=_(u"Goal"), widget=forms.Textarea, required=False) description = forms.CharField(label=_(u"Description"), widget=forms.Textarea, required=False) comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, required=False) start_date = forms.DateField(label=_(u"Start date"), required=False, widget=widgets.JQueryDate) end_date = forms.DateField(label=_(u"Closing date"), required=False, widget=widgets.JQueryDate) estimated_cost = forms.FloatField(label=_(u"Estimated cost ({currency})"), required=False) quoted_cost = forms.FloatField(label=_(u"Quoted cost ({currency})"), required=False) realized_cost = forms.FloatField(label=_(u"Realized cost ({currency})"), required=False) insurance_cost = forms.FloatField(label=_(u"Insurance cost ({currency})"), required=False) image = forms.ImageField( label=_(u"Image"), help_text=mark_safe( _(u"

Heavy images are resized to: %(width)dx%(height)d " u"(ratio is preserved).

") % { '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) # set current currency currency = get_current_profile().currency for key in ('estimated_cost', 'quoted_cost', 'realized_cost', 'insurance_cost'): self.fields[key].label = self.fields[key].label.format( currency=currency) 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}) self.fields['treatment_state'].choices = \ models.TreatmentState.get_types( initial=self.init_data.get('treatment_state'), ) self.fields['treatment_state'].help_text = \ models.TreatmentState.get_help() # TODO """ self.fields['basket'].required = False self.fields['basket'].help_text = \ _(u"Leave it blank if you want to select a single item") fields = OrderedDict() basket = self.fields.pop('basket') for key, value in self.fields.items(): if key == 'description': fields['index'] = basket fields[key] = value self.fields = fields """ 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 TreatmentModifyForm(BaseTreatmentForm): index = forms.IntegerField(_(u"Index")) id = forms.IntegerField(' ', widget=forms.HiddenInput, required=False) def __init__(self, *args, **kwargs): super(TreatmentModifyForm, self).__init__(*args, **kwargs) fields = OrderedDict() idx = self.fields.pop('index') for key, value in self.fields.items(): fields[key] = value if key == 'year': fields['index'] = idx self.fields = fields def clean(self, *args, **kwargs): super(TreatmentModifyForm, 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 request") associated_models = {'file': models.TreatmentFile, } currents = {'file': models.TreatmentFile} file = forms.IntegerField( label=_(u"Treatment request"), 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 changes " 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?") SLICING = (("month", _(u"months")), ('year', _(u"years")),) DATE_SOURCE = (("start", _(u"Start date")), ("end", _(u"Closing date")),) class DashboardForm(forms.Form): slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING, required=False) date_source = forms.ChoiceField( label=_("Date get from"), choices=DATE_SOURCE, required=False) treatment_type = forms.ChoiceField(label=_("Treatment type"), choices=[], required=False) after = forms.DateField(label=_(u"Date after"), widget=widgets.JQueryDate, required=False) before = forms.DateField(label=_(u"Date before"), widget=widgets.JQueryDate, required=False) def __init__(self, *args, **kwargs): if 'prefix' not in kwargs: kwargs['prefix'] = 'treatments' super(DashboardForm, self).__init__(*args, **kwargs) self.fields['treatment_type'].choices = \ models.TreatmentType.get_types() def get_date_source(self): date_source = 'start' if hasattr(self, 'cleaned_data') and \ self.cleaned_data.get('date_source'): date_source = self.cleaned_data['date_source'] return date_source def get_filter(self): if not hasattr(self, 'cleaned_data') or not self.cleaned_data: return {} fltr = {} date_source = self.get_date_source() if self.cleaned_data.get('treatment_type'): fltr['treatment_types__pk'] = self.cleaned_data['treatment_type'] if self.cleaned_data.get('after'): fltr[date_source + '_date__gte'] = self.cleaned_data['after'] if self.cleaned_data.get('before'): fltr[date_source + '_date__lte'] = self.cleaned_data['before'] return fltr # administrative act treatment class AdministrativeActTreatmentSelect(TableSelect): year = forms.IntegerField(label=_("Year")) index = forms.IntegerField(label=_("Index")) act_type = forms.ChoiceField(label=_("Act type"), choices=[]) indexed = forms.NullBooleanField(label=_(u"Indexed?")) act_object = forms.CharField(label=_(u"Object"), max_length=300) signature_date_after = forms.DateField( label=_(u"Signature date after"), widget=widgets.JQueryDate) signature_date_before = forms.DateField( label=_(u"Signature date before"), widget=widgets.JQueryDate) treatment__name = forms.CharField( label=_(u"Treatment name"), max_length=200) treatment__year = forms.IntegerField(label=_(u"Treatment year")) treatment__index = forms.IntegerField(label=_(u"Treatment index")) treatment__internal_reference = forms.CharField( max_length=200, label=_(u"Treatment internal reference")) treatment__treatment_types = forms.ChoiceField(label=_(u"Treatment type"), choices=[]) history_modifier = forms.IntegerField( label=_(u"Modified by"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-person', args=['0', 'user']), associated_model=Person), validators=[valid_id(Person)]) def __init__(self, *args, **kwargs): super(AdministrativeActTreatmentSelect, self).__init__(*args, **kwargs) self.fields['act_type'].choices = ActType.get_types( dct={'intented_to': 'T'}) self.fields['act_type'].help_text = ActType.get_help( dct={'intented_to': 'T'}) self.fields['treatment__treatment_types'].choices = \ models.TreatmentType.get_types() self.fields['treatment__treatment_types'].help_text = \ models.TreatmentType.get_help() class AdministrativeActTreatmentFormSelection( AdministrativeActOpeFormSelection): pk = forms.IntegerField( label="", required=False, widget=widgets.JQueryJqGrid( reverse_lazy('get-administrativeacttreatment'), AdministrativeActTreatmentSelect, AdministrativeAct), validators=[valid_id(AdministrativeAct)]) class AdministrativeActTreatmentForm(AdministrativeActOpeForm): act_type = forms.ChoiceField(label=_(u"Act type"), choices=[]) def __init__(self, *args, **kwargs): super(AdministrativeActTreatmentForm, self).__init__(*args, **kwargs) self.fields['act_type'].choices = ActType.get_types( initial=self.init_data.get('act_type'), dct={'intented_to': 'T'}) self.fields['act_type'].help_text = ActType.get_help( dct={'intented_to': 'T'}) class AdministrativeActTreatmentModifForm( AdministrativeActModifForm, AdministrativeActTreatmentForm): pk = forms.IntegerField(required=False, widget=forms.HiddenInput) index = forms.IntegerField(label=_("Index"), required=False) # treatment requests 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"Type"), choices=[]) in_charge = forms.IntegerField( label=_(u"In charge"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-person'), associated_model=Person), validators=[valid_id(Person)]) applicant = forms.IntegerField( label=_(u"Applicant"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-person'), associated_model=Person), validators=[valid_id(Person)]) applicant_organisation = forms.IntegerField( label=_(u"Applicant organisation"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-organization'), associated_model=Organization), validators=[valid_id(Organization)]) 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 request 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.TreatmentFile)]) class TreatmentFileForm(ManageOldType, forms.Form): form_label = _(u"Treatment request") base_models = ['treatment_type_type'] associated_models = { 'type': models.TreatmentFileType, 'in_charge': Person, 'applicant': Person, 'applicant_organisation': Organization} need_user_for_initialization = True name = forms.CharField(label=_(u"Name"), max_length=1000, required=False) year = forms.IntegerField(label=_("Year"), initial=lambda: datetime.datetime.now().year, validators=[validators.MinValueValidator(1600), validators.MaxValueValidator(2100)]) internal_reference = forms.CharField( label=_(u"Internal ref."), max_length=60, required=False) external_id = forms.CharField( label=_(u"External ref."), max_length=200, required=False) type = forms.ChoiceField( label=_(u"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)]) applicant = forms.IntegerField( label=_(u"Applicant"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-person'), associated_model=Person, new=True), validators=[valid_id(Person)], required=False) applicant_organisation = forms.IntegerField( label=_(u"Applicant organisation"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-organization'), associated_model=Organization, new=True), validators=[valid_id(Organization)], 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 TreatmentFileModifyForm(TreatmentFileForm): index = forms.IntegerField(_(u"Index")) id = forms.IntegerField(' ', widget=forms.HiddenInput, required=False) def __init__(self, *args, **kwargs): super(TreatmentFileModifyForm, self).__init__(*args, **kwargs) fields = OrderedDict() idx = self.fields.pop('index') for key, value in self.fields.items(): fields[key] = value if key == 'year': fields['index'] = idx self.fields = fields def clean(self, *args, **kwargs): super(TreatmentFileModifyForm, 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 request 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 request?") confirm_end_msg = _(u"Would you like to delete this treatment request?") DATE_SOURCE_FILE = ( ("creation", _(u"Creation date")), ("reception", _(u"Reception date")), ("end", _(u"Closing date")),) class DashboardTreatmentFileForm(forms.Form): slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING, required=False) date_source = forms.ChoiceField( label=_("Date get from"), choices=DATE_SOURCE_FILE, required=False) treatmentfile_type = forms.ChoiceField(label=_("Treatment request type"), choices=[], required=False) after = forms.DateField(label=_(u"Date after"), widget=widgets.JQueryDate, required=False) before = forms.DateField(label=_(u"Date before"), widget=widgets.JQueryDate, required=False) def __init__(self, *args, **kwargs): if 'prefix' not in kwargs: kwargs['prefix'] = 'treatmentfiles' super(DashboardTreatmentFileForm, self).__init__(*args, **kwargs) self.fields['treatmentfile_type'].choices = \ models.TreatmentFileType.get_types() def get_date_source(self): date_source = 'creation' if hasattr(self, 'cleaned_data') and \ self.cleaned_data.get('date_source'): date_source = self.cleaned_data['date_source'] return date_source def get_filter(self): if not hasattr(self, 'cleaned_data') or not self.cleaned_data: return {} fltr = {} date_source = self.get_date_source() if self.cleaned_data.get('treatmentfile_type'): fltr['type__pk'] = self.cleaned_data['treatmentfile_type'] if self.cleaned_data.get('after'): fltr[date_source + '_date__gte'] = self.cleaned_data['after'] if self.cleaned_data.get('before'): fltr[date_source + '_date__lte'] = self.cleaned_data['before'] return fltr class AdministrativeActTreatmentFileSelect(TableSelect): year = forms.IntegerField(label=_("Year")) index = forms.IntegerField(label=_("Index")) act_type = forms.ChoiceField(label=_("Act type"), choices=[]) indexed = forms.NullBooleanField(label=_(u"Indexed?")) act_object = forms.CharField(label=_(u"Object"), max_length=300) signature_date_after = forms.DateField( label=_(u"Signature date after"), widget=widgets.JQueryDate) signature_date_before = forms.DateField( label=_(u"Signature date before"), widget=widgets.JQueryDate) treatment_file__name = forms.CharField( label=_(u"Treatment request name"), max_length=200) treatment_file__year = forms.IntegerField( label=_(u"Treatment request year")) treatment_file__index = forms.IntegerField( label=_(u"Treatment request index")) treatment_file__internal_reference = forms.CharField( max_length=200, label=_(u"Treatment request internal reference")) treatment_file__type = forms.ChoiceField(label=_(u"Treatment request type"), choices=[]) history_modifier = forms.IntegerField( label=_(u"Modified by"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-person', args=['0', 'user']), associated_model=Person), validators=[valid_id(Person)]) def __init__(self, *args, **kwargs): super(AdministrativeActTreatmentFileSelect, self).__init__(*args, **kwargs) self.fields['act_type'].choices = ActType.get_types( dct={'intented_to': 'TF'}) self.fields['act_type'].help_text = ActType.get_help( dct={'intented_to': 'TF'}) self.fields['treatment_file__type'].choices = \ models.TreatmentFileType.get_types() self.fields['treatment_file__type'].help_text = \ models.TreatmentFileType.get_help() class AdministrativeActTreatmentFileFormSelection( AdministrativeActOpeFormSelection): pk = forms.IntegerField( label="", required=False, widget=widgets.JQueryJqGrid( reverse_lazy('get-administrativeacttreatmentfile'), AdministrativeActTreatmentFileSelect, AdministrativeAct), validators=[valid_id(AdministrativeAct)]) class AdministrativeActTreatmentFileForm(AdministrativeActOpeForm): act_type = forms.ChoiceField(label=_(u"Act type"), choices=[]) def __init__(self, *args, **kwargs): super(AdministrativeActTreatmentFileForm, self).__init__(*args, **kwargs) self.fields['act_type'].choices = ActType.get_types( initial=self.init_data.get('act_type'), dct={'intented_to': 'TF'}) self.fields['act_type'].help_text = ActType.get_help( dct={'intented_to': 'TF'}) class AdministrativeActTreatmentFileModifForm( AdministrativeActModifForm, AdministrativeActTreatmentFileForm): pk = forms.IntegerField(required=False, widget=forms.HiddenInput) index = forms.IntegerField(label=_("Index"), required=False) SourceTreatmentFormSelection = get_form_selection( 'SourceTreatmentFormSelection', _(u"Treatment search"), 'treatment', models.Treatment, TreatmentSelect, 'get-treatment', _(u"You should select a treatment.")) SourceTreatmentFileFormSelection = get_form_selection( 'SourceTreatmentFileFormSelection', _(u"Treatment request search"), 'treatment_file', models.TreatmentFile, TreatmentFileSelect, 'get-treatmentfile', _(u"You should select a treatment request.")) class TreatmentSourceSelect(SourceSelect): treatment__name = forms.CharField( label=_(u"Treatment name"), max_length=200) treatment__year = forms.IntegerField(label=_(u"Treatment year")) treatment__index = forms.IntegerField(label=_(u"Treatment index")) treatment__internal_reference = forms.CharField( max_length=200, label=_(u"Treatment internal reference")) treatment__treatment_types = forms.ChoiceField(label=_(u"Treatment type"), choices=[]) def __init__(self, *args, **kwargs): super(TreatmentSourceSelect, self).__init__(*args, **kwargs) self.fields['treatment__treatment_types'].choices = \ models.TreatmentType.get_types() self.fields['treatment__treatment_types'].help_text = \ models.TreatmentType.get_help() TreatmentSourceFormSelection = get_form_selection( 'TreatmentSourceFormSelection', _(u"Documentation search"), 'pk', models.TreatmentSource, TreatmentSourceSelect, 'get-treatmentsource', _(u"You should select a document.")) class TreatmentFileSourceSelect(SourceSelect): treatment_file__name = forms.CharField( label=_(u"Treatment request name"), max_length=200) treatment_file__year = forms.IntegerField( label=_(u"Treatment request year")) treatment_file__index = forms.IntegerField( label=_(u"Treatment request index")) treatment_file__internal_reference = forms.CharField( max_length=200, label=_(u"Treatment request internal reference")) treatment_file__type = forms.ChoiceField(label=_(u"Treatment request type"), choices=[]) def __init__(self, *args, **kwargs): super(TreatmentFileSourceSelect, self).__init__(*args, **kwargs) self.fields['treatment_file__type'].choices = \ models.TreatmentFileType.get_types() self.fields['treatment_file__type'].help_text = \ models.TreatmentFileType.get_help() TreatmentFileSourceFormSelection = get_form_selection( 'TreatmentFileSourceFormSelection', _(u"Documentation search"), 'pk', models.TreatmentFileSource, TreatmentFileSourceSelect, 'get-treatmentfilesource', _(u"You should select a document."))