diff options
| author | Jérome Maes <jem@openerp.com> | 2015-01-08 11:34:38 +0100 |
|---|---|---|
| committer | Jérome Maes <jem@openerp.com> | 2015-01-08 12:28:22 +0100 |
| commit | abcb165d97dc90cbb878dd0f6ad3e35937816c8d (patch) | |
| tree | 12001df481e64160316a2e39cdda4ac9525d115c /addons | |
| parent | ade60d54bbbc5c9315346a8ede7f79dc6d4eb80a (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__.py | 3 | ||||
| -rw-r--r-- | addons/website_livechat/__openerp__.py | 5 | ||||
| -rw-r--r-- | addons/website_livechat/controllers/__init__.py | 1 | ||||
| -rw-r--r-- | addons/website_livechat/controllers/main.py | 42 | ||||
| -rw-r--r-- | addons/website_livechat/models/__init__.py | 3 | ||||
| -rw-r--r-- | addons/website_livechat/models/im_livechat.py | 10 | ||||
| -rw-r--r-- | addons/website_livechat/models/website.py | 20 | ||||
| -rw-r--r-- | addons/website_livechat/security/ir.model.access.csv | 2 | ||||
| -rw-r--r-- | addons/website_livechat/security/website_livechat.xml | 0 | ||||
| -rw-r--r-- | addons/website_livechat/views/website_livechat.xml | 152 | ||||
| -rw-r--r-- | addons/website_livechat/views/website_livechat_view.xml | 17 |
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) > 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> |
