iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Odoo

Odoo 16 OCA 模組介紹 - web系列 第 9

【Day 9】Odoo OCA 模組 - web :web_ir_actions_act_multi

  • 分享至 

  • xImage
  •  

🍄本日魔法

 web_ir_actions_act_multi

   適用版本:16.0、15.0、14.0、13.0
 https://ithelp.ithome.com.tw/upload/images/20230923/20161873VIENxfpl9g.png

🍄模組功能

提供單一操作觸發後續多個客戶端動作的方法。

🍄使用情境

在開發系統過程中,若是需要在使用者執行某個動作後,觸發系統自動運作後續多個動作,你就不能錯過 web_ir_actions_act_multi 這個模組。
安裝這個模組後,可以簡化開發工作量,讓程式碼更簡潔漂亮。

客戶若是有工作流程自動化的需求,就很適合使用這個模組。
例如:
一家買賣業公司希望,客戶在網站上完成訂單後,系統可以自動完成以下事情:

  1. 報價單確認轉為銷售訂單。
  2. 發送訂單成立郵件給客戶。
          (假設已經有建立信件模版 my_module.email_template_202309 )
  3. 系統執行完這些行為後,為使用者關閉視窗,再重新加載畫面。

首先要先安裝模組 web_ir_actions_act_multi
然後可以參考這樣的 Python 語法架構:

from odoo import api, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    def action_confirm_and_send_email(self):
        # 1. 自動確認報價單,轉為銷售訂單。
        self.action_confirm()

        # 2. 使用已建立的郵件模板發送訂單成立信件。
        template_id = self.env.ref('my_module.email_template_202309')  
        for order in self:
            template_id.send_mail(order.id)

        # 關閉當前視窗並重新加載頁面。
        return {
            'type': 'ir.actions.act_multi',
            'actions': [
                {'type': 'ir.actions.act_window_close'},
                {'type': 'ir.actions.client', 'tag': 'reload'},
            ]
        }

又或者是
公司希望當銷售訂單被確認時,系統能夠自動完成以下動作:

  1. 檢查訂單中的商品是否有足夠的庫存。
  2. 如果庫存不足,自動向供應商發送採購請求。
  3. 系統執行完這些行為後,為使用者關閉視窗,再重新加載畫面。

可以參考以下的架構:

from odoo import api, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    def check_stock_and_request_purchase(self):
        for order in self:
            for line in order.order_line:
                if line.product_id.qty_available < line.product_uom_qty:
                    # 創建採購請求
                    self.env['purchase.order'].create({
                        'partner_id': line.product_id.seller_id.id,
                        'order_line': [(0, 0, {
                            'product_id': line.product_id.id,
                            'product_qty': line.product_uom_qty - line.product_id.qty_available,
                            'product_uom': line.product_uom.id,
                            'price_unit': line.product_id.standard_price,
                            'date_planned': fields.Datetime.now(),
                        })],
                    })

        # 關閉當前視窗並重新加載頁面。
        return {
            'type': 'ir.actions.act_multi',
            'actions': [
                {'type': 'ir.actions.act_window_close'},
                {'type': 'ir.actions.client', 'tag': 'reload'},
            ]
        }

透過這兩個範例,可以發現到,
web_ir_actions_act_multi 模組「在使用者執行某個動作後,觸發系統自動運作後續多個動作」的功能,是在行為迴圈後,透過return來完成的,大家可以依據需要的行為在'actions'裡加入更多的動作。
當然這只是簡易的示範,第一個範例由於 trigger 是客戶完成訂單時,所以在網站模組的相關設定和程式碼要依據實際狀況再調整;第二個範例則是要確認商品是否有設定供應商等等的設定。
這兩個範例程式碼的主要重點是在return階段,
目的是要告訴大家,安裝 web_ir_actions_act_multi 模組後的使用語法

🍄心得感想

由於本身不是開發背景,遇到 web_ir_actions_act_multi 模組研究了好久(๑´ㅁ`)
不曉得有沒有實際在開發工作中運用這個模組的朋友?是否有依據我們對模組功能預期的,讓工作流程更加順暢?
如果大家有想要分享自己的使用經驗,歡迎在下方留言討論喔!祝開發(補班)愉快,我們明天見!( ・ิω・ิ)


p.s. 本篇程式碼部分感謝 ChatGPT 大力相助:)深怕寫出錯誤資訊,跟 ChatGPT 來回確認好多次,希望有幫助大家更瞭解 web_ir_actions_act_multi 模組的用法~


上一篇
【Day 8】Odoo OCA 模組 - web :web_theme_classic、web_environment_ribbon
下一篇
【Day 10】Odoo OCA 模組 - web :web_listview_range_select
系列文
Odoo 16 OCA 模組介紹 - web30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言