From 6f69bbe1d782bb710ddb80111458984a4ac35e55 Mon Sep 17 00:00:00 2001 From: Mangesh-Khairnar Date: Mon, 27 May 2019 15:40:36 +0530 Subject: [PATCH] test: leave ledger balance --- .../leave_allocation/test_leave_allocation.py | 1 - .../leave_application/leave_application.py | 4 +- .../test_leave_application.py | 70 ++++++++++++++++++- .../leave_encashment/test_leave_encashment.py | 15 ++-- 4 files changed, 79 insertions(+), 11 deletions(-) diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py index 308f2245b9f..dfae329da18 100644 --- a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py +++ b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py @@ -158,7 +158,6 @@ def create_leave_allocation(**args): "from_date": args.from_date or nowdate(), "new_leaves_allocated": args.new_leaves_created or 15, "carry_forward": args.carry_forward or 0, - "carry_forwarded_leaves": args.carry_forwarded_leaves or 0, "to_date": args.to_date or add_months(nowdate(), 12) }) return leave_allocation diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py index e5ee4e6a26e..f3bb9f7eb99 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ b/erpnext/hr/doctype/leave_application/leave_application.py @@ -354,7 +354,7 @@ class LeaveApplication(Document): self.to_date, self.from_date) if expiry_date: - self.create_ledger_entry_for_intermediate_expiry(expiry_date, submit) + self.create_ledger_entry_for_intermediate_allocation_expiry(expiry_date, submit) else: args = dict( leaves=self.total_leave_days * -1, @@ -363,7 +363,7 @@ class LeaveApplication(Document): ) create_leave_ledger_entry(self, args, submit) - def create_ledger_entry_for_intermediate_expiry(self, expiry_date, submit): + def create_ledger_entry_for_intermediate_allocation_expiry(self, expiry_date, submit): ''' splits leave application into two ledger entries to consider expiry of allocation ''' args = dict( from_date=self.from_date, diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py index 4dea413dc3e..f5f4fa55f52 100644 --- a/erpnext/hr/doctype/leave_application/test_leave_application.py +++ b/erpnext/hr/doctype/leave_application/test_leave_application.py @@ -7,7 +7,7 @@ import unittest from erpnext.hr.doctype.leave_application.leave_application import LeaveDayBlockedError, OverlapError, NotAnOptionalHoliday, get_leave_balance_on from frappe.permissions import clear_user_permissions_for_doctype -from frappe.utils import add_days, nowdate, now_datetime, getdate +from frappe.utils import add_days, nowdate, now_datetime, getdate, add_months from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation @@ -287,7 +287,6 @@ class TestLeaveApplication(unittest.TestCase): # check leave balance is reduced self.assertEqual(get_leave_balance_on(employee.name, leave_type, today), 9) - def test_leaves_allowed(self): frappe.db.sql("delete from `tabLeave Allocation`") frappe.db.sql("delete from `tabLeave Ledger Entry`") @@ -404,6 +403,20 @@ class TestLeaveApplication(unittest.TestCase): self.assertRaises(frappe.ValidationError, leave_application.insert) + def test_leave_balance_near_allocaton_expiry(self): + frappe.db.sql("delete from `tabLeave Allocation`") + frappe.db.sql("delete from `tabLeave Ledger Entry`") + employee = get_employee() + leave_type = create_leave_type( + leave_type_name="_Test_CF_leave_expiry", + is_carry_forward=1, + carry_forward_leave_expiry=90) + leave_type.submit() + + create_carry_forwarded_allocation(employee, leave_type) + + self.assertEqual(get_leave_balance_on(employee.name, leave_type.name, nowdate(), add_days(nowdate(), 8)), 21) + def test_earned_leave(self): leave_period = get_leave_period() employee = get_employee() @@ -492,6 +505,59 @@ class TestLeaveApplication(unittest.TestCase): leave_application.cancel() self.assertFalse(frappe.db.exists("Leave Ledger Entry", {'transaction_name':leave_application.name})) + def test_ledger_entry_creation_on_intermediate_allocation_expiry(self): + frappe.db.sql("delete from `tabLeave Allocation`") + frappe.db.sql("delete from `tabLeave Ledger Entry`") + employee = get_employee() + leave_type = create_leave_type( + leave_type_name="_Test_CF_leave_expiry", + is_carry_forward=1, + carry_forward_leave_expiry=90) + leave_type.submit() + + create_carry_forwarded_allocation(employee, leave_type) + + leave_application = frappe.get_doc(dict( + doctype = 'Leave Application', + employee = employee.name, + leave_type = leave_type.name, + from_date = add_days(nowdate(), -3), + to_date = add_days(nowdate(), 7), + company = "_Test Company", + docstatus = 1, + status = "Approved" + )) + leave_application.submit() + + leave_ledger_entry = frappe.get_all('Leave Ledger Entry', '*', filters=dict(transaction_name=leave_application.name)) + + self.assertEquals(len(leave_ledger_entry), 2) + self.assertEquals(leave_ledger_entry[0].employee, leave_application.employee) + self.assertEquals(leave_ledger_entry[0].leave_type, leave_application.leave_type) + self.assertEquals(leave_ledger_entry[0].leaves, -9) + self.assertEquals(leave_ledger_entry[1].leaves, -2) + +def create_carry_forwarded_allocation(employee, leave_type): + + # initial leave allocation + leave_allocation = create_leave_allocation( + leave_type="_Test_CF_leave_expiry", + employee=employee.name, + employee_name=employee.employee_name, + from_date=add_months(nowdate(), -24), + to_date=add_months(nowdate(), -12), + carry_forward=1) + leave_allocation.submit() + + leave_allocation = create_leave_allocation( + leave_type="_Test_CF_leave_expiry", + employee=employee.name, + employee_name=employee.employee_name, + from_date=add_days(nowdate(), -85), + to_date=add_days(nowdate(), 100), + carry_forward=1) + leave_allocation.submit() + def make_allocation_record(employee=None, leave_type=None): frappe.db.sql("delete from `tabLeave Allocation`") diff --git a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py index cfed780eb71..7d4fb285d8c 100644 --- a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py +++ b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py @@ -17,6 +17,7 @@ class TestLeaveEncashment(unittest.TestCase): def setUp(self): frappe.db.sql('''delete from `tabLeave Period`''') frappe.db.sql('''delete from `tabLeave Allocation`''') + frappe.db.sql('''delete from `tabAdditional Salary`''') # create the leave policy leave_policy = create_leave_policy( @@ -26,7 +27,9 @@ class TestLeaveEncashment(unittest.TestCase): # create employee, salary structure and assignment self.employee = make_employee("test_employee_encashment@example.com") - frappe.db.set_value("Employee", "test_employee_encashment@example.com", "leave_policy", leave_policy.name) + + frappe.db.set_value("Employee", self.employee, "leave_policy", leave_policy.name) + salary_structure = make_salary_structure("Salary Structure for Encashment", "Monthly", self.employee, other_details={"leave_encashment_amount_per_day": 50}) @@ -55,11 +58,11 @@ class TestLeaveEncashment(unittest.TestCase): def test_creation_of_leave_ledger_entry_on_submit(self): frappe.db.sql('''delete from `tabLeave Encashment`''') leave_encashment = frappe.get_doc(dict( - doctype = 'Leave Encashment', - employee = self.employee, - leave_type = "_Test Leave Type Encashment", - leave_period = self.leave_period.name, - payroll_date = today() + doctype='Leave Encashment', + employee=self.employee, + leave_type="_Test Leave Type Encashment", + leave_period=self.leave_period.name, + payroll_date=today() )).insert() leave_encashment.submit()