見出し画像

Odooの帳票カスタマイズと開発者モード

Odooの標準で用意されている帳票類は、必要最小限の情報しか含まれていないそっけないシンプルなものとなっています。

Odoo標準の見積依頼帳票

これらの帳票をそのまま使っても良いのですが、流石にもう少しなんとかしたいと思う人が大多数ではないでしょうか?
Odooの帳票類をどのようにカスタマイズするか調べてみます。

Odooの帳票類をGUI上でカスタマイズする方法

Odooの帳票類をカスタマイズする方法はいくつか存在しています。
調べてみたところ・・・

  1. 全体のレイアウトは、管理設定>一般設定>ビジネス帳票>ドキュメントレイアウトから設定

  2. 帳票毎の細かな変更は、QWebで基本レポートを継承しつつ修正

    1. OdooのGUI上で変更する

    2. 開発環境を使って変更する

  3. Odoo Studioを使う

という方法が有るようです。
帳票の内容を変更するのは、3.番のOdoo Studioを使う方法が一番簡単かもしれませんが、ライセンスを購入する必要があります。費用がかかっても結果として時間を節約することができれば投資効果は有ります。
お財布事情が厳しい場合は必然的に1.と2.になるでしょう。当然お財布事情が厳しいため、無償でできる方法を探ります。

海外のサイトで情報を探ると、まずエディターを開いて・・・という説明が多いのですが、今回はOdooのGUI上だけで変更する方法を調べました。(多分エディターで編集する方法の方がgitを使えたり、他の項目を参照しやすかったり色々便利なんだろうとは思います。今後調査していきたい。)

作業前に開発者モードを有効化する

Odooでは、管理設定>一般設定から開発者モードを有効にすることができます。
開発者モードを有効にすると、画面項目の情報を表示させたり、通常モードでは設定できない項目が表示されたりというように、カスタマイズ出来る箇所の幅が広がります。
管理設定>一般設定を一番下までスクロールして、開発者モードを有効化しておきましょう。
開発者ツールが表示されない場合は、ユーザに権限が付与されていません。ユーザ設定から必要な権限を付与してください。

"開発者モードを有効化"を選択します。

開発者モードアイコン

開発者モードが有効になっていると画面右上に虫のアイコンが表示され、このアイコンから、開発者用の各種機能にアクセスしたり、画面項目にマウスのポインターを移すことで、項目の詳細情報を確認することができるようになります。

開発者モードで表示されるメニューや項目詳細

全体のレイアウト設定

管理設定>一般設定>ビジネス帳票>ドキュメントレイアウト
を確認すると、”ドキュメントレイアウトを設定”というリンクがあります。

管理設定>一般設定>ビジネス帳票

ドキュメント全体のレイアウトや会社のスローガン、フォントを設定することができます。

ドキュメントレイアウト設定画面

まーこれでも良いか。と思えなくもないのですが、なんというかデザインが洋物感漂うというか。日本人にはあまり受け入れられなさそうな気はします。
開発者モードを有効にしていると、画面に表示される設定項目が変化します。
ドキュメントレイアウトの設定項目も変化しました。

レイアウトの編集と帳票プレビューが追加されていました。

全体のレイアウトを確認してみる

レイアウトの編集で"external_layout_boxed"を開いてみます。
これがビューと呼ばれている帳票のデザインで、QWebというXMLベースのテンプレートで定義しています。
このテンプレートの中から、Odoo内に定義された項目類を呼び出して、最終的にPDFや画面がビューとして出力される。という仕組みになっているようです。
詳しい話はOdooの開発者用ドキュメントに書かれています。

この画面は、Technical>User Interface>Viewsから開くこともできます。どうもUIのビューとして定義されているようです。

基本ビューはそのまま編集しない

じゃあ、このxmlを直接編集してしまえば手っ取り早くない?と思って編集しようとすると、このようなメッセージが表示されます。

警告メッセージ

なるほど。標準で提供されている内容はODOOの更新時に上書きされてしまうので、更新に影響されないように、OdooStudioを使うか継承したビューを作ると良いらしいです。
ちょうど"継承ビュー"というタブが存在しているので、ここに新しいビューを追加してみましょう。
継承ビュータブの明細で"明細追加"を押します。
新規ビューを追加するダイアログが表示されるので、項目を設定します。

  • ビュー名:x_external_layout_boxed_inherit

  • 継承ビュー:external_layout_boxed

