[FIX] procurement, mrp, project_mrp: refactored the worflow in order to fix the case where mrp wasn't installed and we configured a product as mto with type=='produce'
bzr revid: qdp-launchpad@openerp.com-20121214145833-32q17yb2gw5rlhed
This commit is contained in:
parent
724b34b3b3
commit
a26b04c921
|
@ -116,6 +116,10 @@
|
|||
|
||||
<!-- Procurement -->
|
||||
|
||||
<record id="act_need_production" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf_procurement"/>
|
||||
<field name="name">need_production</field>
|
||||
</record>
|
||||
<record id="act_produce" model="workflow.activity">
|
||||
<field name="wkf_id" ref="procurement.wkf_procurement"/>
|
||||
<field name="name">produce</field>
|
||||
|
@ -123,30 +127,34 @@
|
|||
<field name="subflow_id" search="[('osv','=','mrp.production')]"/>
|
||||
<field name="action">action_produce_assign_product()</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="trans_confirm_mto_need_production" model="workflow.transition">
|
||||
<field name="act_from" ref="procurement.act_confirm_mto"/>
|
||||
<field name="act_to" ref="act_need_production"/>
|
||||
<field name="condition">check_produce()</field>
|
||||
</record>
|
||||
<record id="trans_product_check_produce" model="workflow.transition">
|
||||
<field name="act_from" ref="procurement.act_produce_check"/>
|
||||
<field name="act_from" ref="act_need_production"/>
|
||||
<field name="act_to" ref="act_produce"/>
|
||||
<field name="condition">check_product()</field>
|
||||
<field name="condition">is_product() and check_bom_exists()</field>
|
||||
</record>
|
||||
|
||||
<record id="trans_produce_cancel" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce"/>
|
||||
<field name="act_to" ref="procurement.act_cancel"/>
|
||||
<field name="signal">subflow.cancel</field>
|
||||
</record>
|
||||
|
||||
<record id="trans_produce_make_done" model="workflow.transition">
|
||||
|
||||
<record id="trans_produce_finished_prod" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce"/>
|
||||
<field name="act_to" ref="procurement.act_make_done"/>
|
||||
<field name="signal">subflow.done</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="trans_conf_conf_wait" model="workflow.transition">
|
||||
<field name="act_from" ref="procurement.act_confirm"/>
|
||||
<field name="act_to" ref="procurement.act_confirm_temp"/>
|
||||
<field name="condition">not test_cancel() and not get_phantom_bom_id()</field>
|
||||
</record>
|
||||
|
||||
<record id="trans_produce_cancel" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce"/>
|
||||
<field name="act_to" ref="procurement.act_cancel"/>
|
||||
<field name="signal">subflow.cancel</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -33,19 +33,24 @@ class procurement_order(osv.osv):
|
|||
'property_ids': fields.many2many('mrp.property', 'procurement_property_rel', 'procurement_id','property_id', 'Properties'),
|
||||
'production_id': fields.many2one('mrp.production', 'Manufacturing Order'),
|
||||
}
|
||||
|
||||
|
||||
def check_produce_product(self, cr, uid, procurement, context=None):
|
||||
return True
|
||||
|
||||
def check_bom_exists(self, cr, uid, ids, context=None):
|
||||
""" Finds the bill of material for the product from procurement order.
|
||||
@return: True or False
|
||||
"""
|
||||
properties = [x.id for x in procurement.property_ids]
|
||||
bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_id.id, procurement.product_uom.id, properties)
|
||||
if not bom_id:
|
||||
cr.execute('update procurement_order set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id))
|
||||
for (id, name) in self.name_get(cr, uid, procurement.id):
|
||||
message = _("Procurement '%s' has an exception: 'No BoM defined for this product !'") % name
|
||||
self.message_post(cr, uid, [procurement.id], body=message, context=context)
|
||||
return False
|
||||
for procurement in self.browse(cr, uid, ids, context=context):
|
||||
product = procurement.product_id
|
||||
properties = [x.id for x in procurement.property_ids]
|
||||
bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_id.id, procurement.product_uom.id, properties)
|
||||
if not bom_id:
|
||||
cr.execute('update procurement_order set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id))
|
||||
for (id, name) in self.name_get(cr, uid, procurement.id):
|
||||
message = _("Procurement '%s' has an exception: 'No BoM defined for this product !'") % name
|
||||
self.message_post(cr, uid, [procurement.id], body=message, context=context)
|
||||
return False
|
||||
return True
|
||||
|
||||
def get_phantom_bom_id(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -241,7 +241,7 @@ class procurement_order(osv.osv):
|
|||
@param procurement: Current procurement.
|
||||
@return: True or False.
|
||||
"""
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_make_to_stock(self, cr, uid, ids, context=None):
|
||||
""" Checks product type.
|
||||
|
|
|
@ -63,17 +63,6 @@
|
|||
<field name="kind">function</field>
|
||||
<field name="action">action_move_assigned()</field>
|
||||
</record>
|
||||
<record id="act_produce_check" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf_procurement"/>
|
||||
<field name="name">produce_check</field>
|
||||
</record>
|
||||
<!-- act_produce_service should be move in project_mrp module. -->
|
||||
<record id="act_produce_service" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf_procurement"/>
|
||||
<field name="name">produce_service</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">action_produce_assign_service()</field>
|
||||
</record>
|
||||
|
||||
<record id="act_make_done" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf_procurement"/>
|
||||
|
@ -189,12 +178,13 @@
|
|||
<field name="act_to" ref="act_make_to_stock"/>
|
||||
<field name="condition">check_make_to_stock()</field>
|
||||
</record>
|
||||
<record id="trans_confirm_mto_produce_check" model="workflow.transition">
|
||||
|
||||
<record id="trans_confirm_mto_make_done" model="workflow.transition">
|
||||
<field name="act_from" ref="act_confirm_mto"/>
|
||||
<field name="act_to" ref="act_produce_check"/>
|
||||
<field name="condition">check_produce()</field>
|
||||
<field name="act_to" ref="act_make_done"/>
|
||||
<field name="condition">not check_produce()</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="trans_make_to_stock_make_done" model="workflow.transition">
|
||||
<field name="act_from" ref="act_make_to_stock"/> <!-- TOFIX: If product is service product and procure method is 'make_to_stock', procurement is closed without generated service -->
|
||||
<field name="act_to" ref="act_make_done"/>
|
||||
|
@ -202,29 +192,6 @@
|
|||
<field name="trigger_model" eval="False"/>
|
||||
<field name="trigger_expr_id" eval="False"/>
|
||||
</record>
|
||||
<!-- TOFIX: Without installing 'mrp' module, If product is produce(mto), procurement never close (Its gone in idle) so sale order never close and also invoice never created if post paid invoice. solution of this issue is below, just add one transition from act_produce_check to act_make_done -->
|
||||
<!--
|
||||
<record id="trans_produce_make_done" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce_check"/>
|
||||
<field name="act_to" ref="procurement.act_make_done"/>
|
||||
<field name="condition">check_product()</field>
|
||||
</record> -->
|
||||
|
||||
<!-- TOFIX: service related transition should be move into project_mrp module. -->
|
||||
<record id="trans_product_check_produce_service" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce_check"/>
|
||||
<field name="act_to" ref="act_produce_service"/>
|
||||
<field name="condition">not check_product()</field>
|
||||
</record>
|
||||
<record id="trans_produce_service_cancel" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce_service"/>
|
||||
<field name="act_to" ref="act_cancel"/>
|
||||
<field name="signal">subflow.cancel</field>
|
||||
</record>
|
||||
<record id="trans_produce_service_make_done" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce_service"/>
|
||||
<field name="act_to" ref="act_make_done"/>
|
||||
</record>
|
||||
|
||||
<record id="trans_make_done_done" model="workflow.transition">
|
||||
<field name="act_from" ref="act_make_done"/>
|
||||
|
|
|
@ -1,6 +1,27 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="act_produce_service" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf_procurement"/>
|
||||
<field name="name">produce_service</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">action_produce_assign_service()</field>
|
||||
</record>
|
||||
|
||||
<record id="trans_product_check_produce_service" model="workflow.transition">
|
||||
<field name="act_from" ref="mrp.act_produce_check"/>
|
||||
<field name="act_to" ref="act_produce_service"/>
|
||||
<field name="condition">not is_product()</field>
|
||||
</record>
|
||||
<record id="trans_produce_service_make_done" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce_service"/>
|
||||
<field name="act_to" ref="procurement.act_make_done"/>
|
||||
</record>
|
||||
<record id="trans_produce_service_cancel" model="workflow.transition">
|
||||
<field name="act_from" ref="act_produce_service"/>
|
||||
<field name="act_to" ref="procurement.act_cancel"/>
|
||||
<field name="signal">subflow.cancel</field>
|
||||
</record>
|
||||
<record id="trans_make_done_done2" model="workflow.transition">
|
||||
<field name="act_from" ref="procurement.act_make_done"/>
|
||||
<field name="act_to" ref="procurement.act_done"/>
|
||||
|
|
Loading…
Reference in New Issue