• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/exchange/entity/orderimport.php
  • Класс: BitrixSaleExchangeEntityOrderImport
  • Вызов: OrderImport::fillBasket
private function fillBasket(SaleBasketBase $basket, array $basketItems)
    {
        $result = new SaleResult();

        $taxListModify = array();
        $basketItemsIndexList = array();

        /** @var SaleBasketItem $basketItem */
        foreach ($basket as $basketItem)
        {
            $basketItemsIndexList[$basketItem->getId()] = $basketItem->getQuantity();
        }

        $basketItems = static::getGroupItemsBasketFields($basketItems);

        if(!empty($basketItems))
	{
		$sort = 100;
		foreach($basketItems as $items)
		{
			foreach($items as $productXML_ID => $item)
			{
				$fieldsBasket = array();
				if($basketItem = static::getBasketItemByItem($basket, $item))
				{
					/** @var ExchangeICriterionOrder $criterionBasketItems */
					$criterionBasketItems = $this->getCurrentCriterion($basket->getOrder());

					if($criterionBasketItems->equalsBasketItem($basketItem, $item))
					{
						if($item['MARKING_GROUP'] != $basketItem->getMarkingCodeGroup())
							$fieldsBasket['MARKING_CODE_GROUP'] = $item['MARKING_GROUP'];

						if($item['PRICE'] != $basketItem->getPrice())
							$basketItem->setPrice($item['PRICE'], true);

						if($item['QUANTITY'] != $basketItem->getQuantity())
							$fieldsBasket['QUANTITY'] = $item['QUANTITY'];

						/** @var ExchangeICriterionOrder $criterionBasketItemsTax */
						$criterionBasketItemsTax = $this->getCurrentCriterion($basket->getOrder());

						if($criterionBasketItemsTax->equalsBasketItemTax($basketItem, $item))
						{
							$taxListModify[$basketItem->getBasketCode()] = $item['TAX'];
						}

						/** @var ExchangeICriterionOrder $criterionBasketItemsDiscount */
						$criterionBasketItemsDiscount = $this->getCurrentCriterion($basket->getOrder());

						if($criterionBasketItemsDiscount->equalsBasketItemDiscount($basketItem, $item))
						{
							$fieldsBasket['DISCOUNT_PRICE'] = $item['DISCOUNT']['PRICE'];
						}
					}

					if (isset($basketItemsIndexList[$basketItem->getId()]))
						unset($basketItemsIndexList[$basketItem->getId()]);
				}
				else
				{

					$fieldsBasket = $this->prepareFieldsBasketItem($productXML_ID, $item);
					$fieldsCurrency = $this->convertCurrency($item);

					$fieldsBasket['CURRENCY'] = $fieldsCurrency['CURRENCY'];
					$fieldsBasket['SORT'] = $sort;
					$sort += 100;

					$basketItem = $basket->createItem($fieldsBasket['MODULE'], $fieldsBasket['PRODUCT_ID']);

					$basketItem->setPrice($fieldsCurrency['PRICE'], true);

					unset($fieldsBasket['MODULE'], $fieldsBasket['PRODUCT_ID']);

					$taxListModify[$basketItem->getBasketCode()] = $item['TAX'];
				}

				if(!empty($fieldsBasket))
				{
					$r = $basketItem->setFields($fieldsBasket);
					if ($r->isSuccess())
					{
						$fieldsBasketProperty = static::prepareFieldsBasketProperty($item);
						if(!empty($fieldsBasketProperty))
						{
							/** @var SaleBasketPropertiesCollection $propertyCollection */
							if ($propertyCollection = $basketItem->getPropertyCollection())
							{
								$propertyCollection->setProperty($fieldsBasketProperty);
							}
						}
					}
					else
					{
						$result->addErrors($r->getErrors());
					}
				}
			}
		}
	}

        if($result->isSuccess())
        {
            $result->setData(array('modifyTaxList'=>$taxListModify));

            $r = $this->synchronizeQuantityBasketItems($basketItemsIndexList);
            if($r->isSuccess())
            {
                if(!empty($basketItemsIndexList) && is_array($basketItemsIndexList))
                {
				foreach ($basketItemsIndexList as $basketIndexId => $basketIndexValue)
				{
					/** @var SaleBasketItem $foundedBasketItem */
					if ($foundedBasketItem = $basket->getItemById($basketIndexId))
					{
						$resultDelete = $foundedBasketItem->delete();
						if($resultDelete->isSuccess() == false)
						{
							$result->addErrors($resultDelete->getErrors());
						}
					}
				}
                }
            }
            else
            {
                $result->addErrors($r->getErrors());
            }
        }

        return $result;
    }