diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/wizards.py | 87 | 
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: | 
