diff --git a/rad/settings.py b/rad/settings.py index 570cc651..1511c90c 100644 --- a/rad/settings.py +++ b/rad/settings.py @@ -49,6 +49,7 @@ INSTALLED_APPS = [ "sbas", "wally", "atlas", + "rcr", "reversion", "debug_toolbar", "django_tables2", diff --git a/rad/urls.py b/rad/urls.py index 062ebf08..760eea66 100644 --- a/rad/urls.py +++ b/rad/urls.py @@ -63,6 +63,7 @@ urlpatterns = [ path("sbas/", include("sbas.urls"), name="sbas"), path("generic/", include("generic.urls"), name="generic"), path("atlas/", include("atlas.urls"), name="atlas"), + path("rcr/", include("rcr.urls"), name="rcr"), path( "accounts/check_users", views.accounts_check_users, name="accounts_check_users" ), diff --git a/rcr/__init__.py b/rcr/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/rcr/admin.py b/rcr/admin.py new file mode 100644 index 00000000..c0b3a5fc --- /dev/null +++ b/rcr/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +# Register your models here. + +from rcr.models import Item, Category, Level + +admin.site.register(Item) +admin.site.register(Category) +admin.site.register(Level) \ No newline at end of file diff --git a/rcr/apps.py b/rcr/apps.py new file mode 100644 index 00000000..98d4439c --- /dev/null +++ b/rcr/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class RcrConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'rcr' diff --git a/rcr/forms.py b/rcr/forms.py new file mode 100644 index 00000000..6583e957 --- /dev/null +++ b/rcr/forms.py @@ -0,0 +1,24 @@ + +from django import forms +from django.contrib.admin import widgets +from django.forms import ( + BaseInlineFormSet, + Form, + HiddenInput, + ModelForm, + ModelMultipleChoiceField, + ModelChoiceField, + ChoiceField, + CharField, + ValidationError, + modelformset_factory, + CheckboxSelectMultiple +) + +from rcr.models import Item, Category, Level + +class ItemForm(ModelForm): + class Meta: + model = Item + exclude = ["rcr_platform_id", "name"] + #fields = ["category", "level"] \ No newline at end of file diff --git a/rcr/migrations/0001_initial.py b/rcr/migrations/0001_initial.py new file mode 100644 index 00000000..bd85072b --- /dev/null +++ b/rcr/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# Generated by Django 4.1.4 on 2023-11-04 09:48 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name='Level', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name='Item', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('rcr_platform_id', models.CharField(max_length=255)), + ('completed', models.BooleanField(default=False)), + ('category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='rcr.category')), + ('level', models.ManyToManyField(to='rcr.level')), + ], + ), + ] diff --git a/rcr/migrations/__init__.py b/rcr/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/rcr/models.py b/rcr/models.py new file mode 100644 index 00000000..972e29b3 --- /dev/null +++ b/rcr/models.py @@ -0,0 +1,40 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ + +# Create your models here. + +class Item(models.Model): + class LevelChoices(models.TextChoices): + NONE = "", _("None") + PART_1 = "P1", _("FRCR Part 1") + PART_2 = "P2", _("FRCR Part 2") + POST_GEN = "GEN", _("Post FRCR Generalist") + POST_SPEC = "SPEC", _("Post FRCR Specialist") + + + name = models.CharField(max_length=200) + + rcr_platform_id = models.CharField(max_length=255) + + category = models.ForeignKey("Category", on_delete=models.SET_NULL, null=True, blank=True) + + level = models.ManyToManyField("Level", blank=True) + + + completed = models.BooleanField(default=False) + + def __str__(self): + return self.name + + +class Category(models.Model): + name = models.CharField(max_length=255) + + def __str__(self): + return self.name + +class Level(models.Model): + name = models.CharField(max_length=255) + + def __str__(self): + return self.name diff --git a/rcr/templates/rcr/base.html b/rcr/templates/rcr/base.html new file mode 100644 index 00000000..a3186a89 --- /dev/null +++ b/rcr/templates/rcr/base.html @@ -0,0 +1,117 @@ + +{% load static %} +{% load django_htmx %} +{% load crispy_forms_tags %} +{% load auth_extras %} + + + + + {% block title %} + RCR Platform Migration + {% endblock %} + + {% comment %} {% endcomment %} + + + + + + + + + + + + + + + + + + + + + + + + + {% comment %} {% endcomment %} + + + {% django_htmx_script %} + + + + + + + + + + + + + + + + + + + + + + + + + + + {% block js %} + {% endblock %} + + {% block css %} + {% endblock %} + + + + + +
+ {% block navigation %} + {% endblock %} +
+
+ {% block content %} + {% endblock %} +
+
+
+ + + + + \ No newline at end of file diff --git a/rcr/templates/rcr/index.html b/rcr/templates/rcr/index.html new file mode 100644 index 00000000..da3e6c68 --- /dev/null +++ b/rcr/templates/rcr/index.html @@ -0,0 +1,19 @@ +{% extends 'rcr/base.html' %} + +{% block content %} + + + +TEST + +{% endblock %} \ No newline at end of file diff --git a/rcr/templates/rcr/item_detail.html b/rcr/templates/rcr/item_detail.html new file mode 100644 index 00000000..6e0a6502 --- /dev/null +++ b/rcr/templates/rcr/item_detail.html @@ -0,0 +1,7 @@ +{% extends 'rcr/base.html' %} +{% block content %} +

Item: {{object.name}}

+ +
+
+{% endblock %} \ No newline at end of file diff --git a/rcr/templates/rcr/item_update.html b/rcr/templates/rcr/item_update.html new file mode 100644 index 00000000..156f9f27 --- /dev/null +++ b/rcr/templates/rcr/item_update.html @@ -0,0 +1,15 @@ +{% extends 'rcr/base.html' %} +{% load crispy_forms_tags %} +{% block content %} +

Item: {{object.name}}

+{% comment %} {% if request.user.is_superuser %} + (Admin Edit) +{% endif %} {% endcomment %} +
{% csrf_token %} + {{ form|crispy }} + +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/rcr/tests.py b/rcr/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/rcr/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/rcr/urls.py b/rcr/urls.py new file mode 100644 index 00000000..fc374954 --- /dev/null +++ b/rcr/urls.py @@ -0,0 +1,18 @@ + + +from django.contrib import admin +from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static +from django.views.generic import TemplateView + +from . import views + +app_name = "rcr" + +urlpatterns = [ + path("radiology/", views.radiology_index, name="radiology_index_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"), +] \ No newline at end of file diff --git a/rcr/views.py b/rcr/views.py new file mode 100644 index 00000000..1f9a5f72 --- /dev/null +++ b/rcr/views.py @@ -0,0 +1,61 @@ +from typing import Any +from django.db import models +from django.shortcuts import render +from django.urls import reverse_lazy +from django.views.generic.edit import UpdateView +from django.views.generic.detail import DetailView + +from rcr.models import Item +from rcr.forms import ItemForm + +# Create your views here. + +def radiology_index(request): + + items = Item.objects.all() + + return render( + request, + "rcr/index.html", + { + "items": items + }, + ) + + +class ItemUpdateView(UpdateView): + model = Item + + form_class = ItemForm + template_name = "rcr/item_update.html" + #excludes = ["rcr_platform_id"] + #fields = ["category", "level"] + +class ItemUpdateNextView(UpdateView): + model = Item + + form_class = ItemForm + template_name = "rcr/item_update.html" + + def get_object(self): + obj = Item.objects.filter(completed=False).first() + + #~if not obj: + #~ return reverse_lazy("rcr:radiology_index_view") + + return obj + print("test") + return super().get_object() + + #def get + + def get_success_url(self) -> str: + return reverse_lazy("rcr:radiology_update_next_view") + + + + +class ItemDetailView(DetailView): + model = Item + #template_name = "TEMPLATE_NAME" + #excludes = ["rcr_platform_id"]