portal_rating/models/rating_rating.py

57 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models, exceptions, _
class Rating(models.Model):
_inherit = 'rating.rating'
# Adding information for comment a rating message
publisher_comment = fields.Text("Publisher comment")
publisher_id = fields.Many2one('res.partner', 'Commented by',
ondelete='set null', readonly=True)
publisher_datetime = fields.Datetime("Commented on", readonly=True)
@api.model_create_multi
def create(self, values_list):
for values in values_list:
self._synchronize_publisher_values(values)
ratings = super().create(values_list)
if any(rating.publisher_comment for rating in ratings):
ratings._check_synchronize_publisher_values()
return ratings
def write(self, values):
self._synchronize_publisher_values(values)
return super().write(values)
def _check_synchronize_publisher_values(self):
""" Either current user is a member of website restricted editor group
(done here by fetching the group record then using has_group, as it may
not be defined and we do not want to make a complete bridge module just
for that). Either write access on document is granted. """
editor_group = self.env['ir.model.data']._xmlid_to_res_id('website.group_website_restricted_editor')
if editor_group and self.env.user.has_group('website.group_website_restricted_editor'):
return
for model, model_data in self._classify_by_model().items():
records = self.env[model].browse(model_data['record_ids'])
try:
records.check_access_rights('write')
records.check_access_rule('write')
except exceptions.AccessError as e:
raise exceptions.AccessError(
_("Updating rating comment require write access on related record")
) from e
def _synchronize_publisher_values(self, values):
""" Force publisher partner and date if not given in order to have
coherent values. Those fields are readonly as they are not meant
to be modified manually, behaving like a tracking. """
if values.get('publisher_comment'):
self._check_synchronize_publisher_values()
if not values.get('publisher_datetime'):
values['publisher_datetime'] = fields.Datetime.now()
if not values.get('publisher_id'):
values['publisher_id'] = self.env.user.partner_id.id
return values