Your IP : 172.28.240.42


Current Path : /var/www/html/clients/wodo.e-nk.ru/bitrix/components/bitrix/sale.basket.basket/
Upload File :
Current File : /var/www/html/clients/wodo.e-nk.ru/bitrix/components/bitrix/sale.basket.basket/component.php

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

if (!CModule::IncludeModule("sale"))
{
	ShowError(GetMessage("SALE_MODULE_NOT_INSTALL"));
	return;
}

$arParams["PATH_TO_ORDER"] = Trim($arParams["PATH_TO_ORDER"]);
if (strlen($arParams["PATH_TO_ORDER"]) <= 0)
	$arParams["PATH_TO_ORDER"] = "order.php";

if($arParams["SET_TITLE"] == "Y")
	$APPLICATION->SetTitle(GetMessage("SBB_TITLE"));

if (!isset($arParams["COLUMNS_LIST"]) || !is_array($arParams["COLUMNS_LIST"]) || count($arParams["COLUMNS_LIST"]) <= 0)
	$arParams["COLUMNS_LIST"] = array("NAME", "PRICE", "TYPE", "QUANTITY", "DELETE", "DELAY", "WEIGHT");

$arParams["HIDE_COUPON"] = (($arParams["HIDE_COUPON"] == "Y") ? "Y" : "N");
if (!CModule::IncludeModule("catalog"))
	$arParams["HIDE_COUPON"] = "Y";

if (!isset($arParams['QUANTITY_FLOAT']))
	$arParams['QUANTITY_FLOAT'] = 'N';
$arParams["COUNT_DISCOUNT_4_ALL_QUANTITY"] = (($arParams["COUNT_DISCOUNT_4_ALL_QUANTITY"] == "Y") ? "Y" : "N");


//$arParams['PRICE_VAT_INCLUDE'] = $arParams['PRICE_VAT_INCLUDE'] == 'N' ? 'N' : 'Y';
$arParams['PRICE_VAT_SHOW_VALUE'] = $arParams['PRICE_VAT_SHOW_VALUE'] == 'N' ? 'N' : 'Y';

$arParams["WEIGHT_UNIT"] = htmlspecialchars(COption::GetOptionString('sale', 'weight_unit'));
$arResult["WARNING_MESSAGE"] = Array();

