Skip to content

Commit

Permalink
Merge pull request #672 from frappe/version-14-hotfix
Browse files Browse the repository at this point in the history
  • Loading branch information
ruchamahabal authored Jul 11, 2023
2 parents 0f8b624 + a9f5f4d commit 4b24896
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 47 deletions.
4 changes: 2 additions & 2 deletions hrms/hr/doctype/employee_advance/employee_advance.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ def set_total_advance_paid(self):
EmployeeAdvanceOverPayment,
)

if flt(return_amount) > self.paid_amount - self.claimed_amount:
frappe.throw(_("Return amount cannot be greater unclaimed amount"))
if flt(return_amount) > 0 and flt(return_amount) > (self.paid_amount - self.claimed_amount):
frappe.throw(_("Return amount cannot be greater than unclaimed amount"))

self.db_set("paid_amount", paid_amount)
self.db_set("return_amount", return_amount)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@


import json
from math import ceil

import frappe
from frappe import _, bold
Expand All @@ -19,6 +18,7 @@
get_last_day,
get_link_to_form,
getdate,
rounded,
)


Expand Down Expand Up @@ -260,7 +260,7 @@ def calculate_pro_rated_leaves(

if is_earned_leave:
return flt(leaves, precision)
return ceil(leaves)
return rounded(leaves)


def is_earned_leave_applicable_for_current_month(date_of_joining, allocate_on_day):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import frappe
from frappe.tests.utils import FrappeTestCase
from frappe.utils import get_first_day, getdate
from frappe.utils import add_months, get_first_day, getdate

from hrms.hr.doctype.leave_application.test_leave_application import get_employee, get_leave_period
from hrms.hr.doctype.leave_policy.test_leave_policy import create_leave_policy
Expand Down Expand Up @@ -33,81 +33,91 @@ def setUp(self):

def test_grant_leaves(self):
leave_period = get_leave_period()
# allocation = 10
leave_policy = create_leave_policy()
leave_policy = create_leave_policy(annual_allocation=10)
leave_policy.submit()

self.employee.date_of_joining = get_first_day(leave_period.from_date)
self.employee.save()

data = {
"assignment_based_on": "Leave Period",
"leave_policy": leave_policy.name,
"leave_period": leave_period.name,
}
leave_policy_assignments = create_assignment_for_multiple_employees(
[self.employee.name], frappe._dict(data)
data = frappe._dict(
{
"assignment_based_on": "Leave Period",
"leave_policy": leave_policy.name,
"leave_period": leave_period.name,
}
)
assignments = create_assignment_for_multiple_employees([self.employee.name], data)
self.assertEqual(
frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"),
frappe.db.get_value("Leave Policy Assignment", assignments[0], "leaves_allocated"),
1,
)

leave_allocation = frappe.get_list(
"Leave Allocation",
filters={
"employee": self.employee.name,
"leave_policy": leave_policy.name,
"leave_policy_assignment": leave_policy_assignments[0],
"docstatus": 1,
},
)[0]
leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation)
allocation = frappe.db.get_value(
"Leave Allocation", {"leave_policy_assignment": assignments[0]}, "name"
)

leave_alloc_doc = frappe.get_doc("Leave Allocation", allocation)

self.assertEqual(leave_alloc_doc.new_leaves_allocated, 10)
self.assertEqual(leave_alloc_doc.leave_type, "_Test Leave Type")
self.assertEqual(getdate(leave_alloc_doc.from_date), getdate(leave_period.from_date))
self.assertEqual(getdate(leave_alloc_doc.to_date), getdate(leave_period.to_date))
self.assertEqual(leave_alloc_doc.leave_policy, leave_policy.name)
self.assertEqual(leave_alloc_doc.leave_policy_assignment, leave_policy_assignments[0])
self.assertEqual(leave_alloc_doc.leave_policy_assignment, assignments[0])

def test_allow_to_grant_all_leave_after_cancellation_of_every_leave_allocation(self):
leave_period = get_leave_period()
# create the leave policy with leave type "_Test Leave Type", allocation = 10
leave_policy = create_leave_policy()
leave_policy = create_leave_policy(annual_allocation=10)
leave_policy.submit()

data = {
"assignment_based_on": "Leave Period",
"leave_policy": leave_policy.name,
"leave_period": leave_period.name,
}
leave_policy_assignments = create_assignment_for_multiple_employees(
[self.employee.name], frappe._dict(data)
data = frappe._dict(
{
"assignment_based_on": "Leave Period",
"leave_policy": leave_policy.name,
"leave_period": leave_period.name,
}
)
assignments = create_assignment_for_multiple_employees([self.employee.name], data)

# every leave is allocated no more leave can be granted now
self.assertEqual(
frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"),
frappe.db.get_value("Leave Policy Assignment", assignments[0], "leaves_allocated"),
1,
)
leave_allocation = frappe.get_list(
"Leave Allocation",
filters={
"employee": self.employee.name,
"leave_policy": leave_policy.name,
"leave_policy_assignment": leave_policy_assignments[0],
"docstatus": 1,
},
)[0]

leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation)
allocation = frappe.db.get_value(
"Leave Allocation", {"leave_policy_assignment": assignments[0]}, "name"
)

leave_alloc_doc = frappe.get_doc("Leave Allocation", allocation)
leave_alloc_doc.cancel()
leave_alloc_doc.delete()
self.assertEqual(
frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"),
frappe.db.get_value("Leave Policy Assignment", assignments[0], "leaves_allocated"),
0,
)

def test_pro_rated_leave_allocation(self):
leave_period = get_leave_period()
leave_policy = create_leave_policy(annual_allocation=12)
leave_policy.submit()

self.employee.date_of_joining = add_months(leave_period.from_date, 3)
self.employee.save()

data = {
"assignment_based_on": "Leave Period",
"leave_policy": leave_policy.name,
"leave_period": leave_period.name,
}
assignments = create_assignment_for_multiple_employees([self.employee.name], frappe._dict(data))

allocation = frappe.db.get_value(
"Leave Allocation", {"leave_policy_assignment": assignments[0]}, "new_leaves_allocated"
)

# pro-rated leave allocation for 9 months
self.assertEqual(allocation, 9)

def tearDown(self):
frappe.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj)

0 comments on commit 4b24896

Please sign in to comment.