-
  In order to test the flow of procurement orders. I will put some orders with
  different procurement methods. I have installed sale, mrp and purchase modules.
-
  I am creating products.   
- 
  I create record for product Shirt.
- 
  !record {model: product.product, id: product_product_shirt0}:
    categ_id: product.cat1
    cost_method: standard
    list_price: 350.0
    mes_type: fixed
    name: Shirt
    procure_method: make_to_stock
    property_stock_inventory: stock.location_inventory
    property_stock_procurement: stock.location_procurement
    property_stock_production: stock.location_production
    seller_delay: '1'
    standard_price: 300.0
    supply_method: produce
    type: product
    uom_id: product.product_uom_unit
    uom_po_id: product.product_uom_unit
    volume: 0.0
    warranty: 0.0
    weight: 0.0
    weight_net: 0.0
- 
  I create record for product Cloth.
- 
  !record {model: product.product, id: product_product_cloth0}:
    categ_id: product.cat1
    cost_method: standard
    mes_type: fixed
    name: Cloth
    procure_method: make_to_order
    property_stock_inventory: stock.location_inventory
    property_stock_procurement: stock.location_procurement
    property_stock_production: stock.location_production
    seller_delay: '1'
    seller_ids:
      - delay: 1
        name: base.res_partner_maxtor
        min_qty: 300.0
    standard_price: 1.0
    supply_method: buy
    type: product
    uom_id: product.product_uom_unit
    uom_po_id: product.product_uom_unit
    volume: 0.0
    warranty: 0.0
    weight: 0.0
    weight_net: 0.0
- 
  I create record for product Buttons.
- 
  !record {model: product.product, id: product_product_buttons0}:
    categ_id: product.cat1
    cost_method: standard
    mes_type: fixed
    name: Buttons
    procure_method: make_to_stock
    property_stock_inventory: stock.location_inventory
    property_stock_procurement: stock.location_procurement
    property_stock_production: stock.location_production
    seller_delay: '1'
    seller_ids:
      - delay: 1
        name: base.res_partner_asus
        min_qty: 100.0
    standard_price: 1.0
    supply_method: buy
    type: product
    uom_id: product.product_uom_kgm
    uom_po_id: product.product_uom_kgm
    volume: 0.0
    warranty: 0.0
    weight: 0.0
    weight_net: 0.0
-
  I am creating bills of material for 'Shirt'.      
- 
  I create bills of material for Shirt.
- 
  !record {model: mrp.bom, id: mrp_bom_shirt0}:
    bom_lines:
      - company_id: base.main_company
        name: Cloth
        product_efficiency: 1.0
        product_id: product_product_cloth0
        product_qty: 1.0
        product_uom: product.product_uom_unit
        product_uos_qty: 0.0
        sequence: 0.0
        type: normal
      - company_id: base.main_company
        name: Buttons
        product_efficiency: 1.0
        product_id: product_product_buttons0
        product_qty: 8.0
        product_uom: product.product_uom_unit
        product_uos_qty: 0.0
        sequence: 0.0
        type: normal
    company_id: base.main_company
    name: Shirt
    product_efficiency: 1.0
    product_id: product_product_shirt0
    product_qty: 1.0
    product_uom: product.product_uom_unit
    product_uos_qty: 0.0
    sequence: 0.0
    type: normal
-
  I create minimum stock rule for product Buttons
-
  !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/00007
    product_id: mrp.product_product_buttons0
    product_max_qty: 50.0
    product_min_qty: 10.0
    product_uom: product.product_uom_unit
    qty_multiple: 1
    warehouse_id: stock.warehouse0
-
  I create a procurement order for product Shirt.
-
  !record {model: procurement.order, id: procurement_order_shirt0}:
    name: 'PROC: Shirt'
    product_id: product_product_shirt0
    product_qty: 5.00
    location_id: stock.stock_location_stock
    product_uom: product.product_uom_unit
-
  I confirm the procurement order.
-
  !workflow {model: procurement.order, action: button_confirm, ref: procurement_order_shirt0}
-
  I run the procurement.
-
  !workflow {model: procurement.order, action: button_check, ref: procurement_order_shirt0} 
-
  I see that there is a manufacturing order for Shirt.
-
  !python {model: mrp.production}: |
    from tools.translate import _
    order_ids = self.search(cr, uid, [('product_id','=',ref('product_product_shirt0'))])
    assert order_ids, 'No Manufacturing Order.'
-
  I also check that there are two more procurement orders for sub products Cloth and Buttons.
-
  !python {model: procurement.order}: |
    from tools.translate import _
    proc_ids = self.search(cr, uid, [('product_id','in',[ref('product_product_cloth0'),ref('product_product_buttons0')])])
    assert proc_ids, 'No Procurements.'
-
  The scheduler runs.
-
  !function {model: procurement.order, name: run_scheduler}:
    - model: procurement.order
      search: "[]"
-
  I check that there is one purchase order for Cloth.
-
  !python {model: purchase.order}: |
    purch_ids = self.search(cr, uid, [('partner_id.name','=','Maxtor')])
    assert purch_ids, 'No Purchase Orders.'
-
  I confirm purchase order for Cloth.
-
  !python {model: purchase.order}: |
    import netsvc
    purch_ids = self.search(cr, uid, [('partner_id.name','=','Maxtor')])
    wf_service = netsvc.LocalService("workflow")
    for p_id in purch_ids:
    	wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
-
  I get the approval from the supplier. So I approve my purchase orders.
-
  !python {model: purchase.order}: |
    from tools.translate import _
    import netsvc
    purch_ids = self.search(cr, uid, [('state','=','confirmed')])
    assert purch_ids, _('No Confirmed Purchase Orders found!')
    wf_service = netsvc.LocalService("workflow")
    for p_id in purch_ids:
    	wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
-
  I confirm purchase order for Buttons.
-
  !python {model: purchase.order}: |
    import netsvc
    purch_ids = self.search(cr, uid, [('partner_id.name','=','ASUStek')])
    wf_service = netsvc.LocalService("workflow")
    for p_id in purch_ids:
    	wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
-
  I get the approval from the supplier. So I approve my purchase orders.
-
  !python {model: purchase.order}: |
    from tools.translate import _
    import netsvc
    purch_ids = self.search(cr, uid, [('state','=','confirmed')])
    assert purch_ids, _('No Confirmed Purchase Orders found!')
    wf_service = netsvc.LocalService("workflow")
    for p_id in purch_ids:
    	wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
-
  I Check incoming shipments for cloth. And receive products.
-
  !python {model: stock.picking}: |
    from tools.translate import _
    pick_ids = self.search(cr, uid, [('address_id.name','=','Wong'),('state','=','assigned')])
    assert pick_ids, _('No Incoming Shipments found!')
-
  I create record for partial picking.
-
  !record {model: stock.partial.picking, id: stock_partial_picking0}:
    date: '2010-04-30 16:53:36'

-
  I make my picking done.
-
  !python {model: stock.partial.picking}: |
     pick_obj = self.pool.get('stock.picking')
     picking_ids = pick_obj.search(cr, uid, [('address_id.name','=','Wong'),('state','=','assigned')])
     partial = self.browse(cr, uid, 1, context)
     partial_datas = {
            'delivery_date' : partial.date         
     }
     for pick in pick_obj.browse(cr, uid, picking_ids):
        for m in pick.move_lines:
           partial_datas['move%s'%(m.id)] = {
                    'product_id' : m.product_id.id,
                    'product_qty' : m.product_qty,
                    'product_uom' : m.product_uom.id
           }
           if (pick.type == 'in') and (m.product_id.cost_method == 'average'):   
                    partial_datas['move%s'%(m.id)].update({             
                        'product_price' : m.product_price,
                        'product_currency': m.product_currency
                    })
     pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
