diff --git a/anatomy/models.py b/anatomy/models.py index ef528a0b..9a7cdc67 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -157,8 +157,8 @@ class AnatomyQuestion(models.Model): exams = ", ".join(e) return exams - def get_unmarked_answer_string(self): - unmarked_answers = self.get_unmarked_answers() + def get_unmarked_answer_string(self, exam_pk=None): + unmarked_answers = self.get_unmarked_answers(exam_pk) if not unmarked_answers: return "No answers to mark" @@ -168,16 +168,22 @@ class AnatomyQuestion(models.Model): ) ) - def get_unmarked_answers(self): - user_answers = set( - [i.answer_compare for i in self.cid_user_answers.all()] - ) + def get_unmarked_answers(self, exam_pk=None): + if exam_pk is None: + user_answers = set( + [i.answer_compare for i in self.cid_user_answers.all()] + ) + else: + user_answers = set( + [i.answer_compare for i in self.cid_user_answers.filter(exam__id=exam_pk)] + ) + unmarked_answers = user_answers - self.get_marked_answers() return unmarked_answers - def get_unmarked_answer_count(self): - return len(self.get_unmarked_answers()) + def get_unmarked_answer_count(self, exam_pk=None): + return len(self.get_unmarked_answers(exam_pk)) def get_marked_answers(self): return set( diff --git a/anatomy/static/css/anatomy.css b/anatomy/static/css/anatomy.css index a653bf86..b3b12bc5 100644 --- a/anatomy/static/css/anatomy.css +++ b/anatomy/static/css/anatomy.css @@ -708,4 +708,5 @@ input { .sticky-alert { position: sticky; + top: 5px; } \ No newline at end of file diff --git a/anatomy/templates/anatomy/mark_overview.html b/anatomy/templates/anatomy/mark_overview.html index 95afc5bd..ec2e41ba 100644 --- a/anatomy/templates/anatomy/mark_overview.html +++ b/anatomy/templates/anatomy/mark_overview.html @@ -11,9 +11,9 @@
diff --git a/generic/views.py b/generic/views.py index e7c408dc..f1814ce1 100644 --- a/generic/views.py +++ b/generic/views.py @@ -367,9 +367,13 @@ class ExamViews(View, LoginRequiredMixin): questions = exam.exam_questions.all() + question_unmarked_map = [] + for q in questions: + question_unmarked_map.append((q, q.get_unmarked_answer_count())) + # TODO: fix showing unmarked answer count from other exams... return render( - request, "{}/mark_overview.html".format(self.app_name), {"exam": exam, "questions": questions} + request, "{}/mark_overview.html".format(self.app_name), {"exam": exam, "question_unmarked_map": question_unmarked_map} ) @method_decorator(login_required) diff --git a/longs/models.py b/longs/models.py index db6295f7..7bf977ab 100644 --- a/longs/models.py +++ b/longs/models.py @@ -175,12 +175,20 @@ class Long(models.Model): def get_image_url_array(self): return json.dumps(["https://www.penracourses.org.uk{}".format(i.url) for i in self.get_images()]) - def get_unmarked_answer_count(self): - answers = self.cid_user_answers.all() + def get_unmarked_answer_count(self, exam_pk=None): + if exam_pk is None: + answers = self.cid_user_answers.all() + else: + answers = self.cid_user_answers.filter(exam__id=exam_pk) + return len([ans for ans in answers if not ans.is_marked()]) - def get_unmarked_answers(self): - answers = self.cid_user_answers.all() + def get_unmarked_answers(self, exam_pk=None): + if exam_pk is None: + answers = self.cid_user_answers.all() + else: + answers = self.cid_user_answers.filter(exam__id=exam_pk) + return [ans for ans in answers if not ans.is_marked()] def get_question_json(self, based=True): diff --git a/longs/templates/longs/mark_overview.html b/longs/templates/longs/mark_overview.html index 609c63c4..cb89d79b 100644 --- a/longs/templates/longs/mark_overview.html +++ b/longs/templates/longs/mark_overview.html @@ -11,11 +11,11 @@
diff --git a/rapids/models.py b/rapids/models.py index db9bbe00..cec0dc96 100644 --- a/rapids/models.py +++ b/rapids/models.py @@ -231,8 +231,8 @@ class Rapid(models.Model): exams = ", ".join(e) return exams - def get_unmarked_answer_string(self): - unmarked_answers = self.get_unmarked_answers() + def get_unmarked_answer_string(self, exam_pk=None): + unmarked_answers = self.get_unmarked_answers(exam_pk) if not unmarked_answers: return "No answers to mark" @@ -242,25 +242,36 @@ class Rapid(models.Model): ) ) - def get_unmarked_answers(self): + def get_unmarked_answers(self, exam_pk=None): # If normal no answers to mark if self.normal: return [] - user_answers = set( - [i.answer_compare for i in self.cid_user_answers.all() if i.normal == False] - ) + if exam_pk is None: + user_answers = set( + [i.answer_compare for i in self.cid_user_answers.all() if i.normal == False] + ) + else: + user_answers = set( + [i.answer_compare for i in self.cid_user_answers.filter(exam__id=exam_pk) if i.normal == False] + ) + unmarked_answers = user_answers - self.get_marked_answers() return unmarked_answers - def get_unmarked_answer_count(self): - return len(self.get_unmarked_answers()) + def get_unmarked_answer_count(self, exam_pk=None): + return len(self.get_unmarked_answers(exam_pk)) - def get_user_answers(self): - user_answers = set( - [i.answer_compare for i in self.cid_user_answers.all()] - ) + def get_user_answers(self, exam_pk=None): + if exam_pk is None: + user_answers = set( + [i.answer_compare for i in self.cid_user_answers.all()] + ) + else: + user_answers = set( + [i.answer_compare for i in self.cid_user_answers.filter(exam__id=exam_pk)] + ) return user_answers diff --git a/rapids/templates/rapids/mark_overview.html b/rapids/templates/rapids/mark_overview.html index f6bc4ed1..f1b02917 100644 --- a/rapids/templates/rapids/mark_overview.html +++ b/rapids/templates/rapids/mark_overview.html @@ -11,9 +11,9 @@