From 13b3a0c31592723eb9b1d2f1a619e9917c26c9d0 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Mon, 28 May 2018 07:07:14 +0200
Subject: [PATCH] 5.

---
 submissions/forms.py                          | 16 +++++++++
 submissions/managers.py                       |  2 +-
 .../admin/submission_presassign_editors.html  | 36 +++++++++++++++++++
 submissions/urls.py                           |  2 ++
 submissions/views.py                          | 23 +++++++++++-
 5 files changed, 77 insertions(+), 2 deletions(-)
 create mode 100644 submissions/templates/submissions/admin/submission_presassign_editors.html

diff --git a/submissions/forms.py b/submissions/forms.py
index 1381bff3e..1f8fd3188 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 bbb289047..f20d1a6c5 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 000000000..9333429c5
--- /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 9a708ef1c..09ec60eec 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 79c3db17d..11d6a78d3 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."""
 
-- 
GitLab