From 360e200e95c924aff0e3d619e623f1e97dea77d2 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Thu, 15 Nov 2018 21:37:27 +0100 Subject: [PATCH] Not done. --- notifications/models.py | 2 + submissions/forms.py | 8 +++ submissions/managers.py | 14 +++++ .../submissions/submission_form.html | 3 ++ .../submission_resubmission_candidates.html | 35 +++++++++++++ submissions/urls.py | 1 + submissions/views.py | 52 ++++++++++++++----- 7 files changed, 103 insertions(+), 12 deletions(-) create mode 100644 submissions/templates/submissions/submission_resubmission_candidates.html diff --git a/notifications/models.py b/notifications/models.py index 3f0d1dd55..eb0947cf3 100644 --- a/notifications/models.py +++ b/notifications/models.py @@ -71,6 +71,8 @@ class Notification(models.Model): # of notifications. internal_type = models.CharField(max_length=255, blank=True, choices=NOTIFICATION_TYPES) + url_code = models.CharField(max_length=255, blank=True) + objects = NotificationQuerySet.as_manager() class Meta: diff --git a/submissions/forms.py b/submissions/forms.py index ecce7bf13..7d7ff7be4 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -263,6 +263,10 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm): scipost_identifier = None + resubmission = forms.ModelChoiceField( + # to_field_name='preprint__identifier_w_vn_nr', + queryset=Submission.objects.all(), required=False, widget=forms.HiddenInput()) + identifier_w_vn_nr = forms.CharField(widget=forms.HiddenInput()) arxiv_link = forms.URLField( widget=forms.TextInput(attrs={'placeholder': 'ex.: arxiv.org/abs/1234.56789v1'})) @@ -305,6 +309,10 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm): super().__init__(*args, **kwargs) # Alter resubmission-dependent fields + # self.fields['resubmission'].queryset = Submission.objects.candidate_for_resubmission( + # self.requested_by.contributor) # This is auto-filled by the resubmit_manuscript view. + # r = self.fields['resubmission'].initial = self.fields['resubmission'].queryset.get + # raise if not self.submission_is_resubmission(): # These fields are only available for resubmissions del self.fields['author_comments'] diff --git a/submissions/managers.py b/submissions/managers.py index edb989349..cfbe1afec 100644 --- a/submissions/managers.py +++ b/submissions/managers.py @@ -209,6 +209,20 @@ class SubmissionQuerySet(models.QuerySet): """Return Submissions that have EditorialAssignments that still need to be sent.""" return self.filter(editorial_assignments__status=constants.STATUS_PREASSIGNED) + def candidate_for_resubmission(self, contributor): + """ + Return all Submissions that are open for resubmission specialised + for a certain Contributor. + """ + if not contributor: + return self.none() + + return self.filter(is_current=True, status__in=[ + constants.STATUS_INCOMING, + constants.STATUS_UNASSIGNED, + constants.STATUS_EIC_ASSIGNED, + ], submitted_by=contributor) + class SubmissionEventQuerySet(models.QuerySet): def for_author(self): diff --git a/submissions/templates/submissions/submission_form.html b/submissions/templates/submissions/submission_form.html index 1e314ea13..9306c39b9 100644 --- a/submissions/templates/submissions/submission_form.html +++ b/submissions/templates/submissions/submission_form.html @@ -48,6 +48,9 @@ <p> Please prepare your manuscript according to the <a href="{% url 'submissions:author_guidelines' %}">author guidelines</a>. </p> + {% if form.fields.resubmission %} + {{ form.fields.resubmission.initial }} + {% endif %} </div> </div> diff --git a/submissions/templates/submissions/submission_resubmission_candidates.html b/submissions/templates/submissions/submission_resubmission_candidates.html new file mode 100644 index 000000000..446835d47 --- /dev/null +++ b/submissions/templates/submissions/submission_resubmission_candidates.html @@ -0,0 +1,35 @@ +{% extends 'scipost/base.html' %} + +{% load bootstrap %} + +{% block pagetitle %}: submit manuscript{% endblock pagetitle %} + +{% block content %} + +<div class="row"> + <div class="col-12"> + <form method="post"> + {% csrf_token %} + <h1 class="highlight">Possible Resubmissions</h1> + <p>The system has found {{ submissions|length|pluralize:'a Submission,Submissions' }} for which you are a verified author. If you wish to submit a new version for {{ submissions|length|pluralize:'this Submission,one of these Submissions' }}, please use the "Resubmit this Submission" buttton below.</p> + <ul> + {% for submission in submissions %} + <li class="py-2"> + <strong>{{ submission.title }}</strong> + <br> + {{ submission.author_list }} + <br> + Preprint number: {{ submission.preprint.identifier_w_vn_nr }} + <br> + <button type="submit" name="submission" value="{{ submission.preprint.identifier_w_vn_nr }}"class="btn btn-primary py-1 mt-1">Resubmit this Submission</button> + </li> + {% endfor %} + </ul> + <p> + If you wish to submit a new Submission, please <button type="submit" name="submission" value="new" class="btn btn-primary py-1 mr-1">submit a new Submission here</button>. + </p> + </form> + </div> +</div> + +{% endblock content %} diff --git a/submissions/urls.py b/submissions/urls.py index 9b2f9985c..5591c3ff0 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -68,6 +68,7 @@ urlpatterns = [ url(r'^admin/reports/(?P<report_id>[0-9]+)/compile$', views.report_pdf_compile, name='report_pdf_compile'), + url(r'^resubmit_manuscript$', views.resubmit_manuscript, name='resubmit_manuscript'), url(r'^submit_manuscript$', views.prefill_using_arxiv_identifier, name='submit_manuscript'), url(r'^submit_manuscript/scipost$', views.RequestSubmissionUsingSciPostView.as_view(), name='submit_manuscript_scipost'), diff --git a/submissions/views.py b/submissions/views.py index cb1a21fa7..7b977706e 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -55,16 +55,46 @@ from production.forms import ProofsDecisionForm from profiles.models import Profile from profiles.forms import SimpleProfileForm from scipost.constants import INVITATION_REFEREEING +from scipost.decorators import is_contributor_user from scipost.forms import RemarkForm from scipost.mixins import PaginationMixin from scipost.models import Contributor, Remark -# from notifications.views import is_test_user # Temporarily until release - ############### # SUBMISSIONS: ############### +@login_required +@is_contributor_user() +def resubmit_manuscript(request): + """ + Choose which Submission to resubmit if Submission is available. + + On POST, redirect to submit page. + """ + submissions = get_list_or_404( + Submission.objects.candidate_for_resubmission(request.user.contributor)) + if request.POST and request.POST.get('submission'): + if request.POST['submission'] == 'new': + return redirect(reverse('submissions:submit_manuscript_scipost') + '?resubmission=false') + try: + last_submission = Submission.objects.candidate_for_resubmission( + request.user.contributor).get( + preprint__identifier_w_vn_nr=request.POST['submission']) + extra_param = '?resubmission={}'.format(request.POST['submission']) + + if last_submission.preprint.scipost_preprint_identifier: + # Determine right preprint-view. + return redirect(reverse('submissions:submit_manuscript_scipost') + extra_param) + return redirect(reverse('submissions:submit_manuscript') + extra_param) + except Submission.DoesNotExist: + # POST request invalid. Try again with GET request. + return redirect('submissions:resubmit_manuscript') + context = { + 'submissions': submissions, + } + return render(request, 'submissions/submission_resubmission_candidates.html', context) + class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateView): """Formview to submit a new manuscript (Submission).""" @@ -74,9 +104,6 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV form_class = RequestSubmissionForm template_name = 'submissions/submission_form.html' - # def dispatch(self, *args, **kwargs): - # candidate_for_resubmission - def get_context_data(self, *args, **kwargs): context = super().get_context_data(*args, **kwargs) context['id_SciPostPhys'] = get_object_or_404(Journal, doi_label='SciPostPhys').id @@ -87,8 +114,8 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV """Form requires extra kwargs.""" kwargs = super().get_form_kwargs() kwargs['requested_by'] = self.request.user - if hasattr(self, 'initial_data'): - kwargs['initial'] = self.initial_data + kwargs['initial'] = getattr(self, 'initial_data', {}) + kwargs['initial']['resubmission'] = self.request.GET.get('resubmission') return kwargs @transaction.atomic @@ -143,11 +170,12 @@ class RequestSubmissionUsingArXivView(RequestSubmissionView): class RequestSubmissionUsingSciPostView(RequestSubmissionView): """Formview to submit a new Submission using SciPost's preprint server.""" - def dispatch(self, request, *args, **kwargs): - """TEMPORARY: Not accessible unless in test group.""" - # if not is_test_user(request.user): - # raise Http404 - return super().dispatch(request, *args, **kwargs) + def get(self, request): + """Check for possible Resubmissions before dispatching.""" + if Submission.objects.candidate_for_resubmission(request.user.contributor).exists(): + if not request.GET.get('resubmission'): + return redirect('submissions:resubmit_manuscript') + return super().get(request) def get_form_kwargs(self): """Form requires extra kwargs.""" -- GitLab