fix: generate ledger entries for all leave transactions
diff --git a/erpnext/patches/v12_0/generate_leave_ledger_entries.py b/erpnext/patches/v12_0/generate_leave_ledger_entries.py
index 065a013..07e53c7 100644
--- a/erpnext/patches/v12_0/generate_leave_ledger_entries.py
+++ b/erpnext/patches/v12_0/generate_leave_ledger_entries.py
@@ -3,84 +3,70 @@
 
 from __future__ import unicode_literals
 import frappe
+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")
+    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
 
-    allocation_list = get_allocation_records()
-    generate_allocation_ledger_entries(allocation_list)
-    generate_application_leave_ledger_entries(allocation_list)
-    generate_encashment_leave_ledger_entries(allocation_list)
+    generate_allocation_ledger_entries()
+    generate_application_leave_ledger_entries()
+    generate_encashment_leave_ledger_entries()
 
-def generate_allocation_ledger_entries(allocation_list):
+def generate_allocation_ledger_entries():
     ''' fix ledger entries for missing leave allocation transaction '''
-    from erpnext.hr.doctype.leave_allocation.leave_allocation import LeaveAllocation
+    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"))
-            leave_allocation = LeaveAllocation(allocation)
-            leave_allocation.create_leave_ledger_entry()
+            allocation_obj = frappe.get_doc(allocation)
+            allocation_obj.create_leave_ledger_entry()
+            if allocation.to_date <= getdate():
+                allocation_obj.expire_allocation()
 
-def generate_application_leave_ledger_entries(allocation_list):
+
+def generate_application_leave_ledger_entries():
     ''' fix ledger entries for missing leave application transaction '''
-    from erpnext.hr.doctype.leave_application.leave_application import LeaveApplication
+    leave_applications = get_leaves_application_records()
 
-    leave_applications = get_leaves_application_records(allocation_list)
-
-    for record in leave_applications:
+    for application in leave_applications:
         if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Application', 'transaction_name': record.name}):
-            record.update(dict(doctype="Leave Application"))
-            leave_application = LeaveApplication(record)
-            leave_application.create_leave_ledger_entry()
+            application.update(dict(doctype="Leave Application"))
+            frappe.get_doc(application).create_leave_ledger_entry()
 
-def generate_encashment_leave_ledger_entries(allocation_list):
+def generate_encashment_leave_ledger_entries():
     ''' fix ledger entries for missing leave encashment transaction '''
-    from erpnext.hr.doctype.leave_encashment.leave_encashment import LeaveEncashment
+    leave_encashments = get_leave_encashment_records()
 
-    leave_encashments = get_leave_encashment_records(allocation_list)
-
-    for record in leave_encashments:
+    for encashment in leave_encashments:
         if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Encashment', 'transaction_name': record.name}):
-            record.update(dict(doctype="Leave Encashment"))
-            leave_encashment = LeaveEncashment(record)
-            leave_encashment.create_leave_ledger_entry()
+            encashment.update(dict(doctype="Leave Encashment"))
+            frappe.get_doc(encashment).create_leave_ledger_entry()
 
 def get_allocation_records():
     return frappe.db.sql("""
-        WITH allocation_values AS (
-            SELECT
-                DISTINCT name,
-                employee,
-                leave_type,
-                new_leaves_allocated,
-                carry_forwarded_leaves,
-                from_date,
-                to_date,
-                carry_forward,
-                RANK() OVER(
-                    PARTITION BY employee, leave_type
-                    ORDER BY to_date DESC
-                ) as allocation
-            FROM `tabLeave Allocation`
-        )
         SELECT
-            *
-        FROM
-            `allocation_values`
+            DISTINCT name,
+            employee,
+            leave_type,
+            new_leaves_allocated,
+            carry_forwarded_leaves,
+            from_date,
+            to_date,
+            carry_forward
+        FROM `tabLeave Allocation`
         WHERE
-            allocation=1
+            docstatus=1
+        ORDER BY to_date ASC
     """, as_dict=1)
 
-def get_leaves_application_records(allocation_list):
-    leave_applications = []
-    for allocation in allocation_list:
-        leave_applications += frappe.db.sql("""
+def get_leaves_application_records():
+    return frappe.db.sql("""
             SELECT
                 DISTINCT name,
                 employee,
@@ -90,16 +76,11 @@
                 to_date
             FROM `tabLeave Application`
             WHERE
-                from_date >= %s
-                AND leave_type = %s
-                AND employee = %s
-        """, (allocation.from_date, allocation.leave_type, allocation.employee), as_dict=1)
-    return leave_applications
+                docstatus=1
+        """, as_dict=1)
 
-def get_leave_encashment_records(allocation_list):
-    leave_encashments = []
-    for allocation in allocation_list:
-        leave_encashments += frappe.db.sql("""
+def get_leave_encashment_records():
+    return frappe.db.sql("""
             SELECT
                 DISTINCT name,
                 employee,
@@ -108,8 +89,5 @@
                 encashment_date
             FROM `tabLeave Encashment`
             WHERE
-                leave_type = %s
-                AND employee = %s
-                AND encashment_date >= %s
-        """, (allocation.leave_type, allocation.employee, allocation.from_date), as_dict=1)
-    return leave_encashments
\ No newline at end of file
+                AND docstatus=1
+        """, as_dict=1)
\ No newline at end of file