feat: create expiry ledger entry on allocation period completion
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 53da013..72c538f 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -264,6 +264,7 @@
"erpnext.projects.doctype.project.project.update_project_sales_billing",
"erpnext.projects.doctype.project.project.send_project_status_email_to_users",
"erpnext.quality_management.doctype.quality_review.quality_review.review",
+ "erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry.check_expired_allocation"
"erpnext.support.doctype.service_level_agreement.service_level_agreement.check_agreement_status"
],
"daily_long": [
diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
index 23258f1..585e107 100644
--- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
+++ b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py
@@ -6,12 +6,12 @@
import frappe
from frappe.model.document import Document
from frappe import _
-from frappe.utils import add_days
+from frappe.utils import add_days, today
class LeaveLedgerEntry(Document):
pass
-def create_leave_ledger_entry(ref_doc, args, submit):
+def create_leave_ledger_entry(ref_doc, args, submit=True):
ledger = frappe._dict(
doctype='Leave Ledger Entry',
employee=ref_doc.employee,
@@ -47,4 +47,27 @@
frappe.delete_doc("Leave Ledger Entry", ledger_entry)
else:
frappe.throw(_("Leave allocation %s is linked with leave application %s"
- % (ledger_entry, ', '.join(leave_application_records))))
\ No newline at end of file
+ % (ledger_entry, ', '.join(leave_application_records))))
+
+def check_expired_allocation():
+ ''' Checks for expired allocation by comparing to_date with current_date and
+ based on that creates an expiry ledger entry '''
+ expired_allocation = frappe.db.get_all("Leave Ledger Allocation",
+ filters={
+ 'to_date': today(),
+ 'transaction_type': 'Leave Allocation'
+ },
+ fields=['name', 'transaction_name'])
+
+ if expired_allocation:
+ create_expiry_ledger_entry(expired_allocation)
+
+def create_expiry_ledger_entry(expired_allocation):
+ for allocation in expired_allocation:
+ ledger_entry = frappe.get_doc('Leave Ledger Entry', allocation.name)
+ args = {
+ 'leaves': -ledger_entry.leaves,
+ 'to_date': '',
+ 'is_carry_forward': ledger_entry.is_carry_forward
+ }
+ create_leave_ledger_entry(ledger_entry, args)
\ No newline at end of file