228 lines
7.8 KiB
YAML
228 lines
7.8 KiB
YAML
|
-
|
||
|
In order to test the mrp phantom bom type in OpenERP, I will create products
|
||
|
and then I will create Phantom bom structure for those products.
|
||
|
-
|
||
|
I create the products required to produce some orange juices: Oranges, Sugar and Water.
|
||
|
-
|
||
|
!record {model: product.uom, id: product_uom_litre0}:
|
||
|
category_id: product.product_uom_categ_kgm
|
||
|
factor: 1.0
|
||
|
name: Litre
|
||
|
rounding: 0.01
|
||
|
-
|
||
|
!record {model: product.product, id: product_product_orangejuice0}:
|
||
|
categ_id: product.cat1
|
||
|
name: Orange Juice
|
||
|
procure_method: make_to_order
|
||
|
supply_method: produce
|
||
|
type: product
|
||
|
uom_id: product_uom_litre0
|
||
|
uom_po_id: product_uom_litre0
|
||
|
-
|
||
|
!record {model: product.product, id: product_product_orange0}:
|
||
|
categ_id: product.cat1
|
||
|
name: Orange
|
||
|
procure_method: make_to_stock
|
||
|
seller_ids:
|
||
|
- delay: 1
|
||
|
name: base.res_partner_asus
|
||
|
qty: 1.0
|
||
|
supply_method: buy
|
||
|
type: product
|
||
|
uom_id: product.product_uom_kgm
|
||
|
uom_po_id: product.product_uom_kgm
|
||
|
-
|
||
|
!record {model: product.product, id: product_product_sugar0}:
|
||
|
categ_id: product.cat1
|
||
|
name: Sugar
|
||
|
procure_method: make_to_stock
|
||
|
seller_ids:
|
||
|
- delay: 1
|
||
|
name: base.res_partner_desertic_hispafuentes
|
||
|
qty: 2.0
|
||
|
supply_method: buy
|
||
|
type: product
|
||
|
uom_id: product.product_uom_kgm
|
||
|
uom_po_id: product.product_uom_kgm
|
||
|
-
|
||
|
!record {model: product.product, id: product_product_water0}:
|
||
|
categ_id: product.cat1
|
||
|
name: Water
|
||
|
procure_method: make_to_stock
|
||
|
supply_method: buy
|
||
|
type: consu
|
||
|
uom_id: product_uom_litre0
|
||
|
uom_po_id: product_uom_litre0
|
||
|
-
|
||
|
I define the BoM to produce an orange juice
|
||
|
-
|
||
|
!record {model: mrp.bom, id: mrp_bom_orangejuice0}:
|
||
|
company_id: base.main_company
|
||
|
name: Orange Juice
|
||
|
product_efficiency: 1.0
|
||
|
product_id: product_product_orangejuice0
|
||
|
product_qty: 1.0
|
||
|
product_uom: product_uom_litre0
|
||
|
type: phantom
|
||
|
-
|
||
|
!record {model: mrp.bom, id: mrp_bom_orangejuice0}:
|
||
|
bom_lines:
|
||
|
- bom_id: mrp_bom_orangejuice0
|
||
|
company_id: base.main_company
|
||
|
name: Orange
|
||
|
product_efficiency: 1.0
|
||
|
product_id: product_product_orange0
|
||
|
product_qty: 0.5
|
||
|
product_uom: product.product_uom_kgm
|
||
|
type: normal
|
||
|
- bom_id: mrp_bom_orangejuice0
|
||
|
company_id: base.main_company
|
||
|
name: Sugar
|
||
|
product_efficiency: 1.0
|
||
|
product_id: product_product_sugar0
|
||
|
product_qty: 0.02
|
||
|
product_uom: product.product_uom_kgm
|
||
|
type: normal
|
||
|
- bom_id: mrp_bom_orangejuice0
|
||
|
company_id: base.main_company
|
||
|
name: Water
|
||
|
product_efficiency: 1.0
|
||
|
product_id: product_product_water0
|
||
|
product_qty: 0.80000000000000004
|
||
|
product_uom: product_uom_litre0
|
||
|
type: normal
|
||
|
-
|
||
|
I define Minimum stock rules for my stockable products orange and sugar
|
||
|
-
|
||
|
!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/00002
|
||
|
product_id: product_product_orange0
|
||
|
product_max_qty: 10.0
|
||
|
product_min_qty: 5.0
|
||
|
product_uom: product.product_uom_kgm
|
||
|
qty_multiple: 1
|
||
|
warehouse_id: stock.warehouse0
|
||
|
-
|
||
|
!record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op1}:
|
||
|
company_id: base.main_company
|
||
|
location_id: stock.stock_location_stock
|
||
|
logic: max
|
||
|
name: OP/00003
|
||
|
product_id: product_product_sugar0
|
||
|
product_max_qty: 4.0
|
||
|
product_min_qty: 2.0
|
||
|
product_uom: product.product_uom_kgm
|
||
|
qty_multiple: 1
|
||
|
warehouse_id: stock.warehouse0
|
||
|
-
|
||
|
I want to produce 100 litres of Orange juice. I am creating a manufacturing order for this.
|
||
|
I want to see how much quantities of sub products I need, to produce the Orange juice.
|
||
|
-
|
||
|
I compute the data. I get the bill of material of Orange juice and list of
|
||
|
scheduled products according to my bom.
|
||
|
-
|
||
|
!record {model: mrp.production, id: mrp_production_mo0}:
|
||
|
company_id: base.main_company
|
||
|
date_planned: '2010-04-16 15:53:36'
|
||
|
location_dest_id: stock.stock_location_output
|
||
|
location_src_id: stock.stock_location_stock
|
||
|
name: MO/00002
|
||
|
product_id: product_product_orangejuice0
|
||
|
product_qty: 100.0
|
||
|
product_uom: product_uom_litre0
|
||
|
-
|
||
|
Creating an mrp.production record. Computing Bills of materials.
|
||
|
-
|
||
|
!record {model: mrp.production, id: mrp_production_mo0}:
|
||
|
bom_id: mrp.mrp_bom_orangejuice0
|
||
|
company_id: base.main_company
|
||
|
date_planned: '2010-04-16 15:53:36'
|
||
|
location_dest_id: stock.stock_location_output
|
||
|
location_src_id: stock.stock_location_stock
|
||
|
name: MO/00002
|
||
|
product_id: mrp.product_product_orangejuice0
|
||
|
product_lines:
|
||
|
- name: Orange
|
||
|
product_id: mrp.product_product_orange0
|
||
|
product_qty: 50.0
|
||
|
product_uom: product.product_uom_kgm
|
||
|
production_id: mrp_production_mo0
|
||
|
- name: Sugar
|
||
|
product_id: mrp.product_product_sugar0
|
||
|
product_qty: 2.0
|
||
|
product_uom: product.product_uom_kgm
|
||
|
production_id: mrp_production_mo0
|
||
|
- name: Water
|
||
|
product_id: mrp.product_product_water0
|
||
|
product_qty: 80.0
|
||
|
product_uom: mrp.product_uom_litre0
|
||
|
production_id: mrp_production_mo0
|
||
|
product_qty: 100.0
|
||
|
product_uom: mrp.product_uom_litre0
|
||
|
-
|
||
|
I confirm the order.
|
||
|
-
|
||
|
!workflow {model: mrp.production, action: button_confirm, ref: mrp_production_mo0}
|
||
|
-
|
||
|
I am checking Procurement orders. There are 3 orders generated for Oranges, Sugar and Water.
|
||
|
-
|
||
|
!python {model: mrp.procurement}: |
|
||
|
from tools.translate import _
|
||
|
proc_ids = self.search(cr, uid, [('origin','=',':MO/00002')])
|
||
|
assert proc_ids, _('No Procurements!')
|
||
|
-
|
||
|
The scheduler runs.
|
||
|
-
|
||
|
!function {model: mrp.procurement, name: run_scheduler}:
|
||
|
- model: mrp.procurement
|
||
|
search: "[('origin','=',':MO/00002')]"
|
||
|
-
|
||
|
I am checking Internal picking. I see one picking for Orange juice and its
|
||
|
stock moves for Oranges, Sugar and Water made correctly.
|
||
|
-
|
||
|
!python {model: stock.picking}: |
|
||
|
from tools.translate import _
|
||
|
pick_ids = self.search(cr, uid, [('origin','=',':MO/00002'),('type','=','internal')])
|
||
|
assert pick_ids, _('No Internal Pickings!')
|
||
|
-
|
||
|
According to minimum stock rules. I have 2 purchase orders for
|
||
|
Sugar with 6 Kg from Axelor and Orange 60 Kg from ASUStek.
|
||
|
-
|
||
|
I confirm the purchase order of Sugar and Orange.
|
||
|
-
|
||
|
!python {model: purchase.order}: |
|
||
|
from tools.translate import _
|
||
|
import netsvc
|
||
|
purch_ids = self.search(cr, uid, [('origin','in',['SCHEDULER','OP/00002','OP/00003'])])
|
||
|
assert purch_ids, _('No Purchase Orders were made!')
|
||
|
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 both the suppliers. So I approve my purchase orders.
|
||
|
-
|
||
|
!python {model: purchase.order}: |
|
||
|
from tools.translate import _
|
||
|
import netsvc
|
||
|
purch_ids = self.search(cr, uid, [('origin','in',['SCHEDULER','OP/00002','OP/00003']),('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 see two incoming pickings for Orange and Sugar.
|
||
|
-
|
||
|
!python {model: stock.picking}: |
|
||
|
from tools.translate import _
|
||
|
pick_ids = self.search(cr, uid, [('origin','in',['PO00001:SCHEDULER','PO00002:SCHEDULER','PO00003:OP/00002','PO00004:OP/00003']),('type','=','in')])
|
||
|
assert pick_ids, _('No Incoming Shipments found!')
|
||
|
-
|
||
|
I receive both the products. My incoming pickings are done.
|
||
|
-
|
||
|
!function {model: stock.move.split, name: split_lot}:
|
||
|
- model: stock.picking
|
||
|
search: "[('origin','in',['PO00001:SCHEDULER','PO00002:SCHEDULER','PO00003:OP/00002','PO00004:OP/00003']),('type','=','in')]"
|
||
|
|