I am currently working on a school project with Odoo v8 with custom models and workflows. For each state of the workflow I want to execute python code, but recently I got the following error. I have used the following website: https://www.odoo.com/nl_NL/forum/help-1/question/how-to-move-around-workflow-states-back-and-forth-21509
File "/usr/lib/python2.7/dist-packages/openerp/tools/safe_eval.py", line 314, in safe_eval
return eval(c, globals_dict, locals_dict)
File "", line 1, in <module>
ValueError: "name 'action_draft' is not defined" while evaluating
u'action_draft()'Model:
from openerp import models, fields, api, _
from openerp.exceptions import Warning class child(models.Model):
_name = 'xmi2odoo.child'
_description = 'child'
_states_ = [
# State machine: untitle
('draft', 'Draft'),
('submitted', 'Submitted'),
('confirmed', 'Confirmed'),
('cancelled', 'Cancelled'),
]
name = fields.Char(
string='name'
)
state = fields.Selection(
_states_,
'State',
default='draft',
)
parents = fields.Many2many(
'xmi2odoo.person',
'xmi2odoo_parents_parentoff_rel',
'child_id',
'person_id',
string='parents'
)
@api.multi
def action_cancelled(self):
res = self.write({'state': 'cancelled'})
return res
@api.multi
def action_confirmed(self):
res = self.write({'state': 'confirmed'})
return res
@api.multi
def action_draft(self):
res = self.write({'state': 'draft'})
return res
@api.multi
def action_submitted(self):
res = self.write({'state': 'submitted'})
return res
Model view:
<!-- FORMVIEW -->
<record id="view_xmi2odoo_child_form" model="ir.ui.view">
<field name="name">xmi2odoo.child.form</field>
<field name="model">xmi2odoo.child</field>
<field name="arch" type="xml">
<form string="child">
<header>
<button name="action_draft"
type="object"
states="cancelled"
string="To Draft"
class="oe_highlight"
/>
<button name="action_submitted"
type="object"
states="draft"
string="Submit"
class="oe_highlight"
/>
<button name="action_confirmed"
type="object"
states="submitted"
string="Confirm"
class="oe_highlight"
/>
<button name="action_cancelled"
type="object"
states="confirmed,draft,submitted"
string="Cancel"
class="oe_highlight"
/>
<field name="state" widget="statusbar"
statusbar_colors='{}'
/>
</header>
<sheet string="child">
<div class="oe_right oe_button_box" name="buttons">
</div>
<group>
<field name="name"
/>
<field name="parents"
/>
</group>
</sheet>
</form>
</field>
</record>Workflow:
<openerp>
<data>
<!-- Workflow -->
<record id="child_untitle_wkf" model="workflow">
<field name="name">xmi2odoo.child.untitle</field>
<field name="osv">xmi2odoo.child</field>
<field name="on_create">True</field>
</record>
<!-- Activities -->
<record id="a_0D08_0D26" model="workflow.activity">
<field name="wkf_id" ref="child_untitle_wkf"/>
<field name="flow_start">True</field>
<field name="name">Draft</field>
<field name="action">action_draft()</field>
<field name="kind">function</field>
</record>
<record id="a_0D08_0D32" model="workflow.activity">
<field name="wkf_id" ref="child_untitle_wkf"/>
<field name="name">Submitted</field>
<field name="action">action_submitted()</field>
<field name="kind">function</field>
</record>
<record id="a_0D08_0D27" model="workflow.activity">
<field name="wkf_id" ref="child_untitle_wkf"/>
<field name="name">Confirmed</field>
<field name="action">action_confirmed()</field>
<field name="kind">function</field>
</record>
<record id="a_0D08_0D28" model="workflow.activity">
<field name="wkf_id" ref="child_untitle_wkf"/>
<field name="flow_stop">True</field>
<field name="name">Cancelled</field>
<field name="action">action_cancelled()</field>
<field name="kind">function</field>
</record>
<!-- Transitions -->
<record id="t_0D08_0D2B" model="workflow.transition">
<field name="act_from" ref="a_0D08_0D26"/>
<field name="act_to" ref="a_0D08_0D28"/>
<field name="signal">action_cancelled</field>
<field name="condition">True</field>
</record>
<record id="t_0D08_0D2C" model="workflow.transition">
<field name="act_from" ref="a_0D08_0D27"/>
<field name="act_to" ref="a_0D08_0D28"/>
<field name="signal">action_cancelled</field>
<field name="condition">True</field>
</record>
<record id="t_0D08_0D2D" model="workflow.transition">
<field name="act_from" ref="a_0D08_0D28"/>
<field name="act_to" ref="a_0D08_0D26"/>
<field name="signal">action_draft</field>
<field name="condition">True</field>
</record>
<record id="t_0D08_0D33" model="workflow.transition">
<field name="act_from" ref="a_0D08_0D26"/>
<field name="act_to" ref="a_0D08_0D32"/>
<field name="signal">action_submitted</field>
<field name="condition">True</field>
</record>
<record id="t_0D08_0D34" model="workflow.transition">
<field name="act_from" ref="a_0D08_0D32"/>
<field name="act_to" ref="a_0D08_0D27"/>
<field name="signal">action_confirmed</field>
<field name="condition">True</field>
</record>
<record id="t_0D08_0D36" model="workflow.transition">
<field name="act_from" ref="a_0D08_0D32"/>
<field name="act_to" ref="a_0D08_0D28"/>
<field name="signal">action_cancelled</field>
<field name="condition">True</field>
</record>
</data>
</openerp>