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