3namespace Sale\Handlers\Delivery\YandexTaxi\Api\ClaimReader;
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;
25final class ClaimReader
38 $requiredFields = [
'id',
'version',
'status'];
39 foreach ($requiredFields as $requiredField)
46 return $result->addError(
new Error(sprintf(
'expected_field_missing: %s', $requiredField)));
57 $claim->setCorpClientId(
$response[
'corp_client_id']);
67 if (isset(
$response[
'skip_client_notify']))
69 $claim->setSkipClientNotify(
$response[
'skip_client_notify']);
71 if (isset(
$response[
'skip_emergency_notify']))
73 $claim->setSkipEmergencyNotify(
$response[
'skip_emergency_notify']);
75 if (isset(
$response[
'skip_door_to_door']))
77 $claim->setSkipDoorToDoor(
$response[
'skip_door_to_door']);
81 $claim->setOptionalReturn(
$response[
'optional_return']);
89 $claim->setCreatedTs(
$response[
'created_ts']);
93 $claim->setUpdatedTs(
$response[
'updated_ts']);
99 $shippingItem =
new ShippingItem();
101 if (isset($item[
'title']))
103 $shippingItem->setTitle($item[
'title']);
106 if (isset($item[
'weight']))
108 $shippingItem->setWeight($item[
'weight']);
111 if (isset($item[
'quantity']))
113 $shippingItem->setQuantity($item[
'quantity']);
116 if (isset($item[
'cost_value']))
118 $shippingItem->setCostValue($item[
'cost_value']);
121 if (isset($item[
'cost_currency']))
123 $shippingItem->setCostCurrency($item[
'cost_currency']);
126 if (isset($item[
'size']))
128 $shippingItemSize =
new ShippingItemSize();
130 if (isset($item[
'size'][
'length']))
132 $shippingItemSize->setLength($item[
'size'][
'length']);
134 if (isset($item[
'size'][
'width']))
136 $shippingItemSize->setWidth($item[
'size'][
'width']);
138 if (isset($item[
'size'][
'height']))
140 $shippingItemSize->setHeight($item[
'size'][
'height']);
143 $shippingItem->setSize($shippingItemSize);
146 $claim->addItem($shippingItem);
153 foreach (
$response[
'route_points'] as $routePoint)
155 $routePoints[] = $this->buildRoutePoint($routePoint);
158 $claim->setRoutePoints($routePoints);
160 if (isset(
$response[
'emergency_contact']))
162 $claim->setEmergencyContact(
163 $this->buildContact(
$response[
'emergency_contact'])
168 $pricing =
new Pricing();
170 if (isset(
$response[
'pricing'][
'currency']))
172 $pricing->setCurrency(
$response[
'pricing'][
'currency']);
174 if (isset(
$response[
'pricing'][
'final_price']))
176 $pricing->setFinalPrice(
$response[
'pricing'][
'final_price']);
178 if (isset(
$response[
'pricing'][
'offer']))
180 $offer =
new Offer();
182 if (isset(
$response[
'pricing'][
'offer'][
'offer_id']))
184 $offer->setOfferId(
$response[
'pricing'][
'offer'][
'offer_id']);
186 if (isset(
$response[
'pricing'][
'offer'][
'price']))
188 $offer->setPrice(
$response[
'pricing'][
'offer'][
'price']);
191 $pricing->setOffer($offer);
194 $claim->setPricing($pricing);
196 if (isset(
$response[
'client_requirements']))
198 $claim->setClientRequirements(
199 $this->buildTransportClassification(
$response[
'client_requirements'])
204 foreach (
$response[
'matched_cars'] as $matchedCar)
206 $claim->addMatchedCar(
207 $this->buildTransportClassification($matchedCar)
213 $performerInfo =
new PerformerInfo();
215 if (isset(
$response[
'performer_info'][
'courier_name']))
217 $performerInfo->setCourierName(
$response[
'performer_info'][
'courier_name']);
219 if (isset(
$response[
'performer_info'][
'legal_name']))
221 $performerInfo->setLegalName(
$response[
'performer_info'][
'legal_name']);
224 if (isset(
$response[
'performer_info'][
'car_model']))
226 $performerInfo->setCarModel(
$response[
'performer_info'][
'car_model']);
229 if (isset(
$response[
'performer_info'][
'car_number']))
231 $performerInfo->setCarNumber(
$response[
'performer_info'][
'car_number']);
234 $claim->setPerformerInfo($performerInfo);
240 $claim->addErrorMessage($this->buildErrorMessage(
$errorMessage));
245 foreach (
$response[
'warnings'] as $warning)
247 $claim->addWarning($this->buildWarning($warning));
251 return $result->setClaim($claim);
262 if (isset($node[
'code']))
264 $result->setCode($node[
'code']);
266 if (isset($node[
'message']))
268 $result->setMessage($node[
'message']);
282 if (isset($node[
'source']))
284 $result->setSource($node[
'source']);
286 if (isset($node[
'code']))
288 $result->setCode($node[
'code']);
290 if (isset($node[
'message']))
292 $result->setMessage($node[
'message']);
302 private function buildRoutePoint(
array $node): RoutePoint
306 if (isset($node[
'id']))
311 if (isset($node[
'point_id']))
313 $result->setPointId($node[
'point_id']);
316 if (isset($node[
'visit_order']))
318 $result->setVisitOrder($node[
'visit_order']);
321 if (isset($node[
'type']))
323 $result->setType($node[
'type']);
326 if (isset($node[
'skip_confirmation']))
328 $result->setSkipConfirmation($node[
'skip_confirmation']);
331 if (isset($node[
'contact']))
334 $this->buildContact($node[
'contact'])
338 if (isset($node[
'address']))
341 $this->buildAddress($node[
'address'])
345 if (isset($node[
'visited_at']))
348 $this->buildVisitedAt($node[
'visited_at'])
359 private function buildContact(
array $node): Contact
363 if (isset($node[
'name']))
365 $result->setName($node[
'name']);
367 if (isset($node[
'phone']))
369 $result->setPhone($node[
'phone']);
371 if (isset($node[
'email']))
373 $result->setEmail($node[
'email']);
383 private function buildAddress(
array $node): Address
387 if (isset($node[
'fullname']))
389 $result->setFullName($node[
'fullname']);
391 if (isset($node[
'country']))
393 $result->setCountry($node[
'country']);
395 if (isset($node[
'city']))
397 $result->setCity($node[
'city']);
399 if (isset($node[
'street']))
401 $result->setStreet($node[
'street']);
403 if (isset($node[
'building']))
405 $result->setBuilding($node[
'building']);
407 if (isset($node[
'porch']))
409 $result->setPorch($node[
'porch']);
411 if (isset($node[
'coordinates']))
413 $result->setCoordinates($node[
'coordinates']);
423 private function buildVisitedAt(
array $node): VisitedAt
427 if (isset($node[
'actual']))
429 $result->setActual((
string)$node[
'actual']);
432 if (isset($node[
'expected']))
434 $result->setExpected((
string)$node[
'expected']);
444 private function buildTransportClassification(
array $node): TransportClassification
446 $result =
new TransportClassification();
448 if (isset($node[
'taxi_class']))
450 $result->setTaxiClass($node[
'taxi_class']);
454 foreach ($node as
$key => $value)
456 if (
$key ===
'taxi_class')
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
if(empty($signedUserToken)) $key