1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
claimreader.php
См. документацию.
1<?php
2
3namespace Sale\Handlers\Delivery\YandexTaxi\Api\ClaimReader;
4
5use Bitrix\Main\Error;
6use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Address;
7use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Contact;
8use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Claim;
9use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\ErrorMessage;
10use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Offer;
11use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\PerformerInfo;
12use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Pricing;
13use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\RoutePoint;
14use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\ShippingItem;
15use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\ShippingItemSize;
16use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\TransportClassification;
17use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\VisitedAt;
18use Sale\Handlers\Delivery\YandexTaxi\Api\RequestEntity\Warning;
19
25final class ClaimReader
26{
31 public function readFromArray(array $response): Result
32 {
33 $result = new Result();
34
38 $requiredFields = ['id', 'version', 'status'];
39 foreach ($requiredFields as $requiredField)
40 {
41 if (isset($response[$requiredField]))
42 {
43 continue;
44 }
45
46 return $result->addError(new Error(sprintf('expected_field_missing: %s', $requiredField)));
47 }
48
49 $claim = new Claim();
50
51 if (isset($response['id']))
52 {
53 $claim->setId($response['id']);
54 }
55 if (isset($response['corp_client_id']))
56 {
57 $claim->setCorpClientId($response['corp_client_id']);
58 }
59 if (isset($response['status']))
60 {
61 $claim->setStatus($response['status']);
62 }
63 if (isset($response['version']))
64 {
65 $claim->setVersion($response['version']);
66 }
67 if (isset($response['skip_client_notify']))
68 {
69 $claim->setSkipClientNotify($response['skip_client_notify']);
70 }
71 if (isset($response['skip_emergency_notify']))
72 {
73 $claim->setSkipEmergencyNotify($response['skip_emergency_notify']);
74 }
75 if (isset($response['skip_door_to_door']))
76 {
77 $claim->setSkipDoorToDoor($response['skip_door_to_door']);
78 }
79 if (isset($response['optional_return']))
80 {
81 $claim->setOptionalReturn($response['optional_return']);
82 }
83 if (isset($response['comment']))
84 {
85 $claim->setComment($response['comment']);
86 }
87 if (isset($response['created_ts']))
88 {
89 $claim->setCreatedTs($response['created_ts']);
90 }
91 if (isset($response['updated_ts']))
92 {
93 $claim->setUpdatedTs($response['updated_ts']);
94 }
95 if (isset($response['items']) && is_array($response['items']))
96 {
97 foreach ($response['items'] as $item)
98 {
99 $shippingItem = new ShippingItem();
100
101 if (isset($item['title']))
102 {
103 $shippingItem->setTitle($item['title']);
104 }
105
106 if (isset($item['weight']))
107 {
108 $shippingItem->setWeight($item['weight']);
109 }
110
111 if (isset($item['quantity']))
112 {
113 $shippingItem->setQuantity($item['quantity']);
114 }
115
116 if (isset($item['cost_value']))
117 {
118 $shippingItem->setCostValue($item['cost_value']);
119 }
120
121 if (isset($item['cost_currency']))
122 {
123 $shippingItem->setCostCurrency($item['cost_currency']);
124 }
125
126 if (isset($item['size']))
127 {
128 $shippingItemSize = new ShippingItemSize();
129
130 if (isset($item['size']['length']))
131 {
132 $shippingItemSize->setLength($item['size']['length']);
133 }
134 if (isset($item['size']['width']))
135 {
136 $shippingItemSize->setWidth($item['size']['width']);
137 }
138 if (isset($item['size']['height']))
139 {
140 $shippingItemSize->setHeight($item['size']['height']);
141 }
142
143 $shippingItem->setSize($shippingItemSize);
144 }
145
146 $claim->addItem($shippingItem);
147 }
148 }
149 if (isset($response['route_points']) && is_array($response['route_points']))
150 {
151 $routePoints = [];
152
153 foreach ($response['route_points'] as $routePoint)
154 {
155 $routePoints[] = $this->buildRoutePoint($routePoint);
156 }
157
158 $claim->setRoutePoints($routePoints);
159 }
160 if (isset($response['emergency_contact']))
161 {
162 $claim->setEmergencyContact(
163 $this->buildContact($response['emergency_contact'])
164 );
165 }
166 if (isset($response['pricing']))
167 {
168 $pricing = new Pricing();
169
170 if (isset($response['pricing']['currency']))
171 {
172 $pricing->setCurrency($response['pricing']['currency']);
173 }
174 if (isset($response['pricing']['final_price']))
175 {
176 $pricing->setFinalPrice($response['pricing']['final_price']);
177 }
178 if (isset($response['pricing']['offer']))
179 {
180 $offer = new Offer();
181
182 if (isset($response['pricing']['offer']['offer_id']))
183 {
184 $offer->setOfferId($response['pricing']['offer']['offer_id']);
185 }
186 if (isset($response['pricing']['offer']['price']))
187 {
188 $offer->setPrice($response['pricing']['offer']['price']);
189 }
190
191 $pricing->setOffer($offer);
192 }
193
194 $claim->setPricing($pricing);
195 }
196 if (isset($response['client_requirements']))
197 {
198 $claim->setClientRequirements(
199 $this->buildTransportClassification($response['client_requirements'])
200 );
201 }
202 if (isset($response['matched_cars']) && is_array($response['matched_cars']))
203 {
204 foreach ($response['matched_cars'] as $matchedCar)
205 {
206 $claim->addMatchedCar(
207 $this->buildTransportClassification($matchedCar)
208 );
209 }
210 }
211 if (isset($response['performer_info']))
212 {
213 $performerInfo = new PerformerInfo();
214
215 if (isset($response['performer_info']['courier_name']))
216 {
217 $performerInfo->setCourierName($response['performer_info']['courier_name']);
218 }
219 if (isset($response['performer_info']['legal_name']))
220 {
221 $performerInfo->setLegalName($response['performer_info']['legal_name']);
222 }
223
224 if (isset($response['performer_info']['car_model']))
225 {
226 $performerInfo->setCarModel($response['performer_info']['car_model']);
227 }
228
229 if (isset($response['performer_info']['car_number']))
230 {
231 $performerInfo->setCarNumber($response['performer_info']['car_number']);
232 }
233
234 $claim->setPerformerInfo($performerInfo);
235 }
236 if (isset($response['error_messages']) && is_array($response['error_messages']))
237 {
238 foreach ($response['error_messages'] as $errorMessage)
239 {
240 $claim->addErrorMessage($this->buildErrorMessage($errorMessage));
241 }
242 }
243 if (isset($response['warnings']) && is_array($response['warnings']))
244 {
245 foreach ($response['warnings'] as $warning)
246 {
247 $claim->addWarning($this->buildWarning($warning));
248 }
249 }
250
251 return $result->setClaim($claim);
252 }
253
258 private function buildErrorMessage(array $node): ErrorMessage
259 {
260 $result = new ErrorMessage();
261
262 if (isset($node['code']))
263 {
264 $result->setCode($node['code']);
265 }
266 if (isset($node['message']))
267 {
268 $result->setMessage($node['message']);
269 }
270
271 return $result;
272 }
273
278 private function buildWarning(array $node): Warning
279 {
280 $result = new Warning();
281
282 if (isset($node['source']))
283 {
284 $result->setSource($node['source']);
285 }
286 if (isset($node['code']))
287 {
288 $result->setCode($node['code']);
289 }
290 if (isset($node['message']))
291 {
292 $result->setMessage($node['message']);
293 }
294
295 return $result;
296 }
297
302 private function buildRoutePoint(array $node): RoutePoint
303 {
304 $result = new RoutePoint();
305
306 if (isset($node['id']))
307 {
308 $result->setId($node['id']);
309 }
310
311 if (isset($node['point_id']))
312 {
313 $result->setPointId($node['point_id']);
314 }
315
316 if (isset($node['visit_order']))
317 {
318 $result->setVisitOrder($node['visit_order']);
319 }
320
321 if (isset($node['type']))
322 {
323 $result->setType($node['type']);
324 }
325
326 if (isset($node['skip_confirmation']))
327 {
328 $result->setSkipConfirmation($node['skip_confirmation']);
329 }
330
331 if (isset($node['contact']))
332 {
333 $result->setContact(
334 $this->buildContact($node['contact'])
335 );
336 }
337
338 if (isset($node['address']))
339 {
340 $result->setAddress(
341 $this->buildAddress($node['address'])
342 );
343 }
344
345 if (isset($node['visited_at']))
346 {
347 $result->setVisitedAt(
348 $this->buildVisitedAt($node['visited_at'])
349 );
350 }
351
352 return $result;
353 }
354
359 private function buildContact(array $node): Contact
360 {
361 $result = new Contact();
362
363 if (isset($node['name']))
364 {
365 $result->setName($node['name']);
366 }
367 if (isset($node['phone']))
368 {
369 $result->setPhone($node['phone']);
370 }
371 if (isset($node['email']))
372 {
373 $result->setEmail($node['email']);
374 }
375
376 return $result;
377 }
378
383 private function buildAddress(array $node): Address
384 {
385 $result = new Address();
386
387 if (isset($node['fullname']))
388 {
389 $result->setFullName($node['fullname']);
390 }
391 if (isset($node['country']))
392 {
393 $result->setCountry($node['country']);
394 }
395 if (isset($node['city']))
396 {
397 $result->setCity($node['city']);
398 }
399 if (isset($node['street']))
400 {
401 $result->setStreet($node['street']);
402 }
403 if (isset($node['building']))
404 {
405 $result->setBuilding($node['building']);
406 }
407 if (isset($node['porch']))
408 {
409 $result->setPorch($node['porch']);
410 }
411 if (isset($node['coordinates']))
412 {
413 $result->setCoordinates($node['coordinates']);
414 }
415
416 return $result;
417 }
418
423 private function buildVisitedAt(array $node): VisitedAt
424 {
425 $result = new VisitedAt();
426
427 if (isset($node['actual']))
428 {
429 $result->setActual((string)$node['actual']);
430 }
431
432 if (isset($node['expected']))
433 {
434 $result->setExpected((string)$node['expected']);
435 }
436
437 return $result;
438 }
439
444 private function buildTransportClassification(array $node): TransportClassification
445 {
446 $result = new TransportClassification();
447
448 if (isset($node['taxi_class']))
449 {
450 $result->setTaxiClass($node['taxi_class']);
451 }
452
453 $options = [];
454 foreach ($node as $key => $value)
455 {
456 if ($key === 'taxi_class')
457 {
458 continue;
459 }
460
462 }
463 $result->setOptions($options);
464
465 return $result;
466 }
467}
$options
Определения commerceml2.php:49
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$value
Определения Param.php:39
trait Error
Определения error.php:11
trait Warning
Определения warning.php:11
if(empty($signedUserToken)) $key
Определения quickway.php:257
$response
Определения result.php:21