• Модуль: 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);
}