From 529d77fe5d40a6f1d9f675632db410316c0f45f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org>
Date: Mon, 5 Dec 2022 15:08:45 +0100
Subject: [PATCH] Improve htmx loading

---
 .../edadmin/_hx_plagiarism_iThenticate.html   |  6 +++--
 .../edadmin/_hx_plagiarism_internal.html      |  6 +++--
 .../_hx_submission_details_contents.html      | 15 ++++++++++++
 .../edadmin/_hx_submission_incoming.html      |  4 ++--
 .../edadmin/_hx_submissions_list.html         | 22 ++++++------------
 .../edadmin/templates/edadmin/edadmin.html    | 22 +++++++++---------
 scipost_django/edadmin/urls/incoming.py       |  5 ++++
 scipost_django/edadmin/views/incoming.py      | 10 ++++++++
 scipost_django/submissions/exceptions.py      |  4 ++++
 .../submissions/models/submission.py          | 23 +++++++++++++++++++
 10 files changed, 85 insertions(+), 32 deletions(-)
 create mode 100644 scipost_django/edadmin/templates/edadmin/_hx_submission_details_contents.html

diff --git a/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_iThenticate.html b/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_iThenticate.html
index d64e15803..412354c58 100644
--- a/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_iThenticate.html
+++ b/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_iThenticate.html
@@ -3,9 +3,11 @@
 <details class="border border-2">
   <summary class="bg-primary bg-opacity-10 p-2">
     <h2>
-      iThenticate checks
+      iThenticate checks&emsp;
       {% if submission.iThenticate_plagiarism_assessment %}
-	&emsp;{% include "edadmin/plagiarism_assessment_status_span.html" with assessment=submission.iThenticate_plagiarism_assessment %}
+	{% include "edadmin/plagiarism_assessment_status_span.html" with assessment=submission.iThenticate_plagiarism_assessment %}
+      {% else %}
+	<span class="text-danger">[not started]</span>
       {% endif %}
     </h2>
   </summary>
diff --git a/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_internal.html b/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_internal.html
index 65f30b06c..fd8007b6e 100644
--- a/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_internal.html
+++ b/scipost_django/edadmin/templates/edadmin/_hx_plagiarism_internal.html
@@ -1,9 +1,11 @@
 <details class="border border-2">
   <summary class="bg-primary bg-opacity-10 p-2">
     <h2>
-      Internal plagiarism checks
+      Internal plagiarism checks&emsp;
       {% if submission.internal_plagiarism_assessment %}
-	&emsp;{% include "edadmin/plagiarism_assessment_status_span.html" with assessment=submission.internal_plagiarism_assessment %}
+	{% include "edadmin/plagiarism_assessment_status_span.html" with assessment=submission.internal_plagiarism_assessment %}
+      {% else %}
+	<span class="text-danger">[not started]</span>
       {% endif %}
     </h2>
   </summary>
