diff options
-rw-r--r-- | archaeological_context_records/forms.py | 72 | ||||
-rw-r--r-- | archaeological_files/forms.py | 30 | ||||
-rw-r--r-- | archaeological_files/views.py | 7 | ||||
-rw-r--r-- | archaeological_files_pdl/forms.py | 50 | ||||
-rw-r--r-- | archaeological_files_pdl/views.py | 5 | ||||
-rw-r--r-- | archaeological_finds/forms.py | 79 | ||||
-rw-r--r-- | archaeological_finds/forms_treatments.py | 58 | ||||
-rw-r--r-- | archaeological_operations/forms.py | 81 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 8 | ||||
-rw-r--r-- | archaeological_operations/views.py | 3 | ||||
-rw-r--r-- | archaeological_warehouse/forms.py | 34 | ||||
-rw-r--r-- | ishtar_common/admin.py | 3 | ||||
-rw-r--r-- | ishtar_common/fixtures/initial_importtypes-fr.json | 10 | ||||
-rw-r--r-- | ishtar_common/forms_common.py | 4 | ||||
-rw-r--r-- | ishtar_common/models.py | 7 | ||||
-rw-r--r-- | translations/fr/archaeological_operations.po | 15 |
16 files changed, 239 insertions, 227 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index f5a14317f..d90f698dd 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -37,14 +37,17 @@ import models from ishtar_common import widgets from archaeological_operations.widgets import OAWidget from ishtar_common.forms import FinalForm, FormSet, \ - reverse_lazy, get_form_selection, TableSelect, ManageOldType + reverse_lazy, get_form_selection, TableSelect, ManageOldType, CustomForm,\ + FieldType from ishtar_common.forms_common import get_town_field, SourceSelect from archaeological_operations.forms import OperationSelect, ParcelField,\ RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase -class OperationFormSelection(forms.Form): +class OperationFormSelection(CustomForm, forms.Form): form_label = _("Operation") + form_admin_name = _(u"Context record - 010 - Operation choice") + form_slug = "contextrecord-010-operationchoice" associated_models = {'operation': Operation} currents = {'operation': Operation} operation = forms.IntegerField( @@ -129,8 +132,10 @@ class RecordFormSelection(forms.Form): return cleaned_data -class RecordFormGeneral(ManageOldType, forms.Form): +class RecordFormGeneral(CustomForm, ManageOldType, forms.Form): form_label = _("General") + form_admin_name = _(u"Context record - 020 - General") + form_slug = "contextrecord-020-general" file_upload = True base_models = ["documentation"] associated_models = { @@ -175,6 +180,12 @@ class RecordFormGeneral(ManageOldType, forms.Form): 'height': settings.IMAGE_MAX_SIZE[1]}), max_length=255, required=False, widget=widgets.ImageFileInput()) + TYPES = [ + FieldType('unit', models.Unit), + FieldType('excavation_technic', models.ExcavationTechnicType), + FieldType('documentation', models.DocumentationType, is_multiple=True) + ] + def __init__(self, *args, **kwargs): # TODO: simplify operation = None @@ -222,19 +233,6 @@ class RecordFormGeneral(ManageOldType, forms.Form): (" - ".join([k for k in key if k]), [(parcel.pk, parcel.short_label) for parcel in gparcels]) ) - self.fields['unit'].choices = models.Unit.get_types( - initial=self.init_data.get('unit')) - self.fields['unit'].help_text = models.Unit.get_help() - self.fields['excavation_technic'].choices = \ - models.ExcavationTechnicType.get_types( - initial=self.init_data.get('excavation_technic')) - self.fields['excavation_technic'].help_text = \ - models.ExcavationTechnicType.get_help() - self.fields['documentation'].choices = \ - models.DocumentationType.get_types(empty_first=False, - initial=self.init_data.get('documentation')) - self.fields['documentation'].help_text = \ - models.DocumentationType.get_help() def clean(self): # manage unique context record ID @@ -264,22 +262,18 @@ class DatingForm(ManageOldType, forms.Form): dating_type = forms.ChoiceField(label=_("Dating type"), required=False, choices=[]) - def __init__(self, *args, **kwargs): - super(DatingForm, self).__init__(*args, **kwargs) - self.fields['dating_type'].choices = models.DatingType.get_types( - initial=self.init_data.get('dating_type')) - self.fields['dating_type'].help_text = models.DatingType.get_help() - self.fields['quality'].choices = models.DatingQuality.get_types( - initial=self.init_data.get('quality')) - self.fields['quality'].help_text = models.DatingQuality.get_help() - self.fields['period'].choices = Period.get_types( - initial=self.init_data.get('period')) - self.fields['period'].help_text = Period.get_help() + TYPES = [ + FieldType('dating_type', models.DatingType), + FieldType('quality', models.DatingQuality), + FieldType('period', models.Period) + ] DatingFormSet = formset_factory(DatingForm, can_delete=True, formset=FormSet) DatingFormSet.form_label = _("Dating") +DatingFormSet.form_admin_name = _(u"Context record - 030 - Dating") +DatingFormSet.form_slug = "contextrecord-030-datings" class RecordRelationsForm(OpeRecordRelationsForm): @@ -301,13 +295,19 @@ class RecordRelationsForm(OpeRecordRelationsForm): if crs: self.fields['right_record'].choices = [('', '-' * 2)] + crs + RecordRelationsFormSet = formset_factory( RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase) RecordRelationsFormSet.form_label = _(u"Relations") +RecordRelationsFormSet.form_admin_name = _(u"Context record - 050 - Relations") +RecordRelationsFormSet.form_slug = "contextrecord-050-recordrelations" -class RecordFormInterpretation(ManageOldType, forms.Form): +class RecordFormInterpretation(CustomForm, ManageOldType, forms.Form): form_label = _("Interpretation") + form_admin_name = "Context record - 040 - Interpretation" + form_slug = "contextrecord-040-interpretation" + associated_models = {'activity': models.ActivityType, 'identification': models.IdentificationType} datings_comment = forms.CharField( @@ -328,16 +328,11 @@ class RecordFormInterpretation(ManageOldType, forms.Form): tpq_estimated = forms.IntegerField(label=_(u"Estimated TPQ"), required=False) - def __init__(self, *args, **kwargs): - super(RecordFormInterpretation, self).__init__(*args, **kwargs) - self.fields['activity'].choices = models.ActivityType.get_types( - initial=self.init_data.get('activity')) - self.fields['activity'].help_text = models.ActivityType.get_help() - self.fields['identification'].choices = \ - models.IdentificationType.get_types( - initial=self.init_data.get('identification')) - self.fields['identification'].help_text = \ - models.IdentificationType.get_help() + TYPES = [ + FieldType('activity', models.ActivityType), + FieldType('identification', models.IdentificationType), + ] + OperationRecordFormSelection = get_form_selection( 'OperationRecordFormSelection', _(u"Operation search"), 'operation_id', @@ -353,6 +348,7 @@ class RecordDeletionForm(FinalForm): # Source management for context records # ######################################### + SourceRecordFormSelection = get_form_selection( 'SourceRecordFormSelection', _(u"Context record search"), 'context_record', models.ContextRecord, RecordSelect, 'get-contextrecord', diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 3964e83e2..ee5815506 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -25,6 +25,7 @@ import datetime from django import forms from django.conf import settings from django.core import validators +from django.forms.formsets import formset_factory from django.utils.translation import ugettext_lazy as _ from django.utils.safestring import mark_safe @@ -34,12 +35,13 @@ from ishtar_common.models import Person, Organization, \ from archaeological_operations.models import ActType, AdministrativeAct, \ OperationType import models + from ishtar_common.forms import FinalForm, get_now, reverse_lazy, TableSelect, \ - ManageOldType + ManageOldType, CustomForm, FieldType from ishtar_common.forms_common import get_town_field from archaeological_operations.forms import AdministrativeActOpeForm, \ AdministrativeActOpeFormSelection, \ - ParcelField, SLICING, AdministrativeActModifForm + ParcelField, SLICING, AdministrativeActModifForm, ParcelForm, ParcelFormSet from ishtar_common import widgets @@ -271,6 +273,13 @@ class FileFormGeneralRO(FileFormGeneral): return cleaned_data +ParcelFormset = formset_factory(ParcelForm, can_delete=True, + formset=ParcelFormSet) +ParcelFormset.form_label = _(u"Parcels") +ParcelFormset.form_admin_name = _("Archaeological file - 020 - Parcel") +ParcelFormset.form_slug = "source-general" + + class FileFormPreventive(ManageOldType, forms.Form): form_label = _(u"Preventive informations") associated_models = {'general_contractor': Person, @@ -329,8 +338,10 @@ class FileFormPreventive(ManageOldType, forms.Form): self.fields['permit_type'].help_text = models.PermitType.get_help() -class FileFormResearch(ManageOldType, forms.Form): +class FileFormResearch(CustomForm, ManageOldType, forms.Form): form_label = _("Research archaeology") + form_admin_name = _("Archaeological file - 045 - Research - General") + form_slug = "file-045-research-general" base_model = 'department' associated_models = {'scientist': Person, 'requested_operation_type': OperationType, @@ -528,15 +539,14 @@ class AdministrativeActFileModifyFormSelection( class AdministrativeActFileForm(AdministrativeActOpeForm): + form_admin_name = _(u"Archaeological file - Administrative act - General") + form_slug = "file-adminact-general" act_type = forms.ChoiceField(label=_(u"Act type"), choices=[]) - def __init__(self, *args, **kwargs): - super(AdministrativeActFileForm, self).__init__(*args, **kwargs) - self.fields['act_type'].choices = ActType.get_types( - initial=self.init_data.get('act_type'), - dct={'intented_to': 'F'}) - self.fields['act_type'].help_text = ActType.get_help( - dct={'intented_to': 'F'}) + TYPES = [ + FieldType('act_type', ActType, + extra_args={"dct": {'intented_to': 'F'}}), + ] class AdministrativeActFileModifForm(AdministrativeActModifForm, diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 0c0dac3f3..86fa83ee4 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -37,8 +37,7 @@ from archaeological_operations.wizards import AdministrativeActDeletionWizard, \ from wizards import * from ishtar_common.forms_common import TownFormset -from archaeological_operations.forms import ParcelFormSet, \ - FinalAdministrativeActDeleteForm +from archaeological_operations.forms import FinalAdministrativeActDeleteForm from ishtar_common.forms import ClosingDateFormSelection from forms import * @@ -108,7 +107,7 @@ file_search_wizard = SearchWizard.as_view( file_creation_wizard = FileWizard.as_view( [('general-file_creation', FileFormGeneral), ('towns-file_creation', TownFormset), - ('parcels-file_creation', ParcelFormSet), + ('parcels-file_creation', ParcelFormset), ('preventive-file_creation', FileFormPreventive), ('research-file_creation', FileFormResearch), ('final-file_creation', FinalForm)], @@ -127,7 +126,7 @@ file_modification_wizard = FileModificationWizard.as_view( [('selec-file_modification', FileFormSelection), ('general-file_modification', FileFormGeneralRO), ('towns-file_modification', TownFormset), - ('parcels-file_modification', ParcelFormSet), + ('parcels-file_modification', ParcelFormset), ('preventive-file_modification', FileFormPreventive), ('research-file_modification', FileFormResearch), ('final-file_modification', FinalForm)], diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py index 82d6cb684..bc9b0c1e6 100644 --- a/archaeological_files_pdl/forms.py +++ b/archaeological_files_pdl/forms.py @@ -29,13 +29,16 @@ from ishtar_common.models import Person, Town, Department, valid_id, \ organization_type_pk_lazy from archaeological_files import models -from ishtar_common.forms import get_now, reverse_lazy, ManageOldType +from ishtar_common.forms import get_now, reverse_lazy, ManageOldType, \ + CustomForm, FieldType from ishtar_common import widgets -class FileFormGeneral(ManageOldType, forms.Form): +class FileFormGeneral(CustomForm, ManageOldType, forms.Form): form_label = _("General") + form_admin_name = _(u"Archaeological file - 010 - General") + form_slug = "file-010-general" associated_models = {'file_type': models.FileType} file_type = forms.ChoiceField(label=_("File type"), choices=[]) year = forms.IntegerField(label=_("Year"), @@ -47,11 +50,9 @@ class FileFormGeneral(ManageOldType, forms.Form): reception_date = forms.DateField( label=_(u"Reception date"), initial=get_now, widget=widgets.JQueryDate) - def __init__(self, *args, **kwargs): - super(FileFormGeneral, self).__init__(*args, **kwargs) - self.fields['file_type'].choices = models.FileType.get_types( - initial=self.init_data.get('file_type')) - self.fields['file_type'].help_text = models.FileType.get_help() + TYPES = [ + FieldType('file_type', models.FileType), + ] def clean_reception_date(self): value = self.cleaned_data.get('reception_date', None) @@ -61,27 +62,31 @@ class FileFormGeneral(ManageOldType, forms.Form): return value -class FileFormPreventiveType(ManageOldType, forms.Form): +class FileFormPreventiveType(CustomForm, ManageOldType, forms.Form): form_label = u"Saisine" + form_admin_name = _(u"Archaeological file - 013 - Preventive - Saisine") + form_slug = "file-013-preventivesaisine" associated_models = {'saisine_type': models.SaisineType, 'permit_type': models.PermitType} permit_type = forms.ChoiceField(label=_(u"Permit type"), required=False, choices=[]) saisine_type = forms.ChoiceField(label=_(u"Saisine type"), choices=[]) + TYPES = [ + FieldType('saisine_type', models.SaisineType), + ] def __init__(self, *args, **kwargs): super(FileFormPreventiveType, self).__init__(*args, **kwargs) - self.fields['saisine_type'].choices = models.SaisineType.get_types( - initial=self.init_data.get('saisine_type')) - self.fields['saisine_type'].help_text = models.SaisineType.get_help() self.fields['permit_type'].choices = models.PermitType.get_types( default='NP', initial=self.init_data.get('permit_type')) self.fields['permit_type'].help_text = models.PermitType.get_help() -class FileFormPlanning(forms.Form): +class FileFormPlanning(CustomForm, forms.Form): form_label = _(u"Planning") + form_admin_name = _(u"Archaeological file - 017 - Preventive - Planning") + form_slug = "file-017-preventiveplanning" base_models = ['town', 'department'] associated_models = {'town': Town, 'department': Department} name = forms.CharField(label=_(u"Planning name"), required=False, @@ -112,8 +117,10 @@ class FileFormPlanning(forms.Form): validators.MaxValueValidator(999999999)]) -class FileFormResearchAddress(forms.Form): +class FileFormResearchAddress(CustomForm, forms.Form): form_label = _(u"Address") + form_admin_name = _(u"Archaeological file - 015 - Research - Address") + form_slug = "file-015-researchplanning" base_models = ['town', 'department'] associated_models = {'town': Town, 'department': Department} name = forms.CharField(label=_(u"Project name"), required=False, @@ -228,8 +235,11 @@ class PersonOrgaForm(forms.Form): validators=[valid_id(models.Organization)]) -class FileFormGeneralContractor(PersonOrgaForm): +class FileFormGeneralContractor(CustomForm, PersonOrgaForm): form_label = _(u"General contractor") + form_admin_name = _("Archaeological file - 030 - General contrator") + form_slug = "file-030-generalcontractor" + associated_models = {'general_contractor': models.Person, 'corporation_general_contractor': models.Organization} corporation_general_contractor = forms.IntegerField( @@ -323,6 +333,10 @@ class FileFormGeneralContractor(PersonOrgaForm): if status not in ('natural', 'corporation'): status = DEFAULT_STATUS + user = None + if 'user' in kwargs: + user = kwargs.pop('user') + super(PersonOrgaForm, self).__init__(*args, **kwargs) # distinct widget for natural and corporation @@ -344,8 +358,10 @@ class FileFormGeneralContractor(PersonOrgaForm): self.fields.pop(self.ORGA_FIELD) -class FileFormPlanningService(forms.Form): +class FileFormPlanningService(CustomForm, forms.Form): form_label = _(u"Planning service") + form_admin_name = _("Archaeological file - 040 - Planning service") + form_slug = "file-040-planningservice" associated_models = {'responsible_town_planning_service': models.Person, 'planning_service': models.Organization} @@ -387,8 +403,10 @@ class FileFormPlanningService(forms.Form): ) -class FileFormInstruction(forms.Form): +class FileFormInstruction(CustomForm, forms.Form): form_label = u"Instruction SRA" + form_admin_name = _("Archaeological file - 050 - Instruction") + form_slug = "file-050-instruction" associated_models = {'in_charge': models.Person, 'related_file': models.File} in_charge = forms.IntegerField( diff --git a/archaeological_files_pdl/views.py b/archaeological_files_pdl/views.py index d03fd958d..cf412efb6 100644 --- a/archaeological_files_pdl/views.py +++ b/archaeological_files_pdl/views.py @@ -27,7 +27,6 @@ from ishtar_common.views import OrganizationPersonCreate, \ from archaeological_files_pdl import forms from archaeological_files import forms as ref_forms -from archaeological_operations.forms import ParcelFormSet from archaeological_files import models @@ -41,7 +40,7 @@ file_creation_wizard = FileWizard.as_view([ ('preventivetype-file_creation', forms.FileFormPreventiveType), ('preventiveplanning-file_creation', forms.FileFormPlanning), ('researchaddress-file_creation', forms.FileFormResearchAddress), - ('parcelspdl-file_creation', ParcelFormSet), + ('parcelspdl-file_creation', ref_forms.ParcelFormset), ('generalcontractor-file_creation', forms.FileFormGeneralContractor), ('planningservice-file_creation', forms.FileFormPlanningService), ('research-file_creation', ref_forms.FileFormResearch), @@ -68,7 +67,7 @@ file_modification_wizard = FileModificationWizard.as_view([ ('preventivetype-file_modification', forms.FileFormPreventiveType), ('preventiveplanning-file_modification', forms.FileFormPlanning), ('researchaddress-file_modification', forms.FileFormResearchAddress), - ('parcelspdl-file_modification', ParcelFormSet), + ('parcelspdl-file_modification', ref_forms.ParcelFormset), ('generalcontractor-file_modification', forms.FileFormGeneralContractor), ('planningservice-file_modification', forms.FileFormPlanningService), ('research-file_modification', ref_forms.FileFormResearch), diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index bf5c579f2..001c10052 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -43,7 +43,7 @@ from ishtar_common.forms import FormSet, FloatField, \ get_form_selection, reverse_lazy, TableSelect, get_now, FinalForm, \ ManageOldType, FieldType -from ishtar_common.forms_common import get_town_field, SourceSelect +from ishtar_common.forms_common import get_town_field, SourceSelect, CustomForm from ishtar_common.utils import convert_coordinates_to_point from ishtar_common import widgets from archaeological_operations.widgets import OAWidget @@ -92,8 +92,10 @@ __all__ = [ logger = logging.getLogger(__name__) -class RecordFormSelection(forms.Form): +class RecordFormSelection(CustomForm, forms.Form): form_label = _("Context record") + form_admin_name = _(u"Find - 010 - Context record choice") + form_slug = "find-010-contextrecord" base_models = ['get_first_base_find'] associated_models = {'get_first_base_find__context_record': ContextRecord} get_first_base_find__context_record = forms.IntegerField( @@ -124,9 +126,11 @@ class RecordFormSelection(forms.Form): cr.operation.pk) -class FindForm(ManageOldType, forms.Form): +class FindForm(CustomForm, ManageOldType, forms.Form): file_upload = True form_label = _("Find") + form_admin_name = _(u"Find - 020 - General") + form_slug = "find-020-general" base_models = ['get_first_base_find', 'object_type', 'material_type', 'integritie', 'remarkabilitie'] associated_models = {'material_type': models.MaterialType, @@ -206,6 +210,14 @@ class FindForm(ManageOldType, forms.Form): 'height': settings.IMAGE_MAX_SIZE[1]}), max_length=255, required=False, widget=widgets.ImageFileInput()) + TYPES = [ + FieldType('material_type', models.MaterialType, is_multiple=True), + FieldType('object_type', models.ObjectType, is_multiple=True), + FieldType('get_first_base_find__batch', models.BatchType), + FieldType('integritie', models.IntegrityType, is_multiple=True), + FieldType('remarkabilitie', models.RemarkabilityType, is_multiple=True) + ] + def __init__(self, *args, **kwargs): super(FindForm, self).__init__(*args, **kwargs) if not get_current_profile().mapping: @@ -224,35 +236,6 @@ class FindForm(ManageOldType, forms.Form): self.fields[srs].help_text = \ SpatialReferenceSystem.get_help() self.fields['checked'].choices = models.CHECK_CHOICES - self.fields['material_type'].choices = models.MaterialType.get_types( - initial=self.init_data.get('material_type'), - empty_first=False - ) - self.fields['material_type'].help_text = models.MaterialType.get_help() - - self.fields['object_type'].choices = models.ObjectType.get_types( - initial=self.init_data.get('object_type'), - empty_first=False - ) - self.fields['object_type'].help_text = models.ObjectType.get_help() - - self.fields['get_first_base_find__batch'].choices = \ - models.BatchType.get_types( - initial=self.init_data.get('get_first_base_find__batch')) - self.fields['get_first_base_find__batch'].help_text = \ - models.BatchType.get_help() - self.fields['integritie'].choices = \ - models.IntegrityType.get_types( - empty_first=False, - initial=self.init_data.get('integritie')) - self.fields['integritie'].help_text = \ - models.IntegrityType.get_help() - self.fields['remarkabilitie'].choices = \ - models.RemarkabilityType.get_types( - empty_first=False, - initial=self.init_data.get('remarkabilitie')) - self.fields['remarkabilitie'].help_text = \ - models.RemarkabilityType.get_help() self.fields['estimated_value'].label = u"{} ({})".format( unicode(self.fields['estimated_value'].label), get_current_profile().currency) @@ -285,8 +268,10 @@ class FindForm(ManageOldType, forms.Form): return self.cleaned_data -class PreservationForm(ManageOldType, forms.Form): +class PreservationForm(CustomForm, ManageOldType, forms.Form): form_label = _("Preservation") + form_admin_name = _(u"Find - 030 - Preservation") + form_slug = "find-030-preservation" base_models = ['alteration', 'alteration_cause', 'preservation_to_consider'] associated_models = {'alteration': models.AlterationType, @@ -346,23 +331,18 @@ class DateForm(ManageOldType, forms.Form): required=False, choices=[]) precise_dating = forms.CharField(label=_("Precise dating"), required=False) - - def __init__(self, *args, **kwargs): - super(DateForm, self).__init__(*args, **kwargs) - self.fields['dating_type'].choices = DatingType.get_types( - initial=self.init_data.get('dating_type')) - self.fields['dating_type'].help_text = DatingType.get_help() - self.fields['period'].choices = Period.get_types( - initial=self.init_data.get('period')) - self.fields['period'].help_text = Period.get_help() - self.fields['quality'].choices = DatingQuality.get_types( - initial=self.init_data.get('quality')) - self.fields['quality'].help_text = DatingQuality.get_help() + TYPES = [ + FieldType('dating_type', DatingType), + FieldType('period', Period), + FieldType('quality', DatingQuality), + ] DatingFormSet = formset_factory(DateForm, can_delete=True, formset=FormSet) DatingFormSet.form_label = _("Dating") +DatingFormSet.form_admin_name = _(u"Find - 040 - Dating") +DatingFormSet.form_slug = "find-040-dating" class FindSelect(TableSelect): @@ -660,11 +640,10 @@ class ResultFindForm(ManageOldType, forms.Form): weight = forms.IntegerField(label=_(u"Weight (g)")) find_number = forms.IntegerField(label=_(u"Find number")) - def __init__(self, *args, **kwargs): - super(ResultFindForm, self).__init__(*args, **kwargs) - self.fields['material_type'].choices = models.MaterialType.get_types( - initial=self.init_data.get('material_type')) - self.fields['material_type'].help_text = models.MaterialType.get_help() + TYPES = [ + FieldType('material_type', models.MaterialType) + ] + ResultFindFormSet = formset_factory(ResultFindForm, can_delete=True, formset=FormSet) diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py index 947b4f20f..a1cb4a8b5 100644 --- a/archaeological_finds/forms_treatments.py +++ b/archaeological_finds/forms_treatments.py @@ -37,7 +37,7 @@ from archaeological_operations.forms import AdministrativeActOpeForm, \ AdministrativeActOpeFormSelection, AdministrativeActModifForm from ishtar_common.forms import reverse_lazy, TableSelect, FinalForm, \ - ManageOldType, get_form_selection + ManageOldType, get_form_selection, CustomForm, FieldType from ishtar_common.forms_common import SourceSelect from ishtar_common import widgets @@ -75,8 +75,10 @@ class TreatmentFormSelection(forms.Form): validators=[valid_id(models.Treatment)]) -class BaseTreatmentForm(ManageOldType, forms.Form): +class BaseTreatmentForm(CustomForm, ManageOldType, forms.Form): form_label = _(u"Base treatment") + form_admin_name = _(u"Treatment - 020 - General") + form_slug = "treatment-020-general" base_models = ['treatment_type'] associated_models = {'treatment_type': models.TreatmentType, 'person': Person, @@ -154,6 +156,13 @@ class BaseTreatmentForm(ManageOldType, forms.Form): 'height': settings.IMAGE_MAX_SIZE[1]}), max_length=255, required=False, widget=widgets.ImageFileInput()) + TYPES = [ + FieldType('treatment_state', models.TreatmentState), + FieldType('treatment_type', models.TreatmentType, is_multiple=True, + extra_args={'dct': {'upstream_is_many': False, + 'downstream_is_many': False}}) + ] + def __init__(self, *args, **kwargs): user = kwargs.pop('user') super(BaseTreatmentForm, self).__init__(*args, **kwargs) @@ -172,20 +181,6 @@ class BaseTreatmentForm(ManageOldType, forms.Form): 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 @@ -266,8 +261,10 @@ class TreatmentModifyForm(BaseTreatmentForm): return cleaned_data -class TreatmentFormFileChoice(forms.Form): +class TreatmentFormFileChoice(CustomForm, forms.Form): form_label = _(u"Associated request") + form_admin_name = _(u"Treatment - 010 - Request choice") + form_slug = "treatment-010-requestchoice" associated_models = {'file': models.TreatmentFile, } currents = {'file': models.TreatmentFile} file = forms.IntegerField( @@ -383,15 +380,14 @@ class AdministrativeActTreatmentFormSelection( class AdministrativeActTreatmentForm(AdministrativeActOpeForm): + form_admin_name = _(u"Treatment - Administrative act - General") + form_slug = "treatment-adminact-general" 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'}) + TYPES = [ + FieldType('act_type', ActType, + extra_args={"dct": {'intented_to': 'T'}}), + ] class AdministrativeActTreatmentModifForm( @@ -640,16 +636,14 @@ class AdministrativeActTreatmentFileFormSelection( class AdministrativeActTreatmentFileForm(AdministrativeActOpeForm): + form_admin_name = _(u"Treatment request - Administrative act - General") + form_slug = "treatmentfile-adminact-general" 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'}) + TYPES = [ + FieldType('act_type', ActType, + extra_args={"dct": {'intented_to': 'TF'}}), + ] class AdministrativeActTreatmentFileModifForm( diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 861e18905..fed48a8ff 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -51,7 +51,7 @@ from ishtar_common.forms import FinalForm, FormSet, get_now, \ reverse_lazy, get_form_selection, TableSelect, get_data_from_formset, \ ManageOldType, IshtarForm, CustomForm, FieldType from ishtar_common.forms_common import TownFormSet, SourceForm, SourceSelect, \ - get_town_field + get_town_field, TownForm from archaeological_operations.utils import parse_parcels @@ -366,10 +366,6 @@ class ParcelFormSet(FormSet): if hasattr(self, 'cleaned_data') and self.cleaned_data: return self.cleaned_data -ParcelFormSet = formset_factory(ParcelForm, can_delete=True, - formset=ParcelFormSet) -ParcelFormSet.form_label = _(u"Parcels") - class RecordRelationsForm(ManageOldType): base_model = 'right_relation' @@ -477,8 +473,8 @@ class RecordRelationsFormSetBase(FormSet): RecordRelationsFormSet = formset_factory( RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase) RecordRelationsFormSet.form_label = _(u"Relations") -RecordRelationsFormSet.form_admin_name = _("Operations - Relations") -RecordRelationsFormSet.form_slug = "operation-relations" +RecordRelationsFormSet.form_admin_name = _(u"Operation - 080 - Relations") +RecordRelationsFormSet.form_slug = "operation-080-relations" class OperationSelect(TableSelect): @@ -679,8 +675,8 @@ class OperationFormFileChoice(IshtarForm): class OperationFormAbstract(CustomForm, IshtarForm): form_label = _(u"Abstract") - form_admin_name = _("Operations - Abstract") - form_slug = "operation-abstract" + form_admin_name = _(u"Operation - 090 - Abstract") + form_slug = "operation-090-abstract" abstract = forms.CharField( label=_(u"Abstract"), widget=forms.Textarea(attrs={'class': 'xlarge'}), required=False) @@ -768,8 +764,8 @@ class DashboardForm(forms.Form): class OperationFormGeneral(CustomForm, ManageOldType): form_label = _(u"General") - form_admin_name = _(u"Operation - General") - form_slug = "operation-general" + form_admin_name = _(u"Operation - 010 - General") + form_slug = "operation-010-general" file_upload = True associated_models = {'scientist': Person, @@ -1014,8 +1010,8 @@ OperationFormModifGeneral.associated_models['associated_file'] = File class CollaboratorForm(CustomForm, IshtarForm): form_label = _(u"Collaborators") - form_admin_name = _(u"Operation - Collaborators") - form_slug = "operation-collaborators" + form_admin_name = _(u"Operation - 020 - Collaborators") + form_slug = "operation-020-collaborators" base_models = ['collaborator'] associated_models = {'collaborator': Person, } @@ -1030,8 +1026,8 @@ class CollaboratorForm(CustomForm, IshtarForm): class OperationFormPreventive(CustomForm, IshtarForm): form_label = _(u"Preventive informations - excavation") - form_admin_name = _(u"Operation - Preventive - Excavation") - form_slug = "operation-preventive-excavation" + form_admin_name = _(u"Operation - 033 - Preventive - Excavation") + form_slug = "operation-033-preventive-excavation" cost = forms.IntegerField(label=_(u"Cost (euros)"), required=False) scheduled_man_days = forms.IntegerField(label=_(u"Scheduled man-days"), @@ -1049,8 +1045,8 @@ class OperationFormPreventive(CustomForm, IshtarForm): class OperationFormPreventiveDiag(CustomForm, IshtarForm): form_label = _("Preventive informations - diagnostic") - form_admin_name = _(u"Operation - Preventive - Diagnostic") - form_slug = "operation-preventive-diagnostic" + form_admin_name = _(u"Operation - 037 - Preventive - Diagnostic") + form_slug = "operation-037-preventive-diagnostic" if settings.COUNTRY == 'fr': zoning_prescription = forms.NullBooleanField( @@ -1080,7 +1076,13 @@ class SelectedTownForm(IshtarForm): SelectedTownFormset = formset_factory(SelectedTownForm, can_delete=True, formset=TownFormSet) SelectedTownFormset.form_label = _(u"Towns") -SelectedTownFormset.form_slug = "towns" +SelectedTownFormset.form_admin_name = _(u"Operation - 040 - Towns") +SelectedTownFormset.form_slug = "operation-040-towns" + +TownFormset = formset_factory(TownForm, can_delete=True, formset=TownFormSet) +TownFormset.form_label = _("Towns") +TownFormset.form_admin_name = _(u"Operation - 040 - Towns (2)") +TownFormset.form_slug = "operation-040-towns-2" class SelectedParcelForm(IshtarForm): @@ -1101,13 +1103,15 @@ class SelectedParcelForm(IshtarForm): SelectedParcelFormSet = formset_factory(SelectedParcelForm, can_delete=True, formset=ParcelFormSet) SelectedParcelFormSet.form_label = _("Parcels") -SelectedParcelFormSet.form_admin_name = _(u"Operations - Parcels") -SelectedParcelFormSet.form_slug = "operation-parcels" +SelectedParcelFormSet.form_admin_name = _(u"Operation - 050 - Parcels") +SelectedParcelFormSet.form_slug = "operation-050-parcels" SelectedParcelGeneralFormSet = formset_factory(ParcelForm, can_delete=True, formset=ParcelFormSet) -SelectedParcelGeneralFormSet.form_admin_name = _("Parcels") -SelectedParcelGeneralFormSet.form_slug = "operation-parcels" +SelectedParcelGeneralFormSet.form_label = _("Parcels") +SelectedParcelGeneralFormSet.form_admin_name = _( + u"Operation - 050 - Parcels (2)") +SelectedParcelGeneralFormSet.form_slug = "operation-050-parcels-2" """ class SelectedParcelFormSet(forms.Form): @@ -1135,10 +1139,10 @@ class SelectedParcelFormSet(forms.Form): """ -class RemainForm(CustomForm, ManageOldType): - form_label = _("Remain types") - form_admin_name = _("Operations - Remains") - form_slug = "operation-remains" +class RemainForm(CustomForm, ManageOldType, forms.Form): + form_label = _(u"Remain types") + form_admin_name = _(u"Operation - 060 - Remains") + form_slug = "operation-060-remains" base_model = 'remain' associated_models = {'remain': models.RemainType} @@ -1151,10 +1155,10 @@ class RemainForm(CustomForm, ManageOldType): ] -class PeriodForm(CustomForm, ManageOldType): - form_label = _("Periods") - form_admin_name = _("Operations - Periods") - form_slug = "operation-periods" +class PeriodForm(CustomForm, ManageOldType, forms.Form): + form_label = _(u"Periods") + form_admin_name = _(u"Operation - 070 - Periods") + form_slug = "operation-070-periods" base_model = 'period' associated_models = {'period': models.Period} @@ -1222,12 +1226,12 @@ class ArchaeologicalSiteBasicForm(IshtarForm): required=False) -ArchaeologicalSiteFormSet = formset_factory(ArchaeologicalSiteBasicForm, - can_delete=True, formset=FormSet) -ArchaeologicalSiteFormSet.form_label = _("Archaeological sites") -ArchaeologicalSiteFormSet.form_admin_name = _("Operation - Archaeological " - "sites") -ArchaeologicalSiteFormSet.form_slug = "operation-archaeological-sites" +ArchaeologicalSiteFormSet = formset_factory( + ArchaeologicalSiteBasicForm, can_delete=True, formset=FormSet) +ArchaeologicalSiteFormSet.form_label = _(u"Archaeological sites") +ArchaeologicalSiteFormSet.form_admin_name = _( + u"Operation - 030 - Archaeological sites") +ArchaeologicalSiteFormSet.form_slug = "operation-030-archaeological-sites" class ArchaeologicalSiteSelectionForm(IshtarForm): @@ -1255,9 +1259,6 @@ class OperationDeletionForm(FinalForm): class OperationSourceForm(SourceForm): - form_admin_name = _("Operation Sources - Main") - form_slug = "operation-source-relations" - pk = forms.IntegerField(required=False, widget=forms.HiddenInput) index = forms.IntegerField(label=_(u"Index")) hidden_operation_id = forms.IntegerField(label="", @@ -1407,7 +1408,7 @@ class AdministrativeActOpeFormSelection(IshtarForm): class AdministrativeActOpeForm(CustomForm, ManageOldType): form_label = _("General") - form_admin_name = _("Operations - Administrative act - General") + form_admin_name = _(u"Operation - Administrative act - General") form_slug = "operation-adminact-general" associated_models = {'act_type': models.ActType, } diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index af6199774..21b7da2a0 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -1178,7 +1178,7 @@ class CustomFormTest(TestCase, OperationInitTest): key_in_charge, response.content, msg="filter all - 'in charge' field not found on the modification " "wizard") - f = CustomForm.objects.create(name="Test", form="operation-general", + f = CustomForm.objects.create(name="Test", form="operation-010-general", available=True, apply_to_all=True) ExcludedField.objects.create(custom_form=f, field="in_charge") @@ -1190,7 +1190,7 @@ class CustomFormTest(TestCase, OperationInitTest): # user type form prevail on "all" f_scientist = CustomForm.objects.create( - name="Test", form="operation-general", available=True) + name="Test", form="operation-010-general", available=True) tpe = PersonType.objects.get(txt_idx='head_scientist') key_address = "address" f_scientist.user_types.add(tpe) @@ -1208,7 +1208,7 @@ class CustomFormTest(TestCase, OperationInitTest): # user prevail on "all" and "user_types" f_user = CustomForm.objects.create( - name="Test", form="operation-general", available=True) + name="Test", form="operation-010-general", available=True) f_user.users.add(self.user.ishtaruser) self.user.ishtaruser.person.person_types.add(tpe) response = c.post(url, data) @@ -1239,7 +1239,7 @@ class CustomFormTest(TestCase, OperationInitTest): response = c.post(url, data) self.assertNotEqual(response.status_code, 404) CustomForm.objects.create( - name="Test2", form="operation-collaborators", available=True, + name="Test2", form="operation-020-collaborators", available=True, apply_to_all=True, enabled=False) response = c.post(url, data) self.assertEqual(response.status_code, 404) diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index f295e0f9d..a4cb1f673 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -28,8 +28,7 @@ from django.utils.translation import ugettext_lazy as _, pgettext_lazy from ishtar_common.views import get_item, show_item, revert_item, new_item from ishtar_common.wizards import SearchWizard, check_rights_condition from ishtar_common.forms import ClosingDateFormSelection -from ishtar_common.forms_common import AuthorFormset, TownFormset, \ - SourceDeletionForm +from ishtar_common.forms_common import AuthorFormset, SourceDeletionForm from ishtar_common.models import get_current_profile from wizards import * from forms import * diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index 5977f87a9..da0c1c195 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -30,7 +30,8 @@ from archaeological_finds.models import TreatmentType, FindBasket import models from ishtar_common import widgets from ishtar_common.forms import name_validator, reverse_lazy, \ - get_form_selection, TableSelect, ManageOldType, FinalForm, FormSet + get_form_selection, TableSelect, ManageOldType, FinalForm, FormSet, \ + CustomForm, FieldType from archaeological_finds.forms import FindMultipleFormSelection, \ SelectFindBasketForm @@ -67,9 +68,12 @@ class DivisionFormSet(FormSet): return self.check_duplicate(('division',), _("There are identical divisions.")) + SelectedDivisionFormset = formset_factory( SelectedDivisionForm, can_delete=True, formset=DivisionFormSet) SelectedDivisionFormset.form_label = _(u"Divisions") +SelectedDivisionFormset.form_admin_name = _(u"Warehouse - 020 - Divisions") +SelectedDivisionFormset.form_slug = "warehouse-020-divisions" class WarehouseSelect(TableSelect): @@ -97,8 +101,10 @@ class WarehouseFormSelection(forms.Form): validators=[valid_id(models.Warehouse)]) -class WarehouseForm(ManageOldType, forms.Form): +class WarehouseForm(CustomForm, ManageOldType, forms.Form): form_label = _(u"Warehouse") + form_admin_name = _(u"Warehouse - 010 - General") + form_slug = "warehouse-010-general" associated_models = {'warehouse_type': models.WarehouseType, 'person_in_charge': Person} @@ -127,16 +133,14 @@ class WarehouseForm(ManageOldType, forms.Form): phone = forms.CharField(label=_(u"Phone"), max_length=18, required=False) mobile_phone = forms.CharField(label=_(u"Mobile phone"), max_length=18, required=False) + TYPES = [ + FieldType('warehouse_type', models.WarehouseType) + ] def __init__(self, *args, **kwargs): if 'limits' in kwargs: kwargs.pop('limits') super(WarehouseForm, self).__init__(*args, **kwargs) - self.fields['warehouse_type'].choices = \ - models.WarehouseType.get_types( - initial=self.init_data.get('warehouse_type')) - self.fields['warehouse_type'].help_text = \ - models.WarehouseType.get_help() def save(self, user): dct = self.cleaned_data @@ -156,8 +160,10 @@ class WarehouseDeletionForm(FinalForm): confirm_end_msg = _(u"Would you like to delete this warehouse?") -class ContainerForm(ManageOldType, forms.Form): +class ContainerForm(CustomForm, ManageOldType, forms.Form): form_label = _(u"Container") + form_admin_name = _(u"Container - 010 - General") + form_slug = "container-010-general" file_upload = True associated_models = {'container_type': models.ContainerType, 'location': models.Warehouse, @@ -185,16 +191,14 @@ class ContainerForm(ManageOldType, forms.Form): max_length=255, required=False, widget=widgets.ImageFileInput()) comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, required=False) + TYPES = [ + FieldType('container_type', models.ContainerType), + ] def __init__(self, *args, **kwargs): if 'limits' in kwargs: kwargs.pop('limits') super(ContainerForm, self).__init__(*args, **kwargs) - self.fields['container_type'].choices = \ - models.ContainerType.get_types( - initial=self.init_data.get('container_type')) - self.fields['container_type'].help_text = \ - models.ContainerType.get_help() def save(self, user): dct = self.cleaned_data @@ -282,7 +286,9 @@ class FindPackagingFormSelection(FindMultipleFormSelection): form_label = _(u"Packaged finds") -class LocalisationForm(forms.Form): +class LocalisationForm(CustomForm, forms.Form): + form_admin_name = _(u"Container - 020 - Localisation") + form_slug = "container-020-localisation" form_label = _(u"Localisation") def __init__(self, *args, **kwargs): diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 189a02c05..fa71c4d3f 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -46,6 +46,7 @@ from ishtar_common.utils import get_cache from ishtar_common import forms as common_forms from archaeological_files import forms as file_forms +from archaeological_files_pdl import forms as file_pdl_forms from archaeological_operations import forms as operation_forms from archaeological_context_records import forms as context_record_forms from archaeological_finds import forms as find_forms, \ @@ -53,7 +54,7 @@ from archaeological_finds import forms as find_forms, \ from archaeological_warehouse import forms as warehouse_forms -ISHTAR_FORMS = [common_forms, file_forms, operation_forms, +ISHTAR_FORMS = [common_forms, file_pdl_forms, file_forms, operation_forms, context_record_forms, find_forms, treatment_forms, warehouse_forms] diff --git a/ishtar_common/fixtures/initial_importtypes-fr.json b/ishtar_common/fixtures/initial_importtypes-fr.json index 97c0856a2..f0949b126 100644 --- a/ishtar_common/fixtures/initial_importtypes-fr.json +++ b/ishtar_common/fixtures/initial_importtypes-fr.json @@ -1641,7 +1641,7 @@ "ishtar-operations" ], "col_number": 24, - "description": "Date de cl\u00f4ture (peut \u00eatre la date de rendu de la documentation, la fin de la recherche associ\u00e9e ou autre). Habituellement cela repr\u00e9sente la date \u00e0 partir de laquelle la documentation issue de l'op\u00e9ration n'est plus du ressort du responsable d'op\u00e9ration, mais vous pouvez utiliser autre chose.", + "description": "Date de cl\u00f4ture (peut \u00eatre la date de versement de la documentation, la fin de la recherche associ\u00e9e ou autre). Habituellement cela repr\u00e9sente la date \u00e0 partir de laquelle la documentation issue de l'op\u00e9ration n'est plus du ressort du responsable d'op\u00e9ration, mais vous pouvez utiliser autre chose.", "regexp_pre_filter": null, "required": false, "export_field_name": null @@ -1720,12 +1720,12 @@ { "model": "ishtar_common.importercolumn", "fields": { - "label": "Date limite pour le rendu de la documentation", + "label": "Date limite pour le versement de la documentation", "importer_type": [ "ishtar-operations" ], "col_number": 30, - "description": "Date limite pr\u00e9vue pour le rendu de la documentation scientifique.", + "description": "Date limite pr\u00e9vue pour le versement de la documentation scientifique.", "regexp_pre_filter": null, "required": false, "export_field_name": null @@ -1748,12 +1748,12 @@ { "model": "ishtar_common.importercolumn", "fields": { - "label": "Date limite rendu du mobilier", + "label": "Date limite versement du mobilier", "importer_type": [ "ishtar-operations" ], "col_number": 32, - "description": "Date limite pr\u00e9vue pour le rendu du mobilier.", + "description": "Date limite pr\u00e9vue pour le versement du mobilier.", "regexp_pre_filter": null, "required": false, "export_field_name": null diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index c93065fac..4edb22c18 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -731,6 +731,7 @@ class TownFormSet(FormSet): return self.check_duplicate(('town',), _("There are identical towns.")) + TownFormset = formset_factory(TownForm, can_delete=True, formset=TownFormSet) TownFormset.form_label = _("Towns") TownFormset.form_admin_name = _(u"Towns") @@ -864,6 +865,9 @@ class MergeOrganizationForm(MergeForm): ###################### class SourceForm(CustomForm, ManageOldType, forms.Form): form_label = _(u"Documentation informations") + form_admin_name = _("Source - General") + form_slug = "source-general" + file_upload = True associated_models = {'source_type': models.SourceType} title = forms.CharField(label=_(u"Title"), diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b0751f661..4db445c41 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -23,6 +23,7 @@ Models description from cStringIO import StringIO import copy import datetime +import inspect from PIL import Image import logging import os @@ -1651,6 +1652,9 @@ class CustomForm(models.Model): verbose_name_plural = _(u"Custom forms") ordering = ['name', 'form'] + def __unicode__(self): + return u"{} - {}".format(self.name, self.form) + def users_lbl(self): users = [unicode(user) for user in self.users.all()] return " ; ".join(users) @@ -1683,7 +1687,8 @@ class CustomForm(models.Model): # not very clean... but do not treat inappropriate items continue form = getattr(app_form, form) - if not issubclass(form, CustomForm) \ + if not inspect.isclass(form) \ + or not issubclass(form, CustomForm) \ or not getattr(form, 'form_slug', None): continue cls._register[form.form_slug] = form diff --git a/translations/fr/archaeological_operations.po b/translations/fr/archaeological_operations.po index 490111733..37b6c0938 100644 --- a/translations/fr/archaeological_operations.po +++ b/translations/fr/archaeological_operations.po @@ -7,12 +7,13 @@ # Étienne Loks <etienne.loks@iggdrasil.net>, 2016. #zanata # Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata # Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata +# Étienne Loks <etienne.loks@iggdrasil.net>, 2018. #zanata msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" "Content-Type: text/plain; charset=UTF-8\n" -"PO-Revision-Date: 2017-11-02 05:38-0400\n" +"PO-Revision-Date: 2018-01-04 09:51-0500\n" "Last-Translator: Étienne Loks <etienne.loks@iggdrasil.net>\n" "Language-Team: \n" "Language: fr\n" @@ -246,11 +247,11 @@ msgstr "Modifié par" #: forms.py:569 msgid "Documentation deadline before" -msgstr "Date limite de rendu de la documentation avant" +msgstr "Date limite de versement de la documentation avant" #: forms.py:571 msgid "Documentation deadline after" -msgstr "Date limite de rendu de la documentation après" +msgstr "Date limite de versement de la documentation après" #: forms.py:573 forms.py:861 models.py:365 msgid "Documentation received" @@ -258,11 +259,11 @@ msgstr "Documentation reçue" #: forms.py:575 msgid "Finds deadline before" -msgstr "Date limite de rendu du mobilier avant" +msgstr "Date limite de versement du mobilier avant" #: forms.py:577 msgid "Finds deadline after" -msgstr "Date limite de rendu du mobilier après" +msgstr "Date limite de versement du mobilier après" #: forms.py:579 forms.py:866 models.py:369 msgid "Finds received" @@ -384,11 +385,11 @@ msgstr "Date de livraison du rapport" #: forms.py:858 models.py:362 msgid "Deadline for submission of the documentation" -msgstr "Date limite de rendu de la documentation" +msgstr "Date limite de versement de la documentation" #: forms.py:863 models.py:367 msgid "Deadline for submission of the finds" -msgstr "Date limite de rendu du mobilier" +msgstr "Date limite de versement du mobilier" #: forms.py:878 msgid "Image" |