Changeset 18859


Ignore:
Timestamp:
2010/10/19 15:02:14 (10 years ago)
Author:
nanasess
bzr:base-revision:
ohkouchi@loop-az.jp-20101018023620-433ytapfds3h0dr0
bzr:committer:
Kentaro Ohkouchi <ohkouchi@loop-az.jp>
bzr:file-ids:

data/class/SC_CartSession.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2FSC_CartSession.php
data/class/helper/SC_Helper_DB.php 15176@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_DB.php
data/class/pages/cart/LC_Page_Cart.php 15179@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fcart%2FLC_Page_Cart.php
data/class/pages/shopping/LC_Page_Shopping_Confirm.php 15223@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fshopping%2FLC_Page_Shopping_Confirm.php
data/class/pages/shopping/LC_Page_Shopping_Payment.php 15223@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fshopping%2FLC_Page_Shopping_Payment.php
data/class/util/SC_Utils.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Futil%2FSC_Utils.php
bzr:mapping-version:
v4
bzr:repository-uuid:
1e3b908f-19a9-db11-a64c-001125224ba8
bzr:revision-id:
ohkouchi@loop-az.jp-20101019060210-f9ll2iywezf74j7f
bzr:revno:
2339
bzr:revprop:branch-nick:
branches/version-2_5-dev
bzr:root:
branches/version-2_5-dev
bzr:timestamp:
2010-10-19 15:02:10.290999889 +0900
bzr:user-agent:
bzr2.2.0+bzr-svn1.0.3
svn:original-date:
2010-10-19T06:02:10.291000Z
Message:

