- Модуль: salescenter
- Путь к файлу: ~/bitrix/modules/salescenter/lib/controller/order.php
- Класс: BitrixSalesCenterControllerOrder
- Вызов: Order::refreshBasketAction
public function refreshBasketAction($orderId, array $basketItems = [])
{
$basketItems = $this->processBasketItems($basketItems);
$order = $this->buildOrder(
[
'orderId' => $orderId,
'basketItems' => $basketItems,
],
[
'orderErrorsFilter' => [
'SALE_BASKET_AVAILABLE_QUANTITY',
'SALE_BASKET_ITEM_WRONG_AVAILABLE_QUANTITY',
],
]
);
if ($order === null)
{
return ['items' => $basketItems];
}
$discountSum = 0;
$baseSum = 0;
$price = 0;
$vatSum = 0;
foreach ($basketItems as $item)
{
$basketItem = $order->getBasket()->getItemByXmlId($item['innerId']);
if ($basketItem === null)
{
continue;
}
if ($basketItem->getBasePrice() !== $basketItem->getPrice() && empty($basketItem->getDiscountPrice()))
{
$discountSum += ($basketItem->getBasePrice() - $basketItem->getPrice()) * $item['quantity'];
}
else
{
$discountSum += $basketItem->getDiscountPrice() * $item['quantity'];
}
$baseSum += $basketItem->getBasePrice() * $item['quantity'];
$price += $basketItem->getPrice() * $item['quantity'];
$vatRate = (float)$basketItem->getVatRate();
if ($basketItem->isVatInPrice())
{
$vatSum += SalePriceMaths::roundPrecision(
$basketItem->getPrice()
* $item['quantity']
* $vatRate
/ (
$vatRate + 1
)
);
}
else
{
$vatSum += SalePriceMaths::roundPrecision(
$basketItem->getPrice()
* $item['quantity']
* $vatRate
);
}
}
return [
'items' => $this->fillResultBasket($basketItems, $order),
'total' => [
'discount' => $discountSum,
'result' => $price,
'taxSum' => $vatSum,
'sum' => $baseSum,
]
];
}