• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/rest/extraservicesservice.php
  • Класс: BitrixSaleDeliveryRestExtraServicesService
  • Вызов: ExtraServicesService::get
static function get($query, $n, CRestServer $server): array
{
	self::checkDeliveryPermission();
	$params = self::prepareIncomingParams($query);

	if (empty($params['DELIVERY_ID']))
	{
		throw new RestException('Parameter DELIVERY_ID is not defined', self::ERROR_CHECK_FAILURE);
	}

	$data = SaleDeliveryServicesManager::getById($params['DELIVERY_ID']);
	if (!$data)
	{
		throw new RestException('Delivery not found', self::ERROR_DELIVERY_NOT_FOUND);
	}

	$esClasses = SaleDeliveryExtraServicesManager::getClassesList();

	$extraServices = SaleDeliveryExtraServicesTable::getList([
		'filter' => [
			'=DELIVERY_ID' => $params['DELIVERY_ID'],
			'=CLASS_NAME' => $esClasses
		],
		'select' => ['ID', 'CODE', 'NAME', 'DESCRIPTION', 'CLASS_NAME', 'ACTIVE', 'SORT', 'PARAMS'],
		'order' => [
			'SORT' => 'ASC',
		],
	])->fetchAll();

	$extraServicesTypeMap = array_flip(self::getExtraServicesTypeMap());

	foreach ($extraServices as $key => $extraService)
	{
		$type = $extraServicesTypeMap[$extraService['CLASS_NAME']];
		$extraServices[$key]['TYPE'] = $type;
		unset($extraServices[$key]['CLASS_NAME']);

		if ($type === self::ENUM_TYPE)
		{
			if (array_key_exists('PRICES', $extraServices[$key]['PARAMS']))
			{
				if (is_array($extraServices[$key]['PARAMS']['PRICES']))
				{
					$extraServices[$key]['ITEMS'] = [];
					foreach ($extraServices[$key]['PARAMS']['PRICES'] as $price)
					{
						$extraServices[$key]['ITEMS'][] = [
							'TITLE' => $price['TITLE'],
							'CODE' => $price['CODE'],
							'PRICE' => $price['PRICE'] ?? null,
						];
					}
				}
			}
		}
		elseif (in_array($type, [self::CHECKBOX_TYPE, self::QUANTITY_TYPE]))
		{
			if (array_key_exists('PRICE', $extraServices[$key]['PARAMS']))
			{
				$extraServices[$key]['PRICE'] = $extraServices[$key]['PARAMS']['PRICE'];
			}
		}
		unset($extraServices[$key]['PARAMS']);
	}

	return $extraServices ?: [];
}