From 7e84b4c1ce10c7f649ba11d8dabefd317eb67b1f Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Tue, 8 May 2012 18:32:04 +0200 Subject: [PATCH] [FIX] stock: fixed error in yaml test. sale, purchase: fixed error on module installation with a temporary workaround that duplicates the reference of new fields on stock.picking.in/out classes (these lines should be removed as soon as the bug in the framework that prevent the orm of knowing the new columns on inhertied class is fired) bzr revid: qdp-launchpad@openerp.com-20120508163204-hjg6ztjr38m1cydl --- addons/purchase/stock.py | 9 +++++++++ addons/sale/stock.py | 9 +++++++++ addons/stock/stock.py | 8 ++++---- addons/stock/stock_demo.yml | 3 --- addons/stock/test/shipment.yml | 9 +++++++-- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py index 35193dfa07b..a4c0be17916 100644 --- a/addons/purchase/stock.py +++ b/addons/purchase/stock.py @@ -126,4 +126,13 @@ class stock_partial_picking(osv.osv_memory): 'currency': move.picking_id.purchase_id.pricelist_id.currency_id.id} return super(stock_partial_picking, self)._product_cost_for_average_update(cr, uid, move) +# Redefinition of the new field in order to update the model stock.picking.in in the orm +# FIXME: this is a temporary workaround because of a framework bug (ref: lpxxxx). It should be removed as soon as +# the bug is fixed +class stock_picking_in(osv.osv): + _inherit = 'stock.picking.in' + _columns = { + 'purchase_id': fields.many2one('purchase.order', 'Purchase Order', + ondelete='set null', select=True), + } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/stock.py b/addons/sale/stock.py index 44b993ec0e1..23e936aed47 100644 --- a/addons/sale/stock.py +++ b/addons/sale/stock.py @@ -186,4 +186,13 @@ class stock_picking(osv.osv): }) return result +# Redefinition of the new field in order to update the model stock.picking.out in the orm +# FIXME: this is a temporary workaround because of a framework bug (ref: lpxxxx). It should be removed as soon as +# the bug is fixed +class stock_picking_out(osv.osv): + _inherit = 'stock.picking.out' + _columns = { + 'sale_id': fields.many2one('sale.order', 'Sale Order', + ondelete='set null', select=True), + } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 1a6aeca6b0d..2d8e3d70c36 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -874,7 +874,7 @@ class stock_picking(osv.osv): def _get_partner_to_invoice(self, cr, uid, picking, context=None): """ Gets the partner that will be invoiced - Note that this function is inherited in the sale module + Note that this function is inherited in the sale and purchase modules @param picking: object of the picking for which we are selecting the partner to invoice @return: object of the partner to invoice """ @@ -2119,11 +2119,11 @@ class stock_move(osv.osv): return True if context is None: context = {} - pickings = {} + pickings = [] for move in self.browse(cr, uid, ids, context=context): if move.state in ('confirmed', 'waiting', 'assigned', 'draft'): if move.picking_id: - pickings[move.picking_id.id] = True + pickings += [move.picking_id.id] if move.move_dest_id and move.move_dest_id.state == 'waiting': self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'}) if context.get('call_unlink',False) and move.move_dest_id.picking_id: @@ -2131,7 +2131,7 @@ class stock_move(osv.osv): wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr) self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False}) if not context.get('call_unlink',False): - for pick in self.pool.get('stock.picking').browse(cr, uid, pickings.keys()): + for pick in self.pool.get('stock.picking').browse(cr, uid, pickings, context=context): if all(move.state == 'cancel' for move in pick.move_lines): self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'}) diff --git a/addons/stock/stock_demo.yml b/addons/stock/stock_demo.yml index b4836566f55..245e55c38c6 100644 --- a/addons/stock/stock_demo.yml +++ b/addons/stock/stock_demo.yml @@ -18,10 +18,7 @@ - !record {model: stock.location, id: location_convenience_shop}: name: Convenient Store - chained_auto_packing: auto - chained_location_type: fixed usage: supplier - location_id: stock_location_suppliers - !record {model: stock.warehouse, id: warehouse_icecream}: name: Ice Cream Shop diff --git a/addons/stock/test/shipment.yml b/addons/stock/test/shipment.yml index 96c42c6c488..4468823d98e 100644 --- a/addons/stock/test/shipment.yml +++ b/addons/stock/test/shipment.yml @@ -73,6 +73,7 @@ assert shipment.state == 'done', "shipment should be close after received." for move_line in shipment.move_lines: assert move_line.product_qty == 10, "Qty does not correspond." + assert move_line.product_id.virtual_available == 20, "Virtual stock does not correspond." assert move_line.state == 'done', "Move line should be closed." - @@ -82,11 +83,15 @@ invoice_state: none - !python {model: stock.return.picking }: | + # this work without giving the id of the picking to return, magically, thanks to the context self.create_returns(cr, uid, [ref('return_incomming')], context=context) - I cancel incomming shipment after return it. - !python {model: stock.picking}: | + # the cancel is not on the return, but on the incomming shipment (which now has a quantity of 10, thanks to the + # backorder). This situation is a little weird as we returned a move that we finally cancelled... As result, only + # 30Kg from the original 50Kg will be counted in the stock (50 - 10 (cancelled quantity) - 10 (returned quantity)) self.action_cancel(cr, uid, [ref("incomming_shipment")], context=context) - I make invoice of backorder of incomming shipment. @@ -107,12 +112,12 @@ shipment = self.browse(cr, uid, ref("incomming_shipment")) assert shipment.backorder_id.invoice_state == 'invoiced', 'Invoice state is not upadted.' - - I check availabile stock after received incomming shipping. + I check available stock after received incomming shipping. - !python {model: product.product}: | product = self.browse(cr, uid, ref('product_icecream'), context=context) assert product.qty_available == 140, "Stock does not correspond." - assert product.virtual_available == 10, "Vitual stock does not correspond." + assert product.virtual_available == 0, "Vitual stock does not correspond." - I split incomming shipment into lots. each lot contain 10 kgm Ice-cream. -