upgrade rcr migration
This commit is contained in:
+1
-1
@@ -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(
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ INSTALLED_APPS = [
|
|||||||
"wally",
|
"wally",
|
||||||
"atlas",
|
"atlas",
|
||||||
"rcr",
|
"rcr",
|
||||||
|
"rota",
|
||||||
"reversion",
|
"reversion",
|
||||||
"debug_toolbar",
|
"debug_toolbar",
|
||||||
"django_tables2",
|
"django_tables2",
|
||||||
|
|||||||
@@ -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"
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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
@@ -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 %}
|
||||||
@@ -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 %}
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user