* = calendar, im_livechat, rating, snailmail, test_discuss_full, test_mail,
website_livechat
Distinction between "replace" and "insert-and-replace" can be guessed based on
the type of the provided data.
task-2957295
closes odoo/odoo#98404
Related: odoo/enterprise#30580
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import datetime
|
|
|
|
from odoo import api, fields, models, modules, _
|
|
from pytz import timezone, UTC
|
|
|
|
|
|
class Users(models.Model):
|
|
_inherit = 'res.users'
|
|
|
|
def _systray_get_calendar_event_domain(self):
|
|
tz = self.env.user.tz
|
|
start_dt = datetime.datetime.utcnow()
|
|
if tz:
|
|
start_date = timezone(tz).localize(start_dt).astimezone(UTC).date()
|
|
else:
|
|
start_date = datetime.date.today()
|
|
end_dt = datetime.datetime.combine(start_date, datetime.time.max)
|
|
if tz:
|
|
end_dt = timezone(tz).localize(end_dt).astimezone(UTC)
|
|
|
|
return ['&', '|',
|
|
'&',
|
|
'|',
|
|
['start', '>=', fields.Datetime.to_string(start_dt)],
|
|
['stop', '>=', fields.Datetime.to_string(start_dt)],
|
|
['start', '<=', fields.Datetime.to_string(end_dt)],
|
|
'&',
|
|
['allday', '=', True],
|
|
['start_date', '=', fields.Date.to_string(start_date)],
|
|
('attendee_ids.partner_id', '=', self.env.user.partner_id.id)]
|
|
|
|
@api.model
|
|
def systray_get_activities(self):
|
|
res = super(Users, self).systray_get_activities()
|
|
|
|
meetings_lines = self.env['calendar.event'].search_read(
|
|
self._systray_get_calendar_event_domain(),
|
|
['id', 'start', 'name', 'allday', 'attendee_status'],
|
|
order='start')
|
|
meetings_lines = [line for line in meetings_lines if line['attendee_status'] != 'declined']
|
|
if meetings_lines:
|
|
meeting_label = _("Today's Meetings")
|
|
meetings_systray = {
|
|
'id': self.env['ir.model']._get('calendar.event').id,
|
|
'type': 'meeting',
|
|
'name': meeting_label,
|
|
'model': 'calendar.event',
|
|
'icon': modules.module.get_module_icon(self.env['calendar.event']._original_module),
|
|
'meetings': meetings_lines,
|
|
}
|
|
res.insert(0, meetings_systray)
|
|
|
|
return res
|