| Current Path : /var/www/element/data/www/greenpr.ru/bitrix3/modules/iblock/classes/general/ |
| Current File : /var/www/element/data/www/greenpr.ru/bitrix3/modules/iblock/classes/general/comp_pricetools.php |
<?
class CIBlockPriceTools
{
function GetCatalogPrices($IBLOCK_ID, $arPriceCode)
{
global $USER;
$arCatalogPrices = array();
if(CModule::IncludeModule("catalog"))
{
$bFromCatalog = true;
$arCatalogGroupCodesFilter = array();
foreach($arPriceCode as $key => $value)
{
$value = trim($value);
if(strlen($value) > 0)
$arCatalogGroupCodesFilter[$value] = true;
}
$arCatalogGroupsFilter = array();
$arCatalogGroups = CCatalogGroup::GetListArray();
foreach($arCatalogGroups as $key => $value)
{
if(array_key_exists($value["NAME"], $arCatalogGroupCodesFilter))
{
$arCatalogGroupsFilter[] = $key;
$arCatalogPrices[$value["NAME"]] = array(
"ID" => htmlspecialchars($value["ID"]),
"TITLE" => htmlspecialchars($value["NAME_LANG"]),
"SELECT" => "CATALOG_GROUP_".$value["ID"],
);
}
}
$arPriceGroups = CCatalogGroup::GetGroupsPerms($USER->GetUserGroupArray(), $arCatalogGroupsFilter);
foreach($arCatalogPrices as $name=>$value)
{
$arCatalogPrices[$name]["CAN_VIEW"]=in_array($value["ID"], $arPriceGroups["view"]);
$arCatalogPrices[$name]["CAN_BUY"]=in_array($value["ID"], $arPriceGroups["buy"]);
}
}
else
{
$bFromCatalog = false;
$arPriceGroups = array(
"view" => array(),
);
$rsProperties = CIBlockProperty::GetList(array(), array(
"IBLOCK_ID"=>$IBLOCK_ID,
"CHECK_PERMISSIONS"=>"N",
"PROPERTY_TYPE"=>"N",
));
while($arProperty = $rsProperties->Fetch())
{
if($arProperty["MULTIPLE"]=="N" && in_array($arProperty["CODE"], $arPriceCode))
{
$arPriceGroups["view"][]=htmlspecialchars("PROPERTY_".$arProperty["CODE"]);
$arCatalogPrices[$arProperty["CODE"]] = array(
"ID"=>htmlspecialchars($arProperty["ID"]),
"TITLE"=>htmlspecialchars($arProperty["NAME"]),
"SELECT" => "PROPERTY_".$arProperty["ID"],
"CAN_VIEW"=>true,
"CAN_BUY"=>false,
);
}
}
}
return $arCatalogPrices;
}
function GetItemPrices($IBLOCK_ID, $arCatalogPrices, $arItem, $bVATInclude = true)
{
global $USER;
$arPrices = array();
if(CModule::IncludeModule("catalog"))
{
foreach($arCatalogPrices as $key => $value)
{
if($value["CAN_VIEW"] && strlen($arItem["CATALOG_PRICE_".$value["ID"]]) > 0)
{
// get final price with VAT included.
if ($arItem['CATALOG_VAT_INCLUDED'] != 'Y')
{
$arItem['CATALOG_PRICE_'.$value['ID']] *= (1 + $arItem['CATALOG_VAT'] * 0.01);
}
// so discounts will include VAT
$arDiscounts = CCatalogDiscount::GetDiscount(
$arItem["ID"],
$arItem["IBLOCK_ID"],
array($value["ID"]),
$USER->GetUserGroupArray(),
"N",
SITE_ID,
false
);
$discountPrice = CCatalogProduct::CountPriceWithDiscount(
$arItem["CATALOG_PRICE_".$value["ID"]],
$arItem["CATALOG_CURRENCY_".$value["ID"]],
$arDiscounts
);
// get clear prices WO VAT
$arItem['CATALOG_PRICE_'.$value['ID']] /= (1 + $arItem['CATALOG_VAT'] * 0.01);
$discountPrice /= (1 + $arItem['CATALOG_VAT'] * 0.01);
$vat_value_discount = $discountPrice * $arItem['CATALOG_VAT'] * 0.01;
$vat_discountPrice = $discountPrice + $vat_value_discount;
$vat_value = $arItem['CATALOG_PRICE_'.$value['ID']] * $arItem['CATALOG_VAT'] * 0.01;
$vat_price = $arItem["CATALOG_PRICE_".$value["ID"]] + $vat_value;
$arPrices[$key] = array(
"ID" => $arItem["CATALOG_PRICE_ID_".$value["ID"]],
"VALUE_NOVAT" => $arItem["CATALOG_PRICE_".$value["ID"]],
"PRINT_VALUE_NOVAT" => FormatCurrency($arItem["CATALOG_PRICE_".$value["ID"]],$arItem["CATALOG_CURRENCY_".$value["ID"]]),
"VALUE_VAT" => $vat_price,
"PRINT_VALUE_VAT" => FormatCurrency($vat_price, $arItem["CATALOG_CURRENCY_".$value["ID"]]),
"VATRATE_VALUE" => $vat_value,
"PRINT_VATRATE_VALUE" => FormatCurrency($vat_value, $arItem["CATALOG_CURRENCY_".$value["ID"]]),
"DISCOUNT_VALUE_NOVAT" => $discountPrice,
"PRINT_DISCOUNT_VALUE_NOVAT" => FormatCurrency($discountPrice, $arItem["CATALOG_CURRENCY_".$value["ID"]]),
"DISCOUNT_VALUE_VAT" => $vat_discountPrice,
"PRINT_DISCOUNT_VALUE_VAT" => FormatCurrency($vat_discountPrice, $arItem["CATALOG_CURRENCY_".$value["ID"]]),
'DISCOUNT_VATRATE_VALUE' => $vat_value_discount,
'PRINT_DISCOUNT_VATRATE_VALUE' => FormatCurrency($vat_value_discount, $arItem["CATALOG_CURRENCY_".$value["ID"]]),
"CURRENCY" => $arItem["CATALOG_CURRENCY_".$value["ID"]],
"CAN_ACCESS" => $arItem["CATALOG_CAN_ACCESS_".$value["ID"]],
"CAN_BUY" => $arItem["CATALOG_CAN_BUY_".$value["ID"]],
);
if ($bVATInclude)
{
$arPrices[$key]['VALUE'] = $arPrices[$key]['VALUE_VAT'];
$arPrices[$key]['PRINT_VALUE'] = $arPrices[$key]['PRINT_VALUE_VAT'];
$arPrices[$key]['DISCOUNT_VALUE'] = $arPrices[$key]['DISCOUNT_VALUE_VAT'];
$arPrices[$key]['PRINT_DISCOUNT_VALUE'] = $arPrices[$key]['PRINT_DISCOUNT_VALUE_VAT'];
}
else
{
$arPrices[$key]['VALUE'] = $arPrices[$key]['VALUE_NOVAT'];
$arPrices[$key]['PRINT_VALUE'] = $arPrices[$key]['PRINT_VALUE_NOVAT'];
$arPrices[$key]['DISCOUNT_VALUE'] = $arPrices[$key]['DISCOUNT_VALUE_NOVAT'];
$arPrices[$key]['PRINT_DISCOUNT_VALUE'] = $arPrices[$key]['PRINT_DISCOUNT_VALUE_NOVAT'];
}
}
}
}
else
{
foreach($arCatalogPrices as $key => $value)
{
if($value["CAN_VIEW"])
{
$arPrices[$key] = array(
"ID" => $arItem["PROPERTY_".$value["ID"]."_VALUE_ID"],
"VALUE" => round(doubleval($arItem["PROPERTY_".$value["ID"]."_VALUE"]),2),
"PRINT_VALUE" => round(doubleval($arItem["PROPERTY_".$value["ID"]."_VALUE"]),2)." ".$arItem["PROPERTY_".$value["ID"]."_DESCRIPTION"],
"DISCOUNT_VALUE" => round(doubleval($arItem["PROPERTY_".$value["ID"]."_VALUE"]),2),
"PRINT_DISCOUNT_VALUE" => round(doubleval($arItem["PROPERTY_".$value["ID"]."_VALUE"]),2)." ".$arItem["PROPERTY_".$value["ID"]."_DESCRIPTION"],
"CURRENCY" => $arItem["PROPERTY_".$value["ID"]."_DESCRIPTION"],
"CAN_ACCESS" => true,
"CAN_BUY" => false,
);
}
}
}
return $arPrices;
}
function CanBuy($IBLOCK_ID, $arCatalogPrices, $arItem)
{
$result = false;
if(is_array($arItem["PRICE_MATRIX"]))
{
$result = $arItem["PRICE_MATRIX"]["AVAILABLE"] == "Y";
}
else
{
foreach($arCatalogPrices as $code=>$arPrice)
{
if($arPrice["CAN_BUY"])
{
if($arItem["CATALOG_QUANTITY_TRACE"] != "Y"
|| ($arItem["CATALOG_QUANTITY_TRACE"] == "Y" && IntVal($arItem["CATALOG_QUANTITY"]) > 0))
{
$result = true;
}
}
}
}
return $result;
}
}
?>