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>