mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-05 05:09:11 +00:00
test: leave ledger balance
This commit is contained in:
@@ -158,7 +158,6 @@ def create_leave_allocation(**args):
|
|||||||
"from_date": args.from_date or nowdate(),
|
"from_date": args.from_date or nowdate(),
|
||||||
"new_leaves_allocated": args.new_leaves_created or 15,
|
"new_leaves_allocated": args.new_leaves_created or 15,
|
||||||
"carry_forward": args.carry_forward or 0,
|
"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)
|
"to_date": args.to_date or add_months(nowdate(), 12)
|
||||||
})
|
})
|
||||||
return leave_allocation
|
return leave_allocation
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ class LeaveApplication(Document):
|
|||||||
self.to_date, self.from_date)
|
self.to_date, self.from_date)
|
||||||
|
|
||||||
if expiry_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:
|
else:
|
||||||
args = dict(
|
args = dict(
|
||||||
leaves=self.total_leave_days * -1,
|
leaves=self.total_leave_days * -1,
|
||||||
@@ -363,7 +363,7 @@ class LeaveApplication(Document):
|
|||||||
)
|
)
|
||||||
create_leave_ledger_entry(self, args, submit)
|
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 '''
|
''' splits leave application into two ledger entries to consider expiry of allocation '''
|
||||||
args = dict(
|
args = dict(
|
||||||
from_date=self.from_date,
|
from_date=self.from_date,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import unittest
|
|||||||
|
|
||||||
from erpnext.hr.doctype.leave_application.leave_application import LeaveDayBlockedError, OverlapError, NotAnOptionalHoliday, get_leave_balance_on
|
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.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_type.test_leave_type import create_leave_type
|
||||||
from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation
|
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
|
# check leave balance is reduced
|
||||||
self.assertEqual(get_leave_balance_on(employee.name, leave_type, today), 9)
|
self.assertEqual(get_leave_balance_on(employee.name, leave_type, today), 9)
|
||||||
|
|
||||||
|
|
||||||
def test_leaves_allowed(self):
|
def test_leaves_allowed(self):
|
||||||
frappe.db.sql("delete from `tabLeave Allocation`")
|
frappe.db.sql("delete from `tabLeave Allocation`")
|
||||||
frappe.db.sql("delete from `tabLeave Ledger Entry`")
|
frappe.db.sql("delete from `tabLeave Ledger Entry`")
|
||||||
@@ -404,6 +403,20 @@ class TestLeaveApplication(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertRaises(frappe.ValidationError, leave_application.insert)
|
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):
|
def test_earned_leave(self):
|
||||||
leave_period = get_leave_period()
|
leave_period = get_leave_period()
|
||||||
employee = get_employee()
|
employee = get_employee()
|
||||||
@@ -492,6 +505,59 @@ class TestLeaveApplication(unittest.TestCase):
|
|||||||
leave_application.cancel()
|
leave_application.cancel()
|
||||||
self.assertFalse(frappe.db.exists("Leave Ledger Entry", {'transaction_name':leave_application.name}))
|
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):
|
def make_allocation_record(employee=None, leave_type=None):
|
||||||
frappe.db.sql("delete from `tabLeave Allocation`")
|
frappe.db.sql("delete from `tabLeave Allocation`")
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class TestLeaveEncashment(unittest.TestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
frappe.db.sql('''delete from `tabLeave Period`''')
|
frappe.db.sql('''delete from `tabLeave Period`''')
|
||||||
frappe.db.sql('''delete from `tabLeave Allocation`''')
|
frappe.db.sql('''delete from `tabLeave Allocation`''')
|
||||||
|
frappe.db.sql('''delete from `tabAdditional Salary`''')
|
||||||
|
|
||||||
# create the leave policy
|
# create the leave policy
|
||||||
leave_policy = create_leave_policy(
|
leave_policy = create_leave_policy(
|
||||||
@@ -26,7 +27,9 @@ class TestLeaveEncashment(unittest.TestCase):
|
|||||||
|
|
||||||
# create employee, salary structure and assignment
|
# create employee, salary structure and assignment
|
||||||
self.employee = make_employee("test_employee_encashment@example.com")
|
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,
|
salary_structure = make_salary_structure("Salary Structure for Encashment", "Monthly", self.employee,
|
||||||
other_details={"leave_encashment_amount_per_day": 50})
|
other_details={"leave_encashment_amount_per_day": 50})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user