OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / ec_main / include / db / ec_mainOrderDb.php
1 <?php
2 /**
3  * DBクラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
9  * @package    Magic3 Framework
10  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11  * @copyright  Copyright 2006-2012 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id: ec_mainOrderDb.php 5475 2012-12-18 14:29:52Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
17
18 class ec_mainOrderDb extends BaseDb
19 {
20         const NO_ID = 'order_no';               // 注文番号取得用
21         
22         /**
23          * 正会員情報を取得
24          *
25          * @param int $userId                   ユーザID兼データ更新ユーザ
26          * @param array $memberInfo             会員情報
27          * @param array $personInfo             個人情報
28          * @param array $companyInfo    法人情報
29          * @param array $address                住所
30          * @return                                              true=成功、false=失敗
31          */
32         function getMemberInfo($userId, &$memberInfo, &$personInfo, &$companyInfo, &$address)
33         {
34                 $queryStr = 'SELECT * FROM shop_member WHERE sm_login_user_id = ? AND sm_deleted = false';
35                 $ret = $this->selectRecord($queryStr, array($userId), $memberInfo);
36                 if ($ret){
37                         if ($memberInfo['sm_type'] == 1){               // 個人の場合
38                                 $queryStr = 'SELECT * FROM person_info WHERE pi_id = ? AND pi_language_id = ? AND pi_deleted = false';
39                                 $ret = $this->selectRecord($queryStr, array($memberInfo['sm_person_info_id'], $memberInfo['sm_language_id']), $personInfo);
40                                 
41                                 // 住所を取得
42                                 if ($ret){
43                                         $queryStr = 'SELECT * FROM address WHERE ad_id = ? AND ad_language_id = ? AND ad_deleted = false';
44                                         $ret = $this->selectRecord($queryStr, array($personInfo['pi_address_id'], $personInfo['pi_language_id']), $address);
45                                 }
46                         } else if ($memberInfo['sm_type'] == 2){                // 法人の場合
47                                 $queryStr = 'SELECT * FROM company_info WHERE ci_id = ? AND ci_language_id = ? AND ci_deleted = false';
48                                 $ret = $this->selectRecord($queryStr, array($memberInfo['sm_company_info_id'], $memberInfo['sm_language_id']), $companyInfo);
49                                 
50                                 // 住所を取得
51                                 if ($ret){
52                                         $queryStr = 'SELECT * FROM address WHERE ad_id = ? AND ad_language_id = ? AND ad_deleted = false';
53                                         $ret = $this->selectRecord($queryStr, array($companyInfo['ci_address_id'], $companyInfo['ci_language_id']), $address);
54                                 }
55                         }
56                         return true;
57                 } else {
58                         return false;
59                 }
60         }
61         /**
62          * 発注シートを更新
63          *
64          * @param ing     $userId                               ユーザID
65          * @param string  $lang                                 言語
66          * @param string  $clientId                             クライアントID
67          * @param int    $custm_id                              得意先(顧客)ID
68          * @param string $custm_name                    得意先(顧客)名
69          * @param string $custm_name_kana               得意先(顧客)名(カナ)
70          * @param string $custm_person                  得意先(顧客)担当者名
71          * @param string $custm_person_kana             得意先(顧客)担当者名(カナ)
72          * @param string $custm_zipcode                 郵便番号(7桁)
73          * @param int    $custm_state_id                都道府県、州(geo_zoneテーブル)
74          * @param string $custm_address                 市区町村
75          * @param string $custm_address2                建物名
76          * @param string $custm_phone                   電話番号
77          * @param string $custm_fax                             FAX
78          * @param string $custm_email                   Eメール
79          * @param string $custm_country_id              国ID
80          * @param int    $deliv_id                              出荷先ID
81          * @param string $deliv_name                    出荷先名
82          * @param string $deliv_name_kana               出荷先名(カナ)
83          * @param string $deliv_person                  出荷先担当者名
84          * @param string $deliv_person_kana             出荷先担当者名(カナ)
85          * @param string $deliv_zipcode                 郵便番号(7桁)
86          * @param int    $deliv_state_id                都道府県、州(geo_zoneテーブル)
87          * @param string $deliv_address                 市区町村
88          * @param string $deliv_address2                建物名
89          * @param string $deliv_phone                   電話番号
90          * @param string $deliv_fax                             FAX
91          * @param string $deliv_email                   Eメール
92          * @param string $deliv_country_id              国ID
93          * @param int    $bill_id                               請求先ID
94          * @param string $bill_name                             請求先名
95          * @param string $bill_name_kana                請求先名(カナ)
96          * @param string $bill_person                   請求先担当者名
97          * @param string $bill_person_kana              請求先担当者名(カナ)
98          * @param string $bill_zipcode                  郵便番号(7桁)
99          * @param int    $bill_state_id                 都道府県、州(geo_zoneテーブル)
100          * @param string $bill_address                  市区町村
101          * @param string $bill_address2                 建物名
102          * @param string $bill_phone                    電話番号
103          * @param string $bill_fax                              FAX
104          * @param string $bill_email                    Eメール
105          * @param string $bill_country_id               国ID
106          * @param string $deliv_method_id               配送方法
107          * @param string $pay_method_id                 支払い方法
108          * @param string $card_type                             クレジットカードタイプ
109          * @param string $card_owner                    クレジットカード所有者
110          * @param string $card_number                   クレジットカード番号
111          * @param string $card_expires                  クレジットカード期限
112          * @param timestamp $demand_dt                  希望納期
113          * @param string $demand_time                   希望納期(時間帯)
114          * @param timestamp $appoint_dt                 予定納期
115          * @param string $currency_id                   通貨ID
116          * @param float $subtotal                               商品総額
117          * @param float $discount                               値引き額
118          * @param float $deliv_fee                              配送料
119          * @param float $charge                                 手数料
120          * @param float $total                                  支払い総額
121          * @param string $discount_desc                 値引き説明
122          * @return                                                              true=成功、false=失敗
123          */
124         function updateOrderSheet($userId, $lang, $clientId,
125                                 $custm_id, $custm_name, $custm_name_kana, $custm_person, $custm_person_kana, $custm_zipcode, $custm_state_id, $custm_address, $custm_address2, $custm_phone, $custm_fax, $custm_email, $custm_country_id, 
126                                 $deliv_id, $deliv_name, $deliv_name_kana, $deliv_person, $deliv_person_kana, $deliv_zipcode, $deliv_state_id, $deliv_address, $deliv_address2, $deliv_phone, $deliv_fax, $deliv_email, $deliv_country_id,
127                                 $bill_id,  $bill_name,  $bill_name_kana,  $bill_person,  $bill_person_kana,  $bill_zipcode,  $bill_state_id,  $bill_address, $bill_address2, $bill_phone,  $bill_fax, $bill_email, $bill_country_id,
128                                 $deliv_method_id, $pay_method_id, $card_type, $card_owner, $card_number, $card_expires, $demand_dt, $demand_time, $appoint_dt, $currency_id, $subtotal, $discount, $deliv_fee, $charge, $total,
129                                 $discount_desc = '')
130         {
131                 $now = date("Y/m/d H:i:s");     // 現在日時
132                 $updateUserId = $this->gEnv->getCurrentUserId();        // 現在のユーザ
133                 
134                 // トランザクション開始
135                 $this->startTransaction();
136                 
137                 $keyUserId = 0;
138                 $keyLang = '';
139                 if (empty($userId)){
140                         if (empty($clientId)){
141                                 // トランザクション確定
142                                 $ret = $this->endTransaction();
143                                 return false;
144                         } else {// クライアントIDからデータを取得するとき
145                                 // クライアントIDが登録済みかどうか確認
146                                 $queryStr = 'SELECT * FROM order_sheet WHERE oe_client_id = ?';
147                                 $ret = $this->selectRecords($queryStr, array($clientId), $rows);
148                                 if ($ret){
149                                         if (count($rows) > 1){          // 2行以上取得できるときはエラー
150                                                 // トランザクション確定
151                                                 $ret = $this->endTransaction();
152                                                 return false;
153                                         }
154                                         $keyUserId = intval($rows[0]['oe_user_id']);
155                                         $keyLang = $rows[0]['oe_language_id'];
156                                         if ($keyUserId >= 0){           // クライアントIDで取得の場合はユーザIDがマイナス値のみ許可
157                                                 // トランザクション確定
158                                                 $ret = $this->endTransaction();
159                                                 return false;
160                                         }
161                                 } else {                // レコードがない場合はユーザIDを作成
162                                         $keyUserId = -1;
163                                         $keyLang = $lang;
164                                         $queryStr = 'SELECT MIN(oe_user_id) AS mid FROM order_sheet WHERE oe_language_id = ?';
165                                         $ret = $this->selectRecord($queryStr, array($lang), $row);
166                                         if ($ret) $keyUserId = intval($row['mid']) -1;
167                                         if ($keyUserId >= 0) $keyUserId = -1;
168                                 }
169                         }
170                 } else {
171                         if ($userId > 0){
172                                 $keyUserId = $userId;
173                                 $keyLang = $lang;
174                         } else {
175                                 // トランザクション確定
176                                 $ret = $this->endTransaction();
177                                 return false;
178                         }
179                 }
180
181                 // 登録済みかどうか確認
182                 $queryStr = 'SELECT * FROM order_sheet WHERE oe_user_id = ? AND oe_language_id = ?';
183                 $ret = $this->selectRecord($queryStr, array($keyUserId, $keyLang), $row);
184                 if ($ret){
185                         $queryStr  = 'UPDATE order_sheet ';
186                         $queryStr .=   'SET ';
187                         $queryStr .=     'oe_user_id = ?, ';
188                         $queryStr .=     'oe_language_id = ?, ';
189                         $queryStr .=     'oe_custm_id = ?, ';
190                         $queryStr .=     'oe_custm_name = ?, ';
191                         $queryStr .=     'oe_custm_name_kana = ?, ';
192                         $queryStr .=     'oe_custm_person = ?, ';
193                         $queryStr .=     'oe_custm_person_kana = ?, ';
194                         $queryStr .=     'oe_custm_zipcode = ?, ';
195                         $queryStr .=     'oe_custm_state_id = ?, ';
196                         $queryStr .=     'oe_custm_address1 = ?, ';
197                         $queryStr .=     'oe_custm_address2 = ?, ';
198                         $queryStr .=     'oe_custm_phone = ?, ';
199                         $queryStr .=     'oe_custm_fax = ?, ';
200                         $queryStr .=     'oe_custm_email = ?, ';
201                         $queryStr .=     'oe_custm_country_id = ?, ';
202                         $queryStr .=     'oe_deliv_id = ?, ';
203                         $queryStr .=     'oe_deliv_name = ?, ';
204                         $queryStr .=     'oe_deliv_name_kana = ?, ';
205                         $queryStr .=     'oe_deliv_person = ?, ';
206                         $queryStr .=     'oe_deliv_person_kana = ?, ';
207                         $queryStr .=     'oe_deliv_zipcode = ?, ';
208                         $queryStr .=     'oe_deliv_state_id = ?, ';
209                         $queryStr .=     'oe_deliv_address1 = ?, ';
210                         $queryStr .=     'oe_deliv_address2 = ?, ';
211                         $queryStr .=     'oe_deliv_phone = ?, ';
212                         $queryStr .=     'oe_deliv_fax = ?, ';
213                         $queryStr .=     'oe_deliv_email = ?, ';
214                         $queryStr .=     'oe_deliv_country_id = ?, ';
215                         $queryStr .=     'oe_bill_id = ?, ';
216                         $queryStr .=     'oe_bill_name = ?, ';
217                         $queryStr .=     'oe_bill_name_kana = ?, ';
218                         $queryStr .=     'oe_bill_person = ?, ';
219                         $queryStr .=     'oe_bill_person_kana = ?, ';
220                         $queryStr .=     'oe_bill_zipcode = ?, ';
221                         $queryStr .=     'oe_bill_state_id = ?, ';
222                         $queryStr .=     'oe_bill_address1 = ?, ';
223                         $queryStr .=     'oe_bill_address2 = ?, ';
224                         $queryStr .=     'oe_bill_phone = ?, ';
225                         $queryStr .=     'oe_bill_fax = ?, ';
226                         $queryStr .=     'oe_bill_email = ?, ';
227                         $queryStr .=     'oe_bill_country_id = ?, ';
228                         $queryStr .=     'oe_deliv_method_id = ?, ';
229                         $queryStr .=     'oe_pay_method_id = ?, ';
230                         $queryStr .=     'oe_card_type = ?, ';
231                         $queryStr .=     'oe_card_owner = ?, ';
232                         $queryStr .=     'oe_card_number = ?, ';
233                         $queryStr .=     'oe_card_expires = ?, ';
234                         $queryStr .=     'oe_demand_dt = ?, ';
235                         $queryStr .=     'oe_demand_time = ?, ';
236                         $queryStr .=     'oe_appoint_dt = ?, ';
237                         $queryStr .=     'oe_discount_desc = ?, ';                      // 値引き説明
238                         $queryStr .=     'oe_currency_id = ?, ';                        
239                         $queryStr .=     'oe_subtotal = ?, ';                   
240                         $queryStr .=     'oe_discount = ?, ';                   
241                         $queryStr .=     'oe_deliv_fee = ?, ';                  
242                         $queryStr .=     'oe_charge = ?, ';                     
243                         $queryStr .=     'oe_total = ?, ';
244                         $queryStr .=     'oe_client_id = ?, ';                  // クライアントID
245                         $queryStr .=     'oe_session = ?, ';                    // セッションID
246                         $queryStr .=     'oe_update_user_id = ?, ';
247                         $queryStr .=     'oe_update_dt = ? ';
248                         $queryStr .=   'WHERE oe_serial = ? ';
249                         $this->execStatement($queryStr, array($keyUserId, $keyLang, 
250                                 $custm_id, $custm_name, $custm_name_kana, $custm_person, $custm_person_kana, $custm_zipcode, $custm_state_id, $custm_address, $custm_address2, $custm_phone, $custm_fax, $custm_email, $custm_country_id, 
251                                 $deliv_id, $deliv_name, $deliv_name_kana, $deliv_person, $deliv_person_kana, $deliv_zipcode, $deliv_state_id, $deliv_address, $deliv_address2, $deliv_phone, $deliv_fax, $deliv_email, $deliv_country_id,
252                                 $bill_id,  $bill_name,  $bill_name_kana,  $bill_person,  $bill_person_kana,  $bill_zipcode,  $bill_state_id,  $bill_address, $bill_address2,  $bill_phone,  $bill_fax, $bill_email, $bill_country_id,
253                                 $deliv_method_id, $pay_method_id, $card_type, $card_owner, $card_number, $card_expires, $demand_dt, $demand_time, $appoint_dt, $discount_desc, $currency_id, $subtotal, $discount, $deliv_fee, $charge, $total,
254                                 $clientId, session_id(), $updateUserId, $now, $row['oe_serial']));
255                 } else {
256                         // 新規レコードを追加
257                         $queryStr  = 'INSERT INTO order_sheet (';
258                         $queryStr .=     'oe_user_id, ';
259                         $queryStr .=     'oe_language_id, ';
260                         $queryStr .=     'oe_custm_id, ';
261                         $queryStr .=     'oe_custm_name, ';
262                         $queryStr .=     'oe_custm_name_kana, ';
263                         $queryStr .=     'oe_custm_person, ';
264                         $queryStr .=     'oe_custm_person_kana, ';
265                         $queryStr .=     'oe_custm_zipcode, ';
266                         $queryStr .=     'oe_custm_state_id, ';
267                         $queryStr .=     'oe_custm_address1, ';
268                         $queryStr .=     'oe_custm_address2, ';
269                         $queryStr .=     'oe_custm_phone, ';
270                         $queryStr .=     'oe_custm_fax, ';
271                         $queryStr .=     'oe_custm_email, ';
272                         $queryStr .=     'oe_custm_country_id, ';
273                         $queryStr .=     'oe_deliv_id, ';
274                         $queryStr .=     'oe_deliv_name, ';
275                         $queryStr .=     'oe_deliv_name_kana, ';
276                         $queryStr .=     'oe_deliv_person, ';
277                         $queryStr .=     'oe_deliv_person_kana, ';
278                         $queryStr .=     'oe_deliv_zipcode, ';
279                         $queryStr .=     'oe_deliv_state_id, ';
280                         $queryStr .=     'oe_deliv_address1, ';
281                         $queryStr .=     'oe_deliv_address2, ';
282                         $queryStr .=     'oe_deliv_phone, ';
283                         $queryStr .=     'oe_deliv_fax, ';
284                         $queryStr .=     'oe_deliv_email, ';
285                         $queryStr .=     'oe_deliv_country_id, ';
286                         $queryStr .=     'oe_bill_id, ';
287                         $queryStr .=     'oe_bill_name, ';
288                         $queryStr .=     'oe_bill_name_kana, ';
289                         $queryStr .=     'oe_bill_person, ';
290                         $queryStr .=     'oe_bill_person_kana, ';
291                         $queryStr .=     'oe_bill_zipcode, ';
292                         $queryStr .=     'oe_bill_state_id, ';
293                         $queryStr .=     'oe_bill_address1, ';
294                         $queryStr .=     'oe_bill_address2, ';
295                         $queryStr .=     'oe_bill_phone, ';
296                         $queryStr .=     'oe_bill_fax, ';
297                         $queryStr .=     'oe_bill_email, ';
298                         $queryStr .=     'oe_bill_country_id, ';
299                         $queryStr .=     'oe_deliv_method_id, ';
300                         $queryStr .=     'oe_pay_method_id, ';
301                         $queryStr .=     'oe_card_type, ';
302                         $queryStr .=     'oe_card_owner, ';
303                         $queryStr .=     'oe_card_number, ';
304                         $queryStr .=     'oe_card_expires, ';
305                         $queryStr .=     'oe_demand_dt, ';
306                         $queryStr .=     'oe_demand_time, ';                    
307                         $queryStr .=     'oe_appoint_dt, ';
308                         $queryStr .=     'oe_discount_desc, ';                  // 値引き説明
309                         $queryStr .=     'oe_currency_id, ';                    
310                         $queryStr .=     'oe_subtotal, ';                       
311                         $queryStr .=     'oe_discount, ';                       
312                         $queryStr .=     'oe_deliv_fee, ';                      
313                         $queryStr .=     'oe_charge, ';                 
314                         $queryStr .=     'oe_total, ';
315                         $queryStr .=     'oe_client_id, ';                      // クライアントID
316                         $queryStr .=     'oe_session, ';                        // セッションID
317                         $queryStr .=     'oe_update_user_id, ';
318                         $queryStr .=     'oe_update_dt ';
319                         $queryStr .= ') VALUES (';
320                         $queryStr .=   '?, ';
321                         $queryStr .=   '?, ';
322                         $queryStr .=   '?, ';
323                         $queryStr .=   '?, ';
324                         $queryStr .=   '?, ';
325                         $queryStr .=   '?, ';
326                         $queryStr .=   '?, ';
327                         $queryStr .=   '?, ';
328                         $queryStr .=   '?, ';
329                         $queryStr .=   '?, ';
330                         $queryStr .=   '?, ';
331                         $queryStr .=   '?, ';
332                         $queryStr .=   '?, ';
333                         $queryStr .=   '?, ';
334                         $queryStr .=   '?, ';
335                         $queryStr .=   '?, ';
336                         $queryStr .=   '?, ';
337                         $queryStr .=   '?, ';
338                         $queryStr .=   '?, ';
339                         $queryStr .=   '?, ';
340                         $queryStr .=   '?, ';
341                         $queryStr .=   '?, ';
342                         $queryStr .=   '?, ';
343                         $queryStr .=   '?, ';
344                         $queryStr .=   '?, ';
345                         $queryStr .=   '?, ';
346                         $queryStr .=   '?, ';
347                         $queryStr .=   '?, ';
348                         $queryStr .=   '?, ';
349                         $queryStr .=   '?, ';
350                         $queryStr .=   '?, ';
351                         $queryStr .=   '?, ';
352                         $queryStr .=   '?, ';
353                         $queryStr .=   '?, ';
354                         $queryStr .=   '?, ';
355                         $queryStr .=   '?, ';
356                         $queryStr .=   '?, ';
357                         $queryStr .=   '?, ';
358                         $queryStr .=   '?, ';
359                         $queryStr .=   '?, ';
360                         $queryStr .=   '?, ';
361                         $queryStr .=   '?, ';
362                         $queryStr .=   '?, ';
363                         $queryStr .=   '?, ';
364                         $queryStr .=   '?, ';
365                         $queryStr .=   '?, ';
366                         $queryStr .=   '?, ';
367                         $queryStr .=   '?, ';
368                         $queryStr .=   '?, ';
369                         $queryStr .=   '?, ';
370                         $queryStr .=   '?, ';
371                         $queryStr .=   '?, ';
372                         $queryStr .=   '?, ';
373                         $queryStr .=   '?, ';
374                         $queryStr .=   '?, ';
375                         $queryStr .=   '?, ';
376                         $queryStr .=   '?, ';
377                         $queryStr .=   '?, ';
378                         $queryStr .=   '?, ';
379                         $queryStr .=   '?, ';
380                         $queryStr .=   '?) ';
381                         $ret = $this->execStatement($queryStr, array($keyUserId, $keyLang, 
382                                 $custm_id, $custm_name, $custm_name_kana, $custm_person, $custm_person_kana, $custm_zipcode, $custm_state_id, $custm_address, $custm_address2, $custm_phone, $custm_fax, $custm_email, $custm_country_id, 
383                                 $deliv_id, $deliv_name, $deliv_name_kana, $deliv_person, $deliv_person_kana, $deliv_zipcode, $deliv_state_id, $deliv_address, $deliv_address2, $deliv_phone, $deliv_fax, $deliv_email, $deliv_country_id,
384                                 $bill_id,  $bill_name,  $bill_name_kana,  $bill_person,  $bill_person_kana,  $bill_zipcode,  $bill_state_id,  $bill_address, $bill_address2, $bill_phone,  $bill_fax, $bill_email, $bill_country_id,
385                                 $deliv_method_id, $pay_method_id, $card_type, $card_owner, $card_number, $card_expires, $demand_dt, $demand_time, $appoint_dt, $discount_desc, $currency_id, $subtotal, $discount, $deliv_fee, $charge, $total,
386                                 $clientId, session_id(), $updateUserId, $now));
387                 }
388                 // トランザクション確定
389                 $ret = $this->endTransaction();
390                 return $ret;
391         }
392         /**
393          * 受注情報を更新
394          *
395          * @param int     $serial                               シリアル番号
396          * @param ing     $userId                               購入者ユーザID
397          * @param string  $lang                                 言語
398          * @param string  $order_no                             受注番号(任意)
399          * @param int    $custm_id                              得意先(顧客)ID
400          * @param string $custm_name                    得意先(顧客)名
401          * @param string $custm_name_kana               得意先(顧客)名(カナ)
402          * @param string $custm_person                  得意先(顧客)担当者名
403          * @param string $custm_person_kana             得意先(顧客)担当者名(カナ)
404          * @param string $custm_zipcode                 郵便番号(7桁)
405          * @param int    $custm_state_id                都道府県、州(geo_zoneテーブル)
406          * @param string $custm_address                 市区町村
407          * @param string $custm_address2                建物名
408          * @param string $custm_phone                   電話番号
409          * @param string $custm_fax                             FAX
410          * @param string $custm_email                   Eメール
411          * @param string $custm_country_id              国ID
412          * @param int    $deliv_id                              出荷先ID
413          * @param string $deliv_name                    出荷先名
414          * @param string $deliv_name_kana               出荷先名(カナ)
415          * @param string $deliv_person                  出荷先担当者名
416          * @param string $deliv_person_kana             出荷先担当者名(カナ)
417          * @param string $deliv_zipcode                 郵便番号(7桁)
418          * @param int    $deliv_state_id                都道府県、州(geo_zoneテーブル)
419          * @param string $deliv_address                 市区町村
420          * @param string $deliv_address2                建物名
421          * @param string $deliv_phone                   電話番号
422          * @param string $deliv_fax                             FAX
423          * @param string $deliv_email                   Eメール
424          * @param string $deliv_country_id              国ID
425          * @param int    $bill_id                               請求先ID
426          * @param string $bill_name                             請求先名
427          * @param string $bill_name_kana                請求先名(カナ)
428          * @param string $bill_person                   請求先担当者名
429          * @param string $bill_person_kana              請求先担当者名(カナ)
430          * @param string $bill_zipcode                  郵便番号(7桁)
431          * @param int    $bill_state_id                 都道府県、州(geo_zoneテーブル)
432          * @param string $bill_address                  市区町村
433          * @param string $bill_address2                 建物名
434          * @param string $bill_phone                    電話番号
435          * @param string $bill_fax                              FAX
436          * @param string $bill_email                    Eメール
437          * @param string $bill_country_id               国ID
438          * @param string $deliv_method_id               配送方法
439          * @param string $pay_method_id                 支払い方法
440          * @param string $card_type                             クレジットカードタイプ
441          * @param string $card_owner                    クレジットカード所有者
442          * @param string $card_number                   クレジットカード番号
443          * @param string $card_expires                  クレジットカード期限
444          * @param timestamp $demand_dt                  希望納期
445          * @param string $demand_time                   希望納期(時間帯)
446          * @param timestamp $appoint_dt                 予定納期
447          * @param string $currency_id                   通貨ID
448          * @param float $subtotal                               商品総額
449          * @param float $discount                               値引き額
450          * @param float $deliv_fee                              配送料
451          * @param float $charge                                 手数料
452          * @param float $total                                  支払い総額
453          * @param int   $order_status                   受注状況
454          * @param timestamp $estimate_dt                見積日時
455          * @param timestamp $regist_dt                  受注受付日時
456          * @param timestamp $order_dt                   受注開始日時
457          * @param timestamp $deliv_dt                   配送日時
458          * @param timestamp $close_dt                   取引終了日時
459          * @param int     $updateUserId                 更新者ID
460          * @param timestamp $now                                更新日時
461          * @param int       $newId                              新規ID
462          * @param int       $newSerial                  新規シリアル番号
463          * @param string $discount_desc                 値引き説明
464          * @param timestamp $pay_dt                             支払い日時
465          * @return                                                              true=成功、false=失敗
466          */
467         function updateOrder($serial, $userId, $lang, $order_no,
468                                 $custm_id, $custm_name, $custm_name_kana, $custm_person, $custm_person_kana, $custm_zipcode, $custm_state_id, $custm_address, $custm_address2, $custm_phone, $custm_fax, $custm_email, $custm_country_id, 
469                                 $deliv_id, $deliv_name, $deliv_name_kana, $deliv_person, $deliv_person_kana, $deliv_zipcode, $deliv_state_id, $deliv_address, $deliv_address2, $deliv_phone, $deliv_fax, $deliv_email, $deliv_country_id,
470                                 $bill_id,  $bill_name,  $bill_name_kana,  $bill_person,  $bill_person_kana,  $bill_zipcode,  $bill_state_id,  $bill_address, $bill_address2,  $bill_phone,  $bill_fax, $bill_email, $bill_country_id,
471                                 $deliv_method_id, $pay_method_id, $card_type, $card_owner, $card_number, $card_expires, $demand_dt, $demand_time, $appoint_dt, $currency_id, $subtotal, $discount, $deliv_fee, $charge, $total,
472                                 $order_status, $estimate_dt, $regist_dt, $order_dt, $deliv_dt, $close_dt, 
473                                 $updateUserId, $now, &$newId, &$newSerial, $discount_desc = '', $pay_dt = '')
474         {
475                 if (empty($pay_dt)) $pay_dt = $this->gEnv->getInitValueOfTimestamp();           // 日時初期化値
476                 
477                 $historyIndex = 0;              // 履歴番号
478                 if ($serial == 0){                      // 新規登録のとき
479                         // 新規IDを作成
480                         $id = 1;
481                         $queryStr = 'select max(or_id) as ms from order_header ';
482                         $ret = $this->selectRecord($queryStr, array(), $row);
483                         if ($ret) $id = $row['ms'] + 1;
484                         $newId = $id;
485                 } else {
486                         $queryStr  = 'SELECT * FROM order_header ';
487                         $queryStr .=   'WHERE or_serial = ? ';
488                         $ret = $this->selectRecord($queryStr, array($serial), $row);
489                         if ($ret){              // 既に登録レコードがあるとき
490                                 if ($row['or_deleted']){                // レコードが削除されていれば終了
491                                         return false;
492                                 }
493                         } else {                // 存在しない場合は終了
494                                 return false;
495                         }
496                         $historyIndex = $row['or_history_index'] + 1;
497                         $id = $row['or_id'];
498                         
499                         // 古いレコードを削除
500                         $queryStr  = 'UPDATE order_header ';
501                         $queryStr .=   'SET or_deleted = true, ';       // 削除
502                         $queryStr .=     'or_update_user_id = ?, ';
503                         $queryStr .=     'or_update_dt = ? ';
504                         $queryStr .=   'WHERE or_serial = ?';
505                         $this->execStatement($queryStr, array($updateUserId, $now, $serial));
506                 }
507
508                 // 新規レコードを追加
509                 $queryStr  = 'INSERT INTO order_header (';
510                 $queryStr .=     'or_id, ';
511                 $queryStr .=     'or_history_index, ';
512                 $queryStr .=     'or_user_id, ';
513                 $queryStr .=     'or_language_id, ';
514                 $queryStr .=     'or_order_no, ';
515                 $queryStr .=     'or_custm_id, ';
516                 $queryStr .=     'or_custm_name, ';
517                 $queryStr .=     'or_custm_name_kana, ';
518                 $queryStr .=     'or_custm_person, ';
519                 $queryStr .=     'or_custm_person_kana, ';
520                 $queryStr .=     'or_custm_zipcode, ';
521                 $queryStr .=     'or_custm_state_id, ';
522                 $queryStr .=     'or_custm_address1, ';
523                 $queryStr .=     'or_custm_address2, ';
524                 $queryStr .=     'or_custm_phone, ';
525                 $queryStr .=     'or_custm_fax, ';
526                 $queryStr .=     'or_custm_email, ';
527                 $queryStr .=     'or_custm_country_id, ';
528                 $queryStr .=     'or_deliv_id, ';
529                 $queryStr .=     'or_deliv_name, ';
530                 $queryStr .=     'or_deliv_name_kana, ';
531                 $queryStr .=     'or_deliv_person, ';
532                 $queryStr .=     'or_deliv_person_kana, ';
533                 $queryStr .=     'or_deliv_zipcode, ';
534                 $queryStr .=     'or_deliv_state_id, ';
535                 $queryStr .=     'or_deliv_address1, ';
536                 $queryStr .=     'or_deliv_address2, ';
537                 $queryStr .=     'or_deliv_phone, ';
538                 $queryStr .=     'or_deliv_fax, ';
539                 $queryStr .=     'or_deliv_email, ';
540                 $queryStr .=     'or_deliv_country_id, ';
541                 $queryStr .=     'or_bill_id, ';
542                 $queryStr .=     'or_bill_name, ';
543                 $queryStr .=     'or_bill_name_kana, ';
544                 $queryStr .=     'or_bill_person, ';
545                 $queryStr .=     'or_bill_person_kana, ';
546                 $queryStr .=     'or_bill_zipcode, ';
547                 $queryStr .=     'or_bill_state_id, ';
548                 $queryStr .=     'or_bill_address1, ';
549                 $queryStr .=     'or_bill_address2, ';
550                 $queryStr .=     'or_bill_phone, ';
551                 $queryStr .=     'or_bill_fax, ';
552                 $queryStr .=     'or_bill_email, ';
553                 $queryStr .=     'or_bill_country_id, ';
554                 $queryStr .=     'or_deliv_method_id, ';
555                 $queryStr .=     'or_pay_method_id, ';
556                 $queryStr .=     'or_card_type, ';
557                 $queryStr .=     'or_card_owner, ';
558                 $queryStr .=     'or_card_number, ';
559                 $queryStr .=     'or_card_expires, ';
560                 $queryStr .=     'or_demand_dt, ';                      
561                 $queryStr .=     'or_demand_time, ';
562                 $queryStr .=     'or_appoint_dt, ';
563                 $queryStr .=     'or_discount_desc, ';                  // 値引き説明
564                 $queryStr .=     'or_currency_id, ';                    
565                 $queryStr .=     'or_subtotal, ';                       
566                 $queryStr .=     'or_discount, ';                       
567                 $queryStr .=     'or_deliv_fee, ';                      
568                 $queryStr .=     'or_charge, ';                 
569                 $queryStr .=     'or_total, ';
570                 $queryStr .=     'or_order_status, ';
571                 $queryStr .=     'or_estimate_dt, ';
572                 $queryStr .=     'or_regist_dt, ';
573                 $queryStr .=     'or_order_dt, ';
574                 $queryStr .=     'or_deliv_dt, ';
575                 $queryStr .=     'or_close_dt, ';
576                 $queryStr .=     'or_pay_dt, ';                         // 支払い日時
577                 $queryStr .=     'or_create_user_id, ';
578                 $queryStr .=     'or_create_dt ';
579                 $queryStr .= ') VALUES (';
580                 $queryStr .=   '?, ';
581                 $queryStr .=   '?, ';
582                 $queryStr .=   '?, ';
583                 $queryStr .=   '?, ';
584                 $queryStr .=   '?, ';
585                 $queryStr .=   '?, ';
586                 $queryStr .=   '?, ';
587                 $queryStr .=   '?, ';
588                 $queryStr .=   '?, ';
589                 $queryStr .=   '?, ';
590                 $queryStr .=   '?, ';
591                 $queryStr .=   '?, ';
592                 $queryStr .=   '?, ';
593                 $queryStr .=   '?, ';
594                 $queryStr .=   '?, ';
595                 $queryStr .=   '?, ';
596                 $queryStr .=   '?, ';
597                 $queryStr .=   '?, ';
598                 $queryStr .=   '?, ';
599                 $queryStr .=   '?, ';
600                 $queryStr .=   '?, ';
601                 $queryStr .=   '?, ';
602                 $queryStr .=   '?, ';
603                 $queryStr .=   '?, ';
604                 $queryStr .=   '?, ';
605                 $queryStr .=   '?, ';
606                 $queryStr .=   '?, ';
607                 $queryStr .=   '?, ';
608                 $queryStr .=   '?, ';
609                 $queryStr .=   '?, ';
610                 $queryStr .=   '?, ';
611                 $queryStr .=   '?, ';
612                 $queryStr .=   '?, ';
613                 $queryStr .=   '?, ';
614                 $queryStr .=   '?, ';
615                 $queryStr .=   '?, ';
616                 $queryStr .=   '?, ';
617                 $queryStr .=   '?, ';
618                 $queryStr .=   '?, ';
619                 $queryStr .=   '?, ';
620                 $queryStr .=   '?, ';
621                 $queryStr .=   '?, ';
622                 $queryStr .=   '?, ';
623                 $queryStr .=   '?, ';
624                 $queryStr .=   '?, ';
625                 $queryStr .=   '?, ';
626                 $queryStr .=   '?, ';
627                 $queryStr .=   '?, ';
628                 $queryStr .=   '?, ';
629                 $queryStr .=   '?, ';
630                 $queryStr .=   '?, ';
631                 $queryStr .=   '?, ';
632                 $queryStr .=   '?, ';
633                 $queryStr .=   '?, ';
634                 $queryStr .=   '?, ';
635                 $queryStr .=   '?, ';
636                 $queryStr .=   '?, ';
637                 $queryStr .=   '?, ';
638                 $queryStr .=   '?, ';
639                 $queryStr .=   '?, ';
640                 $queryStr .=   '?, ';
641                 $queryStr .=   '?, ';
642                 $queryStr .=   '?, ';
643                 $queryStr .=   '?, ';
644                 $queryStr .=   '?, ';
645                 $queryStr .=   '?, ';
646                 $queryStr .=   '?, ';
647                 $queryStr .=   '?, ';
648                 $queryStr .=   '?) ';
649                 $ret = $this->execStatement($queryStr, array($id, $historyIndex, $userId, $lang, $order_no,
650                         $custm_id, $custm_name, $custm_name_kana, $custm_person, $custm_person_kana, $custm_zipcode, $custm_state_id, $custm_address, $custm_address2, $custm_phone, $custm_fax, $custm_email, $custm_country_id, 
651                         $deliv_id, $deliv_name, $deliv_name_kana, $deliv_person, $deliv_person_kana, $deliv_zipcode, $deliv_state_id, $deliv_address, $deliv_address2, $deliv_phone, $deliv_fax, $deliv_email, $deliv_country_id,
652                         $bill_id,  $bill_name,  $bill_name_kana,  $bill_person,  $bill_person_kana,  $bill_zipcode,  $bill_state_id,  $bill_address, $bill_address2,  $bill_phone,  $bill_fax, $bill_email, $bill_country_id,
653                         $deliv_method_id, $pay_method_id, $card_type, $card_owner, $card_number, $card_expires, $demand_dt, $demand_time, $appoint_dt, $discount_desc, $currency_id, $subtotal, $discount, $deliv_fee, $charge, $total,
654                         $order_status, $estimate_dt, $regist_dt, $order_dt, $deliv_dt, $close_dt, $pay_dt,
655                         $updateUserId, $now));
656                         
657                 // 新規のシリアル番号取得
658                 $queryStr = 'select max(or_serial) as ns from order_header ';
659                 $ret = $this->selectRecord($queryStr, array(), $row);
660                 if ($ret) $newSerial = $row['ns'];
661                 return $ret;
662         }
663         /**
664          * 受注詳細の追加
665          *
666          * @param int  $orderId                         受注ID
667          * @param int  $index                           詳細インデックス(0~)
668          * @param string    $productClass       商品クラス
669          * @param int     $productId            商品ID
670          * @param string    $productType        商品タイプ
671          * @param string  $productName          商品名
672          * @param string  $productCode          商品コード
673          * @param float   $unitPrice            税抜き商品単価
674          * @param int     $quantity                     数量
675          * @param float   $tax                          税
676          * @param float   $total                        税込み価格
677          * @param int     $userId                       更新者ID
678          * @param string  $now                          現在日時
679          * @return                                                      true=成功、false=失敗
680          */
681         function addOrderDetail($orderId, $index, $productClass, $productId, $productType, $productName, $productCode, $unitPrice, $quantity, $tax, $total, $userId, $now)
682         {
683                 // 新規レコードを追加
684                 $queryStr  = 'INSERT INTO order_detail (';
685                 $queryStr .=   'od_order_id, ';
686                 $queryStr .=   'od_index, ';
687                 $queryStr .=   'od_product_class, ';
688                 $queryStr .=   'od_product_id, ';
689                 $queryStr .=   'od_product_type_id, ';
690                 $queryStr .=   'od_product_name, ';
691                 $queryStr .=   'od_product_code, ';
692                 $queryStr .=   'od_unit_price, ';
693                 $queryStr .=   'od_quantity, ';
694                 $queryStr .=   'od_tax, ';
695                 $queryStr .=   'od_total, ';
696                 $queryStr .=   'od_create_user_id, ';
697                 $queryStr .=   'od_create_dt ';
698                 $queryStr .= ') VALUES (';
699                 $queryStr .=   '?, ';
700                 $queryStr .=   '?, ';
701                 $queryStr .=   '?, ';
702                 $queryStr .=   '?, ';
703                 $queryStr .=   '?, ';
704                 $queryStr .=   '?, ';
705                 $queryStr .=   '?, ';
706                 $queryStr .=   '?, ';
707                 $queryStr .=   '?, ';
708                 $queryStr .=   '?, ';
709                 $queryStr .=   '?, ';
710                 $queryStr .=   '?, ';
711                 $queryStr .=   '?) ';
712                 $ret = $this->execStatement($queryStr, array($orderId, $index, $productClass, $productId, $productType, $productName, $productCode, $unitPrice, $quantity, $tax, $total, $userId, $now));
713                 return $ret;
714         }
715         /**
716          * 受注詳細一覧を取得
717          *
718          * @param string        $orderId                        受注ID
719          * @param string        $lang                           言語ID
720          * @param function      $callback                       コールバック関数
721          * @return                      なし
722          */
723         function getOrderDetailList($orderId, $lang, $callback)
724         {
725                 $queryStr  = 'SELECT * FROM order_detail LEFT JOIN order_header ON od_order_id = or_id AND or_deleted = false ';
726                 $queryStr .=   'LEFT JOIN currency ON or_currency_id = cu_id AND cu_language_id = ? ';
727                 $queryStr .=   'LEFT JOIN product_type ON od_product_class = py_product_class AND od_product_type_id = py_id AND or_language_id = py_language_id AND py_deleted = false ';
728                 $queryStr .=   'LEFT JOIN photo ON od_product_id = ht_id AND cu_language_id = ht_language_id AND ht_deleted = false ';          // フォトギャラリー画像用
729                 $queryStr .=   'LEFT JOIN product ON od_product_id = pt_id AND cu_language_id = pt_language_id AND pt_deleted = false ';        // 一般商品用
730                 $queryStr .=   'WHERE od_order_id = ? AND od_deleted = false ';
731                 $queryStr .=   'ORDER BY od_index ';
732                 $this->selectLoop($queryStr, array($lang, $orderId), $callback, null);
733         }
734         /**
735          * 発注書を取得
736          *
737          * @param int $userId                   ユーザID兼データ更新ユーザ
738          * @param string  $lang                                 言語
739          * @param array $row                    取得レコード
740          * @return                                              true=成功、false=失敗
741          */
742         function getOrderSheet($userId, $lang, &$row)
743         {
744                 $queryStr = 'SELECT * FROM order_sheet WHERE oe_user_id = ? AND oe_language_id = ?';
745                 $ret = $this->selectRecord($queryStr, array($userId, $lang), $row);
746                 return $ret;
747         }
748         /**
749          * クライアントIDから発注書を取得
750          *
751          * @param string  $clientId             クライアントID
752          * @param array $row                    取得レコード
753          * @return                                              true=成功、false=失敗
754          */
755         function getOrderSheetByClientId($clientId, &$row)
756         {
757                 // 引数エラーチェック
758                 if (empty($clientId)) return false;
759                 
760                 $queryStr = 'SELECT * FROM order_sheet WHERE oe_client_id = ?';
761                 $ret = $this->selectRecords($queryStr, array($clientId), $rows);
762                 if ($ret){
763                         if (count($rows) > 1){          // 2行以上取得できるときはエラー
764                                 return false;
765                         }
766                         if (intval($rows[0]['oe_user_id']) >= 0){               // クライアントIDで取得の場合はユーザIDがマイナス値のみ許可
767                                 return false;
768                         }
769                         $row = $rows[0];
770                 }
771                 return $ret;
772         }
773         /**
774          * 発注書を削除
775          *
776          * @param int $userId                   ユーザID兼データ更新ユーザ
777          * @param string  $lang                 言語
778          * @return                                              true=成功、false=失敗
779          */
780         function delOrderSheet($userId, $lang)
781         {
782                 $startTran = false;                     // この関数でトランザクションを開始したかどうか
783                 
784                 // トランザクション開始
785                 if (!$this->isInTransaction()){
786                         $this->startTransaction();
787                         $startTran = true;
788                 }
789                 
790                 $queryStr  = 'DELETE FROM order_sheet ';
791                 $queryStr .=   'WHERE oe_user_id = ? AND oe_language_id = ?';
792                 $ret = $this->execStatement($queryStr, array($userId, $lang));
793                 
794                 // トランザクション確定
795                 if ($startTran) $ret = $this->endTransaction();
796                 return $ret;
797         }
798         /**
799          * クライアントIDで発注書を削除
800          *
801          * @param string  $clientId             クライアントID
802          * @return                                              true=成功、false=失敗
803          */
804         function delOrderSheetByClientId($clientId)
805         {
806                 $startTran = false;                     // この関数でトランザクションを開始したかどうか
807                 
808                 // トランザクション開始
809                 if (!$this->isInTransaction()){
810                         $this->startTransaction();
811                         $startTran = true;
812                 }
813                 
814                 $queryStr  = 'DELETE FROM order_sheet ';
815                 $queryStr .=   'WHERE oe_client_id = ?';
816                 $ret = $this->execStatement($queryStr, array($clientId));
817                 
818                 // トランザクション確定
819                 if ($startTran) $ret = $this->endTransaction();
820                 return $ret;
821         }
822         /**
823          * 受注情報を取得
824          *
825          * @param int $id                               受注ID
826          * @param array $row                    取得レコード
827          * @return                                              true=成功、false=失敗
828          */
829         function getOrder($id, &$row)
830         {
831                 $queryStr = 'SELECT * FROM order_header WHERE or_id = ? AND or_deleted = false';
832                 $ret = $this->selectRecord($queryStr, array($id), $row);
833                 return $ret;
834         }
835         /**
836          * 受注情報をシリアル番号で取得
837          *
838          * @param int $serial                   シリアル番号
839          * @param array $row                    取得レコード
840          * @return                                              true=成功、false=失敗
841          */
842         function getOrderBySerial($serial, &$row)
843         {
844                 $queryStr = 'SELECT * FROM order_header LEFT JOIN _login_user ON or_create_user_id = lu_id AND lu_deleted = false ';
845                 $queryStr .=  'WHERE or_serial = ?';
846                 $ret = $this->selectRecord($queryStr, array($serial), $row);
847                 return $ret;
848         }
849         /**
850          * 受注情報を注文番号で取得
851          *
852          * @param string $no                    注文番号
853          * @param array $row                    取得レコード
854          * @return                                              true=成功、false=失敗
855          */
856         function getOrderByOrderNo($no, &$row)
857         {
858                 $queryStr  = 'SELECT * FROM order_header LEFT JOIN _login_user ON or_create_user_id = lu_id AND lu_deleted = false ';
859                 $queryStr .=   'WHERE or_deleted = false ';             // 未削除
860                 $queryStr .=     'AND or_order_no = ? ';
861                 $ret = $this->selectRecord($queryStr, array($no), $row);
862                 return $ret;
863         }
864         /**
865          * 最新の受注情報を取得
866          *
867          * @param array $row                    取得レコード
868          * @return                                              true=成功、false=失敗
869          */
870 /*      function getLatestOrder(&$row)
871         {
872                 // 最大シリアル番号取得
873                 $queryStr = 'SELECT max(or_serial) as ms FROM order_header ';
874                 $ret = $this->selectRecord($queryStr, array(), $maxRow);
875                 if ($ret){
876                         $queryStr = 'SELECT * FROM order_header WHERE or_serial = ?';
877                         $ret = $this->selectRecord($queryStr, array($maxRow['ms']), $row);
878                 }
879                 return $ret;
880         }*/
881         /**
882          * 注文番号を取得
883          *
884          * @return string                               注文番号。存在しない場合は空文字列。
885          */
886         function getOrderNo()
887         {
888                 $orderNo = '';
889                 $queryStr = 'SELECT * FROM _used_no WHERE un_id = ?';
890                 $ret = $this->selectRecord($queryStr, array(self::NO_ID), $row);
891                 if ($ret) $orderNo = $row['un_value'];
892                 return $orderNo;
893         }
894         /**
895          * 注文番号を更新
896          *
897          * @param string $no    注文番号
898          * @return                              true=成功、false=失敗
899          */
900         function updateOrderNo($no)
901         {
902                 // データの確認
903                 $queryStr = 'SELECT * FROM _used_no ';
904                 $queryStr .=  'WHERE un_id  = ?';
905                 $ret = $this->isRecordExists($queryStr, array(self::NO_ID));
906                 if ($ret){
907                         $queryStr = "UPDATE _used_no SET un_value = ? WHERE un_id = ?";
908                         return $this->execStatement($queryStr, array($no, self::NO_ID));
909                 } else {
910                         $queryStr = "INSERT INTO _used_no (un_id, un_value) VALUES (?, ?)";
911                         return $this->execStatement($queryStr, array(self::NO_ID, $no));
912                 }
913         }
914         /**
915          * 受注情報削除
916          *
917          * @param int $serialNo                 シリアルNo
918          * @param int $userId                   ユーザID(データ更新者)
919          * @return                                              true=成功、false=失敗
920          */
921         function delOrder($serialNo, $userId)
922         {
923                 $now = date("Y/m/d H:i:s");     // 現在日時
924                                 
925                 // トランザクション開始
926                 $this->startTransaction();
927                 
928                 // 指定のシリアルNoのレコードが削除状態でないかチェック
929                 $queryStr  = 'select * from order_header ';
930                 $queryStr .=   'where or_deleted = false ';             // 未削除
931                 $queryStr .=     'and or_serial = ? ';
932                 $ret = $this->selectRecord($queryStr, array($serialNo), $row);
933                 if (!$ret){             // 存在しない場合は終了
934                         $this->endTransaction();
935                         return false;
936                 }
937                 
938                 // レコードを削除
939                 $queryStr  = 'UPDATE order_header ';
940                 $queryStr .=   'SET or_deleted = true, ';       // 削除
941                 $queryStr .=     'or_update_user_id = ?, ';
942                 $queryStr .=     'or_update_dt = ? ';
943                 $queryStr .=   'WHERE or_serial = ?';
944                 $this->execStatement($queryStr, array($userId, $now, $serialNo));
945                 
946                 // 詳細情報を削除
947                 $queryStr  = 'UPDATE order_detail ';
948                 $queryStr .=   'SET od_deleted = true, ';       // 削除
949                 $queryStr .=     'od_update_user_id = ?, ';
950                 $queryStr .=     'od_update_dt = ? ';
951                 $queryStr .=   'WHERE od_order_id = ? AND od_deleted = false';
952                 $this->execStatement($queryStr, array($userId, $now, $row['or_id']));           
953                 
954                 // トランザクション確定
955                 $ret = $this->endTransaction();
956                 return $ret;
957         }
958         
959         /**
960          * 都道府県を取得
961          *
962          * @param string        $coutryId                       国ID
963          * @param string        $lang                           言語
964          * @param function      $callback                       コールバック関数
965          * @return                      なし
966          */
967         function getAllState($coutryId, $lang, $callback)
968         {
969                 $queryStr = 'SELECT * FROM geo_zone ';
970                 $queryStr .=  'WHERE gz_country_id = ? AND gz_type = 1 AND gz_language_id = ? ';
971                 $queryStr .=  'ORDER BY gz_index ';
972                 $this->selectLoop($queryStr, array($coutryId, $lang), $callback, null);
973         }
974         /**
975          * IDから都道府県名を取得
976          *
977          * @param string        $coutryId                       国ID
978          * @param string        $lang                           言語
979          * @param string        $id                                     地域ID
980          * @return string                                               名前
981          */
982         function getStateName($coutryId, $lang, $id)
983         {
984                 $queryStr = 'SELECT * FROM geo_zone ';
985                 $queryStr .=  'WHERE gz_country_id = ? AND gz_type = 1 AND gz_language_id = ? AND gz_id = ?';
986                 $ret = $this->selectRecord($queryStr, array($coutryId, $lang, $id), $row);
987                 if ($ret){
988                         return $row['gz_name'];
989                 } else {
990                         return '';
991                 }
992         }
993         /**
994          * 配送方法総数を取得
995          *
996          * @param string        $lang           言語
997          * @param int           $setId          セットID
998          * @return int                                  総数
999          */
1000         function getAllDelivMethodCount($lang, $setId = 0)
1001         {
1002 //              $setId = 0;             // デフォルトの定義セット
1003                 $queryStr  = 'SELECT * FROM delivery_method_def ';
1004                 $queryStr .=   'WHERE do_deleted = false ';
1005                 $queryStr .=     'AND do_visible = true ';                      // 表示状態
1006                 $queryStr .=     'AND do_language_id = ? ';
1007                 $queryStr .=     'AND do_set_id = ? ';
1008                 return $this->selectRecordCount($queryStr, array($lang, $setId));
1009         }
1010         /**
1011          * 配送方法を取得
1012          *
1013          * @param string        $lang                           言語
1014          * @param int           $setId          セットID
1015          * @param function      $callback                       コールバック関数
1016          * @return                      なし
1017          */
1018         function getAllDelivMethod($lang, $setId, $callback)
1019         {
1020 //              $setId = 0;             // デフォルトの定義セット
1021                 $queryStr = 'SELECT * FROM delivery_method_def ';
1022                 $queryStr .=  'WHERE do_deleted = false ';
1023                 $queryStr .=  'AND do_visible = true ';                 // 表示状態
1024                 $queryStr .=  'AND do_language_id = ? ';
1025                 $queryStr .=  'AND do_set_id = ? ';
1026                 $queryStr .=  'ORDER BY do_index ';
1027                 $this->selectLoop($queryStr, array($lang, $setId), $callback, null);
1028         }
1029         /**
1030          * 配送方法を取得
1031          *
1032          * @param string        $id                     配送方法ID
1033          * @param string        $lang           言語
1034          * @param int           $setId          セットID
1035          * @param array $row                    取得レコード
1036          * @return                                              true=成功、false=失敗
1037          */
1038         function getDelivMethod($id, $lang, $setId, &$row)
1039         {
1040                 $queryStr = 'SELECT * FROM delivery_method_def ';
1041                 $queryStr .=  'WHERE do_deleted = false ';
1042                 $queryStr .=  'AND do_id = ? ';                 // 表示状態
1043                 $queryStr .=  'AND do_language_id = ? ';
1044                 $queryStr .=  'AND do_set_id = ? ';
1045                 $ret = $this->selectRecord($queryStr, array($id, $lang, $setId), $row);
1046                 return $ret;
1047         }
1048         /**
1049          * 支払い方法総数を取得
1050          *
1051          * @param string        $lang           言語
1052          * @return int                                  総数
1053          */
1054         function getAllPaymentMethodCount($lang)
1055         {
1056                 $setId = 0;             // デフォルトの定義セット
1057                 $queryStr  = 'SELECT * FROM pay_method_def ';
1058                 $queryStr .=   'WHERE po_deleted = false ';
1059                 $queryStr .=    'AND po_visible = true ';                       // 表示状態
1060                 $queryStr .=    'AND po_language_id = ? ';
1061                 $queryStr .=    'AND po_set_id = ? ';
1062                 return $this->selectRecordCount($queryStr, array($lang, $setId));
1063         }
1064         /**
1065          * 支払い方法を取得
1066          *
1067          * @param string        $lang                           言語
1068          * @param function      $callback                       コールバック関数
1069          * @return                      なし
1070          */
1071         function getAllPaymentMethod($lang, $callback)
1072         {
1073                 $setId = 0;             // デフォルトの定義セット
1074                 $queryStr = 'SELECT * FROM pay_method_def ';
1075                 $queryStr .=  'WHERE po_deleted = false ';
1076                 $queryStr .=  'AND po_visible = true ';                 // 表示状態
1077                 $queryStr .=  'AND po_language_id = ? ';
1078                 $queryStr .=  'AND po_set_id = ? ';
1079                 $queryStr .=  'ORDER BY po_index ';
1080                 $this->selectLoop($queryStr, array($lang, $setId), $callback, null);
1081         }
1082         /**
1083          * 支払い方法を取得
1084          *
1085          * @param string        $id                     支払い方法ID
1086          * @param string        $lang           言語
1087          * @param int           $setId          セットID
1088          * @param array $row                    取得レコード
1089          * @return                                              true=成功、false=失敗
1090          */
1091         function getPaymentMethod($id, $lang, $setId, &$row)
1092         {
1093                 $queryStr = 'SELECT * FROM pay_method_def ';
1094                 $queryStr .=  'WHERE po_deleted = false ';
1095                 $queryStr .=  'AND po_id = ? ';                 // 表示状態
1096                 $queryStr .=  'AND po_language_id = ? ';
1097                 $queryStr .=  'AND po_set_id = ? ';
1098                 $ret = $this->selectRecord($queryStr, array($id, $lang, $setId), $row);
1099                 return $ret;
1100         }
1101         /**
1102          * インナーウィジェットのメソッド定義を取得
1103          *
1104          * @param string    $type                       メソッド種別
1105          * @param string        $lang                   言語
1106          * @param array     $rows                       取得レコード
1107          * @return bool                                         true=取得、false=取得せず
1108          */
1109         function getAllIWidgetMethod($type, $lang, &$rows)
1110         {
1111                 $setId = 0;             // デフォルトの定義セット
1112                 $queryStr  = 'SELECT * FROM _iwidget_method ';
1113                 $queryStr .=   'WHERE id_deleted = false ';
1114                 $queryStr .=     'AND id_visible = true ';                      // 表示状態
1115                 $queryStr .=     'AND id_type = ? ';
1116                 $queryStr .=     'AND id_language_id = ? ';
1117                 $queryStr .=     'AND id_set_id = ? ';
1118                 $queryStr .=   'ORDER BY id_index ';
1119                 $retValue = $this->selectRecords($queryStr, array($type, $lang, $setId), $rows);
1120                 return $retValue;
1121         }
1122         /**
1123          * 会員情報を取得
1124          *
1125          * @param int $userId                   ユーザID兼データ更新ユーザ
1126          * @param array $row                    取得レコード
1127          * @return                                              true=成功、false=失敗
1128          */
1129         function getMember($userId, &$row)
1130         {
1131                 $queryStr = 'SELECT * FROM shop_member WHERE sm_login_user_id = ? AND sm_deleted = false';
1132                 $ret = $this->selectRecord($queryStr, array($userId), $row);
1133                 return $ret;
1134         }
1135         /**
1136          * 個人情報を取得
1137          *
1138          * @param int $id                               個人情報ID
1139          * @param array $row                    取得レコード
1140          * @return                                              true=成功、false=失敗
1141          */
1142         function getPersonInfo($id, &$row)
1143         {
1144                 $queryStr = 'SELECT * FROM person_info WHERE pi_id = ? AND pi_deleted = false';
1145                 $ret = $this->selectRecord($queryStr, array($id), $row);
1146                 return $ret;
1147         }
1148         /**
1149          * 住所を取得
1150          *
1151          * @param int $id                               個人情報ID
1152          * @param array $row                    取得レコード
1153          * @return                                              true=成功、false=失敗
1154          */
1155         function getAddress($id, &$row)
1156         {
1157                 $queryStr = 'SELECT * FROM address WHERE ad_id = ? AND ad_deleted = false';
1158                 $ret = $this->selectRecord($queryStr, array($id), $row);
1159                 return $ret;
1160         }
1161         /**
1162          * 受注状況一覧を取得
1163          *
1164          * @param int           $statusMin                      取得する受注状況のステータス範囲(開始)、指定なしの場合は0
1165          * @param int           $statusMax                      取得する受注状況のステータス範囲(終了)、指定なしの場合は0
1166          * @param int           $limit                          取得する項目数
1167          * @param int           $offset                         取得する先頭位置(0~)
1168          * @param function      $callback                       コールバック関数
1169          * @return                      なし
1170          */
1171         function searchOrderHeader($statusMin, $statusMax, $limit, $offset, $callback)
1172         {
1173                 $param = array();
1174                 $queryStr = 'SELECT * FROM order_header LEFT JOIN _login_user ON or_user_id = lu_id AND lu_deleted = false ';
1175                 $queryStr .=  'WHERE or_deleted = false ';// 削除されていない
1176                 if ($statusMin != 0){           // 開始が設定されているとき
1177                         $queryStr .=    'AND or_order_status >= ? ';
1178                         $param[] = $statusMin;
1179                 }
1180                 if ($statusMax != 0){           // 終了が設定されているとき
1181                         $queryStr .=    'AND or_order_status <= ? ';
1182                         $param[] = $statusMax;
1183                 }
1184                 $queryStr .=  'ORDER BY or_id desc limit ' . $limit . ' offset ' . $offset;
1185                 $this->selectLoop($queryStr, $param, $callback, null);
1186         }
1187         /**
1188          * 受注状況一覧数を取得
1189          *
1190          * @param int           $statusMin                      取得する受注状況のステータス範囲(開始)、指定なしの場合は0
1191          * @param int           $statusMax                      取得する受注状況のステータス範囲(終了)、指定なしの場合は0
1192          * @return int                                                  総数
1193          */
1194         function searchOrderHeaderCount($statusMin, $statusMax)
1195         {
1196                 $param = array();
1197                 $queryStr = 'SELECT * FROM order_header LEFT JOIN _login_user ON or_user_id = lu_id AND lu_deleted = false ';
1198                 $queryStr .=  'WHERE or_deleted = false ';// 削除されていない
1199                 if ($statusMin != 0){           // 開始が設定されているとき
1200                         $queryStr .=    'AND or_order_status >= ? ';
1201                         $param[] = $statusMin;
1202                 }
1203                 if ($statusMax != 0){           // 終了が設定されているとき
1204                         $queryStr .=    'AND or_order_status <= ? ';
1205                         $param[] = $statusMax;
1206                 }
1207                 return $this->selectRecordCount($queryStr, $param);
1208         }
1209         /**
1210          * ユーザを指定して、受注状況一覧を取得
1211          *
1212          * @param int           $userId                         ユーザID
1213          * @param function      $callback                       コールバック関数
1214          * @return                      なし
1215          */
1216         function getOrderHeaderByUser($userId, $callback)
1217         {
1218                 $initDt = $this->gEnv->getInitValueOfTimestamp();               // 日時初期化値
1219                 
1220                 $queryStr  = 'SELECT * FROM order_header LEFT JOIN _login_user ON or_user_id = lu_id AND lu_deleted = false ';
1221                 $queryStr .=   'WHERE or_deleted = false ';// 削除されていない
1222                 $queryStr .=     'AND or_user_id = ? ';
1223                 $queryStr .=     'AND or_pay_dt != ? ';         // 支払い済み
1224                 $queryStr .=   'ORDER BY or_id desc';
1225                 $this->selectLoop($queryStr, array($userId, $initDt), $callback);
1226         }
1227         /**
1228          * 指定受注項目が指定ユーザの受注であるか判断
1229          *
1230          * @param int           $orderId                        受注ID
1231          * @param int           $userId                         ユーザID
1232          * @return                      なし
1233          */
1234         function isOrderByUser($orderId, $userId)
1235         {
1236                 $queryStr = 'SELECT * FROM order_header ';
1237                 $queryStr .=  'WHERE or_deleted = false ';// 削除されていない
1238                 $queryStr .=    'AND or_id = ? ';
1239                 $queryStr .=    'AND or_user_id = ? ';
1240                 return $this->isRecordExists($queryStr, array($orderId, $userId));
1241         }
1242         /**
1243          * 受注ステータス名を取得
1244          *
1245          * @param int           $status                         受注ステータス
1246          * @param string        $lang                           言語
1247          * @param array     $row                                レコード
1248          * @return bool                                                 取得 = true, 取得なし= false
1249          */
1250         function getOrderStatusName($status, $lang, &$row)
1251         {
1252                 $queryStr = 'SELECT * FROM order_status ';
1253                 $queryStr .=  'WHERE os_id = ? AND os_language_id = ? ';
1254                 $ret = $this->selectRecord($queryStr, array($status, $lang), $row);
1255                 return $ret;
1256         }
1257         /**
1258          * 受注ステータスを取得
1259          *
1260          * @param string        $coutryId                       国ID
1261          * @param string        $lang                           言語
1262          * @param function      $callback                       コールバック関数
1263          * @return                      なし
1264          */
1265         function getAllOrderStatus($lang, $callback)
1266         {
1267                 $queryStr = 'SELECT * FROM order_status ';
1268                 $queryStr .=  'WHERE os_language_id = ? ';
1269                 $queryStr .=  'ORDER BY os_id ';
1270                 $this->selectLoop($queryStr, array($lang), $callback, null);
1271         }
1272         /**
1273          * ユーザ情報をユーザIDで取得
1274          *
1275          * @param int           $id                                     ユーザID
1276          * @param array     $row                                レコード
1277          * @return bool                                                 取得 = true, 取得なし= false
1278          */
1279         function getLoginUserById($id, &$row)
1280         {
1281                 $queryStr  = 'select * from _login_user ';
1282                 $queryStr .=   'WHERE lu_id = ? AND lu_deleted = false';
1283                 $ret = $this->selectRecord($queryStr, array($id), $row);
1284                 return $ret;
1285         }
1286         /**
1287          * 商品記録を更新
1288          *
1289          * @param int     $id                   商品ID
1290          * @param string  $lang                 言語ID
1291          * @param array $updateParam    更新パラメータ
1292          * @return bool                                 true = 成功、false = 失敗
1293          */
1294         function updateProductRecord($id, $lang, $updateParam)
1295         {
1296                 $now = date("Y/m/d H:i:s");     // 現在日時
1297                 $userId = $this->gEnv->getCurrentUserId();      // 現在のユーザ
1298                 
1299                 // パラメータエラーチェック
1300                 $keys = array_keys($updateParam);
1301                 if (in_array('pe_serial', $keys)) return false;
1302                                 
1303                 // 既存データ取得
1304                 $queryStr = 'SELECT * FROM product_record ';
1305                 $queryStr .=  'WHERE pe_product_id = ? ';
1306                 $queryStr .=    'AND pe_language_id = ? ';
1307                 $ret = $this->selectRecord($queryStr, array($id, $lang), $stockRow);
1308                 if ($ret){      // データが存在するとき
1309                         // ##### データを更新 #####
1310                         // レコード更新
1311                         $queryStr = 'UPDATE product_record ';
1312                         $queryStr .=  'SET ';
1313                         $values = array();
1314                         for ($i = 0; $i < count($keys); $i++){
1315                                 $queryStr .= $keys[$i] . ' = ?, ';
1316                                 $values[] = $updateParam[$keys[$i]];
1317                         }
1318                         $queryStr .= 'pe_update_user_id = ?, '; $values[] = $userId;
1319                         $queryStr .= 'pe_update_dt = ? '; $values[] = $now;
1320                         $queryStr .=  'WHERE pe_serial = ? ';
1321                         $values[] = $stockRow['pe_serial'];
1322                         $ret =$this->execStatement($queryStr, $values);
1323                 } else {
1324                         // ##### データを新規追加 #####
1325                         // 新規レコード追加
1326                         $queryStr = 'INSERT INTO product_record ';
1327                         $queryStr .=  '(';
1328                 
1329                         $valueStr = '(';
1330                         $values = array();
1331                         for ($i = 0; $i < count($keys); $i++){
1332                                 $queryStr .= $keys[$i] . ', ';
1333                                 $valueStr .= '?, ';
1334                                 $values[] = $updateParam[$keys[$i]];
1335                         }
1336                         $queryStr .= 'pe_product_id, pe_language_id, pe_update_user_id, pe_update_dt) ';
1337                         $valueStr .= '?, ?, ?, ?) ';
1338                         $values[] = $id;
1339                         $values[] = $lang;
1340                         $values[] = $userId;
1341                         $values[] = $now;
1342                         
1343                         $queryStr .=  'VALUES ';
1344                         $queryStr .=  $valueStr;
1345                         $ret =$this->execStatement($queryStr, $values);
1346                 }
1347                 return $ret;
1348         }
1349 }
1350 ?>