Клиент: Баг сомнительного содержания. Цена указана со скидкой, но при добавлении в корзину - полная стоимость. Поддержка: Не вижу проблем, в корзине скидка учтена. Клиент: Вы попробуйте штук 10 добавить.
ОК, давайте щас попробуем...
Баг сомнительного содержания
Значит, есть страница товара в магазе на движке PrestaShop 1.6, в настройках (товара) которого:
ЦЕНЫ -> ПО ЦЕНЕ ТОВАРА Оптовая цена $0.49 Розничная цена $0.570000 Налоговые правила Без налогов ЦЕНЫ -> СПЕЦИАЛЬНЫЕ ЦЕНЫ Установлено 4 правила: № правила Влияние (скидка) от (количество) 1) $0.15 (Вкл. НДС) 1 2) 1 % 10 3) 3 % 20 4) 5 % 50 Остальные параметры для всех правил: Правило - Комбинация Все комбинации Валюта Всех валют Страна Все страны Группа Всех групп Клиент Все покупатели Фиксированная цена - (без НДС) Период Неограниченно КОМБИНАЦИИ (варианты товара) Пара атрибут - значение Влияние на цену Рога - без копыт $0.00 Рога - с копытами $0.10
Товара Рога - без копыт нет в наличии, остались только Рога - с копытами, что добавляет 10 центов к Розничная цена и в итоге = $0.67 за штуку.
Отдельно от настроек товара функцией по API ПрибацБанка проверяется текущий курс доллара, который равен: 36,920741 UAH (1 цент = 0,36920741).
Розничная цена товара Рога - с копытами без скидки в UAH: 0,36920741 * 67 = 24,74 (24,73689647)
Теперь разбираемся почему, если штук 10 добавить, как заявляет Клиент - полная стоимость...
Правило скидки 1
Условия скидки согласно Правило скидки 1:
- от (количество) 1
- Скидка в центах $0.15
- Скидка в UAH: 0,36920741 * 15 = 5,54 (5,53811115)
На странице товара цена за штуку:
- Базовая цена 24,74 UAH
- Скидка -5,54 UAH
- Итоговая цена 19,20 UAH
Правило 1 срабатывает на число товаров до 10 (т.е. на 9 штук):
19,20 UAH * 9 = 172,8 UAH (172,79 в корзине)
Разница в 1-у копейку получилась из-за округления цены в большую сторону фронтенд-скриптом:
var our_price_display = parseFloat(our_price_display).toFixed(2);
А корзина выдала более точную итоговую цену.
Правило скидки 2
Условия скидки согласно Правило скидки 2:
- от (количество) 10
- Скидка в ПРОцентах 1%
Правило 2 срабатывает на число товаров ОТ 10 ДО 20 штук, соответственно Правило 1 уже не применяется:
Базовая цена за 10 штук: 24,73689647 * 10 = 247,3689647
Вычисляем скидку в 1% от заказа Рога - с копытами 10 штук: 247,3689647 / 100 = 2,473689647
Вычисляем итоговую стоимость со скидкой: 247,3689647 - 2,473689647 = 244,90 (244,895275053)
Получилось дороже (244,90), чем при заказе до 10 штук (172,79).
Аналогично по оставшимся правилам от 20 и 50 штук вычисляем скидку в 3% и 5% соответственно.
Правила скидки на все товары
Материал наверно будет не полным если не упомянуть про скидку применяему сразу на все товары каталога или на отдельную их категорию, например на период нового года или какого-то иного знакового события - возможно, что Баг сомнительного содержания спрятался именно там...
Ведь можно умом тронуться, если предположим нужно установить скидку сразу на все товары и делать это отдельно в настройках каждого товара!
Установить скидку сразу на все товары или на отдельную их категорию можно следующим образом
- Меню - Ценовые правила - Ценовые правила каталога, Добавить - Ценовые правила каталога можно установить правило скидки на весь каталог:
- Валюта
- Страна
- Группа (посетитель / гость)
- От количества
- Цена без НДС или Оставить базовую цену
- Дата С и По
- Тип скидки (итого / процент)
- Снижение с учётом или без учёта налогов
- Там же добавив Группа условий - Добавить новую группу условий можно уточнить условия скидки по таким критериям как:
- Категория
- Производитель
- Поставщик
- Атрибуты
- Характеристики
В англорептилоидном варианте данный пункт меню может называться Price Rules - Catalog Price Rules - Add new.
По-идее массовая скидка на все товары каталога должна перекрывать правила скидок в настройках каждого отдельного товара.
Эпилог
В действительности всё не так, как на самом деле.
Баг сомнительного содержания
по факту оказался неправильно используемой фичей.
Всё в порядке, скидки на Рога - с копытами вычисляются так, как определено управляющим магазина в настройках товара!
И тут вспомнился анекдот:
- сисьадмин: в отпуске на море, ему звонит заказчик и просит пароль от сервера, а тот ему и отвечает z@еб@ли вы меня.
- заказчик: я понимаю, что ты отдыхаешь, но зачем же так резко?!
- сисьадмин: да я пароль от сервера ж говорю - z@еб@ли вы меня по русским кнопкам, при английской раскладке, маленькими буквами и без пробелов.
Жаль только, что я не в отпуске и не на море!
Похожие Баги сомнительного содержания могут встречаться на говно-сайтах крупных шмаркетплейсов и торговых сетей, пользуясь которыми можно покупать существенно дешевле да ещё и с бесплатной доставкой, чем оффлайн по ценникам в магазине.

