function OnBasketAddHandler($ID, $arFields) { global $USER; \Bitrix\Main\Loader::includeModule('catalog'); \Bitrix\Main\Loader::includeModule('sale'); if ($USER->IsAuthorized()) { $arFilter = array("USER_ID" => $USER->GetID()); $db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), $arFilter); $arrCount = []; while ($ar_sales = $db_sales->Fetch()) { $arrCount[] = $ar_sales; } if (is_array($arrCount) == false) { $res = CCatalogDiscount::SetCoupon('SL-CDUEA-HI8MMPY'); //3% } else { if (count($arrCount) >= 1) { $resClean = CCatalogDiscount::ClearCoupon('SL-CDUEA-HI8MMPY'); $res5 = CCatalogDiscount::SetCoupon('SL-0JG2C-XIHBEYZ'); //5% } else { } } } else { $res = CCatalogDiscountCoupon::SetCoupon('SL-CDUEA-HI8MMPY'); //3% } }
function CatalogDeactivateOneTimeCoupons($intOrderID = 0) { CCatalogDiscountCoupon::CouponOneOrderDisable($intOrderID); }
public function OnDeleteCouponList($intUserID, $arModules) { return CCatalogDiscountCoupon::OnDeleteCouponList($intUserID, $arModules); }
/** * * @param $productID * @param $quantity * @param $renewal */ function CatalogBasketOrderCustomCallback($productID, $quantity, $renewal = "N") { $productID = IntVal($productID); $quantity = DoubleVal($quantity); $renewal = (($renewal == "Y") ? "Y" : "N"); $arResult = array(); if ($arCatalogProduct = CCatalogProduct::GetByID($productID)) { if ($arCatalogProduct["QUANTITY_TRACE"]=="Y" && DoubleVal($arCatalogProduct["QUANTITY"])<doubleVal($quantity)) return $arResult; } $rs = CPrice::GetList(array(), array("CATALOG_GROUP_NAME" => GetCityPrice(), "PRODUCT_ID" => $productID), false, false); $ar = $rs -> Fetch(); $arPrice = array(); $arPrice[] = array( "ID" => $ar["ID"], "PRICE" => $ar["PRICE"], "CURRENCY" => $ar["CURRENCY"], "CATALOG_GROUP_ID" => $ar["CATALOG_GROUP_ID"] ); $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $GLOBALS["USER"]->GetUserGroupArray(), $renewal, $arPrice); if (!$arPrice || count($arPrice) <= 0) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $GLOBALS["USER"]->GetUserGroupArray())) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $GLOBALS["USER"]->GetUserGroupArray(), $renewal); } } if (!$arPrice || count($arPrice) <= 0) { return $arResult; } $dbIBlockElement = CIBlockElement::GetList( array(), array( "ID" => $productID, "ACTIVE_DATE" => "Y", "ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y" ) ); $arProduct = $dbIBlockElement->GetNext(); $currentPrice = $arPrice["PRICE"]["PRICE"]; $currentDiscount = 0.0; //SIGURD: logic change. see mantiss 5036. // discount applied to a final price with VAT already included. if ($arPrice['PRICE']['VAT_INCLUDED'] == 'N') { if(DoubleVal($arPrice['PRICE']['VAT_RATE']) > 0) { $currentPrice *= (1 + $arPrice['PRICE']['VAT_RATE']); $arPrice['PRICE']['VAT_INCLUDED'] = 'Y'; } } if (isset($arPrice["DISCOUNT"]) && count($arPrice["DISCOUNT"]) > 0) { if ($arPrice["DISCOUNT"]["VALUE_TYPE"]=="F") { if ($arPrice["DISCOUNT"]["CURRENCY"] == $arPrice["PRICE"]["CURRENCY"]) $currentDiscount = $arPrice["DISCOUNT"]["VALUE"]; else $currentDiscount = CCurrencyRates::ConvertCurrency($arPrice["DISCOUNT"]["VALUE"], $arPrice["DISCOUNT"]["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); } else $currentDiscount = $currentPrice * $arPrice["DISCOUNT"]["VALUE"] / 100.0; $currentDiscount = roundEx($currentDiscount, SALE_VALUE_PRECISION); if (DoubleVal($arPrice["DISCOUNT"]["MAX_DISCOUNT"]) > 0) { if ($arPrice["DISCOUNT"]["CURRENCY"] == $baseCurrency) $maxDiscount = $arPrice["DISCOUNT"]["MAX_DISCOUNT"]; else $maxDiscount = CCurrencyRates::ConvertCurrency($arPrice["DISCOUNT"]["MAX_DISCOUNT"], $arPrice["DISCOUNT"]["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); $maxDiscount = roundEx($maxDiscount, CATALOG_VALUE_PRECISION); if ($currentDiscount > $maxDiscount) $currentDiscount = $maxDiscount; } $currentPrice = $currentPrice - $currentDiscount; } $arResult = array( "PRODUCT_PRICE_ID" => $arPrice["PRICE"]["ID"], "PRICE" => $currentPrice, "VAT_RATE" => $arPrice['PRICE']['VAT_RATE'], "CURRENCY" => $arPrice["PRICE"]["CURRENCY"], "QUANTITY" => $quantity, "WEIGHT" => 0, "NAME" => $arProduct["~NAME"], "CAN_BUY" => "Y", "NOTES" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"], "DISCOUNT_PRICE" => $currentDiscount, ); if(!empty($arPrice["DISCOUNT"])) { if(strlen($arPrice["DISCOUNT"]["COUPON"])>0) $arResult["DISCOUNT_COUPON"] = $arPrice["DISCOUNT"]["COUPON"]; if($arPrice["DISCOUNT"]["VALUE_TYPE"]=="P") $arResult["DISCOUNT_VALUE"] = $arPrice["DISCOUNT"]["VALUE"]."%"; else $arResult["DISCOUNT_VALUE"] = SaleFormatCurrency($arPrice["DISCOUNT"]["VALUE"], $arPrice["DISCOUNT"]["CURRENCY"]); $arResult["DISCOUNT_NAME"] = "[".$arPrice["DISCOUNT"]["ID"]."] ".$arPrice["DISCOUNT"]["NAME"]; $dbCoupon = CCatalogDiscountCoupon::GetList( array(), array("COUPON" => $arPrice["DISCOUNT"]["COUPON"]), false, false, array("ID", "ONE_TIME") ); if ($arCoupon = $dbCoupon->Fetch()) { $arFieldsCoupon = Array("DATE_APPLY" => Date($GLOBALS["DB"]->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)))); if ($arCoupon["ONE_TIME"] == "Y") { $arFieldsCoupon["ACTIVE"] = "N"; foreach($_SESSION["CATALOG_USER_COUPONS"] as $k => $v) { if(trim($v) == trim($arPrice["DISCOUNT"]["COUPON"])) { unset($_SESSION["CATALOG_USER_COUPONS"][$k]); $_SESSION["CATALOG_USER_COUPONS"][$k] == ""; } } } CCatalogDiscountCoupon::Update($arCoupon["ID"], $arFieldsCoupon); } } if ($arCatalogProduct) { $arResult["WEIGHT"] = IntVal($arCatalogProduct["WEIGHT"]); } CCatalogProduct::QuantityTracer($productID, $quantity); return $arResult; }
{ $arResult['STATUS'] = 'ERROR'; $arResult['MESSAGE'] = GetMessage('BT_CAT_TOOLS_GEN_CPN_ERR_RIGHTS'); $boolFlag = false; } } if (true == $boolFlag) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/include.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/prolog.php"); do { $boolCheck = true; $strCoupon = CatalogGenerateCoupon(); $arFilter = array("COUPON" => substr($strCoupon, 0, 32)); $rsCoupons = CCatalogDiscountCoupon::GetList(array(),$arFilter, false, array('nTopCount' => 1),array('ID', 'COUPON')); if ($arCoupon = $rsCoupons->Fetch()) { $boolCheck = false; } } while (!$boolCheck); $arResult['RESULT'] = $strCoupon; } echo CUtil::PhpToJSObject($arResult); ?>
if ($ex = $APPLICATION->GetException()) { $lAdmin->AddGroupError($ex->GetString(), $ID); } else { $lAdmin->AddGroupError(str_replace("#ID#", $ID, GetMessage("ERROR_UPDATE_DISCOUNT_CPN")), $ID); } } break; } } } $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "ID", "default" => true), array("id" => "DISCOUNT_NAME", "content" => GetMessage("DSC_CPN_NAME"), "sort" => "DISCOUNT_NAME", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("DSC_CPN_ACTIVE"), "sort" => "ACTIVE", "default" => true), array("id" => "COUPON", "content" => GetMessage("DSC_CPN_CPN"), "sort" => "COUPON", "default" => true), array("id" => "DATE_APPLY", "content" => GetMessage("DSC_CPN_DATE"), "sort" => "DATE_APPLY", "default" => true), array("id" => "ONE_TIME", "content" => GetMessage("DSC_CPN_TIME2"), "sort" => "ONE_TIME", "default" => true), array("id" => "DESCRIPTION", "content" => GetMessage("DSC_CPN_DESCRIPTION"), "sort" => "", "default" => false), array("id" => "MODIFIED_BY", "content" => GetMessage('DSC_MODIFIED_BY'), "sort" => "MODIFIED_BY", "default" => true), array("id" => "TIMESTAMP_X", "content" => GetMessage('DSC_TIMESTAMP_X'), "sort" => "TIMESTAMP_X", "default" => true), array("id" => "CREATED_BY", "content" => GetMessage('DSC_CREATED_BY'), "sort" => "CREATED_BY", "default" => false), array("id" => "DATE_CREATE", "content" => GetMessage('DSC_DATE_CREATE'), "sort" => "DATE_CREATE", "default" => false))); $arVisibleColumns = $lAdmin->GetVisibleHeaderColumns(); $arUserList = array(); $strNameFormat = CSite::GetNameFormat(true); $arCouponType = array('Y' => GetMessage('DSC_COUPON_TYPE_ONE_TIME'), 'O' => GetMessage('DSC_COUPON_TYPE_ONE_ORDER'), 'N' => GetMessage('DSC_COUPON_TYPE_NO_LIMIT')); $dbResultList = CCatalogDiscountCoupon::GetList(array($by => $order), $arFilter, false, false, $arVisibleColumns); $dbResultList = new CAdminResult($dbResultList, $sTableID); $dbResultList->NavStart(); $lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("DSC_NAV"))); while ($arDiscount = $dbResultList->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arDiscount); $row->AddField("ID", $f_ID); $row->AddViewField("DISCOUNT_NAME", $f_DISCOUNT_NAME); $strCreatedBy = ''; $strModifiedBy = ''; $arDiscount['CREATED_BY'] = intval($arDiscount['CREATED_BY']); if (0 < $arDiscount['CREATED_BY']) { if (!array_key_exists($arDiscount['CREATED_BY'], $arUserList)) { $rsUsers = CUser::GetList($by2 = 'ID', $order2 = 'ASC', array('ID_EQUAL_EXACT' => $arDiscount['CREATED_BY']), array('FIELDS' => array('ID', 'LOGIN', 'NAME', 'LAST_NAME'))); if ($arOneUser = $rsUsers->Fetch()) { $arOneUser['ID'] = intval($arOneUser['ID']);
public static function CouponOneOrderDisable($intOrderID = 0) { global $DB; if (!empty(self::$arOneOrderCoupons)) { $arCouponID = array_keys(self::$arOneOrderCoupons); foreach (self::$arOneOrderCoupons as &$arCoupon) { $arCoupon['USER_ID'] = intval($arCoupon['USER_ID']); if (0 < $arCoupon['USER_ID']) { CCatalogDiscountCoupon::EraseCouponByManage($arCoupon['USER_ID'], $arCoupon['COUPON']); } else { CCatalogDiscountCoupon::EraseCoupon($arCoupon['COUPON']); } } if (isset($arCoupon)) { unset($arCoupon); } CatalogClearArray($arCouponID, false); if (!empty($arCouponID)) { $strSql = "UPDATE b_catalog_discount_coupon SET ACTIVE='N' WHERE ID IN (" . implode(', ', $arCouponID) . ") AND ONE_TIME='" . self::TYPE_ONE_ORDER . "'"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } self::$arOneOrderCoupons = array(); } }
public function CouponApply($intUserID, $strCoupon) { global $DB; global $CATALOG_ONETIME_COUPONS_ORDER; $mxResult = false; $intUserID = intval($intUserID); if (0 > $intUserID) { $intUserID = 0; } $strCoupon = strval($strCoupon); $rsCoupons = CCatalogDiscountCoupon::GetList(array(), array("COUPON" => $strCoupon, 'ACTIVE' => 'Y'), false, false, array("ID", "ONE_TIME")); if ($arCoupon = $rsCoupons->Fetch()) { $arCoupon['ID'] = intval($arCoupon['ID']); $arFields = array("DATE_APPLY" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)))); if (self::TYPE_ONE_TIME == $arCoupon["ONE_TIME"]) { $arFields["ACTIVE"] = "N"; if (0 < $intUserID) { CCatalogDiscountCoupon::EraseCouponByManage($intUserID, $strCoupon); } else { CCatalogDiscountCoupon::EraseCoupon($strCoupon); } } elseif (self::TYPE_ONE_ORDER == $arCoupon["ONE_TIME"]) { if (!is_array($CATALOG_ONETIME_COUPONS_ORDER)) { $CATALOG_ONETIME_COUPONS_ORDER = array(); AddEventHandler("sale", "OnBasketOrder", 'CatalogDeactivateOneTimeCoupons'); AddEventHandler("sale", "OnDoBasketOrder", 'CatalogDeactivateOneTimeCoupons'); } if (!array_key_exists($arCoupon['ID'], $CATALOG_ONETIME_COUPONS_ORDER)) { $CATALOG_ONETIME_COUPONS_ORDER[$arCoupon['ID']] = array('COUPON' => $strCoupon, 'USER_ID' => $intUserID); } } $strUpdate = $DB->PrepareUpdate("b_catalog_discount_coupon", $arFields); if (!empty($strUpdate)) { $strSql = "UPDATE b_catalog_discount_coupon SET " . $strUpdate . " WHERE ID = " . $arCoupon['ID']; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $mxResult = $arCoupon['ID']; } } return $mxResult; }
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Корзина"); // PR($_COOKIE["bigbuzzy"], true); if( isset($_COOKIE["bigbuzzy"]) && $_COOKIE["bigbuzzy"] != "Y" ) { CCatalogDiscountCoupon::ClearCoupon(); // CCatalogDiscountCoupon::SetCoupon("bigbuzzy"); } ?> <div class="outer-content-wrapper" data-user="******"> <div class="content-wrapper"> <?$APPLICATION->IncludeComponent( "bitrix:breadcrumb", "bread", Array( "START_FROM" => "0", "PATH" => "", "SITE_ID" => "-" ) );?> <div class="text-content"> <h1>Корзина</h1> <div class="js-big-cart-wrapper"> <?$APPLICATION->IncludeComponent( "bitrix:sale.basket.basket", "cart", array(
function CatalogRecurringCallback($productID, $userID) { global $APPLICATION; global $USER; global $DB; $productID = intval($productID); if ($productID <= 0) { return false; } $userID = intval($userID); if ($userID <= 0) { return false; } $arProduct = CCatalogProduct::GetByID($productID); if (!$arProduct) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("I_NO_PRODUCT")), "NO_PRODUCT"); return false; } if ($arProduct["PRICE_TYPE"] == "T") { $arProduct = CCatalogProduct::GetByID($arProduct["TRIAL_PRICE_ID"]); if (!$arProduct) { $APPLICATION->ThrowException(str_replace("#TRIAL_ID#", $productID, str_replace("#ID#", $arProduct["TRIAL_PRICE_ID"], GetMessage("I_NO_TRIAL_PRODUCT"))), "NO_PRODUCT_TRIAL"); return false; } } $productID = intval($arProduct["ID"]); if ($arProduct["PRICE_TYPE"] != "R") { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("I_PRODUCT_NOT_SUBSCR")), "NO_IBLOCK_SUBSCR"); return false; } $dbIBlockElement = CIBlockElement::GetList(array(), array("ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "N"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')); if (!($arIBlockElement = $dbIBlockElement->GetNext())) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT"); return false; } if ('E' == CIBlock::GetArrayByID($arIBlockElement['IBLOCK_ID'], "RIGHTS_MODE")) { $arUserRights = CIBlockElementRights::GetUserOperations($productID, $userID); if (empty($arUserRights)) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT"); return false; } elseif (!is_array($arUserRights) || !array_key_exists('element_read', $arUserRights)) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT"); return false; } } else { if ('R' > CIBlock::GetPermission($arProduct['IBLOCK_ID'], $userID)) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT"); return false; } } $arCatalog = CCatalog::GetByID($arIBlockElement["IBLOCK_ID"]); if ($arCatalog["SUBSCRIPTION"] != "Y") { $APPLICATION->ThrowException(str_replace("#ID#", $arIBlockElement["IBLOCK_ID"], GetMessage("I_CATALOG_NOT_SUBSCR")), "NOT_SUBSCRIPTION"); return false; } if ($arProduct["CAN_BUY_ZERO"] != "Y" && ($arProduct["QUANTITY_TRACE"] == "Y" && doubleval($arProduct["QUANTITY"]) <= 0)) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, GetMessage("I_PRODUCT_SOLD")), "PRODUCT_END"); return false; } $arUserGroups = CUser::GetUserGroup($userID); $arUserGroups = array_values(array_unique($arUserGroups)); CCatalogDiscountSave::Disable(); $arPrice = CCatalogProduct::GetOptimalPrice($productID, 1, $arUserGroups, "Y"); if (empty($arPrice)) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, 1, $arUserGroups)) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $arUserGroups, "Y"); } } CCatalogDiscountSave::Enable(); if (empty($arPrice)) { return false; } $currentPrice = $arPrice["PRICE"]["PRICE"]; $currentDiscount = 0.0; //SIGURD: logic change. see mantiss 5036. // discount applied to a final price with VAT already included. if (doubleval($arPrice['PRICE']['VAT_RATE']) > 0) { $currentPrice *= 1 + $arPrice['PRICE']['VAT_RATE']; } $arDiscountList = array(); if (!empty($arPrice["DISCOUNT_LIST"])) { $dblStartPrice = $currentPrice; foreach ($arPrice["DISCOUNT_LIST"] as &$arOneDiscount) { switch ($arOneDiscount['VALUE_TYPE']) { case 'F': if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) { $currentDiscount = $arOneDiscount['VALUE']; } else { $currentDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount["VALUE"], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); } $currentPrice = $currentPrice - $currentDiscount; break; case 'P': $currentDiscount = $currentPrice * $arOneDiscount["VALUE"] / 100.0; if (0 < $arOneDiscount['MAX_DISCOUNT']) { if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) { $dblMaxDiscount = $arOneDiscount['MAX_DISCOUNT']; } else { $dblMaxDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount['MAX_DISCOUNT'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); } if ($currentDiscount > $dblMaxDiscount) { $currentDiscount = $dblMaxDiscount; } } $currentPrice = $currentPrice - $currentDiscount; break; case 'S': if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) { $currentPrice = $arOneDiscount['VALUE']; } else { $currentPrice = CCurrencyRates::ConvertCurrency($arOneDiscount['VALUE'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); } break; } $arOneList = array('ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => '', 'MODULE_ID' => 'catalog'); if ($arOneDiscount['COUPON']) { $arOneList['COUPON'] = $arOneDiscount['COUPON']; $dbRes = CCatalogDiscountCoupon::GetList(array(), array('COUPON' => $arOneDiscount['COUPON'], 'ONE_TIME' => 'Y'), false, array('nTopCount' => 1), array('ID')); if ($arRes = $dbRes->Fetch()) { $CATALOG_ONETIME_COUPONS_BASKET[$arOneDiscount['COUPON']] = $productID; } } $arDiscountList[] = $arOneList; } if (isset($arOneDiscount)) { unset($arOneDiscount); } $currentDiscount = $dblStartPrice - $currentPrice; } $recurType = $arProduct["RECUR_SCHEME_TYPE"]; $recurLength = intval($arProduct["RECUR_SCHEME_LENGTH"]); $recurSchemeVal = 0; if ($recurType == "H") { $recurSchemeVal = mktime(date("H") + $recurLength, date("i"), date("s"), date("m"), date("d"), date("Y")); } elseif ($recurType == "D") { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + $recurLength, date("Y")); } elseif ($recurType == "W") { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7 * $recurLength, date("Y")); } elseif ($recurType == "M") { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + $recurLength, date("d"), date("Y")); } elseif ($recurType == "Q") { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + 3 * $recurLength, date("d"), date("Y")); } elseif ($recurType == "S") { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + 6 * $recurLength, date("d"), date("Y")); } elseif ($recurType == "Y") { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") + $recurLength); } elseif ($recurType == "T") { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") + 2 * $recurLength); } $arResult = array("WEIGHT" => $arProduct["WEIGHT"], "VAT_RATE" => $arPrice["PRICE"]["VAT_RATE"], "QUANTITY" => 1, "PRICE" => $currentPrice, "WITHOUT_ORDER" => $arProduct["WITHOUT_ORDER"], "PRODUCT_ID" => $productID, "PRODUCT_NAME" => $arIBlockElement["~NAME"], "PRODUCT_URL" => $arIBlockElement["DETAIL_PAGE_URL"], "PRODUCT_PRICE_ID" => $arPrice["PRICE"]["ID"], "CURRENCY" => $arPrice["PRICE"]["CURRENCY"], "NAME" => $arIBlockElement["NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "CATALOG_GROUP_NAME" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arIBlockElement["DETAIL_PAGE_URL"], "PRICE_TYPE" => $arProduct["PRICE_TYPE"], "RECUR_SCHEME_TYPE" => $arProduct["RECUR_SCHEME_TYPE"], "RECUR_SCHEME_LENGTH" => $arProduct["RECUR_SCHEME_LENGTH"], "PRODUCT_XML_ID" => $arIBlockElement["XML_ID"], "NEXT_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID)), $recurSchemeVal)); if (!empty($arPrice["DISCOUNT_LIST"])) { $arResult['DISCOUNT_LIST'] = $arDiscountList; } return $arResult; }
public static function OrderProduct($arParams) { if (!is_set($arParams, "RENEWAL") || $arParams["RENEWAL"] != "Y") { $arParams["RENEWAL"] = "N"; } if (!is_set($arParams, "USER_ID") || IntVal($arParams["USER_ID"]) <= 0) { $arParams["USER_ID"] = 0; } if (!is_set($arParams["SITE_ID"])) { $arParams["SITE_ID"] = false; } global $USER; global $DB; $productID = intval($arParams["PRODUCT_ID"]); $quantity = doubleval($arParams["QUANTITY"]); $renewal = $arParams["RENEWAL"] == "Y" ? "Y" : "N"; $strSiteID = $arParams["SITE_ID"]; $intUserID = intval($arParams["USER_ID"]); if (0 > $intUserID) { $intUserID = 0; } $arResult = array(); static $arUserCache = array(); if (0 < $intUserID) { if (!array_key_exists($intUserID, $arUserCache)) { $rsUsers = CUser::GetList($by = 'ID', $order = 'DESC', array("ID_EQUAL_EXACT" => $intUserID), array('FIELDS' => array('ID'))); if ($arUser = $rsUsers->Fetch()) { $arUserCache[$arUser['ID']] = CUser::GetUserGroup($arUser['ID']); } else { $intUserID = 0; return $arResult; } } $dbIBlockElement = CIBlockElement::GetList(array(), array("ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSION" => "N"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')); if (!($arProduct = $dbIBlockElement->GetNext())) { return $arResult; } if ('E' == CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], "RIGHTS_MODE")) { $arUserRights = CIBlockElementRights::GetUserOperations($productID, $intUserID); if (empty($arUserRights)) { return $arResult; } elseif (!is_array($arUserRights) || !array_key_exists('element_read', $arUserRights)) { return $arResult; } } else { if ('R' > CIBlock::GetPermission($arProduct['IBLOCK_ID'], $intUserID)) { return $arResult; } } } else { $dbIBlockElement = CIBlockElement::GetList(array(), array("ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')); if (!($arProduct = $dbIBlockElement->GetNext())) { return $arResult; } } if ($arCatalogProduct = CCatalogProduct::GetByID($productID)) { if ($arCatalogProduct["CAN_BUY_ZERO"] != "Y" && ($arCatalogProduct["QUANTITY_TRACE"] == "Y" && doubleval($arCatalogProduct["QUANTITY"]) < doubleVal($quantity))) { return $arResult; } } else { return $arResult; } if (0 < $intUserID) { $arCoupons = CCatalogDiscountCoupon::GetCouponsByManage($intUserID); CCatalogDiscountSave::SetDiscountUserID($intUserID); } else { $arCoupons = CCatalogDiscountCoupon::GetCoupons(); } $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, 0 < $intUserID ? $arUserCache[$intUserID] : $USER->GetUserGroupArray(), $renewal, array(), 0 < $intUserID ? $strSiteID : false, $arCoupons); if (empty($arPrice)) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, 0 < $intUserID ? $arUserCache[$intUserID] : $USER->GetUserGroupArray())) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, 0 < $intUserID ? $arUserCache[$intUserID] : $USER->GetUserGroupArray(), $renewal, array(), 0 < $intUserID ? $strSiteID : false, $arCoupons); } } if (empty($arPrice)) { if (0 < $intUserID) { CCatalogDiscountSave::ClearDiscountUserID(); } return $arResult; } $boolDiscountVat = 'N' != COption::GetOptionString('catalog', 'discount_vat', 'Y'); $currentPrice = $arPrice["PRICE"]["PRICE"]; $currentDiscount = 0.0; if ($boolDiscountVat) { if ('N' == $arPrice['PRICE']['VAT_INCLUDED']) { $currentPrice *= 1 + $arPrice['PRICE']['VAT_RATE']; $arPrice['PRICE']['VAT_INCLUDED'] = 'Y'; } } else { if ('Y' == $arPrice['PRICE']['VAT_INCLUDED']) { $currentPrice /= 1 + $arPrice['PRICE']['VAT_RATE']; $arPrice['PRICE']['VAT_INCLUDED'] = 'N'; } } $arDiscountList = array(); $arCouponList = array(); if (!empty($arPrice["DISCOUNT_LIST"])) { $dblStartPrice = $currentPrice; foreach ($arPrice["DISCOUNT_LIST"] as &$arOneDiscount) { switch ($arOneDiscount['VALUE_TYPE']) { case 'F': if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) { $currentDiscount = $arOneDiscount['VALUE']; } else { $currentDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount["VALUE"], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); } $currentPrice = $currentPrice - $currentDiscount; break; case 'P': $currentDiscount = $currentPrice * $arOneDiscount["VALUE"] / 100.0; if (0 < $arOneDiscount['MAX_DISCOUNT']) { if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) { $dblMaxDiscount = $arOneDiscount['MAX_DISCOUNT']; } else { $dblMaxDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount['MAX_DISCOUNT'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); } if ($currentDiscount > $dblMaxDiscount) { $currentDiscount = $dblMaxDiscount; } } $currentPrice = $currentPrice - $currentDiscount; break; case 'S': if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) { $currentPrice = $arOneDiscount['VALUE']; } else { $currentPrice = CCurrencyRates::ConvertCurrency($arOneDiscount['VALUE'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); } break; } $arOneList = array('ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => ''); if ($arOneDiscount['COUPON']) { $arOneList['COUPON'] = $arOneDiscount['COUPON']; $arCouponList[] = $arOneDiscount['COUPON']; } $arDiscountList[] = $arOneList; } if (isset($arOneDiscount)) { unset($arOneDiscount); } $currentDiscount = $dblStartPrice - $currentPrice; } if (empty($arPrice["PRICE"]["CATALOG_GROUP_NAME"])) { if (!empty($arPrice["PRICE"]["CATALOG_GROUP_ID"])) { $rsCatGroups = CCatalogGroup::GetList(array(), array('ID' => $arPrice["PRICE"]["CATALOG_GROUP_ID"]), false, array('nTopCount' => 1), array('ID', 'NAME', 'NAME_LANG')); if ($arCatGroup = $rsCatGroups->Fetch()) { $arPrice["PRICE"]["CATALOG_GROUP_NAME"] = !empty($arCatGroup['NAME_LANG']) ? $arCatGroup['NAME_LANG'] : $arCatGroup['NAME']; } } } if (!$boolDiscountVat) { $currentPrice *= 1 + $arPrice['PRICE']['VAT_RATE']; $currentDiscount *= 1 + $arPrice['PRICE']['VAT_RATE']; $arPrice['PRICE']['VAT_INCLUDED'] = 'Y'; } $arResult = array("PRODUCT_PRICE_ID" => $arPrice["PRICE"]["ID"], "PRICE" => $currentPrice, "VAT_RATE" => $arPrice['PRICE']['VAT_RATE'], "CURRENCY" => $arPrice["PRICE"]["CURRENCY"], "QUANTITY" => $quantity, "WEIGHT" => 0, "NAME" => $arProduct["~NAME"], "CAN_BUY" => "Y", "DETAIL_PAGE_URL" => $arProduct['DETAIL_PAGE_URL'], "NOTES" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"], "DISCOUNT_PRICE" => $currentDiscount); if (!empty($arPrice["DISCOUNT_LIST"])) { $arResult["DISCOUNT_VALUE"] = 100 * $currentDiscount / ($currentDiscount + $currentPrice) . "%"; $arResult["DISCOUNT_NAME"] = "[" . $arPrice["DISCOUNT"]["ID"] . "] " . $arPrice["DISCOUNT"]["NAME"]; $arResult['DISCOUNT_LIST'] = $arDiscountList; if (strlen($arPrice["DISCOUNT"]["COUPON"]) > 0) { $arResult["DISCOUNT_COUPON"] = $arPrice["DISCOUNT"]["COUPON"]; } if (!empty($arCouponList)) { foreach ($arCouponList as &$strOneCoupon) { $mxApply = CCatalogDiscountCoupon::CouponApply($intUserID, $strOneCoupon); } if (isset($strOneCoupon)) { unset($strOneCoupon); } } } if ($arCatalogProduct) { $arResult["WEIGHT"] = intval($arCatalogProduct["WEIGHT"]); } if (0 < $intUserID) { CCatalogDiscountSave::ClearDiscountUserID(); } return $arResult; }
/** * <p>Метод возвращает параметры наименьшей цены товара productID в количестве quantity для посетителя, входящего в группы пользователей arUserGroups. Метод динамичный.</p> * * * @param int $intProductID Код товара.<br><br> До версии <b>12.0.0</b> параметр назывался <b>productID</b>. * * @param $int Приобретаемое количество. * * @param quantit $y = 1[ массив групп, которым принадлежит пользователь. Для текущего * пользователя он возвращается методом $USER->GetUserGroupArray() * * @param array $arUserGroups = array()[ "Y", если вычисляется для продления товара (продажа контента), "N" в * остальных случаях. * * @param string $renewal = "N"[ Массив цен. Если он установлен, то пересчет идет не по ценам из * базы данных, а по ценам из этого массива. Представляет собой * массив ассоциативных массивов с ключами: <ul> <li> <b>ID</b> - код цены;</li> * <li> <b>PRICE</b> - цена;</li> <li> <b>CURRENCY</b> - валюта;</li> <li> <b>CATALOG_GROUP_ID</b> - код * типа цен.</li> </ul> * * @param array $arPrices = array()[ Сайт, для которого производится вычисление. Если парамерт равен * <i>false</i>, то берется текущий сайт. * * @param string $siteID = false[ Массив купонов, которые влияют на выборку скидок. Если задано * значение <i>false</i>, то массив купонов будет взят из * <b>CCatalogDiscountCoupon::GetCoupons</b> * * @param array $arDiscountCoupons = false]]]]]] * * @return array <p>Массив вида:</p> <pre class="syntax">array( "PRICE" => * массив_параметров_минимальной_цены, "DISCOUNT_PRICE" => * минимальная_цена_в_базовой_валюте, "DISCOUNT" => * массив_параметров_первой_из_примененных_скидок_торгового_каталога, * "DISCOUNT_LIST" => * массив_скидок_действующих_на_товар_в_порядке_применения, "RESULT_PRICE" * => array( "BASE_PRICE" => полная (без скидок) цена товара, "DISCOUNT_PRICE" => * цена со скидками, "DISCOUNT" => итоговая скидка (разница между BASE_PRICE и * DISCOUNT_PRICE) "PERCENT" => итоговая скидка в процентах "CURRENCY" => валюта * результата ) )</pre> <p></p><div class="note"> <b>Примечание</b>. С версии 15.0.6 ключ * RESULT_PRICE заполняется данными и в том случае, когда использованы * обработчики события <a * href="http://dev.1c-bitrix.ru/api_help/catalog/events/ongetoptimalprice.php">OnGetOptimalPrice</a>. Параметры * заданные методами <a * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/setusedcurrency.php">CCatalogProduct::setUsedCurrency</a> * и <a * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/setpricevatincludemode.php">CCatalogProduct::setPriceVatIncludeMode</a> * при этом учитываются, параметры заданные методом <a * href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/setusediscount.php">CCatalogProduct::setUseDiscount</a> * - нет. </div> <p></p><div class="note"> <b>Обратите внимание, что</b> <i>DISCOUNT_PRICE</i> это * минимальная цена в <b>базовой валюте</b>. Чтобы перевести эту цену в * валюту товара, необходимо: <pre class="syntax">array( $baseCurrency = * CCurrency::GetBaseCurrency(); $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice['DISCOUNT_PRICE'], * $baseCurrency, $arPrice["PRICE"]["CURRENCY"]); )</pre> </div> <a name="examples"></a> * * <h4>Example</h4> * <pre> * <? * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * if (!$arPrice || count($arPrice) <= 0) * { * if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray())) * { * $quantity = $nearestQuantity; * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * } * } * echo "<pre>"; * print_r($arPrice); * echo "</pre>"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getoptimalprice.7c16046d.php * @author Bitrix */ public static function GetOptimalPrice($intProductID, $quantity = 1, $arUserGroups = array(), $renewal = "N", $arPrices = array(), $siteID = false, $arDiscountCoupons = false) { static $eventOnGetExists = null; static $eventOnResultExists = null; global $APPLICATION; if ($eventOnGetExists === true || $eventOnGetExists === null) { foreach (GetModuleEvents('catalog', 'OnGetOptimalPrice', true) as $arEvent) { $eventOnGetExists = true; $mxResult = ExecuteModuleEventEx($arEvent, array($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)); if ($mxResult !== true) { self::updateUserHandlerOptimalPrice($mxResult); return $mxResult; } } if ($eventOnGetExists === null) { $eventOnGetExists = false; } } $intProductID = (int) $intProductID; if ($intProductID <= 0) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_CATALOG_PROD_ERR_PRODUCT_ID_ABSENT"), "NO_PRODUCT_ID"); return false; } $quantity = (double) $quantity; if ($quantity <= 0) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_CATALOG_PROD_ERR_QUANTITY_ABSENT"), "NO_QUANTITY"); return false; } if (!is_array($arUserGroups) && (int) $arUserGroups . '|' == (string) $arUserGroups . '|') { $arUserGroups = array((int) $arUserGroups); } if (!is_array($arUserGroups)) { $arUserGroups = array(); } if (!in_array(2, $arUserGroups)) { $arUserGroups[] = 2; } $renewal = $renewal == 'Y' ? 'Y' : 'N'; if ($siteID === false) { $siteID = SITE_ID; } $resultCurrency = CCurrency::GetBaseCurrency(); if (empty($resultCurrency)) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_CATALOG_PROD_ERR_NO_BASE_CURRENCY"), "NO_BASE_CURRENCY"); return false; } if (self::$usedCurrency !== null) { $resultCurrency = self::$usedCurrency; } $intIBlockID = (int) CIBlockElement::GetIBlockByID($intProductID); if ($intIBlockID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_PROD_ERR_ELEMENT_ID_NOT_FOUND', array('#ID#' => $intProductID)), 'NO_ELEMENT'); return false; } if (!isset($arPrices) || !is_array($arPrices)) { $arPrices = array(); } if (empty($arPrices)) { $arPrices = array(); $dbPriceList = CPrice::GetListEx(array(), array("PRODUCT_ID" => $intProductID, "GROUP_GROUP_ID" => $arUserGroups, "GROUP_BUY" => "Y", "+<=QUANTITY_FROM" => $quantity, "+>=QUANTITY_TO" => $quantity), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY")); while ($arPriceList = $dbPriceList->Fetch()) { $arPriceList['ELEMENT_IBLOCK_ID'] = $intIBlockID; $arPrices[] = $arPriceList; } unset($arPriceList, $dbPriceList); } else { foreach ($arPrices as &$arOnePrice) { $arOnePrice['ELEMENT_IBLOCK_ID'] = $intIBlockID; } unset($arOnePrice); } if (empty($arPrices)) { return false; } $rsVAT = CCatalogProduct::GetVATInfo($intProductID); if ($arVAT = $rsVAT->Fetch()) { $arVAT['RATE'] = (double) $arVAT['RATE'] * 0.01; } else { $arVAT = array('RATE' => 0.0, 'VAT_INCLUDED' => 'N'); } unset($rsVAT); if (self::getUseDiscount()) { if ($arDiscountCoupons === false) { $arDiscountCoupons = CCatalogDiscountCoupon::GetCoupons(); } } // $boolDiscountVat = ('N' != COption::GetOptionString('catalog', 'discount_vat', 'Y')); $boolDiscountVat = true; $minPrice = false; $basePrice = false; $arMinPrice = array(); $arMinDiscounts = array(); foreach ($arPrices as &$arPriceList) { $arPriceList['VAT_RATE'] = $arVAT['RATE']; $arPriceList['VAT_INCLUDED'] = $arVAT['VAT_INCLUDED']; $dblCurrentPrice = $arPriceList['PRICE']; if ($boolDiscountVat) { if ('N' == $arPriceList['VAT_INCLUDED']) { $dblCurrentPrice *= 1 + $arPriceList['VAT_RATE']; } } else { if ('Y' == $arPriceList['VAT_INCLUDED']) { $dblCurrentPrice /= 1 + $arPriceList['VAT_RATE']; } } if ($arPriceList['CURRENCY'] != $resultCurrency) { $dblCurrentPrice = CCurrencyRates::ConvertCurrency($arPriceList['PRICE'], $arPriceList['CURRENCY'], $resultCurrency); } $dblCurrentPrice = roundEx($dblCurrentPrice, CATALOG_VALUE_PRECISION); $arDiscounts = array(); if (self::getUseDiscount()) { $arDiscounts = CCatalogDiscount::GetDiscount($intProductID, $intIBlockID, $arPriceList["CATALOG_GROUP_ID"], $arUserGroups, $renewal, $siteID, $arDiscountCoupons); } $result = CCatalogDiscount::applyDiscountList($dblCurrentPrice, $resultCurrency, $arDiscounts); if ($result === false) { return false; } if ($minPrice === false || $minPrice > $result['PRICE']) { $basePrice = $dblCurrentPrice; $minPrice = $result['PRICE']; $arMinPrice = $arPriceList; $arMinDiscounts = $result['DISCOUNT_LIST']; } } unset($arPriceList); if ($boolDiscountVat) { if (!self::$optimalPriceWithVat) { $minPrice /= 1 + $arMinPrice['VAT_RATE']; $basePrice /= 1 + $arMinPrice['VAT_RATE']; $minPrice = roundEx($minPrice, CATALOG_VALUE_PRECISION); $basePrice = roundEx($basePrice, CATALOG_VALUE_PRECISION); } } else { if (self::$optimalPriceWithVat) { $minPrice *= 1 + $arMinPrice['VAT_RATE']; $basePrice *= 1 + $arMinPrice['VAT_RATE']; $minPrice = roundEx($minPrice, CATALOG_VALUE_PRECISION); $basePrice = roundEx($basePrice, CATALOG_VALUE_PRECISION); } } $arResult = array('PRICE' => $arMinPrice, 'RESULT_PRICE' => array('BASE_PRICE' => $basePrice, 'DISCOUNT_PRICE' => $minPrice, 'DISCOUNT' => $basePrice - $minPrice, 'PERCENT' => $basePrice > 0 ? 100 * ($basePrice - $minPrice) / $basePrice : 0, 'CURRENCY' => $resultCurrency, 'VAT_RATE' => $arMinPrice['VAT_RATE'], 'VAT_INCLUDED' => self::$optimalPriceWithVat ? 'Y' : 'N'), 'DISCOUNT_PRICE' => $minPrice, 'DISCOUNT' => array(), 'DISCOUNT_LIST' => array()); if (!empty($arMinDiscounts)) { reset($arMinDiscounts); $arResult['DISCOUNT'] = current($arMinDiscounts); $arResult['DISCOUNT_LIST'] = $arMinDiscounts; } if ($eventOnResultExists === true || $eventOnResultExists === null) { foreach (GetModuleEvents('catalog', 'OnGetOptimalPriceResult', true) as $arEvent) { $eventOnResultExists = true; if (ExecuteModuleEventEx($arEvent, array(&$arResult)) === false) { return false; } } if ($eventOnResultExists === null) { $eventOnResultExists = false; } } return $arResult; }
public function recalculateBasket($arPost) { global $USER; $arRes = array(); if ($this->hideCoupon != "Y") { if (isset($arPost["coupon"]) && !empty($arPost["coupon"])) { $arRes["VALID_COUPON"] = CCatalogDiscountCoupon::SetCoupon($arPost["coupon"]); } if (!isset($arRes["VALID_COUPON"]) || (isset($arRes["VALID_COUPON"]) && $arRes["VALID_COUPON"] === false)) { CCatalogDiscountCoupon::ClearCoupon(); } } $arTmpItems = array(); $dbItems = CSaleBasket::GetList( array("PRICE" => "DESC"), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, array( "ID", "NAME", "PRODUCT_PROVIDER_CLASS", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "CURRENCY", "SUBSCRIBE", "TYPE", "SET_PARENT_ID", "NOTES" ) ); while ($arItem = $dbItems->Fetch()) { if (CSaleBasketHelper::isSetItem($arItem)) continue; $arTmpItems[] = $arItem; } if (!empty($arTmpItems) && CModule::IncludeModule("catalog")) $arTmpItems = getRatio($arTmpItems); foreach ($arTmpItems as $arItem) { $isFloatQuantity = ((isset($arItem["MEASURE_RATIO"]) && floatval($arItem["MEASURE_RATIO"]) > 0 && $arItem["MEASURE_RATIO"] != 1) || $this->quantityFloat == "Y") ? true : false; if (!isset($arPost["QUANTITY_".$arItem["ID"]]) || floatval($arPost["QUANTITY_".$arItem["ID"]]) <= 0) { $quantityTmp = ($isFloatQuantity === true) ? floatval($arItem["QUANTITY"]) : intval($arItem["QUANTITY"]); } else { $quantityTmp = ($isFloatQuantity === true) ? floatval($arPost["QUANTITY_".$arItem["ID"]]) : intval($arPost["QUANTITY_".$arItem["ID"]]); } $deleteTmp = ($arPost["DELETE_".$arItem["ID"]] == "Y") ? "Y" : "N"; $delayTmp = ($arPost["DELAY_".$arItem["ID"]] == "Y") ? "Y" : "N"; if ($arItem["CAN_BUY"] == "Y") { $res = $this->checkQuantity($arItem, $quantityTmp); if (!empty($res)) $arRes["WARNING_MESSAGE"][] = $res["ERROR"]; } if ($deleteTmp == "Y" && in_array("DELETE", $this->columns)) { if ($arItem["SUBSCRIBE"] == "Y" && is_array($_SESSION["NOTIFY_PRODUCT"][$USER->GetID()])) unset($_SESSION["NOTIFY_PRODUCT"][$USER->GetID()][$arItem["PRODUCT_ID"]]); CSaleBasket::Delete($arItem["ID"]); } elseif ($arItem["DELAY"] == "N" && $arItem["CAN_BUY"] == "Y") { unset($arFields); $arFields = array(); if (in_array("QUANTITY", $this->columns)) $arFields["QUANTITY"] = $quantityTmp; if (in_array("DELAY", $this->columns)) $arFields["DELAY"] = $delayTmp; if (count($arFields) > 0 && ($arItem["QUANTITY"] != $arFields["QUANTITY"] && in_array("QUANTITY", $this->columns) || $arItem["DELAY"] != $arFields["DELAY"] && in_array("DELAY", $this->columns)) ) CSaleBasket::Update($arItem["ID"], $arFields); } elseif ($arItem["DELAY"] == "Y" && $arItem["CAN_BUY"] == "Y") { unset($arFields); $arFields = array(); if (in_array("DELAY", $this->columns)) $arFields["DELAY"] = $delayTmp; if (count($arFields) > 0 && ($arItem["DELAY"] != $arFields["DELAY"] && in_array("DELAY", $this->columns)) ) CSaleBasket::Update($arItem["ID"], $arFields); } } return $arRes; }
public static function OrderProduct($arParams) { if (!is_set($arParams, "RENEWAL") || $arParams["RENEWAL"] != "Y") $arParams["RENEWAL"] = "N"; if (!is_set($arParams, "USER_ID") || IntVal($arParams["USER_ID"]) <= 0) $arParams["USER_ID"] = 0; if (!is_set($arParams["SITE_ID"])) $arParams["SITE_ID"] = false; if (!is_set($arParams["CHECK_QUANTITY"]) || $arParams["CHECK_QUANTITY"] != "N") $arParams["CHECK_QUANTITY"] = "Y"; global $USER; $productID = intval($arParams["PRODUCT_ID"]); $quantity = doubleval($arParams["QUANTITY"]); $renewal = (($arParams["RENEWAL"] == "Y") ? "Y" : "N"); $strSiteID = $arParams["SITE_ID"]; $intUserID = intval($arParams["USER_ID"]); if (0 > $intUserID) $intUserID = 0; $arResult = array(); static $arUserCache = array(); if (0 < $intUserID) { if (!isset($arUserCache[$intUserID])) { $by = 'ID'; $order = 'DESC'; $rsUsers = CUser::GetList($by, $order, array("ID_EQUAL_EXACT"=>$intUserID),array('FIELDS' => array('ID'))); if ($arUser = $rsUsers->Fetch()) { $arUser['ID'] = intval($arUser['ID']); $arUserCache[$arUser['ID']] = CUser::GetUserGroup($arUser['ID']); } else { $intUserID = 0; return $arResult; } } $dbIBlockElement = CIBlockElement::GetList( array(), array( "ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSION" => "N", ), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL') ); if(!($arProduct = $dbIBlockElement->GetNext())) return $arResult; if ('E' == CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], "RIGHTS_MODE")) { $arUserRights = CIBlockElementRights::GetUserOperations($productID,$intUserID); if (empty($arUserRights)) { return $arResult; } elseif (!is_array($arUserRights) || !array_key_exists('element_read',$arUserRights)) { return $arResult; } } else { if ('R' > CIBlock::GetPermission($arProduct['IBLOCK_ID'], $intUserID)) { return $arResult; } } } else { $dbIBlockElement = CIBlockElement::GetList( array(), array( "ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R", ), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL') ); if(!($arProduct = $dbIBlockElement->GetNext())) return $arResult; } $rsProducts = CCatalogProduct::GetList( array(), array('ID' => $productID), false, false, array( 'ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'BARCODE_MULTI', 'TYPE' ) ); if ($arCatalogProduct = $rsProducts->Fetch()) { $arCatalogProduct["QUANTITY"] = (double)$arCatalogProduct["QUANTITY"]; if ($arParams["CHECK_QUANTITY"] == "Y") { if ( 'Y' != $arCatalogProduct["CAN_BUY_ZERO"] && 'Y' == $arCatalogProduct["QUANTITY_TRACE"] && ($arCatalogProduct["QUANTITY"] <= 0 || $quantity > $arCatalogProduct["QUANTITY"]) ) { return $arResult; } } } else { return $arResult; } if (0 < $intUserID) { $arCoupons = CCatalogDiscountCoupon::GetCouponsByManage($intUserID); CCatalogDiscountSave::SetDiscountUserID($intUserID); } else { $arCoupons = CCatalogDiscountCoupon::GetCoupons(); } $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, (0 < $intUserID ? $arUserCache[$intUserID] : $USER->GetUserGroupArray()), $renewal, array(), (0 < $intUserID ? $strSiteID : false), $arCoupons); if (empty($arPrice)) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, (0 < $intUserID ? $arUserCache[$intUserID] : $USER->GetUserGroupArray()))) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, (0 < $intUserID ? $arUserCache[$intUserID] : $USER->GetUserGroupArray()), $renewal, array(), (0 < $intUserID ? $strSiteID : false), $arCoupons); } } if (empty($arPrice)) { if (0 < $intUserID) { CCatalogDiscountSave::ClearDiscountUserID(); } return $arResult; } $boolDiscountVat = ('N' != COption::GetOptionString('catalog', 'discount_vat', 'Y')); $currentPrice = $arPrice["PRICE"]["PRICE"]; $currentDiscount = 0.0; if ($boolDiscountVat) { if ('N' == $arPrice['PRICE']['VAT_INCLUDED']) { $currentPrice *= (1 + $arPrice['PRICE']['VAT_RATE']); $arPrice['PRICE']['VAT_INCLUDED'] = 'Y'; } } else { if ('Y' == $arPrice['PRICE']['VAT_INCLUDED']) { $currentPrice /= (1 + $arPrice['PRICE']['VAT_RATE']); $arPrice['PRICE']['VAT_INCLUDED'] = 'N'; } } $arDiscountList = array(); $arCouponList = array(); if (!empty($arPrice["DISCOUNT_LIST"])) { $dblStartPrice = $currentPrice; foreach ($arPrice["DISCOUNT_LIST"] as &$arOneDiscount) { switch ($arOneDiscount['VALUE_TYPE']) { case CCatalogDiscount::TYPE_FIX: if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) $currentDiscount = $arOneDiscount['VALUE']; else $currentDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount["VALUE"], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); $currentPrice = $currentPrice - $currentDiscount; break; case CCatalogDiscount::TYPE_PERCENT: $currentDiscount = $currentPrice*$arOneDiscount["VALUE"]/100.0; if (0 < $arOneDiscount['MAX_DISCOUNT']) { if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) $dblMaxDiscount = $arOneDiscount['MAX_DISCOUNT']; else $dblMaxDiscount = CCurrencyRates::ConvertCurrency($arOneDiscount['MAX_DISCOUNT'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]);; if ($currentDiscount > $dblMaxDiscount) $currentDiscount = $dblMaxDiscount; } $currentPrice = $currentPrice - $currentDiscount; break; case CCatalogDiscount::TYPE_SALE: if ($arOneDiscount['CURRENCY'] == $arPrice["PRICE"]["CURRENCY"]) $currentPrice = $arOneDiscount['VALUE']; else $currentPrice = CCurrencyRates::ConvertCurrency($arOneDiscount['VALUE'], $arOneDiscount["CURRENCY"], $arPrice["PRICE"]["CURRENCY"]); break; } $arOneList = array( 'ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => '', 'COUPON_TYPE' => '', 'MODULE_ID' => 'catalog', 'TYPE' => $arOneDiscount['TYPE'], 'VALUE' => $arOneDiscount['VALUE'], 'VALUE_TYPE' => $arOneDiscount['VALUE_TYPE'], 'CURRENCY' => $arOneDiscount['CURRENCY'], 'HANDLERS' => (isset($arOneDiscount['HANDLERS']) ? $arOneDiscount['HANDLERS'] : array()) ); if ($arOneDiscount['COUPON']) { $arOneList['COUPON'] = $arOneDiscount['COUPON']; $arOneList['COUPON_TYPE'] = $arOneDiscount['COUPON_ONE_TIME']; $arCouponList[] = $arOneDiscount['COUPON']; } $arDiscountList[] = $arOneList; } if (isset($arOneDiscount)) unset($arOneDiscount); $currentDiscount = $dblStartPrice - $currentPrice; } if (empty($arPrice["PRICE"]["CATALOG_GROUP_NAME"])) { if (!empty($arPrice["PRICE"]["CATALOG_GROUP_ID"])) { $rsCatGroups = CCatalogGroup::GetListEx(array(),array('ID' => $arPrice["PRICE"]["CATALOG_GROUP_ID"]),false,false,array('ID','NAME','NAME_LANG')); if ($arCatGroup = $rsCatGroups->Fetch()) { $arPrice["PRICE"]["CATALOG_GROUP_NAME"] = (!empty($arCatGroup['NAME_LANG']) ? $arCatGroup['NAME_LANG'] : $arCatGroup['NAME']); } } } if (!$boolDiscountVat) { $currentPrice *= (1 + $arPrice['PRICE']['VAT_RATE']); $currentDiscount *= (1 + $arPrice['PRICE']['VAT_RATE']); $arPrice['PRICE']['VAT_INCLUDED'] = 'Y'; } $arResult = array( "PRODUCT_PRICE_ID" => $arPrice["PRICE"]["ID"], "PRICE" => $currentPrice, "VAT_RATE" => $arPrice['PRICE']['VAT_RATE'], "CURRENCY" => $arPrice["PRICE"]["CURRENCY"], "WEIGHT" => floatval($arCatalogProduct["WEIGHT"]), "DIMENSIONS" => serialize(array( "WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"] )), "NAME" => $arProduct["~NAME"], "CAN_BUY" => "Y", "DETAIL_PAGE_URL" => $arProduct['~DETAIL_PAGE_URL'], "NOTES" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"], "DISCOUNT_PRICE" => $currentDiscount, "TYPE" => ($arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET) ? CCatalogProductSet::TYPE_SET : NULL, "DISCOUNT_VALUE" => 0, "DISCOUNT_NAME" => "", "DISCOUNT_COUPON" => "", "DISCOUNT_LIST" => array() ); if ($arParams["CHECK_QUANTITY"] == "Y") $arResult["QUANTITY"] = $quantity; else $arResult["QUANTITY"] = $arParams["QUANTITY"]; if (!empty($arPrice["DISCOUNT_LIST"])) { $arResult['DISCOUNT_LIST'] = $arDiscountList; $arResult["DISCOUNT_VALUE"] = (100*$currentDiscount/($currentDiscount+$currentPrice))."%"; $arResult["DISCOUNT_NAME"] = "[".$arPrice["DISCOUNT"]["ID"]."] ".$arPrice["DISCOUNT"]["NAME"]; if (!empty($arPrice["DISCOUNT"]["COUPON"])) { $arResult["DISCOUNT_COUPON"] = $arPrice["DISCOUNT"]["COUPON"]; } if (!empty($arCouponList)) { $mxApply = CCatalogDiscountCoupon::CouponApply($intUserID, $arCouponList); } } if (0 < $intUserID) { CCatalogDiscountSave::ClearDiscountUserID(); } return $arResult; }
{ $bTmpUserCreated = true; if (isset($USER)) { $USER_TMP = $USER; unset($USER); } $USER = new CUser(); } CCatalogDiscountSave::Disable(); CCatalogDiscountCoupon::ClearCoupon(); if ($USER->IsAuthorized()) { CCatalogDiscountCoupon::ClearCouponsByManage($USER->GetID()); } function yandex_replace_special($arg) { if (in_array($arg[0], array(""", "&", "<", ">"))) return $arg[0]; else return " "; } function yandex_text2xml($text, $bHSC = false, $bDblQuote = false) { global $APPLICATION; $bHSC = (true == $bHSC ? true : false);
if (!in_array('ID', $arSelectFields)) { $arSelectFields[] = 'ID'; } $arSelectFields = array_values($arSelectFields); $arSelectFieldsMap = array_fill_keys($arSelectFields, true); $arCouponType = CCatalogDiscountCoupon::GetCoupontTypes(true); $arUserList = array(); $arUserID = array(); $strNameFormat = CSite::GetNameFormat(true); if (!(false == B_ADMIN_SUBCOUPONS_LIST && $bCopy)) { if (array_key_exists("mode", $_REQUEST) && $_REQUEST["mode"] == "excel") { $arNavParams = false; } else { $arNavParams = array("nPageSize" => CAdminSubResult::GetNavSize($sTableID, 20, $lAdmin->GetListUrl(true))); } $dbResultList = CCatalogDiscountCoupon::GetList(array($by => $order), $arFilter, false, $arNavParams, $arSelectFields); $dbResultList = new CAdminSubResult($dbResultList, $sTableID, $lAdmin->GetListUrl(true)); $dbResultList->NavStart(); $lAdmin->NavText($dbResultList->GetNavPrint(htmlspecialcharsbx(GetMessage("DSC_NAV")))); $arRows = array(); while ($arCouponDiscount = $dbResultList->Fetch()) { $edit_url = '/bitrix/admin/cat_subcoupon_edit.php?ID=' . $arCouponDiscount['ID'] . '&DISCOUNT_ID=' . $intDiscountID . '&lang=' . LANGUAGE_ID . '&TMP_ID=' . $strSubTMP_ID; $arCouponDiscount['ID'] = intval($arCouponDiscount['ID']); if (array_key_exists('CREATED_BY', $arSelectFieldsMap)) { $arCouponDiscount['CREATED_BY'] = intval($arCouponDiscount['CREATED_BY']); if (0 < $arCouponDiscount['CREATED_BY']) { $arUserID[$arCouponDiscount['CREATED_BY']] = true; } } if (array_key_exists('MODIFIED_BY', $arSelectFieldsMap)) { $arCouponDiscount['MODIFIED_BY'] = intval($arCouponDiscount['MODIFIED_BY']);
$arResult['STATUS'] = 'ERROR'; $arResult['MESSAGE'] = Loc::getMessage('BT_CAT_TOOLS_GEN_CPN_ERR_AUTH'); $boolFlag = false; } } if ($boolFlag) { if (!check_bitrix_sessid()) { $arResult['STATUS'] = 'ERROR'; $arResult['MESSAGE'] = Loc::getMessage('BT_CAT_TOOLS_GEN_CPN_ERR_SESSION'); $boolFlag = false; } } if ($boolFlag) { if (!$USER->CanDoOperation('catalog_discount')) { $arResult['STATUS'] = 'ERROR'; $arResult['MESSAGE'] = Loc::getMessage('BT_CAT_TOOLS_GEN_CPN_ERR_RIGHTS'); $boolFlag = false; } } if ($boolFlag) { if (Loader::includeModule('catalog')) { do { $strCoupon = substr(CatalogGenerateCoupon(), 0, 32); $boolCheck = !CCatalogDiscountCoupon::IsExistCoupon($strCoupon); } while (!$boolCheck); $arResult['RESULT'] = $strCoupon; } else { $arResult['STATUS'] = 'ERROR'; } } echo CUtil::PhpToJSObject($arResult);
$filterDiscount = array(); if ($ID > 0) $filterDiscount = array('ID' => $arCoupon['DISCOUNT_ID']); $arDiscountList = array(); $rsDiscounts = CCatalogDiscount::GetList( array("NAME" => "ASC"), $filterDiscount, false, false, array("ID", "SITE_ID", "NAME") ); while ($arDiscount = $rsDiscounts->Fetch()) { $arDiscountList[$arDiscount['ID']] = "[".$arDiscount["ID"]."] ".$arDiscount["NAME"]." (".$arDiscount["SITE_ID"].")"; } $arTypeList = CCatalogDiscountCoupon::GetCoupontTypes(true); $tabControl->BeginPrologContent(); $tabControl->EndPrologContent(); $tabControl->BeginEpilogContent(); echo GetFilterHiddens("filter_");?> <input type="hidden" name="Update" value="Y"> <input type="hidden" name="lang" value="<? echo LANGUAGE_ID; ?>"> <input type="hidden" name="ID" value="<? echo $ID; ?>"> <? echo bitrix_sessid_post(); if (!empty($return_url)) { ?><input type="hidden" name="return_url" value="<? echo htmlspecialcharsbx($return_url); ?>"><? }
/** * @param array $arParams * @return array|false */ public static function OrderProduct($arParams) { $arParams['RENEWAL'] = (isset($arParams['RENEWAL']) && $arParams['RENEWAL'] == 'Y' ? 'Y' : 'N'); $arParams['CHECK_QUANTITY'] = (isset($arParams['CHECK_QUANTITY']) && $arParams['CHECK_QUANTITY'] == 'N' ? 'N' : 'Y'); $arParams['CHECK_DISCOUNT'] = (isset($arParams['CHECK_DISCOUNT']) && $arParams['CHECK_DISCOUNT'] == 'N' ? 'N' : 'Y'); $arParams['USER_ID'] = (isset($arParams['USER_ID']) ? (int)$arParams['USER_ID'] : 0); if ($arParams['USER_ID'] < 0) $arParams['USER_ID'] = 0; $arParams['SITE_ID'] = (isset($arParams['SITE_ID']) ? $arParams['SITE_ID'] : false); $strSiteID = $arParams['SITE_ID']; $arParams['BASKET_ID'] = (string)(isset($arParams['BASKET_ID']) ? $arParams['BASKET_ID'] : '0'); if (isset($arParams['CURRENCY'])) $arParams['CURRENCY'] = CCurrency::checkCurrencyID($arParams['CURRENCY']); if ($arParams['CURRENCY'] === false) $arParams['CURRENCY'] = CSaleLang::GetLangCurrency($strSiteID ? $strSiteID : SITE_ID); global $USER; $productID = (int)$arParams['PRODUCT_ID']; $quantity = (float)$arParams['QUANTITY']; $renewal = $arParams['RENEWAL']; $intUserID = (int)$arParams['USER_ID']; $arResult = array(); static $arUserCache = array(); if (0 < $intUserID) { if (!isset($arUserCache[$intUserID])) { $by = 'ID'; $order = 'DESC'; $rsUsers = CUser::GetList($by, $order, array("ID_EQUAL_EXACT"=>$intUserID),array('FIELDS' => array('ID'))); if ($arUser = $rsUsers->Fetch()) { $arUser['ID'] = intval($arUser['ID']); $arUserCache[$arUser['ID']] = CUser::GetUserGroup($arUser['ID']); } else { $intUserID = 0; return $arResult; } } $dbIBlockElement = CIBlockElement::GetList( array(), array( "ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSION" => "N", ), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL') ); if(!($arProduct = $dbIBlockElement->GetNext())) return $arResult; if ('E' == CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], "RIGHTS_MODE")) { $arUserRights = CIBlockElementRights::GetUserOperations($productID,$intUserID); if (empty($arUserRights)) { return $arResult; } elseif (!is_array($arUserRights) || !array_key_exists('element_read',$arUserRights)) { return $arResult; } } else { if ('R' > CIBlock::GetPermission($arProduct['IBLOCK_ID'], $intUserID)) { return $arResult; } } } else { $dbIBlockElement = CIBlockElement::GetList( array(), array( "ID" => $productID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R", ), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL') ); if(!($arProduct = $dbIBlockElement->GetNext())) return $arResult; } $rsProducts = CCatalogProduct::GetList( array(), array('ID' => $productID), false, false, array( 'ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'BARCODE_MULTI', 'TYPE' ) ); if ($arCatalogProduct = $rsProducts->Fetch()) { $arCatalogProduct["QUANTITY"] = (double)$arCatalogProduct["QUANTITY"]; if ($arParams["CHECK_QUANTITY"] == "Y") { if ( 'Y' != $arCatalogProduct["CAN_BUY_ZERO"] && 'Y' == $arCatalogProduct["QUANTITY_TRACE"] && ($arCatalogProduct["QUANTITY"] <= 0 || $quantity > $arCatalogProduct["QUANTITY"]) ) { return $arResult; } } } else { return $arResult; } if (0 < $intUserID) { $arCoupons = CCatalogDiscountCoupon::GetCouponsByManage($intUserID); CCatalogDiscountSave::SetDiscountUserID($intUserID); } else { $arCoupons = CCatalogDiscountCoupon::GetCoupons(); } $userGroups = ($intUserID > 0 ? $arUserCache[$intUserID] : $USER->GetUserGroupArray()); $currentVatMode = CCatalogProduct::getPriceVatIncludeMode(); $currentUseDiscount = CCatalogProduct::getUseDiscount(); CCatalogProduct::setUseDiscount($arParams['CHECK_DISCOUNT'] == 'Y'); CCatalogProduct::setPriceVatIncludeMode(true); CCatalogProduct::setUsedCurrency($arParams['CURRENCY']); $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $renewal, array(), (0 < $intUserID ? $strSiteID : false), $arCoupons); if (empty($arPrice)) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $userGroups)) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $renewal, array(), (0 < $intUserID ? $strSiteID : false), $arCoupons); } } CCatalogProduct::clearUsedCurrency(); CCatalogProduct::setPriceVatIncludeMode($currentVatMode); CCatalogProduct::setUseDiscount($currentUseDiscount); unset($userGroups, $currentUseDiscount, $currentVatMode); if (0 < $intUserID) { CCatalogDiscountSave::ClearDiscountUserID(); } if (empty($arPrice)) { return $arResult; } $arDiscountList = array(); $arCouponList = array(); if (!empty($arPrice["DISCOUNT_LIST"])) { foreach ($arPrice["DISCOUNT_LIST"] as &$arOneDiscount) { $arOneList = array( 'ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => '', 'COUPON_TYPE' => '', 'MODULE_ID' => (isset($oneDiscount['MODULE_ID']) ? $oneDiscount['MODULE_ID'] : 'catalog'), 'TYPE' => $arOneDiscount['TYPE'], 'VALUE' => $arOneDiscount['VALUE'], 'VALUE_TYPE' => $arOneDiscount['VALUE_TYPE'], 'CURRENCY' => $arOneDiscount['CURRENCY'], 'HANDLERS' => (isset($arOneDiscount['HANDLERS']) ? $arOneDiscount['HANDLERS'] : array()) ); if ($arOneDiscount['COUPON']) { $arOneList['COUPON'] = $arOneDiscount['COUPON']; $arOneList['COUPON_TYPE'] = $arOneDiscount['COUPON_ONE_TIME']; $arCouponList[] = $arOneDiscount['COUPON']; } $arDiscountList[] = $arOneList; } unset($arOneList, $arOneDiscount); } if (empty($arPrice["PRICE"]["CATALOG_GROUP_NAME"])) { if (!empty($arPrice["PRICE"]["CATALOG_GROUP_ID"])) { $rsCatGroups = CCatalogGroup::GetListEx(array(),array('ID' => $arPrice["PRICE"]["CATALOG_GROUP_ID"]),false,false,array('ID','NAME','NAME_LANG')); if ($arCatGroup = $rsCatGroups->Fetch()) { $arPrice["PRICE"]["CATALOG_GROUP_NAME"] = (!empty($arCatGroup['NAME_LANG']) ? $arCatGroup['NAME_LANG'] : $arCatGroup['NAME']); } } } $arResult = array( "PRODUCT_PRICE_ID" => $arPrice["PRICE"]["ID"], 'BASE_PRICE' => $arPrice['RESULT_PRICE']['BASE_PRICE'], "PRICE" => $arPrice['RESULT_PRICE']['DISCOUNT_PRICE'], "VAT_RATE" => $arPrice['PRICE']['VAT_RATE'], "CURRENCY" => $arPrice['RESULT_PRICE']['CURRENCY'], "WEIGHT" => (float)$arCatalogProduct["WEIGHT"], "DIMENSIONS" => serialize(array( "WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"] )), "NAME" => $arProduct["~NAME"], "CAN_BUY" => "Y", "DETAIL_PAGE_URL" => $arProduct['~DETAIL_PAGE_URL'], "NOTES" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"], "DISCOUNT_PRICE" => $arPrice['RESULT_PRICE']['DISCOUNT'], "TYPE" => ($arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET) ? CCatalogProductSet::TYPE_SET : NULL, "DISCOUNT_VALUE" => ($arPrice['RESULT_PRICE']['PERCENT'] > 0 ? $arPrice['RESULT_PRICE']['PERCENT'].'%' : 0), "DISCOUNT_NAME" => "", "DISCOUNT_COUPON" => "", "DISCOUNT_LIST" => array() ); if ($arParams["CHECK_QUANTITY"] == "Y") $arResult["QUANTITY"] = $quantity; else $arResult["QUANTITY"] = $arParams["QUANTITY"]; if (!empty($arPrice["DISCOUNT_LIST"])) { $arResult['DISCOUNT_LIST'] = $arDiscountList; $arResult["DISCOUNT_NAME"] = "[".$arPrice["DISCOUNT"]["ID"]."] ".$arPrice["DISCOUNT"]["NAME"]; if (!empty($arPrice["DISCOUNT"]["COUPON"])) { $arResult["DISCOUNT_COUPON"] = $arPrice["DISCOUNT"]["COUPON"]; } if (!empty($arCouponList)) { $mxApply = CCatalogDiscountCoupon::CouponApply($intUserID, $arCouponList); } } return $arResult; }
/** * <p>Метод возвращает параметры наименьшей цены товара productID в количестве quantity для посетителя, входящего в группы пользователей arUserGroups.</p> * * * * * @param int $productID Код товара. * * * * @param $int Приобретаемое количество. * * * * @param quantit $y = 1[ массив групп, которым принадлежит пользователь. Для текущего * пользователя он возвращается методом $USER->GetUserGroupArray() * * * * @param array $arUserGroups = array()[ "Y", если вычисляется для продления товара (продажа контента), "N" в * остальных случаях. * * * * @param string $renewal = "N"[ Массив цен. Если он установлен, то пересчет идет не по ценам из * базы данных, а по ценам из этого массива. Представляет собой * массив ассоциативных массивов с ключами: <ul> <li> <b>ID</b> - код цены;</li> * <li> <b>PRICE</b> - цена;</li> <li> <b>CURRENCY</b> - валюта;</li> <li> <b>CATALOG_GROUP_ID</b> - код * типа цен.</li> </ul> * * * * @param array $arPrices = array()[ Сайт, для которого производится вычисление. Если парамерт равен * <i>false</i>, то берется текущий сайт. * * * * @param string $siteID = false]]]]] * * * * @return array <p>Массив вида:</p><pre class="syntax">array( "PRICE" => * массив_параметров_минимальной_цены, "DISCOUNT_PRICE" => * минимальная_цена_в_базовой_валюте, "DISCOUNT" => * массив_параметров_максимальной_доступной_скидки )</pre><p><b>Обратите * внимание, что</b> <i>DISCOUNT_PRICE</i> это минимальная цена в <b>базовой * валюте</b>. Чтобы перевести эту цену в валюту товара, * необходимо:</p><pre class="syntax">array( $baseCurrency = CCurrency::GetBaseCurrency(); * $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice['DISCOUNT_PRICE'], $baseCurrency, * $arPrice["PRICE"]["CURRENCY"]); )</pre><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * if (!$arPrice || count($arPrice) <= 0) * { * if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray())) * { * $quantity = $nearestQuantity; * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * } * } * echo "<pre>"; * print_r($arPrice); * echo "</pre>"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getoptimalprice.7c16046d.php * @author Bitrix */ public static function GetOptimalPrice($intProductID, $quantity = 1, $arUserGroups = array(), $renewal = "N", $arPrices = array(), $siteID = false, $arDiscountCoupons = false) { global $APPLICATION; $mxResult = true; foreach (GetModuleEvents("catalog", "OnGetOptimalPrice", true) as $arEvent) { $mxResult = ExecuteModuleEventEx($arEvent, array($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)); if (true !== $mxResult) return $mxResult; } $intProductID = intval($intProductID); if (0 >= $intProductID) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_PRODUCT_ID_ABSENT"), "NO_PRODUCT_ID"); return false; } $quantity = doubleval($quantity); if (0 >= $quantity) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_QUANTITY_ABSENT"), "NO_QUANTITY"); return false; } if (!is_array($arUserGroups) && intval($arUserGroups)."|" == $arUserGroups."|") $arUserGroups = array(intval($arUserGroups)); if (!is_array($arUserGroups)) $arUserGroups = array(); if (!in_array(2, $arUserGroups)) $arUserGroups[] = 2; $rsVAT = CCatalogProduct::GetVATInfo($intProductID); if ($arVAT = $rsVAT->Fetch()) { $arVAT['RATE'] = doubleval($arVAT['RATE'] * 0.01); } else { $arVAT = array('RATE' => 0.0, 'VAT_INCLUDED' => 'N'); } $renewal = (($renewal == "N") ? "N" : "Y"); if (false === $siteID) $siteID = SITE_ID; if (false === $arDiscountCoupons) $arDiscountCoupons = CCatalogDiscountCoupon::GetCoupons(); $strBaseCurrency = CCurrency::GetBaseCurrency(); if (empty($strBaseCurrency)) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_NO_BASE_CURRENCY"), "NO_BASE_CURRENCY"); return false; } $intIBlockID = intval(CIBlockElement::GetIBlockByID($intProductID)); if (0 >= $intIBlockID) { $APPLICATION->ThrowException(str_replace("#ID#", $intProductID, GetMessage('BT_MOD_CATALOG_PROD_ERR_ELEMENT_ID_NOT_FOUND')), "NO_ELEMENT"); return false; } if (!isset($arPrices) || !is_array($arPrices)) $arPrices = array(); if (empty($arPrices)) { $arPrices = array(); $dbPriceList = CPrice::GetListEx( array(), array( "PRODUCT_ID" => $intProductID, "GROUP_GROUP_ID" => $arUserGroups, "GROUP_BUY" => "Y", "+<=QUANTITY_FROM" => $quantity, "+>=QUANTITY_TO" => $quantity ), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY") ); while ($arPriceList = $dbPriceList->Fetch()) { $arPriceList['ELEMENT_IBLOCK_ID'] = $intIBlockID; $arPrices[] = $arPriceList; } } else { foreach ($arPrices as &$arOnePrice) { $arOnePrice['ELEMENT_IBLOCK_ID'] = $intIBlockID; } if (isset($arOnePrice)) unset($arOnePrice); } if (empty($arPrices)) return false; // $boolDiscountVat = ('N' != COption::GetOptionString('catalog', 'discount_vat', 'Y')); $boolDiscountVat = true; $strDiscSaveApply = COption::GetOptionString('catalog', 'discsave_apply', 'R'); $dblMinPrice = -1; $arMinPrice = array(); $arMinDiscounts = array(); foreach ($arPrices as &$arPriceList) { $arPriceList['VAT_RATE'] = $arVAT['RATE']; $arPriceList['VAT_INCLUDED'] = $arVAT['VAT_INCLUDED']; $arPriceList['ORIG_VAT_INCLUDED'] = $arPriceList['VAT_INCLUDED']; if ($boolDiscountVat) { if ('N' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] *= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'Y'; } } else { if ('Y' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] /= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'N'; } } if ($arPriceList["CURRENCY"] == $strBaseCurrency) $dblCurrentPrice = $arPriceList["PRICE"]; else $dblCurrentPrice = CCurrencyRates::ConvertCurrency($arPriceList["PRICE"], $arPriceList["CURRENCY"], $strBaseCurrency); $arDiscounts = CCatalogDiscount::GetDiscount($intProductID, $intIBlockID, $arPriceList["CATALOG_GROUP_ID"], $arUserGroups, $renewal, $siteID, $arDiscountCoupons); $arDiscSave = array(); $arPriceDiscount = array(); $arResultPrice = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscountApply = array(); if (!empty($arDiscounts)) { CCatalogProduct::__PrimaryDiscountFilter($arDiscounts, $arPriceDiscount, $arDiscSave, $arResultPrice); if (!empty($arPriceDiscount)) { foreach ($arPriceDiscount as &$arOnePriority) { $boolResultPriority = CCatalogProduct::__CalcOnePriority($arOnePriority, $arDiscountApply, $arResultPrice); if (!$boolResultPriority) { return false; } else { if (isset($arResultPrice['LAST_DISCOUNT']) && 'Y' == $arResultPrice['LAST_DISCOUNT']) break; } } if (isset($arOnePriority)) unset($arOnePriority); } if (!empty($arDiscSave)) { switch($strDiscSaveApply) { case 'R': $arDiscSaveResult = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscSaveApply = array(); $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscSaveApply, $arDiscSaveResult); if (!$boolResultDiscSave) { return false; } else { if ($arDiscSaveResult['PRICE'] < $arResultPrice['PRICE']) { $arResultPrice = $arDiscSaveResult; $arDiscountApply = $arDiscSaveApply; } } break; case 'A': $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } break; case 'D': if (empty($arDiscountApply)) { $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } } break; } } } if (-1 == $dblMinPrice || $dblMinPrice > $arResultPrice['PRICE']) { $dblMinPrice = $arResultPrice['PRICE']; $arMinPrice = $arPriceList; $arMinDiscounts = $arDiscountApply; } } if (isset($arPriceList)) unset($arPriceList); if ($boolDiscountVat) { if ('N' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] /= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } else { if ('Y' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] *= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } unset($arMinPrice['ORIG_VAT_INCLUDED']); $dblMinPrice = roundEx($dblMinPrice, CATALOG_VALUE_PRECISION); $arResult = array( 'PRICE' => $arMinPrice, 'DISCOUNT_PRICE' => $dblMinPrice, 'DISCOUNT' => array(), 'DISCOUNT_LIST' => array(), ); if (!empty($arMinDiscounts)) { reset($arMinDiscounts); $arResult['DISCOUNT'] = current($arMinDiscounts); $arResult['DISCOUNT_LIST'] = $arMinDiscounts; } foreach (GetModuleEvents("catalog", "OnGetOptimalPriceResult", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$arResult))===false) return false; } return $arResult; }
unset($arOneItem); } $arResult["ITEMS"]["AnDelCanBuy"] = $arOrder['BASKET_ITEMS']; //$DISCOUNT_PRICE_ALL += $arResult["DISCOUNT_PRICE"]; $arResult["allSum"] = $allSum; $arResult["allWeight"] = $allWeight; $arResult["allWeight_FORMATED"] = roundEx(DoubleVal($allWeight / $arParams["WEIGHT_KOEF"]), SALE_VALUE_PRECISION) . " " . $arParams["WEIGHT_UNIT"]; $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["allNOVATSum_FORMATED"] = SaleFormatCurrency(DoubleVal($arResult["allSum"] - $allVATSum), $allCurrency); } if ($arParams["HIDE_COUPON"] != "Y") { $arCoupons = CCatalogDiscountCoupon::GetCoupons(); } if (count($arCoupons) > 0) { $arResult["COUPON"] = htmlspecialcharsbx($arCoupons[0]); } if (count($arBasketItems) <= 0) { $arResult["ERROR_MESSAGE"] = GetMessage("SALE_EMPTY_BASKET"); } $arResult["DISCOUNT_PRICE_ALL"] = $DISCOUNT_PRICE_ALL; $arResult["DISCOUNT_PRICE_ALL_FORMATED"] = SaleFormatCurrency($DISCOUNT_PRICE_ALL, $allCurrency); if (strlen($_REQUEST["BasketRefresh"]) > 0 || strlen($_REQUEST["action"]) > 0) { unset($_REQUEST["BasketRefresh"]); unset($_REQUEST["BasketOrder"]); $APPLICATION->RestartBuffer(); $data = array(); $data["price"] = $arResult["allSum_FORMATED"];
public static function OnSetCouponList($intUserID, $arCoupons, $arModules) { global $USER; $boolResult = false; if (empty($arModules) || is_array($arModules) && in_array('catalog', $arModules)) { if (!empty($arCoupons)) { if (!is_array($arCoupons)) { $arCoupons = array($arCoupons); } $intUserID = intval($intUserID); if (0 < $intUserID) { $boolCurrentUser = $USER->IsAuthorized() && $intUserID == $USER->GetID(); if (!isset($_SESSION["CATALOG_MANAGE_COUPONS"]) || !is_array($_SESSION["CATALOG_MANAGE_COUPONS"])) { $_SESSION["CATALOG_MANAGE_COUPONS"] = array(); } if (!isset($_SESSION["CATALOG_MANAGE_COUPONS"][$intUserID]) || !is_array($_SESSION["CATALOG_MANAGE_COUPONS"][$intUserID])) { $_SESSION["CATALOG_MANAGE_COUPONS"][$intUserID] = array(); } if ($boolCurrentUser) { if (!isset($_SESSION["CATALOG_USER_COUPONS"]) || !is_array($_SESSION["CATALOG_USER_COUPONS"])) { $_SESSION["CATALOG_USER_COUPONS"] = array(); } } foreach ($arCoupons as &$strOneCoupon) { $strOneCoupon = trim($strOneCoupon); if (empty($strOneCoupon)) { continue; } if (in_array($strOneCoupon, $_SESSION["CATALOG_MANAGE_COUPONS"][$intUserID]) && !($boolCurrentUser && !in_array($strOneCoupon, $_SESSION["CATALOG_USER_COUPONS"]))) { continue; } $rsCoupons = CCatalogDiscountCoupon::GetList(array(), array("COUPON" => $strOneCoupon, "ACTIVE" => "Y"), false, false, array('ID')); if ($arCoupon = $rsCoupons->Fetch()) { if (!in_array($strOneCoupon, $_SESSION["CATALOG_MANAGE_COUPONS"][$intUserID])) { $_SESSION["CATALOG_MANAGE_COUPONS"][$intUserID][] = $strOneCoupon; } $boolResult = true; if ($boolCurrentUser) { if (!in_array($strOneCoupon, $_SESSION["CATALOG_USER_COUPONS"])) { $_SESSION["CATALOG_USER_COUPONS"][] = $strOneCoupon; } } } } if (isset($strOneCoupon)) { unset($strOneCoupon); } } elseif (0 == $intUserID && !$USER->IsAuthorized()) { if (!isset($_SESSION["CATALOG_USER_COUPONS"]) || !is_array($_SESSION["CATALOG_USER_COUPONS"])) { $_SESSION["CATALOG_USER_COUPONS"] = array(); } foreach ($arCoupons as &$strOneCoupon) { $strOneCoupon = trim($strOneCoupon); if (empty($strOneCoupon) || in_array($strOneCoupon, $_SESSION["CATALOG_USER_COUPONS"])) { continue; } $rsCoupons = CCatalogDiscountCoupon::GetList(array(), array("COUPON" => $strOneCoupon, "ACTIVE" => "Y"), false, false, array('ID')); if ($arCoupon = $rsCoupons->Fetch()) { if (!in_array($strOneCoupon, $_SESSION["CATALOG_USER_COUPONS"])) { $_SESSION["CATALOG_USER_COUPONS"][] = $strOneCoupon; } $boolResult = true; } } if (isset($strOneCoupon)) { unset($strOneCoupon); } } } } return $boolResult; }
$errorMessage .= (0 < $ID ? str_replace('#ID#', $ID, GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_UPDATE')) : GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_ADD'))."<br>"; $bVarsFromForm = true; $DB->Rollback(); } else { $DB->Commit(); if ($boolCouponAdd) { for ($i = 0; $i < $arCouponFields['COUPON_COUNT']; $i++) { $CID = CCatalogDiscountCoupon::Add( array( "DISCOUNT_ID" => $ID, "ACTIVE" => "Y", "ONE_TIME" => $arCouponFields['COUPON_TYPE'], "COUPON" => CatalogGenerateCoupon(), "DATE_APPLY" => false ) ); $cRes = ($CID > 0); if (!$cRes) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString()."<br>"; else $errorMessage .= GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_COUPON_ADD')."<br>"; $bVarsFromForm = true; } } }
$APPLICATION->SetPageProperty("keywords", "«Arteva Home» SALE"); $APPLICATION->SetPageProperty("description", "SALE. «Arteva Home»"); $APPLICATION->SetTitle("SALE");?> <? CModule::IncludeModule("catalog"); // $pos = strripos($_SERVER['HTTP_REFERER'], "bigbuzzy.ru"); // if ($pos === false) { // } else { if( empty($_COOKIE["bigbuzzy"]) || !isset($_COOKIE["bigbuzzy"])) { setCookie('bigbuzzy', "Y", time() + 60 * 24 * 3600, '/', 'www.arteva.ru'); CCatalogDiscountCoupon::SetCoupon("bigbuzzy"); ?> <script> document.location="http://www.arteva.ru/catalog/salebb/"; </script> <? // LocalRedirect("http://www.arteva.ru/catalog/salebb/"); } $GLOBALS["arrFilterSectionSale"] = array( // ">=catalog_PRICE_1" => $_REQUEST["priceMin"], // "<=catalog_PRICE_1" => $_REQUEST["priceMax"], ">=catalog_QUANTITY" => 1, // "!PROPERTY_SALE" => 1
$APPLICATION->SetTitle(str_replace("#ID#", $ID, GetMessage("DSC_TITLE_UPDATE"))); } else { if (!$boolMulti) { $APPLICATION->SetTitle(GetMessage("DSC_TITLE_ADD")); } else { $APPLICATION->SetTitle(GetMessage("DSC_TITLE_ADD_MULTI")); } } require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $tabControl = new CAdminSubForm("subcoupons_edit", $aTabs, false, true, $arListUrl, false); $tabControl->SetShowSettings(false); if (!$boolMulti) { $arDefaultValues = array('DISCOUNT_ID' => $intDiscountID, 'ACTIVE' => 'Y', 'ONE_TIME' => 'Y', 'COUPON' => '', 'DATE_APPLY' => '', 'DESCRIPTION' => ''); $arSelect = array_merge(array('ID'), array_keys($arDefaultValues)); $arCoupon = array(); $rsCoupons = CCatalogDiscountCoupon::GetList(array(), array("ID" => $ID), false, false, $arSelect); if (!($arCoupon = $rsCoupons->Fetch())) { $ID = 0; $arCoupon = $arDefaultValues; } if ($bVarsFromForm) { $arCoupon = $arFields; } CAdminMessage::ShowMessage($errorMessage); $tabControl->BeginPrologContent(); $tabControl->EndPrologContent(); $tabControl->BeginEpilogContent(); echo GetFilterHiddens("filter_"); ?> <input type="hidden" name="Update" value="Y"> <input type="hidden" name="lang" value="<?php