From 4b794271f7ca423047fe1f6a22b4871a1fb18c37 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 18:10:02 +0000 Subject: [PATCH 01/31] . --- rapids/forms.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/rapids/forms.py b/rapids/forms.py index 41e03f92..c58a3758 100755 --- a/rapids/forms.py +++ b/rapids/forms.py @@ -65,13 +65,13 @@ class AbnormalityForm(ModelForm): class RapidCreationDefaultForm(ModelForm): class Meta: model = RapidCreationDefault - #fields = ["site"] + # fields = ["site"] exclude = ["author"] class RapidForm(ModelForm): - exams = ModelMultipleChoiceField(required=False, queryset=Exam.objects.all(),widget=FilteredSelectMultiple(verbose_name="Exams", is_stacked=False)) + # exams = ModelMultipleChoiceField(required=False, queryset=Exam.objects.all(),widget=FilteredSelectMultiple(verbose_name="Exams", is_stacked=False)) class Media: # Django also includes a few javascript files necessary # for the operation of this form element. You need to @@ -117,7 +117,11 @@ class RapidForm(ModelForm): self.fields["laterality"] = ChoiceField( choices=Rapid.LATERALITY_CHOICES, required=False, widget=RadioSelect() ) - + self.fields["exams"] = ModelMultipleChoiceField( + required=False, + queryset=Exam.objects.all(), + widget=FilteredSelectMultiple(verbose_name="Exams", is_stacked=False), + ) def save(self, commit=True): # Get the unsaved Pizza instance @@ -152,7 +156,7 @@ class RapidForm(ModelForm): "region", "laterality", "examination", - #"site", + # "site", "feedback", ] # fields = ['question', 'feedback', 'subspecialty', 'references'] From ea66d3e7eac383fa81b65706808ae8fd6e3dfef1 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 18:12:09 +0000 Subject: [PATCH 02/31] . --- rapids/forms.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rapids/forms.py b/rapids/forms.py index c58a3758..c73a825b 100755 --- a/rapids/forms.py +++ b/rapids/forms.py @@ -84,11 +84,6 @@ class RapidForm(ModelForm): js = ["jsi18n.js", "tesseract.min.js"] def __init__(self, *args, **kwargs): - ModelForm.__init__(self, *args, **kwargs) - super(RapidForm, self).__init__(*args, **kwargs) - # self.fields['question'].widget.attrs = {'class': 'question-form', 'rows': 10, 'cols': 100} - # self.fields['feedback'].widget.attrs = {'class': 'feedback-form', 'rows': 10, 'cols': 100} - if kwargs.get("instance"): # We get the 'initial' keyword argument or initialize it # as a dict if it didn't exist. @@ -97,6 +92,11 @@ class RapidForm(ModelForm): # a list of primary key for the selected data. initial["exams"] = [t.pk for t in kwargs["instance"].exams.all()] + ModelForm.__init__(self, *args, **kwargs) + super(RapidForm, self).__init__(*args, **kwargs) + # self.fields['question'].widget.attrs = {'class': 'question-form', 'rows': 10, 'cols': 100} + # self.fields['feedback'].widget.attrs = {'class': 'feedback-form', 'rows': 10, 'cols': 100} + self.fields["abnormality"] = ModelMultipleChoiceField( required=False, queryset=Abnormality.objects.all(), From 51ce7a722f704e178d8e42214388e54d8631982b Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 18:21:50 +0000 Subject: [PATCH 03/31] . --- rapids/views.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rapids/views.py b/rapids/views.py index b0400c81..ec2bd502 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -355,6 +355,10 @@ class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): return context def form_valid(self, form): + # save exam orders (there must be a better way to do this) + exam_orders = {} + for exam in self.object.exams.all(): + exam_orders[exam] = list(exam.exam_questions.all()) self.object = form.save(commit=False) self.object.save() From f94f490228444e026e6ba2d818fa9e24bc653f63 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 18:23:06 +0000 Subject: [PATCH 04/31] . --- rapids/views.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rapids/views.py b/rapids/views.py index ec2bd502..dc574c17 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -375,6 +375,14 @@ class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): image_formset.save() answer_formset.instance = self.object answer_formset.save() + + # restore exam orders + for exam in self.object.exams.all(): + if exam in exam_orders and self.object in exam_orders[exam]: + print(exam_orders[exam]) + exam.exam_questions.set(exam_orders[exam]) + exam.save() + return response else: return super().form_invalid(form) From a958e75f6b4f44b645d35cde7e08f2db92082038 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 18:36:03 +0000 Subject: [PATCH 05/31] . --- rapids/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids/forms.py b/rapids/forms.py index c73a825b..dafba32e 100755 --- a/rapids/forms.py +++ b/rapids/forms.py @@ -189,7 +189,7 @@ AnswerFormSet = inlineformset_factory( }, exclude=[], can_delete=True, - extra=1, + extra=0, max_num=10, ) From 38dcbf119ccefbac65e33325c017458ae5dfc8e3 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 19:12:47 +0000 Subject: [PATCH 06/31] . --- longs/views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/longs/views.py b/longs/views.py index 24e73b7e..af23849d 100755 --- a/longs/views.py +++ b/longs/views.py @@ -986,6 +986,9 @@ def question_json(request, pk): cache.set("{}_question_json_{}".format("longs", pk), question_json, 3600) + question.recreate_json = False + question.save() + return JsonResponse(question_json) @login_required From c0eeb17482669a7f48bcdb481f65d23eedcfe068 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 20:32:08 +0000 Subject: [PATCH 07/31] . --- longs/models.py | 7 ++----- longs/templates/longs/long_series_viewer.html | 1 + longs/urls.py | 1 + longs/views.py | 10 ++++++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/longs/models.py b/longs/models.py index 2a9b87e4..15314175 100644 --- a/longs/models.py +++ b/longs/models.py @@ -189,6 +189,7 @@ class Long(models.Model): #"feedback_image": [], #"annotations": [str(q.image_annotations)], "type": "long", + "cached": False, } return exam_question @@ -377,14 +378,10 @@ class LongSeries(models.Model): else: skipcount = skipcount + 1 - print("skipped, no SliceLocation: {}".format(skipcount)) + print("skipped, no {}: {}".format(field, skipcount)) # ensure they are in the correct order slices = sorted(slices, key=lambda s: s[field].value) - #if field == "SliceLocation": - # slices = sorted(slices, key=lambda s: s.SliceLocation) - #elif field == "InstanceNumber": - # slices = sorted(slices, key=lambda s: s.InstanceNumber) #print(slices) diff --git a/longs/templates/longs/long_series_viewer.html b/longs/templates/longs/long_series_viewer.html index 425599a9..9617b76f 100755 --- a/longs/templates/longs/long_series_viewer.html +++ b/longs/templates/longs/long_series_viewer.html @@ -17,6 +17,7 @@ This series is not associated with any cases. {% for image in series.images.all %} diff --git a/longs/urls.py b/longs/urls.py index 3ed91a4e..f331d6ce 100755 --- a/longs/urls.py +++ b/longs/urls.py @@ -13,6 +13,7 @@ urlpatterns = [ path("series/", views.long_series_detail, name="long_series_detail"), path("series//order_dicom", views.long_series_order_dicom, name="long_series_order_dicom"), path("series//order_dicom_instance", views.long_series_order_dicom_instance, name="long_series_order_dicom_instance"), + path("series//order_dicom_SeriesInstanceUID", views.long_series_order_dicom_SeriesInstanceUID, name="long_series_order_dicom_SeriesInstanceUID"), path("series//order_upload_filename", views.long_series_order_upload_filename, name="long_series_order_upload_filename"), path("series//delete", views.LongSeriesDelete.as_view(), name="long_series_delete"), # path("unchecked/", views.unchecked_list, name="unchecked_list"), diff --git a/longs/views.py b/longs/views.py index af23849d..87ce32ea 100755 --- a/longs/views.py +++ b/longs/views.py @@ -955,6 +955,16 @@ def long_series_order_dicom_instance(request, pk): return redirect("longs:long_series_detail", pk=pk) +@login_required +def long_series_order_dicom_SeriesInstanceUID(request, pk): + series = get_object_or_404(LongSeries, pk=pk) + try: + series.order_by_dicom("SeriesInstanceUID") + except: + return HttpResponse('

