287 lines
12 KiB
Python
287 lines
12 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Talisman . See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.tests import Form, users
|
|
from odoo.addons.hr.tests.common import TestHrCommon
|
|
|
|
|
|
class TestHrEmployee(TestHrCommon):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.user_without_image = self.env['res.users'].create({
|
|
'name': 'Marc Demo',
|
|
'email': 'mark.brown23@example.com',
|
|
'image_1920': False,
|
|
'login': 'demo_1',
|
|
'password': 'demo_123'
|
|
})
|
|
self.employee_without_image = self.env['hr.employee'].create({
|
|
'user_id': self.user_without_image.id,
|
|
'image_1920': False
|
|
})
|
|
|
|
def test_employee_smart_button_multi_company(self):
|
|
partner = self.env['res.partner'].create({'name': 'Partner Test'})
|
|
company_A = self.env['res.company'].create({'name': 'company_A'})
|
|
company_B = self.env['res.company'].create({'name': 'company_B'})
|
|
self.env['hr.employee'].create({
|
|
'name': 'employee_A',
|
|
'work_contact_id': partner.id,
|
|
'company_id': company_A.id,
|
|
})
|
|
self.env['hr.employee'].create({
|
|
'name': 'employee_B',
|
|
'work_contact_id': partner.id,
|
|
'company_id': company_B.id
|
|
})
|
|
|
|
partner.with_company(company_A)._compute_employees_count()
|
|
self.assertEqual(partner.employees_count, 1)
|
|
partner.with_company(company_B)._compute_employees_count()
|
|
self.assertEqual(partner.employees_count, 1)
|
|
partner.with_company(company_A).with_company(company_B)._compute_employees_count()
|
|
self.assertEqual(partner.employees_count, 2)
|
|
|
|
def test_employee_linked_partner(self):
|
|
user_partner = self.user_without_image.partner_id
|
|
work_contact = self.employee_without_image.work_contact_id
|
|
self.assertEqual(user_partner, work_contact)
|
|
|
|
def test_employee_resource(self):
|
|
_tz = 'Pacific/Apia'
|
|
self.res_users_hr_officer.company_id.resource_calendar_id.tz = _tz
|
|
Employee = self.env['hr.employee'].with_user(self.res_users_hr_officer)
|
|
employee_form = Form(Employee)
|
|
employee_form.name = 'Raoul Grosbedon'
|
|
employee_form.work_email = 'raoul@example.com'
|
|
employee = employee_form.save()
|
|
self.assertEqual(employee.tz, _tz)
|
|
|
|
def test_employee_from_user(self):
|
|
_tz = 'Pacific/Apia'
|
|
_tz2 = 'America/Tijuana'
|
|
self.res_users_hr_officer.company_id.resource_calendar_id.tz = _tz
|
|
self.res_users_hr_officer.tz = _tz2
|
|
Employee = self.env['hr.employee'].with_user(self.res_users_hr_officer)
|
|
employee_form = Form(Employee)
|
|
employee_form.name = 'Raoul Grosbedon'
|
|
employee_form.work_email = 'raoul@example.com'
|
|
employee_form.user_id = self.res_users_hr_officer
|
|
employee = employee_form.save()
|
|
self.assertEqual(employee.name, 'Raoul Grosbedon')
|
|
self.assertEqual(employee.work_email, self.res_users_hr_officer.email)
|
|
self.assertEqual(employee.tz, self.res_users_hr_officer.tz)
|
|
|
|
def test_employee_from_user_tz_no_reset(self):
|
|
_tz = 'Pacific/Apia'
|
|
self.res_users_hr_officer.tz = False
|
|
Employee = self.env['hr.employee'].with_user(self.res_users_hr_officer)
|
|
employee_form = Form(Employee)
|
|
employee_form.name = 'Raoul Grosbedon'
|
|
employee_form.work_email = 'raoul@example.com'
|
|
employee_form.tz = _tz
|
|
employee_form.user_id = self.res_users_hr_officer
|
|
employee = employee_form.save()
|
|
self.assertEqual(employee.name, 'Raoul Grosbedon')
|
|
self.assertEqual(employee.work_email, self.res_users_hr_officer.email)
|
|
self.assertEqual(employee.tz, _tz)
|
|
|
|
def test_employee_has_avatar_even_if_it_has_no_image(self):
|
|
self.assertTrue(self.employee_without_image.avatar_128)
|
|
self.assertTrue(self.employee_without_image.avatar_256)
|
|
self.assertTrue(self.employee_without_image.avatar_512)
|
|
self.assertTrue(self.employee_without_image.avatar_1024)
|
|
self.assertTrue(self.employee_without_image.avatar_1920)
|
|
|
|
def test_employee_has_same_avatar_as_corresponding_user(self):
|
|
self.assertEqual(self.employee_without_image.avatar_1920, self.user_without_image.avatar_1920)
|
|
|
|
def test_employee_member_of_department(self):
|
|
dept, dept_sub, dept_sub_sub, dept_other, dept_parent = self.env['hr.department'].create([
|
|
{
|
|
'name': 'main',
|
|
},
|
|
{
|
|
'name': 'sub',
|
|
},
|
|
{
|
|
'name': 'sub-sub',
|
|
},
|
|
{
|
|
'name': 'other',
|
|
},
|
|
{
|
|
'name': 'parent',
|
|
},
|
|
])
|
|
dept_sub.parent_id = dept
|
|
dept_sub_sub.parent_id = dept_sub
|
|
dept.parent_id = dept_parent
|
|
emp, emp_sub, emp_sub_sub, emp_other, emp_parent = self.env['hr.employee'].with_user(self.res_users_hr_officer).create([
|
|
{
|
|
'name': 'employee',
|
|
'department_id': dept.id,
|
|
},
|
|
{
|
|
'name': 'employee sub',
|
|
'department_id': dept_sub.id,
|
|
},
|
|
{
|
|
'name': 'employee sub sub',
|
|
'department_id': dept_sub_sub.id,
|
|
},
|
|
{
|
|
'name': 'employee other',
|
|
'department_id': dept_other.id,
|
|
},
|
|
{
|
|
'name': 'employee parent',
|
|
'department_id': dept_parent.id,
|
|
},
|
|
])
|
|
self.res_users_hr_officer.employee_id = emp
|
|
self.assertTrue(emp.member_of_department)
|
|
self.assertTrue(emp_sub.member_of_department)
|
|
self.assertTrue(emp_sub_sub.member_of_department)
|
|
self.assertFalse(emp_other.member_of_department)
|
|
self.assertFalse(emp_parent.member_of_department)
|
|
employees = emp + emp_sub + emp_sub_sub + emp_other + emp_parent
|
|
self.assertEqual(
|
|
employees.filtered_domain(employees._search_part_of_department('=', True)),
|
|
emp + emp_sub + emp_sub_sub)
|
|
self.assertEqual(
|
|
employees.filtered_domain(employees._search_part_of_department('!=', False)),
|
|
emp + emp_sub + emp_sub_sub)
|
|
self.assertEqual(
|
|
employees.filtered_domain(employees._search_part_of_department('=', False)),
|
|
emp_other + emp_parent)
|
|
self.assertEqual(
|
|
employees.filtered_domain(employees._search_part_of_department('!=', True)),
|
|
emp_other + emp_parent)
|
|
|
|
def test_employee_create_from_user(self):
|
|
employee = self.env['hr.employee'].create({
|
|
'name': 'Test User 3 - employee'
|
|
})
|
|
user_1, user_2, user_3 = self.env['res.users'].create([
|
|
{
|
|
'name': 'Test User',
|
|
'login': 'test_user',
|
|
'email': 'test_user@odoo.com',
|
|
},
|
|
{
|
|
'name': 'Test User 2',
|
|
'login': 'test_user_2',
|
|
'email': 'test_user_2@odoo.com',
|
|
'create_employee': True,
|
|
},
|
|
{
|
|
'name': 'Test User 3',
|
|
'login': 'test_user_3',
|
|
'email': 'test_user_3@odoo.com',
|
|
'create_employee_id': employee.id,
|
|
},
|
|
])
|
|
# Test that creating an user does not create an employee by default
|
|
self.assertFalse(user_1.employee_id)
|
|
# Test that setting create_employee does create the associated employee
|
|
self.assertTrue(user_2.employee_id)
|
|
# Test that creating an user with a given employee associates the employee correctly
|
|
self.assertEqual(user_3.employee_id, employee)
|
|
|
|
def test_employee_create_from_signup(self):
|
|
# Test that an employee is not created when signin up on the website
|
|
partner = self.env['res.partner'].create({
|
|
'name': 'test partner'
|
|
})
|
|
self.env['res.users'].signup({
|
|
'name': 'Test User',
|
|
'login': 'test_user',
|
|
'email': 'test_user@odoo.com',
|
|
'password': 'test_user_password',
|
|
'partner_id': partner.id,
|
|
})
|
|
self.assertFalse(self.env['res.users'].search([('login', '=', 'test_user')]).employee_id)
|
|
|
|
def test_employee_update_work_contact_id(self):
|
|
"""
|
|
Check that the `work_contact_id` information is no longer
|
|
updated when an employee's `user_id` is removed.
|
|
"""
|
|
user = self.env['res.users'].create({
|
|
'name': 'Test',
|
|
'login': 'test',
|
|
'email': 'test@example.com',
|
|
})
|
|
employee_A, employee_B = self.env['hr.employee'].create([
|
|
{
|
|
'name': 'Employee A',
|
|
'user_id': user.id,
|
|
'work_email': 'employee_A@example.com',
|
|
},
|
|
{
|
|
'name': 'Employee B',
|
|
'user_id': False,
|
|
'work_email': 'employee_B@example.com',
|
|
}
|
|
])
|
|
employee_A.user_id = False
|
|
employee_B.user_id = user.id
|
|
employee_B.work_email = 'new_email@example.com'
|
|
self.assertEqual(employee_A.work_email, 'employee_A@example.com')
|
|
self.assertEqual(employee_B.work_email, 'new_email@example.com')
|
|
|
|
@users('admin')
|
|
def test_change_user_on_employee(self):
|
|
test_other_user = self.env['res.users'].create({
|
|
'name': 'Test Other User',
|
|
'login': 'test_other_user',
|
|
})
|
|
test_other_user.partner_id.company_id = self.env.company
|
|
test_company = self.env['res.company'].create({
|
|
'name' : 'Test User Company',
|
|
})
|
|
self.env.user.write({'company_ids': test_company.ids, 'company_id': test_company.id})
|
|
test_user = self.env['res.users'].create({
|
|
'name': 'Test User',
|
|
'login': 'test_user',
|
|
})
|
|
test_user.partner_id.company_id = test_company
|
|
bank_account = self.env['res.partner.bank'].create({
|
|
'acc_number' : '1234567',
|
|
'partner_id' : test_user.partner_id.id,
|
|
})
|
|
test_employee = self.env['hr.employee'].create({
|
|
'name': 'Test User - employee',
|
|
'user_id': test_user.id,
|
|
'company_id': test_company.id,
|
|
'bank_account_id': bank_account.id,
|
|
})
|
|
# change user -> bank account change company
|
|
with Form(test_employee) as employee_form:
|
|
employee_form.user_id = test_other_user
|
|
# change user back -> check that there is no company error
|
|
with Form(test_employee) as employee_form:
|
|
employee_form.user_id = test_user
|
|
|
|
def test_avatar(self):
|
|
# Check simple employee has a generated image (initials)
|
|
employee_georgette = self.env['hr.employee'].create({'name': 'Georgette Pudubec'})
|
|
self.assertTrue(employee_georgette.image_1920)
|
|
self.assertTrue(employee_georgette.avatar_1920)
|
|
|
|
self.assertTrue(employee_georgette.work_contact_id)
|
|
self.assertTrue(employee_georgette.work_contact_id.image_1920)
|
|
self.assertTrue(employee_georgette.work_contact_id.avatar_1920)
|
|
|
|
# Check user has a generate image
|
|
user_norbert = self.env['res.users'].create({'name': 'Norbert Comidofisse', 'login': 'Norbert6870'})
|
|
self.assertTrue(user_norbert.image_1920)
|
|
self.assertTrue(user_norbert.avatar_1920)
|
|
|
|
# Check that linked employee got user image
|
|
employee_norbert = self.env['hr.employee'].create({'name': 'Norbert Employee', 'user_id': user_norbert.id})
|
|
self.assertEqual(employee_norbert.image_1920, user_norbert.image_1920)
|
|
self.assertEqual(employee_norbert.avatar_1920, user_norbert.avatar_1920)
|