diff --git a/scipost_django/submissions/templates/submissions/pool/_referee_invitations.html b/scipost_django/submissions/templates/submissions/pool/_referee_invitations.html index 0914fed9664c1dcfc9f65dea5c8a775b917a6185..909c90182281d48456aa249140bde4157827275a 100644 --- a/scipost_django/submissions/templates/submissions/pool/_referee_invitations.html +++ b/scipost_django/submissions/templates/submissions/pool/_referee_invitations.html @@ -106,7 +106,17 @@ </td> <td> {% if not invitation.fulfilled %} - <a href="{% url 'submissions:cancel_ref_invitation' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr invitation_id=invitation.id %}">Cancel invitation</a> + <div class="d-flex flex-column justify-contents-between align-center bg-light"> + <button class="btn btn-sm btn-light" + hx-get="{% url 'submissions:_hx_cancel_ref_invitation' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr invitation_id=invitation.id %}" + hx-target="closest div" + hx-include="next input[name='notify_by_email']">Cancel invitation + </button> + <div class="d-flex flex-row justify-content-evenly align-items-center border-secondary border-top py-1"> + <label for="email-checkbox-{{invitation.id}}" class="text-muted">Notify by email?</label> + <input id="email-checkbox-{{invitation.id}}" class="checkbox-lg" type="checkbox" name="notify_by_email" checked/> + </div> + </div> {% endif %} </td> {% else %} diff --git a/scipost_django/submissions/urls/__init__.py b/scipost_django/submissions/urls/__init__.py index 78d80a3b9d0a4aae566669473f8d4c78812b0315..dfa86aff36f12d086d3664dbf29161860ee64b44 100644 --- a/scipost_django/submissions/urls/__init__.py +++ b/scipost_django/submissions/urls/__init__.py @@ -364,9 +364,9 @@ urlpatterns = [ name="ref_invitation_reminder", ), path( - "cancel_ref_invitation/<identifier:identifier_w_vn_nr>/<int:invitation_id>", - views.cancel_ref_invitation, - name="cancel_ref_invitation", + "_hx_cancel_ref_invitation/<identifier:identifier_w_vn_nr>/<int:invitation_id>", + views._hx_cancel_ref_invitation, + name="_hx_cancel_ref_invitation", ), path( "extend_refereeing_deadline/<identifier:identifier_w_vn_nr>/<int:days>", diff --git a/scipost_django/submissions/utils.py b/scipost_django/submissions/utils.py index 412d64e3f27ed031113ee95340a04c714f4c3973..40f32cc85bfbea1808ad96ca34332ac0bd28df72 100644 --- a/scipost_django/submissions/utils.py +++ b/scipost_django/submissions/utils.py @@ -421,7 +421,7 @@ class SubmissionUtils(BaseMailUtil): def send_ref_cancellation_email(cls): """ This method is used to inform a referee that his/her services are no longer required. - It is called from the cancel_ref_invitation method in submissions/views.py. + It is called from the _hx_cancel_ref_invitation method in submissions/views.py. """ email_text = ( "Dear " diff --git a/scipost_django/submissions/views/__init__.py b/scipost_django/submissions/views/__init__.py index 37d4f10647310d145f91b69f41933c3a3f7a896f..67e26e3e7b541bd56ed0af619da48bbb7aeafdda 100644 --- a/scipost_django/submissions/views/__init__.py +++ b/scipost_django/submissions/views/__init__.py @@ -1828,7 +1828,7 @@ def decline_ref_invitation(request, invitation_key): @login_required -def cancel_ref_invitation(request, identifier_w_vn_nr, invitation_id): +def _hx_cancel_ref_invitation(request, identifier_w_vn_nr, invitation_id): """Cancel a RefereeInvitation. This method is used by the Editor-in-charge from the editorial_page to remove a referee @@ -1842,13 +1842,16 @@ def cancel_ref_invitation(request, identifier_w_vn_nr, invitation_id): submission__in=submissions, pk=invitation_id ) except RefereeInvitation.DoesNotExist: - raise Http404 + return HTMXResponse("Invitation not found/accessible", tag="danger") invitation.cancelled = True invitation.save() - SubmissionUtils.load({"invitation": invitation}) - if invitation.date_invited is not None: - SubmissionUtils.send_ref_cancellation_email() + + notify_by_email = request.GET.get("notify_by_email", False) + if notify_by_email: + SubmissionUtils.load({"invitation": invitation}) + if invitation.date_invited is not None: + SubmissionUtils.send_ref_cancellation_email() # Add SubmissionEvents invitation.submission.add_event_for_author( @@ -1858,13 +1861,7 @@ def cancel_ref_invitation(request, identifier_w_vn_nr, invitation_id): "Referee invitation for %s has been cancelled." % invitation.last_name ) - messages.success(request, "Invitation cancelled") - return redirect( - reverse( - "submissions:editorial_page", - kwargs={"identifier_w_vn_nr": identifier_w_vn_nr}, - ) - ) + return HTMXResponse("Invitation cancelled", tag="success") @login_required