2019-05-26 14:47:16 +00:00
|
|
|
# Copyright (c) 2018, Frappe and Contributors
|
|
|
|
# License: GNU General Public License v3. See license.txt
|
|
|
|
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import frappe
|
2019-08-20 07:32:40 +00:00
|
|
|
from frappe.utils import getdate, today
|
2019-05-26 14:47:16 +00:00
|
|
|
|
|
|
|
def execute():
|
2019-07-22 12:17:03 +00:00
|
|
|
""" 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")
|
2019-10-04 10:54:53 +00:00
|
|
|
frappe.reload_doc("HR", "doctype", "Leave Type")
|
2019-07-22 12:17:03 +00:00
|
|
|
if frappe.db.a_row_exists("Leave Ledger Entry"):
|
|
|
|
return
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-08-08 11:36:15 +00:00
|
|
|
if not frappe.get_meta("Leave Allocation").has_field("unused_leaves"):
|
|
|
|
frappe.reload_doc("HR", "doctype", "Leave Allocation")
|
|
|
|
update_leave_allocation_fieldname()
|
|
|
|
|
2019-07-22 12:17:03 +00:00
|
|
|
generate_allocation_ledger_entries()
|
|
|
|
generate_application_leave_ledger_entries()
|
|
|
|
generate_encashment_leave_ledger_entries()
|
|
|
|
generate_expiry_allocation_ledger_entries()
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-08-08 11:36:15 +00:00
|
|
|
def update_leave_allocation_fieldname():
|
|
|
|
''' maps data from old field to the new field '''
|
|
|
|
frappe.db.sql("""
|
|
|
|
UPDATE `tabLeave Allocation`
|
|
|
|
SET `unused_leaves` = `carry_forwarded_leaves`
|
|
|
|
""")
|
|
|
|
|
2019-06-14 09:43:53 +00:00
|
|
|
def generate_allocation_ledger_entries():
|
2019-07-22 12:17:03 +00:00
|
|
|
''' fix ledger entries for missing leave allocation transaction '''
|
|
|
|
allocation_list = get_allocation_records()
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-07-22 12:17:03 +00:00
|
|
|
for allocation in allocation_list:
|
|
|
|
if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name}):
|
2020-09-07 06:23:50 +00:00
|
|
|
allocation_obj = frappe.get_doc("Leave Allocation", allocation)
|
2019-07-22 12:17:03 +00:00
|
|
|
allocation_obj.create_leave_ledger_entry()
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-06-14 09:43:53 +00:00
|
|
|
def generate_application_leave_ledger_entries():
|
2019-07-22 12:17:03 +00:00
|
|
|
''' fix ledger entries for missing leave application transaction '''
|
|
|
|
leave_applications = get_leaves_application_records()
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-07-22 12:17:03 +00:00
|
|
|
for application in leave_applications:
|
|
|
|
if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Application', 'transaction_name': application.name}):
|
2020-09-07 06:23:50 +00:00
|
|
|
frappe.get_doc("Leave Application", application.name).create_leave_ledger_entry()
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-06-14 09:43:53 +00:00
|
|
|
def generate_encashment_leave_ledger_entries():
|
2019-07-22 12:17:03 +00:00
|
|
|
''' 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}):
|
2020-09-07 06:23:50 +00:00
|
|
|
frappe.get_doc("Leave Enchashment", encashment).create_leave_ledger_entry()
|
2019-07-22 12:17:03 +00:00
|
|
|
|
|
|
|
def generate_expiry_allocation_ledger_entries():
|
|
|
|
''' fix ledger entries for missing leave allocation transaction '''
|
2019-07-31 14:01:26 +00:00
|
|
|
from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import expire_allocation
|
2019-07-22 12:17:03 +00:00
|
|
|
allocation_list = get_allocation_records()
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-07-22 12:17:03 +00:00
|
|
|
for allocation in allocation_list:
|
|
|
|
if not frappe.db.exists("Leave Ledger Entry", {'transaction_type': 'Leave Allocation', 'transaction_name': allocation.name, 'is_expired': 1}):
|
2020-09-07 06:23:50 +00:00
|
|
|
allocation_obj = frappe.get_doc("Leave Allocation", allocation)
|
2019-08-20 07:32:40 +00:00
|
|
|
if allocation_obj.to_date <= getdate(today()):
|
|
|
|
expire_allocation(allocation_obj)
|
2019-05-26 14:47:16 +00:00
|
|
|
|
|
|
|
def get_allocation_records():
|
2020-09-07 06:23:50 +00:00
|
|
|
return frappe.get_all("Leave Allocation", filters={"docstatus": 1},
|
|
|
|
fields=['name'], order_by='to_date ASC')
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-06-14 09:43:53 +00:00
|
|
|
def get_leaves_application_records():
|
2020-09-07 06:23:50 +00:00
|
|
|
return frappe.get_all("Leave Application", filters={"docstatus": 1}, fields=['name'])
|
2019-05-26 14:47:16 +00:00
|
|
|
|
2019-06-14 09:43:53 +00:00
|
|
|
def get_leave_encashment_records():
|
2020-09-07 06:23:50 +00:00
|
|
|
return frappe.get_all("Leave Encashment", filters={"docstatus": 1}, fields=['name'])
|