From 0182db803000fa6394bcdc1454c1e5c4de46ef5b Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 20 Jul 2023 20:16:13 +0530 Subject: [PATCH] fix: show upcoming evals in progress page --- .../course_evaluator/course_evaluator.py | 13 +- .../lms_certificate_request.py | 8 +- lms/lms/utils.py | 16 ++ lms/www/classes/progress.html | 143 +++++++++++++----- lms/www/classes/progress.js | 30 ++-- lms/www/classes/progress.py | 17 +++ 6 files changed, 156 insertions(+), 71 deletions(-) diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.py b/lms/lms/doctype/course_evaluator/course_evaluator.py index beff1c6e..b8fc78bd 100644 --- a/lms/lms/doctype/course_evaluator/course_evaluator.py +++ b/lms/lms/doctype/course_evaluator/course_evaluator.py @@ -4,6 +4,7 @@ import frappe from frappe import _ from frappe.model.document import Document +from lms.lms.utils import get_evaluator class CourseEvaluator(Document): @@ -37,17 +38,7 @@ class CourseEvaluator(Document): @frappe.whitelist() def get_schedule(course, date, class_name=None): - evaluator = None - - if class_name: - evaluator = frappe.db.get_value( - "Class Course", - {"parent": class_name, "course": course}, - "evaluator", - ) - - if not evaluator: - evaluator = frappe.db.get_value("LMS Course", course, "evaluator") + evaluator = get_evaluator(course, class_name) all_slots = frappe.get_all( "Evaluator Schedule", diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py index 0570d615..f10da005 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -6,6 +6,7 @@ from frappe import _ from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc from frappe.utils import format_date, format_time, getdate +from lms.lms.utils import get_evaluator class LMSCertificateRequest(Document): @@ -24,7 +25,7 @@ class LMSCertificateRequest(Document): ) for req in existing_requests: - if req.date == getdate(self.date) and getdate() <= getdate(self.date): + if req.date == getdate(self.date) or getdate() <= getdate(self.date): course_title = frappe.db.get_value("LMS Course", req.course, "title") frappe.throw( _("You already have an evaluation on {0} at {1} for the course {2}.").format( @@ -78,7 +79,9 @@ class LMSCertificateRequest(Document): @frappe.whitelist() -def create_certificate_request(course, date, day, start_time, end_time): +def create_certificate_request( + course, date, day, start_time, end_time, class_name=None +): is_member = frappe.db.exists( {"doctype": "LMS Batch Membership", "course": course, "member": frappe.session.user} ) @@ -90,6 +93,7 @@ def create_certificate_request(course, date, day, start_time, end_time): { "doctype": "LMS Certificate Request", "course": course, + "evaluator": get_evaluator(course, class_name), "member": frappe.session.user, "date": date, "day": day, diff --git a/lms/lms/utils.py b/lms/lms/utils.py index 6e2d981d..17619038 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -753,3 +753,19 @@ def has_submitted_assessment(assessment, type, member=None): def has_graded_assessment(submission): status = frappe.db.get_value("LMS Assignment Submission", submission, "status") return False if status == "Not Graded" else True + + +def get_evaluator(course, class_name=None): + evaluator = None + + if class_name: + evaluator = frappe.db.get_value( + "Class Course", + {"parent": class_name, "course": course}, + "evaluator", + ) + + if not evaluator: + evaluator = frappe.db.get_value("LMS Course", course, "evaluator") + + return evaluator diff --git a/lms/www/classes/progress.html b/lms/www/classes/progress.html index f49e47cd..fc26578a 100644 --- a/lms/www/classes/progress.html +++ b/lms/www/classes/progress.html @@ -21,7 +21,7 @@
{{ _("{0}").format(student.full_name) }}
-
+
{{ _("All Classes") }} @@ -58,61 +58,122 @@ {% macro Progress(class_info, student) %} -{% if assessments | length %} -
-
+ {{ UpcomingEvals(upcoming_evals) }} + {{ Assessments(class_info, student) }} +{% endmacro %} + +{% macro UpcomingEvals(upcoming_evals) %} +
+
+ {{ _("Upcoming Evaluations") }} +
+ {% if upcoming_evals | length %} +
+
+
+
+
+ {{ _("Course") }} +
+
+ {{ _("Date") }} +
+
+ {{ _("Time") }} +
+
+ {{ _("Evaluator") }} +
+
+
+
+ {% for eval in upcoming_evals %}
-
- {{ _("Assessment") }} + + {{ eval.course_title }} + +
+ {{ eval.date }}
- {{ _("Type") }} + {{ eval.start_time }}
- {{ _("Status/Score") }} + {{ eval.evaluator_name }}
-
- {% for assessment in assessments %} - {% set has_access = is_moderator and assessment.submission or frappe.session.user == student.name %} -
-
- - {{ assessment.title }} - -
- {{ (assessment.assessment_type).split("LMS ")[1] }} -
+ {% endfor %} +
+ {% else %} +

{{ _("No Upcoming Evaluations") }}

+ {% endif %} +
+{% endmacro %} -
- {% if assessment.submission %} - {% if assessment.assessment_type == "LMS Assignment" %} - {% set status = assessment.submission.status %} - {% set color = "green" if status == "Pass" else "red" if status == "Fail" else "orange" %} -
- {{ status }} -
+{% macro Assessments(class_info, student) %} +
+
+ {{ _("Assessments") }} +
+ {% if assessments | length %} +
+
+
+
+
+ {{ _("Assessment") }} +
+
+ {{ _("Type") }} +
+
+ {{ _("Status/Score") }} +
+
+
+
+ {% for assessment in assessments %} + {% set has_access = is_moderator and assessment.submission or frappe.session.user == student.name %} +
+
+ + {{ assessment.title }} + +
+ {{ (assessment.assessment_type).split("LMS ")[1] }} +
+ +
+ {% if assessment.submission %} + {% if assessment.assessment_type == "LMS Assignment" %} + {% set status = assessment.submission.status %} + {% set color = "green" if status == "Pass" else "red" if status == "Fail" else "orange" %} +
+ {{ status }} +
+ {% else %} +
+ {{ assessment.submission.score }} +
+ {% endif %} {% else %} -
- {{ assessment.submission.score }} +
+ {{ _("Not Attempted") }}
{% endif %} - {% else %} -
- {{ _("Not Attempted") }} -
- {% endif %} -
+
+
-
- {% endfor %} -
-{% else %} -

{{ _("No Assessments") }}

-{% endif %} + {% endfor %} + + {% else %} +

{{ _("No Assessments") }}

+ {% endif %} +
+ {% endmacro %} {%- block script %} diff --git a/lms/www/classes/progress.js b/lms/www/classes/progress.js index 5071da22..53f46cb6 100644 --- a/lms/www/classes/progress.js +++ b/lms/www/classes/progress.js @@ -35,9 +35,8 @@ const open_evaluation_form = (e) => { fieldname: "date", label: __("Date"), reqd: 1, - min_date: frappe.datetime.add_days( - frappe.datetime.get_today(), - 1 + min_date: new Date( + frappe.datetime.add_days(frappe.datetime.get_today(), 1) ), change: () => { get_slots(); @@ -69,7 +68,6 @@ const get_slots = () => { }, callback: (r) => { if (r.message) { - console.log(r.message); display_slots(r.message); } }, @@ -82,13 +80,12 @@ const display_slots = (slots) => { slots.forEach((slot) => { if (slot.day == day) { - slot_html += `
- ${moment(slot.start_time, "hh:mm").format("hh:mm a")} - ${moment( - slot.end_time, - "hh:mm" - ).format("hh:mm a")} + }" + data-start="${slot.start_time}" data-end="${slot.end_time}"> + ${moment(slot.start_time, "hh:mm").format("hh:mm a")} - + ${moment(slot.end_time, "hh:mm").format("hh:mm a")}
`; } }); @@ -123,13 +120,12 @@ const submit_evaluation_form = (values) => { day: this.current_slot.data("day"), }, callback: (r) => { - if (r.message) { - frappe.msgprint({ - title: __("Success"), - message: __("Evaluation scheduled successfully"), - }); - this.eval_form.hide(); - } + frappe.msgprint({ + title: __("Success"), + message: __("Evaluation scheduled successfully"), + }); + this.eval_form.hide(); + window.location.reload(); }, }); }; diff --git a/lms/www/classes/progress.py b/lms/www/classes/progress.py index b8a6e318..8e5bd323 100644 --- a/lms/www/classes/progress.py +++ b/lms/www/classes/progress.py @@ -26,3 +26,20 @@ def get_context(context): ) context.assessments = get_assessments(class_name, context.student.name) + + upcoming_evals = frappe.get_all( + "LMS certificate Request", + { + "member": context.student.name, + "course": ["in", context.courses], + "date": [">=", frappe.utils.nowdate()], + }, + ["date", "start_time", "course", "evaluator"], + order_by="date", + ) + + for evals in upcoming_evals: + evals.course_title = frappe.db.get_value("LMS Course", evals.course, "title") + evals.evaluator_name = frappe.db.get_value("User", evals.evaluator, "full_name") + + context.upcoming_evals = upcoming_evals