summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-01-05 15:06:12 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-01-05 15:06:12 +0100
commit2ea08e20ee52f2d6df08460536cd95224a7ae07d (patch)
treecacfd44d18db9263030377d95868122625ad0ada
parentcdfdea70ba35aa9b1d02a93896eadcdb733fdabd (diff)
parent7c0b2e7f72308ea543b9fb15e4d25b7d9b4eddb7 (diff)
downloadIshtar-2ea08e20ee52f2d6df08460536cd95224a7ae07d.tar.bz2
Ishtar-2ea08e20ee52f2d6df08460536cd95224a7ae07d.zip
Merge branch 'develop' into develop-bootstrap
-rw-r--r--archaeological_context_records/forms.py72
-rw-r--r--archaeological_files/forms.py30
-rw-r--r--archaeological_files/views.py7
-rw-r--r--archaeological_files_pdl/forms.py50
-rw-r--r--archaeological_files_pdl/views.py5
-rw-r--r--archaeological_finds/forms.py79
-rw-r--r--archaeological_finds/forms_treatments.py58
-rw-r--r--archaeological_operations/forms.py81
-rw-r--r--archaeological_operations/tests.py8
-rw-r--r--archaeological_operations/views.py3
-rw-r--r--archaeological_warehouse/forms.py34
-rw-r--r--ishtar_common/admin.py3
-rw-r--r--ishtar_common/fixtures/initial_importtypes-fr.json10
-rw-r--r--ishtar_common/forms_common.py4
-rw-r--r--ishtar_common/models.py7
-rw-r--r--translations/fr/archaeological_operations.po15
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"