mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-26 03:32:02 +02:00
47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models, fields
|
|
from odoo.addons.mail.tools.discuss import Store
|
|
|
|
|
|
class ResPartner(models.Model):
|
|
_inherit = 'res.partner'
|
|
|
|
leave_date_to = fields.Date(compute="_compute_leave_date_to")
|
|
|
|
def _compute_leave_date_to(self):
|
|
for partner in self:
|
|
# in the rare case of multi-user partner, return the earliest
|
|
# possible return date
|
|
dates = partner.user_ids.mapped("leave_date_to")
|
|
partner.leave_date_to = min(dates) if dates and all(dates) else False
|
|
|
|
def _compute_im_status(self):
|
|
super()._compute_im_status()
|
|
absent_now = self._get_on_leave_ids()
|
|
for partner in self:
|
|
if partner.id in absent_now:
|
|
if partner.im_status == 'online':
|
|
partner.im_status = 'leave_online'
|
|
elif partner.im_status == 'away':
|
|
partner.im_status = 'leave_away'
|
|
elif partner.im_status == 'busy':
|
|
partner.im_status = 'leave_busy'
|
|
elif partner.im_status == 'offline':
|
|
partner.im_status = 'leave_offline'
|
|
|
|
@api.model
|
|
def _get_on_leave_ids(self):
|
|
return self.env['res.users']._get_on_leave_ids(partner=True)
|
|
|
|
def _to_store_defaults(self, target):
|
|
defaults = super()._to_store_defaults(target)
|
|
if target.is_internal(self.env):
|
|
# sudo: res.users - to access other company's portal user leave date
|
|
defaults.append(
|
|
Store.One(
|
|
"main_user_id",
|
|
[Store.Many("employee_ids", "leave_date_to", sudo=True), "partner_id"],
|
|
),
|
|
)
|
|
return defaults
|