from django.utils import timezone from django.db import models from django.contrib.auth.models import User from .models import * from scipost.models import * from journals.models import * ############### # Submissions: ############### SUBMISSION_STATUS = ( (0, 'unassigned'), (1, 'editor in charge assigned'), (2, 'under review'), (3, 'reviewed, peer checking period'), (4, 'reviewed, peer checked, editorial decision pending'), (5, 'editorial decision'), ) submission_status_dict = dict(SUBMISSION_STATUS) class Submission(models.Model): submitted_by = models.ForeignKey(Contributor) vetted = models.BooleanField(default=False) editor_in_charge = models.ForeignKey(Contributor, related_name="editor_in_charge", blank=True, null=True) # assigned by Journal Editor submitted_to_journal = models.CharField(max_length=30, choices=SCIPOST_JOURNALS_SUBMIT, verbose_name="Journal to be submitted to") discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics') domain = models.CharField(max_length=3, choices=SCIPOST_JOURNALS_DOMAINS) specialization = models.CharField(max_length=1, choices=SCIPOST_JOURNALS_SPECIALIZATIONS) status = models.SmallIntegerField(choices=SUBMISSION_STATUS) # set by Editors open_for_reporting = models.BooleanField(default=True) open_for_commenting = models.BooleanField(default=True) title = models.CharField(max_length=300) author_list = models.CharField(max_length=1000, verbose_name="author list") # Authors which have been mapped to contributors: authors = models.ManyToManyField (Contributor, blank=True, related_name='authors_sub') abstract = models.TextField() arxiv_link = models.URLField(verbose_name='arXiv link (including version nr)') submission_date = models.DateField(verbose_name='submission date') nr_clarity_ratings = models.IntegerField(default=0) clarity_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_validity_ratings = models.IntegerField(default=0) validity_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_rigour_ratings = models.IntegerField(default=0) rigour_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_originality_ratings = models.IntegerField(default=0) originality_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_significance_ratings = models.IntegerField(default=0) significance_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) latest_activity = models.DateTimeField(default=timezone.now) def __str__ (self): return self.title def header_as_table (self): header = '<table>' header += '<tr><td>Title: </td><td> </td><td>' + self.title + '</td></tr>' header += '<tr><td>Author(s): </td><td> </td><td>' + self.author_list + '</td></tr>' header += '<tr><td>arxiv Link: </td><td> </td><td><a href="' + self.arxiv_link + '">' + self.arxiv_link + '</a></td></tr>' header += '<tr><td>Date submitted: </td><td> </td><td>' + str(self.submission_date) + '</td></tr>' header += '<tr><td>Submitted by: </td><td> </td><td>' + str(self.submitted_by) + '</td></tr>' header += '<tr><td>Submitted to: </td><td> </td><td>' + journals_submit_dict[self.submitted_to_journal] + '</td></tr>' header += '<tr><td>Domain(s): </td><td> </td><td>' + journals_domains_dict[self.domain] + '</td></tr>' header += '<tr><td>Specialization: </td><td> </td><td>' + journals_spec_dict[self.specialization] + '</td></tr>' header += '</table>' return header def submission_info_as_table (self): header = '<table>' header += '<tr><td>Editor in charge: </td><td> </td><td>' + str(self.editor_in_charge) + '</td></tr>' header += '<tr><td>Vetted: </td><td> </td><td>' + str(self.vetted) + '</td></tr>' header += '<tr><td>Status: </td><td> </td><td>' + submission_status_dict[self.status] + '</td></tr>' header += '</table>' return header ########### # Reports: ########### REFEREE_QUALIFICATION = ( (0, 'not qualified'), (1, 'generally qualified'), (2, 'knowledgeable in this subject'), (3, 'very knowledgeable in this subject'), (4, 'expert in this subject'), ) ref_qualif_dict = dict(REFEREE_QUALIFICATION) QUALITY_SPEC = ( (0, 'mediocre'), (1, 'below threshold'), (2, 'acceptable'), (3, 'reasonable'), (4, 'good'), (5, 'excellent'), (6, 'perfect'), ) REPORT_REC = ( (1, 'Publish as Tier I (top 10% of papers in this journal)'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject') ) class Report(models.Model): """ Both types of reports, invited or contributed. """ # status: # 1: vetted (by Contributor with rank >= 2) # 0: unvetted # -1: rejected (unclear) # -2: rejected (incorrect) # -3: rejected (not useful) status = models.SmallIntegerField(default=0) submission = models.ForeignKey(Submission) author = models.ForeignKey(Contributor) qualification = models.PositiveSmallIntegerField(choices=REFEREE_QUALIFICATION, verbose_name="Qualification to referee this: I am ", blank=True) strengths = models.TextField() weaknesses = models.TextField() report = models.TextField() requested_changes = models.TextField(verbose_name="requested changes") formatting = models.SmallIntegerField(choices=QUALITY_SPEC, blank=True, default=0, verbose_name="Quality of paper formatting") grammar = models.SmallIntegerField(choices=QUALITY_SPEC, blank=True, default=0, verbose_name="Quality of English grammar") recommendation = models.SmallIntegerField(choices=REPORT_REC) date_invited = models.DateTimeField('date invited', blank=True, null=True) invited_by = models.ForeignKey(Contributor, blank=True, null=True, related_name='invited_by') date_submitted = models.DateTimeField('date submitted') # Aggregates of ratings applied to this report: nr_relevance_ratings = models.IntegerField(default=0) relevance_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_importance_ratings = models.IntegerField(default=0) importance_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_clarity_ratings = models.IntegerField(default=0) clarity_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_validity_ratings = models.IntegerField(default=0) validity_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True) nr_rigour_ratings = models.IntegerField(default=0) rigour_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0, null=True)