Есть метод обновления корзины, который удаляет из существующего заказа все товары и добавляет товар по переданному ID:
public static function refreshBasket($orderId, $productId) {
if (!$productId) return;
$order = Order::load($orderId);
$orderInfo = self::getOrderData($order);
if (!$order) return;
$basket = $order->getBasket();
foreach ($basket->getBasketItems() as $basketItem)
$basketItem->delete();
$item = $basket->createItem('catalog', $productId);
$item->setFields([
'QUANTITY' => 1,
'CURRENCY' => $orderInfo['CURRENCY'],
'LID' => Context::getCurrent()->getSite(),
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
]);
$basketItems[] = $item;
$shipmentCollection = $order->getShipmentCollection();
foreach ($shipmentCollection as $shipment) {
if (!$shipment->isSystem()) {
foreach ($basketItems as $basketItem) {
$shipmentItemCollection = $shipment->getShipmentItemCollection();
$shipmentItem = $shipmentItemCollection->createItem($basketItem);
$shipmentItem->setQuantity($item->getQuantity());
}
break;
}
}
if (!($basket = $order->getBasket()))
throw new ObjectNotFoundException('Entity "Basket" not found');
$order->doFinalAction(true);
$basket->refreshData(array('PRICE', 'COUPONS'));
$order->save();
}
Если к заказу привязан купон со скидкой, то в результате работы метода:
- Если купон активен, он деактивируется внутри заказа.
- Если неактивен, активируется.
Получается, попеременно купон то активен, то нет. В чём может быть дело?