diff --git a/journals/converters.py b/journals/converters.py new file mode 100644 index 0000000000000000000000000000000000000000..1d6f27296beae195770126abdbe447943d0b3e2d --- /dev/null +++ b/journals/converters.py @@ -0,0 +1,14 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from .regexes import JOURNAL_DOI_LABEL_REGEX + +class JournalDOILabelConverter: + regex = JOURNAL_DOI_LABEL_REGEX + + def to_python(self, value): + return value + + def to_url(self, value): + return value diff --git a/journals/managers.py b/journals/managers.py index c875c548faa7441d554efd49003f5a3ddd7b858c..de97b52013092a6e7e861c060bdb2339cfbf49b2 100644 --- a/journals/managers.py +++ b/journals/managers.py @@ -14,6 +14,9 @@ class JournalQuerySet(models.QuerySet): def active(self): return self.filter(active=True) + def submission_allowed(self): + return self.filter(submission_allowed=True) + def has_issues(self): return self.filter(structure__in=(ISSUES_AND_VOLUMES, ISSUES_ONLY)) diff --git a/journals/migrations/0089_journal_submission_allowed.py b/journals/migrations/0089_journal_submission_allowed.py new file mode 100644 index 0000000000000000000000000000000000000000..9b16a01ed767e53c7a6db4887761a230c67b686e --- /dev/null +++ b/journals/migrations/0089_journal_submission_allowed.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.11 on 2020-07-17 12:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('journals', '0088_auto_20200707_1542'), + ] + + operations = [ + migrations.AddField( + model_name='journal', + name='submission_allowed', + field=models.BooleanField(default=True), + ), + ] diff --git a/journals/models/journal.py b/journals/models/journal.py index bdbc5747dc40303a445b2cab7e7015a5ac9f8a11..8b2cea9c9b0b0587513e6ebccadc58c7053675e9 100644 --- a/journals/models/journal.py +++ b/journals/models/journal.py @@ -34,6 +34,7 @@ class Journal(models.Model): validators=[doi_journal_validator]) issn = models.CharField(max_length=16, default='2542-4653', blank=True) active = models.BooleanField(default=True) + submission_allowed = models.BooleanField(default=True) structure = models.CharField(max_length=2, choices=JOURNAL_STRUCTURE, default=ISSUES_AND_VOLUMES) refereeing_period = models.DurationField(default=datetime.timedelta(days=28)) diff --git a/journals/templates/journals/journal_landing_page.html b/journals/templates/journals/journal_landing_page.html index cab396879e563e15c6d094b8d292e0cb777eba41..6f2c5db0f32f350908b09929151bc15ea5d117ba 100644 --- a/journals/templates/journals/journal_landing_page.html +++ b/journals/templates/journals/journal_landing_page.html @@ -59,7 +59,7 @@ </li> {% empty %} <li class="list-group-item"> - <p>All recently accepted Submissions to SciPost Physics have been published.</p> + <p>All recently accepted Submissions to {{ journal }} have been published.</p> </li> {% endfor %} </ul> diff --git a/scipost/converters.py b/scipost/converters.py new file mode 100644 index 0000000000000000000000000000000000000000..f6090bda106f5f3b2625966c499750d3408794d2 --- /dev/null +++ b/scipost/converters.py @@ -0,0 +1,14 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from .constants import DISCIPLINES_REGEX + +class DisciplineConverter: + regex = DISCIPLINES_REGEX + + def to_python(self, value): + return value + + def to_url(self, value): + return value diff --git a/scipost/templates/partials/scipost/personal_page/submissions.html b/scipost/templates/partials/scipost/personal_page/submissions.html index e088270da6bb2595c3b968689093b3baaddbb3e2..1248fa733d9813d913b10352ba855ba322e4944f 100644 --- a/scipost/templates/partials/scipost/personal_page/submissions.html +++ b/scipost/templates/partials/scipost/personal_page/submissions.html @@ -7,7 +7,7 @@ {% if nr_submission_authorships_to_claim > 0 %} <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_submission_authorships_to_claim }})</a></li> {% endif %} - <li><a href="{% url 'submissions:submit_manuscript' %}">Submit an arXiv preprint to a SciPost Journal</a></li> + <li><a href="{% url 'submissions:submit_manuscript' %}">Submit to a SciPost Journal</a></li> </ul> </div> </div> @@ -31,7 +31,7 @@ <p class="card-text mt-1"> <ul> {% if sub.open_for_resubmission %} - <li>To resubmit, go to the <a href="{% url 'submissions:resubmit_manuscript' %}">resubmission page</a></li> + <li><a href="{% url 'submissions:submit_choose_journal' discipline=sub.discipline thread_hash=sub.thread_hash %}"><i class="fa fa-arrow-right"></i> resubmit</a></li> {% endif %} {% if sub.under_consideration %} {% if sub.editor_in_charge %} diff --git a/submissions/admin.py b/submissions/admin.py index bc833ca123c0fb7e50c9072a7518299db057f0c8..3341746ba2b5a52d9e34db04334c90835c64963a 100644 --- a/submissions/admin.py +++ b/submissions/admin.py @@ -11,7 +11,7 @@ from guardian.admin import GuardedModelAdmin from submissions.models import ( Submission, EditorialAssignment, RefereeInvitation, Report, EditorialCommunication, EICRecommendation, SubmissionTiering, AlternativeRecommendation, EditorialDecision, - SubmissionEvent, iThenticateReport) + SubmissionEvent, iThenticateReport, PreprintServer) from scipost.models import Contributor from colleges.models import Fellowship @@ -20,6 +20,9 @@ def submission_short_title(obj): return obj.submission.title[:30] +admin.site.register(PreprintServer) + + class iThenticateReportAdmin(admin.ModelAdmin): list_display = ['doc_id', 'to_submission', 'status'] list_filter = ['status'] diff --git a/submissions/forms.py b/submissions/forms.py index 1d8c0269cc9f03ef83a7009d8a198240d3e9f23a..efa75356dc9093d8f132ee0ed17e68a45a94798a 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -47,7 +47,7 @@ import strings import iThenticate -IDENTIFIER_PATTERN_NEW = r'^[0-9]{4,}\.[0-9]{4,5}v[0-9]{1,2}$' +ARXIV_IDENTIFIER_PATTERN_NEW = r'^[0-9]{4,}\.[0-9]{4,5}v[0-9]{1,2}$' class SubmissionSearchForm(forms.Form): @@ -101,6 +101,7 @@ class SubmissionPoolFilterForm(forms.Form): # Submission and resubmission # ############################### + class SubmissionService: """ Object to run checks for prefiller and submit manuscript forms. @@ -108,37 +109,43 @@ class SubmissionService: metadata = {} - def __init__(self, requested_by, preprint_server, identifier=None, resubmission_of_id=None): + def __init__(self, requested_by, preprint_server, identifier=None, thread_hash=None): self.requested_by = requested_by self.preprint_server = preprint_server self.identifier = identifier - self.resubmission_of_id = resubmission_of_id + self.thread_hash = thread_hash self._arxiv_data = None - @property - def latest_submission(self): - """ - Return latest version of preprint series or None. - """ - if hasattr(self, '_latest_submission'): - return self._latest_submission - - if self.identifier: - # Check if is resubmission when identifier data is submitted. - identifier = self.identifier.rpartition('v')[0] - self._latest_submission = Submission.objects.filter( - preprint__identifier_wo_vn_nr=identifier).order_by( - '-preprint__vn_nr').first() - elif self.resubmission_of_id: - # Resubmission (submission id) is selected by user. - try: - self._latest_submission = Submission.objects.filter( - id=int(self.resubmission_of_id)).order_by('-preprint__vn_nr').first() - except ValueError: - self._latest_submission = None + if self.thread_hash: + # Resubmission + self.latest_submission = Submission.objects.filter( + thread_hash=self.thread_hash).order_by( + '-submission_date', '-preprint__vn_nr').first() else: - self._latest_submission = None - return self._latest_submission + self.latest_submission = None + + # @property + # def latest_submission(self): + # """ + # Return latest version of preprint series or None. + # """ + # if hasattr(self, '_latest_submission'): + # return self._latest_submission + + # # if self.identifier: + # # # Check if is resubmission when identifier data is submitted. + # # identifier = self.identifier.rpartition('v')[0] + # # self._latest_submission = Submission.objects.filter( + # # preprint__identifier_wo_vn_nr=identifier).order_by( + # # '-preprint__vn_nr').first() + # if self.thread_hash: + # # Resubmission + # self._latest_submission = Submission.objects.filter( + # thread_hash=self.thread_hash).order_by( + # '-submission_date', '-preprint__vn_nr').first() + # else: + # self._latest_submission = None + # return self._latest_submission @property def arxiv_data(self): @@ -196,6 +203,7 @@ class SubmissionService: 'subject_area': self.latest_submission.subject_area, 'submitted_to': self.latest_submission.submitted_to, 'submission_type': self.latest_submission.submission_type, + 'thread_hash': self.latest_submission.thread_hash, } return {} @@ -326,7 +334,7 @@ class SubmissionForm(forms.ModelForm): """ Form to submit a new (re)Submission. """ - + thread_hash = forms.UUIDField(required=False) identifier_w_vn_nr = forms.CharField(widget=forms.HiddenInput()) preprint_file = forms.FileField( help_text=('Please submit the processed .pdf (not the source files; ' @@ -376,15 +384,15 @@ class SubmissionForm(forms.ModelForm): def __init__(self, *args, **kwargs): self.requested_by = kwargs.pop('requested_by') self.preprint_server = kwargs.pop('preprint_server', 'arxiv') - self.resubmission_preprint = kwargs['initial'].get('resubmission', False) data = args[0] if len(args) > 1 else kwargs.get('data', {}) identifier = kwargs['initial'].get('identifier_w_vn_nr', None) or data.get('identifier_w_vn_nr') + thread_hash = kwargs['initial'].get('thread_hash', None) self.service = SubmissionService( self.requested_by, self.preprint_server, identifier=identifier, - resubmission_of_id=self.resubmission_preprint) + thread_hash=thread_hash) if self.preprint_server == 'scipost': kwargs['initial'] = self.service.get_latest_submission_data() @@ -537,31 +545,33 @@ class SubmissionForm(forms.ModelForm): return submission -class SubmissionIdentifierForm(forms.Form): +class ArXivPrefillForm(forms.Form): """ - Prefill SubmissionForm using this form that takes an arXiv ID only. + Prefill SubmissionForm using an arXiv identifier with version nr. """ - IDENTIFIER_PLACEHOLDER = 'new style (with version nr) ####.####(#)v#(#)' - identifier_w_vn_nr = forms.RegexField( - label='arXiv identifier with version number', - regex=IDENTIFIER_PATTERN_NEW, strip=True, + label='', + regex=ARXIV_IDENTIFIER_PATTERN_NEW, strip=True, error_messages={'invalid': strings.arxiv_query_invalid}, - widget=forms.TextInput({'placeholder': IDENTIFIER_PLACEHOLDER})) + widget=forms.TextInput() + ) def __init__(self, *args, **kwargs): self.requested_by = kwargs.pop('requested_by') + self.thread_hash = kwargs.pop('thread_hash') + self.journal = Journal.objects.get(doi_label=kwargs.pop('journal_doi_label')) return super().__init__(*args, **kwargs) - def clean_identifier_w_vn_nr(self): """ Do basic prechecks based on the arXiv ID only. """ identifier = self.cleaned_data.get('identifier_w_vn_nr', None) - self.service = SubmissionService(self.requested_by, 'arxiv', identifier=identifier) + self.service = SubmissionService( + self.requested_by, 'arxiv', + identifier=identifier, thread_hash=self.thread_hash) self.service.run_checks() return identifier @@ -579,8 +589,9 @@ class SubmissionIdentifierForm(forms.Form): 'referees_suggested': self.service.latest_submission.referees_suggested, 'secondary_areas': self.service.latest_submission.secondary_areas, 'subject_area': self.service.latest_submission.subject_area, - 'submitted_to': self.service.latest_submission.submitted_to, + 'submitted_to': self.journal, 'submission_type': self.service.latest_submission.submission_type, + 'thread_hash': self.service.latest_submission.thread_hash }) return form_data diff --git a/submissions/migrations/0084_preprintserver.py b/submissions/migrations/0084_preprintserver.py new file mode 100644 index 0000000000000000000000000000000000000000..bcd564dd166e9aeb2864333fa6ed85913a48915f --- /dev/null +++ b/submissions/migrations/0084_preprintserver.py @@ -0,0 +1,26 @@ +# Generated by Django 2.2.11 on 2020-07-17 14:59 + +from django.db import migrations, models +import scipost.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('submissions', '0083_auto_20200627_1944'), + ] + + operations = [ + migrations.CreateModel( + name='PreprintServer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=256)), + ('url', models.URLField()), + ('disciplines', scipost.fields.ChoiceArrayField(base_field=models.CharField(choices=[('Multidisciplinary', (('multidisciplinary', 'Multidisciplinary'),)), ('Formal Sciences', (('mathematics', 'Mathematics'), ('computerscience', 'Computer Science'))), ('Natural Sciences', (('physics', 'Physics'), ('astronomy', 'Astronomy'), ('biology', 'Biology'), ('chemistry', 'Chemistry'), ('earthscience', 'Earth and Environmental Sciences'))), ('Engineering', (('civileng', 'Civil Engineering'), ('electricaleng', 'Electrical Engineering'), ('mechanicaleng', 'Mechanical Engineering'), ('chemicaleng', 'Chemical Engineering'), ('materialseng', 'Materials Engineering'), ('medicaleng', 'Medical Engineering'), ('environmentaleng', 'Environmental Engineering'), ('industrialeng', 'Industrial Engineering'))), ('Medical Sciences', (('medicine', 'Basic Medicine'), ('clinical', 'Clinical Medicine'), ('health', 'Health Sciences'))), ('Agricultural Sciences', (('agricultural', 'Agriculture, Forestry and Fisheries'), ('veterinary', 'Veterinary Science'))), ('Social Sciences', (('economics', 'Economics'), ('geography', 'Geography'), ('law', 'Law'), ('media', 'Media and Communications'), ('pedagogy', 'Pedagogy and Educational Sciences'), ('politicalscience', 'Political Science'), ('psychology', 'Psychology'), ('sociology', 'Sociology'))), ('Humanities', (('art', 'Art (arts, history or arts, performing arts, music)'), ('history', 'History and Archeology'), ('literature', 'Language and Literature'), ('philosophy', 'Philosophy, Ethics and Religion')))], max_length=32), size=None)), + ], + options={ + 'ordering': ['name'], + }, + ), + ] diff --git a/submissions/models/__init__.py b/submissions/models/__init__.py index 39ffd00347ad49919b75abeb89ed14fd9d92678b..aea07c0a851b2ba07232cc2a229ce114176829fb 100644 --- a/submissions/models/__init__.py +++ b/submissions/models/__init__.py @@ -10,6 +10,8 @@ from .assignment import EditorialAssignment from .communication import EditorialCommunication +from .preprint_server import PreprintServer + from .referee_invitation import RefereeInvitation from .report import Report diff --git a/submissions/models/preprint_server.py b/submissions/models/preprint_server.py new file mode 100644 index 0000000000000000000000000000000000000000..801d363d523b7dd19046f2b73660a69fe1e81578 --- /dev/null +++ b/submissions/models/preprint_server.py @@ -0,0 +1,25 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from django.db import models + +from scipost.constants import SCIPOST_DISCIPLINES +from scipost.fields import ChoiceArrayField + + +class PreprintServer(models.Model): + """ + Representation of a SciPost-integrated preprint server which can be used upon submission. + """ + name = models.CharField(max_length=256) + url = models.URLField() + disciplines = ChoiceArrayField( + models.CharField(max_length=32, choices=SCIPOST_DISCIPLINES) + ) + + class Meta: + ordering = ['name',] + + def __str__(self): + return self.name diff --git a/submissions/templates/submissions/submission_prefill_form.html b/submissions/templates/submissions/submission_prefill_form.html index 102eea846db643148331acc0f489b79ff0379ee5..d4b1a82267435da8044b050bdf859df4fd067de8 100644 --- a/submissions/templates/submissions/submission_prefill_form.html +++ b/submissions/templates/submissions/submission_prefill_form.html @@ -33,19 +33,60 @@ {% if perms.scipost.can_submit_manuscript %} + <h2 class="mb-4">Please choose one of the following routes:</h2> + <div class="card-columns"> + {% if expected_resubmissions %} + <div class="card"> + <div class="card-header"> + <h3 class="p-2 bg-primary text-white"><em>Ongoing Submission Stream</em></h3> + <h3>Resubmit</h3> + </div> + <div class="card-body"> + Submissions for which a revision is expected, + and for which you are marked as submitting author: + <ul class="p-2"> + {% for sub in expected_resubmissions %} + <li> + <p class="mb-0"><a href="{{ sub.get_absolute_url }}">{{ sub }}</a></p> + <p><a class="btn btn-outline-primary p-1 mt-0" role="button" href="{% url 'submissions:resubmit_manuscript' identifier_w_vn_nr=sub.preprint.identifier_w_vn_nr %}"><i class="fa fa-arrow-right"></i> resubmit</a></p> + </li> + {% endfor %} + </ul> + </div> + </div> + {% endif %} + <div class="card"> + <div class="card-header"> + <h3 class="p-2 bg-success text-white"><em>New Submission</em></h3> + <h3>Submit via arXiv</h3> + </div> + <div class="card-body"> + <p><em class="text-danger">Please do not use this route for a resubmission!</em></p> + <h3>arXiv identifier for your new Submission</h3> + <p><em>Give the identifier without prefix but with version number, ####.####(#)v#(#)</em></p> + <form action="{% url 'submissions:submit_manuscript' %}" method="post"> + {% csrf_token %} + {{ form }} + <i class="fa fa-arrow-right"></i> + <input type="submit" class="btn btn-outline-success" value="Query arXiv"/> + </form> + </div> + </div> + <div class="card"> + <div class="card-header"> + <h3 class="p-2 bg-success text-white"><em>New Submission</em></h3> + <h3>Submit directly to SciPost</h3> + </div> + <div class="card-body"> + <p><em class="text-danger">Please do not use this route for a resubmission!</em></p> + <a class="btn btn-outline-success" role="button" href="{% url 'submissions:submit_manuscript_scipost' %}"><i class="fa fa-arrow-right"></i> Go to the direct submission form</a> + </div> + </div> + </div> + <div class="row"> <div class="col-12"> <div class="border p-3 bg-light"> - <h3>Please provide the arXiv identifier for your Submission</h3> - <p><em>(give the identifier without prefix but with version number, as per the placeholder)</em></p> - <form action="{% url 'submissions:prefill_using_identifier' %}" method="post"> - {% csrf_token %} - {{ form|bootstrap }} - <input type="submit" class="btn btn-outline-secondary" value="Query arXiv"/> - <br> - <br> - <a href="{% url 'submissions:submit_manuscript_scipost' %}">Submit manuscript without arXiv instead</a> - </form> </div> {% else %} <h3>You are currently not allowed to submit a manuscript.</h3> diff --git a/submissions/templates/submissions/submission_resubmission_candidates.html b/submissions/templates/submissions/submission_resubmission_candidates.html index d166b87a298837491246cae46e8ba87291244735..a288ef9530161c7058cb0fef715c24c6343f92c3 100644 --- a/submissions/templates/submissions/submission_resubmission_candidates.html +++ b/submissions/templates/submissions/submission_resubmission_candidates.html @@ -11,7 +11,7 @@ <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> + <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 associated "Resubmit this Submission" buttton below.</p> <ul> {% for submission in submissions %} <li class="py-2"> @@ -24,7 +24,7 @@ {% if not submission.open_for_resubmission %} <strong class="text-danger">This submission is still undergoing peer refereeing. A resubmission can only be performed after request from the Editor-in-charge. Please wait until the closing of the previous refereeing round and formulation of the Editorial Recommendation before proceeding with a resubmission.</strong> {% else %} - <button type="submit" name="submission" value="{{ submission.id }}"class="btn btn-primary py-1 mt-1">Resubmit this Submission</button> + <button type="submit" name="submission" value="{{ submission.id }}" class="btn btn-primary py-1 mt-1">Resubmit this Submission</button> {% endif %} </li> {% endfor %} diff --git a/submissions/templates/submissions/submit_choose_journal.html b/submissions/templates/submissions/submit_choose_journal.html new file mode 100644 index 0000000000000000000000000000000000000000..de75e388cf3b83f9e9610f71820460715ace3c1a --- /dev/null +++ b/submissions/templates/submissions/submit_choose_journal.html @@ -0,0 +1,69 @@ +{% extends 'submissions/base.html' %} + +{% load static %} +{% load bootstrap %} +{% load journals_extras %} + +{% block headsup %} + <style>{% for journal in journals %}{% if journal.style %}{{ journal.style }}{% endif %}{% endfor %}</style> +{% endblock headsup %} + +{% block pagetitle %}: submit manuscript{% endblock pagetitle %} + +{% block breadcrumb_items %} + {{ block.super }} + <span class="breadcrumb-item">Submit a manuscript</span> +{% endblock %} + +{% block content %} + <div class="row"> + <div class="col-12"> + <h1 class="highlight">Submit a manuscript to SciPost</h1> + </div> + + <div class="col-12"> + <p class="mb-1"> + Before submitting, make sure you agree with the <a href="{% url 'journals:journals_terms_and_conditions' %}">SciPost Journals Terms and Conditions</a>. + </p> + <p class="mb-1"> + You should also make sure you understand the <a href="{% url 'submissions:sub_and_ref_procedure' %}#pwr">refereeing procedure</a> and its open aspect. + </p> + <p class="mb-1"> + In particular, make sure you are familiar with the <a href="{% url 'journals:journals_terms_and_conditions' %}#license_and_copyright_agreement">license and copyright agreement</a> and the <a href="{% url 'journals:journals_terms_and_conditions' %}#author_obligations"> author obligations</a>. + </p> + <p> + Please prepare your manuscript according to the <a href="{% url 'submissions:author_guidelines' %}">author guidelines</a>. + </p> + </div> + </div> + + {% if perms.scipost.can_submit_manuscript %} + + <h2>Which Journal do you wish to submit to?</h2> + <br> + <div class="card-columns"> + {% for journal in journals %} + <div class="card"> + <div class="card-header {{ journal.doi_label }}"> + <h3 class="m-2"><a href="{{ journal.get_absolute_url }}">{{ journal.name }}</a> + {% if journal.has_DOAJ_Seal %} + <a href="https://doaj.org" class="float-right"><img src="{% static 'scipost/images/DOAJ_Seal_logo_big.png' %}" alt="DOAJ Seal" width="20em"></a> + {% endif %} + </h3> + </div> + <div class="card-body"> + <a class="btn btn-outline-primary m-2" role="button" href="{{ journal.get_absolute_url }}/about" target="_blank"><em>View Description, Scope, Content and Acceptance Criteria</em></a> + {% if thread_hash %} + <a class="btn btn-primary m-2" role="button" href="{% url 'submissions:submit_choose_preprint_server' journal_doi_label=journal.doi_label thread_hash=thread_hash %}"><i class="fa fa-arrow-right"></i> Submit to {{ journal.name }}</a> + {% else %} + <a class="btn btn-primary m-2" role="button" href="{% url 'submissions:submit_choose_preprint_server' journal_doi_label=journal.doi_label %}"><i class="fa fa-arrow-right"></i> Submit to {{ journal.name }}</a> + {% endif %} + </div> + </div> + {% endfor %} + </div> + + {% else %} + <h3>You are currently not allowed to submit a manuscript.</h3> + {% endif %} +{% endblock content %} diff --git a/submissions/templates/submissions/submit_choose_preprint_server.html b/submissions/templates/submissions/submit_choose_preprint_server.html new file mode 100644 index 0000000000000000000000000000000000000000..1e558a37b25f772f4d2a09a2397a0e74dab7a839 --- /dev/null +++ b/submissions/templates/submissions/submit_choose_preprint_server.html @@ -0,0 +1,78 @@ +{% extends 'submissions/base.html' %} + +{% load static %} +{% load bootstrap %} +{% load journals_extras %} + +{% block pagetitle %}: submit manuscript{% endblock pagetitle %} + +{% block breadcrumb_items %} + {{ block.super }} + <span class="breadcrumb-item">Submit a manuscript</span> +{% endblock %} + +{% block content %} + <div class="row"> + <div class="col-12"> + <h1 class="highlight">Submit a manuscript to SciPost</h1> + </div> + + <div class="col-12"> + <p class="mb-1"> + Before submitting, make sure you agree with the <a href="{% url 'journals:journals_terms_and_conditions' %}">SciPost Journals Terms and Conditions</a>. + </p> + <p class="mb-1"> + You should also make sure you understand the <a href="{% url 'submissions:sub_and_ref_procedure' %}#pwr">refereeing procedure</a> and its open aspect. + </p> + <p class="mb-1"> + In particular, make sure you are familiar with the <a href="{% url 'journals:journals_terms_and_conditions' %}#license_and_copyright_agreement">license and copyright agreement</a> and the <a href="{% url 'journals:journals_terms_and_conditions' %}#author_obligations"> author obligations</a>. + </p> + <p> + Please prepare your manuscript according to the <a href="{% url 'submissions:author_guidelines' %}">author guidelines</a>. + </p> + </div> + </div> + + {% if perms.scipost.can_submit_manuscript %} + + {% if preprint_servers|length > 1 %} + <h2>Which preprint server do you wish to use?</h2> + {% else %} + <h2>TODO: proceed directly, only SciPost server is available</h2> + {% endif %} + <br> + <div class="card-columns"> + {% for server in preprint_servers %} + <div class="card"> + <div class="card-header"> + <h3>Submit via {{ server }}</h3> + </div> + <div class="card-body"> + {% if server.name == 'SciPost' %} + {% if thread_hash %} + <a class="btn btn-success text-white" role="button" href="{% url 'submissions:submit_manuscript_scipost' journal_doi_label=journal.doi_label thread_hash=thread_hash %}"><i class="fa fa-arrow-right"></i> Go to the SciPost submission form</a> + {% else %} + <a class="btn btn-success text-white" role="button" href="{% url 'submissions:submit_manuscript_scipost' journal_doi_label=journal.doi_label %}"><i class="fa fa-arrow-right"></i> Go to the SciPost submission form</a> + {% endif %} + {% elif server.name == 'arXiv' %} + <h3>arXiv identifier for your Submission</h3> + <p><em>Give the identifier without prefix but with version number, ####.####(#)v#(#)</em></p> + {% if thread_hash %} + <form action="{% url 'submissions:submit_manuscript_arxiv' journal_doi_label=journal.doi_label thread_hash=thread_hash %}" method="get"> + {% else %} + <form action="{% url 'submissions:submit_manuscript_arxiv' journal_doi_label=journal.doi_label %}" method="get"> + {% endif %} + {{ arxiv_query_form }} + <i class="fa fa-arrow-right"></i> + <input type="submit" class="btn btn-success text-white" value="Query arXiv"/> + </form> + {% endif %} + </div> + </div> + {% endfor %} + </div> + + {% else %} + <h3>You are currently not allowed to submit a manuscript.</h3> + {% endif %} +{% endblock content %} diff --git a/submissions/templates/submissions/submit_manuscript.html b/submissions/templates/submissions/submit_manuscript.html new file mode 100644 index 0000000000000000000000000000000000000000..d4c1a8959eb62b4e57172aadb5956433f9aa9dea --- /dev/null +++ b/submissions/templates/submissions/submit_manuscript.html @@ -0,0 +1,113 @@ +{% extends 'submissions/base.html' %} + +{% load bootstrap %} +{% load journals_extras %} + +{% block pagetitle %}: submit manuscript{% endblock pagetitle %} + +{% block breadcrumb_items %} + {{ block.super }} + <span class="breadcrumb-item">Submit a manuscript</span> +{% endblock %} + +{% block content %} + <div class="row"> + <div class="col-12"> + <h1 class="highlight">Submit a manuscript to SciPost</h1> + </div> + + <div class="col-12"> + <p class="mb-1"> + Before submitting, make sure you agree with the <a href="{% url 'journals:journals_terms_and_conditions' %}">SciPost Journals Terms and Conditions</a>. + </p> + <p class="mb-1"> + You should also make sure you understand the <a href="{% url 'submissions:sub_and_ref_procedure' %}#pwr">refereeing procedure</a> and its open aspect. + </p> + <p class="mb-1"> + In particular, make sure you are familiar with the <a href="{% url 'journals:journals_terms_and_conditions' %}#license_and_copyright_agreement">license and copyright agreement</a> and the <a href="{% url 'journals:journals_terms_and_conditions' %}#author_obligations"> author obligations</a>. + </p> + <p> + Please prepare your manuscript according to the <a href="{% url 'submissions:author_guidelines' %}">author guidelines</a>. + </p> + </div> + </div> + + {% if perms.scipost.can_submit_manuscript %} + + <h2 class="mb-4">Please choose one of the following routes:</h2> + <div class="card-columns"> + {% if resubmission_candidates %} + <div class="card"> + <div class="card-header bg-primary text-white"> + <h3 class="p-2 m-0"><em>Resubmit</em></h3> + </div> + <div class="card-body"> + <p>The system has found {{ resubmission_candidates|length|pluralize:'a Submission,Submissions' }} currently under evaluation, for which you are a verified author. If you wish to submit a new version of {{ resubmission_candidates|length|pluralize:'this Submission,one of these Submissions' }}, please use the associated "Resubmit" buttton below.</p> + <ul class="px-3 py-2"> + {% for submission in resubmission_candidates %} + <li> + <a href="{{ submission.get_absolute_url }}">{{ submission.title }}</a> + <br> + {{ submission.author_list }} + <br> + Preprint {{ submission.preprint.identifier_w_vn_nr }} + <br> + {% if not submission.open_for_resubmission %} + <strong class="text-warning">This submission is still undergoing peer refereeing. Please wait until the closing of the previous refereeing round and formulation of the Editorial Recommendation before proceeding with a resubmission.</strong> + {% else %} + <a class="btn btn-outline-primary p-1 mt-0" role="button" href="{% url 'submissions:submit_choose_journal' discipline=submission.discipline thread_hash=submission.thread_hash %}"><i class="fa fa-arrow-right"></i> Resubmit</a> + {% endif %} + </li> + {% endfor %} + </ul> + </div> + </div> + {% endif %} + + + <div class="card"> + <div class="card-header bg-success text-white"> + <h3 class="p-2 m-0">New Submission</h3> + </div> + <div class="card-body"> + {% for branch in scipost_disciplines %} + {% with journals|journals_in_branch:branch.0 as journals_branch %} + {% if journals_branch|length > 0%} + <h3>{{ branch.0 }}</h3> + <ul class="list list-unstyled"> + {% for discipline in branch.1 %} + {% with journals_branch|journals_in_discipline:discipline.0 as journals_disc %} + {% if journals_disc|length > 0 %} + <li class="list-unstyled-item m-2"><a class="btn btn-success text-white" role="button" href="{% url 'submissions:submit_choose_journal' discipline=discipline.0 %}"><i class="fa fa-arrow-right"></i> New submission in {{ discipline.1 }}</a></li> + {% endif %} + {% endwith %} + {% endfor %} + </ul> + {% endif %} + {% endwith %} + {% endfor %} + </div> + </div> + + <!-- <div class="card"> + <div class="card-header"> + <h3 class="p-2 bg-success text-white"><em>New Submission</em></h3> + <h3>Submit an arXiv preprint</h3> + </div> + <div class="card-body"> + </div> + </div> + <div class="card"> + <div class="card-header"> + <h3 class="p-2 bg-success text-white"><em>New Submission</em></h3> + <h3>Submit directly to SciPost</h3> + </div> + <div class="card-body"> + </div> + </div> + </div> --> + + {% else %} + <h3>You are currently not allowed to submit a manuscript.</h3> + {% endif %} +{% endblock content %} diff --git a/submissions/tests/test_views.py b/submissions/tests/test_views.py index 3e9ef75edfe697a04f05e8aab871afcc04bcee97..aabb128d266273f1720200a6aed0ed41a02de3ab 100644 --- a/submissions/tests/test_views.py +++ b/submissions/tests/test_views.py @@ -16,7 +16,7 @@ from ..factories import UnassignedSubmissionFactory, EICassignedSubmissionFactor ResubmittedSubmissionFactory, ResubmissionFactory,\ PublishedSubmissionFactory, DraftReportFactory,\ AcceptedRefereeInvitationFactory -from ..forms import SubmissionIdentifierForm, ReportForm, SubmissionForm +from ..forms import ArXivPrefillForm, ReportForm, SubmissionForm from ..models import Submission, Report, RefereeInvitation from journals.models import Journal @@ -69,11 +69,11 @@ class BaseContributorTestCase(TestCase): ) -class PrefillUsingIdentifierTest(BaseContributorTestCase): +class PrefillUsingArXivIdentifierTest(BaseContributorTestCase): def setUp(self): super().setUp() self.client = Client() - self.url = reverse('submissions:prefill_using_identifier') + self.url = reverse('submissions:submit_manuscript') self.assertTrue(self.client.login(username="Test", password="testpw")) # NOTED AS BROKEN 2019-11-08 @@ -89,7 +89,7 @@ class PrefillUsingIdentifierTest(BaseContributorTestCase): # # Registered Contributor should get 200 # response = self.client.get(self.url) - # self.assertIsInstance(response.context['form'], SubmissionIdentifierForm) + # self.assertIsInstance(response.context['form'], ArXivPrefillForm) # self.assertFalse(response.context['form'].is_valid()) # self.assertEqual(response.status_code, 200) @@ -136,13 +136,13 @@ class PrefillUsingIdentifierTest(BaseContributorTestCase): # client = Client() # # Unauthorized request shouldn't be possible -# response = client.post(reverse('submissions:prefill_using_identifier'), +# response = client.post(reverse('submissions:submit_manuscript'), # {'identifier': TEST_SUBMISSION['identifier_w_vn_nr']}) # self.assertEqual(response.status_code, 403) # # Registered Contributor should get 200; assuming prefiller is working properly # self.assertTrue(client.login(username="Test", password="testpw")) -# response = client.post(reverse('submissions:prefill_using_identifier'), +# response = client.post(reverse('submissions:submit_manuscript'), # {'identifier': TEST_SUBMISSION['identifier_w_vn_nr']}) # self.assertEqual(response.status_code, 200) @@ -184,7 +184,7 @@ class PrefillUsingIdentifierTest(BaseContributorTestCase): # # Eventually this call should already give an error. Waiting for # # Arxiv caller which is under construction [Jorran de Wit, 12 May 2017] # self.assertTrue(client.login(username="Test", password="testpw")) - # response = client.post(reverse('submissions:prefill_using_identifier'), + # response = client.post(reverse('submissions:submit_manuscript'), # {'identifier': '1603.04689v1'}) # self.assertEqual(response.status_code, 200) diff --git a/submissions/urls.py b/submissions/urls.py index 01c0c54101092c8817855d00fb31db4775db2c6f..d6f13fdd3be11b967084f7eca3ef99497c97edef 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -3,14 +3,23 @@ __license__ = "AGPL v3" from django.conf.urls import url -from django.urls import path +from django.urls import path, register_converter from django.views.generic import TemplateView +from scipost.constants import DISCIPLINES_REGEX +from scipost.converters import DisciplineConverter +from journals.converters import JournalDOILabelConverter +from journals.regexes import JOURNAL_DOI_LABEL_REGEX + from . import views from .constants import SUBMISSIONS_NO_VN_REGEX, SUBMISSIONS_COMPLETE_REGEX app_name = 'submissions' +register_converter(DisciplineConverter, 'discipline') +register_converter(JournalDOILabelConverter, 'journal_doi_label') + + urlpatterns = [ # Autocomplete path( @@ -120,16 +129,62 @@ urlpatterns = [ views.report_pdf_compile, name='report_pdf_compile'), # Submission, resubmission, withdrawal - 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'), - url(r'^submit_manuscript/arxiv$', - views.RequestSubmissionUsingArXivView.as_view(), name='submit_manuscript_arxiv'), - url(r'^submit_manuscript/prefill$', - views.prefill_using_arxiv_identifier, name='prefill_using_identifier'), - url(r'^withdraw_manuscript/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), - views.withdraw_manuscript, name='withdraw_manuscript'), + path( # Start a new submission process; choose between resubmission or new submission + 'submit_manuscript', + views.submit_manuscript, + name='submit_manuscript' + ), + path( # Choose journal + 'submit/<discipline:discipline>', + views.submit_choose_journal, + name='submit_choose_journal' + ), + path( # Choose journal (resubmission) + 'submit/<discipline:discipline>/<uuid:thread_hash>', + views.submit_choose_journal, + name='submit_choose_journal' + ), + path( # Choose preprint server + 'submit/<journal_doi_label:journal_doi_label>', + views.submit_choose_preprint_server, + name='submit_choose_preprint_server' + ), + path( # Choose preprint server (resubmission) + 'submit/<journal_doi_label:journal_doi_label>/<uuid:thread_hash>', + views.submit_choose_preprint_server, + name='submit_choose_preprint_server' + ), + + path( # Submit using the SciPost preprint server (new submission) + 'submit_manuscript/<journal_doi_label:journal_doi_label>/scipost', + views.RequestSubmissionUsingSciPostView.as_view(), + name='submit_manuscript_scipost' + ), + path( # Submit using the SciPost preprint server (resubmission) + 'submit_manuscript/<journal_doi_label:journal_doi_label>/scipost/<uuid:thread_hash>', + views.RequestSubmissionUsingSciPostView.as_view(), + name='submit_manuscript_scipost' + ), + path( # Submit or resubmit using arXiv + 'submit_manuscript/<journal_doi_label:journal_doi_label>/arxiv', + views.RequestSubmissionUsingArXivView.as_view(), + name='submit_manuscript_arxiv' + ), + path( # Submit or resubmit using arXiv (resubmission) + 'submit_manuscript/<journal_doi_label:journal_doi_label>/arxiv/<uuid:thread_hash>', + views.RequestSubmissionUsingArXivView.as_view(), + name='submit_manuscript_arxiv' + ), + url( # Redirects to the appropriate Submit page, prefilling form + r'^resubmit_manuscript/{regex}$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + views.resubmit_manuscript, + name='resubmit_manuscript' + ), + url( + r'^withdraw_manuscript/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX), + views.withdraw_manuscript, + name='withdraw_manuscript' + ), # Pool url(r'^pool/$', views.pool, name='pool'), diff --git a/submissions/views.py b/submissions/views.py index dfc14d062b130b063c9ddfbd81c5c64fd79fc106..c9098fb8a76761a195e01e2140ee13a7383bc570 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -34,12 +34,13 @@ from .constants import ( EIC_REC_PUBLISH, EIC_REC_REJECT, DECISION_FIXED) from .helpers import check_verified_author, check_unverified_author from .models import ( - Submission, EICRecommendation, SubmissionTiering, AlternativeRecommendation, + Submission, PreprintServer, + EICRecommendation, SubmissionTiering, AlternativeRecommendation, EditorialDecision, EditorialAssignment, RefereeInvitation, Report, SubmissionEvent) from .mixins import SubmissionMixin, SubmissionAdminViewMixin from .forms import ( - SubmissionIdentifierForm, SubmissionForm, SubmissionSearchForm, RecommendationVoteForm, + ArXivPrefillForm, SubmissionForm, SubmissionSearchForm, RecommendationVoteForm, ConsiderAssignmentForm, InviteEditorialAssignmentForm, EditorialAssignmentForm, VetReportForm, SetRefereeingDeadlineForm, RefereeSearchForm, iThenticateReportForm, VotingEligibilityForm, WithdrawSubmissionForm, @@ -116,39 +117,83 @@ class SubmissionAutocompleteView(autocomplete.Select2QuerySetView): ############### # SUBMISSIONS: ############### + @login_required -@is_contributor_user() -def resubmit_manuscript(request): +@permission_required('scipost.can_submit_manuscript', raise_exception=True) +def submit_manuscript(request): """ - Choose which Submission to resubmit if Submission is available. - - On POST, redirect to submit page. + Initiate submission by choosing either resubmission or new submission process. """ - submissions = get_list_or_404( - Submission.objects.candidate_for_resubmission(request.user)) - if request.POST and request.POST.get('submission'): - if request.POST['submission'] == 'new': - return redirect(reverse('submissions:submit_manuscript_scipost') + '?resubmission=false') + # For each integrated preprint server, redirect to appropriate view + context = { + 'journals': Journal.objects.submission_allowed(), + 'resubmission_candidates': Submission.objects.candidate_for_resubmission(request.user) + } + return render(request, 'submissions/submit_manuscript.html', context) - last_submission = Submission.objects.candidate_for_resubmission(request.user).filter( - id=request.POST['submission']).first() - if last_submission: - if last_submission.preprint.scipost_preprint_identifier: - # Determine right preprint-view. - extra_param = '?resubmission={}'.format(request.POST['submission']) - return redirect(reverse('submissions:submit_manuscript_scipost') + extra_param) - else: - extra_param = '?identifier_w_vn_nr={}'.format( - last_submission.preprint.identifier_w_vn_nr) - return redirect(reverse('submissions:submit_manuscript') + extra_param) +@login_required +@permission_required('scipost.can_submit_manuscript', raise_exception=True) +def submit_choose_journal(request, discipline=None, thread_hash=None): + journals = Journal.objects.submission_allowed() + if discipline: + journals = journals.filter(discipline=discipline) + context = { + 'journals': journals, + } + if thread_hash: + context['thread_hash'] = thread_hash + return render(request, 'submissions/submit_choose_journal.html', context) + + +@login_required +@permission_required('scipost.can_submit_manuscript', raise_exception=True) +def submit_choose_preprint_server(request, journal_doi_label, thread_hash=None): + journal = get_object_or_404(Journal, doi_label=journal_doi_label) + preprint_servers = PreprintServer.objects.filter(disciplines__contains=[journal.discipline]) + arxiv_query_form = ArXivPrefillForm( + requested_by=request.user, thread_hash=thread_hash, journal_doi_label=journal_doi_label) + context = { + 'journal': journal, + 'preprint_servers': preprint_servers, + 'arxiv_query_form': arxiv_query_form, + } + if thread_hash: + context['thread_hash'] = thread_hash + return render(request, 'submissions/submit_choose_preprint_server.html', context) + + +@login_required +@permission_required('scipost.can_submit_manuscript', raise_exception=True) +def submit_manuscript_DEPREC(request): + """Form view asking for the arXiv ID related to the new Submission to submit.""" + query_form = ArXivPrefillForm( + request.POST or None, initial=request.GET or None, + requested_by=request.user) + + if query_form.is_valid(): + # Submit message to user + if query_form.service.is_resubmission(): + resubmessage = ('There already exists a preprint with this arXiv identifier ' + 'but a different version number. \nYour Submission will be ' + 'handled as a resubmission.') + messages.success(request, resubmessage, fail_silently=True) else: - # POST request invalid. Try again with GET request. - return redirect('submissions:resubmit_manuscript') + messages.success(request, strings.acknowledge_arxiv_query, fail_silently=True) + + response = redirect('submissions:submit_manuscript_arxiv') + response['location'] += '?identifier_w_vn_nr={}'.format( + query_form.cleaned_data['identifier_w_vn_nr']) + return response + context = { - 'submissions': submissions, + 'form': query_form, + 'expected_resubmissions': \ + #request.user.contributor.submitted_submissions.revision_requested() + Submission.objects.public_newest().revision_requested()[:4] + #Submission.objects.candidate_for_resubmission(request.user) } - return render(request, 'submissions/submission_resubmission_candidates.html', context) + return render(request, 'submissions/submission_prefill_form.html', context) class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateView): @@ -206,19 +251,35 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV class RequestSubmissionUsingArXivView(RequestSubmissionView): """Formview to submit a new Submission using arXiv.""" - def get(self, request): + def get(self, request, journal_doi_label, thread_hash=None): """ Redirect to the arXiv prefill form if arXiv ID is not known. """ - form = SubmissionIdentifierForm(request.GET or None, requested_by=self.request.user) + form = ArXivPrefillForm( + request.GET or None, + requested_by=self.request.user, + journal_doi_label=journal_doi_label, + thread_hash=thread_hash) if form.is_valid(): + if form.service.is_resubmission(): + resubmessage = ('An earlier preprint was found within this submission thread.' + '\nYour Submission will be handled as a resubmission.') + messages.success(request, resubmessage, fail_silently=True) + else: + messages.success(request, strings.acknowledge_arxiv_query, fail_silently=True) # Gather data from ArXiv API if prefill form is valid self.initial_data = form.get_initial_submission_data() return super().get(request) else: for code, err in form.errors.items(): messages.warning(request, err[0]) - return redirect('submissions:prefill_using_identifier') + kwargs = { 'journal_doi_label': journal_doi_label } + if thread_hash: + kwargs['thread_hash'] = thread_hash + return redirect( + 'submissions:submit_choose_preprint_server', + **kwargs + ) def get_form_kwargs(self): """Form requires extra kwargs.""" @@ -230,47 +291,51 @@ class RequestSubmissionUsingArXivView(RequestSubmissionView): class RequestSubmissionUsingSciPostView(RequestSubmissionView): """Formview to submit a new Submission using SciPost's preprint server.""" - def get(self, request): - """Check for possible Resubmissions before dispatching.""" - if Submission.objects.candidate_for_resubmission(request.user).exists(): - if not request.GET.get('resubmission'): - return redirect('submissions:resubmit_manuscript') + def get(self, request, journal_doi_label, thread_hash=None): return super().get(request) def get_form_kwargs(self): """Form requires extra kwargs.""" kwargs = super().get_form_kwargs() - # kwargs['use_arxiv_preprint'] = False + if hasattr(self, 'thread_hash'): + kwargs['initial']['thread_hash'] = self.thread_hash kwargs['preprint_server'] = 'scipost' return kwargs @login_required -@permission_required('scipost.can_submit_manuscript', raise_exception=True) -def prefill_using_arxiv_identifier(request): - """Form view asking for the arXiv ID related to the new Submission to submit.""" - query_form = SubmissionIdentifierForm(request.POST or None, initial=request.GET or None, - requested_by=request.user) +@is_contributor_user() +def resubmit_manuscript(request, identifier_w_vn_nr): + """ + Choose which Submission to resubmit if Submission is available. - if query_form.is_valid(): - # Submit message to user - if query_form.service.is_resubmission(): - resubmessage = ('There already exists a preprint with this arXiv identifier ' - 'but a different version number. \nYour Submission will be ' - 'handled as a resubmission.') - messages.success(request, resubmessage, fail_silently=True) - else: - messages.success(request, strings.acknowledge_arxiv_query, fail_silently=True) + On POST, redirect to submit page. + """ + submissions = get_list_or_404( + Submission.objects.candidate_for_resubmission(request.user)) + if request.POST and request.POST.get('submission'): + if request.POST['submission'] == 'new': + return redirect(reverse('submissions:submit_manuscript_scipost') + '?resubmission=false') - response = redirect('submissions:submit_manuscript_arxiv') - response['location'] += '?identifier_w_vn_nr={}'.format( - query_form.cleaned_data['identifier_w_vn_nr']) - return response + last_submission = Submission.objects.candidate_for_resubmission(request.user).filter( + id=request.POST['submission']).first() + if last_submission: + if last_submission.preprint.scipost_preprint_identifier: + # Determine right preprint-view. + extra_param = '?resubmission={}'.format(request.POST['submission']) + return redirect(reverse('submissions:submit_manuscript_scipost') + extra_param) + else: + extra_param = '?identifier_w_vn_nr={}'.format( + last_submission.preprint.identifier_w_vn_nr) + return redirect(reverse('submissions:submit_manuscript') + extra_param) + else: + # POST request invalid. Try again with GET request. + return redirect('submissions:resubmit_manuscript') context = { - 'form': query_form, + 'submissions': submissions, } - return render(request, 'submissions/submission_prefill_form.html', context) + return render(request, 'submissions/submission_resubmission_candidates.html', context) @login_required