Example #1
0
def readonly_submission_form(request, submission_form_pk=None, submission_form=None, extra_context=None, template='submissions/readonly_form.html', checklist_overwrite=None):
    if not submission_form:
        submission_form = get_object_or_404(SubmissionForm, pk=submission_form_pk)
    form = SubmissionFormForm(initial=model_to_dict(submission_form), readonly=True)
    formsets = get_submission_formsets(instance=submission_form, readonly=True)
    documents = submission_form.documents.all().order_by('pk')
    vote = submission_form.current_vote
    submission = submission_form.submission

    retrospective_thesis_review_form = RetrospectiveThesisReviewForm(instance=submission, readonly=True)
    categorization_review_form = CategorizationReviewForm(instance=submission, readonly=True)
    befangene_review_form = BefangeneReviewForm(instance=submission, readonly=True)
    vote_review_form = VoteReviewForm(instance=vote, readonly=True)
    
    checklist_reviews = []
    for checklist in submission.checklists.select_related('blueprint'):
        if checklist_overwrite and checklist in checklist_overwrite:
            checklist_form = checklist_overwrite[checklist]
        else:
            checklist_form = make_checklist_form(checklist)(readonly=True)
        checklist_reviews.append((checklist, checklist_form))
    
    submission_forms = list(submission_form.submission.forms.order_by('-created_at'))
    previous_form = None
    for sf in submission_forms:
        sf.previous_form = previous_form
        previous_form = sf

    context = {
        'form': form,
        'tabs': SUBMISSION_FORM_TABS,
        'documents': documents,
        'readonly': True,
        'submission_form': submission_form,
        'submission_forms': submission_forms,
        'vote': vote,
        'retrospective_thesis_review_form': retrospective_thesis_review_form,
        'categorization_review_form': categorization_review_form,
        'vote_review_form': vote_review_form,
        'checklist_reviews': checklist_reviews,
        'befangene_review_form': befangene_review_form,
        'pending_notifications': submission_form.notifications.all(),
        'answered_notficiations': [], # TODO: for this the notification answers have to be implemented (FMD2)
        'pending_votes': submission_form.submission.votes.filter(published_at__isnull=True),
        'published_votes': submission_form.submission.votes.filter(published_at__isnull=False),
    }
    if extra_context:
        context.update(extra_context)
    for prefix, formset in formsets.iteritems():
        context['%s_formset' % prefix] = formset
    return render(request, template, context)
Example #2
0
def checklist_review(request, submission_form_pk=None, blueprint_pk=None):
    submission_form = get_object_or_404(SubmissionForm, pk=submission_form_pk)
    blueprint = get_object_or_404(ChecklistBlueprint, pk=blueprint_pk)
    lookup_kwargs = dict(blueprint=blueprint, submission=submission_form.submission)
    if blueprint.multiple:
        lookup_kwargs['user'] = request.user
    else:
        lookup_kwargs['defaults'] = {'user': request.user}
    checklist, created = Checklist.objects.get_or_create(**lookup_kwargs)
    if created:
        for question in blueprint.questions.order_by('text'):
            answer, created = ChecklistAnswer.objects.get_or_create(checklist=checklist, question=question)
    if request.method == 'POST':
        checklist.documents = Document.objects.filter(pk__in=request.POST.getlist('documents'))
    checklist_documents = checklist.documents.all()

    form = make_checklist_form(checklist)(request.POST or None)
    
    document_form_is_empty = True
    if blueprint.min_document_count is None:
        document_form = None
    elif 'document-file' in request.FILES:
        document_form = SimpleDocumentForm(request.POST or None, request.FILES or None, prefix='document')
        if document_form.is_valid():
            doc = document_form.save()
            checklist.documents.add(doc)
            document_form = SimpleDocumentForm(prefix='document')
        else:
            document_form_is_empty = False
    else:
        document_form = SimpleDocumentForm(prefix='document')
        
    if request.method == 'POST':
        if form.is_valid() and (not document_form or document_form_is_empty or document_form.is_valid()):
            for i, question in enumerate(blueprint.questions.order_by('text')):
                answer = ChecklistAnswer.objects.get(checklist=checklist, question=question)
                answer.answer = form.cleaned_data['q%s' % i]
                answer.comment = form.cleaned_data['c%s' % i]
                answer.save()

        checklist.save() # touch the checklist instance to trigger the post_save signal

    return readonly_submission_form(request, submission_form=submission_form, checklist_overwrite={checklist: form}, extra_context={
        'checklist_document_form': document_form,
        'checklist_documents': checklist_documents,
    })