跳轉至

建立 2026-09-14 更新 2026-09-14

案例:服務業入口帳號

目標:客戶付完款之後,能用自己的帳號到 /my 看歷史訂單與發票。三種登入身分的說明見 使用者及權限。本頁只寫「什麼時候開 Portal」。

兩條路線

路線 做法 取捨
A. 先註冊再買 網站要求登入才能結帳 不用寫程式,首購摩擦較大
B. 付款後再開通 允許訪客結帳,付款成功再開 Portal 要一則自動化,購物較順

擇一即可,不要兩條同時開著除錯。

路線 A:先註冊再購買

  1. 網站 → 設定 → 客戶帳號(Customer Accounts) 設成 必填免費註冊
  2. 客戶先建立帳號(或用 Google/Microsoft 登入),再結帳。
  3. 之後可在 /my 看訂單、發票、付款。

路線 B:付款成功後開通 Portal

先備:已安裝 portalauth_signupwebsite_salepaymentaccount 與金流外掛;客戶帳號設成 可選(Optional);寄信伺服器已測通,見 郵件設定

開發者模式 → 設定 → 技術 → 自動化動作,擇一觸發:

方案 1:付款交易成功(網站刷卡)

  • 模型Payment Transaction
  • 觸發:建立與更新時
  • 條件state = 'done'
  • 動作:執行 Python
partners = set()
for tx in records:
    partner = tx.partner_id or (tx.sale_order_ids[:1].partner_id)
    if partner and partner.email:
        partners.add(partner)

if not partners:
    return

PortalWizard = env['portal.wizard'].sudo()
PortalWizardUser = env['portal.wizard.user'].sudo()
portal_group = env.ref('base.group_portal')

wiz = PortalWizard.create({'portal_id': portal_group.id})
for p in partners:
    PortalWizardUser.create({
        'wizard_id': wiz.id,
        'partner_id': p.id,
        'email': p.email,
        'in_portal': True,
    })
wiz.action_apply()

方案 2:發票已付款(含後台入帳)

  • 模型account.move(日記帳分錄/發票)
  • 觸發:建立與更新時
  • 條件move_type in ('out_invoice', 'out_receipt')payment_state = 'paid'
  • 動作:執行 Python
partners = set(records.mapped('partner_id').filtered(lambda p: p.email))
if not partners:
    return

PortalWizard = env['portal.wizard'].sudo()
PortalWizardUser = env['portal.wizard.user'].sudo()
portal_group = env.ref('base.group_portal')

wiz = PortalWizard.create({'portal_id': portal_group.id})
for p in partners:
    PortalWizardUser.create({
        'wizard_id': wiz.id,
        'partner_id': p.id,
        'email': p.email,
        'in_portal': True,
    })
wiz.action_apply()

portal.wizard 會:沒有使用者就建立 Portal 帳號(login 用 Email)並寄設定密碼信;已有使用者就確保他在 Portal 群組。

客戶在 /my 看得到什麼

依已安裝的 App,/my 會列出該聯絡人的訂單、報價、發票、付款與交貨。自訂資料要給客戶看時,必須加記錄規則,例如只允許 partner_id = 目前使用者的 partner。不要讓客戶變成內部使用者。

常見問題

  • 沒收到啟用信:先測外寄伺服器;開發者模式 → 電子郵件 → 看佇列與失敗原因。
  • 同一個 Email 對兩個聯絡人:使用者 login 必須唯一,第二筆會失敗。自動化裡先查 res.users 是否已用該 Email。
  • 只要一次性連結:付款信可附帶 token 的訂單/發票網址。若要長期查歷史,仍建議開 Portal。

進一步學習