0
0

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の商品モデル(productモジュール)

Last updated at Posted at 2025-04-14

productモジュールにおけるデータベースモデル

odooでは、productモジュールで商品モデルを管理しています。
商品モデルは、主に、テンプレートマスタと商品マスタとで構成されています。
価格表マスタと仕入先価格表マスタで、有効期限を設けた価格設定が可能です。

商品マスタのdefault_codeで自社の商品番号を管理します。
default_code, Internal Reference, SKU, codeと呼ばれています。
仕入先の商品番号は、仕入価格表のproduct_codeで管理します。

# 名称 model name 説明 備考
1 テンプレートマスタ product.template 商品の基本情報
2 商品マスタ product.product 商品のバリエーション defaut_codeを保持
3 価格表(詳細) product.pricelist.item 販売価格 価格表で管理される
4 仕入価格表 product.supplierinfo 仕入価格 仕入先のproduct_codeあり

指定日における販売価格と仕入価格の取得

販売価格や仕入価格は、有効期限を設けた価格設定が可能ですが、次のように指定日の価格をそれぞれ取得することが可能です。

販売価格

価格表を取得し(例では1件目を取得)、その価格表から価格を計算取得する。
価格計算は、product.pricelistモデルの_get_product_price()メソッドが行う。

販売価格 - product_price

    # 価格表と販売価格の取得
    product_pricelist = request.env["product.pricelist"].sudo()
    pricelist = product_pricelist.search([], limit=1)  # 1件目の価格表
    product_price = pricelist._get_product_price(
        product=product, quantity=1.0, date=target_date
    )

仕入価格

product.supplierinfoモデルを検索する。

仕入価格 - purchase_price

    # 仕入れ価格の取得(テンプレートで管理)
    product_supplierinfo = request.env["product.supplierinfo"].sudo()
    query = (
        "SELECT id FROM product_supplierinfo"
        + " WHERE product_tmpl_id = %s"
        + "   AND min_qty = %s"
        + "   AND (date_start <= %s or date_start is null)"
        + "   AND (date_end >= %s or date_end is null)"
        + " ORDER BY date_start desc nulls last, date_end asc nulls last"
    )
    params = (
        product.product_tmpl_id.id, # product_tmpl_id
        1.0,                        # min_qty (quantity)
        target_date,                # date_start
        target_date,                # date_end
    )
    product_supplierinfo.env.cr.execute(query, params)
    supplierinfo_id = product_supplierinfo.env.cr.fetchone()[0]
    supplierinfo = product_supplierinfo.browse(supplierinfo_id)
    purchase_price = supplierinfo.price if supplierinfo else 0.0
    
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?