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)
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, })