バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 【ECCUBE2.11】管理画面からの受注登録について

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
by0448
投稿日時: 2013/6/19 13:04
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
【ECCUBE2.11】管理画面からの受注登録について
管理画面からの受注登録についてご質問させてください。


こちらで受注を登録した場合、メールが送られてきませんが、これをフロント画面からと同様に、受注を登録したときにメールが受信できるようにしたいと思っております。


それに付随して、受注を登録した際に在庫が0になった場合の通知も行いたいのですが、どのような処理を施せばよろしいでしょうか?


ご存知の方がいましたら、ご教授いただけますよう、よろしくお願いいたします。

__環境_________________________

EC-CUBE 2.11.2
MySQL 5.1.34-log
PHP 5.2.17
_______________________________
Machy
投稿日時: 2013/6/20 9:26
対応状況: −−−
常連
登録日: 2013/6/17
居住地:
投稿: 39
Re: 【ECCUBE2.11】管理画面からの受注登録について
by0448様

管理画面での受注登録ページは
「data/class/pages/order/LC_Page_admin_order_Edit.php」
で制御されています。

管理画面での受注登録時にメールを送信するための手順は

1.actionメソッドの始めに「SC_Helper_Mail_Ex」のインスタンスを生成する。
2.177行目あたりの 「case 'add'部」に「SC_Helper_Mail_Ex」クラスの「sfSendOrderMail」メソッドを使ってメールを送信する。

在庫が0になった場合のメール送信ですが、これも、上記の「case 'add' 部」に記述します。手順は以下の通りです。

1.「order_id」 で 「dtb_order_detail」テーブルから「product_id」をSQLにて引きます。
2.上記「product_id」を基に「SC_Product」クラスの「getProductsClassByQuery」などで「stock」を引きます。
3.「stock」の値が0の場合、「SC_Helper_Mail」クラスの「sfSendMail」メソッド等を用いてメールを送信する。

以上になります。
by0448
投稿日時: 2013/6/21 12:32
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】管理画面からの受注登録について
Machy 様

ご返答ありがとうございました。

自分なりにご指示の通りにやってみましたのが、以下の通りです。


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

function action() {
        $objPurchase = new SC_Helper_Purchase_Ex();
        $objFormParam = new SC_FormParam_Ex();
        $objMail = new SC_Helper_Mail_Ex();//ここを追加



-----------------

        case 'add':
            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                $objFormParam->setParam($_POST);
                $objFormParam->convParam();
                $this->arrErr = $this->lfCheckError($objFormParam);
                if (SC_Utils_Ex::isBlank($this->arrErr)) {
                    $message = '受注を登録しました。';
                    $order_id = $this->doRegister(null, $objPurchase, $objFormParam, $message, $arrValuesBefore);
                    if ($order_id >= 0) {
                        $this->tpl_mode = 'edit';
                        $objFormParam->setValue('order_id', $order_id);
                        $this->setOrderToFormParam($objFormParam, $order_id);
						$objPurchase->sendOrderMail($this->arrForm["order_id"]);
                    }
                    $this->tpl_onload = "window.alert('" . $message . "');";
                }
				$objMail->sfSendOrderMail(); //ここを追加
            }

            break;




上記のようにしたところ、登録完了時にエラーが出てしまいました。
確かにメールの方は届きましたが、すべて空っぽで何もデータが引っ張れていません。

PHP方面にはまだまだ暗い自分ですので、このような結果になってしまいましたが、どのような記述が正しいのでしょうか?



管理画面からの在庫0の通知ですが、以下の記述は役に立つでしょうか。

if($productsClass['stock'] < 1){
// メール送信先
$stock_mail = "×××@×××.com";
// 件名
$stock_sub = "商品在庫がなくなりました。";
// メッセージ
$stock_msg = "以下の商品の在庫が切れました。商品状況を確認してください。
★商品ID:".$productsClass['product_id']."  \n
★商品コード:".$productsClass['product_code']." \n
★商品名:".$productsClass['name']." / ".$productsClass['classcategory_name1']." / ".$productsClass['classcategory_name2'];
// メールを送信します。
mb_send_mail($stock_mail, $stock_sub, $stock_msg);
}



こちらは、/data/class/SC_Product.php を利用した、フロント画面からの注文時の在庫0通知メール処理です。

これと同じようなものを管理画面に設置するということでよろしいのでしょうか?

