From fab944216e19ee6afc06f4a5377a7eadce6c8ac6 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Sat, 27 Jan 2018 14:18:26 +0100 Subject: [PATCH] Improve EditorialAssignment actions --- scipost/managers.py | 7 ++- scipost/models.py | 4 +- submissions/forms.py | 23 ++++++--- .../submissions/assign_submission.html | 2 +- submissions/urls.py | 2 - submissions/views.py | 51 +++++-------------- 6 files changed, 38 insertions(+), 51 deletions(-) diff --git a/scipost/managers.py b/scipost/managers.py index b16b82034..5ed6efd72 100644 --- a/scipost/managers.py +++ b/scipost/managers.py @@ -18,10 +18,15 @@ class FellowManager(models.Manager): ).order_by('contributor__user__last_name') -class ContributorManager(models.Manager): +class ContributorQuerySet(models.QuerySet): def active(self): return self.filter(user__is_active=True, status=CONTRIBUTOR_NORMAL) + def available(self): + return self.exclude( + unavailability_periods__start__lte=today, + unavailability_periods__end__lte=today) + def awaiting_validation(self): return self.filter(user__is_active=False, status=CONTRIBUTOR_NEWLY_REGISTERED) diff --git a/scipost/models.py b/scipost/models.py index 265d2d9b6..7666fdf99 100644 --- a/scipost/models.py +++ b/scipost/models.py @@ -16,7 +16,7 @@ from .constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS,\ INVITATION_CONTRIBUTOR, INVITATION_FORMAL,\ AUTHORSHIP_CLAIM_PENDING, AUTHORSHIP_CLAIM_STATUS from .fields import ChoiceArrayField -from .managers import FellowManager, ContributorManager, RegistrationInvitationManager,\ +from .managers import FellowManager, ContributorQuerySet, RegistrationInvitationManager,\ UnavailabilityPeriodManager, AuthorshipClaimQuerySet today = timezone.now().date() @@ -61,7 +61,7 @@ class Contributor(models.Model): default=True, verbose_name="I accept to receive SciPost emails") - objects = ContributorManager() + objects = ContributorQuerySet.as_manager() def __str__(self): return '%s, %s' % (self.user.last_name, self.user.first_name) diff --git a/submissions/forms.py b/submissions/forms.py index 3b35663eb..a25a3b502 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -423,16 +423,23 @@ class SubmissionReportsForm(forms.ModelForm): # Editorial workflow # ###################### -class AssignSubmissionForm(forms.Form): +class EditorialAssignmentForm(forms.ModelForm): + class Meta: + model = EditorialAssignment + fields = ('to',) + labels = { + 'to': 'Fellow', + } def __init__(self, *args, **kwargs): - discipline = kwargs.pop('discipline') - super(AssignSubmissionForm, self).__init__(*args, **kwargs) - self.fields['editor_in_charge'] = forms.ModelChoiceField( - queryset=Contributor.objects.filter(user__groups__name='Editorial College', - user__contributor__discipline=discipline, - ).order_by('user__last_name'), - required=True, label='Select an Editor-in-charge') + self.submission = kwargs.pop('submission') + super().__init__(*args, **kwargs) + self.fields['to'].queryset = Contributor.objects.available().filter( + fellowships__pool=self.submission).distinct() + + def save(self, commit=True): + self.instance.submission = self.submission + return super().save(commit) class ConsiderAssignmentForm(forms.Form): diff --git a/submissions/templates/submissions/assign_submission.html b/submissions/templates/submissions/assign_submission.html index ce677a88f..54574a668 100644 --- a/submissions/templates/submissions/assign_submission.html +++ b/submissions/templates/submissions/assign_submission.html @@ -54,7 +54,7 @@ <div class="row mb-md-4"> <div class="col-12"> <h2 class="highlight">Send a new assignment request:</h2> - <form action="{% url 'submissions:assign_submission_ack' arxiv_identifier_w_vn_nr=submission_to_assign.arxiv_identifier_w_vn_nr %}" method="post"> + <form action="{% url 'submissions:assign_submission' arxiv_identifier_w_vn_nr=submission_to_assign.arxiv_identifier_w_vn_nr %}" method="post"> {% csrf_token %} {{ form|bootstrap }} <input class="btn btn-secondary" type="submit" value="Submit" /> diff --git a/submissions/urls.py b/submissions/urls.py index 139dc2528..c840e1c0d 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -51,8 +51,6 @@ urlpatterns = [ # Assignment of Editor-in-charge url(r'^assign_submission/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), views.assign_submission, name='assign_submission'), - url(r'^assign_submission_ack/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.assign_submission_ack, name='assign_submission_ack'), url(r'^pool/assignment_request/(?P<assignment_id>[0-9]+)$', views.assignment_request, name='assignment_request'), url(r'^volunteer_as_EIC/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), diff --git a/submissions/views.py b/submissions/views.py index 5ab6f37ae..ca61186bf 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -27,7 +27,7 @@ from .models import Submission, EICRecommendation, EditorialAssignment,\ RefereeInvitation, Report, SubmissionEvent from .mixins import SubmissionAdminViewMixin from .forms import SubmissionIdentifierForm, RequestSubmissionForm, SubmissionSearchForm,\ - RecommendationVoteForm, ConsiderAssignmentForm, AssignSubmissionForm,\ + RecommendationVoteForm, ConsiderAssignmentForm, EditorialAssignmentForm,\ SetRefereeingDeadlineForm, RefereeSelectForm, RefereeRecruitmentForm,\ ConsiderRefereeInvitationForm, EditorialCommunicationForm,\ EICRecommendationForm, ReportForm, VetReportForm, VotingEligibilityForm,\ @@ -428,48 +428,25 @@ def add_remark(request, arxiv_identifier_w_vn_nr): @login_required @permission_required('scipost.can_assign_submissions', raise_exception=True) def assign_submission(request, arxiv_identifier_w_vn_nr): - """ - Assign Editor-in-charge to Submission. - Action done by SciPost Administration or Editorial College Administration. - """ - submission_to_assign = get_object_or_404(Submission.objects.pool_editable(request.user), - arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr) - form = AssignSubmissionForm(discipline=submission_to_assign.discipline) - context = {'submission_to_assign': submission_to_assign, - 'form': form} - return render(request, 'submissions/assign_submission.html', context) - - -@login_required -@permission_required('scipost.can_assign_submissions', raise_exception=True) -def assign_submission_ack(request, arxiv_identifier_w_vn_nr): """ Assign Editor-in-charge to Submission. Action done by SciPost Administration or Editorial College Administration. """ submission = get_object_or_404(Submission.objects.pool_editable(request.user), arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr) - if request.method == 'POST': - form = AssignSubmissionForm(request.POST, discipline=submission.discipline) - if form.is_valid(): - suggested_editor_in_charge = form.cleaned_data['editor_in_charge'] - # TODO: check for possible co-authorships, disqualifying this suggested EIC - if not suggested_editor_in_charge.is_currently_available: - errormessage = ('This Fellow is marked as currently unavailable. ' - 'Please go back and select another one.') - return render(request, 'scipost/error.html', {'errormessage': errormessage}) - ed_assignment = EditorialAssignment(submission=submission, - to=suggested_editor_in_charge, - date_created=timezone.now()) - ed_assignment.save() - SubmissionUtils.load({'assignment': ed_assignment}) - SubmissionUtils.send_assignment_request_email() - - context = {'ack_header': 'Your assignment request has been sent successfully.', - 'followup_message': 'Return to the ', - 'followup_link': reverse('submissions:pool'), - 'followup_link_label': 'Submissions pool'} - return render(request, 'scipost/acknowledgement.html', context) + form = EditorialAssignmentForm(request.POST or None, submission=submission) + + if form.is_valid(): + ed_assignment = form.save() + SubmissionUtils.load({'assignment': ed_assignment}) + SubmissionUtils.send_assignment_request_email() + messages.success(request, 'Your assignment request has been sent successfully.') + return redirect('submissions:pool') + context = { + 'submission_to_assign': submission, + 'form': form + } + return render(request, 'submissions/assign_submission.html', context) @login_required -- GitLab