SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit a9c5a4be authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Improve stats

parent a906072a
No related branches found
No related tags found
No related merge requests found
......@@ -46,13 +46,18 @@
<th>DOI label</th>
{% if year %}
<th>Year</th>
<th>Nr submissions</th>
<th>Nr distinct submissions</th>
{% endif %}
<th>Nr submissions<br/>(distinct)</th>
<th>Nr submissions<br/>(including resubmissions)</th>
<th>Nr assignment failed</th>
<th>Nr accepted</th>
<th>Nr rejected</th>
<th>Nr withdrawn</th>
{% else %}
<th>Nr publications</th>
<th>Duration average</th>
</tr>
<tr>
{% endif %}
</tr>
<tr>
{% if issue %}
<td>{{ issue.doi_label }}</td>
<td>{{ issue|issue_nr_publications }}</td>
......@@ -65,14 +70,44 @@
<td>{{ journal.doi_label }}</td>
{% if year %}
<td>{{ year }}</td>
<td>{{ submissions|length }}</td>
<td>{{ submissions|submissions_count_distinct }}</td>
{% endif %}
<td>{{ submissions|length }}</td>
<td>{{ submissions.assignment_failed.count }}</td>
<td>{{ submissions.accepted.count }}</td>
<td>{{ submissions.rejected.count }}</td>
<td>{{ submissions.withdrawn.count }}</td>
{% else %}
<td>{{ journal|journal_nr_publications }}</td>
<td>{{ journal|journal_avg_processing_duration|floatformat:2 }} days</td>
{% endif %}
{% endif %}
</tr>
</table>
{% endif %}
{% endif %}
{% if year %}
<h2>Refereeing stats for {{ year }}</h2>
<table class="table">
<tr>
<th>Nr refereeing<br/>invitations</th>
<th>Nr accepted</th>
<th>Nr declined</th>
<th>Nr pending</th>
<th>Nr reports<br/>obtained</th>
<th>Nr obtained<br/>(invited)</th>
<th>Nr obtained<br/>(contributed)</th>
</tr>
<tr>
<td>{{ nr_ref_inv }}</td>
<td>{{ nr_acc }} ({% widthratio nr_acc nr_ref_inv 100 %}&#37;)</td>
<td>{{ nr_dec }} ({% widthratio nr_dec nr_ref_inv 100 %}&#37;)</td>
<td>{{ nr_pen }} ({% widthratio nr_pen nr_ref_inv 100 %}&#37;)</td>
<td>{{ nr_rep_obt }}</td>
<td>{{ nr_rep_obt_inv }} ({% widthratio nr_rep_obt_inv nr_rep_obt 100 %}&#37;)</td>
<td>{{ nr_rep_obt_con }} ({% widthratio nr_rep_obt_con nr_rep_obt 100 %}&#37;)</td>
</tr>
</table>
{% endif %}
{% endblock content %}
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import get_object_or_404, render
from journals.constants import SCIPOST_JOURNALS_SUBMIT
from journals.models import Journal, Volume, Issue, Publication
from submissions.models import Submission
......@@ -17,10 +18,34 @@ def statistics(request, journal_doi_label=None, volume_nr=None, issue_nr=None, y
if year:
context['year'] = year
submissions = Submission.objects.filter(
submitted_to_journal=journal,
submission_date__year=int(year),
submitted_to_journal=journal_doi_label,
submission_date__year=year,
)
context['submissions'] = submissions
nr_ref_inv = 0
nr_acc = 0
nr_dec = 0
nr_pen = 0
nr_rep_obt = 0
nr_rep_obt_inv = 0
nr_rep_obt_con = 0
nr_rep_ref = 0
nr_aw_vet = 0
for submission in submissions:
nr_ref_inv += submission.referee_invitations.count()
nr_acc += submission.count_accepted_invitations()
nr_dec += submission.count_declined_invitations()
nr_pen += submission.count_pending_invitations()
nr_rep_obt += submission.count_obtained_reports()
nr_rep_obt_inv += submission.count_invited_reports()
nr_rep_obt_con += submission.count_contrib_reports()
context['nr_ref_inv'] = nr_ref_inv
context['nr_acc'] = nr_acc
context['nr_dec'] = nr_dec
context['nr_pen'] = nr_pen
context['nr_rep_obt'] = nr_rep_obt
context['nr_rep_obt_inv'] = nr_rep_obt_inv
context['nr_rep_obt_con'] = nr_rep_obt_con
if volume_nr:
volume = get_object_or_404(Volume, in_journal=journal,
number=volume_nr)
......
......@@ -2,6 +2,7 @@ from journals.constants import SCIPOST_JOURNAL_PHYSICS
STATUS_UNASSIGNED = 'unassigned'
STATUS_ASSIGNMENT_FAILED = 'assignment_failed'
STATUS_RESUBMISSION_INCOMING = 'resubmitted_incoming'
STATUS_REVISION_REQUESTED = 'revision_requested'
STATUS_EIC_ASSIGNED = 'EICassigned'
......@@ -14,10 +15,15 @@ STATUS_REJECTED_VISIBLE = 'rejected_visible'
STATUS_RESUBMITTED = 'resubmitted'
STATUS_RESUBMITTED_REJECTED = 'resubmitted_and_rejected'
STATUS_RESUBMITTED_REJECTED_VISIBLE = 'resubmitted_and_rejected_visible'
STATUS_VOTING_IN_PREPARATION = 'voting_in_preparation'
STATUS_PUT_TO_EC_VOTING = 'put_to_EC_voting'
STATUS_EC_VOTE_COMPLETED = 'EC_vote_completed'
STATUS_WITHDRAWN = 'withdrawn'
SUBMISSION_STATUS = (
(STATUS_UNASSIGNED, 'Unassigned, undergoing pre-screening'),
(STATUS_RESUBMISSION_INCOMING, 'Resubmission incoming'),
('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'),
(STATUS_ASSIGNMENT_FAILED, 'Failed to assign Editor-in-charge; manuscript rejected'),
(STATUS_EIC_ASSIGNED, 'Editor-in-charge assigned, manuscript under review'),
(STATUS_REVIEW_CLOSED, 'Review period closed, editorial recommendation pending'),
# If revisions required: resubmission creates a new Submission object
......@@ -27,22 +33,22 @@ SUBMISSION_STATUS = (
(STATUS_RESUBMITTED_REJECTED_VISIBLE,
'Has been resubmitted and subsequently rejected (still publicly visible)'),
# If acceptance/rejection:
('voting_in_preparation', 'Voting in preparation (eligible Fellows being selected)'),
('put_to_EC_voting', 'Undergoing voting at the Editorial College'),
(STATUS_VOTING_IN_PREPARATION, 'Voting in preparation (eligible Fellows being selected)'),
(STATUS_PUT_TO_EC_VOTING, 'Undergoing voting at the Editorial College'),
(STATUS_AWAITING_ED_REC, 'Awaiting Editorial Recommendation'),
('EC_vote_completed', 'Editorial College voting rounded up'),
(STATUS_EC_VOTE_COMPLETED, 'Editorial College voting rounded up'),
(STATUS_ACCEPTED, 'Publication decision taken: accept'),
(STATUS_REJECTED, 'Publication decision taken: reject'),
(STATUS_REJECTED_VISIBLE, 'Publication decision taken: reject (still publicly visible)'),
(STATUS_PUBLISHED, 'Published'),
# If withdrawn:
('withdrawn', 'Withdrawn by the Authors'),
(STATUS_WITHDRAWN, 'Withdrawn by the Authors'),
)
SUBMISSION_HTTP404_ON_EDITORIAL_PAGE = [
'assignment_failed',
STATUS_ASSIGNMENT_FAILED,
STATUS_PUBLISHED,
'withdrawn',
STATUS_WITHDRAWN,
STATUS_REJECTED,
STATUS_REJECTED_VISIBLE,
]
......@@ -55,9 +61,9 @@ SUBMISSION_EXCLUDE_FROM_REPORTING = SUBMISSION_HTTP404_ON_EDITORIAL_PAGE + [
STATUS_AWAITING_ED_REC,
STATUS_REVIEW_CLOSED,
STATUS_ACCEPTED,
'voting_in_preparation',
'put_to_EC_voting',
'withdrawn',
STATUS_VOTING_IN_PREPARATION,
STATUS_PUT_TO_EC_VOTING,
STATUS_WITHDRAWN,
]
# Submissions which are allowed/required to submit a EIC Recommendation
......@@ -71,10 +77,10 @@ SUBMISSION_EIC_RECOMMENDATION_REQUIRED = [
SUBMISSION_STATUS_PUBLICLY_INVISIBLE = [
STATUS_UNASSIGNED,
STATUS_RESUBMISSION_INCOMING,
'assignment_failed',
STATUS_ASSIGNMENT_FAILED,
STATUS_RESUBMITTED_REJECTED,
STATUS_REJECTED,
'withdrawn',
STATUS_WITHDRAWN,
]
# Submissions which should not appear in search lists
......@@ -88,7 +94,7 @@ SUBMISSION_STATUS_PUBLICLY_UNLISTED = SUBMISSION_STATUS_PUBLICLY_INVISIBLE + [
SUBMISSION_STATUS_VOTING_DEPRECATED = [
STATUS_REJECTED,
STATUS_PUBLISHED,
'withdrawn',
STATUS_WITHDRAWN,
]
SUBMISSION_TYPE = (
......
......@@ -8,9 +8,11 @@ from .constants import SUBMISSION_STATUS_OUT_OF_POOL, SUBMISSION_STATUS_PUBLICLY
SUBMISSION_STATUS_PUBLICLY_INVISIBLE, STATUS_UNVETTED, STATUS_VETTED,\
STATUS_UNCLEAR, STATUS_INCORRECT, STATUS_NOT_USEFUL, STATUS_NOT_ACADEMIC,\
SUBMISSION_HTTP404_ON_EDITORIAL_PAGE, STATUS_DRAFT, STATUS_PUBLISHED,\
SUBMISSION_EXCLUDE_FROM_REPORTING, STATUS_REJECTED_VISIBLE,\
SUBMISSION_EXCLUDE_FROM_REPORTING,\
STATUS_REJECTED, STATUS_REJECTED_VISIBLE,\
STATUS_ACCEPTED, STATUS_RESUBMITTED, STATUS_RESUBMITTED_REJECTED_VISIBLE,\
EVENT_FOR_EIC, EVENT_GENERAL, EVENT_FOR_AUTHOR, STATUS_UNASSIGNED
EVENT_FOR_EIC, EVENT_GENERAL, EVENT_FOR_AUTHOR,\
STATUS_UNASSIGNED, STATUS_ASSIGNMENT_FAILED, STATUS_WITHDRAWN
class SubmissionQuerySet(models.QuerySet):
......@@ -111,6 +113,19 @@ class SubmissionQuerySet(models.QuerySet):
def accepted(self):
return self.filter(status=STATUS_ACCEPTED)
def assignment_failed(self):
return self.filter(status=STATUS_ASSIGNMENT_FAILED)
def rejected(self):
return self._newest_version_only(self.filter(status__in=[STATUS_REJECTED,
STATUS_REJECTED_VISIBLE]))
def withdrawn(self):
return self._newest_version_only(self.filter(status=STATUS_WITHDRAWN))
def open_for_reporting(self):
"""
Return Submissions that have appriopriate status for reporting.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment