Как связать интерактивную панель состояния Odoo с рабочим процессом?

Я определил действия состояния, кнопки и рабочий процесс. Они работают нормально, проблема в том, что когда я пытался добавить интерактивную строку состояния, и каждый раз, когда я нажимаю на строку состояния, на самом деле она ничего не делает, кроме изменения состояния записи.

Как связать строку состояния с рабочим процессом/действиями?

модель.py

def action_state_draft(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'draft' })
    return True

def action_state_confirmed(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'confirmed' })
    return True

def action_state_posted(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'posted' })
    return True

def action_state_cancelled(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'cancelled' })
    return True

def hello_world(self):
    print "Hello World!"

def hello_world_second(self):
    print "Hello World Second!"

model_view.xml

<header>
    <button name="action_state_confirmed" string="Confirm" states="draft" />
    <button name="action_state_posted" string="Post" states="confirmed" />
    <button name="action_state_cancelled" string="Cancel" states="draft,confirmed,posted" />
    <field name="state" widget="statusbar" clickable="True" statusbar_visible="draft,confirmed,posted,cancelled"/>
</header>

model_workflow.xml

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>      
        <record id="ig_account_voucher_wkf" model="workflow">
            <field name="name">ig.account.voucher.wkf</field>
            <field name="osv">ig.account.voucher</field>
            <field name="on_create">True</field>
        </record>

        <record id="act_draft" model="workflow.activity">
            <field name="wkf_id" ref="ig_account_voucher_wkf"/>
            <field name="name">draft</field>
            <field name="flow_start">True</field>           
        </record>

        <record id="act_confirmed" model="workflow.activity">
            <field name="wkf_id" ref="ig_account_voucher_wkf"/>
            <field name="name">confirmed</field>
            <field name="action">
                write({'state':'confirmed'})
                hello_world()
                hello_world_second()
            </field>
            <field name="kind">function</field>
        </record>

        <record id="act_posted" model="workflow.activity">
            <field name="wkf_id" ref="ig_account_voucher_wkf"/>
            <field name="name">posted</field>
            <field name="action">write({'state':'posted'})</field>
            <field name="kind">function</field>
        </record>

        <record id="act_posted" model="workflow.activity">
            <field name="wkf_id" ref="ig_account_voucher_wkf"/>
            <field name="name">cancelled</field>
            <field name="action">write({'state':'cancelled'})</field>
            <field name="kind">function</field>
            <field name="flow_stop">True</field>
        </record>

        <record id="transition_draft_confirmed" model="workflow.transition">
            <field name="act_from" ref="act_draft"/>
            <field name="act_to" ref="act_confirmed"/>
            <field name="condition">True</field>
            <field name="signal">action_state_confirmed</field>
        </record>

        <record id="transition_confirmed_posted" model="workflow.transition">
            <field name="act_from" ref="act_confirmed"/>
            <field name="act_to" ref="act_posted"/>
            <field name="condition">True</field>
            <field name="signal">action_state_posted</field>
        </record>

        <record id="transition_confirmed_cancelled" model="workflow.transition">
            <field name="act_from" ref="act_confirmed"/>
            <field name="act_to" ref="act_posted"/>
            <field name="condition">True</field>
            <field name="signal">action_state_cancelled</field>
        </record>
    </data>
</openerp>

Еще один актуальный небольшой вопрос: зачем нам рабочий процесс, а не просто использование кнопок и действий?


person William Wino    schedule 25.05.2015    source источник


Ответы (1)


В вашем коде отсутствуют запятые в действии рабочего процесса, когда вы передаете несколько методов в действии рабочего процесса.

Пожалуйста, сначала сделайте правильно

   <record id="act_confirmed" model="workflow.activity">
        <field name="wkf_id" ref="ig_account_voucher_wkf"/>
        <field name="name">confirmed</field>
        <field name="action">
            write({'state':'confirmed'}),
            hello_world(),
            hello_world_second()
        </field>
        <field name="kind">function</field>
    </record>

Другой ответ на ваш вопрос:

Зачем нужен рабочий процесс вместо кнопки??

Основная цель состоит в том, что рабочий поток определяется как поток бизнес-процессов.

Другими целями являются:

  1. описание эволюции документа во времени

  2. автоматический запуск действий при выполнении некоторых условий

  3. управление ролями компании и этапами проверки

  4. управление взаимодействием между различными объектами/модулями

  5. графический инструмент для визуализации документооборота

Я надеюсь, что это должно быть полезно для вас ..:)

person DASADIYA CHAITANYA    schedule 25.05.2015
comment
Нет, запятые не важны. Пожалуйста, взгляните на этот оригинальный файл Odoo /opt/odoo/addons/account/account_invoice_workflow.xml строки 25-28. - person William Wino; 26.05.2015
comment
И все же я не мог заставить работать строку состояния. Хотя кнопки работают. - person William Wino; 26.05.2015
comment
вы должны заменить поле как состояние, которое вы упоминаете как строку состояния, используя xpath, вы можете заменить это поле и попытаться проверить еще раз - person DASADIYA CHAITANYA; 26.05.2015
comment
Уже state. Взгляните на мой фрагмент кода выше. <field name="state" widget="statusbar" clickable="True" statusbar_visible="draft,confirmed,posted,cancelled"/> - person William Wino; 26.05.2015
comment
да, определенно, но используйте xpath, чтобы заменить этот пример ‹xpath expr=//field[@name='state'] position='replace'› - person DASADIYA CHAITANYA; 26.05.2015
comment
‹xpath expr=//field[@name='state'] position='replace'› ‹field name='state' widget=statusbar statusbar_visible=draft,confirmed,posted,cancelled,add_your_new_state_overhear_with_commas /› ‹/xpath› - person DASADIYA CHAITANYA; 26.05.2015
comment
Я до сих пор не верю в то, что рабочие процессы — это всегда хорошая идея, особенно в том, что некоторые встроенные модули Odoo их не используют. - person Aron Lorincz; 06.01.2016
comment
@ ÁronLőrincz Основная причина рабочего процесса заключается в управлении нашим документом на разных этапах (например, Предложение, Заказ на продажу, Оплаченный счет), чтобы мы могли легко понять этот поток каждого документа на этапе. И многое другое в Odoo 8.0 или более поздней версии. версия может удалить всю логику, связанную с рабочим процессом, и все просто добавить ее как виджет строки состояния в представлении формы. - person DASADIYA CHAITANYA; 06.01.2016