SciPost Code Repository

Skip to content
Snippets Groups Projects
managers.py 2.05 KiB
Newer Older
__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django.db import models
from django.utils import timezone

from .constants import STATUS_PUBLISHED, STATUS_DRAFT, PUBLICATION_PUBLISHED, ISSUES_AND_VOLUMES,\
Jorran de Wit's avatar
Jorran de Wit committed
    ISSUES_ONLY, INDIVIDUAL_PUBLCATIONS
class JournalQuerySet(models.QuerySet):
Jorran de Wit's avatar
Jorran de Wit committed
    def active(self):
        return self.filter(active=True)

    def has_issues(self):
        return self.filter(structure__in=(ISSUES_AND_VOLUMES, ISSUES_ONLY))
Jorran de Wit's avatar
Jorran de Wit committed

Jorran de Wit's avatar
Jorran de Wit committed
    def has_individual_publications(self):
        return self.filter(structure=INDIVIDUAL_PUBLCATIONS)
class IssueQuerySet(models.QuerySet):
Jorran de Wit's avatar
Jorran de Wit committed
    def published(self):
        return self.filter(status=STATUS_PUBLISHED)
Jorran de Wit's avatar
Jorran de Wit committed
    def in_draft(self):
        return self.filter(status=STATUS_DRAFT)
Jorran de Wit's avatar
Jorran de Wit committed
    def for_journal(self, journal_name):
        return self.filter(
            models.Q(in_volume__in_journal__name=journal_name) |
            models.Q(in_journal__name=journal_name))
    def get_current_issue(self):
        return self.published(
            start_date__lte=timezone.now(), until_date__gte=timezone.now()).first()
class PublicationQuerySet(models.QuerySet):
Jorran de Wit's avatar
Jorran de Wit committed
    def published(self):
        return self.filter(status=PUBLICATION_PUBLISHED).filter(
            models.Q(in_issue__status=STATUS_PUBLISHED) | models.Q(in_journal__active=True))
    def unpublished(self):
        return self.exclude(status=PUBLICATION_PUBLISHED)

    def in_draft(self):
        return self.filter(in_issue__status=STATUS_DRAFT)
Jorran de Wit's avatar
Jorran de Wit committed

    def drafts(self):
        return self.filter(status=STATUS_DRAFT)

    def for_subject(self, subject_code):
        return self.filter(
            models.Q(subject_area=subject_code) |
            models.Q(secondary_areas__contains=[subject_code]))
Jorran de Wit's avatar
Jorran de Wit committed

Jorran de Wit's avatar
Jorran de Wit committed
    def for_journal(self, journal_name):
        return self.filter(
            models.Q(in_issue__in_volume__in_journal__name=journal_name) |
            models.Q(in_journal__name=journal_name))
Jorran de Wit's avatar
Jorran de Wit committed

    def most_cited(self, n_returns=5):
        return self.order_by('-number_of_citations')[:n_returns]