- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/exchange/entity/shipmentimport.php
- Класс: BitrixSaleExchangeEntityShipmentImport
- Вызов: ShipmentImport::fillShipmentItems
private function fillShipmentItems(Shipment $shipment, SaleBasketBase $basket, array $params)
{
$result = new SaleResult();
/** @var Order $order */
$order = $basket->getOrder();
$fieldsBasketItems = $params['ITEMS'];
if(is_array($fieldsBasketItems))
{
foreach($fieldsBasketItems as $items)
{
foreach($items as $productXML_ID => $item)
{
if($productXML_ID == ExchangeImportOneCBase::DELIVERY_SERVICE_XMLID)
continue;
if($item['TYPE'] == ExchangeImportBase::ITEM_ITEM)
{
if($basketItem = $this->getBasketItemByItem($basket, $item))
{
$basketItemQuantity = $this->getBasketItemQuantity($order, $basketItem);
$shipmentItem = static::getShipmentItem($shipment, $basketItem);
$deltaQuantity = $item['QUANTITY'] - $shipmentItem->getQuantity();
if($deltaQuantity < 0)
{
$result = $this->fillShipmentItem($shipmentItem, 0, abs($deltaQuantity));
}
elseif($deltaQuantity > 0)
{
if($basketItemQuantity >= $item['QUANTITY'])
{
$systemShipment = $order->getShipmentCollection()->getSystemShipment();
$systemBasketQuantity = $systemShipment->getBasketItemQuantity($basketItem);
if($systemBasketQuantity >= $deltaQuantity)
{
$this->fillShipmentItem($shipmentItem, $item['QUANTITY'], $shipmentItem->getQuantity());
}
else
{
$needQuantity = $deltaQuantity - $systemBasketQuantity;
$r = $this->synchronizeQuantityShipmentItems($basketItem, $needQuantity);
if($r->isSuccess())
{
$this->fillShipmentItem($shipmentItem, $item['QUANTITY'], $shipmentItem->getQuantity());
}
else
{
$this->setCollisions(EntityCollisionType::ShipmentBasketItemsModifyError, $shipment);
}
}
}
else
{
$this->setCollisions(EntityCollisionType::ShipmentBasketItemQuantityError, $shipment, $item['NAME']);
}
}
if (
isset($item['MARKINGS'])
&& is_array($item['MARKINGS'])
&& count($item['MARKINGS']) > 0
)
{
$result = $this->fillMarkingsShipmentItem($shipmentItem, $item['MARKINGS']);
}
}
else
{
$this->setCollisions(EntityCollisionType::ShipmentBasketItemNotFound, $shipment);
}
}
else
{
$this->setCollisions(EntityCollisionType::OrderBasketItemTypeError, $shipment, $item['NAME']);
}
}
}
}
return $result;
}