Workflow with a change state button

Asked by Maxime

Hi,

i'm trying to realise a worflow with button to change a contract's state (draft,pending,finish)

i can change the state from draft to pending but i can't switch from pending to finish ...

.py code :

....
def contracts_draft(self, cr, uid, ids):
self.write(cr, uid, ids,{'state_wrk' : 'draft'})
print 'draft'
return True

def contracts_pending(self, cr, uid, ids):
self.write(cr, uid, ids,{'state_wrk' : 'pending'})
print 'pending'
return True

def contracts_finished(self, cr, uid, ids):
self.write(cr, uid, ids,{'state_wrk' : 'finished'})
print 'finished'
return True

def contracts_cancelled(self, cr, uid, ids):
self.write(cr, uid, ids,{'state_wrk' : 'cancelled'})
print 'cancelled'
return True

_columns = {
'state_wrk': fields.selection([('draft', 'Draft'), ('pending','Pending'), ('finished','Finished'), ('cancelled','Cancelled')], 'State', readonly=True),
.....
}

view.xml code :

<field>
<group colspan="1" col="4">
<button name="contracts_pending" string="Pending" states="draft" icon="gtk-execute"/>
<button name="contracts_finished" string="Finished" states="pending" icon="gtk-execute"/>
<button name="contracts_cancelled" string="Cancel" icon="gtk-cancel" states="draft,pending,finished"/>
</group>

workflow.xml code :

<!-- header record -->
<record model="workflow" id="wkf_contracts">
<field name="name">contracts.wkf</field>
<field name="osv">contracts</field>
<field name="on_create">True</field>
</record>

<!--Contracts -->
<!-- activity record -->
<record model="workflow.activity" id="act_contracts_draft">
<field name="wkf_id" ref="wkf_contracts" />
<field name="flow_start">True</field>
<field name="name">draft</field>
<field name="kind">function</field>
<field name="action">contracts_draft()</field>
</record>

<record model="workflow.activity" id="act_contracts_pending">
<field name="wkf_id" ref="wkf_contracts" />
<field name="name">pending</field>
<field name="kind">function</field>
<field name="action">contracts_pending()</field>
</record>

<record model="workflow.activity" id="act_contracts_finished">
<field name="wkf_id" ref="wkf_contracts" />
<field name="name">finished</field>
<field name="kind">function</field>
<field name="flow_stop">True</field>
<field name="action">contracts_finished()</field>
</record>

<record model="workflow.activity" id="act_contracts_cancelled">
<field name="wkf_id" ref="wkf_contracts" />
<field name="name">cancelled</field>
<field name="kind">function</field>
<field name="flow_stop">True</field>
<field name="action">contracts_cancelled()</field>
</record>

<!-- transition record -->
<record model="workflow.transition" id="contracts_t1">
<field name="act_from" ref="act_contracts_draft" />
<field name="act_to" ref="act_contracts_pending" />
<field name="signal">contracts_pending</field>
</record>

<record model="workflow.transition" id="contracts_t2">
<field name="act_from" ref="act_contracts_pending" />
<field name="act_to" ref="act_contracts_finished" />
<field name="signal">contracts_finished</field>
</record>

<record id="contracts_draft_cancel" model="workflow.transition">
<field name="act_from" ref="act_contracts_draft"/>
<field name="act_to" ref="act_contracts_cancelled"/>
<field name="signal">contracts_cancelled</field>
</record>

<record id="contracts_pending_cancel2" model="workflow.transition">
<field name="act_from" ref="act_contracts_pending"/>
<field name="act_to" ref="act_contracts_cancelled"/>
<field name="signal">contracts_cancelled</field>
</record>

If i add a new button finished next to the pending button that's work ...
but i would like to have only one button to switch the contract 's state
i don't understand why that's not work with one button ...

i'm sorry for my poor english ... I hope you understand me :)

Question information

Language:
English Edit question
Status:
Solved
For:
Odoo Addons (MOVED TO GITHUB) Edit question
Assignee:
No assignee Edit question
Solved by:
gpa(OpenERP)
Solved:
Last query:
Last reply:
Revision history for this message
Maxime (maximej) said :
#1

Does anybody have an idea to help me please ?

Revision history for this message
Best gpa(OpenERP) (gpa-openerp) said :
#2

Hello ,

You have done some mistakes in the code.
You can rectify your mistake by following code.

1.You do not define transition for finished to pending.
<record id="contracts_finished_pending" model="workflow.transition">
   <field name="act_from" ref="act_contracts_finished"/>
   <field name="act_to" ref="act_contracts_pending"/>
   <field name="signal">contracts_pending</field>
  </record>

2.When you want to go from finished to pending then you can not stop your flow.
<record model="workflow.activity" id="act_contracts_finished">
   <field name="wkf_id" ref="wkf_contracts" />
   <field name="name">finished</field>
   <field name="kind">function</field>
<!-- <field name="flow_stop">True</field>-->
   <field name="action">contracts_finished()</field>
  </record>
Hope this will help you.
Thanks.

Revision history for this message
Maxime (maximej) said :
#3

thanks gpa :)
but I ended up using two buttons (pending and finished) :)

Revision history for this message
Maxime (maximej) said :
#4

Thanks gpa(Open ERP), that solved my question.