バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > お届け時間→時間指定がおかしい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ehptj
投稿日時: 2010/1/22 23:30
対応状況: −−−
新米
登録日: 2010/1/22
居住地:
投稿: 9
お届け時間→時間指定がおかしい
EC-CUBE 2.4.2
OS Linux18:49:47 EDT 2008 i686
DBサーバ PostgreSQL 8.1.11
WEBサーバ Apache/2.2.3 (CentOS)
PHP 5.1.6
GD Loaded
*****************************************
はじめまして。よろしくお願いします。
レジ画面にて、お届け時間の指定をした時間と
注文確認画面にて、実際に出てくるお届け時間がまったく違いまあした。

たとえば、
レジ画面にて「午前中」とプルダウンで指定したものが、
注文確認画面では、「午後」と表記されています。

同じように「12:00〜14:00」と指定すると「16:00〜18:00」とされてしまいます。

このまま注文すると受注画面には間違った方の時間が入ってしまいます。
通販ではかなり深刻な問題だと思うのですが、私の環境だけでしょうか?

現在の対処法は、配送業者登録の画面で
配送時間16に20:00〜21:00
配送時間15に18:00〜20:00
配送時間14に16:00〜18:00
・・・・・・・・・・・・
と一番下から登録して、配送時間1から6くらいまでは悪さをするので空欄にして使わない設定にしました。
これで逃げることが出来ました。

根本的な解決にはなっていませんが同様のことでお悩みの方の一助になれば。。。

以上、よろしくお願いいたします。

seasoft
投稿日時: 2010/1/23 11:31
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: お届け時間→時間指定がおかしい
EC-CUBEコミュニティ(eccube-comu) では、解決済みなのですが、正式版では対応できていなかったのですね。

これ結構根が深い問題なんですよね・・・

たしか、DB 定義から変なので、2.4系での解決は難しいかもしれません。
2.5.0 では、改修されると思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

ramrun
投稿日時: 2010/1/23 11:48
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: お届け時間→時間指定がおかしい
ehptj
投稿日時: 2010/1/23 15:29
対応状況: −−−
新米
登録日: 2010/1/22
居住地:
投稿: 9
Re: お届け時間→時間指定がおかしい
seesoft様 ramrun様

早速のご返信ありがとうございます。
根深いところの問題とのことですので、そことは戦わず、かわしていきたいと思います。

バージョン2.5に期待いたします。

ありがとうございました。
homan
投稿日時: 2010/1/28 16:59
対応状況: −−−
仙人
登録日: 2007/7/2
居住地: 宮崎県宮崎市
投稿: 633
Re: お届け時間→時間指定がおかしい
EC-CUBE2.4.1で調べてみたんですが、
配送設定周りはちょっと問題有りですね。。

配送業者を2〜5くらいに増やして確認してみたんですが、

$sqlval['time_id'] = ($cnt * $deliv_id);

上記のようにtime_id を $deliv_id の倍数で
計算して算出する部分があって、


◆配送業者1(deliv_id = 1)
(time_id = 1)午前中
(time_id = 2)12:00〜14:00
(time_id = 3)14:00〜16:00
(time_id = 4)16:00〜18:00
(time_id = 5)18:00〜20:00
・・・

という感じで配送業者が1社だけだと問題化しませんが、
2社目以降になると

◆配送業者2(deliv_id = 2)
(time_id = 2)午前中
(time_id = 4)12:00〜14:00
(time_id = 6)14:00〜16:00
・・・


◆配送業者5(deliv_id = 5)
(time_id = 5)午前中
(time_id = 10)12:00〜14:00
(time_id = 15)14:00〜16:00
・・・

となりますので、
time_id が重複する可能性が高くなります。
(これ、既出の問題でしたっけ?見覚えがあるようなないような・・・)

なぜ
「$sqlval['time_id'] = ($cnt * $deliv_id);」
という計算になっているのか不明ですが、、、。

まだ、time_id の深い振る舞いについて調べきれていませんが、
とにかくユニークな値が振られれば問題なさそうでしょうか。

