# -*- 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")