Machy
投稿日時: 2013/6/24 10:06
対応状況: −−−
常連
登録日: 2013/6/17
居住地:
投稿: 39
Re: 【ECCUBE2.11】管理画面からの受注登録について
by0448様

引用:
$objMail->sfSendOrderMail(); //ここを追加


を以下の様に変えてみてください。

引用:
$template_id = SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE ? 2 : 1;
$objHelperMail->sfSendOrderMail($order_id, $template_id);



また、在庫0時にメール送信は以下のフォーラム記事が参考になるかと思います。

http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=9994&forum=11&post_id=47866#forumpost47866
by0448
投稿日時: 2013/6/24 14:32
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】管理画面からの受注登録について
Machy 様

ご返答ありがとうございました。

お陰さまで管理画面からの受注登録情報をメールで受け取ることができました。


しかし、在庫0の場合のメール受信がうまくいきません。


LC_Page_Admin_Order_Edit.php

        // 在庫数調整
        if (ORDER_DELIV != $arrValues['status']
            && ORDER_CANCEL != $arrValues['status']) {
            foreach ($arrStockData AS $stock) {
                $objQuery->update('dtb_products_class', array(),
                                  'product_class_id = ?',
                                  array($stock['product_class_id']),
                                  array('stock' => 'stock + ?'),
                                  array($stock['quantity']));
            }
        }

/*---------ここから以下を追加-------------------*/

if($arrValues['stock'] < 1){
// メール送信先
$stock_mail = "eika@eika.co.jp";
// 件名
$stock_sub = "商品在庫がなくなりました。";
// メッセージ
$stock_msg = "以下の商品の在庫が切れました。商品状況を確認してください。
★商品ID:".$arrValues['product_id']." \n
★商品コード:".$arrValues['product_code']." \n
★商品名:".$arrValues['name']." / ".$arrValues['classcategory_name1']." / ".$arrValues['classcategory_name2'];
// メールを送信します。
mb_send_mail($stock_mail, $stock_sub, $stock_msg);
}			




以上のように追加してみたのですが、メールは届くものの、内容が以下のようになってしまいます。





以下の商品の在庫が切れました。商品状況を確認してください。
★商品ID:Array 

★商品コード:Array 

★商品名: / Array / Array




さらに、在庫の情報がとれていないのか、購入商品分のメールが届いてしまっております。

大変申し訳ありませんが、どのように改善したらよいか、お教え願えないでしょうか。

よろしくお願いいたします。
Machy
投稿日時: 2013/6/24 15:36
対応状況: −−−
常連
登録日: 2013/6/17
居住地:
投稿: 39
Re: 【ECCUBE2.11】管理画面からの受注登録について
by0048様

在庫0時でのメール送信ですが、
以下の記事をお読みいただけているでしょうか?
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=9994&forum=11&post_id=47866#forumpost47866

上記、記事によりますとSC_Productクラスを編集しているようです。

以下の通りに編集されてはいかがでしょうか?

引用:
編集ファイル名:「data/class/SC_Product.php」

function reduceStock($productClassId, $quantity) {

if ($quantity == 0) {
return false;
}

$objQuery =& SC_Query_Ex::getSingletonInstance();
$objQuery->update('dtb_products_class', array(),
"product_class_id = ?", array($productClassId),
array('stock' => 'stock - ?'), array($quantity));
// TODO エラーハンドリング

$productsClass = $this->getDetailAndProductsClass($productClassId);
if ($productsClass['stock_unlimited'] != '1' && $productsClass['stock'] < 0) {
return false;
}

▼----------------追加ここから-----------------▼

//商品名、商品コードを抽出
$where = "t2.product_class_id = ? AND t2.product_id = t1.product_id";
$arrRet = $objQuery->getRow("t1.name, t1.product_id, t2.product_code, t2.product_type_id", "dtb_products AS t1, dtb_products_class AS t2", $where, $productClassId);
if($arrRet['stock'] == 0 && $arrRet['stock_unlimited'] != '1'){
// メール送信先
$stock_mail = "受け取りたいメールアドレスを記述する";
// 件名
$stock_sub = "商品在庫が少なくなりました。";
// メッセージ
$stock_msg = "商品名:".$arrRet['name']." 商品コード:".$arrRet['product_code']." 商品ID:".$arrRet['product_id']."(".$productClassId[1].",".$productClassId[2].")"."の商品の在庫が無くなりました。";
// メールを送信します。
mb_send_mail($stock_mail, $stock_sub, $stock_msg);
}

▲----------------追加ここまで-----------------▲

return true;
}


