バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
MPV
投稿日時: 2012/8/30 20:18
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
[EC-CUBE] 2.11.5 → 2.12.1
[レンタルサーバ] WADAX
[OS] Red Hat Linux
[PHP] PHP 5.1.6
[データベース] MySQL 5.0.95
[WEBサーバ] Apache
[ブラウザ] Firefox 14.0.1 Google Chrome 21.0.1180.83 IE9

開発環境

[EC-CUBE] 2.12.1
[レンタルサーバ] なし(XAMPP 1.7.7のため)
[OS] Windows7 Professional
[PHP] PHP 5.3.8
[データベース] MySQL 5.5.16
[WEBサーバ] Apache/2.2.21
[ブラウザ] Firefox 14.0.1 Google Chrome 21.0.1180.83 IE9

お世話になります。

題記の通りなのですが、管理画面で登録済みの受注情報を編集して
数量を変更して更新したところ、注文者情報の表示は変更される
のですが、注文受付メールのテンプレート表示を見ると、
配送情報の数量が前のままで更新されていませんでした。

ソースを自分なりに追ってみたのですが、

data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
の以下の箇所(742〜755行目)

    // 複数配送の場合は配送商品を登録
    if (!SC_Utils_Ex::isBlank($arrAllShipmentItem)) {
        $arrShipmentValues = array();

        foreach ($arrAllShipmentItem[$shipping_index] as $key => $arrItem) {
            $i = 0;
            foreach ($arrItem as $item) {
                $arrShipmentValues[$shipping_index][$i][str_replace('shipment_', '', $key)] = $item;
                $i++;
            }
        }
        $objPurchase->registerShipmentItem($order_id, $shipping_id, $arrShipmentValues[$shipping_index]);
    }


var_dumpで$arrShipmentValues[$shipping_index]を
確認したところ、商品の数量がきちんと入っていない
ようでした。

ただ、複数お届け先や異なるお届け先の場合、
どこからそれぞれの数量を取得して設定するのかが
どうもよくわかっておりません。

ご教授頂ければ幸いです。
どうぞよろしくお願いいたします。<(_ _)>
namacha
投稿日時: 2012/8/31 1:03
対応状況: −−−
半人前
登録日: 2012/7/15
居住地:
投稿: 24
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
eccube-2.11.5ベース&要望に合わせてカスタマイズしたコードに合わせて作ったものなので、もしかしたら整合が合わずにおかしいことになるかも知れませんが、私が対応した時のコードを乗っけておきます。

たしかバグ対策としてはこれだけだったはずですが、漏れてたらすみません。また、下記とは別の良いやり方があれば是非教えてください。

