Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Не отображаются купоны в истории


AlexNikbiz

Recommended Posts

Столкнулся с проблемой: создал купон, сделал заказ, в админке поменял статус на доставлен. В результате купон как не отображался до изменения статуса, так и не отображается в истории. Это необходимо, чтобы отслеживать - по какому купону сколько сделали заказов. Второй день ковыряю просторы интернета - не могу найти ответ! Версия: Opencart 2.3.0.2

Если у кого есть какие мысли - буду рад!

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 8 months later...
В 23.04.2019 в 19:08, AlexNikbiz сказал:

Столкнулся с проблемой: создал купон, сделал заказ, в админке поменял статус на доставлен. В результате купон как не отображался до изменения статуса, так и не отображается в истории. Это необходимо, чтобы отслеживать - по какому купону сколько сделали заказов. Второй день ковыряю просторы интернета - не могу найти ответ! Версия: Opencart 2.3.0.2

Если у кого есть какие мысли - буду рад!

 

та же проблема, жаль никто решения не знает.

Надіслати
Поділитися на інших сайтах


Решение тут, только для зарегистрированных пользователей действует https://forum.opencart.com/viewtopic.php?t=137616
Иногда при использовании купона опенкарт просто не записывает данные о клиенте в режиме гостя, поэтому купон можно использовать несколько раз одним и тем же клиентом. Причина не ясна. Данный способ позволяет хотя бы привести его в рабочее состояние для зарегистрированых пользователей.

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Напишу ответ в теме. Пришлось самому поковырять и понять в чем дело :)

Решение то что выше описано (с англоязычного форума) помогает когда в поле 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);
            }
        }

 

 

 

  • +1 1
Надіслати
Поділитися на інших сайтах


В 24.02.2021 в 19:40, mulection сказал:

Напишу ответ в теме. Пришлось самому поковырять и понять в чем дело :)

Решение то что выше описано (с англоязычного форума) помогает когда в поле totals написан сам купон.

 

Но у меня всё равно не работало из-за особенности (ниже почему)

 

Проблема: OcStore почему-то записывает историю использования купона путем вытаскивания кода купона с полей totals, но когда там вместо купона просто слово "Купон" он не может найти подходящий и не записывает его в историю.

 

Ниже описываю решение с форума что выше указан + свои правки.

 

 

У вас всегда не отображалась история ? У меня раньше отображалась, а в 2021 году исчезла.) На 2-м и на 3-м опенкарте. 

Надіслати
Поділитися на інших сайтах


  • 2 years later...

Дякую за рішення проблеми! OcStore 3.0.3.7 + кошик Simple теж не записувались купони в історію і таким чином були безкінечними. Допомогли правки за аналогією вашого рішення. Нижче цитую ваш варіант з поправкою інструкції під OcStore 3.0.3.7

 

24.02.2021 в 19:40, mulection сказал:

Решение:

catalog/model/extension/total/coupon.php

 

Выше этого:

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

 

 

Змінено користувачем paulkouls
Надіслати
Поділитися на інших сайтах


  • 1 month later...
В 13.08.2023 в 12:07, paulkouls сказав:

Дякую за рішення проблеми! OcStore 3.0.3.7 + кошик Simple теж не записувались купони в історію і таким чином були безкінечними. Допомогли правки за аналогією вашого рішення. Нижче цитую ваш варіант з поправкою інструкції під OcStore 3.0.3.7

 

 

 

Корект по ситуації з купонами - все одно не записувались після оплат-онлайн. Вирішено рішенням з англомовного форуму. Продублюю сюди для історії

 

Для ocStore 3.0.3.7 у файлі  /catalog/model/extension/total/coupon.php

 

цей код (всю функцію confirm):

 

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) {
			$status = true;
			
			$coupon_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "coupon` WHERE code = '" . $this->db->escape($code) . "' AND status = '1'");

			if ($coupon_query->num_rows) {
				$coupon_total = $this->getTotalCouponHistoriesByCoupon($code);
	
				if ($coupon_query->row['uses_total'] > 0 && ($coupon_total >= $coupon_query->row['uses_total'])) {
					$status = false;
				}
				
				if ($order_info['customer_id']) {
					$customer_total = $this->getTotalCouponHistoriesByCustomerId($code, $order_info['customer_id']);
					
					if ($coupon_query->row['uses_customer'] > 0 && ($customer_total >= $coupon_query->row['uses_customer'])) {
						$status = false;
					}
				}
			} else {
				$status = false;	
			}

			if ($status) {
				$this->db->query("INSERT INTO `" . DB_PREFIX . "coupon_history` SET coupon_id = '" . (int)$coupon_query->row['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');
			}
		}
	}

 

замінити на:

 

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

 

і оновити модифікатори. В мене виправило роботу купонів в усіх модулях оплати.

Змінено користувачем paulkouls
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.