<?php
/**
 * コンテナクラス
 *
 * PHP versions 5
 *
 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
 *
 * @package    Magic3 Framework
 * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
 * @copyright  Copyright 2006-2009 Magic3 Project.
 * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
 * @version    SVN: $Id: ec_mainConfirmWidgetContainer.php 2363 2009-09-26 14:45:44Z fishbone $
 * @link       http://www.magic3.org
 */
require_once($gEnvManager->getCurrentWidgetContainerPath() .	'/ec_mainBaseWidgetContainer.php');
require_once($gEnvManager->getCurrentWidgetDbPath()	. '/ec_mainOrderDb.php');
require_once($gEnvManager->getCurrentWidgetDbPath()	. '/ec_mainCartDb.php');
require_once($gEnvManager->getCurrentWidgetDbPath() .	'/ec_mainDb.php');
require_once($gEnvManager->getCurrentWidgetDbPath() .	'/productDb.php');

class ec_mainConfirmWidgetContainer extends ec_mainBaseWidgetContainer
{
	private $db;	// DB接続オブジェクト
	private $cartDb;		// カートアクセス用ＤＢオブジェクト
	private $mainDb;
	private $productDb;	// DB接続オブジェクト
	private $deliveryMethod;		// 配送方法
	private $payMethod;			// 支払い方法
	private $orderId;			// 受注ID
	private $userId;
	private $now;				// 現在日時
	private $currency;			// 通貨
	private $createMailData;	// メール送信用の受注データを作成するかどうか
	private $mailData;			// メール送信用の受注データ
	const PRICE_OBJ_ID = "eclib";		// 価格計算オブジェクトID
	const DEFAULT_COUNTRY_ID = 'JPN';	// デフォルト国ID
	const STANDARD_PRICE = 'selling';		// 通常価格
	const ORDER_STATUS_REGIST = 200;			// 登録時のステータス(受注受付)
	// メール連携用定義
	const USE_EMAIL_TO_BACKOFFICE	= 'use_email_to_backoffice';		// EMAIL連携機能が使用可能かどうか
	const MAIL_TO_ORDER_PRODUCT		= 'mail_to_order_product';		// メール送信先(受注登録)
	const MAIL_FROM_ORDER_PRODUCT	= 'mail_from_order_product';		// メール送信元(受注登録)
	const ORDER_PRODUCT_TO_BACKOFFICE_FORM = 'order_product_to_backoffice';		// 受注情報送信用フォーム
	
