Skip to content

Commit ca34de9

Browse files
committed
www: Improve employee record wizard
Using condition_dict would make the user think there is only one step It also make a lot of calls to get_form_kwargs(), and plenty of queries...
1 parent ed08610 commit ca34de9

File tree

3 files changed

+153
-1967
lines changed

3 files changed

+153
-1967
lines changed

itou/www/employee_record_views/views.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,12 @@
5858
]
5959

6060

61-
def _show_add_choose_approval_form(wizard):
62-
cleaned_data = wizard.get_cleaned_data_for_step("choose-employee") or {}
63-
return bool(cleaned_data.get("employee"))
64-
65-
6661
class AddView(NamedUrlSessionWizardView):
6762
template_name = "employee_record/add.html"
6863
form_list = [
6964
("choose-employee", AddEmployeeRecordChooseEmployeeForm),
7065
("choose-approval", AddEmployeeRecordChooseApprovalForm),
7166
]
72-
condition_dict = {
73-
"choose-approval": _show_add_choose_approval_form,
74-
}
7567

7668
def dispatch(self, request, *args, **kwargs):
7769
self.company = get_current_company_or_404(request)
@@ -105,6 +97,22 @@ def get_prefix(self, request, *args, **kwargs):
10597
"""
10698
return f"company_{self.company.pk}_add_employee_record"
10799

100+
def check_wizard_state(self, *args, **kwargs):
101+
step_url = kwargs.get("step", None)
102+
if step_url == self.steps.last and self.steps.current == self.steps.first:
103+
# The user tried to go back the the last step after finishing the wizard.
104+
return HttpResponseRedirect(reverse("employee_record_views:add", kwargs={"step": "choose-employee"}))
105+
106+
def get(self, *args, **kwargs):
107+
if check_response := self.check_wizard_state(*args, **kwargs):
108+
return check_response
109+
return super().get(*args, **kwargs)
110+
111+
def post(self, *args, **kwargs):
112+
if check_response := self.check_wizard_state(*args, **kwargs):
113+
return check_response
114+
return super().post(*args, **kwargs)
115+
108116
def done(self, form_list, *args, **kwargs):
109117
approval = Approval.objects.get(
110118
pk=self.get_all_cleaned_data()["approval"], user=self.get_all_cleaned_data()["employee"]

0 commit comments

Comments
 (0)