patch: leave ledger entries

This commit is contained in:
Mangesh-Khairnar 2019-05-26 20:17:16 +05:30
parent 45cf02308e
commit f3926d0fcb
2 changed files with 96 additions and 0 deletions

View File

@ -602,3 +602,4 @@ erpnext.patches.v11_1.set_salary_details_submittable
erpnext.patches.v11_1.rename_depends_on_lwp
execute:frappe.delete_doc("Report", "Inactive Items")
erpnext.patches.v11_1.delete_scheduling_tool
erpnext.patches.v12_0.generate_leave_ledger_entries

View File

@ -0,0 +1,95 @@
# Copyright (c) 2018, Frappe and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
def execute():
""" Generates leave ledger entries for leave allocation/application/encashment
for last allocation """
if frappe.db.exists("DocType","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)
def generate_allocation_ledger_entries(allocation_list):
''' fix ledger entries for missing leave allocation transaction '''
from erpnext.hr.doctype.leave_allocation.leave_allocation import LeaveAllocation
for allocation in allocation_list:
LeaveAllocation.create_leave_ledger_entry(allocation)
def generate_application_leave_ledger_entries(allocation_list):
''' fix ledger entries for missing leave application transaction '''
from erpnext.hr.doctype.leave_application.leave_application import LeaveApplication
leave_applications = get_leaves_application_records(allocation_list)
for record in leave_applications:
LeaveApplication.create_leave_ledger_entry(record)
def generate_encashment_leave_ledger_entries(allocation_list):
''' fix ledger entries for missing leave encashment transaction '''
from erpnext.hr.doctype.leave_encashment.leave_encashment import LeaveEncashment
leave_encashments = get_leave_encashment_records(allocation_list)
for record in leave_encashments:
LeaveEncashment.create_leave_ledger_entry(record)
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,
RANK() OVER(PARTITION BY employee, leave_type ORDER BY to_date DESC) as allocation
FROM `tabLeave Allocation`
WHERE
allocation=1
""", as_dict=1)
def get_leaves_application_records(allocation_list):
leave_applications = []
for allocation in allocation_list:
leave_applications.append(frappe.db.sql("""
SELECT
name,
employee,
leave_type,
total_leave_days,
from_date,
to_date
FROM `tabLeave Application`
WHERE
from_date >= %s
leave_type = %s
employee = %s
""", (allocation.from_date, allocation.leave_type, allocation.employee)))
return leave_applications
def get_leave_encashment_records(allocation_list):
leave_encashments = []
for allocation in allocation_list:
leave_encashments.append(frappe.db.sql("""
SELECT
DISTINCT name,
employee,
leave_type,
encashable_days,
from_date,
to_date
FROM `tabLeave Encashment`
WHERE
leave_type = %s
employee = %s
""", (allocation.leave_type, allocation.employee)))
return leave_encashments