df4ade1cb6eb2c2da38c5cb0fa8a782a88575173
[odoo/odoo.git] / addons / mrp / test / mrp_phantom_bom.yml
1 -
2   In order to test the mrp phantom bom type in OpenERP, I will create products 
3   and then I will create Phantom bom structure for those products.
4 -
5   I create the products required to produce some orange juices: Oranges, Sugar and Water.
6 -
7   !record {model: product.uom, id: product_uom_litre0}:
8     category_id: product.product_uom_categ_kgm
9     factor: 1.0
10     name: Litre
11     rounding: 0.01 
12
13   !record {model: product.product, id: product_product_orangejuice0}:
14     categ_id: product.cat1
15     name: Orange Juice
16     procure_method: make_to_order
17     supply_method: produce
18     type: product
19     uom_id: product_uom_litre0
20     uom_po_id: product_uom_litre0
21
22   !record {model: product.product, id: product_product_orange0}:
23     categ_id: product.cat1
24     name: Orange
25     procure_method: make_to_stock
26     seller_ids:
27       - delay: 1
28         name: base.res_partner_asus
29         qty: 1.0
30     supply_method: buy
31     type: product
32     uom_id: product.product_uom_kgm
33     uom_po_id: product.product_uom_kgm
34
35   !record {model: product.product, id: product_product_sugar0}:
36     categ_id: product.cat1
37     name: Sugar
38     procure_method: make_to_stock
39     seller_ids:
40       - delay: 1
41         name: base.res_partner_desertic_hispafuentes
42         qty: 2.0
43     supply_method: buy
44     type: product
45     uom_id: product.product_uom_kgm
46     uom_po_id: product.product_uom_kgm
47
48   !record {model: product.product, id: product_product_water0}:
49     categ_id: product.cat1
50     name: Water
51     procure_method: make_to_stock
52     supply_method: buy
53     type: consu
54     uom_id: product_uom_litre0
55     uom_po_id: product_uom_litre0
56 -
57   I define the BoM to produce an orange juice
58
59   !record {model: mrp.bom, id: mrp_bom_orangejuice0}:
60     company_id: base.main_company
61     name: Orange Juice
62     product_efficiency: 1.0
63     product_id: product_product_orangejuice0
64     product_qty: 1.0
65     product_uom: product_uom_litre0
66     type: phantom
67
68   !record {model: mrp.bom, id: mrp_bom_orangejuice0}:
69     bom_lines:
70       - bom_id: mrp_bom_orangejuice0
71         company_id: base.main_company
72         name: Orange
73         product_efficiency: 1.0
74         product_id: product_product_orange0
75         product_qty: 0.5
76         product_uom: product.product_uom_kgm
77         type: normal
78       - bom_id: mrp_bom_orangejuice0
79         company_id: base.main_company
80         name: Sugar
81         product_efficiency: 1.0
82         product_id: product_product_sugar0
83         product_qty: 0.02
84         product_uom: product.product_uom_kgm
85         type: normal
86       - bom_id: mrp_bom_orangejuice0
87         company_id: base.main_company
88         name: Water
89         product_efficiency: 1.0
90         product_id: product_product_water0
91         product_qty: 0.80000000000000004
92         product_uom: product_uom_litre0
93         type: normal
94 -
95   I define Minimum stock rules for my stockable products orange and sugar
96
97   !record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}:
98     company_id: base.main_company
99     location_id: stock.stock_location_stock
100     logic: max
101     name: OP/00002
102     product_id: product_product_orange0
103     product_max_qty: 10.0
104     product_min_qty: 5.0
105     product_uom: product.product_uom_kgm
106     qty_multiple: 1
107     warehouse_id: stock.warehouse0
108
109   !record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op1}:
110     company_id: base.main_company
111     location_id: stock.stock_location_stock
112     logic: max
113     name: OP/00003
114     product_id: product_product_sugar0
115     product_max_qty: 4.0
116     product_min_qty: 2.0
117     product_uom: product.product_uom_kgm
118     qty_multiple: 1
119     warehouse_id: stock.warehouse0
120 -
121   I want to produce 100 litres of Orange juice. I am creating a manufacturing order for this. 
122   I want to see how much quantities of sub products I need, to produce the Orange juice. 
123 -
124   I compute the data. I get the bill of material of Orange juice and list of 
125   scheduled products according to my bom.
126
127   !record {model: mrp.production, id: mrp_production_mo0}:
128     company_id: base.main_company
129     date_planned: '2010-04-16 15:53:36'
130     location_dest_id: stock.stock_location_output
131     location_src_id: stock.stock_location_stock
132     name: MO/00002
133     product_id: product_product_orangejuice0
134     product_qty: 100.0
135     product_uom: product_uom_litre0
136
137   Creating an mrp.production record. Computing Bills of materials.
138
139   !record {model: mrp.production, id: mrp_production_mo0}:
140     bom_id: mrp.mrp_bom_orangejuice0
141     company_id: base.main_company
142     date_planned: '2010-04-16 15:53:36'
143     location_dest_id: stock.stock_location_output
144     location_src_id: stock.stock_location_stock
145     name: MO/00002
146     product_id: mrp.product_product_orangejuice0
147     product_lines:
148       - name: Orange
149         product_id: mrp.product_product_orange0
150         product_qty: 50.0
151         product_uom: product.product_uom_kgm
152         production_id: mrp_production_mo0
153       - name: Sugar
154         product_id: mrp.product_product_sugar0
155         product_qty: 2.0
156         product_uom: product.product_uom_kgm
157         production_id: mrp_production_mo0
158       - name: Water
159         product_id: mrp.product_product_water0
160         product_qty: 80.0
161         product_uom: mrp.product_uom_litre0
162         production_id: mrp_production_mo0
163     product_qty: 100.0
164     product_uom: mrp.product_uom_litre0
165 -
166   I confirm the order.
167
168   !workflow {model: mrp.production, action: button_confirm, ref: mrp_production_mo0}
169 -
170   I am checking Procurement orders. There are 3 orders generated for Oranges, Sugar and Water.
171 -
172   !python {model: mrp.procurement}: |
173     from tools.translate import _
174     proc_ids = self.search(cr, uid, [('origin','=',':MO/00002')])
175     assert proc_ids, _('No Procurements!')
176 -
177   The scheduler runs.
178 -
179   !function {model: mrp.procurement, name: run_scheduler}:
180     - model: mrp.procurement
181       search: "[('origin','=',':MO/00002')]"
182 -
183   I am checking Internal picking. I see one picking for Orange juice and its 
184   stock moves for Oranges, Sugar and Water made correctly.
185 -
186   !python {model: stock.picking}: |
187     from tools.translate import _
188     pick_ids = self.search(cr, uid, [('origin','=',':MO/00002'),('type','=','internal')])
189     assert pick_ids, _('No Internal Pickings!')
190 -
191   According to minimum stock rules. I have 2 purchase orders for 
192   Sugar with 6 Kg from Axelor and Orange 60 Kg from ASUStek.
193 -
194   I confirm the purchase order of Sugar and Orange.
195 -
196   !python {model: purchase.order}: |
197     from tools.translate import _
198     import netsvc
199     purch_ids = self.search(cr, uid, [('origin','in',['SCHEDULER','OP/00002','OP/00003'])])
200     assert purch_ids, _('No Purchase Orders were made!')
201     wf_service = netsvc.LocalService("workflow")
202     for p_id in purch_ids:
203         wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
204 -
205   I get the approval from both the suppliers. So I approve my purchase orders.
206 -
207   !python {model: purchase.order}: |
208     from tools.translate import _
209     import netsvc
210     purch_ids = self.search(cr, uid, [('origin','in',['SCHEDULER','OP/00002','OP/00003']),('state','=','confirmed')])
211     assert purch_ids, _('No Confirmed Purchase Orders found!')
212     wf_service = netsvc.LocalService("workflow")
213     for p_id in purch_ids:
214         wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
215 -
216   I see two incoming pickings for Orange and Sugar.
217 -
218   !python {model: stock.picking}: |
219     from tools.translate import _
220     pick_ids = self.search(cr, uid, [('origin','in',['PO00001:SCHEDULER','PO00002:SCHEDULER','PO00003:OP/00002','PO00004:OP/00003']),('type','=','in')])
221     assert pick_ids, _('No Incoming Shipments found!')
222 -
223   I receive both the products. My incoming pickings are done.
224 -
225   !record {model: stock.partial.picking, id: stock_partial_picking0}:
226     date: '2010-04-30 16:53:36'
227     partner_id: base.res_partner_asus
228     address_id: base.res_partner_address_tang
229 -
230   !python {model: stock.partial.picking}: |
231      pick_obj = self.pool.get('stock.picking')
232      picking_ids = pick_obj.search(cr, uid, [('origin','in',['PO00001:SCHEDULER','PO00002:SCHEDULER','PO00003:OP/00002','PO00004:OP/00003']),('type','=','in')])
233      self.do_partial(cr, uid, [1],context={'active_ids': picking_ids})
234