diff --git a/submissions/forms.py b/submissions/forms.py index 1381bff3e7e72b396fefbc536a7704cf791ccee2..1f8fd3188f5c5350ca7c47f358900306e211917f 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -448,6 +448,22 @@ class SubmissionReportsForm(forms.ModelForm): fields = ['pdf_refereeing_pack'] +class BasePreassignEditorsFormSet(forms.BaseModelFormSet): + """Preassign editors for incoming Submission.""" + + def save(self, *args, **kwargs): + objects = super().save(*args, **kwargs) + for form in self.ordered_forms: + form.instance.invitation_order = form.cleaned_data['ORDER'] + form.instance.save() + return objects + + +PreassignEditorsFormSet = forms.modelformset_factory( + EditorialAssignment, fields=(), can_order=True, extra=0, + formset=BasePreassignEditorsFormSet) + + class SubmissionPrescreeningForm(forms.ModelForm): """Processing decision for pre-screening of Submission.""" diff --git a/submissions/managers.py b/submissions/managers.py index bbb289047a34d23fc475b511be7b5cab0b6193ae..f20d1a6c57cc5b5c28dce31f896392b096779368 100644 --- a/submissions/managers.py +++ b/submissions/managers.py @@ -234,7 +234,7 @@ class EditorialAssignmentQuerySet(models.QuerySet): def preassigned(self): return self.filter(status=constants.STATUS_PREASSIGNED) - def open(self): + def invited(self): return self.filter(status=constants.STATUS_INVITED) def ongoing(self): diff --git a/submissions/templates/submissions/admin/submission_presassign_editors.html b/submissions/templates/submissions/admin/submission_presassign_editors.html new file mode 100644 index 0000000000000000000000000000000000000000..9333429c530fdf32a124df3938e566b67da396e2 --- /dev/null +++ b/submissions/templates/submissions/admin/submission_presassign_editors.html @@ -0,0 +1,36 @@ +{% extends 'submissions/admin/base.html' %} + +{% load bootstrap %} + +{% block pagetitle %}: Submission Editors{% endblock pagetitle %} + +{% block breadcrumb_items %} + {{block.super}} + <a href="{% url 'submissions:do_prescreening' submission.arxiv_identifier_w_vn_nr %}" class="breadcrumb-item">Pre-screening {{ submission.arxiv_identifier_w_vn_nr }}</a> + <span class="breadcrumb-item">Pre-assign editors</span> +{% endblock %} + +{% block content %} + + +<h1 class="highlight">Submission Editor pre-assignment</h1> + +<h3 class="highlight">Ordering</h3> + +<form method="post" enctype="multipart/form-data"> + {% csrf_token %} + {{ formset.management_form }} + <ul class="fa-ul sortable-list d-inline-block"> + {% for form in formset %} + <li> + <i class="fa fa-sort"></i> + {{ form.instance.first_name }} {{ form.instance.last_name }} + <div class="d-none">{{ form }}</div> + </li> + {% endfor %} + </ul> + <br> + <input type="submit" class="btn btn-primary" value="Save ordering"> +</form> + +{% endblock %} diff --git a/submissions/urls.py b/submissions/urls.py index 9a708ef1c00f59bd31a110619d7c0a12ee43f752..09ec60eece3420becdc20dabd48bd075ca7d896e 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -37,6 +37,8 @@ urlpatterns = [ url(r'^admin/treated$', views.treated_submissions_list, name='treated_submissions_list'), url(r'^admin/{regex}/prescreening$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), views.PreScreeningView.as_view(), name='do_prescreening'), + url(r'^admin/{regex}/preassign_editors$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + views.preassign_editors, name='preassign_editors'), url(r'^admin/{regex}/reports/compile$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), views.treated_submission_pdf_compile, name='treated_submission_pdf_compile'), url(r'^admin/{regex}/plagiarism$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), diff --git a/submissions/views.py b/submissions/views.py index 79c3db17d15a34455ef3de42826b251aac17cb9d..11d6a78d3d10a5903ad43dc8afab080cd7ce95e0 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -34,7 +34,8 @@ from .forms import ( SetRefereeingDeadlineForm, RefereeSelectForm, iThenticateReportForm, VotingEligibilityForm, RefereeRecruitmentForm, ConsiderRefereeInvitationForm, EditorialCommunicationForm, ReportForm, SubmissionCycleChoiceForm, ReportPDFForm, SubmissionReportsForm, EICRecommendationForm, - SubmissionPoolFilterForm, FixCollegeDecisionForm, SubmissionPrescreeningForm) + SubmissionPoolFilterForm, FixCollegeDecisionForm, SubmissionPrescreeningForm, + PreassignEditorsFormSet) from .utils import SubmissionUtils from colleges.permissions import fellowship_required, fellowship_or_admin_required @@ -1564,6 +1565,26 @@ def remind_Fellows_to_vote(request): return render(request, 'scipost/acknowledgement.html', context) +@permission_required('scipost.can_run_pre_screening', raise_exception=True) +def preassign_editors(request, arxiv_identifier_w_vn_nr): + """Preassign editors for incoming Submission.""" + submission = get_object_or_404( + Submission.objects.prescreening(), arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr) + formset = PreassignEditorsFormSet( + request.POST or None, + queryset=submission.editorial_assignments.order_by('-invitation_order')) + + if formset.is_valid(): + formset.save() + messages.success(request, 'Editors assigned for invitation.') + return redirect('submissoins:do_prescreening') + context = { + 'formset': formset, + 'submission': submission, + } + return render(request, 'submissions/admin/submission_presassign_editors.html', context) + + class PreScreeningView(SubmissionAdminViewMixin, UpdateView): """Do pre-screening of new incoming Submissions."""