You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

206 lines
6.9 KiB

from django.conf import settings
from django.shortcuts import render, redirect, render_to_response
from django.utils import timezone
from django.template import RequestContext
from edivorce.apps.core.utils.template_step_order import template_step_order
from ..decorators import bceid_required
import datetime
from ..models import BceidUser
from ..utils.user_response import get_responses_from_db, get_responses_from_db_grouped_by_steps, \
get_responses_from_session, copy_session_to_db, get_step_status, is_complete, \
get_responses_from_session_grouped_by_steps
from edivorce.apps.core.utils.question_step_mapping import list_of_registries
def home(request):
"""
This is the homepage
"""
# if the user is returning from BCeID registration, then log them in to the site
if request.bceid_user.is_authenticated and request.session.get('went-to-register', False) == True:
request.session['went-to-register'] = False
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/login')
return render(request, 'intro.html', context={'hide_nav': True})
def prequalification(request, step):
"""
View for rendering pre-qualification questions.
If user is not authenticated with BCeID, temporarily store user responses to session
"""
template = 'prequalification/step_%s.html' % step
if not request.bceid_user.is_authenticated:
responses_dict = get_responses_from_session(request)
else:
user = __get_bceid_user(request)
responses_dict = get_responses_from_db(user)
responses_dict['active_page'] = 'prequalification'
responses_dict['step_status'] = get_step_status(get_responses_from_db_grouped_by_steps(user))
return render(request, template_name=template, context=responses_dict)
def success(request):
"""
This page is shown if the user passes the qualification test
"""
if request.bceid_user.is_authenticated:
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/overview')
else:
prequal_responses = get_responses_from_session_grouped_by_steps(request)['prequalification']
complete, missed_questions = is_complete('prequalification', prequal_responses)
if complete:
return render(request, 'success.html', context={'register_url': settings.REGISTER_URL})
else:
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/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)['prequalification']
complete, missed_questions = is_complete('prequalification', prequal_responses)
return render(request, 'incomplete.html',
context={'missed_questions': missed_questions, 'debug': settings.DEBUG })
def register(request):
"""
Sets a session variable and redirects users to register for BCeID
"""
if settings.DEPLOYMENT_TYPE == 'localdev':
return render(request, 'localdev/register.html')
else:
request.session['went-to-register'] = True
return redirect(settings.REGISTER_URL)
def login(request):
"""
This page is proxy-protected by Siteminder. Users who are not
logged into BCeID will get a login page. Users who are logged into
BCeID will be redirected to the dashboard
"""
if settings.DEPLOYMENT_TYPE == 'localdev' and not request.session.get('fake-bceid-guid'):
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/bceid')
else:
guid = request.bceid_user.guid
if guid is None:
return render(request, 'localdev/debug.html')
user = __get_bceid_user(request)
if timezone.now() - user.last_login > datetime.timedelta(minutes=1):
user.last_login = timezone.now()
user.save()
copy_session_to_db(request, user)
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/overview')
def logout(request):
"""
Clear session and log out of BCeID
"""
request.session.flush()
if settings.DEPLOYMENT_TYPE == 'localdev':
return redirect('/')
else:
return redirect(settings.LOGOUT_URL)
@bceid_required
def overview(request):
"""
Dashboard: Process overview page.
"""
user = __get_bceid_user(request)
responses_dict_by_step = get_responses_from_db_grouped_by_steps(user)
# Add step status dictionary
responses_dict_by_step['step_status'] = get_step_status(responses_dict_by_step)
responses_dict_by_step['active_page'] = 'overview'
return render(request, 'overview.html', context=responses_dict_by_step)
@bceid_required
def dashboard_nav(request, nav_step):
"""
Dashboard: All other pages
"""
template_name = 'dashboard/%s.html' % nav_step
return render(request, template_name=template_name, context={'active_page': nav_step})
@bceid_required
def question(request, step):
"""
View for rendering main divorce questionaire questions
"""
template = 'question/%02d_%s.html' % (template_step_order[step], step)
user = __get_bceid_user(request)
responses_dict_by_step = get_responses_from_db_grouped_by_steps(user)
if step == "review":
responses_dict = responses_dict_by_step
else:
responses_dict = get_responses_from_db(user)
# Add step status dictionary
responses_dict['step_status'] = get_step_status(responses_dict_by_step)
responses_dict['active_page'] = step
# If page is filing location page, add registries dictionary for list of court registries
if step == "location":
responses_dict['registries'] = sorted(list_of_registries)
return render(request, template_name=template, context=responses_dict)
def page_not_found(request):
"""
404 Error Page
"""
response = render_to_response('404.html', {},
context_instance=RequestContext(request))
response.status_code = 404
return response
def server_error(request):
"""
500 Error Page
"""
response = render_to_response('500.html', {},
context_instance=RequestContext(request))
response.status_code = 500
return response
def legal(request):
"""
Legal Information page
"""
return render(request, 'legal.html', context={'active_page': 'legal'})
def __get_bceid_user(request):
user, created = BceidUser.objects.get_or_create(user_guid=request.bceid_user.guid)
# update the last_login timestamp if it was more than 2 hours ago
# this ensures that it gets updated for users who bypass the /login url with a direct link
if user.last_login is None or timezone.now() - user.last_login > datetime.timedelta(hours=2):
user.last_login = timezone.now()
user.save()
return user