Bỏ qua để đến Nội dung
Odoo Menu
  • Đăng nhập
  • Dùng thử miễn phí
  • Ứng dụng
    Tài chính
    • Kế toán
    • Hóa đơn
    • Chi phí
    • Bảng tính (BI)
    • Tài liệu
    • Ký tên
    Bán hàng
    • CRM
    • Bán hàng
    • POS Cửa hàng
    • POS Nhà hàng
    • Đăng ký
    • Cho thuê
    Trang web
    • Trình tạo trang web
    • Thương mại điện tử
    • Blog
    • Diễn đàn
    • Trò chuyện trực tiếp
    • Học trực tuyến
    Chuỗi cung ứng
    • Tồn kho
    • Sản xuất
    • PLM
    • Mua hàng
    • Bảo dưỡng
    • Chất lượng
    Nhân sự
    • Nhân viên
    • Tuyển dụng
    • Ngày nghỉ
    • Đánh giá
    • Giới thiệu
    • Đội xe
    Marketing
    • Marketing trên MXH
    • Marketing qua email
    • Marketing qua SMS
    • Sự kiện
    • Tự động hóa Marketing
    • Khảo sát
    Dịch vụ
    • Dự án
    • Bảng chấm công
    • Dịch vụ hiện trường
    • Hỗ trợ
    • Kế hoạch
    • Lịch hẹn
    Năng suất
    • Thảo luận
    • Phê duyệt
    • IoT
    • VoIP
    • Kiến thức
    • WhatsApp
    Ứng dụng của bên thứ ba Studio Odoo Nền tảng Đám mây Odoo
  • Ngành
    Bán lẻ
    • Nhà sách
    • Cửa hàng quần áo
    • Cửa hàng nội thất
    • Cửa hàng tạp hóa
    • Cửa hàng đồ kim khí
    • Cửa hàng đồ chơi
    Ẩm thực & Dịch vụ lưu trú
    • Bar và quán rượu
    • Nhà hàng
    • Đồ ăn nhanh
    • Guest house
    • Nhà phân phối đồ uống
    • Khách sạn
    Bất động sản
    • Công ty môi giới bất động sản
    • Công ty kiến trúc
    • Xây dựng
    • Quản lý bất động sản
    • Làm vườn
    • Hiệp hội chủ sở hữu bất động sản
    Tư vấn
    • Công ty kế toán
    • Đối tác Odoo
    • Công ty marketing
    • Công ty luật
    • Tuyển dụng
    • Thanh tra & chứng nhận
    Sản xuất
    • Dệt may
    • Kim loại
    • Nội thất
    • Ẩm thực
    • Nhà máy bia
    • Quà tặng doanh nghiệp
    Sức khoẻ & fitness
    • CLB thể thao
    • Cửa hàng kính mắt
    • Trung tâm fitness
    • Chuyên gia chăm sóc sức khỏe
    • Hiệu thuốc
    • Tiệm làm tóc
    Thương mại
    • Dịch vụ sửa chữa
    • Phần cứng CNTT & Hỗ trợ
    • Hệ thống năng lượng mặt trời
    • Công ty sản xuất giày
    • Dịch vụ vệ sinh
    • Dịch vụ HVAC
    Khác
    • Tổ chức phi lợi nhuận
    • Cơ quan môi trường
    • Cho thuê biển quảng cáo
    • Nhiếp ảnh
    • Cho thuê xe đạp
    • Đại lý phần mềm
    Xem tất cả ngành
  • Cộng đồng
    Học tập
    • Khóa học
    • Tài liệu
    • Chứng chỉ
    • Đào tạo
    • Blog
    • Podcast
    Thúc đẩy đào tạo
    • Chương trình đào tạo
    • Trò chơi kinh doanh Scale Up!
    • Tham quan Odoo
    Nhận phần mềm
    • Tải xuống
    • So sánh các phiên bản
    • Phiên bản
    Hợp tác
    • Github
    • Diễn đàn
    • Sự kiện
    • Dịch thuật
    • Trở thành đối tác
    • Dịch vụ dành cho Đối tác
    • Đăng ký công ty kế toán của bạn
    Nhận dịch vụ
    • Tìm đối tác
    • Tìm kế toán
    • Gặp chuyên gia hỗ trợ
    • Dịch vụ Triển khai
    • Khách hàng tham khảo
    • Hỗ trợ
    • Nâng cấp
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Nhận một buổi demo
  • Bảng giá
  • Trợ giúp

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Kế toán
  • Tồn kho
  • PoS
  • Dự án
  • MRP
All apps
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Hỗ trợ

How do I activate a workflow transition from a wizard?

Đăng ký nhận tin

Nhận thông báo khi có hoạt động trên bài viết này

Câu hỏi này đã bị gắn cờ
wizardworkflowtransitionsignal
7 Trả lời
14407 Lượt xem
Ảnh đại diện
Luis Filipe Castanheira

I've set up a wizard in OpenERP 7.0 that is updating fields correctly and all is working fine. Now I would like that, after submitting and updating the information on my object, the wizard would send a signal to the workflow of the object it acted uppon, to check if there is any transition to be taken.

