diff --git a/submissions/forms.py b/submissions/forms.py index 0a8cb0c3ffb5b8bd9cad62c9a42dd4ca37a3fc0e..43e02014b2217cacd32a5ff3c408a788c0dcd618 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -76,6 +76,8 @@ class SubmissionForm(forms.ModelForm): 'rows': 3}) + + ###################### # Editorial workflow # ###################### diff --git a/submissions/models.py b/submissions/models.py index 2ea5a6c80cecdb9cdbc796f30b55e1ec87b17d8a..7188213097645f8f1d32d308cf567a1dfa17e2de 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -67,33 +67,33 @@ submission_type_dict = dict(SUBMISSION_TYPE) class Submission(models.Model): # Main submission fields - is_current = models.BooleanField(default=True) - is_resubmission = models.BooleanField(default=False) - submitted_by = models.ForeignKey(Contributor, on_delete=models.CASCADE) - editor_in_charge = models.ForeignKey(Contributor, related_name='EIC', blank=True, null=True, - on_delete=models.CASCADE) - submitted_to_journal = models.CharField(max_length=30, choices=SCIPOST_JOURNALS_SUBMIT, - verbose_name="Journal to be submitted to") - submission_type = models.CharField(max_length=10, choices=SUBMISSION_TYPE, - blank=True, null=True, default=None) + author_comments = models.TextField(blank=True, null=True) + author_list = models.CharField(max_length=1000, verbose_name="author list") discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics') domain = models.CharField(max_length=3, choices=SCIPOST_JOURNALS_DOMAINS) - subject_area = models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS, - verbose_name='Primary subject area', default='Phys:QP') - secondary_areas = ChoiceArrayField( - models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS), - blank=True, null=True) - status = models.CharField(max_length=30, choices=SUBMISSION_STATUS) # set by Editors - author_comments = models.TextField(blank=True, null=True) + editor_in_charge = models.ForeignKey(Contributor, related_name='EIC', blank=True, null=True, + on_delete=models.CASCADE) + is_current = models.BooleanField(default=True) + is_resubmission = models.BooleanField(default=False) list_of_changes = models.TextField(blank=True, null=True) - remarks_for_editors = models.TextField(blank=True, null=True) - referees_suggested = models.TextField(blank=True, null=True) - referees_flagged = models.TextField(blank=True, null=True) + open_for_commenting = models.BooleanField(default=False) open_for_reporting = models.BooleanField(default=False) + referees_flagged = models.TextField(blank=True, null=True) + referees_suggested = models.TextField(blank=True, null=True) + remarks_for_editors = models.TextField(blank=True, null=True) reporting_deadline = models.DateTimeField(default=timezone.now) - open_for_commenting = models.BooleanField(default=False) + secondary_areas = ChoiceArrayField( + models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS), + blank=True, null=True) + status = models.CharField(max_length=30, choices=SUBMISSION_STATUS, default='unassigned') # set by Editors + subject_area = models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS, + verbose_name='Primary subject area', default='Phys:QP') + submission_type = models.CharField(max_length=10, choices=SUBMISSION_TYPE, + blank=True, null=True, default=None) + submitted_by = models.ForeignKey(Contributor, on_delete=models.CASCADE) + submitted_to_journal = models.CharField(max_length=30, choices=SCIPOST_JOURNALS_SUBMIT, + verbose_name="Journal to be submitted to") title = models.CharField(max_length=300) - author_list = models.CharField(max_length=1000, verbose_name="author list") # Authors which have been mapped to contributors: authors = models.ManyToManyField(Contributor, blank=True, related_name='authors_sub') @@ -111,7 +111,7 @@ class Submission(models.Model): # Metadata metadata = JSONField(default={}, blank=True, null=True) - submission_date = models.DateField(verbose_name='submission date') + submission_date = models.DateField(verbose_name='submission date', default=timezone.now) latest_activity = models.DateTimeField(default=timezone.now) class Meta: diff --git a/submissions/services.py b/submissions/services.py index 535d3cf8c98e5cea422e4e17019120266b6be4c9..a634d62ef2e7bbc7f1d233cece2575096a747300 100644 --- a/submissions/services.py +++ b/submissions/services.py @@ -15,6 +15,7 @@ class ArxivCaller(): isvalid = None errorcode = '' resubmission = False + previous_submissions = [] arxiv_journal_ref = '' arxiv_doi = '' metadata = {} @@ -54,7 +55,8 @@ class ArxivCaller(): previous_submissions = self.different_versions(self.identifier_without_vn_nr) if previous_submissions: if previous_submissions[0].status == 'revision_requested': - resubmission = True + self.resubmission = True + self.previous_submissions = previous_submissions else: self.errorcode = 'previous_submission_undergoing_refereeing' self.isvalid = False diff --git a/submissions/templates/submissions/new_submission.html b/submissions/templates/submissions/new_submission.html new file mode 100644 index 0000000000000000000000000000000000000000..71fb9dcc12c2ea218e0749b1d1b2c3e578da911b --- /dev/null +++ b/submissions/templates/submissions/new_submission.html @@ -0,0 +1,85 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: submit manuscript{% endblock pagetitle %} + +{% block bodysup %} + + +<script> +$(document).ready(function(){ + $("#id_submission_type").closest('tr').hide() + + $('select#id_submitted_to_journal').on('change', function (){ + var selection = $(this).val(); + switch(selection){ + case "SciPost Physics": + $("#id_submission_type").closest('tr').show() + break; + default: + $("#id_submission_type").closest('tr').hide() + } +}); + + var isresub = $("#id_is_resubmission").val(); + switch(isresub){ + case "True": + $("#id_author_comments").closest('tr').show() + $("#id_list_of_changes").closest('tr').show() + break; + default: + $("#id_author_comments").closest('tr').hide() + $("#id_list_of_changes").closest('tr').hide() + } + +}); +</script> + +<section> + <div class="flex-greybox"> + <h1>Submit a manuscript to SciPost</h1> + </div> + + <p>Before submitting, make sure you agree with the + <a href="{% url 'journals:journals_terms_and_conditions' %}"> + SciPost Journals Terms and Conditions</a>.</p> + <p>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>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> + + + {% if perms.scipost.can_submit_manuscript %} + + {% if form.arxiv_link.value %} + <form id="full_submission_form" action="{% url 'submissions:submit_manuscript' %}" method="post"> + {% csrf_token %} + <table> + <ul> + {{ form.as_table }} + </ul> + </table> + <p>By clicking on Submit, you state that you have read and agree with + the <a href="{% url 'journals:journals_terms_and_conditions' %}"> + SciPost Journals Terms and Conditions</a>, 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> + <input type="submit" value="Submit"/> + </form> + {% endif %} + + {% else %} + <h3>You are currently not allowed to submit a manuscript.</h3> + {% endif %} + +</section> + + +{% endblock bodysup %} diff --git a/submissions/templates/submissions/prefill_using_identifier.html b/submissions/templates/submissions/prefill_using_identifier.html new file mode 100644 index 0000000000000000000000000000000000000000..41f3dd90c645969b1b5752d8c4166a787f00c905 --- /dev/null +++ b/submissions/templates/submissions/prefill_using_identifier.html @@ -0,0 +1,86 @@ +{% extends 'scipost/base.html' %} + +{% block pagetitle %}: submit manuscript{% endblock pagetitle %} + +{% block bodysup %} + + +<script> +$(document).ready(function(){ + $("#id_submission_type").closest('tr').hide() + + $('select#id_submitted_to_journal').on('change', function (){ + var selection = $(this).val(); + switch(selection){ + case "SciPost Physics": + $("#id_submission_type").closest('tr').show() + break; + default: + $("#id_submission_type").closest('tr').hide() + } +}); + + var isresub = $("#id_is_resubmission").val(); + switch(isresub){ + case "True": + $("#id_author_comments").closest('tr').show() + $("#id_list_of_changes").closest('tr').show() + break; + default: + $("#id_author_comments").closest('tr').hide() + $("#id_list_of_changes").closest('tr').hide() + } + +}); +</script> + +<section> + <div class="flex-greybox"> + <h1>Submit a manuscript to SciPost</h1> + </div> + + <p>Before submitting, make sure you agree with the + <a href="{% url 'journals:journals_terms_and_conditions' %}"> + SciPost Journals Terms and Conditions</a>.</p> + <p>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>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> + + + {% if perms.scipost.can_submit_manuscript %} + + <div class="flex-greybox"> + <h3><em>Please provide the arXiv identifier for your Submission:</em></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.as_p }} + <input type="submit" value="Query arXiv"/> + </form> + </div> + <br/> + <!-- {% if errormessage %} + <h3 style="color: red;">Error: {{ errormessage }}</h3> + {% endif %} --> + + {% if resubmessage %} + <h3 style="color: green;">{{ resubmessage }}</h3> + {% endif %} + + {% else %} + <h3>You are currently not allowed to submit a manuscript.</h3> + {% endif %} + +</section> + + +{% endblock bodysup %} diff --git a/submissions/templates/submissions/submit_manuscript.html b/submissions/templates/submissions/submit_manuscript.html index 8bb92e95a355883202f2b3350d17ff5991680603..55a6f49aa898a9022d570434037288017dc4ad6d 100644 --- a/submissions/templates/submissions/submit_manuscript.html +++ b/submissions/templates/submissions/submit_manuscript.html @@ -68,9 +68,9 @@ $(document).ready(function(){ </form> </div> <br/> - {% if errormessage %} + <!-- {% if errormessage %} <h3 style="color: red;">Error: {{ errormessage }}</h3> - {% endif %} + {% endif %} --> {% if resubmessage %} <h3 style="color: green;">{{ resubmessage }}</h3> diff --git a/submissions/urls.py b/submissions/urls.py index a8c077b290546fd7ba84aae82049e422f6940cfc..889e80791c8ae74cdbf20e395b2e69f6567ccd1c 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -18,9 +18,12 @@ urlpatterns = [ name='submission_wo_vn_nr'), url(r'^(?P<arxiv_identifier_w_vn_nr>[0-9]{4,}.[0-9]{5,}v[0-9]{1,2})/$', views.submission_detail, name='submission'), + # url(r'^prefill_using_identifier$', + # views.prefill_using_identifier, name='prefill_using_identifier'), url(r'^prefill_using_identifier$', - views.prefill_using_identifier, name='prefill_using_identifier'), - url(r'^submit_manuscript$', views.submit_manuscript, name='submit_manuscript'), + views.PrefillUsingIdentifierView.as_view(), name='prefill_using_identifier'), + # url(r'^submit_manuscript$', views.submit_manuscript, name='submit_manuscript'), + url(r'^submit_manuscript$', views.SubmissionCreateView.as_view(), name='submit_manuscript'), url(r'^pool$', views.pool, name='pool'), # Assignment of Editor-in-charge url(r'^assign_submission/(?P<arxiv_identifier_w_vn_nr>[0-9]{4,}.[0-9]{5,}v[0-9]{1,2})$', diff --git a/submissions/views.py b/submissions/views.py index 319447775ba20819b8b1c6d7930a8ce5cb9e91d4..81a73f5dae80421aa1277ad4137ee38ca328c2d0 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -43,9 +43,102 @@ from django.views.generic.edit import UpdateView, CreateView, FormView # SUBMISSIONS: ############### -@permission_required('scipost.can_submit_manuscript', raise_exception=True) -def prefill_using_identifier(request): - if request.method == "POST": +# @permission_required('scipost.can_submit_manuscript', raise_exception=True) +# def prefill_using_identifier(request): +# if request.method == "POST": +# identifierform = SubmissionIdentifierForm(request.POST) +# if identifierform.is_valid(): +# # Use the ArxivCaller class to make the API calls +# caller = ArxivCaller() +# caller.process(identifierform.cleaned_data['identifier']) +# +# if caller.is_valid(): +# # Arxiv response is valid and can be shown +# +# metadata = caller.metadata +# is_resubmission = caller.resubmission +# title = metadata['entries'][0]['title'] +# authorlist = metadata['entries'][0]['authors'][0]['name'] +# for author in metadata['entries'][0]['authors'][1:]: +# authorlist += ', ' + author['name'] +# arxiv_link = metadata['entries'][0]['id'] +# abstract = metadata['entries'][0]['summary'] +# initialdata = {'is_resubmission': is_resubmission, +# 'metadata': metadata, +# 'title': title, 'author_list': authorlist, +# 'arxiv_identifier_w_vn_nr': caller.identifier_with_vn_nr, +# 'arxiv_identifier_wo_vn_nr': caller.identifier_without_vn_nr, +# 'arxiv_vn_nr': caller.version_nr, +# 'arxiv_link': arxiv_link, 'abstract': abstract} +# if 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.') +# initialdata['submitted_to_journal'] = previous_submissions[0].submitted_to_journal +# initialdata['submission_type'] = previous_submissions[0].submission_type +# initialdata['discipline'] = previous_submissions[0].discipline +# initialdata['domain'] = previous_submissions[0].domain +# initialdata['subject_area'] = previous_submissions[0].subject_area +# initialdata['secondary_areas'] = previous_submissions[0].secondary_areas +# initialdata['referees_suggested'] = previous_submissions[0].referees_suggested +# initialdata['referees_flagged'] = previous_submissions[0].referees_flagged +# else: +# resubmessage = '' +# +# form = SubmissionForm(initial=initialdata) +# context = {'identifierform': identifierform, +# 'form': form, +# 'resubmessage': resubmessage} +# return render(request, 'submissions/submit_manuscript.html', context) +# +# else: +# # Arxiv response is not valid +# errormessages = { +# 'preprint_does_not_exist': +# 'A preprint associated to this identifier does not exist.', +# 'paper_published_journal_ref': +# ('This paper has been published as ' + caller.arxiv_journal_ref + +# '. You cannot submit it to SciPost anymore.'), +# 'paper_published_doi': +# ('This paper has been published under DOI ' + caller.arxiv_doi + +# '. You cannot submit it to SciPost anymore.'), +# 'arxiv_timeout': 'Arxiv did not respond in time. Please try again later', +# 'arxiv_bad_request': +# ('There was an error with requesting identifier ' + +# caller.identifier_with_vn_nr + +# ' from Arxiv. Please check the identifier and try again.'), +# 'previous_submission_undergoing_refereeing': +# ('There exists a preprint with this arXiv identifier ' +# 'but an earlier version number, which 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.'), +# 'preprint_already_submitted': 'This preprint version has already been submitted to SciPost.' +# } +# +# identifierform.add_error(None, errormessages[caller.errorcode]) +# form = SubmissionForm() +# return render(request, 'submissions/submit_manuscript.html', +# {'identifierform': identifierform, 'form': form}) +# else: +# form = SubmissionForm() +# return render(request, 'submissions/submit_manuscript.html', +# {'identifierform': identifierform, 'form': form}) +# # return redirect(reverse('submissions:submit_manuscript')) +# form = SubmissionForm() +# identifierform = SubmissionIdentifierForm() +# return render(request, 'submissions/submit_manuscript.html', +# {'identifierform': identifierform, 'form': form}) + + +class PrefillUsingIdentifierView(FormView): + form_class = SubmissionIdentifierForm + template_name = 'submissions/prefill_using_identifier.html' + + def post(self, request): identifierform = SubmissionIdentifierForm(request.POST) if identifierform.is_valid(): # Use the ArxivCaller class to make the API calls @@ -71,6 +164,7 @@ def prefill_using_identifier(request): 'arxiv_vn_nr': caller.version_nr, 'arxiv_link': arxiv_link, 'abstract': abstract} if is_resubmission: + previous_submissions = caller.previous_submissions resubmessage = ('There already exists a preprint with this arXiv identifier ' 'but a different version number. \nYour Submission will be ' 'handled as a resubmission.') @@ -89,7 +183,7 @@ def prefill_using_identifier(request): context = {'identifierform': identifierform, 'form': form, 'resubmessage': resubmessage} - return render(request, 'submissions/submit_manuscript.html', context) + return render(request, 'submissions/new_submission.html', context) else: # Arxiv response is not valid @@ -120,122 +214,236 @@ def prefill_using_identifier(request): } identifierform.add_error(None, errormessages[caller.errorcode]) - form = SubmissionForm() - return render(request, 'submissions/submit_manuscript.html', - {'identifierform': identifierform, 'form': form}) + return render(request, 'submissions/prefill_using_identifier.html', + {'form': identifierform}) else: - form = SubmissionForm() - return render(request, 'submissions/submit_manuscript.html', - {'identifierform': identifierform, 'form': form}) - return redirect(reverse('submissions:submit_manuscript')) + return render(request, 'submissions/prefill_using_identifier.html', + {'form': identifierform}) + +class SubmissionCreateView(CreateView): + + model = Submission + fields = [ + 'is_resubmission', + 'discipline', + 'submitted_to_journal', + 'submission_type', + 'domain', + 'subject_area', + 'secondary_areas', + 'title', + 'author_list', + 'abstract', + 'arxiv_identifier_w_vn_nr', + 'arxiv_identifier_wo_vn_nr', + 'arxiv_vn_nr', + 'arxiv_link', + 'metadata', + 'author_comments', + 'list_of_changes', + 'remarks_for_editors', + 'referees_suggested', + 'referees_flagged' + ] + + template_name = 'submissions/new_submission.html' + + def get(self, request): + # Only use prefilled forms + return redirect('submissions:prefill_using_identifier') + + @transaction.atomic + def form_valid(self, form): + submitted_by = Contributor.objects.get(user=self.request.user) + form.instance.submitted_by = submitted_by + form.instance.is_current = True + + if form.cleaned_data['is_resubmission']: + form.instance.open_for_reporting = True + form.instance.open_for_commenting = True + + deadline = timezone.now() + datetime.timedelta(days=28) # for papers + if form.cleaned_data['submitted_to_journal'] == 'SciPost Physics Lecture Notes': + deadline += datetime.timedelta(days=28) + form.instance.reporting_deadline = deadline + + # Take information from previous submission(s) + previous_submissions = self.previous_submissions(form) + form.instance.editor_in_charge = previous_submissions[0].editor_in_charge + form.instance.status = 'EICassigned' + + self.mark_previous_submissions_as_deprecated(previous_submissions) + + submission = form.save() + + if form.cleaned_data['is_resubmission']: + # Add many-to-many data + for author in previous_submissions[0].authors.all(): + print('Previous submissions!!') + submission.authors.add(author) + for author in previous_submissions[0].authors_claims.all(): + submission.authors_claims.add(author) + for author in previous_submissions[0].authors_false_claims.all(): + submission.authors_false_claims.add(author) + submission.save() -@login_required -@permission_required('scipost.can_submit_manuscript', raise_exception=True) -@transaction.atomic -def submit_manuscript(request): - if request.method == 'POST': - form = SubmissionForm(request.POST) - if form.is_valid(): - submitted_by = Contributor.objects.get(user=request.user) - # Verify if submitter is among the authors - if submitted_by.user.last_name not in form.cleaned_data['author_list']: - errormessage = ('Your name does not match that of any of the authors. ' - 'You are not authorized to submit this preprint.') - identifierform = SubmissionIdentifierForm() - return render(request, 'submissions/submit_manuscript.html', - {'identifierform': identifierform, 'form': form, - 'errormessage': errormessage}) - submission = Submission( - is_current=True, - is_resubmission=form.cleaned_data['is_resubmission'], - submitted_by=submitted_by, - submitted_to_journal=form.cleaned_data['submitted_to_journal'], - submission_type=form.cleaned_data['submission_type'], - discipline=form.cleaned_data['discipline'], - domain=form.cleaned_data['domain'], - subject_area=form.cleaned_data['subject_area'], - secondary_areas=form.cleaned_data['secondary_areas'], - status='unassigned', - title=form.cleaned_data['title'], - author_list=form.cleaned_data['author_list'], - abstract=form.cleaned_data['abstract'], - arxiv_identifier_w_vn_nr=form.cleaned_data['arxiv_identifier_w_vn_nr'], - arxiv_identifier_wo_vn_nr=form.cleaned_data['arxiv_identifier_wo_vn_nr'], - arxiv_vn_nr=form.cleaned_data['arxiv_vn_nr'], - arxiv_link=form.cleaned_data['arxiv_link'], - metadata=form.cleaned_data['metadata'], - submission_date=timezone.now(), - remarks_for_editors=form.cleaned_data['remarks_for_editors'], - referees_suggested=form.cleaned_data['referees_suggested'], - referees_flagged=form.cleaned_data['referees_flagged'], + # Make assignment + assignment = EditorialAssignment( + submission=submission, + to=submission.editor_in_charge, + accepted=True, + date_created=timezone.now(), + date_answered=timezone.now(), ) + assignment.save() + + # Assign permissions + assign_perm('can_take_editorial_actions', submission.editor_in_charge.user, submission) + ed_admins = Group.objects.get(name='Editorial Administrators') + assign_perm('can_take_editorial_actions', ed_admins, submission) + + # Send emails + SubmissionUtils.load({'submission': submission}) + SubmissionUtils.send_authors_resubmission_ack_email() + SubmissionUtils.send_EIC_reappointment_email() + else: + # Add many-to-many data + submission.authors.add(submitted_by) submission.save() - submission.authors.add(submitted_by) # must be author to be able to submit - submission.save() - # If this is a resubmission, mark previous submissions as deprecated: - if form.cleaned_data['is_resubmission']: - previous_submissions = Submission.objects.filter( - arxiv_identifier_wo_vn_nr=form.cleaned_data['arxiv_identifier_wo_vn_nr'] - ).exclude(pk=submission.id).order_by('-arxiv_vn_nr') - for sub in previous_submissions: - sub.is_current = False - sub.open_for_reporting = False - sub.status = 'resubmitted' - sub.save() - # Handle this submission in same way as if assignment had been accepted - submission.open_for_reporting = True - deadline = timezone.now() + datetime.timedelta(days=28) # for papers - if submission.submitted_to_journal == 'SciPost Physics Lecture Notes': - deadline += datetime.timedelta(days=28) - submission.reporting_deadline = deadline - submission.open_for_commenting = True - submission.latest_activity = timezone.now() - # We keep the same (most recent) Editor-in-charge by default - submission.editor_in_charge = previous_submissions[0].editor_in_charge - submission.status = 'EICassigned' - # Keep the info about authors: - for author in previous_submissions[0].authors.all(): - submission.authors.add(author) - for author in previous_submissions[0].authors_claims.all(): - submission.authors_claims.add(author) - for author in previous_submissions[0].authors_false_claims.all(): - submission.authors_false_claims.add(author) - submission.author_comments = form.cleaned_data['author_comments'] - submission.list_of_changes = form.cleaned_data['list_of_changes'] - submission.save() - assignment = EditorialAssignment( - submission=submission, - to=submission.editor_in_charge, - accepted=True, - date_created=timezone.now(), - date_answered=timezone.now(), - ) - assignment.save() - SubmissionUtils.load({'submission': submission}) - SubmissionUtils.send_authors_resubmission_ack_email() - assign_perm('can_take_editorial_actions', submission.editor_in_charge.user, submission) - ed_admins = Group.objects.get(name='Editorial Administrators') - assign_perm('can_take_editorial_actions', ed_admins, submission) - SubmissionUtils.send_EIC_reappointment_email() - else: - SubmissionUtils.load({'submission': submission}) - SubmissionUtils.send_authors_submission_ack_email() - - # return HttpResponseRedirect(reverse('submissions:submit_manuscript_ack')) - context = {'ack_header': 'Thank you for your Submission to SciPost', - 'ack_message': 'Your Submission will soon be handled by an Editor. ', - 'followup_message': 'Return to your ', - 'followup_link': reverse('scipost:personal_page'), - 'followup_link_label': 'personal page'} - return render(request, 'scipost/acknowledgement.html', context) - else: # form is invalid - pass - else: - form = SubmissionForm() - identifierform = SubmissionIdentifierForm() - return render(request, 'submissions/submit_manuscript.html', - {'identifierform': identifierform, 'form': form}) + + # Send emails + SubmissionUtils.load({'submission': submission}) + SubmissionUtils.send_authors_submission_ack_email() + + context = {'ack_header': 'Thank you for your Submission to SciPost', + 'ack_message': 'Your Submission will soon be handled by an Editor. ', + 'followup_message': 'Return to your ', + 'followup_link': reverse('scipost:personal_page'), + 'followup_link_label': 'personal page'} + return render(self.request, 'scipost/acknowledgement.html', context) + + def mark_previous_submissions_as_deprecated(self, previous_submissions): + for sub in previous_submissions: + sub.is_current = False + sub.open_for_reporting = False + sub.status = 'resubmitted' + sub.save() + + def previous_submissions(self, form): + return Submission.objects.filter( + arxiv_identifier_wo_vn_nr=form.cleaned_data['arxiv_identifier_wo_vn_nr'] + ) + + + + +# @login_required +# @permission_required('scipost.can_submit_manuscript', raise_exception=True) +# @transaction.atomic +# def submit_manuscript(request): +# if request.method == 'POST': +# form = SubmissionForm(request.POST) +# if form.is_valid(): +# submitted_by = Contributor.objects.get(user=request.user) +# # Verify if submitter is among the authors + # if submitted_by.user.last_name not in form.cleaned_data['author_list']: + # errormessage = ('Your name does not match that of any of the authors. ' + # 'You are not authorized to submit this preprint.') + # identifierform = SubmissionIdentifierForm() + # return render(request, 'submissions/submit_manuscript.html', + # {'identifierform': identifierform, 'form': form, + # 'errormessage': errormessage}) +# submission = Submission( +# is_current=True, +# is_resubmission=form.cleaned_data['is_resubmission'], +# submitted_by=submitted_by, +# submitted_to_journal=form.cleaned_data['submitted_to_journal'], +# submission_type=form.cleaned_data['submission_type'], +# discipline=form.cleaned_data['discipline'], +# domain=form.cleaned_data['domain'], +# subject_area=form.cleaned_data['subject_area'], +# secondary_areas=form.cleaned_data['secondary_areas'], +# status='unassigned', +# title=form.cleaned_data['title'], +# author_list=form.cleaned_data['author_list'], +# abstract=form.cleaned_data['abstract'], +# arxiv_identifier_w_vn_nr=form.cleaned_data['arxiv_identifier_w_vn_nr'], +# arxiv_identifier_wo_vn_nr=form.cleaned_data['arxiv_identifier_wo_vn_nr'], +# arxiv_vn_nr=form.cleaned_data['arxiv_vn_nr'], +# arxiv_link=form.cleaned_data['arxiv_link'], +# metadata=form.cleaned_data['metadata'], +# submission_date=timezone.now(), +# remarks_for_editors=form.cleaned_data['remarks_for_editors'], +# referees_suggested=form.cleaned_data['referees_suggested'], +# referees_flagged=form.cleaned_data['referees_flagged'], +# ) +# submission.save() +# submission.authors.add(submitted_by) # must be author to be able to submit +# submission.save() +# # If this is a resubmission, mark previous submissions as deprecated: +# if form.cleaned_data['is_resubmission']: +# previous_submissions = Submission.objects.filter( +# arxiv_identifier_wo_vn_nr=form.cleaned_data['arxiv_identifier_wo_vn_nr'] +# ).exclude(pk=submission.id).order_by('-arxiv_vn_nr') +# for sub in previous_submissions: +# sub.is_current = False +# sub.open_for_reporting = False +# sub.status = 'resubmitted' +# sub.save() +# # Handle this submission in same way as if assignment had been accepted +# submission.open_for_reporting = True +# deadline = timezone.now() + datetime.timedelta(days=28) # for papers +# if submission.submitted_to_journal == 'SciPost Physics Lecture Notes': +# deadline += datetime.timedelta(days=28) +# submission.reporting_deadline = deadline +# submission.open_for_commenting = True +# submission.latest_activity = timezone.now() +# # We keep the same (most recent) Editor-in-charge by default +# submission.editor_in_charge = previous_submissions[0].editor_in_charge +# submission.status = 'EICassigned' +# # Keep the info about authors: +# for author in previous_submissions[0].authors.all(): +# submission.authors.add(author) +# for author in previous_submissions[0].authors_claims.all(): +# submission.authors_claims.add(author) +# for author in previous_submissions[0].authors_false_claims.all(): +# submission.authors_false_claims.add(author) +# submission.author_comments = form.cleaned_data['author_comments'] +# submission.list_of_changes = form.cleaned_data['list_of_changes'] +# submission.save() +# assignment = EditorialAssignment( +# submission=submission, +# to=submission.editor_in_charge, +# accepted=True, +# date_created=timezone.now(), +# date_answered=timezone.now(), +# ) +# assignment.save() +# SubmissionUtils.load({'submission': submission}) +# SubmissionUtils.send_authors_resubmission_ack_email() +# assign_perm('can_take_editorial_actions', submission.editor_in_charge.user, submission) +# ed_admins = Group.objects.get(name='Editorial Administrators') +# assign_perm('can_take_editorial_actions', ed_admins, submission) +# SubmissionUtils.send_EIC_reappointment_email() +# else: +# SubmissionUtils.load({'submission': submission}) +# SubmissionUtils.send_authors_submission_ack_email() +# +# # return HttpResponseRedirect(reverse('submissions:submit_manuscript_ack')) +# context = {'ack_header': 'Thank you for your Submission to SciPost', +# 'ack_message': 'Your Submission will soon be handled by an Editor. ', +# 'followup_message': 'Return to your ', +# 'followup_link': reverse('scipost:personal_page'), +# 'followup_link_label': 'personal page'} +# return render(request, 'scipost/acknowledgement.html', context) +# else: # form is invalid +# pass +# else: +# form = SubmissionForm() +# identifierform = SubmissionIdentifierForm() +# return render(request, 'submissions/submit_manuscript.html', +# {'identifierform': identifierform, 'form': form}) def submissions(request, to_journal=None):