if (strlen($_REQUEST["BasketRefresh"]) > 0 || strlen($_REQUEST["BasketOrder"]) > 0)
{
	if ($arParams["HIDE_COUPON"] != "Y")
	{
		$COUPON = Trim($_REQUEST["COUPON"]);
		if (strlen($COUPON) > 0)
			CCatalogDiscount::SetCoupon($COUPON);
		else
			CCatalogDiscount::ClearCoupon();
	}

	$dbBasketItems = CSaleBasket::GetList(
			array("PRICE" => "DESC"),
			array(
					"FUSER_ID" => CSaleBasket::GetBasketUserID(),
					"LID" => SITE_ID,
					"ORDER_ID" => "NULL"
				),
			false,
			false,
			array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "CURRENCY")
		);
	while ($arBasketItems = $dbBasketItems->Fetch())
	{
		$arBasketItems['QUANTITY'] = $arParams['QUANTITY_FLOAT'] == 'Y' ? DoubleVal($arBasketItems['QUANTITY']) : IntVal($arBasketItems['QUANTITY']);
		
		if (strlen($arBasketItems["CALLBACK_FUNC"])>0)
		{
			CSaleBasket::UpdatePrice($arBasketItems["ID"], $arBasketItems["CALLBACK_FUNC"], $arBasketItems["MODULE"], $arBasketItems["PRODUCT_ID"], $arBasketItems["QUANTITY"]);
			$arBasketItems = CSaleBasket::GetByID($arBasketItems["ID"]);
		}

		$quantityTmp = $arParams['QUANTITY_FLOAT'] == 'Y' ? DoubleVal($_REQUEST["QUANTITY_".$arBasketItems["ID"]]) : IntVal($_REQUEST["QUANTITY_".$arBasketItems["ID"]]);
		$deleteTmp = (($_REQUEST["DELETE_".$arBasketItems["ID"]] == "Y") ? "Y" : "N");
		$delayTmp = (($_REQUEST["DELAY_".$arBasketItems["ID"]] == "Y") ? "Y" : "N");

		if ($deleteTmp == "Y" && in_array("DELETE", $arParams["COLUMNS_LIST"]))
			CSaleBasket::Delete($arBasketItems["ID"]);
		elseif ($arBasketItems["DELAY"] == "N" && $arBasketItems["CAN_BUY"] == "Y")
		{
			UnSet($arFields);
			$arFields = array();
			if (in_array("QUANTITY", $arParams["COLUMNS_LIST"]))
				$arFields["QUANTITY"] = $quantityTmp;
			if (in_array("DELAY", $arParams["COLUMNS_LIST"]))
				$arFields["DELAY"] = $delayTmp;

			if (count($arFields) > 0
				&&
					($arBasketItems["QUANTITY"] != $arFields["QUANTITY"] && in_array("QUANTITY", $arParams["COLUMNS_LIST"])
						|| $arBasketItems["DELAY"] != $arFields["DELAY"] && in_array("DELAY", $arParams["COLUMNS_LIST"]))
				)
				CSaleBasket::Update($arBasketItems["ID"], $arFields);
		}
		elseif ($arBasketItems["DELAY"] == "Y" && $arBasketItems["CAN_BUY"] == "Y")
		{
			UnSet($arFields);
			$arFields = array();
			if (in_array("DELAY", $arParams["COLUMNS_LIST"]))
				$arFields["DELAY"] = $delayTmp;

			if (count($arFields) > 0
				&& 
					($arBasketItems["DELAY"] != $arFields["DELAY"] && in_array("DELAY", $arParams["COLUMNS_LIST"]))
				)
				CSaleBasket::Update($arBasketItems["ID"], $arFields);
		}
	}
	
	unset($_SESSION["SALE_BASKET_NUM_PRODUCTS"][SITE_ID]);
	
	if (strlen($_REQUEST["BasketOrder"]) > 0)
	{
		LocalRedirect($arParams["PATH_TO_ORDER"]);
	}
	else
	{
		unset($_REQUEST["BasketRefresh"]);
		unset($_REQUEST["BasketOrder"]);
		LocalRedirect($APPLICATION->GetCurPage());
	}
}


$arBasketItems = array();

$dbBasketItems = CSaleBasket::GetList(
		array(
				"PRICE" => "DESC",
				"NAME" => "ASC",
				"ID" => "ASC"
			),
		array(
				"FUSER_ID" => CSaleBasket::GetBasketUserID(),
				"LID" => SITE_ID,
				"ORDER_ID" => "NULL"
			),
		false,
		false,
		array("ID", "NAME", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "DETAIL_PAGE_URL", "NOTES", "CURRENCY", "VAT_RATE")
	);
while ($arItems = $dbBasketItems->GetNext())
{
	//$arItems['QUANTITY'] = $arParams['QUANTITY_FLOAT'] == 'Y' ? number_format(DoubleVal($arItems['QUANTITY']), 2, '.', '') : IntVal($arItems['QUANTITY']);
	
	if (strlen($arItems["CALLBACK_FUNC"]) > 0)
	{
		CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"], $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]);
		$arItems = CSaleBasket::GetByID($arItems["ID"]);
		
		if($ex = $APPLICATION->GetException())
		{
			$str = $ex->GetString();
			if(!in_array($str, $arResult["WARNING_MESSAGE"]))
				$arResult["WARNING_MESSAGE"][] = $ex->GetString();
		}
	}
	
	$arItems['QUANTITY'] = $arParams['QUANTITY_FLOAT'] == 'Y' ? number_format(DoubleVal($arItems['QUANTITY']), 2, '.', '') : IntVal($arItems['QUANTITY']);
	
	$arItems["PROPS"] = Array();
	if(in_array("PROPS", $arParams["COLUMNS_LIST"]))
	{
		$dbProp = CSaleBasket::GetPropsList(Array("SORT" => "ASC", "ID" => "ASC"), Array("BASKET_ID" => $arItems["ID"], "!CODE" => array("CATALOG.XML_ID", "PRODUCT.XML_ID")));
		while($arProp = $dbProp -> GetNext())
			$arItems["PROPS"][] = $arProp;
	}
	
	$arBasketItems[] = $arItems;
}

