- Модуль: 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 ?: [];
}