Page
[ class tree: Page ] [ index: Page ] [ all elements ]

Source for file LC_Page_Admin_Order_Edit.php

Documentation is available at LC_Page_Admin_Order_Edit.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once CLASS_EX_REALDIR 'page_extends/admin/order/LC_Page_Admin_Order_Ex.php';
  26.  
  27. /**
  28.  * 受注修正 のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id: LC_Page_Admin_Order_Edit.php 21231 2011-09-04 02:43:10Z Seasoft $
  33.  */
  34. class LC_Page_Admin_Order_Edit extends LC_Page_Admin_Order_Ex {
  35.  
  36.     var $arrShippingKeys = array(
  37.         'shipping_id',
  38.         'shipping_name01',
  39.         'shipping_name02',
  40.         'shipping_kana01',
  41.         'shipping_kana02',
  42.         'shipping_tel01',
  43.         'shipping_tel02',
  44.         'shipping_tel03',
  45.         'shipping_fax01',
  46.         'shipping_fax02',
  47.         'shipping_fax03',
  48.         'shipping_pref',
  49.         'shipping_zip01',
  50.         'shipping_zip02',
  51.         'shipping_addr01',
  52.         'shipping_addr02',
  53.         'shipping_date_year',
  54.         'shipping_date_month',
  55.         'shipping_date_day',
  56.         'time_id',
  57.     );
  58.  
  59.     var $arrShipmentItemKeys = array(
  60.         'shipment_product_class_id',
  61.         'shipment_product_code',
  62.         'shipment_product_name',
  63.         'shipment_classcategory_name1',
  64.         'shipment_classcategory_name2',
  65.         'shipment_price',
  66.         'shipment_quantity',
  67.     );
  68.  
  69.     // }}}
  70.     // {{{ functions
  71.  
  72.     /**
  73.      * Page を初期化する.
  74.      *
  75.      * @return void 
  76.      */
  77.     function init({
  78.         parent::init();
  79.         $this->tpl_mainpage 'order/edit.tpl';
  80.         $this->tpl_mainno 'order';
  81.         $this->tpl_maintitle '受注管理';
  82.         $this->tpl_subtitle '受注登録';
  83.  
  84.         $masterData new SC_DB_MasterData_Ex();
  85.         $this->arrPref $masterData->getMasterData('mtb_pref');
  86.         $this->arrORDERSTATUS $masterData->getMasterData("mtb_order_status");
  87.         $this->arrDeviceType $masterData->getMasterData('mtb_device_type');
  88.  
  89.         $objDate new SC_Date_Ex(RELEASE_YEAR);
  90.         $this->arrYearShippingDate $objDate->getYear(''date('Y')'');
  91.         $this->arrMonthShippingDate $objDate->getMonth(true);
  92.         $this->arrDayShippingDate $objDate->getDay(true);
  93.  
  94.         // 支払い方法の取得
  95.         $this->arrPayment SC_Helper_DB_Ex::sfGetIDValueList("dtb_payment""payment_id""payment_method");
  96.  
  97.         // 配送業者の取得
  98.         $this->arrDeliv SC_Helper_DB_Ex::sfGetIDValueList("dtb_deliv""deliv_id"'name');
  99.  
  100.         $this->httpCacheControl('nocache');
  101.     }
  102.  
  103.     /**
  104.      * Page のプロセス.
  105.      *
  106.      * @return void 
  107.      */
  108.     function process({
  109.         $this->action();
  110.         $this->sendResponse();
  111.     }
  112.  
  113.     /**
  114.      * Page のアクション.
  115.      *
  116.      * @return void 
  117.      */
  118.     function action({
  119.         $objPurchase new SC_Helper_Purchase_Ex();
  120.         $objFormParam new SC_FormParam_Ex();
  121.  
  122.         // パラメーター情報の初期化
  123.         $this->lfInitParam($objFormParam);
  124.         $objFormParam->setParam($_REQUEST);
  125.         $objFormParam->convParam();
  126.         $order_id $objFormParam->getValue('order_id');
  127.         $arrValuesBefore array();
  128.  
  129.         // DBから受注情報を読み込む
  130.         if (!SC_Utils_Ex::isBlank($order_id)) {
  131.             $this->setOrderToFormParam($objFormParam$order_id);
  132.             $this->tpl_subno 'index';
  133.             $arrValuesBefore['payment_id'$objFormParam->getValue('payment_id');
  134.             $arrValuesBefore['payment_method'$objFormParam->getValue('payment_method');
  135.         else {
  136.             $this->tpl_subno 'add';
  137.             $this->tpl_mode 'add';
  138.             $arrValuesBefore['payment_id'NULL;
  139.             $arrValuesBefore['payment_method'NULL;
  140.             // お届け先情報を空情報で表示
  141.             $arrShippingIds[null;
  142.             $objFormParam->setValue('shipping_id'$arrShippingIds);
  143.             
  144.             // 新規受注登録で入力エラーがあった場合の画面表示用に、顧客の現在ポイントを取得
  145.             if (!SC_Utils_Ex::isBlank($objFormParam->getValue('customer_id'))) {
  146.                 $customer_id $objFormParam->getValue('customer_id');
  147.                 $arrCustomer SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id);
  148.                 $objFormParam->setValue('customer_point'$arrCustomer['point']);
  149.             }
  150.         }
  151.  
  152.         $this->arrSearchHidden $objFormParam->getSearchArray();
  153.  
  154.         switch($this->getMode()) {
  155.         case 'pre_edit':
  156.         case 'order_id':
  157.             break;
  158.  
  159.         case 'edit':
  160.             $objFormParam->setParam($_POST);
  161.             $objFormParam->convParam();
  162.             $this->arrErr $this->lfCheckError($objFormParam);
  163.             if (SC_Utils_Ex::isBlank($this->arrErr)) {
  164.                 $message '受注を編集しました。';
  165.                 $order_id $this->doRegister($order_id$objPurchase$objFormParam$message$arrValuesBefore);
  166.                 if ($order_id >= 0{
  167.                     $this->setOrderToFormParam($objFormParam$order_id);
  168.                 }
  169.                 $this->tpl_onload "window.alert('" $message "');";
  170.             }
  171.             break;
  172.  
  173.         case 'add':
  174.             if ($_SERVER['REQUEST_METHOD'== 'POST'{
  175.                 $objFormParam->setParam($_POST);
  176.                 $objFormParam->convParam();
  177.                 $this->arrErr $this->lfCheckError($objFormParam);
  178.                 if (SC_Utils_Ex::isBlank($this->arrErr)) {
  179.                     $message '受注を登録しました。';
  180.                     $order_id $this->doRegister(null$objPurchase$objFormParam$message$arrValuesBefore);
  181.                     if ($order_id >= 0{
  182.                         $this->tpl_mode 'edit';
  183.                         $objFormParam->setValue('order_id'$order_id);
  184.                         $this->setOrderToFormParam($objFormParam$order_id);
  185.                     }
  186.                     $this->tpl_onload "window.alert('" $message "');";
  187.                 }
  188.             }
  189.  
  190.             break;
  191.  
  192.         // 再計算
  193.         case 'recalculate':
  194.         //支払い方法の選択
  195.         case 'payment':
  196.         // 配送業者の選択
  197.         case 'deliv':
  198.             $objFormParam->setParam($_POST);
  199.             $objFormParam->convParam();
  200.             $this->arrErr $this->lfCheckError($objFormParam);
  201.             break;
  202.  
  203.         // 商品削除
  204.         case 'delete_product':
  205.             $objFormParam->setParam($_POST);
  206.             $objFormParam->convParam();
  207.             $delete_no $objFormParam->getValue('delete_no');
  208.             $this->doDeleteProduct($delete_no$objFormParam);
  209.             $this->arrErr $this->lfCheckError($objFormParam);
  210.             break;
  211.  
  212.         // 商品追加ポップアップより商品選択
  213.         case 'select_product_detail':
  214.             $objFormParam->setParam($_POST);
  215.             $objFormParam->convParam();
  216.             $this->doRegisterProduct($objFormParam);
  217.             $this->arrErr $this->lfCheckError($objFormParam);
  218.             break;
  219.  
  220.         // 顧客検索ポップアップより顧客指定
  221.         case 'search_customer':
  222.             $objFormParam->setParam($_POST);
  223.             $objFormParam->convParam();
  224.             $this->setCustomerTo($objFormParam->getValue('edit_customer_id'),
  225.                                  $objFormParam);
  226.             $this->arrErr $this->lfCheckError($objFormParam);
  227.             break;
  228.  
  229.         // 複数配送設定表示
  230.         case 'multiple':
  231.             $objFormParam->setParam($_POST);
  232.             $objFormParam->convParam();
  233.             $this->arrErr $this->lfCheckError($objFormParam);
  234.             break;
  235.  
  236.         // 複数配送設定を反映
  237.         case 'multiple_set_to':
  238.             $this->lfInitMultipleParam($objFormParam);
  239.             $objFormParam->setParam($_POST);
  240.             $objFormParam->convParam();
  241.             $this->setMultipleItemTo($objFormParam);
  242.             break;
  243.  
  244.         // お届け先の追加
  245.         case 'append_shipping':
  246.             $objFormParam->setParam($_POST);
  247.             $objFormParam->convParam();
  248.             $this->addShipping($objFormParam);
  249.             break;
  250.  
  251.         default:
  252.         }
  253.  
  254.         $this->arrForm $objFormParam->getFormParamList();
  255.         $this->arrAllShipping $objFormParam->getSwapArray(array_merge($this->arrShippingKeys$this->arrShipmentItemKeys));
  256.         $this->arrDelivTime $objPurchase->getDelivTime($objFormParam->getValue('deliv_id'));
  257.         $this->tpl_onload .= $this->getAnchorKey($objFormParam);
  258.         $this->arrInfo SC_Helper_DB_Ex::sfGetBasisData();
  259.         if ($arrValuesBefore['payment_id'])
  260.             $this->arrPayment[$arrValuesBefore['payment_id']] $arrValuesBefore['payment_method'];
  261.  
  262.     }
  263.  
  264.     /**
  265.      * デストラクタ.
  266.      *
  267.      * @return void 
  268.      */
  269.     function destroy({
  270.         parent::destroy();
  271.     }
  272.  
  273.     /**
  274.      * パラメーター情報の初期化を行う.
  275.      *
  276.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  277.      * @return void 
  278.      */
  279.     function lfInitParam(&$objFormParam{
  280.         // 検索条件のパラメーターを初期化
  281.         parent::lfInitParam($objFormParam);
  282.  
  283.         // お客様情報
  284.         $objFormParam->addParam("注文者 お名前(姓)""order_name01"STEXT_LEN'KVa'array("EXIST_CHECK""SPTAB_CHECK""MAX_LENGTH_CHECK"));
  285.         $objFormParam->addParam("注文者 お名前(名)""order_name02"STEXT_LEN'KVa'array("EXIST_CHECK""SPTAB_CHECK""MAX_LENGTH_CHECK"));
  286.         $objFormParam->addParam("注文者 お名前(フリガナ・姓)""order_kana01"STEXT_LEN'KVCa'array("EXIST_CHECK""SPTAB_CHECK""MAX_LENGTH_CHECK"));
  287.         $objFormParam->addParam("注文者 お名前(フリガナ・名)""order_kana02"STEXT_LEN'KVCa'array("EXIST_CHECK""SPTAB_CHECK""MAX_LENGTH_CHECK"));
  288.         $objFormParam->addParam("メールアドレス""order_email"null'KVCa'array("NO_SPTAB""EMAIL_CHECK""EMAIL_CHAR_CHECK"));
  289.         $objFormParam->addParam("郵便番号1""order_zip01"ZIP01_LEN'n'array("NUM_CHECK""NUM_COUNT_CHECK"));
  290.         $objFormParam->addParam("郵便番号2""order_zip02"ZIP02_LEN'n'array("NUM_CHECK""NUM_COUNT_CHECK"));
  291.         $objFormParam->addParam("都道府県""order_pref"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  292.         $objFormParam->addParam("住所1""order_addr01"MTEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  293.         $objFormParam->addParam("住所2""order_addr02"MTEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  294.         $objFormParam->addParam("電話番号1""order_tel01"TEL_ITEM_LEN'n'array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
  295.         $objFormParam->addParam("電話番号2""order_tel02"TEL_ITEM_LEN'n'array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
  296.         $objFormParam->addParam("電話番号3""order_tel03"TEL_ITEM_LEN'n'array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
  297.  
  298.         // 受注商品情報
  299.         $objFormParam->addParam("値引き"'discount'INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  300.         $objFormParam->addParam("送料""deliv_fee"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  301.         $objFormParam->addParam("手数料"'charge'INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  302.  
  303.         // ポイント機能ON時のみ
  304.         if (USE_POINT !== false{
  305.             $objFormParam->addParam("利用ポイント""use_point"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK"));
  306.         }
  307.  
  308.         $objFormParam->addParam("配送業者""deliv_id"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK"));
  309.         $objFormParam->addParam("お支払い方法""payment_id"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK"));
  310.         $objFormParam->addParam("対応状況"'status'INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK"));
  311.         $objFormParam->addParam("お支払方法名称""payment_method");
  312.  
  313.         // 受注詳細情報
  314.         $objFormParam->addParam("商品種別ID""product_type_id"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  315.         $objFormParam->addParam("単価"'price'INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  316.         $objFormParam->addParam("数量"'quantity'INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  317.         $objFormParam->addParam("商品ID""product_id"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  318.         $objFormParam->addParam("商品規格ID""product_class_id"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")'0');
  319.         $objFormParam->addParam("ポイント付与率""point_rate");
  320.         $objFormParam->addParam("商品コード""product_code");
  321.         $objFormParam->addParam("商品名""product_name");
  322.         $objFormParam->addParam("規格名1""classcategory_name1");
  323.         $objFormParam->addParam("規格名2""classcategory_name2");
  324.         $objFormParam->addParam("メモ"'note'MTEXT_LEN'KVa'array("MAX_LENGTH_CHECK"));
  325.         $objFormParam->addParam("削除用項番""delete_no"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  326.  
  327.         // DB読込用
  328.         $objFormParam->addParam("小計"'subtotal');
  329.         $objFormParam->addParam("合計"'total');
  330.         $objFormParam->addParam("支払い合計""payment_total");
  331.         $objFormParam->addParam("加算ポイント""add_point");
  332.         $objFormParam->addParam("お誕生日ポイント""birth_point");
  333.         $objFormParam->addParam("消費税合計"'tax');
  334.         $objFormParam->addParam("最終保持ポイント""total_point");
  335.         $objFormParam->addParam("顧客ID""customer_id"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK")'0');
  336.         $objFormParam->addParam("顧客ID""edit_customer_id"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK")'0');
  337.         $objFormParam->addParam("現在のポイント""customer_point");
  338.         $objFormParam->addParam("受注前ポイント"'point');
  339.         $objFormParam->addParam("注文番号""order_id");
  340.         $objFormParam->addParam("受注日""create_date");
  341.         $objFormParam->addParam("発送日""commit_date");
  342.         $objFormParam->addParam("備考"'message');
  343.         $objFormParam->addParam("入金日""payment_date");
  344.         $objFormParam->addParam("アクセス端末""device_type_id");
  345.  
  346.         // 複数情報
  347.         $objFormParam->addParam("配送数""shipping_quantity"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK")1);
  348.         $objFormParam->addParam("配送ID""shipping_id"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK")0);
  349.         $objFormParam->addParam("お名前(姓)""shipping_name01"STEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  350.         $objFormParam->addParam("お名前(名)""shipping_name02"STEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  351.         $objFormParam->addParam("お名前(フリガナ・姓)""shipping_kana01"STEXT_LEN'KVCa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  352.         $objFormParam->addParam("お名前(フリガナ・名)""shipping_kana02"STEXT_LEN'KVCa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  353.         $objFormParam->addParam("郵便番号1""shipping_zip01"ZIP01_LEN'n'array("NUM_CHECK""NUM_COUNT_CHECK"));
  354.         $objFormParam->addParam("郵便番号2""shipping_zip02"ZIP02_LEN'n'array("NUM_CHECK""NUM_COUNT_CHECK"));
  355.         $objFormParam->addParam("都道府県""shipping_pref"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  356.         $objFormParam->addParam("住所1""shipping_addr01"MTEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  357.         $objFormParam->addParam("住所2""shipping_addr02"MTEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  358.         $objFormParam->addParam("電話番号1""shipping_tel01"TEL_ITEM_LEN'n'array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
  359.         $objFormParam->addParam("電話番号2""shipping_tel02"TEL_ITEM_LEN'n'array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
  360.         $objFormParam->addParam("電話番号3""shipping_tel03"TEL_ITEM_LEN'n'array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
  361.         $objFormParam->addParam("お届け時間ID""time_id"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  362.         $objFormParam->addParam("お届け日(年)""shipping_date_year"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  363.         $objFormParam->addParam("お届け日(月)""shipping_date_month"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  364.         $objFormParam->addParam("お届け日(日)""shipping_date_day"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  365.         $objFormParam->addParam("お届け日""shipping_date"STEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  366.         $objFormParam->addParam("配送商品数量""shipping_product_quantity"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  367.  
  368.         $objFormParam->addParam("商品規格ID""shipment_product_class_id"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  369.         $objFormParam->addParam("商品コード""shipment_product_code");
  370.         $objFormParam->addParam("商品名""shipment_product_name");
  371.         $objFormParam->addParam("規格名1""shipment_classcategory_name1");
  372.         $objFormParam->addParam("規格名2""shipment_classcategory_name2");
  373.         $objFormParam->addParam("単価""shipment_price"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK")'0');
  374.         $objFormParam->addParam("数量""shipment_quantity"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK")'0');
  375.  
  376.         $objFormParam->addParam("商品項番"'no'INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  377.         $objFormParam->addParam("追加商品規格ID""add_product_class_id"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  378.         $objFormParam->addParam("修正商品規格ID""edit_product_class_id"INT_LEN'n'array("MAX_LENGTH_CHECK""NUM_CHECK"));
  379.         $objFormParam->addParam("アンカーキー""anchor_key"STEXT_LEN'KVa'array("SPTAB_CHECK""MAX_LENGTH_CHECK"));
  380.     }
  381.  
  382.     /**
  383.      * 複数配送用フォームの初期化を行う.
  384.      *
  385.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  386.      * @return void 
  387.      */
  388.     function lfInitMultipleParam(&$objFormParam{
  389.         $objFormParam->addParam("商品規格ID""multiple_product_class_id"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK"));
  390.         $objFormParam->addParam("商品コード""multiple_product_code"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")1);
  391.         $objFormParam->addParam("商品名""multiple_product_name"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")1);
  392.         $objFormParam->addParam("規格1""multiple_classcategory_name1"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")1);
  393.         $objFormParam->addParam("規格2""multiple_classcategory_name2"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")1);
  394.         $objFormParam->addParam("単価""multiple_price"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")1);
  395.         $objFormParam->addParam("数量""multiple_quantity"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK")1);
  396.         $objFormParam->addParam("配送先住所""multiple_shipping_id"INT_LEN'n'array("EXIST_CHECK""MAX_LENGTH_CHECK""NUM_CHECK"));
  397.     }
  398.  
  399.     /**
  400.      * 複数配送入力フォームで入力された値を SC_FormParam へ設定する.
  401.      *
  402.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  403.      * @return void 
  404.      */
  405.     function setMultipleItemTo(&$objFormParam{
  406.         $arrMultipleKey array('multiple_shipping_id',
  407.                                 'multiple_product_class_id',
  408.                                 'multiple_product_name',
  409.                                 'multiple_product_code',
  410.                                 'multiple_classcategory_name1',
  411.                                 'multiple_classcategory_name2',
  412.                                 'multiple_price',
  413.                                 'multiple_quantity');
  414.         $arrMultipleParams $objFormParam->getSwapArray($arrMultipleKey);
  415.  
  416.         /*
  417.          * 複数配送フォームの入力値を shipping_id ごとにマージ
  418.          *
  419.          * $arrShipmentItem[配送先ID][商品規格ID]['shipment_(key)'] = 値
  420.          */
  421.         $arrShipmentItem array();
  422.         foreach ($arrMultipleParams as $arrMultiple{
  423.             $shipping_id $arrMultiple['multiple_shipping_id'];
  424.             $product_class_id $arrMultiple['multiple_product_class_id'];
  425.             foreach ($arrMultiple as $key => $val{
  426.                 if ($key == 'multiple_quantity'{
  427.                     $arrShipmentItem[$shipping_id][$product_class_id][str_replace('multiple''shipment'$key)+= $val;
  428.                 else {
  429.                     $arrShipmentItem[$shipping_id][$product_class_id][str_replace('multiple''shipment'$key)$val;
  430.                 }
  431.             }
  432.         }
  433.  
  434.         /*
  435.          * フォームの配送先ごとの配列を生成
  436.          *
  437.          * $arrShipmentForm['(key)'][$shipping_id][$item_index] = 値
  438.          * $arrProductQuantity[$shipping_id] = 配送先ごとの配送商品数量
  439.          */
  440.         $arrShipmentForm array();
  441.         $arrProductQuantity array();
  442.         $arrShippingIds $objFormParam->getValue('shipping_id');
  443.         foreach ($arrShippingIds as $shipping_id{
  444.             $item_index 0;
  445.             foreach ($arrShipmentItem[$shipping_idas $product_class_id => $shipment_item{
  446.                 foreach ($shipment_item as $key => $val{
  447.                     $arrShipmentForm[$key][$shipping_id][$item_index$val;
  448.                 }
  449.                 // 受注商品の数量を設定
  450.                 $arrQuantity[$product_class_id+= $shipment_item['shipment_quantity'];
  451.                 $item_index++;
  452.             }
  453.             // 配送先ごとの配送商品数量を設定
  454.             $arrProductQuantity[$shipping_idcount($arrShipmentItem[$shipping_id]);
  455.         }
  456.  
  457.         $objFormParam->setParam($arrShipmentForm);
  458.         $objFormParam->setValue('shipping_product_quantity'$arrProductQuantity);
  459.  
  460.         // 受注商品の数量を変更
  461.         $arrDest array();
  462.         foreach ($objFormParam->getValue('product_class_id'as $n => $order_product_class_id{
  463.             $arrDest['quantity'][$n0;
  464.         }
  465.         foreach ($arrQuantity as $product_class_id => $quantity{
  466.             foreach ($objFormParam->getValue('product_class_id'as $n => $order_product_class_id{
  467.                 if ($product_class_id == $order_product_class_id{
  468.                     $arrDest['quantity'][$n$quantity;
  469.                 }
  470.             }
  471.         }
  472.         $objFormParam->setParam($arrDest);
  473.     }
  474.  
  475.     /**
  476.      * 受注データを取得して, SC_FormParam へ設定する.
  477.      *
  478.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  479.      * @param integer $order_id 取得元の受注ID
  480.      * @return void 
  481.      */
  482.     function setOrderToFormParam(&$objFormParam$order_id{
  483.         $objPurchase new SC_Helper_Purchase_Ex();
  484.  
  485.         // 受注詳細を設定
  486.         $arrOrderDetail $objPurchase->getOrderDetail($order_idfalse);
  487.         $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrOrderDetail));
  488.  
  489.         $arrShippingsTmp $objPurchase->getShippings($order_id);
  490.         $arrShippings array();
  491.         foreach ($arrShippingsTmp as $row{
  492.             // お届け日の処理
  493.             if (!SC_Utils_Ex::isBlank($row["shipping_date"])) {
  494.                 $ts strtotime($row["shipping_date"]);
  495.                 $row['shipping_date_year'date('Y'$ts);
  496.                 $row['shipping_date_month'date('n'$ts);
  497.                 $row['shipping_date_day'date('j'$ts);
  498.             }
  499.             $arrShippings[$row['shipping_id']] $row;
  500.         }
  501.         $objFormParam->setValue('shipping_quantity'count($arrShippings));
  502.         $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrShippings));
  503.  
  504.         /*
  505.          * 配送商品を設定
  506.          *
  507.          * $arrShipmentItem['shipment_(key)'][$shipping_id][$item_index] = 値
  508.          * $arrProductQuantity[$shipping_id] = 配送先ごとの配送商品数量
  509.          */
  510.         $arrProductQuantity array();
  511.         $arrShipmentItem array();
  512.         foreach ($arrShippings as $shipping_id => $arrShipping{
  513.             $arrProductQuantity[$shipping_idcount($arrShipping['shipment_item']);
  514.             foreach ($arrShipping['shipment_item'as $item_index => $arrItem{
  515.                 foreach ($arrItem as $item_key => $item_val{
  516.                     $arrShipmentItem['shipment_' $item_key][$shipping_id][$item_index$item_val;
  517.                 }
  518.             }
  519.         }
  520.         $objFormParam->setValue('shipping_product_quantity'$arrProductQuantity);
  521.         $objFormParam->setParam($arrShipmentItem);
  522.  
  523.         /*
  524.          * 受注情報を設定
  525.          * $arrOrderDetail と項目が重複しており, $arrOrderDetail は連想配列の値
  526.          * が渡ってくるため, $arrOrder で上書きする.
  527.          */
  528.         $arrOrder $objPurchase->getOrder($order_id);
  529.         $objFormParam->setParam($arrOrder);
  530.  
  531.         // ポイントを設定
  532.         list($db_point$rollback_pointSC_Helper_DB_Ex::sfGetRollbackPoint(
  533.             $order_id$arrOrder['use_point']$arrOrder['add_point']$arrOrder['status']
  534.         );
  535.         $objFormParam->setValue('total_point'$db_point);
  536.         $objFormParam->setValue('point'$rollback_point);
  537.  
  538.         if (!SC_Utils_Ex::isBlank($objFormParam->getValue('customer_id'))) {
  539.             $arrCustomer SC_Helper_Customer_Ex::sfGetCustomerDataFromId($objFormParam->getValue('customer_id'));
  540.             $objFormParam->setValue('customer_point'$arrCustomer['point']);
  541.         }
  542.     }
  543.  
  544.     /**
  545.      * 入力内容のチェックを行う.
  546.      *
  547.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  548.      * @return array エラーメッセージの配列
  549.      */
  550.     function lfCheckError(&$objFormParam{
  551.         $arrErr $objFormParam->checkError();
  552.  
  553.         if (!SC_Utils_Ex::isBlank($objErr->arrErr)) {
  554.             return $arrErr;
  555.         }
  556.  
  557.         $arrValues $objFormParam->getHashArray();
  558.  
  559.         // 商品の種類数
  560.         $max count($arrValues['quantity']);
  561.         $subtotal 0;
  562.         $totalpoint 0;
  563.         $totaltax 0;
  564.         for($i 0$i $max$i++{
  565.             // 小計の計算
  566.             $subtotal += SC_Helper_DB_Ex::sfCalcIncTax($arrValues['price'][$i]$arrValues['quantity'][$i];
  567.             // 小計の計算
  568.             $totaltax += SC_Helper_DB_Ex::sfTax($arrValues['price'][$i]$arrValues['quantity'][$i];
  569.             // 加算ポイントの計算
  570.             $totalpoint += SC_Utils_Ex::sfPrePoint($arrValues['price'][$i]$arrValues['point_rate'][$i]$arrValues['quantity'][$i];
  571.  
  572.             // 在庫数のチェック
  573.             $objProduct new SC_Product_Ex();
  574.             $arrProduct $objProduct->getDetailAndProductsClass($arrValues['product_class_id'][$i]);
  575.  
  576.             // 編集前の値と比較するため受注詳細を取得
  577.             $objPurchase new SC_Helper_Purchase_Ex();
  578.             $arrOrderDetail SC_Utils_Ex::sfSwapArray($objPurchase->getOrderDetail($objFormParam->getValue('order_id')false));
  579.  
  580.             if ($arrProduct['stock_unlimited'!= '1'
  581.                 && $arrProduct['stock'$arrValues['quantity'][$i$arrOrderDetail['quantity'][$i]{
  582.                 $class_name1 $arrValues['classcategory_name1'][$i];
  583.                 $class_name1 SC_Utils_Ex::isBlank($class_name1'なし' $class_name1;
  584.                 $class_name2 $arrValues['classcategory_name2'][$i];
  585.                 $class_name2 SC_Utils_Ex::isBlank($class_name2'なし' $class_name2;
  586.                 $arrErr['quantity'][$i.= $arrValues['product_name'][$i]
  587.                     . '/(' $class_name1 ')/(' $class_name2 ') の在庫が不足しています。 設定できる数量は「'
  588.                     . ($arrOrderDetail['quantity'][$i$arrProduct['stock']'」までです。<br />';
  589.             }
  590.         }
  591.  
  592.         // 消費税
  593.         $arrValues['tax'$totaltax;
  594.         // 小計
  595.         $arrValues['subtotal'$subtotal;
  596.         // 合計
  597.         $arrValues['total'$subtotal $arrValues['discount'$arrValues['deliv_fee'$arrValues['charge'];
  598.         // お支払い合計
  599.         $arrValues['payment_total'$arrValues['total'($arrValues['use_point'POINT_VALUE);
  600.  
  601.         // 加算ポイント
  602.         $arrValues['add_point'SC_Helper_DB_Ex::sfGetAddPoint($totalpoint$arrValues['use_point']);
  603.  
  604.         // 最終保持ポイント
  605.         $arrValues['total_point'$objFormParam->getValue('point'$arrValues['use_point'];
  606.  
  607.         if ($arrValues['total'0{
  608.             $arrErr['total''合計額がマイナス表示にならないように調整して下さい。<br />';
  609.         }
  610.  
  611.         if ($arrValues['payment_total'0{
  612.             $arrErr['payment_total''お支払い合計額がマイナス表示にならないように調整して下さい。<br />';
  613.         }
  614.  
  615.         if ($arrValues['total_point'0{
  616.             $arrErr['use_point''最終保持ポイントがマイナス表示にならないように調整して下さい。<br />';
  617.         }
  618.  
  619.         $objFormParam->setParam($arrValues);
  620.         return $arrErr;
  621.     }
  622.  
  623.     /**
  624.      * DB更新処理
  625.      *
  626.      * @param integer $order_id 受注ID
  627.      * @param SC_Helper_Purchase $objPurchase SC_Helper_Purchase インスタンス
  628.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  629.      * @param string $message 通知メッセージ
  630.      * @param array $arrValuesBefore 更新前の受注情報
  631.      * @return integer $order_id 受注ID
  632.      *
  633.      *  エラー発生時は負数を返す。
  634.      */
  635.     function doRegister($order_id&$objPurchase&$objFormParam&$message&$arrValuesBefore{
  636.  
  637.         $objQuery =SC_Query_Ex::getSingletonInstance();
  638.         $arrValues $objFormParam->getDbArray();
  639.  
  640.         $where "order_id = ?";
  641.  
  642.         $objQuery->begin();
  643.  
  644.         // 支払い方法が変更されたら、支払い方法名称も更新
  645.         if ($arrValues['payment_id'!= $arrValuesBefore['payment_id']{
  646.             $arrValues['payment_method'$this->arrPayment[$arrValues['payment_id']];
  647.             $arrValuesBefore['payment_id'NULL;
  648.         }
  649.  
  650.         // 受注テーブルの更新
  651.         $order_id $objPurchase->registerOrder($order_id$arrValues);
  652.  
  653.         $arrDetail $objFormParam->getSwapArray(array("product_id",
  654.                                                        "product_class_id",
  655.                                                        "product_code",
  656.                                                        "product_name",
  657.                                                        'price''quantity',
  658.                                                        "point_rate",
  659.                                                        "classcategory_name1",
  660.                                                        "classcategory_name2"));
  661.  
  662.         // 変更しようとしている商品情報とDBに登録してある商品情報を比較することで、更新すべき数量を計算
  663.         $max count($arrDetail);
  664.         $k 0;
  665.         $arrStockData array();
  666.         for($i 0$i $max$i++{
  667.             if (!empty($arrDetail[$i]['product_id'])) {
  668.                 $arrPreDetail $objQuery->select('*'"dtb_order_detail""order_id = ? AND product_class_id = ?"array($order_id$arrDetail[$i]['product_class_id']));
  669.                 if (!empty($arrPreDetail&& $arrPreDetail[0]['quantity'!= $arrDetail[$i]['quantity']{
  670.                     // 数量が変更された商品
  671.                     $arrStockData[$k]['product_class_id'$arrDetail[$i]['product_class_id'];
  672.                     $arrStockData[$k]['quantity'$arrPreDetail[0]['quantity'$arrDetail[$i]['quantity'];
  673.                     ++$k;
  674.                 elseif (empty($arrPreDetail)) {
  675.                     // 新しく追加された商品 もしくは 違う商品に変更された商品
  676.                     $arrStockData[$k]['product_class_id'$arrDetail[$i]['product_class_id'];
  677.                     $arrStockData[$k]['quantity'= -$arrDetail[$i]['quantity'];
  678.                     ++$k;
  679.                 }
  680.                 $objQuery->delete("dtb_order_detail""order_id = ? AND product_class_id = ?"array($order_id$arrDetail[$i]['product_class_id']));
  681.             }
  682.         }
  683.  
  684.         // 上記の新しい商品のループでDELETEされなかった商品は、注文より削除された商品
  685.         $arrPreDetail $objQuery->select('*'"dtb_order_detail""order_id = ?"array($order_id));
  686.         foreach ($arrPreDetail AS $key=>$val{
  687.             $arrStockData[$k]['product_class_id'$val['product_class_id'];
  688.             $arrStockData[$k]['quantity'$val['quantity'];
  689.             ++$k;
  690.         }
  691.  
  692.         // 受注詳細データの更新
  693.         $objPurchase->registerOrderDetail($order_id$arrDetail);
  694.  
  695.         // 在庫数調整
  696.         if (ORDER_DELIV != $arrValues['status']
  697.             && ORDER_CANCEL != $arrValues['status']{
  698.             foreach ($arrStockData AS $stock{
  699.                 $objQuery->update('dtb_products_class'array(),
  700.                                   'product_class_id = ?',
  701.                                   array($stock['product_class_id']),
  702.                                   array('stock' => 'stock + ?'),
  703.                                   array($stock['quantity']));
  704.             }
  705.         }
  706.  
  707.         $arrAllShipping $objFormParam->getSwapArray($this->arrShippingKeys);
  708.         $arrAllShipmentItem $objFormParam->getSwapArray($this->arrShipmentItemKeys);
  709.  
  710.         $arrDelivTime $objPurchase->getDelivTime($objFormParam->getValue('deliv_id'));
  711.  
  712.         $arrShippingValues array();
  713.         foreach ($arrAllShipping as $shipping_index => $arrShipping{
  714.             $shipping_id $arrShipping['shipping_id'];
  715.             $arrShippingValues[$shipping_index$arrShipping;
  716.  
  717.             $arrShippingValues[$shipping_index]['shipping_date']
  718.                 = SC_Utils_Ex::sfGetTimestamp($arrShipping['shipping_date_year'],
  719.                                               $arrShipping['shipping_date_month'],
  720.                                               $arrShipping['shipping_date_day']);
  721.  
  722.             // 配送業者IDを取得
  723.             $arrShippingValues[$shipping_index]['deliv_id'$objFormParam->getValue('deliv_id');
  724.  
  725.             // お届け時間名称を取得
  726.             $arrShippingValues[$shipping_index]['shipping_time'$arrDelivTime[$arrShipping['time_id']];
  727.  
  728.             // 複数配送の場合は配送商品を登録
  729.             if (!SC_Utils_Ex::isBlank($arrAllShipmentItem)) {
  730.                 $arrShipmentValues array();
  731.  
  732.                 foreach ($arrAllShipmentItem[$shipping_indexas $key => $arrItem{
  733.                     $i 0;
  734.                     foreach ($arrItem as $item{
  735.                         $arrShipmentValues[$shipping_index][$i][str_replace('shipment_'''$key)$item;
  736.                         $i++;
  737.                     }
  738.                 }
  739.                 $objPurchase->registerShipmentItem($order_id$shipping_id,
  740.                                                    $arrShipmentValues[$shipping_index]);
  741.             }
  742.         }
  743.         $objPurchase->registerShipping($order_id$arrShippingValuesfalse);
  744.         $objQuery->commit();
  745.         return $order_id;
  746.     }
  747.  
  748.     /**
  749.      * 受注商品の追加/更新を行う.
  750.      *
  751.      * 小画面で選択した受注商品をフォームに反映させる.
  752.      *
  753.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  754.      * @return void 
  755.      */
  756.     function doRegisterProduct(&$objFormParam{
  757.         $product_class_id $objFormParam->getValue('add_product_class_id');
  758.         if (SC_Utils_Ex::isBlank($product_class_id)) {
  759.             $product_class_id $objFormParam->getValue('edit_product_class_id');
  760.             $changed_no $objFormParam->getValue('no');
  761.         }
  762.  
  763.         // 選択済みの商品であれば数量を1増やす
  764.         $exists false;
  765.         $arrExistsProductClassIds $objFormParam->getValue('product_class_id');
  766.         foreach (array_keys($arrExistsProductClassIdsas $key{
  767.             $exists_product_class_id $arrExistsProductClassIds[$key];
  768.             if ($exists_product_class_id == $product_class_id{
  769.                 $exists true;
  770.                 $exists_no $key;
  771.                 $arrExistsQuantity $objFormParam->getValue('quantity');
  772.                 $arrExistsQuantity[$key]++;
  773.                 $objFormParam->setValue('quantity'$arrExistsQuantity);
  774.             }
  775.         }
  776.  
  777.         // 新しく商品を追加した場合はフォームに登録
  778.         // 商品を変更した場合は、該当行を変更
  779.         if (!$exists{
  780.             $objProduct new SC_Product_Ex();
  781.             $arrProduct $objProduct->getDetailAndProductsClass($product_class_id);
  782.             $arrProduct['quantity'1;
  783.             $arrProduct['price'$arrProduct['price02'];
  784.             $arrProduct['product_name'$arrProduct['name'];
  785.  
  786.             $arrUpdateKeys array('product_id''product_class_id',
  787.                                    'product_type_id''point_rate',
  788.                                    'product_code''product_name',
  789.                                    'classcategory_name1''classcategory_name2',
  790.                                    'quantity''price');
  791.             foreach ($arrUpdateKeys as $key{
  792.                 $arrValues $objFormParam->getValue($key);
  793.                 if (isset($changed_no)) {
  794.                     $arrValues[$changed_no$arrProduct[$key];
  795.                 else {
  796.                     $added_no 0;
  797.                     if (is_array($arrExistsProductClassIds)) {
  798.                         $added_no count($arrExistsProductClassIds);
  799.                     }
  800.                     $arrValues[$added_no$arrProduct[$key];
  801.                 }
  802.                 $objFormParam->setValue($key$arrValues);
  803.             }
  804.         elseif (isset($changed_no&& $exists_no != $changed_no{
  805.             // 変更したが、選択済みの商品だった場合は、変更対象行を削除。
  806.             $this->doDeleteProduct($changed_no$objFormParam);
  807.         }
  808.     }
  809.  
  810.     /**
  811.      * 受注商品を削除する.
  812.      *
  813.      * @param integer $delete_no 削除する受注商品の項番
  814.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  815.      * @return void 
  816.      */
  817.     function doDeleteProduct($delete_no&$objFormParam{
  818.         $arrDeleteKeys array('product_id''product_class_id',
  819.                                'product_type_id''point_rate',
  820.                                'product_code''product_name',
  821.                                'classcategory_name1''classcategory_name2',
  822.                                'quantity''price');
  823.         foreach ($arrDeleteKeys as $key{
  824.             $arrNewValues array();
  825.             $arrValues $objFormParam->getValue($key);
  826.             foreach ($arrValues as $index => $val{
  827.                 if ($index != $delete_no{
  828.                     $arrNewValues[$val;
  829.                 }
  830.             }
  831.             $objFormParam->setValue($key$arrNewValues);
  832.         }
  833.     }
  834.  
  835.     /**
  836.      * お届け先を追加する.
  837.      *
  838.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  839.      * @return void 
  840.      */
  841.     function addShipping(&$objFormParam{
  842.         $objFormParam->setValue('shipping_quantity',
  843.                                 $objFormParam->getValue('shipping_quantity'1);
  844.         $arrShippingIds $objFormParam->getValue('shipping_id');
  845.         $arrShippingIds[max($arrShippingIds1;
  846.         $objFormParam->setValue('shipping_id'$arrShippingIds);
  847.     }
  848.  
  849.     /**
  850.      * 顧客情報をフォームに設定する.
  851.      *
  852.      * @param integer $customer_id 顧客ID
  853.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  854.      * @return void 
  855.      */
  856.     function setCustomerTo($customer_id&$objFormParam{
  857.         $arrCustomer SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id);
  858.         foreach ($arrCustomer as $key => $val{
  859.             $objFormParam->setValue('order_' $key$val);
  860.         }
  861.         $objFormParam->setValue('customer_id'$customer_id);
  862.         $objFormParam->setValue('customer_point'$arrCustomer['point']);
  863.     }
  864.  
  865.     /**
  866.      * アンカーキーを取得する.
  867.      *
  868.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  869.      * @return アンカーキーの文字列 
  870.      */
  871.     function getAnchorKey(&$objFormParam{
  872.         $ancor_key $objFormParam->getValue('anchor_key');
  873.         if (!SC_Utils_Ex::isBlank($ancor_key)) {
  874.             return "location.hash='#" htmlentities(urlencode($ancor_key)ENT_QUOTES"'";
  875.         }
  876.         return '';
  877.     }
  878. }
  879. ?>

Documentation generated on Fri, 24 Feb 2012 14:01:27 +0900 by Seasoft