diff --git a/lms/lms/doctype/lms_batch/lms_batch.json b/lms/lms/doctype/lms_batch/lms_batch.json index c5c66723..fd9f7793 100644 --- a/lms/lms/doctype/lms_batch/lms_batch.json +++ b/lms/lms/doctype/lms_batch/lms_batch.json @@ -20,6 +20,7 @@ "category", "column_break_flwy", "seat_count", + "evaluation_end_date", "section_break_6", "description", "batch_details_raw", @@ -279,11 +280,16 @@ "fieldname": "allow_future", "fieldtype": "Check", "label": "Allow accessing future dates" + }, + { + "fieldname": "evaluation_end_date", + "fieldtype": "Date", + "label": "Evaluation End Date" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-11-17 10:41:00.340418", + "modified": "2023-11-29 12:06:58.776479", "modified_by": "Administrator", "module": "LMS", "name": "LMS Batch", diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json index e8f35028..af9a5cb7 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json @@ -103,13 +103,13 @@ "fieldname": "batch_name", "fieldtype": "Link", "in_standard_filter": 1, - "label": "Batch Name", + "label": "Batch", "options": "LMS Batch" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-08-23 14:50:37.618352", + "modified": "2023-11-29 15:00:30.617298", "modified_by": "Administrator", "module": "LMS", "name": "LMS Certificate Request", 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 6368bd79..9b33ed99 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -12,6 +12,7 @@ from lms.lms.utils import get_evaluator class LMSCertificateRequest(Document): def validate(self): self.validate_if_existing_requests() + self.validate_evaluation_date() def validate_if_existing_requests(self): existing_requests = frappe.get_all( @@ -32,6 +33,20 @@ class LMSCertificateRequest(Document): ) ) + def validate_evaluation_date(self): + if self.batch_name: + evaluation_end_date = frappe.db.get_value( + "LMS Batch", self.batch_name, "evaluation_end_date" + ) + + if evaluation_end_date: + if getdate(self.date) > getdate(evaluation_end_date): + frappe.throw( + _("You cannot schedule evaluations after {0}.").format( + format_date(evaluation_end_date, "medium") + ) + ) + def schedule_evals(): if frappe.db.get_single_value("LMS Settings", "send_calendar_invite_for_evaluations"): @@ -104,7 +119,9 @@ def update_meeting_details(eval, event, calendar): @frappe.whitelist() -def create_certificate_request(course, date, day, start_time, end_time, batch=None): +def create_certificate_request( + course, date, day, start_time, end_time, batch_name=None +): is_member = frappe.db.exists( {"doctype": "LMS Enrollment", "course": course, "member": frappe.session.user} ) @@ -115,13 +132,13 @@ def create_certificate_request(course, date, day, start_time, end_time, batch=No eval.update( { "course": course, - "evaluator": get_evaluator(course, batch), + "evaluator": get_evaluator(course, batch_name), "member": frappe.session.user, "date": date, "day": day, "start_time": start_time, "end_time": end_time, - "batch": batch, + "batch_name": batch_name, } ) eval.save(ignore_permissions=True) diff --git a/lms/lms/notification/certificate_request_creation/certificate_request_creation.json b/lms/lms/notification/certificate_request_creation/certificate_request_creation.json index 8f350a8a..89acbaa0 100644 --- a/lms/lms/notification/certificate_request_creation/certificate_request_creation.json +++ b/lms/lms/notification/certificate_request_creation/certificate_request_creation.json @@ -11,7 +11,8 @@ "idx": 0, "is_standard": 1, "message": "{% set title = frappe.db.get_value(\"LMS Course\", doc.course, \"title\") %}\n\n
{{ _(\"Hey {0}\").format(doc.member_name) }}
\n{{ _('Your evaluation for the course {0} has been scheduled on {1} at {2}.').format(title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\")) }}
\n{{ _(\"Please prepare well and be on time for the evaluations.\") }}
\n", - "modified": "2023-02-28 19:53:47.716135", + "message_type": "HTML", + "modified": "2023-11-29 17:34:54.514031", "modified_by": "Administrator", "module": "LMS", "name": "Certificate Request Creation", @@ -22,9 +23,12 @@ }, { "receiver_by_document_field": "evaluator" + }, + { + "receiver_by_role": "Frappe School Admin" } ], "send_system_notification": 0, "send_to_all_assignees": 0, "subject": "Your evaluation slot has been booked" -} +} \ No newline at end of file diff --git a/lms/lms/notification/certificate_request_creation/certificate_request_creation.md b/lms/lms/notification/certificate_request_creation/certificate_request_creation.md deleted file mode 100644 index 46f352a0..00000000 --- a/lms/lms/notification/certificate_request_creation/certificate_request_creation.md +++ /dev/null @@ -1 +0,0 @@ -{{ _("Please prepare well and be on time for the evaluations.") }}
\ No newline at end of file diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html index 7a22c938..feb0c476 100644 --- a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html @@ -1,5 +1,5 @@ {% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} -{{ _("Hey {0}").format(doc.member_name) }}
-{{ _('Your evaluation for the course {0} has been scheduled on {1} at {2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}
+{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}
+{{ _("Please prepare well and be on time for the evaluations.") }}
diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json index 315cf445..b334eabf 100644 --- a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json @@ -11,8 +11,9 @@ "event": "Days Before", "idx": 0, "is_standard": 1, - "message": "{% set title = frappe.db.get_value(\"LMS Course\", doc.course, \"title\") %}\n{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\")) }}
\n{{ _(\"Please prepare well and be on time for the evaluations.\") }}
\n", - "modified": "2022-06-03 11:51:02.681803", + "message": "{% set title = frappe.db.get_value(\"LMS Course\", doc.course, \"title\") %}\n\n{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\")) }}
\n\n{{ _(\"Please prepare well and be on time for the evaluations.\") }}
\n", + "message_type": "HTML", + "modified": "2023-11-29 17:26:53.355501", "modified_by": "Administrator", "module": "LMS", "name": "Certificate Request Reminder", @@ -20,6 +21,9 @@ "recipients": [ { "receiver_by_document_field": "member" + }, + { + "receiver_by_document_field": "evaluator" } ], "send_system_notification": 0, diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.md b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.md deleted file mode 100644 index e8ff02cb..00000000 --- a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.md +++ /dev/null @@ -1,3 +0,0 @@ -{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} -{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}
-{{ _("Please prepare well and be on time for the evaluations.") }}
diff --git a/lms/www/batches/batch.html b/lms/www/batches/batch.html index 0183f5f5..cd38e0ef 100644 --- a/lms/www/batches/batch.html +++ b/lms/www/batches/batch.html @@ -639,6 +639,7 @@ let courses = {{ course_list | json }}; const legends = {{ legends | json }}; const allow_future = {{ batch_info.allow_future }} + const evaluation_end_date = "{{ batch_info.evaluation_end_date if batch_info.evaluation_end_date else '' }}" diff --git a/lms/www/batches/batch.js b/lms/www/batches/batch.js index cf81c223..9b9ce717 100644 --- a/lms/www/batches/batch.js +++ b/lms/www/batches/batch.js @@ -503,6 +503,7 @@ const remove_assessment = (e) => { }; const open_evaluation_form = (e) => { + console.log(evaluation_end_date); this.eval_form = new frappe.ui.Dialog({ title: __("Schedule Evaluation"), fields: [ @@ -530,6 +531,9 @@ const open_evaluation_form = (e) => { min_date: new Date( frappe.datetime.add_days(frappe.datetime.get_today(), 1) ), + max_date: evaluation_end_date + ? new Date(evaluation_end_date) + : "", change: () => { if (this.eval_form.get_value("date")) get_slots(); }, diff --git a/lms/www/batches/batch.py b/lms/www/batches/batch.py index ab339e15..666658cc 100644 --- a/lms/www/batches/batch.py +++ b/lms/www/batches/batch.py @@ -43,6 +43,7 @@ def get_context(context): "batch_details", "published", "allow_future", + "evaluation_end_date", ], as_dict=True, )