[Svn-src-all:3581] [version-2_12-dev 22493] IssueID #2035 【受注編集画面】商品の追加、削除、変更を行った時も、複数配送の商品の更新がされない
undertree
admin @ mail.ec-cube.net
2013年 2月 2日 (土) 19:25:53 JST
Subversion committed to /home/svn/open 22493
http://svn.ec-cube.net/open_trac/changeset/22493
┌────────────────────────────┐
│更新者 : undertree │
│更新日時: 2013-02-02 19:25:52 +0900 (土, 02 2月 2013)│
└────────────────────────────┘
Log:
--------------------------------------------------------
IssueID #2035 【受注編集画面】商品の追加、削除、変更を行った時も、複数配送の商品の更新がされない
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_12-dev/data/Smarty/templates/admin/order/edit.tpl
U branches/version-2_12-dev/data/Smarty/templates/admin/order/product_select.tpl
U branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
U branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php
変更: branches/version-2_12-dev/data/Smarty/templates/admin/order/edit.tpl
===================================================================
--- branches/version-2_12-dev/data/Smarty/templates/admin/order/edit.tpl 2013-02-01 09:26:53 UTC (rev 22492)
+++ branches/version-2_12-dev/data/Smarty/templates/admin/order/edit.tpl 2013-02-02 10:25:52 UTC (rev 22493)
@@ -38,7 +38,7 @@
// お届け先名のinputタグのnameを取得
var shipping_data = $('input[name^=shipping_name01]').attr('name');
var shipping_slt = shipping_data.split("shipping_name01");
-
+
var shipping_key = "[0]";
if(shipping_slt.length > 1) {
shipping_key = shipping_slt[1];
@@ -81,6 +81,12 @@
return false;
}
+ $(document).ready(function() {
+ if(<!--{$arrForm.shipping_quantity.value}--> > 1){
+ $("input[name^='quantity[']").attr("disabled","disabled");
+ }
+ });
+
//-->
</script>
<form name="form1" id="form1" method="post" action="?">
@@ -91,6 +97,7 @@
<input type="hidden" name="anchor_key" value="" />
<input type="hidden" id="add_product_id" name="add_product_id" value="" />
<input type="hidden" id="add_product_class_id" name="add_product_class_id" value="" />
+<input type="hidden" id="select_shipping_id" name="select_shipping_id" value="" />
<input type="hidden" id="edit_product_id" name="edit_product_id" value="" />
<input type="hidden" id="edit_product_class_id" name="edit_product_class_id" value="" />
<input type="hidden" id="no" name="no" value="" />
@@ -273,7 +280,9 @@
<h2 id="order_products">
受注商品情報
<a class="btn-normal" href="javascript:;" name="recalculate" onclick="fnModeSubmit('recalculate','anchor_key','order_products');">計算結果の確認</a>
- <a class="btn-normal" href="javascript:;" name="add_product" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?order_id=<!--{$arrForm.order_id.value|h}-->', 'search', '615', '500'); return false;">商品の追加</a>
+ <!--{if $arrForm.shipping_quantity.value <= 1}-->
+ <a class="btn-normal" href="javascript:;" name="add_product" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?order_id=<!--{$arrForm.order_id.value|h}-->&shipping_id=<!--{$top_shipping_id}-->', 'search', '615', '500'); return false;">商品の追加</a>
+ <!--{/if}-->
</h2>
<!--{if $arrErr.product_id}-->
@@ -302,9 +311,11 @@
<input type="hidden" name="classcategory_name1[<!--{$product_index}-->]" value="<!--{$arrForm.classcategory_name1.value[$product_index]|h}-->" id="classcategory_name1_<!--{$product_index}-->" />
<input type="hidden" name="classcategory_name2[<!--{$product_index}-->]" value="<!--{$arrForm.classcategory_name2.value[$product_index]|h}-->" id="classcategory_name2_<!--{$product_index}-->" />
<br />
- <a class="btn-normal" href="javascript:;" name="change" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?no=<!--{$product_index}-->&order_id=<!--{$arrForm.order_id.value|h}-->', 'search', '615', '500'); return false;">変更</a>
- <!--{if count($arrForm.quantity.value) > 1}-->
- <a class="btn-normal" href="javascript:;" name="delete" onclick="fnSetFormVal('form1', 'delete_no', <!--{$product_index}-->); fnModeSubmit('delete_product','anchor_key','order_products'); return false;">削除</a>
+ <!--{if $arrForm.shipping_quantity.value <= 1}-->
+ <a class="btn-normal" href="javascript:;" name="change" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?no=<!--{$product_index}-->&order_id=<!--{$arrForm.order_id.value|h}-->&shipping_id=<!--{$top_shipping_id}-->', 'search', '615', '500'); return false;">変更</a>
+ <!--{if count($arrForm.quantity.value) > 1}-->
+ <a class="btn-normal" href="javascript:;" name="delete" onclick="fnSetFormVal('form1', 'delete_no', <!--{$product_index}-->); fnSetFormVal('form1', 'select_shipping_id', '<!--{$top_shipping_id}-->'); fnModeSubmit('delete_product','anchor_key','order_products'); return false;">削除</a>
+ <!--{/if}-->
<!--{/if}-->
<input type="hidden" name="product_type_id[<!--{$product_index}-->]" value="<!--{$arrForm.product_type_id.value[$product_index]|h}-->" id="product_type_id_<!--{$product_index}-->" />
<input type="hidden" name="product_id[<!--{$product_index}-->]" value="<!--{$arrForm.product_id.value[$product_index]|h}-->" id="product_id_<!--{$product_index}-->" />
@@ -428,6 +439,8 @@
<!--{assign var=key value="shipping_id"}-->
<input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->]" value="<!--{$arrShipping[$key]|default:"0"|h}-->" id="<!--{$key}-->_<!--{$shipping_index}-->" />
<!--{if $arrForm.shipping_quantity.value > 1}-->
+ <h2>届け先商品情報 <a class="btn-normal" href="javascript:;" name="add_product" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?order_id=<!--{$arrForm.order_id.value|h}-->&shipping_id=<!--{$shipping_index}-->', 'search', '615', '500'); return false;">商品の追加</a>
+ </h2>
<!--{assign var=product_quantity value="shipping_product_quantity"}-->
<input type="hidden" name="<!--{$product_quantity}-->[<!--{$shipping_index}-->]" value="<!--{$arrShipping[$product_quantity]|h}-->" />
@@ -458,6 +471,11 @@
<input type="hidden" name="<!--{$key2}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key2][$item_index]|h}-->" />
<input type="hidden" name="<!--{$key3}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key3][$item_index]|h}-->" />
<!--{$arrShipping[$key1][$item_index]|h}-->/<!--{$arrShipping[$key2][$item_index]|default:"(なし)"|h}-->/<!--{$arrShipping[$key3][$item_index]|default:"(なし)"|h}-->
+ <br />
+ <a class="btn-normal" href="javascript:;" name="change" onclick="win03('<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/product_select.php?no=<!--{$item_index}-->&order_id=<!--{$arrForm.order_id.value|h}-->&shipping_id=<!--{$shipping_index}-->', 'search', '615', '500'); return false;">変更</a>
+ <!--{if count($arrForm.quantity.value) > 1}-->
+ <a class="btn-normal" href="javascript:;" name="delete" onclick="fnSetFormVal('form1', 'delete_no', <!--{$item_index}-->);fnSetFormVal('form1', 'select_shipping_id', <!--{$shipping_index}-->); fnModeSubmit('delete_product','anchor_key','order_products'); return false;">削除</a>
+ <!--{/if}-->
</td>
<td class="right">
<!--{assign var=key value="shipment_price"}-->
@@ -466,13 +484,34 @@
</td>
<td class="right">
<!--{assign var=key value="shipment_quantity"}-->
- <!--{$arrShipping[$key][$item_index]|h}-->
- <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key][$item_index]|h}-->" />
+ <span class="attention"><!--{$arrErr[$key][$shipping_index][$item_index]}--></span>
+ <input type="text" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key][$item_index]|h}-->" size="3" class="box3" maxlength="<!--{$arrForm[$key].length}-->" />
</td>
</tr>
<!--{/section}-->
</table>
<!--{/if}-->
+ <!--{else}-->
+ <!-- 配送先が1つでも、shipment_itemを更新するために必要 -->
+ <!--{assign var=product_quantity value="shipping_product_quantity"}-->
+ <input type="hidden" name="<!--{$product_quantity}-->[<!--{$shipping_index}-->]" value="<!--{$arrShipping[$product_quantity]|h}-->" />
+ <!--{section name=item loop=$arrShipping.shipment_product_class_id|@count}-->
+ <!--{assign var=item_index value="`$smarty.section.item.index`"}-->
+ <!--{assign var=key value="shipment_product_class_id"}-->
+ <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key][$item_index]|h}-->" />
+ <!--{assign var=key value="shipment_product_code"}-->
+ <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key][$item_index]|h}-->" />
+ <!--{assign var=key1 value="shipment_product_name"}-->
+ <!--{assign var=key2 value="shipment_classcategory_name1"}-->
+ <!--{assign var=key3 value="shipment_classcategory_name2"}-->
+ <input type="hidden" name="<!--{$key1}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key1][$item_index]|h}-->" />
+ <input type="hidden" name="<!--{$key2}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key2][$item_index]|h}-->" />
+ <input type="hidden" name="<!--{$key3}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key3][$item_index]|h}-->" />
+ <!--{assign var=key value="shipment_price"}-->
+ <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key][$item_index]|h}-->" />
+ <!--{assign var=key value="shipment_quantity"}-->
+ <input type="hidden" name="<!--{$key}-->[<!--{$shipping_index}-->][<!--{$item_index}-->]" value="<!--{$arrShipping[$key][$item_index]|h}-->" />
+ <!--{/section}-->
<!--{/if}-->
<table class="form">
変更: branches/version-2_12-dev/data/Smarty/templates/admin/order/product_select.tpl
===================================================================
--- branches/version-2_12-dev/data/Smarty/templates/admin/order/product_select.tpl 2013-02-01 09:26:53 UTC (rev 22492)
+++ branches/version-2_12-dev/data/Smarty/templates/admin/order/product_select.tpl 2013-02-02 10:25:52 UTC (rev 22493)
@@ -41,12 +41,16 @@
var opner_product_id = 'add_product_id';
var opner_product_class_id = 'add_product_class_id';
var tpl_no = '<!--{$tpl_no}-->';
+ var shipping_id = '<!--{$shipping_id}-->';
if (tpl_no != '') {
opner_product_id = 'edit_product_id';
opner_product_class_id = 'edit_product_class_id';
fm1.getElementById("no").value = escape('<!--{$tpl_no}-->');
}
+ if (shipping_id != '') {
+ fm1.getElementById("select_shipping_id").value = escape('<!--{$shipping_id}-->');
+ }
if (document.getElementById(class1).type == 'select-one' && class1_id == '__unselected') {
err_text = class_name1 + "を選択してください。\n";
}
@@ -135,6 +139,7 @@
<input name="mode" type="hidden" value="search" />
<input name="anchor_key" type="hidden" value="" />
<input name="search_pageno" type="hidden" value="" />
+<input name="shipping_id" type="hidden" value="<!--{$shipping_id}-->" />
<input name="no" type="hidden" value="<!--{$tpl_no|h}-->" />
<table class="form">
<col width="20%" />
変更: branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php 2013-02-01 09:26:53 UTC (rev 22492)
+++ branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php 2013-02-02 10:25:52 UTC (rev 22493)
@@ -66,6 +66,21 @@
'shipment_quantity',
);
+ var $arrProductKeys = array(
+ 'product_id',
+ 'product_class_id',
+ 'product_type_id',
+ 'point_rate',
+ 'product_code',
+ 'product_name',
+ 'classcategory_name1',
+ 'classcategory_name2',
+ 'quantity',
+ 'price',
+ 'tax_rate',
+ 'tax_rule'
+ );
+
// }}}
// {{{ functions
@@ -165,6 +180,8 @@
case 'edit':
$objFormParam->setParam($_POST);
$objFormParam->convParam();
+ //複数配送時に各商品の総量を設定
+ $this->setProductsQuantity($objFormParam);
$this->arrErr = $this->lfCheckError($objFormParam);
if (SC_Utils_Ex::isBlank($this->arrErr)) {
$message = '受注を編集しました。';
@@ -180,6 +197,8 @@
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$objFormParam->setParam($_POST);
$objFormParam->convParam();
+ //複数配送時に各商品の総量を設定
+ $this->setProductsQuantity($objFormParam);
$this->arrErr = $this->lfCheckError($objFormParam);
if (SC_Utils_Ex::isBlank($this->arrErr)) {
$message = '受注を登録しました。';
@@ -203,6 +222,8 @@
case 'deliv':
$objFormParam->setParam($_POST);
$objFormParam->convParam();
+ //複数配送時に各商品の総量を設定
+ $this->setProductsQuantity($objFormParam);
$this->arrErr = $this->lfCheckError($objFormParam);
break;
@@ -212,6 +233,8 @@
$objFormParam->convParam();
$delete_no = $objFormParam->getValue('delete_no');
$this->doDeleteProduct($delete_no, $objFormParam);
+ //複数配送時に各商品の総量を設定
+ $this->setProductsQuantity($objFormParam);
$this->arrErr = $this->lfCheckError($objFormParam);
break;
@@ -220,6 +243,8 @@
$objFormParam->setParam($_POST);
$objFormParam->convParam();
$this->doRegisterProduct($objFormParam);
+ //複数配送時に各商品の総量を設定
+ $this->setProductsQuantity($objFormParam);
$this->arrErr = $this->lfCheckError($objFormParam);
break;
@@ -272,13 +297,13 @@
break;
}
- $this->arrForm = $objFormParam->getFormParamList();
+ $this->arrForm = $objFormParam->getFormParamList();
$this->arrAllShipping = $objFormParam->getSwapArray(array_merge($this->arrShippingKeys, $this->arrShipmentItemKeys));
- $this->arrDelivTime = $objPurchase->getDelivTime($objFormParam->getValue('deliv_id'));
+ $this->top_shipping_id = array_shift((array_keys($this->arrAllShipping)));
+ $this->arrDelivTime = $objPurchase->getDelivTime($objFormParam->getValue('deliv_id'));
$this->tpl_onload .= $this->getAnchorKey($objFormParam);
if ($arrValuesBefore['payment_id'])
$this->arrPayment[$arrValuesBefore['payment_id']] = $arrValuesBefore['payment_method'];
-
}
/**
@@ -333,6 +358,7 @@
$objFormParam->addParam('対応状況', 'status', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NUM_CHECK'));
$objFormParam->addParam('お支払方法名称', 'payment_method');
+
// 受注詳細情報
$objFormParam->addParam('商品種別ID', 'product_type_id', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NUM_CHECK'), '0');
$objFormParam->addParam('単価', 'price', INT_LEN, 'n', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NUM_CHECK'), '0');
@@ -406,6 +432,7 @@
$objFormParam->addParam('商品項番', 'no', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'));
$objFormParam->addParam('追加商品規格ID', 'add_product_class_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'));
$objFormParam->addParam('修正商品規格ID', 'edit_product_class_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'));
+ $objFormParam->addParam('対象届け先ID', 'select_shipping_id', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'));
$objFormParam->addParam('アンカーキー', 'anchor_key', STEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
}
@@ -743,8 +770,9 @@
$arrAllShipmentItem = $objFormParam->getSwapArray($this->arrShipmentItemKeys);
$arrDelivTime = $objPurchase->getDelivTime($objFormParam->getValue('deliv_id'));
-
+ //商品単価を複数配送にも適応
$arrShippingValues = array();
+ $arrIsNotQuantityUp = array();
foreach ($arrAllShipping as $shipping_index => $arrShipping) {
$shipping_id = $arrShipping['shipping_id'];
$arrShippingValues[$shipping_index] = $arrShipping;
@@ -754,23 +782,14 @@
$arrShipping['shipping_date_month'],
$arrShipping['shipping_date_day']);
- //商品単価、数量を複数配送にも反映する
+ //商品単価を複数配送にも反映する
foreach ($arrDetail as $product_detail) {
foreach ($arrAllShipmentItem[$shipping_index]['shipment_product_class_id'] as $relation_index => $shipment_product_class_id) {
if($product_detail['product_class_id'] == $shipment_product_class_id){
$arrAllShipmentItem[$shipping_index]['shipment_price'][$relation_index] = $product_detail['price'];
- foreach ($arrStockData as $arrStock) {
- //数量は先頭の届け先のみ増加
- if($arrStock['product_class_id'] == $shipment_product_class_id && $arrIsNotQuantityUp[$shipment_product_class_id] != true){
- $arrIsNotQuantityUp[$shipment_product_class_id] = true;
- $arrAllShipmentItem[$shipping_index]['shipment_quantity'][$relation_index] -= $arrStock['quantity'];
- break;
- }
- }
}
}
}
-
// 配送業者IDを取得
$arrShippingValues[$shipping_index]['deliv_id'] = $objFormParam->getValue('deliv_id');
@@ -792,6 +811,7 @@
$arrShipmentValues[$shipping_index]);
}
}
+
$objPurchase->registerShipping($order_id, $arrShippingValues, false);
$objQuery->commit();
return $order_id;
@@ -810,72 +830,10 @@
if (SC_Utils_Ex::isBlank($product_class_id)) {
$product_class_id = $objFormParam->getValue('edit_product_class_id');
$changed_no = $objFormParam->getValue('no');
+ $this->shipmentEditProduct($objFormParam, $product_class_id, $changed_no);
+ }else{
+ $this->shipmentAddProduct($objFormParam, $product_class_id);
}
- // FXIME バリデーションを通さず $objFormParam の値で DB 問い合わせしている。(管理機能ため、さほど問題は無いと思うものの…)
-
- // 商品規格IDが指定されていない場合、例外エラーを発生
- if (strlen($product_class_id) === 0) {
- trigger_error('商品規格指定なし', E_USER_ERROR);
- }
-
- // 選択済みの商品であれば数量を1増やす
- $exists = false;
- $arrExistsProductClassIds = $objFormParam->getValue('product_class_id');
- foreach ($arrExistsProductClassIds as $key => $value) {
- $exists_product_class_id = $arrExistsProductClassIds[$key];
- if ($exists_product_class_id == $product_class_id) {
- $exists = true;
- $exists_no = $key;
- $arrExistsQuantity = $objFormParam->getValue('quantity');
- $arrExistsQuantity[$key]++;
- $objFormParam->setValue('quantity', $arrExistsQuantity);
- }
- }
-
- // 新しく商品を追加した場合はフォームに登録
- // 商品を変更した場合は、該当行を変更
- if (!$exists) {
- $objProduct = new SC_Product_Ex();
- $arrProduct = $objProduct->getDetailAndProductsClass($product_class_id);
-
- // 一致する商品規格がない場合、例外エラーを発生
- if (empty($arrProduct)) {
- trigger_error('商品規格一致なし', E_USER_ERROR);
- }
-
- $arrProduct['quantity'] = 1;
- $arrProduct['price'] = $arrProduct['price02'];
- $arrProduct['tax_rate'] = $objFormParam->getValue('order_tax_rate') == '' ? $this->arrInfo['tax'] : $objFormParam->getValue('order_tax_rate');
- $arrProduct['tax_rule'] = $objFormParam->getValue('order_tax_rule') == '' ? $this->arrInfo['tax_rule'] : $objFormParam->getValue('order_tax_rule');
- $arrProduct['product_name'] = $arrProduct['name'];
-
- $arrUpdateKeys = array(
- 'product_id', 'product_class_id', 'product_type_id', 'point_rate',
- 'product_code', 'product_name', 'classcategory_name1', 'classcategory_name2',
- 'quantity', 'price', 'tax_rate', 'tax_rule'
- );
- foreach ($arrUpdateKeys as $key) {
- $arrValues = $objFormParam->getValue($key);
- // FIXME getValueで文字列が返る場合があるので配列であるかをチェック
- if (!is_array($arrValues)) {
- $arrValues = array();
- }
-
- if (isset($changed_no)) {
- $arrValues[$changed_no] = $arrProduct[$key];
- } else {
- $added_no = 0;
- if (is_array($arrExistsProductClassIds)) {
- $added_no = count($arrExistsProductClassIds);
- }
- $arrValues[$added_no] = $arrProduct[$key];
- }
- $objFormParam->setValue($key, $arrValues);
- }
- } elseif (isset($changed_no) && $exists_no != $changed_no) {
- // 変更したが、選択済みの商品だった場合は、変更対象行を削除。
- $this->doDeleteProduct($changed_no, $objFormParam);
- }
}
/**
@@ -886,21 +844,32 @@
* @return void
*/
function doDeleteProduct($delete_no, &$objFormParam) {
- $arrDeleteKeys = array(
- 'product_id', 'product_class_id', 'product_type_id', 'point_rate',
- 'product_code', 'product_name', 'classcategory_name1', 'classcategory_name2',
- 'quantity', 'price', 'tax_rate', 'tax_rule'
- );
- foreach ($arrDeleteKeys as $key) {
- $arrNewValues = array();
- $arrValues = $objFormParam->getValue($key);
- foreach ($arrValues as $index => $val) {
- if ($index != $delete_no) {
- $arrNewValues[] = $val;
+
+ $select_shipping_id = $objFormParam->getValue('select_shipping_id');
+
+ //変更前のproduct_class_idが他の届け先にも存在するか
+ $arrPreShipmentProductClassIds = $objFormParam->getValue('shipment_product_class_id');
+ $arrPreProductClassIds = $objFormParam->getValue('product_class_id');
+ $delete_product_class_id = $arrPreShipmentProductClassIds[$select_shipping_id][$delete_no];
+
+ //配送先データ削除
+ $arrNewShipments = $this->deleteShipment($objFormParam, $this->arrShipmentItemKeys , $select_shipping_id, $delete_no);
+ $objFormParam->setParam($arrNewShipments);
+
+ $is_product_delete = true;
+ foreach ($arrNewShipments['shipment_product_class_id'] as $shipping_id => $arrShipmentProductClassIds) {
+ foreach ($arrShipmentProductClassIds as $relation_index => $shipment_product_class_id) {
+ if(in_array($delete_product_class_id, $arrShipmentProductClassIds)){
+ $is_product_delete = false;
+ break;
}
}
- $objFormParam->setValue($key, $arrNewValues);
}
+
+ //商品情報から削除
+ if($is_product_delete){
+ $this->checkDeleteProducts($objFormParam, $arrPreProductClassIds, $delete_product_class_id, $this->arrProductKeys);
+ }
}
/**
@@ -948,4 +917,240 @@
}
return '';
}
-}
+
+ /**
+ * 商品を追加
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @param integer $add_product_class_id 追加商品規格ID
+ * @return void
+ */
+ function shipmentAddProduct(&$objFormParam, $add_product_class_id){
+
+ //複数配送に商品情報追加
+ $select_shipping_id = $objFormParam->getValue('select_shipping_id');
+
+ //届け先に選択済みの商品がある場合
+ $arrShipmentProducts = $this->getShipmentProducts($objFormParam);
+
+ if(in_array($add_product_class_id, $arrShipmentProducts['shipment_product_class_id'][$select_shipping_id])){
+ foreach ($arrShipmentProducts['shipment_product_class_id'][$select_shipping_id] as $relation_index => $shipment_product_class_id) {
+ if($shipment_product_class_id == $add_product_class_id){
+ $arrShipmentProducts['shipment_quantity'][$select_shipping_id][$relation_index]++;
+ break;
+ }
+ }
+ }else{
+
+ //届け先に選択商品がない場合
+ $objProduct = new SC_Product_Ex();
+ $arrAddProductInfo = $objProduct->getDetailAndProductsClass($add_product_class_id);
+
+ $arrShipmentProducts['shipment_product_class_id'][$select_shipping_id][] = $add_product_class_id;
+ $arrShipmentProducts['shipment_product_code'][$select_shipping_id][] = $arrAddProductInfo['product_code'];
+ $arrShipmentProducts['shipment_product_name'][$select_shipping_id][] = $arrAddProductInfo['name'];
+ $arrShipmentProducts['shipment_price'][$select_shipping_id][] = $arrAddProductInfo['price02'];
+ $arrShipmentProducts['shipment_quantity'][$select_shipping_id][] = 1;
+
+ //受注商品情報に追加
+ $arrPreProductClassIds = $objFormParam->getValue('product_class_id');
+ $arrProducts = $this->checkInsertOrderProducts($objFormParam, $arrPreProductClassIds, $add_product_class_id, $arrAddProductInfo);
+ $objFormParam->setParam($arrProducts);
+ }
+ $objFormParam->setParam($arrShipmentProducts);
+ }
+
+ /**
+ * 商品を変更
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @param integer $add_product_class_id 変更商品規格ID
+ * @param integer $change_no 変更対象
+ * @return void
+ */
+ function shipmentEditProduct(&$objFormParam, $edit_product_class_id, $change_no){
+ $arrPreProductClassIds = $objFormParam->getValue('product_class_id');
+ $select_shipping_id = $objFormParam->getValue('select_shipping_id');
+
+ $arrShipmentProducts = $this->getShipmentProducts($objFormParam);
+
+ //既にあるデータは1つだけ数量を1増やす
+ $pre_shipment_product_class_id = $arrShipmentProducts['shipment_product_class_id'][$select_shipping_id][$change_no];
+ if($pre_shipment_product_class_id == $edit_product_class_id) {
+ $arrShipmentProducts['shipment_quantity'][$select_shipping_id][$change_no] ++;
+ }elseif(in_array($edit_product_class_id, $arrShipmentProducts['shipment_product_class_id'][$select_shipping_id])){
+ //配送先データ削除
+ $arrShipmentProducts = $this->deleteShipment($objFormParam, $this->arrShipmentItemKeys , $select_shipping_id, $change_no);
+ foreach ($arrShipmentProducts['shipment_product_class_id'][$select_shipping_id] as $relation_index => $shipment_product_class_id) {
+ if($shipment_product_class_id == $edit_product_class_id){
+ $arrShipmentProducts['shipment_quantity'][$select_shipping_id][$relation_index] ++;
+ break;
+ }
+ }
+ }else{
+ $objProduct = new SC_Product_Ex();
+ $arrAddProductInfo = $objProduct->getDetailAndProductsClass($edit_product_class_id);
+
+ //上書き
+ $this->changeShipmentProducts($arrShipmentProducts, $arrAddProductInfo, $select_shipping_id, $change_no);
+ //受注商品情報に追加
+ $arrProducts = $this->checkInsertOrderProducts($objFormParam, $arrPreProductClassIds, $edit_product_class_id, $arrAddProductInfo);
+ $objFormParam->setParam($arrProducts);
+ }
+ $objFormParam->setParam($arrShipmentProducts);
+
+ //更新のみの場合、全配列を持っていないので、新しい配列を取得
+ $arrNewShipmentProducts = $this->getShipmentProducts($objFormParam);
+ $is_product_delete = true;
+ //変更前のproduct_class_idが他の届け先にも存在するか
+ foreach ($arrNewShipmentProducts['shipment_product_class_id'] as $shipping_id => $arrShipmentProductClassIds) {
+ if(in_array($pre_shipment_product_class_id, $arrShipmentProductClassIds)){
+ $is_product_delete = false;
+ break;
+ }
+ }
+
+ //商品情報から削除
+ if($is_product_delete){
+ $this->checkDeleteProducts($objFormParam, $arrPreProductClassIds, $pre_shipment_product_class_id, $this->arrProductKeys);
+ }
+ }
+
+ /**
+ * 複数配送のパラメータを取り出す
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @return array 配送データ
+ */
+ function getShipmentProducts(&$objFormParam){
+ $arrShipmentProducts['shipment_product_class_id'] = $objFormParam->getValue('shipment_product_class_id');
+ $arrShipmentProducts['shipment_product_code'] = $objFormParam->getValue('shipment_product_code');
+ $arrShipmentProducts['shipment_product_name'] = $objFormParam->getValue('shipment_product_name');
+ $arrShipmentProducts['shipment_classcategory_name1'] = $objFormParam->getValue('shipment_classcategory_name1');
+ $arrShipmentProducts['shipment_classcategory_name2'] = $objFormParam->getValue('shipment_classcategory_name2');
+ $arrShipmentProducts['shipment_price'] = $objFormParam->getValue('shipment_price');
+ $arrShipmentProducts['shipment_quantity'] = $objFormParam->getValue('shipment_quantity');
+
+ return $arrShipmentProducts;
+ }
+
+ /**
+ * 変更対象のデータを上書きする
+ *
+ * @param array $arrShipmentProducts 変更対象配列
+ * @param array $arrProductInfo 上書きデータ
+ * @param integer $shipping_id 配送先ID
+ * @param array $no 変更対象
+ * @return void
+ */
+ function changeShipmentProducts(&$arrShipmentProducts, $arrProductInfo, $shipping_id, $no){
+ $arrShipmentProducts['shipment_product_class_id'][$shipping_id][$no] = $arrProductInfo['product_class_id'];
+ $arrShipmentProducts['shipment_product_code'][$shipping_id][$no] = $arrProductInfo['product_code'];
+ $arrShipmentProducts['shipment_product_name'][$shipping_id][$no] = $arrProductInfo['name'];
+ $arrShipmentProducts['shipment_classcategory_name1'][$shipping_id][$no] = $arrProductInfo['classcategory_name1'];
+ $arrShipmentProducts['shipment_classcategory_name2'][$shipping_id][$no] = $arrProductInfo['classcategory_name2'];
+ $arrShipmentProducts['shipment_price'][$shipping_id][$no] = $arrProductInfo['price02'];
+ $arrShipmentProducts['shipment_quantity'][$shipping_id][$no] = 1;
+ }
+
+ /**
+ * 商品側の総量計算&セット
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @return void
+ */
+ function setProductsQuantity(&$objFormParam){
+ $arrShipmentsItems = $objFormParam->getSwapArray(array('shipment_product_class_id','shipment_quantity'));
+ foreach ($arrShipmentsItems as $arritems) {
+ foreach ($arritems['shipment_product_class_id'] as $relation_index => $shipment_product_class_id) {
+ $arrUpdateQuantity[$shipment_product_class_id] += $arritems['shipment_quantity'][$relation_index];
+ }
+ }
+
+ $arrProductsClass = $objFormParam->getValue('product_class_id');
+ $arrProductsQuantity = $objFormParam->getValue('quantity');
+ foreach ($arrProductsClass as $relation_key => $product_class_id) {
+ $arrQuantity['quantity'][$relation_key] = $arrUpdateQuantity[$product_class_id];
+ }
+ $objFormParam->setParam($arrQuantity);
+ }
+
+ /**
+ * 削除対象の確認、削除をする
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @param array $arrProductClassIds 削除対象配列の商品規格ID
+ * @param integer $delete_product_class_id 削除商品規格ID
+ * @param array $arrDeleteKeys 削除項目
+ * @return void
+ */
+ function checkDeleteProducts(&$objFormParam, $arrProductClassIds, $delete_product_class_id, $arrDeleteKeys){
+ foreach ($arrProductClassIds as $relation_index => $product_class_id) {
+ //product_class_idの重複はないので、1つ削除したら完了
+ if($product_class_id == $delete_product_class_id){
+ foreach ($arrDeleteKeys as $delete_key) {
+ $arrProducts = $objFormParam->getValue($delete_key);
+ foreach ($arrProducts as $index => $product_info) {
+ if($index != $relation_index){
+ $arrUpdateParams[$delete_key][] = $product_info;
+ }
+ }
+ $objFormParam->setParam($arrUpdateParams);
+ }
+ break;
+ }
+ }
+ }
+
+ /**
+ * 配送先商品の削除の削除
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @param array $arrShipmentDeleteKeys 削除項目
+ * @param integer $delete_shipping_id 削除配送ID
+ * @param array $delete_no 削除対象
+ * @return void
+ */
+ function deleteShipment(&$objFormParam, $arrShipmentDeletKeys, $delete_shipping_id, $delete_no){
+ foreach ($arrShipmentDeletKeys as $delete_key) {
+ $arrShipments = $objFormParam->getValue($delete_key);
+ foreach ($arrShipments as $shipp_id => $arrKeyData){
+ foreach ($arrKeyData as $relation_index => $shipment_info) {
+ if($relation_index != $delete_no || $shipp_id != $delete_shipping_id){
+ $arrUpdateParams[$delete_key][$shipp_id][] = $shipment_info;
+ }
+ }
+ }
+ }
+ //$objFormParam->setParam($arrUpdateParams);
+ return $arrUpdateParams;
+ }
+
+
+ /**
+ * 受注商品一覧側に商品を追加
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @param array $arrProductClassIds 対象配列の商品規格ID
+ * @param integer $indert_product_class_id 追加商品規格ID
+ * @param array $arrAddProductInfo 追加データ
+ * @return array $arrAddProducts 更新データ
+ */
+ function checkInsertOrderProducts(&$objFormParam, $arrProductClassIds, $insert_product_class_id, $arrAddProductInfo){
+ if(!in_array($insert_product_class_id, $arrProductClassIds)){
+ $arrAddProductInfo['product_name'] = ($arrAddProductInfo['product_name'])? $arrAddProductInfo['product_name']:$arrAddProductInfo['name'];
+ $arrAddProductInfo['price'] = ($arrAddProductInfo['price'])? $arrAddProductInfo['price']:$arrAddProductInfo['price02'];
+ $arrAddProductInfo['quantity'] = 1;
+ $arrAddProductInfo['tax_rate'] = ($objFormParam->getValue('order_tax_rate') == '')? $this->arrInfo['tax'] :$objFormParam->getValue('order_tax_rate');
+ $arrAddProductInfo['tax_rule'] = ($objFormParam->getValue('order_tax_rule') == '')? $this->arrInfo['tax_rule']:$objFormParam->getValue('order_tax_rule');
+ foreach ($this->arrProductKeys as $insert_key) {
+ $arrAddProducts[$insert_key] = $objFormParam->getValue($insert_key);
+ $arrAddProducts[$insert_key][] = $arrAddProductInfo[$insert_key];
+ }
+ return $arrAddProducts;
+ }else{
+ //受注商品の数量は、複数配送側の集計で出しているので、重複しても数量を増やさない。
+ return null;
+ }
+ }
+}
\ No newline at end of file
変更: branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php 2013-02-01 09:26:53 UTC (rev 22492)
+++ branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php 2013-02-02 10:25:52 UTC (rev 22493)
@@ -77,6 +77,7 @@
$objFormParam->convParam();
$this->tpl_no = $this->getNo(array($_GET,$_POST));
+ $this->shipping_id = $this->getShippingId(array($_GET,$_POST));
switch ($this->getMode()) {
case 'search':
@@ -251,6 +252,20 @@
}
/**
+ * リクエストパラメーター shipping_id を取ってくる。
+ * @param unknown_type $globalParams
+ */
+ function getShippingId($globalParams) {
+ foreach ($globalParams as $params) {
+ if (isset($params['shipping_id']) && $params['shipping_id']!= '') {
+ return intval($params['shipping_id']);
+ }
+ }
+ return null;
+ }
+
+
+ /**
* 取得している並び順で並び替え
* @param $arrProduct_id
* @param $productList
@@ -285,5 +300,6 @@
$objFormParam->addParam('カテゴリID', 'search_category_id', STEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK', 'SPTAB_CHECK'));
$objFormParam->addParam('商品コード', 'search_product_code', LTEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK', 'SPTAB_CHECK'));
$objFormParam->addParam('フッター', 'footer', LTEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK', 'SPTAB_CHECK'));
+ $objFormParam->addParam('届け先ID', 'shipping_id', LTEXT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'));
}
}
Svn-src-all メーリングリストの案内