バージョン選択

フォーラム

メニュー

オンライン状況

51 人のユーザが現在オンラインです。 (35 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 51
もっと...

サイト内検索

バグ報告 > 管理機能 > v2.13.0 チケット#2403 商品削除後のシステムエラーについて

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
sumida
投稿日時: 2013/10/8 13:04
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
v2.13.0 チケット#2403 商品削除後のシステムエラーについて
チケット#2403がv2.13.0で積み残しになっていたので、調べてみました。
http://svn.ec-cube.net/open_trac/ticket/2403

システムエラーとなる条件
受注情報編集画面 --> 商品を削除
「複数のお届け先へ」
ここまでは、チケットの通りですが、
もう一つ条件があります。

表示された商品の最後部の商品を削除した場合、システムエラーになります。
(その他の商品を削除しても、システムエラーになりません。)

==========
追記:
上記の条件は、誤りでした。
正しい条件は、複数配送で、配送先の商品を削除したことで、受注情報全体からもその商品が不要になり、削除される場合です。
==========

この状況から、
商品の配列から、削除した商品を外して、前詰めにした結果、配列の最後部に残骸が残っているのではないでしょうか。
残骸のproduct_class_id が '' のため、SQLエラーになった。


data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php

    public 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;
            }
        }
    }

の $objFormParam->setParam($arrUpdateParams); を、コメントにすると、少なくともシステムエラーにはなりませんでした。
sumida
投稿日時: 2013/10/8 17:14
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: v2.13.0 チケット#2403 商品削除後のシステムエラーについて
原因が、判明しました。

追記:
でも、まだすっきりしないような。
確かに削除前の商品数がきているけど、どこから持ってきているのだろう。


classファイル:
削除となる商品を外して、新しい購入商品の一覧を作成していました。
その際、対象となるフィールド名は、
product_id, product_class_id, product_type_id, point_rate, product_code, product_name, classcategory_name1, classcategory_name2, quantity, price, tax_rate, tax_rule
になります。

ここから、本題です。

classファイル:
data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
SQLエラーの発生源(getDetailAndProductsClass)を呼び出す側

        // 商品の種類数
        $max = count($arrValues['quantity']);
        $subtotal = 0;
        $totalpoint = 0;
        $totaltax = 0;
        for ($i = 0; $i < $max; $i++) {
.
.
            // 在庫数のチェック
            $arrProduct = $objProduct->getDetailAndProductsClass($arrValues['product_class_id'][$i]);
.
.
        }

count($arrValues['quantity'])をもとにループさせているため、削除前の商品数になっている。


tplファイル:
data/Smarty/templates/admin/order/edit.tpl
購入商品の一覧を表示する際、

        <table class="list order-edit-products">
            <tr>
                <th class="id">商品コード</th>
                <th class="name">商品名/規格1/規格2</th>
                <th class="price">単価</th>
                <th class="qty">数量</th>
                <th class="price">税込み価格</th>
                <th class="price">小計</th>
            </tr>
            <!--{section name=cnt loop=$arrForm.quantity.value}-->
            <!--{assign var=product_index value="`$smarty.section.cnt.index`"}-->
.
.
                <td class="right"><!--{$price|sfCalcIncTax:$tax_rate:$tax_rule|sfMultiply:$quantity|number_format}-->円</td>
            </tr>
            <!--{/section}-->

$arrForm.quantity.value(数量欄)をもとにループさせているため、削除前の商品数になっている。
(影響はないですが、参考までに、disp.tplも$arrForm.quantity.value(数量欄)をもとにループ)
sumida
投稿日時: 2013/10/8 18:05
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: v2.13.0 チケット#2403 商品削除後のシステムエラーについて
修正案です。
これで、いいのだと思いますが。
data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php

            case 'multiple':
                $objFormParam->setParam($_POST);
                $objFormParam->convParam();
// added
                //複数配送時に各商品の総量を設定
                $this->setProductsQuantity($objFormParam);
// added
                $this->arrErr = $this->lfCheckError($objFormParam);
                break;


追伸:
システムエラーにはなりませんが、修正が以下の部分にも必要です。
(受注情報の商品欄最後部に、商品名等のない空欄が1行できます。)

            case 'append_shipping':
                $objFormParam->setParam($_POST);
                $objFormParam->convParam();
// added
                //複数配送時に各商品の総量を設定
                $this->setProductsQuantity($objFormParam);
// added
                $this->addShipping($objFormParam);
                break;
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は65,895名です
総投稿数は98,040件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2593
4
nanasess
2101
5
umebius
1717
6
yuh
1612
7
red
1422
8
h_tanaka
1038
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.