//echo '<pre>'; print_r($arBasketItems); echo '</pre>';

$bShowReady = False;
$bShowDelay = False;
$bShowNotAvail = False;
$allSum = 0;
$allWeight = 0;
$allCurrency = CSaleLang::GetLangCurrency(SITE_ID);
$allVATSum = 0;

for ($i = 0; $i < count($arBasketItems); $i++)
{
	if ($arBasketItems[$i]["DELAY"] == "N" && $arBasketItems[$i]["CAN_BUY"] == "Y")
		$bShowReady = True;
	elseif ($arBasketItems[$i]["DELAY"] == "Y" && $arBasketItems[$i]["CAN_BUY"] == "Y")
		$bShowDelay = True;
	elseif ($arBasketItems[$i]["CAN_BUY"] == "N")
		$bShowNotAvail = True;

	$arBasketItems[$i]["PRICE_VAT_VALUE"] = (($arBasketItems[$i]["PRICE"] / ($arBasketItems[$i]["VAT_RATE"] +1)) * $arBasketItems[$i]["VAT_RATE"]);
/*
	if ($arParams['PRICE_VAT_INCLUDE'] == 'Y')
	{
		$arBasketItems[$i]["PRICE"] += $arBasketItems[$i]["PRICE_VAT_VALUE"];
	}
*/
	$arBasketItems[$i]["PRICE_FORMATED"] = SaleFormatCurrency($arBasketItems[$i]["PRICE"], $arBasketItems[$i]["CURRENCY"]);
	$arBasketItems[$i]["WEIGHT"] = DoubleVal($arBasketItems[$i]["WEIGHT"]);

	if ($arBasketItems[$i]["DELAY"] == "N" && $arBasketItems[$i]["CAN_BUY"] == "Y")
	{
		$allSum += ($arBasketItems[$i]["PRICE"] * $arBasketItems[$i]["QUANTITY"]);
		$allWeight += ($arBasketItems[$i]["WEIGHT"] * $arBasketItems[$i]["QUANTITY"]);
		$allVATSum += roundEx($arBasketItems[$i]["PRICE_VAT_VALUE"] * $arBasketItems[$i]["QUANTITY"], SALE_VALUE_PRECISION);
	}
	
	//echo '<pre>'.$i." "; print_r($arBasketItems[$i]); echo '</pre>';
}

$arResult["ITEMS"]["AnDelCanBuy"] = Array();
$arResult["ITEMS"]["DelDelCanBuy"] = Array();
$arResult["ITEMS"]["nAnCanBuy"] = Array();

