From e2ac321a8fce388904f00ebd49c56f6eb9354127 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Fri, 5 Apr 2019 21:04:03 +0200
Subject: [PATCH] Remove app virtualmeetings, step 1: remove models, views etc

---
 scipost/forms.py                              |   4 -
 scipost/migrations/0024_auto_20190405_2102.py |  27 ++
 scipost/models.py                             |   6 -
 virtualmeetings/admin.py                      | 106 ++---
 virtualmeetings/apps.py                       |   6 +-
 virtualmeetings/forms.py                      |  54 +--
 .../commands/transfer_old_motion_to_new.py    |  64 +--
 .../migrations/0003_auto_20190405_2102.py     |  76 ++++
 virtualmeetings/models.py                     | 266 ++++++------
 virtualmeetings/urls.py                       |  32 +-
 virtualmeetings/views.py                      | 378 +++++++++---------
 11 files changed, 556 insertions(+), 463 deletions(-)
 create mode 100644 scipost/migrations/0024_auto_20190405_2102.py
 create mode 100644 virtualmeetings/migrations/0003_auto_20190405_2102.py

diff --git a/scipost/forms.py b/scipost/forms.py
index 19d089529..ab756afd3 100644
--- a/scipost/forms.py
+++ b/scipost/forms.py
@@ -45,7 +45,6 @@ from profiles.models import Profile, ProfileEmail, Affiliation
 from submissions.models import Submission, EditorialAssignment, RefereeInvitation, Report, \
     EditorialCommunication, EICRecommendation
 from theses.models import ThesisLink
-from virtualmeetings.models import Feedback, Nomination, Motion
 
 
 REGISTRATION_REFUSAL_CHOICES = (
@@ -566,9 +565,6 @@ class ContributorMergeForm(forms.Form):
             referee=contrib_from).update(referee=contrib_into)
         ThesisLink.objects.filter(requested_by=contrib_from).update(requested_by=contrib_into)
         ThesisLink.objects.filter(vetted_by=contrib_from).update(vetted_by=contrib_into)
-        Feedback.objects.filter(by=contrib_from).update(by=contrib_into)
-        Nomination.objects.filter(by=contrib_from).update(by=contrib_into)
-        Motion.objects.filter(put_forward_by=contrib_from).update(put_forward_by=contrib_into)
 
         # Step 3: update all ManyToMany
         commentaries = Commentary.objects.filter(authors__in=[contrib_from,]).all()
diff --git a/scipost/migrations/0024_auto_20190405_2102.py b/scipost/migrations/0024_auto_20190405_2102.py
new file mode 100644
index 000000000..2d841ad2a
--- /dev/null
+++ b/scipost/migrations/0024_auto_20190405_2102.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2019-04-05 19:02
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0023_totpdevice'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='remark',
+            name='feedback',
+        ),
+        migrations.RemoveField(
+            model_name='remark',
+            name='motion',
+        ),
+        migrations.RemoveField(
+            model_name='remark',
+            name='nomination',
+        ),
+    ]
diff --git a/scipost/models.py b/scipost/models.py
index 9f5067f35..f814698ec 100644
--- a/scipost/models.py
+++ b/scipost/models.py
@@ -192,12 +192,6 @@ class Remark(models.Model):
     """A form of non-public communication for VGMs and/or submissions and recommendations."""
 
     contributor = models.ForeignKey(Contributor, on_delete=models.CASCADE)
-    feedback = models.ForeignKey('virtualmeetings.Feedback', on_delete=models.CASCADE,
-                                 blank=True, null=True)
-    nomination = models.ForeignKey('virtualmeetings.Nomination', on_delete=models.CASCADE,
-                                   blank=True, null=True)
-    motion = models.ForeignKey('virtualmeetings.Motion', on_delete=models.CASCADE,
-                               blank=True, null=True)
     submission = models.ForeignKey('submissions.Submission',
                                    on_delete=models.CASCADE,
                                    blank=True, null=True)
diff --git a/virtualmeetings/admin.py b/virtualmeetings/admin.py
index e093092cf..efdacfd9d 100644
--- a/virtualmeetings/admin.py
+++ b/virtualmeetings/admin.py
@@ -6,76 +6,76 @@ from django.contrib import admin
 
 from django import forms
 
-from .models import VGM, Feedback, Nomination, Motion
+# from .models import VGM, Feedback, Nomination, Motion
 
 from scipost.models import Contributor
 
 
