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/entity/ |
Upload File : |
<?php namespace Bitrix\Sale\Rest\Entity; use Bitrix\Main\Error; use Bitrix\Sale\Rest\Attributes; use Bitrix\Sale\Rest\View\PropertyValue; use Bitrix\Sale\Rest\View\TradeBinding; use Bitrix\Sale\Result; class Order extends Base { public function getFields() { return [ 'PERSON_TYPE_ID'=>[ 'TYPE'=>self::TYPE_INT, 'ATTRIBUTES'=>[ Attributes::Required, Attributes::Immutable ] ], 'USER_ID'=>[ 'TYPE'=>self::TYPE_INT, 'ATTRIBUTES'=>[ Attributes::Immutable ] ], 'CURRENCY'=>[ 'TYPE'=>self::TYPE_STRING, 'ATTRIBUTES'=>[ Attributes::Required, Attributes::Immutable ] ], 'LID'=>[ 'TYPE'=>self::TYPE_STRING, 'ATTRIBUTES'=>[ Attributes::Required, Attributes::Immutable, ] ], 'PERSON_TYPE_XML_ID'=>[ 'TYPE'=>self::TYPE_STRING, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'STATUS_XML_ID'=>[ 'TYPE'=>self::TYPE_STRING, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'ACCOUNT_NUMBER'=>[ 'TYPE'=>self::TYPE_STRING, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'ID'=>[ 'TYPE'=>self::TYPE_INT, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'CANCELED'=>[ 'TYPE'=>self::TYPE_CHAR ], 'DATE_CANCELED'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'DEDUCTED'=>[ 'TYPE'=>self::TYPE_CHAR, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'EMP_CANCELED_ID'=>[ 'TYPE'=>self::TYPE_INT ], 'REASON_CANCELED'=>[ 'TYPE'=>self::TYPE_STRING ], 'STATUS_ID'=>[ 'TYPE'=>self::TYPE_CHAR ], 'DATE_STATUS'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'EMP_STATUS_ID'=>[ 'TYPE'=>self::TYPE_INT ], 'MARKED'=>[ 'TYPE'=>self::TYPE_CHAR ], 'DATE_MARKED'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'EMP_MARKED_ID'=>[ 'TYPE'=>self::TYPE_INT ], 'REASON_MARKED'=>[ /*??*/'TYPE'=>self::TYPE_STRING ], 'PRICE'=>[ 'TYPE'=>self::TYPE_FLOAT ], 'PAYED'=>[ 'TYPE'=>self::TYPE_CHAR, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'DISCOUNT_VALUE'=>[ 'TYPE'=>self::TYPE_FLOAT ], 'DATE_INSERT'=>[ 'TYPE'=>self::TYPE_DATETIME ], 'DATE_UPDATE'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'USER_DESCRIPTION'=>[ 'TYPE'=>self::TYPE_STRING ], 'ADDITIONAL_INFO'=>[ 'TYPE'=>self::TYPE_STRING ], 'COMMENTS'=>[ 'TYPE'=>self::TYPE_STRING ], 'TAX_VALUE'=>[ /*??*/'TYPE'=>self::TYPE_FLOAT, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'RECURRING_ID'=>[ 'TYPE'=>self::TYPE_CHAR ], 'LOCKED_BY'=>[ 'TYPE'=>self::TYPE_CHAR ], 'DATE_LOCK'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'RECOUNT_FLAG'=>[ 'TYPE'=>self::TYPE_CHAR ], 'AFFILIATE_ID'=>[ 'TYPE'=>self::TYPE_INT ], 'DELIVERY_DOC_NUM'=>[ 'TYPE'=>self::TYPE_STRING, 'ATTRIBUTES'=>[Attributes::Hidden] ], 'DELIVERY_DOC_DATE'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::Hidden] ], 'UPDATED_1C'=>[ 'TYPE'=>self::TYPE_CHAR ], 'STORE_ID'=>[ 'TYPE'=>self::TYPE_INT, 'ATTRIBUTES'=>[Attributes::Hidden] ], 'ORDER_TOPIC'=>[ 'TYPE'=>self::TYPE_STRING ], 'RESPONSIBLE_ID'=>[ 'TYPE'=>self::TYPE_INT ], 'DATE_BILL'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::Hidden] ], 'DATE_PAY_BEFORE'=>[ 'TYPE'=>self::TYPE_DATETIME, 'ATTRIBUTES'=>[Attributes::Hidden] ], 'XML_ID'=>[ 'TYPE'=>self::TYPE_STRING ], 'ID_1C'=>[ 'TYPE'=>self::TYPE_STRING ], 'VERSION_1C'=>[ 'TYPE'=>self::TYPE_STRING ], 'VERSION'=>[ 'TYPE'=>self::TYPE_INT, 'ATTRIBUTES'=>[Attributes::ReadOnly] ], 'EXTERNAL_ORDER'=>[ 'TYPE'=>self::TYPE_CHAR ], 'COMPANY_ID'=>[ 'TYPE'=>self::TYPE_INT ], //region List fields 'PAYMENTS'=>['TYPE'=>self::TYPE_LIST, 'ATTRIBUTES'=>[Attributes::Hidden]], 'SHIPMENTS'=>['TYPE'=>self::TYPE_LIST, 'ATTRIBUTES'=>[Attributes::Hidden]], 'PROPERTY_VALUES'=>['TYPE'=>self::TYPE_LIST, 'ATTRIBUTES'=>[Attributes::Hidden]], 'BASKET_ITEMS'=>['TYPE'=>self::TYPE_LIST, 'ATTRIBUTES'=>[Attributes::Hidden]], //endregion ]; } public function internalizeFieldsModify($fields, $fieldsInfo=[]) { $result = []; $payment = new Payment(); $shipment = new Shipment(); $basketItem = new BasketItem(); $propertyValue = new PropertyValue(); $tradeBinding = new TradeBinding(); $listFieldsInfoAdd = $this->getListFieldInfo($this->getFields(), ['filter'=>['ignoredAttributes'=>[Attributes::Hidden, Attributes::ReadOnly]]]); $listFieldsInfoUpdate = $this->getListFieldInfo($this->getFields(), ['filter'=>['ignoredAttributes'=>[Attributes::Hidden, Attributes::ReadOnly, Attributes::Immutable], 'skipFields'=>['ID']]]); $result['ORDER'] = $this->internalizeFields($fields['ORDER'], $this->isNewItem($fields['ORDER'])? $listFieldsInfoAdd:$listFieldsInfoUpdate ); if(isset($fields['ORDER']['BASKET_ITEMS'])) { $result['ORDER']['BASKET_ITEMS'] = $basketItem->internalizeFieldsModify($fields)['ORDER']['BASKET_ITEMS']; } if(isset($fields['ORDER']['PROPERTY_VALUES'])) { $result['ORDER']['PROPERTY_VALUES'] = $propertyValue->internalizeFieldsModify($fields)['ORDER']['PROPERTY_VALUES']; } if(isset($fields['ORDER']['PAYMENTS'])) { $result['ORDER']['PAYMENTS'] = $payment->internalizeFieldsModify($fields)['ORDER']['PAYMENTS']; } if(isset($fields['ORDER']['SHIPMENTS'])) { $result['ORDER']['SHIPMENTS'] = $shipment->internalizeFieldsModify($fields)['ORDER']['SHIPMENTS']; } if(isset($fields['ORDER']['TRADE_BINDINGS'])) { $result['ORDER']['TRADE_BINDINGS'] = $tradeBinding->internalizeFieldsModify($fields)['ORDER']['TRADE_BINDINGS']; } return $result; } public function convertKeysToSnakeCaseArguments($name, $arguments) { if($name == 'import') { if(isset($arguments['fields'])) { $fields = $arguments['fields']; if(!empty($fields)) $arguments['fields'] = $this->convertKeysToSnakeCaseFields($fields); } } return $arguments; } public function internalizeArguments($name, $arguments) { if($name == 'getdeliveryidlist' || $name == 'getpayments' || $name == 'getpaysystemidlist' || $name == 'getprintedchecks' || $name == 'getshipments' || $name == 'getbasket' || $name == 'getpropertyvalues' || $name == 'getcurrency' || $name == 'getdateinsert' || $name == 'getapplydiscount' || $name == 'getpersontypeid' || $name == 'getprice' || $name == 'getproperties' || $name == 'getsiteid' || $name == 'getsumpaid' || $name == 'gettaxlist' || $name == 'gettaxlocation' || $name == 'gettaxprice' || $name == 'gettaxvalue' || $name == 'getuserid' || $name == 'getvatrate' || $name == 'getvatsum' || $name == 'iscanceled' || $name == 'isexternal' || $name == 'ismarked' || $name == 'ispaid' || $name == 'isshipped' || $name == 'isusedvat' || $name == 'importdelete' ){} elseif($name == 'import') { $fields = $arguments['fields']; if(!empty($fields)) $arguments['fields'] = $this->internalizeFieldsImport($fields); } else { parent::internalizeArguments($name, $arguments); } return $arguments; } protected function internalizeFieldsImport($fields) { $result = []; $payment = new Payment(); $shipment = new Shipment(); $shipmentItem = new ShipmentItem(); $basketItem = new BasketItem(); $tradeBinding = new TradeBinding(); $propertyValue = new PropertyValue(); $basketProperties = new BasketProperties(); if(isset($fields['ORDER'])) { $result['ORDER'] = $this->internalizeFields($fields['ORDER'], $this->getFields());//only for importAction PERSON_TYPE_XML_ID, STATUS_XML_ID } if(isset($fields['ORDER']['BASKET_ITEMS'])) { $result['ORDER']['BASKET_ITEMS'] = $basketItem->internalizeListFields($fields['ORDER']['BASKET_ITEMS']); foreach ($fields['ORDER']['BASKET_ITEMS'] as $k=>$items) { if(isset($items['PROPERTIES'])) { $result['ORDER']['BASKET_ITEMS'][$k]['PROPERTIES'] = $basketProperties->internalizeListFields($items['PROPERTIES']); } } } if(isset($fields['ORDER']['PROPERTY_VALUES'])) { $result['ORDER']['PROPERTY_VALUES'] = $propertyValue->internalizeListFields($fields['ORDER']['PROPERTY_VALUES']);//only for importAction ORDER_PROPS_XML_ID } if(isset($fields['ORDER']['PAYMENTS'])) { $result['ORDER']['PAYMENTS'] = $payment->internalizeListFields($fields['ORDER']['PAYMENTS']);//only for importAction PAY_SYSTEMS_XML_ID } if(isset($fields['ORDER']['SHIPMENTS'])) { $result['ORDER']['SHIPMENTS'] = $shipment->internalizeListFields($fields['ORDER']['SHIPMENTS']);//only for importAction DELIVERY_XML_ID, STATUS_XML_ID foreach ($fields['ORDER']['SHIPMENTS'] as $k=>$items) { if(isset($items['SHIPMENT_ITEMS'])) { $result['ORDER']['SHIPMENTS'][$k]['SHIPMENT_ITEMS'] = $shipmentItem->internalizeListFields($items['SHIPMENT_ITEMS']); } } } if(isset($fields['ORDER']['TRADE_BINDINGS'])) { $result['ORDER']['TRADE_BINDINGS'] = $tradeBinding->internalizeListFields($fields['ORDER']['TRADE_BINDINGS']);//only for importAction TRADING_PLATFORM_XML_ID } return $result; } protected function getRewritedFields() { return [ 'PERSON_TYPE_XML_ID'=>[ 'REFERENCE_FIELD'=>'PERSON_TYPE.XML_ID' ], 'STATUS_XML_ID'=>[ 'REFERENCE_FIELD'=>'STATUS_TABLE.XML_ID' ] ]; } public function externalizeFields($fields) { $basketItem = new \Bitrix\Sale\Rest\Entity\BasketItem(); $payment = new \Bitrix\Sale\Rest\Entity\Payment(); $shipment = new \Bitrix\Sale\Rest\Entity\Shipment(); $shipmentItem = new \Bitrix\Sale\Rest\Entity\ShipmentItem(); $tradeBinding = new TradeBinding(); $propertyValue = new PropertyValue(); $basketProperties = new \Bitrix\Sale\Rest\Entity\BasketProperties(); $result = parent::externalizeFields($fields); if(isset($fields['PROPERTY_VALUES']) && count($fields['PROPERTY_VALUES'])>0) { $result['PROPERTY_VALUES'] = $propertyValue->externalizeListFields($fields['PROPERTY_VALUES']); } if(isset($fields['BASKET_ITEMS']) && count($fields['BASKET_ITEMS'])>0) { foreach ($fields['BASKET_ITEMS'] as $k=>$item) { $result['BASKET_ITEMS'][$k] = $basketItem->externalizeFields($item); //$result['BASKET_ITEMS'][$k]['PROPERTIES'] = $basketProperties->externalizeListFields($item['PROPERTIES']); } } if(isset($fields['PAYMENTS']) && count($fields['PAYMENTS'])>0) { $result['PAYMENTS'] = $payment->externalizeListFields($fields['PAYMENTS']); } if(isset($fields['SHIPMENTS']) && count($fields['SHIPMENTS'])>0) { foreach($fields['SHIPMENTS'] as $k=>$item) { $result['SHIPMENTS'][$k] = $shipment->externalizeFields($item); /*if(isset($item['SHIPMENT_ITEMS'])) { $data['SHIPMENTS'][$k]['SHIPMENT_ITEMS'] = $shipmentItem->externalizeListFields($item['SHIPMENT_ITEMS']); }*/ } } if(isset($fields['TRADE_BINDINGS']) && count($fields['TRADE_BINDINGS'])>0) $result['TRADE_BINDINGS'] = $tradeBinding->externalizeListFields($fields['TRADE_BINDINGS']); return $result; } public function externalizeFieldsModify($fields) { return $this->externalizeFields($fields); } public function externalizeFieldsTryModify($fields) { $result = parent::externalizeFieldsTryModify($fields); if(isset($fields['PAYMENTS'])) { foreach ($fields['PAYMENTS'] as $k=>$payment) { if(isset($payment['LIST_PAY_SYSTEM_WITH_RESTRICTIONS'])) { $result['PAYMENTS'][$k]['LIST_PAY_SYSTEM_WITH_RESTRICTIONS'] = $payment['LIST_PAY_SYSTEM_WITH_RESTRICTIONS']; } } } if(isset($fields['SHIPMENTS'])) { foreach ($fields['SHIPMENTS'] as $k=>$shipments) { if(isset($shipments['LIST_DELIIVERY_SERVICES_RESTRICTIONS'])) { $result['SHIPMENTS'][$k]['LIST_DELIIVERY_SERVICES_RESTRICTIONS'] = $shipments['LIST_DELIIVERY_SERVICES_RESTRICTIONS']; } } } return $result; } public function externalizeResult($name, $fields) { if($name == 'getdeliveryidlist' || $name == 'getpaysystemidlist' || $name == 'getprintedchecks' ){} elseif ($name == 'getbasket') { $basketItem = new BasketItem(); $fields = $basketItem->externalizeListFields($fields); } elseif ($name == 'getpayments') { $payment = new Payment(); $fields = $payment->externalizeListFields($fields); } elseif ($name == 'getshipments') { $shipment = new Shipment(); $fields = $shipment->externalizeListFields($fields); } elseif ($name == 'getpropertyvalues') { $propertyValue = new PropertyValue(); $fields = $propertyValue->externalizeListFields($fields); } elseif($name == 'import') { $fields = $this->externalizeFieldsModify($fields); } else { $fields = parent::externalizeResult($name, $fields); } return $fields; } public function checkRequiredFieldsModify($fields) { $r = new Result(); $payment = new Payment(); $shipment = new Shipment(); $basketItem = new BasketItem(); $propertyValue = new PropertyValue(); $tradeBinding = new TradeBinding(); $listFieldsInfoAdd = $this->getListFieldInfo($this->getFields(), ['filter'=>['ignoredAttributes'=>[Attributes::Hidden, Attributes::ReadOnly]]]); $listFieldsInfoUpdate = $this->getListFieldInfo($this->getFields(), ['filter'=>['ignoredAttributes'=>[Attributes::Hidden, Attributes::ReadOnly, Attributes::Immutable], 'skipFields'=>['ID']]]); $required = $this->checkRequiredFields($fields['ORDER'], $this->isNewItem($fields['ORDER'])? $listFieldsInfoAdd:$listFieldsInfoUpdate ); if($required->isSuccess() == false) { $r->addError(new Error(implode(', ', $required->getErrorMessages()).'.')); } $required = $propertyValue->checkRequiredFieldsModify($fields); if($required->isSuccess() == false) { $r->addError(new Error(implode(', ', $required->getErrorMessages()))); } if(isset($fields['ORDER']['BASKET_ITEMS'])) { $required = $basketItem->checkRequiredFieldsModify($fields); if($required->isSuccess() == false) { $r->addError(new Error(implode(', ', $required->getErrorMessages()))); } } if(isset($fields['ORDER']['PAYMENTS'])) { $required = $payment->checkRequiredFieldsModify($fields); if($required->isSuccess() == false) { $r->addError(new Error(implode(', ', $required->getErrorMessages()))); } } if(isset($fields['ORDER']['SHIPMENTS'])) { $required = $shipment->checkRequiredFieldsModify($fields); if($required->isSuccess() == false) { $r->addError(new Error(implode(', ', $required->getErrorMessages()))); } } if(isset($fields['ORDER']['TRADE_BINDINGS'])) { $required = $tradeBinding->checkRequiredFieldsModify($fields); if($required->isSuccess() == false) { $r->addError(new Error(implode(', ', $required->getErrorMessages()))); } } return $r; } }