How should I do that?

Do I have to directly call the workflow action from inside the def save_info() (see code below)? (I've tried this call self.pool.get('generic.request').req_reformulate_request(cr, uid, context['active_id'], context) but it throws so many errors, that I quickly gave up this approach)

Do I have to return something like 'signal': 'generic.request.req_reformulate_request' ?

Since I didn't find any information on this, I'm completely lost here, so any help would be very appreciated!

Thanks!

My wizard python code is the following:

from openerp.osv import osv
from openerp.osv import fields
from openerp.tools.translate import _

class ref_generic_request(osv.osv_memory):
    _name='ref.generic.request'

    _columns = {
        'reformulation_info': fields.text('Reformulation instructions', help='Instructions for the requestor justification the reformulation needs'),
            }

    def save_info(self, cr, uid, ids, context=None):
        if 'active_id' in context:
            info=self.browse(cr,uid,ids)[0].reformulation_info
            self.pool.get('generic.request').write(cr,uid,context['active_id'],{'reformulation_info' : info, 'needs_reformulation': 1})

          #self.pool.get('generic.request').req_reformulate_request(cr, uid, context['active_id'], context)
        return {
                'type': 'ir.actions.act_window_close',
         }
ref_generic_request()

And this is the XML that defines wizard's view:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <record id="view_reformulate_generic_request_wizard" model="ir.ui.view">
            <field name="name">reformulate_generic_request_wizard.form</field>
            <field name="model">ref.generic.request</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form string="Insert reformulation info" version="7.0">
                    <group >
                        <separator string="Please insert instruction for the reformulation of this request" colspan="2"/>
                        <field name="reformulation_info" string="Reformulation info"/>
                        <newline/>
                    </group>
                    <div style="text-align:right">
                        <button  icon="gtk-cancel" special="cancel" string="Cancel"/>
                        <button  icon="gtk-ok" name="save_info" string="Send to reformulation" type="object" />
                    </div>
               </form>
            </field>
        </record>
        <record id="action_reformulate_generic_request" model="ir.actions.act_window">
            <field name="name">Reformulate Request</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">ref.generic.request</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>
            <field name="view_id" ref="view_reformulate_generic_request_wizard"/>
            <field name="target">new</field>
        </record>
        <act_window id="action_reformulate_generic_request"
                name="Reformulate Request"
                res_model="ref.generic.request"
                view_mode="form"
                target="new"
        />
    </data>
</openerp>

I have a workflow (I'll show here only the part that is relevant for this question):

<?xml version="1.0"?>
<openerp>
    <data>
        <record model="workflow" id="wkf_request">
            <field name="name">request.wkf</field>
            <field name="osv">generic.request</field>
            <field name="on_create">True</field>
        </record>
    (...)
        <record model="workflow.activity" id="act_confirm">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_confirmed</field>
            <field name="kind">function</field>
            <field name="action">confirm_request()</field>
        </record>
        <record model="workflow.activity" id="act_req_reformulate">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_reformulation</field>
            <field name="kind">function</field>
            <field name="action">req_reformulate_request()</field>
        </record>
    (...)
        <record model="workflow.transition" id="request_t2">
            <field name="act_from" ref="act_submit" />
            <field name="act_to" ref="act_req_reformulate" />
            <field name="signal">req_reformulate_request</field>
        </record>
    (...)
    </data>
</openerp>

And after the wizard updates info in my generic.request object I would like it to signal a function that and is actually called from the workflow the make the transition:

def req_reformulate_request(self, cr, uid, ids, context=None):
    req = self.browse(cr, uid, ids, context=context)
    goto = req[0].state
    if goto:
        self.write(cr, uid, ids, {'goto': goto, 'state': 'req_reformulation', 'needs_reformulation': True} )
    else:
        self.write(cr, uid, ids, {'state': 'req_reformulation', 'needs_reformulation': True})
    self.insert_trace(cr, uid, ids, context)
    return True

1
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Axel Mendoza
Câu trả lời hay nhất

For OpenERP v7 as  said:

import netsvc
...
wf_service = netsvc.LocalService('workflow')
wf_service.trg_validate(uid, 'account.invoice', id, 'invoice_cancel', cr)

For Odoo v8 the code change a little

from openerp import workflow
...
workflow.trg_validate(uid, 'account.invoice', id, 'invoice_cancel', cr)

#or with the new api
self.pool.get('account.invoice').signal_workflow(cr, uid, account_invoice, 'invoice_open')
#Edit for Update
For Odoo v9 and v10 and latter ...

records = self.env['account.invoice'].browse(ids)
records.signal_workflow('invoice_cancel')
5
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Luis Filipe Castanheira
Tác giả Câu trả lời hay nhất

Thanks a lot! I'll try it out and will give you feedback right away!. This code should be included in my wizard.py, right?

Jos De Graeve,YOU are the best! It worked! Thanks a lot.

For future reference, I'll leave here the modification on my py code, in order to make it work.

from openerp.osv import osv
from openerp.osv import fields
from openerp.tools.translate import _
import netsvc

class ref_generic_request(osv.osv_memory):
    _name='ref.generic.request'

    _columns = {
        'reformulation_info': fields.text('Reformulation instructions', help='Instructions for the requestor justification the reformulation needs'),
            }

    
    def save_info(self, cr, uid, ids, context=None):
        if 'active_id' in context:
            info=self.browse(cr,uid,ids)[0].reformulation_info
            self.pool.get('generic.request').write(cr,uid,context['active_id'],{'reformulation_info' : info, 'needs_reformulation': 1})
            wf_service = netsvc.LocalService('workflow')
            wf_service.trg_validate(uid,'generic.request',context['active_id'],'req_reformulate_request',cr)    
        return {
                'type': 'ir.actions.act_window_close',

         }

ref_generic_request()

Once again, many, many thanks!

1
Ảnh đại diện
Huỷ bỏ
Adnier Rosello

Hi, netsvc module does not import correctly, I get this error: ImportError: No module named netsvc, any idea what happens, thanks

Adnier Rosello

well, i have got imported the module netsvc, but now i have this error: File "/home/usuario/workspace/odoo/addons/mrp_zabyca/mrp_production.py", line 130, in set_justify wf_service.trg_validate(self.env.user,'mrp.production',id,'button_cancel', self.env.cr) File "/home/usuario/workspace/odoo/openerp/workflow/__init__.py", line 85, in trg_validate return WorkflowService.new(cr, uid, res_type, res_id).validate(signal) File "/home/usuario/workspace/odoo/openerp/workflow/service.py", line 37, in new return cls(Session(cr, uid), Record(model_name, record_id)) File "/home/usuario/workspace/odoo/openerp/workflow/helpers.py", line 6, in __init__ assert isinstance(uid, (int, long)) AssertionError

Axel Mendoza

see how to do it in odoo v8 here in my answer

Ảnh đại diện
Jos De Graeve
Câu trả lời hay nhất

Hello Luis,

In order to do your thing with worflows, the code below should do the trick:

 

import netsvc

request_id = context['active_id']

if request_id:

wf_service = netsvc.LocalService('workflow')

wf_service.trg_validate(uid,'generic.request',request_id,'req_reformulate_request',cr)

 

Regards,

Jos

1
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
odoo
Câu trả lời hay nhất

@Axel Mendoza,


I haven't karma to comment your answer but if in V8 the code change a little, what about in v10 ?

I need to delete a workflow then create it in V10 but i didn't get uid, cr parameters, any help please ?

from openerp import workflow
...
workflow.trg_validate(uid, 'account.invoice', id, 'invoice_cancel', cr)
0
Ảnh đại diện
Huỷ bỏ
Axel Mendoza

see the update of the answer

Please could someone change the accept answer on this thread as seems to be mine the most requested so others in the future could pick it quickly

odoo

Thank you a lot :D

Luis Filipe Castanheira
Tác giả

@Axel done :)

Axel Mendoza

thanks

Bạn có hứng thú với cuộc thảo luận không? Đừng chỉ đọc, hãy tham gia nhé!

Tạo tài khoản ngay hôm nay để tận hưởng các tính năng độc đáo và tham gia cộng đồng tuyệt vời của chúng tôi!

Đăng ký
Bài viết liên quan Trả lời Lượt xem Hoạt động
Activate a workflow transition from a wizard
wizard workflow
Ảnh đại diện
Ảnh đại diện
Ảnh đại diện
2
thg 3 15
6468
Transition in the workflow doesn't work - Recreate an invoice per percentage after canceled the old one
workflow invoice transition
Ảnh đại diện
1
thg 6 16
5126
What's the equivalent in V9 of "purchase.act_draft" (V8) ? Đã xử lý
workflow transition 9.0
Ảnh đại diện
Ảnh đại diện
3
thg 3 16
2094
how return a wizard from workflow activity (Odoo) Đã xử lý
wizard workflow odoo
Ảnh đại diện
Ảnh đại diện
1
thg 10 15
7332
Define group restrictions for a workflow transition in xml Đã xử lý
workflow group transition
Ảnh đại diện
Ảnh đại diện
Ảnh đại diện
2
thg 7 15
7558
Cộng đồng
  • Khóa học
  • Tài liệu
  • Diễn đàn
Open source
  • Tải xuống
  • Github
  • Runbot
  • Dịch thuật
Dịch vụ
  • Lưu trữ Odoo.sh
  • Hỗ trợ
  • Nâng cấp
  • Phát triển tùy chỉnh
  • Đào tạo
  • Tìm kế toán
  • Tìm đối tác
  • Trở thành đối tác
Giới thiệu công ty
  • Công ty của chúng tôi
  • Tài sản thương hiệu
  • Liên hệ
  • Việc làm
  • Sự kiện
  • Podcast
  • Blog
  • Khách hàng
  • Pháp lý • Riêng tư
  • Bảo mật
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo là bộ ứng dụng kinh doanh có open source đáp ứng tất cả các nhu cầu của công ty bạn: CRM, thương mại điện tử, kế toán, tồn kho, POS, quản lý dự án, v.v.

Định hướng giá trị riêng biệt của Odoo là tích hợp hoàn toàn và dễ dàng sử dụng.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now