SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 0a3ad289 authored by Jorran de Wit's avatar Jorran de Wit
Browse files

Update stats

parent 63c92f8d
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey ...@@ -2,6 +2,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.postgres.fields import JSONField from django.contrib.postgres.fields import JSONField
from django.db import models from django.db import models
from django.db.models import Avg, F
from django.utils import timezone from django.utils import timezone
from django.urls import reverse from django.urls import reverse
...@@ -51,28 +52,27 @@ class Journal(models.Model): ...@@ -51,28 +52,27 @@ class Journal(models.Model):
def get_abbreviation_citation(self): def get_abbreviation_citation(self):
return journal_name_abbrev_citation(self.name) return journal_name_abbrev_citation(self.name)
def nr_publications(self, Tier=None): def nr_publications(self, tier=None):
pubs = Publication.objects.filter(in_issue__in_volume__in_journal=self) pubs = Publication.objects.filter(in_issue__in_volume__in_journal=self)
if Tier: if tier:
pubs.filter(accepted_submission__eicrecommendations__recommendation=Tier) pubs = pubs.filter(accepted_submission__eicrecommendations__recommendation=tier)
return pubs.count() return pubs.count()
def avg_processing_duration(self): def avg_processing_duration(self):
duration = Publication.objects.filter( duration = Publication.objects.filter(
in_issue__in_volume__in_journal=self).aggregate( in_issue__in_volume__in_journal=self).aggregate(
avg=Avg(F('publication_date') - F('submission_date')))['avg'] avg=Avg(F('publication_date') - F('submission_date')))['avg']
if not duration: return 0 return duration.total_seconds() / 86400
return duration.days + duration.seconds/86400
def citation_rate(self, Tier=None): def citation_rate(self, tier=None):
""" """
Returns the citation rate in units of nr citations per article per year. Returns the citation rate in units of nr citations per article per year.
""" """
pubs = Publication.objects.filter(in_issue__in_volume__in_journal=self) pubs = Publication.objects.filter(in_issue__in_volume__in_journal=self)
if Tier: if tier:
pubs.filter(accepted_submission__eicrecommendations__recommendation=Tier) pubs.filter(accepted_submission__eicrecommendations__recommendation=tier)
ncites = 0 ncites = 0
deltat = 1 # to avoid division by zero deltat = 1 # to avoid division by zero
for pub in pubs: for pub in pubs:
if pub.citedby and pub.latest_citedby_update: if pub.citedby and pub.latest_citedby_update:
ncites += len(pub.citedby) ncites += len(pub.citedby)
...@@ -98,33 +98,32 @@ class Volume(models.Model): ...@@ -98,33 +98,32 @@ class Volume(models.Model):
def doi_string(self): def doi_string(self):
return '10.21468/' + self.doi_label return '10.21468/' + self.doi_label
def nr_publications(self, Tier=None): def nr_publications(self, tier=None):
pubs = Publication.objects.filter(in_issue__in_volume=self) pubs = Publication.objects.filter(in_issue__in_volume=self)
if Tier: if tier:
pubs.filter(accepted_submission__eicrecommendations__recommendation=Tier) pubs.filter(accepted_submission__eicrecommendations__recommendation=tier)
return pubs.count() return pubs.count()
def avg_processing_duration(self): def avg_processing_duration(self):
duration = Publication.objects.filter( duration = Publication.objects.filter(
in_issue__in_volume=self).aggregate( in_issue__in_volume=self).aggregate(
avg=Avg(F('publication_date') - F('submission_date')))['avg'] avg=Avg(F('publication_date') - F('submission_date')))['avg']
if not duration: return 0 return duration.total_seconds() / 86400
return duration.days + duration.seconds/86400
def citation_rate(self): def citation_rate(self, tier=None):
""" """
Returns the citation rate in units of nr citations per article per year. Returns the citation rate in units of nr citations per article per year.
""" """
pubs = Publication.objects.filter(in_issue__in_volume=self) pubs = Publication.objects.filter(in_issue__in_volume=self)
if Tier: if tier:
pubs.filter(accepted_submission__eicrecommendations__recommendation=Tier) pubs.filter(accepted_submission__eicrecommendations__recommendation=tier)
ncites = 0 ncites = 0
deltat = 1 # to avoid division by zero deltat = 1 # to avoid division by zero
for pub in pubs: for pub in pubs:
if pub.citedby and pub.latest_citedby_update: if pub.citedby and pub.latest_citedby_update:
ncites += len(pub.citedby) ncites += len(pub.citedby)
deltat += (pub.latest_citedby_update.date() - pub.publication_date).days deltat += (pub.latest_citedby_update.date() - pub.publication_date).days
return (ncites * 365.25/deltat) return (ncites * 365.25 / deltat)
class Issue(models.Model): class Issue(models.Model):
...@@ -177,29 +176,28 @@ class Issue(models.Model): ...@@ -177,29 +176,28 @@ class Issue(models.Model):
return self.start_date <= timezone.now().date() and\ return self.start_date <= timezone.now().date() and\
self.until_date >= timezone.now().date() self.until_date >= timezone.now().date()
def nr_publications(self, Tier=None): def nr_publications(self, tier=None):
pubs = Publication.objects.filter(in_issue=self) publications = Publication.objects.filter(in_issue=self)
if Tier: if tier:
pubs.filter(accepted_submission__eicrecommendations__recommendation=Tier) publications.filter(accepted_submission__eicrecommendations__recommendation=tier)
return pubs.count() return publications.count()
def avg_processing_duration(self): def avg_processing_duration(self):
duration = Publication.objects.filter( duration = Publication.objects.filter(
in_issue=self).aggregate( in_issue=self).aggregate(
avg=Avg(F('publication_date') - F('submission_date')))['avg'] avg=Avg(F('publication_date') - F('submission_date')))['avg']
if not duration: return 0 return duration.total_seconds() / 86400
return duration.days + duration.seconds/86400
def citation_rate(self, Tier=None): def citation_rate(self, tier=None):
""" """
Returns the citation rate in units of nr citations per article per year. Returns the citation rate in units of nr citations per article per year.
""" """
pubs = Publication.objects.filter(in_issue=self) publications = Publication.objects.filter(in_issue=self)
if Tier: if tier:
pubs.filter(accepted_submission__eicrecommendations__recommendation=Tier) publications.filter(accepted_submission__eicrecommendations__recommendation=tier)
ncites = 0 ncites = 0
deltat = 1 # to avoid division by zero deltat = 1 # to avoid division by zero
for pub in pubs: for pub in publications:
if pub.citedby and pub.latest_citedby_update: if pub.citedby and pub.latest_citedby_update:
ncites += len(pub.citedby) ncites += len(pub.citedby)
deltat += (pub.latest_citedby_update.date() - pub.publication_date).days deltat += (pub.latest_citedby_update.date() - pub.publication_date).days
......
...@@ -107,28 +107,28 @@ ...@@ -107,28 +107,28 @@
<tr> <tr>
{% if issue %} {% if issue %}
<td>{% issue.doi_label }}</td> <td>{% issue.doi_label }}</td>
<td>{% nr_publications issue Tier=1 %}</td> <td>{% nr_publications issue tier=1 %}</td>
<td>{% nr_publications issue Tier=2 %}</td> <td>{% nr_publications issue tier=2 %}</td>
<td>{% nr_publications issue Tier=3 %}</td> <td>{% nr_publications issue tier=3 %}</td>
<td>{% citation_rate issue Tier=1 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate issue tier=1 as cr %}{{ cr|floatformat:2 }}</td>
<td>{% citation_rate issue Tier=2 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate issue tier=2 as cr %}{{ cr|floatformat:2 }}</td>
<td>{% citation_rate issue Tier=3 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate issue tier=3 as cr %}{{ cr|floatformat:2 }}</td>
{% elif volume %} {% elif volume %}
<td>{{ volume.doi_label }}</td> <td>{{ volume.doi_label }}</td>
<td>{% nr_publications volume Tier=1 %}</td> <td>{% nr_publications volume tier=1 %}</td>
<td>{% nr_publications volume Tier=2 %}</td> <td>{% nr_publications volume tier=2 %}</td>
<td>{% nr_publications volume Tier=3 %}</td> <td>{% nr_publications volume tier=3 %}</td>
<td>{% citation_rate volume Tier=1 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate volume tier=1 as cr %}{{ cr|floatformat:2 }}</td>
<td>{% citation_rate volume Tier=2 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate volume tier=2 as cr %}{{ cr|floatformat:2 }}</td>
<td>{% citation_rate volume Tier=3 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate volume tier=3 as cr %}{{ cr|floatformat:2 }}</td>
{% else %} {% else %}
<td>{{ journal.doi_label }}</td> <td>{{ journal.doi_label }}</td>
<td>{% nr_publications journal Tier=1 %}</td> <td>{% nr_publications journal tier=1 %}</td>
<td>{% nr_publications journal Tier=2 %}</td> <td>{% nr_publications journal tier=2 %}</td>
<td>{% nr_publications journal Tier=3 %}</td> <td>{% nr_publications journal tier=3 %}</td>
<td>{% citation_rate journal Tier=1 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate journal tier=1 as cr %}{{ cr|floatformat:2 }}</td>
<td>{% citation_rate journal Tier=2 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate journal tier=2 as cr %}{{ cr|floatformat:2 }}</td>
<td>{% citation_rate journal Tier=3 as cr %}{{ cr|floatformat:2 }}</td> <td>{% citation_rate journal tier=3 as cr %}{{ cr|floatformat:2 }}</td>
{% endif %} {% endif %}
</tr> </tr>
</table> </table>
......
from django import template from django import template
from django.db.models import Avg, F
from journals.models import Publication
from submissions.constants import SUBMISSION_STATUS_OUT_OF_POOL
from submissions.models import Submission
register = template.Library() register = template.Library()
@register.simple_tag @register.simple_tag
def avg_processing_duration(obj, *args, **kwargs): def avg_processing_duration(obj, *args, **kwargs):
method = getattr(obj, avg_processing_duration) return getattr(obj, 'avg_processing_duration')(*args, **kwargs)
return method(*args, **kwargs)
@register.simple_tag @register.simple_tag
def nr_publications(obj, *args, **kwargs): def nr_publications(obj, *args, **kwargs):
method = getattr(obj, nr_publications) return getattr(obj, 'nr_publications')(*args, **kwargs)
return method(*args, **kwargs)
@register.simple_tag @register.simple_tag
def citation_rate(obj, *args, **kwargs): def citation_rate(obj, *args, **kwargs):
method = getattr(obj, citation_rate) return getattr(obj, 'citation_rate')(*args, **kwargs)
return method(*args, **kwargs)
@register.filter(name='submissions_count_distinct') @register.filter(name='submissions_count_distinct')
......
import datetime import datetime
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import permission_required
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from journals.constants import SCIPOST_JOURNALS_SUBMIT from journals.models import Journal, Volume, Issue
from journals.models import Journal, Volume, Issue, Publication
from submissions.models import Submission from submissions.models import Submission
...@@ -19,8 +18,9 @@ def statistics(request, journal_doi_label=None, volume_nr=None, issue_nr=None, y ...@@ -19,8 +18,9 @@ def statistics(request, journal_doi_label=None, volume_nr=None, issue_nr=None, y
context['journal'] = journal context['journal'] = journal
if year: if year:
context['year'] = year context['year'] = year
submissions = Submission.objects.filter(submitted_to_journal=journal_doi_label submissions = Submission.objects.filter(
).originally_submitted(datetime.date(int(year), 1, 1), datetime.date(int(year), 12, 31)) submitted_to_journal=journal_doi_label).originally_submitted(
datetime.date(int(year), 1, 1), datetime.date(int(year), 12, 31))
context['submissions'] = submissions context['submissions'] = submissions
nr_ref_inv = 0 nr_ref_inv = 0
nr_acc = 0 nr_acc = 0
...@@ -29,8 +29,6 @@ def statistics(request, journal_doi_label=None, volume_nr=None, issue_nr=None, y ...@@ -29,8 +29,6 @@ def statistics(request, journal_doi_label=None, volume_nr=None, issue_nr=None, y
nr_rep_obt = 0 nr_rep_obt = 0
nr_rep_obt_inv = 0 nr_rep_obt_inv = 0
nr_rep_obt_con = 0 nr_rep_obt_con = 0
nr_rep_ref = 0
nr_aw_vet = 0
for submission in submissions: for submission in submissions:
nr_ref_inv += submission.referee_invitations.count() nr_ref_inv += submission.referee_invitations.count()
nr_acc += submission.count_accepted_invitations() nr_acc += submission.count_accepted_invitations()
......
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