質問 > 管理機能 > 2.11.4 ポイント機能について質問です |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
akki31 |
投稿日時: 2012/3/13 16:07
対応状況: −−−
|
常連 登録日: 2011/6/7 居住地: 投稿: 59 |
2.11.4 ポイント機能について質問です こんにちは。
いつもお世話になっております。 ポイント機能について質問です。 現在ポイント機能として商品をご購入後に ポイントが付与されるのは問題ありませんが ポイントを使用する場合にポイントが 付与されてしまうかと思います。 ポイント使用時にはポイントを付与しない 設定にするのは どのような修正を加えればよろしいのでしょうか? 予想では SC_Helper_Purchace.phpがからんでいるかとは思うのですが 皆様のご助力。宜しくお願い致します。 SC_Helper_Purchace.php /** * 受注.対応状況の更新 * * 必ず呼び出し元でトランザクションブロックを開いておくこと。 * * @param integer $orderId 注文番号 * @param integer|null $newStatus 対応状況 (null=変更無し) * @param integer|null $newAddPoint 加算ポイント (null=変更無し) * @param integer|null $newUsePoint 使用ポイント (null=変更無し) * @param array $sqlval 更新後の値をリファレンスさせるためのパラメーター * @return void */ function sfUpdateOrderStatus($orderId, $newStatus = null, $newAddPoint = null, $newUsePoint = null, &$sqlval) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $arrOrderOld = $objQuery->getRow('status, add_point, use_point, customer_id', 'dtb_order', 'order_id = ?', array($orderId)); // 対応状況が変更無しの場合、DB値を引き継ぐ if (is_null($newStatus)) { $newStatus = $arrOrderOld['status']; } // 使用ポイント、DB値を引き継ぐ if (is_null($newUsePoint)) { $newUsePoint = $arrOrderOld['use_point']; } // 加算ポイント、DB値を引き継ぐ if (is_null($newAddPoint)) { $newAddPoint = $arrOrderOld['add_point']; } if (USE_POINT !== false) { // 会員.ポイントの加減値 $addCustomerPoint = 0; // ▼使用ポイント // 変更前の対応状況が利用対象の場合、変更前の使用ポイント分を戻す if ($this->isUsePoint($arrOrderOld['status'])) { $addCustomerPoint += $arrOrderOld['use_point']; } // 変更後の対応状況が利用対象の場合、変更後の使用ポイント分を引く if ($this->isUsePoint($newStatus)) { $addCustomerPoint -= $newUsePoint; } // ▲使用ポイント // ▼加算ポイント // 変更前の対応状況が加算対象の場合、変更前の加算ポイント分を戻す if ($this->isAddPoint($arrOrderOld['status'])) { $addCustomerPoint -= $arrOrderOld['add_point']; } // 変更後の対応状況が加算対象の場合、変更後の加算ポイント分を足す if ($this->isAddPoint($newStatus)) { $addCustomerPoint += $newAddPoint; } // ▲加算ポイント if ($addCustomerPoint != 0) { // ▼会員テーブルの更新 $objQuery->update('dtb_customer', array('update_date' => 'CURRENT_TIMESTAMP'), 'customer_id = ?', array($arrOrderOld['customer_id']), array('point' => 'point + ?'), array($addCustomerPoint)); // ▲会員テーブルの更新 // 会員.ポイントをマイナスした場合、 if ($addCustomerPoint < 0) { $sql = 'SELECT point FROM dtb_customer WHERE customer_id = ?'; $point = $objQuery->getOne($sql, array($arrOrderOld['customer_id'])); // 変更後の会員.ポイントがマイナスの場合、 if ($point < 0) { // ロールバック $objQuery->rollback(); // エラー SC_Utils_Ex::sfDispSiteError(LACK_POINT); } } } } ----------------------------------- [EC-CUBE]2.11.4 [OS]Windows 7 [PHP] 5.3.6 [データベース] MySQL 5.0.67-log [WEBサーバ] Apache ----------------------------------- |
ken-o |
投稿日時: 2012/3/13 16:37
対応状況: −−−
|
長老 登録日: 2011/9/22 居住地: 投稿: 222 |
Re: 2.11.4 ポイント機能について質問です akki31 様
<質問に対して カスタマイズはもっと簡単にできるような気がするのですが、質問内容を読んでいてふと疑問に思ったことをお伺いしたいと思いまして。 例えば、1000円のもので、200ポイント使った場合、支払い金額は800円となりますが、この時もポイントは発生しないのでしょうか? ヨドバシカメラとかだと、現金部分には発生しますので。 いずれにせよ、試していませんので確実ではありませんが、 引用:
でポイントを使うを選択して、数値が入ったら、 引用:
のご利用ポイントに反映されていますので、 if文で0以上ならば、その下の 今回加算予定のポイント を強制的に0にするのはどうですか?
|
akki31 |
投稿日時: 2012/3/13 17:10
対応状況: −−−
|
常連 登録日: 2011/6/7 居住地: 投稿: 59 |
Re: 2.11.4 ポイント機能について質問です ken-o様
お返事ありがとうございます。 ご質問のお返事ですが 差額分が発生したとしてもポイントの付与は無しに するのが理想です。 こういった方法もあるのですね! ありがとうございます勉強になります。 この場合、具体的には下記修正でしょうか? LC_Page_Shopping_Payment.php /** * 入力内容のチェックを行なう. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param integer $subtotal 購入金額の小計 * @param integer $max_point 会員の保持ポイント * @return array 入力チェック結果の配列 */ function lfCheckError(&$objFormParam, $subtotal, $max_point) { // 入力データを渡す。 $arrForm = $objFormParam->getHashArray(); $objErr = new SC_CheckError_Ex($arrForm); $objErr->arrErr = $objFormParam->checkError(); if (USE_POINT === false) { return $objErr->arrErr; } if($arrForm['point_check'] == '1') { $objErr->doFunc(array("ポイントを使用する", "point_check"), array("EXIST_CHECK")); $objErr->doFunc(array("ポイント", "use_point"), array("EXIST_CHECK")); if($max_point == "") { $max_point = 0; } // FIXME mobile 互換のため br は閉じない... if($arrForm['use_point'] > $max_point) { $objErr->arrErr['use_point'] = "※ ご利用ポイントが所持ポイントを超えています。<br>"; } if(($arrForm['use_point'] * POINT_VALUE) > $subtotal) { $objErr->arrErr['use_point'] = "※ ご利用ポイントがご購入金額を超えています。<br>"; } } return $objErr->arrErr; LC_Page_Shopping_Confirm.php // カートの商品を取得 $this->arrShipping = $objPurchase->getShippingTemp($this->is_multiple); $this->arrCartItems = $objCartSess->getCartList($this->cartKey); // 合計金額 $this->tpl_total_inctax[$this->cartKey] = $objCartSess->getAllProductsTotal($this->cartKey); // 税額 $this->tpl_total_tax[$this->cartKey] = $objCartSess->getAllProductsTax($this->cartKey); // ポイント合計 $this->tpl_total_point[$this->cartKey] = $objCartSess->getAllProductsPoint($this->cartKey); // 一時受注テーブルの読込 $arrOrderTemp = $objPurchase->getOrderTemp($this->tpl_uniqid); // カート集計を元に最終計算 $arrCalcResults = $objCartSess->calculate($this->cartKey, $objCustomer, $arrOrderTemp['use_point'], $objPurchase->getShippingPref($this->is_multiple), $arrOrderTemp['charge'], $arrOrderTemp['discount'], $arrOrderTemp['deliv_id']); $this->arrForm = array_merge($arrOrderTemp, $arrCalcResults); 宜しくお願い致します。 |
ken-o |
投稿日時: 2012/3/13 17:51
対応状況: −−−
|
長老 登録日: 2011/9/22 居住地: 投稿: 222 |
Re: 2.11.4 ポイント機能について質問です akki31 様
引用:
そうなんですね、 では参考までに一つ。 先ほどお話した、LC_Page_Shopping_Payment.php の、 引用:
で実際に計算がされるのが、 SC_CartSession.php の595行目(僕の環境で/2.11.2) function calculate($productTypeId, &$objCustomer, $use_point = 0,$deliv_pref = "", $charge = 0, $discount = 0, $deliv_id = 0) { 以下略 にあります。 ここの、 引用:
をif文してあげればうまくいきます。 上記をelse にして、use_pointが0より大きかったらadd_pointに0を入れて、returnで返す式を入れてあげればできます 上記をelseにして残すのは、通常の会計時を考慮しなければならないからです。ポイントを使用しない会計時はelseで今まで通りの流れを維持してあげるということですね。
|
akki31 |
投稿日時: 2012/3/13 21:15
対応状況: −−−
|
常連 登録日: 2011/6/7 居住地: 投稿: 59 |
Re: 2.11.4 ポイント機能について質問です ken-o様
非常に丁寧なヒントありがとうございます。 なかなか理解にかける点が多々ありますが・・ やってみます。 宜しくお願い致します。 |
ken-o |
投稿日時: 2012/3/14 9:36
対応状況: −−−
|
長老 登録日: 2011/9/22 居住地: 投稿: 222 |
Re: 2.11.4 ポイント機能について質問です akki31 様
引用:
説明が悪かったですかね?? では、もう少し具体的に書きます。 引用:
|
akki31 |
投稿日時: 2012/3/15 12:08
対応状況: −−−
|
常連 登録日: 2011/6/7 居住地: 投稿: 59 |
Re: 2.11.4 ポイント機能について質問です ken-o様
おはようございます。 お返事が遅くなりました。 ご教授ありがとうございます!! // 合計を計算 $results['total'] = $results['subtotal']; $results['total'] += $results['deliv_fee']; $results['total'] += $charge; $results['total'] -= $discount; // お支払い合計 $results['payment_total'] = $results['total'] - $use_point * POINT_VALUE; if($results['add_point'] > 0) { $results['add_point'] = 0; return $results; }else if{ // 加算ポイントの計算 if (USE_POINT !== false) { $results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point, $use_point); if($objCustomer != "") { // 誕生日月であった場合 if($objCustomer->isBirthMonth()) { $results['birth_point'] = BIRTH_MONTH_POINT; $results['add_point'] += $results['birth_point']; } } if($results['add_point'] < 0) { $results['add_point'] = 0; } } return $results; } こんな感じですがどうでしょうか? |
ken-o |
投稿日時: 2012/3/15 13:18
対応状況: −−−
|
長老 登録日: 2011/9/22 居住地: 投稿: 222 |
Re: 2.11.4 ポイント機能について質問です akki31 様
さらっと見た感じですが、問題ないと思います。 念のためですが、{}の個数には気をつけてください!
|
akki31 |
投稿日時: 2012/3/15 21:22
対応状況: −−−
|
常連 登録日: 2011/6/7 居住地: 投稿: 59 |
Re: 2.11.4 ポイント機能について質問です ken-o様
ありがとうございました。 ほぼ答えを教えて頂いたようなものでしたからね。 実装後しばらく様子を見てみます。 ありがとうございました。 今後とも宜しくお願い致します。 |
akki31 |
投稿日時: 2012/3/16 22:07
対応状況: −−−
|
常連 登録日: 2011/6/7 居住地: 投稿: 59 |
Re: 2.11.4 ポイント機能について質問です ken-o様
いつもお世話になります。 先日の通りに修正して UPしてみたところ、エラーとなり ページ自体が表示できなくなってしまったので 1度修正前に戻しています。 下記の矢印部分のエラーのようですが・・ 表記が間違っていますでしょうか? if($results['add_point'] > 0) { $results['add_point'] = 0; return $results; ここ → }else if{ // 加算ポイントの計算 if (USE_POINT !== false) { $results['add_point'] = SC_Helper_DB_Ex::sfGetAddPoint($total_point, $use_point); if($objCustomer != "") { // 誕生日月であった場合 if($objCustomer->isBirthMonth()) { $results['birth_point'] = BIRTH_MONTH_POINT; $results['add_point'] += $results['birth_point']; } } if($results['add_point'] < 0) { $results['add_point'] = 0; } } return $results; } |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |