summaryrefslogtreecommitdiff
path: root/addons/website_livechat/controllers
diff options
context:
space:
mode:
authorNicolas Martinelli <nim@odoo.com>2018-06-07 09:42:14 +0200
committerNicolas Martinelli <nim-odoo@users.noreply.github.com>2018-06-07 13:09:24 +0200
commitb0a29532ff49e9fb9d1100adfb1616cf403cc91d (patch)
tree03e55c3877357f6d16831e67fcfdfe6eec1a2aa0 /addons/website_livechat/controllers
parentab8d7c936065458b2efbda77dd88e52f1c0461ac (diff)
[FIX] website_livechat: use only consumed ratings
The percentage computation of statistics only uses the consumed ratings >= 1 (through `rating_get_repartition`), while the initial search of the first 100 ratings doesn't have this restriction. It leads to an inconsistency between the ratings displayed and the percentages computed. Moreover, if there are less than 100 ratings, the percentage might not be a natural number => use of float and round. opw-1854863
Diffstat (limited to 'addons/website_livechat/controllers')
-rw-r--r--addons/website_livechat/controllers/main.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/addons/website_livechat/controllers/main.py b/addons/website_livechat/controllers/main.py
index 753e4eef1ae..31af89c2e63 100644
--- a/addons/website_livechat/controllers/main.py
+++ b/addons/website_livechat/controllers/main.py
@@ -20,13 +20,17 @@ class WebsiteLivechat(http.Controller):
@http.route('/livechat/channel/<model("im_livechat.channel"):channel>', type='http', auth='public', website=True)
def channel_rating(self, channel, **kw):
# get the last 100 ratings and the repartition per grade
- ratings = request.env['rating.rating'].search([('res_model', '=', 'mail.channel'), ('res_id', 'in', channel.sudo().channel_ids.ids)], order='create_date desc', limit=100)
- repartition = channel.sudo().channel_ids.rating_get_grades()
+ domain = [
+ ('res_model', '=', 'mail.channel'), ('res_id', 'in', channel.sudo().channel_ids.ids),
+ ('consumed', '=', True), ('rating', '>=', 1),
+ ]
+ ratings = request.env['rating.rating'].search(domain, order='create_date desc', limit=100)
+ repartition = channel.sudo().channel_ids.rating_get_grades(domain=domain)
# 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
+ percentage[grade] = round(repartition[grade] * 100.0 / sum(repartition.values()), 1) if sum(repartition.values()) else 0
# the value dict to render the template
values = {