[IMP] hr*: Use correct default employee_id based on company
Followup of https://github.com/odoo/odoo/pull/50982/commits Courtesy of https://github.com/sswapnesh In a multi-company environment `self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)` could be wrong while `employee_id`represents correct employee based on company. https://github.com/odoo/odoo/blob/fb17af76d791488c69eb3829376940b32998d374/addons/hr/models/res_users.py#L13 Making behavior Similar to https://github.com/odoo/odoo/blob/fb17af76d791488c69eb3829376940b32998d374/addons/hr_expense/models/hr_expense.py#L663 closes odoo/odoo#51246 Taskid: 2254687 X-original-commit: d7d1557e7a0f613335a9ca5ca1355d246093f9d1 Related: odoo/enterprise#10599 Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
@@ -10,7 +10,7 @@ class HrAttendance(models.Model):
|
||||
_order = "check_in desc"
|
||||
|
||||
def _default_employee(self):
|
||||
return self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
return self.env.user.employee_id
|
||||
|
||||
employee_id = fields.Many2one('hr.employee', string="Employee", default=_default_employee, required=True, ondelete='cascade', index=True)
|
||||
department_id = fields.Many2one('hr.department', string="Department", related="employee_id.department_id",
|
||||
|
||||
@@ -18,7 +18,7 @@ class HrExpense(models.Model):
|
||||
|
||||
@api.model
|
||||
def _default_employee_id(self):
|
||||
return self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
return self.env.user.employee_id
|
||||
|
||||
@api.model
|
||||
def _default_product_uom_id(self):
|
||||
@@ -35,7 +35,7 @@ class HrExpense(models.Model):
|
||||
res = "['|', ('company_id', '=', False), ('company_id', '=', company_id)]" # Then, domain accepts everything
|
||||
elif self.user_has_groups('hr_expense.group_hr_expense_team_approver') and self.env.user.employee_ids:
|
||||
user = self.env.user
|
||||
employee = user.employee_ids[0]
|
||||
employee = self.env.user.employee_id
|
||||
res = [
|
||||
'|', '|', '|',
|
||||
('department_id.manager_id', '=', employee.id),
|
||||
@@ -44,8 +44,8 @@ class HrExpense(models.Model):
|
||||
('expense_manager_id', '=', user.id),
|
||||
'|', ('company_id', '=', False), ('company_id', '=', employee.company_id.id),
|
||||
]
|
||||
elif self.env.user.employee_ids:
|
||||
employee = self.env.user.employee_ids[0]
|
||||
elif self.env.user.employee_id:
|
||||
employee = self.env.user.employee_id
|
||||
res = [('id', '=', employee.id), '|', ('company_id', '=', False), ('company_id', '=', employee.company_id.id)]
|
||||
return res
|
||||
|
||||
|
||||
@@ -890,7 +890,7 @@ class HolidaysRequest(models.Model):
|
||||
if any(holiday.state != 'confirm' for holiday in self):
|
||||
raise UserError(_('Time off request must be confirmed ("To Approve") in order to approve it.'))
|
||||
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
self.filtered(lambda hol: hol.validation_type == 'both').write({'state': 'validate1', 'first_approver_id': current_employee.id})
|
||||
|
||||
|
||||
@@ -906,7 +906,7 @@ class HolidaysRequest(models.Model):
|
||||
return True
|
||||
|
||||
def action_validate(self):
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
if any(holiday.state not in ['confirm', 'validate1'] and holiday.validation_type != 'no_validation' for holiday in self):
|
||||
raise UserError(_('Time off request must be confirmed in order to approve it.'))
|
||||
|
||||
@@ -1014,7 +1014,7 @@ class HolidaysRequest(models.Model):
|
||||
return True
|
||||
|
||||
def action_refuse(self):
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
if any(holiday.state not in ['draft', 'confirm', 'validate', 'validate1'] for holiday in self):
|
||||
raise UserError(_('Time off request must be confirmed or validated in order to refuse it.'))
|
||||
|
||||
@@ -1044,7 +1044,7 @@ class HolidaysRequest(models.Model):
|
||||
if self.env.is_superuser():
|
||||
return
|
||||
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
is_officer = self.env.user.has_group('hr_holidays.group_hr_holidays_user')
|
||||
is_manager = self.env.user.has_group('hr_holidays.group_hr_holidays_manager')
|
||||
|
||||
@@ -1168,7 +1168,7 @@ class HolidaysRequest(models.Model):
|
||||
def get_unusual_days(self, date_from, date_to=None):
|
||||
# Checking the calendar directly allows to not grey out the leaves taken
|
||||
# by the employee
|
||||
calendar = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1).resource_calendar_id
|
||||
calendar = self.env.user.employee_id.resource_calendar_id
|
||||
if not calendar:
|
||||
return {}
|
||||
dfrom = datetime.combine(fields.Date.from_string(date_from), time.min).replace(tzinfo=UTC)
|
||||
|
||||
@@ -495,14 +495,14 @@ class HolidaysAllocation(models.Model):
|
||||
if any(holiday.state != 'confirm' for holiday in self):
|
||||
raise UserError(_('Allocation request must be confirmed ("To Approve") in order to approve it.'))
|
||||
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
|
||||
self.filtered(lambda hol: hol.validation_type == 'both').write({'state': 'validate1', 'first_approver_id': current_employee.id})
|
||||
self.filtered(lambda hol: not hol.validation_type == 'both').action_validate()
|
||||
self.activity_update()
|
||||
|
||||
def action_validate(self):
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
for holiday in self:
|
||||
if holiday.state not in ['confirm', 'validate1']:
|
||||
raise UserError(_('Allocation request must be confirmed in order to approve it.'))
|
||||
@@ -539,7 +539,7 @@ class HolidaysAllocation(models.Model):
|
||||
return childs
|
||||
|
||||
def action_refuse(self):
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
if any(holiday.state not in ['confirm', 'validate', 'validate1'] for holiday in self):
|
||||
raise UserError(_('Allocation request must be confirmed or validated in order to refuse it.'))
|
||||
|
||||
@@ -557,7 +557,7 @@ class HolidaysAllocation(models.Model):
|
||||
""" Check if target state is achievable. """
|
||||
if self.env.is_superuser():
|
||||
return
|
||||
current_employee = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
if not current_employee:
|
||||
return
|
||||
is_officer = self.env.user.has_group('hr_holidays.group_hr_holidays_user')
|
||||
|
||||
@@ -257,7 +257,7 @@ class HolidaysType(models.Model):
|
||||
elif 'default_employee_id' in self._context:
|
||||
employee_id = self._context['default_employee_id']
|
||||
else:
|
||||
employee_id = self.env['hr.employee'].search([('user_id', '=', self.env.user.id), ('company_id', '=', self.env.company.id)], limit=1).id
|
||||
employee_id = self.env.user.employee_id.id
|
||||
return employee_id
|
||||
|
||||
def _compute_leaves(self):
|
||||
|
||||
@@ -87,7 +87,7 @@ class LeaveReport(models.Model):
|
||||
if 'name' in field_names:
|
||||
if self.user_has_groups('hr_holidays.group_hr_holidays_user'):
|
||||
return
|
||||
current_employee = self.env['hr.employee'].sudo().search([('user_id', '=', self.env.uid)], limit=1)
|
||||
current_employee = self.env.user.employee_id
|
||||
for record in self:
|
||||
emp_id = record._cache.get('employee_id', [False])[0]
|
||||
if emp_id != current_employee.id:
|
||||
|
||||
@@ -81,7 +81,7 @@ class MaintenanceRequest(models.Model):
|
||||
|
||||
@api.returns('self')
|
||||
def _default_employee_get(self):
|
||||
return self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
return self.env.user.employee_id
|
||||
|
||||
employee_id = fields.Many2one('hr.employee', string='Employee', default=_default_employee_get)
|
||||
owner_user_id = fields.Many2one(compute='_compute_owner', store=True)
|
||||
@@ -120,7 +120,7 @@ class MaintenanceRequest(models.Model):
|
||||
email = tools.email_split(msg.get('from')) and tools.email_split(msg.get('from'))[0] or False
|
||||
user = self.env['res.users'].search([('login', '=', email)], limit=1)
|
||||
if user:
|
||||
employee = self.env['hr.employee'].search([('user_id', '=', user.id)], limit=1)
|
||||
employee = self.env.user.employee_id
|
||||
if employee:
|
||||
custom_values['employee_id'] = employee and employee[0].id
|
||||
return super(MaintenanceRequest, self).message_new(msg, custom_values=custom_values)
|
||||
|
||||
Reference in New Issue
Block a user