diff --git a/addons/hr/data/hr_data.xml b/addons/hr/data/hr_data.xml
index e3a3da5370a..94d72d10471 100644
--- a/addons/hr/data/hr_data.xml
+++ b/addons/hr/data/hr_data.xml
@@ -14,7 +14,6 @@
Administrator
admin@example.com
-
private
diff --git a/addons/hr/models/hr_employee.py b/addons/hr/models/hr_employee.py
index e55763eae27..f524a42aaaf 100644
--- a/addons/hr/models/hr_employee.py
+++ b/addons/hr/models/hr_employee.py
@@ -10,9 +10,8 @@ from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, _
from odoo.osv.query import Query
from odoo.exceptions import ValidationError, AccessError
-from odoo.modules.module import get_module_resource
-from odoo.tools.misc import format_date
from odoo.osv import expression
+from odoo.tools.misc import format_date
class HrEmployeePrivate(models.Model):
@@ -26,7 +25,7 @@ class HrEmployeePrivate(models.Model):
_name = "hr.employee"
_description = "Employee"
_order = 'name'
- _inherit = ['hr.employee.base', 'mail.thread', 'mail.activity.mixin', 'resource.mixin', 'image.mixin']
+ _inherit = ['hr.employee.base', 'mail.thread', 'mail.activity.mixin', 'resource.mixin', 'avatar.mixin']
_mail_post_access = 'read'
# resource and user
@@ -100,7 +99,6 @@ class HrEmployeePrivate(models.Model):
km_home_work = fields.Integer(string="Home-Work Distance", groups="hr.group_hr_user", tracking=True)
job_id = fields.Many2one(tracking=True)
- image_1920 = fields.Image()
phone = fields.Char(related='address_home_id.phone', related_sudo=False, readonly=False, string="Private Phone", groups="hr.group_hr_user")
# employee in company
child_ids = fields.One2many('hr.employee', 'parent_id', string='Direct subordinates')
@@ -125,11 +123,35 @@ class HrEmployeePrivate(models.Model):
('user_uniq', 'unique (user_id, company_id)', "A user cannot be linked to multiple employees in the same company.")
]
- def _get_placeholder_filename(self, field=None):
- image_fields = ['image_%s' % size for size in [1920, 1024, 512, 256, 128]]
- if field in image_fields:
- return 'hr/static/src/img/default_image.png'
- return super()._get_placeholder_filename(field=field)
+ @api.depends('name', 'user_id.avatar_1920', 'image_1920')
+ def _compute_avatar_1920(self):
+ super()._compute_avatar_1920()
+
+ @api.depends('name', 'user_id.avatar_1024', 'image_1024')
+ def _compute_avatar_1024(self):
+ super()._compute_avatar_1024()
+
+ @api.depends('name', 'user_id.avatar_512', 'image_512')
+ def _compute_avatar_512(self):
+ super()._compute_avatar_512()
+
+ @api.depends('name', 'user_id.avatar_256', 'image_256')
+ def _compute_avatar_256(self):
+ super()._compute_avatar_256()
+
+ @api.depends('name', 'user_id.avatar_128', 'image_128')
+ def _compute_avatar_128(self):
+ super()._compute_avatar_128()
+
+ def _compute_avatar(self, avatar_field, image_field):
+ for employee in self:
+ avatar = employee[image_field]
+ if not avatar:
+ if employee.user_id:
+ avatar = employee.user_id[avatar_field]
+ else:
+ avatar = employee._avatar_get_placeholder()
+ employee[avatar_field] = avatar
def name_get(self):
if self.check_access_rights('read', raise_exception=False):
diff --git a/addons/hr/models/hr_employee_public.py b/addons/hr/models/hr_employee_public.py
index 9e9ad926032..505711b06ef 100644
--- a/addons/hr/models/hr_employee_public.py
+++ b/addons/hr/models/hr_employee_public.py
@@ -32,26 +32,29 @@ class HrEmployeePublic(models.Model):
color = fields.Integer(readonly=True)
employee_type = fields.Selection(readonly=True)
+ employee_id = fields.Many2one('hr.employee', 'Employee', compute="_compute_employee_id", search="_search_employee_id", compute_sudo=True)
# hr.employee.public specific fields
child_ids = fields.One2many('hr.employee.public', 'parent_id', string='Direct subordinates', readonly=True)
- image_1920 = fields.Image("Original Image", compute='_compute_image', compute_sudo=True)
- image_1024 = fields.Image("Image 1024", compute='_compute_image', compute_sudo=True)
- image_512 = fields.Image("Image 512", compute='_compute_image', compute_sudo=True)
- image_256 = fields.Image("Image 256", compute='_compute_image', compute_sudo=True)
- image_128 = fields.Image("Image 128", compute='_compute_image', compute_sudo=True)
+ image_1920 = fields.Image("Image", related='employee_id.image_1920', compute_sudo=True)
+ image_1024 = fields.Image("Image 1024", related='employee_id.image_1024', compute_sudo=True)
+ image_512 = fields.Image("Image 512", related='employee_id.image_512', compute_sudo=True)
+ image_256 = fields.Image("Image 256", related='employee_id.image_256', compute_sudo=True)
+ image_128 = fields.Image("Image 128", related='employee_id.image_128', compute_sudo=True)
+ avatar_1920 = fields.Image("Avatar", related='employee_id.avatar_1920', compute_sudo=True)
+ avatar_1024 = fields.Image("Avatar 1024", related='employee_id.avatar_1024', compute_sudo=True)
+ avatar_512 = fields.Image("Avatar 512", related='employee_id.avatar_512', compute_sudo=True)
+ avatar_256 = fields.Image("Avatar 256", related='employee_id.avatar_256', compute_sudo=True)
+ avatar_128 = fields.Image("Avatar 128", related='employee_id.avatar_128', compute_sudo=True)
parent_id = fields.Many2one('hr.employee.public', 'Manager', readonly=True)
coach_id = fields.Many2one('hr.employee.public', 'Coach', readonly=True)
user_partner_id = fields.Many2one(related='user_id.partner_id', related_sudo=False, string="User's partner")
- def _compute_image(self):
+ def _search_employee_id(self, operator, value):
+ return [('id', operator, value)]
+
+ def _compute_employee_id(self):
for employee in self:
- # We have to be in sudo to have access to the images
- employee_id = self.sudo().env['hr.employee'].browse(employee.id)
- employee.image_1920 = employee_id.image_1920
- employee.image_1024 = employee_id.image_1024
- employee.image_512 = employee_id.image_512
- employee.image_256 = employee_id.image_256
- employee.image_128 = employee_id.image_128
+ employee.employee_id = self.env['hr.employee'].browse(employee.id)
@api.model
def _get_fields(self):
diff --git a/addons/hr/report/hr_employee_badge.xml b/addons/hr/report/hr_employee_badge.xml
index 0668f54608d..98f01955757 100644
--- a/addons/hr/report/hr_employee_badge.xml
+++ b/addons/hr/report/hr_employee_badge.xml
@@ -26,7 +26,7 @@
-
+
|
diff --git a/addons/hr/static/tests/m2x_avatar_employee_tests.js b/addons/hr/static/tests/m2x_avatar_employee_tests.js
index 99bd0097d59..f1787312b87 100644
--- a/addons/hr/static/tests/m2x_avatar_employee_tests.js
+++ b/addons/hr/static/tests/m2x_avatar_employee_tests.js
@@ -156,10 +156,10 @@ QUnit.module('hr', {}, function () {
assert.strictEqual(kanban.$('.o_kanban_record').text().trim(), '');
assert.containsN(kanban, '.o_m2o_avatar', 4);
- assert.strictEqual(kanban.$('.o_m2o_avatar:nth(0) > img').data('src'), '/web/image/hr.employee.public/11/image_128');
- assert.strictEqual(kanban.$('.o_m2o_avatar:nth(1) > img').data('src'), '/web/image/hr.employee.public/7/image_128');
- assert.strictEqual(kanban.$('.o_m2o_avatar:nth(2) > img').data('src'), '/web/image/hr.employee.public/11/image_128');
- assert.strictEqual(kanban.$('.o_m2o_avatar:nth(3) > img').data('src'), '/web/image/hr.employee.public/23/image_128');
+ assert.strictEqual(kanban.$('.o_m2o_avatar:nth(0) > img').data('src'), '/web/image/hr.employee.public/11/avatar_128');
+ assert.strictEqual(kanban.$('.o_m2o_avatar:nth(1) > img').data('src'), '/web/image/hr.employee.public/7/avatar_128');
+ assert.strictEqual(kanban.$('.o_m2o_avatar:nth(2) > img').data('src'), '/web/image/hr.employee.public/11/avatar_128');
+ assert.strictEqual(kanban.$('.o_m2o_avatar:nth(3) > img').data('src'), '/web/image/hr.employee.public/23/avatar_128');
kanban.destroy();
});
@@ -235,7 +235,7 @@ QUnit.module('hr', {}, function () {
assert.containsN(form, '.o_field_many2manytags.avatar.o_field_widget .badge', 2,
"should have 2 records");
assert.strictEqual(form.$('.o_field_many2manytags.avatar.o_field_widget .badge:first img').data('src'),
- '/web/image/hr.employee.public/11/image_128',
+ '/web/image/hr.employee.public/11/avatar_128',
"should have correct avatar image");
await dom.click(form.$('.o_field_many2manytags.avatar .badge:first .o_m2m_avatar'));
@@ -350,7 +350,7 @@ QUnit.module('hr', {}, function () {
assert.containsN(form, '.o_field_many2manytags.avatar.o_field_widget .badge', 2,
"should have 2 records");
assert.strictEqual(form.$('.o_field_many2manytags.avatar.o_field_widget .badge:first img').data('src'),
- '/web/image/hr.employee.public/11/image_128',
+ '/web/image/hr.employee.public/11/avatar_128',
"should have correct avatar image");
await dom.click(form.$('.o_field_many2manytags.avatar .badge:first .o_m2m_avatar'));
diff --git a/addons/hr/views/hr_employee_public_views.xml b/addons/hr/views/hr_employee_public_views.xml
index a64dae4926b..77a4399f4a1 100644
--- a/addons/hr/views/hr_employee_public_views.xml
+++ b/addons/hr/views/hr_employee_public_views.xml
@@ -40,7 +40,7 @@