Перерасчет заказа на API

Алексей Будагов,

Одним методом не обойтись, тут надо комплексно заново применять все скидки и считать сумму. Пример есть в файле /bitrix/modules/sale/admin/order_edit.php:176

Если были добавлены скидки и нужно сделать перерасчет, можно так:

\Bitrix\Main\Loader::includeModule('sale');

$order = \Bitrix\Sale\Order::load($orderId); // или $order = \Bitrix\Sale\Order::loadByAccountNumber($orderNumber);

$discount = $order->getDiscount();
\Bitrix\Sale\DiscountCouponsManager::clearApply(true);
\Bitrix\Sale\DiscountCouponsManager::useSavedCouponsForApply(true);
$discount->setOrderRefresh(true);
$discount->setApplyResult(array());

/** @var \Bitrix\Sale\Basket $basket */
if (!($basket = $order->getBasket())) {
   throw new \Bitrix\Main\ObjectNotFoundException('Entity "Basket" not found');
}

$basket->refreshData(array('PRICE', 'COUPONS'));
$discount->calculate();
$order->save();
Опубликовано 31 Мая 2017
делаюИМ, примеры d7

Возврат к списку

Комментарии
Юлиана
23 Ноя 2017
это когда заказ создан, а на этапе его создания как показывать применение купонов скидок?
Алексей Будагов
Алексей Будагов
23 Ноя 2017
Юлиана, мне кажется что этот код должен работать и при создании заказа через API, вы же для начала создаете объект заказа $order = Order::create(), потом добавляете в него корзину $order->setBasket() и скидки. И после можно пересчитать.

Вообще рекомендую посмотреть код корзины, там же применяется купон без создания заказа.