diff --git a/rcr/filters.py b/rcr/filters.py
index bbc2b275..3eb2af84 100755
--- a/rcr/filters.py
+++ b/rcr/filters.py
@@ -58,7 +58,10 @@ class ItemFilter(django_filters.FilterSet):
"assessed_by": ["exact"],
"completed_radiology": ["exact"],
"completed_oncology": ["exact"],
+ "radiology_categories": ["exact"],
+ "oncology_category": ["exact"],
"needs_review": ["exact"],
+ "outcome": ["exact"],
}
diff --git a/rcr/forms.py b/rcr/forms.py
index f4ed0530..2996d71a 100644
--- a/rcr/forms.py
+++ b/rcr/forms.py
@@ -16,12 +16,14 @@ from django.forms import (
from rcr.models import Item, RadiologyCategory, OncologyCategory, Level
from django.contrib.auth.models import User
+from atlas.models import Condition
class ItemForm(ModelForm):
#radiology_category = ModelMultipleChoiceField(queryset=RadiologyCategory.objects.all())
#oncology_category = ModelMultipleChoiceField(queryset=OncologyCategory.objects.all())
+ radiology_condition = ModelMultipleChoiceField(queryset=Condition.objects.filter(rcr_curriculum=True), required=False)
@@ -48,6 +50,7 @@ class ItemForm(ModelForm):
# fields = ["category", "level"]
widgets = {
"radiology_categories": forms.SelectMultiple(attrs={"size": 12}),
+ #"radiology_condition": forms.SelectMultiple(attrs={"size": 12}),
#"oncology_category": CheckboxSelectMultiple(),
#"level": CheckboxSelectMultiple(),
diff --git a/rcr/migrations/0023_item_radiology_condition.py b/rcr/migrations/0023_item_radiology_condition.py
new file mode 100644
index 00000000..40121743
--- /dev/null
+++ b/rcr/migrations/0023_item_radiology_condition.py
@@ -0,0 +1,20 @@
+# Generated by Django 5.0.2 on 2024-05-18 07:49
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('atlas', '0052_alter_casecollection_end_date_and_more'),
+ ('rcr', '0022_remove_item_radiology_category'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='item',
+ name='radiology_condition',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rcr_migration_item', to='atlas.condition'),
+ ),
+ ]
diff --git a/rcr/migrations/0024_remove_item_radiology_condition_and_more.py b/rcr/migrations/0024_remove_item_radiology_condition_and_more.py
new file mode 100644
index 00000000..2d2bd725
--- /dev/null
+++ b/rcr/migrations/0024_remove_item_radiology_condition_and_more.py
@@ -0,0 +1,23 @@
+# Generated by Django 5.0.2 on 2024-05-18 16:10
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('atlas', '0052_alter_casecollection_end_date_and_more'),
+ ('rcr', '0023_item_radiology_condition'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='item',
+ name='radiology_condition',
+ ),
+ migrations.AddField(
+ model_name='item',
+ name='radiology_condition',
+ field=models.ManyToManyField(blank=True, null=True, related_name='rcr_migration_item', to='atlas.condition'),
+ ),
+ ]
diff --git a/rcr/migrations/0025_alter_item_radiology_condition.py b/rcr/migrations/0025_alter_item_radiology_condition.py
new file mode 100644
index 00000000..6b76b302
--- /dev/null
+++ b/rcr/migrations/0025_alter_item_radiology_condition.py
@@ -0,0 +1,19 @@
+# Generated by Django 5.0.2 on 2024-05-18 16:10
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('atlas', '0052_alter_casecollection_end_date_and_more'),
+ ('rcr', '0024_remove_item_radiology_condition_and_more'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='item',
+ name='radiology_condition',
+ field=models.ManyToManyField(blank=True, related_name='rcr_migration_item', to='atlas.condition'),
+ ),
+ ]
diff --git a/rcr/models.py b/rcr/models.py
index 5bb29b96..0d977a17 100644
--- a/rcr/models.py
+++ b/rcr/models.py
@@ -4,6 +4,8 @@ from django.urls import reverse
from django.utils.translation import gettext_lazy as _
import reversion
+from atlas.models import Condition
+
# Create your models here.
@reversion.register()
@@ -60,6 +62,8 @@ class Item(models.Model):
completed_radiology = models.BooleanField(default=False)
completed_oncology = models.BooleanField(default=False)
+ radiology_condition = models.ManyToManyField(Condition, blank=True, related_name="rcr_migration_item")
+
class Meta:
ordering = ("pk",)
diff --git a/rcr/templates/rcr/base.html b/rcr/templates/rcr/base.html
index f67aeacb..26b7f9e3 100644
--- a/rcr/templates/rcr/base.html
+++ b/rcr/templates/rcr/base.html
@@ -76,6 +76,9 @@
+
+ Results
+
All
diff --git a/rcr/templates/rcr/item_detail.html b/rcr/templates/rcr/item_detail.html
index 674eac21..05b8c094 100644
--- a/rcr/templates/rcr/item_detail.html
+++ b/rcr/templates/rcr/item_detail.html
@@ -9,6 +9,12 @@
{{category}}
{% endfor %}
+
Radiology Condition:
+ {% for condition in object.radiology_condition.all %}
+ {{condition}}
+ {% endfor %}
+
+
Oncology Category: {{object.oncology_category}}
diff --git a/rcr/templates/rcr/results.html b/rcr/templates/rcr/results.html
new file mode 100644
index 00000000..9e7eb6d7
--- /dev/null
+++ b/rcr/templates/rcr/results.html
@@ -0,0 +1,81 @@
+{% extends 'rcr/base.html' %}
+
+{% block content %}
+
+
+
+
+ | Name |
+ ID |
+ Outcome |
+ Outcome (reason) |
+ Outcome (free text) |
+
+
+
+
+ {% for item in items %}
+
+ | {{item.name}} |
+ {{item.rcr_platform_id}} |
+ {{item.outcome}} |
+ {{item.outcome_reason}} |
+ {{item.outcome_free_text}} |
+
+ {% endfor %}
+
+
+
+{% endblock %}
+
+
+{% block css %}
+
+
+{% endblock css %}
diff --git a/rcr/urls.py b/rcr/urls.py
index 35f851aa..7e69ca57 100644
--- a/rcr/urls.py
+++ b/rcr/urls.py
@@ -11,6 +11,7 @@ app_name = "rcr"
urlpatterns = [
path("radiology/", views.radiology_index, name="radiology_index_view"),
path("radiology/all", views.radiology_index_all, name="radiology_index_all_view"),
+ path("radiology/results", views.radiology_results, name="radiology_results"),
path("radiology/review", views.radiology_review, name="radiology_review_view"),
path(
"radiology/completed",
diff --git a/rcr/views.py b/rcr/views.py
index 64198ac4..1cd3ebc6 100644
--- a/rcr/views.py
+++ b/rcr/views.py
@@ -72,6 +72,11 @@ def radiology_index_all(request):
def radiology_review(request):
return redirect(f"{reverse('rcr:radiology_index_all_view')}?needs_review=true")
+def radiology_results(request):
+ items = Item.objects.all()
+
+ return render(request, "rcr/results.html", {"items": items})
+
@user_is_rcr
def radiology_index(request, assigned=True, user_pk: int | None = None):
@@ -93,13 +98,17 @@ def radiology_index(request, assigned=True, user_pk: int | None = None):
else:
raise Http404
+ item_filter = ItemFilter(request.GET, queryset=items)
+
return render(
request,
"rcr/index.html",
{
- "items": items,
+ #"items": items,
+ "items": item_filter.qs.prefetch_related("assessed_by"),
"completed": False,
- "assessor": assessor
+ "assessor": assessor,
+ "item_filter": item_filter,
},
)
@@ -183,6 +192,7 @@ def radiology_index_completed_by_user(request, user_pk: int):
@user_is_rcr
def radiology_index_completed(request, user_pk=None):
+
assessor = None
if user_pk is not None:
assessor = User.objects.get(pk=user_pk)
@@ -193,13 +203,16 @@ def radiology_index_completed(request, user_pk=None):
else:
items = Item.objects.filter(Q(completed_radiology=True) | Q(completed_oncology=True))
+ item_filter = ItemFilter(request.GET, queryset=items)
+
return render(
request,
"rcr/index.html",
{
- "items": items,
+ "items": item_filter.qs.prefetch_related("assessed_by"),
"completed": True,
- "assessor": assessor
+ "assessor": assessor,
+ "item_filter": item_filter,
},
)
diff --git a/sbas/migrations/0011_alter_exam_end_date_alter_exam_exam_results_emailed_and_more.py b/sbas/migrations/0011_alter_exam_end_date_alter_exam_exam_results_emailed_and_more.py
new file mode 100644
index 00000000..8b304a78
--- /dev/null
+++ b/sbas/migrations/0011_alter_exam_end_date_alter_exam_exam_results_emailed_and_more.py
@@ -0,0 +1,33 @@
+# Generated by Django 5.0.2 on 2024-05-18 07:49
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('sbas', '0010_exam_end_date_exam_restrict_to_dates_exam_start_date'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='exam',
+ name='end_date',
+ field=models.DateTimeField(blank=True, help_text='Date (and time) the exam/collection ends', null=True),
+ ),
+ migrations.AlterField(
+ model_name='exam',
+ name='exam_results_emailed',
+ field=models.DateTimeField(blank=True, default=None, null=True),
+ ),
+ migrations.AlterField(
+ model_name='exam',
+ name='start_date',
+ field=models.DateTimeField(blank=True, help_text='Date (and time) the exam/collection starts', null=True),
+ ),
+ migrations.AlterField(
+ model_name='exam',
+ name='user_scores',
+ field=models.JSONField(blank=True, default=dict),
+ ),
+ ]