148 lines
5.0 KiB
Python
148 lines
5.0 KiB
Python
from odoo.tests.common import TransactionCase, Form
|
|
from odoo.exceptions import UserError
|
|
from odoo.tests import tagged
|
|
from datetime import date
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestEmployeePromotions(TransactionCase):
|
|
|
|
def setUp(cls):
|
|
super(TestEmployeePromotions, cls).setUp()
|
|
|
|
|
|
cls.structure_scale = cls.env['hr.payroll.structure'].create({
|
|
'name': 'General Scale',
|
|
'type': 'scale',
|
|
'code': 'SCL_TEST_01'
|
|
})
|
|
|
|
cls.level_1 = cls.env['hr.payroll.structure'].create({
|
|
'name': 'Level 1',
|
|
'type': 'level',
|
|
'salary_scale_id': cls.structure_scale.id,
|
|
'code': 'LVL_TEST_01'
|
|
})
|
|
cls.group_A = cls.env['hr.payroll.structure'].create({
|
|
'name': 'Group A',
|
|
'type': 'group',
|
|
'salary_scale_id': cls.structure_scale.id,
|
|
'salary_scale_level_id': cls.level_1.id,
|
|
'code': 'GRP_TEST_A'
|
|
})
|
|
cls.degree_1 = cls.env['hr.payroll.structure'].create({
|
|
'name': 'Degree 1',
|
|
'type': 'degree',
|
|
'salary_scale_id': cls.structure_scale.id,
|
|
'salary_scale_group_id': cls.group_A.id,
|
|
'base_salary': 5000.0,
|
|
'code': 'DEG_TEST_1'
|
|
})
|
|
|
|
cls.level_2 = cls.env['hr.payroll.structure'].create({
|
|
'name': 'Level 2',
|
|
'type': 'level',
|
|
'salary_scale_id': cls.structure_scale.id,
|
|
'code': 'LVL_TEST_02'
|
|
})
|
|
cls.group_B = cls.env['hr.payroll.structure'].create({
|
|
'name': 'Group B',
|
|
'type': 'group',
|
|
'salary_scale_id': cls.structure_scale.id,
|
|
'salary_scale_level_id': cls.level_2.id,
|
|
'code': 'GRP_TEST_B'
|
|
})
|
|
cls.degree_2 = cls.env['hr.payroll.structure'].create({
|
|
'name': 'Degree 2',
|
|
'type': 'degree',
|
|
'salary_scale_id': cls.structure_scale.id,
|
|
'salary_scale_group_id': cls.group_B.id,
|
|
'base_salary': 7000.0,
|
|
'code': 'DEG_TEST_2'
|
|
})
|
|
|
|
cls.employee = cls.env['hr.employee'].create({
|
|
'name': 'Test Employee',
|
|
'salary_scale': cls.structure_scale.id,
|
|
'salary_level': cls.level_1.id,
|
|
'salary_group': cls.group_A.id,
|
|
'salary_degree': cls.degree_1.id,
|
|
})
|
|
|
|
cls.contract = cls.env['hr.contract'].create({
|
|
'name': 'Test Contract',
|
|
'employee_id': cls.employee.id,
|
|
'wage': 5000.0,
|
|
'state': 'open',
|
|
'salary_level': cls.level_1.id,
|
|
'salary_group': cls.group_A.id,
|
|
'salary_degree': cls.degree_1.id,
|
|
})
|
|
|
|
cls.employee.contract_id = cls.contract
|
|
|
|
def test_01_promotion_workflow_full_cycle(self):
|
|
|
|
promotion_form = Form(self.env['employee.promotions'])
|
|
promotion_form.date = date.today()
|
|
promotion_form.employee_id = self.employee
|
|
|
|
self.assertEqual(promotion_form.old_degree, self.degree_1, "Should auto-fill old degree from employee")
|
|
|
|
promotion_form.new_level = self.level_2
|
|
promotion_form.new_group = self.group_B
|
|
promotion_form.new_degree = self.degree_2
|
|
|
|
promotion = promotion_form.save()
|
|
|
|
promotion.confirm()
|
|
self.assertEqual(promotion.state, 'confirm')
|
|
|
|
promotion.hr_manager()
|
|
self.assertEqual(promotion.state, 'hr_manager')
|
|
|
|
promotion.approved()
|
|
self.assertEqual(promotion.state, 'approved')
|
|
|
|
|
|
self.assertEqual(self.employee.contract_id.salary_degree, self.degree_2,
|
|
"Contract degree should be updated to new degree")
|
|
self.assertEqual(self.employee.contract_id.salary, 7000.0,
|
|
"Contract salary should be updated to new base salary")
|
|
|
|
def test_02_redraft_reverts_values(self):
|
|
|
|
promotion = self.env['employee.promotions'].create({
|
|
'date': date.today(),
|
|
'employee_id': self.employee.id,
|
|
'old_degree': self.degree_1.id,
|
|
'old_level_2': self.level_1.id,
|
|
'old_group_2': self.group_A.id,
|
|
'old_degree_2': self.degree_1.id,
|
|
'new_degree': self.degree_2.id,
|
|
'new_level': self.level_2.id,
|
|
'new_group': self.group_B.id,
|
|
})
|
|
|
|
promotion.approved()
|
|
self.assertEqual(self.employee.contract_id.salary_degree, self.degree_2)
|
|
|
|
promotion.re_draft()
|
|
|
|
self.assertEqual(promotion.state, 'draft')
|
|
self.assertEqual(self.employee.contract_id.salary_degree, self.degree_1,
|
|
"Should revert to old degree on re-draft")
|
|
|
|
def test_03_unlink_restriction(self):
|
|
promotion = self.env['employee.promotions'].create({
|
|
'date': date.today(),
|
|
'employee_id': self.employee.id,
|
|
'state': 'confirm'
|
|
})
|
|
|
|
with self.assertRaises(UserError):
|
|
promotion.unlink()
|
|
|
|
promotion.state = 'draft'
|
|
promotion.unlink()
|
|
self.assertFalse(promotion.exists()) |