Exemplo n.º 1
0
 def visible(self, user):
     if user.is_staff or is_theses_board_member(user):
         return self
     return self.filter(
         (~Q(status=ThesisStatus.BEING_EVALUATED) & ~Q(status=ThesisStatus.RETURNED_FOR_CORRECTIONS)) |
         Q(advisor__user=user) |
         Q(supporting_advisor__user=user))
Exemplo n.º 2
0
def vote_for_thesis(request, id):
    """Vote for selected thesis"""

    if not is_theses_board_member(request.user):
        raise PermissionDenied

    thesis = get_object_or_404(Thesis, id=id)

    if thesis.has_been_accepted:
        raise PermissionDenied

    if request.method == "POST":
        form = VoteForm(request.POST, thesis=thesis, user=request.user)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            messages.success(request, 'Zapisano głos')

    return redirect('theses:selected_thesis', id=id)
Exemplo n.º 3
0
def list_all(request):
    """Display list of all visible theses"""

    visible_theses = Thesis.objects.visible(request.user)
    board_member = is_theses_board_member(request.user)

    theses_list = []
    for p in visible_theses:
        title = p.title
        is_available = not p.is_reserved
        kind = p.get_kind_display()
        status = p.get_status_display()
        has_been_accepted = p.has_been_accepted
        is_mine = p.is_mine(request.user) or p.is_student_assigned(
            request.user) or p.is_supporting_advisor_assigned(request.user)
        advisor = p.advisor.__str__()
        advisor_last_name = p.advisor.user.last_name if p.advisor else p.advisor.__str__(
        )
        url = reverse('theses:selected_thesis', None, [str(p.id)])

        record = {
            "id": p.id,
            "title": title,
            "is_available": is_available,
            "kind": kind,
            "status": status,
            "has_been_accepted": has_been_accepted,
            "is_mine": is_mine,
            "url": url,
            "advisor": advisor,
            "advisor_last_name": advisor_last_name,
            "modified": p.modified.timestamp()
        }

        theses_list.append(record)

    return render(request, 'theses/list_all.html', {
        'theses_list': theses_list,
        'board_member': board_member,
    })
Exemplo n.º 4
0
def view_thesis(request, id):
    """Show subpage for one thesis"""

    thesis = get_object_or_404(Thesis, id=id)
    not_has_been_accepted = not thesis.has_been_accepted
    board_member = is_theses_board_member(request.user)

    if (not_has_been_accepted and not request.user.is_staff
            and not thesis.is_mine(request.user)
            and not thesis.is_supporting_advisor_assigned(request.user)
            and not board_member):
        raise PermissionDenied
    can_see_remarks = (board_member or request.user.is_staff
                       or thesis.is_mine(request.user)
                       or thesis.is_supporting_advisor_assigned(request.user))
    can_edit_thesis = (request.user.is_staff or thesis.is_mine(request.user))
    save_and_verify = thesis.is_mine(request.user) and thesis.is_returned
    can_vote = thesis.is_voting_active and board_member
    show_master_rejecter = is_master_rejecter(
        request.user) and (thesis.is_voting_active or thesis.is_returned)
    can_download_declarations = (request.user.is_staff
                                 or thesis.is_mine(request.user)
                                 or thesis.is_student_assigned(request.user)
                                 or thesis.is_supporting_advisor_assigned(
                                     request.user))

    students = thesis.students.all()

    all_voters = get_theses_board()
    votes = []
    voters = []
    for vote in thesis.thesis_votes.all():
        voters.append(vote.owner)
        votes.append({'owner': vote.owner, 'vote': vote.get_vote_display()})

    for voter in all_voters:
        if voter not in voters:
            votes.append({'owner': voter, 'vote': ThesisVote.NONE.display})

    for vote in votes:
        if vote['owner'].user == request.user:
            votes.remove(vote)
            votes.insert(0, vote)

    vote_form_accepted = VoteForm(vote=ThesisVote.ACCEPTED)
    vote_form_rejected = VoteForm(vote=ThesisVote.REJECTED)
    vote_form_none = VoteForm(vote=ThesisVote.NONE)

    rejecter_accepted = RejecterForm(status=ThesisStatus.ACCEPTED)
    if thesis.is_voting_active:
        rejecter_rejected = RejecterForm(
            status=ThesisStatus.RETURNED_FOR_CORRECTIONS)
    else:
        rejecter_rejected = RejecterForm(status=ThesisStatus.BEING_EVALUATED)

    remarks = None
    remarkform = None

    if board_member and not_has_been_accepted:
        remarks = thesis.thesis_remarks.all().exclude(
            author=request.user.employee).exclude(text="")
        remarkform = RemarkForm(thesis=thesis, user=request.user)
    elif can_see_remarks:
        remarks = thesis.thesis_remarks.all().exclude(text="")

    remarks_exist = not_has_been_accepted or remarks

    return render(
        request, 'theses/thesis.html', {
            'thesis': thesis,
            'students': students,
            'board_member': board_member,
            'show_master_rejecter': show_master_rejecter,
            'can_see_remarks': can_see_remarks,
            'save_and_verify': save_and_verify,
            'can_vote': can_vote,
            'can_edit_thesis': can_edit_thesis,
            'can_download_declarations': can_download_declarations,
            'not_has_been_accepted': not_has_been_accepted,
            'remarks': remarks,
            'remark_form': remarkform,
            'remarks_exist': remarks_exist,
            'votes': votes,
            'vote_form_accepted': vote_form_accepted,
            'vote_form_rejected': vote_form_rejected,
            'vote_form_none': vote_form_none,
            'rejecter_accepted': rejecter_accepted,
            'rejecter_rejected': rejecter_rejected
        })