• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/services/automatic.php
  • Класс: BitrixSaleDeliveryServicesAutomatic
  • Вызов: Automatic::convertNewServiceToOld
static function convertNewServiceToOld($service, $sid = false)
{
	if(!$sid && !isset($service["CONFIG"]["MAIN"]["SID"]))
		return array();

	self::initHandlers();
	$handlers = self::getRegisteredHandlers("SID");

	if($sid !== false)
		$service["SID"] = $sid;
	else
		$service["SID"] = $service["CONFIG"]["MAIN"]["SID"];

	$handlerExists = isset($handlers[$service["SID"]]) && is_array($handlers[$service["SID"]]);

	$service["TAX_RATE"] = $service["CONFIG"]["MAIN"]["MARGIN_VALUE"]; //todo: %, CURRENCY
	$service["INSTALLED"] = 'Y';

	$service["BASE_CURRENCY"] = $service["CURRENCY"];
	$service["SETTINGS"] = $service["CONFIG"]["MAIN"]["OLD_SETTINGS"] ?? '';
	$service["HANDLER"] = '';
	if ($handlerExists)
	{
		$service["HANDLER"] = $handlers[$service["SID"]]["HANDLER"] ?? '';
	}

	$service['LOGOTIP'] = (int)($service['LOGOTIP'] ?? 0);
	if ($service["LOGOTIP"] > 0)
	{
		$service["LOGOTIP"] = CFile::getFileArray($service["LOGOTIP"]);
	}

	$siteId = false;

	$serviceId = (int)($service['ID'] ?? 0);
	if ($serviceId)
	{
		$restrictions = BitrixSaleDeliveryRestrictionsManager::getRestrictionsList($serviceId);

		foreach($restrictions as $restriction)
		{
			if($restriction["CLASS_NAME"] == 'BitrixSaleDeliveryRestrictionsBySite' && !empty($restriction["PARAMS"]["SITE_ID"]))
			{
				if(is_array($restriction["PARAMS"]["SITE_ID"]))
				{
					reset($restriction["PARAMS"]["SITE_ID"]);
					$siteId = current($restriction["PARAMS"]["SITE_ID"]);
				}
				else
				{
					$siteId = $restriction["PARAMS"]["SITE_ID"];
				}

				break;
			}
		}
	}

	if(!$siteId)
		$siteId = Helper::getDefaultSiteId();

	$service['CONFIG'] = [];
	if ($handlerExists)
	{
		$service["CONFIG"] = self::createConfig($handlers[$service["SID"]], $service["SETTINGS"], $siteId);
	}
	$service["SETTINGS"] = unserialize($service["SETTINGS"], ['allowed_classes' => false]);
	$service["PROFILES"] = array();

	if ($serviceId > 0)
	{
		foreach(Manager::getByParentId($serviceId) as $profile)
		{
			$profileId = $profile["CONFIG"]["MAIN"]["PROFILE_ID"];
			$profileParams = array(
				"TITLE" => $profile["NAME"],
				"DESCRIPTION" => $profile["DESCRIPTION"],
				"TAX_RATE" => $service["CONFIG"]["MAIN"]["MARGIN_VALUE"] ?? '',
				"ACTIVE" =>  $profile["ACTIVE"]
			);

			$restrictions = RestrictionsManager::getRestrictionsList($profile["ID"]);

			foreach($restrictions as $restriction)
			{
				switch($restriction["CLASS_NAME"])
				{
					case 'BitrixSaleDeliveryRestrictionsByWeight':
						$profileParams["RESTRICTIONS_WEIGHT"] = array($restriction["PARAMS"]["MIN_WEIGHT"], $restriction["PARAMS"]["MAX_WEIGHT"]);
						break;

					case 'BitrixSaleDeliveryRestrictionsByPrice':
						$profileParams["RESTRICTIONS_SUM"] = array($restriction["PARAMS"]["MIN_PRICE"], $restriction["PARAMS"]["MAX_PRICE"]);
						break;

					case 'BitrixSaleDeliveryRestrictionsByDimensions':
						$profileParams["RESTRICTIONS_DIMENSIONS"] = array(
							$restriction["PARAMS"]["LENGTH"],
							$restriction["PARAMS"]["WIDTH"],
							$restriction["PARAMS"]["HEIGHT"]
						);

						$profileParams["RESTRICTIONS_MAX_SIZE"] = $restriction["PARAMS"]["MAX_DIMENSION"];
						$profileParams["RESTRICTIONS_DIMENSIONS_SUM"] = $restriction["PARAMS"]["MAX_DIMENSIONS_SUM"];
						break;

					default:
						break;
				}

			}

			$service["PROFILES"][$profileId] = $profileParams;
		}
	}

	unset($service["CODE"]);

	if ($handlerExists)
	{
		$result = array_merge($handlers[$service["SID"]], $service);
	}
	else
	{
		$result = $service;
	}

	return $result;
}