Заменить цены товаров в корзине на следующий день

Приветствую! Помогите разобраться с такой проблемой — воюю уже который день.
Дело в том, что в магазине установлен mionishop2 и Discontrol. Есть скидки например по часам, допустим только вечером. Но если пользователь положил товар в корзину вечером по скидке, он может купить его утром по той же цене, что была по скидке. Хотелось бы проверять, есть ли текущая скидка на товар и заменять цену на прежнюю. Я создал кастомный класс msOrderHandler, туда прописал вызов сниппета dcProductDiscount где сверяю, есть ли к товарам в корзине какие-нибудь скидки, но как корректно вернуть цены в корзину я так и не понял. Пытался делать так (добавил это в кастомный класс заказа в метод getCost):

$ms2cart = $this->ms2->cart->get();
        foreach ($ms2cart as $key => $value) {
            $discount = 0;
            $product = $this->modx->getObject('modResource', $value['id']);
            $msData = $this->modx->getObject('msProductData', $value['id']);
            $format = $pdo->runSnippet('dcProductDiscount', [
                'product' => $value['id'],
                'tplRow' => '@INLINE {$format.discount}',
            ]);
            //щепотка быдлокода
            if ($format != '<div>No discounts</div>') {
                $discount += $format;
            }


            if ($discount == 0) {
                $this->modx->log(1, 'Скидка кончилась' . $value['id']);
                if (($msData->get('old_price') > 0) && ($msData->get('price') > $msData->get('old_price'))) {
                    $ms2cart[$key]['price'] = $msData->get('old_price');
                } else {
                    $ms2cart[$key]['price'] = $msData->get('price');
                }
            } else {
                $this->modx->log(1, 'скидка ' . $value['id']. '   '.$discount);
            }
        }
        //$this->modx->log(1, print_r($ms2cart, 1));
        $this->ms2->cart->set($ms2cart);
Но это как-то не очень срабатывает — во-первых срабатывает только при второй перезагрузке корзины, а во-вторых, почему-то только для первого товара в корзине(
Что я делаю не так?
Дмитрий
13 апреля 2019, 19:07
modx.pro
688
0
Поблагодарить автора Отправить деньги

Комментарии: 1

Владимир Бабусенко
14 апреля 2019, 17:39
0
Делай через плагин (OnHandleRequest), в нем бери корзину, проходи по товарам в корзине… и меняй цену в корзине.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1