Задать вопрос
@photosho

Как правильно обновить заказ с сохранением купона?

Есть метод обновления корзины, который удаляет из существующего заказа все товары и добавляет товар по переданному 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();
}


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

  1. Если купон активен, он деактивируется внутри заказа.
  2. Если неактивен, активируется.


Получается, попеременно купон то активен, то нет. В чём может быть дело?
  • Вопрос задан
  • 15 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы