MY HATCH

承認状況をフォームに出す — 「いま誰の番か」を画面で見せる

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

5分
最終更新: 2026年10月26日
承認フォームビューの継承アドオン購買
目次

目次

このページには目次がありません

承認状況をフォームに出す — 「いま誰の番か」を画面で見せる

申請を出した人が知りたいのは「いま誰のところで止まっているか」です。承認する人が知りたいのは「自分の番か、もう済んだか」です。どちらも、申請のフォームを開いたときに答えが出ていれば、電話やチャットで聞き回らずに済みます。

この記事では、Odoo Community の発注フォームが承認について何を見せるかを確かめ、足りない分をフォームに出す作り方を2つ紹介します。承認の段を増やす・差し戻すといった仕組みそのものは「承認フローを自動化 — 購入申請と多段承認」で扱っています。

標準の発注フォームが見せるもの

購買の設定で「購買オーダ承認」を入れ、最小金額を 50,000 円にして試しました。管理者でない購買の担当者が確定すると、合計 88,000 円の発注は「承認待ち」で止まり、35,200 円の発注はそのまま購買オーダになりました。比べるのは税込の合計です。

Odoo 19 Community の発注フォーム。上の帯が「承認待ち」、右の履歴に「見積依頼 → 承認待ち」

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段だけ

金額が基準の 10万円 に届かない申請は、課長だけの1段です(画面は見本のデータです)

承認ルート「10万円以上(課長→部長)」。2段とも承認済みで、部長のコメントが残る

すべて済んだ申請。段ごとに誰が承認し、何と書いたかが残ります(画面は見本のデータです)

同じフォームでも、金額で段の数が変わります。だから承認ルートは、申請を出した時点の決まりで段を組み、その記録を申請と一緒に持たせます。後から稟議の決まりを変えても、出し終えた申請の表示は変わりません。

どちらから始めるか

  • 承認する人が管理者1〜2人で、順番が無い → 作り方1の帯で足ります。標準の承認の仕組みはそのまま使えます
  • 課長→部長と段がある、差し戻しや代理がある → 作り方2。フォームの表示と承認の記録をまとめて足します

足したものを版上げで壊さないための決まりは「アップデートしても壊れない — Odoo の拡張の作り方」にまとめています。

「作り方」の記事をもっと見る

ERP を、借りずに所有する。

Odoo Community を日本の業務に合わせ、ソース一式を人数無制限でお渡しします。

相談する(無料)