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