From b7fb96633e7f4e94489c0f9ca40882ceefb5849c Mon Sep 17 00:00:00 2001 From: Ross Date: Sun, 12 Nov 2023 18:58:45 +0000 Subject: [PATCH] update rcr migration app --- rad/static/css/anatomy.css | 1 + rcr/admin.py | 6 ++- ...assessed_by_item_assessed_date_and_more.py | 38 +++++++++++++ .../0004_outcomereason_item_outcome_reason.py | 26 +++++++++ rcr/models.py | 24 +++++++++ rcr/templates/rcr/index.html | 23 +++++++- rcr/templates/rcr/item_detail.html | 16 ++++++ rcr/templates/rcr/item_update.html | 2 + rcr/urls.py | 1 + rcr/views.py | 53 ++++++++++++++++--- 10 files changed, 179 insertions(+), 11 deletions(-) create mode 100644 rcr/migrations/0003_outcome_item_assessed_by_item_assessed_date_and_more.py create mode 100644 rcr/migrations/0004_outcomereason_item_outcome_reason.py diff --git a/rad/static/css/anatomy.css b/rad/static/css/anatomy.css index c9f35a68..b7c9a798 100644 --- a/rad/static/css/anatomy.css +++ b/rad/static/css/anatomy.css @@ -1059,4 +1059,5 @@ table .peninsula-trainee::before { .form-control { background-color: unset; + color: unset } \ No newline at end of file diff --git a/rcr/admin.py b/rcr/admin.py index c0b3a5fc..cc551b62 100644 --- a/rcr/admin.py +++ b/rcr/admin.py @@ -2,8 +2,10 @@ from django.contrib import admin # Register your models here. -from rcr.models import Item, Category, Level +from rcr.models import Item, Category, Level, Outcome, OutcomeReason admin.site.register(Item) admin.site.register(Category) -admin.site.register(Level) \ No newline at end of file +admin.site.register(Level) +admin.site.register(Outcome) +admin.site.register(OutcomeReason) \ No newline at end of file diff --git a/rcr/migrations/0003_outcome_item_assessed_by_item_assessed_date_and_more.py b/rcr/migrations/0003_outcome_item_assessed_by_item_assessed_date_and_more.py new file mode 100644 index 00000000..b8392c2f --- /dev/null +++ b/rcr/migrations/0003_outcome_item_assessed_by_item_assessed_date_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 4.1.4 on 2023-11-12 18:53 + +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', '0002_alter_item_category_alter_item_level'), + ] + + operations = [ + migrations.CreateModel( + name='Outcome', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ], + ), + migrations.AddField( + model_name='item', + name='assessed_by', + field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='item', + name='assessed_date', + field=models.DateTimeField(auto_now=True), + ), + migrations.AddField( + model_name='item', + name='outcome', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rcr.outcome'), + ), + ] diff --git a/rcr/migrations/0004_outcomereason_item_outcome_reason.py b/rcr/migrations/0004_outcomereason_item_outcome_reason.py new file mode 100644 index 00000000..bf931132 --- /dev/null +++ b/rcr/migrations/0004_outcomereason_item_outcome_reason.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1.4 on 2023-11-12 18:55 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('rcr', '0003_outcome_item_assessed_by_item_assessed_date_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='OutcomeReason', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('reason', models.CharField(max_length=255)), + ], + ), + migrations.AddField( + model_name='item', + name='outcome_reason', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rcr.outcomereason'), + ), + ] diff --git a/rcr/models.py b/rcr/models.py index 972e29b3..f3360905 100644 --- a/rcr/models.py +++ b/rcr/models.py @@ -1,4 +1,6 @@ +from django.conf import settings from django.db import models +from django.urls import reverse from django.utils.translation import gettext_lazy as _ # Create your models here. @@ -20,12 +22,22 @@ class Item(models.Model): level = models.ManyToManyField("Level", blank=True) + assessed_date = models.DateTimeField(auto_now=True) + + assessed_by = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=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) completed = models.BooleanField(default=False) def __str__(self): return self.name + def get_absolute_url(self): + return reverse("rcr:radiology_detail_view", kwargs={"pk": self.pk}) + + class Category(models.Model): name = models.CharField(max_length=255) @@ -38,3 +50,15 @@ class Level(models.Model): def __str__(self): return self.name + +class Outcome(models.Model): + name = models.CharField(max_length=255) + + def __str__(self): + return self.name + +class OutcomeReason(models.Model): + reason = models.CharField(max_length=255) + + def __str__(self): + return self.reason \ No newline at end of file diff --git a/rcr/templates/rcr/index.html b/rcr/templates/rcr/index.html index da3e6c68..edcbee5d 100644 --- a/rcr/templates/rcr/index.html +++ b/rcr/templates/rcr/index.html @@ -2,6 +2,21 @@ {% block content %} + +{% if completed %} +

Completed items:

+{% else %} +

Items to assess:

+{% endif %} + + +{% if items %} + +Click to assess next item + +{% endif %} + + - -TEST + +Todo +Done + {% endblock %} \ No newline at end of file diff --git a/rcr/templates/rcr/item_detail.html b/rcr/templates/rcr/item_detail.html index 6e0a6502..2e4e456b 100644 --- a/rcr/templates/rcr/item_detail.html +++ b/rcr/templates/rcr/item_detail.html @@ -2,6 +2,22 @@ {% block content %}

Item: {{object.name}}

+

Category: {{object.category}}

+ +

+ Level(s): + {% for level in object.level.all %} + {{level}}, + {% endfor %} +

+ + +

+ Completed: {{object.completed}} +

+ +

Edit

+
{% endblock %} \ No newline at end of file diff --git a/rcr/templates/rcr/item_update.html b/rcr/templates/rcr/item_update.html index 156f9f27..1440b46c 100644 --- a/rcr/templates/rcr/item_update.html +++ b/rcr/templates/rcr/item_update.html @@ -5,6 +5,8 @@ {% comment %} {% if request.user.is_superuser %} (Admin Edit) {% endif %} {% endcomment %} +

Link: click here

+
{% csrf_token %} {{ form|crispy }} diff --git a/rcr/urls.py b/rcr/urls.py index fc374954..d029f03b 100644 --- a/rcr/urls.py +++ b/rcr/urls.py @@ -12,6 +12,7 @@ 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/item//", 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//update", views.ItemUpdateView.as_view(), name="radiology_update_view"), diff --git a/rcr/views.py b/rcr/views.py index 1f9a5f72..08f4460d 100644 --- a/rcr/views.py +++ b/rcr/views.py @@ -1,6 +1,7 @@ from typing import Any from django.db import models -from django.shortcuts import render +from django.http import Http404 +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 @@ -12,18 +13,40 @@ from rcr.forms import ItemForm def radiology_index(request): - items = Item.objects.all() + items = Item.objects.all().exclude(completed=True) return render( request, "rcr/index.html", { - "items": items + "items": items, + "completed": False + }, + ) + +def radiology_index_completed(request): + + items = Item.objects.filter(completed=True) + + return render( + request, + "rcr/index.html", + { + "items": items, + "completed": True }, ) -class ItemUpdateView(UpdateView): +class ItemUpdateBase(UpdateView): + def form_valid(self, form): + self.object = form.save(commit=False) + self.object.save() + + form.instance.author.add(self.request.user.id) + return super().form_valid(form) + +class ItemUpdateView(ItemUpdateBase): model = Item form_class = ItemForm @@ -31,17 +54,33 @@ class ItemUpdateView(UpdateView): #excludes = ["rcr_platform_id"] #fields = ["category", "level"] -class ItemUpdateNextView(UpdateView): +class ItemUpdateNextView(ItemUpdateBase): model = Item form_class = ItemForm template_name = "rcr/item_update.html" + + def get(self, request, *args, **kwargs): + try: + self.object = self.get_object() + print("What", self.object) + except Http404: + print("YES") + # redirect here + return redirect("rcr:radiology_index_view") + context = self.get_context_data(object=self.object) + return self.render_to_response(context) + def get_object(self): obj = Item.objects.filter(completed=False).first() - #~if not obj: - #~ return reverse_lazy("rcr:radiology_index_view") + print("HELLO", obj) + print(obj) + + if not obj: + print("raise") + raise Http404 return obj print("test")