diff --git a/scipost/templates/scipost/registration_invitations.html b/scipost/templates/scipost/registration_invitations.html index c1c3509dc2e5d612600b899e4b08372c5054598d..8ef350aec61d5df4fd82ba7818fd9f21704eeb41 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 0000000000000000000000000000000000000000..edbb4c85a5fcd7bcec4fb7705695f283c1c587aa --- /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 f0f88c1c33d4c0ac492f4104f2be18efce491a51..65bb7af5a6f1a35ce75dcf92136bacaca08a162a 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 81425908c623e2cfa6622ee7ae49ef2aa67b5e8d..de8dcf17f4f2dd39780311362b1e9e0908c40c87 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})