ページ間の遷移方法の改善(#783)

  • カート内集計の関数が VIEW に依存しないように修正
  • SC_Helper_DB::sfTotalCart(), SC_Helper_DB::sfTotalConfirm() を SC_CartSession に移動
Location:
branches/version-2_5-dev/data/class
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/SC_CartSession.php

    r18852 r18859  
    318318    } 
    319319 
     320    /** 
     321     * すべてのカートの内容を取得する. 
     322     * 
     323     * @return array すべてのカートの内容 
     324     */ 
     325    function getAllCartList() { 
     326        $results = array(); 
     327        $cartKeys = $this->getKeys(); 
     328        $i = 0; 
     329        foreach ($cartKeys as $key) { 
     330            $cartItems = $this->getCartList($key); 
     331            foreach (array_keys($cartItems) as $itemKey) { 
     332                $cartItem =& $cartItems[$itemKey]; 
     333                $results[$key][$i] =& $cartItem; 
     334                $i++; 
     335            } 
     336        } 
     337        return $results; 
     338    } 
     339 
    320340    // カート内にある商品IDを全て取得する 
    321341    function getAllProductID($productTypeId) { 
     
    436456    } 
    437457 
     458    /** 
     459     * カートの内容を計算する. 
     460     * 
     461     * カートの内容を計算し, 下記のキーを保持する連想配列を返す. 
     462     * 
     463     * - tax: 税額 
     464     * - subtotal: カート内商品の小計 
     465     * - deliv_fee: カート内商品の合計送料 
     466     * - total: 合計金額 
     467     * - payment_total: お支払い合計 
     468     * - add_point: 加算ポイント 
     469     * 
     470     *  TODO ダウンロード商品のみの場合の送料を検討する 
     471     *  TODO 使用ポイント, 配送都道府県, 支払い方法, 手数料の扱いを検討 
     472     * 
     473     * @param integer $productTypeId 商品種別ID 
     474     * @param SC_Customer $objCustomer ログイン中の SC_Customer インスタンス 
     475     * @param integer $use_point 今回使用ポイント 
     476     * @param integer $deliv_pref 配送先都道府県ID 
     477     * @param integer $payment_id 支払い方法ID 
     478     * @param integer $charge 手数料 
     479     * @return array カートの計算結果の配列 
     480     */ 
     481    function calculate($productTypeId, &$objCustomer = null, $use_point = 0, 
     482                       $deliv_pref = "", $payment_id = "", $charge = 0) { 
     483        $objDb = new SC_Helper_DB_Ex(); 
     484 
     485        $total_point = $this->getAllProductsPoint($productTypeId); 
     486        $results['tax'] = $this->getAllProductsTax($productTypeId); 
     487        $results['subtotal'] = $this->getAllProductsTotal($productTypeId); 
     488        $results['deliv_fee'] = 0; 
     489 
     490        // 商品ごとの送料を加算 
     491        if (OPTION_PRODUCT_DELIV_FEE == 1) { 
     492            $cartItems = $this->getCartList($productTypeId); 
     493            foreach ($cartItems as $item) { 
     494                $results['deliv_fee'] += $item['deliv_fee'] * $item['quantity']; 
     495            } 
     496        } 
     497 
     498        // 配送業者の送料を加算 
     499        if (OPTION_DELIV_FEE == 1) { 
     500            $results['deliv_fee'] += $objDb->sfGetDelivFee( 
     501                                             array('deliv_pref' => $deliv_pref, 
     502                                                   'payment_id' => $payment_id)); 
     503        } 
     504 
     505        // 送料無料の購入数が設定されている場合 
     506        if (DELIV_FREE_AMOUNT > 0) { 
     507            // 商品の合計数量 
     508            $total_quantity = $this->getTotalQuantity($productTypeId); 
     509 
     510            if($total_quantity >= DELIV_FREE_AMOUNT) { 
     511                $results['deliv_fee'] = 0; 
     512            } 
     513        } 
     514 
     515        // 送料無料条件が設定されている場合 
     516        $arrInfo = $objDb->sf_getBasisData(); 
     517        if($arrInfo['free_rule'] > 0) { 
     518            // 小計が無料条件を超えている場合 
     519            if($results['subtotal'] >= $arrInfo['free_rule']) { 
     520                $results['deliv_fee'] = 0; 
     521            } 
     522        } 
     523 
     524        // 合計を計算 
     525        $results['total'] = $results['subtotal']; 
     526        $results['total'] += $results['deliv_fee']; 
     527        $results['total'] += $charge; 
     528 
     529        // お支払い合計 
     530        $results['payment_total'] = $results['total'] - $use_point * POINT_VALUE; 
     531 
     532        // 加算ポイントの計算 
     533        if (USE_POINT !== false) { 
     534            $results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point, 
     535                                                                   $use_point); 
     536            if($objCustomer != "") { 
     537                // 誕生日月であった場合 
     538                if($objCustomer->isBirthMonth()) { 
     539                    $results['birth_point'] = BIRTH_MONTH_POINT; 
     540                    $results['add_point'] += $results['birth_point']; 
     541                } 
     542            } 
     543            if($results['add_point'] < 0) { 
     544                $results['add_point'] = 0; 
     545            } 
     546        } 
     547        return $results; 
     548    } 
     549 
    438550    function getKeys() { 
    439551        return array_keys($this->cartSession); 
  • branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php

    r18852 r18859  
    244244     * @param null $dummy1 互換性確保用(決済モジュール互換のため) 
    245245     * @return LC_Page 集計処理後のページクラスインスタンス 
    246      * @deprecated SC_CartSession クラスを使用して下さい 
     246     * 
     247     * @deprecated SC_CartSession::checkProducts(), 
     248     *             SC_CartSession::getAllProductsTotal(), 
     249     *             SC_CartSession::getAllProductsTax(), 
     250     *             SC_CartSession::getAllProductsPoint() を使用して下さい 
    247251     */ 
    248252    function sfTotalCart(&$objPage, $objCartSess, $dummy1 = null, $key = "") { 
     
    14421446     * @param SC_Customer $objCustomer SC_Customer インスタンス 
    14431447     * @return array 最終計算後の配列 
     1448     * @deprecated SC_CartSession::calculate() を使用して下さい 
    14441449     */ 
    14451450    function sfTotalConfirm($arrData, &$objPage, &$objCartSess, $dummy1 = null, $objCustomer = "", $key = "") { 
     
    14711476        if (OPTION_DELIV_FEE == 1) { 
    14721477            // 都道府県、支払い方法から配送料金を加算する 
     1478            // FIXME ここでしか使ってない 
    14731479            $this->lfAddDelivFee($arrData); 
    14741480        } 
  • branches/version-2_5-dev/data/class/pages/cart/LC_Page_Cart.php

    r18852 r18859  
    8686                $this->tpl_message = "商品購入中にカート内容が変更されましたので、お手数ですが購入手続きをやり直して下さい。"; 
    8787            } 
    88  
    89             // カートの商品規格を取得 
    90             $cartItems = $objCartSess->getCartList($key); 
    91             foreach (array_keys($cartItems) as $itemKey) { 
    92                 $cartItem =& $cartItems[$itemKey]; 
    93                 if (!SC_Utils_Ex::isBlank($cartItem)) { 
    94                     $this->cartItems[$key][$i] =& $cartItem; 
    95                     $i++; 
    96                 } 
    97             } 
    98         } 
     88        } 
     89        $this->cartItems =& $objCartSess->getAllCartList(); 
    9990 
    10091        if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
     
    152143            // ポイント合計 
    153144            $this->tpl_total_point[$key] = $objCartSess->getAllProductsPoint($key); 
    154  
    155             $this->arrData = $objDb->sfTotalConfirm($this->cartItems[$key], $this, $objCartSess, null, $objCustomer, $key); 
     145            $this->arrData = $objCartSess->calculate($key, $objCustomer); 
     146 
    156147            // 送料無料までの金額を計算 
    157148            $this->tpl_deliv_free[$key] = $this->arrInfo['free_rule'] - $this->tpl_total_pretax[$key]; 
  • branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Confirm.php

    r18858 r18859  
    8787        $cartItems = $objCartSess->getCartList($this->cartKey); 
    8888        $i = 0; 
     89        // TODO リファクタリング 
    8990        foreach (array_keys($cartItems) as $itemKey) { 
    9091            $cartItem =& $cartItems[$itemKey]; 
     
    109110 
    110111        // カート集計を元に最終計算 
    111         $arrData = $objDb->sfTotalConfirm($this->cartItems, $this, $objCartSess, null, $objCustomer, $this->cartKey); 
    112         $arrData = array_merge($tmpData, $arrData); 
    113         // キャンペーンからの遷移で送料が無料だった場合の処理 
    114         if($objCampaignSess->getIsCampaign()) { 
    115             $deliv_free_flg = $objQuery->get("dtb_campaign", "deliv_free_flg", "campaign_id = ?", array($objCampaignSess->getCampaignId())); 
    116             // 送料無料が設定されていた場合 
    117             if($deliv_free_flg) { 
    118                 $arrData['payment_total'] -= $arrData['deliv_fee']; 
    119                 $arrData['deliv_fee'] = 0; 
    120             } 
    121         } 
     112        // FIXME 使用ポイント, 配送都道府県, 支払い方法, 手数料の扱い 
     113        $arrData = array_merge($tmpData, $objCartSess->calculate($this->cartKey, $objCustomer)); 
    122114 
    123115        // 会員ログインチェック 
  • branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php

    r18851 r18859  
    113113 
    114114        // カート内商品の集計処理を行う 
    115         $objDb->sfTotalCart($this, $objCartSess); 
     115        $this->cartKey = $_SESSION['cartKey']; 
     116        $cartItems = $objCartSess->getCartList($this->cartKey); 
     117        $i = 0; 
     118        // TODO リファクタリング 
     119        foreach (array_keys($cartItems) as $itemKey) { 
     120            $cartItem =& $cartItems[$itemKey]; 
     121            if (!SC_Utils_Ex::isBlank($cartItem)) { 
     122                $this->cartItems[$i] =& $cartItem; 
     123                $i++; 
     124            } 
     125        } 
     126        $this->tpl_message = $objCartSess->checkProducts($this->cartKey); 
     127 
    116128        if (strlen($this->tpl_message) >= 1) { 
    117129            SC_Utils_Ex::sfDispSiteError(SOLD_OUT, '', true); 
    118130        } 
    119  
    120         $this->arrData = $objDb->sfTotalConfirm(array(), $this, $objCartSess); 
     131        // FIXME 使用ポイント, 配送都道府県, 支払い方法, 手数料の扱い 
     132        $this->arrData = $objCartSess->calculate($this->cartKey, $objCustomer); 
    121133 
    122134        if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
  • branches/version-2_5-dev/data/class/util/SC_Utils.php

    r18856 r18859  
    310310    } 
    311311 
     312    /** 
     313     * @deprecated SC_CartSession クラスを使用してください 
     314     */ 
    312315    function sfCheckNormalAccess(&$objSiteSess, &$objCartSess) { 
    313316        // ユーザユニークIDの取得 
Note: See TracChangeset for help on using the changeset viewer.