Пример #1
0
def dissertations_detail(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)

    if teacher_can_see_dissertation(adv, dissert):
        count_dissertation_role = dissertation_role.count_by_dissertation(dissert)
        offer_prop = offer_proposition.get_by_dissertation(dissert)
        if offer_prop is None:
            return redirect('dissertations_list')

        promotors_count = dissertation_role.count_by_status_dissertation('PROMOTEUR', dissert)

        files = dissertation_document_file.find_by_dissertation(dissert)
        filename = ""
        for file in files:
            filename = file.document_file.file_name

        dissertation_roles = dissertation_role.search_by_dissertation(dissert)
        return layout.render(request, 'dissertations_detail.html',
                             {'dissertation': dissert,
                              'adviser': adv,
                              'dissertation_roles': dissertation_roles,
                              'count_dissertation_role': count_dissertation_role,
                              'offer_prop': offer_prop,
                              'promotors_count': promotors_count,
                              'teacher_is_promotor': teacher_is_promotor(adv, dissert),
                              'filename': filename})
    else:
        return redirect('dissertations_list')
Пример #2
0
def manager_dissertations_jury_new_ajax(request):
    pk_dissert = request.POST.get("pk_dissertation", '')
    status_choice = request.POST.get("status_choice", '')
    id_adviser_of_dissert_role = request.POST.get("adviser_pk", '')
    if not id_adviser_of_dissert_role or not status_choice or not pk_dissert:
        return HttpResponse(status=ERROR_405_BAD_REQUEST)
    else:
        dissert = dissertation.find_by_id(pk_dissert)
        adviser_of_dissert_role = adviser.get_by_id(
            int(id_adviser_of_dissert_role))
        count_dissertation_role = dissertation_role.count_by_dissertation(
            dissert)
        person = mdl.person.find_by_user(request.user)
        adv_manager = adviser.search_by_person(person)
        if adviser_can_manage(dissert, adv_manager) and count_dissertation_role < 4 and dissert.status != 'DRAFT' \
                and adviser_of_dissert_role is not None and dissert is not None:
            justification = "%s %s %s" % ("manager_add_jury", status_choice,
                                          adviser_of_dissert_role)
            dissertation_update.add(request,
                                    dissert,
                                    dissert.status,
                                    justification=justification)
            dissertation_role.add(status_choice, adviser_of_dissert_role,
                                  dissert)
            return HttpResponse(status=HTTP_OK)
        else:
            return HttpResponse(status=ERROR_403_NOT_FORBIDDEN)