修正1. lfInitMultipleParamで設定しているバリデーション内容がおかしい(これのせいで一部の条件下で金額の再計算時にこける)。

    function lfInitMultipleParam(&$objFormParam) {
        $objFormParam->addParam("商品規格ID", "multiple_product_class_id", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"));
        $objFormParam->addParam("商品コード", "multiple_product_code");
        $objFormParam->addParam("商品名", "multiple_product_name");
        $objFormParam->addParam("規格1", "multiple_classcategory_name1");
        $objFormParam->addParam("規格2", "multiple_classcategory_name2");
        $objFormParam->addParam("単価", "multiple_price", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"), 0);
        $objFormParam->addParam("数量", "multiple_quantity", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"), 0);
        $objFormParam->addParam("配送先住所", "multiple_shipping_id", INT_LEN, 'n', array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
    }


修正2. 複数配送設定とか色々した時に金額の再計算がされない。…というか単価更新前にまき戻る現象対策。

        // 複数配送設定を反映
        case 'multiple_set_to':
            $this->lfInitMultipleParam($objFormParam);
            $objFormParam->setParam($_POST);
            $objFormParam->convParam();
            $this->setMultipleItemTo($objFormParam);

            // 強制再計算をする暫定対応
            $this->arrErr = $this->lfCheckError($objFormParam);
            break;

        // お届け先の追加
        case 'append_shipping':
            $objFormParam->setParam($_POST);
            $objFormParam->convParam();
            $this->addShipping($objFormParam);

            // 強制再計算をする暫定対応
            $this->arrErr = $this->lfCheckError($objFormParam);
            break;


修正3. 色々なパターンで配送情報の金額が反映されない。

function lfCheckError(&$objFormParam)
...
    for($i = 0; $i < $max; $i++)
    {
        ...
        // 配送情報の価格を更新
        // 全配送情報から現在処理中の商品IDを検索
        foreach($arrValues['shipment_product_class_id'] as $shipment_product_class_index => $shipment_product_class_ids)
        {
            // 配送情報の中に現在処理中の商品IDが含まれている場合、価格を更新する
            if(FALSE !== ($product_class_key = array_search($arrValues['product_class_id'][$i], $shipment_product_class_ids)))
            {
                $arrValues['shipment_price'][$shipment_product_class_index][$product_class_key] = $arrValues['price'][$i];
            }
        }

        // 小計の計算
        $subtotal += SC_Helper_DB_Ex::sfCalcIncTax($arrValues['price'][$i]) * $arrValues['quantity'][$i];
        ...
MPV
投稿日時: 2012/8/31 16:49
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
namacha様

ご丁寧な回答を頂きましてありがとうございました。

ご提示頂きました内容を開発環境に取り込んで
確認しましたところ、以下のような結果でした。

複数配送で受注編集後:
 dtb_shipment_itemの数量 ○(更新)

単一お届け先で受注編集後:
 dtb_shipment_itemの数量 ×(前のまま)

異なるお届け先で受注編集後:
 dtb_shipment_itemの数量 ×(前のまま)

単一お届け先や異なるお届け先の場合にも
dtb_shipment_itemにはレコードができているようなので
こちらも更新しないといけないような気がするのですが、
まだ解りかねております。

もしご存知でしたらご教授頂ければ幸いです。
どうぞよろしくお願いいたします。
namacha
投稿日時: 2012/8/31 20:36
対応状況: −−−
半人前
登録日: 2012/7/15
居住地:
投稿: 24
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
引用:

複数配送で受注編集後:
 dtb_shipment_itemの数量 ○(更新)

単一お届け先で受注編集後:
 dtb_shipment_itemの数量 ×(前のまま)

異なるお届け先で受注編集後:
 dtb_shipment_itemの数量 ×(前のまま)

単一お届け先や異なるお届け先の場合にも
dtb_shipment_itemにはレコードができているようなので
こちらも更新しないといけないような気がするのですが、
まだ解りかねております。


状況をうまく汲み取れないので、上記×のところの現象を再現できる手順をお願いしてもよろしいでしょうか?

仮にもし「受注商品情報で数量を更新した後に、計算結果の確認ボタンを押しても、お届け先情報の数量に反映されない」現象のことを言われているのでしたら、
・仕様なのかバグなのか分からない。
(数量の辻褄があっていなくてもDBに登録できる仕様の可能性)
・どの配送先に割り当てて良いか判断ができない。
(数量の更新時に配送先が1つしかなくても、その後に追加したいのかも知れない可能性)
ので、確か直していません。

…というお返事を書きながら同画面を軽く検証していたら、
「受注商品情報で商品を変更した後に、計算結果の確認ボタンを押しても、お届け先情報の商品が変わらない」
ことに気がつきました。しかもそのままDBに登録できますね。

(数量の辻褄があっていなくてもDBに登録できる仕様の可能性)を排除して、doRegister関数あたりで整合性の確認を本格的にしたほうが良い気もしてきました。
MPV
投稿日時: 2012/9/1 12:18
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
namacha様

早々のコメントありがとうございました。

引用:

状況をうまく汲み取れないので、上記×のところの現象を再現できる手順をお願いしてもよろしいでしょうか?


すみません、説明不足でした。

?新規受注が登録されている
?受注編集画面で数量を変更する
?計算結果の再確認を行う
?修正内容で受注登録を行う

というオペレーションです。

引用:

doRegister関数あたりで整合性の確認を本格的にしたほうが良い気もしてきました。


ソースを追って見たのですが、当方もdoRegister関数で
気になる個所がございます。

下記テーブルは配送情報が単一、複数送り先に関わらず
更新処理が行われているように見受けられます。

 ・dtb_order
 ・dtb_order_detail

以下を09/03修正しました:
一方、dtb_shipment_itemは、フロント側での新規購入時に
data/class/helper/SC_Helper_Purchase.php内のcompleteOrderで
登録された後、管理画面側では複数送り先以外は更新処理を
通過しないので更新されていないような・・・。

ですので受注編集時に単一送り先の場合でも
dtb_shipment_itemを更新しないといけないような気がします。
namacha
投稿日時: 2012/9/3 21:41
対応状況: −−−
半人前
登録日: 2012/7/15
居住地:
投稿: 24
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
他の案件が忙しくなってしまい思うように見れていないので、小出しになってしまいすみません。

単一送り先の場合に、見えない数量を更新するのは末尾にあるようなコードでできると思います。

私の中での残件としては、
1. 受注した商品を変更した場合に、配送情報内の商品が更新されず、その情報のままデータベースに登録できる。
→商品を変更、削除した際に、配送情報にある商品のうち、受注情報にない商品を削除すればよい。
が、単一配送の場合にどうするか疑問が残る(画面からは見えないので)。

2. 受注情報と配送情報が矛盾したデータのまま登録できる。
→データベース登録時に、受注情報と配送情報の数量、商品が一致しなければ弾けばよい。

です。やり方によっては1は必要ない気もします。

ちなみにですが、のっけてるコードはあくまで暫定処置なので、ECCUBE側がこの件に対して対策した場合はそちらを適用すべきだと思います。lfCheckErrorで金額の再計算をすること自体がおかしいと思っています。


            // 全配送情報から現在処理中の商品IDを検索
            foreach($arrValues['shipment_product_class_id'] as $shipment_product_class_index => $shipment_product_class_ids)
            {
                // 配送情報の中に現在処理中の商品IDが含まれている場合、価格を更新する
                if(FALSE !== ($product_class_key = array_search($arrValues['product_class_id'][$i], $shipment_product_class_ids)))
                {
                    $arrValues['shipment_price'][$shipment_product_class_index][$product_class_key] = $arrValues['price'][$i];
                    // 配送先が1箇所の場合は数量が見えないので更新しておく
                    if(1 == count($arrValues['shipping_id']))
                    {
                        $arrValues['shipment_quantity'][$shipment_product_class_index][$product_class_key] = $arrValues['quantity'][$i];
                    }
                }
            }
MPV
投稿日時: 2012/9/6 23:34
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
namacha様

コメントを頂きましたのに、当方のお返事が遅れまして
大変申し訳ございませんでした。<(_ _)>

ご提示頂きました暫定コードを取り込んで
確認しましたところ、当方の環境ではやはり
数量は更新できませんでした。

ですので、namacha様が仰られている以下の残件の1

引用:

私の中での残件としては、
1. 受注した商品を変更した場合に、配送情報内の商品が更新されず、その情報のままデータベースに登録できる。
→商品を変更、削除した際に、配送情報にある商品のうち、受注情報にない商品を削除すればよい。
が、単一配送の場合にどうするか疑問が残る(画面からは見えないので)。

2. 受注情報と配送情報が矛盾したデータのまま登録できる。
→データベース登録時に、受注情報と配送情報の数量、商品が一致しなければ弾けばよい。

です。やり方によっては1は必要ない気もします。


に当たっていると思われます。

しかしながら受注情報の修正を管理画面で行った場合に
再度EC-CUBEのメールテンプレートを使用してメールを
お客様宛に再度発送した場合、今の仕様では数量はじめ
namacha様が仰られている配送情報内の商品名などが
更新されずに(しかも受注情報と配送情報が不整合状態で)
表示されてしまいますので問題だと思うのですが・・・。
(単一送り先の場合)

namacha様、コミッターの方々、もし
この仕様につきましてお判りになる方、
お時間がある時にコメント頂ければ幸いです。

どうぞよろしくお願いいたします。
nanasess
投稿日時: 2012/9/7 9:19
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2314
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
2.12 になって, デグレがなかなか収束しませんね...
2.11 で僕が開発した箇所ですが, 2.12 での変更が激しくついていけてません(汗)

きちんと整理した方が良いと思うのですが, なかなか時間がとれず...
隙のある時にでも見てみたいと思います.
MPV
投稿日時: 2012/9/7 23:37
対応状況: −−−
仙人
登録日: 2011/3/27
居住地:
投稿: 309
Re: 【EC-CUBE 2.12.1】受注管理画面で受注を編集してもdtb_shipment_itemの数量が更新されません。
nanasess様

お世話になります。
コメントありがとうございます。

お時間のある時にご覧頂ければ幸いです。
当方も(自分で理解できる範囲ではありますが)
調べてみようと思います。

いつも現状報告ばかりで大変恐縮です。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,971名です
総投稿数は110,019件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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