-
Jorran de Wit authored80ba9d7d
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
views.py 11.59 KiB
import datetime
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.template import Context, Template
from django.utils import timezone
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
@login_required
@permission_required('scipost.can_attend_VGMs')
def VGMs(request):
VGM_list = VGM.objects.all().order_by('start_date')
context = {'VGM_list': VGM_list}
return render(request, 'virtualmeetings/VGMs.html', context)
@login_required
@permission_required('scipost.can_attend_VGMs')
def VGM_detail(request, VGM_id):
VGM_instance = get_object_or_404(VGM, id=VGM_id)
VGM_information = Template(VGM_instance.information).render(Context({}))
feedback_received = Feedback.objects.filter(VGM=VGM_instance).order_by('date')
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')
nomination_form = NominationForm()
nominations = Nomination.objects.filter(accepted=None).order_by('last_name')
motion_form = MotionForm()
remark_form = RemarkForm()
context = {
'VGM': VGM_instance,
'VGM_information': VGM_information,
'feedback_received': feedback_received,
'feedback_form': feedback_form,
'current_Fellows': current_Fellows,
'pending_inv_Fellows': pending_inv_Fellows,
'declined_inv_Fellows': declined_inv_Fellows,
'nominations': nominations,
'nomination_form': nomination_form,
'motion_categories_dict': motion_categories_dict,
'motion_form': motion_form,
'remark_form': remark_form,
}
return render(request, 'virtualmeetings/VGM_detail.html', context)
@login_required
@permission_required('scipost.can_attend_VGMs')
def feedback(request, VGM_id=None):
if request.method == 'POST':
feedback_form = FeedbackForm(request.POST)
if feedback_form.is_valid():
feedback = Feedback(by=request.user.contributor,
date=timezone.now().date(),
feedback=feedback_form.cleaned_data['feedback'],)
if VGM_id:
VGM_instance = get_object_or_404(VGM, id=VGM_id)
feedback.VGM = VGM_instance
feedback.save()
ack_message = 'Your feedback has been received.'
context = {'ack_message': ack_message}
if VGM_id:
context['followup_message'] = 'Return to the '
context['followup_link'] = reverse('virtualmeetings:VGM_detail',
kwargs={'VGM_id': VGM_id})
context['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})
else:
errormessage = 'This view can only be posted to.'
return render(request, 'scipost/error.html', {'errormessage': errormessage})
@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})
else:
errormessage = 'This view can only be posted to.'
return render(request, 'scipost/error.html', {'errormessage': errormessage})
@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})
else:
errormessage = 'This view can only be posted to.'
return render(request, 'scipost/error.html', {'errormessage': errormessage})
@login_required
@permission_required('scipost.can_attend_VGMs', raise_exception=True)
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})
else:
errormessage = 'This view can only be posted to.'
return render(request, 'scipost/error.html', {'errormessage': errormessage})
@login_required
@permission_required('scipost.can_attend_VGMs', raise_exception=True)
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))
@login_required
@permission_required('scipost.can_attend_VGMs')
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})
else:
errormessage = 'This view can only be posted to.'
return render(request, 'scipost/error.html', {'errormessage': errormessage})
@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})
else:
errormessage = 'This view can only be posted to.'
return render(request, 'scipost/error.html', {'errormessage': errormessage})
@login_required
@permission_required('scipost.can_attend_VGMs', raise_exception=True)
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))