- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/delivery/rest/extraservicesservice.php
- Класс: BitrixSaleDeliveryRestExtraServicesService
- Вызов: ExtraServicesService::addExtraServices
static function addExtraServices($query, $n, CRestServer $server)
{
self::checkDeliveryPermission();
$params = self::prepareExtraServicesParams($query, $server);
if (empty($params['DELIVERY_ID']))
{
throw new RestException('Parameter DELIVERY_ID is not defined', self::ERROR_CHECK_FAILURE);
}
if (empty($params['NAME']))
{
throw new RestException('Parameter NAME is not defined', self::ERROR_CHECK_FAILURE);
}
$extraServiceType = $params['TYPE'] ?? null;
if (!$extraServiceType)
{
throw new RestException('Parameter TYPE is not defined', self::ERROR_CHECK_FAILURE);
}
$extraServicesTypeMap = self::getExtraServicesTypeMap();
if (empty($extraServicesTypeMap[$extraServiceType]))
{
throw new RestException('Parameter TYPE is unknown', self::ERROR_CHECK_FAILURE);
}
if ($params['TYPE'] === self::ENUM_TYPE)
{
if (!isset($params['ITEMS']) || !is_array($params['ITEMS']) || empty($params['ITEMS']))
{
throw new RestException('Parameter ITEMS must be defined for enum type', self::ERROR_CHECK_FAILURE);
}
}
$deliveryService = SaleDeliveryServicesManager::getById($params['DELIVERY_ID']);
if ($deliveryService)
{
if (!self::hasAccessToDelivery($deliveryService, $params['APP_ID']))
{
throw new AccessException();
}
}
else
{
throw new RestException('Delivery not found', self::ERROR_DELIVERY_NOT_FOUND);
}
if (!empty($params['CODE']))
{
$extraServiceData = SaleDeliveryExtraServicesTable::getList([
'select' => ['ID'],
'filter' => [
'=DELIVERY_ID' => $params['DELIVERY_ID'],
'=CODE' => $params['CODE'],
],
'limit' => 1,
])->fetch();
if ($extraServiceData)
{
throw new RestException(
'CODE "' . $params['CODE'] . '" already exists for this delivery',
self::ERROR_CHECK_FAILURE
);
}
}
$fields = SaleDeliveryExtraServicesManager::prepareParamsToSave([
'CLASS_NAME' => $extraServicesTypeMap[$params['TYPE']],
'DELIVERY_ID' => $params['DELIVERY_ID'],
'NAME' => $params['NAME'],
'ACTIVE' => (!empty($params['ACTIVE']) && $params['ACTIVE'] === 'Y') ? 'Y' : 'N',
'CODE' => $params['CODE'] ?? '',
'DESCRIPTION' => $params['DESCRIPTION'] ?? '',
'PARAMS' => self::makeInternalParams($params['TYPE'], $params),
'SORT' => $params['SORT'] ? (int)$params['SORT'] : 100,
'RIGHTS' => [
SaleDeliveryExtraServicesManager::RIGHTS_ADMIN_IDX => 'Y',
SaleDeliveryExtraServicesManager::RIGHTS_MANAGER_IDX => 'Y',
SaleDeliveryExtraServicesManager::RIGHTS_CLIENT_IDX => 'Y',
],
]);
$result = SaleDeliveryExtraServicesTable::add($fields);
if ($result->isSuccess())
{
return $result->getId();
}
$error = implode("n", $result->getErrorMessages());
throw new RestException($error, self::ERROR_EXTRA_SERVICE_ADD);
}