Пример #3
0
def manager_dissertations_jury_new_ajax(request):
    pk_dissert = request.POST.get("pk_dissertation", '')
    status_choice = request.POST.get("status_choice", '')
    id_adviser_of_dissert_role = request.POST.get("adviser_pk", '')
    if not id_adviser_of_dissert_role or not status_choice or not pk_dissert:
        return HttpResponse(status=status.HTTP_405_METHOD_NOT_ALLOWED)
    else:
        dissert = dissertation.find_by_id(pk_dissert)
        adviser_of_dissert_role = adviser.get_by_id(
            int(id_adviser_of_dissert_role))
        count_dissertation_role = dissertation_role.count_by_dissertation(
            dissert)
        person = mdl.person.find_by_user(request.user)
        adv_manager = adviser.search_by_person(person)
        if adviser_can_manage(dissert, adv_manager) \
                and count_dissertation_role < MAX_DISSERTATION_ROLE_FOR_ONE_DISSERTATION and dissert.status != 'DRAFT' \
                and adviser_of_dissert_role is not None and dissert is not None:
            justification = "%s %s %s" % (_("Manager add jury"), status_choice,
                                          adviser_of_dissert_role)
            dissertation_update.add(request,
                                    dissert,
                                    dissert.status,
                                    justification=justification)
            dissertation_role.add(status_choice, adviser_of_dissert_role,
                                  dissert)
            return HttpResponse(status=status.HTTP_200_OK)
        else:
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)
Пример #4
0
def manager_dissertations_edit(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if adviser_can_manage(dissert,adv):
        offers = faculty_adviser.search_by_adviser(adv)
        if request.method == "POST":
            form = ManagerDissertationEditForm(request.POST, instance=dissert)
            if form.is_valid():
                dissert = form.save()
                justification = "manager_edit_dissertation"
                dissertation_update.add(request, dissert, dissert.status, justification=justification)
                return redirect('manager_dissertations_detail', pk=dissert.pk)
            else:
                form.fields["proposition_dissertation"].queryset = proposition_dissertation.search_by_offers(offers)
                form.fields["author"].queryset = mdl.student.find_by_offer(offers)
                form.fields["offer_year_start"].queryset = mdl.offer_year.find_by_offer(offers)
        else:
            form = ManagerDissertationEditForm(instance=dissert)
            form.fields["proposition_dissertation"].queryset = proposition_dissertation.search_by_offers(offers)
            form.fields["author"].queryset = mdl.student.find_by_offer(offers)
            form.fields["offer_year_start"].queryset = mdl.offer_year.find_by_offer(offers)

        return layout.render(request, 'manager_dissertations_edit.html',
                             {'form': form,
                              'dissert': dissert,
                              'defend_periode_choices': dissertation.DEFEND_PERIODE_CHOICES})
    else:
        return redirect('manager_dissertations_list')
Пример #5
0
def manager_dissertations_to_dir_submit(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    old_status = dissert.status
    new_status_display_str = new_status_display(dissert, "go_forward")
    if request.method == "POST":
        form = ManagerDissertationUpdateForm(request.POST)
        if form.is_valid():
            dissert.go_forward()
            data = form.cleaned_data
            justification = data['justification']
            dissertation_update.add(request,
                                    dissert,
                                    old_status,
                                    justification=justification)
            return redirect('manager_dissertations_detail', pk=pk)
    else:
        form = ManagerDissertationUpdateForm()
    return render(
        request, 'manager_dissertations_add_justification.html', {
            'form': form,
            'dissert': dissert,
            'new_status_display': new_status_display_str
        })
Пример #6
0
def dissertations_jury_new(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    offer_prop = offer_proposition.get_by_dissertation(dissert)
    if offer_prop is not None and teacher_is_promotor(adv, dissert):
        count_dissertation_role = dissertation_role.count_by_dissertation(dissert)
        if count_dissertation_role < 4 and offer_prop.adviser_can_suggest_reader:
            if request.method == "POST":
                form = ManagerDissertationRoleForm(request.POST)
                if form.is_valid():
                    data = form.cleaned_data
                    status = data['status']
                    adv = data['adviser']
                    diss = data['dissertation']
                    justification = "%s %s %s" % ("teacher_add_jury", str(status), str(adv))
                    dissertation_update.add(request, dissert, dissert.status, justification=justification)
                    dissertation_role.add(status, adv, diss)
                    return redirect('dissertations_detail', pk=dissert.pk)
                else:
                    form = ManagerDissertationRoleForm(initial={'dissertation': dissert})
            else:
                form = ManagerDissertationRoleForm(initial={'dissertation': dissert})
            return layout.render(request, 'dissertations_jury_edit.html', {'form': form, 'dissert': dissert})

    return redirect('dissertations_detail', pk=dissert.pk)
Пример #7
0
def manager_dissertations_jury_new(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    count_dissertation_role = dissertation_role.count_by_dissertation(dissert)
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if adviser_can_manage(dissert,adv):
        if count_dissertation_role < 4 and dissert.status != 'DRAFT':
            if request.method == "POST":
                form = ManagerDissertationRoleForm(request.POST)
                if form.is_valid():
                    data = form.cleaned_data
                    status = data['status']
                    adv = data['adviser']
                    diss = data['dissertation']
                    justification = "%s %s %s" % ("manager_add_jury", str(status), str(adv))
                    dissertation_update.add(request, dissert, dissert.status, justification=justification)
                    dissertation_role.add(status, adv, diss)
                    return redirect('manager_dissertations_detail', pk=dissert.pk)
                else:
                    form = ManagerDissertationRoleForm(initial={'dissertation': dissert})
            else:
                form = ManagerDissertationRoleForm(initial={'dissertation': dissert})
            return layout.render(request, 'manager_dissertations_jury_edit.html', {'form': form, 'dissert': dissert})
        else:
            return redirect('manager_dissertations_detail', pk=dissert.pk)

    else:
        return redirect('manager_dissertations_list')
def manager_dissertations_to_dir_ok(request, pk):
    dissert = dissertation.find_by_id(pk)
    redirect_if_none(dissert, 'manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if (adviser_can_manage(dissert, adv)):
        old_status = dissert.status
        new_status = dissertation.get_next_status(dissert, "accept")
        status_dict = dict(dissertation.STATUS_CHOICES)
        new_status_display = status_dict[new_status]

        if request.method == "POST":
            form = ManagerDissertationUpdateForm(request.POST)
            if form.is_valid():
                dissert.manager_accept()
                data = form.cleaned_data
                justification = data['justification']
                dissertation_update.add(request, dissert, old_status, justification=justification)
                return redirect('manager_dissertations_detail', pk=pk)

        else:
            form = ManagerDissertationUpdateForm()

        return layout.render(request, 'manager_dissertations_add_justification.html',
                             {'form': form, 'dissert': dissert, 'new_status_display': new_status_display})
    else:
        return redirect('manager_dissertations_list')
Пример #9
0
def dissertations_to_dir_ko(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)

    if teacher_is_promotor(adv, dissert):
        old_status = dissert.status
        new_status = dissertation.get_next_status(dissert, "refuse")
        status_dict = dict(dissertation.STATUS_CHOICES)
        new_status_display = status_dict[new_status]

        if request.method == "POST":
            form = ManagerDissertationUpdateForm(request.POST)
            if form.is_valid():
                dissert.refuse()
                data = form.cleaned_data
                justification = data['justification']
                dissertation_update.add(request, dissert, old_status, justification=justification)
                return redirect('dissertations_detail', pk=pk)

        else:
            form = ManagerDissertationUpdateForm()

        return layout.render(request, 'dissertations_add_justification.html',
                             {'form': form, 'dissert': dissert, 'new_status_display': new_status_display})

    else:
        return redirect('dissertations_detail', pk=pk)
Пример #10
0
def manager_dissertations_to_dir_submit_list(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    old_status = dissert.status
    dissert.go_forward()
    dissertation_update.add(request, dissert, old_status)
    return redirect('manager_dissertations_wait_recep_list')
Пример #11
0
def manager_dissertations_accept_eval_list(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    old_status = dissert.status
    dissert.manager_accept()
    dissertation_update.add(request, dissert, old_status)
    return redirect('manager_dissertations_wait_eval_list')
Пример #12
0
def manager_dissertations_delete(request, pk):
    dissert = dissertation.find_by_id(pk)
    dissert.deactivate()
    dissertation_update.add(request,
                            dissert,
                            dissert.status,
                            justification=_("Delete dissertation"))
    return redirect('manager_dissertations_list')
def manager_dissertations_detail_updates(request, pk):
    dissert = dissertation.find_by_id(pk)
    redirect_if_none(dissert, 'manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    dissertation_updates = dissertation_update.search_by_dissertation(dissert)

    return layout.render(request, 'manager_dissertations_detail_updates.html',
                         {'dissertation': dissert,
                          'adviser': adv,
                          'dissertation_updates': dissertation_updates})
def dissertations_delete(request, pk):
    dissert = dissertation.find_by_id(pk)
    redirect_if_none(dissert, 'dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if teacher_is_promotor(adv, dissert):
        dissert.deactivate()
        dissertation_update.add(request, dissert, dissert.status, justification="teacher_set_active_false ")
        return redirect('dissertations_list')
    else:
        return redirect('dissertations_detail', pk=pk)
def manager_dissertations_delete(request, pk):
    dissert = dissertation.find_by_id(pk)
    redirect_if_none(dissert,'manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if (adviser_can_manage(dissert, adv)):
        dissert.deactivate()
        dissertation_update.add(request, dissert, dissert.status, justification="manager_set_active_false")

        return redirect('manager_dissertations_list')
    else:
        return redirect('manager_dissertations_list')
def dissertations_detail_updates(request, pk):
    dissert = dissertation.find_by_id(pk)
    redirect_if_none(dissert, 'dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if teacher_is_promotor(adv, dissert):
        dissertation_updates = dissertation_update.search_by_dissertation(dissert)
        return layout.render(request, 'dissertations_detail_updates.html',
                             {'dissertation': dissert,
                              'adviser': adv,
                              'dissertation_updates': dissertation_updates})
    else:
        return redirect('dissertations_list')
def manager_dissertations_accept_eval_list(request, pk):
    dissert = dissertation.find_by_id(pk)
    redirect_if_none(dissert, 'manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if (adviser_can_manage(dissert, adv)):
        old_status = dissert.status
        dissert.manager_accept()
        dissertation_update.add(request, dissert, old_status)

        return redirect('manager_dissertations_wait_eval_list')
    else:
        return redirect('manager_dissertations_wait_eval_list')
Пример #18
0
def manager_dissertations_to_dir_submit_list(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if (adviser_can_manage(dissert, adv)):
        old_status = dissert.status
        dissert.go_forward()
        dissertation_update.add(request, dissert, old_status)

        return redirect('manager_dissertations_wait_recep_list')

    else:
        return redirect('manager_dissertations_list')
Пример #19
0
def manager_dissertation_role_list_json(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    dissert_roles = dissertation_role.search_by_dissertation(dissert)
    dissert_commission_sous_list = [
        {
            'pk': dissert_role.pk,
            'first_name': str(dissert_role.adviser.person.first_name),
            'middle_name': str(dissert_role.adviser.person.middle_name),
            'last_name': str(dissert_role.adviser.person.last_name),
            'status': str(dissert_role.status),
            'dissert_pk': dissert_role.dissertation.pk
        }for dissert_role in dissert_roles
    ]
    json_list = json.dumps(dissert_commission_sous_list)
    return HttpResponse(json_list, content_type='application/json')
Пример #20
0
def manager_dissertations_to_dir_ok(request, pk):
    dissert = dissertation.find_by_id(pk)
    old_status = dissert.status
    new_status_display_result = new_status_display(dissert, "accept")
    if request.method == "POST":
        form = ManagerDissertationUpdateForm(request.POST)
        if form.is_valid():
            dissert.manager_accept()
            data = form.cleaned_data
            justification = data['justification']
            dissertation_update.add(request,
                                    dissert,
                                    old_status,
                                    justification=justification)
            return redirect('manager_dissertations_detail', pk=pk)
    else:
        form = ManagerDissertationUpdateForm()

    return render(
        request, 'manager_dissertations_add_justification.html', {
            'form': form,
            'dissert': dissert,
            'new_status_display': new_status_display_result
        })
Пример #21
0
def manager_dissertations_detail(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    if adviser_can_manage(dissert,adv):
        count_dissertation_role = dissertation_role.count_by_dissertation(dissert)
        count_proposition_role = proposition_role.count_by_dissertation(dissert)
        proposition_roles = proposition_role.search_by_dissertation(dissert)
        offer_prop = offer_proposition.get_by_dissertation(dissert)

        if offer_prop is None:
            return redirect('manager_dissertations_list')

        files = dissertation_document_file.find_by_dissertation(dissert)
        filename = ""
        for file in files:
            filename = file.document_file.file_name

        if count_proposition_role == 0:
            if count_dissertation_role == 0:
                justification = "%s %s %s" % ("auto_add_jury", 'PROMOTEUR', str(dissert.proposition_dissertation.author))
                dissertation_update.add(request, dissert, dissert.status, justification=justification)
                dissertation_role.add('PROMOTEUR', dissert.proposition_dissertation.author, dissert)
        else:
            if count_dissertation_role == 0:
                for role in proposition_roles:
                    justification = "%s %s %s" % ("auto_add_jury", role.status, str(role.adviser))
                    dissertation_update.add(request, dissert, dissert.status, justification=justification)
                    dissertation_role.add(role.status, role.adviser, dissert)

        if dissert.status == "DRAFT":
            jury_manager_visibility = True
            jury_manager_can_edit = False
            jury_manager_message = 'manager_jury_draft'
            jury_teacher_visibility = False
            jury_teacher_can_edit = False
            jury_teacher_message = 'teacher_jury_draft'
            jury_student_visibility = True
            jury_student_can_edit = offer_prop.student_can_manage_readers
            if jury_student_can_edit:
                jury_student_message = 'student_jury_draft_can_edit_param'
            else:
                jury_student_message = 'student_jury_draft_no_edit_param'
        else:
            jury_manager_visibility = True
            jury_manager_can_edit = True
            jury_manager_message = 'manager_jury_editable'
            jury_teacher_visibility = True
            jury_teacher_can_edit = offer_prop.adviser_can_suggest_reader
            if jury_teacher_can_edit:
                jury_teacher_message = 'teacher_jury_visible_editable_parameter'
            else:
                jury_teacher_message = 'teacher_jury_visible_not_editable_parameter'
            jury_student_visibility = offer_prop.in_periode_jury_visibility
            jury_student_can_edit = False
            if jury_student_visibility:
                jury_student_message = 'student_jury_visible_dates'
            else:
                jury_student_message = 'student_jury_invisible_dates'
        dissertation_roles = dissertation_role.search_by_dissertation(dissert)

        promotors_count = dissertation_role.count_by_status_dissertation('PROMOTEUR', dissert)

        return layout.render(request, 'manager_dissertations_detail.html',
                             {'dissertation': dissert,
                              'adviser': adv,
                              'dissertation_roles': dissertation_roles,
                              'count_dissertation_role': count_dissertation_role,
                              'jury_manager_visibility': jury_manager_visibility,
                              'jury_manager_can_edit': jury_manager_can_edit,
                              'jury_manager_message': jury_manager_message,
                              'jury_teacher_visibility': jury_teacher_visibility,
                              'jury_teacher_can_edit': jury_teacher_can_edit,
                              'jury_teacher_message': jury_teacher_message,
                              'jury_student_visibility': jury_student_visibility,
                              'jury_student_can_edit': jury_student_can_edit,
                              'jury_student_message': jury_student_message,
                              'promotors_count': promotors_count,
                              'filename': filename})
    else:
        return redirect('manager_dissertations_list')
Пример #22
0
def manager_dissertations_detail(request, pk):
    dissert = dissertation.find_by_id(pk)
    if dissert is None:
        return redirect('manager_dissertations_list')
    person = mdl.person.find_by_user(request.user)
    adv = adviser.search_by_person(person)
    count_dissertation_role = dissertation_role.count_by_dissertation(dissert)
    count_proposition_role = proposition_role.count_by_dissertation(dissert)
    proposition_roles = proposition_role.search_by_dissertation(dissert)
    offer_prop = offer_proposition.get_by_dissertation(dissert)

    if offer_prop is None:
        return redirect('manager_dissertations_list')
    files = dissertation_document_file.find_by_dissertation(dissert)
    filename = files.last().document_file.file_name if files else ""

    if count_proposition_role == 0 and count_dissertation_role == 0:
        justification = "%s %s %s" % (
            _("Auto add jury"), dissertation_role_status.PROMOTEUR,
            str(dissert.proposition_dissertation.author))
        dissertation_update.add(request,
                                dissert,
                                dissert.status,
                                justification=justification)
        dissertation_role.add(dissertation_role_status.PROMOTEUR,
                              dissert.proposition_dissertation.author, dissert)
    elif count_dissertation_role == 0:
        for role in proposition_roles:
            justification = "%s %s %s" % (_("Auto add jury"), role.status,
                                          str(role.adviser))
            dissertation_update.add(request,
                                    dissert,
                                    dissert.status,
                                    justification=justification)
            dissertation_role.add(role.status, role.adviser, dissert)

    if dissert.status == dissertation_status.DRAFT:
        jury_manager_visibility = True
        jury_manager_can_edit = False
        jury_manager_message = _(
            "Dissertation status is draft, managers can't edit jury.")
        jury_teacher_visibility = False
        jury_teacher_can_edit = False
        jury_teacher_message = _(
            "Dissertation status is draft, teachers can't edit jury.")
        jury_student_visibility = True
        jury_student_can_edit = offer_prop.student_can_manage_readers
        if jury_student_can_edit:
            jury_student_message = _(
                'Dissertation status is draft, student can manage readers')
        else:
            jury_student_message = _(
                "Dissertation status is draft, student can't manage readers")
    else:
        jury_manager_visibility = True
        jury_manager_can_edit = True
        jury_manager_message = _('Managers can see and edit jury.')
        jury_teacher_visibility = True
        jury_teacher_can_edit = offer_prop.adviser_can_suggest_reader
        if jury_teacher_can_edit:
            jury_teacher_message = _('Teachers can see and edit jury.')
        else:
            jury_teacher_message = _('Teachers can see jury but not edit it.')
        jury_student_visibility = offer_prop.in_periode_jury_visibility
        jury_student_can_edit = False
        if jury_student_visibility:
            jury_student_message = _(
                'Jury is currently visible for the student')
        else:
            jury_student_message = _(
                'Jury is currently invisible for the student')
    dissertation_roles = dissertation_role.search_by_dissertation(dissert)

    promotors_count = dissertation_role.count_by_status_dissertation(
        dissertation_role_status.PROMOTEUR, dissert)

    return render(
        request, 'manager_dissertations_detail.html', {
            'dissertation': dissert,
            'adviser': adv,
            'dissertation_roles': dissertation_roles,
            'count_dissertation_role': count_dissertation_role,
            'jury_manager_visibility': jury_manager_visibility,
            'jury_manager_can_edit': jury_manager_can_edit,
            'jury_manager_message': jury_manager_message,
            'jury_teacher_visibility': jury_teacher_visibility,
            'jury_teacher_can_edit': jury_teacher_can_edit,
            'jury_teacher_message': jury_teacher_message,
            'jury_student_visibility': jury_student_visibility,
            'jury_student_can_edit': jury_student_can_edit,
            'jury_student_message': jury_student_message,
            'promotors_count': promotors_count,
            'filename': filename
        })
Пример #23
0
 def test_find_by_id(self):
     self.dissertation_a = DissertationFactory(id=666)
     result = dissertation.find_by_id(666)
     self.assertEqual(self.dissertation_a, result)
     result = dissertation.find_by_id(999)
     self.assertEqual(None, result)
 def test_find_by_id(self):
     self.assertEqual(
         dissertation.find_by_id(self.dissertation_to_put_back_to_draft.id),
         self.dissertation_to_put_back_to_draft)