From 6437457d586f255993bcfa1401a7cc0b82001e55 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Tue, 15 Jan 2019 12:08:40 +0100
Subject: [PATCH] Withdrawal button (partial work)

---
 submissions/urls.py  |  5 +++++
 submissions/views.py | 36 +++++++++++++++++++++++++++++++++++-
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/submissions/urls.py b/submissions/urls.py
index a4316aab0..fd984cad9 100644
--- a/submissions/urls.py
+++ b/submissions/urls.py
@@ -68,6 +68,7 @@ urlpatterns = [
     url(r'^admin/reports/(?P<report_id>[0-9]+)/compile$',
         views.report_pdf_compile, name='report_pdf_compile'),
 
+    # Submission, resubmission, withdrawal
     url(r'^resubmit_manuscript$', views.resubmit_manuscript, name='resubmit_manuscript'),
     url(r'^submit_manuscript$', views.prefill_using_arxiv_identifier, name='submit_manuscript'),
     url(r'^submit_manuscript/scipost$',
@@ -76,6 +77,10 @@ urlpatterns = [
         views.RequestSubmissionUsingArXivView.as_view(), name='submit_manuscript_arxiv'),
     url(r'^submit_manuscript/prefill$',
         views.prefill_using_arxiv_identifier, name='prefill_using_identifier'),
+    url(r'^withdraw_manuscript/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX),
+        views.withdraw_manuscript, name='withdraw_manuscript'),
+
+    # Pool
     url(r'^pool/$', views.pool, name='pool'),
     url(r'^pool/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), views.pool, name='pool'),
     url(r'^add_remark/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX),
diff --git a/submissions/views.py b/submissions/views.py
index f9a02b268..d79e49f47 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -58,7 +58,7 @@ from profiles.models import Profile
 from profiles.forms import SimpleProfileForm, ProfileEmailForm
 from scipost.constants import INVITATION_REFEREEING
 from scipost.decorators import is_contributor_user
-from scipost.forms import RemarkForm
+from scipost.forms import RemarkForm, ConfirmationForm
 from scipost.mixins import PaginationMixin
 from scipost.models import Contributor, Remark
 
@@ -222,6 +222,40 @@ def prefill_using_arxiv_identifier(request):
     return render(request, 'submissions/submission_prefill_form.html', context)
 
 
+@login_required
+def withdraw_manuscript(request, identifier_w_vn_nr):
+    """
+    Withdrawal of the submission by one of the submitting authors.
+
+    This method performs the following actions:
+    - makes the Submission and its previous versions publicly invisible
+    - marks any Editorial Assignment as completed, emailing the EIC
+    - deprecates all outstanding refereeing requests (emailing referees)
+    - adds an event for the authors
+
+    GET shows the info/confirm page
+    POST performs the action and returns to the personal page.
+    """
+    submission = get_object_or_404(Submission,
+                                   preprint__identifier_w_vn_nr=identifier_w_vn_nr)
+    is_author = check_verified_author(submission, request.user)
+
+    if not is_author:
+        errormessage = ('You are not marked as an author of this Submission, '
+                        'and thus are not allowed to withdraw it.')
+        return render(request, 'scipost/error.html', {'errormessage': errormessage})
+
+    form = ConfirmationForm(request.POST or None)
+    if form.is_valid():
+        if form.cleaned_data['confirm'] == 'True':
+            messages.success(request, 'Your manuscript has been withdrawn.')
+        else:
+            messages.error(request, 'Withdrawal procedure aborted')
+        return redirect(reverse('scipost:personal_page'))
+    context = {'submission': submission, 'form': form}
+    return render(request, 'submissions/withdraw_manuscript.html')
+
+
 class SubmissionListView(PaginationMixin, ListView):
     """List all publicly available Submissions."""
 
-- 
GitLab