public static function DoGetUserShoppingCart($siteId, $userId, $shoppingCart, &$arErrors, $arCoupons = array(), $orderId = 0, $enableCustomCurrency = false) { $siteId = trim($siteId); if (empty($siteId)) { $arErrors[] = array("CODE" => "PARAM", "TEXT" => Loc::getMessage('SKGB_PARAM_SITE_ERROR')); return null; } $userId = intval($userId); if (!is_array($shoppingCart)) { if (intval($shoppingCart) . "|" != $shoppingCart . "|") { $arErrors[] = array("CODE" => "PARAM", "TEXT" => Loc::getMessage('SKGB_PARAM_SK_ERROR')); return null; } $shoppingCart = intval($shoppingCart); $dbShoppingCartItems = CSaleBasket::GetList(array("NAME" => "ASC"), array("FUSER_ID" => $shoppingCart, "LID" => $siteId, "ORDER_ID" => "NULL", "DELAY" => "N"), false, false, array("ID", "LID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "DETAIL_PAGE_URL", "PRODUCT_PROVIDER_CLASS", "RESERVED", "DEDUCTED", "RESERVE_QUANTITY", "DIMENSIONS", "TYPE", "SET_PARENT_ID")); $arTmp = array(); while ($arShoppingCartItem = $dbShoppingCartItems->Fetch()) { $arTmp[] = $arShoppingCartItem; } $shoppingCart = $arTmp; } $arOldShoppingCart = array(); if ($orderId != 0) { $dbs = CSaleBasket::GetList(array("NAME" => "ASC"), array("LID" => $siteId, "ORDER_ID" => $orderId, "DELAY" => "N"), false, false, array("ID", "LID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "PRODUCT_PRICE_ID", "PRICE", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "DETAIL_PAGE_URL", "PRODUCT_PROVIDER_CLASS", "RESERVED", "DEDUCTED", "BARCODE_MULTI", "DIMENSIONS", "TYPE", "SET_PARENT_ID")); while ($arOldShoppingCartItem = $dbs->Fetch()) { $arOldShoppingCart[$arOldShoppingCartItem["ID"]] = $arOldShoppingCartItem; } } if (CSaleHelper::IsAssociativeArray($shoppingCart)) { $shoppingCart = array($shoppingCart); } if (!empty($arCoupons)) { if (!is_array($arCoupons)) { $arCoupons = array($arCoupons); } foreach (GetModuleEvents("sale", "OnSetCouponList", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($userId, $arCoupons, array())); } foreach ($arCoupons as &$coupon) { $couponResult = DiscountCouponsManager::add($coupon); } unset($coupon); } if (!is_bool($enableCustomCurrency)) { $enableCustomCurrency = false; } $arResult = array(); $emptyID = 1; foreach ($shoppingCart as &$arShoppingCartItem) { if (array_key_exists("CALLBACK_FUNC", $arShoppingCartItem) && !empty($arShoppingCartItem["CALLBACK_FUNC"]) || array_key_exists("PRODUCT_PROVIDER_CLASS", $arShoppingCartItem) && !empty($arShoppingCartItem["PRODUCT_PROVIDER_CLASS"])) { // get quantity difference to check its availability if ($orderId != 0) { $quantity = $arShoppingCartItem["QUANTITY"] - $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["QUANTITY"]; } else { $quantity = $arShoppingCartItem["QUANTITY"]; } $customPrice = isset($arShoppingCartItem['CUSTOM_PRICE']) && $arShoppingCartItem['CUSTOM_PRICE'] == 'Y'; $existBasketID = array_key_exists('ID', $arShoppingCartItem) && (int) $arShoppingCartItem['ID'] > 0; /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($arShoppingCartItem)) { if ($existBasketID) { $basketID = $arShoppingCartItem['ID']; } elseif (isset($arShoppingCartItem["ID_TMP"])) { $basketID = $arShoppingCartItem["ID_TMP"]; } else { $basketID = 'tmp_' . $emptyID; $emptyID++; } $providerParams = array("PRODUCT_ID" => $arShoppingCartItem["PRODUCT_ID"], "QUANTITY" => $quantity > 0 ? $quantity : $arShoppingCartItem["QUANTITY"], "RENEWAL" => "N", "USER_ID" => $userId, "SITE_ID" => $siteId, "BASKET_ID" => $basketID, "CHECK_QUANTITY" => $quantity > 0 ? "Y" : "N", "CHECK_COUPONS" => 'Y' == $arShoppingCartItem['CAN_BUY'] && (!array_key_exists('DELAY', $arShoppingCartItem) || 'Y' != $arShoppingCartItem['DELAY']) ? 'Y' : 'N', "CHECK_PRICE" => $customPrice ? "N" : "Y"); if (isset($arShoppingCartItem['NOTES'])) { $providerParams['NOTES'] = $arShoppingCartItem['NOTES']; } $arFieldsTmp = $productProvider::GetProductData($providerParams); unset($providerParams); } else { $arFieldsTmp = CSaleBasket::ExecuteCallbackFunction($arShoppingCartItem["CALLBACK_FUNC"], $arShoppingCartItem["MODULE"], $arShoppingCartItem["PRODUCT_ID"], $quantity, "N", $userId, $siteId); if (!empty($arFieldsTmp) && is_array($arFieldsTmp)) { if ($customPrice) { unset($arFieldsTmp['PRICE']); unset($arFieldsTmp['CURRENCY']); } } } if (!empty($arFieldsTmp) && is_array($arFieldsTmp)) { $arFieldsTmp["CAN_BUY"] = "Y"; $arFieldsTmp["SUBSCRIBE"] = "N"; $arFieldsTmp['TYPE'] = (int) $arShoppingCartItem['TYPE']; $arFieldsTmp['SET_PARENT_ID'] = $arShoppingCartItem['SET_PARENT_ID']; $arFieldsTmp['LID'] = $siteId; } else { $arFieldsTmp = array("CAN_BUY" => "N"); } if ($existBasketID) { $arFieldsTmp["IGNORE_CALLBACK_FUNC"] = "Y"; CSaleBasket::Update($arShoppingCartItem["ID"], $arFieldsTmp); $dbTmp = CSaleBasket::GetList(array(), array("ID" => $arShoppingCartItem["ID"]), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "TYPE", "SET_PARENT_ID", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "DETAIL_PAGE_URL", "PRODUCT_PROVIDER_CLASS", "DIMENSIONS")); $arTmp = $dbTmp->Fetch(); foreach ($arTmp as $key => $val) { $arShoppingCartItem[$key] = $val; } } else { foreach ($arFieldsTmp as $key => $val) { // update returned quantity for the product if quantity difference is available if ($orderId != 0 && $key == "QUANTITY" && $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["RESERVED"] == "Y" && $quantity > 0) { $arShoppingCartItem[$key] = $val + $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["QUANTITY"]; } else { $arShoppingCartItem[$key] = $val; } } } } if ($arShoppingCartItem["CAN_BUY"] == "Y") { if (!$enableCustomCurrency) { $baseLangCurrency = CSaleLang::GetLangCurrency($siteId); if ($baseLangCurrency != $arShoppingCartItem["CURRENCY"]) { $arShoppingCartItem["PRICE"] = CCurrencyRates::ConvertCurrency($arShoppingCartItem["PRICE"], $arShoppingCartItem["CURRENCY"], $baseLangCurrency); if (is_set($arShoppingCartItem, "DISCOUNT_PRICE")) { $arShoppingCartItem["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arShoppingCartItem["DISCOUNT_PRICE"], $arShoppingCartItem["CURRENCY"], $baseLangCurrency); } $arShoppingCartItem["CURRENCY"] = $baseLangCurrency; } } $arShoppingCartItem["PRICE"] = roundEx($arShoppingCartItem["PRICE"], SALE_VALUE_PRECISION); $arShoppingCartItem["QUANTITY"] = floatval($arShoppingCartItem["QUANTITY"]); $arShoppingCartItem["WEIGHT"] = floatval($arShoppingCartItem["WEIGHT"]); $arShoppingCartItem["DIMENSIONS"] = unserialize($arShoppingCartItem["DIMENSIONS"]); $arShoppingCartItem["VAT_RATE"] = floatval($arShoppingCartItem["VAT_RATE"]); $arShoppingCartItem["DISCOUNT_PRICE"] = roundEx($arShoppingCartItem["DISCOUNT_PRICE"], SALE_VALUE_PRECISION); if ($arShoppingCartItem["VAT_RATE"] > 0) { $arShoppingCartItem["VAT_VALUE"] = $arShoppingCartItem["PRICE"] / ($arShoppingCartItem["VAT_RATE"] + 1) * $arShoppingCartItem["VAT_RATE"]; } //$arShoppingCartItem["VAT_VALUE"] = roundEx((($arShoppingCartItem["PRICE"] / ($arShoppingCartItem["VAT_RATE"] + 1)) * $arShoppingCartItem["VAT_RATE"]), SALE_VALUE_PRECISION); if ($arShoppingCartItem["DISCOUNT_PRICE"] > 0) { $arShoppingCartItem["DISCOUNT_PRICE_PERCENT"] = $arShoppingCartItem["DISCOUNT_PRICE"] * 100 / ($arShoppingCartItem["DISCOUNT_PRICE"] + $arShoppingCartItem["PRICE"]); } $arResult[] = $arShoppingCartItem; } } if (isset($arShoppingCartItem)) { unset($arShoppingCartItem); } if (!empty($arCoupons) && is_array($arCoupons)) { foreach (GetModuleEvents("sale", "OnClearCouponList", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($userId, $arCoupons, array())); } } return $arResult; }
function DoGetUserShoppingCart($siteId, $userId, $shoppingCart, &$arErrors, $arCoupons = array(), $tmpOrderId = 0) { $siteId = trim($siteId); if (empty($siteId)) { $arErrors[] = array("CODE" => "PARAM", "TEXT" => GetMessage('SKGB_PARAM_SITE_ERROR')); return null; } $userId = intval($userId); if (!is_array($shoppingCart)) { if (intval($shoppingCart) . "|" != $shoppingCart . "|") { $arErrors[] = array("CODE" => "PARAM", "TEXT" => GetMessage('SKGB_PARAM_SK_ERROR')); return null; } $shoppingCart = intval($shoppingCart); $dbShoppingCartItems = CSaleBasket::GetList(array("NAME" => "ASC"), array("FUSER_ID" => $shoppingCart, "LID" => $siteId, "ORDER_ID" => "NULL", "DELAY" => "N"), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "DETAIL_PAGE_URL", "PRODUCT_PROVIDER_CLASS", "RESERVED", "DEDUCTED", "RESERVE_QUANTITY")); $arTmp = array(); while ($arShoppingCartItem = $dbShoppingCartItems->Fetch()) { $arTmp[] = $arShoppingCartItem; } $shoppingCart = $arTmp; } $arOldShoppingCart = array(); if ($tmpOrderId != 0) { $dbs = CSaleBasket::GetList(array("NAME" => "ASC"), array("LID" => $siteId, "ORDER_ID" => $tmpOrderId, "DELAY" => "N"), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "PRODUCT_PRICE_ID", "PRICE", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "DETAIL_PAGE_URL", "PRODUCT_PROVIDER_CLASS", "RESERVED", "DEDUCTED", "BARCODE_MULTI")); while ($arOldShoppingCartItem = $dbs->Fetch()) { $arOldShoppingCart[$arOldShoppingCartItem["ID"]] = $arOldShoppingCartItem; } } if (CSaleHelper::IsAssociativeArray($shoppingCart)) { $shoppingCart = array($shoppingCart); } if (is_array($arCoupons) && count($arCoupons) > 0) { foreach (GetModuleEvents("sale", "OnSetCouponList", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($userId, $arCoupons, array())); } } $arResult = array(); foreach ($shoppingCart as &$arShoppingCartItem) { if (array_key_exists("CALLBACK_FUNC", $arShoppingCartItem) && !empty($arShoppingCartItem["CALLBACK_FUNC"]) || array_key_exists("PRODUCT_PROVIDER_CLASS", $arShoppingCartItem) && !empty($arShoppingCartItem["PRODUCT_PROVIDER_CLASS"])) { if (($arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["RESERVED"] == "Y" || $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["DEDUCTED"] == "Y") && $tmpOrderId != 0) { $quantity = $arShoppingCartItem["QUANTITY"] - $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["QUANTITY"]; } else { $quantity = $arShoppingCartItem["QUANTITY"]; } if ($quantity > 0) { /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($arShoppingCartItem)) { $arFieldsTmp = $productProvider::GetProductData(array("PRODUCT_ID" => $arShoppingCartItem["PRODUCT_ID"], "QUANTITY" => $quantity, "RENEWAL" => "N", "USER_ID" => $userId, "SITE_ID" => $siteId)); } else { // USER CODE -> $arFieldsTmp = CSaleBasket::ExecuteCallbackFunction($arShoppingCartItem["CALLBACK_FUNC"], $arShoppingCartItem["MODULE"], $arShoppingCartItem["PRODUCT_ID"], $quantity, "N", $userId, $siteId); } } else { $arFieldsTmp = array("PRODUCT_PRICE_ID" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["PRODUCT_PRICE_ID"], "PRICE" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["PRICE"], "VAT_RATE" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["VAT_RATE"], "CURRENCY" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["CURRENCY"], "QUANTITY" => $arShoppingCartItem["QUANTITY"], "DISCOUNT_PRICE" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["DISCOUNT_PRICE"], "WEIGHT" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["WEIGHT"], "NAME" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["NAME"], "CAN_BUY" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["CAN_BUY"], "DETAIL_PAGE_URL" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["DETAIL_PAGE_URL"], "NOTES" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["NOTES"], "BARCODE_MULTI" => $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["BARCODE_MULTI"]); } if (isset($arShoppingCartItem["CUSTOM_PRICE"]) && $arShoppingCartItem["CUSTOM_PRICE"] == "Y") { unset($arFieldsTmp["PRICE"]); } if ($arFieldsTmp && is_array($arFieldsTmp) && count($arFieldsTmp) > 0) { $arFieldsTmp["CAN_BUY"] = "Y"; $arFieldsTmp["SUBSCRIBE"] = "N"; } else { $arFieldsTmp = array("CAN_BUY" => "N"); } if (array_key_exists("ID", $arShoppingCartItem) && intval($arShoppingCartItem["ID"]) > 0) { $arFieldsTmp["IGNORE_CALLBACK_FUNC"] = "Y"; CSaleBasket::Update($arShoppingCartItem["ID"], $arFieldsTmp); $dbTmp = CSaleBasket::GetList(array(), array("ID" => $arShoppingCartItem["ID"]), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "DETAIL_PAGE_URL", "PRODUCT_PROVIDER_CLASS")); $arTmp = $dbTmp->Fetch(); foreach ($arTmp as $key => $val) { $arShoppingCartItem[$key] = $val; } } else { foreach ($arFieldsTmp as $key => $val) { if ($tmpOrderId != 0 && $key == "QUANTITY" && $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["RESERVED"] == "Y" && $quantity > 0) { $arShoppingCartItem[$key] = $val + $arOldShoppingCart[$arShoppingCartItem["ID_TMP"]]["QUANTITY"]; } else { $arShoppingCartItem[$key] = $val; } } } } if ($arShoppingCartItem["CAN_BUY"] == "Y") { $baseLangCurrency = CSaleLang::GetLangCurrency($siteId); if ($baseLangCurrency != $arShoppingCartItem["CURRENCY"]) { $arShoppingCartItem["PRICE"] = CCurrencyRates::ConvertCurrency($arShoppingCartItem["PRICE"], $arShoppingCartItem["CURRENCY"], $baseLangCurrency); if (is_set($arShoppingCartItem, "DISCOUNT_PRICE")) { $arShoppingCartItem["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arShoppingCartItem["DISCOUNT_PRICE"], $arShoppingCartItem["CURRENCY"], $baseLangCurrency); } $arShoppingCartItem["CURRENCY"] = $baseLangCurrency; } $arShoppingCartItem["PRICE"] = roundEx($arShoppingCartItem["PRICE"], SALE_VALUE_PRECISION); $arShoppingCartItem["QUANTITY"] = doubleval($arShoppingCartItem["QUANTITY"]); $arShoppingCartItem["WEIGHT"] = doubleval($arShoppingCartItem["WEIGHT"]); $arShoppingCartItem["VAT_RATE"] = doubleval($arShoppingCartItem["VAT_RATE"]); $arShoppingCartItem["DISCOUNT_PRICE"] = roundEx($arShoppingCartItem["DISCOUNT_PRICE"], SALE_VALUE_PRECISION); if ($arShoppingCartItem["VAT_RATE"] > 0) { $arShoppingCartItem["VAT_VALUE"] = $arShoppingCartItem["PRICE"] / ($arShoppingCartItem["VAT_RATE"] + 1) * $arShoppingCartItem["VAT_RATE"]; } //$arShoppingCartItem["VAT_VALUE"] = roundEx((($arShoppingCartItem["PRICE"] / ($arShoppingCartItem["VAT_RATE"] + 1)) * $arShoppingCartItem["VAT_RATE"]), SALE_VALUE_PRECISION); if ($arShoppingCartItem["DISCOUNT_PRICE"] > 0) { $arShoppingCartItem["DISCOUNT_PRICE_PERCENT"] = $arShoppingCartItem["DISCOUNT_PRICE"] * 100 / ($arShoppingCartItem["DISCOUNT_PRICE"] + $arShoppingCartItem["PRICE"]); } $arResult[] = $arShoppingCartItem; } } unset($arShoppingCartItem); if (is_array($arCoupons) && count($arCoupons) > 0) { foreach (GetModuleEvents("sale", "OnClearCouponList", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($userId, $arCoupons, array())); } } return $arResult; }