Your IP : 3.145.5.88


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/sale/lib/exchange/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/sale/lib/exchange/importonecpackagecrm.php

<?php

namespace Bitrix\Sale\Exchange;


use Bitrix\Crm\History\InvoiceStatusHistoryEntry;
use Bitrix\Crm\Statistics\InvoiceSumStatisticEntry;
use Bitrix\Main\Error;
use Bitrix\Sale\Exchange;
use Bitrix\Sale\Exchange\Entity\OrderImport;
use Bitrix\Sale\Result;

final class ImportOneCPackageCRM extends ImportOneCPackage
{
	/**
	 * @param OneC\DocumentBase[] $documents
	 * @return Result
	 */
	protected function checkDocuments(array $documents)
	{
		$result = new Result();

		if(!$this->hasDocumentByTypeId(EntityType::ORDER, $documents))
		{
			$result->addError(new Error(GetMessage('CRM_PACKAGE_NOT_FOUND_ORDER'), 'CRM_PACKAGE_NOT_FOUND_ORDER'));
		}
		else
		{
			$documentOrder = $this->getDocumentByTypeId(EntityType::ORDER, $documents);

			if(!$this->hasDocumentByTypeId(EntityType::PAYMENT_CASH, $documents) &&
				!$this->hasDocumentByTypeId(EntityType::PAYMENT_CASH_LESS, $documents) &&
				!$this->hasDocumentByTypeId(EntityType::PAYMENT_CARD_TRANSACTION, $documents))
			{
				$result->addError(new Error(GetMessage('CRM_PACKAGE_NOT_FOUND_PAYMENT', array('#XML_1C_DOCUMENT_ID#'=>$documentOrder->getExternalId())), 'CRM_PACKAGE_NOT_FOUND_PAYMENT'));
			}

			$countShipment = 0;
			foreach ($documents as $document)
			{
				if($document->getOwnerEntityTypeId() == EntityType::SHIPMENT)
				{
					$countShipment++;
				}
			}

			if($countShipment>=2)
			{
				$result->addError(new Error(GetMessage('CRM_PACKAGE_PARTIAL_SHIPMENT_NOT_SUPPORTED', array('#XML_1C_DOCUMENT_ID#'=>$documentOrder->getExternalId())), 'CRM_PACKAGE_NOT_FOUND_PAYMENT'));
			}
		}

		return $result;
	}

	/**
	 * @param Entity\EntityImport|ProfileImport $item
	 * @return Result
	 */
	protected function modifyEntity($item)
	{
		$result = new Result();

		if($item instanceof OrderImport)
		{
			if($item->getId()>0)
			{
				$traits = $item->getField('TRAITS');

				$invoice = new \CCrmInvoice(false);
				if (!$invoice->SetStatus($item->getId(), $traits['STATUS_ID']))
				{
					$result->addError(new Error('Status error!'));
				}
			}
		}

		if($result->isSuccess())
			$result = parent::modifyEntity($item);


		return $result;
	}

	/**
	 * @param OrderImport $orderImport
	 * @param Entity\EntityImport[] $items
	 * @return \Bitrix\Main\Entity\AddResult|\Bitrix\Main\Entity\UpdateResult|Result|mixed
	 */
	protected function save(Exchange\Entity\OrderImport $orderImport, $items)
	{
		$isNew = !($orderImport->getId()>0);

		$result = parent::save($orderImport, $items);

		if($result->isSuccess())
		{
			if($orderImport->getId()>0)
			{
				InvoiceStatusHistoryEntry::register($orderImport->getId(), null, array('IS_NEW' => $isNew));
				InvoiceSumStatisticEntry::register($orderImport->getId(), null);
			}
		}
		return $result;
	}

	/**
	 * @param OneC\DocumentBase[] $documents
	 * @return Result
	 */
	protected function convert(array $documents)
	{
		$result = $this->checkDocuments($documents);

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

			if($documentShipment !== null)
			{
				$settings = ManagerImport::getSettingsByType($documentShipment->getOwnerEntityTypeId());

				$convertor = OneC\Converter::getInstance($documentShipment->getOwnerEntityTypeId());
				$convertor->loadSettings($settings);
				$fields = $convertor->resolveParams($documentShipment);

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

				if($shipmentPrice>0)
				{
					$documentOrder = $this->getDocumentByTypeId(EntityType::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->getOwnerEntityTypeId() == EntityType::SHIPMENT)
					{
						unset($documents[$k]);
					}
				}
			}

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

		return $result;
	}
}