summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-06-13 19:31:05 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-06-13 19:31:05 +0200
commit675d84e3b94bd943d45b638e53e6bfb1de49ff0d (patch)
tree0abba4406b088521a65bddf5256fb4dfc025fa33
parent98903300a0e745265b61e5fa7c1fef77b750c351 (diff)
downloadIshtar-675d84e3b94bd943d45b638e53e6bfb1de49ff0d.tar.bz2
Ishtar-675d84e3b94bd943d45b638e53e6bfb1de49ff0d.zip
Manage unique reference for context record (closes #260)
-rw-r--r--ishtar/furnitures/forms_context_records.py65
-rw-r--r--ishtar/furnitures/forms_operations.py1
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")