diff --git a/submissions/models.py b/submissions/models.py index d03e96c2888af6a9592e40ed7c6bc30106b5b2d2..fdacfc9f99876b495e2ec5835d4ffed5a0468c13 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -29,11 +29,13 @@ from journals.constants import SCIPOST_JOURNALS_SUBMIT, SCIPOST_JOURNALS_DOMAINS from journals.models import Publication -############### -# Submissions: -############### class Submission(models.Model): - # Main submission fields + """ + Submission is a SciPost register of an ArXiv article. This object is the central + instance for every action, recommendation, communication, etc. etc. that is related to the + refereeing cycle of a Submission. A possible Publication object is later directly related + to this Submission instance. + """ author_comments = models.TextField(blank=True) author_list = models.CharField(max_length=1000, verbose_name="author list") discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics') @@ -53,7 +55,7 @@ class Submission(models.Model): models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS), blank=True, null=True) - # Status set by Editors + # Refereeing fields status = models.CharField(max_length=30, choices=SUBMISSION_STATUS, default=STATUS_UNASSIGNED) refereeing_cycle = models.CharField(max_length=30, choices=SUBMISSION_CYCLES, default=CYCLE_DEFAULT) @@ -107,6 +109,9 @@ class Submission(models.Model): objects = SubmissionQuerySet.as_manager() + class Meta: + app_label = 'submissions' + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._update_cycle() @@ -129,8 +134,8 @@ class Submission(models.Model): else: header += ' (deprecated version ' + str(self.arxiv_vn_nr) + ')' try: - header += ' (published as %s (%s))' % (self.publication.doi_string, - self.publication.publication_date.strftime('%Y')) + header += ' (published as %s (%s))' % ( + self.publication.doi_string, self.publication.publication_date.strftime('%Y')) except Publication.DoesNotExist: pass return header @@ -274,9 +279,15 @@ class SubmissionEvent(SubmissionRelatedObjectMixin, TimeStampedModel): ###################### class EditorialAssignment(SubmissionRelatedObjectMixin, models.Model): + """ + EditorialAssignment is a registration for Fellows of their duties of being a + Editor-in-charge for a specific Submission. This model could start as a invitation only, + which should then be accepted or declined by the invited. + """ submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE) to = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE) accepted = models.NullBooleanField(choices=ASSIGNMENT_NULLBOOL, default=None) + # attribute `deprecated' becomes True if another Fellow becomes Editor-in-charge deprecated = models.BooleanField(default=False) completed = models.BooleanField(default=False) @@ -477,17 +488,16 @@ class Report(SubmissionRelatedObjectMixin, models.Model): Check if current Report is a `FollowupReport`. A Report is a `FollowupReport` if the author of the report already has a vetted report in the series of the specific Submission. """ - return (self.author.reports.accepted() - .filter(submission__arxiv_identifier_wo_vn_nr=self.submission.arxiv_identifier_wo_vn_nr, - submission__arxiv_vn_nr__lt=self.submission.arxiv_vn_nr) - .exists()) + return (self.author.reports.accepted().filter( + submission__arxiv_identifier_wo_vn_nr=self.submission.arxiv_identifier_wo_vn_nr, + submission__arxiv_vn_nr__lt=self.submission.arxiv_vn_nr).exists()) def latest_report_from_series(self): """ Get latest Report from the same author for the Submission series. """ - return (self.author.reports.accepted() - .filter(submission__arxiv_identifier_wo_vn_nr=self.submission.arxiv_identifier_wo_vn_nr) + return (self.author.reports.accepted().filter( + submission__arxiv_identifier_wo_vn_nr=self.submission.arxiv_identifier_wo_vn_nr) .order_by('submission__arxiv_identifier_wo_vn_nr').last()) @@ -520,12 +530,12 @@ class EditorialCommunication(SubmissionRelatedObjectMixin, models.Model): return output -############################ -# Editorial Recommendation # -############################ - -# From the Editor-in-charge of a Submission class EICRecommendation(SubmissionRelatedObjectMixin, models.Model): + """ + The EICRecommendation is the recommendation of a Submission written by + the Editor-in-charge made at the end of the refereeing cycle. It can be voted for by + a subset of Fellows and should contain the actual publication decision. + """ submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE, related_name='eicrecommendations') date_submitted = models.DateTimeField('date submitted', default=timezone.now) @@ -574,7 +584,10 @@ class EICRecommendation(SubmissionRelatedObjectMixin, models.Model): class iThenticateReport(TimeStampedModel): - # is_pending = models.BooleanField(default=True) + """ + iThenticateReport is the SciPost register of an iThenticate report. It saves + basic information coming from iThenticate into the SciPost database for easy access. + """ uploaded_time = models.DateTimeField(null=True, blank=True) processed_time = models.DateTimeField(null=True, blank=True) doc_id = models.IntegerField(primary_key=True)