diff options
Diffstat (limited to 'dashboard/src/workflow/views.py')
-rw-r--r-- | dashboard/src/workflow/views.py | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/dashboard/src/workflow/views.py b/dashboard/src/workflow/views.py index e5ef5c6..7ed9031 100644 --- a/dashboard/src/workflow/views.py +++ b/dashboard/src/workflow/views.py @@ -8,12 +8,14 @@ ############################################################################## -from django.http import HttpResponse, HttpResponseGone +from django.http import HttpResponseGone, JsonResponse from django.shortcuts import render +from django.urls import reverse import uuid from workflow.workflow_manager import ManagerTracker, SessionManager +from booking.models import Booking import logging logger = logging.getLogger(__name__) @@ -29,12 +31,33 @@ def attempt_auth(request): return None +def get_redirect_response(result): + if not result: + return {} + + # need to get type of result, and switch on the type + # since has_result, result must be populated with a valid object + if isinstance(result, Booking): + return { + 'redir_url': reverse('booking:booking_detail', kwargs={'booking_id': result.id}) + } + else: + return {} + + def delete_session(request): - try: + manager = attempt_auth(request) + + if not manager: + return HttpResponseGone("No session found that relates to current request") + + not_last_workflow, result = manager.pop_workflow() + + if not_last_workflow: # this was not the last workflow, so don't redirect away + return JsonResponse({}) + else: del ManagerTracker.managers[request.session['manager_session']] - return HttpResponse('') - except Exception: - return None + return JsonResponse(get_redirect_response(result)) def step_view(request): @@ -43,7 +66,12 @@ def step_view(request): # no manager found, redirect to "lost" page return no_workflow(request) if request.GET.get('step') is not None: - manager.goto(int(request.GET.get('step'))) + if request.GET.get('step') == 'next': + manager.go_next() + elif request.GET.get('step') == 'prev': + manager.go_prev() + else: + raise Exception("requested action for new step had malformed contents: " + request.GET.get('step')) return manager.render(request) @@ -70,7 +98,8 @@ def manager_view(request): logger.debug("edit found") manager.add_workflow(workflow_type=request.POST.get('edit'), edit_object=int(request.POST.get('edit_id'))) elif request.POST.get('cancel') is not None: - del ManagerTracker.managers[request.session['manager_session']] + if not manager.pop_workflow(): + del ManagerTracker.managers[request.session['manager_session']] return manager.status(request) |