Tokiniaina 97d61d3076
All checks were successful
ci / main (push) Successful in 3m55s
send payroll OCA module
2024-11-13 14:54:26 +03:00

265 lines
8.4 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.fields import Date
from odoo.tests.common import TransactionCase
class TestPayslipBase(TransactionCase):
def setUp(self):
super().setUp()
self.CalendarAttendance = self.env["resource.calendar.attendance"]
self.Contract = self.env["hr.contract"]
self.ContributionRegister = self.env["hr.contribution.register"]
self.Department = self.env["hr.department"]
self.PayrollStructure = self.env["hr.payroll.structure"]
self.Payslip = self.env["hr.payslip"]
self.ResourceCalendar = self.env["resource.calendar"]
self.RuleInput = self.env["hr.rule.input"]
self.SalaryRule = self.env["hr.salary.rule"]
self.SalaryRuleCateg = self.env["hr.salary.rule.category"]
# Departments
#
self.dept_rd = self.Department.create({"name": "Research & Development"})
self.dept_sales = self.Department.create({"name": "Sales"})
# Salary Rule Categories
#
self.categ_basic = self.SalaryRuleCateg.create(
{
"name": "Basic",
"code": "BASIC",
}
)
self.categ_alw = self.SalaryRuleCateg.create(
{
"name": "Allowance",
"code": "ALW",
}
)
self.categ_gross = self.SalaryRuleCateg.create(
{
"name": "Gross",
"code": "GROSS",
}
)
self.categ_ded = self.SalaryRuleCateg.create(
{
"name": "Deduction",
"code": "DED",
}
)
self.categ_net = self.SalaryRuleCateg.create(
{
"name": "NET",
"code": "NET",
}
)
#
# Salary Rules
#
# Earnings
#
self.rule_basic = self.SalaryRule.create(
{
"name": "Basic Salary",
"code": "BASIC",
"sequence": 1,
"category_id": self.categ_basic.id,
"condition_select": "none",
"amount_select": "code",
"amount_python_compute": "result = contract.wage",
}
)
self.rule_hra = self.SalaryRule.create(
{
"name": "House Rent Allowance",
"code": "HRA",
"sequence": 5,
"category_id": self.categ_alw.id,
"condition_select": "none",
"amount_select": "percentage",
"amount_percentage": 40.0,
"amount_percentage_base": "contract.wage",
}
)
self.rule_meal = self.SalaryRule.create(
{
"name": "Meal Voucher",
"code": "MA",
"sequence": 16,
"category_id": self.categ_alw.id,
"condition_select": "none",
"amount_select": "fix",
"amount_fix": 10.0,
"quantity": "worked_days.WORK100 and worked_days.WORK100.number_of_days", # noqa: E501
}
)
self.rule_commission = self.SalaryRule.create(
{
"name": "Get 1% of sales",
"code": "SALE",
"sequence": 17,
"category_id": self.categ_alw.id,
"condition_select": "none",
"amount_select": "code",
"amount_python_compute": "result = "
"(inputs.SALEURO and inputs.SALEURO.amount) * 0.01",
}
)
self.RuleInput.create(
{
"name": "Sales to Europe",
"code": "SALEURO",
"input_id": self.rule_commission.id,
}
)
# Gross
#
self.rule_gross = self.SalaryRule.create(
{
"name": "Gross",
"code": "GROSS",
"sequence": 100,
"category_id": self.categ_gross.id,
"condition_select": "none",
"amount_select": "code",
"amount_python_compute": "result = categories.BASIC + categories.ALW",
}
)
# Deductions
#
self.rule_proftax = self.SalaryRule.create(
{
"name": "Professional Tax",
"code": "PT",
"sequence": 150,
"category_id": self.categ_ded.id,
"condition_select": "none",
"amount_select": "fix",
"amount_fix": -200.0,
}
)
# Net
#
self.rule_net = self.SalaryRule.create(
{
"name": "Net",
"code": "NET",
"sequence": 200,
"category_id": self.categ_net.id,
"condition_select": "none",
"amount_select": "code",
"amount_python_compute": "result = categories.BASIC "
"+ categories.ALW + categories.DED",
}
)
# Test Child Line
#
self.rule_child = self.SalaryRule.create(
{
"name": "Net Child Rule",
"code": "NET_CHILD",
"sequence": 190,
"category_id": self.categ_net.id,
"parent_rule_id": self.rule_net.id,
"condition_select": "none",
"amount_select": "code",
"amount_python_compute": "result = categories.BASIC "
"+ categories.ALW + categories.DED",
}
)
# Contribution Registers
#
self.register_hra = self.ContributionRegister.create(
{"name": "House Rent Allowance"}
)
# I create a new employee "Richard"
self.richard_emp = self.env["hr.employee"].create(
{
"name": "Richard",
"gender": "male",
"birthday": "1984-05-01",
"country_id": self.ref("base.be"),
"department_id": self.dept_rd.id,
}
)
# I create a salary structure for "Software Developer"
self.developer_pay_structure = self.PayrollStructure.create(
{
"name": "Salary Structure for Software Developer",
"code": "SD",
"company_id": self.ref("base.main_company"),
"rule_ids": [
(4, self.rule_hra.id),
(4, self.rule_proftax.id),
(4, self.rule_meal.id),
(4, self.rule_commission.id),
(4, self.rule_basic.id),
(4, self.rule_gross.id),
(4, self.rule_net.id),
],
}
)
# I create a contract for "Richard"
self.richard_contract = self.Contract.create(
{
"date_start": Date.today(),
"name": "Contract for Richard",
"wage": 5000.0,
"employee_id": self.richard_emp.id,
"struct_id": self.developer_pay_structure.id,
"kanban_state": "done",
}
)
# I create a salary structure for "Sales Person"
self.sales_pay_structure = self.PayrollStructure.create(
{
"name": "Salary Structure for Sales Person",
"code": "SP",
"company_id": self.ref("base.main_company"),
"rule_ids": [
(4, self.rule_commission.id),
(4, self.rule_basic.id),
(4, self.rule_gross.id),
(4, self.rule_net.id),
],
}
)
# I create another employee Sally and a contract for her
self.sally = self.env["hr.employee"].create(
{
"name": "Sally",
"department_id": self.dept_sales.id,
}
)
self.Contract.create(
{
"date_start": Date.today().strftime("%Y-%m-1"),
"name": "Contract for Sally",
"wage": 6500.0,
"employee_id": self.sally.id,
"struct_id": self.sales_pay_structure.id,
"kanban_state": "done",
}
)
def apply_contract_cron(self):
self.env.ref(
"hr_contract.ir_cron_data_contract_update_state"
).method_direct_trigger()