-
  I Check incoming shipments for buttons and receive products.
-
  !python {model: stock.picking}: |
    from tools.translate import _
    pick_ids = self.search(cr, uid, [('address_id.name','=','Tang'),('state','=','assigned')])
    assert pick_ids, _('No Incoming Shipments found!')
-
  I create record for partial picking.
-
  !record {model: stock.partial.picking, id: stock_partial_picking0}:
    date: '2010-04-30 16:53:36'

-
  I make my picking done.
-
  !python {model: stock.partial.picking}: |
     pick_obj = self.pool.get('stock.picking')
     picking_ids = pick_obj.search(cr, uid, [('address_id.name','=','Tang'),('state','=','assigned')])
     partial = self.browse(cr, uid, 1, context)
     partial_datas = {
            'delivery_date': partial.date         
     }
     for pick in pick_obj.browse(cr, uid, picking_ids):
        for m in pick.move_lines:
           partial_datas['move%s'%(m.id)] = {
                    'product_id': m.product_id.id,
                    'product_qty': m.product_qty,
                    'product_uom': m.product_uom.id
           }
           if (pick.type == 'in') and (m.product_id.cost_method == 'average'):   
                    partial_datas['move%s'%(m.id)].update({             
                        'product_price': m.product_price,
                        'product_currency': m.product_currency
                    })
     pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
-
  Run scheduler again.
-
  !function {model: procurement.order, name: run_scheduler}:
    - model: procurement.order
      search: "[]"
-
  Check state of manufacturing order for Shirt.
-
  !python {model: mrp.production}: |
    from tools.translate import _
    order_ids = self.search(cr, uid, [('product_id','=',ref('product_product_shirt0')),('state','=','ready')])
    assert order_ids, 'No Manufacturing Order in Ready state.'
-
  I start production order for Shirt.
-
  !python {model: mrp.production}: |
    from tools.translate import _
    import netsvc
    prod_ids = self.search(cr, uid, [('state','=','ready')])
    assert prod_ids, _('No Ready Manufacturing Orders found!')
    wf_service = netsvc.LocalService("workflow")
    for p_id in prod_ids:
    	wf_service.trg_validate(uid, 'mrp.production', p_id, 'button_produce', cr)
-
  I create record for producing products with quantity 5.00.
-
  !record {model: mrp.product.produce, id: mrp_product_produce0}:
    product_qty: 5.00
    mode: 'consume_produce'
-
  I produce 2 products with 5.00 quantities each.
-
  !python {model: mrp.product.produce}: |
    from tools.translate import _
    prod_obj = self.pool.get('mrp.production')
    prod_ids = prod_obj.search(cr, uid, [('product_id.name','=','Shirt')])
    self.do_produce(cr, uid, [ref('mrp_product_produce0')], context={'active_ids': prod_ids})
-
  I create record for remaining products with quantity 35.00.
-
  !record {model: stock.move.consume, id: stock_move_consume0}:
    product_id: product_product_buttons0
    product_qty: 35.00
    product_uom: product.product_uom_unit
    location_id: stock.stock_location_stock
-
  I produce remaining product Buttons with 35.00 quantity.
-
  !python {model: stock.move.consume}: |
    from tools.translate import _
    stock_obj = self.pool.get('stock.move')
    stock_ids = stock_obj.search(cr, uid, [('product_id.name','=','Buttons')])
    self.do_move_consume(cr, uid, [ref('stock_move_consume0')], context={'active_ids': stock_ids})
-
  And finally production order is done.
-
  !python {model: mrp.product.produce}: |
    from tools.translate import _
    prod_obj = self.pool.get('mrp.production')
    prod_ids = prod_obj.search(cr, uid, [('product_id.name','=','Shirt')])
    self.do_produce(cr, uid, [1], context={'active_ids': prod_ids})
    
