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