2 In order to test the flow of procurement orders. I will put some orders with
3 different procurement methods. I have installed sale, mrp and purchase modules.
5 I am creating products.
7 Creating a product.product record
9 !record {model: product.product, id: product_product_shirt0}:
10 categ_id: product.cat1
15 procure_method: make_to_stock
16 property_stock_inventory: stock.location_inventory
17 property_stock_procurement: stock.location_procurement
18 property_stock_production: stock.location_production
21 supply_method: produce
23 uom_id: product.product_uom_unit
24 uom_po_id: product.product_uom_unit
30 Creating a product.product record
32 !record {model: product.product, id: product_product_cloth0}:
33 categ_id: product.cat1
37 procure_method: make_to_order
38 property_stock_inventory: stock.location_inventory
39 property_stock_procurement: stock.location_procurement
40 property_stock_production: stock.location_production
44 name: base.res_partner_maxtor
49 uom_id: product.product_uom_unit
50 uom_po_id: product.product_uom_unit
56 Creating a product.product record
58 !record {model: product.product, id: product_product_buttons0}:
59 categ_id: product.cat1
63 procure_method: make_to_stock
64 property_stock_inventory: stock.location_inventory
65 property_stock_procurement: stock.location_procurement
66 property_stock_production: stock.location_production
70 name: base.res_partner_asus
75 uom_id: product.product_uom_kgm
76 uom_po_id: product.product_uom_kgm
82 I am creating bills of material for 'Shirt'.
84 Creating a mrp.bom record
86 !record {model: mrp.bom, id: mrp_bom_shirt0}:
88 - company_id: base.main_company
90 product_efficiency: 1.0
91 product_id: product_product_cloth0
93 product_uom: product.product_uom_unit
97 - company_id: base.main_company
99 product_efficiency: 1.0
100 product_id: product_product_buttons0
102 product_uom: product.product_uom_unit
106 company_id: base.main_company
108 product_efficiency: 1.0
109 product_id: product_product_shirt0
111 product_uom: product.product_uom_unit
116 I create minimum stock rule for product Buttons
118 !record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}:
119 company_id: base.main_company
120 location_id: stock.stock_location_stock
123 product_id: mrp.product_product_buttons0
124 product_max_qty: 50.0
125 product_min_qty: 10.0
126 product_uom: product.product_uom_unit
128 warehouse_id: stock.warehouse0
130 I create a procurement order for product Shirt.
132 !record {model: mrp.procurement, id: mrp_procurement_shirt0}:
134 product_id: product_product_shirt0
136 location_id: stock.stock_location_stock
137 product_uom: product.product_uom_unit
139 I confirm the procurement order.
141 !workflow {model: mrp.procurement, action: button_confirm, ref: mrp_procurement_shirt0}
143 I run the procurement.
145 !workflow {model: mrp.procurement, action: button_check, ref: mrp_procurement_shirt0}
147 I see that there is a manufacturing order for Shirt.
149 !python {model: mrp.production}: |
150 from tools.translate import _
151 order_ids = self.search(cr, uid, [('product_id','=',ref('product_product_shirt0'))])
152 assert order_ids, 'No Manufacturing Order.'
154 I also check that there are two more procurement orders for sub products Cloth and Buttons.
156 !python {model: mrp.procurement}: |
157 from tools.translate import _
158 proc_ids = self.search(cr, uid, [('product_id','in',[ref('product_product_cloth0'),ref('product_product_buttons0')])])
159 assert proc_ids, 'No Procurements.'
163 !function {model: mrp.procurement, name: run_scheduler}:
164 - model: mrp.procurement
167 I check that there is one purchase order for Cloth.
169 !python {model: purchase.order}: |
170 purch_ids = self.search(cr, uid, [('partner_id.name','=','Maxtor')])
171 assert purch_ids, 'No Purchase Orders.'
173 I confirm purchase order for Cloth.
175 !python {model: purchase.order}: |
177 purch_ids = self.search(cr, uid, [('partner_id.name','=','Maxtor')])
178 wf_service = netsvc.LocalService("workflow")
179 for p_id in purch_ids:
180 wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
182 I get the approval from the supplier. So I approve my purchase orders.
184 !python {model: purchase.order}: |
185 from tools.translate import _
187 purch_ids = self.search(cr, uid, [('state','=','confirmed')])
188 assert purch_ids, _('No Confirmed Purchase Orders found!')
189 wf_service = netsvc.LocalService("workflow")
190 for p_id in purch_ids:
191 wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
193 I confirm purchase order for Buttons.
195 !python {model: purchase.order}: |
197 purch_ids = self.search(cr, uid, [('partner_id.name','=','ASUStek')])
198 wf_service = netsvc.LocalService("workflow")
199 for p_id in purch_ids:
200 wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
202 I get the approval from the supplier. So I approve my purchase orders.
204 !python {model: purchase.order}: |
205 from tools.translate import _
207 purch_ids = self.search(cr, uid, [('state','=','confirmed')])
208 assert purch_ids, _('No Confirmed Purchase Orders found!')
209 wf_service = netsvc.LocalService("workflow")
210 for p_id in purch_ids:
211 wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
213 I Check incoming shipments for cloth. And receive products.
215 !python {model: stock.picking}: |
216 from tools.translate import _
217 pick_ids = self.search(cr, uid, [('address_id.name','=','Wong'),('state','=','assigned')])
218 assert pick_ids, _('No Incoming Shipments found!')
220 !record {model: stock.partial.picking, id: stock_partial_picking0}:
221 date: '2010-04-30 16:53:36'
222 partner_id: base.res_partner_maxtor
223 address_id: base.res_partner_address_wong
225 !python {model: stock.partial.picking}: |
226 pick_obj = self.pool.get('stock.picking')
227 picking_ids = pick_obj.search(cr, uid, [('address_id.name','=','Wong'),('state','=','assigned')])
228 partial = self.browse(cr, uid, 1, context)
230 'partner_id' : partial.partner_id and partial.partner_id.id or False,
231 'address_id' : partial.address_id and partial.address_id.id or False,
232 'delivery_date' : partial.date
234 for pick in pick_obj.browse(cr, uid, picking_ids):
235 for m in pick.move_lines:
236 partial_datas['move%s'%(m.id)] = {
237 'product_id' : m.product_id.id,
238 'product_qty' : m.product_qty,
239 'product_uom' : m.product_uom.id
241 if (pick.type == 'in') and (m.product_id.cost_method == 'average'):
242 partial_datas['move%s'%(m.id)].update({
243 'product_price' : m.product_price,
244 'product_currency': m.product_currency
246 pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
248 I Check incoming shipments for buttons. And receive products.
250 !python {model: stock.picking}: |
251 from tools.translate import _
252 pick_ids = self.search(cr, uid, [('address_id.name','=','Tang'),('state','=','assigned')])
253 assert pick_ids, _('No Incoming Shipments found!')
255 !record {model: stock.partial.picking, id: stock_partial_picking0}:
256 date: '2010-04-30 16:53:36'
257 partner_id: base.res_partner_maxtor
258 address_id: base.res_partner_address_wong
260 !python {model: stock.partial.picking}: |
261 pick_obj = self.pool.get('stock.picking')
262 picking_ids = pick_obj.search(cr, uid, [('address_id.name','=','Tang'),('state','=','assigned')])
263 partial = self.browse(cr, uid, 1, context)
265 'partner_id': partial.partner_id and partial.partner_id.id or False,
266 'address_id': partial.address_id and partial.address_id.id or False,
267 'delivery_date': partial.date
269 for pick in pick_obj.browse(cr, uid, picking_ids):
270 for m in pick.move_lines:
271 partial_datas['move%s'%(m.id)] = {
272 'product_id': m.product_id.id,
273 'product_qty': m.product_qty,
274 'product_uom': m.product_uom.id
276 if (pick.type == 'in') and (m.product_id.cost_method == 'average'):
277 partial_datas['move%s'%(m.id)].update({
278 'product_price': m.product_price,
279 'product_currency': m.product_currency
281 pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
285 !function {model: mrp.procurement, name: run_scheduler}:
286 - model: mrp.procurement
289 Check state of manufacturing order for Shirt.
291 !python {model: mrp.production}: |
292 from tools.translate import _
293 order_ids = self.search(cr, uid, [('product_id','=',ref('product_product_shirt0')),('state','=','ready')])
294 assert order_ids, 'No Manufacturing Order in Ready state.'
296 I start production order for Shirt.
298 !python {model: mrp.production}: |
299 from tools.translate import _
301 prod_ids = self.search(cr, uid, [('state','=','ready')])
302 assert prod_ids, _('No Ready Manufacturing Orders found!')
303 wf_service = netsvc.LocalService("workflow")
304 for p_id in prod_ids:
305 wf_service.trg_validate(uid, 'mrp.production', p_id, 'button_produce', cr)
307 !record {model: mrp.product.produce, id: mrp_product_produce0}:
309 mode: 'consume_produce'
311 !python {model: mrp.product.produce}: |
312 from tools.translate import _
313 prod_obj = self.pool.get('mrp.production')
314 prod_ids = prod_obj.search(cr, uid, [('product_id.name','=','Shirt')])
315 self.do_produce(cr, uid, [1], context={'active_ids': prod_ids})
317 !record {model: stock.move.consume, id: stock_move_consume0}:
318 product_id: product_product_buttons0
320 product_uom: product.product_uom_unit
321 location_id: stock.stock_location_stock
323 !python {model: stock.move.consume}: |
324 from tools.translate import _
325 stock_obj = self.pool.get('stock.move')
326 stock_ids = stock_obj.search(cr, uid, [('product_id.name','=','Buttons')])
327 self.do_move_consume(cr, uid, [1], context={'active_ids': stock_ids})
329 And finally production order is done.
331 !python {model: mrp.product.produce}: |
332 from tools.translate import _
333 prod_obj = self.pool.get('mrp.production')
334 prod_ids = prod_obj.search(cr, uid, [('product_id.name','=','Shirt')])
335 self.do_produce(cr, uid, [1], context={'active_ids': prod_ids})