-class VGMAdmin(admin.ModelAdmin):
-    search_fields = ['start_date']
+# class VGMAdmin(admin.ModelAdmin):
+#     search_fields = ['start_date']
 
 
-admin.site.register(VGM, VGMAdmin)
+# admin.site.register(VGM, VGMAdmin)
 
 
-class FeedbackAdmin(admin.ModelAdmin):
-    search_fields = ['feedback', 'by']
+# class FeedbackAdmin(admin.ModelAdmin):
+#     search_fields = ['feedback', 'by']
 
 
-admin.site.register(Feedback, FeedbackAdmin)
+# admin.site.register(Feedback, FeedbackAdmin)
 
 
-class NominationAdminForm(forms.ModelForm):
-    in_agreement = forms.ModelMultipleChoiceField(
-        required=False,
-        queryset=Contributor.objects.filter(
-            user__groups__name__in=['Editorial College'],
-        ).order_by('user__last_name'))
-    in_notsure = forms.ModelMultipleChoiceField(
-        required=False,
-        queryset=Contributor.objects.filter(
-            user__groups__name__in=['Editorial College'],
-        ).order_by('user__last_name'))
-    in_disagreement = forms.ModelMultipleChoiceField(
-        required=False,
-        queryset=Contributor.objects.filter(
-            user__groups__name__in=['Editorial College'],
-        ).order_by('user__last_name'))
+# class NominationAdminForm(forms.ModelForm):
+#     in_agreement = forms.ModelMultipleChoiceField(
+#         required=False,
+#         queryset=Contributor.objects.filter(
+#             user__groups__name__in=['Editorial College'],
+#         ).order_by('user__last_name'))
+#     in_notsure = forms.ModelMultipleChoiceField(
+#         required=False,
+#         queryset=Contributor.objects.filter(
+#             user__groups__name__in=['Editorial College'],
+#         ).order_by('user__last_name'))
+#     in_disagreement = forms.ModelMultipleChoiceField(
+#         required=False,
+#         queryset=Contributor.objects.filter(
+#             user__groups__name__in=['Editorial College'],
+#         ).order_by('user__last_name'))
 
-    class Meta:
-        model = Nomination
-        fields = '__all__'
+#     class Meta:
+#         model = Nomination
+#         fields = '__all__'
 
-class NominationAdmin(admin.ModelAdmin):
-    search_fields = ['last_name', 'first_name', 'by']
-    form = NominationAdminForm
+# class NominationAdmin(admin.ModelAdmin):
+#     search_fields = ['last_name', 'first_name', 'by']
+#     form = NominationAdminForm
 
-admin.site.register(Nomination, NominationAdmin)
+# admin.site.register(Nomination, NominationAdmin)
 
 
-class MotionAdminForm(forms.ModelForm):
-    in_agreement = forms.ModelMultipleChoiceField(
-        required=False,
-        queryset=Contributor.objects.filter(
-            user__groups__name__in=['Editorial College'],
-        ).order_by('user__last_name'))
-    in_notsure = forms.ModelMultipleChoiceField(
-        required=False,
-        queryset=Contributor.objects.filter(
-            user__groups__name__in=['Editorial College'],
-        ).order_by('user__last_name'))
-    in_disagreement = forms.ModelMultipleChoiceField(
-        required=False,
-        queryset=Contributor.objects.filter(
-            user__groups__name__in=['Editorial College'],
-        ).order_by('user__last_name'))
+# class MotionAdminForm(forms.ModelForm):
+#     in_agreement = forms.ModelMultipleChoiceField(
+#         required=False,
+#         queryset=Contributor.objects.filter(
+#             user__groups__name__in=['Editorial College'],
+#         ).order_by('user__last_name'))
+#     in_notsure = forms.ModelMultipleChoiceField(
+#         required=False,
+#         queryset=Contributor.objects.filter(
+#             user__groups__name__in=['Editorial College'],
+#         ).order_by('user__last_name'))
+#     in_disagreement = forms.ModelMultipleChoiceField(
+#         required=False,
+#         queryset=Contributor.objects.filter(
+#             user__groups__name__in=['Editorial College'],
+#         ).order_by('user__last_name'))
 
-    class Meta:
-        model = Motion
-        fields = '__all__'
+#     class Meta:
+#         model = Motion
+#         fields = '__all__'
 
-class MotionAdmin(admin.ModelAdmin):
-    search_fields = ['background', 'motion', 'put_forward_by']
-    form = MotionAdminForm
+# class MotionAdmin(admin.ModelAdmin):
+#     search_fields = ['background', 'motion', 'put_forward_by']
+#     form = MotionAdminForm
 
-admin.site.register(Motion, MotionAdmin)
+# admin.site.register(Motion, MotionAdmin)
diff --git a/virtualmeetings/apps.py b/virtualmeetings/apps.py
index 80b6af231..a7eb4a3e8 100644
--- a/virtualmeetings/apps.py
+++ b/virtualmeetings/apps.py
@@ -2,8 +2,8 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
 __license__ = "AGPL v3"
 
 
-from django.apps import AppConfig
+# from django.apps import AppConfig
 
 
-class VirtualmeetingsConfig(AppConfig):
-    name = 'virtualmeetings'
+# class VirtualmeetingsConfig(AppConfig):
+#     name = 'virtualmeetings'
diff --git a/virtualmeetings/forms.py b/virtualmeetings/forms.py
index a4b52a917..b3c70e5b4 100644
--- a/virtualmeetings/forms.py
+++ b/virtualmeetings/forms.py
@@ -4,40 +4,40 @@ __license__ = "AGPL v3"
 
 from django import forms
 
-from .models import Feedback, Nomination, Motion
+# from .models import Feedback, Nomination, Motion
 
 from scipost.constants import SCIPOST_SUBJECT_AREAS
 
 
-class FeedbackForm(forms.ModelForm):
-    class Meta:
-        model = Feedback
-        fields = ['feedback']
+# class FeedbackForm(forms.ModelForm):
+#     class Meta:
+#         model = Feedback
+#         fields = ['feedback']
 
 
-class NominationForm(forms.ModelForm):
-    class Meta:
-        model = Nomination
-        fields = ['first_name', 'last_name',
-                  'discipline', 'expertises', 'webpage']
+# class NominationForm(forms.ModelForm):
+#     class Meta:
+#         model = Nomination
+#         fields = ['first_name', 'last_name',
+#                   'discipline', 'expertises', 'webpage']
 
-    def __init__(self, *args, **kwargs):
-        super(NominationForm, self).__init__(*args, **kwargs)
-        self.fields['expertises'].widget = forms.SelectMultiple(choices=SCIPOST_SUBJECT_AREAS)
+#     def __init__(self, *args, **kwargs):
+#         super(NominationForm, self).__init__(*args, **kwargs)
+#         self.fields['expertises'].widget = forms.SelectMultiple(choices=SCIPOST_SUBJECT_AREAS)
 
 
-class MotionForm(forms.ModelForm):
-    class Meta:
-        model = Motion
-        fields = ['category', 'background', 'motion']
+# class MotionForm(forms.ModelForm):
+#     class Meta:
+#         model = Motion
+#         fields = ['category', 'background', 'motion']
 
-    def __init__(self, *args, **kwargs):
-        super(MotionForm, self).__init__(*args, **kwargs)
-        self.fields['background'].label = ''
-        self.fields['background'].widget.attrs.update(
-            {'rows': 8, 'cols': 100,
-             'placeholder': 'Provide useful background information on your Motion.'})
-        self.fields['motion'].label = ''
-        self.fields['motion'].widget.attrs.update(
-            {'rows': 8, 'cols': 100,
-             'placeholder': 'Phrase your Motion as clearly and succinctly as possible.'})
+#     def __init__(self, *args, **kwargs):
+#         super(MotionForm, self).__init__(*args, **kwargs)
+#         self.fields['background'].label = ''
+#         self.fields['background'].widget.attrs.update(
+#             {'rows': 8, 'cols': 100,
+#              'placeholder': 'Provide useful background information on your Motion.'})
+#         self.fields['motion'].label = ''
+#         self.fields['motion'].widget.attrs.update(
+#             {'rows': 8, 'cols': 100,
+#              'placeholder': 'Phrase your Motion as clearly and succinctly as possible.'})
diff --git a/virtualmeetings/management/commands/transfer_old_motion_to_new.py b/virtualmeetings/management/commands/transfer_old_motion_to_new.py
index e65b27169..3b41295a3 100644
--- a/virtualmeetings/management/commands/transfer_old_motion_to_new.py
+++ b/virtualmeetings/management/commands/transfer_old_motion_to_new.py
@@ -2,39 +2,39 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
 __license__ = "AGPL v3"
 
 
-from django.core.management.base import BaseCommand
-from django.contrib.contenttypes.models import ContentType
+# from django.core.management.base import BaseCommand
+# from django.contrib.contenttypes.models import ContentType
 
-from virtualmeetings.models import Motion as deprec_Motion
-from forums.models import Post, Motion
+# from virtualmeetings.models import Motion as deprec_Motion
+# from forums.models import Post, Motion
 
-class Command(BaseCommand):
-    help = ('Temporary method to transfer old virtualmeetings.Motions '
-            'to new forums.Motion ones.')
+# class Command(BaseCommand):
+#     help = ('Temporary method to transfer old virtualmeetings.Motions '
+#             'to new forums.Motion ones.')
 
-    def add_arguments(self, parser):
-        parser.add_argument(
-            '--old_pk', action='store', default=0, type=int, dest='old_pk', help='Old Motion id')
-        parser.add_argument(
-            '--new_pk', action='store', default=0, type=int, dest='new_pk', help='New Motion id')
+#     def add_arguments(self, parser):
+#         parser.add_argument(
+#             '--old_pk', action='store', default=0, type=int, dest='old_pk', help='Old Motion id')
+#         parser.add_argument(
+#             '--new_pk', action='store', default=0, type=int, dest='new_pk', help='New Motion id')
 
-    def handle(self, *args, **kwargs):
-        old_motion = deprec_Motion.objects.get(pk=kwargs['old_pk'])
-        new_motion = Motion.objects.get(pk=kwargs['new_pk'])
-        # Transfer the votes
-        for voter in old_motion.in_agreement.all():
-            new_motion.in_agreement.add(voter.user)
-        for voter in old_motion.in_notsure.all():
-            new_motion.in_doubt.add(voter.user)
-        for voter in old_motion.in_disagreement.all():
-            new_motion.in_disagreement.add(voter.user)
-        # Transfer the old remarks to Post objects
-        type_motion = ContentType.objects.get_by_natural_key('forums', 'post')
-        for remark in old_motion.remarks.all():
-            Post.objects.get_or_create(
-                posted_by=remark.contributor.user,
-                posted_on=remark.date,
-                parent_content_type=type_motion,
-                parent_object_id=new_motion.id,
-                subject='Remark',
-                text=remark.remark)
+#     def handle(self, *args, **kwargs):
+#         old_motion = deprec_Motion.objects.get(pk=kwargs['old_pk'])
+#         new_motion = Motion.objects.get(pk=kwargs['new_pk'])
+#         # Transfer the votes
+#         for voter in old_motion.in_agreement.all():
+#             new_motion.in_agreement.add(voter.user)
+#         for voter in old_motion.in_notsure.all():
+#             new_motion.in_doubt.add(voter.user)
+#         for voter in old_motion.in_disagreement.all():
+#             new_motion.in_disagreement.add(voter.user)
+#         # Transfer the old remarks to Post objects
+#         type_motion = ContentType.objects.get_by_natural_key('forums', 'post')
+#         for remark in old_motion.remarks.all():
+#             Post.objects.get_or_create(
+#                 posted_by=remark.contributor.user,
+#                 posted_on=remark.date,
+#                 parent_content_type=type_motion,
+#                 parent_object_id=new_motion.id,
+#                 subject='Remark',
+#                 text=remark.remark)
diff --git a/virtualmeetings/migrations/0003_auto_20190405_2102.py b/virtualmeetings/migrations/0003_auto_20190405_2102.py
new file mode 100644
index 000000000..2163d83ca
--- /dev/null
+++ b/virtualmeetings/migrations/0003_auto_20190405_2102.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2019-04-05 19:02
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0024_auto_20190405_2102'),
+        ('virtualmeetings', '0002_auto_20190126_2058'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='feedback',
+            name='VGM',
+        ),
+        migrations.RemoveField(
+            model_name='feedback',
+            name='by',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='VGM',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='in_agreement',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='in_disagreement',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='in_notsure',
+        ),
+        migrations.RemoveField(
+            model_name='motion',
+            name='put_forward_by',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='VGM',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='by',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='in_agreement',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='in_disagreement',
+        ),
+        migrations.RemoveField(
+            model_name='nomination',
+            name='in_notsure',
+        ),
+        migrations.DeleteModel(
+            name='Feedback',
+        ),
+        migrations.DeleteModel(
+            name='Motion',
+        ),
+        migrations.DeleteModel(
+            name='Nomination',
+        ),
+        migrations.DeleteModel(
+            name='VGM',
+        ),
+    ]
diff --git a/virtualmeetings/models.py b/virtualmeetings/models.py
index 5a69d9f05..52f3cc296 100644
--- a/virtualmeetings/models.py
+++ b/virtualmeetings/models.py
@@ -14,136 +14,136 @@ from scipost.fields import ChoiceArrayField
 from scipost.models import Contributor
 
 
-class VGM(models.Model):
-    """
-    Each year, a Virtual General Meeting is held during which operations at
-    SciPost are discussed. A VGM can be attended by Administrators,
-    Advisory Board members and Editorial Fellows.
-    """
-    start_date = models.DateField()
-    end_date = models.DateField()
-    information = models.TextField(default='')
-
-    def __str__(self):
-        return 'From %s to %s' % (self.start_date.strftime('%Y-%m-%d'),
-                                  self.end_date.strftime('%Y-%m-%d'))
-
-    def get_absolute_url(self):
-        return reverse('virtualmeetings:VGM_detail', args=(self.id,))
-
-
-class Feedback(models.Model):
-    """
-    Feedback, suggestion or criticism on any aspect of SciPost.
-    """
-    VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True)
-    by = models.ForeignKey('scipost.Contributor')
-    date = models.DateField()
-    feedback = models.TextField()
-
-    def __str__(self):
-        return '%s: %s' % (self.by, self.feedback[:50])
-
-    def get_absolute_url(self):
-        return self.VGM.get_absolute_url() + '#feedback' + str(self.id)
-
-
-class Nomination(models.Model):
-    """
-    Nomination to an Editorial Fellowship.
-    """
-    VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True)
-    by = models.ForeignKey('scipost.Contributor')
-    date = models.DateField(auto_now_add=True)
-    first_name = models.CharField(max_length=30)
-    last_name = models.CharField(max_length=30)
-    discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES,
-                                  default='physics', verbose_name='Main discipline')
-    expertises = ChoiceArrayField(
-        models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS),
-        blank=True, null=True)
-    webpage = models.URLField()
-    nr_A = models.PositiveIntegerField(default=0)
-    in_agreement = models.ManyToManyField('scipost.Contributor',
-                                          related_name='in_agreement_with_nomination', blank=True)
-    nr_N = models.PositiveIntegerField(default=0)
-    in_notsure = models.ManyToManyField('scipost.Contributor',
-                                        related_name='in_notsure_with_nomination', blank=True)
-    nr_D = models.PositiveIntegerField(default=0)
-    in_disagreement = models.ManyToManyField('scipost.Contributor',
-                                             related_name='in_disagreement_with_nomination',
-                                             blank=True)
-    voting_deadline = models.DateTimeField('voting deadline', default=timezone.now)
-    accepted = models.NullBooleanField()
-
-    def __str__(self):
-        return '%s %s (nominated by %s)' % (self.first_name,
-                                            self.last_name,
-                                            self.by)
-
-    def get_absolute_url(self):
-        return self.VGM.get_absolute_url() + '#nomination_' + str(self.id)
-
-    def update_votes(self, contributor_id, vote):
-        contributor = get_object_or_404(Contributor, pk=contributor_id)
-        self.in_agreement.remove(contributor)
-        self.in_notsure.remove(contributor)
-        self.in_disagreement.remove(contributor)
-        if vote == 'A':
-            self.in_agreement.add(contributor)
-        elif vote == 'N':
-            self.in_notsure.add(contributor)
-        elif vote == 'D':
-            self.in_disagreement.add(contributor)
-        self.nr_A = self.in_agreement.count()
-        self.nr_N = self.in_notsure.count()
-        self.nr_D = self.in_disagreement.count()
-        self.save()
-
-
-class Motion(models.Model):
-    """
-    Motion instances are put forward to the Advisory Board and Editorial College
-    and detail suggested changes to rules, procedures etc.
-    They are meant to be voted on at the annual VGM.
-    """
-    category = models.CharField(max_length=10, choices=MOTION_CATEGORIES, default='General')
-    VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True)
-    background = models.TextField()
-    motion = models.TextField()
-    put_forward_by = models.ForeignKey('scipost.Contributor')
-    date = models.DateField(auto_now_add=True)
-    nr_A = models.PositiveIntegerField(default=0)
-    in_agreement = models.ManyToManyField('scipost.Contributor',
-                                          related_name='in_agreement_with_motion', blank=True)
-    nr_N = models.PositiveIntegerField(default=0)
-    in_notsure = models.ManyToManyField('scipost.Contributor',
-                                        related_name='in_notsure_with_motion', blank=True)
-    nr_D = models.PositiveIntegerField(default=0)
-    in_disagreement = models.ManyToManyField('scipost.Contributor',
-                                             related_name='in_disagreement_with_motion',
-                                             blank=True)
-    voting_deadline = models.DateTimeField('voting deadline', default=timezone.now)
-    accepted = models.NullBooleanField()
-
-    def __str__(self):
-        return self.motion[:32]
-
-    def get_absolute_url(self):
-        return self.VGM.get_absolute_url() + '#motion_' + str(self.id)
-
-    def update_votes(self, contributor_id, vote):
-        contributor = get_object_or_404(Contributor, pk=contributor_id)
-        self.in_agreement.remove(contributor)
-        self.in_notsure.remove(contributor)
-        self.in_disagreement.remove(contributor)
-        if vote == 'A':
-            self.in_agreement.add(contributor)
-        elif vote == 'N':
-            self.in_notsure.add(contributor)
-        elif vote == 'D':
-            self.in_disagreement.add(contributor)
-        self.nr_A = self.in_agreement.count()
-        self.nr_N = self.in_notsure.count()
-        self.nr_D = self.in_disagreement.count()
-        self.save()
+# class VGM(models.Model):
+#     """
+#     Each year, a Virtual General Meeting is held during which operations at
+#     SciPost are discussed. A VGM can be attended by Administrators,
+#     Advisory Board members and Editorial Fellows.
+#     """
+#     start_date = models.DateField()
+#     end_date = models.DateField()
+#     information = models.TextField(default='')
+
+#     def __str__(self):
+#         return 'From %s to %s' % (self.start_date.strftime('%Y-%m-%d'),
+#                                   self.end_date.strftime('%Y-%m-%d'))
+
+#     def get_absolute_url(self):
+#         return reverse('virtualmeetings:VGM_detail', args=(self.id,))
+
+
+# class Feedback(models.Model):
+#     """
+#     Feedback, suggestion or criticism on any aspect of SciPost.
+#     """
+#     VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True)
+#     by = models.ForeignKey('scipost.Contributor')
+#     date = models.DateField()
+#     feedback = models.TextField()
+
+#     def __str__(self):
+#         return '%s: %s' % (self.by, self.feedback[:50])
+
+#     def get_absolute_url(self):
+#         return self.VGM.get_absolute_url() + '#feedback' + str(self.id)
+
+
+# class Nomination(models.Model):
+#     """
+#     Nomination to an Editorial Fellowship.
+#     """
+#     VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True)
+#     by = models.ForeignKey('scipost.Contributor')
+#     date = models.DateField(auto_now_add=True)
+#     first_name = models.CharField(max_length=30)
+#     last_name = models.CharField(max_length=30)
+#     discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES,
+#                                   default='physics', verbose_name='Main discipline')
+#     expertises = ChoiceArrayField(
+#         models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS),
+#         blank=True, null=True)
+#     webpage = models.URLField()
+#     nr_A = models.PositiveIntegerField(default=0)
+#     in_agreement = models.ManyToManyField('scipost.Contributor',
+#                                           related_name='in_agreement_with_nomination', blank=True)
+#     nr_N = models.PositiveIntegerField(default=0)
+#     in_notsure = models.ManyToManyField('scipost.Contributor',
+#                                         related_name='in_notsure_with_nomination', blank=True)
+#     nr_D = models.PositiveIntegerField(default=0)
+#     in_disagreement = models.ManyToManyField('scipost.Contributor',
+#                                              related_name='in_disagreement_with_nomination',
+#                                              blank=True)
+#     voting_deadline = models.DateTimeField('voting deadline', default=timezone.now)
+#     accepted = models.NullBooleanField()
+
+#     def __str__(self):
+#         return '%s %s (nominated by %s)' % (self.first_name,
+#                                             self.last_name,
+#                                             self.by)
+
+#     def get_absolute_url(self):
+#         return self.VGM.get_absolute_url() + '#nomination_' + str(self.id)
+
+#     def update_votes(self, contributor_id, vote):
+#         contributor = get_object_or_404(Contributor, pk=contributor_id)
+#         self.in_agreement.remove(contributor)
+#         self.in_notsure.remove(contributor)
+#         self.in_disagreement.remove(contributor)
+#         if vote == 'A':
+#             self.in_agreement.add(contributor)
+#         elif vote == 'N':
+#             self.in_notsure.add(contributor)
+#         elif vote == 'D':
+#             self.in_disagreement.add(contributor)
+#         self.nr_A = self.in_agreement.count()
+#         self.nr_N = self.in_notsure.count()
+#         self.nr_D = self.in_disagreement.count()
+#         self.save()
+
+
+# class Motion(models.Model):
+#     """
+#     Motion instances are put forward to the Advisory Board and Editorial College
+#     and detail suggested changes to rules, procedures etc.
+#     They are meant to be voted on at the annual VGM.
+#     """
+#     category = models.CharField(max_length=10, choices=MOTION_CATEGORIES, default='General')
+#     VGM = models.ForeignKey('virtualmeetings.VGM', blank=True, null=True)
+#     background = models.TextField()
+#     motion = models.TextField()
+#     put_forward_by = models.ForeignKey('scipost.Contributor')
+#     date = models.DateField(auto_now_add=True)
+#     nr_A = models.PositiveIntegerField(default=0)
+#     in_agreement = models.ManyToManyField('scipost.Contributor',
+#                                           related_name='in_agreement_with_motion', blank=True)
+#     nr_N = models.PositiveIntegerField(default=0)
+#     in_notsure = models.ManyToManyField('scipost.Contributor',
+#                                         related_name='in_notsure_with_motion', blank=True)
+#     nr_D = models.PositiveIntegerField(default=0)
+#     in_disagreement = models.ManyToManyField('scipost.Contributor',
+#                                              related_name='in_disagreement_with_motion',
+#                                              blank=True)
+#     voting_deadline = models.DateTimeField('voting deadline', default=timezone.now)
+#     accepted = models.NullBooleanField()
+
+#     def __str__(self):
+#         return self.motion[:32]
+
+#     def get_absolute_url(self):
+#         return self.VGM.get_absolute_url() + '#motion_' + str(self.id)
+
+#     def update_votes(self, contributor_id, vote):
+#         contributor = get_object_or_404(Contributor, pk=contributor_id)
+#         self.in_agreement.remove(contributor)
+#         self.in_notsure.remove(contributor)
+#         self.in_disagreement.remove(contributor)
+#         if vote == 'A':
+#             self.in_agreement.add(contributor)
+#         elif vote == 'N':
+#             self.in_notsure.add(contributor)
+#         elif vote == 'D':
+#             self.in_disagreement.add(contributor)
+#         self.nr_A = self.in_agreement.count()
+#         self.nr_N = self.in_notsure.count()
+#         self.nr_D = self.in_disagreement.count()
+#         self.save()
diff --git a/virtualmeetings/urls.py b/virtualmeetings/urls.py
index 5591f1b91..f1b29bf14 100644
--- a/virtualmeetings/urls.py
+++ b/virtualmeetings/urls.py
@@ -7,20 +7,20 @@ from django.conf.urls import url
 from . import views
 
 urlpatterns = [
-    url(r'^$', views.VGMs, name='VGMs'),
-    url(r'^VGM/(?P<VGM_id>[0-9]+)/$', views.VGM_detail, name='VGM_detail'),
-    url(r'^feedback/(?P<VGM_id>[0-9]+)$', views.feedback, name='feedback'),
-    url(r'^add_remark_on_feedback/(?P<VGM_id>[0-9]+)/(?P<feedback_id>[0-9]+)$',
-        views.add_remark_on_feedback, name='add_remark_on_feedback'),
-    url(r'^nominate_Fellow/(?P<VGM_id>[0-9]+)$', views.nominate_Fellow, name='nominate_Fellow'),
-    url(r'^add_remark_on_nomination/(?P<VGM_id>[0-9]+)/(?P<nomination_id>[0-9]+)$',
-        views.add_remark_on_nomination, name='add_remark_on_nomination'),
-    url(r'^vote_on_nomination/(?P<nomination_id>[0-9]+)/(?P<vote>[AND])$',
-        views.vote_on_nomination, name='vote_on_nomination'),
-    url(r'^put_motion_forward/(?P<VGM_id>[0-9]+)$',
-        views.put_motion_forward, name='put_motion_forward'),
-    url(r'^add_remark_on_motion/(?P<motion_id>[0-9]+)$',
-        views.add_remark_on_motion, name='add_remark_on_motion'),
-    url(r'^vote_on_motion/(?P<motion_id>[0-9]+)/(?P<vote>[AND])$',
-        views.vote_on_motion, name='vote_on_motion'),
+    # url(r'^$', views.VGMs, name='VGMs'),
+    # url(r'^VGM/(?P<VGM_id>[0-9]+)/$', views.VGM_detail, name='VGM_detail'),
+    # url(r'^feedback/(?P<VGM_id>[0-9]+)$', views.feedback, name='feedback'),
+    # url(r'^add_remark_on_feedback/(?P<VGM_id>[0-9]+)/(?P<feedback_id>[0-9]+)$',
+    #     views.add_remark_on_feedback, name='add_remark_on_feedback'),
+    # url(r'^nominate_Fellow/(?P<VGM_id>[0-9]+)$', views.nominate_Fellow, name='nominate_Fellow'),
+    # url(r'^add_remark_on_nomination/(?P<VGM_id>[0-9]+)/(?P<nomination_id>[0-9]+)$',
+    #     views.add_remark_on_nomination, name='add_remark_on_nomination'),
+    # url(r'^vote_on_nomination/(?P<nomination_id>[0-9]+)/(?P<vote>[AND])$',
+    #     views.vote_on_nomination, name='vote_on_nomination'),
+    # url(r'^put_motion_forward/(?P<VGM_id>[0-9]+)$',
+    #     views.put_motion_forward, name='put_motion_forward'),
+    # url(r'^add_remark_on_motion/(?P<motion_id>[0-9]+)$',
+    #     views.add_remark_on_motion, name='add_remark_on_motion'),
+    # url(r'^vote_on_motion/(?P<motion_id>[0-9]+)/(?P<vote>[AND])$',
+    #     views.vote_on_motion, name='vote_on_motion'),
 ]
