88 lines
3.3 KiB
Python
88 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo.tests.common import TransactionCase
|
|
from odoo.exceptions import UserError
|
|
from odoo import fields
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
|
|
class TestEmployeeDepartmentJobs(TransactionCase):
|
|
|
|
def setUp(self):
|
|
super(TestEmployeeDepartmentJobs, self).setUp()
|
|
|
|
self.manager_employee = self.env['hr.employee'].create({
|
|
'name': 'Big Manager',
|
|
|
|
})
|
|
|
|
self.dep1 = self.env['hr.department'].create({
|
|
'name': 'IT Department',
|
|
'manager_id': self.manager_employee.id,
|
|
})
|
|
|
|
self.dep2 = self.env['hr.department'].create({
|
|
'name': 'HR Department',
|
|
'manager_id': self.manager_employee.id,
|
|
})
|
|
|
|
self.job1 = self.env['hr.job'].create({'name': 'Developer', 'department_id': self.dep1.id})
|
|
self.job2 = self.env['hr.job'].create(
|
|
{'name': 'HR Officer', 'department_id': self.dep2.id, 'no_of_recruitment': 1})
|
|
self.job_full = self.env['hr.job'].create(
|
|
{'name': 'Manager', 'department_id': self.dep2.id, 'no_of_recruitment': 0})
|
|
|
|
self.employee = self.env['hr.employee'].create({
|
|
'name': 'Test Employee Job',
|
|
'department_id': self.dep1.id,
|
|
'job_id': self.job1.id,
|
|
'parent_id': self.manager_employee.id, # ربطه بالمدير
|
|
'first_hiring_date': fields.Date.today() - relativedelta(years=2),
|
|
'joining_date': fields.Date.today() - relativedelta(years=1),
|
|
})
|
|
|
|
def test_prevent_job_change_no_vacancy(self):
|
|
|
|
req = self.env['employee.department.jobs'].new({
|
|
'employee_id': self.employee.id,
|
|
'new_department_id': self.dep2.id,
|
|
'new_job_id': self.job_full.id, # 0 vacancies
|
|
})
|
|
|
|
with self.assertRaises(UserError, msg="Should raise error when no recruitment spots available"):
|
|
req.not_reused_same_dep_job()
|
|
|
|
def test_update_employee_data_on_approval(self):
|
|
request = self.env['employee.department.jobs'].create({
|
|
'employee_id': self.employee.id,
|
|
'promotion_type': 'both',
|
|
'new_department_id': self.dep2.id,
|
|
'new_job_id': self.job2.id,
|
|
'date': fields.Date.today(),
|
|
'state': 'hr_manager',
|
|
})
|
|
|
|
request.store_level_group_and_degree_values()
|
|
|
|
request.approved()
|
|
|
|
self.assertEqual(self.employee.department_id.id, self.dep2.id, "Department not updated")
|
|
self.assertEqual(self.employee.job_id.id, self.job2.id, "Job not updated")
|
|
self.assertEqual(self.employee.joining_date, fields.Date.today(), "Joining date not updated")
|
|
|
|
def test_service_duration_calculation(self):
|
|
today = fields.Date.today()
|
|
one_year_one_month_ago = today - relativedelta(years=1, months=1)
|
|
|
|
self.employee.joining_date = one_year_one_month_ago
|
|
|
|
request = self.env['employee.department.jobs'].create({
|
|
'employee_id': self.employee.id,
|
|
'date': today,
|
|
})
|
|
|
|
request.store_level_group_and_degree_values()
|
|
request._compute_duration()
|
|
|
|
self.assertEqual(request.service_year, 1, "Service year calculation wrong")
|
|
self.assertEqual(request.service_month, 1, "Service month calculation wrong")
|
|
self.assertEqual(request.service_day, 0, "Service day calculation wrong") |