diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-01 18:49:14 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-01 18:49:14 +0200 |
commit | caebc92f6e7f0a3e8445d054edd5587c58920c76 (patch) | |
tree | cfcbb351671ea74fd6b9ab43ea4b61d3e4fc661a | |
parent | f0901e79cd11ead1d5ac2543ac4affcf23a5f05f (diff) | |
download | Ishtar-caebc92f6e7f0a3e8445d054edd5587c58920c76.tar.bz2 Ishtar-caebc92f6e7f0a3e8445d054edd5587c58920c76.zip |
Non-available types display on old item modification (refs #3179)
-rw-r--r-- | archaeological_context_records/forms.py | 29 | ||||
-rw-r--r-- | archaeological_files/forms.py | 30 | ||||
-rw-r--r-- | archaeological_files_pdl/forms.py | 18 | ||||
-rw-r--r-- | archaeological_finds/forms.py | 40 | ||||
-rw-r--r-- | archaeological_operations/forms.py | 35 | ||||
-rw-r--r-- | archaeological_warehouse/forms.py | 12 | ||||
-rw-r--r-- | ishtar_common/forms.py | 31 | ||||
-rw-r--r-- | ishtar_common/forms_common.py | 27 | ||||
-rw-r--r-- | ishtar_common/models.py | 23 |
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: |