From 58356a077412e0afd72b94ab8706ebd6e0485142 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org>
Date: Sun, 18 Dec 2022 10:56:43 +0100
Subject: [PATCH] Rework pool so that edadmin actions occur there

---
 .../_hx_submission_tab_contents_edadmin.html  |  4 +
 ...ncoming.html => _submission_incoming.html} |  0
 scipost_django/edadmin/urls/base.py           |  5 +
 scipost_django/edadmin/views/base.py          | 10 ++
 scipost_django/edadmin/views/incoming.py      |  8 +-
 .../pool/_hx_submission_details.html          | 10 +-
 ...ons_list.html => _hx_submission_list.html} | 12 ++-
 .../submissions/pool/_hx_submission_tab.html  | 92 +++++++++++++++++++
 .../templates/submissions/pool/pool.html      |  2 +-
 scipost_django/submissions/urls/pool.py       |  9 +-
 scipost_django/submissions/views/pool.py      | 17 +++-
 11 files changed, 154 insertions(+), 15 deletions(-)
 create mode 100644 scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html
 rename scipost_django/edadmin/templates/edadmin/{_hx_submission_incoming.html => _submission_incoming.html} (100%)
 rename scipost_django/submissions/templates/submissions/pool/{_hx_submissions_list.html => _hx_submission_list.html} (64%)
 create mode 100644 scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html

diff --git a/scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html b/scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html
new file mode 100644
index 000000000..37830fc59
--- /dev/null
+++ b/scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html
@@ -0,0 +1,4 @@
+<h1>Editorial administration</h1>
+{% if submission.in_stage_incoming %}
+  {% include "edadmin/_submission_incoming.html" with submission=submission %}
+{% endif %}
diff --git a/scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html b/scipost_django/edadmin/templates/edadmin/_submission_incoming.html
similarity index 100%
rename from scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html
rename to scipost_django/edadmin/templates/edadmin/_submission_incoming.html
diff --git a/scipost_django/edadmin/urls/base.py b/scipost_django/edadmin/urls/base.py
index ba6aee73f..a3fd96ea8 100644
--- a/scipost_django/edadmin/urls/base.py
+++ b/scipost_django/edadmin/urls/base.py
@@ -25,6 +25,11 @@ urlpatterns = [
                 base._hx_submission_details_contents,
                 name="_hx_submission_details_contents",
             ),
+            path(
+                "tab/edadmin",
+                base._hx_submission_tab_contents_edadmin,
+                name="_hx_submission_tab_contents_edadmin",
+            ),
         ]),
     ),
 ]
diff --git a/scipost_django/edadmin/views/base.py b/scipost_django/edadmin/views/base.py
index 362e2ae27..5dd3145b5 100644
--- a/scipost_django/edadmin/views/base.py
+++ b/scipost_django/edadmin/views/base.py
@@ -58,3 +58,13 @@ def _hx_submission_details_contents(request, identifier_w_vn_nr):
     )
     context = {"submission": submission,}
     return render(request, "edadmin/_hx_submission_details_contents.html", context)
