2系統は、dtb_Customerに、保有ポイントを記録する形だけど、
3系統は、現在ポイント、追加ポイントと仕様ポイントを
ログ形式で管理するオリジナル。
※一番新しいデータを拾う。
2系統はゴリゴリしやすいし、3系統は触りたくないので、
迷わず、2系統でいじっていきます。
/class_ex/helper_ex/SC_Purchase_Ex.php
function sfUpdateOrderStatus
ここで、ポイントの加減などをしているのだが、
ややこしいのが、
/shopping/load_payment_module.php から
/shopping/confirm.php に戻ると、
このイベントが発生してしまうこと。
現在値と、仮保存値で、
isUsePoint = null or 3 (Cancel) / isAddPoint = 6 (出荷完了) 時、
- $payment_total = 今回の購入額
- $point_use = 使用ポイント
- $point_add = 追加ポイント
- $addCustomerPoint = 保有ポイントから、足し引きするポイント数
を、計算。
// ▼使用ポイント
// 変更前の対応状況が利用対象の場合、変更前の使用ポイント分を戻す
if ($this->isUsePoint($arrOrderOld['status'])) { // null or 3 = cancel
$addCustomerPoint += $arrOrderOld['use_point'];
// 2021-12-18
$newAddPoint = - $newAddPoint;
$newUsePoint = - $newUsePoint;
$payment_total = 0;
}
var_dump3(array('status' => $arrOrderOld['status'],
'$addCustomerPoint' => $addCustomerPoint,
'$payment_total' => $payment_total,
'$newUsePoint' => $newUsePoint,
'$newAddPoint' => $newAddPoint), __FILE__, __LINE__);
// 変更後の対応状況が利用対象の場合、変更後の使用ポイント分を引く
if ($this->isUsePoint($newStatus)) {
$addCustomerPoint -= $newUsePoint;
}
// ▲使用ポイント
var_dump3(array('status' => newStatus,
'$addCustomerPoint' => $addCustomerPoint,
'$payment_total' => $payment_total,
'$newUsePoint' => $newUsePoint,
'$newAddPoint' => $newAddPoint), __FILE__, __LINE__);
// ▼加算ポイント
// 変更前の対応状況が加算対象の場合、変更前の加算ポイント分を戻す
if ($this->isAddPoint($arrOrderOld['status'])) { // 6 = 出荷済み
$addCustomerPoint -= $arrOrderOld['add_point'];
// 2021-12-18
$newAddPoint = - $newAddPoint;
$newUsePoint = - $newUsePoint;
$payment_total = - 0;
}
var_dump3(array('status' => $arrOrderOld['status'],
'$addCustomerPoint' => $addCustomerPoint,
'$payment_total' => $payment_total,
'$newUsePoint' => $newUsePoint,
'$newAddPoint' => $newAddPoint), __FILE__, __LINE__);
// 変更後の対応状況が加算対象の場合、変更後の加算ポイント分を足す
if ($this->isAddPoint($newStatus)) {
$addCustomerPoint += $newAddPoint;
}
// ▲加算ポイント
if ($newStatus == $arrOrderOld['status'])
$payment_total = 0;
な感じで、変更される箇所に、デバッグの残骸がある通り、
いろいろなところで呼ばれているので、不可欠でした。
続いて、ポイントを保存する処理。
/class_ex/helper_ex/SC_Customer_Ex.php
$objQuery = SC_Query_Ex::getSingletonInstance();
//
$_['order_id'] = $order_id;
$_['customer_id'] = $cust_id;
$_['point_use'] = $point_use;
$_['point_add'] = $point_add;
$_['point_current'] = getCustomerPointValue($cust_id) + $addCustomerPoint;
$_['note'] = $_SERVER['HTTP_HOST']. ' : '. $order_id;
$_['season_buy_total'] = getCustomer_SeasonBuyTotal($cust_id) + $payment_total;
// 会員ランク判定
global $customer_rank_minorder;
$_['rank'] = 1;
for ($i = count($customer_rank_minorder); $i > 0; $i--) {
#var_dump2($customer_rank_minorder[$i], __FILE__, __LINE__);
if ($customer_rank_minorder[$i] < $_['season_buy_total']) { $_['rank'] = $i; #var_dump2($_['rank'], __FILE__, __LINE__); break; } } $objQuery->insert(extrenal_db. 'plg_point_order_point ', $_);
var_dump2($_, __FILE__, __LINE__);
ポイントの共有(続き・覚書)