3namespace Sale\Handlers\Delivery\YandexTaxi;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Main\Type\DateTime;
8use Bitrix\Main\Web\Json;
9use Bitrix\Sale\Delivery\Requests\HandlerBase;
10use Bitrix\Sale\Delivery\Requests\Manager;
11use Bitrix\Sale\Delivery\Requests\Message;
12use Bitrix\Sale\Delivery\Requests\RequestResult;
13use Bitrix\Sale\Delivery\Requests\RequestTable;
14use Bitrix\Sale\Delivery\Requests\Result;
15use Bitrix\Sale\Delivery\Requests\ShipmentResult;
16use Bitrix\Sale\Delivery\Services\Base;
17use Bitrix\Sale\Repository\ShipmentRepository;
18use Sale\Handlers\Delivery\YandexTaxi\Api\Api;
19use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Claim;
20use Sale\Handlers\Delivery\YandexTaxi\ClaimBuilder\ClaimBuilder;
21use Sale\Handlers\Delivery\YandexTaxi\EventJournal\JournalProcessor;
22use Sale\Handlers\Delivery\YandexTaxi\Internals\ClaimsTable;
34 private $claimBuilder;
37 private $journalProcessor;
46 $this->api = ServiceContainer::getApi();
47 $this->claimBuilder = ServiceContainer::getClaimBuilder();
48 $this->journalProcessor = ServiceContainer::getJournalProcessor();
58 $isShipmentError =
false;
59 if (empty($shipmentIds) ||
count($shipmentIds) !== 1)
61 $isShipmentError =
true;
65 $shipment = ShipmentRepository::getInstance()->getById((
int)$shipmentIds[0]);
66 if (is_null($shipment))
68 $isShipmentError =
true;
73 return $result->addErrors([Loc::getMessage(
'SALE_YANDEX_TAXI_REQUEST_HANDLER_SHIPMENT_ERROR')]);
76 $claimBuildingResult = $this->claimBuilder->build($shipment);
77 if (!$claimBuildingResult->isSuccess())
79 return $result->addErrors($claimBuildingResult->getErrors());
83 $claim = $claimBuildingResult->getData()[
'RESULT'];
85 $taxiClass = $claim->getClientRequirements()->getTaxiClass();
87 if (ClaimBuilder::isOffersCalculateMethod($taxiClass))
89 $offerData = ServiceContainer::getRateCalculator()->calculateRate($shipment)->getData();
91 if (isset($offerData[
'offerPayload']))
93 $claim->setOfferPayload($offerData[
'offerPayload']);
97 $claimCreationResult = $this->api->createClaim($claim);
99 if (!$claimCreationResult->isSuccess())
101 return $result->addError(
new Error(Loc::getMessage(
'SALE_YANDEX_TAXI_ORDER_CREATE_ERROR')));
104 $createdClaim = $claimCreationResult->getClaim();
105 if (is_null($createdClaim))
107 return $result->addError(
new Error(Loc::getMessage(
'SALE_YANDEX_TAXI_ORDER_PERSIST_ERROR')));
110 $addResult = ClaimsTable::add([
111 'SHIPMENT_ID' => $shipment->getId(),
112 'CREATED_AT' =>
new DateTime(),
113 'UPDATED_AT' =>
new DateTime(),
114 'EXTERNAL_ID' => $createdClaim->getId(),
115 'EXTERNAL_STATUS' => $createdClaim->getStatus(),
116 'EXTERNAL_CREATED_TS' => $createdClaim->getCreatedTs(),
117 'EXTERNAL_UPDATED_TS' => $createdClaim->getUpdatedTs(),
118 'INITIAL_CLAIM' => Json::encode($createdClaim),
119 'IS_SANDBOX_ORDER' => $this->api->getTransport()->isTestEnvironment() ?
'Y' :
'N',
121 if (!$addResult->isSuccess())
123 return $result->addError(
new Error(Loc::getMessage(
'SALE_YANDEX_TAXI_ORDER_PERSIST_ERROR')));
127 $this->journalProcessor->getAgentName(
128 $this->deliveryService->getParentId()
141 $requestResult =
new RequestResult();
142 $requestResult->setExternalId($createdClaim->getId());
143 $requestResult->addResult(
new ShipmentResult($shipment->getId()));
144 $result->addResult($requestResult);
146 'STATUS' => Loc::getMessage(
'SALE_YANDEX_TAXI_REQUEST_HANDLER_STATUS_SEARCHING_PERFORMER_DESCRIPTION'),
147 'STATUS_SEMANTIC' => Manager::EXTERNAL_STATUS_SEMANTIC_PROCESS,
156 public function getActions($requestId)
166 public function executeAction($requestId, $actionType,
array $additional)
170 return $this->cancelRequest($requestId);
173 return parent::executeAction($requestId, $actionType, $additional);
180 public function cancelRequest($requestId): Result
184 $request = RequestTable::getById($requestId)->fetch();
188 new Error(Loc::getMessage(
'SALE_YANDEX_TAXI_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
192 $getClaimResult = $this->api->getClaim(
$request[
'EXTERNAL_ID']);
193 if (!$getClaimResult->isSuccess())
195 return $result->addErrors($getClaimResult->getErrors());
198 $claim = $getClaimResult->getClaim();
202 new Error(Loc::getMessage(
'SALE_YANDEX_TAXI_CANCELLATION_TMP_ERROR'))
206 $getCancelInfoResult = $this->api->getCancelInfo(
$request[
'EXTERNAL_ID']);
207 if (!$getCancelInfoResult->isSuccess())
209 return $result->addErrors($getCancelInfoResult->getErrors());
211 $availableCancelState = $getCancelInfoResult->getCancelState();
213 $cancellationResult = ServiceContainer::getApi()->cancelClaim(
215 $claim->getVersion(),
216 $availableCancelState
219 if (!$cancellationResult->isSuccess())
222 new Error(Loc::getMessage(
'SALE_YANDEX_TAXI_CANCELLATION_FATAL_ERROR'))
226 if ($availableCancelState ===
'paid')
229 new Message(Loc::getMessage(
230 'SALE_YANDEX_TAXI_DELIVERY_PAID_CANCELLATION',
233 $this->deliveryService->getParentService()
234 ? $this->deliveryService->getParentService()->getName()
235 : $this->deliveryService->getName()
245 Loc::getMessage(
'SALE_YANDEX_TAXI_DELIVERY_FREE_CANCELLATION')
256 public function delete($requestId)
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
hasCallbackTrackingSupport()
create(array $shipmentIds, array $additional=[])
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"