78a6b6b45d
* fix: Remove duplicate leave ledger entry * fix: Remove duplicate leave ledger entry
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
# Copyright (c) 2018, Frappe and Contributors
|
|
# License: GNU General Public License v3. See license.txt
|
|
|
|
from __future__ import unicode_literals
|
|
import frappe
|
|
|
|
def execute():
|
|
"""Delete duplicate leave ledger entries of type allocation created."""
|
|
frappe.reload_doc('hr', 'doctype', 'leave_ledger_entry')
|
|
if not frappe.db.a_row_exists("Leave Ledger Entry"):
|
|
return
|
|
|
|
duplicate_records_list = get_duplicate_records()
|
|
delete_duplicate_ledger_entries(duplicate_records_list)
|
|
|
|
def get_duplicate_records():
|
|
"""Fetch all but one duplicate records from the list of expired leave allocation."""
|
|
return frappe.db.sql("""
|
|
SELECT name, employee, transaction_name, leave_type, is_carry_forward, from_date, to_date
|
|
FROM `tabLeave Ledger Entry`
|
|
WHERE
|
|
transaction_type = 'Leave Allocation'
|
|
AND docstatus = 1
|
|
AND is_expired = 1
|
|
GROUP BY
|
|
employee, transaction_name, leave_type, is_carry_forward, from_date, to_date
|
|
HAVING
|
|
count(name) > 1
|
|
ORDER BY
|
|
creation
|
|
""")
|
|
|
|
def delete_duplicate_ledger_entries(duplicate_records_list):
|
|
"""Delete duplicate leave ledger entries."""
|
|
if not duplicate_records_list: return
|
|
for d in duplicate_records_list:
|
|
frappe.db.sql('''
|
|
DELETE FROM `tabLeave Ledger Entry`
|
|
WHERE name != %s
|
|
AND employee = %s
|
|
AND transaction_name = %s
|
|
AND leave_type = %s
|
|
AND is_carry_forward = %s
|
|
AND from_date = %s
|
|
AND to_date = %s
|
|
''', tuple(d)) |