2namespace Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost\Requests;
5use Bitrix\Main\Web\HttpClient;
6use Bitrix\Sale\Delivery\Requests;
7use Bitrix\Main\Localization\Loc;
8use Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost\Reference;
10Loc::loadMessages(__FILE__);
18class BatchOrderAdd
extends Base
20 protected $path =
"/1.0/batch/{name}/shipment";
21 protected $type = HttpClient::HTTP_PUT;
23 protected $internalRequestId = 0;
30 protected function convertResponse($rawData, $requestData)
32 $result =
new Requests\Result();
33 $reqRes =
new Requests\RequestResult();
34 $reqRes->setExternalId($this->name);
35 $reqRes->setInternalId($this->internalRequestId);
38 $shpResults =
array();
39 $errorPositions =
array();
41 if(is_array($rawData[
'errors']))
43 foreach($rawData[
'errors'] as
$error)
45 if(!isset($requestData[
$error[
'position']]))
48 $internalId = $requestData[
$error[
'position']][
'order-num'];
49 $errorPositions[
$error[
'position']] =
true;
51 if(!isset($shpResults[$internalId]))
52 $shpResults[$internalId] =
new Requests\ShipmentResult($internalId);
54 if(is_array(
$error[
'error-codes']))
58 foreach(
$error[
'error-codes'] as $errorCode)
60 $message = Reference::getErrorDescription($errorCode[
'code'],
'POST /1.0/user/shipment');
62 if(!empty($errorCode[
'details']) &&
$message.
'.' != $errorCode[
'details'])
64 if($errorCode[
'code'] ==
'ILLEGAL_MAIL_CATEGORY')
65 $message = str_replace(
'%s', Reference::getRpoCategory($errorCode[
'details']),
$message);
67 $message .=
' ('.$errorCode[
'details'].
')';
77 if(is_array($rawData[
'result-ids']) && is_array($requestData))
79 $resultIdsPosition = 0;
80 $deliveryRequest = $this->deliveryService->getDeliveryRequestHandler();
83 $res = $deliveryRequest->getRequestObject(
'BATCH')->process(
array(
'BATCH_NAME' => $this->name));
89 $batchData =
$res->getData();
91 if(!empty($batchData[
'list-number']))
92 $listNumber = $batchData[
'list-number'];
94 if(!empty($batchData[
'list-number-date']))
95 $listDate = $batchData[
'list-number-date'];
99 $res = $deliveryRequest->send(
'BATCH_ORDERS',
array(
'BATCH_NAME' => $this->name));
100 $batchOrders =
array();
102 if(
$res->isSuccess())
103 $batchOrders =
$res->getData();
107 if(isset($errorPositions[
$i]))
110 $internalId = $requestData[
$i][
'order-num'];
111 $externalId = $rawData[
'result-ids'][$resultIdsPosition];
112 $resultIdsPosition++;
114 if(!isset($shpResults[$internalId]))
116 $shpResults[$internalId] =
new Requests\ShipmentResult($internalId, $externalId);
118 foreach($batchOrders as
$order)
120 if(
$order[
'order-num'] == $internalId)
122 $shpResults[$internalId]->setTrackingNumber(
$order[
'barcode']);
127 $shpResults[$internalId]->setDeliveryDocNum($listNumber);
128 $shpResults[$internalId]->setDeliveryDocDate($listDate);
133 if(!empty($shpResults))
135 $reqRes->addResults(array_values($shpResults));
147 public function createBody(
array $shipmentIds,
array $additional =
array())
150 $deliveryRequest = $this->deliveryService->getDeliveryRequestHandler();
151 $orderCreateRequest = $deliveryRequest->getRequestObject(
'ORDER_CREATE');
152 $result = $orderCreateRequest->createBody($shipmentIds, $additional);
160 $result->addError(
new Error(Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_BOA_DATA_EMPTY')));
171 public function process(
array $shipmentIds,
array $additional =
array())
173 if(empty($additional[
'BATCH_NAME']))
175 $result =
new Requests\Result();
176 $result->addError(
new Error(Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_BOA_BNAME_EMPTY')));
178 $this->
path = str_replace(
'{name}', $additional[
'BATCH_NAME'], $this->
path);
179 $this->name = $additional[
'BATCH_NAME'];
180 $this->internalRequestId = $additional[
'REQUEST_ID'];
181 return parent::process($shipmentIds, $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."%"