doFinalAction
\Bitrix\Sale\Result public \Bitrix\Sale\OrderBase::doFinalAction( bool $hasMeaningfulField = false );
Метод запускает отложенные действия для заказа. Если изменились значимые поля и заказ содержит корзину, метод пересчитывает скидки и налоги, обновляет стоимость заказа и налоговые суммы.
Перед пересчетом метод вызывает событие OnBeforeSaleOrderFinalAction. После успешной обработки метод вызывает событие OnAfterSaleOrderFinalAction. Нестатический метод.
Параметры
| Параметр | Описание |
|---|---|
$hasMeaningfulField |
Признак изменения значимых полей заказа. Значение true запускает пересчет скидок и налогов после выполнения отложенных действий, если заказ содержит корзину. Значение false завершает обработку после отложенных действий. По умолчанию — false. Текущее значение признака возвращает метод hasMeaningfulField(). |
Возвращаемое значение
Метод возвращает объект Bitrix\Sale\Result. Объект содержит ошибки отложенных действий. При значении true параметра $hasMeaningfulField объект также содержит предупреждения отложенных действий и ошибки финального пересчета.
Исключения
Метод может выбросить исключения Bitrix\Main\ArgumentNullException и Bitrix\Main\ObjectNotFoundException во время пересчета заказа.
Пример
Пример запускает принудительный финальный пересчет существующего заказа. Результаты пересчета остаются в объекте заказа. Метод не сохраняет заказ.
<?php
use Bitrix\Main\Loader;
use Bitrix\Sale\Order;
if (!Loader::includeModule('sale'))
{
throw new RuntimeException('Модуль sale не установлен');
}
// Идентификатор существующего заказа
$orderId = 123;
$order = Order::load($orderId);
if ($order === null)
{
throw new RuntimeException('Заказ не найден');
}
try
{
$result = $order->doFinalAction(true);
if (!$result->isSuccess())
{
foreach ($result->getErrors() as $error)
{
echo $error->getMessage() . PHP_EOL;
}
return;
}
foreach ($result->getWarnings() as $warning)
{
echo $warning->getMessage() . PHP_EOL;
}
echo 'Стоимость заказа после пересчета: ' . $order->getPrice() . PHP_EOL;
}
catch (\Bitrix\Main\ArgumentNullException | \Bitrix\Main\ObjectNotFoundException $exception)
{
echo $exception->getMessage() . PHP_EOL;
}