62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
from odoo import api, fields, models
|
|
|
|
|
|
class Im_LivechatChannel(models.Model):
|
|
_inherit = 'im_livechat.channel'
|
|
|
|
ai_agent_count = fields.Integer(string='Number of AI Agents', compute='_compute_ai_agent_count')
|
|
|
|
@api.depends('rule_ids.ai_agent_id')
|
|
def _compute_ai_agent_count(self):
|
|
count_by_channel = dict(self.env['im_livechat.channel.rule']._read_group(
|
|
[('channel_id', 'in', self.ids)], ['channel_id'], ['ai_agent_id:count_distinct']))
|
|
for channel in self:
|
|
channel.ai_agent_count = count_by_channel.get(channel, 0)
|
|
|
|
def _is_livechat_available(self):
|
|
is_livechat_available = super()._is_livechat_available()
|
|
return is_livechat_available or self.ai_agent_count
|
|
|
|
def _get_agent_member_vals(self, /, *, last_interest_dt, now, chatbot_script, operator_partner, operator_model, **kwargs):
|
|
agent_member_vals = super()._get_agent_member_vals(
|
|
last_interest_dt=last_interest_dt,
|
|
now=now,
|
|
chatbot_script=chatbot_script,
|
|
operator_partner=operator_partner,
|
|
operator_model=operator_model,
|
|
**kwargs
|
|
)
|
|
agent_member_vals['ai_agent_id'] = kwargs.get('ai_agent', False)
|
|
return agent_member_vals
|
|
|
|
def _get_operator_info(self, /, *, lang, country_id, previous_operator_id=None, chatbot_script_id=None, **kwargs):
|
|
operator_info = super()._get_operator_info(
|
|
lang=lang,
|
|
country_id=country_id,
|
|
previous_operator_id=previous_operator_id,
|
|
chatbot_script_id=chatbot_script_id,
|
|
**kwargs
|
|
)
|
|
# sudo() => access is managed through _is_user_access_allowed.
|
|
ai_agent = self.env['ai.agent'].sudo().search([('id', '=', kwargs.get('ai_agent_id'))])
|
|
if ai_agent and ai_agent._is_user_access_allowed():
|
|
operator_info.update({
|
|
'operator_model': 'ai.agent',
|
|
'ai_agent': ai_agent,
|
|
'operator_partner': ai_agent.partner_id,
|
|
})
|
|
return operator_info
|
|
|
|
def _get_channel_name(self, /, *, visitor_user=None, guest=None, agent, chatbot_script, operator_model, **kwargs):
|
|
is_ai_agent = operator_model == 'ai.agent'
|
|
if is_ai_agent is False:
|
|
return super()._get_channel_name(
|
|
visitor_user=visitor_user,
|
|
guest=guest,
|
|
agent=agent,
|
|
chatbot_script=chatbot_script,
|
|
operator_model=operator_model,
|
|
**kwargs
|
|
)
|
|
return kwargs['ai_agent'].name
|