Skip to content
Snippets Groups Projects
views.py 3.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • from django import forms
    
    from django.template.response import TemplateResponse
    
    from django.views.generic import DetailView
    
    from .workflow import SingleStage, DoubleStage
    
    from django_filters.views import FilterView
    from django_tables2.views import SingleTableMixin
    
    from .tables import SubmissionsTable, SubmissionFilter, SubmissionFilterAndSearch
    
    
    class SubmissionListView(SingleTableMixin, FilterView):
        template_name = 'funds/submissions.html'
        table_class = SubmissionsTable
    
        filterset_class = SubmissionFilter
    
        def get_context_data(self, **kwargs):
            active_filters = self.filterset.data
            return super().get_context_data(active_filters=active_filters, **kwargs)
    
    
    class SubmissionSearchView(SingleTableMixin, FilterView):
        template_name = 'funds/submissions_search.html'
        table_class = SubmissionsTable
    
        filterset_class = SubmissionFilterAndSearch
    
        def get_context_data(self, **kwargs):
            search_term = self.request.GET.get('query')
    
            # We have more data than just 'query'
            active_filters = len(self.filterset.data) > 1
    
            return super().get_context_data(
                search_term=search_term,
                active_filters=active_filters,
                **kwargs,
            )
    
    
    class SubmissionDetailView(DetailView):
        model = ApplicationSubmission
    
    
        def get_context_data(self, **kwargs):
            return super().get_context_data(
                other_submissions=self.model.objects.filter(user=self.object.user).exclude(id=self.object.id),
                **kwargs
            )
    
    
    workflows = [SingleStage, DoubleStage]
    
    # Workflow Demo Views
    
    
    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,
    
    Todd Dembrey's avatar
    Todd Dembrey committed
        return TemplateResponse(request, 'funds/demo_workflow.html', context)