From fbcc0c1fb14bdcb41eb23b6b060f56707bd3acf1 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Thu, 8 Jun 2017 10:15:34 +0200
Subject: [PATCH] Hotfix decline link not working

---
 scipost/urls.py      |  5 +++++
 submissions/utils.py |  4 ++--
 submissions/views.py | 25 ++++++++++++-------------
 3 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/scipost/urls.py b/scipost/urls.py
index 5b8809d94..ac5f3ab49 100644
--- a/scipost/urls.py
+++ b/scipost/urls.py
@@ -8,6 +8,7 @@ from .feeds import LatestNewsFeedRSS, LatestNewsFeedAtom, LatestCommentsFeedRSS,
 
 from journals import views as journals_views
 from journals.constants import REGEX_CHOICES
+from submissions import views as submission_views
 
 JOURNAL_REGEX = '(?P<doi_label>%s)' % REGEX_CHOICES
 
@@ -209,4 +210,8 @@ urlpatterns = [
         TemplateView.as_view(template_name='scipost/howto_production.html'),
         name='howto_production'),
 
+    # Temporary fix, due to mails sent with wrong urls
+    url(r'^decline_ref_invitation/(?P<invitation_key>.+)$',
+        submission_views.decline_ref_invitation),
+
 ]
diff --git a/submissions/utils.py b/submissions/utils.py
index 29ed7e85b..bd28833b0 100644
--- a/submissions/utils.py
+++ b/submissions/utils.py
@@ -746,7 +746,7 @@ class SubmissionUtils(BaseMailUtil):
             'we would appreciate a quick accept/decline response from you, '
             'ideally within the next 2 days.\n\n'
             'If you are not able to provide a Report, you can quickly let us know by simply '
-            'navigating to \n\nhttps://scipost.org/decline_ref_invitation/'
+            'navigating to \n\nhttps://scipost.org/submissions/decline_ref_invitation/'
             + cls.invitation.invitation_key + '\n\n'
             'If you are able to provide a Report, you can confirm this after registering '
             'and logging in (you will automatically be prompted for a confirmation). '
@@ -777,7 +777,7 @@ class SubmissionUtils(BaseMailUtil):
             'ideally within the next 2 days.</p>'
             '<p>If you are <strong>not</strong> able to provide a Report, '
             'you can quickly let us know by simply '
-            '<a href="https://scipost.org/decline_ref_invitation/{{ invitation_key }}">'
+            '<a href="https://scipost.org/submissions/decline_ref_invitation/{{ invitation_key }}">'
             'clicking here</a>.</p>'
             '<p>If you are able to provide a Report, you can confirm this after registering '
             'and logging in (you will automatically be prompted for a confirmation). '
diff --git a/submissions/views.py b/submissions/views.py
index a3764b96f..d6f3944bc 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -754,19 +754,18 @@ def accept_or_decline_ref_invitation_ack(request, invitation_id):
 
 
 def decline_ref_invitation(request, invitation_key):
-    invitation = get_object_or_404(RefereeInvitation, invitation_key=invitation_key)
-    if request.method == 'POST':
-        form = ConsiderRefereeInvitationForm(request.POST)
-        if form.is_valid():
-            invitation.accepted = False
-            invitation.refusal_reason = form.cleaned_data['refusal_reason']
-            invitation.save()
-            SubmissionUtils.load({'invitation': invitation}, request)
-            SubmissionUtils.email_referee_response_to_EIC()
-            messages.success(request, 'Thank you for informing us that you will not provide a Report.')
-            return redirect(reverse('scipost:index'))
-    else:
-        form = ConsiderRefereeInvitationForm(initial={'accept': False})
+    invitation = get_object_or_404(RefereeInvitation, invitation_key=invitation_key,
+                                   accepted__isnull=True)
+
+    form = ConsiderRefereeInvitationForm(request.POST or None, initial={'accept': False})
+    if form.is_valid():
+        invitation.accepted = False
+        invitation.refusal_reason = form.cleaned_data['refusal_reason']
+        invitation.save()
+        SubmissionUtils.load({'invitation': invitation}, request)
+        SubmissionUtils.email_referee_response_to_EIC()
+        messages.success(request, 'Thank you for informing us that you will not provide a Report.')
+        return redirect(reverse('scipost:index'))
     context = {'invitation': invitation, 'form': form}
     return render(request, 'submissions/decline_ref_invitation.html', context)
 
-- 
GitLab