При оформление заказа необходимо добавлять каждый товар в свою отгрузку, при этом весь функционал купонов скидок должен сохраниться?
Проблема в том что при удаление отгрузки или элемента из отгрузки в событии onSaleComponentOrderCreated (работает с объектом а не созданным заказом) слетает привязка купона к заказу. т.е. он выполняется но не проставляется в самом заказе
Событие onSaleComponentOrderCreated работает в sale.order.ajax, т.е. заказ существует только как объект
/** @var Sale\ShipmentCollection $shipmentCollection */
$shipmentCollection = $order->getShipmentCollection();
$service = Sale\Delivery\Services\Manager::getById(Sale\Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId());
/** @var Sale\Shipment $shipment */
foreach ($shipmentCollection as $shipment)
{
if($shipment->isSystem())
continue;
$shipmentItemCollection = $shipment->getShipmentItemCollection();
$firstProduct = true;
if($shipmentItemCollection->count() > 1)
{
//Проход по всем товарам отгрузки и добавление новых отгрузок
/** @var Sale\ShipmentItem $item */
foreach ($shipmentItemCollection as $key=>$item)
{
$basketItem = $item->getBasketItem();
if($basketItem->isBundleChild())
continue;
if($firstProduct == true)
{ //Первый продукт не удаляем из отгрузки
$firstProduct = false;
continue;
}
$item->delete();
$newShipment = $shipmentCollection->createItem();
$newShipmentItemCollection = $newShipment->getShipmentItemCollection();
$newShipment->setField('CURRENCY', $order->getCurrency());
/** @var Sale\ShipmentItem $shipmentItem */
$shipmentItem = $newShipmentItemCollection->createItem($basketItem);
$shipmentItem->setQuantity($basketItem->getQuantity());
$newShipment->setFields(array(
'DELIVERY_ID' => $service['ID'],
'DELIVERY_NAME' => $service['NAME'],
'CURRENCY' => $order->getCurrency()
));
}
}
}