前回の記事でPathが約束事を表すことを説明しました。今回の記事ではPathを使った具体例として販売価格を計算する仕組みを説明します。
まずはじめに最も単純な価格計算の例を挙げます。一番単純なのは商品一つにつき一つの価格が設定されていていつでも誰に売ってもどこに届けても変わらない場合です。そのような価格の設定はPathでは次のように表します。
Path1 source_section:自分の会社 resource:商品X base_price:1000
Path1の意味は「"自分の会社"が売る"商品X"は単価が"1000"」です。
もし次のようなMovementらがあったら、それらは上のPathと一致するので全て自動的に単価が求まり、それは単価1000という結果になります。
Movement1 source_section:自分の会社 destination_section:会社A resource:商品X quantity:1 Movement2 source_section:自分の会社 destination_section:会社A resource:商品X quantity:3 source:倉庫F destination:会社A Movement3 source_section:自分の会社 destination_section:会社B resource:商品X quantity:30 source:倉庫D destination:会社T
Movement1 source_section:自分の会社 destination_section:会社A resource:商品X quantity:1
Movement2 source_section:自分の会社 destination_section:会社A resource:商品X quantity:3 source:倉庫F destination:会社A
Movement3 source_section:自分の会社 destination_section:会社B resource:商品X quantity:30 source:倉庫D destination:会社T
なぜそうなるかというと、上の価格設定を表すPath1が持っているCategoryの値全てがMovementらのCategoryと一致するからです。具体的にいうとPath1のsource_sectionとresourceがMovement1〜3らのsource_sectionとresourceと同じです。Movement1〜3らはPath1が持たないdestination_section等のCategoryを持っていますが、PathとMovementが一致するかどうかはPathが持っているCategoryについてだけをMovementと比べるので、MovementにだけあるCategoryは価格計算に影響しません。
再びPathの意味に戻ると、このPath1の意味は「"自分の会社"が売る"商品X"は単価が"1000"」、そしてMovement1の意味は「"自分の会社"が"会社A"に"商品X"を"1つ"売る」となりますから、Movement1においてPath1の話は矛盾しません。矛盾しませんからPath1の価格をMovement1で使うことができます。ですから、ERP5にMovement1の単価がいくらになるかと問えばPath1を持ち出して答えは1000となります。
同様にMovement2とMovement3においてもPath1の話は矛盾せず通用しますから、Path1で宣言している価格をMovement2とMovement3で使うことができます。
以下はPath1に合致しないMovementの例です。
Movement4 source_section:自分の会社 destination_section:会社A resource:商品P quantity:1 Movement5 source_section:会社B destination_section:会社A resource:商品X quantity:1 Movement6 source_section:会社B destination_section:会社A resource:商品P quantity:1
Movement4 source_section:自分の会社 destination_section:会社A resource:商品P quantity:1
Movement5 source_section:会社B destination_section:会社A resource:商品X quantity:1
Movement6 source_section:会社B destination_section:会社A resource:商品P quantity:1
Movement4の意味は「"自分の会社"が"会社A"に"商品P"を"1つ"売る」です。これはPath1の意味「"自分の会社"が売る"商品X"は単価が"1000"」と一致しません。Path1は商品Xの話をしているのに、Movement4は商品Pの話をしているからです。別の商品の話をしていますから、Path1で宣言している単価を使うわけにいきません。
Movement5の意味は「"会社B"が"会社A"に"商品X"を"1つ"売る」です。これもPath1の意味と一致しません。Path1は"自分の会社"が売るときの話をしていますが、Movementは"会社B"が売るときの話をしているからです。別の会社が販売するときの価格の話ですから、Path1で宣言している単価を使うわけにいきません。
Movement6の意味は「"会社B"が"会社A"に"商品P"を"1つ"売る」です。これもPath1の意味と一致しません。Movement6は"会社B"が"商品P"を売るときの話ですから、Path1とは何一つ共通するところがありません。ですから、これもPath1で宣言している単価を使うわけにいきません。
以下の表はここまでの説明をまとめたものです。
さて、ここまで最も単純な価格の設定の例を使ってPathを使って価格を表すやり方をみてきました。最後にやってはいけないことを一つ書いておきたいと思います。それは二重登録です。矛盾する複数のPathを設定してはいけないということです。もし次のような2つのPathを登録したらどうなるでしょうか。
Path2 source_section:自分の会社 resource:商品X base_price:2000 Path3 source_section:自分の会社 resource:商品X base_price:3000
Path2とPath3の条件は同じで単価が違うだけです。これではERP5はどちらの単価を適用するべきか分かりません。結果は2つのうちのどちらか一方が不規則に選ばれるでしょう。このような登録をしてはいけません。
以上、今回は最も単純な場合を考えて、Pathを使って価格を設定する方法について説明しました。次は複数の要素が価格の決定に絡んでくる複雑な場合についてみていきたいと思います。
読んでいただきありがとうございました。