Напишу ответ в теме. Пришлось самому поковырять и понять в чем дело
Решение то что выше описано (с англоязычного форума) помогает когда в поле totals написан сам купон.
Но у меня всё равно не работало из-за особенности (ниже почему)
Проблема: OcStore почему-то записывает историю использования купона путем вытаскивания кода купона с полей totals, но когда там вместо купона просто слово "Купон" он не может найти подходящий и не записывает его в историю.
Ниже описываю решение с форума что выше указан + свои правки.
Решение:
/catalog/controller/total/coupon.php
*** Правки с англоязычного форума ***
Вместо:
$coupon_info = $this->getCoupon($code);
Поставить:
$coupon_info = $this->getCouponInfo($code);
Выше этого:
public function confirm($order_info, $order_total) {
Добавить:
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'],
);
}
}
_____________________________________
Вместо:
$code = '';
$start = strpos($order_total['title'], '(') + 1;
$end = strrpos($order_total['title'], ')');
if ($start && $end) {
$code = substr($order_total['title'], $start, $end - $start);
}
Поставить:
if(isset($this->session->data['coupon'])){
$code = $this->session->data['coupon'];
}else{
$code = '';
$start = strpos($order_total['title'], '(') + 1;
$end = strrpos($order_total['title'], ')');
if ($start && $end) {
$code = substr($order_total['title'], $start, $end - $start);
}
}