From cf6b5fc0a27e7fe7323344a92fc0b781be422c9d Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Thu, 14 Jan 2016 18:25:47 +0100 Subject: [PATCH] App consolidation: reports merged into submissions --- SciPost_v1/settings.py | 2 +- SciPost_v1/urls.py | 2 +- commentaries/migrations/0001_initial.py | 18 ++-- comments/migrations/0001_initial.py | 41 +++++---- comments/models.py | 3 +- ratings/migrations/0001_initial.py | 15 ++-- ratings/models.py | 3 +- reports/__init__.py | 0 reports/admin.py | 5 -- reports/forms.py | 35 -------- reports/migrations/0001_initial.py | 43 ---------- reports/migrations/__init__.py | 0 reports/models.py | 62 -------------- reports/tests.py | 3 - reports/urls.py | 12 --- reports/views.py | 83 ------------------- scipost/templates/scipost/personal_page.html | 2 +- scipost/views.py | 4 +- submissions/admin.py | 2 + submissions/forms.py | 34 ++++++++ submissions/migrations/0001_initial.py | 48 +++++++++-- submissions/models.py | 52 +++++++++++- .../templates/submissions}/submit_report.html | 2 +- .../submissions}/submit_report_ack.html | 0 .../vet_submitted_report_ack.html | 2 +- .../submissions}/vet_submitted_reports.html | 2 +- submissions/urls.py | 5 ++ submissions/views.py | 69 +++++++++++++++ 28 files changed, 246 insertions(+), 303 deletions(-) delete mode 100644 reports/__init__.py delete mode 100644 reports/admin.py delete mode 100644 reports/forms.py delete mode 100644 reports/migrations/0001_initial.py delete mode 100644 reports/migrations/__init__.py delete mode 100644 reports/models.py delete mode 100644 reports/tests.py delete mode 100644 reports/urls.py delete mode 100644 reports/views.py rename {reports/templates/reports => submissions/templates/submissions}/submit_report.html (92%) rename {reports/templates/reports => submissions/templates/submissions}/submit_report_ack.html (100%) rename {reports/templates/reports => submissions/templates/submissions}/vet_submitted_report_ack.html (67%) rename {reports/templates/reports => submissions/templates/submissions}/vet_submitted_reports.html (92%) diff --git a/SciPost_v1/settings.py b/SciPost_v1/settings.py index 797c834c1..141bd2ca4 100644 --- a/SciPost_v1/settings.py +++ b/SciPost_v1/settings.py @@ -59,7 +59,7 @@ INSTALLED_APPS = ( # 'contributors', 'journals', 'ratings', - 'reports', +# 'reports', 'scipost', 'submissions', ) diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py index 3d8ea9cf8..2f59a7489 100644 --- a/SciPost_v1/urls.py +++ b/SciPost_v1/urls.py @@ -25,6 +25,6 @@ urlpatterns = [ # url(r'^contributors/', include('contributors.urls', namespace="contributors")), url(r'^journals/', include('journals.urls', namespace="journals")), url(r'^ratings/', include('ratings.urls', namespace="ratings")), - url(r'^reports/', include('reports.urls', namespace="reports")), +# url(r'^reports/', include('reports.urls', namespace="reports")), url(r'^submissions/', include('submissions.urls', namespace="submissions")), ] diff --git a/commentaries/migrations/0001_initial.py b/commentaries/migrations/0001_initial.py index b4993173d..e798f7a3c 100644 --- a/commentaries/migrations/0001_initial.py +++ b/commentaries/migrations/0001_initial.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Commentary', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('vetted', models.BooleanField(default=False)), ('type', models.CharField(max_length=9)), ('open_for_commenting', models.BooleanField(default=True)), @@ -26,19 +26,19 @@ class Migration(migrations.Migration): ('pub_date', models.DateField(verbose_name='date of original publication')), ('pub_abstract', models.TextField()), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('clarity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('validity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('rigour_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_originality_ratings', models.IntegerField(default=0)), - ('originality_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('originality_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_significance_ratings', models.IntegerField(default=0)), - ('significance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('significance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)), - ('authors', models.ManyToManyField(to='scipost.Contributor', blank=True, related_name='authors_com')), - ('requested_by', models.ForeignKey(blank=True, related_name='requested_by', to='scipost.Contributor', null=True)), - ('vetted_by', models.ForeignKey(blank=True, to='scipost.Contributor', null=True)), + ('authors', models.ManyToManyField(related_name='authors_com', blank=True, to='scipost.Contributor')), + ('requested_by', models.ForeignKey(null=True, blank=True, related_name='requested_by', to='scipost.Contributor')), + ('vetted_by', models.ForeignKey(null=True, blank=True, to='scipost.Contributor')), ], ), ] diff --git a/comments/migrations/0001_initial.py b/comments/migrations/0001_initial.py index 100a47806..cda402bda 100644 --- a/comments/migrations/0001_initial.py +++ b/comments/migrations/0001_initial.py @@ -7,38 +7,37 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('reports', '0001_initial'), - ('commentaries', '0001_initial'), ('scipost', '0001_initial'), ('submissions', '0001_initial'), + ('commentaries', '0001_initial'), ] operations = [ migrations.CreateModel( name='AuthorReply', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('status', models.SmallIntegerField(default=0)), ('reply_text', models.TextField()), ('date_submitted', models.DateTimeField(verbose_name='date submitted')), ('nr_relevance_ratings', models.IntegerField(default=0)), - ('relevance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('relevance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_importance_ratings', models.IntegerField(default=0)), - ('importance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('importance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('clarity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('validity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('rigour_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('author', models.ForeignKey(to='scipost.Contributor')), - ('commentary', models.ForeignKey(blank=True, to='commentaries.Commentary', null=True)), + ('commentary', models.ForeignKey(null=True, blank=True, to='commentaries.Commentary')), ], ), migrations.CreateModel( name='Comment', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('status', models.SmallIntegerField(default=0)), ('is_rem', models.BooleanField(default=False, verbose_name='remark')), ('is_que', models.BooleanField(default=False, verbose_name='question')), @@ -51,34 +50,34 @@ class Migration(migrations.Migration): ('comment_text', models.TextField()), ('date_submitted', models.DateTimeField(verbose_name='date submitted')), ('nr_relevance_ratings', models.IntegerField(default=0)), - ('relevance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('relevance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_importance_ratings', models.IntegerField(default=0)), - ('importance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('importance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('clarity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('validity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('rigour_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('author', models.ForeignKey(to='scipost.Contributor')), - ('commentary', models.ForeignKey(blank=True, to='commentaries.Commentary', null=True)), - ('in_reply_to', models.ForeignKey(blank=True, to='comments.Comment', null=True)), - ('submission', models.ForeignKey(blank=True, to='submissions.Submission', null=True)), + ('commentary', models.ForeignKey(null=True, blank=True, to='commentaries.Commentary')), + ('in_reply_to', models.ForeignKey(null=True, blank=True, to='comments.Comment')), + ('submission', models.ForeignKey(null=True, blank=True, to='submissions.Submission')), ], ), migrations.AddField( model_name='authorreply', name='in_reply_to_comment', - field=models.ForeignKey(blank=True, to='comments.Comment', null=True), + field=models.ForeignKey(null=True, blank=True, to='comments.Comment'), ), migrations.AddField( model_name='authorreply', name='in_reply_to_report', - field=models.ForeignKey(blank=True, to='reports.Report', null=True), + field=models.ForeignKey(null=True, blank=True, to='submissions.Report'), ), migrations.AddField( model_name='authorreply', name='submission', - field=models.ForeignKey(blank=True, to='submissions.Submission', null=True), + field=models.ForeignKey(null=True, blank=True, to='submissions.Submission'), ), ] diff --git a/comments/models.py b/comments/models.py index 4fde04c53..73e848200 100644 --- a/comments/models.py +++ b/comments/models.py @@ -12,8 +12,7 @@ from .models import * from commentaries.models import Commentary from scipost.models import Contributor -from reports.models import Report -from submissions.models import Submission +from submissions.models import Submission, Report COMMENT_CATEGORIES = ( diff --git a/ratings/migrations/0001_initial.py b/ratings/migrations/0001_initial.py index 2de2375d8..43fc9d064 100644 --- a/ratings/migrations/0001_initial.py +++ b/ratings/migrations/0001_initial.py @@ -7,18 +7,17 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('reports', '0001_initial'), - ('commentaries', '0001_initial'), ('scipost', '0001_initial'), ('submissions', '0001_initial'), ('comments', '0001_initial'), + ('commentaries', '0001_initial'), ] operations = [ migrations.CreateModel( name='AuthorReplyRating', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('relevance', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('importance', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('clarity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), @@ -34,7 +33,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CommentaryRating', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('clarity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('validity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('rigour', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), @@ -50,7 +49,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CommentRating', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('relevance', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('importance', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('clarity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), @@ -66,14 +65,14 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ReportRating', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('relevance', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('importance', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('clarity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('validity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('rigour', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('rater', models.ForeignKey(to='scipost.Contributor')), - ('report', models.ForeignKey(to='reports.Report')), + ('report', models.ForeignKey(to='submissions.Report')), ], options={ 'abstract': False, @@ -82,7 +81,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='SubmissionRating', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('clarity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('validity', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), ('rigour', models.PositiveSmallIntegerField(default=0, null=True, verbose_name=((101, '-'), (100, '100%'), (90, '90%'), (80, '80%'), (70, '70%'), (60, '60%'), (50, '50%'), (40, '40%'), (30, '30%'), (20, '20%'), (10, '10%'), (0, '0%')))), diff --git a/ratings/models.py b/ratings/models.py index 1a5a35781..5a3f15b94 100644 --- a/ratings/models.py +++ b/ratings/models.py @@ -8,8 +8,7 @@ from .models import * from commentaries.models import Commentary from comments.models import Comment, AuthorReply from scipost.models import Contributor -from reports.models import Report -from submissions.models import Submission +from submissions.models import Submission, Report RATING_CHOICES = ( diff --git a/reports/__init__.py b/reports/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/reports/admin.py b/reports/admin.py deleted file mode 100644 index e065522b4..000000000 --- a/reports/admin.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.contrib import admin - -from reports.models import * - -admin.site.register(Report) diff --git a/reports/forms.py b/reports/forms.py deleted file mode 100644 index 7a3c308a1..000000000 --- a/reports/forms.py +++ /dev/null @@ -1,35 +0,0 @@ -from django import forms - -from .models import * - -from ratings.models import * - -REPORT_ACTION_CHOICES = ( -# (0, 'modify'), - (1, 'accept'), - (2, 'refuse (give reason below)'), - ) - -REPORT_REFUSAL_CHOICES = ( - (0, '-'), - (-1, 'unclear'), - (-2, 'incorrect'), - (-3, 'not useful'), - (-4, 'not academic in style'), - ) - - - -class ReportForm(forms.Form): - qualification = forms.ChoiceField(RATING_CHOICES, label='Your degree of qualification in assessing this Submission') - strengths = forms.CharField(widget=forms.Textarea(), required=False) - weaknesses = forms.CharField(widget=forms.Textarea(), required=False) - report = forms.CharField(widget=forms.Textarea(), required=False) - requested_changes = forms.CharField(widget=forms.Textarea(), required=False) - recommendation = forms.ChoiceField(choices=REPORT_REC) - -class VetReportForm(forms.Form): - action_option = forms.ChoiceField(widget=forms.RadioSelect, choices=REPORT_ACTION_CHOICES, required=True, label='Action') - refusal_reason = forms.ChoiceField(choices=REPORT_REFUSAL_CHOICES) - email_response_field = forms.CharField(widget=forms.Textarea(), label='Justification (optional)', required=False) - diff --git a/reports/migrations/0001_initial.py b/reports/migrations/0001_initial.py deleted file mode 100644 index cd7a3ddce..000000000 --- a/reports/migrations/0001_initial.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('scipost', '0001_initial'), - ('submissions', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Report', - fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), - ('status', models.SmallIntegerField(default=0)), - ('qualification', models.PositiveSmallIntegerField(default=0)), - ('strengths', models.TextField()), - ('weaknesses', models.TextField()), - ('report', models.TextField()), - ('requested_changes', models.TextField()), - ('recommendation', models.SmallIntegerField(choices=[(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')])), - ('date_invited', models.DateTimeField(blank=True, null=True, verbose_name='date invited')), - ('date_submitted', models.DateTimeField(verbose_name='date submitted')), - ('nr_relevance_ratings', models.IntegerField(default=0)), - ('relevance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), - ('nr_importance_ratings', models.IntegerField(default=0)), - ('importance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), - ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), - ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), - ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), - ('author', models.ForeignKey(to='scipost.Contributor')), - ('invited_by', models.ForeignKey(blank=True, related_name='invited_by', to='scipost.Contributor', null=True)), - ('submission', models.ForeignKey(to='submissions.Submission')), - ], - ), - ] diff --git a/reports/migrations/__init__.py b/reports/migrations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/reports/models.py b/reports/models.py deleted file mode 100644 index 1d2e41291..000000000 --- a/reports/models.py +++ /dev/null @@ -1,62 +0,0 @@ -from django.utils import timezone -from django.db import models -from django.contrib.auth.models import User - -from .models import * - -#from commentaries.models import * -#from comments.models import * -#from contributors.models import * -#from journals.models import * -#from ratings.models import * -#from submissions.models import * - -#from commentaries.models import Commentary -from scipost.models import Contributor -#from reports.models import Report -from submissions.models import Submission - - -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(default=0) - strengths = models.TextField() - weaknesses = models.TextField() - report = models.TextField() - requested_changes = models.TextField() - 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) - - diff --git a/reports/tests.py b/reports/tests.py deleted file mode 100644 index 7ce503c2d..000000000 --- a/reports/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/reports/urls.py b/reports/urls.py deleted file mode 100644 index 5885425f6..000000000 --- a/reports/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.conf.urls import include, url - -from . import views - -urlpatterns = [ - # Reports - url(r'^submit_report/(?P<submission_id>[0-9]+)$', views.submit_report, name='submit_report'), - url(r'^submit_report_ack$', views.submit_report_ack, name='submit_report_ack'), - url(r'^vet_submitted_reports$', views.vet_submitted_reports, name='vet_submitted_reports'), - url(r'^vet_submitted_report_ack/(?P<report_id>[0-9]+)$', views.vet_submitted_report_ack, name='vet_submitted_report_ack'), - -] diff --git a/reports/views.py b/reports/views.py deleted file mode 100644 index 642d5ca47..000000000 --- a/reports/views.py +++ /dev/null @@ -1,83 +0,0 @@ -import datetime -from django.utils import timezone -from django.shortcuts import get_object_or_404, render -from django.contrib.auth import authenticate, login, logout -from django.contrib.auth.models import User -from django.core.mail import send_mail -from django.core.urlresolvers import reverse -from django.http import HttpResponse, HttpResponseRedirect -from django.views.decorators.csrf import csrf_protect -from django.db.models import Avg - -from .models import * -from .forms import * - - -########### -# Reports -########### - - -def submit_report(request, submission_id): - submission = get_object_or_404 (Submission, pk=submission_id) - if request.method == 'POST': - form = ReportForm(request.POST) - if form.is_valid(): - author = Contributor.objects.get(user=request.user) - newreport = Report ( - submission = submission, - author = author, - qualification = form.cleaned_data['qualification'], - strengths = form.cleaned_data['strengths'], - weaknesses = form.cleaned_data['weaknesses'], - report = form.cleaned_data['report'], - requested_changes = form.cleaned_data['requested_changes'], - recommendation = form.cleaned_data['recommendation'], - date_submitted = timezone.now(), - ) - newreport.save() - author.nr_reports = Report.objects.filter(author=author).count() - author.save() - request.session['submission_id'] = submission_id - return HttpResponseRedirect(reverse('reports:submit_report_ack')) - - else: - form = ReportForm() - context = {'submission': submission, 'form': form } - return render(request, 'reports/submit_report.html', context) - - -def submit_report_ack(request): -# submission_id = request.session['submission_id'] -# context = {'submission': Submission.objects.get(pk=submission_id) } - context = {} - return render(request, 'reports/submit_report_ack.html', context) - - -def vet_submitted_reports(request): - contributor = Contributor.objects.get(user=request.user) - submitted_reports_to_vet = Report.objects.filter(status=0) - form = VetReportForm() - context = {'contributor': contributor, 'submitted_reports_to_vet': submitted_reports_to_vet, 'form': form } - return(render(request, 'reports/vet_submitted_reports.html', context)) - - -def vet_submitted_report_ack(request, report_id): - if request.method == 'POST': - form = VetReportForm(request.POST) - report = Report.objects.get(pk=report_id) - if form.is_valid(): - if form.cleaned_data['action_option'] == '1': - # accept the report as is - report.status = 1 - report.save() - elif form.cleaned_data['action_option'] == '2': - # the report is simply rejected - report.status = form.cleaned_data['refusal_reason'] - report.save() - # email report author - - context = {} - return render(request, 'reports/vet_submitted_report_ack.html', context) - - diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html index f99c89238..c27fcd598 100644 --- a/scipost/templates/scipost/personal_page.html +++ b/scipost/templates/scipost/personal_page.html @@ -28,7 +28,7 @@ <li><a href="{% url 'commentaries:vet_commentary_requests' %}">Vet Commentary Page requests</a> ({{ nr_commentary_page_requests_to_vet }})</li> <li><a href="{% url 'comments:vet_submitted_comments' %}">Vet submitted Comments</a> ({{ nr_comments_to_vet }})</li> <li><a href="{% url 'comments:vet_author_replies' %}">Vet submitted Author Replies</a> ({{ nr_author_replies_to_vet }})</li> - <li><a href="{% url 'reports:vet_submitted_reports' %}">Vet submitted Reports</a> ({{ nr_reports_to_vet }})</li> + <li><a href="{% url 'submissions:vet_submitted_reports' %}">Vet submitted Reports</a> ({{ nr_reports_to_vet }})</li> </ul> </div> {% if contributor.rank >= 3 %} diff --git a/scipost/views.py b/scipost/views.py index 16915ea80..7db4ab871 100644 --- a/scipost/views.py +++ b/scipost/views.py @@ -14,9 +14,7 @@ from .forms import * from commentaries.models import Commentary from comments.models import Comment, AuthorReply -#from contributors.models import Contributor -from reports.models import Report -from submissions.models import Submission +from submissions.models import Submission, Report ############# diff --git a/submissions/admin.py b/submissions/admin.py index d384a66e9..e0bd05b21 100644 --- a/submissions/admin.py +++ b/submissions/admin.py @@ -3,3 +3,5 @@ from django.contrib import admin from submissions.models import * admin.site.register(Submission) + +admin.site.register(Report) diff --git a/submissions/forms.py b/submissions/forms.py index ff9e2a187..124d4e79a 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -2,6 +2,7 @@ from django import forms from .models import * +from ratings.models import * class SubmissionForm(forms.Form): submitted_to_journal = forms.ChoiceField(choices=SCIPOST_JOURNALS_SUBMIT, required=True, label='SciPost Journal to submit to:') @@ -20,3 +21,36 @@ class SubmissionSearchForm(forms.Form): title_keyword = forms.CharField(max_length=100, label="Title", required=False) abstract_keyword = forms.CharField(max_length=1000, required=False, label="Abstract") + +############ +# Reports: +############ + +REPORT_ACTION_CHOICES = ( +# (0, 'modify'), + (1, 'accept'), + (2, 'refuse (give reason below)'), + ) + +REPORT_REFUSAL_CHOICES = ( + (0, '-'), + (-1, 'unclear'), + (-2, 'incorrect'), + (-3, 'not useful'), + (-4, 'not academic in style'), + ) + +class ReportForm(forms.Form): + qualification = forms.ChoiceField(RATING_CHOICES, label='Your degree of qualification in assessing this Submission') + strengths = forms.CharField(widget=forms.Textarea(), required=False) + weaknesses = forms.CharField(widget=forms.Textarea(), required=False) + report = forms.CharField(widget=forms.Textarea(), required=False) + requested_changes = forms.CharField(widget=forms.Textarea(), required=False) + recommendation = forms.ChoiceField(choices=REPORT_REC) + +class VetReportForm(forms.Form): + action_option = forms.ChoiceField(widget=forms.RadioSelect, choices=REPORT_ACTION_CHOICES, required=True, label='Action') + refusal_reason = forms.ChoiceField(choices=REPORT_REFUSAL_CHOICES) + email_response_field = forms.CharField(widget=forms.Textarea(), label='Justification (optional)', required=False) + + diff --git a/submissions/migrations/0001_initial.py b/submissions/migrations/0001_initial.py index 87a9c4061..07ae59293 100644 --- a/submissions/migrations/0001_initial.py +++ b/submissions/migrations/0001_initial.py @@ -12,10 +12,37 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='Report', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), + ('status', models.SmallIntegerField(default=0)), + ('qualification', models.PositiveSmallIntegerField(default=0)), + ('strengths', models.TextField()), + ('weaknesses', models.TextField()), + ('report', models.TextField()), + ('requested_changes', models.TextField()), + ('recommendation', models.SmallIntegerField(choices=[(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')])), + ('date_invited', models.DateTimeField(null=True, verbose_name='date invited', blank=True)), + ('date_submitted', models.DateTimeField(verbose_name='date submitted')), + ('nr_relevance_ratings', models.IntegerField(default=0)), + ('relevance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), + ('nr_importance_ratings', models.IntegerField(default=0)), + ('importance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), + ('nr_clarity_ratings', models.IntegerField(default=0)), + ('clarity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), + ('nr_validity_ratings', models.IntegerField(default=0)), + ('validity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), + ('nr_rigour_ratings', models.IntegerField(default=0)), + ('rigour_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), + ('author', models.ForeignKey(to='scipost.Contributor')), + ('invited_by', models.ForeignKey(null=True, blank=True, related_name='invited_by', to='scipost.Contributor')), + ], + ), migrations.CreateModel( name='Submission', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('vetted', models.BooleanField(default=False)), ('submitted_to_journal', models.CharField(choices=[('SciPost Physics Select', 'SciPost Physics Select'), ('SciPost Physics Letters', 'SciPost Physics Letters'), ('SciPost Physics X', 'SciPost Physics X (cross-division)'), ('SciPost Physics', 'SciPost Physics (Experimental, Theoretical and Computational)'), ('SciPost Physics Lecture Notes', 'SciPost Physics Lecture Notes')], max_length=30)), ('domain', models.CharField(choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational')], default='E', max_length=1)), @@ -29,19 +56,24 @@ class Migration(migrations.Migration): ('arxiv_link', models.URLField(verbose_name='arXiv link (including version nr)')), ('submission_date', models.DateField(verbose_name='date of original publication')), ('nr_clarity_ratings', models.IntegerField(default=0)), - ('clarity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('clarity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_validity_ratings', models.IntegerField(default=0)), - ('validity_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('validity_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_rigour_ratings', models.IntegerField(default=0)), - ('rigour_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('rigour_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_originality_ratings', models.IntegerField(default=0)), - ('originality_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('originality_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('nr_significance_ratings', models.IntegerField(default=0)), - ('significance_rating', models.DecimalField(max_digits=3, null=True, default=0, decimal_places=0)), + ('significance_rating', models.DecimalField(default=0, null=True, decimal_places=0, max_digits=3)), ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)), - ('authors', models.ManyToManyField(to='scipost.Contributor', blank=True, related_name='authors_sub')), - ('editor_in_charge', models.ForeignKey(blank=True, related_name='editor_in_charge', to='scipost.Contributor', null=True)), + ('authors', models.ManyToManyField(related_name='authors_sub', blank=True, to='scipost.Contributor')), + ('editor_in_charge', models.ForeignKey(null=True, blank=True, related_name='editor_in_charge', to='scipost.Contributor')), ('submitted_by', models.ForeignKey(to='scipost.Contributor')), ], ), + migrations.AddField( + model_name='report', + name='submission', + field=models.ForeignKey(to='submissions.Submission'), + ), ] diff --git a/submissions/models.py b/submissions/models.py index 47d438f2a..940a5289c 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -8,6 +8,11 @@ from scipost.models import Contributor from journals.models import * + +############### +# Submissions: +############### + SUBMISSION_STATUS = ( (0, 'unassigned'), (1, 'editor in charge assigned'), @@ -17,7 +22,6 @@ SUBMISSION_STATUS = ( (5, 'editorial decision'), ) - class Submission(models.Model): submitted_by = models.ForeignKey(Contributor) vetted = models.BooleanField(default=False) @@ -51,3 +55,49 @@ class Submission(models.Model): def __str__ (self): return self.title + +########### +# Reports: +########### + +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(default=0) + strengths = models.TextField() + weaknesses = models.TextField() + report = models.TextField() + requested_changes = models.TextField() + 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) + diff --git a/reports/templates/reports/submit_report.html b/submissions/templates/submissions/submit_report.html similarity index 92% rename from reports/templates/reports/submit_report.html rename to submissions/templates/submissions/submit_report.html index 22d0214ea..7deb34a00 100644 --- a/reports/templates/reports/submit_report.html +++ b/submissions/templates/submissions/submit_report.html @@ -27,7 +27,7 @@ <section> <h1>Your report:</h1> - <form action="{% url 'reports:submit_report' submission.id %}" method="post"> + <form action="{% url 'submissions:submit_report' submission.id %}" method="post"> {% csrf_token %} <table> <ul> diff --git a/reports/templates/reports/submit_report_ack.html b/submissions/templates/submissions/submit_report_ack.html similarity index 100% rename from reports/templates/reports/submit_report_ack.html rename to submissions/templates/submissions/submit_report_ack.html diff --git a/reports/templates/reports/vet_submitted_report_ack.html b/submissions/templates/submissions/vet_submitted_report_ack.html similarity index 67% rename from reports/templates/reports/vet_submitted_report_ack.html rename to submissions/templates/submissions/vet_submitted_report_ack.html index b03cf25d0..5b7fb715d 100644 --- a/reports/templates/reports/vet_submitted_report_ack.html +++ b/submissions/templates/submissions/vet_submitted_report_ack.html @@ -6,7 +6,7 @@ <section> <h1>SciPost submitted Report vetted.</h1> - <p><a href="{% url 'reports:vet_submitted_reports' %}">Back to submitted Reports page</a></p> + <p><a href="{% url 'submissions:vet_submitted_reports' %}">Back to submitted Reports page</a></p> </section> {% endblock bodysup %} diff --git a/reports/templates/reports/vet_submitted_reports.html b/submissions/templates/submissions/vet_submitted_reports.html similarity index 92% rename from reports/templates/reports/vet_submitted_reports.html rename to submissions/templates/submissions/vet_submitted_reports.html index 910b7dfc2..e0238fb44 100644 --- a/reports/templates/reports/vet_submitted_reports.html +++ b/submissions/templates/submissions/vet_submitted_reports.html @@ -35,7 +35,7 @@ <p>{{ report_to_vet.recommendation }}</p> </div> <div class="col-4"> - <form action="{% url 'reports:vet_submitted_report_ack' report_id=report_to_vet.id %}" method="post"> + <form action="{% url 'submissions:vet_submitted_report_ack' report_id=report_to_vet.id %}" method="post"> {% csrf_token %} {{ form.as_ul }} <input type="submit" value="Submit" /> diff --git a/submissions/urls.py b/submissions/urls.py index f5ac3fdd4..c8f0e06ce 100644 --- a/submissions/urls.py +++ b/submissions/urls.py @@ -11,4 +11,9 @@ urlpatterns = [ url(r'^submit_manuscript_ack$', views.submit_manuscript_ack, name='submit_manuscript_ack'), url(r'^process_new_submissions$', views.process_new_submissions, name='process_new_submissions'), url(r'^process_new_submission_ack/(?P<submission_id>[0-9]+)$', views.process_new_submission_ack, name='process_new_submission_ack'), + # Reports + url(r'^submit_report/(?P<submission_id>[0-9]+)$', views.submit_report, name='submit_report'), + url(r'^submit_report_ack$', views.submit_report_ack, name='submit_report_ack'), + url(r'^vet_submitted_reports$', views.vet_submitted_reports, name='vet_submitted_reports'), + url(r'^vet_submitted_report_ack/(?P<report_id>[0-9]+)$', views.vet_submitted_report_ack, name='vet_submitted_report_ack'), ] diff --git a/submissions/views.py b/submissions/views.py index 9ce1914ce..a99ab95a3 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -19,6 +19,8 @@ from submissions.models import Submission from comments.forms import CommentForm from ratings.forms import CommentRatingForm, AuthorReplyRatingForm, ReportRatingForm, SubmissionRatingForm + + ############### # SUBMISSIONS: ############### @@ -145,3 +147,70 @@ def submission_detail(request, submission_id): return render(request, 'submissions/submission_detail.html', context) + +########### +# Reports +########### + +def submit_report(request, submission_id): + submission = get_object_or_404 (Submission, pk=submission_id) + if request.method == 'POST': + form = ReportForm(request.POST) + if form.is_valid(): + author = Contributor.objects.get(user=request.user) + newreport = Report ( + submission = submission, + author = author, + qualification = form.cleaned_data['qualification'], + strengths = form.cleaned_data['strengths'], + weaknesses = form.cleaned_data['weaknesses'], + report = form.cleaned_data['report'], + requested_changes = form.cleaned_data['requested_changes'], + recommendation = form.cleaned_data['recommendation'], + date_submitted = timezone.now(), + ) + newreport.save() + author.nr_reports = Report.objects.filter(author=author).count() + author.save() + request.session['submission_id'] = submission_id + return HttpResponseRedirect(reverse('reports:submit_report_ack')) + + else: + form = ReportForm() + context = {'submission': submission, 'form': form } + return render(request, 'reports/submit_report.html', context) + + +def submit_report_ack(request): +# submission_id = request.session['submission_id'] +# context = {'submission': Submission.objects.get(pk=submission_id) } + context = {} + return render(request, 'reports/submit_report_ack.html', context) + + +def vet_submitted_reports(request): + contributor = Contributor.objects.get(user=request.user) + submitted_reports_to_vet = Report.objects.filter(status=0) + form = VetReportForm() + context = {'contributor': contributor, 'submitted_reports_to_vet': submitted_reports_to_vet, 'form': form } + return(render(request, 'reports/vet_submitted_reports.html', context)) + + +def vet_submitted_report_ack(request, report_id): + if request.method == 'POST': + form = VetReportForm(request.POST) + report = Report.objects.get(pk=report_id) + if form.is_valid(): + if form.cleaned_data['action_option'] == '1': + # accept the report as is + report.status = 1 + report.save() + elif form.cleaned_data['action_option'] == '2': + # the report is simply rejected + report.status = form.cleaned_data['refusal_reason'] + report.save() + # email report author + + context = {} + return render(request, 'reports/vet_submitted_report_ack.html', context) + -- GitLab