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  {% if submission.iThenticate_plagiarism_assessment %} -  {% 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  {% if submission.internal_plagiarism_assessment %} -  {% 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