add rcr platform changes

This commit is contained in:
Ross
2024-05-18 17:31:33 +01:00
parent 741b8683c9
commit 62f7663461
12 changed files with 213 additions and 4 deletions
+3
View File
@@ -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"],
}
+3
View File
@@ -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(),
@@ -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'),
),
]
@@ -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'),
),
]
@@ -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'),
),
]
+4
View File
@@ -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",)
+3
View File
@@ -76,6 +76,9 @@
<body hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
<div class="main-nav-header">
<span id="" class="top-bar-link">
<a href="{% url 'rcr:radiology_results' %}">Results</a>
</span>
<span id="" class="top-bar-link">
<a href="{% url 'rcr:radiology_index_all_view' %}">All</a>
</span>
+6
View File
@@ -9,6 +9,12 @@
{{category}}
{% endfor %}
</p>
<p>Radiology Condition:
{% for condition in object.radiology_condition.all %}
{{condition}}
{% endfor %}
</p>
<p>Oncology Category: {{object.oncology_category}}</p>
<p>
+81
View File
@@ -0,0 +1,81 @@
{% extends 'rcr/base.html' %}
{% block content %}
<table>
<thead>
<tr>
<th>Name</th>
<th>ID</th>
<th>Outcome</th>
<th>Outcome (reason)</th>
<th>Outcome (free text)</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td>{{item.name}}</td>
<td>{{item.rcr_platform_id}}</td>
<td>{{item.outcome}}</td>
<td>{{item.outcome_reason}}</td>
<td>{{item.outcome_free_text}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block css %}
<style type="text/css">
.review::after {
content: '(R)';
color: orange;
}
.completed-radiology::after {
content: '✓';
color: green;
}
.completed-oncology::after {
content: '✓';
color: blue;
}
.completed-oncology.completed-radiology::after {
content: '✓';
color: purple;
}
.completed::after {
content: '✓';
color: green;
}
.Radiology::before {
content: "R";
}
.Radiology {
color: green;
}
.Oncology::before {
content: "O";
}
.Oncology {
color: blue;
}
.Cross-faculty::before {
content: "C";
}
.Cross-faculty {
color: purple;
}
td {
padding-right: 10px;
}
* {
box-sizing: unset;
}
</style>
{% endblock css %}
+1
View File
@@ -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",
+17 -4
View File
@@ -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,
},
)
@@ -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),
),
]