PageRenderTime 45ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/components/my/sale.basket.basket.props/component.php

https://bitbucket.org/spivovartsev/citrus.ua
PHP | 356 lines | 283 code | 54 blank | 19 comment | 96 complexity | 66c01ea3b88da8034364d2db175d0422 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?
  2. if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  3. if (!CModule::IncludeModule("sale"))
  4. {
  5. ShowError(GetMessage("SALE_MODULE_NOT_INSTALL"));
  6. return;
  7. }
  8. $arParams["PATH_TO_ORDER"] = Trim($arParams["PATH_TO_ORDER"]);
  9. if (strlen($arParams["PATH_TO_ORDER"]) <= 0)
  10. $arParams["PATH_TO_ORDER"] = "order.php";
  11. if($arParams["SET_TITLE"] == "Y")
  12. $APPLICATION->SetTitle(GetMessage("SBB_TITLE"));
  13. if (!isset($arParams["COLUMNS_LIST"]) || !is_array($arParams["COLUMNS_LIST"]) || count($arParams["COLUMNS_LIST"]) <= 0)
  14. $arParams["COLUMNS_LIST"] = array("NAME", "PRICE", "TYPE", "QUANTITY", "DELETE", "DELAY", "WEIGHT");
  15. //if (!isset($arParams["PROPS_LIST"]) || !is_array($arParams["PROPS_LIST"]) || count($arParams["PROPS_LIST"]) <= 0)
  16. //$arParams["PROPS_LIST"] = array("PREVIEW_TEXT", "PREVIEW_PICTURE");
  17. $arParams["HIDE_COUPON"] = (($arParams["HIDE_COUPON"] == "Y") ? "Y" : "N");
  18. if (!CModule::IncludeModule("catalog"))
  19. $arParams["HIDE_COUPON"] = "Y";
  20. if (!isset($arParams['QUANTITY_FLOAT']))
  21. $arParams['QUANTITY_FLOAT'] = 'N';
  22. $arParams["COUNT_DISCOUNT_4_ALL_QUANTITY"] = (($arParams["COUNT_DISCOUNT_4_ALL_QUANTITY"] == "Y") ? "Y" : "N");
  23. //$arParams['PRICE_VAT_INCLUDE'] = $arParams['PRICE_VAT_INCLUDE'] == 'N' ? 'N' : 'Y';
  24. $arParams['PRICE_VAT_SHOW_VALUE'] = $arParams['PRICE_VAT_SHOW_VALUE'] == 'N' ? 'N' : 'Y';
  25. $arParams["WEIGHT_UNIT"] = htmlspecialchars(COption::GetOptionString('sale', 'weight_unit'));
  26. $arResult["WARNING_MESSAGE"] = Array();
  27. if (strlen($_REQUEST["BasketRefresh"]) > 0 || strlen($_REQUEST["BasketOrder"]) > 0)
  28. {
  29. if ($arParams["HIDE_COUPON"] != "Y")
  30. {
  31. $COUPON = Trim($_REQUEST["COUPON"]);
  32. if (strlen($COUPON) > 0)
  33. CCatalogDiscount::SetCoupon($COUPON);
  34. else
  35. CCatalogDiscount::ClearCoupon();
  36. }
  37. $dbBasketItems = CSaleBasket::GetList(
  38. array("NAME" => "ASC"),
  39. array(
  40. "FUSER_ID" => CSaleBasket::GetBasketUserID(),
  41. "LID" => SITE_ID,
  42. "ORDER_ID" => "NULL"
  43. ),
  44. false,
  45. false,
  46. array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "CURRENCY")
  47. );
  48. while ($arBasketItems = $dbBasketItems->Fetch())
  49. {
  50. $arBasketItems['QUANTITY'] = $arParams['QUANTITY_FLOAT'] == 'Y' ? DoubleVal($arBasketItems['QUANTITY']) : IntVal($arBasketItems['QUANTITY']);
  51. if (strlen($arBasketItems["CALLBACK_FUNC"])>0)
  52. {
  53. CSaleBasket::UpdatePrice($arBasketItems["ID"], $arBasketItems["CALLBACK_FUNC"], $arBasketItems["MODULE"], $arBasketItems["PRODUCT_ID"], $arBasketItems["QUANTITY"]);
  54. $arBasketItems = CSaleBasket::GetByID($arBasketItems["ID"]);
  55. }
  56. $quantityTmp = $arParams['QUANTITY_FLOAT'] == 'Y' ? DoubleVal($_REQUEST["QUANTITY_".$arBasketItems["ID"]]) : IntVal($_REQUEST["QUANTITY_".$arBasketItems["ID"]]);
  57. $deleteTmp = (($_REQUEST["DELETE_".$arBasketItems["ID"]] == "Y") ? "Y" : "N");
  58. $delayTmp = (($_REQUEST["DELAY_".$arBasketItems["ID"]] == "Y") ? "Y" : "N");
  59. if ($deleteTmp == "Y" && in_array("DELETE", $arParams["COLUMNS_LIST"]))
  60. CSaleBasket::Delete($arBasketItems["ID"]);
  61. elseif ($arBasketItems["DELAY"] == "N" && $arBasketItems["CAN_BUY"] == "Y")
  62. {
  63. UnSet($arFields);
  64. $arFields = array();
  65. if (in_array("QUANTITY", $arParams["COLUMNS_LIST"]))
  66. $arFields["QUANTITY"] = $quantityTmp;
  67. if (in_array("DELAY", $arParams["COLUMNS_LIST"]))
  68. $arFields["DELAY"] = $delayTmp;
  69. if (count($arFields) > 0
  70. &&
  71. ($arBasketItems["QUANTITY"] != $arFields["QUANTITY"] && in_array("QUANTITY", $arParams["COLUMNS_LIST"])
  72. || $arBasketItems["DELAY"] != $arFields["DELAY"] && in_array("DELAY", $arParams["COLUMNS_LIST"]))
  73. )
  74. CSaleBasket::Update($arBasketItems["ID"], $arFields);
  75. }
  76. elseif ($arBasketItems["DELAY"] == "Y" && $arBasketItems["CAN_BUY"] == "Y")
  77. {
  78. UnSet($arFields);
  79. $arFields = array();
  80. if (in_array("DELAY", $arParams["COLUMNS_LIST"]))
  81. $arFields["DELAY"] = $delayTmp;
  82. if (count($arFields) > 0
  83. &&
  84. ($arBasketItems["DELAY"] != $arFields["DELAY"] && in_array("DELAY", $arParams["COLUMNS_LIST"]))
  85. )
  86. CSaleBasket::Update($arBasketItems["ID"], $arFields);
  87. }
  88. }
  89. if (strlen($_REQUEST["BasketOrder"]) > 0)
  90. {
  91. LocalRedirect($arParams["PATH_TO_ORDER"]);
  92. }
  93. else
  94. {
  95. unset($_REQUEST["BasketRefresh"]);
  96. unset($_REQUEST["BasketOrder"]);
  97. LocalRedirect($APPLICATION->GetCurPage());
  98. }
  99. }
  100. $arBasketItems = array();
  101. $dbBasketItems = CSaleBasket::GetList(
  102. array(
  103. "NAME" => "ASC",
  104. "ID" => "ASC"
  105. ),
  106. array(
  107. "FUSER_ID" => CSaleBasket::GetBasketUserID(),
  108. "LID" => SITE_ID,
  109. "ORDER_ID" => "NULL"
  110. ),
  111. false,
  112. false,
  113. array("ID", "NAME", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "DETAIL_PAGE_URL", "NOTES", "CURRENCY", "VAT_RATE")
  114. );
  115. $arProps = Array();
  116. while ($arItems = $dbBasketItems->GetNext())
  117. {
  118. //echo '<pre>'; print_r($arItems); echo '</pre>';
  119. //echo "<p>11111=".$arItems['PRICE']."</p>";
  120. //$arItems['QUANTITY'] = $arParams['QUANTITY_FLOAT'] == 'Y' ? number_format(DoubleVal($arItems['QUANTITY']), 2, '.', '') : IntVal($arItems['QUANTITY']);
  121. if (strlen($arItems["CALLBACK_FUNC"]) > 0)
  122. {
  123. CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"], $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]);
  124. $arItems = CSaleBasket::GetByID($arItems["ID"]);
  125. if($ex = $APPLICATION->GetException())
  126. {
  127. $str = $ex->GetString();
  128. if(!in_array($str, $arResult["WARNING_MESSAGE"]))
  129. $arResult["WARNING_MESSAGE"][] = $ex->GetString();
  130. }
  131. }
  132. $arItems['QUANTITY'] = $arParams['QUANTITY_FLOAT'] == 'Y' ? number_format(DoubleVal($arItems['QUANTITY']), 2, '.', '') : IntVal($arItems['QUANTITY']);
  133. $arItems["PROPS"] = Array();
  134. if(in_array("PROPS", $arParams["COLUMNS_LIST"]))
  135. {
  136. $dbProp = CSaleBasket::GetPropsList(Array("ID" => "DESC"), Array("BASKET_ID" => $arItems["ID"], "!CODE" => array("CATALOG.XML_ID", "PRODUCT.XML_ID")));
  137. while($arProp = $dbProp -> GetNext())
  138. $arItems["PROPS"][] = $arProp;
  139. }
  140. if(CModule::IncludeModule ('iblock'))
  141. {
  142. $arFilter=array ("ID"=>$arItems["PRODUCT_ID"]);
  143. $arSelectedFields=$arParams["PROPS_LIST"];
  144. $db_props = CIBlockElement::GetList(Array("ID" => "DESC"), $arFilter, false, false, $arSelectedFields);
  145. if ($ar_props=$db_props->Fetch())
  146. {
  147. $ar_props["PREVIEW_PICTURE"] = CFile::GetFileArray($ar_props["PREVIEW_PICTURE"]);
  148. }
  149. }
  150. $arItems["NEW_PROPS"]=$ar_props;
  151. $arBasketItems[] = $arItems;
  152. }
  153. //print_r($arProps);
  154. //print_r($arBasketItems);
  155. //echo '<pre>'; print_r($arBasketItems); echo '</pre>';
  156. $bShowReady = False;
  157. $bShowDelay = False;
  158. $bShowNotAvail = False;
  159. $allSum = 0;
  160. $allWeight = 0;
  161. $allCurrency = CSaleLang::GetLangCurrency(SITE_ID);
  162. $allVATSum = 0;
  163. for ($i = 0; $i < count($arBasketItems); $i++)
  164. {
  165. if ($arBasketItems[$i]["DELAY"] == "N" && $arBasketItems[$i]["CAN_BUY"] == "Y")
  166. $bShowReady = True;
  167. elseif ($arBasketItems[$i]["DELAY"] == "Y" && $arBasketItems[$i]["CAN_BUY"] == "Y")
  168. $bShowDelay = True;
  169. elseif ($arBasketItems[$i]["CAN_BUY"] == "N")
  170. $bShowNotAvail = True;
  171. $arBasketItems[$i]["PRICE_VAT_VALUE"] = (($arBasketItems[$i]["PRICE"] / ($arBasketItems[$i]["VAT_RATE"] +1)) * $arBasketItems[$i]["VAT_RATE"]);
  172. /*
  173. if ($arParams['PRICE_VAT_INCLUDE'] == 'Y')
  174. {
  175. $arBasketItems[$i]["PRICE"] += $arBasketItems[$i]["PRICE_VAT_VALUE"];
  176. }
  177. */
  178. $arBasketItems[$i]["PRICE_FORMATED"] = SaleFormatCurrency($arBasketItems[$i]["PRICE"], $arBasketItems[$i]["CURRENCY"]);
  179. $arBasketItems[$i]["WEIGHT"] = DoubleVal($arBasketItems[$i]["WEIGHT"]);
  180. if ($arBasketItems[$i]["DELAY"] == "N" && $arBasketItems[$i]["CAN_BUY"] == "Y")
  181. {
  182. $allSum += ($arBasketItems[$i]["PRICE"] * $arBasketItems[$i]["QUANTITY"]);
  183. $allWeight += ($arBasketItems[$i]["WEIGHT"] * $arBasketItems[$i]["QUANTITY"]);
  184. $allVATSum += roundEx($arBasketItems[$i]["PRICE_VAT_VALUE"] * $arBasketItems[$i]["QUANTITY"], SALE_VALUE_PRECISION);
  185. }
  186. //echo '<pre>'.$i." "; print_r($arBasketItems[$i]); echo '</pre>';
  187. }
  188. $arResult["ITEMS"]["AnDelCanBuy"] = Array();
  189. $arResult["ITEMS"]["DelDelCanBuy"] = Array();
  190. $arResult["ITEMS"]["nAnCanBuy"] = Array();
  191. foreach($arBasketItems as $val)
  192. {
  193. $val['NAME'] = htmlspecialcharsEx($val['NAME']);
  194. $val['NOTES'] = htmlspecialcharsEx($val['NOTES']);
  195. if($bShowReady)
  196. {
  197. if($val["DELAY"] == "N" && $val["CAN_BUY"] == "Y")
  198. {
  199. if(DoubleVal($val["DISCOUNT_PRICE"]) > 0)
  200. {
  201. $val["DISCOUNT_PRICE_PERCENT"] = $val["DISCOUNT_PRICE"]*100 / ($val["DISCOUNT_PRICE"] + $val["PRICE"]);
  202. $val["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($val["DISCOUNT_PRICE_PERCENT"], 0)."%";
  203. }
  204. $arResult["ITEMS"]["AnDelCanBuy"][] = $val;
  205. }
  206. }
  207. if($bShowDelay)
  208. {
  209. if($val["DELAY"] == "Y" && $val["CAN_BUY"] == "Y")
  210. {
  211. $arResult["ITEMS"]["DelDelCanBuy"][] = $val;
  212. }
  213. }
  214. if($bShowNotAvail)
  215. {
  216. if($val["CAN_BUY"] == "N")
  217. {
  218. $arResult["ITEMS"]["nAnCanBuy"][] = $val;
  219. }
  220. }
  221. }
  222. $arResult["ShowReady"] = (($bShowReady)?"Y":"N");
  223. $arResult["ShowDelay"] = (($bShowDelay)?"Y":"N");
  224. $arResult["ShowNotAvail"] = (($bShowNotAvail)?"Y":"N");
  225. $dbDiscount = CSaleDiscount::GetList(
  226. array("SORT" => "ASC"),
  227. array(
  228. "LID" => SITE_ID,
  229. "ACTIVE" => "Y",
  230. "!>ACTIVE_FROM" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
  231. "!<ACTIVE_TO" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
  232. "<=PRICE_FROM" => $allSum,
  233. ">=PRICE_TO" => $allSum
  234. ),
  235. false,
  236. false,
  237. array("*")
  238. );
  239. $arResult["DISCOUNT_PRICE"] = 0;
  240. $arResult["DISCOUNT_PERCENT"] = 0;
  241. $arDiscounts = array();
  242. if ($arDiscount = $dbDiscount->Fetch())
  243. {
  244. if ($arDiscount["DISCOUNT_TYPE"] == "P")
  245. {
  246. $arResult["DISCOUNT_PERCENT"] = $arDiscount["DISCOUNT_VALUE"];
  247. for ($bi = 0; $bi < count($arResult["ITEMS"]["AnDelCanBuy"]); $bi++)
  248. {
  249. if($arParams["COUNT_DISCOUNT_4_ALL_QUANTITY"] == "Y")
  250. {
  251. $curDiscount = roundEx(DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) * IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]) * $arDiscount["DISCOUNT_VALUE"] / 100, SALE_VALUE_PRECISION);
  252. $arDiscounts[IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["ID"])] = roundEx($curDiscount / IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]), IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]));
  253. $arResult["DISCOUNT_PRICE"] += $curDiscount;
  254. }
  255. else
  256. {
  257. $curDiscount = roundEx(DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) * $arDiscount["DISCOUNT_VALUE"] / 100, SALE_VALUE_PRECISION);
  258. $arDiscounts[IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["ID"])] = $curDiscount;
  259. $arResult["DISCOUNT_PRICE"] += $curDiscount * IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]);
  260. }
  261. $arResult["ITEMS"]["AnDelCanBuy"][$bi]["DISCOUNT_PRICE"] = DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) - $curDiscount;
  262. }
  263. $arResult["DISCOUNT_PERCENT_FORMATED"] = DoubleVal($arResult["DISCOUNT_PERCENT"])."%";
  264. }
  265. else
  266. {
  267. $arResult["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arDiscount["DISCOUNT_VALUE"], $arDiscount["CURRENCY"], $arResult["BASE_LANG_CURRENCY"]);
  268. $arResult["DISCOUNT_PRICE"] = roundEx($arResult["DISCOUNT_PRICE"], SALE_VALUE_PRECISION);
  269. $arResult["DISCOUNT_PRICE_tmp"] = 0;
  270. for ($bi = 0; $bi < count($arResult["ITEMS"]["AnDelCanBuy"]); $bi++)
  271. {
  272. $curDiscount = roundEx(DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) * $arResult["DISCOUNT_PRICE"] / $arResult["ORDER_PRICE"], SALE_VALUE_PRECISION);
  273. $arDiscounts[IntVal($arProductsInBasket[$bi]["ID"])] = $curDiscount;
  274. $arResult["ITEMS"]["AnDelCanBuy"][$bi]["DISCOUNT_PRICE"] = DoubleVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["PRICE"]) - $curDiscount;
  275. $arResult["DISCOUNT_PRICE_tmp"] += $curDiscount * IntVal($arResult["ITEMS"]["AnDelCanBuy"][$bi]["QUANTITY"]);
  276. }
  277. $arResult["DISCOUNT_PRICE"] = $arResult["DISCOUNT_PRICE_tmp"];
  278. }
  279. $allSum = $allSum - $arResult["DISCOUNT_PRICE"];
  280. }
  281. $arResult["allSum"] = $allSum;
  282. $arResult["allWeight"] = $allWeight;
  283. $arResult["allSum_FORMATED"] = SaleFormatCurrency($allSum, $allCurrency);
  284. $arResult["DISCOUNT_PRICE_FORMATED"] = SaleFormatCurrency($arResult["DISCOUNT_PRICE"], $allCurrency);
  285. if ($arParams['PRICE_VAT_SHOW_VALUE'] == 'Y')
  286. {
  287. $arResult["allVATSum"] = $allVATSum;
  288. $arResult["allVATSum_FORMATED"] = SaleFormatCurrency($allVATSum, $allCurrency);
  289. $arResult["allSum_wVAT_FORMATED"] = SaleFormatCurrency($arResult["allSum_wVAT"], $allCurrency);
  290. }
  291. if ($arParams["HIDE_COUPON"] != "Y")
  292. $arCoupons = CCatalogDiscount::GetCoupons();
  293. if (count($arCoupons) > 0)
  294. $arResult["COUPON"] = htmlspecialchars($arCoupons[0]);
  295. if(count($arBasketItems)<=0)
  296. $arResult["ERROR_MESSAGE"] = GetMessage("SALE_EMPTY_BASKET");
  297. $arResult["NEW_PROPS"]=$arProps;
  298. //echo '<pre>'; print_r($arResult); echo '</pre>';
  299. //$i=0;
  300. //print_r ($arResult["NEW_PROPS"][$i]["PREVIEW_PICTURE"]);
  301. $this->IncludeComponentTemplate();
  302. ?>