• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Reservation/OrderSynchronizer.php
  • Класс: Bitrix\Crm\Reservation\OrderSynchronizer
  • Вызов: OrderSynchronizer::synchronize
public function synchronize(): void
{
	if (!$this->shouldSynchronize())
	{
		return;
	}

	$orderBuilder = Factory::createBuilderForReservation();

	$wasAutomaticReservationEnabled = self::isAutomaticReservationEnabled();
	if ($wasAutomaticReservationEnabled)
	{
		self::disableAutomaticReservation();
	}

	try
	{
		$orderBuilder->build(
			$this->makeFormDataForOrderBuilder(
				$this->getMergedProducts()
			)
		);
		/** @var Order $order */
		$order = $orderBuilder->getOrder();
	}
	catch (BuildingException $exception)
	{
		$order = null;
	}

	if (!$order)
	{
		return;
	}

	self::disableContactAutoCreationModeByOrder($order);

	if (isset($this->dealFields['CURRENCY_ID']) && $order->getCurrency() !== $this->dealFields['CURRENCY_ID'])
	{
		$order->changeCurrency($this->dealFields['CURRENCY_ID']);
	}

	$order->save();

	if ($wasAutomaticReservationEnabled)
	{
		self::enableAutomaticReservation();
	}
}