eccube 2.11.2 「今回加算ポイント」がゼロ!? | φ(..)メモとして残しておこう…

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・切り捨て

の方がいいと思うのだけれど…。