- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/exchange/importonecpackage.php
- Класс: BitrixSaleExchangeImportOneCPackage
- Вызов: ImportOneCPackage::import
protected function import(array $items)
{
$result = new Result();
$items = $this->sortItems($items);
/** @var ExchangeEntityOrderImport $itemParent */
$itemParent = $this->loadParent($items);
if($itemParent->getEntityId()>0)
{
$r = $this->UpdateCashBoxChecks($itemParent, $items);
if($r->isSuccess())
{
$this->save($itemParent, $items);
return $result;
}
$r = $this->onBeforeEntityModify($itemParent, $items);
if($r->hasWarnings())
$this->marker($itemParent, $r);
}
if(!$this->hasCollisionErrors($items))
{
/** Only sorted items */
foreach($items as $item)
{
if($item->getOwnerTypeId() == EntityType::USER_PROFILE)
{
/** @var ExchangeEntityUserImportBase $item */
$r = new Result();
if($itemParent->getEntityId() == null)
{
$params = $item->getFieldValues();
$fields = $params['TRAITS'];
$personalTypeId = $params['TRAITS']['PERSON_TYPE_ID'] = $item->resolvePersonTypeId($fields);
$property = $params['ORDER_PROPS'];
if(!empty($property))
{
$params['ORDER_PROP'] = $item->getPropertyOrdersByConfig($personalTypeId, array(), $property);
}
unset($params['ORDER_PROPS']);
$item->setFields($params);
$r = $item->load($fields);
if(intval($personalTypeId)<=0)
$r->addError(new Error(GetMessage("SALE_EXCHANGE_PACKAGE_ERROR_PERSONAL_TYPE_IS_EMPTY", array("#DOCUMENT_ID#"=>$fields['XML_ID'])), "PACKAGE_ERROR_PERSONAL_TYPE_IS_EPMTY"));
if($r->isSuccess())
{
if(!$this->importableItems($item))
{
return new Result();
}
$r = $this->modifyEntity($item);
if(intval($item->getId())<=0)
$r->addError(new Error(GetMessage("SALE_EXCHANGE_PACKAGE_ERROR_USER_IS_EMPTY", array("#DOCUMENT_ID#"=>$fields['XML_ID'])), "PACKAGE_ERROR_USER_IS_EPMTY"));
if($r->isSuccess())
{
/** prepare for import Order */
$paramsOrder = $itemParent->getFieldValues();
$fieldsOrder = &$paramsOrder['TRAITS'];
if(!empty($property))
{
$fieldsOrder['ORDER_PROP'] = $params['ORDER_PROP'];
}
$fieldsOrder['USER_ID'] = $item->getId();
$fieldsOrder['PERSON_TYPE_ID'] = $personalTypeId;
$itemParent->setFields($paramsOrder);
}
}
}
}
elseif($item->getOwnerTypeId() == static::getParentEntityTypeId())
{
if(!$this->importableItems($itemParent))
{
return new Result();
}
$r = $this->modifyEntity($itemParent);
}
else
{
/** @var ExchangeEntityPaymentImport|ExchangeEntityShipmentImport $item */
/** @var Order $order */
$order = $itemParent->getEntity();
$params = $item->getFieldValues();
$fields = $params['TRAITS'];
$r = $this->orderIsLoad($order, $itemParent);
if(!$r->hasWarnings())
{
static::load($item, $fields, $order);
$r = $this->checkParentById($fields['ID'], $item);
if(!$r->hasWarnings())
{
$isShipped = $order->isShipped();
$r = $this->modifyEntity($item);
if($r->isSuccess())
{
if($item->getOwnerTypeId() == static::getShipmentEntityTypeId())
{
if(!$isShipped && $order->isShipped())
$this->onAfterShipmentModifyChangeStatusOnDelivery($itemParent);
}
}
}
}
}
if(!$r->isSuccess())
{
$result->addErrors($r->getErrors());
break;
}
elseif($r->hasWarnings())
{
$result->addWarnings($r->getWarnings());
break;
}
}
if($result->isSuccess() && !$result->hasWarnings() && !$this->hasCollisionErrors($items))
{
$r = $this->onAfterEntitiesModify($itemParent, $items);
if(!$r->isSuccess())
$result->addErrors($r->getErrors());
if($r->hasWarnings())
$result->addWarnings($r->getWarnings());
}
}
if($result->isSuccess())
{
$r = $this->save($itemParent, $items);
if(!$r->isSuccess())
$result->addErrors($r->getErrors());
if($r->hasWarnings())
$result->addWarnings($r->getWarnings());
}
return $result;
}