From 725fa5cf10f7e3f386ffc2684b292f097c50aeb5 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Sat, 2 Apr 2016 06:24:15 +0200
Subject: [PATCH] Invitations now check if email has already been invited

---
 .../templates/scipost/registration_invitations.html | 13 ++++++++-----
 scipost/utils.py                                    |  8 +++++++-
 scipost/views.py                                    | 13 ++++++++-----
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/scipost/templates/scipost/registration_invitations.html b/scipost/templates/scipost/registration_invitations.html
index e025d595a..b3ba15a6f 100644
--- a/scipost/templates/scipost/registration_invitations.html
+++ b/scipost/templates/scipost/registration_invitations.html
@@ -14,11 +14,14 @@
   <div class="flex-greybox">
     <h2>Send a new invitation:</h2>
   </div>
-    <form action="{% url 'scipost:registration_invitations' %}" method="post">
-      {% csrf_token %}
-      {% load crispy_forms_tags %}
-      {% crispy reg_inv_form %}
-    </form>
+  {% if errormessage %}
+  <h3>{{ errormessage }}</h3>
+  {% endif %}
+  <form action="{% url 'scipost:registration_invitations' %}" method="post">
+    {% csrf_token %}
+    {% load crispy_forms_tags %}
+    {% crispy reg_inv_form %}
+  </form>
 </section>
 <hr class="hr12"/>
 <section>
diff --git a/scipost/utils.py b/scipost/utils.py
index 0f26dbfa7..6e7a2d87b 100644
--- a/scipost/utils.py
+++ b/scipost/utils.py
@@ -9,7 +9,6 @@ from django.utils import timezone
 
 from .models import *
 
-
 class Utils(object):
 
     @classmethod
@@ -38,6 +37,13 @@ class Utils(object):
         else:
             return False
 
+    @classmethod
+    def email_already_invited(cls):
+        if RegistrationInvitation.objects.filter(email_address=cls.reg_inv_form.cleaned_data['email_address']).exists():
+            return True
+        else:
+            return False
+
     @classmethod
     def create_and_save_contributor(cls):
         user = User.objects.create_user (
diff --git a/scipost/views.py b/scipost/views.py
index d06d08850..c51d83819 100644
--- a/scipost/views.py
+++ b/scipost/views.py
@@ -249,15 +249,18 @@ def vet_registration_request_ack(request, contributor_id):
 
 def registration_invitations(request):
     # List invitations sent; send new ones
+    errormessage = ''
     if request.method == 'POST':
         # Send invitation from form information
         reg_inv_form = RegistrationInvitationForm(request.POST)
-        
         Utils.load({'contributor': request.user.contributor, 'reg_inv_form': reg_inv_form})
         if reg_inv_form.is_valid():
-            Utils.create_and_save_invitation()
-            Utils.send_registration_invitation_email()
-            return HttpResponseRedirect('registration_invitation_sent')
+            if Utils.email_already_invited():
+                errormessage = 'DUPLICATE ERROR: This email address has already been used for an invitation'
+            else:
+                Utils.create_and_save_invitation()
+                Utils.send_registration_invitation_email()
+                return HttpResponseRedirect('registration_invitation_sent')
     else:
         reg_inv_form = RegistrationInvitationForm()
     sent_reg_inv_fellows = RegistrationInvitation.objects.filter(invitation_type='F', responded=False).order_by('last_name')
@@ -268,7 +271,7 @@ def registration_invitations(request):
     nr_resp_reg_inv_fellows = resp_reg_inv_fellows.count()
     resp_reg_inv_contrib = RegistrationInvitation.objects.filter(invitation_type='C', responded=True).order_by('last_name')
     nr_resp_reg_inv_contrib = resp_reg_inv_contrib.count()
-    context = {'reg_inv_form': reg_inv_form,
+    context = {'reg_inv_form': reg_inv_form, 'errormessage': errormessage,
                'sent_reg_inv_fellows': sent_reg_inv_fellows, 'nr_sent_reg_inv_fellows': nr_sent_reg_inv_fellows,
                'sent_reg_inv_contrib': sent_reg_inv_contrib, 'nr_sent_reg_inv_contrib': nr_sent_reg_inv_contrib,
                'resp_reg_inv_fellows': resp_reg_inv_fellows, 'nr_resp_reg_inv_fellows': nr_resp_reg_inv_fellows,
-- 
GitLab