diff --git a/scipost_django/edadmin/templates/edadmin/_hx_submission_details_contents.html b/scipost_django/edadmin/templates/edadmin/_hx_submission_details_contents.html
new file mode 100644
index 000000000..8bbbb962c
--- /dev/null
+++ b/scipost_django/edadmin/templates/edadmin/_hx_submission_details_contents.html
@@ -0,0 +1,15 @@
+<div class="p-4">
+  <h1>Summary</h1>
+  {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
+
+  {% if submission.in_stage_incoming %}
+    {% include "edadmin/_hx_submission_incoming.html" with submission=submission %}
+  {% endif %}
+
+  <h1>Workflow diagram</h1>
+  <button class="m-2 btn btn-primary workflowDiagram"
+	  id="submission-{{ submission.pk }}-workflow-diagram"
+	  hx-get="{% url 'submissions:_hx_submission_workflow_diagram' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}"
+	  hx-swap="outerHTML"
+  >Load Submission processing workflow graphs</button>
+</div>
diff --git a/scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html b/scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html
index 7d8475628..8f271f21a 100644
--- a/scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html
+++ b/scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html
@@ -3,7 +3,7 @@
   <div id="submission-{{ submission.pk }}-plagiarism-internal"
        class="m-2"
        hx-get="{% url 'edadmin:_hx_plagiarism_internal' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}"
-       hx-trigger="revealed, {{ submission.pk }}-plagiarism-internal-updated"
+       hx-trigger="load, {{ submission.pk }}-plagiarism-internal-updated"
   >
   </div>
 </div>
@@ -11,7 +11,7 @@
   <div id="submission-{{ submission.pk }}-plagiarism-iThenticate"
        class="m-2"
        hx-get="{% url 'edadmin:_hx_plagiarism_iThenticate' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}"
-       hx-trigger="revealed, {{ submission.pk }}-plagiarism-iThenticate-updated"
+       hx-trigger="load, {{ submission.pk }}-plagiarism-iThenticate-updated"
   >
   </div>
 </div>
diff --git a/scipost_django/edadmin/templates/edadmin/_hx_submissions_list.html b/scipost_django/edadmin/templates/edadmin/_hx_submissions_list.html
index 6524664d3..aecc1c005 100644
--- a/scipost_django/edadmin/templates/edadmin/_hx_submissions_list.html
+++ b/scipost_django/edadmin/templates/edadmin/_hx_submissions_list.html
@@ -1,6 +1,8 @@
 {% for submission in submissions %}
 
-  <details class="border border-2 my-2">
+  <details id="submission-{{ submission.pk }}-details"
+	   class="border border-2 my-2"
+  >
     <summary class="px-4 py-2 bg-primary bg-opacity-10">
       <table>
 	<tbody>
@@ -16,20 +18,10 @@
 	</tbody>
       </table>
     </summary>
-    <div class="p-4">
-      <h1>Summary</h1>
-      {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
-
-      {% if phase == "incoming" %}
-	{% include "edadmin/_hx_submission_incoming.html" with submission=submission %}
-      {% endif %}
-
-      <h1>Workflow diagram</h1>
-      <button class="m-2 btn btn-primary workflowDiagram"
-	      id="submission-{{ submission.pk }}-workflow-diagram"
-	      hx-get="{% url 'submissions:_hx_submission_workflow_diagram' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}"
-	      hx-swap="outerHTML"
-      >Load Submission processing workflow graphs</button>
+    <div id="submission-{{ submission.pk }}-details-contents"
+	 hx-get="{% url 'edadmin:_hx_submission_details_contents' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}"
+	 hx-trigger="toggle once from:#submission-{{ submission.pk }}-details"
+    >
     </div>
   </details>
 {% endfor %}
diff --git a/scipost_django/edadmin/templates/edadmin/edadmin.html b/scipost_django/edadmin/templates/edadmin/edadmin.html
index ef28f63b6..c0c132282 100644
--- a/scipost_django/edadmin/templates/edadmin/edadmin.html
+++ b/scipost_django/edadmin/templates/edadmin/edadmin.html
@@ -17,21 +17,21 @@
 {% block content %}
 
 
-  <details class="border border-2 my-4">
+  <details class="border border-2 my-4"
+	   id="incoming-details"
+  >
     <summary class="bg-info px-4 py-2">
       <h1>Incoming</h1>
     </summary>
-    <span class="p-2">
-      <button class="m-2 btn btn-primary"
-	      id="incoming"
-	      hx-get="{% url 'edadmin:_hx_incoming_list' %}"
-	      hx-swap="outerHTML"
-	      hx-indicator="#indicator-submissions-incoming"
-      >Load incoming Submissions</button>
-    </span>
+    <span id="incoming"
+	  hx-get="{% url 'edadmin:_hx_incoming_list' %}"
+	  hx-swap="outerHTML"
+	  hx-trigger="toggle once from:#incoming-details"
+	  hx-indicator="#indicator-submissions-incoming"
+    ></span>
     <span id="indicator-submissions-incoming" class="htmx-indicator">
-      <button class="btn btn-sm btn-warning" type="button" disabled>
-	<strong>Loading...</strong>
+      <button class="m-2 btn btn-sm btn-warning" type="button" disabled>
+	<strong>Loading incoming Submissions...</strong>
 	<div class="spinner-grow spinner-grow-sm ms-2" role="status" aria-hidden="true"></div>
       </button>
     </span>
diff --git a/scipost_django/edadmin/urls/incoming.py b/scipost_django/edadmin/urls/incoming.py
index b3cae05f4..545c11ad2 100644
--- a/scipost_django/edadmin/urls/incoming.py
+++ b/scipost_django/edadmin/urls/incoming.py
@@ -16,6 +16,11 @@ urlpatterns = [
     path(
         "<identifier:identifier_w_vn_nr>/",
         include([
+            path(
+                "_hx_submission_details_contents",
+                incoming._hx_submission_details_contents,
+                name="_hx_submission_details_contents",
+            ),
             path(
                 "_hx_plagiarism_internal",
                 incoming._hx_plagiarism_internal,
diff --git a/scipost_django/edadmin/views/incoming.py b/scipost_django/edadmin/views/incoming.py
index a7038c5bb..f8fcc0288 100644
--- a/scipost_django/edadmin/views/incoming.py
+++ b/scipost_django/edadmin/views/incoming.py
@@ -37,6 +37,16 @@ def _hx_incoming_list(request):
     return render(request, "edadmin/_hx_submissions_list.html", context)
 
 
+@login_required
+@user_passes_test(is_edadmin)
+def _hx_submission_details_contents(request, identifier_w_vn_nr):
+    submission = get_object_or_404(
+        Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr
+    )
+    context = {"submission": submission,}
+    return render(request, "edadmin/_hx_submission_details_contents.html", context)
+
+
 ########################
 # Plagiarism: internal #
 ########################
diff --git a/scipost_django/submissions/exceptions.py b/scipost_django/submissions/exceptions.py
index 3c2a86857..32524ec9b 100644
--- a/scipost_django/submissions/exceptions.py
+++ b/scipost_django/submissions/exceptions.py
@@ -10,6 +10,10 @@ class BaseCustomException(Exception):
         return self.name
 
 
+class StageNotDefinedError(BaseCustomException):
+    pass
+
+
 class CycleUpdateDeadlineError(BaseCustomException):
     pass
 
diff --git a/scipost_django/submissions/models/submission.py b/scipost_django/submissions/models/submission.py
index c4933ce75..fecc0f626 100644
--- a/scipost_django/submissions/models/submission.py
+++ b/scipost_django/submissions/models/submission.py
@@ -37,6 +37,7 @@ from ..constants import (
     EVENT_FOR_EIC,
     SUBMISSION_TIERS,
 )
+from ..exceptions import StageNotDefinedError
 from ..managers import SubmissionQuerySet, SubmissionEventQuerySet
 from ..refereeing_cycles import ShortCycle, DirectCycle, RegularCycle
 
@@ -433,6 +434,28 @@ class Submission(models.Model):
     def in_stage_in_production(self):
         return self.status in self.STAGE_IN_PRODUCTION
 
+    @property
+    def stage(self):
+        if self.in_stage_incoming:
+            return "incoming"
+        elif self.in_stage_preassignment:
+            return "preassignment"
+        elif self.in_stage_assignment:
+            return "assignment"
+        elif self.in_stage_refereeing_in_preparation:
+            return "refereeing_in_preparation"
+        elif self.in_stage_in_refereeing:
+            return "in_refereeing"
+        elif self.in_stage_decisionmaking:
+            return "decisionmaking"
+        elif self.in_stage_decided:
+            return "decided"
+        elif self.in_stage_treated:
+            return "treated"
+        elif self.in_stage_in_production:
+            return "in_production"
+        raise StageNotDefinedError
+
     ###############################################
     # End shortucut properties for stage checking #
     ###############################################
-- 
GitLab