Search code examples
workflowodooodoo-10

odoo workflow not working, following odoo 10 documentation


i am following the odoo 10 workflow documentation tutorial and i was unable to get any response form clicking on the workflow buttons, no error is showing.

*please note that in my code the name of the module i am developing is "testModule" which is written as "test_module" inside python instead of "openacademy" that is used in the docs tutorial. and the view file is views.xml instead of openacademy.xml , could any of that have an impact?

views.xml

...
<!-- this is the sessions views -->
    <!-- session form view -->
    <record model="ir.ui.view" id="session_form_view">
        <field name="name">session.form</field>
        <field name="model">test_module.session</field>
        <field name="arch" type="xml">
            <form string="Session Form">
              <header>
                    <button name="draft" type="workflow"
                          string="Reset to draft"
                          states="confirmed,done"/>
                    <button name="confirm" type="workflow"
                          string="Confirm" states="draft"
                          class="oe_highlight"/>
                    <button name="done" type="workflow"
                          string="Mark as done" states="confirmed"
                          class="oe_highlight"/>
                  <field name="state" widget="statusbar"/>
              </header>
                ...

session_workflow.xml

<odoo>
<data>
    <record model="workflow" id="wkf_session">
        <field name="name">OpenAcademy sessions workflow</field>
        <field name="osv">test_module.session</field>
        <field name="on_create">True</field>
    </record>
    <record model="ir.actions.server" id="set_session_to_draft">
        <field name="name">Set session to Draft</field>
        <field name="model_id" ref="model_test_module_session"/>
        <field name="code">
model.search([('id', 'in', context['active_ids'])]).action_draft()
        </field>
    </record>

    <record model="workflow.activity" id="draft">
        <field name="name">Draft</field>
        <field name="wkf_id" ref="wkf_session"/>
        <field name="flow_start" eval="True"/>
        <field name="kind">dummy</field>
        <field name="action"></field>
        <field name="action_id" ref="set_session_to_draft"/>
    </record>
    <record model="ir.actions.server" id="set_session_to_confirmed">
        <field name="name">Set session to Confirmed</field>
        <field name="model_id" ref="model_test_module_session"/>
        <field name="code">
model.search([('id', 'in', context['active_ids'])]).action_confirm()
        </field>
    </record>

    <record model="workflow.activity" id="confirmed">
        <field name="name">Confirmed</field>
        <field name="wkf_id" ref="wkf_session"/>
        <field name="kind">dummy</field>
        <field name="action"></field>
        <field name="action_id" ref="set_session_to_confirmed"/>
    </record>
    <record model="ir.actions.server" id="set_session_to_done">
        <field name="name">Set session to Done</field>
        <field name="model_id" ref="model_test_module_session"/>
        <field name="code">
model.search([('id', 'in', context['active_ids'])]).action_done()
        </field>
    </record>
    <record model="workflow.activity" id="done">
        <field name="name">Done</field>
        <field name="wkf_id" ref="wkf_session"/>
        <field name="kind">dummy</field>
        <field name="action"></field>
        <field name="action_id" ref="set_session_to_done"/>
    </record>

    <record model="workflow.transition" id="session_draft_to_confirmed">
        <field name="act_from" ref="draft"/>
        <field name="act_to" ref="confirmed"/>
        <field name="signal">confirm</field>
    </record>
    <record model="workflow.transition" id="session_confirmed_to_draft">
        <field name="act_from" ref="confirmed"/>
        <field name="act_to" ref="draft"/>
        <field name="signal">draft</field>
    </record>
    <record model="workflow.transition" id="session_done_to_draft">
        <field name="act_from" ref="done"/>
        <field name="act_to" ref="draft"/>
        <field name="signal">draft</field>
    </record>
    <record model="workflow.transition" id="session_confirmed_to_done">
        <field name="act_from" ref="confirmed"/>
        <field name="act_to" ref="done"/>
        <field name="signal">done</field>
    </record>
    <record model="workflow.transition" id="session_auto_confirm_half_filled">
        <field name="act_from" ref="draft"/>
        <field name="act_to" ref="confirmed"/>
        <field name="condition">taken_seats &gt; 50</field>
    </record>

</data>

inculded the call in manafest.py

 'data': [
    # 'security/ir.model.access.csv',
    'views/views.xml',
    'views/templates.xml',
    'views/partner.xml',
    'views/session_workflow.xml',

],

created the fields and functions in my sessions model in models.py

state = fields.Selection([
    ('draft', "Draft"),
    ('confirmed', "Confirmed"),
    ('done', "Done"),
])

@api.multi
def action_draft(self):
    self.state = 'draft'

@api.multi
def action_confirm(self):
    self.state = 'confirmed'

@api.multi
def action_done(self):
    self.state = 'done'

and at the end i upgraded the module


Solution

  • This happens with Sessions you created before implementing the session_workflow.xml

    It should work fine for sessions you create after implementing the session_workflow.xml. They placed a warning for it somewhere in the middle of the example.

    Warning

    A workflow associated with a model is only created when the model's records are created. Thus there is no workflow instance associated with session instances created before the workflow's definition