add rcr platform changes
This commit is contained in:
@@ -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"],
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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,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",)
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 %}
|
||||
@@ -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
@@ -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),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user