バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 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円となりますが、この時もポイントは発生しないのでしょうか?
ヨドバシカメラとかだと、現金部分には発生しますので。

いずれにせよ、試していませんので確実ではありませんが、

引用:

お支払方法・お届け時間等の指定画面
LC_Page_Shopping_Payment.php


でポイントを使うを選択して、数値が入ったら、

引用:

ご入力内容のご確認画面
LC_Page_Shopping_Confirm.php


のご利用ポイントに反映されていますので、
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 の、
引用:

// カート集計を元に最終計算
$arrCalcResults = $objCartSess->calculate($this->cartKey,$objCustomer,$arrOrderTemp['use_point'],$objPurchase->getShippingPref($this->is_multiple),$arrOrderTemp['charge'],$arrOrderTemp['discount'],$arrOrderTemp['deliv_id']);


で実際に計算がされるのが、


SC_CartSession.php

の595行目(僕の環境で/2.11.2)

function calculate($productTypeId, &$objCustomer, $use_point = 0,$deliv_pref = "", $charge = 0, $discount = 0, $deliv_id = 0) {
以下略


にあります。

ここの、
引用:

// 加算ポイントの計算
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;
}
}


を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 様

引用:

なかなか理解にかける点が多々ありますが・・


説明が悪かったですかね??
では、もう少し具体的に書きます。


引用:

if(ここにadd_pointが0より大きかったらの処理){

ここにadd_pointを0にする処理。
return 処理

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


----------------
何分知識が浅いですが・・・
出来得る限り協力したいと思っています

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;
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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