52 lines
2.4 KiB
Python
52 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import http
|
|
from odoo.http import request
|
|
from odoo.osv import expression
|
|
|
|
from odoo.addons.portal.controllers import mail
|
|
|
|
|
|
class PortalChatter(mail.PortalChatter):
|
|
|
|
def _portal_post_filter_params(self):
|
|
fields = super(PortalChatter, self)._portal_post_filter_params()
|
|
fields += ['rating_value', 'rating_feedback']
|
|
return fields
|
|
|
|
def _portal_rating_stats(self, res_model, res_id, **kwargs):
|
|
# get the rating statistics for the record
|
|
if kwargs.get('rating_include'):
|
|
record = request.env[res_model].browse(res_id)
|
|
if hasattr(record, 'rating_get_stats'):
|
|
return {'rating_stats': record.sudo().rating_get_stats()}
|
|
return {}
|
|
|
|
@http.route()
|
|
def portal_chatter_post(self, res_model, res_id, message, attachment_ids='', attachment_tokens='', **kwargs):
|
|
if kwargs.get('rating_value'):
|
|
kwargs['rating_feedback'] = kwargs.pop('rating_feedback', message)
|
|
return super(PortalChatter, self).portal_chatter_post(res_model, res_id, message, attachment_ids=attachment_ids, attachment_tokens=attachment_tokens, **kwargs)
|
|
|
|
@http.route()
|
|
def portal_chatter_init(self, res_model, res_id, domain=False, limit=False, **kwargs):
|
|
result = super(PortalChatter, self).portal_chatter_init(res_model, res_id, domain=domain, limit=limit, **kwargs)
|
|
result.update(self._portal_rating_stats(res_model, res_id, **kwargs))
|
|
return result
|
|
|
|
@http.route()
|
|
def portal_message_fetch(self, res_model, res_id, domain=False, limit=False, offset=False, **kw):
|
|
# add 'rating_include' in context, to fetch them in portal_message_format
|
|
if kw.get('rating_include'):
|
|
request.update_context(rating_include=True)
|
|
result = super(PortalChatter, self).portal_message_fetch(res_model, res_id, domain=domain, limit=limit, offset=offset, **kw)
|
|
result.update(self._portal_rating_stats(res_model, res_id, **kw))
|
|
return result
|
|
|
|
def _setup_portal_message_fetch_extra_domain(self, data):
|
|
domains = [super()._setup_portal_message_fetch_extra_domain(data)]
|
|
if data.get('rating_value', False) is not False:
|
|
domains.append([('rating_value', '=', float(data['rating_value']))])
|
|
return expression.AND(domains)
|