• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/exchange/importonecpackagecrm.php
  • Класс: BitrixSaleExchangeImportOneCPackageCRM
  • Вызов: ImportOneCPackageCRM::convert
protected function convert(array $documents)
{
	$result = $this->checkDocuments($documents);

	if($result->isSuccess())
	{
		$documentShipment = $this->getDocumentByTypeId(ExchangeOneCDocumentType::SHIPMENT, $documents);

		if($documentShipment !== null)
		{
			$entityTypeId = $this->resolveOwnerEntityTypeId($documentShipment->getTypeId());
			$settings = ManagerImport::getSettingsByType($entityTypeId);

			$convertor = ExchangeOneCConverterFactory::create($entityTypeId);
			$convertor->init(
				$settings,
				$entityTypeId,
				$documentShipment->getTypeId()
			);

			$fields = $convertor->resolveParams($documentShipment);

			$shipmentPrice = $fields['TRAITS']['BASE_PRICE_DELIVERY'];

			if($shipmentPrice>0)
			{
				$documentOrder = $this->getDocumentByTypeId(ExchangeOneCDocumentType::ORDER, $documents);
				$fieldsOrder = $documentOrder->getFieldValues();
				$items = $this->getProductsItems($fieldsOrder);

				if(!$this->deliveryServiceExists($items))
				{
					$fieldsOrder['ITEMS'][][self::DELIVERY_SERVICE_XMLID] = array(
						'ID' => self::DELIVERY_SERVICE_XMLID,
						'NAME' => GetMessage('CRM_PACKAGE_DELIVERY_SERVICE_ITEM'),
						'PRICE' => $shipmentPrice,
						'PRICE_ONE' => $shipmentPrice,
						'QUANTITY' => 1,
						'TYPE' => ImportBase::ITEM_ITEM,
						'MEASURE_CODE' => 796,
						'MEASURE_NAME' => GetMessage('CRM_PACKAGE_DELIVERY_SERVICE_ITEM_MEASURE_796'),
					);

					$documentOrder->setFields($fieldsOrder);
				}
			}

			foreach ($documents as $k=>$document)
			{
				if($document->getTypeId() == ExchangeOneCDocumentType::SHIPMENT)
				{
					unset($documents[$k]);
				}
			}
		}

		$result = parent::convert($documents);

		if($result->isSuccess())
		{
			$personTypeId = 0;
			$paySystemId = 0;
			$personTypes = CCrmPaySystem::getPersonTypeIDs();

			/** @var ImportBase[] $entityItems */
			$entityItems = $result->getData();
			foreach ($entityItems as $entityItem)
			{
				if($entityItem->getOwnerTypeId() == EntityType::USER_PROFILE)
				{
					/** @var ExchangeEntityUserProfileImport $entityItem */
					$personTypeId = $entityItem->isFiz()? (int)$personTypes['CONTACT']:(int)$personTypes['COMPANY'];
					break;
				}
			}

			if($personTypeId>0)
			{
				$billList = CCrmPaySystem::GetPaySystemsListItems($personTypeId);
				foreach($billList as $billId => $billName)
				{
					$paySystemId = $billId;
					break;
				}
			}

			if($paySystemId>0)
			{
				$list = [];
				foreach ($entityItems as $entityItem)
				{
					if(
						$entityItem->getOwnerTypeId() == EntityType::INVOICE_PAYMENT_CASH ||
						$entityItem->getOwnerTypeId() == EntityType::INVOICE_PAYMENT_CASH_LESS ||
						$entityItem->getOwnerTypeId() == EntityType::INVOICE_PAYMENT_CARD_TRANSACTION)
					{
						$traits = $entityItem->getFieldValues()['TRAITS'];
						$traits['PAY_SYSTEM_ID'] = $paySystemId;
						$entityItem->setField('TRAITS', $traits);
					}
					$list[] = $entityItem;
				}
				$result->setData($list);
			}
		}
	}

	return $result;
}