Compensatory Leave Request - Validate and Create leave allocation for compnsatory leave type
diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js
index 28553e3..bb57562 100644
--- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js
+++ b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js
@@ -3,6 +3,12 @@
frappe.ui.form.on('Compensatory Leave Request', {
refresh: function(frm) {
-
+ frm.set_query("leave_type", function() {
+ return {
+ filters: {
+ "is_compensatory": true
+ }
+ };
+ });
}
});
diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py
index b51b46c..ec52228 100644
--- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py
+++ b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py
@@ -4,9 +4,42 @@
from __future__ import unicode_literals
import frappe
+from frappe import _
+from frappe.utils import date_diff
from frappe.model.document import Document
+from erpnext.hr.utils import validate_dates, validate_overlap, get_leave_period
class CompensatoryLeaveRequest(Document):
- def validate_present(self):
- pass
+ def validate(self):
+ validate_dates(self, self.work_from_date, self.work_end_date)
+ validate_overlap(self, self.work_from_date, self.work_end_date)
+
+ def on_submit(self):
+ if not self.leave_type:
+ frappe.throw(_("Please select a leave type to submit the request"))
+ else:
+ company = frappe.db.get_value("Employee", self.employee, "company")
+ leave_period = get_leave_period(self.work_from_date, self.work_end_date, company)
+ if leave_period:
+ self.create_leave_allocation(leave_period)
+ else:
+ frappe.throw(_("There is no leave period in between {0} and {1}").format(self.work_from_date, self.work_end_date))
+
+ def create_leave_allocation(self, leave_period):
+ date_difference = date_diff(self.work_end_date, self.work_from_date) + 1
+ is_carry_forward = frappe.db.get_value("Leave Type", self.leave_type, "is_carry_forward")
+ allocation = frappe.new_doc("Leave Allocation")
+ allocation.employee = self.employee
+ allocation.employee_name = self.employee_name
+ allocation.leave_type = self.leave_type
+ allocation.from_date = self.work_from_date
+ allocation.to_date = self.work_end_date
+ allocation.new_leaves_allocated = date_difference
+ allocation.total_leaves_allocated = date_difference
+ allocation.compensatory_request = self.name
+ allocation.description = self.reason
+ if is_carry_forward == 1:
+ allocation.carry_forward = True
+ allocation.save(ignore_permissions = True)
+ allocation.submit()