クール便フラグのコードにミスがありました。
クール便フラグの処理にミスが有りました。
訂正します。
つまり、クール便と通常商品を同時購入した際、foreachのフラグ判定のところで通常商品の判定がクール便判定より後に来ると、フラグが通常便扱いに戻ってしまうので
if ( $cool_flg != "on"){}
を追加したということです。
チェックミスです…大変申し訳ありませんでした。
追記。
最新記事を見てくださーい。
訂正します。
function getAllCartList() {
$results = array();
$cartKeys = $this->getKeys();
$i = 0;
foreach ($cartKeys as $key) {
$cartItems = $this->getCartList($key);
foreach (array_keys($cartItems) as $itemKey) {
$cartItem =& $cartItems[$itemKey];
$results[$key][$i] =& $cartItem;
$i++;
//追加
$cool_flg = ( $cartItem["productsClass"]["cool_flg"] > 0 )? "on":"off";
}
}
return $results;
}
▼やっぱり、これは下の状態のままにします▼
function getAllCartList() {
$results = array();
$cartKeys = $this->getKeys();
$i = 0;
foreach ($cartKeys as $key) {
$cartItems = $this->getCartList($key);
foreach (array_keys($cartItems) as $itemKey) {
$cartItem =& $cartItems[$itemKey];
$results[$key][$i] =& $cartItem;
$i++;
}
}
return $results;
}
function calculate($productTypeId, &$objCustomer, $use_point = 0,
$deliv_pref = "", $charge = 0, $discount = 0, $deliv_id = 0) {
$objDb = new SC_Helper_DB_Ex();
$total_point = $this->getAllProductsPoint($productTypeId);
$results['tax'] = $this->getAllProductsTax($productTypeId);
$results['subtotal'] = $this->getAllProductsTotal($productTypeId);
$results['deliv_fee'] = 0;
$cool_flg = "";
// 商品ごとの送料を加算
if (OPTION_PRODUCT_DELIV_FEE == 1) {
$cartItems = $this->getCartList($productTypeId);
foreach ($cartItems as $item) {
$results['deliv_fee'] += $item['productsClass']['deliv_fee'] * $item['quantity'];
}
}
// 配送業者の送料を加算
if (OPTION_DELIV_FEE == 1
&& !SC_Utils_Ex::isBlank($deliv_pref)
&& !SC_Utils_Ex::isBlank($deliv_id)) {
$results['deliv_fee'] += $objDb->sfGetDelivFee($deliv_pref, $deliv_id);
}
//クール便かどうか判定
$cartItems = $this->getCartList($productTypeId);
foreach($cartItems as $val){
if ( $cool_flg != "on" ){
$cool_flg = ( $val["productsClass"]["cool_flg"] <> 0 ) ? "on":"";
}
}
//$cool_flgが"on"で送料が0円でなければ、クール料金加算
//送料0円でもクール代金は上乗せする場合は「&& $deliv_fee <> 0」を外して
//「// 送料無料チェック」の下に処理を移動
if ($cool_flg == "on" && $results['deliv_fee'] <> 0) {
$results['deliv_fee'] += 210;
}
// 送料無料チェック
if ($this->isDelivFree($productTypeId)) {
$results['deliv_fee'] = 0;
}
//=======複数配送の場合の処理=============================================
if ( count($_SESSION['shipping']) > 1 ){
//---------[初期処理]-------------
//とりあえず、$results['deliv_fee']を0にしておく
$results['deliv_fee'] = 0;
//flagsも初期化
$flags = "";
//何人目かを記録しておくためのフラグ
$multi = 0;
//店舗基本情報を取得
$objDb = new SC_Helper_DB_Ex();
$arrInfo = $objDb->sfGetBasisData();
//---------[初期処理終了]---------
//人数分の繰り返し
foreach ( $_SESSION['shipping'] as $deli) {
//クールフラグを初期化
$cool_flg = "";
//フラグ関係を初期化
$total_indiv = 0;
//商品のコードを配列から取得
$temp_list = $deli['shipment_item'];
$item = array_keys( $temp_list );
//商品分の繰り返し
for ($loop = 0; $loop < count($item); $loop++){
$item_code = $item[$loop];
$quant = $item_code;
$quantity = $deli['shipment_item'][$quant]['quantity'];
//商品価格
$price = $deli['shipment_item'][$quant]["productsClass"]["price02"];
//商品個別送料
$deliv = $deli['shipment_item'][$quant]["productsClass"]["deliv_fee"];
//クール便フラグ
if ( $cool_flg != "on" ) {
$cool_flg = ( $deli['shipment_item'][$quant]["productsClass"]["cool_flg"] > 0) ? "on":"";
}
// 配送業者の送料を加算
if (OPTION_DELIV_FEE == 1) {
$deliv = $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"]);
}
//商品の購入金額
$temp_indiv = $price * $quantity;
$total_indiv += $temp_indiv;
//送料の計算(商品毎に加算)
$deliv_fee .= $deliv;
//送料の合計が最大送料(配送地域別送料)を超えたら、送料は地域別送料に
if ($deliv_fee > $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"])){
$deliv_fee = $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"]);
}
}//商品分の繰り返し
//$cool_flgが"on"で送料が0円でなければ、クール料金加算
//送料0円でもクール代金は上乗せする場合は「&& $deliv_fee <> 0」を外して
//「// 送料無料条件が設定されている場合」の下に処理を移動
if ( $cool_flg == "on" && $deliv_fee <> 0) { $deliv_fee += 210; }
// 送料無料条件が設定されている場合
if ($arrInfo['free_rule'] > 0) {
// 小計が無料条件を超えている場合
if( $total_indiv >= $arrInfo['free_rule']) {
$deliv_fee = 0;
}
}
//全注文の総トータル送料に個別送料を加算していく
$results['deliv_fee'] += $deliv_fee;
//送料と合計金額をセッションに保存(comfirm.tpl表示用)
$_SESSION['multi_deliv'][$multi]['deliv_fee'] = $deliv_fee;
$_SESSION['multi_deliv'][$multi]['total_indiv'] = $total_indiv;
$multi++;
}//人数分の繰り返し
}//if
//========================複数配送の場合の送料再計算==============================
// 合計を計算
$results['total'] = $results['subtotal'];
$results['total'] += $results['deliv_fee'];
$results['total'] += $charge;
$results['total'] -= $discount;
// お支払い合計
$results['payment_total'] = $results['total'] - $use_point * POINT_VALUE;
// 加算ポイントの計算
if (USE_POINT !== false) {
$results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point,
$use_point);
if($objCustomer != "") {
// 誕生日月であった場合
if($objCustomer->isBirthMonth()) {
$results['birth_point'] = BIRTH_MONTH_POINT;
$results['add_point'] += $results['birth_point'];
}
}
if($results['add_point'] < 0) {
$results['add_point'] = 0;
}
}
return $results;
}
つまり、クール便と通常商品を同時購入した際、foreachのフラグ判定のところで通常商品の判定がクール便判定より後に来ると、フラグが通常便扱いに戻ってしまうので
if ( $cool_flg != "on"){}
を追加したということです。
チェックミスです…大変申し訳ありませんでした。
追記。
最新記事を見てくださーい。