summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/wizards.py87
1 files changed, 56 insertions, 31 deletions
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 5c4e1d3f9..210ea749a 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -238,41 +238,66 @@ class Wizard(NamedUrlWizardView):
'previous_step_counter': previous_step_counter})
storage = self.storage
# if modification: show the next steps
- if self.modification:
- next_step = self.steps.first
- current_step_passed = False
- # force rechecking of conditions
- self.get_form_list()
- while next_step:
- # check if the form is initialized otherwise initialize it
- if not storage.get_step_data(next_step):
- values = self.get_form_initial(next_step)
- prefixed_values = MultiValueDict()
- if not isinstance(values, list):
- for key in values:
- form_key = next_step + '-' + key
- if isinstance(values, MultiValueDict):
- prefixed_values.setlist(form_key,
- values.getlist(key))
- else:
- prefixed_values[form_key] = values[key]
+ # if self.modification or True:
+ next_step = self.steps.first
+ current_step_passed, no_next = False, False
+ # force rechecking of conditions
+ self.get_form_list()
+ while next_step:
+ # check if the form is initialized otherwise initialize it
+ if self.modification and not storage.get_step_data(next_step):
+ values = self.get_form_initial(next_step)
+ prefixed_values = MultiValueDict()
+ if not isinstance(values, list):
+ for key in values:
+ form_key = next_step + '-' + key
+ if isinstance(values, MultiValueDict):
+ prefixed_values.setlist(form_key,
+ values.getlist(key))
+ else:
+ prefixed_values[form_key] = values[key]
+ else:
+ for formset_idx, v in enumerate(values):
+ prefix = u"-%d-" % formset_idx
+ for key in v:
+ form_key = next_step + prefix + key
+ prefixed_values[form_key] = v[key]
+ if not prefixed_values and \
+ next_step not in self.get_ignore_init_steps():
+ # simulate a non empty data for form that might be
+ # valid when empty
+ prefixed_values['__non_empty_data'] = ''
+ storage.set_step_data(next_step, prefixed_values)
+ if step == next_step:
+ current_step_passed = True
+ elif current_step_passed:
+ next_steps.append(self.form_list[next_step].form_label)
+
+ # creation
+ if not self.modification:
+ form_obj = self.get_form(step=next_step)
+ if current_step_passed:
+ initialise_data = False
+ # formsets are considered not required
+ if hasattr(form_obj, 'fields'):
+ # display next step until a required field is met
+ if [field_key for field_key in form_obj.fields
+ if form_obj.fields[field_key].required]:
+ no_next = True
+ elif next_step not in self.get_ignore_init_steps():
+ initialise_data = True
else:
- for formset_idx, v in enumerate(values):
- prefix = u"-%d-" % formset_idx
- for key in v:
- form_key = next_step + prefix + key
- prefixed_values[form_key] = v[key]
- if not prefixed_values and \
- next_step not in self.get_ignore_init_steps():
+ initialise_data = True
+ if initialise_data:
# simulate a non empty data for form that might be
# valid when empty
+ prefixed_values = MultiValueDict()
prefixed_values['__non_empty_data'] = ''
- storage.set_step_data(next_step, prefixed_values)
- if step == next_step:
- current_step_passed = True
- elif current_step_passed:
- next_steps.append(self.form_list[next_step].form_label)
- next_step = self.get_next_step(next_step)
+ storage.set_step_data(next_step, prefixed_values)
+
+ next_step = self.get_next_step(next_step)
+ if no_next:
+ break
context.update({'next_steps': next_steps})
# not last step: validation
if current_step != self.steps.last: