/** * calculate the cost according to the order basket * @param array $arBasketItems * @return array|bool */ public static function CalculateOrderPrices($arBasketItems) { if (!isset($arBasketItems) || isset($arBasketItems) && sizeof($arBasketItems) <= 0) { return false; } $arResult = array("ORDER_PRICE" => 0, "ORDER_WEIGHT" => 0, "VAT_RATE" => 0, "VAT_SUM" => 0, "USE_VAT" => 'N', "BASKET_ITEMS" => $arBasketItems); foreach ($arResult['BASKET_ITEMS'] as &$arItem) { if (!CSaleBasketHelper::isSetItem($arItem)) { if (array_key_exists('CUSTOM_PRICE', $arItem) && $arItem['CUSTOM_PRICE'] == 'Y') { $arItem['DISCOUNT_PRICE'] = $arItem['DEFAULT_PRICE'] - $arItem['PRICE']; if ($arItem['DISCOUNT_PRICE'] < 0) { $arItem['DISCOUNT_PRICE'] = 0; } if (doubleval($arItem['DEFAULT_PRICE']) > 0) { $arItem['DISCOUNT_PRICE_PERCENT'] = $arItem['DISCOUNT_PRICE'] * 100 / $arItem['DEFAULT_PRICE']; } else { $arItem['DISCOUNT_PRICE_PERCENT'] = 0; } $arItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arItem["DISCOUNT_PRICE_PERCENT"], SALE_VALUE_PRECISION) . "%"; } if (isset($arItem['CURRENCY']) && strlen($arItem['CURRENCY']) > 0) { $arItem["PRICE_FORMATED"] = SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]); } $arResult['ORDER_PRICE'] += CSaleBasketHelper::getFinalPrice($arItem); $arResult['ORDER_WEIGHT'] += $arItem["WEIGHT"] * $arItem["QUANTITY"]; if ($arItem["VAT_RATE"] > 0) { $arResult['USE_VAT'] = 'Y'; if ($arItem["VAT_RATE"] > $arResult['VAT_RATE']) { $arResult['VAT_RATE'] = $arItem["VAT_RATE"]; } $v = CSaleBasketHelper::getVat($arItem); $arItem["VAT_VALUE"] = \Bitrix\Sale\PriceMaths::roundPrecision($v / $arItem["QUANTITY"]); $arResult["VAT_SUM"] += $v; } } } $arResult['ORDER_PRICE'] = \Bitrix\Sale\PriceMaths::roundPrecision($arResult['ORDER_PRICE']); $arResult['VAT_SUM'] = \Bitrix\Sale\PriceMaths::roundPrecision($arResult['VAT_SUM']); unset($arItem); return $arResult; }