summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/forms.py29
-rw-r--r--archaeological_files/forms.py30
-rw-r--r--archaeological_files_pdl/forms.py18
-rw-r--r--archaeological_finds/forms.py40
-rw-r--r--archaeological_operations/forms.py35
-rw-r--r--archaeological_warehouse/forms.py12
-rw-r--r--ishtar_common/forms.py31
-rw-r--r--ishtar_common/forms_common.py27
-rw-r--r--ishtar_common/models.py23
9 files changed, 174 insertions, 71 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index f3bbb1b65..4f10014de 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -36,7 +36,7 @@ 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
+ reverse_lazy, get_form_selection, TableSelect, ManageOldType
from ishtar_common.forms_common import get_town_field, SourceSelect
from archaeological_operations.forms import OperationSelect, ParcelField,\
RecordRelationsForm as OpeRecordRelationsForm
@@ -114,7 +114,7 @@ class RecordFormSelection(forms.Form):
return cleaned_data
-class RecordFormGeneral(forms.Form):
+class RecordFormGeneral(ManageOldType, forms.Form):
form_label = _("General")
associated_models = {'parcel': Parcel, 'unit': models.Unit}
pk = forms.IntegerField(required=False, widget=forms.HiddenInput)
@@ -162,7 +162,8 @@ class RecordFormGeneral(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()
+ self.fields['unit'].choices = models.Unit.get_types(
+ initial=self.init_data.get('unit'))
self.fields['unit'].help_text = models.Unit.get_help()
def clean(self):
@@ -180,7 +181,7 @@ class RecordFormGeneral(forms.Form):
return cleaned_data
-class DatingForm(forms.Form):
+class DatingForm(ManageOldType, forms.Form):
form_label = _("Dating")
base_model = 'dating'
associated_models = {'dating_type': models.DatingType,
@@ -195,11 +196,14 @@ class DatingForm(forms.Form):
def __init__(self, *args, **kwargs):
super(DatingForm, self).__init__(*args, **kwargs)
- self.fields['dating_type'].choices = models.DatingType.get_types()
+ 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()
+ 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()
+ self.fields['period'].choices = Period.get_types(
+ initial=self.init_data.get('period'))
self.fields['period'].help_text = Period.get_help()
@@ -229,7 +233,8 @@ class RecordRelationsForm(OpeRecordRelationsForm):
kwargs.pop('files')
super(RecordRelationsForm, self).__init__(*args, **kwargs)
self.fields['relation_type'].choices = \
- models.RelationType.get_types()
+ models.RelationType.get_types(
+ initial=self.init_data.get('relation_type'))
if crs:
self.fields['right_record'].choices = [('', '-' * 2)] + crs
@@ -237,7 +242,7 @@ RecordRelationsFormSet = formset_factory(RecordRelationsForm, can_delete=True)
RecordRelationsFormSet.form_label = _(u"Relations")
-class RecordFormInterpretation(forms.Form):
+class RecordFormInterpretation(ManageOldType, forms.Form):
form_label = _("Interpretation")
associated_models = {'activity': models.ActivityType,
'identification': models.IdentificationType}
@@ -263,10 +268,12 @@ class RecordFormInterpretation(forms.Form):
def __init__(self, *args, **kwargs):
super(RecordFormInterpretation, self).__init__(*args, **kwargs)
- self.fields['activity'].choices = models.ActivityType.get_types()
+ 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()
+ models.IdentificationType.get_types(
+ initial=self.init_data.get('identification'))
self.fields['identification'].help_text = \
models.IdentificationType.get_help()
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py
index 369ffdaf0..26b839940 100644
--- a/archaeological_files/forms.py
+++ b/archaeological_files/forms.py
@@ -33,7 +33,8 @@ from ishtar_common.models import Person, PersonType, Organization, \
from archaeological_operations.models import ActType, AdministrativeAct, \
OperationType
import models
-from ishtar_common.forms import FinalForm, get_now, reverse_lazy, TableSelect
+from ishtar_common.forms import FinalForm, get_now, reverse_lazy, TableSelect, \
+ ManageOldType
from ishtar_common.forms_common import get_town_field
from archaeological_operations.forms import AdministrativeActOpeForm, \
AdministrativeActOpeFormSelection, \
@@ -103,7 +104,8 @@ class FileSelect(TableSelect):
def __init__(self, *args, **kwargs):
super(FileSelect, self).__init__(*args, **kwargs)
- self.fields['saisine_type'].choices = models.SaisineType.get_types()
+ self.fields['saisine_type'].choices = \
+ models.SaisineType.get_types()
self.fields['saisine_type'].help_text = models.SaisineType.get_help()
self.fields['permit_type'].choices = models.PermitType.get_types()
self.fields['permit_type'].help_text = models.PermitType.get_help()
@@ -195,7 +197,7 @@ class DashboardForm(forms.Form):
return fltr
-class FileFormGeneral(forms.Form):
+class FileFormGeneral(ManageOldType, forms.Form):
form_label = _("General")
associated_models = {'in_charge': Person,
'related_file': models.File,
@@ -237,7 +239,8 @@ class FileFormGeneral(forms.Form):
def __init__(self, *args, **kwargs):
super(FileFormGeneral, self).__init__(*args, **kwargs)
- self.fields['file_type'].choices = models.FileType.get_types()
+ 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()
q = models.File.objects\
.filter(internal_reference__isnull=False)\
@@ -276,7 +279,7 @@ RESPONSIBLE_PLANNING_SERVICE_ORGA, created = \
OrganizationType.objects.get_or_create(txt_idx='planning_service')
-class FileFormPreventive(forms.Form):
+class FileFormPreventive(ManageOldType, forms.Form):
form_label = _(u"Preventive informations")
associated_models = {'general_contractor': Person,
'saisine_type': models.SaisineType,
@@ -322,14 +325,18 @@ class FileFormPreventive(forms.Form):
def __init__(self, *args, **kwargs):
super(FileFormPreventive, self).__init__(*args, **kwargs)
- self.fields['saisine_type'].choices = models.SaisineType.get_types()
- self.fields['saisine_type'].help_text = models.SaisineType.get_help()
+ if 'saisine_type' in self.fields:
+ 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'), default='NP')
self.fields['permit_type'].help_text = models.PermitType.get_help()
-class FileFormResearch(forms.Form):
+class FileFormResearch(ManageOldType, forms.Form):
form_label = _("Research archaeology")
base_model = 'department'
associated_models = {'scientist': Person,
@@ -376,7 +383,9 @@ class FileFormResearch(forms.Form):
def __init__(self, *args, **kwargs):
super(FileFormResearch, self).__init__(*args, **kwargs)
self.fields['requested_operation_type'].choices = \
- OperationType.get_types(dct={"preventive": False})
+ OperationType.get_types(
+ dct={"preventive": False},
+ initial=self.init_data.get('requested_operation_type'))
self.fields['requested_operation_type'].help_text = \
OperationType.get_help()
@@ -535,6 +544,7 @@ class AdministrativeActFileForm(AdministrativeActOpeForm):
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'})
diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py
index a182d0f0e..99dc97137 100644
--- a/archaeological_files_pdl/forms.py
+++ b/archaeological_files_pdl/forms.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2014-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2014-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -27,7 +27,7 @@ from django.utils.translation import ugettext_lazy as _
from ishtar_common.models import Person, Town, Department, valid_id
from archaeological_files import models
-from ishtar_common.forms import get_now, reverse_lazy
+from ishtar_common.forms import get_now, reverse_lazy, ManageOldType
from archaeological_files.forms import GENERAL_CONTRACTOR, \
GENERAL_CONTRACTOR_ORGA, RESPONSIBLE_PLANNING_SERVICE, \
RESPONSIBLE_PLANNING_SERVICE_ORGA
@@ -37,7 +37,7 @@ from archaeological_operations.forms import SRA_AGENT
from ishtar_common import widgets
-class FileFormGeneral(forms.Form):
+class FileFormGeneral(ManageOldType, forms.Form):
form_label = _("General")
associated_models = {'file_type': models.FileType}
file_type = forms.ChoiceField(label=_("File type"), choices=[])
@@ -52,7 +52,8 @@ class FileFormGeneral(forms.Form):
def __init__(self, *args, **kwargs):
super(FileFormGeneral, self).__init__(*args, **kwargs)
- self.fields['file_type'].choices = models.FileType.get_types()
+ 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()
def clean_reception_date(self):
@@ -63,7 +64,7 @@ class FileFormGeneral(forms.Form):
return value
-class FileFormPreventiveType(forms.Form):
+class FileFormPreventiveType(ManageOldType, forms.Form):
form_label = u"Saisine"
associated_models = {'saisine_type': models.SaisineType,
'permit_type': models.PermitType}
@@ -74,10 +75,11 @@ class FileFormPreventiveType(forms.Form):
def __init__(self, *args, **kwargs):
super(FileFormPreventiveType, self).__init__(*args, **kwargs)
- self.fields['saisine_type'].choices = models.SaisineType.get_types()
+ 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')
+ 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()
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 1ca359cce..6c6f41457 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -41,7 +41,8 @@ import models
from ishtar_common import widgets
from archaeological_operations.widgets import OAWidget
from ishtar_common.forms import FormSet, FloatField, \
- get_form_selection, reverse_lazy, TableSelect, get_now, FinalForm
+ get_form_selection, reverse_lazy, TableSelect, get_now, FinalForm, \
+ ManageOldType
from ishtar_common.forms_common import get_town_field, SourceSelect
@@ -77,7 +78,7 @@ class RecordFormSelection(forms.Form):
cr.operation.pk)
-class FindForm(forms.Form):
+class FindForm(ManageOldType, forms.Form):
file_upload = True
form_label = _("Find")
base_models = ['get_first_base_find', 'object_type', 'material_type',
@@ -147,22 +148,28 @@ class FindForm(forms.Form):
def __init__(self, *args, **kwargs):
super(FindForm, self).__init__(*args, **kwargs)
self.fields['checked'].choices = models.CHECK_CHOICES
- self.fields['material_type'].choices = models.MaterialType.get_types()
self.fields['material_type'].help_text = models.MaterialType.get_help()
self.fields['conservatory_state'].choices = \
- models.ConservatoryState.get_types()
+ models.ConservatoryState.get_types(
+ initial=self.init_data.get('conservatory_state'))
self.fields['conservatory_state'].help_text = \
models.ConservatoryState.get_help()
self.fields['preservation_to_consider'].choices = \
- models.PreservationType.get_types(empty_first=False)
+ models.PreservationType.get_types(
+ empty_first=False,
+ initial=self.init_data.get('preservation_to_consider'))
self.fields['preservation_to_consider'].help_text = \
models.PreservationType.get_help()
self.fields['integritie'].choices = \
- models.IntegrityType.get_types(empty_first=False)
+ 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)
+ 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(
@@ -170,7 +177,7 @@ class FindForm(forms.Form):
get_current_profile().currency)
-class DateForm(forms.Form):
+class DateForm(ManageOldType, forms.Form):
form_label = _("Dating")
base_model = 'dating'
associated_models = {'dating_type': DatingType,
@@ -189,11 +196,14 @@ class DateForm(forms.Form):
def __init__(self, *args, **kwargs):
super(DateForm, self).__init__(*args, **kwargs)
- self.fields['dating_type'].choices = DatingType.get_types()
+ 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()
+ 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()
+ self.fields['quality'].choices = DatingQuality.get_types(
+ initial=self.init_data.get('quality'))
self.fields['quality'].help_text = DatingQuality.get_help()
@@ -405,7 +415,7 @@ def check_treatment(form_name, type_key, type_list=[], not_type_list=[]):
return func
-class ResultFindForm(forms.Form):
+class ResultFindForm(ManageOldType, forms.Form):
form_label = _(u"Resulting find")
associated_models = {'material_type': models.MaterialType}
label = forms.CharField(
@@ -420,7 +430,8 @@ class ResultFindForm(forms.Form):
def __init__(self, *args, **kwargs):
super(ResultFindForm, self).__init__(*args, **kwargs)
- self.fields['material_type'].choices = models.MaterialType.get_types()
+ 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()
ResultFindFormSet = formset_factory(ResultFindForm, can_delete=True,
@@ -555,7 +566,7 @@ class FindBasketAddItemForm(forms.Form):
return basket
-class BaseTreatmentForm(SelectFindBasketForm):
+class BaseTreatmentForm(ManageOldType, SelectFindBasketForm):
form_label = _(u"Base treatment")
associated_models = {'treatment_type': models.TreatmentType,
'person': Person,
@@ -584,6 +595,7 @@ class BaseTreatmentForm(SelectFindBasketForm):
def __init__(self, *args, **kwargs):
super(BaseTreatmentForm, self).__init__(*args, **kwargs)
self.fields['treatment_type'].choices = models.TreatmentType.get_types(
+ initial=self.init_data.get('treatment_type'),
exclude=['packaging'])
self.fields['treatment_type'].help_text = \
models.TreatmentType.get_help(exclude=['packaging'])
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index d524fdbc5..247dcc20a 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -45,7 +45,8 @@ from widgets import ParcelWidget, SelectParcelWidget, OAWidget
from ishtar_common import widgets
from ishtar_common.forms import FinalForm, FormSet, get_now, \
- reverse_lazy, get_form_selection, TableSelect, get_data_from_formset
+ reverse_lazy, get_form_selection, TableSelect, get_data_from_formset, \
+ ManageOldType
from ishtar_common.forms_common import TownFormSet, SourceForm, SourceSelect, \
get_town_field
@@ -368,7 +369,7 @@ ParcelFormSet = formset_factory(ParcelForm, can_delete=True,
ParcelFormSet.form_label = _(u"Parcels")
-class RecordRelationsForm(forms.Form):
+class RecordRelationsForm(ManageOldType, forms.Form):
base_model = 'right_relation'
current_model = models.RelationType
current_related_model = models.Operation
@@ -386,7 +387,8 @@ class RecordRelationsForm(forms.Form):
def __init__(self, *args, **kwargs):
super(RecordRelationsForm, self).__init__(*args, **kwargs)
self.fields['relation_type'].choices = \
- models.RelationType.get_types()
+ models.RelationType.get_types(
+ initial=self.init_data.get('relation_type'))
@classmethod
def _format_lst(cls, current):
@@ -709,7 +711,7 @@ class DashboardForm(forms.Form):
return fltr
-class OperationFormGeneral(forms.Form):
+class OperationFormGeneral(ManageOldType, forms.Form):
form_label = _(u"General")
base_model = 'archaeological_site'
associated_models = {'scientist': Person,
@@ -804,11 +806,13 @@ class OperationFormGeneral(forms.Form):
def __init__(self, *args, **kwargs):
super(OperationFormGeneral, self).__init__(*args, **kwargs)
self.fields['operation_type'].choices = \
- models.OperationType.get_types()
+ models.OperationType.get_types(
+ initial=self.init_data.get('operation_type'))
self.fields['operation_type'].help_text = \
models.OperationType.get_help()
self.fields['report_processing'].choices = \
- models.ReportState.get_types()
+ models.ReportState.get_types(
+ initial=self.init_data.get('report_processing'))
self.fields['report_processing'].help_text = \
models.ReportState.get_help()
self.fields['record_quality'].choices = \
@@ -1003,7 +1007,7 @@ class SelectedParcelFormSet(forms.Form):
"""
-class RemainForm(forms.Form):
+class RemainForm(ManageOldType, forms.Form):
form_label = _("Remain types")
base_model = 'remain'
associated_models = {'remain': models.RemainType}
@@ -1014,11 +1018,12 @@ class RemainForm(forms.Form):
def __init__(self, *args, **kwargs):
super(RemainForm, self).__init__(*args, **kwargs)
self.fields['remain'].choices = models.RemainType.get_types(
+ initial=self.init_data.get('remain'),
empty_first=False)
self.fields['remain'].help_text = models.RemainType.get_help()
-class PeriodForm(forms.Form):
+class PeriodForm(ManageOldType, forms.Form):
form_label = _("Periods")
base_model = 'period'
associated_models = {'period': models.Period}
@@ -1029,11 +1034,12 @@ class PeriodForm(forms.Form):
def __init__(self, *args, **kwargs):
super(PeriodForm, self).__init__(*args, **kwargs)
self.fields['period'].choices = models.Period.get_types(
+ initial=self.init_data.get('period'),
empty_first=False)
self.fields['period'].help_text = models.Period.get_help()
-class ArchaeologicalSiteForm(forms.Form):
+class ArchaeologicalSiteForm(ManageOldType, forms.Form):
reference = forms.CharField(label=_(u"Reference"), max_length=20)
name = forms.CharField(label=_(u"Name"), max_length=200, required=False)
periods = forms.MultipleChoiceField(
@@ -1049,10 +1055,14 @@ class ArchaeologicalSiteForm(forms.Form):
kwargs.pop('limits')
super(ArchaeologicalSiteForm, self).__init__(*args, **kwargs)
self.fields['periods'].choices = \
- models.Period.get_types(empty_first=False)
+ models.Period.get_types(
+ empty_first=False,
+ initial=self.init_data.get('periods'))
self.fields['periods'].help_text = models.Period.get_help()
self.fields['remains'].choices = \
- models.RemainType.get_types(empty_first=False)
+ models.RemainType.get_types(
+ initial=self.init_data.get('remains'),
+ empty_first=False)
self.fields['remains'].help_text = models.RemainType.get_help()
def clean_reference(self):
@@ -1260,7 +1270,7 @@ class AdministrativeActOpeFormSelection(forms.Form):
return cleaned_data
-class AdministrativeActOpeForm(forms.Form):
+class AdministrativeActOpeForm(ManageOldType, forms.Form):
form_label = _("General")
associated_models = {'act_type': models.ActType, }
# 'signatory':Person}
@@ -1280,6 +1290,7 @@ class AdministrativeActOpeForm(forms.Form):
def __init__(self, *args, **kwargs):
super(AdministrativeActOpeForm, self).__init__(*args, **kwargs)
self.fields['act_type'].choices = models.ActType.get_types(
+ initial=self.init_data.get('act_type'),
dct={'intented_to': 'O'})
self.fields['act_type'].help_text = models.ActType.get_help(
dct={'intented_to': 'O'})
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index d56df8139..b34be3ab3 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -26,7 +26,7 @@ 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
+ get_form_selection, TableSelect, ManageOldType
from archaeological_finds.forms import FindMultipleFormSelection, \
SelectFindBasketForm
@@ -39,7 +39,7 @@ def get_warehouse_field(label=_(u"Warehouse"), required=True):
validators=[valid_id(models.Warehouse)])
-class WarehouseForm(forms.Form):
+class WarehouseForm(ManageOldType, forms.Form):
name = forms.CharField(label=_(u"Name"), max_length=40,
validators=[name_validator])
warehouse_type = forms.ChoiceField(label=_(u"Warehouse type"),
@@ -71,7 +71,8 @@ class WarehouseForm(forms.Form):
kwargs.pop('limits')
super(WarehouseForm, self).__init__(*args, **kwargs)
self.fields['warehouse_type'].choices = \
- models.WarehouseType.get_types()
+ models.WarehouseType.get_types(
+ initial=self.init_data.get('warehouse_type'))
self.fields['warehouse_type'].help_text = \
models.WarehouseType.get_help()
@@ -88,7 +89,7 @@ class WarehouseForm(forms.Form):
return new_item
-class ContainerForm(forms.Form):
+class ContainerForm(ManageOldType, forms.Form):
form_label = _(u"Container")
reference = forms.CharField(label=_(u"Ref."))
container_type = forms.ChoiceField(label=_(u"Container type"), choices=[])
@@ -106,7 +107,8 @@ class ContainerForm(forms.Form):
kwargs.pop('limits')
super(ContainerForm, self).__init__(*args, **kwargs)
self.fields['container_type'].choices = \
- models.ContainerType.get_types()
+ models.ContainerType.get_types(
+ initial=self.init_data.get('container_type'))
self.fields['container_type'].help_text = \
models.ContainerType.get_help()
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 89df1b1a5..79ca2c360 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -194,6 +194,37 @@ def get_data_from_formset(data):
return values
+class ManageOldType(object):
+ def __init__(self, *args, **kwargs):
+ """
+ init_data is used to manage deactivated items in list when editing
+ old data
+ """
+ prefix = kwargs.get('prefix') or ''
+ self.init_data = {}
+ if 'data' in kwargs and kwargs['data']:
+ for k in kwargs['data']:
+ if prefix not in k:
+ continue
+ new_k = k[len(prefix) + 1:]
+ for val in kwargs['data'].getlist(k):
+ if not val:
+ continue
+ if new_k not in self.init_data:
+ self.init_data[new_k] = []
+ self.init_data[new_k].append(val)
+ if 'initial' in kwargs and kwargs['initial']:
+ for k in kwargs['initial']:
+ if k not in self.init_data or not self.init_data[k]:
+ for val in kwargs['initial'].getlist(k):
+ if not val:
+ continue
+ if k not in self.init_data:
+ self.init_data[k] = []
+ self.init_data[k].append(val)
+ super(ManageOldType, self).__init__(*args, **kwargs)
+
+
class DocumentGenerationForm(forms.Form):
"""
Form to generate document by choosing the template
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 2859ed4e5..f6889ae1f 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -33,7 +33,8 @@ from django.utils.translation import ugettext_lazy as _
import models
import widgets
-from forms import FinalForm, FormSet, reverse_lazy, name_validator, TableSelect
+from forms import FinalForm, FormSet, reverse_lazy, name_validator, \
+ TableSelect, ManageOldType
def get_town_field(label=_(u"Town"), required=True):
@@ -154,7 +155,7 @@ class TargetKeyForm(forms.ModelForm):
self.instance.save()
-class OrganizationForm(NewItemForm):
+class OrganizationForm(ManageOldType, NewItemForm):
form_label = _(u"Organization")
associated_models = {'organization_type': models.OrganizationType}
name = forms.CharField(
@@ -178,7 +179,8 @@ class OrganizationForm(NewItemForm):
def __init__(self, *args, **kwargs):
super(OrganizationForm, self).__init__(*args, **kwargs)
self.fields['organization_type'].choices = \
- models.OrganizationType.get_types()
+ models.OrganizationType.get_types(
+ initial=self.init_data.get('organization_type'))
self.fields['organization_type'].help_text = \
models.OrganizationType.get_help()
self.limit_fields()
@@ -254,7 +256,7 @@ class PersonFormSelection(forms.Form):
validators=[models.valid_id(models.Person)])
-class SimplePersonForm(NewItemForm):
+class SimplePersonForm(ManageOldType, NewItemForm):
form_label = _("Identity")
associated_models = {'attached_to': models.Organization,
'title': models.TitleType}
@@ -309,7 +311,8 @@ class SimplePersonForm(NewItemForm):
def __init__(self, *args, **kwargs):
super(SimplePersonForm, self).__init__(*args, **kwargs)
self.fields['raw_name'].widget.attrs['readonly'] = True
- self.fields['title'].choices = models.TitleType.get_types()
+ self.fields['title'].choices = models.TitleType.get_types(
+ initial=self.init_data.get('title'))
class PersonUserSelect(PersonSelect):
@@ -400,6 +403,7 @@ class PersonForm(SimplePersonForm):
def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)
self.fields['person_types'].choices = models.PersonType.get_types(
+ initial=self.init_data.get('person_types'),
empty_first=False)
self.fields['person_types'].help_text = models.PersonType.get_help()
self.limit_fields()
@@ -423,7 +427,7 @@ class NoOrgaPersonForm(PersonForm):
self.fields.pop('attached_to')
-class PersonTypeForm(forms.Form):
+class PersonTypeForm(ManageOldType, forms.Form):
form_label = _("Person type")
base_model = 'person_type'
associated_models = {'person_type': models.PersonType}
@@ -434,6 +438,7 @@ class PersonTypeForm(forms.Form):
def __init__(self, *args, **kwargs):
super(PersonTypeForm, self).__init__(*args, **kwargs)
self.fields['person_type'].choices = models.PersonType.get_types(
+ initial=self.init_data.get('person_type'),
empty_first=False)
self.fields['person_type'].help_text = models.PersonType.get_help()
@@ -642,7 +647,7 @@ class MergeOrganizationForm(MergeForm):
######################
# Sources management #
######################
-class SourceForm(forms.Form):
+class SourceForm(ManageOldType, forms.Form):
form_label = _(u"Documentation informations")
associated_models = {'source_type': models.SourceType}
title = forms.CharField(label=_(u"Title"),
@@ -675,7 +680,8 @@ class SourceForm(forms.Form):
def __init__(self, *args, **kwargs):
super(SourceForm, self).__init__(*args, **kwargs)
- self.fields['source_type'].choices = models.SourceType.get_types()
+ self.fields['source_type'].choices = models.SourceType.get_types(
+ initial=self.init_data.get('source_type'))
class SourceSelect(TableSelect):
@@ -711,7 +717,7 @@ class SourceDeletionForm(FinalForm):
######################
-class AuthorForm(NewItemForm):
+class AuthorForm(ManageOldType, NewItemForm):
form_label = _(u"Author")
associated_models = {'person': models.Person,
'author_type': models.AuthorType}
@@ -724,7 +730,8 @@ class AuthorForm(NewItemForm):
def __init__(self, *args, **kwargs):
super(AuthorForm, self).__init__(*args, **kwargs)
- self.fields['author_type'].choices = models.AuthorType.get_types()
+ self.fields['author_type'].choices = models.AuthorType.get_types(
+ initial=self.init_data.get('author_type'))
self.limit_fields()
def save(self, user):
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index e2142ef0c..04077b240 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -330,7 +330,28 @@ class GeneralType(Cached, models.Model):
@classmethod
def get_types(cls, dct={}, instances=False, exclude=[], empty_first=True,
- default=None):
+ default=None, initial=None):
+ types = cls.pre_get_types(dct, instances, exclude, empty_first,
+ default)
+ if not initial:
+ return types
+ for value in initial:
+ try:
+ pk = int(value)
+ except ValueError:
+ continue
+ if pk in [idx for idx, lbl in types]:
+ continue
+ try:
+ extra_type = cls.objects.get(pk=pk)
+ types.append((extra_type.pk, unicode(extra_type)))
+ except cls.DoesNotExist:
+ continue
+ return types
+
+ @classmethod
+ def pre_get_types(cls, dct={}, instances=False, exclude=[],
+ empty_first=True, default=None):
# cache
cache_key = None
if not instances: