クール便フラグのコードにミスがありました。 | φ(..)メモとして残しておこう…

クール便フラグのコードにミスがありました。

クール便フラグの処理にミスが有りました。

訂正します。


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"){}

を追加したということです。

チェックミスです…大変申し訳ありませんでした。

追記。
最新記事を見てくださーい。