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:  | 
