odoo 在原有工做流中添加審批流api
步驟:app
一、加入所需的工做流節點以及相連的線(即所添加的審批流),代碼以下:函數
1 <?xml version="1.0" encoding="utf-8"?> 2 <openerp> 3 <data> 4 <record id="hrp_sale_approve" model="workflow.activity"> 5 <field name="wkf_id" ref="sale.wkf_sale"/> 6 <field name="name">HrpApproval</field> 7 <field name="kind">function</field> 8 <field name="action">start_base_workflow()</field> 9 </record> 10 11 <record id="trans_confirmed_hrp_approve" model="workflow.transition"> 12 <field name="act_from" ref="sale.act_draft"/> 13 <field name="act_to" ref="hrp_sale_approve"/> 14 <field name="signal">to_hrpApprove</field> 15 </record> 16 17 <record id="hrp_sale_approve_trans" model="workflow.transition"> 18 <field name="act_from" ref="hrp_sale_approve"/> 19 <field name="act_to" ref="sale.act_router"/> 20 <field name="condition">is_complete_approved</field> 21 <field name="signal"/> 22 <field name="group_id" ref=""/> 23 </record> 24 25 <record id="sale.trans_sent_router" model="workflow.transition"> 26 <field name="act_from" ref="sale.act_sent"/> 27 <field name="act_to" ref="hrp_sale_approve"/> 28 <field name="signal">to_hrpApprove</field> 29 </record> 30 </data> 31 </openerp>
效果以下,ui
二、添加審批流的相關按鈕spa
三、_state_selection函數的相關映射,不懂可參考前一篇博客3d
四、is_complete_approved 字段來自動控制工做流的走向code
五、在state中添加等待審批狀態router
六、start_base_workflow函數啓動審批流xml
七、重寫相關審批流按鈕,根據本身所需來重寫blog
1 # 取消 2 @api.multi 3 def action_cancel(self): 4 for rec in self: 5 rec.state = 'cancel' 6 7 # 完成 8 @api.multi 9 def action_done(self): 10 for rec in self: 11 rec.state = 'done' 12 13 # 批准邏輯 14 @api.multi 15 def action_approve(self): 16 for rec in self: 17 rec.state = 'approved' 18 self.signal_workflow('to_hrpApprove') 19 20 # 拒絕邏輯 21 @api.multi 22 def action_refuse(self): 23 for rec in self: 24 rec.state = 'draft' 25 26 # 批准訂單 27 @api.model 28 def complete_approve(self, requisition_id): 29 requisition_order = self.browse(requisition_id) 30 requisition_order.write({'is_complete_approved': True}) 31 32 # 拒絕訂單 33 @api.model 34 def refuse_approve(self, requisition_id): 35 requisition_order = self.browse(requisition_id) 36 requisition_order.action_refuse() 37 38 # 拒絕按鈕邏輯 39 @api.multi 40 def order_refuse_task(self): 41 if self.approve_task: 42 wkf_task_obj = self.env['hrp.base.wkf.task'] 43 return wkf_task_obj.approve_note_view(self.approve_task.id, 'refuse') 44 else: 45 return True 46 47 # 審批按鈕邏輯 48 @api.multi 49 def order_approve_task(self): 50 if self.approve_task: 51 wkf_task_obj = self.env['hrp.base.wkf.task'] 52 return wkf_task_obj.approve_note_view(self.approve_task.id, 'approve') 53 else: 54 return True
八、action_button_confirm方法爲提交訂單按鈕,按下後將跳到審批流執行審批
1 def action_button_confirm(self, cr, uid, ids, context=None): 2 self.signal_workflow(cr, uid, ids, 'to_hrpApprove') 3 self.write(cr, uid, ids, {'state': 'confirmed'}) 4 return True
self.signal_workflow(cr, uid, ids, 'to_hrpApprove'):發送一個信號to_hrpApprove,則將自動執行到審批流。
self.write(cr, uid, ids, {'state': 'confirmed'}) :將state狀態改寫爲'confirmed'