+7 (987) 026-06-36
Написать в Telegram

Оставить заявку
stanislav_web

Сумма из свойства товаров в корзине и установка стоимости доставки при выборе доставки в 1С-Битрикс

Сумма из свойства товаров в корзине и установка стоимости доставки при выборе доставки в 1С-Битрикс Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

Сумма из свойства товаров в корзине и установка стоимости доставки при выборе доставки в 1С-Битрикс

Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

📅 14 ноября 2023

👁‍🗨 214

🔥 0

Решение выполнено на готовом решении Аспро: Лайтшоп версии 1.1.5

Используя событие компонента оформления заказа "OnSaleComponentOrderDeliveriesCalculated" в файле init.php напишем свой обработчик для изменения стоимости доставки при выборе конкретного способа доставки представленного в виде определенного района.
use Bitrix\Main\EventManager;
$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('sale', 'OnSaleComponentOrderDeliveriesCalculated', 'calcDistrict');

function calcDistrict($order) {

	$basket = $order->getBasket(); // Получаем корзину

	foreach ($basket as $basket_item) {
		$productIds[] = $basket_item->getProductId(); // Получаем ID всех товаров в корзине
	}

	$getElementsFromBasket = CIBlockElement::GetList(
		false,
		[
			'IBLOCK_ID' => 48,
			'ID' => $productIds
		],
		false,
		false,
		[
			'PROPERTY_STORE'
		]
	);
	while ($elementsFromBasket = $getElementsFromBasket->Fetch()) {
		$arResultInit[] = $elementsFromBasket['PROPERTY_STORE_VALUE']; // Получаем ID магазинов из всех товаров в корзине
	}

	foreach ($arResultInit as $item) {
		$getElements = CIBlockElement::GetList(
			false,
			[
				'IBLOCK_ID' => 76,
				'PROPERTY_STORE' => $item,
				'ACTIVE' => 'Y'
			],
			false,
			false,
			[
				'ID',
				'NAME',
				'PROPERTY_PRICE',
				'PROPERTY_DISTRICT'
			]
		);
		while ($elements = $getElements->Fetch()) {
			if (empty($arResultInitDistrict[$elements['ID']])) {
				$arResultInitDistrict[$elements['ID']] = $elements; // Получаем районы магазинов из всех товаров в корзине
			}
		}
	}

	$deliveryID = $order->getDeliveryIdList(); // Получаем ID выбранного способа доставки

	switch ($deliveryID['0']) {
		case '12':
			$districtSelect = 'octiabrski';
		break;
		case '6':
			$districtSelect = 'sovetskiy';
		break;
		case '7':
			$districtSelect = 'dyemskiy';
		break;
		case '9':
			$districtSelect = 'kirovskiy';
		break;
		case '10':
			$districtSelect = 'kalininskiy';
		break;
		case '11':
			$districtSelect = 'ordzhonikidzevskiy';
		break;
		case '13':
			$districtSelect = 'leninskiy';
		break;
	}

	foreach ($arResultInitDistrict as $district) {
		if ($district['PROPERTY_DISTRICT_VALUE'] == $districtSelect) {
			$sumDelivery += $district['PROPERTY_PRICE_VALUE'];
		}
	}

	$shipmentCollection = $order->getShipmentCollection(); // Получаем все отгрузки
	$shipment = $shipmentCollection->createItem(); // Добавляем отгрузку

	$shipment->setBasePriceDelivery($sumDelivery); // Устанавливаем стоимость доставки

	$order->doFinalAction(true); // Делаем перерасчет
}
Сумма из свойства товаров в корзине и установка стоимости доставки при выборе доставки в 1С-Битрикс Сумма из свойства товаров в корзине и установка стоимости доставки при выборе доставки в 1С-Битрикс