承認状況をフォームに出す — 「いま誰の番か」を画面で見せる
Odoo Community の発注フォームは「承認待ち」までは見せますが、誰の番かは出しません。帯を1本足す小さなアドオンと、承認ルートを並べる購入申請の見本で、フォームに出すものと作り方を説明します。
目次
目次
このページには目次がありません

申請を出した人が知りたいのは「いま誰のところで止まっているか」です。承認する人が知りたいのは「自分の番か、もう済んだか」です。どちらも、申請のフォームを開いたときに答えが出ていれば、電話やチャットで聞き回らずに済みます。
この記事では、Odoo Community の発注フォームが承認について何を見せるかを確かめ、足りない分をフォームに出す作り方を2つ紹介します。承認の段を増やす・差し戻すといった仕組みそのものは「承認フローを自動化 — 購入申請と多段承認」で扱っています。
標準の発注フォームが見せるもの
購買の設定で「購買オーダ承認」を入れ、最小金額を 50,000 円にして試しました。管理者でない購買の担当者が確定すると、合計 88,000 円の発注は「承認待ち」で止まり、35,200 円の発注はそのまま購買オーダになりました。比べるのは税込の合計です。
Odoo 19 Community の標準の発注フォーム(画面は見本のデータです)
フォームから読み取れるのは次の3つです。
- 上の帯(ステータスバー)の「承認待ち」
- 右の履歴(チャッター)の「見積依頼 → 承認待ち」と、確定した人・時刻
- 「オーダ承認」のボタン(購買の管理者のグループにだけ出る)
一方で、誰が承認するのかは画面のどこにも出ません。承認できるのは「購買の管理者」のグループに入っている人全員で、決まった1人ではないからです。承認待ちになっても、承認する人への活動(予定)は 0 件でした。申請した人は、誰に頼めばよいかを画面の外で調べることになります。
フォームに出したい3つのこと
| 出したいこと | 標準のフォーム | 足したあと |
|---|---|---|
| いまの状態 | 上の帯に出る | そのまま使う |
| 誰の番か | 出ない | 名前で出す |
| 済んだ段とその人の一言 | 履歴に状態の変化だけ | 段ごとに並べる |
1つめは標準で足ります。2つめと3つめをどこまでやるかで、作り方が変わります。
作り方1:承認できる人を帯で知らせる
承認が「金額の基準1つで管理者が承認する」形のままでよければ、発注フォームに帯を1本足すだけで「誰に頼めばよいか」は伝わります。捨てる用の DB に小さなアドオンを入れて確かめました。
from odoo import api, fields, models
class PurchaseOrder(models.Model):
_inherit = "purchase.order"
x_approver_names = fields.Char(string="承認できる人", compute="_compute_x_approver_names")
@api.depends("state")
def _compute_x_approver_names(self):
group = self.env.ref("purchase.group_purchase_manager")
names = "、".join(group.sudo().all_user_ids.filtered(lambda u: not u.share).mapped("name"))
for order in self:
order.x_approver_names = names if order.state == "to approve" else False
<record id="purchase_order_form_approval_hint" model="ir.ui.view">
<field name="name">purchase.order.form.approval.hint</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet" position="before">
<div class="alert alert-warning mb-0" role="status" invisible="state != 'to approve'">
承認待ちです。承認できる人:<field name="x_approver_names" class="fw-bold"/>
</div>
</xpath>
</field>
</record>
アドオンを入れた後の発注フォーム。購買オーダになった発注には帯が出ません(画面は見本のデータです)
作るときに決めておくことは4つです。
- 項目は保存しない計算項目にする。表のための値なので、DB に列を作りません。アドオンを外したときに消えるデータもありません
sudo()は1か所にとどめる。見る人の権限によらずグループの名前を出すために使っています。権限を飛び越える書き方なので、使った箇所を数えて残します- 元の画面を
replaceで書き換えない。position="before"で帯を差し込むだけにします(理由は「本格拡張はアドオンで — Odoo の拡張開発の基本」の XPath の節) - 帯は知らせるだけにする。「オーダ承認」のボタンを押せる人は標準のグループのままで、帯で権限を変えません
作り方2:承認ルートをフォームに並べる
課長→部長のように順番がある承認では、グループの全員を並べても「誰の番か」になりません。段の順番と、それぞれの段の担当者・結果・コメントを持つ記録が要ります。Community にはこの記録が無いので、当社は購入申請と承認ルートを追加部品として足し、フォームの中に表示します。下は Odoo の中で動かした見本の画面です。
フォームの一番上に1行で、いまの状態と誰の番かを出します(画面は見本のデータです)
金額が基準の 10万円 に届かない申請は、課長だけの1段です(画面は見本のデータです)
すべて済んだ申請。段ごとに誰が承認し、何と書いたかが残ります(画面は見本のデータです)
同じフォームでも、金額で段の数が変わります。だから承認ルートは、申請を出した時点の決まりで段を組み、その記録を申請と一緒に持たせます。後から稟議の決まりを変えても、出し終えた申請の表示は変わりません。
どちらから始めるか
- 承認する人が管理者1〜2人で、順番が無い → 作り方1の帯で足ります。標準の承認の仕組みはそのまま使えます
- 課長→部長と段がある、差し戻しや代理がある → 作り方2。フォームの表示と承認の記録をまとめて足します
足したものを版上げで壊さないための決まりは「アップデートしても壊れない — Odoo の拡張の作り方」にまとめています。




