diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_livechat/views | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_livechat/views')
| -rw-r--r-- | addons/website_livechat/views/assets.xml | 38 | ||||
| -rw-r--r-- | addons/website_livechat/views/res_config_settings_views.xml | 29 | ||||
| -rw-r--r-- | addons/website_livechat/views/website_livechat.xml | 205 | ||||
| -rw-r--r-- | addons/website_livechat/views/website_livechat_view.xml | 17 | ||||
| -rw-r--r-- | addons/website_livechat/views/website_visitor_views.xml | 148 |
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) > 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> |
