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