<filename>mindhome_alpha/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py
# 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))
<filename>mindhome_alpha/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py
# 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))
# Copyright (c) 2018, Frappe and Contributors # License: GNU General Public License v3. See license.txt Delete duplicate leave ledger entries of type allocation created. Fetch all but one duplicate records from the list of expired leave allocation. 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 Delete duplicate leave ledger entries. 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