Sale order 的workflow改过之后,不能自动产生采购单
-
我在sale order的demo下做的时候,销售的Supply method=buy的product,workflow从state=draft -> state=manual系统自动会产生采购单的,可是我改了sale orderd的workflow过后,仍旧调用原来的function:action_wait(),但采购单不能自动生成了
demo的workflow:
<record id="act_draft" model="workflow.activity">
<field name="wkf_id" ref="wkf_sale"/>
<field name="flow_start">True</field>
<field name="name">draft</field>
</record>
<record id="act_router" model="workflow.activity">
<field name="wkf_id" ref="wkf_sale"/>
<field name="name">router</field>
<field name="kind">function</field>
<field name="action">action_wait()</field>
<field name="split_mode">OR</field>
</record>
<record id="trans_draft_router" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_router"/>
<field name="signal">order_confirm</field>
</record>
改过之后的workflow:
<record id="act_bmapprove" model="workflow.activity">
<field name="wkf_id" ref="wkf_sale"/>
<field name="name">bm_approve</field>
<field name="kind">function</field>
<field name="action">write({'state':'bm_approved'})</field>
</record>
<record id="act_gmapprove" model="workflow.activity">
<field name="wkf_id" ref="wkf_sale"/>
<field name="name">gm_approve</field>
<field name="action">action_wait()</field>
<field name="split_mode">OR</field>
</record>
<record id="trans_bmapprove_gmapprove" model="workflow.transition">
<field name="act_from" ref="act_bmapprove"/>
<field name="act_to" ref="act_gmapprove"/>
<field name="signal">gm_approve</field>
</record>action_wait的function没有改过:
def action_wait(self, cr, uid, ids, *args):
event_p = self.pool.get('res.partner.event.type').check(cr, uid, 'sale_open')
event_obj = self.pool.get('res.partner.event')
for o in self.browse(cr, uid, ids):
if event_p:
event_obj.create(cr, uid, {'name': 'Sale Order: '+ o.name,
'partner_id': o.partner_id.id,
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'user_id': (o.user_id and o.user_id.id) or uid,
'partner_type': 'customer', 'probability': 1.0,
'planned_revenue': o.amount_untaxed})
if (o.order_policy == 'manual'):
self.write(cr, uid, [o.id], {'state': 'manual'})
else:
self.write(cr, uid, [o.id], {'state': 'progress'})
self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line]) -
是否转为采购单与你改的那部分workflow无关。
销售单是否转为采购单需要运行mrp运算来决定,可以在生产管理模块中手动运行,或者在系统管理的设置里有自动按时来启动mrp运算的。
-
你大概理解错了我的意思,系统对销售订单的处理当然会涉及工作流,但是你所改动的workflow部分与所提到的不能产生采购订单没有直接关系。
我们看一下sale.order.basic这个工作流,当通过点击销售订单确认按钮(gm_approve),工作流pass router节点来到ship节点时就会激发action_ship_create函数,其中:[code] wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.procurement', proc_id, 'button_confirm', cr)
self.pool.get('sale.order.line').write(cr, uid, [line.id], {'procurement_id': proc_id})
[/code]上面的代码意思是根据你的销售订单创建并确认了一个对应的Procurement order(物料需求单)
你只有运行mrp运算(或者叫run procurement)它才能决定是否产生采购订单。(当你的订单和产品数量非常多时,一般mrp运算是很耗时的,所以我们在管理菜单中可以设置让它定时自动运行,比如在晚上没有人用系统的时候)为什么要多一个Procurement的过程,举一个最简单的例子,比如有两个不同的客户订了同样的东西,系统中有两张销售订单,通过procurement运算就可以合并这个需求生成一张采购订单。
procurement order 长的样子(我这里是开发中的v5.2,可能跟v5.0X稍有不同):
[attach]461[/attach][[i] 本帖最后由 digitalsatori 于 2010-3-25 17:38 编辑 [/i]]
-
@wjfonhand, 我确定你没有RP问题
@jimmy_zjw 在系统管理菜单下检查一下你的 mrp.procurement.basic 工作流的confirm节点,其出转换(outgoing transition)名字为confirm_wait是否有定义一个叫button_check的Signal。如果没有定义这个signal,销售订单确定后直接生成采购订单是可能的。 可是在我本地电脑安装的OE中(5.0.X stable和 5.2dev)无论是在xml workflow定义中还是在系统菜单下都有这个button_check的signal.
但是在demo.shine-it.net中却没有这个signal, 可能是有人删除了,也有可能是OE在某个小版本中没有设置这个signal。但是不设置这个signal的procurement工作流,虽然似乎确实能满足某些用户的简单需求,不过实际上可能就是个后来被fix的bug:)
[[i] 本帖最后由 digitalsatori 于 2010-3-26 12:59 编辑 [/i]]