From 1087cbc21f7f67d9dd2804f708f9ca2597bf32e8 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Sun, 18 Jun 2017 20:22:13 +0200 Subject: [PATCH] Improve virtualmeetings view code --- virtualmeetings/views.py | 199 +++++++++++++++------------------------ 1 file changed, 78 insertions(+), 121 deletions(-) diff --git a/virtualmeetings/views.py b/virtualmeetings/views.py index ee357ca3f..cb3d7984b 100644 --- a/virtualmeetings/views.py +++ b/virtualmeetings/views.py @@ -1,9 +1,9 @@ import datetime +from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required from django.core.urlresolvers import reverse -from django.http import HttpResponseRedirect -from django.shortcuts import get_object_or_404, render +from django.shortcuts import get_object_or_404, render, redirect from django.template import Context, Template from django.utils import timezone @@ -11,8 +11,8 @@ from .constants import motion_categories_dict from .forms import FeedbackForm, NominationForm, MotionForm from .models import VGM, Feedback, Nomination, Motion -from scipost.forms import RegistrationInvitation, RemarkForm -from scipost.models import Contributor, Remark +from scipost.forms import RemarkForm +from scipost.models import RegistrationInvitation, Contributor, Remark @login_required @@ -32,10 +32,9 @@ def VGM_detail(request, VGM_id): feedback_form = FeedbackForm() current_Fellows = Contributor.objects.filter( user__groups__name='Editorial College').order_by('user__last_name') - sent_inv_Fellows = RegistrationInvitation.objects.filter( - invitation_type='F', responded=False) - pending_inv_Fellows = sent_inv_Fellows.filter(declined=False).order_by('last_name') - declined_inv_Fellows = sent_inv_Fellows.filter(declined=True).order_by('last_name') + + pending_inv_Fellows = RegistrationInvitation.objects.pending_invited_fellows() + declined_inv_Fellows = RegistrationInvitation.objects.declined_invited_fellows() nomination_form = NominationForm() nominations = Nomination.objects.filter(accepted=None).order_by('last_name') motion_form = MotionForm() @@ -89,59 +88,42 @@ def feedback(request, VGM_id=None): @login_required @permission_required('scipost.can_attend_VGMs', raise_exception=True) def add_remark_on_feedback(request, VGM_id, feedback_id): - # contributor = request.user.contributor feedback = get_object_or_404(Feedback, pk=feedback_id) - if request.method == 'POST': - remark_form = RemarkForm(request.POST) - if remark_form.is_valid(): - remark = Remark(contributor=request.user.contributor, - feedback=feedback, - date=timezone.now(), - remark=remark_form.cleaned_data['remark']) - remark.save() - return HttpResponseRedirect('/VGM/' + str(VGM_id) + - '/#feedback_id' + str(feedback.id)) - else: - errormessage = 'The form was invalidly filled.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + remark_form = RemarkForm(request.POST) + if remark_form.is_valid(): + remark = Remark(contributor=request.user.contributor, + feedback=feedback, + remark=remark_form.cleaned_data['remark']) + remark.save() else: - errormessage = 'This view can only be posted to.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + messages.danger(request, 'The form was invalidly filled.') + return redirect(feedback.get_absolute_url()) @login_required @permission_required('scipost.can_attend_VGMs') def nominate_Fellow(request, VGM_id): VGM_instance = get_object_or_404(VGM, id=VGM_id) - if request.method == 'POST': - nomination_form = NominationForm(request.POST) - if nomination_form.is_valid(): - nomination = Nomination( - VGM=VGM_instance, - by=request.user.contributor, - date=timezone.now().date(), - first_name=nomination_form.cleaned_data['first_name'], - last_name=nomination_form.cleaned_data['last_name'], - discipline=nomination_form.cleaned_data['discipline'], - expertises=nomination_form.cleaned_data['expertises'], - webpage=nomination_form.cleaned_data['webpage'], - voting_deadline=VGM_instance.end_date + datetime.timedelta(days=7), - ) - nomination.save() - nomination.update_votes(request.user.contributor.id, 'A') - ack_message = 'The nomination has been registered.' - context = {'ack_message': ack_message, - 'followup_message': 'Return to the ', - 'followup_link': reverse('virtualmeetings:VGM_detail', - kwargs={'VGM_id': VGM_id}), - 'followup_link_label': 'VGM page'} - return render(request, 'scipost/acknowledgement.html', context) - else: - errormessage = 'The form was not filled properly.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + nomination_form = NominationForm(request.POST) + + if nomination_form.is_valid(): + nomination = Nomination( + VGM=VGM_instance, + by=request.user.contributor, + date=timezone.now().date(), + first_name=nomination_form.cleaned_data['first_name'], + last_name=nomination_form.cleaned_data['last_name'], + discipline=nomination_form.cleaned_data['discipline'], + expertises=nomination_form.cleaned_data['expertises'], + webpage=nomination_form.cleaned_data['webpage'], + voting_deadline=VGM_instance.end_date + datetime.timedelta(days=7), + ) + nomination.save() + nomination.update_votes(request.user.contributor.id, 'A') + messages.success(request, 'The nomination has been registered.') else: - errormessage = 'This view can only be posted to.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + messages.danger(request, 'The form was not filled properly.') + return redirect(VGM_instance.get_absolute_url()) @login_required @@ -149,22 +131,15 @@ def nominate_Fellow(request, VGM_id): def add_remark_on_nomination(request, VGM_id, nomination_id): # contributor = request.user.contributor nomination = get_object_or_404(Nomination, pk=nomination_id) - if request.method == 'POST': - remark_form = RemarkForm(request.POST) - if remark_form.is_valid(): - remark = Remark(contributor=request.user.contributor, - nomination=nomination, - date=timezone.now(), - remark=remark_form.cleaned_data['remark']) - remark.save() - return HttpResponseRedirect('/VGM/' + str(VGM_id) + - '/#nomination_id' + str(nomination.id)) - else: - errormessage = 'The form was invalidly filled.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + remark_form = RemarkForm(request.POST) + if remark_form.is_valid(): + remark = Remark(contributor=request.user.contributor, + nomination=nomination, + remark=remark_form.cleaned_data['remark']) + remark.save() else: - errormessage = 'This view can only be posted to.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + messages.danger(request, 'The form was invalidly filled.') + return redirect(nomination.get_absolute_url()) @login_required @@ -173,11 +148,11 @@ def vote_on_nomination(request, nomination_id, vote): contributor = request.user.contributor nomination = get_object_or_404(Nomination, pk=nomination_id) if timezone.now() > nomination.voting_deadline: - errormessage = 'The voting deadline on this nomination has passed.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) - nomination.update_votes(contributor.id, vote) - return HttpResponseRedirect('/VGM/' + str(nomination.VGM.id) + - '/#nomination_id' + str(nomination.id)) + messages.warning(request, 'The voting deadline on this nomination has passed.') + else: + nomination.update_votes(contributor.id, vote) + messages.success(request, 'You have successfully voted on nomination %i' % nomination.id) + return redirect(nomination.get_absolute_url()) @login_required @@ -185,58 +160,40 @@ def vote_on_nomination(request, nomination_id, vote): def put_motion_forward(request, VGM_id): VGM_instance = get_object_or_404(VGM, id=VGM_id) if timezone.now().date() > VGM_instance.end_date: - errormessage = 'This VGM has ended. No new motions can be put forward.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) - if request.method == 'POST': - motion_form = MotionForm(request.POST) - if motion_form.is_valid(): - motion = Motion( - category=motion_form.cleaned_data['category'], - VGM=VGM_instance, - background=motion_form.cleaned_data['background'], - motion=motion_form.cleaned_data['motion'], - put_forward_by=request.user.contributor, - date=timezone.now().date(), - voting_deadline=VGM_instance.end_date + datetime.timedelta(days=7), - ) - motion.save() - motion.update_votes(request.user.contributor.id, 'A') - ack_message = 'Your motion has been registered.' - context = {'ack_message': ack_message, - 'followup_message': 'Return to the ', - 'followup_link': reverse('virtualmeetings:VGM_detail', - kwargs={'VGM_id': VGM_id}), - 'followup_link_label': 'VGM page'} - return render(request, 'scipost/acknowledgement.html', context) - else: - errormessage = 'The form was not filled properly.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + messages.warning(request, 'This VGM has ended. No new motions can be put forward.') + return redirect(VGM_instance.get_absolute_url()) + + motion_form = MotionForm(request.POST) + if motion_form.is_valid(): + motion = Motion( + category=motion_form.cleaned_data['category'], + VGM=VGM_instance, + background=motion_form.cleaned_data['background'], + motion=motion_form.cleaned_data['motion'], + put_forward_by=request.user.contributor, + voting_deadline=VGM_instance.end_date + datetime.timedelta(days=7), + ) + motion.save() + motion.update_votes(request.user.contributor.id, 'A') + messages.success(request, 'Your vote has been registered.') else: - errormessage = 'This view can only be posted to.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + messages.danger(request, 'The form was not filled properly.') + return redirect(motion.get_absolute_url()) @login_required @permission_required('scipost.can_attend_VGMs', raise_exception=True) def add_remark_on_motion(request, motion_id): - # contributor = request.user.contributor motion = get_object_or_404(Motion, pk=motion_id) - if request.method == 'POST': - remark_form = RemarkForm(request.POST) - if remark_form.is_valid(): - remark = Remark(contributor=request.user.contributor, - motion=motion, - date=timezone.now(), - remark=remark_form.cleaned_data['remark']) - remark.save() - return HttpResponseRedirect('/VGM/' + str(motion.VGM.id) + - '/#motion_id' + str(motion.id)) - else: - errormessage = 'The form was invalidly filled.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + remark_form = RemarkForm(request.POST) + if remark_form.is_valid(): + remark = Remark(contributor=request.user.contributor, + motion=motion, + remark=remark_form.cleaned_data['remark']) + remark.save() else: - errormessage = 'This view can only be posted to.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) + messages.danger(request, 'The form was not filled properly.') + return redirect(motion.get_absolute_url()) @login_required @@ -245,8 +202,8 @@ def vote_on_motion(request, motion_id, vote): contributor = request.user.contributor motion = get_object_or_404(Motion, pk=motion_id) if timezone.now() > motion.voting_deadline: - errormessage = 'The voting deadline on this motion has passed.' - return render(request, 'scipost/error.html', {'errormessage': errormessage}) - motion.update_votes(contributor.id, vote) - return HttpResponseRedirect('/VGM/' + str(motion.VGM.id) + - '/#motion_id' + str(motion.id)) + messages.warning(request, 'The voting deadline on this motion has passed.') + else: + motion.update_votes(contributor.id, vote) + messages.success(request, 'You have successfully voted on motion %i' % motion.id) + return redirect(motion.get_absolute_url()) -- GitLab