• Модуль: 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;
    }