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

Revision 20021, 51.7 KB checked in by nanasess, 11 years ago (diff)

#792(ダウンロード販売機能)

  • 受注管理画面で受注ステータスを更新した場合に, 入金日が反映されなかったのを修正
  • 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'], $sqlval);
687
688        // 受注テーブルの更新
689        $this->registerOrder($sqlval, $order_id);
690
691        // 受注テーブルの名称列を更新
692        //SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id);
693
694        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_class_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_name1", "classcategory_name2"));
695
696
697        // 変更しようとしている商品情報とDBに登録してある商品情報を比較することで、更新すべき数量を計算
698        $max = count($arrDetail);
699        $k = 0;
700        $arrStockData = array();
701        for($i = 0; $i < $max; $i++) {
702            if (!empty($arrDetail[$i]['product_id'])) {
703                $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ? AND product_class_id = ?", array($order_id, $arrDetail[$i]['product_class_id']));
704                if (!empty($arrPreDetail) && $arrPreDetail[0]['quantity'] != $arrDetail[$i]['quantity']) {
705                    // 数量が変更された商品
706                    $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
707                    $arrStockData[$k]['quantity'] = $arrPreDetail[0]['quantity'] - $arrDetail[$i]['quantity'];
708                    ++$k;
709                } elseif (empty($arrPreDetail)) {
710                    // 新しく追加された商品 もしくは 違う商品に変更された商品
711                    $arrStockData[$k]['product_class_id'] = $arrDetail[$i]['product_class_id'];
712                    $arrStockData[$k]['quantity'] = -$arrDetail[$i]['quantity'];
713                    ++$k;
714                }
715                $objQuery->delete("dtb_order_detail", "order_id = ? AND product_class_id = ?", array($order_id, $arrDetail[$i]['product_class_id']));
716            }
717        }
718
719        // 上記の新しい商品のループでDELETEされなかった商品は、注文より削除された商品
720        $arrPreDetail = $objQuery->select('*', "dtb_order_detail", "order_id = ?", array($order_id));
721        foreach ($arrPreDetail AS $key=>$val) {
722            $arrStockData[$k]['product_class_id'] = $val['product_class_id'];
723            $arrStockData[$k]['quantity'] = $val['quantity'];
724            ++$k;
725        }
726
727        // 受注詳細データの初期化
728        $objQuery->delete("dtb_order_detail", $where, array($order_id));
729
730        // 受注詳細データの更新
731        $max = count($arrDetail);
732        for ($i = 0; $i < $max; $i++) {
733            $sqlval = array();
734            $sqlval['order_id'] = $order_id;
735            $sqlval['product_id']  = $arrDetail[$i]['product_id'];
736            $sqlval['product_class_id']  = $arrDetail[$i]['product_class_id'];
737            $sqlval['product_code']  = $arrDetail[$i]['product_code'];
738            $sqlval['product_name']  = $arrDetail[$i]['product_name'];
739            $sqlval['price']  = $arrDetail[$i]['price'];
740            $sqlval['quantity']  = $arrDetail[$i]['quantity'];
741            $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
742            $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
743            $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
744            $objQuery->insert("dtb_order_detail", $sqlval);
745        }
746
747        // 在庫数調整
748        $status = $sqlval['status'];
749        if (ORDER_DELIV != $status && ORDER_CANCEL != $status) {
750            $stock_sql = "UPDATE dtb_products_class SET stock = stock + ? WHERE product_class_id = ?";
751            foreach ($arrStockData AS $key=>$val) {
752                $stock_sqlval = array();
753                $stock_sqlval[] = $val['quantity'];
754                $stock_sqlval[] = $val['product_class_id'];
755
756                $objQuery->query($stock_sql, $stock_sqlval);
757            }
758        }
759
760        // 配送情報の初期化
761        // FIXME UPDATE/INSERT にする
762        $objQuery->delete('dtb_shipping', "order_id = ?", array($order_id));
763        $objQuery->delete('dtb_shipment_item', "order_id = ?", array($order_id));
764
765        //        $arrParams = $this->objFormParam->getHashArray();
766        $arrParams = $_POST;
767        // 配送ID の配列を取得
768        $shippingIds = array();
769        foreach (array_keys($arrParams) as $key) {
770            if (preg_match('/^shipping_id_/', $key)) {
771                $shippingIds[] = $arrParams[$key];
772            }
773        }
774
775        $cols = $objQuery->listTableFields('dtb_shipping');
776
777        foreach ($shippingIds as $shipping_id) {
778
779            $arrParams['shipping_date_' .  $shipping_id] = SC_Utils_Ex::sfGetTimestamp($arrParams['shipping_date_year_' . $shipping_id],
780                                                                                       $arrParams['shipping_date_month_' . $shipping_id],
781                                                                                       $arrParams['shipping_date_day_' . $shipping_id]);
782            $dest = array();
783            foreach ($arrParams as $key => $val) {
784                $key = preg_replace('/_' . $shipping_id . '$/', '', $key);
785                if (in_array($key, $cols)) {
786                    $dest[$key] = $val;
787                }
788            }
789
790            if (SC_Utils::isBlank($dest['deliv_id'])) {
791                // XXX 商品種別IDは0番目の配列を使用
792                $product_type_id = $this->objFormParam->getValue('product_type_id');
793                $dest['deliv_id'] = $objPurchase->getDeliv($product_type_id[0]);
794            }
795
796            $dest['shipping_id'] = $shipping_id;
797            $dest['order_id'] = $order_id;
798            $dest['create_date'] = 'Now()';
799            $dest['update_date'] = 'Now()';
800            $objQuery->insert('dtb_shipping', $dest);
801
802            // 商品規格ID の配列を取得
803            $productClassIds = array();
804            foreach (array_keys($arrParams) as $key) {
805                if (preg_match('/^product_class_id_' . $shipping_id . '_/', $key)) {
806                    $productClassIds[] = $arrParams[$key];
807                }
808            }
809
810            foreach ($productClassIds as $product_class_id) {
811                $item['shipping_id'] = $shipping_id;
812                $item['order_id'] = $order_id;
813                $item['product_class_id'] = $product_class_id;
814                $item['product_name'] = $arrParams['product_name_' . $shipping_id . '_' . $product_class_id];
815                $item['product_code'] = $arrParams['product_code_' . $shipping_id . '_' . $product_class_id];
816                $item['classcategory_name1'] = $arrParams['classcategory_name1_' . $shipping_id . '_' . $product_class_id];
817                $item['classcategory_name2'] = $arrParams['classcategory_name2_' . $shipping_id . '_' . $product_class_id];
818                $item['price'] = $arrParams['price_' . $shipping_id . '_' . $product_class_id];
819                $item['quantity'] = $arrParams['quantity_' . $shipping_id . '_' . $product_class_id];
820                $objQuery->insert("dtb_shipment_item", $item);
821            }
822        }
823        $objQuery->commit();
824    }
825
826    /**
827     * DB登録処理
828     *
829     * @return integer 注文番号
830     */
831    function lfRegistNewData(&$objPurchase) {
832        $objQuery = new SC_Query();
833
834        $sqlval = $this->lfMakeSqlvalForDtbOrder();
835
836        // ポイントは別登録
837        $addPoint = $sqlval['add_point'];
838        $usePoint = $sqlval['use_point'];
839        $sqlval['add_point'] = 0;
840        $sqlval['use_point'] = 0;
841
842        // customer_id
843        if ($sqlval["customer_id"] == "") {
844            $sqlval['customer_id'] = '0';
845        }
846
847        $sqlval['create_date'] = 'Now()';       // 受注日
848
849        $objQuery->begin();
850
851        // 受注テーブルの登録
852        $order_id = $objQuery->nextVal('dtb_order_order_id');
853        $sqlval['order_id'] = $order_id;
854        $this->registerOrder($sqlval, $order_id);
855
856        // 受注.対応状況の更新
857        SC_Helper_DB_Ex::sfUpdateOrderStatus($order_id, null, $addPoint, $usePoint);
858
859        // 受注テーブルの名称列を更新
860        //SC_Helper_DB_Ex::sfUpdateOrderNameCol($order_id);
861
862        // 受注詳細データの更新
863        $arrDetail = $this->objFormParam->getSwapArray(array("product_id", "product_class_id", "product_code", "product_name", "price", "quantity", "point_rate", "classcategory_name1", "classcategory_name2"));
864        $objQuery->delete("dtb_order_detail", 'order_id = ?', array($order_id));
865
866        $max = count($arrDetail);
867        for ($i = 0; $i < $max; $i++) {
868            $sqlval = array();
869            $sqlval['order_id'] = $order_id;
870            $sqlval['product_id']  = $arrDetail[$i]['product_id'];
871            $sqlval['product_class_id']  = $arrDetail[$i]['product_class_id'];
872            $sqlval['product_code']  = $arrDetail[$i]['product_code'];
873            $sqlval['product_name']  = $arrDetail[$i]['product_name'];
874            $sqlval['price']  = $arrDetail[$i]['price'];
875            $sqlval['quantity']  = $arrDetail[$i]['quantity'];
876            $sqlval['point_rate']  = $arrDetail[$i]['point_rate'];
877            $sqlval['classcategory_name1'] = $arrDetail[$i]['classcategory_name1'];
878            $sqlval['classcategory_name2'] = $arrDetail[$i]['classcategory_name2'];
879
880            $objQuery->insert("dtb_order_detail", $sqlval);
881
882
883            // 在庫数減少処理
884            // 現在の実在庫数取得
885            $pre_stock = $objQuery->getOne("SELECT stock FROM dtb_products_class WHERE product_class_id = ?", array($arrDetail[$i]['product_class_id']));
886
887            $stock_sqlval = array();
888            $stock_sqlval['stock'] = intval($pre_stock - $arrDetail[$i]['quantity']);
889            if ($stock_sqlval['stock'] === 0) {
890                $stock_sqlval['stock'] = '0';
891            }
892
893            $st_params = array();
894            $st_params[] = $arrDetail[$i]['product_class_id'];
895
896            $objQuery->update("dtb_products_class", $stock_sqlval, 'product_class_id = ?', $st_params);
897        }
898
899        $arrParams = $this->objFormParam->getHashArray();
900        // 配送ID の配列を取得
901        $shippingIds = array();
902        foreach (array_keys($arrParams) as $key) {
903            if (preg_match('/^shipping_id_/', $key)) {
904                $shippingIds[] = $arrParams[$key];
905            }
906        }
907
908        $cols = $objQuery->listTableFields('dtb_shipping');
909        foreach ($shippingIds as $shipping_id) {
910
911            $arrParams['shipping_date_' .  $shipping_id] = SC_Utils_Ex::sfGetTimestamp($arrParams['shipping_date_year_' . $shipping_id],
912                                                                                       $arrParams['shipping_date_month_' . $shipping_id],
913                                                                                       $arrParams['shipping_date_day_' . $shipping_id]);
914            $dest = array();
915            foreach ($arrParams as $key => $val) {
916                $key = preg_replace('/_' . $shipping_id . '$/', '', $key);
917                if (in_array($key, $cols)) {
918                    $dest[$key] = $val;
919                }
920            }
921            if (SC_Utils::isBlank($dest['deliv_id'])) {
922                // XXX 商品種別IDは0番目の配列を使用
923                $product_type_id = $this->objFormParam->getValue('product_type_id');
924                $dest['deliv_id'] = $objPurchase->getDeliv($product_type_id[0]);
925            }
926
927            $dest['shipping_id'] = $shipping_id;
928            $dest['order_id'] = $order_id;
929            $dest['create_date'] = 'Now()';
930            $dest['update_date'] = 'Now()';
931            $objQuery->insert('dtb_shipping', $dest);
932
933            // 商品規格ID の配列を取得
934            $productClassIds = array();
935            foreach (array_keys($arrParams) as $key) {
936                if (preg_match('/^product_class_id_' . $shipping_id . '_/', $key)) {
937                    $productClassIds[] = $arrParams[$key];
938                }
939            }
940
941            foreach ($productClassIds as $product_class_id) {
942                $item['shipping_id'] = $shipping_id;
943                $item['order_id'] = $order_id;
944                $item['product_class_id'] = $product_class_id;
945                $item['product_name'] = $arrParams['product_name_' . $shipping_id . '_' . $product_class_id];
946                $item['product_code'] = $arrParams['product_code_' . $shipping_id . '_' . $product_class_id];
947                $item['classcategory_name1'] = $arrParams['classcategory_name1_' . $shipping_id . '_' . $product_class_id];
948                $item['classcategory_name2'] = $arrParams['classcategory_name2_' . $shipping_id . '_' . $product_class_id];
949                $item['price'] = $arrParams['price_' . $shipping_id . '_' . $product_class_id];
950                $item['quantity'] = $arrParams['quantity_' . $shipping_id . '_' . $product_class_id];
951                $objQuery->insert("dtb_shipment_item", $item);
952            }
953        }
954
955        $objQuery->commit();
956
957        return $order_id;
958    }
959
960    /**
961     * 受注を登録する
962     */
963    function registerOrder($sqlval, $order_id) {
964        $table = 'dtb_order';
965        $objQuery = SC_Query::getSingletonInstance();
966        $cols = $objQuery->listTableFields($table);
967        $dest = array();
968        foreach ($sqlval as $key => $val) {
969            if (in_array($key, $cols)) {
970                $dest[$key] = $val;
971            }
972        }
973
974        $exists = $objQuery->count("dtb_order", "order_id = ?", array($order_id));
975        if ($exists > 0) {
976            $objQuery->update($table, $dest, "order_id = ?", array($order_id));
977        } else {
978            $dest['order_id'] = $order_id;
979            $result = $objQuery->insert($table, $dest);
980        }
981    }
982
983    function lfInsertProduct($product_class_id) {
984        $objProduct = new SC_Product();
985        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id));
986        $this->arrForm = $this->objFormParam->getFormParamList();
987        $existes = false;
988        $existes_key = NULL;
989        // 既に同じ商品がないか、確認する
990        if (!empty($this->arrForm['product_class_id']['value'])) {
991            foreach ($this->arrForm['product_class_id']['value'] AS $key=>$val) {
992                // 既に同じ商品がある場合
993                if ($val == $product_class_id) {
994                    $existes = true;
995                    $existes_key = $key;
996                }
997            }
998        }
999
1000        if ($existes) {
1001            // 既に同じ商品がある場合
1002            ++$this->arrForm['quantity']['value'][$existes_key];
1003        } else {
1004            // 既に同じ商品がない場合
1005            $this->lfSetProductData($arrProduct);
1006        }
1007    }
1008
1009    function lfUpdateProduct($product_class_id, $no) {
1010        $objProduct = new SC_Product();
1011        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id));
1012        $this->arrForm = $this->objFormParam->getFormParamList();
1013        $this->lfSetProductData($arrProduct, $no);
1014    }
1015
1016    function lfSetProductData($arrProduct, $no = null) {
1017        foreach ($arrProduct AS $key=>$val) {
1018            if (!is_array($this->arrForm[$key]['value'])) {
1019                unset($this->arrForm[$key]['value']);
1020            }
1021            if ($no === null) {
1022                $this->arrForm[$key]['value'][] = $val;
1023            } else {
1024                $this->arrForm[$key]['value'][$no] = $val;
1025            }
1026        }
1027    }
1028
1029    function lfGetProductsClass($productsClass) {
1030        $arrProduct['price'] = $productsClass['price02'];
1031        $arrProduct['quantity'] = 1;
1032        $arrProduct['product_id'] = $productsClass['product_id'];
1033        $arrProduct['product_class_id'] = $productsClass['product_class_id'];
1034        $arrProduct['product_type_id'] = $productsClass['product_type_id'];
1035        $arrProduct['point_rate'] = $productsClass['point_rate'];
1036        $arrProduct['product_code'] = $productsClass['product_code'];
1037        $arrProduct['product_name'] = $productsClass['name'];
1038        $arrProduct['classcategory_name1'] = $productsClass['classcategory_name1'];
1039        $arrProduct['classcategory_name2'] = $productsClass['classcategory_name2'];
1040        return $arrProduct;
1041    }
1042
1043
1044    /**
1045     * 検索結果から顧客IDを指定された場合、顧客情報をフォームに代入する
1046     * @param int $edit_customer_id 顧客ID
1047     */
1048    function lfSetCustomerInfo($edit_customer_id = ""){
1049        // 顧客IDが指定されている場合のみ、処理を実行する
1050        if( $edit_customer_id === "" ) return ;
1051
1052        // 検索で選択された顧客IDが入力されている場合
1053        if( is_null($edit_customer_id) === false && 0 < strlen($edit_customer_id) && SC_Utils_Ex::sfIsInt($edit_customer_id) ){
1054            $objQuery = new SC_Query();
1055
1056            // 顧客情報を取得する
1057            $arrCustomerInfo = $objQuery->select('*', 'dtb_customer', 'customer_id = ? AND del_flg = 0', array($edit_customer_id));
1058
1059            // 顧客情報を取得する事が出来たら、テンプレートに値を渡す
1060            if( 0 < count($arrCustomerInfo) && is_array($arrCustomerInfo) === true){
1061                // カラム名にorder_を付ける(テンプレート側でorder_がついている為
1062                foreach($arrCustomerInfo[0] as $index=>$customer_info){
1063                    // customer_idにはorder_を付けないようにする
1064                    $order_index = ($index == 'customer_id') ? $index : 'order_'.$index;
1065                    $arrCustomer[$order_index] = $customer_info;
1066                }
1067            }
1068
1069            // hiddenに渡す
1070            $this->edit_customer_id = $edit_customer_id;
1071
1072            // 受注日に現在の時刻を取得し、表示させる
1073            $create_date = $objQuery->getAll('SELECT now() as create_date;');
1074            $arrCustomer['create_date'] = $create_date[0]['create_date'];
1075
1076            // 情報上書き
1077            $this->objFormParam->setParam($arrCustomer);
1078            // 入力値の変換
1079            $this->objFormParam->convParam();
1080        }
1081    }
1082
1083    /**
1084     * 受注テーブルの登録・更新用データの共通部分を作成する
1085     *
1086     * @return array
1087     */
1088    function lfMakeSqlvalForDtbOrder() {
1089
1090        // 入力データを取得する
1091        $sqlval = $this->objFormParam->getHashArray();
1092        foreach ($sqlval as $key => $val) {
1093            // 配列は登録しない
1094            if (is_array($val)) {
1095                unset($sqlval[$key]);
1096            }
1097        }
1098
1099        // 受注テーブルに書き込まない列を除去
1100        unset($sqlval['total_point']);
1101        unset($sqlval['point']);
1102        unset($sqlval['commit_date']);
1103
1104        // 更新日時
1105        $sqlval['update_date'] = 'Now()';
1106
1107        return $sqlval;
1108    }
1109}
1110?>
Note: See TracBrowser for help on using the repository browser.