Доброго дня.
пытаюсь разобраться как можно разбить конкретный заказ на несколько.
т.е. каждую позицию перенести в новый заказ.
<?php
use Bitrix\Main\EventManager;
// Регистрируем обработчик события
EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleComponentOrderOneStepComplete',
'createSeparateOrders'
);
function createSeparateOrders($orderId)
{
if (intval($orderId) <= 0) {
// Если ID заказа не передан или некорректен, выходим из функции
return;
}
\Bitrix\Main\Loader::includeModule("sale");
$order = \Bitrix\Sale\Order::load($orderId); // Загружаем оформленный заказ по его ID
if (!$order) {
// Если заказ не найден, выходим из функции
return;
}
$basket = $order->getBasket();
if (!$basket) {
// Если корзина заказа не найдена, выходим из функции
return;
}
$basketItems = $basket->getBasketItems();
// Проверяем количество позиций в корзине
$numItems = count($basketItems);
// Если в корзине есть более одной позиции, разбиваем заказ
if ($numItems > 1) {
// Создаем новый заказ для каждой позиции
foreach ($basketItems as $basketItem) {
// Получаем цену и количество товара из текущей позиции корзины
$price = $basketItem->getPrice();
$quantity = $basketItem->getQuantity();
// Если цена или количество не заданы, пропускаем эту позицию
if ($price <= 0 || $quantity <= 0) {
continue;
}
// Создаем новый заказ
$newOrder = \Bitrix\Sale\Order::create($order->getSiteId(), $order->getUserId());
// Создаем новую корзину для нового заказа и добавляем в нее текущую позицию
$newBasket = \Bitrix\Sale\Basket::create($order->getSiteId());
$newBasketItem = $newBasket->createItem('catalog', $basketItem->getProductId());
// Устанавливаем цену и количество для новой позиции корзины
$newBasketItem->setField('PRICE', $price);
$newBasketItem->setField('QUANTITY', $quantity);
// Устанавливаем остальные параметры позиции заказа, если они известны
$newBasketItem->setField('NAME', $basketItem->getField('NAME'));
$newBasketItem->setField('CURRENCY', $basketItem->getCurrency());
$newOrder->setBasket($newBasket);
// Попытка сохранить новый заказ
$result = $newOrder->save();
if ($result->isSuccess()) {
echo 'Новый заказ успешно создан.<br>';
} else {
echo 'Ошибка при создании нового заказа: ' . implode(', ', $result->getErrorMessages()) . '<br>';
}
}
} else {
// Если в корзине была только одна позиция или вообще не было позиций,
// сохраняем заказ вне зависимости от условия
$order->save();
}
}
?>
я это делаю все под админом и у меня создается отдельные товары со значением суммы 0. хотя сумму в коде передаю на запись