summaryrefslogtreecommitdiff
path: root/ishtar/ishtar_base/forms_operations.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-07-11 01:49:36 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-07-11 01:49:36 +0200
commit07e343d4d40667b52977c30a17c17968cb5472ac (patch)
treeb4f526a51c8d19dc780397671b495b0e995acf29 /ishtar/ishtar_base/forms_operations.py
parent04d25ac81d983ada8fe0ba2e41905438c9c8b070 (diff)
downloadIshtar-07e343d4d40667b52977c30a17c17968cb5472ac.tar.bz2
Ishtar-07e343d4d40667b52977c30a17c17968cb5472ac.zip
Some new fields for Sources (closes #253)
Diffstat (limited to 'ishtar/ishtar_base/forms_operations.py')
-rw-r--r--ishtar/ishtar_base/forms_operations.py62
1 files changed, 60 insertions, 2 deletions
diff --git a/ishtar/ishtar_base/forms_operations.py b/ishtar/ishtar_base/forms_operations.py
index 5ed882530..e2b0aadb1 100644
--- a/ishtar/ishtar_base/forms_operations.py
+++ b/ishtar/ishtar_base/forms_operations.py
@@ -517,6 +517,64 @@ operation_deletion_wizard = OperationDeletionWizard([
class OperationSourceWizard(SourceWizard):
model = models.OperationSource
+ def get_form_initial(self, request, storage, step):
+ initial = super(OperationSourceWizard, self).get_form_initial(request,
+ storage, step)
+ # put default index and operation_id field in the main source form
+ general_form_key = 'selec-' + self.url_name
+ print "hop"
+ if step.startswith('source-') \
+ and self.session_has_key(request, storage, general_form_key):
+ gen_storage = request.session[storage.prefix]['step_data']\
+ [general_form_key]
+ if general_form_key+"-operation" in gen_storage:
+ operation_id = int(gen_storage[general_form_key+"-operation"])
+ elif general_form_key+"-pk" in gen_storage:
+ pk = int(gen_storage[general_form_key+"-pk"])
+ print pk
+ try:
+ source = models.OperationSource.objects.get(pk=pk)
+ operation_id = source.operation.pk
+ except ObjectDoesNotExist:
+ pass
+ if operation_id:
+ initial['hidden_operation_id'] = operation_id
+ if 'index' not in initial:
+ max_val = models.OperationSource.objects.filter(
+ operation__pk=operation_id).aggregate(
+ Max('index'))["index__max"]
+ initial['index'] = max_val and (max_val + 1) or 1
+ return initial
+
+class OperationSourceForm(SourceForm):
+ pk = forms.IntegerField(required=False, widget=forms.HiddenInput)
+ index = forms.IntegerField(label=_(u"Index"))
+ hidden_operation_id = forms.IntegerField(label="", widget=forms.HiddenInput)
+
+ def __init__(self, *args, **kwargs):
+ super(OperationSourceForm, self).__init__(*args, **kwargs)
+ keyOrder = self.fields.keyOrder
+ keyOrder.pop(keyOrder.index('index'))
+ keyOrder.insert(keyOrder.index('source_type') + 1, 'index')
+
+ def clean(self):
+ # manage unique operation ID
+ cleaned_data = self.cleaned_data
+ operation_id = cleaned_data.get("hidden_operation_id")
+ index = cleaned_data.get("index")
+ srcs = models.OperationSource.objects.filter(index=index,
+ operation__pk=operation_id)
+ if 'pk' in cleaned_data and cleaned_data['pk']:
+ srcs = srcs.exclude(pk=cleaned_data['pk'])
+ if srcs.count():
+ max_val = models.OperationSource.objects.filter(
+ operation__pk=operation_id
+ ).aggregate(Max('index'))["index__max"]
+ operation = models.Operation.objects.get(pk=operation_id)
+ raise forms.ValidationError(_(u"Index already exist for "
+"operation: %(operation)s - use a value bigger than %(last_val)d") % {
+ "operation":unicode(operation), 'last_val':max_val})
+ return cleaned_data
SourceOperationFormSelection = get_form_selection(
'SourceOperationFormSelection', _(u"Operation search"), 'operation',
@@ -525,7 +583,7 @@ SourceOperationFormSelection = get_form_selection(
operation_source_creation_wizard = OperationSourceWizard([
('selec-operation_source_creation', SourceOperationFormSelection),
- ('source-operation_source_creation', SourceForm),
+ ('source-operation_source_creation',OperationSourceForm),
('authors-operation_source_creation', AuthorFormset),
('final-operation_source_creation', FinalForm)],
url_name='operation_source_creation',)
@@ -551,7 +609,7 @@ OperationSourceFormSelection = get_form_selection(
operation_source_modification_wizard = OperationSourceWizard([
('selec-operation_source_modification', OperationSourceFormSelection),
- ('source-operation_source_modification', SourceForm),
+ ('source-operation_source_modification', OperationSourceForm),
('authors-operation_source_modification', AuthorFormset),
('final-operation_source_modification', FinalForm)],
url_name='operation_source_modification',)