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: {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 @@
{% csrf_token %} {% if collection.collection_type == "REP" %}
-
+
{{form}}

- {% if collection.publish_results %} + {% if completed %}

Answer score: {{answer.score}}

Answer feedback: {{answer.feedback|safe}} +
+ + {% if self_review %} +

Self Feedback

+ + {% for review in self_review %} + {{review.get_display_block}} + + {% endfor %} + {% endif %} + + + {% endif %}

+ {% endif %} {% if previous %} @@ -103,6 +117,10 @@
+ {% if collection.publish_results or cid_user_exam.completed %} + Add self review + + {% endif %}