diff --git a/addons/im_livechat/models/im_livechat_channel.py b/addons/im_livechat/models/im_livechat_channel.py
index 8a8ac0fcdd8..60d7dd34bca 100644
--- a/addons/im_livechat/models/im_livechat_channel.py
+++ b/addons/im_livechat/models/im_livechat_channel.py
@@ -98,7 +98,7 @@ class ImLivechatChannel(models.Model):
:returns : the ir.action 'action_view_rating' with the correct domain
"""
self.ensure_one()
- action = self.env['ir.actions.act_window']._for_xml_id('im_livechat.rating_rating_action_view_livechat_rating')
+ action = self.env['ir.actions.act_window']._for_xml_id('im_livechat.rating_rating_action_livechat')
action['domain'] = [('parent_res_id', '=', self.id), ('parent_res_model', '=', 'im_livechat.channel')]
return action
@@ -183,7 +183,7 @@ class ImLivechatChannel(models.Model):
self.env.cr.execute("""SELECT COUNT(DISTINCT c.id), c.livechat_operator_id
FROM mail_channel c
LEFT OUTER JOIN mail_message m ON c.id = m.res_id AND m.model = 'mail.channel'
- WHERE c.channel_type = 'livechat'
+ WHERE c.channel_type = 'livechat'
AND c.livechat_operator_id in %s
AND m.create_date > ((now() at time zone 'UTC') - interval '30 minutes')
GROUP BY c.livechat_operator_id
diff --git a/addons/im_livechat/static/src/legacy/public_livechat.js b/addons/im_livechat/static/src/legacy/public_livechat.js
index 4284b2f07d8..46db2d8cd81 100644
--- a/addons/im_livechat/static/src/legacy/public_livechat.js
+++ b/addons/im_livechat/static/src/legacy/public_livechat.js
@@ -505,11 +505,13 @@ var Feedback = Widget.extend({
rate: this.rating,
reason: reason,
};
- this.dp.add(session.rpc('/im_livechat/feedback', args)).then(function () {
+ this.dp.add(session.rpc('/im_livechat/feedback', args)).then(function (response) {
var emoji = RATING_TO_EMOJI[self.rating] || "??";
- var content = _.str.sprintf(_t("Rating: %s"), emoji);
- if (reason) {
- content += " \n" + reason;
+ if (!reason) {
+ var content = _.str.sprintf(_t("Rating: %s"), emoji);
+ }
+ else {
+ var content = "Rating reason: \n" + reason;
}
self.trigger('send_message', { content: content, isFeedback: true });
});
@@ -555,6 +557,7 @@ var Feedback = Widget.extend({
// only display textearea if bad smiley selected
if (this.rating !== 5) {
+ this._sendFeedback();
this.$('.o_livechat_rating_reason').show();
} else {
this.$('.o_livechat_rating_reason').hide();
diff --git a/addons/im_livechat/views/im_livechat_channel_views.xml b/addons/im_livechat/views/im_livechat_channel_views.xml
index 7713c298aec..00817c8fdb9 100644
--- a/addons/im_livechat/views/im_livechat_channel_views.xml
+++ b/addons/im_livechat/views/im_livechat_channel_views.xml
@@ -50,7 +50,7 @@
Sessions
-
+
diff --git a/addons/im_livechat/views/rating_views.xml b/addons/im_livechat/views/rating_views.xml
index 91b8d1a7b85..33ff0bf13b1 100644
--- a/addons/im_livechat/views/rating_views.xml
+++ b/addons/im_livechat/views/rating_views.xml
@@ -1,6 +1,19 @@
+
+ rating.rating.form.livechat
+ rating.rating
+
+ 32
+ primary
+
+
+
+
+
+
+
rating.rating.search.livechat
rating.rating
@@ -22,11 +35,11 @@
-
+
Ratings for livechat channel
rating.rating
kanban,tree,graph,pivot,form
- [('parent_res_model','=','im_livechat.channel'), ('consumed','=',True)]
+ [('parent_res_model', '=', 'im_livechat.channel'), ('consumed','=',True)]
@@ -36,6 +49,20 @@
{'search_default_rating_last_7_days': 1}
+
+
+ kanban
+
+
+
+
+
+ 5
+ form
+
+
+
+
Customer Ratings
rating.rating
@@ -49,4 +76,18 @@
+
+ 1
+ kanban
+
+
+
+
+
+ 5
+ form
+
+
+
+
diff --git a/addons/project/data/mail_template_data.xml b/addons/project/data/mail_template_data.xml
index 347d4ae4d9c..f00739b3251 100644
--- a/addons/project/data/mail_template_data.xml
+++ b/addons/project/data/mail_template_data.xml
@@ -66,12 +66,12 @@
-
+
|
-
+
|
diff --git a/addons/project/tests/test_project_flow.py b/addons/project/tests/test_project_flow.py
index 175221890b9..d18a5e61834 100644
--- a/addons/project/tests/test_project_flow.py
+++ b/addons/project/tests/test_project_flow.py
@@ -247,7 +247,7 @@ class TestProjectFlow(TestProjectCommon):
first_task.invalidate_cache()
self.assertEqual(rating_good.rating_text, 'satisfied')
- self.assertEqual(rating_bad.rating_text, 'not_satisfied')
+ self.assertEqual(rating_bad.rating_text, 'okay')
self.assertEqual(first_task.rating_count, 1, "Task should have only one rating associated, since one is not consumed")
self.assertEqual(rating_good.parent_res_id, self.project_pigs.id)
diff --git a/addons/project/views/project_views.xml b/addons/project/views/project_views.xml
index 136f60d6271..b0124f4c1bd 100644
--- a/addons/project/views/project_views.xml
+++ b/addons/project/views/project_views.xml
@@ -943,8 +943,8 @@
-
-
+
+
diff --git a/addons/project/views/rating_views.xml b/addons/project/views/rating_views.xml
index 08685e770ed..9f080db002b 100644
--- a/addons/project/views/rating_views.xml
+++ b/addons/project/views/rating_views.xml
@@ -83,7 +83,7 @@
=', (datetime.datetime.combine(context_today() + relativedelta(days=-30), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))]"
/>
diff --git a/addons/rating/controllers/main.py b/addons/rating/controllers/main.py
index a80d131baa3..b4155faa2ee 100644
--- a/addons/rating/controllers/main.py
+++ b/addons/rating/controllers/main.py
@@ -39,9 +39,9 @@ class Rating(http.Controller):
if not rating:
return request.not_found()
rate_names = {
- 5: _("satisfied"),
- 3: _("not satisfied"),
- 1: _("highly dissatisfied")
+ 5: _("Satisfied"),
+ 3: _("Okay"),
+ 1: _("Dissatisfied")
}
rating.write({'rating': rate, 'consumed': True})
lang = rating.partner_id.lang or get_lang(request.env).code
diff --git a/addons/rating/models/rating.py b/addons/rating/models/rating.py
index 1c86c6acc25..79bded7373f 100644
--- a/addons/rating/models/rating.py
+++ b/addons/rating/models/rating.py
@@ -56,8 +56,8 @@ class Rating(models.Model):
rating_image = fields.Binary('Image', compute='_compute_rating_image')
rating_text = fields.Selection([
('satisfied', 'Satisfied'),
- ('not_satisfied', 'Not satisfied'),
- ('highly_dissatisfied', 'Highly dissatisfied'),
+ ('okay', 'Okay'),
+ ('dissatisfied', 'Dissatisfied'),
('no_rating', 'No Rating yet')], string='Rating', store=True, compute='_compute_rating_text', readonly=True)
feedback = fields.Text('Comment', help="Reason of the rating")
message_id = fields.Many2one(
@@ -119,9 +119,9 @@ class Rating(models.Model):
if rating.rating >= RATING_LIMIT_SATISFIED:
rating.rating_text = 'satisfied'
elif rating.rating >= RATING_LIMIT_OK:
- rating.rating_text = 'not_satisfied'
+ rating.rating_text = 'okay'
elif rating.rating >= RATING_LIMIT_MIN:
- rating.rating_text = 'highly_dissatisfied'
+ rating.rating_text = 'dissatisfied'
else:
rating.rating_text = 'no_rating'
diff --git a/addons/rating/views/rating_rating_views.xml b/addons/rating/views/rating_rating_views.xml
index 58c5510868b..ecd150e7023 100644
--- a/addons/rating/views/rating_rating_views.xml
+++ b/addons/rating/views/rating_rating_views.xml
@@ -6,7 +6,7 @@
rating.rating
-
+
@@ -138,8 +138,8 @@
-
-
+
+
diff --git a/doc/reference/mixins.rst b/doc/reference/mixins.rst
index f1bcd234160..ac5d0614b1a 100644
--- a/doc/reference/mixins.rst
+++ b/doc/reference/mixins.rst
@@ -1031,8 +1031,8 @@ links to the rating object. A very basic email template could look like this:
How satsified are you?
]]>