• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/reservation/event/handler/basketitemupdateproductreservehandlers.php
  • Класс: BitrixSaleReservationEventHandlerBasketItemUpdateProductReserveHandlers
  • Вызов: BasketItemUpdateProductReserveHandlers::OnSaleBasketItemSetField
static function OnSaleBasketItemSetField(Event $event): void
{
	$name = $event->getParameter('NAME');
	$basketItem = $event->getParameter('ENTITY');
	if ($name !== 'PRODUCT_ID' || !($basketItem instanceof BasketItem))
	{
		return;
	}

	$reserveQuantityCollection = $basketItem->getReserveQuantityCollection();
	if (!isset($reserveQuantityCollection) || $reserveQuantityCollection->isEmpty())
	{
		return;
	}

	$reserves = [];
	foreach ($reserveQuantityCollection as $reserveQuantity)
	{
		/**
		 * @var ReserveQuantity $reserveQuantity
		 */

		$reserves[] = [
			'STORE_ID' => $reserveQuantity->getStoreId(),
			'QUANTITY' => $reserveQuantity->getQuantity(),
			'DATE_RESERVE_END' => $reserveQuantity->getField('DATE_RESERVE_END'),
		];
		$result = $reserveQuantity->delete();

		if (!$result->isSuccess())
		{
			$reserveQuantity->setFieldNoDemand('QUANTITY', 0);

			Provider::tryReserve($reserveQuantity);

			$reserveQuantity->deleteNoDemand();
		}
	}

	self::$basketReserves[$basketItem->getBasketCode()] = $reserves;
}