EC-CUBE配送業者設定・配送料金の送料合計バグ

02.10.11 20:30 | コメント(0)

商品購入後の配送業者設定・配送料金の送料合計バグの編集

EC-CUBE Ver2では、デフォルトの状態で配送業者の設定や規格の設定を行っていると商品を購入した際に、配送料金にバグが起きてしまいます。

通常この状態で配送業者の送料を設定していても、購入後の料金合計にバグが発生します。

上記の内容を対応するためには、配送業者の設定、送料計算を行っているファイルを修正しなくてはなりません。

 1. 修正ファイル一覧
 2. バグ修正①
 3. バグ修正②
 4. バグ修正③
 5. バグ修正④

修正ファイル一覧

まずはこちらのファイルを開きます。
【/data/class/SC_CartSession.php】
【/data/class/helper/SC_Helper_DB.php】
【/data/class/pages/shopping/LC_Page_Shopping_Confirm.php】
【/data/class/pages/shopping/LC_Page_Shopping_Payment.php】

バグ修正①

最初に【/data/class/SC_CartSession.php】を開きましたら下記のコードを探してください。
508行~536行あたりに、
* @param integer $charge 手数料
 * @param integer $discount 値引
 * @return array カートの計算結果の配列
 */
function calculate($productTypeId, &$objCustomer, $use_point = 0,
                   $deliv_pref = "", $charge = 0, $discount = 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;
 
    // 商品ごとの送料を加算
    if (OPTION_PRODUCT_DELIV_FEE == 1) {
        $cartItems = $this->getCartList($productTypeId);
        foreach ($cartItems as $item) {
            $results['deliv_fee'] += $item['deliv_fee'] * $item['quantity'];
        }
    }
 
    // 配送業者の送料を加算
    if (OPTION_DELIV_FEE == 1) {
        $results['deliv_fee'] += $objDb->sfGetDelivFee($deliv_pref, $productTypeId);
    }

上記のコードを探しましたら下記の内容に修正してください。
* @param integer $charge 手数料
 * @param integer $discount 値引
   * @param integer $deliv_id 配送業者ID
 * @return array カートの計算結果の配列
 */
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;
 
    // 商品ごとの送料を加算
    if (OPTION_PRODUCT_DELIV_FEE == 1) {
        $cartItems = $this->getCartList($productTypeId);
        foreach ($cartItems as $item) {
            $results['deliv_fee'] += $item['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);
    }

バグ修正②

次に【/data/class/helper/SC_Helper_DB.php】を開きましたら下記のコードを探してください。
1172行~1195行あたりに、
     * @param integer|array $pref_id 都道府県ID 又は都道府県IDの配列
     * @return string 指定の都道府県, 商品種別の配送料金
     */
    function sfGetDelivFee($pref_id, $product_type_id) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
 
        /*
         * FIXME 都道府県が指定されていない場合は、東京都の番号を指定しておく
         * http://svn.ec-cube.net/open_trac/ticket/410
         */
        if($pref_id == "") {
            $pref_id = 13;
        }
        if (!is_array($pref_id)) {
            $pref_id = array($pref_id);
        }
        $sql = <<< __EOS__
            SELECT SUM(T1.fee) AS fee
              FROM dtb_delivfee T1
              JOIN dtb_deliv T2
                ON T1.deliv_id = T2.deliv_id
             WHERE T1.pref = ? AND T2.product_type_id = ?
__EOS__;
 
        $result = 0;
        foreach ($pref_id as $pref) {
            $result += $objQuery->getOne($sql, array($pref, $product_type_id));
        }
        return $result;
    }
上記のコードを探しましたら下記の内容に修正してください。
     * @param integer|array $pref_id 都道府県ID 又は都道府県IDの配列
     * @param integer $deliv_id 配送業者ID
       * @return string 指定の都道府県, 配送業者の配送料金
     */
    function sfGetDelivFee($pref_id, $deliv_id = 0) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        if (!is_array($pref_id)) {
            $pref_id = array($pref_id);
        }
        $sql = <<< __EOS__
            SELECT T1.fee AS fee
              FROM dtb_delivfee T1
              JOIN dtb_deliv T2
                ON T1.deliv_id = T2.deliv_id
             WHERE T1.pref = ?
                     AND T1.deliv_id = ?
                     AND T2.del_flg = 0
__EOS__;
        $result = 0;
        foreach ($pref_id as $pref) {
            $result += $objQuery->getOne($sql, array($pref, $deliv_id));
        }
        return $result;
    }

バグ修正③

最初に【/data/class/pages/shopping/LC_Page_Shopping_Confirm.php】を開きましたら下記のコードを探してください。
113行~121行あたりに、
// カート集計を元に最終計算
$arrCalcResults = $objCartSess->calculate($this->cartKey, $objCustomer,
                                          $arrOrderTemp['use_point'],
                                          $objPurchase->getShippingPref(),
                                          $arrOrderTemp['charge'],
                                          $arrOrderTemp['discount']);
$this->arrForm = array_merge($arrOrderTemp, $arrCalcResults);

上記のコードを探しましたら下記の内容に修正してください。
// カート集計を元に最終計算
$arrCalcResults = $objCartSess->calculate($this->cartKey, $objCustomer,
                                          $arrOrderTemp['use_point'],
                                          $objPurchase->getShippingPref(),
                                          $arrOrderTemp['charge'],
                                          $arrOrderTemp['discount'],
                                                                  $arrOrderTemp['deliv_id']);
$this->arrForm = array_merge($arrOrderTemp, $arrCalcResults);

バグ修正④

最初に【/data/class/pages/shopping/LC_Page_Shopping_Payment.php】を開きましたら下記のコードを探してください。
121行~124行あたりに、
// 購入金額の取得
$this->arrPrices = $objCartSess->calculate($cart_key, $objCustomer, 0, $objPurchase->getShippingPref());
上記のコードを探しましたら下記の内容に修正してください。
     * 購入金額の取得
     * ここでは送料を加算しない
     */
$this->arrPrices = $objCartSess->calculate($cart_key, $objCustomer);
カテゴリ:EC-CUBE(イーシーキューブ)構築と技術, エラー・バグ(EC-CUBE), ブログツール【CMS】情報と技術

Facebookでコメントする

コメントする

おすすめの記事

Facebookの投稿
ウェブ制作技術 SNS・ブログ
おすすめウェブサイト
ウェブ制作のご注文は全国対応

北海道 青森 岩手 秋田 宮城 山形 福島 東京 神奈川 埼玉県 千葉 茨城 群馬 栃木 愛知 静岡 三重 岐阜 新潟 長野 山梨 石川 富山 福井 大阪 京都 奈良 兵庫 滋賀 和歌山 岡山 広島 鳥取 山口 島根 愛媛 徳島 高知 香川 福岡 佐賀 長崎 大分 熊本 宮崎 鹿児島 沖縄

PAGE TOP