From 082f696ef47eceb19e3ce8d82d10440aee80004f Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 4 Oct 2012 11:41:32 +0530 Subject: [PATCH 1/9] UOM, List view: remove the ratio column. bzr revid: tta@openerp.com-20121004061132-0p5o9qcfpo0xyvzh --- addons/product/product_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index 8c19aee026f..2509abfec4e 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -449,7 +449,6 @@ - From 5fe8e1e1a6fd79bd71badfa0aba17d0c564fe098 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Mon, 8 Oct 2012 12:46:25 +0530 Subject: [PATCH 2/9] [IMP] Refine form view layout for UOM. bzr revid: tta@openerp.com-20121008071625-yaeo8ogvlajw7k7r --- addons/product/product.py | 31 +++++++++++++++++++++++++++---- addons/product/product_view.xml | 22 ++++++++++++---------- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/addons/product/product.py b/addons/product/product.py index d5acee0333b..a895fbd0c64 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -107,10 +107,18 @@ class product_uom(osv.osv): del(data['factor_inv']) return super(product_uom, self).create(cr, uid, data, context) + def _product_uom_name(self, cr, uid, ids, name, arg, context=None): + res = {} + if context is None: + context = {} + for p in self.browse(cr, uid, ids, context=context): + res[p.id] = p.name + return res + _order = "name" _columns = { - 'name': fields.char('Name', size=64, required=True, translate=True), - 'category_id': fields.many2one('product.uom.categ', 'Unit of Measure Category', required=True, ondelete='cascade', + 'name': fields.char('Unit of Measure', size=64, required=True, translate=True), + 'category_id': fields.many2one('product.uom.categ', 'Category', required=True, ondelete='cascade', help="Quantity conversions may happen automatically between Units of Measure in the same category, according to their respective ratios."), 'factor': fields.float('Ratio', required=True,digits=(12, 12), help='How many times this Unit of Measure is smaller than the reference Unit of Measure in this category:\n'\ @@ -120,13 +128,15 @@ class product_uom(osv.osv): string='Ratio', help='How many times this Unit of Measure is bigger than the reference Unit of Measure in this category:\n'\ '1 * (this unit) = ratio * (reference unit)', required=True), - 'rounding': fields.float('Rounding Precision', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, + 'rounding': fields.float('Rounding precision', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, help="The computed quantity will be a multiple of this value. "\ "Use 1.0 for a Unit of Measure that cannot be further split, such as a piece."), 'active': fields.boolean('Active', help="By unchecking the active field you can disable a unit of measure without deleting it."), 'uom_type': fields.selection([('bigger','Bigger than the reference Unit of Measure'), ('reference','Reference Unit of Measure for this category'), - ('smaller','Smaller than the reference Unit of Measure')],'Unit of Measure Type', required=1), + ('smaller','Smaller than the reference Unit of Measure')],'Type', required=1), + 'reference_uom_id': fields.many2one('product.uom', 'Reference UoM', readonly=True, help='Reference unit'), + 'name_ref': fields.function(_product_uom_name, type='char', string='Name'), } _defaults = { @@ -139,6 +149,14 @@ class product_uom(osv.osv): ('factor_gt_zero', 'CHECK (factor!=0)', 'The conversion ratio for a unit of measure cannot be 0!') ] + def onchange_category_id(self, cr, uid, ids, category_id): + reference_uom = False + if category_id: + uom_ids = self.search(cr, uid, [('category_id', '=',category_id),('uom_type', '=', 'reference')]) + if uom_ids: + reference_uom = uom_ids[0] + return {'value':{'reference_uom_id': reference_uom}} + def _compute_qty(self, cr, uid, from_uom_id, qty, to_uom_id=False): if not from_uom_id or not qty or not to_uom_id: return qty @@ -177,6 +195,11 @@ class product_uom(osv.osv): amount = amount / to_unit.factor return amount + def onchange_name(self, cursor, user, ids, value): + if value: + return {'value': {'name_ref': value}} + return {} + def onchange_type(self, cursor, user, ids, value): if value == 'reference': return {'value': {'factor': 1, 'factor_inv': 1}} diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index 2509abfec4e..826ae77770f 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -460,21 +460,23 @@
- - + + -

- e.g: 1 * (reference unit) = ratio * (this unit) -

-

- e.g: 1 * (this unit) = ratio * (reference unit) -

+
From 4fb104ffee70c03b07d2fd5552556c72d9329ad9 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Mon, 8 Oct 2012 15:30:46 +0530 Subject: [PATCH 3/9] [IMP] Depend on UOM type computation layout change. bzr revid: tta@openerp.com-20121008100046-x93cu80uh9epdq21 --- addons/product/product_data.xml | 18 ++++++++++++------ addons/product/product_view.xml | 12 +++++++----- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml index 1974acc6df2..37668d7abfa 100644 --- a/addons/product/product_data.xml +++ b/addons/product/product_data.xml @@ -42,6 +42,7 @@ Dozen bigger + @@ -53,18 +54,20 @@ g smaller - - - Hour - - - smaller + Day + + Hour + + + smaller + +