summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorJérome Maes <jem@openerp.com>2015-01-08 11:34:38 +0100
committerJérome Maes <jem@openerp.com>2015-01-08 12:28:22 +0100
commitabcb165d97dc90cbb878dd0f6ad3e35937816c8d (patch)
tree12001df481e64160316a2e39cdda4ac9525d115c /addons
parentade60d54bbbc5c9315346a8ede7f79dc6d4eb80a (diff)
[IMP] website_livechat : make it depend on rating_livechat. It now propose to display livechat channel on website pages, with its ratings and description.
Diffstat (limited to 'addons')
-rw-r--r--addons/website_livechat/__init__.py3
-rw-r--r--addons/website_livechat/__openerp__.py5
-rw-r--r--addons/website_livechat/controllers/__init__.py1
-rw-r--r--addons/website_livechat/controllers/main.py42
-rw-r--r--addons/website_livechat/models/__init__.py3
-rw-r--r--addons/website_livechat/models/im_livechat.py10
-rw-r--r--addons/website_livechat/models/website.py20
-rw-r--r--addons/website_livechat/security/ir.model.access.csv2
-rw-r--r--addons/website_livechat/security/website_livechat.xml0
-rw-r--r--addons/website_livechat/views/website_livechat.xml152
-rw-r--r--addons/website_livechat/views/website_livechat_view.xml17
11 files changed, 236 insertions, 19 deletions
diff --git a/addons/website_livechat/__init__.py b/addons/website_livechat/__init__.py
index 2c4eac3f855..9f86759e32b 100644
--- a/addons/website_livechat/__init__.py
+++ b/addons/website_livechat/__init__.py
@@ -1 +1,2 @@
-import models \ No newline at end of file
+import controllers
+import models
diff --git a/addons/website_livechat/__openerp__.py b/addons/website_livechat/__openerp__.py
index 1e87f362778..91f182480f8 100644
--- a/addons/website_livechat/__openerp__.py
+++ b/addons/website_livechat/__openerp__.py
@@ -7,6 +7,7 @@
Odoo Website LiveChat
========================
For website built with Odoo CMS, this module include a chat button on your Website, and allow your visitors to chat with your collabarators.
+It also will include the feedback tool for the livechat, and web pages to display your channel and its ratings on the website.
""",
'author': 'OpenERP SA',
'depends': ['website', 'im_livechat'],
@@ -14,6 +15,8 @@ For website built with Odoo CMS, this module include a chat button on your Websi
'data': [
'views/website_livechat.xml',
'views/res_config.xml',
- 'website_livechat_data.xml'
+ 'views/website_livechat_view.xml',
+ 'security/ir.model.access.csv',
+ 'website_livechat_data.xml',
],
}
diff --git a/addons/website_livechat/controllers/__init__.py b/addons/website_livechat/controllers/__init__.py
new file mode 100644
index 00000000000..8ee9bae18d9
--- /dev/null
+++ b/addons/website_livechat/controllers/__init__.py
@@ -0,0 +1 @@
+import main
diff --git a/addons/website_livechat/controllers/main.py b/addons/website_livechat/controllers/main.py
new file mode 100644
index 00000000000..83ad0fced2f
--- /dev/null
+++ b/addons/website_livechat/controllers/main.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+from openerp import http
+from openerp.http import request
+
+
+class website_rating_livechat(http.Controller):
+
+ @http.route('/livechat/', type='http', auth="public", website=True)
+ def channel_list(self, **kw):
+ # display the list of the channel
+ channels = request.env['im_livechat.channel'].sudo().search([('website_published','=', True)])
+ values = {
+ 'channels' : channels
+ }
+ return request.website.render('website_livechat.channel_list_page', values)
+
+
+ @http.route('/livechat/channel/<model("im_livechat.channel"):channel>', type='http', auth='public', website=True)
+ def channel_rating(self, channel, **kw):
+ # expose the ratings of the channel
+ if channel.website_published:
+
+ # get the last 100 ratings and the repartition per grade
+ ratings = request.env['rating.rating'].search([('res_model','=','im_chat.session'), ('res_id', 'in', channel.sudo().session_ids.ids)], order='create_date desc', limit=100)
+ repartition = channel.sudo().session_ids.rating_get_grades()
+
+ # compute percentage
+ percentage = dict.fromkeys(['great', 'okay', 'bad'], 0)
+ for grade in repartition:
+ percentage[grade] = repartition[grade] * 100 / sum(repartition.values()) if sum(repartition.values()) else 0
+
+ # the value dict to render the template
+ values = {
+ 'channel' : channel,
+ 'ratings' : ratings,
+ 'team' : channel.sudo().user_ids,
+ 'percentage' : percentage
+ }
+ return request.website.render("website_livechat.channel_page", values)
+ else:
+ return request.website.render('website.403')
diff --git a/addons/website_livechat/models/__init__.py b/addons/website_livechat/models/__init__.py
index b8b239729b6..2f372141da0 100644
--- a/addons/website_livechat/models/__init__.py
+++ b/addons/website_livechat/models/__init__.py
@@ -1 +1,2 @@
-import website \ No newline at end of file
+import website
+import im_livechat
diff --git a/addons/website_livechat/models/im_livechat.py b/addons/website_livechat/models/im_livechat.py
new file mode 100644
index 00000000000..805858eddf3
--- /dev/null
+++ b/addons/website_livechat/models/im_livechat.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+from openerp import models, fields
+
+
+class im_livechat_channel(models.Model):
+
+ _inherit = 'im_livechat.channel'
+
+ website_published = fields.Boolean("Website published", default=False, help="If checked, the channel and its ratings will be display on your website")
+ website_description = fields.Html("Website description", default=False, help="Description of the channel displayed on the website page")
diff --git a/addons/website_livechat/models/website.py b/addons/website_livechat/models/website.py
index 3e3df1c5bdc..22a2636f7b2 100644
--- a/addons/website_livechat/models/website.py
+++ b/addons/website_livechat/models/website.py
@@ -1,15 +1,17 @@
-from openerp.osv import osv, fields
-class website(osv.osv):
+from openerp import fields, models
+
+class website(models.Model):
+
_inherit = "website"
- _columns = {
- 'channel_id': fields.many2one('im_livechat.channel', string="Channel"),
- }
+ channel_id = fields.Many2one('im_livechat.channel', string='Live Chat Channel')
+
+
+class website_config_settings(models.TransientModel):
-class website_config_settings(osv.osv_memory):
_inherit = 'website.config.settings'
- _columns = {
- 'channel_id': fields.related('website_id', 'channel_id', type='many2one', relation='im_livechat.channel', string='Live Chat Channel'),
- }
+ channel_id = fields.Many2one('im_livechat.channel', string='Live Chat Channel', related='website_id.channel_id')
+
+
diff --git a/addons/website_livechat/security/ir.model.access.csv b/addons/website_livechat/security/ir.model.access.csv
new file mode 100644
index 00000000000..56fe27b6c49
--- /dev/null
+++ b/addons/website_livechat/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_im_livechat_channel_public,im_livechat.channel.public,im_livechat.model_im_livechat_channel,base.group_public,1,0,0,0 \ No newline at end of file
diff --git a/addons/website_livechat/security/website_livechat.xml b/addons/website_livechat/security/website_livechat.xml
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/addons/website_livechat/security/website_livechat.xml
diff --git a/addons/website_livechat/views/website_livechat.xml b/addons/website_livechat/views/website_livechat.xml
index 63f0d334327..dab68cbd414 100644
--- a/addons/website_livechat/views/website_livechat.xml
+++ b/addons/website_livechat/views/website_livechat.xml
@@ -2,13 +2,151 @@
<openerp>
<data>
-<template id="header" inherit_id="website.layout" name="LiveChat Import (internal) Scripts">
- <xpath expr="//body" position="inside">
- <t t-if="website and website.channel_id">
- <t t-raw="website.channel_id.script_internal"/>
- </t>
- </xpath>
-</template>
+ <template id="header" inherit_id="website.layout" name="LiveChat Import (internal) Scripts">
+ <xpath expr="//body" position="inside">
+ <t t-if="website and website.channel_id">
+ <t t-raw="website.channel_id.script_internal"/>
+ </t>
+ </xpath>
+ </template>
+
+ <!-- Layout add footer -->
+ <template id="header_footer_custom" inherit_id="website.footer_default" name="Footer Rating Livechat Link">
+ <xpath expr="//ul[@id='products']" position="inside">
+ <li><a href="/livechat/">Livechat Support</a></li>
+ </xpath>
+ </template>
+
+ <!-- Page Layout -->
+ <template id="channel_page" name="Livechat Channel Satisfaction Page" page="True">
+ <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-md-8">
+ <t t-if="len(ratings) &gt; 0">
+ <div class="row">
+ <h3>Statistics</h3>
+ <div class="row">
+ <div class="col-md-3">
+ <div class="panel panel-warming">
+ <div class="panel-body text-center bg-warning">
+ <img src="/rating/static/src/img/rating_5.png" style="height:50px"/>
+ </div>
+ <div class="panel-body text-center bg-warning">
+ <h2 style="margin: 0">
+ <b style="font-size: 50px">
+ <t t-esc="percentage['okay']" />
+ </b>
+ <small>%</small>
+ </h2>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-4">
+ <div class="panel panel-success">
+ <div class="panel-body text-center bg-success">
+ <img src="/rating/static/src/img/rating_10.png" style="height:60px"/>
+ </div>
+ <div class="panel-body text-center bg-success">
+ <h2 style="margin: 0">
+ <b style="font-size: 60px">
+ <t t-esc="percentage['great']" />
+ </b>
+ <small>%</small>
+ </h2>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-3">
+ <div class="panel panel-danger">
+ <div class="panel-body text-center bg-danger">
+ <img src="/rating/static/src/img/rating_0.png" style="height:40px"/>
+ </div>
+ <div class="panel-body text-center bg-danger">
+ <h2 style="margin: 0">
+ <b style="font-size: 40px">
+ <t t-esc="percentage['bad']" />
+ </b>
+ <small>%</small>
+ </h2>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12 mb32">
+ <h3>The <t t-esc="len(ratings)"/> last feedbacks</h3>
+ <div style="text-align:center">
+ <t t-foreach="ratings" t-as="rating" class="media">
+ <img t-attf-src='/rating/static/src/img/rating_#{int(rating.rating)}.png' t-att-alt="rating.res_name"/>
+ <t t-if="(rating_index+1) % 10 == 0">
+ <br/>
+ </t>
+ </t>
+ </div>
+ </div>
+ </div>
+ </t>
+ <t t-if="len(ratings) == 0">
+ <h4 style="text-align:center">This is no rating for this channel for now.</h4>
+ </t>
+ </div>
+ <div class="col-md-4 mb32">
+ <h3>The Team</h3>
+ <t t-foreach="team" t-as="user" class="media">
+ <div class="media">
+ <div class="pull-left">
+ <img t-att-src="'data:image/png;base64,' + user.image_small" class="img-rounded" t-att-alt="user.name"/>
+ </div>
+ <div class="media-body">
+ <h5><t t-esc="user.name"/></h5>
+ </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"/>
+ <div class="container">
+ <h1>Livechat Support Channels</h1>
+ <div class="row mt32 mb32">
+ <t t-if="not len(channels)">
+ <div class="col-md-6 col-md-offset-3">
+ There is no public livechat channel to show.
+ </div>
+ </t>
+ <t t-if="len(channels)">
+ <div class="col-md-6 col-md-offset-3">
+ <t t-foreach="channels" t-as="channel">
+ <div class="media">
+ <a class="pull-left" t-attf-href="/livechat/channel/#{ slug(channel)}">
+ <img t-att-src="'data:image/png;base64,' + channel.image_small" t-att-alt="channel.name" />
+ </a>
+ <div class="media-body">
+ <h4 class="media-heading"><t t-esc="channel.name"/></h4>
+ </div>
+ </div>
+ </t>
+ </div>
+ </t>
+ </div>
+ </div>
+ <div class="oe_structure"/>
+ </div>
+ </t>
+ </template>
</data>
</openerp>
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 00000000000..013ffa49cf2
--- /dev/null
+++ b/addons/website_livechat/views/website_livechat_view.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record id="im_livechat_channel_form_view" model="ir.ui.view">
+ <field name="name">im_livechat.channel.form.with.website_published</field>
+ <field name="model">im_livechat.channel</field>
+ <field name="inherit_id" ref="im_livechat.support_channel_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//group[@string='Options']" position="inside">
+ <field name="website_published" widget="website_button"/>
+ </xpath>
+ </field>
+ </record>
+
+ </data>
+</openerp>