• Модуль: salescenter
  • Путь к файлу: ~/bitrix/modules/salescenter/lib/controller/order.php
  • Класс: BitrixSalesCenterControllerOrder
  • Вызов: Order::getCompatibleDeliverySystemsAction
public function getCompatibleDeliverySystemsAction(
	array $basketItems = [],
	array $options = [],
	int $deliveryServiceId = 0,
	array $shipmentPropValues = [],
	array $deliveryRelatedServiceValues = [],
	int $deliveryResponsibleId = 0
)
{
	$basketItems = $this->processBasketItems($basketItems);

	$options['basketItems'] = $basketItems;
	$options['deliveryId'] = $deliveryServiceId;
	$options['deliveryExtraServicesValues'] = $deliveryRelatedServiceValues;
	$options['deliveryResponsibleId'] = $deliveryResponsibleId;
	$options['shipmentPropValues'] = $shipmentPropValues;

	$order = $this->buildOrder(
		$options,
		[
			'builderScenario' => SalescenterBuilderSettingsContainer::BUILDER_SCENARIO_SHIPMENT,
		]
	);

	$shipment = null;
	if ($order)
	{
		$shipmentCollection = $order->getShipmentCollection()->getNotSystemItems();
		foreach ($shipmentCollection as $shipment)
		{
			break;
		}
	}

	$availableServices = [];
	$activeServices = DeliveryServicesManager::getActiveList();
	foreach ($activeServices as $service)
	{
		$isCompatible = false;
		$compatibleExtraServiceIds = null;

		if (is_null($shipment))
		{
			$isCompatible = true;
		}
		else
		{
			$serviceObject = DeliveryServicesManager::getObjectById($service['ID']);

			if ($serviceObject && $serviceObject->isCompatible($shipment))
			{
				$isCompatible = true;
				$compatibleExtraServiceIds = $serviceObject->getCompatibleExtraServiceIds($shipment);
			}
		}

		if ($isCompatible)
		{
			$availableServices[$service['ID']] = $compatibleExtraServiceIds;
		}
	}

	return [
		'availableServices' => $availableServices
	];
}