- I first create a warehouse with pick-pack-ship and reception in 2 steps - !record {model: stock.warehouse, id: wh_pps}: name: WareHouse PickPackShip code: whpps reception_steps: 'two_steps' delivery_steps: 'pick_pack_ship' - Next I create a new product in this warehouse - !record {model: product.product, id: product_mto}: name: "My Product" type: product uom_id: product.product_uom_unit uom_po_id: product.product_uom_unit seller_ids: - delay: 1 name: base.res_partner_2 min_qty: 2.0 qty: 10.0 - Set routes on product to be MTO adn Buy - !python {model: product.product}: | route_warehouse0_buy = self.pool.get('stock.warehouse').browse(cr, uid, ref('stock.warehouse0')).buy_pull_id.route_id.id route_warehouse0_mto = self.pool.get('stock.warehouse').browse(cr, uid, ref('stock.warehouse0')).mto_pull_id.route_id.id self.write(cr, uid, ref('product_mto'), { 'route_ids': [(6, 0, [route_warehouse0_mto,route_warehouse0_buy])]}, context=context ) - Create a sales order with a line of 5 "My Product". - !record {model: sale.order, id: sale_order_product_mto}: partner_id: base.res_partner_3 note: Create Sales order warehouse_id: wh_pps order_line: - product_id: product_mto product_uom_qty: 5.00 - Confirm the sale order - !workflow {model: sale.order, action: order_confirm, ref: sale_order_product_mto} - I run scheduler. - !python {model: procurement.order}: | self.run_scheduler(cr, uid) - Check the propagation when we cancel the main procurement * Retrieve related procurements and check that there are all running * Check that a purchase order is well created * Cancel the main procurement * Check that all procurements related and the purchase order are well cancelled - !python {model: procurement.order}: | # Retrieve related procurement so = self.pool.get('sale.order').browse(cr, uid, ref('sale_order_product_mto')) procu_ids = self.search(cr, uid, [('group_id.name', '=', so.name)]) assert len(procu_ids)>0, 'No procurement found for sale order %s (with id: %d)' %(so.name,so.id) # Check that all procurements are running for procu in self.browse(cr,uid,procu_ids,context=context): assert procu.state == u'running', 'Procurement with id: %d should be running but is with state : %s!' %(procu.id, procu.state) # Check that one or more Purchase order purchase_ids = [proc.purchase_line_id.order_id for proc in self.browse(cr, uid, procu_ids) if proc.purchase_line_id] assert len(purchase_ids) > 0, 'No purchase order found !' # Cancel the main procurement main_procu_id = self.search(cr, uid, [('origin', '=', so.name)]) assert len(main_procu_id) == 1, 'Main procurement not identified !' self.cancel(cr, uid, main_procu_id, context=context) assert self.browse(cr, uid, main_procu_id[0]).state == u'cancel', 'Main procurement should be cancelled !' # Check that all procurements related are cancelled for procu in self.browse(cr, uid, procu_ids, context=context): assert procu.state == u'cancel', 'Procurement %d should be cancelled but is with a state : %s!' %(procu.id, procu.state) # Check that the purchase order is well cancelled for po in self.pool.get('purchase.order').browse(cr, uid, [po.id for po in purchase_ids], context=context): assert po.state == u'cancel', 'Purchase order %d should be cancelled but is in state : %s!' %(po.id, po.state)