3namespace Bitrix\Sale\Rest\Entity;
7use Bitrix\Sale\Helpers\Order\Builder\BasketBuilderRest;
8use Bitrix\Sale\Rest\Attributes;
13 private bool $bitrix24Included;
14 private bool $catalogIncluded;
18 $this->checkModules();
20 return $this->getFieldsInfoItem() + $this->getCustomProductFieldsInfo();
25 $this->checkModules();
27 return $this->getFieldsInfoItem() + $this->getFieldsInfoCatalogProduct();
30 private function getFieldsInfoItem():
array
34 'TYPE' => self::TYPE_INT,
40 'TYPE' => self::TYPE_STRING,
43 'TYPE' => self::TYPE_INT,
50 if (!$this->bitrix24Included)
53 'TYPE' => self::TYPE_INT,
59 'TYPE' => self::TYPE_STRING,
67 'TYPE' => self::TYPE_INT,
70 'TYPE' => self::TYPE_INT,
77 'TYPE' => self::TYPE_FLOAT,
80 'TYPE' => self::TYPE_STRING,
87 'TYPE' => self::TYPE_CHAR,
93 'TYPE' => self::TYPE_FLOAT,
99 'TYPE' => self::TYPE_DATETIME,
105 'TYPE' => self::TYPE_DATETIME,
111 'TYPE' => self::TYPE_LIST,
120 private function getFieldsInfoCatalogProduct():
array
123 'TYPE' => self::TYPE_STRING,
129 if (!$this->bitrix24Included)
131 $result[
'PRODUCT_PRICE_ID'] = [
132 'TYPE' => self::TYPE_INT,
138 'TYPE' => self::TYPE_INT,
144 'TYPE' => self::TYPE_STRING,
152 'TYPE' => self::TYPE_FLOAT,
158 'TYPE' => self::TYPE_FLOAT,
164 'TYPE' => self::TYPE_FLOAT,
170 'TYPE' => self::TYPE_STRING,
176 'TYPE' => self::TYPE_STRING,
182 'TYPE' => self::TYPE_STRING,
189 'TYPE' => self::TYPE_CHAR,
196 'TYPE' => self::TYPE_FLOAT,
202 'TYPE' => self::TYPE_CHAR,
209 $this->catalogIncluded
214 'TYPE' => self::TYPE_CHAR,
222 'TYPE' => self::TYPE_INT,
228 if (!$this->bitrix24Included)
230 $result[
'PRODUCT_PROVIDER_CLASS'] = [
231 'TYPE' => self::TYPE_STRING,
237 'TYPE' => self::TYPE_STRING,
243 'TYPE' => self::TYPE_INT,
251 'TYPE' => self::TYPE_STRING,
257 'TYPE' => self::TYPE_STRING,
266 private function getCustomProductFieldsInfo():
array
270 'TYPE' => self::TYPE_STRING,
273 if (!$this->bitrix24Included)
275 $result[
'PRODUCT_PRICE_ID'] = [
276 'TYPE' => self::TYPE_INT,
279 'TYPE' => self::TYPE_INT,
282 'TYPE' => self::TYPE_STRING,
290 'TYPE' => self::TYPE_FLOAT,
293 'TYPE' => self::TYPE_FLOAT,
296 'TYPE' => self::TYPE_FLOAT,
299 'TYPE' => self::TYPE_STRING,
302 'TYPE' => self::TYPE_STRING,
305 'TYPE' => self::TYPE_STRING,
308 'TYPE' => self::TYPE_CHAR,
311 'TYPE' => self::TYPE_FLOAT,
314 'TYPE' => self::TYPE_CHAR,
318 $this->catalogIncluded
319 && \Bitrix\Catalog\Config\State::isUsedInventoryManagement()
323 'TYPE' => self::TYPE_CHAR,
327 'TYPE' => self::TYPE_INT,
330 if (!$this->bitrix24Included)
332 $result[
'PRODUCT_PROVIDER_CLASS'] = [
333 'TYPE' => self::TYPE_STRING,
339 'TYPE' => self::TYPE_STRING,
345 'TYPE' => self::TYPE_INT,
350 'TYPE' => self::TYPE_STRING,
356 'TYPE' => self::TYPE_STRING,
367 if (
$name ===
'getfieldscatalogproduct')
373 $name ===
'addcatalogproduct'
374 ||
$name ===
'updatecatalogproduct'
375 ||
$name ===
'modifycatalogproduct')
377 if (isset($arguments[
'fields']))
379 $fields = $arguments[
'fields'];
388 $arguments = parent::convertKeysToSnakeCaseArguments(
$name, $arguments);
398 if (
$name ===
'getfieldscatalogproduct')
403 if (
$name ===
'addcatalogproduct')
405 $fields = $arguments[
'fields'];
410 'ignoredAttributes' => [
421 if (!$required->isSuccess())
423 $r->addError(
new Error(
424 'Required fields: ' . implode(
', ', $required->getErrorMessages())
431 $fields = $arguments[
'fields'];
436 'ignoredAttributes' => [
448 if (!$required->isSuccess())
450 $r->addError(
new Error(
451 'Required fields: ' . implode(
', ', $required->getErrorMessages())
458 $r = parent::checkArguments(
$name, $arguments);
468 ||
$name ===
'getbaseprice'
469 ||
$name ===
'getbasepricewithvat'
470 ||
$name ===
'getcurrency'
471 ||
$name ===
'getdefaultprice'
472 ||
$name ===
'getdiscountprice'
473 ||
$name ===
'getfinalprice'
474 ||
$name ===
'getinitialprice'
475 ||
$name ===
'getprice'
476 ||
$name ===
'getpricewithvat'
477 ||
$name ===
'getproductid'
478 ||
$name ===
'getquantity'
479 ||
$name ===
'getreservedquantity'
480 ||
$name ===
'getvat'
481 ||
$name ===
'getvatrate'
482 ||
$name ===
'getweight'
483 ||
$name ===
'isbarcodemulti'
484 ||
$name ===
'iscustommulti'
485 ||
$name ===
'iscustomprice'
486 ||
$name ===
'isdelay'
487 ||
$name ===
'isvatinprice'
488 ||
$name ===
'getfieldscatalogproduct'
489 ||
$name ===
'modifycatalogproduct'
495 if (
$name ===
'addcatalogproduct')
497 $fields = $arguments[
'fields'];
502 'ignoredAttributes' => [
517 $fields = $arguments[
'fields'];
522 'ignoredAttributes' => [
538 parent::internalizeArguments(
$name, $arguments);
546 if (
$name ===
'getfieldscatalogproduct')
552 $name ===
'addcatalogproduct'
553 ||
$name ===
'updatecatalogproduct'
583 $fieldsInfo = empty($fieldsInfo) ? $this->
getFields() : $fieldsInfo;
588 'ignoredAttributes' => [
602 'ignoredAttributes' => [
614 if (isset(
$fields[
'ORDER'][
'ID']))
619 if (isset(
$fields[
'ORDER'][
'BASKET_ITEMS']))
621 foreach (
$fields[
'ORDER'][
'BASKET_ITEMS'] as
$k => $item)
624 $this->
isNewItem($item)? $listFieldsInfoAdd:$listFieldsInfoUpdate
628 if ($this->
isNewItem($item) && isset($item[
'ID']))
630 $result[
'ORDER'][
'BASKET_ITEMS'][
$k][
'ID'] = $item[
'ID'];
633 if (isset($item[
'PROPERTIES']))
635 $result[
'ORDER'][
'BASKET_ITEMS'][
$k][
'PROPERTIES'] = $basketProperties->internalizeFieldsModify([
'BASKET_ITEM' => [
'PROPERTIES'=>$item[
'PROPERTIES']]])[
'BASKET_ITEM'][
'PROPERTIES'];
650 if (isset(
$fields[
'PROPERTIES']))
652 $result[
'PROPERTIES'] = $basketProperties->externalizeListFields(
$fields[
'PROPERTIES']);
655 if (isset(
$fields[
'RESERVATIONS']))
657 $result[
'RESERVATIONS'] = $basketReservation->externalizeListFields(
$fields[
'RESERVATIONS']);
673 if (!isset(
$fields[
'ORDER'][
'ID']))
675 $emptyFields[] =
'[order][id]';
677 if (!isset(
$fields[
'ORDER'][
'BASKET_ITEMS']) || !is_array(
$fields[
'ORDER'][
'BASKET_ITEMS']))
679 $emptyFields[] =
'[order][basketItems][]';
682 if (!empty($emptyFields))
684 $r->addError(
new Error(
'Required fields: ' . implode(
', ', $emptyFields)));
688 $r = parent::checkFieldsModify(
$fields);
704 'ignoredAttributes' => [
718 'ignoredAttributes' => [
727 foreach (
$fields[
'ORDER'][
'BASKET_ITEMS'] as
$k => $item)
730 $this->
isNewItem($item)? $listFieldsInfoAdd:$listFieldsInfoUpdate
732 if (!$required->isSuccess())
734 $r->addError(
new Error(
735 '[basketItems]['.
$k.
'] - ' . implode(
', ', $required->getErrorMessages()) .
'.'
739 if (isset($item[
'PROPERTIES']))
741 $requiredProperties = $basketProperties->checkRequiredFieldsModify([
743 'PROPERTIES' => $item[
'PROPERTIES'],
746 if (!$requiredProperties->isSuccess())
748 $requiredPropertiesFields = [];
749 foreach ($requiredProperties->getErrorMessages() as
$errorMessage)
751 $requiredPropertiesFields[] =
'[basketItems]['.$k.
']'.
$errorMessage;
753 $r->addError(
new Error(implode(
' ', $requiredPropertiesFields)));
760 private function checkModules(): void
762 if (!isset($this->bitrix24Included))
764 $this->bitrix24Included = Loader::includeModule(
'bitrix24');
766 if (!isset($this->catalogIncluded))
768 $this->catalogIncluded = Loader::includeModule(
'catalog');
static isBasketItemNew($basketCode)
externalizeListFields($list)
getListFieldInfo(array $fieldsInfo, $params=[])
internalizeFields($fields, array $fieldsInfo)
convertKeysToSnakeCaseFields($fields)
checkRequiredFields($fields, array $fieldsInfo, $params=[])
externalizeFields($fields)
getFieldsCatalogProduct()
internalizeArguments($name, $arguments)
checkFieldsModify($fields)
externalizeFieldsModify($fields)
convertKeysToSnakeCaseArguments($name, $arguments)
checkArguments($name, $arguments)
internalizeFieldsModify($fields, $fieldsInfo=[])
externalizeResult($name, $fields)
checkRequiredFieldsModify($fields)
</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( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)