- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/delivery/rest/extraservicesservice.php
- Класс: BitrixSaleDeliveryRestExtraServicesService
- Вызов: ExtraServicesService::updateExtraServices
static function updateExtraServices($query, $n, CRestServer $server)
{
self::checkDeliveryPermission();
$params = self::prepareExtraServicesParams($query, $server);
if (empty($params['ID']))
{
throw new RestException('Parameter ID is not defined', self::ERROR_CHECK_FAILURE);
}
$extraService = SaleDeliveryExtraServicesTable::getList([
'select' => ['ID', 'CODE', 'DELIVERY_ID', 'CLASS_NAME'],
'filter' => [
'=ID' => $params['ID'],
],
'limit' => 1,
])->fetch();
if ($extraService)
{
$deliveryService = SaleDeliveryServicesManager::getById($extraService['DELIVERY_ID']);
if ($deliveryService && !self::hasAccessToDelivery($deliveryService, $params['APP_ID']))
{
throw new AccessException();
}
$newCode = $params['CODE'] ?? '';
if ($newCode)
{
$existingExtraService = SaleDeliveryExtraServicesTable::getList([
'select' => ['ID'],
'filter' => [
'=DELIVERY_ID' => $extraService['DELIVERY_ID'],
'=CODE' => $newCode,
],
'limit' => 1,
])->fetch();
if ($existingExtraService && (int)$existingExtraService['ID'] !== (int)$params['ID'])
{
throw new RestException(
'FIELDS[CODE] "' . $newCode . '" already exists for this delivery',
self::ERROR_CHECK_FAILURE
);
}
}
}
else
{
throw new RestException('Extra service not found', self::ERROR_EXTRA_SERVICE_NOT_FOUND);
}
$extraServicesTypeMap = array_flip(self::getExtraServicesTypeMap());
if (!isset($extraServicesTypeMap[$extraService['CLASS_NAME']]))
{
throw new RestException('Unknown type', self::ERROR_CHECK_FAILURE);
}
$type = $extraServicesTypeMap[$extraService['CLASS_NAME']];
$fields = [];
if (!empty($params['NAME']))
{
$fields['NAME'] = $params['NAME'];
}
if (!empty($params['ACTIVE']))
{
$fields['ACTIVE'] = $params['ACTIVE'] === 'Y' ? 'Y' : 'N';
}
if (isset($params['DESCRIPTION']))
{
$fields['DESCRIPTION'] = $params['DESCRIPTION'];
}
if (!empty($params['SORT']))
{
$fields['SORT'] = (int)$params['SORT'];
}
if (isset($params['CODE']))
{
$fields['CODE'] = $params['CODE'];
}
$internalParams = self::makeInternalParams($type, $params);
if (!is_null($internalParams))
{
$fields['PARAMS'] = $internalParams;
}
$fields = SaleDeliveryExtraServicesManager::prepareParamsToSave($fields);
$result = SaleDeliveryExtraServicesTable::update($params['ID'], $fields);
if ($result->isSuccess())
{
return true;
}
$error = implode("n", $result->getErrorMessages());
throw new RestException($error, self::ERROR_EXTRA_SERVICE_UPDATE);
}