From f268f040e2e22d69cb8273026728324fed8f7b0b Mon Sep 17 00:00:00 2001
From: Ross
Date: Mon, 31 Jul 2023 10:25:23 +0100
Subject: [PATCH] continue working on case collections
---
atlas/forms.py | 17 +++
atlas/migrations/0007_selfreview.py | 29 +++++
atlas/models.py | 45 +++++++
.../atlas/collection_case_view_take.html | 28 ++++-
atlas/templates/atlas/collection_headers.html | 2 +-
.../atlas/collection_review_start.html | 22 +++-
.../atlas/collection_take_overview.html | 12 +-
.../atlas/collection_take_start.html | 28 ++---
atlas/templates/atlas/selfreview_form.html | 36 ++++++
atlas/urls.py | 6 +
atlas/views.py | 111 ++++++++++++++----
generic/migrations/0007_selfreview.py | 29 +++++
generic/migrations/0008_delete_selfreview.py | 16 +++
generic/models.py | 2 +
rad/static/css/anatomy.css | 9 ++
15 files changed, 343 insertions(+), 49 deletions(-)
create mode 100644 atlas/migrations/0007_selfreview.py
create mode 100644 atlas/templates/atlas/selfreview_form.html
create mode 100644 generic/migrations/0007_selfreview.py
create mode 100644 generic/migrations/0008_delete_selfreview.py
diff --git a/atlas/forms.py b/atlas/forms.py
index 2ad8edaa..d65050f1 100755
--- a/atlas/forms.py
+++ b/atlas/forms.py
@@ -3,6 +3,7 @@ from django.contrib.admin import widgets
from django.forms import (
BaseInlineFormSet,
Form,
+ HiddenInput,
ModelForm,
ModelMultipleChoiceField,
ModelChoiceField,
@@ -22,6 +23,7 @@ from atlas.models import (
CidReportAnswer,
Differential,
Finding,
+ SelfReview,
Series,
SeriesImage,
SeriesFinding,
@@ -571,3 +573,18 @@ class AddCollectionToCaseForm(Form):
raise ValidationError("Invalid collection")
return collection_set
+
+
+class SelfReviewForm(ModelForm):
+
+ class Meta:
+ model = SelfReview
+ fields = ["user_exam", "case", "comments", "findings", "interpretation"]
+ widgets = {"user_exam": HiddenInput(), "case": HiddenInput()}
+
+ def __init__(self, *args, **kwargs):
+ user_exam_id = kwargs.pop("user_exam_id")
+ case_id = kwargs.pop("case_id")
+
+ ModelForm.__init__(self, *args, **kwargs)
+ super(SelfReviewForm, self).__init__(*args, **kwargs)
\ No newline at end of file
diff --git a/atlas/migrations/0007_selfreview.py b/atlas/migrations/0007_selfreview.py
new file mode 100644
index 00000000..c8d661dd
--- /dev/null
+++ b/atlas/migrations/0007_selfreview.py
@@ -0,0 +1,29 @@
+# Generated by Django 4.1.4 on 2023-07-24 11:42
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('generic', '0008_delete_selfreview'),
+ ('atlas', '0006_casecollection_candidates_only_and_more'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='SelfReview',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('comments', models.TextField(blank=True, null=True)),
+ ('findings', models.IntegerField(blank=True, null=True, validators=[django.core.validators.MaxValueValidator(5), django.core.validators.MinValueValidator(1)])),
+ ('interpretation', models.IntegerField(blank=True, null=True, validators=[django.core.validators.MaxValueValidator(5), django.core.validators.MinValueValidator(1)])),
+ ('review_date', models.DateTimeField(auto_now_add=True)),
+ ('review_update_date', models.DateTimeField(auto_now=True)),
+ ('case', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='atlas.case')),
+ ('user_exam', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='generic.ciduserexam')),
+ ],
+ ),
+ ]
diff --git a/atlas/models.py b/atlas/models.py
index 4b29835f..63de9a1f 100644
--- a/atlas/models.py
+++ b/atlas/models.py
@@ -578,3 +578,48 @@ class CidReportAnswer(BaseReportAnswer):
class UserReportAnswer(BaseReportAnswer):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
+
+
+class SelfReview(models.Model):
+ """Holds data regarding a users self review / reflection"""
+
+ user_exam = models.ForeignKey(CidUserExam, on_delete=models.CASCADE)
+
+ case = models.ForeignKey(Case, on_delete=models.CASCADE)
+
+ comments = models.TextField(null=True, blank=True)
+
+ findings = models.IntegerField(
+ null=True, blank=True, validators=[MaxValueValidator(5), MinValueValidator(1)]
+ )
+ interpretation = models.IntegerField(
+ null=True, blank=True, validators=[MaxValueValidator(5), MinValueValidator(1)]
+ )
+
+ review_date = models.DateTimeField(auto_now_add=True)
+ review_update_date = models.DateTimeField(auto_now=True)
+
+ def get_absolute_url(self):
+ return reverse(
+ "atlas:collection_take_overview_user", kwargs={"pk": self.user_exam.exam.pk}
+ )
+
+ def get_display_block(self):
+ html = """
+ Comments:
+
+ Findings: {findings}
+
+ Interpretation: {interpretation}
+ Date: {date}
+
+
+ """
+
+ return format_html(
+ html,
+ comments=self.comments,
+ findings=self.findings,
+ interpretation=self.interpretation,
+ date=self.review_date,
+ )
diff --git a/atlas/templates/atlas/collection_case_view_take.html b/atlas/templates/atlas/collection_case_view_take.html
index 7f8059ff..69570af4 100644
--- a/atlas/templates/atlas/collection_case_view_take.html
+++ b/atlas/templates/atlas/collection_case_view_take.html
@@ -7,11 +7,11 @@
: {{case.title}}
{% endif %}
-
- {% if collection.publish_results or cid_user_exam.completed %}
+
+ {% if completed %}
REVIEW
{% endif %}
-
+
@@ -78,16 +78,30 @@
+
{% endif %}
{% if previous %}
@@ -103,6 +117,10 @@
+ {% if collection.publish_results or cid_user_exam.completed %}
+ Add self review
+
+ {% endif %}