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.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)

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

@ -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 %}


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

@ -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 %}


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

@ -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 %}


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

@ -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 %}


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

@ -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 %}


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

@ -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 %}


+ 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 = {}
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 = {}


+ 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.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):
"""


Loading…
Cancel
Save