RATIONALE
Channel model is a mail.thread enabled model behaving strangely with followers,
notifications and discuss. Its code should however be simplified to be more
self contained and avoid unwanted side effects on other models.
PURPOSE
Remove channel ability to follow records as it mainly adds noise without a lot
of added value. Simplify channel notification flow by using directly members
and not a delegation through a channel self-following trick. Remove followers
being channels and posting with added listeners being channels.
SPECIFICATIONS
In this commit we force messages to belong to a single document using
``model`` / ``res_id`` pair. It is not possible anymore to link a message
to channels using ``channel_ids``. A message belongs to a document and
is displayed in that document's chatter.
This change implies modifying a lot of domains, notably in chatter. Indeed
discuss for channels does not use ``('channel_ids', 'in', [3])`` domains.
They now use ``('model', '=', 'mail.channel'), ('res_id', 'in', [3])`` like
other documents fetching their messages.
This commit also removes ``channel_message_ids`` field on ``mail.channel``
model. As channels are now considered as standard documents they will use
``message_ids`` field like all other documents. Linking a channel on a message
is possible only as a link in message from now on. It is not possible to push
it into a channel anymore (no more listener channels, no more channel link).
Finally a global cleaning also linked to all previous commits is done.
LINKS
Task ID-2070632 (main task)
Task ID-2419762 (followup task)
COM PR odoo/odoo#62859
ENT PR odoo/enterprise#15172
UPG PR odoo/upgrade#2005
165 lines
8.5 KiB
XML
165 lines
8.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo><data>
|
|
<record id="website_visitor_livechat_session_action" model="ir.actions.act_window">
|
|
<field name="name">Visitor's Sessions</field>
|
|
<field name="res_model">mail.channel</field>
|
|
<field name="view_mode">tree,form</field>
|
|
<field name="view_id" ref="im_livechat.mail_channel_view_tree"/>
|
|
<field name="domain">[('livechat_visitor_id', '=', active_id), ('message_ids', '!=', False)]</field>
|
|
<field name="context">{
|
|
'search_default_livechat_visitor_id': [active_id],
|
|
'default_livechat_visitor_id': active_id,
|
|
}</field>
|
|
</record>
|
|
|
|
<record id="website_visitor_livechat_session_action_tree" model="ir.actions.act_window.view">
|
|
<field name="sequence">1</field>
|
|
<field name="view_mode">tree</field>
|
|
<field name="view_id" ref="im_livechat.mail_channel_view_tree"/>
|
|
<field name="act_window_id" ref="website_livechat.website_visitor_livechat_session_action"/>
|
|
</record>
|
|
|
|
<record id="website_visitor_livechat_session_action_form" model="ir.actions.act_window.view">
|
|
<field name="sequence">2</field>
|
|
<field name="view_mode">form</field>
|
|
<field name="view_id" ref="im_livechat.mail_channel_view_form"/>
|
|
<field name="act_window_id" ref="website_livechat.website_visitor_livechat_session_action"/>
|
|
</record>
|
|
|
|
<!-- website visitor views -->
|
|
<record id="website_visitor_view_kanban" model="ir.ui.view">
|
|
<field name="name">website.visitor.view.kanban.inherit.website.livechat</field>
|
|
<field name="model">website.visitor</field>
|
|
<field name="inherit_id" ref="website.website_visitor_view_kanban"/>
|
|
<field name="arch" type="xml">
|
|
<field name="page_ids" position="after">
|
|
<field name="livechat_operator_id"/>
|
|
</field>
|
|
<xpath expr="//div[hasclass('w_visitor_kanban_actions')]" position="before">
|
|
<div>Chats<span class="float-right font-weight-bold"><field name="session_count"/></span></div>
|
|
<div t-if="record.livechat_operator_id.raw_value">
|
|
Speaking With
|
|
<div name="livechat_operator_id"
|
|
class="o_field_many2one_avatar o_field_widget font-weight-bold float-right d-inline-block">
|
|
<img t-attf-src="/web/image/res.partner/#{record.livechat_operator_id.raw_value}/image_128"
|
|
alt="Operator Avatar" class="o_m2o_avatar"/>
|
|
<field name="livechat_operator_name"/>
|
|
</div>
|
|
</div>
|
|
<t t-else="">
|
|
<br attrs="{'invisible': ['|', ('livechat_operator_id', '!=', False), ('is_connected', '=', False)]}"/>
|
|
</t>
|
|
</xpath>
|
|
<xpath expr="//div[hasclass('w_visitor_kanban_actions_ungrouped')]" position="before">
|
|
<div class="col mx-2">
|
|
<b>
|
|
<field name="session_count"/>
|
|
</b>
|
|
<div>Chats</div>
|
|
</div>
|
|
<div class="col mx-2">
|
|
<div t-if="record.livechat_operator_id.raw_value"
|
|
class="o_field_many2one_avatar o_field_widget font-weight-bold" name="livechat_operator_id">
|
|
<img t-attf-src="/web/image/res.partner/#{record.livechat_operator_id.raw_value}/image_128"
|
|
alt="Operator Avatar" class="o_m2o_avatar"/>
|
|
<field name="livechat_operator_name"/>
|
|
</div>
|
|
<div t-if="record.livechat_operator_id.raw_value">Speaking With</div>
|
|
</div>
|
|
</xpath>
|
|
<xpath expr="//div[hasclass('w_visitor_kanban_actions')]" position="inside">
|
|
<button name="action_send_chat_request" type="object"
|
|
class="btn btn-secondary"
|
|
attrs="{'invisible': ['|', ('livechat_operator_id', '!=', False), ('is_connected', '=', False)]}">
|
|
Chat
|
|
</button>
|
|
</xpath>
|
|
<xpath expr="//div[hasclass('w_visitor_kanban_actions_ungrouped')]" position="inside">
|
|
<button name="action_send_chat_request" type="object"
|
|
class="btn btn-secondary border"
|
|
attrs="{'invisible': ['|', ('livechat_operator_id', '!=', False), ('is_connected', '=', False)]}">
|
|
Chat
|
|
</button>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="website_visitor_view_form" model="ir.ui.view">
|
|
<field name="name">website.visitor.view.form.inherit.website.livechat</field>
|
|
<field name="model">website.visitor</field>
|
|
<field name="inherit_id" ref="website.website_visitor_view_form"/>
|
|
<field name="arch" type="xml">
|
|
<xpath expr="//header" position="inside">
|
|
<button name="action_send_chat_request" string="Send chat request" type="object" class="oe_highlight"
|
|
attrs="{'invisible': ['|', ('livechat_operator_id', '!=', False), ('is_connected', '=', False)]}"/>
|
|
</xpath>
|
|
<xpath expr="//group[@id='general_info']" position="before">
|
|
<group id="livechat_info" attrs="{'invisible': [('livechat_operator_id', '=', False)]}">
|
|
<field name="livechat_operator_id" widget="many2one_avatar"/>
|
|
</group>
|
|
</xpath>
|
|
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
|
|
<button name="%(website_visitor_livechat_session_action)d" type="action" class="oe_stat_button" icon="fa-comment"
|
|
attrs="{'invisible': [('session_count', '=', 0)]}">
|
|
<field name="session_count" widget="statinfo" string="Chats"/>
|
|
</button>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="website_visitor_view_tree" model="ir.ui.view">
|
|
<field name="name">website.visitor.view.tree.inherit.website.livechat</field>
|
|
<field name="model">website.visitor</field>
|
|
<field name="inherit_id" ref="website.website_visitor_view_tree"/>
|
|
<field name="arch" type="xml">
|
|
<xpath expr="//field[@name='email']" position="after">
|
|
<field name="livechat_operator_id" optional="hide"/>
|
|
<button name="action_send_chat_request" string="Chat" type="object" icon="fa-comments"
|
|
attrs="{'invisible': ['|', ('livechat_operator_id', '!=', False), ('is_connected', '=', False)]}"/>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="website_visitor_view_search" model="ir.ui.view">
|
|
<field name="name">website.visitor.view.search.website.livechat</field>
|
|
<field name="model">website.visitor</field>
|
|
<field name="inherit_id" ref="website.website_visitor_view_search"/>
|
|
<field name="arch" type="xml">
|
|
<xpath expr="//filter[@name='filter_is_connected']" position="after">
|
|
<separator/>
|
|
<filter string="Available" name="filter_not_in_conversation" domain="[('livechat_operator_id', '=', False)]"/>
|
|
<filter string="In Conversation" name="filter_in_conversation" domain="[('livechat_operator_id', '!=', False)]"/>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="website_livechat_send_chat_request_action_server" model="ir.actions.server">
|
|
<field name="name">Send Chat Requests</field>
|
|
<field name="type">ir.actions.server</field>
|
|
<field name="model_id" ref="model_website_visitor"/>
|
|
<field name="binding_model_id" ref="model_website_visitor"/>
|
|
<field name="binding_view_types">list</field>
|
|
<field name="state">code</field>
|
|
<field name="code">
|
|
if records:
|
|
action = records.action_send_chat_request()
|
|
</field>
|
|
</record>
|
|
|
|
<record id="website.website_visitors_action" model="ir.actions.act_window">
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Wait for visitors to come to your website to see their history.</p>
|
|
<p>Interact with them by sending them messages.</p>
|
|
</field>
|
|
</record>
|
|
|
|
<menuitem
|
|
id="website_livechat_visitor_menu"
|
|
name="Visitors"
|
|
parent="im_livechat.menu_livechat_root"
|
|
action="website.website_visitors_action"
|
|
groups="im_livechat.im_livechat_group_user"
|
|
sequence="15"/>
|
|
</data></odoo>
|