mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-26 17:32:06 +02:00
19.0 vanilla
This commit is contained in:
parent
a1137a1456
commit
e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions
|
|
@ -1,15 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, models
|
||||
from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT
|
||||
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(ResPartner, self)._compute_im_status()
|
||||
super()._compute_im_status()
|
||||
absent_now = self._get_on_leave_ids()
|
||||
for partner in self:
|
||||
if partner.id in absent_now:
|
||||
|
|
@ -17,26 +25,23 @@ class ResPartner(models.Model):
|
|||
partner.im_status = 'leave_online'
|
||||
elif partner.im_status == 'away':
|
||||
partner.im_status = 'leave_away'
|
||||
else:
|
||||
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 mail_partner_format(self, fields=None):
|
||||
"""Override to add the current leave status."""
|
||||
partners_format = super().mail_partner_format(fields=fields)
|
||||
if not fields:
|
||||
fields = {'out_of_office_date_end': True}
|
||||
for partner in self:
|
||||
if 'out_of_office_date_end' in fields:
|
||||
# in the rare case of multi-user partner, return the earliest possible return date
|
||||
dates = partner.mapped('user_ids.leave_date_to')
|
||||
states = partner.mapped('user_ids.current_leave_state')
|
||||
date = sorted(dates)[0] if dates and all(dates) else False
|
||||
state = sorted(states)[0] if states and all(states) else False
|
||||
partners_format.get(partner).update({
|
||||
'out_of_office_date_end': date.strftime(DEFAULT_SERVER_DATE_FORMAT) if state == 'validate' and date else False,
|
||||
})
|
||||
return partners_format
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue