3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Odoo 17で倉庫管理を極める | 第6回: Odoo StudioとコードによるInventoryモジュールのカスタマイズ

Posted at

記事の概要

Odoo 17のInventoryモジュールは、標準機能で多くの倉庫管理ニーズを満たしますが、特定の業務要件に対応するにはカスタマイズが必要です。第5回ではレポートとデータ分析を学びました。第6回では、Odoo Studioを使ったノーコードのカスタマイズと、PythonおよびXMLを使用したプログラミングによるカスタマイズを解説します。カスタムフィールドの追加やワークフローの変更を通じて、業務に最適化したWMSを構築する方法を紹介します。


Odoo Studioによるノーコードカスタマイズ

Odoo Studioは、プログラミング知識がなくてもカスタムフィールドワークフローを追加できる強力なツールです(Enterprise版推奨)。これにより、独自の業務要件に柔軟に対応できます。

Odoo Studioの基本操作

  1. Odoo Studioの有効化:
    • 「設定」→「Odoo Studio」を有効化。
    • 左上のStudioアイコンをクリックして編集モードに。
  2. カスタムフィールドの追加:
    • 「在庫」→「製品」に移動し、任意の製品を開く。
    • Studioで「フィールド追加」を選択。
    • 例: 「サプライヤーコード」というテキストフィールドを追加。
  3. ビューのカスタマイズ:
    • 製品フォームビューに「サプライヤーコード」を表示。
    • ドラッグ&ドロップでフィールドの位置を調整。
  4. ワークフローの変更:
    • 「在庫」→「在庫調整」に新しいボタン(例: 「緊急補充」)を追加。
    • ボタンに簡単なアクション(例: 在庫補充)を設定。

実践: サプライヤーコードの追加

  • Odoo Studioで製品モデル(product.template)に移動。
  • 新しいテキストフィールド「サプライヤーコード」を追加。
  • 製品フォームにフィールドを表示し、検索フィルタに追加。
  • 例: Tシャツにサプライヤーコード「SUP123」を入力し、保存。

注意点:

  • Odoo StudioはEnterprise版限定。Community版ではコードで同様の機能を実装。
  • カスタマイズはバックアップ後にテスト環境で実施。

PythonとXMLによるカスタマイズ

PythonXMLを使用したカスタマイズは、柔軟性が高く、複雑な要件に対応可能です。以下は、カスタムモジュールの作成手順です。

カスタムモジュールの構造

  1. モジュールの作成:

    • Odooのaddonsディレクトリに新しいモジュール(例: custom_inventory)を作成。
    • 基本構造:
      custom_inventory/
      ├── __init__.py
      ├── __manifest__.py
      ├── models/
      │   └── custom_product.py
      ├── views/
      │   └── product_views.xml
      
  2. マニフェストファイル__manifest__.py):

{
    'name': 'カスタム在庫管理',
    'depends': ['stock'],
    'data': ['views/product_views.xml'],
    'installable': True,
}
  1. カスタムフィールドの追加models/custom_product.py):
from odoo import models, fields

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    supplier_code = fields.Char('サプライヤーコード')
  1. ビューのカスタマイズviews/product_views.xml):
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <record id="product_template_form_view_inherit" model="ir.ui.view">
        <field name="name">product.template.form.inherit</field>
        <field name="model">product.template</field>
        <field name="inherit_id" ref="product.product_template_form_view"/>
        <field name="arch" type="xml">
            <field name="barcode" position="after">
                <field name="supplier_code"/>
            </field>
        </field>
    </record>
</odoo>

モジュールのインストール

  • Odooのaddonsディレクトリにcustom_inventoryを配置。
  • 「アプリ」→「データベース更新」を実行。
  • 「カスタム在庫管理」を検索し、インストール。

実践例:

  • 製品フォームにサプライヤーコードフィールドを追加。
  • スマートフォンにコード「SUP456」を入力し、保存。
  • 「在庫」→「製品」で新しいフィールドを確認。

注意点:

  • XMLの継承は正確なrefIDを指定。
  • モジュールのアップグレード前にデータベースをバックアップ。

ワークフローのカスタマイズ

業務特有のワークフロー(例: 承認プロセス)を追加することで、効率を向上させます。以下は、在庫調整に承認ステップを追加する例です。

承認プロセスの追加

  • Odoo Studio:
    • 「在庫」→「在庫調整」に移動。
    • 新しいステータス「承認待ち」を追加。
    • ボタン「承認」を追加し、ステータスを「検証済み」に変更。
  • コードmodels/custom_inventory.py):
from odoo import models, fields, api

class StockInventory(models.Model):
    _inherit = 'stock.inventory'

    state = fields.Selection(selection_add=[('pending', '承認待ち')])
    
    def action_approve(self):
        self.write({'state': 'done'})
  • ビューviews/inventory_views.xml):
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <record id="stock_inventory_form_view_inherit" model="ir.ui.view">
        <field name="name">stock.inventory.form.inherit</field>
        <field name="model">stock.inventory</field>
        <field name="inherit_id" ref="stock.view_inventory_form"/>
        <field name="arch" type="xml">
            <button name="action_validate" position="after">
                <button name="action_approve" string="承認" type="object" class="oe_highlight"/>
            </button>
        </field>
    </record>
</odoo>

実践: 承認プロセスのテスト

  • 在庫調整を作成(例: Tシャツ50個を追加)。
  • ステータスを「承認待ち」に設定。
  • 管理者アカウントで「承認」ボタンをクリックし、在庫を更新。

注意点:

  • ワークフロー変更は、既存プロセスの整合性を確認。
  • 権限設定で、承認ボタンのアクセスを制限可能。

実践: カスタマイズのシナリオ

以下のシナリオで、カスタマイズを一括実践します:

  1. Odoo Studioでカスタムフィールド:
    • 製品に「優先度」フィールド(選択リスト: 高、中、低)を追加。
    • フォームビューに表示し、Tシャツに「高」を設定。
  2. カスタムモジュールの作成:
    • サプライヤーコードフィールドを追加。
    • スマートフォンにコード「SUP789」を入力。
  3. ワークフローの変更:
    • 在庫調整に「緊急補充」ボタンを追加。
    • ボタンクリックで、自動補充ルールをトリガー。

コード例(緊急補充ボタン):

from odoo import models, api

class StockInventory(models.Model):
    search = 'stock.inventory'

    def action_emergency_replenish(self):
        orderpoint = self.env['stock.warehouse.orderpoint'].search([
            ('product_id', 'in', self.product_ids.ids)
        ])
        orderpoint.action_replenish()

結果確認:

  • 「在庫」→「製品」でサプライヤーコード優先度を確認。
  • 「在庫」→「在庫調整」で承認待ちステータスと緊急補充ボタンを確認。

トラブルシューティング

カスタマイズで発生しがちな問題と解決策をまとめます:

  • Odoo Studioでビューが壊れる: 編集前にビューをバックアップ。元に戻すで復元。
  • コードエラー: PythonXMLの構文エラーを確認。Odooログを調査。
  • モジュールがインストールできない: 依存モジュール(例: stock)を確認。__manifest__.pyを再チェック。
  • パフォーマンス低下: カスタムフィールドのインデックス設定を検討。

Odooの公式ドキュメントやフォーラムで詳細な解決策を確認できます。


まとめと次回予告

Odoo StudioPython/XMLを使ったカスタマイズにより、Inventoryモジュールを業務に最適化しました。カスタムフィールドワークフローの追加を通じて、柔軟で効率的なWMSを構築できます。

次回は、販売購買製造モジュールや外部システム(例: Shopify3PL)との統合を解説します。シームレスなデータ連携で倉庫管理をさらに強化する方法を学びます。ぜひお楽しみに!


この記事が役に立ったら、いいねストックをお願いします!Odoo WMSのシリーズを一緒に学びましょう!

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?