diff options
-rw-r--r-- | ishtar/furnitures/forms_context_records.py | 65 | ||||
-rw-r--r-- | ishtar/furnitures/forms_operations.py | 1 |
2 files changed, 39 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' diff --git a/ishtar/furnitures/forms_operations.py b/ishtar/furnitures/forms_operations.py index 3c2dbd734..75df6dd50 100644 --- a/ishtar/furnitures/forms_operations.py +++ b/ishtar/furnitures/forms_operations.py @@ -265,6 +265,7 @@ class OperationFormReference(forms.Form): validators=[validators.MaxLengthValidator(10)]) def clean(self): + # manage unique operation ID cleaned_data = self.cleaned_data year = cleaned_data.get("hidden_year") operation_code = cleaned_data.get("operation_code") |