mirror of
https://github.com/bringout/oca-payroll.git
synced 2026-04-20 00:02:06 +02:00
Initial commit: OCA Payroll packages (5 packages)
This commit is contained in:
commit
d19274f581
407 changed files with 214057 additions and 0 deletions
|
|
@ -0,0 +1,241 @@
|
|||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from .common import TestPayslipBase
|
||||
|
||||
|
||||
class TestSalaryRule(TestPayslipBase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
self.Payslip = self.env["hr.payslip"]
|
||||
self.Rule = self.env["hr.salary.rule"]
|
||||
|
||||
self.test_rule = self.Rule.create(
|
||||
{
|
||||
"name": "Test Rule",
|
||||
"code": "TEST",
|
||||
"category_id": self.categ_alw.id,
|
||||
"sequence": 6,
|
||||
"amount_select": "code",
|
||||
"amount_python_compute": "result = 0",
|
||||
}
|
||||
)
|
||||
self.developer_pay_structure.write({"rule_ids": [(4, self.test_rule.id)]})
|
||||
|
||||
self.parent_test_rule = self.Rule.create(
|
||||
{
|
||||
"name": "Parent Test Rule",
|
||||
"code": "PARENT_TEST",
|
||||
"category_id": self.categ_alw.id,
|
||||
"sequence": 6,
|
||||
"parent_rule_id": self.test_rule.id,
|
||||
"amount_select": "code",
|
||||
"amount_python_compute": "result = 100",
|
||||
}
|
||||
)
|
||||
self.developer_pay_structure.write(
|
||||
{"rule_ids": [(4, self.parent_test_rule.id)]}
|
||||
)
|
||||
|
||||
self.child_test_rule = self.Rule.create(
|
||||
{
|
||||
"name": "Child Test Rule",
|
||||
"code": "CHILD_TEST",
|
||||
"category_id": self.categ_alw.id,
|
||||
"sequence": 7,
|
||||
"parent_rule_id": self.test_rule.id,
|
||||
"amount_select": "code",
|
||||
"amount_python_compute": "result = 100",
|
||||
}
|
||||
)
|
||||
|
||||
def test_python_code_return_values(self):
|
||||
|
||||
self.test_rule.amount_python_compute = (
|
||||
"result_rate = 0\n" "result_qty = 0\n" "result = 0\n"
|
||||
)
|
||||
|
||||
# Open contracts
|
||||
cc = self.env["hr.contract"].search([("employee_id", "=", self.richard_emp.id)])
|
||||
cc.kanban_state = "done"
|
||||
self.env.ref(
|
||||
"hr_contract.ir_cron_data_contract_update_state"
|
||||
).method_direct_trigger()
|
||||
|
||||
# Create payslip and compute
|
||||
payslip = self.Payslip.create({"employee_id": self.richard_emp.id})
|
||||
payslip.onchange_employee()
|
||||
payslip.compute_sheet()
|
||||
|
||||
line = payslip.line_ids.filtered(lambda l: l.code == "TEST")
|
||||
self.assertEqual(len(line), 1, "I found the Test line")
|
||||
self.assertEqual(line.amount, 0.0, "The amount is zero")
|
||||
self.assertEqual(line.rate, 0.0, "The rate is zero")
|
||||
self.assertEqual(line.quantity, 0.0, "The quantity is zero")
|
||||
self.assertEqual(line.code, "TEST", "The code is 'TEST'")
|
||||
|
||||
def test_python_code_result_not_set(self):
|
||||
|
||||
self.test_rule.amount_python_compute = "result = 2"
|
||||
|
||||
# Open contracts
|
||||
cc = self.env["hr.contract"].search([("employee_id", "=", self.richard_emp.id)])
|
||||
cc.kanban_state = "done"
|
||||
self.env.ref(
|
||||
"hr_contract.ir_cron_data_contract_update_state"
|
||||
).method_direct_trigger()
|
||||
|
||||
# Create payslip and compute
|
||||
payslip = self.Payslip.create({"employee_id": self.richard_emp.id})
|
||||
payslip.onchange_employee()
|
||||
payslip.compute_sheet()
|
||||
|
||||
line = payslip.line_ids.filtered(lambda l: l.code == "TEST")
|
||||
self.assertEqual(len(line), 1, "I found the Test line")
|
||||
self.assertEqual(line.amount, 2.0, "The amount is zero")
|
||||
self.assertEqual(line.rate, 100.0, "The rate is zero")
|
||||
self.assertEqual(line.quantity, 1.0, "The quantity is zero")
|
||||
|
||||
def test_parent_child_order(self):
|
||||
# Open contracts
|
||||
cc = self.env["hr.contract"].search([("employee_id", "=", self.richard_emp.id)])
|
||||
cc.kanban_state = "done"
|
||||
self.env.ref(
|
||||
"hr_contract.ir_cron_data_contract_update_state"
|
||||
).method_direct_trigger()
|
||||
|
||||
# Compute Payslip
|
||||
payslip = self.Payslip.create({"employee_id": self.richard_emp.id})
|
||||
payslip.onchange_employee()
|
||||
payslip.compute_sheet()
|
||||
|
||||
# Check child test rule calculated without being in the structure
|
||||
line = payslip.line_ids.filtered(lambda l: l.code == "CHILD_TEST")
|
||||
self.assertEqual(len(line), 1, "Child line founded")
|
||||
|
||||
# Change sequence of child rule to calculate before of the parent rule
|
||||
self.child_test_rule.sequence = 5
|
||||
|
||||
# Compute Payslip
|
||||
payslip = self.Payslip.create({"employee_id": self.richard_emp.id})
|
||||
payslip.onchange_employee()
|
||||
payslip.compute_sheet()
|
||||
|
||||
# Child rule should be computed
|
||||
line = payslip.line_ids.filtered(lambda l: l.code == "CHILD_TEST")
|
||||
self.assertEqual(len(line), 1, "Child line founded")
|
||||
|
||||
# Change the parent rule condition to return False
|
||||
self.test_rule.condition_select = "python"
|
||||
self.test_rule.condition_python = "result = False"
|
||||
|
||||
# Compute Payslip
|
||||
payslip = self.Payslip.create({"employee_id": self.richard_emp.id})
|
||||
payslip.onchange_employee()
|
||||
payslip.compute_sheet()
|
||||
|
||||
# Parent and child rule should not be calculated even if child rule condition is true
|
||||
parent_line = payslip.line_ids.filtered(lambda l: l.code == "PARENT_TEST")
|
||||
child_line = payslip.line_ids.filtered(lambda l: l.code == "CHILD_TEST")
|
||||
self.assertEqual(len(parent_line), 0, "No parent line found")
|
||||
self.assertEqual(len(child_line), 0, "No child line found")
|
||||
|
||||
def test_rule_and_category_with_and_without_code(self):
|
||||
rule_test_code = self.SalaryRule.create(
|
||||
{
|
||||
"name": "rule test code",
|
||||
"code": "rule_test_code",
|
||||
"sequence": 100,
|
||||
"amount_select": "code",
|
||||
"amount_python_compute": "result = categories.BASIC + HRA",
|
||||
}
|
||||
)
|
||||
category_without_code = self.SalaryRuleCateg.create({"name": "categ no code"})
|
||||
rule_without_code = self.SalaryRule.create(
|
||||
{
|
||||
"name": "rule without code",
|
||||
"category_id": category_without_code.id,
|
||||
"sequence": 10,
|
||||
"amount_select": "code",
|
||||
"amount_python_compute": "result = 100",
|
||||
}
|
||||
)
|
||||
rule_without_category = self.SalaryRule.create(
|
||||
{
|
||||
"name": "rule without category",
|
||||
"sequence": 10,
|
||||
"amount_select": "code",
|
||||
"amount_python_compute": "result = 100",
|
||||
}
|
||||
)
|
||||
structure = self.PayrollStructure.create(
|
||||
{
|
||||
"name": "test code and id",
|
||||
"rule_ids": [
|
||||
(4, self.rule_basic.id),
|
||||
(4, self.rule_hra.id),
|
||||
(4, rule_test_code.id),
|
||||
(4, rule_without_code.id),
|
||||
(4, rule_without_category.id),
|
||||
],
|
||||
}
|
||||
)
|
||||
payslip = self.Payslip.create(
|
||||
{
|
||||
"employee_id": self.richard_emp.id,
|
||||
"contract_id": self.richard_contract.id,
|
||||
"struct_id": structure.id,
|
||||
}
|
||||
)
|
||||
payslip.compute_sheet()
|
||||
line = payslip.line_ids.filtered(lambda l: l.code == "rule_test_code")
|
||||
self.assertEqual(line.total, 7000, "5000 categories.BASIC + 2000 HRA = 7000")
|
||||
line = payslip.line_ids.filtered(lambda l: l.name == "rule without code")
|
||||
self.assertEqual(len(line), 1, "Line found: rule without code")
|
||||
line = payslip.line_ids.filtered(lambda l: l.name == "rule without category")
|
||||
self.assertEqual(len(line), 1, "Line found: rule without category")
|
||||
|
||||
def test_line_sum_where(self):
|
||||
rule_fix_1 = self.SalaryRule.create(
|
||||
{
|
||||
"name": "Fixed rule 1",
|
||||
"sequence": 1,
|
||||
"condition_select": "none",
|
||||
"amount_select": "fix",
|
||||
"amount_fix": 100.0,
|
||||
}
|
||||
)
|
||||
rule_fix_2 = self.SalaryRule.create(
|
||||
{
|
||||
"name": "Fixed rule 2",
|
||||
"sequence": 2,
|
||||
"condition_select": "none",
|
||||
"amount_select": "fix",
|
||||
"amount_fix": 200.0,
|
||||
}
|
||||
)
|
||||
rule_line_sum_where = self.Rule.create(
|
||||
{
|
||||
"name": "Total fixed values",
|
||||
"sequence": 3,
|
||||
"amount_select": "code",
|
||||
"amount_python_compute": """result = payslip.line_sum_where(
|
||||
"amount_select", "fix", rules, result_rules
|
||||
)""",
|
||||
}
|
||||
)
|
||||
self.sales_pay_structure.rule_ids = [
|
||||
(4, rule_fix_1.id),
|
||||
(4, rule_fix_2.id),
|
||||
(4, rule_line_sum_where.id),
|
||||
]
|
||||
payslip = self.Payslip.create(
|
||||
{
|
||||
"employee_id": self.richard_emp.id,
|
||||
"contract_id": self.richard_contract.id,
|
||||
"struct_id": self.sales_pay_structure.id,
|
||||
}
|
||||
)
|
||||
payslip.compute_sheet()
|
||||
line = payslip.line_ids.filtered(lambda l: l.name == "Total fixed values")
|
||||
self.assertEqual(line.total, 300, "Fixed rules: 100 + 200 = 300")
|
||||
Loading…
Add table
Add a link
Reference in a new issue