示例#1
0
        $row['TAX_RATE'] = round(doubleval($row['VAT_RATE']), 2) * 100;
        $row['TAX_INCLUDED'] = 'Y';
        $row['DISCOUNT_TYPE_ID'] = \Bitrix\Crm\Discount::MONETARY;
        $exclusivePrice = CCrmProductRow::CalculateExclusivePrice($row['PRICE'], $row['TAX_RATE']);
        $row['DISCOUNT_SUM'] = round(doubleval($row['DISCOUNT_PRICE']), 2);
        $row['DISCOUNT_RATE'] = \Bitrix\Crm\Discount::calculateDiscountRate($exclusivePrice + $row['DISCOUNT_SUM'], $exclusivePrice);
        $ary['MEASURE_CODE'] = isset($row['MEASURE_CODE']) ? intval($row['MEASURE_CODE']) : 0;
        $ary['MEASURE_NAME'] = isset($row['MEASURE_NAME']) ? $row['MEASURE_NAME'] : '';
        unset($row['ORDER_ID'], $row['NAME'], $row['DISCOUNT_PRICE'], $row['VAT_RATE'], $row['CUSTOM_PRICE']);
    }
    if ($arResult['ALLOW_LD_TAX']) {
        $row['PRICE'] = CCrmProductRow::CalculateExclusivePrice($row['PRICE'], $row['TAX_RATE']);
        $row['TAX_RATE'] = 0.0;
        $row['TAX_INCLUDED'] = 'N';
    }
    $exclusivePrice = CCrmProductRow::CalculateExclusivePrice($row['PRICE'], $row['TAX_RATE']);
    $discountTypeID = intval($row['DISCOUNT_TYPE_ID']);
    if ($discountTypeID === \Bitrix\Crm\Discount::MONETARY) {
        $row['PRICE_NETTO'] = $exclusivePrice + $row['DISCOUNT_SUM'];
    } else {
        $discoutRate = doubleval($row['DISCOUNT_RATE']);
        $discoutSum = $discoutRate < 100 ? \Bitrix\Crm\Discount::calculateDiscountSum($exclusivePrice, $discoutRate) : doubleval($row['DISCOUNT_SUM']);
        $row['PRICE_NETTO'] = $exclusivePrice + $discoutSum;
    }
    $row['PRICE_BRUTTO'] = CCrmProductRow::CalculateInclusivePrice($row['PRICE_NETTO'], $row['TAX_RATE']);
    $totalDiscount += round($row['QUANTITY'] * $row['DISCOUNT_SUM'], 2);
    //$totalSum += round($row['QUANTITY'] * $row['PRICE'], 2);
    //$totalTax += round($row['PRICE'] - $exclusivePrice, 2);
}
unset($row);
if (count($arResult['PRODUCT_ROWS']) > 0 && (!isset($arParams['TOTAL_SUM']) || !isset($arParams['TOTAL_TAX']))) {
示例#2
0
 private static function PrepareShoppingCartItems(&$productRows, $currencyID, $siteId)
 {
     $items = array();
     foreach ($productRows as $k => &$v) {
         $item = array();
         $item['PRODUCT_ID'] = isset($v['PRODUCT_ID']) ? intval($v['PRODUCT_ID']) : 0;
         $isCustomized = isset($v['CUSTOMIZED']) && $v['CUSTOMIZED'] === 'Y';
         if ($item['PRODUCT_ID'] > 0 && !$isCustomized) {
             $item['MODULE'] = 'catalog';
             $item['PRODUCT_PROVIDER_CLASS'] = 'CCatalogProductProvider';
         } else {
             $item['MODULE'] = $item['PRODUCT_PROVIDER_CLASS'] = '';
         }
         if ($isCustomized) {
             $item['CUSTOM_PRICE'] = 'Y';
         }
         $item['TABLE_ROW_ID'] = $k;
         $item['QUANTITY'] = isset($v['QUANTITY']) ? doubleval($v['QUANTITY']) : 0;
         $item['QUANTITY_DEFAULT'] = $item['QUANTITY'];
         $item['PRICE'] = isset($v['PRICE']) ? doubleval($v['PRICE']) : 0.0;
         $item['PRICE_DEFAULT'] = $item['PRICE'];
         $item['CURRENCY'] = $currencyID;
         // discount info
         $item['CRM_PR_FIELDS'] = array();
         $item['CRM_PR_FIELDS']['DISCOUNT_TYPE_ID'] = isset($v['DISCOUNT_TYPE_ID']) ? intval($v['DISCOUNT_TYPE_ID']) : \Bitrix\Crm\Discount::PERCENTAGE;
         $item['CRM_PR_FIELDS']['DISCOUNT_RATE'] = isset($v['DISCOUNT_RATE']) ? round(doubleval($v['DISCOUNT_RATE']), 2) : 0.0;
         $item['CRM_PR_FIELDS']['DISCOUNT_SUM'] = isset($v['DISCOUNT_SUM']) ? round(doubleval($v['DISCOUNT_SUM']), 2) : 0.0;
         // tax info
         $taxRate = isset($v['TAX_RATE']) ? round(doubleval($v['TAX_RATE']), 2) : 0.0;
         $allowLDTax = CCrmTax::isTaxMode();
         if ($allowLDTax) {
             $item['CRM_PR_FIELDS']['TAX_RATE'] = 0.0;
             $item['CRM_PR_FIELDS']['TAX_INCLUDED'] = 'N';
         } else {
             $item['CRM_PR_FIELDS']['TAX_RATE'] = $taxRate;
             $item['CRM_PR_FIELDS']['TAX_INCLUDED'] = isset($v['TAX_INCLUDED']) && $v['TAX_INCLUDED'] === 'Y' ? 'Y' : 'N';
         }
         // price netto, price brutto
         $exclusivePrice = $taxRate !== 0.0 ? CCrmProductRow::CalculateExclusivePrice($item['PRICE'], $taxRate) : $item['PRICE'];
         if ($item['CRM_PR_FIELDS']['DISCOUNT_TYPE_ID'] === \Bitrix\Crm\Discount::MONETARY) {
             $priceNetto = $exclusivePrice + $item['CRM_PR_FIELDS']['DISCOUNT_SUM'];
             $item['CRM_PR_FIELDS']['PRICE_NETTO'] = round($priceNetto, 2);
         } else {
             $discoutRate = $item['CRM_PR_FIELDS']['DISCOUNT_RATE'];
             $discoutSum = $discoutRate < 100 ? \Bitrix\Crm\Discount::calculateDiscountByDiscountPrice($exclusivePrice, $discoutRate) : $item['CRM_PR_FIELDS']['DISCOUNT_SUM'];
             $priceNetto = $exclusivePrice + $discoutSum;
             $item['CRM_PR_FIELDS']['PRICE_NETTO'] = round($priceNetto, 2);
         }
         if ($item['CRM_PR_FIELDS']['DISCOUNT_SUM'] === 0.0) {
             $item['CRM_PR_FIELDS']['PRICE_BRUTTO'] = $item['PRICE'];
         } else {
             $item['CRM_PR_FIELDS']['PRICE_BRUTTO'] = round(CCrmProductRow::CalculateInclusivePrice($priceNetto, $item['CRM_PR_FIELDS']['TAX_RATE']), 2);
         }
         if (isset($v['VAT_RATE'])) {
             $item['VAT_RATE'] = $v['VAT_RATE'];
         } elseif (isset($v['TAX_RATE'])) {
             $item['VAT_RATE'] = $v['TAX_RATE'] / 100;
         }
         if (isset($v['MEASURE_CODE'])) {
             $item['MEASURE_CODE'] = $v['MEASURE_CODE'];
         }
         if (isset($v['MEASURE_NAME'])) {
             $item['MEASURE_NAME'] = $v['MEASURE_NAME'];
         }
         $item['NAME'] = isset($v['NAME']) ? $v['NAME'] : (isset($v['PRODUCT_NAME']) ? $v['PRODUCT_NAME'] : '');
         $item['LID'] = $siteId;
         $item['CAN_BUY'] = 'Y';
         $items[] =& $item;
         unset($item);
     }
     unset($v);
     return $items;
 }
示例#3
0
 public static function ProductRows2BasketItems($arProductRows, $srcCurrencyID = '', $dstCurrencyID = '')
 {
     $basketItems = array();
     $srcCurrencyID = strval($srcCurrencyID);
     $dstCurrencyID = strval($dstCurrencyID);
     if (strlen($srcCurrencyID) <= 0 || strlen($dstCurrencyID) <= 0) {
         $srcCurrencyID = $dstCurrencyID = '';
     }
     foreach ($arProductRows as $row) {
         $freshRow = array();
         $freshRow['ID'] = isset($row['ID']) ? intval($row['ID']) : 0;
         $freshRow['PRODUCT_ID'] = isset($row['PRODUCT_ID']) ? intval($row['PRODUCT_ID']) : 0;
         $freshRow['PRODUCT_NAME'] = isset($row['PRODUCT_NAME']) ? strval($row['PRODUCT_NAME']) : '';
         $freshRow['QUANTITY'] = isset($row['QUANTITY']) ? round(doubleval($row['QUANTITY']), 2) : 0.0;
         $freshRow['PRICE'] = isset($row['PRICE']) ? round(doubleval($row['PRICE']), 2) : 0.0;
         if ($dstCurrencyID != $srcCurrencyID) {
             $freshRow['PRICE'] = CCrmCurrency::ConvertMoney($freshRow['PRICE'], $srcCurrencyID, $dstCurrencyID);
         }
         $taxRate = isset($row['TAX_RATE']) ? round(doubleval($row['TAX_RATE']), 2) : 0.0;
         $freshRow['VAT_RATE'] = $taxRate / 100;
         $discountTypeID = isset($row['DISCOUNT_TYPE_ID']) ? intval($row['DISCOUNT_TYPE_ID']) : \Bitrix\Crm\Discount::UNDEFINED;
         if ($discountTypeID !== \Bitrix\Crm\Discount::PERCENTAGE && $discountTypeID !== \Bitrix\Crm\Discount::MONETARY) {
             $discountTypeID = \Bitrix\Crm\Discount::PERCENTAGE;
         }
         if ($discountTypeID === \Bitrix\Crm\Discount::PERCENTAGE) {
             $discountRate = isset($row['DISCOUNT_RATE']) ? round(doubleval($row['DISCOUNT_RATE']), 2) : 0.0;
             $exclusivePrice = CCrmProductRow::CalculateExclusivePrice($freshRow['PRICE'], $taxRate);
             $freshRow['DISCOUNT_PRICE'] = round(\Bitrix\Crm\Discount::calculateDiscountSum($exclusivePrice, $discountRate), 2);
         } else {
             $freshRow['DISCOUNT_PRICE'] = isset($row['DISCOUNT_SUM']) ? round(doubleval($row['DISCOUNT_SUM']), 2) : 0.0;
             if ($dstCurrencyID != $srcCurrencyID) {
                 $freshRow['DISCOUNT_PRICE'] = CCrmCurrency::ConvertMoney($freshRow['DISCOUNT_PRICE'], $srcCurrencyID, $dstCurrencyID);
             }
         }
         $freshRow['MEASURE_CODE'] = isset($row['MEASURE_CODE']) ? intval($row['MEASURE_CODE']) : 0;
         $freshRow['MEASURE_NAME'] = isset($row['MEASURE_NAME']) ? strval($row['MEASURE_NAME']) : '';
         $freshRow['CUSTOMIZED'] = isset($row['CUSTOMIZED']) ? $row['CUSTOMIZED'] === 'Y' ? 'Y' : 'N' : 'Y';
         $basketItems[] = $freshRow;
     }
     return $basketItems;
 }
示例#4
0
 protected function innerGetList($order, $filter, $select, $navigation, &$errors)
 {
     $ownerID = isset($filter['OWNER_ID']) ? intval($filter['OWNER_ID']) : 0;
     $ownerType = isset($filter['OWNER_TYPE']) ? $filter['OWNER_TYPE'] : '';
     if ($ownerID <= 0 || $ownerType === '') {
         if ($ownerID <= 0) {
             $errors[] = 'The field OWNER_ID is required in filer.';
         }
         if ($ownerType === '') {
             $errors[] = 'The field OWNER_TYPE is required in filer.';
         }
         return false;
     }
     if ($ownerType === 'I') {
         //Crutch for Invoices
         if (!CCrmInvoice::CheckReadPermission($ownerID)) {
             $errors[] = 'Access denied.';
             return false;
         }
         $result = array();
         $productRows = CCrmInvoice::GetProductRows($ownerID);
         foreach ($productRows as $productRow) {
             $price = isset($productRow['PRICE']) ? $productRow['PRICE'] : 0.0;
             $discountSum = isset($productRow['DISCOUNT_PRICE']) ? $productRow['DISCOUNT_PRICE'] : 0.0;
             $taxRate = isset($productRow['VAT_RATE']) ? $productRow['VAT_RATE'] * 100 : 0.0;
             $exclusivePrice = CCrmProductRow::CalculateExclusivePrice($price, $taxRate);
             $discountRate = \Bitrix\Crm\Discount::calculateDiscountRate($exclusivePrice + $discountSum, $exclusivePrice);
             $result[] = array('ID' => $productRow['ID'], 'OWNER_ID' => $ownerID, 'OWNER_TYPE' => 'I', 'PRODUCT_ID' => isset($productRow['PRODUCT_ID']) ? $productRow['PRODUCT_ID'] : 0, 'PRODUCT_NAME' => isset($productRow['PRODUCT_NAME']) ? $productRow['PRODUCT_NAME'] : '', 'PRICE' => $price, 'QUANTITY' => isset($productRow['QUANTITY']) ? $productRow['QUANTITY'] : 0, 'DISCOUNT_TYPE_ID' => \Bitrix\Crm\Discount::MONETARY, 'DISCOUNT_RATE' => $discountRate, 'DISCOUNT_SUM' => $discountSum, 'TAX_RATE' => $taxRate, 'TAX_INCLUDED' => 'Y', 'MEASURE_CODE' => isset($productRow['MEASURE_CODE']) ? $productRow['MEASURE_CODE'] : '', 'MEASURE_NAME' => isset($productRow['MEASURE_NAME']) ? $productRow['MEASURE_NAME'] : '', 'CUSTOMIZED' => isset($productRow['CUSTOM_PRICE']) ? $productRow['CUSTOM_PRICE'] : 'N');
         }
         return $result;
     }
     if (!CCrmAuthorizationHelper::CheckReadPermission(CCrmProductRow::ResolveOwnerTypeName($ownerType), $ownerID)) {
         $errors[] = 'Access denied.';
         return false;
     }
     return CCrmProductRow::GetList($order, $filter, false, $navigation, $select, array('IS_EXTERNAL_CONTEXT' => true));
 }