	/**
	 * コンストラクタ
	 */
	function __construct()
	{
		// 親クラスを呼び出す
		parent::__construct();
		
		// DB接続オブジェクト作成
		$this->db = new ec_mainOrderDb();
		$this->cartDb = new ec_mainCartDb();
		$this->mainDb = new ec_mainDb();
		$this->productDb = new productDb();
		
		// 価格計算用オブジェクト取得
		$this->ecObj = $this->gInstance->getObject(self::PRICE_OBJ_ID);
	}
	/**
	 * テンプレートファイルを設定
	 *
	 * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
	 * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
	 *
	 * @param RequestManager $request		HTTPリクエスト処理クラス
	 * @param object         $param			任意使用パラメータ。そのまま_assign()に渡る
	 * @return string 						テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
	 */
	function _setTemplate($request, &$param)
	{	
		return 'confirm.tmpl.html';
	}
	/**
	 * テンプレートにデータ埋め込む
	 *
	 * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
	 *
	 * @param RequestManager $request		HTTPリクエスト処理クラス
	 * @param object         $param			任意使用パラメータ。_setTemplate()と共有。
	 * @param								なし
	 */
	function _assign($request, &$param)
	{
		$this->now = date("Y/m/d H:i:s");	// 現在日時
		$countryId = self::DEFAULT_COUNTRY_ID;			// デフォルト国ID
		$this->langId	= $this->gEnv->getCurrentLanguage();		// 表示言語を取得
		$this->userId = $this->gEnv->getCurrentUserId();
		$this->currency = $this->ecObj->getDefaultCurrency();		// 通貨
		
		// クッキー読み込み、カートIDを取得
		$cartId = $request->getCookieValue(M3_COOKIE_CART_ID);
		
		$act = $request->trimValueOf('act');
		if ($act == 'order'){			// 購入完了
			if (empty($this->userId)){			// 非会員の購入の場合
				$ret = $this->db->getOrderSheetByClientId($this->gAccess->getClientId(), $row);		// クライアントIDで注文情報を取得
				if (!$ret) $this->db->delOrderSheetByClientId($this->gAccess->getClientId());		// エラーのときはエラーデータを削除
			} else {
				// 受注処理
				$ret = $this->db->getOrderSheet($this->userId, $this->langId, $row);
			}
			if ($ret){			
				// トランザクションスタート
				$this->db->startTransaction();
			
				// 受注No作成
				$orderNo = $this->createOrderNo();

				// 受注ヘッダ作成
				$orderStatus = self::ORDER_STATUS_REGIST;
				$estimateDt = $this->gEnv->getInitValueOfTimestamp();
				$registDt = $this->now;
				$orderDt = $this->gEnv->getInitValueOfTimestamp();
				$delivDt = $this->gEnv->getInitValueOfTimestamp();
				$closeDt = $this->gEnv->getInitValueOfTimestamp();
				$ret = $this->db->updateOrder(0, $this->userId, $this->langId, $orderNo,
					$row['oe_custm_id'], $row['oe_custm_name'], $row['oe_custm_name_kana'], $row['oe_custm_person'], $row['oe_custm_person_kana'],
					$row['oe_custm_zipcode'], $row['oe_custm_state_id'], $row['oe_custm_address1'], $row['oe_custm_address2'], $row['oe_custm_phone'], $row['oe_custm_fax'], $row['oe_custm_email'], $row['oe_custm_country_id'], 
					$row['oe_deliv_id'], $row['oe_deliv_name'], $row['oe_deliv_name_kana'], $row['oe_deliv_person'], $row['oe_deliv_person_kana'],
					$row['oe_deliv_zipcode'], $row['oe_deliv_state_id'], $row['oe_deliv_address1'], $row['oe_deliv_address2'], $row['oe_deliv_phone'], $row['oe_deliv_fax'], $row['oe_deliv_email'], $row['oe_deliv_country_id'],
					$row['oe_bill_id'], $row['oe_bill_name'], $row['oe_bill_name_kana'], $row['oe_bill_person'], $row['oe_bill_person_kana'], 
					$row['oe_bill_zipcode'], $row['oe_bill_state_id'], $row['oe_bill_address1'], $row['oe_bill_address2'], $row['oe_bill_phone'], $row['oe_bill_fax'], $row['oe_bill_email'], $row['oe_bill_country_id'],
					$row['oe_deliv_method_id'], $row['oe_pay_method_id'], $row['oe_card_type'], $row['oe_card_owner'], $row['oe_card_number'], $row['oe_card_expires'],
					$row['oe_demand_dt'], $row['oe_demand_time'], $row['oe_appoint_dt'], $row['oe_currency_id'], $row['oe_subtotal'], $row['oe_discount'], $row['oe_deliv_fee'], $row['oe_charge'], $row['oe_total'],
					$orderStatus, $estimateDt, $registDt, $orderDt, $delivDt, $closeDt,
					$this->userId, $this->now, $this->orderId, $newSerial);
					
				// 受注詳細作成
				// カートの商品を受注明細にコピー
				if (!empty($cartId)){	// カートIDが設定されているとき
					$this->cartDb->getCartItemList($cartId, $this->langId, array($this, 'cartToOrderLoop'));
				}
				
				// トランザクション終了
				$ret = $this->db->endTransaction();
			}
			if ($ret){
				// 配送方法名、決済方法名
				$delivMethodName = '';
				$delivMethodDesc = '';
				$payMethodName = '';
				$payMethodDesc = '';
				
				// データ再取得
				$ret = $this->db->getOrder($this->orderId, $row);
				if ($ret){
					$orderNo = $row['or_order_no'];		// 注文番号
					$name = $row['or_deliv_name'];
					$nameKana = $row['or_deliv_name_kana'];
					$zipcode = $row['or_deliv_zipcode'];
					$address = $row['or_deliv_address1'];
					$address2 = $row['or_deliv_address2'];
					$phone = $row['or_deliv_phone'];
					$this->state = $row['or_deliv_state_id'];
					$this->deliveryMethod = $row['or_deliv_method_id'];		// 配送方法
					$this->payMethod = $row['or_pay_method_id'];		// 支払い方法
					
					// 送料、手数料(メール送信用)
					$deliveryFeeValue = $this->ecObj->getCurrencyPrice($row['or_deliv_fee']);
					$chargeValue = $this->ecObj->getCurrencyPrice($row['or_charge']);

					$deliveryFee = $this->ecObj->convertByCurrencyFormat($this->currency, $this->langId, $row['or_deliv_fee']);
					$total = $this->ecObj->convertByCurrencyFormat($this->currency, $this->langId, $row['or_total']);
					
					$demand_dt = $row['or_demand_dt'];	// 希望日
					$demand_time = $row['or_demand_time'];	// 希望時間帯
					if ($demand_dt != $this->gEnv->getInitValueOfDate() || !empty($demand_time)){
						$note = '配達希望日：' . $this->convertToDispDate($demand_dt) . '&nbsp;' . $this->convertToDispString($demand_time);
					}
					
					// 配送方法名
					if ($this->db->getDelivMethod($this->deliveryMethod, $this->langId, 0/*デフォルトのセットID*/, $row)){
						$delivMethodName = $row['do_name'];
						$delivMethodDesc = $row['do_description'];
					}
					// 支払い方法名
					if ($this->db->getPaymentMethod($this->payMethod, $this->langId, 0/*デフォルトのセットID*/, $row)){
						$payMethodName = $row['po_name'];
						$payMethodDesc = $row['po_description'];
					}
				}
				$this->tmpl->addVar("_widget", "message_bottom", '以上の内容でご注文承りました。');		// メッセージ
				
				// イントラ側へのメール送信用の会員情報を取得
				if (empty($this->userId)){			// 非会員のとき
					$memberNo	= '0';							// 会員No
					$memberName = '[非会員]';					// 会員名
					$email		= $row['or_custm_email'];		// 購入者のEメールアドレス
				} else {
					$ret = $this->db->getMember($this->userId, $memberRow);
					if ($ret){
						if ($memberRow['sm_type'] == 1){		// 個人メンバーのとき
							// 個人情報取得
							$ret = $this->db->getPersonInfo($memberRow['sm_person_info_id'], $personRow);
							if ($ret){
								$ret = $this->db->getAddress($personRow['pi_address_id'], $addressRow);
								if ($ret){
									$memberNo	= $memberRow['sm_member_no'];		// 会員No
									$memberName = $personRow['pi_family_name'] . $personRow['pi_first_name'];		// 会員名
									$email		= $personRow['pi_email'];
								}
							}
						}
					}
				}
				// カートの商品を取得し、表示が終わった後、カートの内容をすべて削除
				$this->total = 0;					// 合計価格
				$this->mailData = '';			// メール送信用の受注データ
				if (!empty($cartId)){	// カートIDが設定されているとき
					$this->createMailData = true;	// メール送信用の受注データを作成する
					$this->cartDb->getCartItemList($cartId, $this->langId, array($this, 'cartLoop'));
					$this->createMailData = false;	// メール送信用の受注データを作成終了
					
					// 受注データに送料、手数料を追加
					$delim = $this->gEnv->getDefaultCsvDelimCode();		// CSV区切りコードを取得
					$this->mailData .= 'delivery' . $delim . $deliveryFeeValue . "\n";
					$this->mailData .= 'charge' . $delim . $chargeValue . "\n";
					
					// カートの内容をすべて削除
					$ret = $this->cartDb->getCartHead($cartId, $this->langId, $row);
					if ($ret) $this->cartDb->deleteProductInCart($row['sh_serial'], 0);
				}
				
				// 受注シートを削除
				if (empty($this->userId)){			// 非会員の購入の場合
					$this->db->delOrderSheetByClientId($this->gAccess->getClientId());
				} else {
					$this->db->delOrderSheet($this->userId, $this->langId);
				}
				
				// ######## イントラ側に受注情報メールを送信 ########
				$this->sendMailToBackoffice(0/*新規登録*/, $orderNo, $memberNo, $email, $memberName/*会員名*/,
						$name, $nameKana, $zipcode, $address/*配送先住所1*/, $address2/*配送先住所2*/, $phone, $this->convertToDateString($demand_dt), $demand_time, $delivMethodName, $payMethodName, '', $this->mailData/*受注明細*/);
			} else {
				$this->setAppErrorMsg('登録処理に失敗しました。');
				
				// カートの商品を取得
				$this->total = 0;					// 合計価格
				if (!empty($cartId)){	// カートIDが設定されているとき
					$this->cartDb->getCartItemList($cartId, $this->langId, array($this, 'cartLoop'));
				}
			}
		} else {
			if (empty($this->userId)){			// 非会員の購入の場合
				$ret = $this->db->getOrderSheetByClientId($this->gAccess->getClientId(), $row);		// クライアントIDで注文情報を取得
				if (!$ret) $this->db->delOrderSheetByClientId($this->gAccess->getClientId());		// エラーのときはエラーデータを削除
			} else {
				$ret = $this->db->getOrderSheet($this->userId, $this->langId, $row);
			}
			if ($ret){
				$name = $row['oe_deliv_name'];
				$nameKana = $row['oe_deliv_name_kana'];
				$zipcode = $row['oe_deliv_zipcode'];
				$address = $row['oe_deliv_address1'];
				$address2 = $row['oe_deliv_address2'];
				$phone = $row['oe_deliv_phone'];
				$this->state = $row['oe_deliv_state_id'];
				$this->deliveryMethod = $row['oe_deliv_method_id'];	// 配送方法
				$this->payMethod = $row['oe_pay_method_id'];		// 支払い方法

				/*$demand_dt = $this->convertToDispDate($row['oe_demand_dt']);	// 希望日
				$demand_time = $row['oe_demand_time'];	// 希望時間帯
				if ($row['oe_demand_dt'] != $this->gEnv->getInitValueOfTimestamp()) $note = '配達希望日：' . $demand_dt . ' ' . $demand_time;*/
				$demand_dt = $row['oe_demand_dt'];	// 希望日
				$demand_time = $row['oe_demand_time'];	// 希望時間帯
				if ($demand_dt != $this->gEnv->getInitValueOfDate() || !empty($demand_time)){
					$note = '配達希望日：' . $this->convertToDispDate($demand_dt) . '&nbsp;' . $this->convertToDispString($demand_time);
				}
								
				// 配送料、合計の作成
				$deliveryFee = $this->ecObj->convertByCurrencyFormat($this->currency, $this->langId, $row['oe_deliv_fee']);
				$charge = $this->ecObj->convertByCurrencyFormat($this->currency, $this->langId, $row['oe_charge']);
				$total = $this->ecObj->convertByCurrencyFormat($this->currency, $this->langId, $row['oe_total']);
			}
			$this->tmpl->addVar("_widget", "message_top", '注文を確定してください。');		// メッセージ
			
			// 確認ボタンを表示
			$this->tmpl->setAttribute('show_confirm', 'visibility', 'visible');
			
			// カートの商品を取得
			$this->total = 0;					// 合計価格
			if (!empty($cartId)){	// カートIDが設定されているとき
				$this->cartDb->getCartItemList($cartId, $this->langId, array($this, 'cartLoop'));
			}
		}
		
		// 入力値を戻す
		$this->tmpl->addVar("_widget", "name", $name);
		$this->tmpl->addVar("_widget", "name_kana", $nameKana);
		$this->tmpl->addVar("_widget", "zipcode", $zipcode);
		$this->tmpl->addVar("_widget", "address", $address);
		$this->tmpl->addVar("_widget", "address2", $address2);
		$this->tmpl->addVar("_widget", "phone", $phone);
		$this->tmpl->addVar("_widget", "delivery_fee", $deliveryFee);
		$this->tmpl->addVar("_widget", "charge", $charge);
		$this->tmpl->addVar("_widget", "total", $total);
				
		// 都道府県を設定
		$this->db->getAllState('JPN', $this->langId, array($this, 'stateLoop'));
		
		// 配送方法を設定
		$delivmethodName = '';
		$delivmethodDesc = '';
		if ($this->db->getDelivMethod($this->deliveryMethod, $this->langId, 0/*デフォルトのセットID*/, $row)){
			$delivmethodName = $row['do_name'];
			$delivmethodDesc = $row['do_description'];
		}
		$this->tmpl->addVar("_widget", "delivmethod_name", $delivmethodName);
		$this->tmpl->addVar("_widget", "delivmethod_desc", $delivmethodDesc);
		$this->tmpl->addVar("_widget", "delivmethod_note", $note);
		
		// 支払い方法を設定
		$paymethodName = '';
		$paymethodDesc = '';
		if ($this->db->getPaymentMethod($this->payMethod, $this->langId, 0/*デフォルトのセットID*/, $row)){
			$paymethodName = $row['po_name'];
			$paymethodDesc = $row['po_description'];
		}
		$this->tmpl->addVar("_widget", "paymethod_name", $paymethodName);
		$this->tmpl->addVar("_widget", "paymethod_desc", $paymethodDesc);
		
		// タイトルのCSSを設定
		$this->tmpl->addVar("_widget", "class", $this->gDesign->getDefaultContentHeadClassString());		// コンテンツヘッダ用CSSクラス
				
		// 遷移先を設定
		$this->tmpl->addVar("_widget", "confirm_url", $this->getUrl($this->gEnv->createCurrentPageUrl() . '&task=confirm', true));		// 確認画面
		$this->tmpl->addVar("_widget", "payment_url", $this->getUrl($this->gEnv->createCurrentPageUrl() . '&task=payment', true));		// 支払い方法画面
	}
	/**
	 * 取得した都道府県をテンプレートに設定する
	 *
	 * @param int $index			行番号(0～)
	 * @param array $fetchedRow		フェッチ取得した行
	 * @param object $param			未使用
	 * @return bool					true=処理続行の場合、false=処理終了の場合
	 */
	function stateLoop($index, $fetchedRow, $param)
	{
		$selected = '';
		if ($fetchedRow['gz_id'] == $this->state){		// 選択中の都道府県
			$selected = 'selected';
		}

		$row = array(
			'value'    => $this->convertToDispString($fetchedRow['gz_id']),			// ID
			'name'     => $this->convertToDispString($fetchedRow['gz_name']),			// 表示名
			'selected' => $selected														// 選択中かどうか
		);
		$this->tmpl->addVars('state_list', $row);
		$this->tmpl->parseTemplate('state_list', 'a');
		return true;
	}
	/**
	 * 取得したデータをテンプレートに設定する
	 *
	 * @param int $index			行番号(0～)
	 * @param array $fetchedRow		フェッチ取得した行
	 * @param object $param			未使用
	 * @return bool					true=処理続行の場合、false=処理終了の場合
	 */
	function cartLoop($index, $fetchedRow, $param)
	{
		$priceStatus = 1;	// 価格が有効であるかどうか
		$id = $fetchedRow['si_product_id'];	// 商品ID
		
		// 商品を取得
		$ret = $this->productDb->getProductByProductId($id, $this->langId, $row, $row2, $row3, $row4, $row5);
		if ($ret){
			$name = $this->convertToDispString($row['pt_name']);		// 名前
			$code = $this->convertToDispString($row['pt_code']);		// 商品コード
			
			// 商品の現在価格を取得
			// 価格を取得
			$priceArray = $this->getPrice($row2, self::STANDARD_PRICE);
			$price = $priceArray['pp_price'];	// 価格
			$currency = $priceArray['pp_currency_id'];	// 通貨
			$taxType = $row['pt_tax_type_id'];					// 税種別
					
			// 価格作成
			$this->ecObj->setCurrencyType($currency, $this->langId);		// 通貨設定
			$this->ecObj->setTaxType($taxType, $this->langId);		// 税種別設定
			$unitPrice = $this->ecObj->getPriceWithTax($price, $dispUnitPrice);	// 税込み価格取得
			
			// 商品が表示不可のときは価格を無効とする
			if (!$row['pt_visible']) $priceStatus = 0;
		} else {
			// 商品情報が取得できないときは価格無効
			$priceStatus = 0;
		}
		
		// 価格が変更のときは、価格を無効にする
		$quantity = $fetchedRow['si_quantity'];
		$subtotal = $fetchedRow['si_subtotal'];
		$oldCurrency = $fetchedRow['si_currency_id'];
		if ($unitPrice * $quantity != $subtotal) $priceStatus = 0;
		if ($oldCurrency != $currency) $priceStatus = 0;
		
		// 通貨情報を取得
		$ret = $this->cartDb->getCurrency($oldCurrency, $this->langId, $row);
		if ($ret){
			$prePrice = $this->convertToDispString($row['cu_symbol']);
			$postPrice = $this->convertToDispString($row['cu_post_symbol']);
		}
		
		// 価格作成
		$this->ecObj->setCurrencyType($oldCurrency, $this->langId);		// 通貨設定
		$this->ecObj->getPriceWithoutTax($subtotal, $dispPrice);		// 小計の表示文字列作成
					
		// 価格の有効判断
		if (!$fetchedRow['si_available']) $priceStatus = 0;
		
		// 小計価格
		$available = '';
		if ($priceStatus == 0) $available = '(無効)';
		$price = $prePrice . $dispPrice . $available;
		
		$this->total += $subtotal;					// 合計価格
		
		// 商品詳細へのリンク
		$url  = '?' . M3_REQUEST_PARAM_OPERATION_COMMAND . '=' . M3_REQUEST_CMD_FIND_WIDGET;
		//$url .= '&' . M3_REQUEST_PARAM_WIDGET_ID . '=' . $this->gEnv->getCurrentWidgetId();
		$url .= '&' . M3_REQUEST_PARAM_WIDGET_ID . '=' . self::TARGET_PRODUCT_WIDGET;		// 商品表示ウィジェットを指定
		$url .= '&' . M3_REQUEST_PARAM_FROM . '=' . $this->gEnv->getCurrentWidgetId();		// 送信元
		$url .= '&' . M3_REQUEST_PARAM_OPERATION_TODO . '=' . urlencode('product=' . $fetchedRow['si_product_id']);
			
		$nameLink = '<a href="' . $this->getUrl($url, true) . '">' . $name . '</a>';
		$row = array(
			'name' => $nameLink,
			'code' => $code,
			'unit_price' => $dispUnitPrice,			// 税込み単価
			'id' => $id,					// 商品ID
			'price' => $price,
			'quantity' => $quantity,
			'price_status' => $priceStatus		// 商品価格が有効かどうか
		);
		$this->tmpl->addVars('itemlist', $row);
		$this->tmpl->parseTemplate('itemlist', 'a');
		
		// メール送信用の受注データを作成
		if ($this->createMailData){	// メール送信用の受注データを作成するかどうか
			$delim = $this->gEnv->getDefaultCsvDelimCode();		// CSV区切りコードを取得
			$mailData = $code . $delim . $name . $delim . $this->ecObj->getCurrencyPrice($unitPrice) . $delim . $quantity . "\n";
			$this->mailData .= $mailData;			// メール送信用の受注データ
		}
		$this->productExists = true;			// カートに商品があるかどうか
		return true;
	}
	/**
	 * 取得したデータをテンプレートに設定する
	 *
	 * @param int $index			行番号(0～)
	 * @param array $fetchedRow		フェッチ取得した行
	 * @param object $param			未使用
	 * @return bool					true=処理続行の場合、false=処理終了の場合
	 */
	function cartToOrderLoop($index, $fetchedRow, $param)
	{
		$id = $fetchedRow['si_product_id'];	// 商品ID
		$quantity = $fetchedRow['si_quantity'];
		$subtotal = $fetchedRow['si_subtotal'];
		
		// 商品を取得
		$ret = $this->productDb->getProductByProductId($id, $this->langId, $row, $row2, $row3, $row4, $row5);
		if ($ret){
			$name = $this->convertToDispString($row['pt_name']);		// 名前
			$code = $this->convertToDispString($row['pt_code']);		// 商品コード
			
			// 商品の現在価格を取得
			// 価格を取得
			$priceArray = $this->getPrice($row2, self::STANDARD_PRICE);
			$price = $priceArray['pp_price'];	// 価格
			$currency = $priceArray['pp_currency_id'];	// 通貨
			$taxType = $row['pt_tax_type_id'];					// 税種別
					
			// 価格作成
			$this->ecObj->setCurrencyType($currency, $this->langId);		// 通貨設定
			$this->ecObj->setTaxType($taxType, $this->langId);		// 税種別設定
			$unitPrice = $this->ecObj->getPriceWithTax($price, $dispUnitPrice);	// 税込み価格取得
			
			// 受注明細を登録
			$tax = $subtotal - $price * $quantity;
			$this->db->addOrderDetail($this->orderId, $index, $id, $name, $price, $quantity, $tax, $subtotal, $this->userId, $this->now);
			
			// 表示在庫数、累積注文数を更新
			$stockCount = $row['pe_stock_count'];
			if (empty($stockCount)) $stockCount = 0;
			$stockCount -= $quantity;
			if ($stockCount < 0) $stockCount = 0;
			$orderCount = $row['pe_sales_count'];
			if (empty($orderCount)) $orderCount = 0;
			$orderCount += $quantity;
			
			$updateParam = array();
			$updateParam['pe_stock_count'] = $stockCount;
			$updateParam['pe_order_count'] = $orderCount;
			$this->productDb->updateProductRecord($id, $this->langId, $updateParam);
		}
		return true;
	}
	/**
	 * 価格取得
	 *
	 * @param array  	$srcRows			価格リスト
	 * @param string	$priceType			価格のタイプ
	 * @return array						取得した価格行
	 */
	function getPrice($srcRows, $priceType)
	{
		for ($i = 0; $i < count($srcRows); $i++){
			if ($srcRows[$i]['pp_price_type_id'] == $priceType){
				return $srcRows[$i];
			}
		}
		return array();
	}
	/**
	 * 受注番号を作成(フォーマット: yyyymmdd-0000)
	 *
	 * @return string					受注番号
	 */
	function createOrderNo()
	{
		$no = '';
		$ret = $this->db->getLatestOrder($latestRow);		// 最新の受注No取得
		if ($ret){
			if (!empty($latestRow['or_order_no'])){
				list($date, $foreNo) = explode('-', $latestRow['or_order_no']);
				$today = date("Ymd");
				if ($date == $today){
					$no = $date . '-' . sprintf("%04d", (intval($foreNo) + 1));
				}
			}
		}

		// 新規作成の場合
		if (empty($no)) $no = date("Ymd-" . '0001');	// 現在日
		return $no;
	}
	/**
	 * イントラネット側に受注登録、更新情報をメール送信する
	 *
	 * @param int $mailType			メールタイプ(0=受注情報登録、1=更新、2=削除)
	 * @param string $orderNo		注文No
	 * @param string $memberNo		会員No
	 * @param string $email			eメール(ログインアカウント)
	 * @param string $memberName			会員名
	 * @param string $delivName		届け先名
	 * @param string $nameKana		会員名カナ
	 * @param string $zipcode		配送先郵便番号
	 * @param string $address1		配送先住所1
	 * @param string $address2		配送先住所2
	 * @param string $phone			配送先電話番号
	 * @param string $demandDt		配達希望日
	 * @param string $demandTime	配達希望時間帯
	 * @param string $delivMethod	配送方法
	 * @param string $payMethod		決済方法
	 * @param string $note			備考
	 * @param string $orderDetail	受注明細データ
	 * @return bool					true=成功、false=失敗
	 */
	function sendMailToBackoffice($mailType, $orderNo, $memberNo, $email, $memberName, $delivName, $nameKana, $zipcode, $address1, $address2, $phone, 
									$demandDt, $demandTime, $delivMethod, $payMethod, $note, $orderDetail)
	{	
		// メール連携許可のときはメールを送信
		if ($this->mainDb->getConfig(self::USE_EMAIL_TO_BACKOFFICE) == '1'){
			$fromAddress = $this->mainDb->getConfig(self::MAIL_FROM_ORDER_PRODUCT);	// 連携メール送信元
			$toAddress = $this->mainDb->getConfig(self::MAIL_TO_ORDER_PRODUCT);		// 連携メール送信先
			
			// 件名の設定
			$operation = '不明';
			if ($mailType == 0){	// 新規登録
				$operation = '受注情報新規';
			} else if ($mailType == 1){	// 更新
				$operation = '受注情報更新';
			} else if ($mailType == 2){	// 削除
				$operation = '受注情報削除';
			}
			$now = date("Y/m/d:H-i-s");	// 現在日時
			$subject = $memberNo . ':' . $memberName . ':' . $now . ':' . $operation;
			$mailParam = array();
			//$mailParam['PASSWORD'] = $password;
			$mailParam['ORDER_NO'] = $orderNo;		// 受注No
			$mailParam['DATE'] = date("Y/m/d");		// 受付日付
			$mailParam['MEMBER_NO'] = $memberNo;
			$mailParam['EMAIL'] = $email;
			$mailParam['NAME'] = $memberName;
			$mailParam['DELIV_NAME'] = $delivName;		// 届け先名
			$mailParam['NAME_KANA'] = $nameKana;
			$mailParam['ZIPCODE'] = $zipcode;
			$mailParam['ADDRESS1'] = $address1;
			$mailParam['ADDRESS2'] = $address2;
			$mailParam['PHONE'] = $phone;
			$mailParam['DEMAND_DATE'] = $demandDt;		// 配達希望日
			$mailParam['DEMAND_TIME'] = $demandTime;	// 配達希望時間帯
			$mailParam['BODY'] = "■明細開始\n" . $orderDetail . "■明細終了\n";		// 受注明細
			$mailParam['DELIV_METHOD'] = $delivMethod;	// 配送方法
			$mailParam['PAY_METHOD'] = $payMethod;	// 決済方法
			$mailParam['NOTE'] = $note;	// 備考
			$ret = $this->gInstance->getMailManager()->sendFormMail(1/*自動送信*/, $this->gEnv->getCurrentWidgetId(), $toAddress, $fromAddress, ''/*返信先*/,
												$subject/*件名*/, self::ORDER_PRODUCT_TO_BACKOFFICE_FORM, $mailParam);// 自動送信
		}
	}
}
?>
