1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
batchcreate.php
См. документацию.
1<?
2namespace Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost\Requests;
3
4use Bitrix\Main;
5use Bitrix\Main\Web\HttpClient;
6use Bitrix\Sale\Delivery\Requests;
7use Bitrix\Main\Localization\Loc;
8use Sale\Handlers\Delivery\AdditionalHandler;
9use Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost\Reference;
10use Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost\Handler;
11
12Loc::loadMessages(__FILE__);
13
20class BatchCreate extends Base
21{
22 protected $path = "/1.0/user/shipment";
23 protected $type = HttpClient::HTTP_POST;
25 protected $deliveryService = null;
26 protected $shipmentIdsMap = array(); // array( internalId => externalId, ....)
27
33 protected function convertResponse($rawData, $requestData)
34 {
35 $result = new Requests\Result();
36 $errorPositions = array();
37 $flippedIdsMap = array_flip($this->shipmentIdsMap);
38
40 $batchesResults = array();
42 $shipmentResults = array();
43
44 if(is_array($rawData['errors']))
45 {
46 foreach($rawData['errors'] as $error)
47 {
48 if(!isset($requestData[$error['position']]))
49 continue;
50
51 $externalShipmentId = $requestData[$error['position']];
52 $internalShipmentId = $flippedIdsMap[$externalShipmentId];
53
54 if(!isset($shipmentResults[$internalShipmentId]))
55 $shipmentResults[$internalShipmentId] = new Requests\ShipmentResult($internalShipmentId, $externalShipmentId);
56
57 $errorPositions[] = $error['position'];
58 $message = Reference::getErrorDescription($error['error-code'], 'POST /1.0/user/shipment');
59
60 if(!empty($error['error-details']))
61 $message .= ' ('.$error['error-details'].')';
62
63 $shipmentResults[$internalShipmentId]->addError(new Main\Error($message));
64 }
65 }
66
67 if(is_array($rawData['batches']) && !empty($rawData['batches']))
68 {
69 foreach($rawData['batches'] as $id => $batch)
70 {
71 $shpResults = array();
72 $batchesResults[$id] = new Requests\RequestResult();
73 $resOrders = $this->getBatchOrders($batch['batch-name']);
74
75 if(!$resOrders->isSuccess())
76 {
77 $batchesResults[$id]->addErrors($resOrders->getErrors());
78 continue;
79 }
80
81 foreach($resOrders->getData() as $order)
82 {
84 $shpResults[$order['order-num']] = new Requests\ShipmentResult($order['order-num'], intval($order['id']));
85 $shpResults[$order['order-num']]->setTrackingNumber($order['barcode']);
86 $shpResults[$order['order-num']]->setDeliveryDocNum($order['list-number']);
87 $shpResults[$order['order-num']]->setDeliveryDocDate($order['ist-number-date']);
88 }
89
90 $batchesResults[$id]->setResults($shpResults);
91 $batchesResults[$id]->setExternalId($batch['batch-name']);
92 $batchesResults[$id]->setData($batch);
93 }
94 }
95
96 $result->setResults(
97 array_merge(
98 array_values($batchesResults),
99 array_values($shipmentResults)
100 )
101 );
102
103 return $result;
104 }
105
110 protected function getBatchOrders($batchName)
111 {
113 $deliveryRequest = $this->deliveryService->getDeliveryRequestHandler();
114 return $deliveryRequest->send('BATCH_ORDERS', array('BATCH_NAME' => $batchName));
115 }
116
122 public function createBody(array $shipmentIds, array $additional = array())
123 {
124 $result = new Requests\Result();
125
126 if(empty($shipmentIds))
127 {
128 $result->addError(new Main\Error(Loc::getMessage('SALE_DLVRS_ADD_DREQ_RBATCHC_01')));
129 return $result;
130 }
131
133 $deliveryRequest = $this->deliveryService->getDeliveryRequestHandler();
134 $request = $deliveryRequest->getRequestObject('ORDER_CREATE');
135 $res = $request->process($shipmentIds, $additional);
136
137 $addedShipments = array();
138
139 if(!$res->isSuccess())
140 return $res;
141
143 $shipmentCreateResults = $res->getShipmentResults();
144
145 if(!empty($shipmentCreateResults))
146 {
147 foreach($shipmentCreateResults as $createResult)
148 {
149 $shipmentId = $createResult->getInternalId();
150
151 if($createResult->isSuccess() && $createResult->getExternalId() <> '')
152 $this->shipmentIdsMap[$shipmentId] = $createResult->getExternalId();
153 }
154
155 $addedShipments = array_values($this->shipmentIdsMap);
156 $result->setResults($shipmentCreateResults);
157 }
158
159 if(!empty($addedShipments))
160 $result->setData($addedShipments);
161 else
162 $result->addError(new Main\Error(Loc::getMessage('SALE_DLVRS_ADD_DREQ_RBATCHC_03')));
163
164 return $result;
165 }
166
172 public function process(array $shipmentIds, array $additional = array())
173 {
174 $result = new Requests\Result();
175
176 if(!empty($additional['DATE']))
177 {
178 try
179 {
180 $date = new Main\Type\Date($additional['DATE']);
181 }
182 catch (Main\ObjectException $exception)
183 {
184 $result->addError(new Main\Error(Loc::getMessage('SALE_DLVRS_ADD_DREQ_RBATCHC_04')));
185 return $result;
186 }
187
188 $this->path = $this->path.'?sending-date='.$date->format('Y').'-'.$date->format('m').'-'.$date->format('d');
189 }
190
191 return parent::process($shipmentIds, $additional);
192 }
193}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
trait Error
Определения error.php:11
$order
Определения payment.php:8
$message
Определения payment.php:8
$error
Определения subscription_card_product.php:20
path
Определения template_copy.php:201