feat: fix test for Gratuity
diff --git a/erpnext/payroll/doctype/gratuity/gratuity.py b/erpnext/payroll/doctype/gratuity/gratuity.py
index b094191..e9e577c 100644
--- a/erpnext/payroll/doctype/gratuity/gratuity.py
+++ b/erpnext/payroll/doctype/gratuity/gratuity.py
@@ -34,6 +34,7 @@
make_gl_entries(gl_entries, cancel)
def get_gl_entries(self):
+ print(self.payable_account, self.expense_account)
gl_entry = []
# payable entry
if self.amount:
diff --git a/erpnext/payroll/doctype/gratuity/test_gratuity.py b/erpnext/payroll/doctype/gratuity/test_gratuity.py
index 680ecbc..5053f88 100644
--- a/erpnext/payroll/doctype/gratuity/test_gratuity.py
+++ b/erpnext/payroll/doctype/gratuity/test_gratuity.py
@@ -9,27 +9,19 @@
from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_employee_salary_slip
from erpnext.payroll.doctype.gratuity.gratuity import get_last_salary_slip
from erpnext.regional.united_arab_emirates.setup import create_gratuity_rule
+from erpnext.hr.doctype.expense_claim.test_expense_claim import get_payable_account
from frappe.utils import getdate, add_days, get_datetime, flt
class TestGratuity(unittest.TestCase):
def setUp(self):
- frappe.db.sql("DELETE FROM `tabgratuity`")
+ frappe.db.sql("DELETE FROM `tabGratuity`")
frappe.db.sql("DELETE FROM `tabAdditional Salary` WHERE ref_doctype = 'Gratuity'")
def test_check_gratuity_amount_based_on_current_slab_and_additional_salary_creation(self):
employee, sal_slip = create_employee_and_get_last_salary_slip()
- rule = frappe.db.exists("Gratuity Rule", "Rule Under Unlimited Contract on termination (UAE)")
- if not rule:
- create_gratuity_rule()
- else:
- rule = frappe.get_doc("Gratuity Rule", "Rule Under Unlimited Contract on termination (UAE)")
- rule.applicable_earnings_component = []
- rule.append("applicable_earnings_component", {
- "salary_component": "Basic Salary"
- })
- rule.save()
- rule.reload()
+
+ rule = get_gratuity_rule("Rule Under Unlimited Contract on termination (UAE)")
gratuity = frappe.new_doc("Gratuity")
gratuity.employee = employee
@@ -72,31 +64,12 @@
#additional salary creation (Pay via salary slip)
self.assertTrue(frappe.db.exists("Additional Salary", {"ref_docname": gratuity.name}))
- self.assertEqual(gratuity.status, "Paid")
def test_check_gratuity_amount_based_on_all_previous_slabs(self):
employee, sal_slip = create_employee_and_get_last_salary_slip()
- rule = frappe.db.exists("Gratuity Rule", "Rule Under Limited Contract (UAE)")
- if not rule:
- create_gratuity_rule()
- else:
- rule = frappe.get_doc("Gratuity Rule", rule)
- rule.applicable_earnings_component = []
- rule = frappe.get_doc("Gratuity Rule", "Rule Under Limited Contract (UAE)")
- rule.append("applicable_earnings_component", {
- "salary_component": "Basic Salary"
- })
- rule.save()
- rule.reload()
-
- mof = frappe.get_doc("Mode of Payment", "Cheque")
- mof.accounts = []
- mof.append("accounts", {
- "company": "_Test Company",
- "default_account": "_Test Bank - _TC"
- })
-
- mof.save()
+ rule = get_gratuity_rule("Rule Under Limited Contract (UAE)")
+ set_mode_of_payment_account()
+ payable_account = get_payable_account("_Test Company")
gratuity = frappe.new_doc("Gratuity")
gratuity.employee = employee
@@ -105,6 +78,7 @@
gratuity.pay_via_salary_slip = 0
gratuity.payroll_date = getdate()
gratuity.expense_account = "Payment Account - _TC"
+ gratuity.payable_account = payable_account
gratuity.mode_of_payment = "Cheque"
gratuity.save()
@@ -132,39 +106,57 @@
},
fields=["amount"])
-
''' range | Fraction
0-1 | 0
1-5 | 0.7
5-0 | 1
'''
-
gratuity_amount = ((0 * 1) + (4 * 0.7) + (1 * 1)) * component_amount[0].amount
gratuity.reload()
self.assertEqual(flt(gratuity_amount, 2), flt(gratuity.amount, 2))
self.assertEqual(gratuity.status, "Unpaid")
-
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
-
pay_entry = get_payment_entry("Gratuity", gratuity.name)
pay_entry.reference_no = "123467"
pay_entry.reference_date = getdate()
-
pay_entry.save()
pay_entry.submit()
-
gratuity.reload()
self.assertEqual(gratuity.status, "Paid")
self.assertEqual(gratuity.paid_amount, flt(gratuity.amount, 2))
def tearDown(self):
- frappe.db.sql("DELETE FROM `tabgratuity`")
+ frappe.db.sql("DELETE FROM `tabGratuity`")
frappe.db.sql("DELETE FROM `tabAdditional Salary` WHERE ref_doctype = 'Gratuity'")
+def get_gratuity_rule(name):
+ rule = frappe.db.exists("Gratuity Rule", name)
+ if not rule:
+ create_gratuity_rule()
+ else:
+ rule = frappe.get_doc("Gratuity Rule", name)
+ rule.applicable_earnings_component = []
+ rule.append("applicable_earnings_component", {
+ "salary_component": "Basic Salary"
+ })
+ rule.save()
+ rule.reload()
+
+ return rule
+
+def set_mode_of_payment_account():
+ mode_of_payment = frappe.get_doc("Mode of Payment", "Cheque")
+ mode_of_payment.accounts = []
+ mode_of_payment.append("accounts", {
+ "company": "_Test Company",
+ "default_account": "_Test Bank - _TC"
+ })
+ mode_of_payment.save()
+
def create_employee_and_get_last_salary_slip():
employee = make_employee("test_employee@salary.com")
frappe.db.set_value("Employee", employee, "relieving_date", getdate())
diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.py b/erpnext/payroll/doctype/salary_slip/salary_slip.py
index 6814726..c7b83b9 100644
--- a/erpnext/payroll/doctype/salary_slip/salary_slip.py
+++ b/erpnext/payroll/doctype/salary_slip/salary_slip.py
@@ -83,13 +83,12 @@
"employee": self.employee,
"ref_doctype": "Gratuity",
"docstatus": 1,
- }, fields = ["ref_docname", "name"])[0]
+ }, fields = ["ref_docname", "name"], limit=1)
- status = "Paid" if self.docstatus == 1 else "Unpaid"
-
-
- if add_salary and add_salary.name in [data.additional_salary for data in self.earnings]:
- frappe.db.set_value("Gratuity", add_salary.ref_docname, "status", status)
+ if len(add_salary):
+ status = "Paid" if self.docstatus == 1 else "Unpaid"
+ if add_salary[0].name in [data.additional_salary for data in self.earnings]:
+ frappe.db.set_value("Gratuity", add_salary.ref_docname, "status", status)
def on_cancel(self):
self.set_status()