eccube2.11 個別送料計算を$_SESSIONデータで簡単にしました | φ(..)メモとして残しておこう…

eccube2.11 個別送料計算を$_SESSIONデータで簡単にしました

XAMPPポータブルを使ってEC-CUBEのカスタマイズをいろいろとやってみているのですが、やっぱりUSB2.0は遅い…。

ということで$_SESSIONのデータを全部調べて、もっと簡潔になるようにしました。

本当はもっと早くやっていればよかったんですが、なかなか時間がなく…。

例によって、「function calculate()」の中の「// 合計を計算」の前に追加しちゃってください。

//====================複数配送の場合の処理========================
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) {

//個別の商品代金合計を0に
$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"];

//商品の購入金額
$temp_indiv = $price * $quantity;
$total_indiv += $temp_indiv;

// 配送業者の送料を加算
if (OPTION_DELIV_FEE == 1) {
$deliv = $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"]);

}

//送料の計算(商品毎に加算していく)
$deliv_fee .= $deliv;

//送料の合計が最大送料(配送地域別送料)を超えたら、送料は地域別送料に
if ( $deliv_fee > $objDb->sfGetDelivFee(
$deli["shipping_pref"], $deli["deliv_id"]
)) {

$deliv_fee = $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"]);

}

}//商品分の繰り返し


// 送料無料条件(free_rule)が設定されている場合
if ($arrInfo['free_rule'] > 0) {
// 小計が無料条件を超えている場合は個別送料を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

//========================複数配送の場合の送料再計算==============================


とりあえず、XAMPP環境のver2.11.4で確認してます。

僕のブログのアクセス解析を見ると、EC-CUBE開発コミュニティのこのページからのリンクも多いので、それなりに複数配送時の個別送料設定は需要があるのだと思います。

僕の住んでいる沖縄は、本土への送料が驚くほど高いので、複数配送時に個別送料を設定できないと売れれば売れるほど赤字…という状況になりかねません。

それなら、送料込みで価格設定をすればいい…という方もいらっしゃるとは思いますが、送料込の商品を複数購入するということはお客様から送料を二重・三重に頂いているという考え方にもなります。


それに…原価1000円の商品に利益を500円乗せて、送料を1000円追加すると2500円での販売になりますが、お客さんは「1500円の商品を購入した」という感覚はなく、「2500円の商品を購入した」という感覚になります。

そういうことから、商品価格に送料を上乗せして「送料込み」で販売するのは商売をする上で危険なことでもあるんですよ。
特に送料がべらぼうに高い沖縄の場合には。

年が明けると「たんかん」の時期がやってきます。
たんかん10Kgの送料は、クール料金込みで1300円くらいかかります。


送料って恐い…((((;゚Д゚))))

ということで、次のバージョンではちゃんとそれに対応してくれることを期待します。

開発にコミットしたいのですが、やりかたがわかりませぬ。



補足。

//送料の計算(商品毎に加算していく)
$deliv_fee .= $deliv;

//送料の合計が最大送料(配送地域別送料)を超えたら、送料は地域別送料に
if ( $deliv_fee > $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"])) {

$deliv_fee = $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"]);

}


の処理ですが、

・商品個別送料を「加算」していく場合は
//送料の合計が最大送料(配送地域別送料)を超えたら、送料は地域別送料に
のロジックを消してください。

個別送料がなくて、地域別送料のみの場合には


$deliv_fee = $objDb->sfGetDelivFee($deli["shipping_pref"], $deli["deliv_id"]);

だけでいいと思います。


公式ガイドブックにも載ってないのかな…?