顧客が [注文する] ボタンをクリックした時点で使用済みとしてマークされている Magento シングル クーポン コードに問題があります。Paypal での支払いが失敗した場合、またはクライアントが注文が完了する前にページを離れた場合、クライアントは、一度だけ使用するように設定され、既に使用済みとマークされているこのクーポンで戻って再注文することはできません.
ユーザーがクーポンを使用する回数を減らし、クーポンを再利用できるようにするコードを見つけました。残念ながら、注文ボタンをクリックして Paypal ページに接続しようとすると、エラーが発生します。もう一度クーポンを使用して Paypal ページにアクセスできるようにするには、テーブルsalesrule_coupon_usageとsalesrule_customerの SQL データベースの行を、この顧客 ID で削除する必要があります。
顧客 ID のクーポン使用情報を自動的に削除するには、次のコードを変更する必要があります。
public function cancel($observer)
{
$order = $observer->getEvent()->getPayment()->getOrder();
if ($order->canCancel()) {
if ($code = $order->getCouponCode()) {
$coupon = Mage::getModel('salesrule/coupon')->load($code, 'code');
if ($coupon->getTimesUsed() > 0) {
$coupon->setTimesUsed($coupon->getTimesUsed() - 1);
$coupon->save();
}
$rule = Mage::getModel('salesrule/rule')->load($coupon->getRuleId());
error_log("\nrule times used=" . $rule->getTimesUsed(), 3, "var/log/debug.log");
if ($rule->getTimesUsed() > 0) {
$rule->setTimesUsed($rule->getTimesUsed()-1);
$rule->save();
}
if ($customerId = $order->getCustomerId()) {
if ($customerCoupon = Mage::getModel('salesrule/rule_customer')->loadByCustomerRule($customerId, $rule->getId())) {
$couponUsage = new Varien_Object();
Mage::getResourceModel('salesrule/coupon_usage')->loadByCustomerCoupon($couponUsage, $customerId, $coupon->getId());
if ($couponUsage->getTimesUsed() > 0) {
/* I can't find any #@$!@$ interface to do anything but increment a coupon_usage record */
$resource = Mage::getSingleton('core/resource');
$writeConnection = $resource->getConnection('core_write');
$tableName = $resource->getTableName('salesrule_coupon_usage');
$query = "UPDATE {$tableName} SET times_used = times_used-1 "
. "WHERE coupon_id = {$coupon->getId()} AND customer_id = {$customerId} AND times_used > 0";
$writeConnection->query($query);
}
if ($customerCoupon->getTimesUsed() > 0) {
$customerCoupon->setTimesUsed($customerCoupon->getTimesUsed()-1);
$customerCoupon->save();
}
}
}
}
}
}