You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
55 lines
1.7 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2017 LasLabs Inc.
|
|
# 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='product.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, basestring):
|
|
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]
|