fix: expiry allocaton after creating all the transactions
diff --git a/erpnext/patches/v12_0/generate_leave_ledger_entries.py b/erpnext/patches/v12_0/generate_leave_ledger_entries.py
index ffb2e3f..8a92bb3 100644
--- a/erpnext/patches/v12_0/generate_leave_ledger_entries.py
+++ b/erpnext/patches/v12_0/generate_leave_ledger_entries.py
@@ -6,88 +6,96 @@
from frappe.utils import getdate
def execute():
- """ Generates leave ledger entries for leave allocation/application/encashment
- for last allocation """
- frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
- frappe.reload_doc("HR", "doctype", "Leave Encashment")
- if frappe.db.a_row_exists("Leave Ledger Entry"):
- return
+ """ Generates leave ledger entries for leave allocation/application/encashment
+ for last allocation """
+ frappe.reload_doc("HR", "doctype", "Leave Ledger Entry")
+ frappe.reload_doc("HR", "doctype", "Leave Encashment")
+ if frappe.db.a_row_exists("Leave Ledger Entry"):
+ return
- generate_allocation_ledger_entries()
- generate_application_leave_ledger_entries()
- generate_encashment_leave_ledger_entries()
+ generate_allocation_ledger_entries()
+ generate_application_leave_ledger_entries()
+ generate_encashment_leave_ledger_entries()
+ generate_expiry_allocation_ledger_entries()
def generate_allocation_ledger_entries():
- ''' fix ledger entries for missing leave allocation transaction '''
- allocation_list = get_allocation_records()
+ ''' fix ledger entries for missing leave allocation transaction '''
+ allocation_list = get_allocation_records()
- for allocation in allocation_list:
- if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name}):
- allocation.update(dict(doctype="Leave Allocation"))
- allocation_obj = frappe.get_doc(allocation)
- allocation_obj.create_leave_ledger_entry()
- if allocation.to_date <= getdate():
- allocation_obj.expire_allocation()
-
+ for allocation in allocation_list:
+ if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name}):
+ allocation.update(dict(doctype="Leave Allocation"))
+ allocation_obj = frappe.get_doc(allocation)
+ allocation_obj.create_leave_ledger_entry()
def generate_application_leave_ledger_entries():
- ''' fix ledger entries for missing leave application transaction '''
- leave_applications = get_leaves_application_records()
+ ''' fix ledger entries for missing leave application transaction '''
+ leave_applications = get_leaves_application_records()
- for application in leave_applications:
- if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Application', 'transaction_name': application.name}):
- application.update(dict(doctype="Leave Application"))
- frappe.get_doc(application).create_leave_ledger_entry()
+ for application in leave_applications:
+ if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Application', 'transaction_name': application.name}):
+ application.update(dict(doctype="Leave Application"))
+ frappe.get_doc(application).create_leave_ledger_entry()
def generate_encashment_leave_ledger_entries():
- ''' fix ledger entries for missing leave encashment transaction '''
- leave_encashments = get_leave_encashment_records()
+ ''' fix ledger entries for missing leave encashment transaction '''
+ leave_encashments = get_leave_encashment_records()
- for encashment in leave_encashments:
- if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Encashment', 'transaction_name': encashment.name}):
- encashment.update(dict(doctype="Leave Encashment"))
- frappe.get_doc(encashment).create_leave_ledger_entry()
+ for encashment in leave_encashments:
+ if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Encashment', 'transaction_name': encashment.name}):
+ encashment.update(dict(doctype="Leave Encashment"))
+ frappe.get_doc(encashment).create_leave_ledger_entry()
+
+def generate_expiry_allocation_ledger_entries():
+ ''' fix ledger entries for missing leave allocation transaction '''
+ allocation_list = get_allocation_records()
+
+ for allocation in allocation_list:
+ if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name, 'is_expired': 1}):
+ allocation.update(dict(doctype="Leave Allocation"))
+ allocation_obj = frappe.get_doc(allocation)
+ allocation_obj.expire_allocation()
def get_allocation_records():
- return frappe.db.sql("""
- SELECT
- DISTINCT name,
- employee,
- leave_type,
- new_leaves_allocated,
- carry_forwarded_leaves,
- from_date,
- to_date,
- carry_forward
- FROM `tabLeave Allocation`
- WHERE
- docstatus=1
- ORDER BY to_date ASC
- """, as_dict=1)
+ return frappe.db.sql("""
+ SELECT
+ name,
+ employee,
+ leave_type,
+ new_leaves_allocated,
+ carry_forwarded_leaves,
+ from_date,
+ to_date,
+ carry_forward
+ FROM `tabLeave Allocation`
+ WHERE
+ docstatus=1
+ ORDER BY to_date ASC
+ """, as_dict=1)
def get_leaves_application_records():
- return frappe.db.sql("""
- SELECT
- DISTINCT name,
- employee,
- leave_type,
- total_leave_days,
- from_date,
- to_date
- FROM `tabLeave Application`
- WHERE
- docstatus=1
- """, as_dict=1)
+ return frappe.db.sql("""
+ SELECT
+ name,
+ employee,
+ leave_type,
+ total_leave_days,
+ from_date,
+ to_date
+ FROM `tabLeave Application`
+ WHERE
+ docstatus=1
+ """, as_dict=1)
def get_leave_encashment_records():
- return frappe.db.sql("""
- SELECT
- DISTINCT name,
- employee,
- leave_type,
- encashable_days,
- encashment_date
- FROM `tabLeave Encashment`
- WHERE
- docstatus=1
- """, as_dict=1)
\ No newline at end of file
+ return frappe.db.sql("""
+ SELECT
+ name,
+ employee,
+ leave_type,
+ encashable_days,
+ encashment_date
+ FROM `tabLeave Encashment`
+ WHERE
+ docstatus=1
+ """, as_dict=1)
\ No newline at end of file