Всем доброго дня! Очень нужна помощь разбирающегося человека, для помощи в Opencart 2.x:
На данном форуме нашел любезно предоставленный пользователем bmite бесплатный код, который решает вопрос по "включению определенной скидки товара, в зависимости от общей суммы заказа" (в его варианте от 3000 руб.). Однако, в нем есть одна недоработка (для меня): если скидок у товара несколько, то код выбирает самую минимальную цену... а мне необходимо, чтобы он выбирал цену "по приоритету" или по увеличению "кол-ва товара" в условиях скидки. Например:
от 3000 руб. - первая скидка
от 5000 руб. - вторая скидка
от 10000 руб. - третья скидка
и т.д.
в файле system/library/cart.php
заменить код в блоке // Product Discounts на вот этот:
// Product Discounts
$discount_quantity = 0;
$cart_2_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");
// Блок по кастомным скидкам
$tmp_price = 0;
foreach ($cart_2_query->rows as $prod) {
$objProduct = $this->db->query("SELECT * FROM " . DB_PREFIX . "product WHERE product_id = " . (int)$prod['product_id']);
$tmp_price += $objProduct->row['price'] * $prod['quantity'];
}
// Конец блока по кастомным скидкам
// Блок по кастомным скидкам
if ($tmp_price >= 3000) { // условие по кастомным скидкам
$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1");
if ($product_discount_query->num_rows) {
$price = $product_discount_query->row['price'];
}
} // Конец блока по кастомным скидкам
https://opencartforum.com/topic/117682-resheno-vklyuchenie-skidki-ot-summy-zakaza/?tab=comments#comment-1136198
Пока что, я додумался только до совсем кривого варианта:
1. Первая скидка активируется от 3000 руб. сортировкой по возрастанию кол-ва заказываемого товара:
$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity ASC LIMIT 1");
2. Вторая скидка активируется от 5000 руб. сортировкой по установленному приоритету (для этого в товаре ставлю второй скидке приоритет "1", первой "0", третьей "0"):
$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority DESC LIMIT 1");
3. Третья скидка активируется от 10000 руб. обратной сортировкой по возрастанию кол-ва заказываемого товара:
$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC LIMIT 1");
А вот как правильно добавить сюда промежуточные варианты скидок?
Автор кода, к сожалению, занят и не смог мне помочь с решением моей задачи, и его ветка закрыта для сообщений, поэтому, я очень надеюсь, он не обидится на меня за размещение здесь его кода. А я сам, методом тыка, не смог достичь "правильного" результата. Поэтому, вынужден обратиться за помощью к сообществу данного форума: если кто-то сможет помочь, то буду очень признателен. Заранее премного благодарен всем, кто откликнется!