add rcr platform changes
This commit is contained in:
@@ -58,7 +58,10 @@ class ItemFilter(django_filters.FilterSet):
|
|||||||
"assessed_by": ["exact"],
|
"assessed_by": ["exact"],
|
||||||
"completed_radiology": ["exact"],
|
"completed_radiology": ["exact"],
|
||||||
"completed_oncology": ["exact"],
|
"completed_oncology": ["exact"],
|
||||||
|
"radiology_categories": ["exact"],
|
||||||
|
"oncology_category": ["exact"],
|
||||||
"needs_review": ["exact"],
|
"needs_review": ["exact"],
|
||||||
|
"outcome": ["exact"],
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,12 +16,14 @@ from django.forms import (
|
|||||||
|
|
||||||
from rcr.models import Item, RadiologyCategory, OncologyCategory, Level
|
from rcr.models import Item, RadiologyCategory, OncologyCategory, Level
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from atlas.models import Condition
|
||||||
|
|
||||||
|
|
||||||
class ItemForm(ModelForm):
|
class ItemForm(ModelForm):
|
||||||
|
|
||||||
#radiology_category = ModelMultipleChoiceField(queryset=RadiologyCategory.objects.all())
|
#radiology_category = ModelMultipleChoiceField(queryset=RadiologyCategory.objects.all())
|
||||||
#oncology_category = ModelMultipleChoiceField(queryset=OncologyCategory.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"]
|
# fields = ["category", "level"]
|
||||||
widgets = {
|
widgets = {
|
||||||
"radiology_categories": forms.SelectMultiple(attrs={"size": 12}),
|
"radiology_categories": forms.SelectMultiple(attrs={"size": 12}),
|
||||||
|
#"radiology_condition": forms.SelectMultiple(attrs={"size": 12}),
|
||||||
#"oncology_category": CheckboxSelectMultiple(),
|
#"oncology_category": CheckboxSelectMultiple(),
|
||||||
#"level": 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 _
|
from django.utils.translation import gettext_lazy as _
|
||||||
import reversion
|
import reversion
|
||||||
|
|
||||||
|
from atlas.models import Condition
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
|
||||||
@reversion.register()
|
@reversion.register()
|
||||||
@@ -60,6 +62,8 @@ class Item(models.Model):
|
|||||||
completed_radiology = models.BooleanField(default=False)
|
completed_radiology = models.BooleanField(default=False)
|
||||||
completed_oncology = models.BooleanField(default=False)
|
completed_oncology = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
radiology_condition = models.ManyToManyField(Condition, blank=True, related_name="rcr_migration_item")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ("pk",)
|
ordering = ("pk",)
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,9 @@
|
|||||||
|
|
||||||
<body hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
|
<body hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
|
||||||
<div class="main-nav-header">
|
<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">
|
<span id="" class="top-bar-link">
|
||||||
<a href="{% url 'rcr:radiology_index_all_view' %}">All</a>
|
<a href="{% url 'rcr:radiology_index_all_view' %}">All</a>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -9,6 +9,12 @@
|
|||||||
{{category}}
|
{{category}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
<p>Radiology Condition:
|
||||||
|
{% for condition in object.radiology_condition.all %}
|
||||||
|
{{condition}}
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>Oncology Category: {{object.oncology_category}}</p>
|
<p>Oncology Category: {{object.oncology_category}}</p>
|
||||||
|
|
||||||
<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 = [
|
urlpatterns = [
|
||||||
path("radiology/", views.radiology_index, name="radiology_index_view"),
|
path("radiology/", views.radiology_index, name="radiology_index_view"),
|
||||||
path("radiology/all", views.radiology_index_all, name="radiology_index_all_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/review", views.radiology_review, name="radiology_review_view"),
|
||||||
path(
|
path(
|
||||||
"radiology/completed",
|
"radiology/completed",
|
||||||
|
|||||||
+17
-4
@@ -72,6 +72,11 @@ def radiology_index_all(request):
|
|||||||
def radiology_review(request):
|
def radiology_review(request):
|
||||||
return redirect(f"{reverse('rcr:radiology_index_all_view')}?needs_review=true")
|
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
|
@user_is_rcr
|
||||||
def radiology_index(request, assigned=True, user_pk: int | None = None):
|
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:
|
else:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
|
item_filter = ItemFilter(request.GET, queryset=items)
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
"rcr/index.html",
|
"rcr/index.html",
|
||||||
{
|
{
|
||||||
"items": items,
|
#"items": items,
|
||||||
|
"items": item_filter.qs.prefetch_related("assessed_by"),
|
||||||
"completed": False,
|
"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
|
@user_is_rcr
|
||||||
def radiology_index_completed(request, user_pk=None):
|
def radiology_index_completed(request, user_pk=None):
|
||||||
|
|
||||||
|
|
||||||
assessor = None
|
assessor = None
|
||||||
if user_pk is not None:
|
if user_pk is not None:
|
||||||
assessor = User.objects.get(pk=user_pk)
|
assessor = User.objects.get(pk=user_pk)
|
||||||
@@ -193,13 +203,16 @@ def radiology_index_completed(request, user_pk=None):
|
|||||||
else:
|
else:
|
||||||
items = Item.objects.filter(Q(completed_radiology=True) | Q(completed_oncology=True))
|
items = Item.objects.filter(Q(completed_radiology=True) | Q(completed_oncology=True))
|
||||||
|
|
||||||
|
item_filter = ItemFilter(request.GET, queryset=items)
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
"rcr/index.html",
|
"rcr/index.html",
|
||||||
{
|
{
|
||||||
"items": items,
|
"items": item_filter.qs.prefetch_related("assessed_by"),
|
||||||
"completed": True,
|
"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