以上になります。
by0448
投稿日時: 2013/6/24 15:56
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】管理画面からの受注登録について
Machy 様

ご返答ありがとうございました。

頂いたコードでは、受注登録での在庫0の場合の通知が行われないようですが、これで正しいのでしょうか?


フロント画面からの注文での在庫0通知の方は、最初に提示しました、コードでも上手く作動しております。


管理画面からの動作なので、てっきりadmin方面でやるものかと考えておりましたが。


お手数ですが、良い方法がありましたら、ご教授願いたくお願い申し上げます。


Machy
投稿日時: 2013/6/24 18:16
対応状況: −−−
常連
登録日: 2013/6/17
居住地:
投稿: 39
Re: 【ECCUBE2.11】管理画面からの受注登録について
by0048様

在庫数0でのメールですが、
以下の編集を試していただけますか?

引用:
編集ファイル:data/class/pages/admin/order/LC_page_Admin_Order_Edit.php

// 受注詳細データの更新
$objPurchase->registerOrderDetail($order_id, $arrDetail);

// 在庫数調整
if (ORDER_DELIV != $arrValues['status']
&& ORDER_CANCEL != $arrValues['status']) {
foreach ($arrStockData AS $stock) {
$objQuery->update('dtb_products_class', array(),
'product_class_id = ?',
array($stock['product_class_id']),
array('stock' => 'stock + ?'),
array($stock['quantity']));
}
}

▼---------------------------------以下を追加-------------------------------------▼

$j = 0;
if (ORDER_DELIV != $arrValues['status']
&& ORDER_CANCEL != $arrValues['status']) {
foreach ($arrStockData AS $stock) {
$stock_zero_flg[$j] = $objQuery->count('dtb_products_class',
'product_class_id = ? AND stock = 0',
array($stock['product_class_id']));
if($stock_zero_flg[$j] == 1) {
$stock_zero = $objQuery->select('*', 'dtb_order_detail',
'product_class_id = ? AND order_id = ' . $order_id,
array($stock['product_class_id']));
$stock_mail = "配信したいメールアドレスを入力する";
// 件名
$stock_sub = "商品在庫がなくなりました。";
// メッセージ

if($stock_zero[$j]['classcategory_name1'] == NULL) {
$stock_zero[$j]['classcategory_name1'] = '規格なし';
}

if($stock_zero[$j]['classcategory_name2'] == NULL) {
$stock_zero[$j]['classcategory_name2'] = '規格なし';
}

$stock_msg = "以下の商品の在庫が切れました。商品状況を確認してください。" . " \n\n"
. "★商品ID:" . $stock_zero[$j]['product_id'] . " \n"
. "★商品コード:" . $stock_zero[$j]['product_code'] . " \n"
. "★商品名:" . $stock_zero[$j]['product_name']. " / "
. $stock_zero[$j]['classcategory_name1'] . " / "
. $stock_zero[$j]['classcategory_name2'];
// メールを送信します。
$objMail = new SC_Helper_Mail_Ex();
$objMail->sfSendMail($stock_mail, $stock_sub, $stock_msg);
}
}
}

▲---------------------------------ここまでを追加-------------------------------------▲

$arrAllShipping = $objFormParam->getSwapArray($this->arrShippingKeys);
$arrAllShipmentItem = $objFormParam->getSwapArray($this->arrShipmentItemKeys);

$arrDelivTime = $objPurchase->getDelivTime($objFormParam->getValue('deliv_id'));


以上になります。
by0448
投稿日時: 2013/6/24 22:03
対応状況: 解決済
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】管理画面からの受注登録について
Machy 様

ご返答ありがとうございました。

頂いたコードですべて正常に作動いたしました。


受注登録時だけでなく、受注更新の商品追加時にもちゃんと在庫切れの連絡が飛んでくるようになっており、本当に助かります。


自分の知識の至らなさ、説明不足によって何度もお手数をおかけしてしまい、本当に申し訳ございませんでした。


またのご機会がありましたらよろしくお願いいたします。

この度は本当にありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,711名です
総投稿数は109,948件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
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.