[FIX] mrp/mrp_procurement: commited work of team1
[odoo/odoo.git] / addons / mrp / test / mrp_procurement.yml
1 -
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.
4 -
5   I am creating products.   
6
7   Creating a product.product record
8
9   !record {model: product.product, id: product_product_shirt0}:
10     categ_id: product.cat1
11     cost_method: standard
12     list_price: 350.0
13     mes_type: fixed
14     name: Shirt
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
19     seller_delay: '1'
20     standard_price: 300.0
21     supply_method: produce
22     type: product
23     uom_id: product.product_uom_unit
24     uom_po_id: product.product_uom_unit
25     volume: 0.0
26     warranty: 0.0
27     weight: 0.0
28     weight_net: 0.0
29
30   Creating a product.product record
31
32   !record {model: product.product, id: product_product_cloth0}:
33     categ_id: product.cat1
34     cost_method: standard
35     mes_type: fixed
36     name: Cloth
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
41     seller_delay: '1'
42     seller_ids:
43       - delay: 1
44         name: base.res_partner_maxtor
45         qty: 300.0
46     standard_price: 1.0
47     supply_method: buy
48     type: product
49     uom_id: product.product_uom_unit
50     uom_po_id: product.product_uom_unit
51     volume: 0.0
52     warranty: 0.0
53     weight: 0.0
54     weight_net: 0.0
55
56   Creating a product.product record
57
58   !record {model: product.product, id: product_product_buttons0}:
59     categ_id: product.cat1
60     cost_method: standard
61     mes_type: fixed
62     name: Buttons
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
67     seller_delay: '1'
68     seller_ids:
69       - delay: 1
70         name: base.res_partner_asus
71         qty: 100.0
72     standard_price: 1.0
73     supply_method: buy
74     type: product
75     uom_id: product.product_uom_kgm
76     uom_po_id: product.product_uom_kgm
77     volume: 0.0
78     warranty: 0.0
79     weight: 0.0
80     weight_net: 0.0
81 -
82   I am creating bills of material for 'Shirt'.      
83
84   Creating a mrp.bom record
85
86   !record {model: mrp.bom, id: mrp_bom_shirt0}:
87     bom_lines:
88       - company_id: base.main_company
89         name: Cloth
90         product_efficiency: 1.0
91         product_id: product_product_cloth0
92         product_qty: 1.0
93         product_uom: product.product_uom_unit
94         product_uos_qty: 0.0
95         sequence: 0.0
96         type: normal
97       - company_id: base.main_company
98         name: Buttons
99         product_efficiency: 1.0
100         product_id: product_product_buttons0
101         product_qty: 8.0
102         product_uom: product.product_uom_unit
103         product_uos_qty: 0.0
104         sequence: 0.0
105         type: normal
106     company_id: base.main_company
107     name: Shirt
108     product_efficiency: 1.0
109     product_id: product_product_shirt0
110     product_qty: 1.0
111     product_uom: product.product_uom_unit
112     product_uos_qty: 0.0
113     sequence: 0.0
114     type: normal
115 -
116   I create minimum stock rule for product Buttons
117 -
118   !record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}:
119     company_id: base.main_company
120     location_id: stock.stock_location_stock
121     logic: max
122     name: OP/00007
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
127     qty_multiple: 1
128     warehouse_id: stock.warehouse0
129 -
130   I create a procurement order for product Shirt.
131 -
132   !record {model: mrp.procurement, id: mrp_procurement_shirt0}:
133     name: 'PROC: Shirt'
134     product_id: product_product_shirt0
135     product_qty: 5.00
136     location_id: stock.stock_location_stock
137     product_uom: product.product_uom_unit
138 -
139   I confirm the procurement order.
140 -
141   !workflow {model: mrp.procurement, action: button_confirm, ref: mrp_procurement_shirt0}
142 -
143   I run the procurement.
144 -
145   !workflow {model: mrp.procurement, action: button_check, ref: mrp_procurement_shirt0} 
146 -
147   I see that there is a manufacturing order for Shirt.
148 -
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.'
153 -
154   I also check that there are two more procurement orders for sub products Cloth and Buttons.
155 -
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.'
160 -
161   The scheduler runs.
162 -
163   !function {model: mrp.procurement, name: run_scheduler}:
164     - model: mrp.procurement
165       search: "[]"
166 -
167   I check that there is one purchase order for Cloth.
168 -
169   !python {model: purchase.order}: |
170     purch_ids = self.search(cr, uid, [('partner_id.name','=','Maxtor')])
171     assert purch_ids, 'No Purchase Orders.'
172 -
173   I confirm purchase order for Cloth.
174 -
175   !python {model: purchase.order}: |
176     import netsvc
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)
181 -
182   I get the approval from the supplier. So I approve my purchase orders.
183 -
184   !python {model: purchase.order}: |
185     from tools.translate import _
186     import netsvc
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)
192 -
193   I confirm purchase order for Buttons.
194 -
195   !python {model: purchase.order}: |
196     import netsvc
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)
201 -
202   I get the approval from the supplier. So I approve my purchase orders.
203 -
204   !python {model: purchase.order}: |
205     from tools.translate import _
206     import netsvc
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)
212 -
213   I Check incoming shipments for cloth. And receive products.
214 -
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!')
219 -
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
224 -
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)
229      partial_datas = {
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         
233      }
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
240            }
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
245                     })
246      pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
247 -
248   I Check incoming shipments for buttons. And receive products.
249 -
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!')
254 -
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
259 -
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)
264      partial_datas = {
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         
268      }
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
275            }
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
280                     })
281      pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
282 -
283   Run scheduler again.
284 -
285   !function {model: mrp.procurement, name: run_scheduler}:
286     - model: mrp.procurement
287       search: "[]"
288 -
289   Check state of manufacturing order for Shirt.
290 -
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.'
295 -
296   I start production order for Shirt.
297 -
298   !python {model: mrp.production}: |
299     from tools.translate import _
300     import netsvc
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)
306 -
307   !record {model: mrp.product.produce, id: mrp_product_produce0}:
308     product_qty: 5.00
309     mode: 'consume_produce'
310 -
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})
316 -
317   !record {model: stock.move.consume, id: stock_move_consume0}:
318     product_id: product_product_buttons0
319     product_qty: 35.00
320     product_uom: product.product_uom_unit
321     location_id: stock.stock_location_stock
322 -
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})
328 -
329   And finally production order is done.
330 -
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})
336