From 42d7acf522d7dc4e81286270b918800430c33988 Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Tue, 15 Sep 2020 17:52:47 +0530 Subject: [PATCH] fix: academic term and year date validations --- .../program_enrollment/program_enrollment.js | 50 +++++++++++-------- .../program_enrollment/program_enrollment.py | 26 +++++++++- 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/erpnext/education/doctype/program_enrollment/program_enrollment.js b/erpnext/education/doctype/program_enrollment/program_enrollment.js index e3b3e9fdd6..5e1635d595 100644 --- a/erpnext/education/doctype/program_enrollment/program_enrollment.js +++ b/erpnext/education/doctype/program_enrollment/program_enrollment.js @@ -2,16 +2,24 @@ // For license information, please see license.txt -frappe.ui.form.on("Program Enrollment", { +frappe.ui.form.on('Program Enrollment', { setup: function(frm) { frm.add_fetch('fee_structure', 'total_amount', 'amount'); }, - onload: function(frm, cdt, cdn){ - frm.set_query("academic_term", "fees", function(){ - return{ - "filters":{ - "academic_year": (frm.doc.academic_year) + onload: function(frm) { + frm.set_query('academic_term', function() { + return { + 'filters':{ + 'academic_year': (frm.doc.academic_year) + } + }; + }); + + frm.set_query('academic_term', 'fees', function() { + return { + 'filters':{ + 'academic_year': (frm.doc.academic_year) } }; }); @@ -24,9 +32,9 @@ frappe.ui.form.on("Program Enrollment", { }; if (frm.doc.program) { - frm.set_query("course", "courses", function(doc, cdt, cdn) { - return{ - query: "erpnext.education.doctype.program_enrollment.program_enrollment.get_program_courses", + frm.set_query('course', 'courses', function(doc, cdt, cdn) { + return { + query: 'erpnext.education.doctype.program_enrollment.program_enrollment.get_program_courses', filters: { 'program': frm.doc.program } @@ -34,9 +42,9 @@ frappe.ui.form.on("Program Enrollment", { }); } - frm.set_query("student", function() { + frm.set_query('student', function() { return{ - query: "erpnext.education.doctype.program_enrollment.program_enrollment.get_students", + query: 'erpnext.education.doctype.program_enrollment.program_enrollment.get_students', filters: { 'academic_year': frm.doc.academic_year, 'academic_term': frm.doc.academic_term @@ -49,14 +57,14 @@ frappe.ui.form.on("Program Enrollment", { frm.events.get_courses(frm); if (frm.doc.program) { frappe.call({ - method: "erpnext.education.api.get_fee_schedule", + method: 'erpnext.education.api.get_fee_schedule', args: { - "program": frm.doc.program, - "student_category": frm.doc.student_category + 'program': frm.doc.program, + 'student_category': frm.doc.student_category }, callback: function(r) { if(r.message) { - frm.set_value("fees" ,r.message); + frm.set_value('fees' ,r.message); frm.events.get_courses(frm); } } @@ -65,17 +73,17 @@ frappe.ui.form.on("Program Enrollment", { }, student_category: function() { - frappe.ui.form.trigger("Program Enrollment", "program"); + frappe.ui.form.trigger('Program Enrollment', 'program'); }, get_courses: function(frm) { - frm.set_value("courses",[]); + frm.set_value('courses',[]); frappe.call({ - method: "get_courses", + method: 'get_courses', doc:frm.doc, callback: function(r) { if(r.message) { - frm.set_value("courses", r.message); + frm.set_value('courses', r.message); } } }) @@ -84,10 +92,10 @@ frappe.ui.form.on("Program Enrollment", { frappe.ui.form.on('Program Enrollment Course', { courses_add: function(frm){ - frm.fields_dict['courses'].grid.get_field('course').get_query = function(doc){ + frm.fields_dict['courses'].grid.get_field('course').get_query = function(doc) { var course_list = []; if(!doc.__islocal) course_list.push(doc.name); - $.each(doc.courses, function(idx, val){ + $.each(doc.courses, function(_idx, val) { if (val.course) course_list.push(val.course); }); return { filters: [['Course', 'name', 'not in', course_list]] }; diff --git a/erpnext/education/doctype/program_enrollment/program_enrollment.py b/erpnext/education/doctype/program_enrollment/program_enrollment.py index 28767f8ec1..d676c25d0f 100644 --- a/erpnext/education/doctype/program_enrollment/program_enrollment.py +++ b/erpnext/education/doctype/program_enrollment/program_enrollment.py @@ -7,12 +7,14 @@ import frappe from frappe import msgprint, _ from frappe.model.document import Document from frappe.desk.reportview import get_match_cond, get_filters_cond -from frappe.utils import comma_and +from frappe.utils import comma_and, get_link_to_form, getdate import erpnext.www.lms as lms class ProgramEnrollment(Document): def validate(self): self.validate_duplication() + self.validate_academic_year() + self.validate_academic_term() if not self.student_name: self.student_name = frappe.db.get_value("Student", self.student, "title") if not self.courses: @@ -23,6 +25,28 @@ class ProgramEnrollment(Document): self.make_fee_records() self.create_course_enrollments() + def validate_academic_year(self): + start_date, end_date = frappe.db.get_value("Academic Year", self.academic_year, ["year_start_date", "year_end_date"]) + if self.enrollment_date: + if start_date and getdate(self.enrollment_date) < getdate(start_date): + frappe.throw(_("Enrollment Date cannot be before the Start Date of the Academic Year {0}").format( + get_link_to_form("Academic Year", self.academic_year))) + + if end_date and getdate(self.enrollment_date) > getdate(end_date): + frappe.throw(_("Enrollment Date cannot be after the End Date of the Academic Term {0}").format( + get_link_to_form("Academic Year", self.academic_year))) + + def validate_academic_term(self): + start_date, end_date = frappe.db.get_value("Academic Term", self.academic_term, ["term_start_date", "term_end_date"]) + if self.enrollment_date: + if start_date and getdate(self.enrollment_date) < getdate(start_date): + frappe.throw(_("Enrollment Date cannot be before the Start Date of the Academic Term {0}").format( + get_link_to_form("Academic Term", self.academic_term))) + + if end_date and getdate(self.enrollment_date) > getdate(end_date): + frappe.throw(_("Enrollment Date cannot be after the End Date of the Academic Term {0}").format( + get_link_to_form("Academic Term", self.academic_term))) + def validate_duplication(self): enrollment = frappe.get_all("Program Enrollment", filters={ "student": self.student,