From 888e13d22eabab1bc9c26435700032b9734cb6e7 Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Tue, 15 Apr 2014 11:19:23 +0200 Subject: [PATCH 1/3] [FIX] Add parameter in readgroup bzr revid: jco@openerp.com-20140415091923-r5ipe0bevxrutxxh --- addons/stock/stock.py | 4 ++-- addons/stock_account/wizard/stock_valuation_history.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 9bd50ea9c8d..a941fab60b2 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -280,9 +280,9 @@ class stock_quant(osv.osv): 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.quant', context=c), } - def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False): + def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True): ''' Overwrite the read_group in order to sum the function field 'inventory_value' in group by''' - res = super(stock_quant, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby) + res = super(stock_quant, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby, lazy=True) if 'inventory_value' in fields: for line in res: if '__domain' in line: diff --git a/addons/stock_account/wizard/stock_valuation_history.py b/addons/stock_account/wizard/stock_valuation_history.py index b938c3da10b..f2acf3f503c 100644 --- a/addons/stock_account/wizard/stock_valuation_history.py +++ b/addons/stock_account/wizard/stock_valuation_history.py @@ -41,8 +41,8 @@ class stock_history(osv.osv): _auto = False _order = 'date asc' - def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False): - res = super(stock_history, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby) + def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True): + res = super(stock_history, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby, lazy=lazy) prod_dict= {} if 'inventory_value' in fields: for line in res: From 2d1d25b00559645a829acbac3d4b6129d26ba56d Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Wed, 16 Apr 2014 10:48:49 +0200 Subject: [PATCH 2/3] [WIP] Correct stock valuation report bzr revid: jco@openerp.com-20140416084849-kr0c2h8xqf1bw9vn --- .../wizard/stock_valuation_history.py | 29 +++++++++++-------- .../wizard/stock_valuation_history_view.xml | 1 - 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/addons/stock_account/wizard/stock_valuation_history.py b/addons/stock_account/wizard/stock_valuation_history.py index f2acf3f503c..20985e3b89d 100644 --- a/addons/stock_account/wizard/stock_valuation_history.py +++ b/addons/stock_account/wizard/stock_valuation_history.py @@ -29,7 +29,7 @@ class wizard_valuation_history(osv.osv_memory): 'domain': "[('date', '<=', '" + data['date'] + "')]", 'name': _('Stock Value At Date'), 'view_type': 'form', - 'view_mode': 'tree, graph', + 'view_mode': 'tree,graph', 'res_model': 'stock.history', 'type': 'ir.actions.act_window', 'context': ctx, @@ -43,7 +43,7 @@ class stock_history(osv.osv): def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True): res = super(stock_history, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby, lazy=lazy) - prod_dict= {} + prod_dict = {} if 'inventory_value' in fields: for line in res: if '__domain' in line: @@ -57,14 +57,14 @@ class stock_history(osv.osv): prod_dict[line_rec.product_id.id] = line_rec.price_unit_on_quant else: prod_dict[line_rec.product_id.id] = product_obj.get_history_price(cr, uid, line_rec.product_id.id, line_rec.company_id.id, context=context) - inv_value += prod_dict[line_rec.product_id.id] + inv_value += prod_dict[line_rec.product_id.id] * line_rec.quantity line['inventory_value'] = inv_value return res def _get_inventory_value(self, cr, uid, ids, name, attr, context=None): product_obj = self.pool.get("product.product") res = {} - #Browse takes an immense amount of time because it seems to reload the report + # Browse takes an immense amount of time because it seems to reload the report for line in self.browse(cr, uid, ids, context=context): if line.product_id.cost_method == 'real': res[line.id] = line.quantity * line.price_unit_on_quant @@ -74,7 +74,7 @@ class stock_history(osv.osv): _columns = { 'move_id': fields.many2one('stock.move', 'Stock Move', required=True), - #'quant_id': fields.many2one('stock.quant'), + # 'quant_id': fields.many2one('stock.quant'), 'company_id': fields.related('move_id', 'company_id', type='many2one', relation='res.company', string='Company', required=True, select=True), 'location_id': fields.many2one('stock.location', 'Location', required=True), 'product_id': fields.many2one('product.product', 'Product', required=True), @@ -93,7 +93,7 @@ class stock_history(osv.osv): (SELECT stock_move.id::text || '-' || quant.id::text AS id, stock_move.id AS move_id, - stock_move.location_dest_id AS location_id, + location.location_id AS location_id, stock_move.product_id AS product_id, product_template.categ_id AS product_categ_id, quant.qty AS quantity, @@ -101,22 +101,25 @@ class stock_history(osv.osv): ir_property.value_text AS cost_method, quant.cost as price_unit_on_quant FROM - stock_quant as quant, stock_quant_move_rel, stock_move + stock_quant as quant LEFT JOIN + stock_location quant_location ON quant.location_id = quant_location.id, stock_quant_move_rel, stock_move LEFT JOIN stock_location location ON stock_move.location_dest_id = location.id + LEFT JOIN + stock_location other_location ON stock_move.location_id = other_location.id LEFT JOIN product_product ON product_product.id = stock_move.product_id LEFT JOIN product_template ON product_template.id = product_product.product_tmpl_id LEFT JOIN ir_property ON (ir_property.name = 'cost_method' and ir_property.res_id = 'product.template,' || product_template.id::text) - WHERE stock_move.state = 'done' AND location.usage = 'internal' AND stock_quant_move_rel.quant_id = quant.id - AND stock_quant_move_rel.move_id = stock_move.id + WHERE stock_move.state = 'done' AND location.usage = 'internal' AND other_location.usage != 'internal' AND stock_quant_move_rel.quant_id = quant.id + AND stock_quant_move_rel.move_id = stock_move.id ) UNION (SELECT '-' || stock_move.id::text || '-' || quant.id::text AS id, stock_move.id AS move_id, - stock_move.location_id AS location_id, + location.location_id AS location_id, stock_move.product_id AS product_id, product_template.categ_id AS product_categ_id, - quant.qty AS quantity, @@ -126,7 +129,9 @@ class stock_history(osv.osv): FROM stock_quant as quant, stock_quant_move_rel, stock_move LEFT JOIN - stock_location location ON stock_move.location_id = location.id + stock_location location ON stock_move.location_id = location.id + LEFT JOIN + stock_location other_location ON stock_move.location_dest_id = other_location.id LEFT JOIN product_product ON product_product.id = stock_move.product_id LEFT JOIN @@ -134,6 +139,6 @@ class stock_history(osv.osv): LEFT JOIN ir_property ON (ir_property.name = 'cost_method' and ir_property.res_id = 'product.template,' || product_template.id::text) WHERE stock_move.state = 'done' AND location.usage = 'internal' AND stock_quant_move_rel.quant_id = quant.id - AND stock_quant_move_rel.move_id = stock_move.id + AND stock_quant_move_rel.move_id = stock_move.id AND other_location.usage != 'internal' ) )""") diff --git a/addons/stock_account/wizard/stock_valuation_history_view.xml b/addons/stock_account/wizard/stock_valuation_history_view.xml index 83d58133de2..cbbd5e41430 100644 --- a/addons/stock_account/wizard/stock_valuation_history_view.xml +++ b/addons/stock_account/wizard/stock_valuation_history_view.xml @@ -91,7 +91,6 @@ [('date','<=',time.strftime('%Y-%m-%d %H:%M:%S'))] form tree,graph - Date: Wed, 16 Apr 2014 17:18:25 +0200 Subject: [PATCH 3/3] [IMP] Correct for new way of stock valuation, add source bzr revid: jco@openerp.com-20140416151825-et2m2syyt7duaffi --- addons/mrp/mrp.py | 2 ++ .../wizard/stock_valuation_history.py | 36 ++++++++++--------- .../wizard/stock_valuation_history_view.xml | 1 + 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index a1e7ca7b498..b49b99fd6e0 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -1000,6 +1000,7 @@ class mrp_production(osv.osv): 'move_dest_id': production.move_prod_id.id, 'company_id': production.company_id.id, 'production_id': production.id, + 'origin': production.name, } move_id = stock_move.create(cr, uid, data, context=context) #a phantom bom cannot be used in mrp order so it's ok to assume the list returned by action_confirm @@ -1041,6 +1042,7 @@ class mrp_production(osv.osv): 'raw_material_production_id': production.id, #this saves us a browse in create() 'price_unit': production_line.product_id.standard_price, + 'origin': production.name, }) return move_id diff --git a/addons/stock_account/wizard/stock_valuation_history.py b/addons/stock_account/wizard/stock_valuation_history.py index 20985e3b89d..f4704aecd41 100644 --- a/addons/stock_account/wizard/stock_valuation_history.py +++ b/addons/stock_account/wizard/stock_valuation_history.py @@ -74,16 +74,17 @@ class stock_history(osv.osv): _columns = { 'move_id': fields.many2one('stock.move', 'Stock Move', required=True), - # 'quant_id': fields.many2one('stock.quant'), - 'company_id': fields.related('move_id', 'company_id', type='many2one', relation='res.company', string='Company', required=True, select=True), + 'quant_id': fields.many2one('stock.quant', 'Quant', required=True), + 'quant_location_id': fields.related('quant_id', 'location_id', type='many2one', relation='stock.location', string='Actual Quant Location', select=True), 'location_id': fields.many2one('stock.location', 'Location', required=True), + 'company_id': fields.many2one('res.company', 'Company'), 'product_id': fields.many2one('product.product', 'Product', required=True), 'product_categ_id': fields.many2one('product.category', 'Product Category', required=True), 'quantity': fields.integer('Product Quantity'), 'date': fields.datetime('Operation Date'), 'price_unit_on_quant': fields.float('Value'), - 'cost_method': fields.char('Cost Method'), 'inventory_value': fields.function(_get_inventory_value, string="Inventory Value", type='float', readonly=True), + 'source': fields.char('Source') } def init(self, cr): @@ -92,17 +93,18 @@ class stock_history(osv.osv): CREATE OR REPLACE VIEW stock_history AS ( (SELECT stock_move.id::text || '-' || quant.id::text AS id, + quant.id AS quant_id, stock_move.id AS move_id, location.location_id AS location_id, + location.company_id AS company_id, stock_move.product_id AS product_id, product_template.categ_id AS product_categ_id, quant.qty AS quantity, stock_move.date AS date, - ir_property.value_text AS cost_method, - quant.cost as price_unit_on_quant + quant.cost as price_unit_on_quant, + stock_move.origin AS source FROM - stock_quant as quant LEFT JOIN - stock_location quant_location ON quant.location_id = quant_location.id, stock_quant_move_rel, stock_move + stock_quant as quant, stock_quant_move_rel, stock_move LEFT JOIN stock_location location ON stock_move.location_dest_id = location.id LEFT JOIN @@ -111,21 +113,22 @@ class stock_history(osv.osv): product_product ON product_product.id = stock_move.product_id LEFT JOIN product_template ON product_template.id = product_product.product_tmpl_id - LEFT JOIN - ir_property ON (ir_property.name = 'cost_method' and ir_property.res_id = 'product.template,' || product_template.id::text) - WHERE stock_move.state = 'done' AND location.usage = 'internal' AND other_location.usage != 'internal' AND stock_quant_move_rel.quant_id = quant.id - AND stock_quant_move_rel.move_id = stock_move.id + WHERE stock_move.state = 'done' AND location.usage in ('internal', 'transit') AND stock_quant_move_rel.quant_id = quant.id + AND stock_quant_move_rel.move_id = stock_move.id AND ((other_location.company_id is null and location.company_id is not null) or + (other_location.company_id is not null and location.company_id is null) or other_location.company_id != location.company_id) ) UNION (SELECT '-' || stock_move.id::text || '-' || quant.id::text AS id, + quant.id AS quant_id, stock_move.id AS move_id, location.location_id AS location_id, + location.company_id AS company_id, stock_move.product_id AS product_id, product_template.categ_id AS product_categ_id, - quant.qty AS quantity, stock_move.date AS date, - ir_property.value_text AS cost_method, - quant.cost as price_unit_on_quant + quant.cost as price_unit_on_quant, + stock_move.origin AS source FROM stock_quant as quant, stock_quant_move_rel, stock_move LEFT JOIN @@ -136,9 +139,8 @@ class stock_history(osv.osv): product_product ON product_product.id = stock_move.product_id LEFT JOIN product_template ON product_template.id = product_product.product_tmpl_id - LEFT JOIN - ir_property ON (ir_property.name = 'cost_method' and ir_property.res_id = 'product.template,' || product_template.id::text) - WHERE stock_move.state = 'done' AND location.usage = 'internal' AND stock_quant_move_rel.quant_id = quant.id - AND stock_quant_move_rel.move_id = stock_move.id AND other_location.usage != 'internal' + WHERE stock_move.state = 'done' AND location.usage in ('internal', 'transit') AND stock_quant_move_rel.quant_id = quant.id + AND stock_quant_move_rel.move_id = stock_move.id AND ((other_location.company_id is null and location.company_id is not null) or + (other_location.company_id is not null and location.company_id is null) or other_location.company_id != location.company_id) ) )""") diff --git a/addons/stock_account/wizard/stock_valuation_history_view.xml b/addons/stock_account/wizard/stock_valuation_history_view.xml index cbbd5e41430..276f4a2389d 100644 --- a/addons/stock_account/wizard/stock_valuation_history_view.xml +++ b/addons/stock_account/wizard/stock_valuation_history_view.xml @@ -48,6 +48,7 @@ +