ERP5の注文や入出荷の内容に応じて追加で発生する費用や割引などを計算する仕組みその2

  • Last Update:2021-09-28
  • Version:001
  • Language:ja

ERP5のTrade Model Lineを使って実現できる複雑な計算の例を紹介する記事の二回目です。前回の記事はこのリンク先にあります。今回は消費税の計算ではなくて値引やお店で買い物したときに貰えるおまけを計算する例をみていきます。

CD対象3つ以上購入してくれればそれらの合計金額の10%を値引する場合

レコード屋さんでみかける値引です。これをTrade Model Lineで表すと次の図のようになります。特別値引対象にはspecial_discountというbase_contributionカテゴリーを付けています。入力されるAmountのquantityの合計を条件にして条件を満せば値引を表すAmountを作ります。

特別値引対象3つ以上購入してくれれば500円を値引する場合

このパターンでは割合ではなくて500円という固定の金額を値引します。次の図のようになります。前の例と同じようにquantityの合計を条件にしています。

CD対象3つ以上購入してくれれば注文の合計金額の10%を値引する場合

最初のパターンと似ていますがお買上品合計金額を10%値引くというところが違います。ここではお買上品合計金額が必要なのでTrade Model Lineが使う関数の中でgetGeneratedAmountQuantityを使ってbase_contributionがordered_itemのもののquantityの合計値を取得します。この関数を使うとTrade Model Lineの計算の中で他のカテゴリーのquantityの合計を参照できます。Amountが必要でなければこの関数で用が済むので別のTrade Model Lineを作らなくてもやりたいことができます。

CD3枚かDVD1枚を買ってくれればポスター1枚プレゼントという場合

このパターンでは消費税や値引のように金額が計算されるのではなくてポスターというモノを一つ無料であげるということを計算します。Trade Model Lineでは金額だけでなくモノが発生するパターンを表現できます。これまで説明していませんでしたがTrade Model Lineではresourceカテゴリーを使って発生するモノが何であるかを表します。消費税や値引の場合にはERP5ではそれらを物理的なモノではなくて概念的なものでサービスというデータの種類で表すのですが、今回の例ではポスターという物理的なモノを扱いました。CD3枚かDVD1枚以上お買い上げの場合という条件はgetGeneratedAmountQuantityをCDの場合とDVDの場合で一回づつ使って規定の量を越えている注文かどうかを判定できます。このTrade Model Lineで発生させるポスター1つは無料のプレゼントなのでpriceは0です。

以上4つの例を図にしてみてきました。これらのパターンの具体的なプログラムのコードはユニットテストとしてERP5内に実装されています。Trade Model Line を使うとここで挙げた例以外にも給与や税金などの何段階も計算が必要になる処理を簡単に扱うことができます。

読んでいただきありがとうございました。

Contact

  • Photo Yusei Tahara
  • Logo Nexedi
  • Yusei Tahara
  • yusei (at) nexedi (dot) com