アーキテクチャには以下のXMLを設定します。
XPathで継承元の要素を指定して、要素を追加しています。

<?xml version="1.0"?>
<xpath expr="//div[@class='o_boxed_header']" position="after">
TESTTESTTEST
</xpath>

保存すると継承ビューに明細が追加されています。

管理設定画面に戻って帳票プレビューを実行してみると、"TESTTESTTEST"の文字列がヘッダーの後に追加されています。

ヘッダーの後に文字列が追加されている

XPathでの要素設定についてもう少し詳しく

QWebの継承では、継承ビューに親のビュー名を指定することで親のXML要素を引き継ぐことができます。
引きついだXMLの各要素に対して、XPathで要素や属性値などを指定することで新しいXMLを構築することができます。

<xpath expr="//div[@class='o_boxed_header']" position="after">
TESTTESTTEST
</xpath>

このXPathコードは、継承してきたXMLからclass = "o_boxed_header" が設定されているdiv要素の後に"TESTTESTTEST"の文字列を追加します。
継承元の"external_layout_boxed"を見てみましょう。

<?xml version="1.0"?>
<t t-name="web.external_layout_boxed">
 <div t-attf-class="header o_company_#{company.id}_layout" t-att-style="report_header_style">
  <div class="o_boxed_header">
   <div class="row mb8">
   <div class="col-6">
    <img t-if="company.logo" t-att-src="image_data_uri(company.logo)" alt="Logo"/>
   </div>

div class="o_boxed_header" という要素が見つかります。この次の部分に文字列が挿入される。ということになります。
XPath のpositionオプションで、見つかった要素に対してどのように新しい要素を追加するか選択することが可能です。before/after/replace とか。
詳細はXPathのドキュメントをみると色々書いてあります。

帳票毎のレポート変更

帳票毎の項目やレイアウトはどのように変更するのでしょうか?
基本的にはQWebでできている基本ビューを継承して変更していきます。
これがOdooのGUIだけで変更するのが結構しんどいです。二つのタブを開いて、継承元のビューを参照しつつ、XPathで書き換える部分を探すという方法が良いのではないでしょうか?

レポートの場所

レポートは、
管理設定>技術設定>レポーティング>報告
からアクセスすることができます。

多くのレポートが定義されていますが、ここでは見積依頼を変更してみましょう。
変更前の見積依頼では、明細の納入予定日が秒まで表示されていました。これはちょっと細かすぎるので、年月日までにしたいです。

秒まで表示されている納入予定日

レポートを"見積"で検索すると見積依頼が表示されます。

見積依頼のレポート

見積依頼レポートを開きます。

レポート詳細の右上にあるQWebビューを押します。
見積依頼を構成しているQWebのビューが一覧表示されます。
report_purchasequotation_documentというのが、見積依頼のビュー本体です。

ビューを開いてみます。
このxmlの塊がレポートとして翻訳され、表示されているんですね。もっとGUIでわかりやすくならないものでしょうか・・・という人はOdoo Studioを買ってください。ということなのでしょう。

継承ビューを作ってレポートを変更する

継承ビュータブに移動してビューを追加します。

  • ビュー名:x_report_purchasequotation_document

  • 継承ビュー:report_purchasequotation_document

アーキテクチャには次のxmlを設定します。

<?xml version="1.0"?>
<data inherit_id="purchase.report_purchasequotation_document">
 <xpath expr="//span[@t-field='order_line.date_planned']" position="replace">
  <span t-field="order_line.date_planned" t-options='{"format": "yyyy/MM/dd"}' />
 </xpath>
</data>

継承元のxml内にあるt-field="order_line.date_planned"となっているspan要素を検索して、新しい要素に置き換えします。
新しい要素は、同じくQWebのt-field要素でorder_line.date_plannedを表示しつつ、日付フォーマットで”yyyy/MM/dd"を指定します。
変更を保存した後に見積依頼を印刷してみました。

ドキュメントレイアウトにて"external_layout_boxed"を選択しているので、表形式になっています。そして、納入予定日を確認するとyyyy/MM/ddの形式に表示が変更となっています。

このようにOdooの帳票はGUIからカスタマイズすることが可能となっています。自由自在に帳票をカスタマイズするためには、QWebとXPathの理解が欠かせないようです。

おまけ 参考資料

XPathの参考。こちらの記事がわかりやすかったです。


この記事が気に入ったらサポートをしてみませんか?