在前一篇我們學習了如何建立 PDF 報表,今天要來探討更高層次的應用:工作流自動化 (Workflow Automation)。對於企業而言,流程是否能順暢銜接、避免人工干預,往往決定了數位轉型的成效。Odoo 雖然在舊版本中曾有專門的「工作流引擎」,但自 v9 以後改由 商業邏輯 + 自動化工具 來實現 Business Process Management (BPM)。
舉例來說,在「銷售 → 出貨 → 開立發票」的流程中,如果一切都需要人工逐步點選,容易造成:
透過工作流自動化,可以讓 Odoo 自動驅動流程,例如:
雖然舊版 Workflow Engine 已移除,但 Odoo 提供了更靈活的方式:
假設我們希望當銷售訂單確認後,Odoo 自動建立發票。
在自訂模組中繼承 sale.order
:
from odoo import models
class SaleOrderInherit(models.Model):
_inherit = 'sale.order'
def action_confirm(self):
res = super(SaleOrderInherit, self).action_confirm()
invoice = self._create_invoices()
invoice.action_post()
return res
這段程式碼會在訂單確認 (action_confirm
) 後,自動產生並過帳發票。
也可以結合 Scheduled Action,例如每天檢查未付款的發票並寄送提醒。
from odoo import models
from datetime import date
class AccountMoveInherit(models.Model):
_inherit = 'account.move'
def _cron_remind_overdue_invoices(self):
overdue = self.search([('invoice_date_due', '<', date.today()), ('payment_state', '!=', 'paid')])
for inv in overdue:
inv.message_post(body="提醒:發票已逾期,請儘快付款。")
再透過 ir.cron
設定每天執行 _cron_remind_overdue_invoices
。
Odoo 雖不像傳統 BPM 系統有完整的流程圖建模,但它的彈性更高:
Odoo 的工作流自動化本質上是 事件 + 規則 + 動作 的組合:
這樣的設計讓 Odoo 能靈活支援多種商業流程,不再需要額外的工作流引擎。在下一篇文章中,我將介紹 Odoo 多公司與多幣別支援,這對於跨國企業尤其重要。