eccube 2.11.2 「今回加算ポイント」がゼロ!?
EC-CUBE 2.11.2で、ポイント機能をtrueにしているのにカートページにて「今回加算ポイント」が取得できない問題が発生。。。。
/data/class/helper/SC_CartSession.php
を見てみると…。
function getAllProductsPoint($productTypeId) {}
で、ポイントを計算しているようだけど、取得出来ていない。
SC_Utils.phpのsfPrePoint()が悪いのか
SC_Helper_DB.phpのsfGetAddPoint()が悪いのか…。
($CONF = SC_Helper_DB_Ex::sfGetBasisData();あたりが関係ありそうな…)
とにかく、原因を究明するにはちょっと時間が掛かりそうだったので、応急処置。
要するに、
/data/class/helper/SC_CartSession.phpのcalculate()内で最終的に
「$results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point,$use_point);」
で計算されている部分を、単なる条件式に変えてしまえばいい…と。
今回の条件は、購入金額の1%がポイントとして還元されるというものなので
$results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point,$use_point);
▼
$results['add_point'] = (int)( ( $results['subtotal'] -= $discount ) / 100 );
に変更。
これで、加算ポイントが反映された訳だけど、早急に原因を解明しなきゃ…。
追記。
理由があっさりと判明。
dtb_products_classのpoint_rateが全部ゼロになってた。
ただ、商品ひとつひとつに対してポイントの計算をするので、複数の商品を購入した場合にはポイントの「切り捨て」処理によって「合計購入金額/100」ではなくなってしまう。
かと言って切り上げにしておくと、余計なポイントを付与してしまう可能性もあるので、結局書いた処理はそのままに。
(A/100・切り捨て)+(B/100・切り捨て)+(C/100・切り捨て)
▼
(A+B+C)/100・切り捨て
の方がいいと思うのだけれど…。
/data/class/helper/SC_CartSession.php
を見てみると…。
function getAllProductsPoint($productTypeId) {}
で、ポイントを計算しているようだけど、取得出来ていない。
SC_Utils.phpのsfPrePoint()が悪いのか
SC_Helper_DB.phpのsfGetAddPoint()が悪いのか…。
($CONF = SC_Helper_DB_Ex::sfGetBasisData();あたりが関係ありそうな…)
とにかく、原因を究明するにはちょっと時間が掛かりそうだったので、応急処置。
要するに、
/data/class/helper/SC_CartSession.phpのcalculate()内で最終的に
「$results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point,$use_point);」
で計算されている部分を、単なる条件式に変えてしまえばいい…と。
今回の条件は、購入金額の1%がポイントとして還元されるというものなので
$results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point,$use_point);
▼
$results['add_point'] = (int)( ( $results['subtotal'] -= $discount ) / 100 );
に変更。
これで、加算ポイントが反映された訳だけど、早急に原因を解明しなきゃ…。
追記。
理由があっさりと判明。
dtb_products_classのpoint_rateが全部ゼロになってた。
ただ、商品ひとつひとつに対してポイントの計算をするので、複数の商品を購入した場合にはポイントの「切り捨て」処理によって「合計購入金額/100」ではなくなってしまう。
かと言って切り上げにしておくと、余計なポイントを付与してしまう可能性もあるので、結局書いた処理はそのままに。
(A/100・切り捨て)+(B/100・切り捨て)+(C/100・切り捨て)
▼
(A+B+C)/100・切り捨て
の方がいいと思うのだけれど…。