Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/sale/lib/rest/normalizer/ |
Upload File : |
<?php namespace Bitrix\Sale\Rest\Normalizer; use Bitrix\Sale\BasketItem; use Bitrix\Sale\Payment; use Bitrix\Sale\PropertyValue; use Bitrix\Sale\Shipment; use Bitrix\Sale\ShipmentItem; use Bitrix\Sale\ShipmentItemStore; /** * Class ObjectNormalizer * @package Bitrix\Sale\Rest\Normalizer * нотация всех ключей в результате должна быть SNAKE_CASE */ class ObjectNormalizer { protected $externalFields; protected $fields; protected $order; public function __construct(array $data=[]) { $this->externalFields = $data; } public function init(\Bitrix\Sale\Order $order) { $this->order = $order; return $this; } public function orderNormalize() { $externalFields = isset($this->externalFields['ORDER'][$this->getOrder()->getInternalId()])? $this->externalFields['ORDER'][$this->getOrder()->getInternalId()]:[]; $this->fields['ORDER'] = array_merge( $externalFields, $this->getOrder()->getFieldValues() ); return $this; } public function basketNormalize() { $r=[]; /** @var BasketItem $item */ foreach ($this->getOrder()->getBasket() as $item) { $fields = $item->getFieldValues(); $externalFields = $this->externalFields['BASKET']['ITEMS'][$item->getInternalIndex()] ?? []; $props = []; foreach ($item->getPropertyCollection() as $property) { $props[] = $property->getFieldValues(); } $reservations = []; $reserveQuantityCollection = $item->getReserveQuantityCollection(); if ($reserveQuantityCollection !== null) { foreach ($item->getReserveQuantityCollection() as $reserveQuantityCollectionItem) { $reservations[] = $reserveQuantityCollectionItem->getFieldValues(); } } unset($reserveQuantityCollection); $r[$item->getInternalIndex()] = array_merge( $externalFields, $fields, [ 'PROPERTIES' => $props, 'RESERVATIONS' => $reservations, ] ); } $this->fields['ORDER']['BASKET_ITEMS']=$r; return $this; } public function propertiesValueNormalize() { $r=[]; $propertyCollection = $this->getOrder()->getPropertyCollection(); /** @var PropertyValue $property */ foreach ($propertyCollection as $property) { $externalFields = isset($this->externalFields['PROPERTIES'][$property->getInternalIndex()])? $this->externalFields['PROPERTIES'][$property->getInternalIndex()]:[]; $r[$property->getInternalIndex()] = array_merge( $externalFields, $property->getFieldValues() ); } $this->fields['ORDER']['PROPERTY_VALUES']=$r; return $this; } public function paymentsNormalize() { $r=[]; /** @var Payment $payment */ foreach($this->getOrder()->getPaymentCollection() as $payment) { $externalFields = isset($this->externalFields['PAYMENTS'][$payment->getInternalIndex()])? $this->externalFields['PAYMENTS'][$payment->getInternalIndex()]:[]; $r[$payment->getInternalIndex()] = array_merge( $externalFields, $payment->getFieldValues() ); } $this->fields['ORDER']['PAYMENTS']=$r; return $this; } public function shipmentsNormalize() { $r=[]; /** @var Shipment $shipment */ foreach ($this->getOrder()->getShipmentCollection() as $shipment) { // рест магазина не оперирует системными отгрузками if($shipment->isSystem()) continue; $shipmentIndex = $shipment->getInternalIndex(); $basketItems = []; /** @var ShipmentItem$shipmentItem */ foreach ($shipment->getShipmentItemCollection() as $shipmentItem) { $itemIndex = $shipmentItem->getInternalIndex(); $stores=[]; $storeCollection = $shipmentItem->getShipmentItemStoreCollection(); if ($storeCollection !== null) { /** @var ShipmentItemStore $shipmentItemStore */ foreach ($shipmentItem->getShipmentItemStoreCollection() as $shipmentItemStore) { $externalFieldsSIS = $this->externalFields['SHIPMENTS'][$shipmentIndex]['SHIPMENT_ITEMS'][$itemIndex]['STORE'][$shipmentItemStore->getInternalIndex()] ?? []; $stores[] = array_merge( $externalFieldsSIS, $shipmentItemStore->getFieldValues() ); } } $externalFieldsSI = $this->externalFields['SHIPMENTS'][$shipmentIndex]['SHIPMENT_ITEMS'][$itemIndex] ?? []; $basketItems[] = array_merge( $externalFieldsSI, $shipmentItem->getFieldValues(), ['STORES'=>$stores] ); } $externalFields = $this->externalFields['SHIPMENTS'][$shipmentIndex] ?? []; $r[$shipmentIndex] = array_merge( $externalFields, $shipment->getFieldValues(), ['SHIPMENT_ITEMS'=>$basketItems] ); } $this->fields['ORDER']['SHIPMENTS']= $r; return $this; } public function applyDiscountNormalize() { $list = $this->getOrder() ->getDiscount() ->getApplyResult(true); if(is_array($list) && !empty($list)) { $this->fields['ORDER']['DISCOUNTS'] = $list; } return $this; } public function taxNormalize() { $list = $this->getOrder() ->getTax() ->getTaxList(); if(is_array($list) && !empty($list)) { foreach ($list as $tax) $this->fields['ORDER']['TAXES'][] = $tax; } return $this; } public function tradeBindingsNormalize() { $r=[]; /** @var \Bitrix\Sale\TradeBindingEntity $item */ foreach($this->getOrder()->getTradeBindingCollection() as $item) { $externalFields = isset($this->externalFields['TRADE_BINDINGS'][$item->getInternalIndex()])? $this->externalFields['TRADE_BINDINGS'][$item->getInternalIndex()]:[]; $r[] = array_merge( $externalFields, $item->getFieldValues() ); } $this->fields['ORDER']['TRADE_BINDINGS']=$r; return $this; } public function getFields() { return $this->fields; } /** * @return \Bitrix\Sale\Order */ protected function getOrder() { return $this->order; } }