source: branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php @ 20010

Revision 20010, 51.8 KB checked in by kotani, 11 years ago (diff)

#843(複数配送先の指定)

  • 管理画面>受注管理>新規受注登録 で、新規登録後続けて「編集」を行うとDBエラーが発生する不具合改修。
  • Property svn:eol-style set to LF
  • Property svn:keywords set to "Id Revision Date"
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2010 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
25require_once(CLASS_REALDIR . "pages/admin/LC_Page_Admin.php");
26
27/**
28 * 受注修正 のページクラス.
29 *
30 * @package Page
31 * @author LOCKON CO.,LTD.
32 * @version $Id$
33 */
34class LC_Page_Admin_Order_Edit extends LC_Page_Admin {
35
36    // {{{ properties
37
38    /** 表示モード */
39    var $disp_mode;
40
41    // }}}
42    // {{{ functions
43
44    /**
45     * Page を初期化する.
46     *
47     * @return void
48     */
49    function init() {
50        parent::init();
51        $this->tpl_mainpage = 'order/edit.tpl';
52        $this->tpl_subnavi = 'order/subnavi.tpl';
53        $this->tpl_mainno = 'order';
54        $this->tpl_subno = 'index';
55        $this->tpl_subtitle = '受注管理';
56        if (empty($_GET['order_id']) && empty($_POST['order_id'])) {
57            $this->tpl_subno = 'add';
58            $this->tpl_mode = 'add';
59            $this->tpl_subtitle = '新規受注入力';
60        }
61
62        $masterData = new SC_DB_MasterData_Ex();
63        $this->arrPref = $masterData->getMasterData('mtb_pref');
64        $this->arrORDERSTATUS = $masterData->getMasterData("mtb_order_status");
65        $this->arrDeviceType = $masterData->getMasterData('mtb_device_type');
66
67        $this->httpCacheControl('nocache');
68    }
69
70    /**
71     * Page のプロセス.
72     *
73     * @return void
74     */
75    function process() {
76        $this->action();
77        $this->sendResponse();
78    }
79
80    /**
81     * Page のアクション.
82     *
83     * @return void
84     */
85    function action() {
86        $objSess = new SC_Session();
87        $objDb = new SC_Helper_DB_Ex();
88        $objDate = new SC_Date(1970);
89        $objPurchase = new SC_Helper_Purchase_Ex();
90        $this->arrYearShippingDate = $objDate->getYear('', date('Y'), '');
91        $this->arrMonthShippingDate = $objDate->getMonth(true);
92        $this->arrDayShippingDate = $objDate->getDay(true);
93
94        // パラメータ管理クラス
95        $this->objFormParam = new SC_FormParam();
96        // パラメータ情報の初期化
97        $this->lfInitParam();
98
99        // 認証可否の判定
100        SC_Utils_Ex::sfIsSuccess($objSess);
101
102        // 検索パラメータの引き継ぎ
103        foreach ($_POST as $key => $val) {
104            if (ereg("^search_", $key)) {
105                $this->arrSearchHidden[$key] = $val;
106            }
107        }
108
109        // 表示モード判定
110        if(isset($_GET['order_id']) &&
111           SC_Utils_Ex::sfIsInt($_GET['order_id'])) {
112            $this->disp_mode = true;
113            $order_id = $_GET['order_id'];
114        } else {
115            $order_id = $_POST['order_id'];
116        }
117        $this->tpl_order_id = $order_id;
118
119        // DBから受注情報を読み込む
120        if (!SC_Utils_Ex::isBlank($order_id)) {
121            $this->lfGetOrderData($order_id);
122        }
123
124        switch($_POST['mode']) {
125        case 'pre_edit':
126        case 'order_id':
127            break;
128        case 'edit':
129        case 'add':
130            // POST情報で上書き
131            $this->lfInitShippingParam($this->arrShipping);
132            $this->objFormParam->setParam($_POST);
133
134            // 入力値の変換
135            $this->objFormParam->convParam();
136            $this->arrErr = $this->lfCheckError();
137
138            if(count($this->arrErr) == 0) {
139                if ($_POST['mode'] == 'add') {
140                    $order_id = $this->lfRegistNewData($objPurchase);
141
142                    $this->tpl_order_id = $order_id;
143                    $this->tpl_mode = 'edit';
144
145                    $arrData['order_id'] = $order_id;
146                    $this->objFormParam->setParam($arrData);
147
148                    $text = "'新規受注を登録しました。'";
149                } else {
150                    $this->lfRegistData($_POST['order_id'], $objPurchase);
151                    $text = "'受注履歴を編集しました。'";
152                }
153                // DBから受注情報を再読込
154                $this->lfGetOrderData($order_id);
155                $this->lfInitShippingParam($this->arrShipping);
156                $this->tpl_onload = "window.alert(".$text.");";
157            }
158            break;
159        // 再計算
160        case 'cheek':
161        //支払い方法の選択
162        case 'payment':
163            // POST情報で上書き
164            $this->lfInitShippingParam($this->arrShipping);
165            $this->objFormParam->setParam($_POST);
166            // 入力値の変換
167            $this->objFormParam->convParam();
168            $this->arrErr = $this->lfCheckError();
169            break;
170
171        /* 商品削除*/
172        case 'delete_product':
173            $delete_no = $_POST['delete_no'];
174            foreach ($_POST AS $key=>$val) {
175                if (is_array($val)) {
176                    foreach ($val AS $k=>$v) {
177                        if ($k != $delete_no) {
178                            $arrData[$key][] = $v;
179                        }
180                    }
181                } else {
182                    $arrData[$key] = $val;
183                }
184            }
185            // 情報上書き
186            $this->lfInitShippingParam($this->arrShipping);
187            $this->objFormParam->setParam($arrData);
188            // 入力値の変換
189            $this->objFormParam->convParam();
190            $this->arrErr = $this->lfCheckError();
191            break;
192        /* 商品追加ポップアップより商品選択後、商品情報取得*/
193        case 'select_product_detail':
194            // POST情報で上書き
195            $this->objFormParam->setParam($_POST);
196            if (!empty($_POST['add_product_class_id'])) {
197                $this->lfInsertProduct($_POST['add_product_class_id']);
198            } elseif (!empty($_POST['edit_product_class_id'])) {
199                $this->lfUpdateProduct($_POST['edit_product_class_id'], $_POST['no']);
200            }
201            $arrData = $_POST;
202            foreach ($this->arrForm AS $key=>$val) {
203                if (is_array($val)) {
204                    $arrData[$key] = $this->arrForm[$key]['value'];
205                } else {
206                    $arrData[$key] = $val;
207                }
208            }
209
210            // 情報上書き
211            $this->lfInitShippingParam($this->arrShipping);
212            $this->objFormParam->setParam($arrData);
213            // 入力値の変換
214            $this->objFormParam->convParam();
215            $this->arrErr = $this->lfCheckError();
216            break;
217        /* 顧客検索ポップアップより顧客指定後、顧客情報取得*/
218        case 'search_customer':
219            // POST情報で上書き
220            $this->lfInitShippingParam($this->arrShipping);
221            $this->objFormParam->setParam($_POST);
222
223            // 検索結果から顧客IDを指定された場合、顧客情報をフォームに代入する
224            $this->lfSetCustomerInfo($_POST['edit_customer_id']);
225
226            break;
227
228        // 複数配送設定表示
229        case 'multiple':
230            $this->lfInitShippingParam($this->arrShipping);
231            $this->objFormParam->setParam($_POST);
232            // 入力値の変換
233            $this->objFormParam->convParam();
234            $this->arrErr = $this->lfCheckError();
235            break;
236
237        // 複数配送設定を反映
238        case 'multiple_set_to':
239            $multipleSize = $_POST['multiple_size'];
240            $this->lfInitMultipleParam($multipleSize);
241            $this->objFormParam->setParam($_POST);
242            $this->lfInitShippingParam($this->arrShipping);
243            $this->setMultipleItemTo($multipleSize);
244            break;
245
246        // お届け先の追加
247        case 'append_shipping':
248            $this->lfInitShippingParam($this->arrShipping, true);
249            $this->objFormParam->setParam($_POST);
250            // 入力値の変換
251            $this->objFormParam->convParam();
252            break;
253
254        default:
255            // お届け先の初期表示
256            $this->lfInitShippingParam();
257            break;
258        }
259
260        // 支払い方法の取得
261        $this->arrPayment = $objDb->sfGetIDValueList("dtb_payment", "payment_id", "payment_method");
262
263        $this->arrForm = $this->objFormParam->getFormParamList();
264
265        // XXX 商品種別IDは0番目の配列を使用
266        $this->product_type_id = $this->arrForm['product_type_id']['value'][0];
267        $this->arrDelivTime = $objPurchase->getDelivTime($this->product_type_id);
268        $this->product_count = count($this->arrForm['quantity']['value']);
269
270        // アンカーを設定
271        if (isset($_POST['anchor_key']) && !empty($_POST['anchor_key'])) {
272            $anchor_hash = "location.hash='#" . $_POST['anchor_key'] . "'";
273        } else {
274            $anchor_hash = "";
275        }
276        $this->tpl_onload .= $anchor_hash;
277
278        $objSiteInfo = new SC_SiteInfo();
279        $this->arrInfo = $objSiteInfo->data;
280        // 表示モード判定
281        if(!$this->disp_mode) {
282            $this->setTemplate(MAIN_FRAME);
283        } else {
284            $this->setTemplate('order/disp.tpl');
285        }
286    }
287
288    /**
289     * デストラクタ.
290     *
291     * @return void
292     */
293    function destroy() {
294        parent::destroy();
295    }
296
297    /* パラメータ情報の初期化 */
298    function lfInitParam() {
299
300        // お客様情報
301        $this->objFormParam->addParam("顧客名1", "order_name01", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
302        $this->objFormParam->addParam("顧客名2", "order_name02", STEXT_LEN, "KVa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
303        $this->objFormParam->addParam("顧客名カナ1", "order_kana01", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
304        $this->objFormParam->addParam("顧客名カナ2", "order_kana02", STEXT_LEN, "KVCa", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
305        $this->objFormParam->addParam("メールアドレス", "order_email", MTEXT_LEN, "KVCa", array("NO_SPTAB", "EMAIL_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
306        $this->objFormParam->addParam("郵便番号1", "order_zip01", ZIP01_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
307        $this->objFormParam->addParam("郵便番号2", "order_zip02", ZIP02_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
308        $this->objFormParam->addParam("都道府県", "order_pref", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
309        $this->objFormParam->addParam("住所1", "order_addr01", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
310        $this->objFormParam->addParam("住所2", "order_addr02", MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
311        $this->objFormParam->addParam("電話番号1", "order_tel01", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
312        $this->objFormParam->addParam("電話番号2", "order_tel02", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
313        $this->objFormParam->addParam("電話番号3", "order_tel03", TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
314
315        // 受注商品情報
316        $this->objFormParam->addParam("値引き", "discount", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
317        $this->objFormParam->addParam("送料", "deliv_fee", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
318        $this->objFormParam->addParam("手数料", "charge", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
319
320        // ポイント機能ON時のみ
321        if (USE_POINT !== false) {
322            $this->objFormParam->addParam("利用ポイント", "use_point", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
323        }
324
325        $this->objFormParam->addParam("お支払い方法", "payment_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
326        $this->objFormParam->addParam("対応状況", "status", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
327        $this->objFormParam->addParam("お支払方法名称", "payment_method");
328
329        // 受注詳細情報
330        $this->objFormParam->addParam("商品種別ID", "product_type_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
331        $this->objFormParam->addParam("単価", "price", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
332        $this->objFormParam->addParam("数量", "quantity", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
333        $this->objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
334        $this->objFormParam->addParam("商品規格ID", "product_class_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
335        $this->objFormParam->addParam("ポイント付与率", "point_rate");
336        $this->objFormParam->addParam("商品コード", "product_code");
337        $this->objFormParam->addParam("商品名", "product_name");
338        $this->objFormParam->addParam("規格名1", "classcategory_name1");
339        $this->objFormParam->addParam("規格名2", "classcategory_name2");
340        $this->objFormParam->addParam("メモ", "note", MTEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
341        // DB読込用
342        $this->objFormParam->addParam("小計", "subtotal");
343        $this->objFormParam->addParam("合計", "total");
344        $this->objFormParam->addParam("支払い合計", "payment_total");
345        $this->objFormParam->addParam("加算ポイント", "add_point");
346        $this->objFormParam->addParam("お誕生日ポイント", "birth_point");
347        $this->objFormParam->addParam("消費税合計", "tax");
348        $this->objFormParam->addParam("最終保持ポイント", "total_point");
349        $this->objFormParam->addParam("顧客ID", "customer_id");
350        $this->objFormParam->addParam("現在のポイント", "point");
351        $this->objFormParam->addParam("注文番号", "order_id");
352        $this->objFormParam->addParam("受注日", "create_date");
353        $this->objFormParam->addParam("発送日", "commit_date");
354        $this->objFormParam->addParam("備考", "message");
355        $this->objFormParam->addParam("入金日", "payment_date");
356        $this->objFormParam->addParam("アクセス端末", "device_type_id");
357    }
358
359    /**
360     * お届け先用フォームの初期化
361     */
362    function lfInitShippingParam($arrShipping = array(), $add = false) {
363        if (empty($arrShipping) && !$add) {
364            $arrShipping[0]['shipping_id'] = 0;
365            $this->arrShippingIds[0] = 0;
366            $_POST['shipping_quantity'] = 1;
367        }
368
369        if ($add) {
370            $_POST['shipping_quantity'] = $_POST['shipping_quantity'] + 1;
371        }
372        for ($i = 0; $i < $_POST['shipping_quantity']; $i++) {
373            $arrShipping[$i]['shipping_id'] = $i;
374            $this->arrShippingIds[$i] = $i;
375        }
376
377        $this->objFormParam->addParam("配送数", "shipping_quantity", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
378        $this->objFormParam->setValue('shipping_quantity', $_POST['shipping_quantity']);
379
380        foreach ($arrShipping as $shipping) {
381            $this->objFormParam->addParam("配送ID", "shipping_id_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), 0);
382            $this->objFormParam->addParam("お名前1", "shipping_name01_" . $shipping['shipping_id'], STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
383            $this->objFormParam->addParam("お名前2", "shipping_name02_" . $shipping['shipping_id'], STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
384            $this->objFormParam->addParam("お名前(フリガナ・姓)", "shipping_kana01_" . $shipping['shipping_id'], STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
385            $this->objFormParam->addParam("お名前(フリガナ・名)", "shipping_kana02_" . $shipping['shipping_id'], STEXT_LEN, "KVCa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
386            $this->objFormParam->addParam("郵便番号1", "shipping_zip01_" . $shipping['shipping_id'], ZIP01_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
387            $this->objFormParam->addParam("郵便番号2", "shipping_zip02_" . $shipping['shipping_id'], ZIP02_LEN, "n", array("NUM_CHECK", "NUM_COUNT_CHECK"));
388            $this->objFormParam->addParam("都道府県", "shipping_pref_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
389            $this->objFormParam->addParam("住所1", "shipping_addr01_" . $shipping['shipping_id'], MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
390            $this->objFormParam->addParam("住所2", "shipping_addr02_" . $shipping['shipping_id'], MTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
391            $this->objFormParam->addParam("電話番号1", "shipping_tel01_" . $shipping['shipping_id'], TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
392            $this->objFormParam->addParam("電話番号2", "shipping_tel02_" . $shipping['shipping_id'], TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
393            $this->objFormParam->addParam("電話番号3", "shipping_tel03_" . $shipping['shipping_id'], TEL_ITEM_LEN, "n", array("MAX_LENGTH_CHECK" ,"NUM_CHECK"));
394            $this->objFormParam->addParam("お届け時間ID", "time_id_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
395            $this->objFormParam->addParam("お届け時間", "shipping_time_" . $shipping['shipping_id']);
396            $this->objFormParam->addParam("お届け日(年)", "shipping_date_year_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
397            $this->objFormParam->addParam("お届け日(月)", "shipping_date_month_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
398            $this->objFormParam->addParam("お届け日(日)", "shipping_date_day_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
399            $this->objFormParam->addParam("お届け日", "shipping_date_" . $shipping['shipping_id'], STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
400            $this->objFormParam->addParam("配送商品規格数", "shipping_product_quantity_" . $shipping['shipping_id'], INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
401            foreach (array_keys($shipping['shipment_item']) as $productClassId) {
402                $this->objFormParam->addParam("商品規格ID", "product_class_id_" . $shipping['shipping_id'] . '_' . $productClassId, INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
403                $this->objFormParam->addParam("商品コード", "product_code_" . $shipping['shipping_id'] . '_' . $productClassId, $item['product_code']);
404                $this->objFormParam->addParam("商品名", "product_name_" . $shipping['shipping_id'] . '_' . $productClassId);
405                $this->objFormParam->addParam("規格名1", "classcategory_name1_" . $shipping['shipping_id'] . '_' . $productClassId);
406                $this->objFormParam->addParam("規格名2", "classcategory_name2_" . $shipping['shipping_id'] . '_' . $productClassId);
407                $this->objFormParam->addParam("単価", "price_" . $shipping['shipping_id'] . '_' . $productClassId, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
408                $this->objFormParam->addParam("数量", "quantity_" . $shipping['shipping_id'] . '_' . $productClassId, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), '0');
409            }
410        }
411    }
412
413    /**
414     * 複数配送用フォームの初期化
415     */
416    function lfInitMultipleParam($size) {
417        for ($i = 0; $i < $size; $i++) {
418            $this->objFormParam->addParam("商品規格ID", "multiple_product_class_id" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
419            $this->objFormParam->addParam("商品コード", "multiple_product_code" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
420            $this->objFormParam->addParam("商品名", "multiple_product_name" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
421            $this->objFormParam->addParam("規格1", "multiple_classcategory_name1" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
422            $this->objFormParam->addParam("規格2", "multiple_classcategory_name2" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
423            $this->objFormParam->addParam("単価", "multiple_price" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
424            $this->objFormParam->addParam("数量", "multiple_quantity" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), 1);
425            $this->objFormParam->addParam("配送先住所", "multiple_shipping" . $i, INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
426        }
427    }
428
429
430    function setMultipleItemTo($size) {
431        $arrShipmentItem = array();
432        for ($i = 0; $i < $size; $i++) {
433            $shippingId = $this->objFormParam->getValue('multiple_shipping' . $i);
434            $productClassId = $this->objFormParam->getValue('multiple_product_class_id' . $i);
435
436            $name = $this->objFormParam->getValue('multiple_product_name' . $i);
437            $code = $this->objFormParam->getValue('multiple_product_code' . $i);
438            $class1 = $this->objFormParam->getValue('multiple_classcategory_name1' . $i);
439            $class2 = $this->objFormParam->getValue('multiple_classcategory_name2' . $i);
440            $price = $this->objFormParam->getValue('multiple_price' . $i);
441            $quantity = $this->objFormParam->getValue('multiple_quantity' . $i);
442
443            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['shipping_id'] = $shippingId;
444            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['product_class_id'] = $productClassId;
445            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['product_name'] = $name;
446            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['product_code'] = $code;
447            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['classcategory_name1'] = $class1;
448            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['classcategory_name2'] = $class2;
449            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['price'] = $price;
450            $this->arrShipping[$shippingId]['shipment_item'][$productClassId]['quantity'] += $quantity;
451        }
452
453        $arrQuantity = array();
454        $this->arrShippingIds = array();
455        $this->arrProductClassIds = array();
456        foreach ($this->arrShipping as $shippingId => $items) {
457
458            $this->objFormParam->setValue('shipping_product_quantity' . '_' . $shippingId, count($items['shipment_item']));
459
460            $this->arrShippingIds[] = $shippingId;
461            $this->arrProductClassIds[] = array_keys($items['shipment_item']);
462
463            foreach ($items['shipment_item'] as $productClassId => $item) {
464                $arrQuantity[$productClassId] += $item['quantity'];
465                foreach ($item as $itemKey => $itemVal) {
466                    $arrParam[$itemKey . '_' . $shippingId . '_' . $productClassId] = $itemVal;
467                    $this->objFormParam->setValue($itemKey . '_' . $shippingId . '_' . $productClassId, $itemVal);
468                    $this->arrForm[$itemKey . '_' . $shippingId . '_' . $productClassId]['value'] = $itemVal;
469                }
470            }
471        }
472
473        // 受注商品の数量を変更
474        $dest = array();
475        foreach ($arrQuantity as $productClassId => $quantity) {
476            foreach ($this->arrForm['product_class_id'] as $n => $orderProductClassId) {
477                if ($productClassId == $orderProductClassId) {
478                    $dest['quantity'][$n] = $quantity;
479                }
480            }
481        }
482
483        // $this->arrShipping の内容で, 再度パラメータを初期化する
484        $this->lfInitShippingParam($this->arrShipping);
485        $this->objFormParam->setParam($arrParam);
486        $this->objFormParam->setParam($dest);
487    }
488
489    function lfGetOrderData($order_id) {
490        if(SC_Utils_Ex::sfIsInt($order_id)) {
491            // DBから受注情報を読み込む
492            $objQuery = new SC_Query();
493            $objDb = new SC_Helper_DB_Ex();
494            $where = "order_id = ?";
495            $arrRet = $objQuery->select("*", "dtb_order", $where, array($order_id));
496            $this->objFormParam->setParam($arrRet[0]);
497            list($db_point, $rollback_point) = $objDb->sfGetRollbackPoint($order_id, $arrRet[0]['use_point'], $arrRet[0]['add_point']);
498            $this->objFormParam->setValue('total_point', $db_point);
499            $this->objFormParam->setValue('point', $rollback_point);
500            $this->arrForm = $arrRet[0];
501
502            // 受注詳細データの取得
503            $arrRet = $this->lfGetOrderDetail($order_id);
504            $arrRet = SC_Utils_Ex::sfSwapArray($arrRet);
505            $this->arrForm = array_merge($this->arrForm, $arrRet);
506            $this->objFormParam->setParam($arrRet);
507
508            $this->arrShipping = $this->lfGetShippingData($order_id);
509            $this->lfInitShippingParam($this->arrShipping);
510
511            $this->objFormParam->setValue('shipping_quantity', count($this->arrShipping));
512
513            // 配送情報の処理
514            foreach ($this->arrShipping as $shipping) {
515
516                $this->arrShippingIds[] = $shipping['shipping_id'];
517                $this->arrProductClassIds[] = array_keys($shipping['shipment_item']);
518
519                // お届け日の取得
520                if (!SC_Utils_Ex::isBlank($shipping["shipping_date"])) {
521                    $ts = strtotime($shipping["shipping_date"]);
522                    $this->objFormParam->setValue('shipping_date_year_' . $shipping['shipping_id'], date("Y", $ts));
523                    $this->objFormParam->setValue('shipping_date_month_' . $shipping['shipping_id'], date("n", $ts));
524                    $this->objFormParam->setValue('shipping_date_day_' . $shipping['shipping_id'], date("j", $ts));
525                }
526
527                // 配送内容の処理
528                foreach ($shipping as $shippingKey => $shippingVal) {
529
530                    $this->objFormParam->setValue($shippingKey . '_' . $shipping['shipping_id'], $shippingVal);
531
532                    $this->objFormParam->setValue('shipping_product_quantity' . '_' . $shipping['shipping_id'], count($shipping['shipment_item']));
533
534                    // 配送商品の処理
535                    foreach ($shipping['shipment_item'] as $productClassId => $item) {
536                        foreach ($item as $itemKey => $itemVal) {
537                            $this->objFormParam->setValue($itemKey . '_' . $shipping['shipping_id'] . '_' . $productClassId, $itemVal);
538                            $this->arrForm[$itemKey . '_' . $shipping['shipping_id'] . '_' . $productClassId]['value'] = $itemVal;
539                        }
540                    }
541                }
542            }
543
544            // その他支払い情報を表示
545            if($this->arrForm["memo02"] != "") $this->arrForm["payment_info"] = unserialize($this->arrForm["memo02"]);
546            if($this->arrForm["memo01"] == PAYMENT_CREDIT_ID){
547                $this->arrForm["payment_type"] = "クレジット決済";
548            }elseif($this->arrForm["memo01"] == PAYMENT_CONVENIENCE_ID){
549                $this->arrForm["payment_type"] = "コンビニ決済";
550            }else{
551                $this->arrForm["payment_type"] = "お支払い";
552            }
553            // 受注データを表示用配列に代入(各EC-CUBEバージョンと決済モジュールとのデータ連携保全のため)
554            $this->arrDisp = $this->arrForm;
555        } else {
556            $this->lfInitShippingParam($this->arrShipping);
557            $this->objFormParam->setParam($_POST);
558        }
559    }
560
561    // 受注詳細データの取得
562    function lfGetOrderDetail($order_id) {
563        $objQuery = new SC_Query();
564        $col = "T1.product_id, T1.product_class_id, T1.product_name, "
565            . "T1.product_code, T1.classcategory_name1, T1.classcategory_name2, "
566            . "T1.price, T1.quantity, T1.point_rate, T2.product_type_id";
567        $from = <<< __EOS__
568                 dtb_order_detail T1
569            JOIN dtb_products_class T2
570               ON T1.product_class_id = T2.product_class_id
571__EOS__;
572        $arrRet = $objQuery->select($col, $from,
573                                    "order_id = ?", array($order_id));
574        return $arrRet;
575    }
576
577    /**
578     * 配送情報の取得.
579     * TODO リファクタリング
580     */
581    function lfGetShippingData($orderId) {
582        $objQuery =& SC_Query::getSingletonInstance();
583        $objProduct = new SC_Product();
584        $objQuery->setOrder('shipping_id');
585        $arrRet = $objQuery->select("*", "dtb_shipping", "order_id = ?", array($orderId));
586        foreach (array_keys($arrRet) as $key) {
587            $objQuery->setOrder('shipping_id');
588            $arrItems = $objQuery->select("*", "dtb_shipment_item", "order_id = ? AND shipping_id = ?",
589                                          array($orderId, $arrRet[$key]['shipping_id']));
590            foreach ($arrItems as $itemKey => $arrDetail) {
591                foreach ($arrDetail as $detailKey => $detailVal) {
592                    $arrRet[$key]['shipment_item'][$arrDetail['product_class_id']][$detailKey] = $detailVal;
593                }
594
595                $arrRet[$key]['shipment_item'][$arrDetail['product_class_id']]['productsClass'] =& $objProduct->getDetailAndProductsClass($arrDetail['product_class_id']);
596            }
597        }
598        return $arrRet;
599    }
600
601    /* 入力内容のチェック */
602    function lfCheckError() {
603        // 入力データを渡す。
604        $arrRet =  $this->objFormParam->getHashArray();
605        $objErr = new SC_CheckError($arrRet);
606        $objErr->arrErr = $this->objFormParam->checkError();
607
608        if (count($objErr->arrErr) >= 1) {
609            return $objErr->arrErr;
610        }
611
612        return $this->lfCheek();
613    }
614
615    /* 計算処理 */
616    function lfCheek() {
617        $objDb = new SC_Helper_DB_Ex();
618        $arrVal = $this->objFormParam->getHashArray();
619        $arrErr = array();
620
621        // 商品の種類数
622        $max = count($arrVal['quantity']);
623        $subtotal = 0;
624        $totalpoint = 0;
625        $totaltax = 0;
626        for($i = 0; $i < $max; $i++) {
627            // 小計の計算
628            $subtotal += SC_Helper_DB_Ex::sfCalcIncTax($arrVal['price'][$i]) * $arrVal['quantity'][$i];
629            // 小計の計算
630            $totaltax += SC_Helper_DB_Ex::sfTax($arrVal['price'][$i]) * $arrVal['quantity'][$i];
631            // 加算ポイントの計算
632            $totalpoint += SC_Utils_Ex::sfPrePoint($arrVal['price'][$i], $arrVal['point_rate'][$i]) * $arrVal['quantity'][$i];
633        }
634
635        // 消費税
636        $arrVal['tax'] = $totaltax;
637        // 小計
638        $arrVal['subtotal'] = $subtotal;
639        // 合計
640        $arrVal['total'] = $subtotal - $arrVal['discount'] + $arrVal['deliv_fee'] + $arrVal['charge'];
641        // お支払い合計
642        $arrVal['payment_total'] = $arrVal['total'] - ($arrVal['use_point'] * POINT_VALUE);
643
644        // 加算ポイント
645        $arrVal['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($totalpoint, $arrVal['use_point']);
646       
647        // 最終保持ポイント
648        $arrVal['total_point'] = $this->objFormParam->getValue('point') - $arrVal['use_point'] + $arrVal['add_point'];
649       
650        if ($arrVal['total'] < 0) {
651            $arrErr['total'] = '合計額がマイナス表示にならないように調整して下さい。<br />';
652        }
653
654        if ($arrVal['payment_total'] < 0) {
655            $arrErr['payment_total'] = 'お支払い合計額がマイナス表示にならないように調整して下さい。<br />';
656        }
657        //新規追加受注のみ
658        if ($_POST['mode'] == "add") {
659            if ($arrVal['total_point'] < 0) {
660                $arrErr['use_point'] = '最終保持ポイントがマイナス表示にならないように調整して下さい。<br />';
661            }
662        }
663
664        $this->objFormParam->setParam($arrVal);
665        return $arrErr;
666    }
667
668    /**
669     * DB更新処理
670     *
671     * TODO リファクタリング
672     *
673     * @param integer $order_id 注文番号
674     * @return void
675     */
676    function lfRegistData($order_id, &$objPurchase) {
677        $objQuery = new SC_Query();
678
679        $sqlval = $this->lfMakeSqlvalForDtbOrder();
680
681        $where = "order_id = ?";
682
683        $objQuery->begin();
684
685        // 受注.対応状況の更新
686        SC_Helper_DB_Ex::sfUpdateOrderStatus($order_id, $sqlval['status'], $sqlval['add_point'], $sqlval['use_point']);
687        unset($sqlval['status']);
688        unset($sqlval['add_point']);
689        unset($sqlval['use_point']);
690
691        // 受注テーブルの更新
692        $this->registerOrder($sqlval, $order_id);
693
694        // 受注テーブルの名称列を更新
695        //SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id);
696
697        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_class_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_name1", "classcategory_name2"));
698
699
700        // 変更しようとしている商品情報とDBに登録してある商品情報を比較することで、更新すべき数量を計算
701        $max = count($arrDetail);
702        $k = 0;
703        $arrStockData = array();
704        for($i = 0; $i < $max; $i++) {
705            if (!empty($arrDetail[$i]['product_id'])) {
706                $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ? AND product_class_id = ?", array($order_id, $arrDetail[$i]['product_class_id']));
707                if (!empty($arrPreDetail) && $arrPreDetail[0]['quantity'] != $arrDetail[$i]['quantity']) {
708                    // 数量が変更された商品
709                    $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
710                    $arrStockData[$k]['quantity'] = $arrPreDetail[0]['quantity'] - $arrDetail[$i]['quantity'];
711                    ++$k;
712                } elseif (empty($arrPreDetail)) {
713                    // 新しく追加された商品 もしくは 違う商品に変更された商品
714                    $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
715                    $arrStockData[$k]['quantity'] = -$arrDetail[$i]['quantity'];
716                    ++$k;
717                }
718                $objQuery->delete("dtb_order_detail", "order_id = ? AND product_class_id = ?", array($order_id, $arrDetail[$i]['product_class_id']));
719            }
720        }
721
722        // 上記の新しい商品のループでDELETEされなかった商品は、注文より削除された商品
723        $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ?", array($order_id));
724        foreach ($arrPreDetail AS $key=>$val) {
725            $arrStockData[$k]['product_class_id'] = $val['product_class_id'];
726            $arrStockData[$k]['quantity'] = $val['quantity'];
727            ++$k;
728        }
729
730        // 受注詳細データの初期化
731        $objQuery->delete("dtb_order_detail", $where, array($order_id));
732
733        // 受注詳細データの更新
734        $max = count($arrDetail);
735        for ($i = 0; $i < $max; $i++) {
736            $sqlval = array();
737            $sqlval['order_id'] = $order_id;
738            $sqlval['product_id']  = $arrDetail[$i]['product_id'];
739            $sqlval['product_class_id']  = $arrDetail[$i]['product_class_id'];
740            $sqlval['product_code']  = $arrDetail[$i]['product_code'];
741            $sqlval['product_name']  = $arrDetail[$i]['product_name'];
742            $sqlval['price']  = $arrDetail[$i]['price'];
743            $sqlval['quantity']  = $arrDetail[$i]['quantity'];
744            $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
745            $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
746            $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
747            $objQuery->insert("dtb_order_detail", $sqlval);
748        }
749
750        // 在庫数調整
751        $status = $sqlval['status'];
752        if (ORDER_DELIV != $status && ORDER_CANCEL != $status) {
753            $stock_sql = "UPDATE dtb_products_class SET stock = stock + ? WHERE product_class_id = ?";
754            foreach ($arrStockData AS $key=>$val) {
755                $stock_sqlval = array();
756                $stock_sqlval[] = $val['quantity'];
757                $stock_sqlval[] = $val['product_class_id'];
758
759                $objQuery->query($stock_sql, $stock_sqlval);
760            }
761        }
762
763        // 配送情報の初期化
764        // FIXME UPDATE/INSERT にする
765        $objQuery->delete('dtb_shipping', "order_id = ?", array($order_id));
766        $objQuery->delete('dtb_shipment_item', "order_id = ?", array($order_id));
767
768        //        $arrParams = $this->objFormParam->getHashArray();
769        $arrParams = $_POST;
770        // 配送ID の配列を取得
771        $shippingIds = array();
772        foreach (array_keys($arrParams) as $key) {
773            if (preg_match('/^shipping_id_/', $key)) {
774                $shippingIds[] = $arrParams[$key];
775            }
776        }
777
778        $cols = $objQuery->listTableFields('dtb_shipping');
779
780        foreach ($shippingIds as $shipping_id) {
781
782            $arrParams['shipping_date_' .  $shipping_id] = SC_Utils_Ex::sfGetTimestamp($arrParams['shipping_date_year_' . $shipping_id],
783                                                                                       $arrParams['shipping_date_month_' . $shipping_id],
784                                                                                       $arrParams['shipping_date_day_' . $shipping_id]);
785            $dest = array();
786            foreach ($arrParams as $key => $val) {
787                $key = preg_replace('/_' . $shipping_id . '$/', '', $key);
788                if (in_array($key, $cols)) {
789                    $dest[$key] = $val;
790                }
791            }
792
793            if (SC_Utils::isBlank($dest['deliv_id'])) {
794                // XXX 商品種別IDは0番目の配列を使用
795                $product_type_id = $this->objFormParam->getValue('product_type_id');
796                $dest['deliv_id'] = $objPurchase->getDeliv($product_type_id[0]);
797            }
798
799            $dest['shipping_id'] = $shipping_id;
800            $dest['order_id'] = $order_id;
801            $dest['create_date'] = 'Now()';
802            $dest['update_date'] = 'Now()';
803            $objQuery->insert('dtb_shipping', $dest);
804
805            // 商品規格ID の配列を取得
806            $productClassIds = array();
807            foreach (array_keys($arrParams) as $key) {
808                if (preg_match('/^product_class_id_' . $shipping_id . '_/', $key)) {
809                    $productClassIds[] = $arrParams[$key];
810                }
811            }
812
813            foreach ($productClassIds as $product_class_id) {
814                $item['shipping_id'] = $shipping_id;
815                $item['order_id'] = $order_id;
816                $item['product_class_id'] = $product_class_id;
817                $item['product_name'] = $arrParams['product_name_' . $shipping_id . '_' . $product_class_id];
818                $item['product_code'] = $arrParams['product_code_' . $shipping_id . '_' . $product_class_id];
819                $item['classcategory_name1'] = $arrParams['classcategory_name1_' . $shipping_id . '_' . $product_class_id];
820                $item['classcategory_name2'] = $arrParams['classcategory_name2_' . $shipping_id . '_' . $product_class_id];
821                $item['price'] = $arrParams['price_' . $shipping_id . '_' . $product_class_id];
822                $item['quantity'] = $arrParams['quantity_' . $shipping_id . '_' . $product_class_id];
823                $objQuery->insert("dtb_shipment_item", $item);
824            }
825        }
826        $objQuery->commit();
827    }
828
829    /**
830     * DB登録処理
831     *
832     * @return integer 注文番号
833     */
834    function lfRegistNewData(&$objPurchase) {
835        $objQuery = new SC_Query();
836
837        $sqlval = $this->lfMakeSqlvalForDtbOrder();
838
839        // ポイントは別登録
840        $addPoint = $sqlval['add_point'];
841        $usePoint = $sqlval['use_point'];
842        $sqlval['add_point'] = 0;
843        $sqlval['use_point'] = 0;
844
845        // customer_id
846        if ($sqlval["customer_id"] == "") {
847            $sqlval['customer_id'] = '0';
848        }
849
850        $sqlval['create_date'] = 'Now()';       // 受注日
851
852        $objQuery->begin();
853
854        // 受注テーブルの登録
855        $order_id = $objQuery->nextVal('dtb_order_order_id');
856        $sqlval['order_id'] = $order_id;
857        $this->registerOrder($sqlval, $order_id);
858
859        // 受注.対応状況の更新
860        SC_Helper_DB_Ex::sfUpdateOrderStatus($order_id, null, $addPoint, $usePoint);
861
862        // 受注テーブルの名称列を更新
863        //SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id);
864
865        // 受注詳細データの更新
866        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_class_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_name1", "classcategory_name2"));
867        $objQuery->delete("dtb_order_detail", 'order_id = ?', array($order_id));
868
869        $max = count($arrDetail);
870        for ($i = 0; $i < $max; $i++) {
871            $sqlval = array();
872            $sqlval['order_id'] = $order_id;
873            $sqlval['product_id']  = $arrDetail[$i]['product_id'];
874            $sqlval['product_class_id']  = $arrDetail[$i]['product_class_id'];
875            $sqlval['product_code']  = $arrDetail[$i]['product_code'];
876            $sqlval['product_name']  = $arrDetail[$i]['product_name'];
877            $sqlval['price']  = $arrDetail[$i]['price'];
878            $sqlval['quantity']  = $arrDetail[$i]['quantity'];
879            $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
880            $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
881            $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
882
883            $objQuery->insert("dtb_order_detail", $sqlval);
884
885
886            // 在庫数減少処理
887            // 現在の実在庫数取得
888            $pre_stock = $objQuery->getOne("SELECT stock FROM dtb_products_class WHERE product_class_id = ?", array($arrDetail[$i]['product_class_id']));
889
890            $stock_sqlval = array();
891            $stock_sqlval['stock'] = intval($pre_stock - $arrDetail[$i]['quantity']);
892            if ($stock_sqlval['stock'] === 0) {
893                $stock_sqlval['stock'] = '0';
894            }
895
896            $st_params = array();
897            $st_params[] = $arrDetail[$i]['product_class_id'];
898
899            $objQuery->update("dtb_products_class", $stock_sqlval, 'product_class_id = ?', $st_params);
900        }
901
902        $arrParams = $this->objFormParam->getHashArray();
903        // 配送ID の配列を取得
904        $shippingIds = array();
905        foreach (array_keys($arrParams) as $key) {
906            if (preg_match('/^shipping_id_/', $key)) {
907                $shippingIds[] = $arrParams[$key];
908            }
909        }
910
911        $cols = $objQuery->listTableFields('dtb_shipping');
912        foreach ($shippingIds as $shipping_id) {
913
914            $arrParams['shipping_date_' .  $shipping_id] = SC_Utils_Ex::sfGetTimestamp($arrParams['shipping_date_year_' . $shipping_id],
915                                                                                       $arrParams['shipping_date_month_' . $shipping_id],
916                                                                                       $arrParams['shipping_date_day_' . $shipping_id]);
917            $dest = array();
918            foreach ($arrParams as $key => $val) {
919                $key = preg_replace('/_' . $shipping_id . '$/', '', $key);
920                if (in_array($key, $cols)) {
921                    $dest[$key] = $val;
922                }
923            }
924            if (SC_Utils::isBlank($dest['deliv_id'])) {
925                // XXX 商品種別IDは0番目の配列を使用
926                $product_type_id = $this->objFormParam->getValue('product_type_id');
927                $dest['deliv_id'] = $objPurchase->getDeliv($product_type_id[0]);
928            }
929
930            $dest['shipping_id'] = $shipping_id;
931            $dest['order_id'] = $order_id;
932            $dest['create_date'] = 'Now()';
933            $dest['update_date'] = 'Now()';
934            $objQuery->insert('dtb_shipping', $dest);
935
936            // 商品規格ID の配列を取得
937            $productClassIds = array();
938            foreach (array_keys($arrParams) as $key) {
939                if (preg_match('/^product_class_id_' . $shipping_id . '_/', $key)) {
940                    $productClassIds[] = $arrParams[$key];
941                }
942            }
943
944            foreach ($productClassIds as $product_class_id) {
945                $item['shipping_id'] = $shipping_id;
946                $item['order_id'] = $order_id;
947                $item['product_class_id'] = $product_class_id;
948                $item['product_name'] = $arrParams['product_name_' . $shipping_id . '_' . $product_class_id];
949                $item['product_code'] = $arrParams['product_code_' . $shipping_id . '_' . $product_class_id];
950                $item['classcategory_name1'] = $arrParams['classcategory_name1_' . $shipping_id . '_' . $product_class_id];
951                $item['classcategory_name2'] = $arrParams['classcategory_name2_' . $shipping_id . '_' . $product_class_id];
952                $item['price'] = $arrParams['price_' . $shipping_id . '_' . $product_class_id];
953                $item['quantity'] = $arrParams['quantity_' . $shipping_id . '_' . $product_class_id];
954                $objQuery->insert("dtb_shipment_item", $item);
955            }
956        }
957
958        $objQuery->commit();
959
960        return $order_id;
961    }
962
963    /**
964     * 受注を登録する
965     */
966    function registerOrder($sqlval, $order_id) {
967        $table = 'dtb_order';
968        $objQuery = SC_Query::getSingletonInstance();
969        $cols = $objQuery->listTableFields($table);
970        $dest = array();
971        foreach ($sqlval as $key => $val) {
972            if (in_array($key, $cols)) {
973                $dest[$key] = $val;
974            }
975        }
976
977        $exists = $objQuery->count("dtb_order", "order_id = ?", array($order_id));
978        if ($exists > 0) {
979            $objQuery->update($table, $dest, "order_id = ?", array($order_id));
980        } else {
981            $dest['order_id'] = $order_id;
982            $result = $objQuery->insert($table, $dest);
983        }
984    }
985
986    function lfInsertProduct($product_class_id) {
987        $objProduct = new SC_Product();
988        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id));
989        $this->arrForm = $this->objFormParam->getFormParamList();
990        $existes = false;
991        $existes_key = NULL;
992        // 既に同じ商品がないか、確認する
993        if (!empty($this->arrForm['product_class_id']['value'])) {
994            foreach ($this->arrForm['product_class_id']['value'] AS $key=>$val) {
995                // 既に同じ商品がある場合
996                if ($val == $product_class_id) {
997                    $existes = true;
998                    $existes_key = $key;
999                }
1000            }
1001        }
1002
1003        if ($existes) {
1004            // 既に同じ商品がある場合
1005            ++$this->arrForm['quantity']['value'][$existes_key];
1006        } else {
1007            // 既に同じ商品がない場合
1008            $this->lfSetProductData($arrProduct);
1009        }
1010    }
1011
1012    function lfUpdateProduct($product_class_id, $no) {
1013        $objProduct = new SC_Product();
1014        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id));
1015        $this->arrForm = $this->objFormParam->getFormParamList();
1016        $this->lfSetProductData($arrProduct, $no);
1017    }
1018
1019    function lfSetProductData($arrProduct, $no = null) {
1020        foreach ($arrProduct AS $key=>$val) {
1021            if (!is_array($this->arrForm[$key]['value'])) {
1022                unset($this->arrForm[$key]['value']);
1023            }
1024            if ($no === null) {
1025                $this->arrForm[$key]['value'][] = $val;
1026            } else {
1027                $this->arrForm[$key]['value'][$no] = $val;
1028            }
1029        }
1030    }
1031
1032    function lfGetProductsClass($productsClass) {
1033        $arrProduct['price'] = $productsClass['price02'];
1034        $arrProduct['quantity'] = 1;
1035        $arrProduct['product_id'] = $productsClass['product_id'];
1036        $arrProduct['product_class_id'] = $productsClass['product_class_id'];
1037        $arrProduct['product_type_id'] = $productsClass['product_type_id'];
1038        $arrProduct['point_rate'] = $productsClass['point_rate'];
1039        $arrProduct['product_code'] = $productsClass['product_code'];
1040        $arrProduct['product_name'] = $productsClass['name'];
1041        $arrProduct['classcategory_name1'] = $productsClass['classcategory_name1'];
1042        $arrProduct['classcategory_name2'] = $productsClass['classcategory_name2'];
1043        return $arrProduct;
1044    }
1045
1046
1047    /**
1048     * 検索結果から顧客IDを指定された場合、顧客情報をフォームに代入する
1049     * @param int $edit_customer_id 顧客ID
1050     */
1051    function lfSetCustomerInfo($edit_customer_id = ""){
1052        // 顧客IDが指定されている場合のみ、処理を実行する
1053        if( $edit_customer_id === "" ) return ;
1054
1055        // 検索で選択された顧客IDが入力されている場合
1056        if( is_null($edit_customer_id) === false && 0 < strlen($edit_customer_id) && SC_Utils_Ex::sfIsInt($edit_customer_id) ){
1057            $objQuery = new SC_Query();
1058
1059            // 顧客情報を取得する
1060            $arrCustomerInfo = $objQuery->select('*', 'dtb_customer', 'customer_id = ? AND del_flg = 0', array($edit_customer_id));
1061
1062            // 顧客情報を取得する事が出来たら、テンプレートに値を渡す
1063            if( 0 < count($arrCustomerInfo) && is_array($arrCustomerInfo) === true){
1064                // カラム名にorder_を付ける(テンプレート側でorder_がついている為
1065                foreach($arrCustomerInfo[0] as $index=>$customer_info){
1066                    // customer_idにはorder_を付けないようにする
1067                    $order_index = ($index == 'customer_id') ? $index : 'order_'.$index;
1068                    $arrCustomer[$order_index] = $customer_info;
1069                }
1070            }
1071
1072            // hiddenに渡す
1073            $this->edit_customer_id = $edit_customer_id;
1074
1075            // 受注日に現在の時刻を取得し、表示させる
1076            $create_date = $objQuery->getAll('SELECT now() as create_date;');
1077            $arrCustomer['create_date'] = $create_date[0]['create_date'];
1078
1079            // 情報上書き
1080            $this->objFormParam->setParam($arrCustomer);
1081            // 入力値の変換
1082            $this->objFormParam->convParam();
1083        }
1084    }
1085
1086    /**
1087     * 受注テーブルの登録・更新用データの共通部分を作成する
1088     *
1089     * @return array
1090     */
1091    function lfMakeSqlvalForDtbOrder() {
1092
1093        // 入力データを取得する
1094        $sqlval = $this->objFormParam->getHashArray();
1095        foreach ($sqlval as $key => $val) {
1096            // 配列は登録しない
1097            if (is_array($val)) {
1098                unset($sqlval[$key]);
1099            }
1100        }
1101
1102        // 受注テーブルに書き込まない列を除去
1103        unset($sqlval['total_point']);
1104        unset($sqlval['point']);
1105        unset($sqlval['commit_date']);
1106
1107        // 更新日時
1108        $sqlval['update_date'] = 'Now()';
1109
1110        return $sqlval;
1111    }
1112}
1113?>
Note: See TracBrowser for help on using the repository browser.