Автор Тема: неверно считает скидку при нескольких товарах  (Прочитано 73 раз)

05 Август 2019, 13:05:15
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Установил купон на % скидки от суммы корзины, поставил "исключая товары со скидкой" и presta считает так:
 - если один или несколько товаров по нормальной цене (т.е. по полной без всяких скидок и акций), то все ок берет общ стоимость и применяет купон на скидку как надо
 - если одни товар в корзине и он со скидкой - все ок, отказывает в применении купона на скидку
 - если несколько разных товаров в корзине (часть из них на скидке (т.е. распродажные) и они должны быть исключены ) берет общ сумму корзины и считает от ее скидку (не должно быть так)!

т.е. надо чтоб скидка применялась только к нераспродажным товарам и не учитывала товары со скидкой при формировании итогового чека.
Данную проблему проверял на prestashop 1.7.5-1.7.6 везде неверно считает корзину. Подскажите, может кто сталкивался - в чем может быть загвоздка?


05 Август 2019, 14:10:00
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1379
  • Репутация: +22/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Этот баг так и не исправили
https://github.com/PrestaShop/PrestaShop/issues/10300
перенести в следующую версию
05 Август 2019, 22:32:46
Ответ #2
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за подсказку. Но там устаревшие данные.
https://github.com/PrestaShop/PrestaShop/pull/13704/commits/5098b154b0bf566011515083bf6f6c44b7a37330
конкретно этот баг тут правили.

Мало ли пригодится кому (мне помогло). В файле src/Core/Cart/CartRuleCalculator.php  выкидываем 103 и 104 строчки и делаем так:
 // Discount (%) on the whole order
        if ($cartRule->reduction_percent && $cartRule->reduction_product == 0) {
            foreach ($this->cartRows as $cartRow) {
                $product = $cartRow->getRowData();
                if ((($cartRule->reduction_exclude_special && !$product['reduction_applies'])
                        || !$cartRule->reduction_exclude_special)) {
                    $amount = $cartRow->applyPercentageDiscount($cartRule->reduction_percent);
                    $cartRuleData->addDiscountApplied($amount);
                }
            }
        }