upgrade rcr migration

This commit is contained in:
Ross
2023-12-12 21:57:21 +00:00
parent e1d9f1ecad
commit 1936a66d7f
13 changed files with 130 additions and 12 deletions
+1 -1
View File
@@ -34,6 +34,7 @@ from django.utils.html import format_html
from easy_thumbnails.files import get_thumbnailer from easy_thumbnails.files import get_thumbnailer
from easy_thumbnails.exceptions import InvalidImageFormatError from easy_thumbnails.exceptions import InvalidImageFormatError
import pydicom import pydicom
import dicognito.anonymizer import dicognito.anonymizer
@@ -1282,7 +1283,6 @@ USER_EXAM_TYPES = (
# ("CaseCollection", "user_casecollection_exams"), # ("CaseCollection", "user_casecollection_exams"),
) )
class UserProfile(models.Model): class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
supervisor = models.ForeignKey( supervisor = models.ForeignKey(
+1
View File
@@ -50,6 +50,7 @@ INSTALLED_APPS = [
"wally", "wally",
"atlas", "atlas",
"rcr", "rcr",
"rota",
"reversion", "reversion",
"debug_toolbar", "debug_toolbar",
"django_tables2", "django_tables2",
+1
View File
@@ -65,6 +65,7 @@ urlpatterns = [
path("generic/", include("generic.urls"), name="generic"), path("generic/", include("generic.urls"), name="generic"),
path("atlas/", include("atlas.urls"), name="atlas"), path("atlas/", include("atlas.urls"), name="atlas"),
path("rcr/", include("rcr.urls"), name="rcr"), path("rcr/", include("rcr.urls"), name="rcr"),
path("rota/", include("rota.urls"), name="rota"),
path( path(
"accounts/check_users", views.accounts_check_users, name="accounts_check_users" "accounts/check_users", views.accounts_check_users, name="accounts_check_users"
), ),
+4
View File
@@ -16,9 +16,13 @@ from django.forms import (
) )
from rcr.models import Item, Category, Level from rcr.models import Item, Category, Level
from django.contrib.auth.models import User
class ItemForm(ModelForm): class ItemForm(ModelForm):
class Meta: class Meta:
model = Item model = Item
exclude = ["rcr_platform_id", "name", "assessed_by", "assessed_date"] exclude = ["rcr_platform_id", "name", "assessed_by", "assessed_date"]
#fields = ["category", "level"] #fields = ["category", "level"]
class AssessorAssignmentForm(Form):
items = ModelMultipleChoiceField(queryset=Item.objects.all())
@@ -0,0 +1,26 @@
# Generated by Django 4.1.4 on 2023-12-12 20:11
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('rcr', '0004_outcomereason_item_outcome_reason'),
]
operations = [
migrations.AddField(
model_name='item',
name='assigned_to',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assigned_items', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='item',
name='assessed_by',
field=models.ManyToManyField(blank=True, related_name='assessed_items', to=settings.AUTH_USER_MODEL),
),
]
+3 -1
View File
@@ -24,7 +24,9 @@ class Item(models.Model):
assessed_date = models.DateTimeField(auto_now=True) assessed_date = models.DateTimeField(auto_now=True)
assessed_by = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True) assessed_by = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="assessed_items")
assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, on_delete=models.SET_NULL, related_name="assigned_items")
outcome = models.ForeignKey("Outcome", on_delete=models.SET_NULL, blank=True, null=True) outcome = models.ForeignKey("Outcome", on_delete=models.SET_NULL, blank=True, null=True)
outcome_reason = models.ForeignKey("OutcomeReason", on_delete=models.SET_NULL, blank=True, null=True) outcome_reason = models.ForeignKey("OutcomeReason", on_delete=models.SET_NULL, blank=True, null=True)
@@ -0,0 +1,14 @@
{% extends 'rcr/base.html' %}
{% block content %}
<h2>Items assigned:</h2>
<form action="" method="post" enctype="multipart/form-data" id="assessor-assignment-form">
{{assessor_assignment_form}}
<input type="submit" class="submit-button" value="Submit" name="submit">
</form>
{% endblock %}
+17
View File
@@ -0,0 +1,17 @@
{% extends 'rcr/base.html' %}
{% block content %}
<h2>Assessors:</h2>
<ul>
{% for assessor in assessors %}
<li>
{{assessor}} <a href='{% url "rcr:radiology_index_completed_by_user_view" assessor.pk %}'>(items assessed)</a> <a href='{% url "rcr:radiology_assessor_assignment_view" assessor.pk %}'>(items assigned)</a>
</li>
{% endfor %}
</ul>
{% endblock %}
+3
View File
@@ -79,6 +79,9 @@
<span id="" class="top-bar-link"> <span id="" class="top-bar-link">
<a href="{% url 'rcr:radiology_index_view' %}">Index</a> <a href="{% url 'rcr:radiology_index_view' %}">Index</a>
</span> </span>
<span id="" class="top-bar-link">
<a href="{% url 'rcr:radiology_assessors_view' %}">Assessors</a>
</span>
{% if request.user.is_staff %} {% if request.user.is_staff %}
<span id="admin-link" class="top-bar-link"> <span id="admin-link" class="top-bar-link">
<a href="{% url 'admin:index' %}">Admin</a> <a href="{% url 'admin:index' %}">Admin</a>
+9 -4
View File
@@ -3,6 +3,13 @@
{% block content %} {% block content %}
{% if assessor %}
Assessor: {{assessor}}
{% endif %}
{% if completed %} {% if completed %}
<h2>Completed items:</h2> <h2>Completed items:</h2>
{% else %} {% else %}
@@ -20,10 +27,8 @@
<ul> <ul>
{% for item in items %} {% for item in items %}
<li> <li> {{forloop.counter}}:
{{item.name}} / {{item.rcr_platform_id}}<br /> {{item.name}} / {{item.rcr_platform_id}} <a href="{% url 'rcr:radiology_detail_view' item.pk %}">view</a> <a href="{% url 'rcr:radiology_update_view' item.pk %}">edit</a>
<a href="{% url 'rcr:radiology_detail_view' item.pk %}">view</a>
<a href="{% url 'rcr:radiology_update_view' item.pk %}">edit</a>
</li> </li>
{% empty %} {% empty %}
No items found. No items found.
+7
View File
@@ -11,6 +11,13 @@
{% endfor %} {% endfor %}
</p> </p>
<p>
Outcome: {{object.outcome}}
</p>
<p>
Outcome reason: {{object.reason}}
</p>
<p> <p>
Date assessed: {{object.assessed_date}} Date assessed: {{object.assessed_date}}
</p> </p>
+3
View File
@@ -13,6 +13,9 @@ 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/completed", views.radiology_index_completed, name="radiology_index_completed_view"), path("radiology/completed", views.radiology_index_completed, name="radiology_index_completed_view"),
path("radiology/assessors", views.radiology_assessors, name="radiology_assessors_view"),
path("radiology/assessors/<int:assessor_pk>/assignment", views.radiology_assessor_assignment, name="radiology_assessor_assignment_view"),
path("radiology/completed/user/<int:user_pk>", views.radiology_index_completed_by_user, name="radiology_index_completed_by_user_view"),
path("radiology/item/<int:pk>/", views.ItemDetailView.as_view(), name="radiology_detail_view"), path("radiology/item/<int:pk>/", views.ItemDetailView.as_view(), name="radiology_detail_view"),
path("radiology/item/next/update", views.ItemUpdateNextView.as_view(), name="radiology_update_next_view"), path("radiology/item/next/update", views.ItemUpdateNextView.as_view(), name="radiology_update_next_view"),
path("radiology/item/<int:pk>/update", views.ItemUpdateView.as_view(), name="radiology_update_view"), path("radiology/item/<int:pk>/update", views.ItemUpdateView.as_view(), name="radiology_update_view"),
+39 -4
View File
@@ -5,9 +5,13 @@ from django.shortcuts import redirect, render
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views.generic.edit import UpdateView from django.views.generic.edit import UpdateView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.shortcuts import get_object_or_404
from django.conf import settings
from django.contrib.auth.models import User
from rcr.models import Item from rcr.models import Item
from rcr.forms import ItemForm from rcr.forms import AssessorAssignmentForm, ItemForm
# Create your views here. # Create your views here.
@@ -24,8 +28,38 @@ def radiology_index(request):
}, },
) )
def radiology_index_completed(request): def radiology_assessor_assignment(request, assessor_pk: int):
assessor_assignment_form = AssessorAssignmentForm()
return render(
request,
"rcr/assessor_assignment_form.html",
{
"assessor_assignment_form": assessor_assignment_form,
},
)
def radiology_assessors(request):
assessors = User.objects.filter(groups__name="rcr_radiology_assessor")
return render(
request,
"rcr/assessors.html",
{
"assessors": assessors
},
)
def radiology_index_completed_by_user(request, user_pk: int):
return radiology_index_completed(request, user_pk = user_pk)
def radiology_index_completed(request, user_pk=None):
assessor = None
if user_pk is not None:
items = Item.objects.filter(completed=True, assessed_by=user_pk)
assessor = User.objects.get(pk=user_pk)
else:
items = Item.objects.filter(completed=True) items = Item.objects.filter(completed=True)
return render( return render(
@@ -33,7 +67,8 @@ def radiology_index_completed(request):
"rcr/index.html", "rcr/index.html",
{ {
"items": items, "items": items,
"completed": True "completed": True,
"assessor": assessor
}, },
) )
@@ -43,7 +78,7 @@ class ItemUpdateBase(UpdateView):
self.object = form.save(commit=False) self.object = form.save(commit=False)
self.object.save() self.object.save()
form.instance.author.add(self.request.user.id) form.instance.assessed_by.add(self.request.user.id)
return super().form_valid(form) return super().form_valid(form)
class ItemUpdateView(ItemUpdateBase): class ItemUpdateView(ItemUpdateBase):