Example #1
0
 /**
  * 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;
 }