From b682f6b5abbb7e9eda0d1bf2b62ec8ad6356da86 Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Mon, 14 Aug 2017 14:39:40 +0200 Subject: [PATCH] Improve submissions managers --- submissions/managers.py | 28 +++++++++++++++++++++++++++- submissions/mixins.py | 2 +- submissions/models.py | 10 ++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/submissions/managers.py b/submissions/managers.py index 155f8b243..3465c643a 100644 --- a/submissions/managers.py +++ b/submissions/managers.py @@ -1,5 +1,8 @@ +import datetime + from django.db import models from django.db.models import Q +from django.utils import timezone from .constants import SUBMISSION_STATUS_OUT_OF_POOL, SUBMISSION_STATUS_PUBLICLY_UNLISTED,\ SUBMISSION_STATUS_PUBLICLY_INVISIBLE, STATUS_UNVETTED, STATUS_VETTED,\ @@ -72,7 +75,7 @@ class SubmissionQuerySet(models.QuerySet): """ return (self.exclude(is_current=False) .exclude(status__in=SUBMISSION_STATUS_OUT_OF_POOL) - .exclude(status=STATUS_UNASSIGNED)) + .exclude(status__in=[STATUS_UNASSIGNED, STATUS_ACCEPTED])) def public(self): """ @@ -134,6 +137,12 @@ class SubmissionEventQuerySet(models.QuerySet): """ return self.filter(event__in=[EVENT_FOR_EIC, EVENT_GENERAL]) + def last_hours(self, hours=24): + """ + Return all events of the last `hours` hours. + """ + return self.filter(created__gte=timezone.now() - datetime.timedelta(hours=hours)) + class EditorialAssignmentManager(models.Manager): def get_for_user_in_pool(self, user): @@ -185,3 +194,20 @@ class ReportQuerySet(models.QuerySet): def non_draft(self): return self.exclude(status=STATUS_DRAFT) + + def contributed(self): + return self.filter(invited=False) + + def invited(self): + return self.filter(invited=True) + + +class RefereeInvitationQuerySet(models.QuerySet): + def pending(self): + return self.filter(accepted=None) + + def accepted(self): + return self.filter(accepted=True) + + def declined(self): + return self.filter(accepted=False) diff --git a/submissions/mixins.py b/submissions/mixins.py index 133c88447..4bf8ee595 100644 --- a/submissions/mixins.py +++ b/submissions/mixins.py @@ -26,7 +26,7 @@ class SubmissionAdminViewMixin(FriendlyPermissionMixin): administrational actions regarding Submissions. :editorial_page: Submission is element of the set pool() if False, - else Submission is element of the subset editorial_page() + else Submission is element of the subset: editorial_page() """ editorial_page = False slug_field = 'arxiv_identifier_w_vn_nr' diff --git a/submissions/models.py b/submissions/models.py index 9f973237a..87af26ed1 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -15,7 +15,7 @@ from .constants import ASSIGNMENT_REFUSAL_REASONS, ASSIGNMENT_NULLBOOL,\ SUBMISSION_CYCLES, CYCLE_DEFAULT, CYCLE_SHORT, CYCLE_DIRECT_REC,\ EVENT_GENERAL, EVENT_TYPES, EVENT_FOR_AUTHOR, EVENT_FOR_EIC from .managers import SubmissionQuerySet, EditorialAssignmentManager, EICRecommendationManager,\ - ReportQuerySet, SubmissionEventQuerySet + ReportQuerySet, SubmissionEventQuerySet, RefereeInvitationQuerySet from .utils import ShortSubmissionCycle, DirectRecommendationSubmissionCycle,\ GeneralSubmissionCycle @@ -283,6 +283,8 @@ class RefereeInvitation(models.Model): fulfilled = models.BooleanField(default=False) # True if a Report has been submitted cancelled = models.BooleanField(default=False) # True if EIC has deactivated invitation + objects = RefereeInvitationQuerySet.as_manager() + def __str__(self): return (self.first_name + ' ' + self.last_name + ' to referee ' + self.submission.title[:30] + ' by ' + self.submission.author_list[:30] + @@ -471,7 +473,7 @@ class EICRecommendation(models.Model): recommendation = models.SmallIntegerField(choices=REPORT_REC) # Editorial Fellows who have assessed this recommendation: - eligible_to_vote = models.ManyToManyField(Contributor, blank=True, + eligible_to_vote = models.ManyToManyField('scipost.Contributor', blank=True, related_name='eligible_to_vote') voted_for = models.ManyToManyField(Contributor, blank=True, related_name='voted_for') voted_against = models.ManyToManyField(Contributor, blank=True, related_name='voted_against') @@ -503,3 +505,7 @@ class iThenticateReport(TimeStampedModel): processed_time = models.DateTimeField(null=True, blank=True) doc_id = models.IntegerField(primary_key=True) percent_match = models.IntegerField(null=True, blank=True) + + @property + def score(self): + return self.percent_match -- GitLab