This commit fixes all issues detected by the new pylint
gettext-variable test.
It converts some calls to the new syntax
_("Foo %s", bar)
to progressively migrate the code to the new syntax.
A few calls were not technically incorrect but still detected by the
linter.
_("Foo" +
"Bar")
has been converted to
_("Foo"
"Bar")
as it has the same effect and make sure the argument is of type
asteroid.Const instead of BinOp).
closes odoo/odoo#53683
Related: odoo/enterprise#11467
Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
79 lines
4.3 KiB
Python
79 lines
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime, timedelta
|
|
import json
|
|
|
|
from odoo import models, api, fields, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class WebsiteVisitor(models.Model):
|
|
_inherit = 'website.visitor'
|
|
|
|
livechat_operator_id = fields.Many2one('res.partner', compute='_compute_livechat_operator_id', store=True, string='Speaking with')
|
|
livechat_operator_name = fields.Char('Operator Name', related="livechat_operator_id.name")
|
|
mail_channel_ids = fields.One2many('mail.channel', 'livechat_visitor_id',
|
|
string="Visitor's livechat channels", readonly=True)
|
|
session_count = fields.Integer('# Sessions', compute="_compute_session_count")
|
|
|
|
@api.depends('mail_channel_ids.livechat_active', 'mail_channel_ids.livechat_operator_id')
|
|
def _compute_livechat_operator_id(self):
|
|
results = self.env['mail.channel'].search_read(
|
|
[('livechat_visitor_id', 'in', self.ids), ('livechat_active', '=', True)],
|
|
['livechat_visitor_id', 'livechat_operator_id']
|
|
)
|
|
visitor_operator_map = {int(result['livechat_visitor_id'][0]): int(result['livechat_operator_id'][0]) for result in results}
|
|
for visitor in self:
|
|
visitor.livechat_operator_id = visitor_operator_map.get(visitor.id, False)
|
|
|
|
@api.depends('mail_channel_ids')
|
|
def _compute_session_count(self):
|
|
sessions = self.env['mail.channel'].search([('livechat_visitor_id', 'in', self.ids)])
|
|
session_count = dict.fromkeys(self.ids, 0)
|
|
for session in sessions.filtered(lambda c: c.channel_message_ids):
|
|
session_count[session.livechat_visitor_id.id] += 1
|
|
for visitor in self:
|
|
visitor.session_count = session_count.get(visitor.id, 0)
|
|
|
|
def action_send_chat_request(self):
|
|
""" Send a chat request to website_visitor(s).
|
|
This creates a chat_request and a mail_channel with livechat active flag.
|
|
But for the visitor to get the chat request, the operator still has to speak to the visitor.
|
|
The visitor will receive the chat request the next time he navigates to a website page.
|
|
(see _handle_webpage_dispatch for next step)"""
|
|
# check if visitor is available
|
|
unavailable_visitors_count = self.env['mail.channel'].search_count([('livechat_visitor_id', 'in', self.ids), ('livechat_active', '=', True)])
|
|
if unavailable_visitors_count:
|
|
raise UserError(_('Recipients are not available. Please refresh the page to get latest visitors status.'))
|
|
# check if user is available as operator
|
|
for website in self.mapped('website_id'):
|
|
if not website.channel_id:
|
|
raise UserError(_('No Livechat Channel allows you to send a chat request for website %s.', website.name))
|
|
self.website_id.channel_id.write({'user_ids': [(4, self.env.user.id)]})
|
|
# Create chat_requests and linked mail_channels
|
|
mail_channel_vals_list = []
|
|
for visitor in self:
|
|
operator = self.env.user
|
|
country = visitor.country_id
|
|
visitor_name = "%s (%s)" % (visitor.display_name, country.name) if country else visitor.display_name
|
|
mail_channel_vals_list.append({
|
|
'channel_partner_ids': [(4, operator.partner_id.id)],
|
|
'livechat_channel_id': visitor.website_id.channel_id.id,
|
|
'livechat_operator_id': self.env.user.partner_id.id,
|
|
'channel_type': 'livechat',
|
|
'public': 'private',
|
|
'email_send': False,
|
|
'country_id': country.id,
|
|
'anonymous_name': visitor_name,
|
|
'name': ', '.join([visitor_name, operator.livechat_username if operator.livechat_username else operator.name]),
|
|
'livechat_visitor_id': visitor.id,
|
|
'livechat_active': True,
|
|
})
|
|
if mail_channel_vals_list:
|
|
mail_channels = self.env['mail.channel'].create(mail_channel_vals_list)
|
|
# Open empty chatter to allow the operator to start chatting with the visitor.
|
|
mail_channels_info = mail_channels.channel_info('channel_minimize')
|
|
for mail_channel_info in mail_channels_info:
|
|
self.env['bus.bus'].sendone((self._cr.dbname, 'res.partner', operator.partner_id.id), mail_channel_info)
|