@vardoLP
Ват ю сэй эбаут май мама?!

Как добавить товар в существующий заказ?

Всем привет.

Наведите на мысль, как сделать добавление товара в уже созданный заказ? У меня есть функционал для определенной группы юзеров, которые делают заказы. У них есть свой админ, который проверяет заказы. То есть он видит список всех заказов и товары в них (это все реализовано на фронте). Нужно сделать возможность в любой заказ добавить новый товар.
  • Вопрос задан
  • 1601 просмотр
Пригласить эксперта
Ответы на вопрос 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
1) Нужно добавить товар в корзину заказа:
//$products массив id товаров, которые надо добавить
$basket = $order->getBasket();

$quantity = 1;
foreach ($products as $productId) {
    $item = $basket->createItem('catalog', $productId);
    $item->setFields(array(
        'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
        'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
        'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
    ));
    $item->setField("QUANTITY", quantity);
    $newBasketItems[] = $item;
}


2) Добавить новые товары из корзины в отгрузку (или создать новую отгрузку и добавить туда)
//В этом примере товары добавляются в первую попавшуюся НЕ СИСТЕМНУЮ отгрузку.
$shipmentCollection = $order->getShipmentCollection();
foreach ($shipmentCollection as $shipment) {
    if (!$shipment->isSystem()) {
        foreach ($newBasketItems as $newBasketItem) {
            /** @var \Bitrix\Sale\Shipment $shipment */
            $shipmentItemCollection = $shipment->getShipmentItemCollection();
            $shipmentItem = $shipmentItemCollection->createItem($newBasketItem);
            $shipmentItem->setQuantity($item->getQuantity());
        }
        break;
    }
}


3) Пересчитать заказ
$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();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы