From 2d32ff4bb8a31184285cb979e8c491949249d4ca Mon Sep 17 00:00:00 2001 From: jem-odoo Date: Fri, 2 Mar 2018 10:42:07 +0100 Subject: [PATCH] [IMP] uom: measurement type on category In order to restrict some uom field to some uom category, it is required to add a measurement type on uom.category. Also, this will lessen the use of master data. Some technical justifications: - measure_type is not required, to allow people creating their own uom.category. Those ones will not interfere with addons business. - measure_type is unique: we restrict to only one category containing time, weight, ... in order to avoid mismatch category during conversion. (2 different weight categories can not be converted). - measure_type on uom.uom is stored: to allow search and domain on field, we need to store it. Usually, UoM are not updated every day, and the number of uom in a database is not that important. To illustrate this mecanism, a domain is added on 'project_time_mode_id', in project module. This field is use as timesheet default uom, and we obviously want to restrict it to time category (timesheeting in liter does not make sense ...) Task #1820076 --- addons/project/data/project_data.xml | 5 ----- addons/project/models/res_company.py | 13 +++++++++++-- addons/uom/data/uom_data.xml | 5 +++++ addons/uom/models/uom_uom.py | 12 ++++++++++++ addons/uom/views/uom_uom_views.xml | 1 + 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/addons/project/data/project_data.xml b/addons/project/data/project_data.xml index 127b5b1366b..3103992a4e6 100644 --- a/addons/project/data/project_data.xml +++ b/addons/project/data/project_data.xml @@ -2,11 +2,6 @@ - - - - - diff --git a/addons/project/models/res_company.py b/addons/project/models/res_company.py index 550bff5ad53..afad6d1b54e 100644 --- a/addons/project/models/res_company.py +++ b/addons/project/models/res_company.py @@ -1,14 +1,23 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import api, fields, models class ResCompany(models.Model): _inherit = 'res.company' + @api.model + def _default_project_time_mode_id(self): + uom = self.env.ref('uom.product_uom_hour', raise_if_not_found=False) + if not uom: + uom = self.env['uom.uom'].search([('measure_type', '=', 'time'), ('uom_type', '=', 'reference')], limit=1) + if not uom: + uom = self.env['uom.uom'].search([('measure_type', '=', 'time')], limit=1) + return uom + project_time_mode_id = fields.Many2one('uom.uom', string='Project Time Unit', - default=lambda s: s.env.ref('uom.product_uom_hour', raise_if_not_found=False), + default=_default_project_time_mode_id, domain=[('measure_type', '=', 'time')], help="This will set the unit of measure used in projects and tasks.\n" "If you use the timesheet linked to projects, don't " "forget to setup the right unit of measure in your employees.") diff --git a/addons/uom/data/uom_data.xml b/addons/uom/data/uom_data.xml index f929564b1e4..59a2c41208c 100644 --- a/addons/uom/data/uom_data.xml +++ b/addons/uom/data/uom_data.xml @@ -6,18 +6,23 @@ --> Unit + unit Weight + weight Working Time + time Length / Distance + length Volume + volume