Greetings,
I just downloaded and installed 2.0.1.1. I have been testing the coupon and voucher features and have run into some issues. When using coupons and vouchers to check out, they work fine. However, coupon and voucher history never get recorded upon checkout. I tried invoicing the order and marking it shipped, but this didn't do anything either. I tried COD and bank transfer payment methods.
This means that a customer can keep using the same coupon (even if it is marked 1 use only) and the same voucher over and over again. That will certainly be bad for business. I searched the forums and found several reports of coupon history not working in 1.5.*. No results yet in the 2.0 board.
Any suggestions? Am I missing something? Any help would be greatly appreciated.
Thanks in advance!
Chris
Hello,
Has anyone had any luck with this problem? I am experiencing the same - on a clean install of 2.0.2.0 coupons can be used multiple times, even when set to 1 use per customer.
eg - Create a single use coupon of type 'fixed amount'
Add a product with value $100, and then apply a coupon with value $100
The coupon is applied at cart, and balance is zero, and order is registered as pending.
The OC admin shows no log of the coupon use, only that the order is pending and the sale total in zero.
I have tested this with guest checkout and registered users - the coupon cab be used multiple times.
Thanks,
Marty
Has anyone had any luck with this problem? I am experiencing the same - on a clean install of 2.0.2.0 coupons can be used multiple times, even when set to 1 use per customer.
eg - Create a single use coupon of type 'fixed amount'
Add a product with value $100, and then apply a coupon with value $100
The coupon is applied at cart, and balance is zero, and order is registered as pending.
The OC admin shows no log of the coupon use, only that the order is pending and the sale total in zero.
I have tested this with guest checkout and registered users - the coupon cab be used multiple times.
Thanks,
Marty
It was my mistake - coupons are working as expected in 2.0.1.1
As stated in System > Settings > Store > Options > Checkout : The 'Processing Order Status' defines when the coupon is applied.
I had expected coupons to be applied when the customer enters the coupon data, but by default they are applied when the order status is updated to 'Processing'.
Thanks,
Marty
As stated in System > Settings > Store > Options > Checkout : The 'Processing Order Status' defines when the coupon is applied.
I had expected coupons to be applied when the customer enters the coupon data, but by default they are applied when the order status is updated to 'Processing'.
Thanks,
Marty
I'm still unsure about this working correctly.
It works correctly if your payment order status is set to one of the "Processing" or "Completed" statuses at the time of checkout. So if I have the actual order status of "Processing" checked and then set my payment order status = "Processing" then the coupon is redeemed.
But if I set the payment status = to "Pending" or some other order status not checked in the Processing or Completed areas during checkout, the confirm function does not get called... which is fine. But if I then goto the admin area and change the status to "Processing".. I see nothing in place to call model_coupon_confirm() function or any attempt at inserting into coupon_history table. So the coupon never gets redeemed. This means the customer can reuse the coupon over and over if he was supposed to have a limit.
Test this:
1. Set the Processing and completed statuses to processing and completed respectively.
2. Set Cash on Delivery order status = Pending
3. Set a coupon for single use per customer
4. Checkout with the coupon and use COD to pay
5. Check the coupon history, you'll see it has none.
6. Set the order to "Processing" from the admin and check the coupon history again. It is STILL blank
7. Now try to checkout again with that coupon. It should still work since it didn't find an existing coupon in the history
This time, be sure COD is set to "processing" Now when you checkout, the coupon history should be updated immediately
8. Next time you try to use that coupon, it will disallow it which is correct now that there is a coupon history.
So the issue is that there needs to be a call to the "confirm" function of all order totals when the admin updates the status to one of the config settings for processing or completed.
It works correctly if your payment order status is set to one of the "Processing" or "Completed" statuses at the time of checkout. So if I have the actual order status of "Processing" checked and then set my payment order status = "Processing" then the coupon is redeemed.
But if I set the payment status = to "Pending" or some other order status not checked in the Processing or Completed areas during checkout, the confirm function does not get called... which is fine. But if I then goto the admin area and change the status to "Processing".. I see nothing in place to call model_coupon_confirm() function or any attempt at inserting into coupon_history table. So the coupon never gets redeemed. This means the customer can reuse the coupon over and over if he was supposed to have a limit.
Test this:
1. Set the Processing and completed statuses to processing and completed respectively.
2. Set Cash on Delivery order status = Pending
3. Set a coupon for single use per customer
4. Checkout with the coupon and use COD to pay
5. Check the coupon history, you'll see it has none.
6. Set the order to "Processing" from the admin and check the coupon history again. It is STILL blank
7. Now try to checkout again with that coupon. It should still work since it didn't find an existing coupon in the history
This time, be sure COD is set to "processing" Now when you checkout, the coupon history should be updated immediately
8. Next time you try to use that coupon, it will disallow it which is correct now that there is a coupon history.
So the issue is that there needs to be a call to the "confirm" function of all order totals when the admin updates the status to one of the config settings for processing or completed.
same problem here in 2.0.3.1, anyone find a solution?
A related problem, the voucher recipient is supposed to receive an email which is not happening. There is a fix mentioned here at https://github.com/opencart/opencart/issues/3093 but not sure how to find/apply the fix (short of upgrade to 2.1).
Thoughts anyone?
A related problem, the voucher recipient is supposed to receive an email which is not happening. There is a fix mentioned here at https://github.com/opencart/opencart/issues/3093 but not sure how to find/apply the fix (short of upgrade to 2.1).
Thoughts anyone?
I think the problem is in /catalog/model/total/coupon.php
When $coupon_info calls the function getCoupon it returns nothing, as the function also has other variables from the cart, and the cart is emptied while the system checks for payment confirmation. However, in the confirm function we don't need any of these variables, but coupon_id only. Thus, to correct the problem, i created another function called getCouponInfo to call coupon_id. As i am new to PHP and coding it might not be the best solution but it worked for me. I inserted the code as below.
To simplify, i changed getCoupon to getCouponInfo, and added the getCouponInfo function. Hope it will solve some people's problem, as it took me days to find the problem
Code: Select all
if ($code) {
$coupon_info = $this->getCoupon($code);
if ($coupon_info) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "coupon_history` SET coupon_id = '" . (int)$coupon_info['coupon_id'] . "', order_id = '" . (int)$order_info['order_id'] . "', customer_id = '" . (int)$order_info['customer_id'] . "', amount = '" . (float)$order_total['value'] . "', date_added = NOW()");
} else {
return $this->config->get('config_fraud_status_id');
}
}
Code: Select all
public function getCouponInfo($code) {
$status = true;
$coupon_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "coupon` WHERE code = '" . $this->db->escape($code) . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");
if ($status) {
return array(
'coupon_id' => $coupon_query->row['coupon_id'],
);
}
}
public function confirm($order_info, $order_total) {
$code = '';
$start = strpos($order_total['title'], '(') + 1;
$end = strrpos($order_total['title'], ')');
if ($start && $end) {
$code = substr($order_total['title'], $start, $end - $start);
}
if ($code) {
$coupon_info = $this->getCouponInfo($code);
if ($coupon_info) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "coupon_history` SET coupon_id = '" . (int)$coupon_info['coupon_id'] . "', order_id = '" . (int)$order_info['order_id'] . "', customer_id = '" . (int)$order_info['customer_id'] . "', amount = '" . (float)$order_total['value'] . "', date_added = NOW()");
} else {
return $this->config->get('config_fraud_status_id');
}
}
}
To simplify, i changed getCoupon to getCouponInfo, and added the getCouponInfo function. Hope it will solve some people's problem, as it took me days to find the problem
Who is online
Users browsing this forum: No registered users and 35 guests