Series does not appear to contain dicoms (or field SeriesInstanceUID)

') + + return redirect("longs:long_series_detail", pk=pk) + @login_required def long_series_order_upload_filename(request, pk): series = get_object_or_404(LongSeries, pk=pk) From c661a5c9c5f126b13dc6d7f6726c40c81d1aa60f Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 20:49:08 +0000 Subject: [PATCH 08/31] . --- rapids/models.py | 15 +++++++++++++++ rapids/templates/rapids/exam_overview.html | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/rapids/models.py b/rapids/models.py index 894eac85..63f5efe0 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -352,6 +352,21 @@ class Exam(ExamBase): help_text="Exam time limit (in seconds). Default is 2100 secondse (35 minutes)", default=2100 ) + def get_normal_abnormal_breakdown(self): + # Inefficient but more extendible + questions = self.exam_questions.all() + + normal = [] + abnormal = [] + for q in question: + if q.normal: + normal.append(q) + else: + abnormal.append(q) + + return len(normal) + + def get_exam_json(self): questions = self.exam_questions.all() diff --git a/rapids/templates/rapids/exam_overview.html b/rapids/templates/rapids/exam_overview.html index b915f176..f20873b8 100644 --- a/rapids/templates/rapids/exam_overview.html +++ b/rapids/templates/rapids/exam_overview.html @@ -6,7 +6,8 @@
Admin Edit

Exam: {{ exam.name }}

- This exam has {{question_number}} questions. Time limit: {{exam.time_limit}} seconds. + This exam has {{question_number}} questions. Time limit: {{exam.time_limit}} seconds.
+ Normal {{ exam.get_normal_abnormal_breakdown }}
Exam active: [When checked the exam will be available to take in the test system] From b28d7862996da400e332d3265e2fc6d125ba0847 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 20:49:40 +0000 Subject: [PATCH 09/31] . --- rapids/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids/models.py b/rapids/models.py index 63f5efe0..a51980da 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -358,7 +358,7 @@ class Exam(ExamBase): normal = [] abnormal = [] - for q in question: + for q in questions: if q.normal: normal.append(q) else: From 543c3190414bd07c546a719d90f29fa7caceefe0 Mon Sep 17 00:00:00 2001 From: Ross Date: Tue, 2 Mar 2021 23:20:42 +0000 Subject: [PATCH 10/31] . --- longs/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/models.py b/longs/models.py index 15314175..084b68f6 100644 --- a/longs/models.py +++ b/longs/models.py @@ -626,4 +626,4 @@ class CidUserAnswer(models.Model): return True def get_answer_score(self): - return float(self.score) + return self.score From f8bdb93e3350227340f413bf6fb94cf9616a9118 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 19:26:48 +0000 Subject: [PATCH 11/31] . --- rapids/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids/models.py b/rapids/models.py index a51980da..4363d40b 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -458,7 +458,7 @@ class CidUserAnswer(models.Model): self.answer = self.answer.strip() s = self.answer.lower() - s = s.translate(str.maketrans('', '', string.punctuation)) + s = s.translate(str.maketrans('', '', string.punctuation.replace("#", ""))) self.answer_compare = s From 48e6957c2e2872b56d184048fa06cc191c05877b Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 19:52:22 +0000 Subject: [PATCH 12/31] . --- longs/models.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/longs/models.py b/longs/models.py index 084b68f6..31247498 100644 --- a/longs/models.py +++ b/longs/models.py @@ -613,12 +613,6 @@ class CidUserAnswer(models.Model): ans = ans.strip() - # def get_compare_string(self): - # # strip here should be unneccasry (providing clean is now working) - # s = self.answer.lower().strip() - # s = s.translate(str.maketrans('', '', string.punctuation)) - # return s - def is_marked(self): if self.score == "": return False From f3c6f9a43d6521e861aac411da557ea71822d803 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 19:52:30 +0000 Subject: [PATCH 13/31] . --- rapids/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids/models.py b/rapids/models.py index 4363d40b..a72dc6cd 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -99,7 +99,7 @@ class Answer(models.Model): self.answer = self.answer.strip() s = self.answer.lower() - s = s.translate(str.maketrans('', '', string.punctuation)) + s = s.translate(str.maketrans('', '', string.punctuation.replace("#", ""))) self.answer_compare = s From 619082061f65b2c27bfd9279d8836b995255901c Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 19:58:17 +0000 Subject: [PATCH 14/31] . --- rapids/admin.py | 3 ++- templates/index.html | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/rapids/admin.py b/rapids/admin.py index 75d4d0b1..d8e9f9f9 100755 --- a/rapids/admin.py +++ b/rapids/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Rapid, RapidImage, Examination, Site, Abnormality, Region, Note, RapidCreationDefault, Answer, Exam +from .models import Rapid, RapidImage, Examination, Site, Abnormality, Region, Note, RapidCreationDefault, Answer, Exam, CidUserAnswer import tagulous.admin @@ -17,6 +17,7 @@ admin.site.register(Region) admin.site.register(Note) admin.site.register(RapidCreationDefault) admin.site.register(Answer) +admin.site.register(CidUserAnswer) class RapidAnswersInline(admin.TabularInline): model = Answer diff --git a/templates/index.html b/templates/index.html index f9266e0e..87e5eff7 100644 --- a/templates/index.html +++ b/templates/index.html @@ -6,7 +6,9 @@ Anatomy Physics Rapids + {% if not request.user.is_authenticated %} Log in + {% endif %} {% if request.user.is_staff %}Admin{% endif %} Reset password
From 7f5af94df2917dfdf785264100c3a5b9c8a34f8d Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:02:39 +0000 Subject: [PATCH 15/31] . --- longs/templates/longs/exam_scores_user.html | 13 +++++++++++++ longs/views.py | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index 86936e20..5641ec86 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -11,6 +11,19 @@ {% endfor %}
Total mark: {{ total_score }} / {{max_score}} +
+