2.4系は利用されている方も結構多いと思うので、
有る程度やり方が強引であっても、
ユニーク値が振られれば問題ないのであれば、
seasoftさまがおっしゃられるようなDB定義の変更をせずに
何か方法がないか探ってみようと思います。

comu版の/data/class/pages/admin/basis/LC_Page_Admin_Basis_Delivery_Input.php
当たりのソースも参考にさせていただきます


----------------
このコミュニティでの投稿はボランティアの範囲に留めさせていただいています。個別の相談やカスタマイズは有償にて承っておりますのでご相談下さい。

[url=http://www.eccube-school.jp/]EC-CUBE

homan
投稿日時: 2010/1/29 11:43
対応状況: −−−
仙人
登録日: 2007/7/2
居住地: 宮崎県宮崎市
投稿: 633
Re: お届け時間→時間指定がおかしい
長々と書いていたら、タイムアウトで消えてしまったので簡潔に書きます。

先の私の書き込みの不具合の件、
結論、data/class_extends/page_extends/shopping/LC_Page_Shopping_Payment_Ex.phpに

・lfGetPaymentInfo
・lfGetDelivTimeInfo
・lfRegistData

を改善したものを張り付けるだけで解決しました。
(社内チェック:EC-CUBE2.4.1)

※但し、ehptj様のご報告の内容とは少し問題が違うような気がしますが・・・。


コミュ版はseasoft様が解決済みだとおっしゃられていましたが、
おそらく私の解決方法と異なるような気がしますので、
不整合が生じる可能性がありました。
なので、コミットせずに一旦こちらで共有します。

一応、弊社内でチェックをした結果でのご報告になりますが、
修正方法が良くわからない方は最寄りの制作会社様などに
お願いしてください。うまくできなくてエラー等になっても
私には責任が取れません(アドバイスはできると思いますが・・)
自己責任でお願いいたします。
できればテスト環境などで挙動を確認してください。
問題があれば共有お願いします。


data/class_extends/page_extends/shopping/LC_Page_Shopping_Payment_Ex.phpのデストラクタの
後くらいから、以下のコードを丸ごと張り付ける。
(EC-CUBE 2.4.1をベースとしています。ご注意ください)
念の為、どのように張り付けるのかわからない方の為に、
既存のデストラクタも表示しておきます。

※追記や変更箇所は赤文字で示します。

    /**
     * デストラクタ.
     *
     * @return void
     */
    function destroy() {
        parent::destroy();
    }

    /* 支払い方法文字列の取得 */
    function lfGetPaymentInfo($payment_id) {
        $objQuery = new SC_Query();
        $where = "payment_id = ?";
        $arrRet = $objQuery->select("payment_method, charge, deliv_id", "dtb_payment", $where, array($payment_id));
        return (array($arrRet[0]['payment_method'], $arrRet[0]['charge'], $arrRet[0]['deliv_id']));
    }


    /* 配送時間文字列の取得 */
    function lfGetDelivTimeInfo($deliv_id, $time_id) {
        $objQuery = new SC_Query();
        $where = "deliv_id = ? AND time_id = ?";
        $arrRet = $objQuery->select("deliv_time", "dtb_delivtime", $where, array($deliv_id, $time_id));
        return $arrRet[0]['deliv_time'];
    }


    /* DBへデータの登録 */
    function lfRegistData($uniqid) {
        $arrRet = $this->objFormParam->getHashArray();
        $sqlval = $this->objFormParam->getDbArray();
        // 登録データの作成
        $sqlval['order_temp_id'] = $uniqid;
        $sqlval['update_date'] = 'Now()';

        if($sqlval['payment_id'] != "") {
            list($sqlval['payment_method'], $sqlval['charge'], $sqlval['deliv_id']) = $this->lfGetPaymentInfo($sqlval['payment_id']);
        } else {
            $sqlval['payment_id'] = '0';
            $sqlval['payment_method'] = "";
        }

        if($sqlval['deliv_time_id'] != "") {
            $sqlval['deliv_time'] = $this->lfGetDelivTimeInfo($sqlval['deliv_id'], $sqlval['deliv_time_id']);
        } else {
            $sqlval['deliv_time_id'] = '0';
            $sqlval['deliv_id'] = '0';
            $sqlval['deliv_time'] = "";
        }

        // 使用ポイントの設定
        if($sqlval['point_check'] != '1') {
            $sqlval['use_point'] = 0;
        }

        $objDb = new SC_Helper_DB_Ex();
        $objDb->sfRegistTempOrder($uniqid, $sqlval);
    }



<改善策の内容>

先の書き込みで指摘させていただいていますが、
time_idが重複している為に起こる不具合のようです。

支払い方法を選んだあとに日程や時間帯を選びますが、
そこからdtb_order_tempに記録する際に
dtb_delivtimeからtime_idだけをキーとして検索するため、
time_idが重複しているときは別の配送業者を抽出してしまい、
結果的に時間もずれたように表示されていました。

今回の場合、支払い方法を選んだときにpayment_idが分かるので、
dtb_paymentからdeliv_idを参照するように変更しています。
そして、dtb_delivtimeからdeliv_timeの情報を抽出する際には
deliv_idとtime_idをキーとして利用することで
たとえ複数の配送業者情報でtime_idが重複していても
ずれることが無いようにできました。

※修正前の受注(注文)情報に関してはずれは直りませんのでご注意ください。修正後の受注(注文)から正常に動くかと思います。


上記の不具合は、弊社が調べたところでは
2.4.1、2.4.2でも発生することが分かっています。
それ以前はチェックできていませんが、
複数配送業者を設定している場合は確認してみた方が
良いと思います。

http://svn.ec-cube.net/open_trac/changeset/17513

上記の修正が原因かと思われますが、
2008年8月8日なのでおそらく2.3.0-RC1以降が
対象になる可能性がありそうです・・・?(多分です)

http://www.ec-cube.net/release/detail.php?release_id=187
http://svn.ec-cube.net/open_trac/query?status=closed&milestone=EC-CUBE2.3.0
(チケットの329が改修に含まれています)


----------------
このコミュニティでの投稿はボランティアの範囲に留めさせていただいています。個別の相談やカスタマイズは有償にて承っておりますのでご相談下さい。

[url=http://www.eccube-school.jp/]EC-CUBE

ramrun
投稿日時: 2010/1/29 12:13
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: お届け時間→時間指定がおかしい
そういえば、そんなのあったなぁと思って再検索してみました。

基本情報管理>配送設定>配送時間 の追加時にエラー
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=3148&forum=11

チケット #472 管理機能の配送業者の追加でエラー
http://svn.ec-cube.net/open_trac/ticket/472

EC-CUBE 2.5で修正が適用される模様。
homan
投稿日時: 2010/1/29 12:22
対応状況: −−−
仙人
登録日: 2007/7/2
居住地: 宮崎県宮崎市
投稿: 633
Re: お届け時間→時間指定がおかしい
引用:

ramrunさんは書きました:
そういえば、そんなのあったなぁと思って再検索してみました。

基本情報管理>配送設定>配送時間 の追加時にエラー
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=3148&forum=11

チケット #472 管理機能の配送業者の追加でエラー
http://svn.ec-cube.net/open_trac/ticket/472

EC-CUBE 2.5で修正が適用される模様。


情報ありがとうございます!
上記の修正はインストール直後に実施か2.5を待たねばならない様なのですが、
私の方法であればデータベースの修正もありませんし、
運用開始済みの案件であっても「とりあえず」大丈夫かと思います。

ただ、time_id 算出が $cnt で掛け算されている部分や、
(これは掛け算しないようにするだけでいいかも。)
time_idのシーケンスが設定されているにもかかわらず全く参照していない状態ですので、
気持ち悪さが残りますが、、
(違うところでバグにならないことを祈ります・・・)


不具合が起きた条件でしか確認していないので、
念の為もう少しチェックを進めてみます。


----------------
このコミュニティでの投稿はボランティアの範囲に留めさせていただいています。個別の相談やカスタマイズは有償にて承っておりますのでご相談下さい。

[url=http://www.eccube-school.jp/]EC-CUBE

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,967名です
総投稿数は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.