Relational data in server formatter are: - for one relation: None/false or object - for many relations: list of objects or list of commands The commands were: - 'insert': to add a new item in a relational field - 'unlink': to remove an item from a relational field - 'insert-and-unlink': to remove an item from a relational field - 'clear': to remove all items from relational field There was a slight nuance between 'unlink' and 'insert-and-unlink' at some point, but it becomes irrelevant with current code of model. The name of the commands were hard to grasp what they actually mean for the many relations. This commit improves it by renaming 'insert' by 'ADD' and the 2 'unlink' commands by 'DELETE'. This makes it more apparent that the data in 'ADD' refers to data of record to add in the relation, while 'DELETE' refers to data of record to delete from the relation. The 'clear' has been replaced by `False` value instead of a command. Part-of: odoo/odoo#136308
46 lines
2.2 KiB
Python
46 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResUsersSettingsVolumes(models.Model):
|
|
""" Represents the volume of the sound that the user of user_setting_id will receive from partner_id. """
|
|
_name = 'res.users.settings.volumes'
|
|
_description = 'User Settings Volumes'
|
|
|
|
user_setting_id = fields.Many2one('res.users.settings', required=True, ondelete='cascade', index=True)
|
|
partner_id = fields.Many2one('res.partner', ondelete='cascade', index=True)
|
|
guest_id = fields.Many2one('res.partner', ondelete='cascade', index=True)
|
|
volume = fields.Float(default=0.5, help="Ranges between 0.0 and 1.0, scale depends on the browser implementation")
|
|
|
|
def init(self):
|
|
self.env.cr.execute("CREATE UNIQUE INDEX IF NOT EXISTS res_users_settings_volumes_partner_unique ON %s (user_setting_id, partner_id) WHERE partner_id IS NOT NULL" % self._table)
|
|
self.env.cr.execute("CREATE UNIQUE INDEX IF NOT EXISTS res_users_settings_volumes_guest_unique ON %s (user_setting_id, guest_id) WHERE guest_id IS NOT NULL" % self._table)
|
|
|
|
_sql_constraints = [
|
|
("partner_or_guest_exists", "CHECK((partner_id IS NOT NULL AND guest_id IS NULL) OR (partner_id IS NULL AND guest_id IS NOT NULL))", "A volume setting must have a partner or a guest."),
|
|
]
|
|
|
|
@api.depends('user_setting_id', 'partner_id', 'guest_id')
|
|
def _compute_display_name(self):
|
|
for rec in self:
|
|
rec.display_name = f'{rec.user_setting_id.user_id.name} - {rec.partner_id.name or rec.guest_id.name}'
|
|
|
|
def _discuss_users_settings_volume_format(self):
|
|
return [{
|
|
'id': volume_setting.id,
|
|
'volume': volume_setting.volume,
|
|
'guest_id': {
|
|
'id': volume_setting.guest_id.id,
|
|
'name': volume_setting.guest_id.name,
|
|
} if volume_setting.guest_id else False,
|
|
'partner_id': {
|
|
'id': volume_setting.partner_id.id,
|
|
'name': volume_setting.partner_id.name,
|
|
} if volume_setting.partner_id else False,
|
|
'user_setting_id': {
|
|
'id': volume_setting.user_setting_id.id,
|
|
},
|
|
} for volume_setting in self]
|