diff --git a/rcr/models.py b/rcr/models.py index 83d6b5e9..12690c7e 100644 --- a/rcr/models.py +++ b/rcr/models.py @@ -100,6 +100,14 @@ class Item(models.Model): else: return "" + def get_level(self): + return ", ".join([l.name for l in self.level.all()]) + + def get_radiology_categories(self): + return ", ".join([l.name for l in self.radiology_categories.all()]) + + def get_radiology_condition(self): + return ", ".join([l.name for l in self.radiology_condition.all()]) class RadiologyCategory(models.Model): diff --git a/rcr/templates/rcr/base.html b/rcr/templates/rcr/base.html index 26b7f9e3..d7d9d8d5 100644 --- a/rcr/templates/rcr/base.html +++ b/rcr/templates/rcr/base.html @@ -37,7 +37,7 @@ {% comment %} {% endcomment %} - + {% django_htmx_script %} @@ -91,6 +91,9 @@ Review + + Gap Analysis + {% if request.user.is_staff %} Admin diff --git a/rcr/templates/rcr/gap.html b/rcr/templates/rcr/gap.html new file mode 100644 index 00000000..92ea41b9 --- /dev/null +++ b/rcr/templates/rcr/gap.html @@ -0,0 +1,134 @@ +{% extends 'rcr/base.html' %} + +{% block content %} + +

Radiology Gap Analysis

+

This page lists all of the radiology categories and the items that exist within them. The items are grouped by category.

+ +
+Show outcomes + +{% for outcome in outcomes %} + + + +{% endfor %} + + + + +{% for category in categories %} + +

{{category.name}}

+ + + + + + + + + + + + +{% for item in category.items_radiology.all %} + + + + + + + + + +{% endfor %} +
IDItemContent typeLevelOutcomeRadiology condition
{{item.rcr_platform_id}}{{item.name}}{{item.content_type}}{{item.get_level}}{{item.outcome}}{{item.get_radiology_condition}}
+ +

+Item count: {{category.items_radiology.count}} +

+ +{% endfor %} + +{% comment %} {% for condition in conditions %} + +

{{condition.name}}

+ +{{condition.items.all}} + +{% endfor %} {% endcomment %} + + +{% endblock %} + + +{% block css %} + + +{% endblock css %} + + +{% block js %} + +{% endblock js %} + \ No newline at end of file diff --git a/rcr/templates/rcr/results.html b/rcr/templates/rcr/results.html index b02c66f9..dae2960a 100644 --- a/rcr/templates/rcr/results.html +++ b/rcr/templates/rcr/results.html @@ -1,6 +1,13 @@ {% extends 'rcr/base.html' %} {% block content %} +
+ Filter +
+ {{ item_filter.form.as_p }} + +
+
@@ -13,6 +20,7 @@ + @@ -30,6 +38,15 @@ +
Outcome (reason) Outcome (free text) CommentsLevel Radiology Category Oncology Category Radiology Condition{{item.outcome_reason}} {{item.outcome_free_text}} {{item.comments}}{% for cat in item.level.all %} + {% if forloop.last %} + {{cat}} + {% else %} + {{cat}}, + + {% endif %} + {% endfor %} + {% for cat in item.radiology_categories.all %} {% if forloop.last %} {{cat}} diff --git a/rcr/urls.py b/rcr/urls.py index 7e69ca57..94eb05dd 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/gap", views.radiology_gap, name="radiology_gap"), path("radiology/results", views.radiology_results, name="radiology_results"), path("radiology/review", views.radiology_review, name="radiology_review_view"), path( diff --git a/rcr/views.py b/rcr/views.py index 794a154f..7dfa0ec3 100644 --- a/rcr/views.py +++ b/rcr/views.py @@ -13,8 +13,9 @@ from django.contrib.auth.decorators import user_passes_test from django.db.models import Q from rcr.filters import ItemFilter -from rcr.models import Item +from rcr.models import Item, Outcome, RadiologyCategory from rcr.forms import AssessorAssignmentForm, ItemForm +from atlas.models import Condition from django.core.exceptions import PermissionDenied # Create your views here. @@ -72,10 +73,32 @@ 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().prefetch_related("assessed_by") +def radiology_gap(request): + #items = Item.objects.all().prefetch_related("assessed_by") - return render(request, "rcr/results.html", {"items": items}) + item_filter = ItemFilter(request.GET, queryset=Item.objects.all().prefetch_related("assessed_by")) + items = item_filter.qs.prefetch_related("assessed_by") + + categories = RadiologyCategory.objects.all().order_by("name").prefetch_related("items_radiology", "items_radiology__level", "items_radiology__radiology_condition") + + conditions = Condition.objects.all().order_by("name") + + outcomes = Outcome.objects.all().order_by("name") + + return render(request, "rcr/gap.html", {"items": items, + "item_filter": item_filter, + "categories": categories, + "conditions": conditions, + "outcomes": outcomes, + }) + +def radiology_results(request): + #items = Item.objects.all().prefetch_related("assessed_by") + + item_filter = ItemFilter(request.GET, queryset=Item.objects.all().prefetch_related("assessed_by", "level", "radiology_condition", "radiology_categories", "oncology_category")) + items = item_filter.qs.prefetch_related("assessed_by") + + return render(request, "rcr/results.html", {"items": items, "item_filter": item_filter}) @user_is_rcr def radiology_index(request, assigned=True, user_pk: int | None = None):