Skip to content
Snippets Groups Projects
views.py 1.75 KiB
Newer Older
  • Learn to ignore specific revisions
  • from django import forms
    
    from django.template.response import TemplateResponse
    
    
    from .workflow import SingleStage, DoubleStage
    
    workflows = [SingleStage, DoubleStage]
    
    
    class BasicSubmissionForm(forms.Form):
        who_are_you = forms.CharField()
    
    
    
    def demo_workflow(request, wf_id):
    
        logs = request.session.get('logs', list())
        submission = request.session.get('submission', dict())
    
    
    Todd Dembrey's avatar
    Todd Dembrey committed
        workflow_class = workflows[wf - 1]
    
        workflow = workflow_class([BasicSubmissionForm] * wf)
    
        current_phase = request.POST.get('current')
    
        current = workflow.current(current_phase)
    
    
        if request.POST:
    
            if current.stage.name not in submission:
                submitted_form = current.stage.form(request.POST)
                if submitted_form.is_valid():
    
                    submission[current.stage.name] = submitted_form.cleaned_data
    
                    phase = current
                    logs.append(
                        f'{phase.stage}: Form was submitted'
                    )
                    form = None
                else:
                    form = submitted_form
            else:
                phase = workflow.process(current_phase, request.POST['action'])
                logs.append(
                    f'{current.stage}: {current.name} was updated to {phase.stage}: {phase.name}'
                )
    
            phase = current
    
            logs.clear()
    
            submission.clear()
    
        if phase.stage.name not in submission:
            form = phase.stage.form
        else:
            form = None
    
        request.session['logs'] = logs
        request.session['submission'] = submission
    
    
        context = {
            'workflow': workflow,
            'phase': phase,
    
            'logs': logs,
    
            'data': submission,
            'form': form,
    
        }
        return TemplateResponse(request, 'apply/demo_workflow.html', context)