diff options
Diffstat (limited to 'ishtar/furnitures/forms_context_records.py')
| -rw-r--r-- | ishtar/furnitures/forms_context_records.py | 65 | 
1 files changed, 38 insertions, 27 deletions
| diff --git a/ishtar/furnitures/forms_context_records.py b/ishtar/furnitures/forms_context_records.py index 3af7d3f71..25f1db1c3 100644 --- a/ishtar/furnitures/forms_context_records.py +++ b/ishtar/furnitures/forms_context_records.py @@ -39,7 +39,7 @@ from forms_common import get_town_field  from forms_operations import OperationFormSelection  class RecordWizard(Wizard): -    model = models.Operation +    model = models.ContextRecord      edit = False      def get_form(self, request, storage, step=None, data=None, files=None): @@ -53,31 +53,25 @@ class RecordWizard(Wizard):          if not step:              step = self.determine_step(request, storage)          form = self.get_form_list(request, storage)[step] -        current_object = self.get_current_object(request, storage) -        if step.startswith('general-') and current_object: -            data[self.model._meta.object_name] = current_object + +        general_form_key = 'general-' + self.url_name +        if step.startswith('general-'): +            if step.endswith('_creation'): # an operation has been selected +                main_form_key = 'selec-' + self.url_name +                try: +                    idx = int(self.session_get_value(request, storage, +                                            main_form_key, 'pk')) +                    current_obj = models.Operation.objects.get(pk=idx) +                    data['operation'] = current_obj +                except(TypeError, ValueError, ObjectDoesNotExist): +                    pass +            else: +                current_object = self.get_current_object(request, storage) +                data['context_record'] = current_object          form = super(RecordWizard, self).get_form(request, storage, step, data,                                                    files)          return form -    def get_saved_model(self): -        return models.ContextRecord - -    def get_current_saved_object(self, request, storage): -        """ -        Permit a distinguo when saved model is not the base selected model -        """ -        if self.model == models.Operation: -            return None -        return self.get_current_object(request, storage) - -    def save_model(self, dct, m2m, whole_associated_models, request, storage, -                   form_list, return_object): -        if 'pk' in dct: -            dct.pop('pk') -        return super(RecordWizard, self).save_model(dct, m2m, -            whole_associated_models, request, storage, form_list, return_object) -  class RecordModifWizard(RecordWizard):      model = models.ContextRecord @@ -109,6 +103,8 @@ class RecordFormSelection(forms.Form):  class RecordFormGeneral(forms.Form):      form_label = _("General")      associated_models = {'parcel':models.Parcel, 'unit':models.Unit} +    pk = forms.IntegerField(required=False, widget=forms.HiddenInput) +    hidden_operation_id = forms.IntegerField(widget=forms.HiddenInput)      parcel = forms.ChoiceField(label=_("Parcel"), choices=[])      label = forms.CharField(label=_(u"ID"),                              validators=[validators.MaxLengthValidator(200)]) @@ -126,11 +122,11 @@ class RecordFormGeneral(forms.Form):      def __init__(self, *args, **kwargs):          operation = None          if 'data' in kwargs and kwargs['data'] and \ -           ('Operation' in kwargs['data'] or 'ContextRecord' in kwargs['data']): -            if 'Operation' in kwargs['data']: -                operation = kwargs['data']['Operation'] -            if 'ContextRecord' in kwargs['data']: -                operation = kwargs['data']['ContextRecord'].parcel.operation +           ('operation' in kwargs['data'] or 'context_record' in kwargs['data']): +            if 'operation' in kwargs['data']: +                operation = kwargs['data']['operation'] +            if 'context_record' in kwargs['data']: +                operation = kwargs['data']['context_record'].parcel.operation              # clean data if not "real" data              prefix_value = kwargs['prefix']              if not [k for k in kwargs['data'].keys() @@ -141,6 +137,7 @@ class RecordFormGeneral(forms.Form):          super(RecordFormGeneral, self).__init__(*args, **kwargs)          self.fields['parcel'].choices = [('', '--')]          if operation: +            self.fields['hidden_operation_id'].initial = operation.pk              parcels = operation.parcels.all()              sort = lambda x: (x.town.name, x.section)              parcels = sorted(parcels, key=sort) @@ -149,6 +146,20 @@ class RecordFormGeneral(forms.Form):   (" - ".join(key), [(parcel.pk, parcel.short_label()) for parcel in gparcels])                  ) +    def clean(self): +        # manage unique context record ID +        cleaned_data = self.cleaned_data +        operation_id = cleaned_data.get("hidden_operation_id") +        label = cleaned_data.get("label") +        cr = models.ContextRecord.objects.filter(label=label, +                                             parcel__operation__pk=operation_id) +        if 'pk' in cleaned_data and cleaned_data['pk']: +            cr = cr.exclude(pk=cleaned_data['pk']) +        if cr.count(): +            raise forms.ValidationError(_(u"This ID already exist for " +                                          u"this operation.")) +        return cleaned_data +  class DatingForm(forms.Form):      form_label = _("Dating")      base_model = 'dating' | 
