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.exceptions import InvalidImageFormatError
|
||||
|
||||
|
||||
import pydicom
|
||||
import dicognito.anonymizer
|
||||
|
||||
@@ -1282,7 +1283,6 @@ USER_EXAM_TYPES = (
|
||||
# ("CaseCollection", "user_casecollection_exams"),
|
||||
)
|
||||
|
||||
|
||||
class UserProfile(models.Model):
|
||||
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
||||
supervisor = models.ForeignKey(
|
||||
|
||||
@@ -50,6 +50,7 @@ INSTALLED_APPS = [
|
||||
"wally",
|
||||
"atlas",
|
||||
"rcr",
|
||||
"rota",
|
||||
"reversion",
|
||||
"debug_toolbar",
|
||||
"django_tables2",
|
||||
|
||||
@@ -65,6 +65,7 @@ urlpatterns = [
|
||||
path("generic/", include("generic.urls"), name="generic"),
|
||||
path("atlas/", include("atlas.urls"), name="atlas"),
|
||||
path("rcr/", include("rcr.urls"), name="rcr"),
|
||||
path("rota/", include("rota.urls"), name="rota"),
|
||||
path(
|
||||
"accounts/check_users", views.accounts_check_users, name="accounts_check_users"
|
||||
),
|
||||
|
||||
+5
-1
@@ -16,9 +16,13 @@ from django.forms import (
|
||||
)
|
||||
|
||||
from rcr.models import Item, Category, Level
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
class ItemForm(ModelForm):
|
||||
class Meta:
|
||||
model = Item
|
||||
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_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_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">
|
||||
<a href="{% url 'rcr:radiology_index_view' %}">Index</a>
|
||||
</span>
|
||||
<span id="" class="top-bar-link">
|
||||
<a href="{% url 'rcr:radiology_assessors_view' %}">Assessors</a>
|
||||
</span>
|
||||
{% if request.user.is_staff %}
|
||||
<span id="admin-link" class="top-bar-link">
|
||||
<a href="{% url 'admin:index' %}">Admin</a>
|
||||
|
||||
@@ -3,6 +3,13 @@
|
||||
{% block content %}
|
||||
|
||||
|
||||
{% if assessor %}
|
||||
Assessor: {{assessor}}
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
{% if completed %}
|
||||
<h2>Completed items:</h2>
|
||||
{% else %}
|
||||
@@ -20,10 +27,8 @@
|
||||
<ul>
|
||||
{% for item in items %}
|
||||
|
||||
<li>
|
||||
{{item.name}} / {{item.rcr_platform_id}}<br />
|
||||
<a href="{% url 'rcr:radiology_detail_view' item.pk %}">view</a>
|
||||
<a href="{% url 'rcr:radiology_update_view' item.pk %}">edit</a>
|
||||
<li> {{forloop.counter}}:
|
||||
{{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>
|
||||
</li>
|
||||
{% empty %}
|
||||
No items found.
|
||||
|
||||
@@ -11,6 +11,13 @@
|
||||
{% endfor %}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Outcome: {{object.outcome}}
|
||||
</p>
|
||||
<p>
|
||||
Outcome reason: {{object.reason}}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Date assessed: {{object.assessed_date}}
|
||||
</p>
|
||||
|
||||
@@ -13,6 +13,9 @@ app_name = "rcr"
|
||||
urlpatterns = [
|
||||
path("radiology/", views.radiology_index, name="radiology_index_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/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"),
|
||||
|
||||
+40
-5
@@ -5,9 +5,13 @@ from django.shortcuts import redirect, render
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic.edit import UpdateView
|
||||
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.forms import ItemForm
|
||||
from rcr.forms import AssessorAssignmentForm, ItemForm
|
||||
|
||||
# Create your views here.
|
||||
|
||||
@@ -24,16 +28,47 @@ def radiology_index(request):
|
||||
},
|
||||
)
|
||||
|
||||
def radiology_index_completed(request):
|
||||
def radiology_assessor_assignment(request, assessor_pk: int):
|
||||
assessor_assignment_form = AssessorAssignmentForm()
|
||||
|
||||
items = Item.objects.filter(completed=True)
|
||||
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)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"rcr/index.html",
|
||||
{
|
||||
"items": items,
|
||||
"completed": True
|
||||
"completed": True,
|
||||
"assessor": assessor
|
||||
},
|
||||
)
|
||||
|
||||
@@ -43,7 +78,7 @@ class ItemUpdateBase(UpdateView):
|
||||
self.object = form.save(commit=False)
|
||||
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)
|
||||
|
||||
class ItemUpdateView(ItemUpdateBase):
|
||||
|
||||
Reference in New Issue
Block a user