From cad2fa4c400eeb61fc041187e368e17ac327c6a1 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Fri, 7 Jul 2017 23:28:23 +0200
Subject: [PATCH] Add doi to Report

---
 submissions/managers.py                       | 26 ++++++++++++++-----
 .../migrations/0048_merge_20170707_1857.py    | 16 ++++++++++++
 .../0049_submission_pdf_refereeing_pack.py    | 20 ++++++++++++++
 .../migrations/0050_auto_20170707_2126.py     | 24 +++++++++++++++++
 submissions/models.py                         | 10 +++++++
 5 files changed, 89 insertions(+), 7 deletions(-)
 create mode 100644 submissions/migrations/0048_merge_20170707_1857.py
 create mode 100644 submissions/migrations/0049_submission_pdf_refereeing_pack.py
 create mode 100644 submissions/migrations/0050_auto_20170707_2126.py

diff --git a/submissions/managers.py b/submissions/managers.py
index 7e8a148b3..7487d2f91 100644
--- a/submissions/managers.py
+++ b/submissions/managers.py
@@ -4,8 +4,8 @@ from django.db.models import Q
 from .constants import SUBMISSION_STATUS_OUT_OF_POOL, SUBMISSION_STATUS_PUBLICLY_UNLISTED,\
                        SUBMISSION_STATUS_PUBLICLY_INVISIBLE, STATUS_UNVETTED, STATUS_VETTED,\
                        STATUS_UNCLEAR, STATUS_INCORRECT, STATUS_NOT_USEFUL, STATUS_NOT_ACADEMIC,\
-                       SUBMISSION_HTTP404_ON_EDITORIAL_PAGE, STATUS_DRAFT,\
-                       SUBMISSION_EXCLUDE_FROM_REPORTING
+                       SUBMISSION_HTTP404_ON_EDITORIAL_PAGE, STATUS_DRAFT, STATUS_PUBLISHED,\
+                       SUBMISSION_EXCLUDE_FROM_REPORTING, STATUS_REJECTED_VISIBLE, STATUS_ACCEPTED
 
 
 class SubmissionManager(models.Manager):
@@ -57,6 +57,13 @@ class SubmissionManager(models.Manager):
                 .order_by('-submission_date'))
 
     def public(self):
+        """
+        This query contains set of public submissions, i.e. also containing
+        submissions with status "published" or "resubmitted".
+        """
+        return self.exclude(status__in=SUBMISSION_STATUS_PUBLICLY_INVISIBLE)
+
+    def public_unlisted(self):
         """
         List only all public submissions. Should be used as a default filter!
 
@@ -66,13 +73,12 @@ class SubmissionManager(models.Manager):
         """
         return self.exclude(status__in=SUBMISSION_STATUS_PUBLICLY_UNLISTED)
 
-    def public_overcomplete(self):
+    def public_newest(self):
         """
-        This query contains an overcomplete set of public submissions, i.e. also containing
-        submissions with status "published" or "resubmitted".
+        This query contains set of public() submissions, filtered to only the newest available
+        version.
         """
-        queryset = self.exclude(status__in=SUBMISSION_STATUS_PUBLICLY_INVISIBLE)
-        return self._newest_version_only(queryset)
+        return self._newest_version_only(self.public())
 
     def open_for_reporting(self):
         """
@@ -81,6 +87,12 @@ class SubmissionManager(models.Manager):
         """
         return self.exclude(status__in=SUBMISSION_EXCLUDE_FROM_REPORTING)
 
+    def treated(self):
+        """
+        This query returns all Submissions that are expected to be 'done'.
+        """
+        return self.filter(status__in=[STATUS_ACCEPTED, STATUS_REJECTED_VISIBLE, STATUS_PUBLISHED])
+
 
 class EditorialAssignmentManager(models.Manager):
     def get_for_user_in_pool(self, user):
diff --git a/submissions/migrations/0048_merge_20170707_1857.py b/submissions/migrations/0048_merge_20170707_1857.py
new file mode 100644
index 000000000..e0b38b3d8
--- /dev/null
+++ b/submissions/migrations/0048_merge_20170707_1857.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-07-07 16:57
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0047_auto_20170625_1331'),
+        ('submissions', '0047_submission_acceptance_date'),
+    ]
+
+    operations = [
+    ]
diff --git a/submissions/migrations/0049_submission_pdf_refereeing_pack.py b/submissions/migrations/0049_submission_pdf_refereeing_pack.py
new file mode 100644
index 000000000..32166d197
--- /dev/null
+++ b/submissions/migrations/0049_submission_pdf_refereeing_pack.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-07-07 16:59
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0048_merge_20170707_1857'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='submission',
+            name='pdf_refereeing_pack',
+            field=models.FileField(blank=True, max_length=200, upload_to='UPLOADS/REFEREE/%Y/%m/'),
+        ),
+    ]
diff --git a/submissions/migrations/0050_auto_20170707_2126.py b/submissions/migrations/0050_auto_20170707_2126.py
new file mode 100644
index 000000000..6a454b3e1
--- /dev/null
+++ b/submissions/migrations/0050_auto_20170707_2126.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-07-07 19:26
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0049_submission_pdf_refereeing_pack'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='report',
+            options={'ordering': ['report_nr']},
+        ),
+        migrations.AddField(
+            model_name='report',
+            name='doi_label',
+            field=models.CharField(blank=True, max_length=200),
+        ),
+    ]
diff --git a/submissions/models.py b/submissions/models.py
index 6dc55f8d0..b3c04de08 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -75,6 +75,9 @@ class Submission(ArxivCallable, models.Model):
     arxiv_vn_nr = models.PositiveSmallIntegerField(default=1)
     arxiv_link = models.URLField(verbose_name='arXiv link (including version nr)')
 
+    pdf_refereeing_pack = models.FileField(upload_to='UPLOADS/REFEREE/%Y/%m/',
+                                           max_length=200, blank=True)
+
     # Metadata
     metadata = JSONField(default={}, blank=True, null=True)
     submission_date = models.DateField(verbose_name='submission date', default=datetime.date.today)
@@ -272,6 +275,7 @@ class Report(models.Model):
     recommendation = models.SmallIntegerField(choices=REPORT_REC)
     remarks_for_editors = models.TextField(default='', blank=True,
                                            verbose_name='optional remarks for the Editors only')
+    doi_label = models.CharField(max_length=200, blank=True)
     anonymous = models.BooleanField(default=True, verbose_name='Publish anonymously')
     pdf_report = models.FileField(upload_to='UPLOADS/REPORTS/%Y/%m/', max_length=200, blank=True)
 
@@ -279,6 +283,7 @@ class Report(models.Model):
 
     class Meta:
         unique_together = ('submission', 'report_nr')
+        ordering = ['report_nr']
 
     def __str__(self):
         return (self.author.user.first_name + ' ' + self.author.user.last_name + ' on ' +
@@ -287,6 +292,11 @@ class Report(models.Model):
     def get_absolute_url(self):
         return self.submission.get_absolute_url() + '#report_' + str(self.report_nr)
 
+    @property
+    def doi_string(self):
+        if self.doi_label:
+            return '10.21468/' + self.doi_label
+
     def save(self, *args, **kwargs):
         # Control Report count per Submission.
         if not self.report_nr:
-- 
GitLab