201 lines
11 KiB
Python
201 lines
11 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import date
|
|
|
|
from odoo.tests.common import tagged
|
|
from odoo.addons.hr_payroll_account.tests.common import TestPayslipValidationCommon
|
|
|
|
|
|
@tagged('post_install', 'post_install_l10n', '-at_install', 'payslips_validation')
|
|
class TestPayslipValidation(TestPayslipValidationCommon):
|
|
|
|
@classmethod
|
|
@TestPayslipValidationCommon.setup_country('bd')
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls._setup_common(
|
|
country=cls.env.ref('base.bd'),
|
|
structure=cls.env.ref('l10n_bd_hr_payroll.hr_payroll_structure_bd_employee_salary'),
|
|
structure_type=cls.env.ref('l10n_bd_hr_payroll.structure_type_employee_bd'),
|
|
employee_fields={
|
|
'sex': 'male',
|
|
}
|
|
)
|
|
|
|
def test_male_payslip_1(self):
|
|
self.contract.wage = 40000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 40000.0, 'GROSS': 40000.0, 'TAXABLE_AMOUNT': 26666.67, 'TAXES': -416.67, 'NET': 39583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_male_payslip_2(self):
|
|
self.contract.wage = 60000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 60000.0, 'GROSS': 60000.0, 'TAXABLE_AMOUNT': 40000.0, 'TAXES': -666.67, 'NET': 59333.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_male_payslip_3(self):
|
|
self.contract.wage = 80000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 80000.0, 'GROSS': 80000.0, 'TAXABLE_AMOUNT': 53333.33, 'TAXES': -2000.0, 'NET': 78000.0}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_female_payslip_1(self):
|
|
self.employee.sex = 'female'
|
|
self.contract.wage = 40000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 40000.0, 'GROSS': 40000.0, 'TAXABLE_AMOUNT': 26666.67, 'TAXES': -416.67, 'NET': 39583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_female_payslip_2(self):
|
|
self.employee.sex = 'female'
|
|
self.contract.wage = 60000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 60000.0, 'GROSS': 60000.0, 'TAXABLE_AMOUNT': 40000.0, 'TAXES': -416.67, 'NET': 59583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_female_payslip_3(self):
|
|
self.employee.sex = 'female'
|
|
self.contract.wage = 80000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 80000.0, 'GROSS': 80000.0, 'TAXABLE_AMOUNT': 53333.33, 'TAXES': -1583.33, 'NET': 78416.67}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_disabled_payslip_1(self):
|
|
self.employee.disabled = True
|
|
self.contract.wage = 40000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 40000.0, 'GROSS': 40000.0, 'TAXABLE_AMOUNT': 26666.67, 'TAXES': -416.67, 'NET': 39583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_disabled_payslip_2(self):
|
|
self.employee.disabled = True
|
|
self.contract.wage = 60000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 60000.0, 'GROSS': 60000.0, 'TAXABLE_AMOUNT': 40000.0, 'TAXES': -416.67, 'NET': 59583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_disabled_payslip_3(self):
|
|
self.employee.disabled = True
|
|
self.contract.wage = 80000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 80000.0, 'GROSS': 80000.0, 'TAXABLE_AMOUNT': 53333.33, 'TAXES': -958.33, 'NET': 79041.67}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_gazetted_freedom_fighter_payslip_1(self):
|
|
self.employee.l10n_bd_gazetted_war_founded_freedom_fighter = True
|
|
self.contract.wage = 40000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 40000.0, 'GROSS': 40000.0, 'TAXABLE_AMOUNT': 26666.67, 'TAXES': -416.67, 'NET': 39583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_gazetted_freedom_fighter_payslip_2(self):
|
|
self.employee.l10n_bd_gazetted_war_founded_freedom_fighter = True
|
|
self.contract.wage = 60000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 60000.0, 'GROSS': 60000.0, 'TAXABLE_AMOUNT': 40000.0, 'TAXES': -416.67, 'NET': 59583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_gazetted_freedom_fighter_payslip_3(self):
|
|
self.employee.l10n_bd_gazetted_war_founded_freedom_fighter = True
|
|
self.contract.wage = 80000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 80000.0, 'GROSS': 80000.0, 'TAXABLE_AMOUNT': 53333.33, 'TAXES': -750.0, 'NET': 79250.0}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_senior_payslip_1(self):
|
|
self.employee.birthday = date(1950, 1, 1)
|
|
self.contract.wage = 40000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 40000.0, 'GROSS': 40000.0, 'TAXABLE_AMOUNT': 26666.67, 'TAXES': -416.67, 'NET': 39583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_senior_payslip_2(self):
|
|
self.employee.birthday = date(1950, 1, 1)
|
|
self.contract.wage = 60000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 60000.0, 'GROSS': 60000.0, 'TAXABLE_AMOUNT': 40000.0, 'TAXES': -416.67, 'NET': 59583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_senior_payslip_3(self):
|
|
self.employee.birthday = date(1950, 1, 1)
|
|
self.contract.wage = 80000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 80000.0, 'GROSS': 80000.0, 'TAXABLE_AMOUNT': 53333.33, 'TAXES': -1583.33, 'NET': 78416.67}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_disabled_dependent_payslip_1(self):
|
|
self.employee.l10n_bd_disabled_dependent = 5
|
|
self.contract.wage = 40000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 40000.0, 'GROSS': 40000.0, 'TAXABLE_AMOUNT': 26666.67, 'TAXES': -416.67, 'NET': 39583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_disabled_dependent_payslip_2(self):
|
|
self.employee.l10n_bd_disabled_dependent = 5
|
|
self.contract.wage = 60000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 60000.0, 'GROSS': 60000.0, 'TAXABLE_AMOUNT': 40000.0, 'TAXES': -416.67, 'NET': 59583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_disabled_dependent_payslip_3(self):
|
|
self.employee.l10n_bd_disabled_dependent = 5
|
|
self.contract.wage = 80000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
payslip_results = {'BASIC': 80000.0, 'GROSS': 80000.0, 'TAXABLE_AMOUNT': 53333.33, 'TAXES': -416.67, 'NET': 79583.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_other_inputs_payslip_1(self):
|
|
self.contract.wage = 40000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
other_inputs_to_add = [
|
|
(self.env.ref('l10n_bd_hr_payroll.input_other_allowances'), 2000),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_salary_arrears'), 3000),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_extra_hours'), 500),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_tax_credits'), 100),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_provident_fund'), 400),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_gratuity_fund'), 300),
|
|
]
|
|
for other_input, amount in other_inputs_to_add:
|
|
self._add_other_input(payslip, other_input, amount)
|
|
payslip.compute_sheet()
|
|
|
|
payslip_results = {'BASIC': 40000.0, 'EXTRA_HOURS': 500.0, 'GRAT_FUND': 300.0, 'OTHER_ALLOW': 2000.0, 'PROV_FUND': 400.0, 'SALARY_ARREARS': 3000.0, 'GROSS': 46200.0, 'TAX_CREDITS': 100.0, 'TAXABLE_AMOUNT': 30700.0, 'TAXES': -416.67, 'NET': 45783.33}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_other_inputs_payslip_2(self):
|
|
self.contract.wage = 60000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
other_inputs_to_add = [
|
|
(self.env.ref('l10n_bd_hr_payroll.input_other_allowances'), 2000),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_salary_arrears'), 3000),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_extra_hours'), 500),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_tax_credits'), 100),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_provident_fund'), 400),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_gratuity_fund'), 300),
|
|
]
|
|
for other_input, amount in other_inputs_to_add:
|
|
self._add_other_input(payslip, other_input, amount)
|
|
payslip.compute_sheet()
|
|
|
|
payslip_results = {'BASIC': 60000.0, 'EXTRA_HOURS': 500.0, 'GRAT_FUND': 300.0, 'OTHER_ALLOW': 2000.0, 'PROV_FUND': 400.0, 'SALARY_ARREARS': 3000.0, 'GROSS': 66200.0, 'TAX_CREDITS': 100.0, 'TAXABLE_AMOUNT': 44033.33, 'TAXES': -1070.0, 'NET': 65130.0}
|
|
self._validate_payslip(payslip, payslip_results)
|
|
|
|
def test_other_inputs_payslip_3(self):
|
|
self.contract.wage = 80000.0
|
|
payslip = self._generate_payslip(date(2024, 1, 1), date(2024, 1, 31))
|
|
other_inputs_to_add = [
|
|
(self.env.ref('l10n_bd_hr_payroll.input_other_allowances'), 2000),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_salary_arrears'), 3000),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_extra_hours'), 500),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_tax_credits'), 100),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_provident_fund'), 400),
|
|
(self.env.ref('l10n_bd_hr_payroll.input_gratuity_fund'), 300),
|
|
]
|
|
for other_input, amount in other_inputs_to_add:
|
|
self._add_other_input(payslip, other_input, amount)
|
|
payslip.compute_sheet()
|
|
|
|
payslip_results = {'BASIC': 80000.0, 'EXTRA_HOURS': 500.0, 'GRAT_FUND': 300.0, 'OTHER_ALLOW': 2000.0, 'PROV_FUND': 400.0, 'SALARY_ARREARS': 3000.0, 'GROSS': 86200.0, 'TAX_CREDITS': 100.0, 'TAXABLE_AMOUNT': 57366.67, 'TAXES': -2403.33, 'NET': 83796.67}
|
|
self._validate_payslip(payslip, payslip_results)
|