Answers

+
    {% for answer in answer_text %} +
  • Observation
    {{answer[0]}}
  • +
  • Interpretation
    {{answer[1]}}
  • +
  • Principle Diagnosis
    {{answer[2]}}
  • +
  • Differential Diagnosis
    {{answer[3]}}
  • +
  • Management
    {{answer[4]}}
  • + + {% endfor %} +
+ +
diff --git a/longs/views.py b/longs/views.py index 87ce32ea..3ac38dd8 100755 --- a/longs/views.py +++ b/longs/views.py @@ -889,21 +889,27 @@ def exam_scores_cid_user(request, pk, sk): #answers_and_marks = [] answers_marks = [] #answers = [] + answer_text = [] for q in questions: # Get user answer user_answer = q.cid_user_answers.filter(cid=cid).first() + + if not user_answer or user_answer is None: # skip if no answer #answers_marks.append("") #answers.append("") answer_score = 4 #ans = "Not answered" + answer_text.append("Not answered") else: answer_score = user_answer.get_answer_score() + answer_text.append((answer_observations, answer_interpretation, answer_principle_diagnosis, answer_differential_diagnosis, answer_management)) + if not exam.publish_results: answer_score = 0 #answers.append(ans) @@ -931,6 +937,7 @@ def exam_scores_cid_user(request, pk, sk): "answers_marks": answers_marks, "total_score": total_score, "max_score": max_score, + "answer_text": answer_text #"answers_and_marks": answers_and_marks, }, ) From b1de2870c33fa568067decb9eff660f6ebf4c4fb Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:03:32 +0000 Subject: [PATCH 16/31] . --- longs/templates/longs/exam_scores_user.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index 5641ec86..950b7de4 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -13,12 +13,12 @@
Total mark: {{ total_score }} / {{max_score}}

