• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Reservation/Agent/ReservedProductCleaner.php
  • Класс: Bitrix\Crm\Reservation\Agent\ReservedProductCleaner
  • Вызов: ReservedProductCleaner::forceDeleteReserves
private function forceDeleteReserves(array $dealReserves): void
{
	$db = Application::getConnection();
	$syncronizer = new OrderDealSynchronizer();

	foreach ($dealReserves as $dealId => $rows)
	{
		if (empty($rows))
		{
			continue;
		}

		$reservationResult = new ReservationResult();
		foreach ($rows as $rowId => $reserve)
		{
			$reserveQuantity = (float)$reserve['RESERVE_QUANTITY'];
			$reservationResult->addReserveInfo(
				$rowId,
				0,
				-$reserveQuantity
			);
		}

		try
		{
			$db->startTransaction();

			ProductRowReservationTable::deleteByFilter([
				'=ROW_ID' => array_keys($rows),
			]);

			$syncronizer->syncOrderReservesFromDeal($dealId, $reservationResult);

			$db->commitTransaction();
		}
		catch (Throwable $e)
		{
			$db->rollbackTransaction();

			throw $e;
		}

		if (isset($this->logger))
		{
			$this->logger->info('Force delete reserves for deal: ' . $dealId);
		}
	}
}