+
+
+@login_required
+@user_passes_test(is_edadmin)
+def _hx_submission_tab_contents_edadmin(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_tab_contents_edadmin.html", context)
diff --git a/scipost_django/edadmin/views/incoming.py b/scipost_django/edadmin/views/incoming.py
index 49b93715c..81fb2c6fc 100644
--- a/scipost_django/edadmin/views/incoming.py
+++ b/scipost_django/edadmin/views/incoming.py
@@ -56,7 +56,7 @@ def _hx_submission_admissibility(request, identifier_w_vn_nr):
         submission.refresh_from_db()
         # trigger re-rendering of the details-contents div
         response = HttpResponse()
-        response["HX-Trigger"] = f"submission-{submission.pk}-details-updated"
+        response["HX-Trigger"] = f"submission-{submission.pk}-tab-edadmin-updated"
         return response
     context = {"submission": submission, "form": form,}
     return render(request, "edadmin/_hx_submission_admissibility_form.html", context)
@@ -123,7 +123,7 @@ def _hx_plagiarism_internal_assess(request, identifier_w_vn_nr):
     if form.is_valid(): # trigger re-rendering of details-contents div
         assessment = form.save()
         response = HttpResponse()
-        response["HX-Trigger"] = f"submission-{submission.pk}-details-updated"
+        response["HX-Trigger"] = f"submission-{submission.pk}-tab-edadmin-updated"
         return response
     context = {
         "submission": submission,
@@ -173,7 +173,7 @@ def _hx_plagiarism_iThenticate_assess(request, identifier_w_vn_nr):
     if form.is_valid(): # trigger re-rendering of details-contents div
         assessment = form.save()
         response = HttpResponse()
-        response["HX-Trigger"] = f"submission-{submission.pk}-details-updated"
+        response["HX-Trigger"] = f"submission-{submission.pk}-tab-edadmin-updated"
         return response
     context = {
         "submission": submission,
@@ -218,7 +218,7 @@ def _hx_submission_admission(request, identifier_w_vn_nr):
         submission.refresh_from_db()
         # redirect to the edadmin page so that all is refreshed
         response = HttpResponse()
-        response["HX-Redirect"] = reverse("edadmin:edadmin")
+        response["HX-Redirect"] = reverse("submissions:pool:pool")
         return response
     context = {"submission": submission, "form": form,}
     return render(request, "edadmin/_hx_submission_admission_form.html", context)
diff --git a/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html b/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html
index e0e8a32b3..13fedfecd 100644
--- a/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html
+++ b/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html
@@ -8,14 +8,14 @@
 
   </summary>
 
-  <div id="details_{{ submission.id }}"
-       class="mt-2"
-       hx-get="{% url 'submissions:pool:_hx_submission_details_contents' submission.preprint.identifier_w_vn_nr %}"
+  <div id="tabs-{{ submission.id }}"
+       class="m-2 p-2"
+       hx-get="{% url 'submissions:pool:_hx_submission_tab' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='info' %}"
        hx-trigger="toggle once from:#submission-{{ submission.pk }}-details"
-       hx-indicator="#indicator-details-{{ submission.id }}"
+       hx-indicator="#indicator-tabs-{{ submission.id }}"
     >
   </div>
-  <span id="indicator-details-{{ submission.id }}" class="htmx-indicator p-1">
+  <span id="indicator-tabs-{{ submission.id }}" class="htmx-indicator p-1">
     <button class="btn btn-sm btn-warning p-2" type="button" disabled>
       <small><strong>Loading...</strong></small>
       <div class="spinner-grow spinner-grow-sm ms-2" role="status" aria-hidden="true"></div>
diff --git a/scipost_django/submissions/templates/submissions/pool/_hx_submissions_list.html b/scipost_django/submissions/templates/submissions/pool/_hx_submission_list.html
similarity index 64%
rename from scipost_django/submissions/templates/submissions/pool/_hx_submissions_list.html
rename to scipost_django/submissions/templates/submissions/pool/_hx_submission_list.html
index e1d1013e0..1beac9019 100644
--- a/scipost_django/submissions/templates/submissions/pool/_hx_submissions_list.html
+++ b/scipost_django/submissions/templates/submissions/pool/_hx_submission_list.html
@@ -5,7 +5,7 @@
   <strong>No Submission could be found</strong>
 {% endfor %}
 {% if page_obj.has_next %}
-  <div hx-post="{% url 'submissions:pool:_hx_submissions_list' %}?page={{ page_obj.next_page_number }}"
+  <div hx-post="{% url 'submissions:pool:_hx_submission_list' %}?page={{ page_obj.next_page_number }}"
        hx-include="#search-form"
        hx-trigger="revealed"
        hx-swap="afterend"
@@ -19,3 +19,13 @@
     </div>
   </div>
 {% endif %}
+
+{% block footer_script %}
+  <script type="module" nonce="{{ request.csp_nonce }}">
+   import mermaid from 'https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs';
+   mermaid.initialize({ startOnLoad: false });
+   document.body.addEventListener("htmx:afterSettle", function(evt) {
+       mermaid.init(".workflowDiagram");
+   });
+  </script>
+{% endblock footer_script %}
diff --git a/scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html b/scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html
new file mode 100644
index 000000000..4ff6a3d9c
--- /dev/null
+++ b/scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html
@@ -0,0 +1,92 @@
+<ul class="nav nav-pills justify-content-center">
+  <li class="nav-item">
+    <a class="nav-link{% if tab == "info" %} active{% endif %}"
+       hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='info' %}"
+       hx-target="#tabs-{{ submission.id }}"
+    >Submission<br>information</a>
+  </li>
+  <li class="nav-item">
+    <a class="nav-link{% if tab == "refereeing" %} active{% endif %}"
+       hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='refereeing' %}"
+       hx-target="#tabs-{{ submission.id }}"
+    >Refereeing<br>history</a>
+  </li>
+  <li class="nav-item">
+    <a class="nav-link{% if tab == "remarks" %} active{% endif %}"
+       hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='remarks' %}"
+       hx-target="#tabs-{{ submission.id }}"
+    >Remarks</a>
+  </li>
+  <li class="nav-item">
+    <a class="nav-link{% if tab == "graph" %} active{% endif %}"
+       hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='graph' %}"
+       hx-target="#tabs-{{ submission.id }}"
+    >Graph</a>
+  </li>
+  <li class="nav-item">
+    <a class="nav-link{% if tab == "events" %} active{% endif %}"
+       hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='events' %}"
+       hx-target="#tabs-{{ submission.id }}"
+    >Events</a>
+  </li>
+  {% if request.user.contributor.is_ed_admin %}
+    <li class="nav-item">
+      <a class="nav-link{% if tab == "edadmin" %} active{% endif %}"
+	 hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='edadmin' %}"
+	 hx-target="#tabs-{{ submission.id }}"
+      >EdAdmin</a>
+    </li>
+  {% endif %}
+  <li class="nav-item">
+    <a class="nav-link{% if tab == "old" %} active{% endif %}"
+       hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='old' %}"
+       hx-target="#tabs-{{ submission.id }}"
+    >Old version</a>
+  </li>
+</ul>
+<hr>
+<div class="tab-content">
+  {% if tab == "info" %}
+    {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
+
+  {% elif tab == "remarks" %}
+    {% if remark_form %}
+      {% include 'submissions/pool/_remark_form.html' with submission=submission form=remark_form auto_show=1 %}
+    {% endif %}
+    <p class="mb-1">Current remarks:</p>
+    <ul>
+      {% for rem in submission.remarks.all %}
+        {% include 'scipost/_remark_li.html' with remark=rem %}
+      {% empty %}
+        <li>No Remarks found.</li>
+      {% endfor %}
+    </ul>
+
+  {% elif tab == "graph" %}
+    {% include "submissions/_hx_submission_workflow_diagram.html" with submission=submission %}
+
+  {% elif tab == "events" %}
+    <div id="eventslist">
+      {% if request.user.contributor.is_ed_admin %}
+	{% include 'submissions/_submission_events.html' with events=submission.events.for_edadmin %}
+      {% elif request.user.contributor == submission.editor_in_charge %}
+	{% include 'submissions/_submission_events.html' with events=submission.events.for_eic %}
+      {% else %}
+	{% include 'submissions/_submission_events.html' with events=submission.events.for_author %}
+      {% endif %}
+    </div>
+
+  {% elif tab == 'edadmin' and request.user.contributor.is_ed_admin %}
+    <div id="submission-{{ submission.pk }}-tab-contents-edadmin"
+	 hx-get="{% url 'edadmin:_hx_submission_tab_contents_edadmin' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}"
+	 hx-trigger="load, submission-{{ submission.pk }}-tab-edadmin-updated"
+    >
+    </div>
+
+  {% elif tab == "old" %}
+    {% include "submissions/pool/_hx_submission_details_contents.html" with submission=submission %}
+
+  {% else %}
+    Unknown tab
+  {% endif %}
+</div>
diff --git a/scipost_django/submissions/templates/submissions/pool/pool.html b/scipost_django/submissions/templates/submissions/pool/pool.html
index f08c3cea2..c13392abf 100644
--- a/scipost_django/submissions/templates/submissions/pool/pool.html
+++ b/scipost_django/submissions/templates/submissions/pool/pool.html
@@ -81,7 +81,7 @@
     </div>
     <div class="card-body">
       <form
-	  hx-post="{% url 'submissions:pool:_hx_submissions_list' %}"
+	  hx-post="{% url 'submissions:pool:_hx_submission_list' %}"
 	  hx-trigger="load, keyup delay:500ms, change"
 	  hx-target="#search-results"
 	  hx-indicator="#indicator-search"
diff --git a/scipost_django/submissions/urls/pool.py b/scipost_django/submissions/urls/pool.py
index 8c378ec77..63eb273f6 100644
--- a/scipost_django/submissions/urls/pool.py
+++ b/scipost_django/submissions/urls/pool.py
@@ -24,6 +24,11 @@ urlpatterns = [ # building on /submissions/pool/
                 views_pool.pool,
                 name="pool",
             ),
+            path(
+                "tab/<slug:tab>",
+                views_pool._hx_submission_tab,
+                name="_hx_submission_tab",
+            ),
             path(
                 "add_remark",
                 views_pool.add_remark,
@@ -51,8 +56,8 @@ urlpatterns = [ # building on /submissions/pool/
         include([
             path(
                 "",
-                views_pool.pool_hx_submissions_list,
-                name="_hx_submissions_list",
+                views_pool.pool_hx_submission_list,
+                name="_hx_submission_list",
             ),
             path(
                 "<identifier:identifier_w_vn_nr>",
diff --git a/scipost_django/submissions/views/pool.py b/scipost_django/submissions/views/pool.py
index ff5865e5b..616039f2f 100644
--- a/scipost_django/submissions/views/pool.py
+++ b/scipost_django/submissions/views/pool.py
@@ -58,7 +58,7 @@ def pool(request, identifier_w_vn_nr=None):
 
 @login_required
 @fellowship_or_admin_required()
-def pool_hx_submissions_list(request):
+def pool_hx_submission_list(request):
     form = SubmissionPoolSearchForm(request.POST or None, request=request)
     if form.is_valid():
         submissions = form.search_results(request.user)
@@ -70,7 +70,7 @@ def pool_hx_submissions_list(request):
     count = paginator.count
     start_index = page_obj.start_index
     context = {"count": count, "page_obj": page_obj, "start_index": start_index,}
-    return render(request, "submissions/pool/_hx_submissions_list.html", context)
+    return render(request, "submissions/pool/_hx_submission_list.html", context)
 
 
 @login_required
@@ -84,6 +84,19 @@ def pool_hx_submission_details_contents(request, identifier_w_vn_nr):
     return render(request, "submissions/pool/_hx_submission_details_contents.html", context)
 
 
+@login_required
+@fellowship_or_admin_required()
+def _hx_submission_tab(request, identifier_w_vn_nr, tab):
+    submission = get_object_or_404(
+        Submission.objects.in_pool(request.user, historical=True),
+        preprint__identifier_w_vn_nr=identifier_w_vn_nr,
+    )
+    context = {"submission": submission, "tab": tab,}
+    if tab == "remarks":
+        context["remark_form"] = RemarkForm()
+    return render(request, "submissions/pool/_hx_submission_tab.html", context)
+
+
 @login_required
 @fellowship_or_admin_required()
 def add_remark(request, identifier_w_vn_nr):
-- 
GitLab