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.
5 I create the products required to produce some orange juices: Oranges, Sugar and Water.
7 !record {model: product.uom, id: product_uom_litre0}:
8 category_id: product.product_uom_categ_kgm
13 !record {model: product.product, id: product_product_orangejuice0}:
14 categ_id: product.cat1
16 procure_method: make_to_order
17 supply_method: produce
19 uom_id: product_uom_litre0
20 uom_po_id: product_uom_litre0
22 !record {model: product.product, id: product_product_orange0}:
23 categ_id: product.cat1
25 procure_method: make_to_stock
28 name: base.res_partner_asus
32 uom_id: product.product_uom_kgm
33 uom_po_id: product.product_uom_kgm
35 !record {model: product.product, id: product_product_sugar0}:
36 categ_id: product.cat1
38 procure_method: make_to_stock
41 name: base.res_partner_desertic_hispafuentes
45 uom_id: product.product_uom_kgm
46 uom_po_id: product.product_uom_kgm
48 !record {model: product.product, id: product_product_water0}:
49 categ_id: product.cat1
51 procure_method: make_to_stock
54 uom_id: product_uom_litre0
55 uom_po_id: product_uom_litre0
57 I define the BoM to produce an orange juice
59 !record {model: mrp.bom, id: mrp_bom_orangejuice0}:
60 company_id: base.main_company
62 product_efficiency: 1.0
63 product_id: product_product_orangejuice0
65 product_uom: product_uom_litre0
68 !record {model: mrp.bom, id: mrp_bom_orangejuice0}:
70 - bom_id: mrp_bom_orangejuice0
71 company_id: base.main_company
73 product_efficiency: 1.0
74 product_id: product_product_orange0
76 product_uom: product.product_uom_kgm
78 - bom_id: mrp_bom_orangejuice0
79 company_id: base.main_company
81 product_efficiency: 1.0
82 product_id: product_product_sugar0
84 product_uom: product.product_uom_kgm
86 - bom_id: mrp_bom_orangejuice0
87 company_id: base.main_company
89 product_efficiency: 1.0
90 product_id: product_product_water0
91 product_qty: 0.80000000000000004
92 product_uom: product_uom_litre0
95 I define Minimum stock rules for my stockable products orange and sugar
97 !record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}:
98 company_id: base.main_company
99 location_id: stock.stock_location_stock
102 product_id: product_product_orange0
103 product_max_qty: 10.0
105 product_uom: product.product_uom_kgm
107 warehouse_id: stock.warehouse0
109 !record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op1}:
110 company_id: base.main_company
111 location_id: stock.stock_location_stock
114 product_id: product_product_sugar0
117 product_uom: product.product_uom_kgm
119 warehouse_id: stock.warehouse0
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.
124 I compute the data. I get the bill of material of Orange juice and list of
125 scheduled products according to my bom.
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
133 product_id: product_product_orangejuice0
135 product_uom: product_uom_litre0
137 Creating an mrp.production record. Computing Bills of materials.
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
146 product_id: mrp.product_product_orangejuice0
149 product_id: mrp.product_product_orange0
151 product_uom: product.product_uom_kgm
152 production_id: mrp_production_mo0
154 product_id: mrp.product_product_sugar0
156 product_uom: product.product_uom_kgm
157 production_id: mrp_production_mo0
159 product_id: mrp.product_product_water0
161 product_uom: mrp.product_uom_litre0
162 production_id: mrp_production_mo0
164 product_uom: mrp.product_uom_litre0
168 !workflow {model: mrp.production, action: button_confirm, ref: mrp_production_mo0}
170 I am checking Procurement orders. There are 3 orders generated for Oranges, Sugar and Water.
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!')
179 !function {model: mrp.procurement, name: run_scheduler}:
180 - model: mrp.procurement
181 search: "[('origin','=',':MO/00002')]"
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.
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!')
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.
194 I confirm the purchase order of Sugar and Orange.
196 !python {model: purchase.order}: |
197 from tools.translate import _
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)
205 I get the approval from both the suppliers. So I approve my purchase orders.
207 !python {model: purchase.order}: |
208 from tools.translate import _
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)
216 I see two incoming pickings for Orange and Sugar.
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!')
223 I receive both the products. My incoming pickings are done.
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
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})