/** * Page のアクション. * * @return void */ public function action() { $objDeliv = new SC_Helper_Delivery_Ex(); $mode = $this->getMode(); if (!empty($_POST)) { $objFormParam = new SC_FormParam_Ex(); $objFormParam->setParam($_POST); $this->arrErr = $this->lfCheckError($mode, $objFormParam); if (!empty($this->arrErr['deliv_id'])) { trigger_error('', E_USER_ERROR); return; } } switch ($mode) { case 'delete': // ランク付きレコードの削除 $objDeliv->delete($_POST['deliv_id']); $this->objDisplay->reload(); // PRG pattern break; case 'up': $objDeliv->rankUp($_POST['deliv_id']); $this->objDisplay->reload(); // PRG pattern break; case 'down': $objDeliv->rankDown($_POST['deliv_id']); $this->objDisplay->reload(); // PRG pattern break; default: break; } $this->arrDelivList = $objDeliv->getList(); }
/** * Page を初期化する. * * @return void */ public function init() { parent::init(); $this->tpl_title = '入力内容のご確認'; $masterData = new SC_DB_MasterData_Ex(); $this->arrPref = $masterData->getMasterData('mtb_pref'); $this->arrCountry = $masterData->getMasterData('mtb_country'); $this->arrSex = $masterData->getMasterData('mtb_sex'); $this->arrJob = $masterData->getMasterData('mtb_job'); $this->arrMAILMAGATYPE = $masterData->getMasterData('mtb_mail_magazine_type'); $this->arrReminder = $masterData->getMasterData('mtb_reminder'); $this->arrDeliv = SC_Helper_Delivery_Ex::getIDValueList('service_name'); $this->httpCacheControl('nocache'); }
/** * カートの内容を計算する. * * カートの内容を計算し, 下記のキーを保持する連想配列を返す. * * - tax: 税額 * - subtotal: カート内商品の小計 * - deliv_fee: カート内商品の合計送料 * - total: 合計金額 * - payment_total: お支払い合計 * - add_point: 加算ポイント * * @param integer $productTypeId 商品種別ID * @param SC_Customer $objCustomer ログイン中の SC_Customer インスタンス * @param integer $use_point 今回使用ポイント * @param integer|array $deliv_pref 配送先都道府県ID. 複数に配送する場合は都道府県IDの配列 * @param integer $charge 手数料 * @param integer $discount 値引き * @param integer $deliv_id 配送業者ID * @param integer $order_pref 注文者の都道府県ID * @param integer $order_country_id 注文者の国 * @return array カートの計算結果の配列 */ public function calculate($productTypeId, &$objCustomer, $use_point = 0, $deliv_pref = '', $charge = 0, $discount = 0, $deliv_id = 0, $order_pref = 0, $order_country_id = 0) { $results = array(); $total_point = $this->getAllProductsPoint($productTypeId); // MEMO: 税金計算は注文者の住所基準 $results['tax'] = $this->getAllProductsTax($productTypeId, $order_pref, $order_country_id); $results['subtotal'] = $this->getAllProductsTotal($productTypeId, $order_pref, $order_country_id); $results['deliv_fee'] = 0; // 商品ごとの送料を加算 if (OPTION_PRODUCT_DELIV_FEE == 1) { $cartItems = $this->getCartList($productTypeId); foreach ($cartItems as $arrItem) { $results['deliv_fee'] += $arrItem['productsClass']['deliv_fee'] * $arrItem['quantity']; } } // 配送業者の送料を加算 if (OPTION_DELIV_FEE == 1 && !SC_Utils_Ex::isBlank($deliv_pref) && !SC_Utils_Ex::isBlank($deliv_id)) { $results['deliv_fee'] += SC_Helper_Delivery_Ex::getDelivFee($deliv_pref, $deliv_id); } // 送料無料チェック if ($this->isDelivFree($productTypeId)) { $results['deliv_fee'] = 0; } // 合計を計算 $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; }
/** * Page のアクション. * * @return void */ public function action() { $objPurchase = new SC_Helper_Purchase_Ex(); $objFormParam = new SC_FormParam_Ex(); // パラメータ情報の初期化 $this->lfInitParam($objFormParam); $objFormParam->setParam($_REQUEST); $objFormParam->convParam(); $order_id = $objFormParam->getValue('order_id'); // DBから受注情報を読み込む $this->setOrderToFormParam($objFormParam, $order_id); $this->arrForm = $objFormParam->getFormParamList(); $this->arrAllShipping = $objFormParam->getSwapArray(array_merge($this->arrShippingKeys, $this->arrShipmentItemKeys)); $this->tpl_shipping_quantity = count($this->arrAllShipping); $this->arrDelivTime = SC_Helper_Delivery_Ex::getDelivTime($objFormParam->getValue('deliv_id')); $this->arrInfo = SC_Helper_DB_Ex::sfGetBasisData(); $this->setTemplate($this->tpl_mainpage); }
/** * DB更新処理 * * @param integer $order_id 受注ID * @param SC_Helper_Purchase $objPurchase SC_Helper_Purchase インスタンス * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param string $message 通知メッセージ * @param array $arrValuesBefore 更新前の受注情報 * @return integer $order_id 受注ID * * エラー発生時は負数を返す。 */ public function doRegister($order_id, &$objPurchase, &$objFormParam, &$message, &$arrValuesBefore) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $arrValues = $objFormParam->getDbArray(); $where = 'order_id = ?'; $objQuery->begin(); // 支払い方法が変更されたら、支払い方法名称も更新 if ($arrValues['payment_id'] != $arrValuesBefore['payment_id']) { $arrValues['payment_method'] = $this->arrPayment[$arrValues['payment_id']]; $arrValuesBefore['payment_id'] = NULL; } // 生年月日の調整 $arrValues['order_birth'] = SC_Utils_Ex::sfGetTimestamp($arrValues['order_birth_year'], $arrValues['order_birth_month'], $arrValues['order_birth_day']); // 受注テーブルの更新 $order_id = $objPurchase->registerOrder($order_id, $arrValues); $arrDetail = $objFormParam->getSwapArray(array('product_id', 'product_class_id', 'product_code', 'product_name', 'price', 'quantity', 'point_rate', 'classcategory_name1', 'classcategory_name2', 'tax_rate', 'tax_rule')); // 変更しようとしている商品情報とDBに登録してある商品情報を比較することで、更新すべき数量を計算 $max = count($arrDetail); $k = 0; $arrStockData = array(); for ($i = 0; $i < $max; $i++) { if (!empty($arrDetail[$i]['product_id'])) { $arrPreDetail = $objQuery->select('*', 'dtb_order_detail', 'order_id = ? AND product_class_id = ?', array($order_id, $arrDetail[$i]['product_class_id'])); if (!empty($arrPreDetail) && $arrPreDetail[0]['quantity'] != $arrDetail[$i]['quantity']) { // 数量が変更された商品 $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id']; $arrStockData[$k]['quantity'] = $arrPreDetail[0]['quantity'] - $arrDetail[$i]['quantity']; ++$k; } elseif (empty($arrPreDetail)) { // 新しく追加された商品 もしくは 違う商品に変更された商品 $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id']; $arrStockData[$k]['quantity'] = -$arrDetail[$i]['quantity']; ++$k; } $objQuery->delete('dtb_order_detail', 'order_id = ? AND product_class_id = ?', array($order_id, $arrDetail[$i]['product_class_id'])); } } // 上記の新しい商品のループでDELETEされなかった商品は、注文より削除された商品 $arrPreDetail = $objQuery->select('*', 'dtb_order_detail', 'order_id = ?', array($order_id)); foreach ($arrPreDetail as $key => $val) { $arrStockData[$k]['product_class_id'] = $val['product_class_id']; $arrStockData[$k]['quantity'] = $val['quantity']; ++$k; } // 受注詳細データの更新 $objPurchase->registerOrderDetail($order_id, $arrDetail); // 在庫数調整 if (ORDER_DELIV != $arrValues['status'] && ORDER_CANCEL != $arrValues['status']) { foreach ($arrStockData as $stock) { $objQuery->update('dtb_products_class', array(), 'product_class_id = ?', array($stock['product_class_id']), array('stock' => 'stock + ?'), array($stock['quantity'])); } } $arrAllShipping = $objFormParam->getSwapArray($this->arrShippingKeys); $arrAllShipmentItem = $objFormParam->getSwapArray($this->arrShipmentItemKeys); $arrDelivTime = SC_Helper_Delivery_Ex::getDelivTime($objFormParam->getValue('deliv_id')); //商品単価を複数配送にも適応 $arrShippingValues = array(); $arrIsNotQuantityUp = array(); foreach ($arrAllShipping as $shipping_index => $arrShipping) { $shipping_id = $arrShipping['shipping_id']; $arrShippingValues[$shipping_index] = $arrShipping; $arrShippingValues[$shipping_index]['shipping_date'] = SC_Utils_Ex::sfGetTimestamp($arrShipping['shipping_date_year'], $arrShipping['shipping_date_month'], $arrShipping['shipping_date_day']); //商品単価を複数配送にも反映する foreach ($arrDetail as $product_detail) { foreach ($arrAllShipmentItem[$shipping_index]['shipment_product_class_id'] as $relation_index => $shipment_product_class_id) { if ($product_detail['product_class_id'] == $shipment_product_class_id) { $arrAllShipmentItem[$shipping_index]['shipment_price'][$relation_index] = $product_detail['price']; } } } // 配送業者IDを取得 $arrShippingValues[$shipping_index]['deliv_id'] = $objFormParam->getValue('deliv_id'); // お届け時間名称を取得 $arrShippingValues[$shipping_index]['shipping_time'] = $arrDelivTime[$arrShipping['time_id']]; // 複数配送の場合は配送商品を登録 if (!SC_Utils_Ex::isBlank($arrAllShipmentItem)) { $arrShipmentValues = array(); foreach ($arrAllShipmentItem[$shipping_index] as $key => $arrItem) { // TODO $arrItemが配列でない場合があるのを見直した方が良いかもしれない if (is_array($arrItem)) { $i = 0; foreach ($arrItem as $item) { $arrShipmentValues[$shipping_index][$i][str_replace('shipment_', '', $key)] = $item; $i++; } } } $objPurchase->registerShipmentItem($order_id, $shipping_id, $arrShipmentValues[$shipping_index]); } } $objPurchase->registerShipping($order_id, $arrShippingValues, false); $objQuery->commit(); return $order_id; }
public function lfCheckError(&$objFormParam) { // 入力データを渡す。 $arrRet = $objFormParam->getHashArray(); $objErr = new SC_CheckError_Ex($arrRet); $objErr->arrErr = $objFormParam->checkError(); if (!isset($objErr->arrErr['name'])) { // 既存チェック $objDelivery = new SC_Helper_Delivery_Ex(); if ($objDelivery->checkExist($arrRet)) { $objErr->arrErr['service_name'] = '※ 同じ名称の組み合わせは登録できません。<br>'; } } return $objErr->arrErr; }
/** * 配送業者IDから, 支払い方法, お届け時間の配列を取得する. * * 結果の連想配列の添字の値は以下の通り * - 'arrDelivTime' - お届け時間の配列 * - 'arrPayment' - 支払い方法の配列 * - 'img_show' - 支払い方法の画像の有無 * * @param SC_CartSession $objCartSess SC_CartSession インスタンス * @param integer $deliv_id 配送業者ID * @return array 支払い方法, お届け時間を格納した配列 */ public function getSelectedDeliv(&$objCartSess, $deliv_id) { $arrResults = array(); if (strval($deliv_id) === strval(intval($deliv_id))) { $arrResults['arrDelivTime'] = SC_Helper_Delivery_Ex::getDelivTime($deliv_id); $total = $objCartSess->getAllProductsTotal($objCartSess->getKey()); $payments_deliv = SC_Helper_Delivery_Ex::getPayments($deliv_id); $objPayment = new SC_Helper_Payment_Ex(); $payments_total = $objPayment->getByPrice($total); $arrPayment = array(); foreach ($payments_total as $payment) { if (in_array($payment['payment_id'], $payments_deliv)) { $arrPayment[] = $payment; } } $arrResults['arrPayment'] = $arrPayment; $arrResults['img_show'] = $this->hasPaymentImage($arrResults['arrPayment']); } return $arrResults; }