Leave Application - validate applicable after for leave type
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 23514e1..a46d6fe 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -34,6 +34,7 @@
self.validate_attendance()
if frappe.db.get_value("Leave Type", self.leave_type, 'is_optional_leave'):
self.validate_optional_leave()
+ self.validate_applicable_after()
def on_update(self):
if self.status == "Open" and self.docstatus < 1:
@@ -55,6 +56,21 @@
# notify leave applier about cancellation
self.notify_employee()
+ def validate_applicable_after(self):
+ if self.leave_type:
+ leave_type = frappe.get_doc("Leave Type", self.leave_type)
+ if leave_type.applicable_after > 0:
+ date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining")
+ leave_days = get_approved_leaves_for_period(self.employee, False, date_of_joining, self.from_date)
+ number_of_days = date_diff(getdate(self.from_date), date_of_joining)
+ if number_of_days >= 0:
+ holidays = 0
+ if not frappe.db.get_value("Leave Type", self.leave_type, "include_holiday"):
+ holidays = get_holidays(self.employee, date_of_joining, self.from_date)
+ number_of_days = number_of_days - leave_days - holidays
+ if number_of_days < leave_type.applicable_after:
+ frappe.throw(_("{0} applicable after {1} working days").format(self.leave_type, leave_type.applicable_after))
+
def validate_dates(self):
if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)):
frappe.throw(_("To date cannot be before from date"))