diff --git a/addons/portal_rating/static/src/js/portal_chatter.js b/addons/portal_rating/static/src/js/portal_chatter.js
index 450b52be20a..d9107a2b24c 100644
--- a/addons/portal_rating/static/src/js/portal_chatter.js
+++ b/addons/portal_rating/static/src/js/portal_chatter.js
@@ -138,13 +138,14 @@ PortalChatter.include({
if (!result['rating_stats']) {
return;
}
+ const self = this;
const ratingData = {
'avg': Math.round(result['rating_stats']['avg'] * 100) / 100,
'percent': [],
};
- _.each(_.keys(result['rating_stats']['percent']).reverse(), function (rating) {
+ _.each(_.sortBy(_.keys(result['rating_stats']['percent'])).reverse(), function (rating) {
ratingData['percent'].push({
- 'num': rating,
+ 'num': self.roundToHalf(rating),
'percent': utils.round_precision(result['rating_stats']['percent'][rating], 0.01),
});
});
diff --git a/addons/portal_rating/static/src/xml/portal_tools.xml b/addons/portal_rating/static/src/xml/portal_tools.xml
index c52e4ab33c6..1b38cadf85c 100644
--- a/addons/portal_rating/static/src/xml/portal_tools.xml
+++ b/addons/portal_rating/static/src/xml/portal_tools.xml
@@ -4,7 +4,10 @@
-
+
diff --git a/addons/rating/models/rating_mixin.py b/addons/rating/models/rating_mixin.py
index 2b8ec44136d..3018e28762b 100644
--- a/addons/rating/models/rating_mixin.py
+++ b/addons/rating/models/rating_mixin.py
@@ -6,7 +6,7 @@ import operator
from odoo import api, fields, models, tools
from odoo.addons.rating.models import rating_data
from odoo.osv import expression
-from odoo.tools.float_utils import float_compare
+from odoo.tools.float_utils import float_compare, float_round
class RatingMixin(models.AbstractModel):
@@ -224,17 +224,19 @@ class RatingMixin(models.AbstractModel):
base_domain = expression.AND([self._rating_domain(), [('rating', '>=', 1)]])
if domain:
base_domain += domain
- data = self.env['rating.rating'].read_group(base_domain, ['rating'], ['rating', 'res_id'])
+ rg_data = self.env['rating.rating'].read_group(base_domain, ['rating'], ['rating', 'res_id'])
# init dict with all posible rate value, except 0 (no value for the rating)
values = dict.fromkeys(range(1, 6), 0)
- values.update((d['rating'], d['rating_count']) for d in data)
+ for rating_rg in rg_data:
+ rating_val_round = float_round(rating_rg['rating'], precision_digits=1)
+ values[rating_val_round] = values.get(rating_val_round, 0) + rating_rg['rating_count']
# add other stats
if add_stats:
rating_number = sum(values.values())
result = {
'repartition': values,
'avg': sum(float(key * values[key]) for key in values) / rating_number if rating_number > 0 else 0,
- 'total': sum(it['rating_count'] for it in data),
+ 'total': sum(it['rating_count'] for it in rg_data),
}
return result
return values
diff --git a/addons/website_slides/views/rating_rating_views.xml b/addons/website_slides/views/rating_rating_views.xml
index 247e0eed7c9..e94addc7d59 100644
--- a/addons/website_slides/views/rating_rating_views.xml
+++ b/addons/website_slides/views/rating_rating_views.xml
@@ -12,7 +12,7 @@
-
+