From a5fdbfcbcbb5a99e1121fa5118fd4d0479c0fd3e Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Thu, 22 Sep 2016 09:26:07 +0200
Subject: [PATCH] Add reg invitation cleanup facilities

---
 .../scipost/registration_invitations.html     |  1 +
 .../registration_invitations_cleanup.html     | 44 +++++++++++++++++++
 scipost/urls.py                               |  5 +++
 scipost/views.py                              | 25 ++++++++++-
 4 files changed, 74 insertions(+), 1 deletion(-)
 create mode 100644 scipost/templates/scipost/registration_invitations_cleanup.html

diff --git a/scipost/templates/scipost/registration_invitations.html b/scipost/templates/scipost/registration_invitations.html
index c1c3509dc..8ef350aec 100644
--- a/scipost/templates/scipost/registration_invitations.html
+++ b/scipost/templates/scipost/registration_invitations.html
@@ -33,6 +33,7 @@
   <div class="flex-greybox">
     <h1>Registration Invitations</h1>
   </div>
+  <h3>Perform a <a href="{% url 'scipost:registration_invitations_cleanup' %}">cleanup</a> of existing invitations.</h3>
 </section>
 <hr class="hr12"/>
 <section>
diff --git a/scipost/templates/scipost/registration_invitations_cleanup.html b/scipost/templates/scipost/registration_invitations_cleanup.html
new file mode 100644
index 000000000..edbb4c85a
--- /dev/null
+++ b/scipost/templates/scipost/registration_invitations_cleanup.html
@@ -0,0 +1,44 @@
+{% extends 'scipost/base.html' %}
+
+{% block pagetitle %}: registration invitations cleanup{% endblock pagetitle %}
+
+{% block bodysup %}
+
+
+<section>
+  <div class="flex-greybox">
+    <h1>Registration Invitations Cleanup</h1>
+  </div>
+</section>
+
+<hr class="hr12"/>
+
+<section>
+  {% if invs_to_cleanup %}
+  <h3>Email duplicates (a contributor exists with the email address in these invitations):</h3>
+  <table class="tableofInvitees">
+    <tr><td>Last name</td><td>First name</td>
+      <td>Email</td><td>Date sent</td>
+      <td>Type</td><td>Invited by</td></tr>
+    {% for inv in invs_to_cleanup %}
+    <tr>
+      <td>{{ inv.last_name }}</td>
+      <td>{{ inv.first_name }}</td>
+      <td>{{ inv.email }}</td>
+      <td>{{ inv.date_sent }} </td>
+      <td>{{ inv.invitation_type }}</td>
+      <td>{{ inv.invited_by.user.last_name }}</td>
+      <td>
+	<a href="{% url 'scipost:remove_registration_invitation' invitation_id=inv.id %}">Remove</a>
+      </td>
+    </tr>
+    {% endfor %}
+  </table>
+  {% else %}
+  <h3>There were no duplicate emails found in the sets of Contributors/Invitations.</h3>
+  {% endif %}
+  <hr class="hr6"/>
+  <h3>Return to the <a href="{% url 'scipost:registration_invitations' %}">Registration Invitations</a> page.</h3>
+</section>
+
+{% endblock bodysup %}
diff --git a/scipost/urls.py b/scipost/urls.py
index f0f88c1c3..65bb7af5a 100644
--- a/scipost/urls.py
+++ b/scipost/urls.py
@@ -62,6 +62,11 @@ urlpatterns = [
         views.vet_registration_request_ack, name='vet_registration_request_ack'),
     url(r'^registration_invitations$', 
         views.registration_invitations, name="registration_invitations"),
+    url(r'^registration_invitations_cleanup$',
+        views.registration_invitations_cleanup,
+        name="registration_invitations_cleanup"),
+    url(r'^remove_registration_invitation/(?P<invitation_id>[0-9]+)$', 
+        views.remove_registration_invitation, name="remove_registration_invitation"),
     url(r'^renew_registration_invitation/(?P<invitation_id>[0-9]+)$', 
         views.renew_registration_invitation, name="renew_registration_invitation"),
     url(r'^registration_invitation_sent$', 
diff --git a/scipost/views.py b/scipost/views.py
index 81425908c..de8dcf17f 100644
--- a/scipost/views.py
+++ b/scipost/views.py
@@ -519,10 +519,33 @@ def registration_invitations(request):
     return render(request, 'scipost/registration_invitations.html', context)
 
 
+@permission_required('scipost.can_manage_registration_invitations', return_403=True)
+def registration_invitations_cleanup(request):
+    """
+    Compares the email addresses of invitations with those in the
+    database of registered Contributors. Flags overlaps.
+    """
+    contributor_email_list = Contributor.objects.values_list('user__email', flat=True)
+    invs_to_cleanup = RegistrationInvitation.objects.filter(
+        responded=False, email__in=contributor_email_list)
+    context = {'invs_to_cleanup': invs_to_cleanup}
+    return render(request, 'scipost/registration_invitations_cleanup.html', context)
+
+
+@permission_required('scipost.can_manage_registration_invitations', return_403=True)
+def remove_registration_invitation(request, invitation_id):
+    """ 
+    Remove an invitation (called from registration_invitations_cleanup).
+    """
+    invitation = get_object_or_404(RegistrationInvitation, pk=invitation_id)
+    invitation.delete()
+    return redirect(reverse('scipost:registration_invitations_cleanup'))
+
+
 @permission_required('scipost.can_manage_registration_invitations', return_403=True)
 def renew_registration_invitation(request, invitation_id):
     """ 
-    Renew an invitation (called from registration_invitations)
+    Renew an invitation (called from registration_invitations).
     """
     invitation = get_object_or_404(RegistrationInvitation, pk=invitation_id)
     Utils.load({'invitation': invitation})
-- 
GitLab