foreach($arBasketItems as $val)
{
	$val['NAME'] = htmlspecialcharsEx($val['NAME']);
	$val['NOTES'] = htmlspecialcharsEx($val['NOTES']);

	if($bShowReady)
	{
		if($val["DELAY"] == "N" && $val["CAN_BUY"] == "Y")
		{
			if(DoubleVal($val["DISCOUNT_PRICE"]) > 0)
			{
				$val["DISCOUNT_PRICE_PERCENT"] = $val["DISCOUNT_PRICE"]*100 / ($val["DISCOUNT_PRICE"] + $val["PRICE"]);
				$val["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($val["DISCOUNT_PRICE_PERCENT"], 0)."%";
			}
			$arResult["ITEMS"]["AnDelCanBuy"][] = $val;
		}
	}
	if($bShowDelay)
	{
		if($val["DELAY"] == "Y" && $val["CAN_BUY"] == "Y")
		{
			$arResult["ITEMS"]["DelDelCanBuy"][] = $val;
		}
	}
	if($bShowNotAvail)
	{
		if($val["CAN_BUY"] == "N")
		{
			$arResult["ITEMS"]["nAnCanBuy"][] = $val;
		}
	}
}

$arResult["ShowReady"] = (($bShowReady)?"Y":"N");
$arResult["ShowDelay"] = (($bShowDelay)?"Y":"N");
$arResult["ShowNotAvail"] = (($bShowNotAvail)?"Y":"N");

$dbDiscount = CSaleDiscount::GetList(
		array("SORT" => "ASC"),
		array(
				"LID" => SITE_ID,
				"ACTIVE" => "Y",
				"!>ACTIVE_FROM" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
				"!<ACTIVE_TO" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
				"<=PRICE_FROM" => $allSum,
				">=PRICE_TO" => $allSum
			),
		false,
		false,
		array("*")
	);
$arResult["DISCOUNT_PRICE"] = 0;
$arResult["DISCOUNT_PERCENT"] = 0;
$arDiscounts = array();
if ($arDiscount = $dbDiscount->Fetch())
{
	if ($arDiscount["DISCOUNT_TYPE"] == "P")
	{
		$arResult["DISCOUNT_PERCENT"] = $arDiscount["DISCOUNT_VALUE"];
		for ($bi = 0; $bi < count($arResult["ITEMS"]["AnDelCanBuy"]); $bi++)
		{
			if($arParams["COUNT_DISCOUNT_4_ALL_QUANTITY"] == "Y")
			{
				$curDiscount = roundEx(DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) * IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]) * $arDiscount["DISCOUNT_VALUE"] / 100, SALE_VALUE_PRECISION);
				$arDiscounts[IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["ID"])] = roundEx($curDiscount / IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]), IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]));
				$arResult["DISCOUNT_PRICE"] += $curDiscount;
			}
			else
			{
				$curDiscount = roundEx(DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) * $arDiscount["DISCOUNT_VALUE"] / 100, SALE_VALUE_PRECISION);
				$arDiscounts[IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["ID"])] = $curDiscount;
				$arResult["DISCOUNT_PRICE"] += $curDiscount * IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]);
			
			}
			$arResult["ITEMS"]["AnDelCanBuy"][$bi]["DISCOUNT_PRICE"] = DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) - $curDiscount;
		}
		$arResult["DISCOUNT_PERCENT_FORMATED"] = DoubleVal($arResult["DISCOUNT_PERCENT"])."%";
	}
	else
	{
		$arResult["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arDiscount["DISCOUNT_VALUE"], $arDiscount["CURRENCY"], $arResult["BASE_LANG_CURRENCY"]);
		$arResult["DISCOUNT_PRICE"] = roundEx($arResult["DISCOUNT_PRICE"], SALE_VALUE_PRECISION);
		$arResult["DISCOUNT_PRICE_tmp"] = 0;
		for ($bi = 0; $bi < count($arResult["ITEMS"]["AnDelCanBuy"]); $bi++)
		{
			$curDiscount = roundEx(DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) * $arResult["DISCOUNT_PRICE"] / $arResult["ORDER_PRICE"], SALE_VALUE_PRECISION);
			$arDiscounts[IntVal($arProductsInBasket[$bi]["ID"])] = $curDiscount;
			$arResult["ITEMS"]["AnDelCanBuy"][$bi]["DISCOUNT_PRICE"] = DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) - $curDiscount;
			$arResult["DISCOUNT_PRICE_tmp"] += $curDiscount * IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]);
		}
		$arResult["DISCOUNT_PRICE"] = $arResult["DISCOUNT_PRICE_tmp"];
	}
	$allSum = $allSum - $arResult["DISCOUNT_PRICE"];
}


$arResult["allSum"] = $allSum;
$arResult["allWeight"] = $allWeight;
$arResult["allSum_FORMATED"] = SaleFormatCurrency($allSum, $allCurrency);
$arResult["DISCOUNT_PRICE_FORMATED"] = SaleFormatCurrency($arResult["DISCOUNT_PRICE"], $allCurrency);

if ($arParams['PRICE_VAT_SHOW_VALUE'] == 'Y')
{
	$arResult["allVATSum"] = $allVATSum;
	$arResult["allVATSum_FORMATED"] = SaleFormatCurrency($allVATSum, $allCurrency);
	$arResult["allSum_wVAT_FORMATED"] = SaleFormatCurrency($arResult["allSum_wVAT"], $allCurrency);
}

if ($arParams["HIDE_COUPON"] != "Y")
	$arCoupons = CCatalogDiscount::GetCoupons();
	
if (count($arCoupons) > 0)
	$arResult["COUPON"] = htmlspecialchars($arCoupons[0]);
if(count($arBasketItems)<=0)
	$arResult["ERROR_MESSAGE"] = GetMessage("SALE_EMPTY_BASKET");

//echo '<pre>'; print_r($arResult); echo '</pre>';
	
$this->IncludeComponentTemplate();

?>