С промо кодом, тут всё понятно, как на престе в разделе Правила корзины
А вот теперь интересное, предоставление скидок по картам клиентов. Есть таблица с клиентами, где помимо прочего указана скидка для конкретного клиента. Она может быть 5, 10 или 15 процентов.
Я хочу сделать так, в правилах корзины для престы создать дополнительно три скидки соответственно на 5, 10 и 15 процентов.
Теперь, чтобы рассчитать общую скидку я выполняю для промо кода
$cartRule = new CartRule(CartRule::getIdByCode(your_discount_code));
$this->context->cart->addCartRule($cartRule->id);
и после этого делаю запрос в базу по клиентам, узнаю какая у него скидка и в зависимости от этого подставляю один из трёх кодов:
$cartRule = new CartRule(CartRule::getIdByCode(discount_code_5_10_15));
$this->context->cart->addCartRule($cartRule->id);
Таки образом к корзине добавиться две скидки: одна по промо коду, а другая в зависимости от карты.
Все изменения думаю провести в ParentOrderController. Там где:
if (($cartRule = new CartRule(CartRule::getIdByCode($code))) && Validate::isLoadedObject($cartRule))
{
if ($error = $cartRule->checkValidity($this->context, false, true))
$this->errors[] = $error;
else
{
$this->context->cart->addCartRule($cartRule->id);
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1)
Tools::redirect('index.php?controller=order-opc&addingCartRule=1');
Tools::redirect('index.php?controller=order&addingCartRule=1');
}
Так правильно будет сделать?
Сработает ли для одной корзины подряд несколько разных скидок?
$this->context->cart->addCartRule(...1);
$this->context->cart->addCartRule(...2);