diff --git a/scipost/templates/partials/scipost/personal_page/submissions.html b/scipost/templates/partials/scipost/personal_page/submissions.html index dd7b6fcd810c22c0b9bf4f33485c37731e750890..2701c389e787d8ba3c8e40dd7d94afcefe0efbf8 100644 --- a/scipost/templates/partials/scipost/personal_page/submissions.html +++ b/scipost/templates/partials/scipost/personal_page/submissions.html @@ -37,7 +37,12 @@ {% if sub.editor_in_charge %} <li><a href="{% url 'submissions:communication' sub.preprint.identifier_w_vn_nr 'AtoE' %}">Write to the Editor-in-charge</a></li> {% endif %} - <li><a href="{% url 'submissions:withdraw_manuscript' sub.preprint.identifier_w_vn_nr %}"><span class="text-danger">Withdraw</span></a> (leads to confirmation page)</li> + {% if sub.editorial_decision %} + {% if sub.editorial_decision.status == sub.editorial_decision.AWAITING_PUBOFFER_ACCEPTANCE %} + <li><a class="btn btn-primary my-1 px-1 py-0" href="{% url 'submissions:accept_puboffer' sub.preprint.identifier_w_vn_nr %}">Accept offer for publication in {{ sub.editorial_decision.for_journal }} (one-click action)</a></li> + {% endif %} + {% endif %} + <li><ahref="{% url 'submissions:withdraw_manuscript' sub.preprint.identifier_w_vn_nr %}"><span class="text-danger">Withdraw</span> (leads to confirmation page)</a></li> {% endif %} </ul> </p> diff --git a/submissions/constants.py b/submissions/constants.py index a90989f5002a5151d402db72eb230901fcc3b3c9..ec50bdda6fd2e850e9c2cae94fda4c7d24884bef 100644 --- a/submissions/constants.py +++ b/submissions/constants.py @@ -38,7 +38,8 @@ SUBMISSION_STATUS = ( # Submissions which are currently under consideration SUBMISSION_UNDER_CONSIDERATION = [ - STATUS_INCOMING, STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_RESUBMITTED + STATUS_INCOMING, STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_RESUBMITTED, + STATUS_ACCEPTED_AWAITING_PUBOFFER_ACCEPTANCE ] # Submissions with these statuses never have required actions. diff --git a/submissions/forms.py b/submissions/forms.py index 2068934931b5926343e2fb6f7116012fd922e274..b9e48d721f31475a51bfd0ad63a87a9c7e2be31b 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -1249,10 +1249,6 @@ class EICRecommendationForm(forms.ModelForm): kwargs['initial'] = { 'for_journal': latest_recommendation.for_journal, 'recommendation': latest_recommendation.recommendation, - 'remarks_for_authors': latest_recommendation.remarks_for_authors, - 'requested_changes': latest_recommendation.requested_changes, - 'remarks_for_editorial_college': - latest_recommendation.remarks_for_editorial_college, } super().__init__(*args, **kwargs) diff --git a/submissions/templates/partials/submissions/submission_author_information.html b/submissions/templates/partials/submissions/submission_author_information.html index cf010878f4fea8807c053f46031a0644d283834b..c0591c286418b7cfa8b09703606419051d48bd2b 100644 --- a/submissions/templates/partials/submissions/submission_author_information.html +++ b/submissions/templates/partials/submissions/submission_author_information.html @@ -71,14 +71,10 @@ </table> </div> - {% if submission.eicrecommendations.active %} + {% if submission.eicrecommendations %} <div class="mb-4"> <h4 class="mb-2">Editorial Recommendation:</h4> - {% for recommendation in submission.eicrecommendations.active %} - {% include 'partials/submissions/recommendation_author_content.html' with recommendation=recommendation %} - {% empty %} - No Editorial Recommendation has yet been formulated. - {% endfor %} + {% include 'partials/submissions/recommendation_author_content.html' with recommendation=submission.eicrecommendations.last %} </div> {% endif %} diff --git a/submissions/templates/submissions/pool/editorial_page.html b/submissions/templates/submissions/pool/editorial_page.html index eaf4df2cb582b3ebabb5c64a1403671db710d102..26c31c74d65eb784140dd231b09a2e5da8eb8d1c 100644 --- a/submissions/templates/submissions/pool/editorial_page.html +++ b/submissions/templates/submissions/pool/editorial_page.html @@ -53,10 +53,10 @@ {% endif %} <br> - <h3 id="editorial-recommendation">Editorial Recommendation</h3> - {% for recommendation in submission.eicrecommendations.all %} - {% include 'partials/submissions/recommendation_fellow_content.html' with recommendation=recommendation %} - {% endfor %} + {% if submission.eicrecommendations %} + <h3 id="editorial-recommendation">Editorial Recommendation</h3> + {% include 'partials/submissions/recommendation_fellow_content.html' with recommendation=submission.eicrecommendations.last %} + {% endif %} {% if submission.eic_recommendation_required %} <div class="mb-4"> diff --git a/submissions/templates/submissions/submission_detail.html b/submissions/templates/submissions/submission_detail.html index df8dbcee223218d2afa584533304dd4e0fdeca9a..51a20a618f80f7d49fb820dabfd9eaa9ca7036e9 100644 --- a/submissions/templates/submissions/submission_detail.html +++ b/submissions/templates/submissions/submission_detail.html @@ -98,7 +98,18 @@ <h3 class="highlight">Editorial decision</h3> <p>For Journal {{ submission.editorial_decision.for_journal }}: {{ submission.editorial_decision.get_decision_display }}<br>(status: {{ submission.editorial_decision.get_status_display }})</p> {% if is_author and submission.editorial_decision.status == submission.editorial_decision.AWAITING_PUBOFFER_ACCEPTANCE %} - <p>Message from Editorial Administration: we are awaiting your response to the publication offer.</p> + <p> + <strong>We are awaiting your response to the publication offer.</strong> + <br> + You can either accept it, or withdraw your manuscript.</p> + <ul class="list-unstyled"> + <li class="list-item my-1"> + <a class="btn btn-primary" href="{% url 'submissions:accept_puboffer' submission.preprint.identifier_w_vn_nr %}">Accept offer for publication in {{ submission.editorial_decision.for_journal }} (one-click action)</a> + </li> + <li class="list-item my-1"> + <a class="btn btn-danger" href="{% url 'submissions:withdraw_manuscript' submission.preprint.identifier_w_vn_nr %}">Turn down offer and withdraw manuscript (leads to confirmation page)</a> + </li> + </ul> {% endif %} {% endif %} diff --git a/submissions/urls.py b/submissions/urls.py index 91d138031898624f2b7661dce0d9e41d4ab255dd..e6bf6e8db89bfd88f9671f01f1389f1ce51683d3 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -66,7 +66,6 @@ urlpatterns = [ # url(r'^admin/{regex}/recommendations/(?P<rec_id>[0-9]+)$'.format( # regex=SUBMISSIONS_COMPLETE_REGEX), views.EICRecommendationView.as_view(), # name='eic_recommendation_detail'), - # url(r'^admin/{regex}/recommendations/(?P<rec_id>[0-9]+)$'.format( url(r'^admin/{regex}/recommendation$'.format( regex=SUBMISSIONS_COMPLETE_REGEX), views.EICRecommendationDetailView.as_view(), name='eic_recommendation_detail'), @@ -94,6 +93,13 @@ urlpatterns = [ views.fix_editorial_decision, name='fix_editorial_decision' ), + url( + r'^{regex}/accept_puboffer$'.format( + regex=SUBMISSIONS_COMPLETE_REGEX), + views.accept_puboffer, + name='accept_puboffer' + ), + url(r'^admin/reports$', views.reports_accepted_list, name='reports_accepted_list'), url(r'^admin/reports/(?P<report_id>[0-9]+)/compile$', views.report_pdf_compile, name='report_pdf_compile'), diff --git a/submissions/views.py b/submissions/views.py index 0017d4cf31ce65a1ca6942607feaa7bdb3ce308d..a30f360d0b30e2263a04dd690030f25aa4e1cb5a 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -2157,6 +2157,42 @@ def fix_editorial_decision(request, identifier_w_vn_nr): return mail_request.interrupt() +@login_required +def accept_puboffer(request, identifier_w_vn_nr): + """ + Method for authors to accept an outstanding publication offer. + + A publication offer occurs when the relevant College agrees on a + Publish recommendation for a journal which is subsidiary to the one + originally submitted to by the authors. + + This method handles acceptance of this offer by updating the status + of the Submission and of the EditorialDecision. It then redirects to + the personal page. + """ + + submission = get_object_or_404(Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr) + + if request.user.contributor.id != submission.submitted_by.id: + errormessage = ('You are not marked as the submitting author of this Submission, ' + 'and thus are not allowed to take this action.') + if submission.status != STATUS_ACCEPTED_AWAITING_PUBOFFER_ACCEPTANCE: + errormessage = ('This Submission\'s status is incompatible with accepting' + ' a publication offer.') + if errormessage != '': + return render(request, 'scipost/error.html', {'errormessage': errormessage}) + Submission.objects.filter(id=submission.id).update(status=STATUS_ACCEPTED) + EditorialDecision.objects.filter(id=submission.editorialdecision.id).update( + status=EditorialDecision.FIXED_AND_ACCEPTED) + mail_sender = DirectMailUtil( + 'authors/confirm_puboffer_acceptance', submission=submission) + submission.add_general_event('Authors have accepted the publication offer.') + messages.success(request, ('Your acceptance of the publication offer has been registered. ' + 'Congratulations! We will immediately start producing the proofs.')) + return redirect(reverse('scipost:personal_page')) + + + # ATTEMPT: to drop # class EditorialDecisionFixView(PermissionsMixin, UpdateView): # """This fixes the decision and emails the authors.""" diff --git a/templates/email/authors/confirm_puboffer_acceptance.html b/templates/email/authors/confirm_puboffer_acceptance.html new file mode 100644 index 0000000000000000000000000000000000000000..1b6a199130a33fb8202ad7a401917d250267b42b --- /dev/null +++ b/templates/email/authors/confirm_puboffer_acceptance.html @@ -0,0 +1,20 @@ +<p> + Dear {{ submission.submitted_by.get_title_display }} {{ submission.submitted_by.user.last_name }}, +</p> +<p> + We hereby confirm your acceptance of our publication offer of your Submission +</p> +<p>{{ submission.title }}</p> +<p>by {{ submission.author_list }}</p> +<p> + in {{ submission.editorial_decision.for_journal }}. +</p> +<p> + Your manuscript will now be taken charge of by our production team, + which will soon send you proofs to check before final publication. +</p> +<p>Sincerely,</p> +<p>The SciPost Team.</p> +{% include 'email/_footer.html' %} + +{% include 'email/_submission_thread_uuid.html' with submission=submission %} diff --git a/templates/email/authors/confirm_puboffer_acceptance.json b/templates/email/authors/confirm_puboffer_acceptance.json new file mode 100644 index 0000000000000000000000000000000000000000..3b6516881fb4f61c59bdbf9b6a0ebe3a54110a62 --- /dev/null +++ b/templates/email/authors/confirm_puboffer_acceptance.json @@ -0,0 +1,12 @@ +{ + "subject": "SciPost: acceptance of publication offer", + "recipient_list": [ + "submitted_by.user.email" + ], + "bcc": [ + "edadmin@scipost.org", + "editor_in_charge.user.email" + ], + "from_name": "SciPost Editorial Administration", + "from_email": "edadmin@scipost.org" +}