From 87adaed9336dd2692b185f9ece5df93877990775 Mon Sep 17 00:00:00 2001 From: Mangesh-Khairnar Date: Fri, 14 Jun 2019 15:13:53 +0530 Subject: [PATCH] fix: generate ledger entries for all leave transactions --- .../v12_0/generate_leave_ledger_entries.py | 106 +++++++----------- 1 file changed, 42 insertions(+), 64 deletions(-) diff --git a/erpnext/patches/v12_0/generate_leave_ledger_entries.py b/erpnext/patches/v12_0/generate_leave_ledger_entries.py index 065a0137a5..07e53c7450 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 @@ def get_leaves_application_records(allocation_list): 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 @@ def get_leave_encashment_records(allocation_list): 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