# Copyright 2017 LasLabs Inc. # Copyright 2019 Rubén Bravo # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). from odoo import api, fields, models, _ from odoo.exceptions import ValidationError class ResLang(models.Model): _inherit = 'res.lang' default_uom_ids = fields.Many2many( string='Default Units', comodel_name='uom.uom', ) @api.multi @api.constrains('default_uom_ids') def _check_default_uom_ids(self): for record in self: categories = set(record.default_uom_ids.mapped('category_id')) if len(categories) != len(record.default_uom_ids): raise ValidationError(_( 'Only one default unit of measure per category may ' 'be selected.', )) @api.model def default_uom_by_category(self, category_name, lang=None): """Return the default UoM for language for the input UoM Category. Args: category_name (str): Name of the UoM category to get the default for. lang (ResLang or str, optional): Recordset or code of the language to get the default for. Will use the current user language if omitted. Returns: ProductUom: Unit of measure representing the default, if set. Empty recordset otherwise. """ if lang is None: lang = self.env.user.lang if isinstance(lang, str): lang = self.env['res.lang'].search([ ('code', '=', lang), ], limit=1, ) results = lang.default_uom_ids.filtered( lambda r: r.category_id.name == category_name, ) return results[:1]