Answers

-
    {% for answer in answer_text %} -
  • Observation
    {{answer[0]}}
  • -
  • Interpretation
    {{answer[1]}}
  • -
  • Principle Diagnosis
    {{answer[2]}}
  • -
  • Differential Diagnosis
    {{answer[3]}}
  • -
  • Management
    {{answer[4]}}
  • +
      {% for a,b,c,d,e in answer_text %} +
    • Observation
      {{a}}
    • +
    • Interpretation
      {{b}}
    • +
    • Principle Diagnosis
      {{c}}
    • +
    • Differential Diagnosis
      {{d}}
    • +
    • Management
      {{e}}
    • {% endfor %}
    From 71f193e9238c2670a8ad30f301ae2c7363eb8590 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:04:15 +0000 Subject: [PATCH 17/31] . --- longs/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/views.py b/longs/views.py index 3ac38dd8..3966408b 100755 --- a/longs/views.py +++ b/longs/views.py @@ -908,7 +908,7 @@ def exam_scores_cid_user(request, pk, sk): else: answer_score = user_answer.get_answer_score() - answer_text.append((answer_observations, answer_interpretation, answer_principle_diagnosis, answer_differential_diagnosis, answer_management)) + answer_text.append((user_answer.answer_observations, user_answer.answer_interpretation, user_answer.answer_principle_diagnosis, user_answer.answer_differential_diagnosis, user_answer.answer_management)) if not exam.publish_results: answer_score = 0 From 5d93894751bfaa5661f5d9649c2e086a00b65a04 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:05:51 +0000 Subject: [PATCH 18/31] . --- longs/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/views.py b/longs/views.py index 3966408b..111a2b8a 100755 --- a/longs/views.py +++ b/longs/views.py @@ -904,7 +904,7 @@ def exam_scores_cid_user(request, pk, sk): #answers.append("") answer_score = 4 #ans = "Not answered" - answer_text.append("Not answered") + answer_text.append(("Not answered"),("Not answered"),("Not answered"),("Not answered"),("Not answered"),) else: answer_score = user_answer.get_answer_score() From 32aa5b7a9981f7f7ad05cfcbffc2b68c535f76d7 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:06:18 +0000 Subject: [PATCH 19/31] . --- longs/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/views.py b/longs/views.py index 111a2b8a..bb82ac6f 100755 --- a/longs/views.py +++ b/longs/views.py @@ -904,7 +904,7 @@ def exam_scores_cid_user(request, pk, sk): #answers.append("") answer_score = 4 #ans = "Not answered" - answer_text.append(("Not answered"),("Not answered"),("Not answered"),("Not answered"),("Not answered"),) + answer_text.append((("Not answered"),("Not answered"),("Not answered"),("Not answered"),("Not answered"))) else: answer_score = user_answer.get_answer_score() From 3017cab0c3630b22d09614661d83b67af41ae80a Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:07:08 +0000 Subject: [PATCH 20/31] . --- longs/templates/longs/exam_scores_user.html | 1 + 1 file changed, 1 insertion(+) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index 950b7de4..6dd95feb 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -14,6 +14,7 @@

    Answers

      {% for a,b,c,d,e in answer_text %} +
    • Question {{forloop.counter}}
    • Observation
      {{a}}
    • Interpretation
      {{b}}
    • Principle Diagnosis
      {{c}}
    • From c9c26f04dd875defb415d83f022faa351e5d3d85 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:07:58 +0000 Subject: [PATCH 21/31] . --- longs/templates/longs/exam_scores_user.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index 6dd95feb..a75b050d 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -14,7 +14,7 @@

      Answers

        {% for a,b,c,d,e in answer_text %} -
      • Question {{forloop.counter}}
      • +
      • Question {{forloop.counter}}
      • Observation
        {{a}}
      • Interpretation
        {{b}}
      • Principle Diagnosis
        {{c}}
      • From 6b671bcf376367490aa28191472c0fdb69db67a2 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:08:29 +0000 Subject: [PATCH 22/31] . --- longs/templates/longs/exam_scores_user.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index a75b050d..f5b3ee61 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -15,12 +15,13 @@

        Answers

          {% for a,b,c,d,e in answer_text %}
        • Question {{forloop.counter}}
        • +
          • Observation
            {{a}}
          • Interpretation
            {{b}}
          • Principle Diagnosis
            {{c}}
          • Differential Diagnosis
            {{d}}
          • Management
            {{e}}
          • - +
          {% endfor %}
        From c03d93ae5f4df630a93c17c836031e46198cc42a Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:09:14 +0000 Subject: [PATCH 23/31] . --- longs/templates/longs/exam_scores_user.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index f5b3ee61..4e9b4e57 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -4,7 +4,7 @@

        Exam: {{ exam.name }}

        Candidate: {{ cid }}

        - Answers: + Scores:
          {% for score in answers_marks %}
        • Question {{forloop.counter}}
        • {{ans}}
          ({{score}})
          From 2cb61ee8b30f4e6ab539f08475850cefe63ccab0 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:16:35 +0000 Subject: [PATCH 24/31] . --- longs/templates/longs/exam_scores_user.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index 4e9b4e57..5b626408 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -13,7 +13,7 @@
          Total mark: {{ total_score }} / {{max_score}}

          Answers

          -
            {% for a,b,c,d,e in answer_text %} +
              {% for a,b,c,d,e in answer_text %}
            • Question {{forloop.counter}}
              • Observation
                {{a}}
              • From 503cb083627454f86c4aed0076b6d21f077993a4 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 3 Mar 2021 21:17:54 +0000 Subject: [PATCH 25/31] . --- longs/templates/longs/exam_scores_user.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/longs/templates/longs/exam_scores_user.html b/longs/templates/longs/exam_scores_user.html index 5b626408..0fca8f71 100644 --- a/longs/templates/longs/exam_scores_user.html +++ b/longs/templates/longs/exam_scores_user.html @@ -16,11 +16,11 @@
                  {% for a,b,c,d,e in answer_text %}
                • Question {{forloop.counter}}
                  • -
                  • Observation
                    {{a}}
                  • -
                  • Interpretation
                    {{b}}
                  • -
                  • Principle Diagnosis
                    {{c}}
                  • -
                  • Differential Diagnosis
                    {{d}}
                  • -
                  • Management
                    {{e}}
                  • +
                  • Observation
                    {{a}}
                  • +
                  • Interpretation
                    {{b}}
                  • +
                  • Principle Diagnosis
                    {{c}}
                  • +
                  • Differential Diagnosis
                    {{d}}
                  • +
                  • Management
                    {{e}}
                  {% endfor %}
                From 5ebd1deee5e73b9a52c340e042a1d1e3781b0922 Mon Sep 17 00:00:00 2001 From: Ross Date: Thu, 4 Mar 2021 17:58:49 +0000 Subject: [PATCH 26/31] . --- longs/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/longs/models.py b/longs/models.py index 31247498..eeaa1e8c 100644 --- a/longs/models.py +++ b/longs/models.py @@ -620,4 +620,6 @@ class CidUserAnswer(models.Model): return True def get_answer_score(self): - return self.score + if self.score == "": + return "" + return float(self.score) From 494c8191bbebf839ff614d064ca20bab29a35687 Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 6 Mar 2021 11:29:10 +0000 Subject: [PATCH 27/31] . --- rapids/admin.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rapids/admin.py b/rapids/admin.py index d8e9f9f9..880e7d93 100755 --- a/rapids/admin.py +++ b/rapids/admin.py @@ -17,7 +17,6 @@ admin.site.register(Region) admin.site.register(Note) admin.site.register(RapidCreationDefault) admin.site.register(Answer) -admin.site.register(CidUserAnswer) class RapidAnswersInline(admin.TabularInline): model = Answer @@ -73,3 +72,8 @@ class RapidAdmin(VersionAdmin): admin.site.register(Rapid, RapidAdmin) #tagulous.admin.register(Rapid.condition) + +class CidUserAnswerAdmin(admin.ModelAdmin): + exclude = [] + +admin.site.register(CidUserAnswer, CidUserAnswerAdmin) \ No newline at end of file From 2e13ee520fdd1532a668980eb1509b3d0fea8c0a Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 6 Mar 2021 11:30:59 +0000 Subject: [PATCH 28/31] . --- rapids/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rapids/admin.py b/rapids/admin.py index 880e7d93..0cf20a6e 100755 --- a/rapids/admin.py +++ b/rapids/admin.py @@ -75,5 +75,6 @@ admin.site.register(Rapid, RapidAdmin) class CidUserAnswerAdmin(admin.ModelAdmin): exclude = [] + readonly_fields = ["created", "updated"] admin.site.register(CidUserAnswer, CidUserAnswerAdmin) \ No newline at end of file From 79de8bccad64f3178663ad157c9bf639894da46a Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 6 Mar 2021 11:38:17 +0000 Subject: [PATCH 29/31] . --- rapids/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rapids/views.py b/rapids/views.py index dc574c17..ed9c7823 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -563,8 +563,10 @@ def loadJsonAnswer(answer): # Update an existing answer # should never be more than one (famous last words) ans = exiting_answers[0] - ans.normal = normal - ans.answer = posted_answer + if answer["qidn"] == "1": + ans.normal = normal + elif answer["qidn"] == "2": + ans.answer = posted_answer ans.full_clean() ans.save() From 594588a8000ae69c2b8f7213b517c7dcab95ad69 Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 6 Mar 2021 11:41:58 +0000 Subject: [PATCH 30/31] . --- rapids/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rapids/views.py b/rapids/views.py index ed9c7823..09c50c44 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -547,8 +547,8 @@ def loadJsonAnswer(answer): normal = True posted_answer = "" # We can ignore the first ab - elif answer["qidn"] == "1" and posted_answer == "Abnormal": - return False + #elif answer["qidn"] == "1" and posted_answer == "Abnormal": + # return False if not exiting_answers: From 513b4a3fcaef68a48515d26f232ee2931d8cb26a Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 6 Mar 2021 11:46:19 +0000 Subject: [PATCH 31/31] . --- rapids/views.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rapids/views.py b/rapids/views.py index 09c50c44..4f52758e 100755 --- a/rapids/views.py +++ b/rapids/views.py @@ -541,15 +541,14 @@ def loadJsonAnswer(answer): posted_answer = answer["ans"] + # qidn 1 does not hold answer data (but should always arrive prior to 2) + if answer["qidn"] == "1": + posted_answer = "" + # Normal answers are just posted with the answer "Normal" normal = False if posted_answer == "Normal": normal = True - posted_answer = "" - # We can ignore the first ab - #elif answer["qidn"] == "1" and posted_answer == "Abnormal": - # return False - if not exiting_answers: ans = CidUserAnswer(answer=posted_answer, normal=normal, cid=answer["cid"])