diff --git a/virtualmeetings/views.py b/virtualmeetings/views.py
index b2d145047..e316c2c08 100644
--- a/virtualmeetings/views.py
+++ b/virtualmeetings/views.py
@@ -12,8 +12,8 @@ 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 .forms import FeedbackForm, NominationForm, MotionForm
+# from .models import VGM, Feedback, Nomination, Motion
 
 from scipost.constants import SCIPOST_SUBJECT_AREAS
 from scipost.forms import RemarkForm
@@ -21,190 +21,190 @@ from scipost.models import Contributor, Remark
 from invitations.models import RegistrationInvitation
 
 
-@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')
-
-    pending_inv_Fellows = RegistrationInvitation.objects.for_fellows().no_response()
-    declined_inv_Fellows = RegistrationInvitation.objects.for_fellows().declined()
-    spec_list = SCIPOST_SUBJECT_AREAS  # subject_areas_dict
-    nomination_form = NominationForm()
-    nominations = Nomination.objects.filter(VGM=VGM_instance, 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,
-        'spec_list': spec_list,
-        '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):
-    feedback = get_object_or_404(Feedback, pk=feedback_id)
-    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:
-        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)
-    nomination_form = NominationForm(request.POST)
-
-    if nomination_form.is_valid():
-        nomination = nomination_form.save(commit=False)
-        nomination.VGM = VGM_instance
-        nomination.by = request.user.contributor
-        nomination.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:
-        messages.warning(request, 'The form was not filled properly.')
-    return redirect(VGM_instance.get_absolute_url())
-
-
-@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)
-    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:
-        messages.danger(request, 'The form was invalidly filled.')
-    return redirect(nomination.get_absolute_url())
-
-
-@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:
-        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
-@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:
-        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:
-        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):
-    motion = get_object_or_404(Motion, pk=motion_id)
-    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:
-        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 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:
-        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())
+# @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')
+
+#     pending_inv_Fellows = RegistrationInvitation.objects.for_fellows().no_response()
+#     declined_inv_Fellows = RegistrationInvitation.objects.for_fellows().declined()
+#     spec_list = SCIPOST_SUBJECT_AREAS  # subject_areas_dict
+#     nomination_form = NominationForm()
+#     nominations = Nomination.objects.filter(VGM=VGM_instance, 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,
+#         'spec_list': spec_list,
+#         '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):
+#     feedback = get_object_or_404(Feedback, pk=feedback_id)
+#     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:
+#         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)
+#     nomination_form = NominationForm(request.POST)
+
+#     if nomination_form.is_valid():
+#         nomination = nomination_form.save(commit=False)
+#         nomination.VGM = VGM_instance
+#         nomination.by = request.user.contributor
+#         nomination.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:
+#         messages.warning(request, 'The form was not filled properly.')
+#     return redirect(VGM_instance.get_absolute_url())
+
+
+# @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)
+#     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:
+#         messages.danger(request, 'The form was invalidly filled.')
+#     return redirect(nomination.get_absolute_url())
+
+
+# @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:
+#         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
+# @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:
+#         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:
+#         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):
+#     motion = get_object_or_404(Motion, pk=motion_id)
+#     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:
+#         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 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:
+#         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