summaryrefslogtreecommitdiff
path: root/addons/website_livechat/views
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_livechat/views
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_livechat/views')
-rw-r--r--addons/website_livechat/views/assets.xml38
-rw-r--r--addons/website_livechat/views/res_config_settings_views.xml29
-rw-r--r--addons/website_livechat/views/website_livechat.xml205
-rw-r--r--addons/website_livechat/views/website_livechat_view.xml17
-rw-r--r--addons/website_livechat/views/website_visitor_views.xml148
5 files changed, 437 insertions, 0 deletions
diff --git a/addons/website_livechat/views/assets.xml b/addons/website_livechat/views/assets.xml
new file mode 100644
index 00000000..7fe3cb2c
--- /dev/null
+++ b/addons/website_livechat/views/assets.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+<data>
+
+ <template id="assets_backend" name="website livechat assets" inherit_id="web.assets_backend">
+ <xpath expr="script[last()]" position="after">
+ <script type="text/javascript" src="/website_livechat/static/src/bugfix/bugfix.js"/>
+ <script type="text/javascript" src="/website_livechat/static/src/components/discuss/discuss.js"/>
+ <script type="text/javascript" src="/website_livechat/static/src/components/visitor_banner/visitor_banner.js"/>
+ <script type="text/javascript" src="/website_livechat/static/src/models/messaging_notification_handler/messaging_notification_handler.js"/>
+ <script type="text/javascript" src="/website_livechat/static/src/models/thread/thread.js"/>
+ <script type="text/javascript" src="/website_livechat/static/src/models/visitor/visitor.js"/>
+ </xpath>
+ <xpath expr="link[last()]" position="after">
+ <link rel="stylesheet" type="text/scss" href="/website_livechat/static/src/bugfix/bugfix.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/website_livechat/static/src/components/visitor_banner/visitor_banner.scss"/>
+ </xpath>
+ </template>
+
+ <template id="assets_tests" name="Website Livechat Assets Tests" inherit_id="web.assets_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/website_livechat/static/tests/tours/website_livechat_common.js"></script>
+ <script type="text/javascript" src="/website_livechat/static/tests/tours/website_livechat_rating.js"></script>
+ <script type="text/javascript" src="/website_livechat/static/tests/tours/website_livechat_request.js"></script>
+ </xpath>
+ </template>
+
+ <template id="qunit_suite" name="website_livechat_tests" inherit_id="web.qunit_suite_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/website_livechat/static/src/bugfix/bugfix_tests.js"/>
+ <script type="text/javascript" src="/website_livechat/static/src/components/discuss/discuss_tests.js"/>
+ <script type="text/javascript" src="/website_livechat/static/src/models/messaging_notification_handler/messaging_notification_handler_tests.js"/>
+ <script type="text/javascript" src="/website_livechat/static/tests/helpers/mock_models.js"/>
+ <script type="text/javascript" src="/website_livechat/static/tests/helpers/mock_server.js"/>
+ </xpath>
+ </template>
+</data>
+</odoo>
diff --git a/addons/website_livechat/views/res_config_settings_views.xml b/addons/website_livechat/views/res_config_settings_views.xml
new file mode 100644
index 00000000..0b72077c
--- /dev/null
+++ b/addons/website_livechat/views/res_config_settings_views.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+ <record id="res_config_settings_view_form" model="ir.ui.view">
+ <field name="name">res.config.settings.view.form.inherit.website.livechat</field>
+ <field name="model">res.config.settings</field>
+ <field name="inherit_id" ref="website.res_config_settings_view_form"/>
+ <field name="arch" type="xml">
+ <div id="google_maps_setting" position="after">
+ <div class="col-12 col-lg-6 o_setting_box" id="live_chat_install_setting">
+ <div class="o_setting_right_pane">
+ <span class="o_form_label">Live Chat</span>
+ <span class="fa fa-lg fa-globe" title="Values set here are website-specific." groups="website.group_multi_website"/>
+ <div class="text-muted">
+ Live chat channel of your website
+ </div>
+ <div class="content-group mt16">
+ <div class="row">
+ <label class="col-lg-3 o_light_label" string="Channel" for="channel_id"/>
+ <field name="channel_id" class="oe_inline"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </field>
+ </record>
+
+</odoo>
diff --git a/addons/website_livechat/views/website_livechat.xml b/addons/website_livechat/views/website_livechat.xml
new file mode 100644
index 00000000..49080d84
--- /dev/null
+++ b/addons/website_livechat/views/website_livechat.xml
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data>
+ <!--
+ Integrate Livechat in Common Frontend for Website
+ Template registering all the assets required to execute the Livechat from a page containing Odoo
+ -->
+ <template id="assets_frontend" name="im_livechat assets frontend" inherit_id="website.assets_frontend">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/mail/static/src/js/utils.js"></script>
+ <script type="text/javascript" src="/website_livechat/static/src/bugfix/public_bugfix.js"></script>
+ <script type="text/javascript" src="/im_livechat/static/src/legacy/public_livechat.js"></script>
+ <!--Chat Request-->
+ <script type="text/javascript" src="/website_livechat/static/src/legacy/public_livechat.js"></script>
+ <!--Stylesheets-->
+ <link rel="stylesheet" type="text/scss" href="/im_livechat/static/src/legacy/public_livechat.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/website_livechat/static/src/bugfix/public_bugfix.scss"/>
+ </xpath>
+ </template>
+
+ <template id="assets_editor_inherit_website_livechat" inherit_id="website.assets_editor" name="website_livechat Assets Editor">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/website_livechat/static/src/js/website_livechat.editor.js"></script>
+ </xpath>
+ </template>
+
+ <template id="loader" inherit_id="website.layout" name="Livechat : include loader on Website">
+ <xpath expr="//div[@id='wrapwrap']" position="after">
+ <t t-if="website and website.channel_id and not no_livechat">
+ <script>
+ <t t-call="im_livechat.loader">
+ <t t-set="info" t-value="website.get_livechat_channel_info()"/>
+ </t>
+ </script>
+ </t>
+ </xpath>
+ </template>
+
+ <!-- Page Layout -->
+ <template id="channel_page" name="Livechat Channel Satisfaction Page">
+ <t t-call="website.layout">
+ <div id="wrap">
+ <div class="container">
+ <h1><span>Livechat Channel</span> <small t-field="channel.name" /></h1>
+ <div t-field="channel.website_description" class="oe_structure mt16" />
+ <div class="row mt32">
+ <div class="col-lg-8">
+ <t t-if="len(ratings) &gt; 0">
+ <div class="row">
+ <div class="col-lg-12 mb32">
+ <h3>Statistics</h3>
+ <div class="row">
+ <div class="col-lg-4 d-flex justify-content-end flex-column">
+ <div class="card bg-success text-white" t-attf-style="height: #{160 + int(percentage['great'])}px;">
+ <div class="card-body text-center">
+ <img src="/rating/static/src/img/rating_5.png" style="height:40px" alt="Happy face"/>
+ </div>
+ <div class="card-body text-center">
+ <h2 style="margin: 0">
+ <b style="font-size: 30px">
+ <t t-esc="percentage['great']" />
+ </b>
+ <small>%</small>
+ </h2>
+ </div>
+ </div>
+ </div>
+ <div class="col-lg-4 d-flex justify-content-end flex-column">
+ <div class="card bg-warning text-white" t-attf-style="height: #{160 + int(percentage['okay'])}px;">
+ <div class="card-body text-center">
+ <img src="/rating/static/src/img/rating_3.png" style="height:40px" alt="Neutral face"/>
+ </div>
+ <div class="card-body text-center">
+ <h2 style="margin: 0">
+ <b style="font-size: 30px">
+ <t t-esc="percentage['okay']" />
+ </b>
+ <small>%</small>
+ </h2>
+ </div>
+ </div>
+ </div>
+ <div class="col-lg-4 d-flex justify-content-end flex-column">
+ <div class="card bg-danger text-white" t-attf-style="height: #{160 + int(percentage['bad'])}px;">
+ <div class="card-body text-center">
+ <img src="/rating/static/src/img/rating_1.png" style="height:40px" alt="Sad face"/>
+ </div>
+ <div class="card-body text-center">
+ <h2 style="margin: 0">
+ <b style="font-size: 30px">
+ <t t-esc="percentage['bad']" />
+ </b>
+ <small>%</small>
+ </h2>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-lg-12 mb32">
+ <h3>The <t t-esc="len(ratings)"/> last feedbacks</h3>
+ <div>
+ <t t-foreach="ratings" t-as="rating">
+ <img t-attf-src='/rating/static/src/img/rating_#{int(rating.rating)}.png' t-att-alt="rating.res_name" width="48px" height="48px"/>
+ <t t-if="(rating_index+1) % 5 == 0">
+ <br/>
+ </t>
+ </t>
+ </div>
+ </div>
+ </div>
+ </t>
+ <t t-if="len(ratings) == 0">
+ <h4 style="text-align:center">There are no ratings for this channel for now.</h4>
+ </t>
+ </div>
+ <div class="col-lg-4 mb32">
+ <h3>The Team</h3>
+ <t t-foreach="team" t-as="user">
+ <div class="media mt-3">
+ <img t-if="user.image_128" t-att-src="image_data_uri(user.image_128)" class="o_image_64_cover rounded o_livechat_operator_avatar" t-att-alt="user.livechat_username or user.name"/>
+ <div class="media-body">
+ <h5>
+ <t t-if="user.livechat_username">
+ <t t-esc="user.livechat_username"/>
+ </t>
+ <t t-else="">
+ <t t-esc="user.name"/>
+ </t>
+ </h5>
+ <div class="col-lg-12">
+ <div class="row">
+ <t t-if="user.partner_id.id in ratings_per_user">
+ <div class="col-lg-4 pl-0 pr-0">
+ <img t-attf-src='/rating/static/src/img/rating_5.png' alt="Great" width="16px" height="16px"/>
+ <span class="align-middle"><t t-esc="ratings_per_user[user.partner_id.id]['great']"/>%</span>
+ </div>
+ <div class="col-lg-4 pl-0 pr-0">
+ <img t-attf-src='/rating/static/src/img/rating_3.png' alt="Okay" width="16px" height="16px"/>
+ <span class="align-middle"><t t-esc="ratings_per_user[user.partner_id.id]['okay']"/>%</span>
+ </div>
+ <div class="col-lg-4 pl-0 pr-0">
+ <img t-attf-src='/rating/static/src/img/rating_1.png' alt="Bad" width="16px" height="16px"/>
+ <span class="align-middle"><t t-esc="ratings_per_user[user.partner_id.id]['bad']"/>%</span>
+ </div>
+ </t>
+ <t t-else="">
+ <div class="col-lg-12 pl-0 pr-0 o_livechat_no_rating">Not rated yet</div>
+ </t>
+ </div>
+ </div>
+ </div>
+ </div>
+ </t>
+ </div>
+ </div>
+ </div>
+ </div>
+ </t>
+ </template>
+
+
+ <template id="channel_list_page" name="Livechat Channel List Page">
+ <t t-call="website.layout">
+ <div id="wrap">
+ <div class="oe_structure" id="oe_structure_website_livechat_channel_list_1"/>
+ <div class="container">
+ <h1 class="pt-3">Livechat Support Channels</h1>
+ <div class="row mt32 mb32">
+ <t t-if="not len(channels)">
+ <div class="col-lg-6 offset-lg-3">
+ There are no public livechat channels to show.
+ </div>
+ </t>
+ <t t-if="len(channels)">
+ <div class="col-lg-6">
+ <t t-foreach="channels" t-as="channel">
+ <div t-attf-class="media#{' mt-3' if channel_index else ''}">
+ <a t-attf-href="/livechat/channel/#{ slug(channel)}">
+ <img t-att-src="channel.image_128 and image_data_uri(channel.image_128) or '/web/static/src/img/placeholder.png'" t-att-alt="channel.name" class="o_image_64_cover"/>
+ </a>
+ <div class="media-body h-100 my-auto">
+ <h4><t t-esc="channel.name"/></h4>
+ </div>
+ </div>
+ </t>
+ </div>
+ </t>
+ </div>
+ </div>
+ <div class="oe_structure" id="oe_structure_website_livechat_channel_list_2"/>
+ </div>
+ </t>
+ </template>
+
+ <!-- User Navbar -->
+ <template id="user_navbar_inherit_website_livechat" inherit_id="website.user_navbar">
+ <xpath expr="//div[@id='o_new_content_menu_choices']//div[@name='module_website_livechat']" position="replace">
+ </xpath>
+ </template>
+
+ </data>
+</odoo>
diff --git a/addons/website_livechat/views/website_livechat_view.xml b/addons/website_livechat/views/website_livechat_view.xml
new file mode 100644
index 00000000..f160d68c
--- /dev/null
+++ b/addons/website_livechat/views/website_livechat_view.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data>
+
+ <record id="im_livechat_channel_form_view" model="ir.ui.view">
+ <field name="name">im_livechat.channel.form.inherit.website_livechat</field>
+ <field name="model">im_livechat.channel</field>
+ <field name="inherit_id" ref="im_livechat.im_livechat_channel_view_form"/>
+ <field name="arch" type="xml">
+ <div name="button_box" position="inside">
+ <field name="is_published" widget="website_redirect_button"/>
+ </div>
+ </field>
+ </record>
+
+ </data>
+</odoo>
diff --git a/addons/website_livechat/views/website_visitor_views.xml b/addons/website_livechat/views/website_visitor_views.xml
new file mode 100644
index 00000000..9fe94e75
--- /dev/null
+++ b/addons/website_livechat/views/website_visitor_views.xml
@@ -0,0 +1,148 @@
+<?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), ('channel_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 t-if="record.livechat_operator_id.raw_value">
+ <span class="fa fa-comments mr-2"/>Speaking With <span class="font-weight-bold"><field name="livechat_operator_name"/></span>
+ </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" >
+ <b>
+ <field name="livechat_operator_name" t-if="record.livechat_operator_id.raw_value"/>
+ <span t-else="">-</span>
+ </b>
+ <div>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">
+ <field name="livechat_operator_id"/>
+ </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="Sessions"/>
+ </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='is_connected']" position="after">
+ <field name="livechat_operator_id"/>
+ <button name="action_send_chat_request" string="Send chat request" 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="//search" position="inside">
+ <filter string="Busy" name="in_conversation" domain="[('livechat_operator_id', '!=', False)]"/>
+ <filter string="Available" name="not_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>