From e19e1fe1004ea77cb3dd05e34edf99c96c83a6bf Mon Sep 17 00:00:00 2001 From: Bogdan Stanciu Date: Mon, 31 Oct 2011 12:38:30 +0100 Subject: [PATCH] [FIX] some product_qty fields are set with hardcoded decimal precision, and some without. I added dp on all occurrences of product_qty. lp bug: https://launchpad.net/bugs/884179 fixed bzr revid: bogdanovidiu.stanciu@gmail.com-20111031113830-drdqvvrz032nrzh4 --- addons/mrp/mrp.py | 7 ++++--- addons/mrp/wizard/change_production_qty.py | 3 ++- addons/mrp_operations/report/mrp_workorder_analysis.py | 3 ++- addons/mrp_subproduct/mrp_subproduct.py | 3 ++- addons/procurement/procurement.py | 3 ++- addons/project/project_view.xml | 2 +- addons/purchase/purchase.py | 2 +- addons/purchase_requisition/purchase_requisition.py | 3 ++- addons/stock/wizard/stock_change_product_qty.py | 3 ++- addons/stock/wizard/stock_move.py | 2 +- addons/stock_planning/stock_planning.py | 5 +++-- 11 files changed, 22 insertions(+), 14 deletions(-) diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 191bd6ec819..ae60e4628ba 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -21,6 +21,7 @@ from datetime import datetime from osv import osv, fields +import decimal_precision as dp from tools.translate import _ import netsvc import time @@ -205,7 +206,7 @@ class mrp_bom(osv.osv): 'product_id': fields.many2one('product.product', 'Product', required=True), 'product_uos_qty': fields.float('Product UOS Qty'), 'product_uos': fields.many2one('product.uom', 'Product UOS', help="Product UOS (Unit of Sale) is the unit of measurement for the invoicing and promotion of stock."), - 'product_qty': fields.float('Product Qty', required=True), + 'product_qty': fields.float('Product Qty', required=True, digits_compute=dp.get_precision('Product UoM')), 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True, help="UoM (Unit of Measure) is the unit of measurement for the inventory control"), 'product_rounding': fields.float('Product Rounding', help="Rounding applied on the product quantity."), 'product_efficiency': fields.float('Manufacturing Efficiency', required=True, help="A factor of 0.9 means a loss of 10% within the production process."), @@ -447,7 +448,7 @@ class mrp_production(osv.osv): 'priority': fields.selection([('0','Not urgent'),('1','Normal'),('2','Urgent'),('3','Very Urgent')], 'Priority'), 'product_id': fields.many2one('product.product', 'Product', required=True, readonly=True, states={'draft':[('readonly',False)]}), - 'product_qty': fields.float('Product Qty', required=True, states={'draft':[('readonly',False)]}, readonly=True), + 'product_qty': fields.float('Product Qty', digits_compute=dp.get_precision('Product UoM'), required=True, states={'draft':[('readonly',False)]}, readonly=True), 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True, states={'draft':[('readonly',False)]}, readonly=True), 'product_uos_qty': fields.float('Product UoS Qty', states={'draft':[('readonly',False)]}, readonly=True), 'product_uos': fields.many2one('product.uom', 'Product UoS', states={'draft':[('readonly',False)]}, readonly=True), @@ -982,7 +983,7 @@ class mrp_production_product_line(osv.osv): _columns = { 'name': fields.char('Name', size=64, required=True), 'product_id': fields.many2one('product.product', 'Product', required=True), - 'product_qty': fields.float('Product Qty', required=True), + 'product_qty': fields.float('Product Qty', digits_compute=dp.get_precision('Product UoM'), required=True), 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True), 'product_uos_qty': fields.float('Product UOS Qty'), 'product_uos': fields.many2one('product.uom', 'Product UOS'), diff --git a/addons/mrp/wizard/change_production_qty.py b/addons/mrp/wizard/change_production_qty.py index 87b6d00190e..fa1549458cf 100644 --- a/addons/mrp/wizard/change_production_qty.py +++ b/addons/mrp/wizard/change_production_qty.py @@ -21,13 +21,14 @@ from osv import fields, osv from tools.translate import _ +import decimal_precision as dp class change_production_qty(osv.osv_memory): _name = 'change.production.qty' _description = 'Change Quantity of Products' _columns = { - 'product_qty': fields.float('Product Qty', required=True), + 'product_qty': fields.float('Product Qty', digits_compute=dp.get_precision('Product UoM'), required=True), } def default_get(self, cr, uid, fields, context=None): diff --git a/addons/mrp_operations/report/mrp_workorder_analysis.py b/addons/mrp_operations/report/mrp_workorder_analysis.py index e559f97fbed..545ce73656d 100644 --- a/addons/mrp_operations/report/mrp_workorder_analysis.py +++ b/addons/mrp_operations/report/mrp_workorder_analysis.py @@ -21,6 +21,7 @@ from osv import fields,osv import tools +import decimal_precision as dp class mrp_workorder(osv.osv): _name = "mrp.workorder" @@ -34,7 +35,7 @@ class mrp_workorder(osv.osv): 'nbr': fields.integer('# of Lines', readonly=True), 'date': fields.date('Date', readonly=True), 'product_id': fields.many2one('product.product', 'Product', readonly=True), - 'product_qty': fields.float('Product Qty', readonly=True), + 'product_qty': fields.float('Product Qty', digits_compute=dp.get_precision('Product UoM'), readonly=True), 'state': fields.selection([('draft','Draft'),('startworking', 'In Progress'),('pause','Pause'),('cancel','Cancelled'),('done','Finished')],'State', readonly=True), 'total_hours': fields.float('Total Hours', readonly=True), 'total_cycles': fields.float('Total Cycles', readonly=True), diff --git a/addons/mrp_subproduct/mrp_subproduct.py b/addons/mrp_subproduct/mrp_subproduct.py index 130411987c1..3c4bb93e3e9 100644 --- a/addons/mrp_subproduct/mrp_subproduct.py +++ b/addons/mrp_subproduct/mrp_subproduct.py @@ -21,13 +21,14 @@ from osv import fields from osv import osv +import decimal_precision as dp class mrp_subproduct(osv.osv): _name = 'mrp.subproduct' _description = 'Sub Product' _columns={ 'product_id': fields.many2one('product.product', 'Product', required=True), - 'product_qty': fields.float('Product Qty', required=True), + 'product_qty': fields.float('Product Qty', digits_compute=dp.get_precision('Product UoM'), required=True), 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True), 'subproduct_type': fields.selection([('fixed','Fixed'),('variable','Variable')], 'Quantity Type', required=True), 'bom_id': fields.many2one('mrp.bom', 'BoM'), diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 7382b1577e7..8e49520ba47 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -23,6 +23,7 @@ from osv import osv, fields from tools.translate import _ import netsvc import time +import decimal_precision as dp # Procurement # ------------------------------------------------------------------ @@ -91,7 +92,7 @@ class procurement_order(osv.osv): 'date_planned': fields.datetime('Scheduled date', required=True), 'date_close': fields.datetime('Date Closed'), 'product_id': fields.many2one('product.product', 'Product', required=True, states={'draft':[('readonly',False)]}, readonly=True), - 'product_qty': fields.float('Quantity', required=True, states={'draft':[('readonly',False)]}, readonly=True), + 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM'), required=True, states={'draft':[('readonly',False)]}, readonly=True), 'product_uom': fields.many2one('product.uom', 'Product UoM', required=True, states={'draft':[('readonly',False)]}, readonly=True), 'product_uos_qty': fields.float('UoS Quantity', states={'draft':[('readonly',False)]}, readonly=True), 'product_uos': fields.many2one('product.uom', 'Product UoS', states={'draft':[('readonly',False)]}, readonly=True), diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 5f5a36157ef..3c253fe2477 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -175,7 +175,7 @@ {'search_default_Current':1} A project contains a set of tasks or issues that will be performed by your resources assigned to it. A project can be hierarchically structured, as a child of a Parent Project. This allows you to design large project structures with different phases spread over the project duration cycle. Each user can set his default project in his own preferences to automatically filter the tasks or issues he usually works on. If you choose to invoice the time spent on a project task, you can find project tasks to be invoiced in the billing section. - + Templates of Projects diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 00d8556cf43..5e3d7781e6a 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -625,7 +625,7 @@ class purchase_order_line(osv.osv): _columns = { 'name': fields.char('Description', size=256, required=True), - 'product_qty': fields.float('Quantity', required=True, digits=(16,2)), + 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM'), required=True), 'date_planned': fields.date('Scheduled Date', required=True, select=True), 'taxes_id': fields.many2many('account.tax', 'purchase_order_taxe', 'ord_id', 'tax_id', 'Taxes'), 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True), diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 5549b044142..d619e3a82f5 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -25,6 +25,7 @@ import netsvc from osv import fields,osv from tools.translate import _ +import decimal_precision as dp class purchase_requisition(osv.osv): _name = "purchase.requisition" @@ -93,7 +94,7 @@ class purchase_requisition_line(osv.osv): _columns = { 'product_id': fields.many2one('product.product', 'Product' ), 'product_uom_id': fields.many2one('product.uom', 'Product UoM'), - 'product_qty': fields.float('Quantity', digits=(16,2)), + 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM')), 'requisition_id' : fields.many2one('purchase.requisition','Purchase Requisition', ondelete='cascade'), 'company_id': fields.many2one('res.company', 'Company', required=True), } diff --git a/addons/stock/wizard/stock_change_product_qty.py b/addons/stock/wizard/stock_change_product_qty.py index f12eabd39e8..a2b4b6ebae4 100644 --- a/addons/stock/wizard/stock_change_product_qty.py +++ b/addons/stock/wizard/stock_change_product_qty.py @@ -20,6 +20,7 @@ ############################################################################## from osv import fields, osv +import decimal_precision as dp from tools.translate import _ import tools @@ -28,7 +29,7 @@ class stock_change_product_qty(osv.osv_memory): _description = "Change Product Quantity" _columns = { 'product_id' : fields.many2one('product.product', 'Product'), - 'new_quantity': fields.float('Quantity', required=True, help='This quantity is expressed in the Default UoM of the product.'), + 'new_quantity': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM'), required=True, help='This quantity is expressed in the Default UoM of the product.'), 'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot', domain="[('product_id','=',product_id)]"), 'location_id': fields.many2one('stock.location', 'Location', required=True, domain="[('usage', '=', 'internal')]"), } diff --git a/addons/stock/wizard/stock_move.py b/addons/stock/wizard/stock_move.py index 1a655878d8a..9ff0c96a3b8 100644 --- a/addons/stock/wizard/stock_move.py +++ b/addons/stock/wizard/stock_move.py @@ -29,7 +29,7 @@ class stock_move_consume(osv.osv_memory): _columns = { 'product_id': fields.many2one('product.product', 'Product', required=True, select=True), - 'product_qty': fields.float('Quantity', required=True), + 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM'), required=True), 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True), 'location_id': fields.many2one('stock.location', 'Location', required=True) } diff --git a/addons/stock_planning/stock_planning.py b/addons/stock_planning/stock_planning.py index 3ec992ecd0c..6ffb0140eb0 100644 --- a/addons/stock_planning/stock_planning.py +++ b/addons/stock_planning/stock_planning.py @@ -27,6 +27,7 @@ from osv import osv, fields import netsvc from tools.translate import _ import logging +import decimal_precision as dp _logger = logging.getLogger('mps') @@ -80,8 +81,8 @@ class stock_sale_forecast(osv.osv): help = 'Shows which period this forecast concerns.'), 'product_id': fields.many2one('product.product', 'Product', readonly=True, required=True, states={'draft':[('readonly',False)]}, \ help = 'Shows which product this forecast concerns.'), - 'product_qty': fields.float('Forecast Quantity', required=True, readonly=True, states={'draft':[('readonly',False)]}, \ - help= 'Forecast Product quantity.'), + 'product_qty': fields.float('Forecast Quantity', digits_compute=dp.get_precision('Product UoM'), required=True, readonly=True, \ + states={'draft':[('readonly',False)]}, help= 'Forecast Product quantity.'), 'product_amt': fields.float('Product Amount', readonly=True, states={'draft':[('readonly',False)]}, \ help='Forecast value which will be converted to Product Quantity according to prices.'), 'product_uom_categ': fields.many2one('product.uom.categ', 'Product UoM Category'), # Invisible field for product_uom domain