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 @@ - Not satisfied + Okay - Highly Dissatisfied + Dissatisfied 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?

]]>