diff --git a/edivorce/apps/core/decorators.py b/edivorce/apps/core/decorators.py index 47fb9b76..4f98f3ee 100644 --- a/edivorce/apps/core/decorators.py +++ b/edivorce/apps/core/decorators.py @@ -1,5 +1,10 @@ from django.conf import settings from django.shortcuts import redirect +from django.urls import reverse + +from edivorce.apps.core.utils.question_step_mapping import pre_qual_step_question_mapping +from edivorce.apps.core.utils.step_completeness import get_missed_question_keys, is_complete +from edivorce.apps.core.utils.user_response import get_data_for_user, get_step_responses, questions_dict_for_step base_url = settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] @@ -49,3 +54,33 @@ def intercept(function=None): return _view return _dec if function is None else _dec(function) + + +def prequal_completed(function=None): + """ + View decorator to check if the user has completed the prequalification questions + """ + def _dec(view_func): + def _view(request, *args, **kwargs): + if request.user.is_authenticated: + responses = get_data_for_user(request.user) + prequal_questions = questions_dict_for_step(responses, 'prequalification') + complete = is_complete(prequal_questions) + if complete: + return view_func(request, *args, **kwargs) + else: + missing_questions = [question_dict['question_id'] for question_dict in prequal_questions if question_dict['error']] + for step, questions in pre_qual_step_question_mapping.items(): + if missing_questions[0] in questions: + return redirect(reverse('prequalification', kwargs={'step': step})) + return redirect(reverse('prequalification', kwargs={'step': '01'})) + else: + return redirect(base_url + '/login') + + _view.__name__ = view_func.__name__ + _view.__dict__ = view_func.__dict__ + _view.__doc__ = view_func.__doc__ + + return _view + + return _dec if function is None else _dec(function) diff --git a/edivorce/apps/core/templates/prequalification/step_01.html b/edivorce/apps/core/templates/prequalification/step_01.html index 908c7e40..16158ec6 100644 --- a/edivorce/apps/core/templates/prequalification/step_01.html +++ b/edivorce/apps/core/templates/prequalification/step_01.html @@ -4,9 +4,6 @@ {% block title %}{{ block.super }}: Prequalification{% endblock %} {% block progress %} - {% if request.user.is_authenticated %} - {% include "partials/progress.html" %} - {% endif %} {% endblock %} {% block content %} diff --git a/edivorce/apps/core/templates/prequalification/step_02.html b/edivorce/apps/core/templates/prequalification/step_02.html index e140a75e..d542bb6e 100644 --- a/edivorce/apps/core/templates/prequalification/step_02.html +++ b/edivorce/apps/core/templates/prequalification/step_02.html @@ -4,9 +4,6 @@ {% block title %}{{ block.super }}: Prequalification{% endblock %} {% block progress %} - {% if request.user.is_authenticated %} - {% include "partials/progress.html" %} - {% endif %} {% endblock %} {% block content %} diff --git a/edivorce/apps/core/templates/prequalification/step_03.html b/edivorce/apps/core/templates/prequalification/step_03.html index cb3d1069..698a17d9 100644 --- a/edivorce/apps/core/templates/prequalification/step_03.html +++ b/edivorce/apps/core/templates/prequalification/step_03.html @@ -4,9 +4,6 @@ {% block title %}{{ block.super }}: Prequalification{% endblock %} {% block progress %} - {% if request.user.is_authenticated %} - {% include "partials/progress.html" %} - {% endif %} {% endblock %} {% block content %} diff --git a/edivorce/apps/core/templates/prequalification/step_04.html b/edivorce/apps/core/templates/prequalification/step_04.html index 6597450b..fc0bdae9 100644 --- a/edivorce/apps/core/templates/prequalification/step_04.html +++ b/edivorce/apps/core/templates/prequalification/step_04.html @@ -4,9 +4,6 @@ {% block title %}{{ block.super }}: Prequalification{% endblock %} {% block progress %} - {% if request.user.is_authenticated %} - {% include "partials/progress.html" %} - {% endif %} {% endblock %} {% block content %} diff --git a/edivorce/apps/core/templates/prequalification/step_05.html b/edivorce/apps/core/templates/prequalification/step_05.html index 2224c6d9..10196ca1 100644 --- a/edivorce/apps/core/templates/prequalification/step_05.html +++ b/edivorce/apps/core/templates/prequalification/step_05.html @@ -5,9 +5,6 @@ {% block title %}{{ block.super }}: Prequalification{% endblock %} {% block progress %} - {% if request.user.is_authenticated %} - {% include "partials/progress.html" %} - {% endif %} {% endblock %} {% block content %} diff --git a/edivorce/apps/core/templates/prequalification/step_06.html b/edivorce/apps/core/templates/prequalification/step_06.html index 87182cbf..d9caa386 100644 --- a/edivorce/apps/core/templates/prequalification/step_06.html +++ b/edivorce/apps/core/templates/prequalification/step_06.html @@ -4,9 +4,6 @@ {% block title %}{{ block.super }}: Prequalification{% endblock %} {% block progress %} - {% if request.user.is_authenticated %} - {% include "partials/progress.html" %} - {% endif %} {% endblock %} {% block content %} diff --git a/edivorce/apps/core/utils/user_response.py b/edivorce/apps/core/utils/user_response.py index c0ae27da..177e4bba 100644 --- a/edivorce/apps/core/utils/user_response.py +++ b/edivorce/apps/core/utils/user_response.py @@ -31,20 +31,25 @@ def get_step_responses(responses_by_key): """ responses_by_step = {} for step in page_step_mapping.values(): - questions_dict = _get_questions_dict_set_for_step(step) - step_responses = [] - for question in questions_dict: - question_details = _get_question_details(question, questions_dict, responses_by_key) - if question_details['show']: - question_dict = questions_dict[question] - question_dict['value'] = question_details['value'] - question_dict['error'] = question_details['error'] - - step_responses.append(question_dict) + step_responses = questions_dict_for_step(responses_by_key, step) responses_by_step[step] = step_responses return responses_by_step +def questions_dict_for_step(responses_by_key, step): + questions_dict = _get_questions_dict_set_for_step(step) + step_responses = [] + for question in questions_dict: + question_details = _get_question_details(question, questions_dict, responses_by_key) + if question_details['show']: + question_dict = questions_dict[question] + question_dict['value'] = question_details['value'] + question_dict['error'] = question_details['error'] + + step_responses.append(question_dict) + return step_responses + + def _get_questions_dict_set_for_step(step): questions = Question.objects.filter(key__in=question_step_mapping[step]) questions_dict = {} diff --git a/edivorce/apps/core/views/main.py b/edivorce/apps/core/views/main.py index ac2e62dd..ed0628bb 100644 --- a/edivorce/apps/core/views/main.py +++ b/edivorce/apps/core/views/main.py @@ -3,10 +3,11 @@ from copy import deepcopy from django.conf import settings from django.shortcuts import render, redirect +from django.urls import reverse from django.utils import timezone from edivorce.apps.core.utils.derived import get_derived_data -from ..decorators import bceid_required, intercept +from ..decorators import bceid_required, intercept, prequal_completed from ..utils.question_step_mapping import list_of_registries from ..utils.step_completeness import get_error_dict, get_missed_question_keys, get_step_completeness, is_complete, get_formatted_incomplete_list from ..utils.template_step_order import template_step_order @@ -59,20 +60,29 @@ def success(request): This page is shown if the user passes the qualification test """ if request.user.is_authenticated: - return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/overview') - - prequal_responses = get_responses_from_session_grouped_by_steps(request)['prequalification'] + responses = get_data_for_user(request.user) + prequal_responses = get_step_responses(responses)['prequalification'] + else: + prequal_responses = get_responses_from_session_grouped_by_steps(request)['prequalification'] complete = is_complete(prequal_responses) + if complete: - return render(request, 'success.html', context={'register_url': settings.REGISTER_URL,'register_sc_url': settings.REGISTER_SC_URL}) - return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/incomplete') + if request.user.is_authenticated: + return redirect(reverse('overview')) + else: + return render(request, 'success.html', context={'register_url': settings.REGISTER_URL,'register_sc_url': settings.REGISTER_SC_URL}) + return redirect(reverse('incomplete')) def incomplete(request): """ This page is shown if the user misses any pre-qualification questions """ - prequal_responses = get_responses_from_session_grouped_by_steps(request) + if request.user.is_authenticated: + responses = get_data_for_user(request.user) + prequal_responses = get_step_responses(responses) + else: + prequal_responses = get_responses_from_session_grouped_by_steps(request) missed_question_keys = get_missed_question_keys(prequal_responses, 'prequalification') missed_questions = get_formatted_incomplete_list(missed_question_keys) @@ -154,6 +164,7 @@ def logout(request): @bceid_required +@prequal_completed @intercept def overview(request): """ @@ -177,6 +188,7 @@ def overview(request): @bceid_required +@prequal_completed def dashboard_nav(request, nav_step): """ Dashboard: All other pages @@ -188,6 +200,7 @@ def dashboard_nav(request, nav_step): @bceid_required +@prequal_completed def question(request, step, sub_step=None): """ View for rendering main divorce questionaire questions @@ -250,12 +263,14 @@ def acknowledgements(request): """ return render(request, 'acknowledgements.html', context={'active_page': 'acknowledgements'}) + def contact(request): """ Contact Us page """ return render(request, 'contact-us.html', context={'active_page': 'contact'}) + @bceid_required def intercept_page(request): """