From 0c22e982fe2b2510a57f17eb530388407877cb83 Mon Sep 17 00:00:00 2001
From: George Katsikas <giorgakis.katsikas@gmail.com>
Date: Wed, 17 Jul 2024 15:01:23 +0300
Subject: [PATCH] add new referee indications submission step

fixes #172
---
 .../submissions/submission_form.html          |  4 +-
 .../templates/submissions/submit_steps.html   | 10 +++-
 scipost_django/submissions/urls/__init__.py   |  5 ++
 scipost_django/submissions/views/__init__.py  | 48 +++++++++++++++++--
 4 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/scipost_django/submissions/templates/submissions/submission_form.html b/scipost_django/submissions/templates/submissions/submission_form.html
index d22daeb29..6c78f2e57 100644
--- a/scipost_django/submissions/templates/submissions/submission_form.html
+++ b/scipost_django/submissions/templates/submissions/submission_form.html
@@ -22,8 +22,8 @@
 
     <div class="row">
       <div class="col-md-6">
-	<h2 class=highlight>Step 4</h2>
-	<h3>Final step: complete and submit the form</h3>
+	<h2 class="highlight">Step 4</h2>
+	<h3>Fill in the submission details form</h3>
 	<p>We prefilled the form as much as we could, please complete it and then submit.</p>
 
       </div>
diff --git a/scipost_django/submissions/templates/submissions/submit_steps.html b/scipost_django/submissions/templates/submissions/submit_steps.html
index f87183b37..86f6630ee 100644
--- a/scipost_django/submissions/templates/submissions/submit_steps.html
+++ b/scipost_django/submissions/templates/submissions/submit_steps.html
@@ -31,7 +31,15 @@
 	{% if step == 4 %}<span class="text-warning">{% include 'bi/arrow-right-square-fill.html' %}</span>{% endif %}
 	{% if step > 4 %}<span class="text-success">{% include 'bi/check-square-fill.html' %}</span>{% endif %}
       </td>
-      <td>Complete and submit the form</td>
+      <td>Fill in the submission details form</td>
+    </tr>
+    <tr>
+      <td>Step&nbsp;5</td>
+      <td class="text-center">
+  {% if step == 5 %}<span class="text-warning">{% include 'bi/arrow-right-square-fill.html' %}</span>{% endif %}
+	{% if step > 5 %}<span class="text-success">{% include 'bi/check-square-fill.html' %}</span>{% endif %}
+      </td>
+      <td>Indicate potential referees</td>
     </tr>
   </table>
 </div>
diff --git a/scipost_django/submissions/urls/__init__.py b/scipost_django/submissions/urls/__init__.py
index f04bbfc1e..c29affd26 100644
--- a/scipost_django/submissions/urls/__init__.py
+++ b/scipost_django/submissions/urls/__init__.py
@@ -338,6 +338,11 @@ urlpatterns = [
         views.RequestSubmissionUsingOSFPreprintsView.as_view(),
         name="submit_manuscript_osfpreprints",
     ),
+    path(
+        "submit_manuscript/<identifier:identifier_w_vn_nr>/indicate_referees",
+        views.submit_indicate_referees,
+        name="submit_indicate_referees",
+    ),
     path(
         "withdraw_manuscript/<identifier:identifier_w_vn_nr>/",
         views.withdraw_manuscript,
diff --git a/scipost_django/submissions/views/__init__.py b/scipost_django/submissions/views/__init__.py
index 0550f10c2..4364945b2 100644
--- a/scipost_django/submissions/views/__init__.py
+++ b/scipost_django/submissions/views/__init__.py
@@ -319,7 +319,6 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV
     """Formview to submit a new manuscript (Submission)."""
 
     permission_required = "scipost.can_submit_manuscript"
-    success_url = reverse_lazy("scipost:personal_page")
     form_class = SubmissionForm
     template_name = "submissions/submission_form.html"
 
@@ -383,10 +382,11 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV
         kwargs["initial"] = getattr(self, "initial_data", {})
         return kwargs
 
-    @transaction.atomic
+    # @transaction.atomic
     def form_valid(self, form):
         """Redirect and send out mails if all data is valid."""
         submission = form.save()
+        self.submission = submission
 
         submission.add_general_event("Submitted to %s." % str(submission.submitted_to))
 
@@ -412,7 +412,8 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV
                 "authors/acknowledge_submission", submission=submission
             )
             mail_util.send_mail()
-        return HttpResponseRedirect(self.success_url)
+
+        return HttpResponseRedirect(self.get_success_url())
 
     def form_invalid(self, form):
         """Add warnings as messages to make those more explicit."""
@@ -420,6 +421,13 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV
             messages.warning(self.request, *error_messages)
         return super().form_invalid(form)
 
+    def get_success_url(self):
+        """Redirect to the indicate referees step."""
+        return reverse(
+            "submissions:submit_indicate_referees",
+            kwargs={"identifier_w_vn_nr": self.submission.preprint.identifier_w_vn_nr},
+        )
+
 
 class RequestSubmissionUsingSciPostView(RequestSubmissionView):
     """Formview to submit a new Submission using SciPost's preprint server."""
@@ -491,6 +499,40 @@ class RequestSubmissionUsingOSFPreprintsView(RequestSubmissionView):
         return super().get(request, journal_doi_label)
 
 
+@login_required
+@permission_required("scipost.can_submit_manuscript", raise_exception=True)
+def submit_indicate_referees(request, identifier_w_vn_nr):
+    """
+    Inform users of SciPost's unique refereeing process and ask them to indicate referees.
+
+    This page should only be accessible to the submitting author and only before the submission has passed preassignment.
+    Afterwards, visitors should be redirected to the main `indicate_referees` page.
+    """
+
+    submission = get_object_or_404(
+        Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr
+    )
+
+    if (request.user.contributor != submission.submitted_by) and not is_edadmin(
+        request.user
+    ):
+        raise PermissionDenied("You are not the submitting author of this Submission.")
+
+    if submission.status != Submission.INCOMING:
+        return redirect(
+            reverse(
+                "submissions:referee_indications",
+                kwargs={"identifier_w_vn_nr": identifier_w_vn_nr},
+            )
+        )
+
+    context = {
+        "submission": submission,
+    }
+
+    return render(request, "submissions/submit_indicate_referees.html", context)
+
+
 @login_required
 def withdraw_manuscript(request, identifier_w_vn_nr):
     """
-- 
GitLab