diff --git a/addons/procurement/__openerp__.py b/addons/procurement/__openerp__.py index 30198b56f83..d10e1874d68 100644 --- a/addons/procurement/__openerp__.py +++ b/addons/procurement/__openerp__.py @@ -59,6 +59,7 @@ depending on the product's configuration. 'board_mrp_procurement_view.xml', ], 'demo_xml': ['stock_orderpoint.xml'], + 'test': ['test/procurement.yml'], 'installable': True, 'active': False, 'certificate': '00954248826881074509', diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 1d20fe45a9f..91461f794cc 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -63,7 +63,6 @@ mrp_property() class StockMove(osv.osv): _inherit = 'stock.move' - _columns= { 'procurements': fields.one2many('procurement.order', 'move_id', 'Procurements'), } @@ -482,7 +481,7 @@ class StockPicking(osv.osv): if move.state == 'done' and move.procurements: for procurement in move.procurements: wf_service.trg_validate(user, 'procurement.order', - procurement.id, 'button_check', cursor) + procurement.id, 'button_check', cursor) return res StockPicking() diff --git a/addons/procurement/test/procurement.yml b/addons/procurement/test/procurement.yml new file mode 100644 index 00000000000..4c59d0c7b7c --- /dev/null +++ b/addons/procurement/test/procurement.yml @@ -0,0 +1,88 @@ +- + For test the procurement process, First I have to apply a minimum stock rule on product +- + I create minimum stock rule for product. +- + !record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}: + company_id: base.main_company + location_id: stock.stock_location_stock + logic: max + name: OP/00008 + product_id: product.product_product_cpu2 + product_max_qty: 15.0 + product_min_qty: 5.0 + product_uom: product.product_uom_kgm + qty_multiple: 1 + warehouse_id: stock.warehouse0 +- + Check product quantity and update it, if needed for apply a minimum stock rule. +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product.product_product_cpu2')) + if product.virtual_available < 5.0: + change_qty = self.pool.get('stock.change.product.qty') + id = change_qty.create(cr, uid, {'location_id' : ref('stock.stock_location_stock'), 'new_quantity': 4, 'product_id': product.id}) + change_qty.change_product_qty(cr, uid, [id], {'active_model':'product.product', 'active_id': product.id, 'active_ids':[product.id]}) + assert product.qty_available == 4,"Product quantity is not updated." + assert product.virtual_available < 5.0,'Virtual stock have more quantities.' +- + I run the scheduler. +- + !python {model: procurement.order}: | + self.run_scheduler(cr, uid) +- + I check that procurement order is based on minimum stock rule. +- + !python {model: procurement.order}: | + proc_ids = self.search(cr, uid, [('product_id','=', ref('product.product_product_cpu2'))]) + assert proc_ids, 'No Procurement created.' + proc_order = self.browse(cr, uid, proc_ids)[0] + assert proc_order.product_qty == 11.0,"Procurement product quantity is not corresponded." +- + I check product quantity. +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product.product_product_cpu2')) + assert product.virtual_available == 15.0,"After run the scheduler product's virtual stock is not updated." +- + For test the Procurement Request wizard, Again I have to update product quantity. +- + !python {model: product.product}: | + mk_procure = self.pool.get('make.procurement') + procur_order = self.pool.get('procurement.order') + product = self.browse(cr, uid, ref('product.product_product_cpu2')) + + context.update({'active_model': 'product.product','active_id':ref('product.product_product_cpu2')}) + values = {'warehouse_id': ref('base.main_company'), 'uom_id': ref('product.product_uom_unit'), 'qty': 5} + id = mk_procure.create(cr, uid, values, context) + procurement = mk_procure.make_procurement(cr, uid, [id], context) + assert product.virtual_available == 20.0, 'Virtual stock should be updated' + + proc_id = procurement.get('res_id') + for procurement in procur_order.browse(cr, uid, [proc_id]): + if procurement.state == 'confirmed': + assert procurement.state == 'confirmed',"Procurement state should be 'Confirmed'." + assert procurement.product_id.id == ref('product.product_product_cpu2'),"Product is not correspond." + assert procurement.product_qty == 5,"Product Quantity is not correspond." + assert procurement.product_uom.id == ref('product.product_uom_unit'),"Product's UOM is not correspond." + context.update({'proc': proc_id}) +- + I run the scheduler. +- + !python {model: procurement.order}: | + self.run_scheduler(cr, uid) +- + I check the current state of procurement. +- + !python {model: procurement.order}: | + proc_id = context.get('proc') + proc = self.browse(cr, uid, [proc_id])[0] + assert proc.state == 'ready' or 'exception',"Procurement should be in Ready or Exception state" +- + I compute minimum stock. +- + !python {model: procurement.orderpoint.compute}: | + proc_id = context.get('proc') + context.update({'active_model': 'procurement.order', 'active_id': proc_id}) + id = self.create(cr, uid, {'automatic': True}, context) + self.procure_calculation(cr, uid, [id], context)