From f4c82f45f5c95dd4eb3266234644aee3d20f49c1 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 9 Oct 2024 21:40:46 +0100 Subject: [PATCH] . --- anatomy/migrations/0022_alter_exam_markers.py | 20 ++ .../0062_alter_casecollection_markers.py | 20 ++ longs/migrations/0029_alter_exam_markers.py | 20 ++ .../0004_specialty_formats_specialties.py | 25 ++ oef/models.py | 10 +- .../oef/entries_by_question_codes.html | 5 + oef/templates/oef/questions.html | 218 ++++++++++-------- oef/urls.py | 6 + oef/views.py | 46 +++- physics/migrations/0015_alter_exam_markers.py | 20 ++ rapids/migrations/0013_alter_exam_markers.py | 20 ++ sbas/migrations/0015_alter_exam_markers.py | 20 ++ 12 files changed, 332 insertions(+), 98 deletions(-) create mode 100644 anatomy/migrations/0022_alter_exam_markers.py create mode 100644 atlas/migrations/0062_alter_casecollection_markers.py create mode 100644 longs/migrations/0029_alter_exam_markers.py create mode 100644 oef/migrations/0004_specialty_formats_specialties.py create mode 100644 oef/templates/oef/entries_by_question_codes.html create mode 100644 physics/migrations/0015_alter_exam_markers.py create mode 100644 rapids/migrations/0013_alter_exam_markers.py create mode 100644 sbas/migrations/0015_alter_exam_markers.py diff --git a/anatomy/migrations/0022_alter_exam_markers.py b/anatomy/migrations/0022_alter_exam_markers.py new file mode 100644 index 00000000..976a3003 --- /dev/null +++ b/anatomy/migrations/0022_alter_exam_markers.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.2 on 2024-10-09 20:39 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('anatomy', '0021_alter_anatomyquestion_answer_help_and_more'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='exam', + name='markers', + field=models.ManyToManyField(blank=True, help_text='Authorised markers for the exam', related_name='anatomy_exam_markers', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/atlas/migrations/0062_alter_casecollection_markers.py b/atlas/migrations/0062_alter_casecollection_markers.py new file mode 100644 index 00000000..81a2abcb --- /dev/null +++ b/atlas/migrations/0062_alter_casecollection_markers.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.2 on 2024-10-09 20:39 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0061_alter_seriesfinding_current_image_id_index'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='casecollection', + name='markers', + field=models.ManyToManyField(blank=True, help_text='Authorised markers for the exam', related_name='casecollection_markers', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/longs/migrations/0029_alter_exam_markers.py b/longs/migrations/0029_alter_exam_markers.py new file mode 100644 index 00000000..79f1d12e --- /dev/null +++ b/longs/migrations/0029_alter_exam_markers.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.2 on 2024-10-09 20:39 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('longs', '0028_alter_exam_double_mark'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='exam', + name='markers', + field=models.ManyToManyField(blank=True, help_text='Authorised markers for the exam', related_name='long_exam_markers', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/oef/migrations/0004_specialty_formats_specialties.py b/oef/migrations/0004_specialty_formats_specialties.py new file mode 100644 index 00000000..150f2ee1 --- /dev/null +++ b/oef/migrations/0004_specialty_formats_specialties.py @@ -0,0 +1,25 @@ +# Generated by Django 5.0.2 on 2024-10-09 20:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('oef', '0003_alter_formats_format'), + ] + + operations = [ + migrations.CreateModel( + name='Specialty', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ], + ), + migrations.AddField( + model_name='formats', + name='specialties', + field=models.ManyToManyField(blank=True, to='oef.specialty'), + ), + ] diff --git a/oef/models.py b/oef/models.py index dab727d3..d5512ba6 100644 --- a/oef/models.py +++ b/oef/models.py @@ -37,6 +37,8 @@ class Formats(models.Model): inherits = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) + specialties = models.ManyToManyField('Specialty', blank=True) + def __str__(self): return self.name @@ -58,4 +60,10 @@ class Formats(models.Model): formats.append(self.format) formats.reverse() - return "\n".join(formats) \ No newline at end of file + return "\n".join(formats) + +class Specialty(models.Model): + name = models.CharField(max_length=200) + + def __str__(self): + return self.name \ No newline at end of file diff --git a/oef/templates/oef/entries_by_question_codes.html b/oef/templates/oef/entries_by_question_codes.html new file mode 100644 index 00000000..f1518061 --- /dev/null +++ b/oef/templates/oef/entries_by_question_codes.html @@ -0,0 +1,5 @@ + +{% for entry in entries %} +
  • {{entry.exam_code}}
  • +{% endfor %} + \ No newline at end of file diff --git a/oef/templates/oef/questions.html b/oef/templates/oef/questions.html index 6a3caaf6..85cd3e83 100644 --- a/oef/templates/oef/questions.html +++ b/oef/templates/oef/questions.html @@ -1,113 +1,141 @@ {% extends 'oef/base.html' %} {% block content %} -

    Questions

    -There are {{ questions|length }} question sets. +

    Questions

    + There are {{ questions|length }} question sets. -
    Filter by: - +
    Filter by: + - -
    + -
    -
    -
    - - + _="on click repeat for el in + set p to the first
     in el then
    +               if p.title does not contain value of #search-text then hide el">Filter
         
    - -
    - - -
    Diff:
    -
    - - - -
    - - - - -
    results - -
    +
    Diff:
    +
    + + + +
    + + + + +
    results + +
    {% endblock content %} {% block css %} - - + + {% endblock css %} - \ No newline at end of file diff --git a/oef/urls.py b/oef/urls.py index d6a23c8f..45da80ae 100644 --- a/oef/urls.py +++ b/oef/urls.py @@ -36,6 +36,9 @@ urlpatterns = [ path( "entries/entries_by_question", views.entries_by_question, name="entries_by_question" ), + path( + "entries/entries_by_question/codes", views.entries_by_question_codes, name="entries_by_question_codes" + ), path( "entries//update", views.EntryUpdateView.as_view(), name="entry_update" ), @@ -51,5 +54,8 @@ urlpatterns = [ path( "formats//apply", views.formats_apply, name="formats_apply" ), + path( + "formats/save", views.formats_save, name="formats_save" + ), ] \ No newline at end of file diff --git a/oef/views.py b/oef/views.py index cbe52f5c..ed22bc61 100644 --- a/oef/views.py +++ b/oef/views.py @@ -29,7 +29,7 @@ class FormatsCreateView(CreateView): class FormatsUpdateView(UpdateView): model = Formats template_name_suffix = "_update_form" - fields = ['name', 'format', 'inherits'] + fields = ['name', 'format', 'specialties', 'inherits'] class EntryTableView(SingleTableMixin, FilterView): model = Entry @@ -96,7 +96,16 @@ def questions(request): questions = sorted(questions, key=lambda x: len(x)) - return render(request, "oef/questions.html", {"questions": questions}) + questions_and_formats = [] + + for question in questions: + try: + format = Formats.objects.get(format=question) + except Formats.DoesNotExist: + format = None + questions_and_formats.append((question, format)) + + return render(request, "oef/questions.html", {"questions": questions, "questions_and_formats": questions_and_formats}) def entries_by_question(request): @@ -108,6 +117,16 @@ def entries_by_question(request): return HttpResponse("Please provide a question") +def entries_by_question_codes(request): + + if request.method == "POST": + question = request.POST.get("question") + entries = Entry.objects.filter(questions=question) + + return render(request, "oef/entries_by_question_codes.html", {"entries": entries}) + + return HttpResponse("Please provide a question") + def questions_diff(request): if request.method == "POST": question1 = request.POST.get("question1", False) @@ -143,3 +162,26 @@ def questions_sym(request): return HttpResponse("Please provide a question set") + + +def formats_save(request): + + if request.method == "POST": + question = request.POST.get("question") + format_name = request.POST.get("format_name") + + if not question: + return HttpResponse("Please provide a question") + + if Formats.objects.filter(name=format_name).exists(): + return HttpResponse("Format name already exists") + + if Formats.objects.filter(format=question).exists(): + return HttpResponse("Format questions already exists") + + Formats.objects.create(name="format_name", format=question) + + return HttpResponse("Format saved") + + + return HttpResponse("Please provide a question") \ No newline at end of file diff --git a/physics/migrations/0015_alter_exam_markers.py b/physics/migrations/0015_alter_exam_markers.py new file mode 100644 index 00000000..64ab0aed --- /dev/null +++ b/physics/migrations/0015_alter_exam_markers.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.2 on 2024-10-09 20:39 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('physics', '0014_rename_rapid_examquestiondetail_question'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='exam', + name='markers', + field=models.ManyToManyField(blank=True, help_text='Authorised markers for the exam', related_name='physics_exam_markers', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/rapids/migrations/0013_alter_exam_markers.py b/rapids/migrations/0013_alter_exam_markers.py new file mode 100644 index 00000000..f9d790b0 --- /dev/null +++ b/rapids/migrations/0013_alter_exam_markers.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.2 on 2024-10-09 20:39 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('rapids', '0012_alter_exam_markers'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='exam', + name='markers', + field=models.ManyToManyField(blank=True, help_text='Authorised markers for the exam', related_name='rapid_exam_markers', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/sbas/migrations/0015_alter_exam_markers.py b/sbas/migrations/0015_alter_exam_markers.py new file mode 100644 index 00000000..7df03a9e --- /dev/null +++ b/sbas/migrations/0015_alter_exam_markers.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.2 on 2024-10-09 20:39 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sbas', '0014_rename_rapid_examquestiondetail_question'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='exam', + name='markers', + field=models.ManyToManyField(blank=True, help_text='Authorised markers for the exam', related_name='sba_exam_markers', to=settings.AUTH_USER_MODEL), + ), + ]