Ошибка при удалении скидки

Тема в разделе "PrestaShop", создана пользователем idema, 18 июл 2019.

Информация :
Приветствую гость, обрати внимание! Темы которые закреплены в разделах, в скором времени будут откреплены. Правила раздела PrestaShop

(Не актуальные темы) Каталоги:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
(Не актуальные темы) Поиск / Запросы:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
Полезная информация:Поддержка и помощь c PrestaShopУбираем ПрестаТраст, стучалки и прочую рекламуСовместные покупки модулей и шаблоновПеревод Prestashop и модулей
Модераторы: trace
  1. idema

    idema Постоялец

    Регистр.:
    16 ноя 2013
    Сообщения:
    75
    Симпатии:
    22
    Всем привет. Иногда нужно удалить скидку и пересчитать заново, так переодически при удалении скидки возникает ошибка
    [​IMG]
    Обновляю страницу, пишет - Не возможно отредактировать это Правило Корзины Заказа
    И скидка все равно остается, приходится лезть в базу данных и там вручную удалять.
    Из за чего ошибка появилась я не знаю, просто в один день стала выскакивать и всё. И у части заказов выскакивает, у части нет.
    Подскажите пожалуйста как ее исправить.
     
    noobasse нравится это.
  2. Zveruga76

    Zveruga76

    Регистр.:
    20 июл 2013
    Сообщения:
    281
    Симпатии:
    416
    Скидка процентная или фиксированная сумма?
     
    idema нравится это.
  3. idema

    idema Постоялец

    Регистр.:
    16 ноя 2013
    Сообщения:
    75
    Симпатии:
    22
    Процентная, при чем она автоматически была рассчитана для покупателя, т.е. применилось ценовое правило корзины
     
  4. Zveruga76

    Zveruga76

    Регистр.:
    20 июл 2013
    Сообщения:
    281
    Симпатии:
    416
    Это баг престы. При определенных ситуациях в случае процентной скидки поле total_discount при перерасчете получает после запятой кучу цифр (обычно девяток) .999999999999999 , т.е. цифр больше чем 9шт, а преста не делает округление этой суммы. Затем при сохранении заказа идет проверка на isPrice, а там правило, что максимум 9 цифр после запятой

    public static function isPrice($price)
    {
    return preg_match('/^[0-9]{1,10}(\.[0-9]{1,9})?$/', $price);
    }

    Для избежания этой ситуации надо

    а) исправить в /classes/Validate.php (или сделать оверрайд) функцию isPrice() и прописать больше цифр после запятой (что является идеологически неверно)

    или

    б) в /controllers/admin/AdminOrdersController.php (или сделать оверрайд) найти функцию postProcess() в ней найти строку $order_cart_rule->delete(); с комментарием // Delete Order Cart Rule and update Order и строкой ниже перед вызовом $order->update(); вставить новую строчку $order->total_discounts = Tools::ps_round($order->total_discounts, 2);
     
    cepera_007, Belena27089, idema и 2 другим нравится это.
  5. Zveruga76

    Zveruga76

    Регистр.:
    20 июл 2013
    Сообщения:
    281
    Симпатии:
    416
    Смайлик с языком является на самом деле функцией
    Код:
    Tools::ps_round
    :)
     
    Belena27089, idema и _sashok нравится это.