Browse Source

DIV-1061 Don't allow logged-in users to go past prequal pages if prequal is incomplete

pull/170/head
ariannedee 5 years ago
parent
commit
8c1c2174f0
9 changed files with 72 additions and 35 deletions
  1. +35
    -0
      edivorce/apps/core/decorators.py
  2. +0
    -3
      edivorce/apps/core/templates/prequalification/step_01.html
  3. +0
    -3
      edivorce/apps/core/templates/prequalification/step_02.html
  4. +0
    -3
      edivorce/apps/core/templates/prequalification/step_03.html
  5. +0
    -3
      edivorce/apps/core/templates/prequalification/step_04.html
  6. +0
    -3
      edivorce/apps/core/templates/prequalification/step_05.html
  7. +0
    -3
      edivorce/apps/core/templates/prequalification/step_06.html
  8. +15
    -10
      edivorce/apps/core/utils/user_response.py
  9. +22
    -7
      edivorce/apps/core/views/main.py

+ 35
- 0
edivorce/apps/core/decorators.py View File

@ -1,5 +1,10 @@
from django.conf import settings from django.conf import settings
from django.shortcuts import redirect 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] base_url = settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1]
@ -49,3 +54,33 @@ def intercept(function=None):
return _view return _view
return _dec if function is None else _dec(function) 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)

+ 0
- 3
edivorce/apps/core/templates/prequalification/step_01.html View File

@ -4,9 +4,6 @@
{% block title %}{{ block.super }}: Prequalification{% endblock %} {% block title %}{{ block.super }}: Prequalification{% endblock %}
{% block progress %} {% block progress %}
{% if request.user.is_authenticated %}
{% include "partials/progress.html" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}


+ 0
- 3
edivorce/apps/core/templates/prequalification/step_02.html View File

@ -4,9 +4,6 @@
{% block title %}{{ block.super }}: Prequalification{% endblock %} {% block title %}{{ block.super }}: Prequalification{% endblock %}
{% block progress %} {% block progress %}
{% if request.user.is_authenticated %}
{% include "partials/progress.html" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}


+ 0
- 3
edivorce/apps/core/templates/prequalification/step_03.html View File

@ -4,9 +4,6 @@
{% block title %}{{ block.super }}: Prequalification{% endblock %} {% block title %}{{ block.super }}: Prequalification{% endblock %}
{% block progress %} {% block progress %}
{% if request.user.is_authenticated %}
{% include "partials/progress.html" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}


+ 0
- 3
edivorce/apps/core/templates/prequalification/step_04.html View File

@ -4,9 +4,6 @@
{% block title %}{{ block.super }}: Prequalification{% endblock %} {% block title %}{{ block.super }}: Prequalification{% endblock %}
{% block progress %} {% block progress %}
{% if request.user.is_authenticated %}
{% include "partials/progress.html" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}


+ 0
- 3
edivorce/apps/core/templates/prequalification/step_05.html View File

@ -5,9 +5,6 @@
{% block title %}{{ block.super }}: Prequalification{% endblock %} {% block title %}{{ block.super }}: Prequalification{% endblock %}
{% block progress %} {% block progress %}
{% if request.user.is_authenticated %}
{% include "partials/progress.html" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}


+ 0
- 3
edivorce/apps/core/templates/prequalification/step_06.html View File

@ -4,9 +4,6 @@
{% block title %}{{ block.super }}: Prequalification{% endblock %} {% block title %}{{ block.super }}: Prequalification{% endblock %}
{% block progress %} {% block progress %}
{% if request.user.is_authenticated %}
{% include "partials/progress.html" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}


+ 15
- 10
edivorce/apps/core/utils/user_response.py View File

@ -31,20 +31,25 @@ def get_step_responses(responses_by_key):
""" """
responses_by_step = {} responses_by_step = {}
for step in page_step_mapping.values(): 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 responses_by_step[step] = step_responses
return responses_by_step 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): def _get_questions_dict_set_for_step(step):
questions = Question.objects.filter(key__in=question_step_mapping[step]) questions = Question.objects.filter(key__in=question_step_mapping[step])
questions_dict = {} questions_dict = {}


+ 22
- 7
edivorce/apps/core/views/main.py View File

@ -3,10 +3,11 @@ from copy import deepcopy
from django.conf import settings from django.conf import settings
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from edivorce.apps.core.utils.derived import get_derived_data 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.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.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 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 This page is shown if the user passes the qualification test
""" """
if request.user.is_authenticated: 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) complete = is_complete(prequal_responses)
if complete: 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): def incomplete(request):
""" """
This page is shown if the user misses any pre-qualification questions 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_question_keys = get_missed_question_keys(prequal_responses, 'prequalification')
missed_questions = get_formatted_incomplete_list(missed_question_keys) missed_questions = get_formatted_incomplete_list(missed_question_keys)
@ -154,6 +164,7 @@ def logout(request):
@bceid_required @bceid_required
@prequal_completed
@intercept @intercept
def overview(request): def overview(request):
""" """
@ -177,6 +188,7 @@ def overview(request):
@bceid_required @bceid_required
@prequal_completed
def dashboard_nav(request, nav_step): def dashboard_nav(request, nav_step):
""" """
Dashboard: All other pages Dashboard: All other pages
@ -188,6 +200,7 @@ def dashboard_nav(request, nav_step):
@bceid_required @bceid_required
@prequal_completed
def question(request, step, sub_step=None): def question(request, step, sub_step=None):
""" """
View for rendering main divorce questionaire questions View for rendering main divorce questionaire questions
@ -250,12 +263,14 @@ def acknowledgements(request):
""" """
return render(request, 'acknowledgements.html', context={'active_page': 'acknowledgements'}) return render(request, 'acknowledgements.html', context={'active_page': 'acknowledgements'})
def contact(request): def contact(request):
""" """
Contact Us page Contact Us page
""" """
return render(request, 'contact-us.html', context={'active_page': 'contact'}) return render(request, 'contact-us.html', context={'active_page': 'contact'})
@bceid_required @bceid_required
def intercept_page(request): def intercept_page(request):
""" """


Loading…
Cancel
Save