private static function getCatalogPrices() { if (!isset(self::$catalogPriceCache)) { self::$catalogPriceCache = array(); if (self::$catalogIncluded === null) { self::$catalogIncluded = Loader::includeModule('catalog'); } if (self::$catalogIncluded) { $rsPrice = CCatalogGroup::GetListEx(array("SORT" => "ASC"), array(), false, false, array("ID", "NAME")); while ($price = $rsPrice->Fetch()) { self::$catalogPriceCache[] = $price; } } } return self::$catalogPriceCache; }
protected function getPrices() { if ($this->arPrices === null) { $this->arPrices = array(); $rsPrice = \CCatalogGroup::GetListEx(array("SORT" => "ASC"), array(), false, false, array("ID", "NAME", "NAME_LANG", "BASE")); while ($price = $rsPrice->Fetch()) { $this->arPrices[] = $price; } } return $this->arPrices; }
$dbResultList = new CAdminResult($dbResultList, $sTableID); $dbResultList->NavStart(); $lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("sale_prod_search_nav"))); $balanceTitle = $storeFromId > 0 ? GetMessage("SOPS_BALANCE") : GetMessage("SOPS_BALANCE2"); $arHeaders = array(array("id" => "ID", "content" => "ID", "sort" => "id", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("SOPS_ACTIVE"), "sort" => "ACTIVE", "default" => true), array("id" => "DETAIL_PICTURE", "default" => true, "content" => GetMessage("SPS_FIELD_DETAIL_PICTURE"), "align" => "center"), array("id" => "NAME", "content" => GetMessage("SPS_NAME"), "sort" => "name", "default" => true), array("id" => "QUANTITY", "content" => GetMessage("SOPS_QUANTITY"), "default" => true), array("id" => "BALANCE", "content" => $balanceTitle, "sort" => "", "default" => true, "align" => "right")); $arHeaders[] = array("id" => "CODE", "content" => GetMessage("SPS_FIELD_CODE"), "sort" => "code"); $arHeaders[] = array("id" => "EXTERNAL_ID", "content" => GetMessage("SPS_FIELD_XML_ID"), "sort" => "external_id"); $arHeaders[] = array("id" => "SHOW_COUNTER", "content" => GetMessage("SPS_FIELD_SHOW_COUNTER"), "sort" => "show_counter", "align" => "right"); $arHeaders[] = array("id" => "SHOW_COUNTER_START", "content" => GetMessage("SPS_FIELD_SHOW_COUNTER_START"), "sort" => "show_counter_start", "align" => "right"); $arHeaders[] = array("id" => "PREVIEW_PICTURE", "content" => GetMessage("SPS_FIELD_PREVIEW_PICTURE"), "align" => "right"); $arHeaders[] = array("id" => "PREVIEW_TEXT", "content" => GetMessage("SPS_FIELD_PREVIEW_TEXT")); $arHeaders[] = array("id" => "DETAIL_TEXT", "content" => GetMessage("SPS_FIELD_DETAIL_TEXT")); foreach ($arProps as $prop) { $arHeaders[] = array("id" => "PROPERTY_" . $prop['ID'], "content" => $prop['NAME'], "align" => $prop["PROPERTY_TYPE"] == 'N' ? "right" : "left", "sort" => $prop["MULTIPLE"] != 'Y' ? "PROPERTY_" . $prop['ID'] : ""); } $rsPrice = CCatalogGroup::GetListEx(array("SORT" => "ASC"), array(), false, false, array("ID", "NAME", "NAME_LANG", "BASE")); while ($price = $rsPrice->Fetch()) { $arPrices[] = $price; $arHeaders[] = array("id" => "PRICE" . $price["ID"], "content" => htmlspecialcharsex(!empty($price["NAME_LANG"]) ? $price["NAME_LANG"] : $price["NAME"]), "default" => $price["BASE"] == 'Y' ? true : false); } $arHeaders[] = array("id" => "ACT", "content" => GetMessage("SPS_FIELD_ACTION"), "default" => true); $lAdmin->AddHeaders($arHeaders); $arSelectedFields = $lAdmin->GetVisibleHeaderColumns(); if (!in_array('ACT', $arSelectedFields)) { $arSelectedFields[] = 'ACT'; } $arSelectedProps = array(); foreach ($arProps as $prop) { if ($key = array_search("PROPERTY_" . $prop['ID'], $arSelectedFields)) { $arSelectedProps[] = $prop; $arSelect[$prop['ID']] = array();
public static function GetInheritedPropertyTemplateElementMenuItems($iblock_id, $action_function, $menuID, $inputID = "") { $result = array(); $result["this"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_NAME"), "ONCLICK" => "$action_function('{=this.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_LOWER_NAME"), "ONCLICK" => "$action_function('{=lower this.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_CODE"), "ONCLICK" => "$action_function('{=this.Code}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_PREVIEW_TEXT"), "ONCLICK" => "$action_function('{=this.PreviewText}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_ELEMENT_DETAIL_TEXT"), "ONCLICK" => "$action_function('{=this.DetailText}', '$menuID', '$inputID')", ), ), ); if ($iblock_id > 0) { $result["properties"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PROPERTIES"), "MENU" => array( ), ); $rsProperty = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $iblock_id)); while($property = $rsProperty->fetch()) { if ($property["PROPERTY_TYPE"] != "F") { $result["properties"]["MENU"][] = array( "TEXT" => $property["NAME"], "ONCLICK" => "$action_function('{=this.property.".($property["CODE"]!=""? $property["CODE"]: $property["ID"])."}', '$menuID', '$inputID')", ); } } } $result["parent"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT_NAME"), "ONCLICK" => "$action_function('{=parent.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT_CODE"), "ONCLICK" => "$action_function('{=parent.Code}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PARENT_TEXT"), "ONCLICK" => "$action_function('{=parent.PreviewText}', '$menuID', '$inputID')", ), ), ); $result["iblock"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK_NAME"), "ONCLICK" => "$action_function('{=iblock.Name}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK_CODE"), "ONCLICK" => "$action_function('{=iblock.Code}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_IBLOCK_TEXT"), "ONCLICK" => "$action_function('{=iblock.PreviewText}', '$menuID', '$inputID')", ), ), ); if (\Freetrix\Main\Loader::includeModule('catalog')) { $arCatalog = \CCatalogSKU::GetInfoByProductIBlock($iblock_id); if (is_array($arCatalog)) { $result["sku_properties"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_SKU_PROPERTIES"), "MENU" => array( ), ); $rsProperty = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $arCatalog["IBLOCK_ID"])); while($property = $rsProperty->fetch()) { if ($property["PROPERTY_TYPE"] != "F") { $result["sku_properties"]["MENU"][] = array( "TEXT" => $property["NAME"], "ONCLICK" => "$action_function('{=concat {=distinct this.catalog.sku.property.".($property["CODE"]!=""? $property["CODE"]: $property["ID"])." \", \"}}', '$menuID', '$inputID')", ); } } $result["sku_price"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_SKU_PRICE"), "MENU" => array(), ); $rsPrice = CCatalogGroup::GetListEx(array("SORT"=>"ASC"), array(), false, false, array("ID", "NAME")); while ($price = $rsPrice->Fetch()) { if (preg_match("/^[a-zA-Z0-9]+\$/", $price["NAME"])) { $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MIN_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=min this.catalog.sku.price.".$price["NAME"]."}', '$menuID', '$inputID')", ); $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MAX_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=max this.catalog.sku.price.".$price["NAME"]."}', '$menuID', '$inputID')", ); } else { $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MIN_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=min this.catalog.sku.price.".$price["ID"]."}', '$menuID', '$inputID')", ); $result["sku_price"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MAX_PRICE")." ".$price["NAME"], "ONCLICK" => "$action_function('{=max this.catalog.sku.price.".$price["ID"]."}', '$menuID', '$inputID')", ); } } } $result["catalog"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_CATALOG"), "MENU" => array( array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_CATALOG_WEIGHT"), "ONCLICK" => "$action_function('{=this.catalog.weight}', '$menuID', '$inputID')", ), array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_CATALOG_MEASURE"), "ONCLICK" => "$action_function('{=this.catalog.measure}', '$menuID', '$inputID')", ), ), ); $result["price"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_PRICE"), "MENU" => array(), ); $rsPrice = CCatalogGroup::GetListEx(array("SORT"=>"ASC"), array(), false, false, array("ID", "NAME")); while ($price = $rsPrice->Fetch()) { if (preg_match("/^[a-zA-Z0-9]+\$/", $price["NAME"])) $result["price"]["MENU"][] = array( "TEXT" => $price["NAME"], "ONCLICK" => "$action_function('{=this.catalog.price.".$price["NAME"]."}', '$menuID', '$inputID')", ); else $result["price"]["MENU"][] = array( "TEXT" => $price["NAME"], "ONCLICK" => "$action_function('{=this.catalog.price.".$price["ID"]."}', '$menuID', '$inputID')", ); } $result["store"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_STORE"), "MENU" => array(), ); $rsStore = CCatalogStore::GetList(); while ($store = $rsStore->Fetch()) { $result["store"]["MENU"][] = array( "TEXT" => $store["TITLE"], "ONCLICK" => "$action_function('{=catalog.store.".$store["ID"].".name}', '$menuID', '$inputID')", ); } } $result["misc"] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_MISC"), "MENU" => array(), ); $result["misc"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_SECTIONS_PATH"), "ONCLICK" => "$action_function('{=concat this.sections.name \" / \"}', '$menuID', '$inputID')", ); if (\Freetrix\Main\Loader::includeModule('catalog')) { $result["misc"]["MENU"][] = array( "TEXT" => GetMessage("IB_COMPLIB_POPUP_STORE_LIST"), "ONCLICK" => "$action_function('{=concat catalog.store \", \"}', '$menuID', '$inputID')", ); } $r = array(); foreach($result as $category) { if (!empty($category) && !empty($category["MENU"])) { $r[] = $category; } } return $r; }
return; } $arResult['PATH_TO_EXCH1C_INDEX'] = CrmCheckPath('PATH_TO_EXCH1C_INDEX', $arParams['PATH_TO_EXCH1C_INDEX'], $APPLICATION->GetCurPage()); $arResult['NAME_TEMPLATE'] = empty($arParams['NAME_TEMPLATE']) ? CSite::GetNameFormat(false) : str_replace(array("#NOBR#", "#/NOBR#"), array("", ""), $arParams["NAME_TEMPLATE"]); $arResult['BACK_URL'] = $arParams['PATH_TO_EXCH1C_INDEX']; $arResult['FORM_ID'] = 'CRM_EXCH1C_CONFIG'; $arResult['FIELDS'] = array(); // <editor-fold defaultstate="collapsed" desc="Catalog import options"> // --> Catalog import options $arUGroupsEx = array(); $arAction = array("N" => GetMessage("CAT_1C_NONE"), "A" => GetMessage("CAT_1C_DEACTIVATE"), "D" => GetMessage("CAT_1C_DELETE")); $iblockType = CCrmCatalog::GetCatalogTypeID(); $iblockId = CCrmCatalog::EnsureDefaultExists(); $arPriceType = array(); $arGroup = array(); $rsGroup = CCatalogGroup::GetListEx(array('SORT', 'ASC'), array(), false, false, array('ID', 'NAME', 'NAME_LANG', 'XML_ID')); while ($arGroup = $rsGroup->Fetch()) { $arPriceType[intval($arGroup['ID'])] = '[' . $arGroup['ID'] . '] ' . $arGroup['NAME'] . (empty($arGroup['NAME_LANG']) ? '' : ', ' . $arGroup['NAME_LANG']); } unset($arGroup, $rsGroup); $priceTypeId = intval(COption::GetOptionInt('crm', 'selected_catalog_group_id', 0)); if ($priceTypeId < 1) { $arBaseCatalogGroup = CCatalogGroup::GetBaseGroup(); $priceTypeId = intval($arBaseCatalogGroup['ID']); unset($arBaseCatalogGroup); } $arAllOptions = array(array("1C_IBLOCK_TYPE", GetMessage("CAT_1C_IBLOCK_TYPE"), $iblockType, array("text", 50), "hidden", 1), array("1C_SITE_LIST", GetMessage("CAT_1C_SITE_LIST"), SITE_ID, array("text", 2), "hidden", 1), array("1C_INTERVAL", GetMessage("CAT_1C_INTERVAL"), "30", array("text", 20), "visible", 1), array("1C_GROUP_PERMISSIONS", GetMessage("CAT_1C_GROUP_PERMISSIONS"), "-", array("mlist", 5, $arUGroupsEx), "hidden", 1), array("1C_ELEMENT_ACTION", GetMessage("CAT_1C_ELEMENT_ACTION"), "D", array("list", $arAction), "visible", 1), array("1C_SECTION_ACTION", GetMessage("CAT_1C_SECTION_ACTION"), "D", array("list", $arAction), "visible", 1), array("1C_FILE_SIZE_LIMIT", GetMessage("CAT_1C_FILE_SIZE_LIMIT"), 200 * 1024, array("text", 20), "hidden", 1), array("1C_USE_CRC", GetMessage("CAT_1C_USE_CRC"), "Y", array("checkbox"), "hidden", 1), array("1C_USE_ZIP", GetMessage("CAT_1C_USE_ZIP"), "Y", array("checkbox"), "hidden", 1), array("1C_USE_IBLOCK_PICTURE_SETTINGS", GetMessage("CAT_1C_USE_IBLOCK_PICTURE_SETTINGS"), "N", array("checkbox"), "hidden", 1), array("1C_GENERATE_PREVIEW", GetMessage("CAT_1C_GENERATE_PREVIEW"), "N", array("checkbox"), "hidden", 1), array("1C_PREVIEW_WIDTH", GetMessage("CAT_1C_PREVIEW_WIDTH"), 100, array("text", 20), "hidden", 1), array("1C_PREVIEW_HEIGHT", GetMessage("CAT_1C_PREVIEW_HEIGHT"), 100, array("text", 20), "hidden", 1), array("1C_DETAIL_RESIZE", GetMessage("CAT_1C_DETAIL_RESIZE"), "N", array("checkbox"), "hidden", 1), array("1C_DETAIL_WIDTH", GetMessage("CAT_1C_DETAIL_WIDTH"), 300, array("text", 20), "hidden", 1), array("1C_DETAIL_HEIGHT", GetMessage("CAT_1C_DETAIL_HEIGHT"), 300, array("text", 20), "hidden", 1), array("1C_USE_OFFERS", GetMessage("CAT_1C_USE_OFFERS"), "N", array("checkbox"), "hidden", 1), array("1C_FORCE_OFFERS", GetMessage("CAT_1C_FORCE_OFFERS"), "N", array("checkbox"), "hidden", 1), array("1C_USE_IBLOCK_TYPE_ID", GetMessage("CAT_1C_USE_IBLOCK_TYPE_ID"), "N", array("checkbox"), "hidden", 1), array("1C_SKIP_ROOT_SECTION", GetMessage("CAT_1C_SKIP_ROOT_SECTION"), "N", array("checkbox"), "hidden", 1), array("1C_TRANSLIT_ON_ADD", GetMessage("CAT_1C_TRANSLIT_ON_ADD"), "N", array("checkbox"), "hidden", 1), array("1C_TRANSLIT_ON_UPDATE", GetMessage("CAT_1C_TRANSLIT_ON_UPDATE"), "N", array("checkbox"), "hidden", 1), array("1C_CRM_CAT_XML_ID", GetMessage("CRM_CATALOG_XML_ID"), "", array("text", 20), "visible", 1), array("selected_catalog_group_id", GetMessage("CRM_SELECTED_CATALOG_GROUP_ID"), $priceTypeId, array("list", $arPriceType), "visible", 1), array("1CE_IBLOCK_ID", GetMessage("CAT_1CE_IBLOCK_ID"), $iblockId, array("text", 50), "hidden", 2), array("1CE_ELEMENTS_PER_STEP", GetMessage("CAT_1CE_ELEMENTS_PER_STEP"), 100, array("text", 5), "visible", 2), array("1CE_INTERVAL", GetMessage("CAT_1CE_INTERVAL"), "30", array("text", 20), "visible", 2), array("1CE_GROUP_PERMISSIONS", GetMessage("CAT_1CE_GROUP_PERMISSIONS"), "-", array("mlist", 5, $arUGroupsEx), "hidden", 2), array("1CE_USE_ZIP", GetMessage("CAT_1CE_USE_ZIP"), "Y", array("checkbox"), "hidden", 2)); if ($_SERVER['REQUEST_METHOD'] == "POST" && $_POST['save'] != "" && check_bitrix_sessid()) { for ($i = 0, $intCount = count($arAllOptions); $i < $intCount; $i++) { $tabNumber = $arAllOptions[$i][5]; $name = $arAllOptions[$i][0];
function Add2Basket($PRICE_ID, $QUANTITY = 1, $arRewriteFields = array(), $arProductParams = array()) { global $APPLICATION; $PRICE_ID = intval($PRICE_ID); if (0 >= $PRICE_ID) return false; $QUANTITY = doubleval($QUANTITY); if (0 >= $QUANTITY) $QUANTITY = 1; if (!CModule::IncludeModule("sale")) return false; if (CModule::IncludeModule("statistic") && array_key_exists('SESS_SEARCHER_ID', $_SESSION) && 0 < intval($_SESSION["SESS_SEARCHER_ID"])) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $rsPrices = CPrice::GetList( array(), array('ID' => $PRICE_ID), false, false, array( 'ID', 'PRODUCT_ID', 'PRICE', 'CURRENCY', 'CATALOG_GROUP_ID' ) ); if (!($arPrice = $rsPrices->Fetch())) { $APPLICATION->ThrowException(GetMessage('CATALOG_PRODUCT_PRICE_NOT_FOUND'), "NO_PRODUCT_PRICE"); return false; } $arPrice['CATALOG_GROUP_NAME'] = ''; $rsCatGroups = CCatalogGroup::GetListEx( array(), array('ID' => $arPrice['CATALOG_GROUP_ID']), false, false, array( 'ID', 'NAME', 'NAME_LANG' ) ); if ($arCatGroup = $rsCatGroups->Fetch()) { $arPrice['CATALOG_GROUP_NAME'] = (!empty($arCatGroup['NAME_LANG']) ? $arCatGroup['NAME_LANG'] : $arCatGroup['NAME']); } $rsProducts = CCatalogProduct::GetList( array(), array('ID' => $arPrice["PRODUCT_ID"]), false, false, array( 'ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY', 'WEIGHT', ) ); if (!($arCatalogProduct = $rsProducts->Fetch())) return false; $dblQuantity = doubleval($arCatalogProduct["QUANTITY"]); $intQuantity = intval($arCatalogProduct["QUANTITY"]); $boolQuantity = ('Y' != $arCatalogProduct["CAN_BUY_ZERO"] && 'Y' == $arCatalogProduct["QUANTITY_TRACE"]); if ($boolQuantity && 0 >= $dblQuantity) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_PRODUCT_RUN_OUT'), "PRODUCT_RUN_OUT"); return false; } $rsItems = CIBlockElement::GetList( array(), array( "ID" => $arPrice["PRODUCT_ID"], "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R" ), false, false, array( 'ID', 'IBLOCK_ID', 'NAME', 'XML_ID', 'DETAIL_PAGE_URL' ) ); if (!($arProduct = $rsItems->Fetch())) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $arProps = array(); $strIBlockXmlID = strval(CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID')); if ('' != $strIBlockXmlID) { $arProps[] = array( "NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID ); } $arProps[] = array( "NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"] ); if (!empty($arProductParams) && is_array($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array( "NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"], ); } if (isset($arOneProductParams)) unset($arOneProductParams); } $arFields = array( "PRODUCT_ID" => $arPrice["PRODUCT_ID"], "PRODUCT_PRICE_ID" => $PRICE_ID, "PRICE" => $arPrice["PRICE"], "CURRENCY" => $arPrice["CURRENCY"], "WEIGHT" => $arCatalogProduct["WEIGHT"], "QUANTITY" => ($boolQuantity && $dblQuantity < $QUANTITY ? $dblQuantity : $QUANTITY), "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arProduct["NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arProduct["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $strIBlockXmlID, "PRODUCT_XML_ID" => $arProduct["XML_ID"], "PROPS" => $arProps, ); if (!empty($arRewriteFields) && is_array($arRewriteFields)) { $arFields = array_merge($arFields, $arRewriteFields); } $addres = CSaleBasket::Add($arFields); if (CModule::IncludeModule("statistic")) CStatistic::Set_Event("eStore", "add2basket", $arFields["PRODUCT_ID"]); return $addres; }
if (!CCatalogGroup::Update($ID, $arFields)) { if ($ex = $APPLICATION->GetException()) { $lAdmin->AddUpdateError($ex->GetString(), $ID); } else { $lAdmin->AddUpdateError(GetMessage("ERROR_UPDATING_REC") . " (" . $arFields["ID"] . ", " . $arFields["NAME"] . ", " . $arFields["SORT"] . ")", $ID); } $DB->Rollback(); } else { $DB->Commit(); } } } if (($arID = $lAdmin->GroupAction()) && !$bReadOnly) { if ($_REQUEST['action_target'] == 'selected') { $arID = array(); $dbResultList = CCatalogGroup::GetListEx(array($by => $order), $arFilter, false, false, array('ID')); while ($arResult = $dbResultList->Fetch()) { $arID[] = $arResult['ID']; } } foreach ($arID as $ID) { if (strlen($ID) <= 0) { continue; } switch ($_REQUEST['action']) { case "delete": @set_time_limit(0); $DB->StartTransaction(); if (!CCatalogGroup::Delete($ID)) { $DB->Rollback(); if ($ex = $APPLICATION->GetException()) {
$boolSep = true; $priceQuantityFields = CCatalogCSVSettings::getSettingsFields(CCatalogCSVSettings::FIELDS_PRICE_EXT, true); foreach ($allowedPriceQuantityFields as &$fieldName) { if (isset($priceQuantityFields[$fieldName])) { $arAvailFields[$intCount] = $priceQuantityFields[$fieldName]; $arAvailFields[$intCount]['sort'] = ($intCount + 1) * 10; if ($boolSep) { $arAvailFields[$intCount]['SEP'] = GetMessage('CAT_ADM_CSV_EXP_SEP_PRICES'); $boolSep = false; } $intCount++; } } unset($fieldName, $priceQuantityFields); $priceFields = CCatalogCSVSettings::getSettingsFields(CCatalogCSVSettings::FIELDS_PRICE, true); $rsPriceTypes = CCatalogGroup::GetListEx(array('SORT' => 'ASC', 'ID' => 'ASC'), array(), false, false, array('ID', 'NAME', 'NAME_LANG')); while ($priceType = $rsPriceTypes->Fetch()) { $priceType['NAME_LANG'] = (string) $priceType['NAME_LANG']; foreach ($allowedPriceFields as &$fieldName) { if (isset($priceFields[$fieldName])) { $priceName = $priceType['NAME_LANG'] !== '' ? str_replace(array('#TYPE#', '#NAME#'), array($priceType['NAME'], $priceType['NAME_LANG']), GetMessage('EST_PRICE_TYPE2')) : str_replace("#TYPE#", $priceType['NAME'], GetMessage('EST_PRICE_TYPE')); $arAvailFields[$intCount] = $priceFields[$fieldName]; $arAvailFields[$intCount]['value'] .= '_' . $priceType['ID']; $arAvailFields[$intCount]['name'] = $priceName . ': ' . $arAvailFields[$intCount]['name']; $arAvailFields[$intCount]['sort'] = ($intCount + 1) * 10; if ($boolSep) { $arAvailFields[$intCount]['SEP'] = GetMessage('CAT_ADM_CSV_EXP_SEP_PRICES'); $boolSep = false; } $intCount++; }
$arProductsTmpA = $arCatalogsParams; for ($i = 0, $intOFListCount = count($offerlists); $i < $intOFListCount; $i++) { $xOfferListNode = $offerlists[$i]; $IBLOCK_XML_ID = $xOfferListNode->GetAttribute($nameUTF['CatalogID']); $OFFER_LIST_DESC = $xOfferListNode->GetAttribute($nameUTF['Description']); $OFFER_LIST_CURRENCY = $arCurrencies[$xOfferListNode->GetAttribute($nameUTF['Currency'])]; if (strlen($OFFER_LIST_CURRENCY) <= 0) { $OFFER_LIST_CURRENCY = "USD"; } //detect "price type" property $props = $xOfferListNode->select_nodes("/" . $nameUTF['PropertyValue']); if (!is_object($props[0])) { continue; } $PRICE_TYPE = $props[0]->GetAttribute($nameUTF['Value']); $res = CCatalogGroup::GetListEx(array(), array("NAME" => $PRICE_TYPE), false, false, array('ID', 'NAME')); if ($arr = $res->Fetch()) { $PRICE_ID = $arr["ID"]; } else { $PRICE_ID = CCatalogGroup::Add(array("NAME" => $PRICE_TYPE, "USER_LANG" => array("ru" => $PRICE_TYPE))); } $arProducts = $arCatalogsParams[$IBLOCK_XML_ID]["arProducts"]; $arOffers = array(); $offers = $xOfferListNode->select_nodes("/" . $nameUTF['Offer']); for ($j = 0, $intOtOFCount = count($offers); $j < $intOtOFCount; $j++) { $xOfferNode = $offers[$j]; $PRODUCT_XML_ID = $xOfferNode->GetAttribute($nameUTF['ProductId']); // we sholdn't go to 'continue', but should search product in DB by XML_ID // and in array if absent. Then we'll be able to load only prices without products $PRODUCT_ID = 0; if (!isset($arProducts[$PRODUCT_XML_ID])) {
/** * <p>Функция возвращает код и внутреннее название базового типа цен. Результат работы функции кэшируется, поэтому повторные вызовы этой функции в рамках одной страницы не приводят к дополнительным запросам базы данных.</p> <p>От цены базового типа расчитываются цены других типов, если они указаны с использованием системы наценок. Понятие базового типа цены используется только в административной части и не оказывает влияния на публичную часть. </p> * * * * * @return array <p>Функция возвращает ассоциативный массив с ключами:</p> <table * class="tnormal" width="100%"> <tr> <th width="15%">Ключ</th> <th>Описание</th> </tr> <tr> <td>ID</td> * <td>Код базового типа цен.</td> </tr> <tr> <td>NAME</td> <td>Внутреннее название * базового типа цен.</td> </tr> <tr> <td>NAME_LANG</td> <td>Базовая цена.</td> </tr> <tr> * <td>XML_ID</td> <td>XML ID базовой цены.</td> </tr> </table> <br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccataloggroup/ccataloggroup__getbasegroup.e06a3542.php * @author Bitrix */ public static function GetBaseGroup() { if (empty(self::$arBaseGroupCache) && is_array(self::$arBaseGroupCache)) { $rsGroups = CCatalogGroup::GetListEx(array(), array('BASE' => 'Y'), false, false, array('ID', 'NAME', 'NAME_LANG', 'XML_ID')); if ($arGroup = $rsGroups->Fetch()) { $arGroup['ID'] = intval($arGroup['ID']); $arGroup['NAME_LANG'] = strval($arGroup['NAME_LANG']); $arGroup['XML_ID'] = strval($arGroup['XML_ID']); self::$arBaseGroupCache = $arGroup; } else { self::$arBaseGroupCache = false; } if (defined('CATALOG_GLOBAL_VARS') && 'Y' == CATALOG_GLOBAL_VARS) { global $CATALOG_BASE_GROUP; $CATALOG_BASE_GROUP = self::$arBaseGroupCache; } } return self::$arBaseGroupCache; }
/** * @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; }
return; $arIBlockType = CIBlockParameters::GetIBlockTypes(); $arIBlock=array(); $rsIBlock = CIBlock::GetList(array("sort" => "asc"), array("TYPE" => $arCurrentValues["IBLOCK_TYPE"], "ACTIVE"=>"Y")); while($arr=$rsIBlock->Fetch()) { $arIBlock[$arr["ID"]] = "[".$arr["ID"]."] ".$arr["NAME"]; } // Prices $catalogGroupIterator = CCatalogGroup::GetListEx( array("NAME" => "ASC", "SORT" => "ASC"), array(), false, false, array('ID', 'NAME', 'NAME_LANG') ); $catalogGroups = array(); while ($catalogGroup = $catalogGroupIterator->Fetch()) { $catalogGroups[$catalogGroup['NAME']] = "[{$catalogGroup['NAME']}] {$catalogGroup['NAME_LANG']}"; } $arAscDesc = array( "asc" => GetMessage("CVP_SORT_ASC"), "desc" => GetMessage("CVP_SORT_DESC"), ); $showFromSection = isset($arCurrentValues['SHOW_FROM_SECTION']) && $arCurrentValues['SHOW_FROM_SECTION'] == 'Y';
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; }
public static function init() { IncludeModuleLangFile(__FILE__); if (!self::$fInit) { self::$fInit = true; self::$siteCookieId = md5('SALE_REPORT_SITE_ID'); // Initializing list of sites. $result = Bitrix\Main\SiteTable::getList(array('select' => array('LID', 'DEF', 'NAME'))); $i = 0; while ($row = $result->fetch()) { self::$sitelist[$row['LID']] = $row['NAME']; if (++$i === 1) { self::$defaultSiteId = $row['LID']; } else { if ($row['DEF'] === 'Y') { self::$defaultSiteId = $row['LID']; } } self::$weightOptions[$row['LID']] = array('unit' => COption::GetOptionString('sale', 'weight_unit', null, $row['LID']), 'koef' => COption::GetOptionInt('sale', 'weight_koef', null, $row['LID'])); } unset($i, $row, $result); // hack, add virtual ID field into StatusLang entity for filtering $statusEntity = Entity\Base::getInstance('\\Bitrix\\Sale\\Internals\\StatusLang'); if ($statusEntity instanceof \Bitrix\Main\Entity\Base) { $statusEntity->addField(array('data_type' => 'string', 'expression' => array('%s', 'STATUS_ID')), 'ID'); } unset($statusEntity); // hack, add virtual REPS_ORDER field into Shipment entity for filtering system records $shipmentEntity = Entity\Base::getInstance('\\Bitrix\\Sale\\Internals\\Shipment'); if ($shipmentEntity instanceof \Bitrix\Main\Entity\Base) { $shipmentEntity->addField(array('data_type' => 'Order', 'reference' => array('=ref.ID' => 'this.ORDER_ID', '!=this.SYSTEM' => array('?', 'Y'))), 'REPS_ORDER'); } unset($shipmentEntity); // Initializing list of statuses of orders. $result = Bitrix\Sale\Internals\StatusLangTable::getList(array('select' => array('STATUS_ID', 'NAME'), 'filter' => array('=LID' => LANGUAGE_ID))); while ($row = $result->fetch()) { self::$statuslist[$row['STATUS_ID']] = $row['NAME']; } unset($row, $result); self::$genders = array('M' => GetMessage('USER_MALE'), 'F' => GetMessage('USER_FEMALE')); // Initializing list of person types. $result = Bitrix\Sale\Internals\PersonTypeTable::getList(array('select' => array('ID', 'LID', 'NAME'))); while ($row = $result->fetch()) { self::$personTypes[$row['ID']] = array('LID' => $row['LID'], 'NAME' => $row['NAME']); } unset($row, $result); // Initializing list of pay systems of orders. $result = Bitrix\Sale\PaySystemTable::getList(array('select' => array('ID', 'LID', 'NAME'))); while ($row = $result->fetch()) { self::$paySystemList[$row['ID']] = array('value' => $row['NAME'], 'site_id' => $row['LID']); } unset($row, $result); // Initializing list of services and methods of delivery. $result = \Bitrix\Sale\Delivery\Services\Table::getList(array('select' => array('ID', 'NAME'))); while ($row = $result->fetch()) { self::$deliveryList[$row['ID']] = array('value' => $row['NAME'], 'site_id' => ''); } unset($row, $result); // Obtaining table of correspondences of iblocks to sites. $result = Bitrix\Iblock\IblockSiteTable::getList(); while ($row = $result->fetch()) { self::$iblockSite[$row['SITE_ID']][] = $row['IBLOCK_ID']; } unset($row, $result); // Obtaining the list of iblocks which are directories and filling // a property $catalogSections with sections of these units. $ent = new CCatalog(); $result = $ent->GetList(); while ($ibRow = $result->Fetch()) { // Obtaining list of sections of the catalog. self::$catalogs[] = $ibRow; $path = array(); $curLevel = $prevLevel = 0; $sections = CIBlockSection::GetTreeList(array('=IBLOCK_ID' => $ibRow['IBLOCK_ID'])); $row = null; while ($row = $sections->GetNext()) { // Formation of an array of identifiers of current and parent sections. $curLevel = $row['DEPTH_LEVEL']; for ($i = 0; $i <= $prevLevel - $curLevel; $i++) { array_pop($path); } array_push($path, $row['ID']); $prevLevel = $curLevel; self::$catalogSections[$row['ID']] = array('name' => ltrim(str_repeat(' . ', $curLevel) . $row['NAME']), 'path' => $path, 'catalog' => array('ID' => $ibRow['ID'], 'NAME' => $ibRow['NAME'])); } } unset($ent, $ibRow, $row, $sections, $result); // Initialization of the list of warehouses. $result = Bitrix\Catalog\StoreTable::getList(array('select' => array('ID', 'TITLE'))); while ($row = $result->fetch()) { self::$productStores[$row['ID']] = $row['TITLE']; } unset($row, $result); // Getting currencies $obj = new CCurrency(); $by = ''; $order = ''; $result = $obj->GetList($by, $order, LANGUAGE_ID); while ($row = $result->Fetch()) { self::$currencies[$row['CURRENCY']] = array('name' => $row['FULL_NAME']); } unset($row, $result, $obj, $by, $order); // Getting types of prices $obj = new CCatalogGroup(); $result = $obj->GetListEx(array('SORT'), array(), false, false, array('ID', 'NAME', 'BASE', 'NAME_LANG')); while ($row = $result->Fetch()) { self::$priceTypes[$row['ID']] = array('name' => empty($row['NAME_LANG']) ? $row['NAME'] : $row['NAME_LANG'], 'base' => $row['BASE'] === 'Y' ? true : false); } unset($row, $result, $obj); // Getting option, which means, it is necessary to display a fractional quantity of goods of no. self::$fDecimalQuant = COption::GetOptionString('sale', 'QUANTITY_FACTORIAL') == 'Y'; self::initOwners(); } }
/** * <p>Функция возвращает код и внутреннее название базового типа цен. Результат работы функции кэшируется, поэтому повторные вызовы этой функции в рамках одной страницы не приводят к дополнительным запросам базы данных.</p> <p>От цены базового типа расчитываются цены других типов, если они указаны с использованием системы наценок. Понятие базового типа цены используется только в административной части и не оказывает влияния на публичную часть. </p> * * * * * @return array <p>Функция возвращает ассоциативный массив с ключами:</p><table * class="tnormal" width="100%"> <tr> <th width="15%">Ключ</th> <th>Описание</th> </tr> <tr> <td>ID</td> * <td>Код базового типа цен.</td> </tr> <tr> <td>NAME</td> <td>Внутреннее название * базового типа цен.</td> </tr> </table><br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccataloggroup/ccataloggroup__getbasegroup.e06a3542.php * @author Bitrix */ public static function GetBaseGroup() { global $CATALOG_BASE_GROUP; if (!isset($CATALOG_BASE_GROUP) || empty($CATALOG_BASE_GROUP) || !is_array($CATALOG_BASE_GROUP)) { $rsGroups = CCatalogGroup::GetListEx(array(), array('BASE' => 'Y'), false, false, array('ID', 'NAME', 'NAME_LANG', 'XML_ID')); if ($arGroup = $rsGroups->Fetch()) { $arGroup['ID'] = intval($arGroup['ID']); $arGroup['NAME_LANG'] = strval($arGroup['NAME_LANG']); $arGroup['XML_ID'] = strval($arGroup['XML_ID']); $CATALOG_BASE_GROUP = $arGroup; } else { if (isset($CATALOG_BASE_GROUP)) unset($CATALOG_BASE_GROUP); return false; } } return $CATALOG_BASE_GROUP; }
if ($strUseStoreControl == "Y") { $arHeader[] = array( "id" => "CATALOG_BAR_CODE", "content" => GetMessage("IBLIST_A_CATALOG_BAR_CODE"), "title" => "", "align" => "right", "default" => false, ); } $arCatGroup = array(); $dbCatalogGroups = CCatalogGroup::GetListEx( array("SORT" => "ASC"), array("LID"=>LANGUAGE_ID), false, false, array('ID', 'NAME', 'NAME_LANG') ); while ($arCatalogGroup = $dbCatalogGroups->Fetch()) { $arHeader[] = array( "id" => "CATALOG_GROUP_".$arCatalogGroup["ID"], "content" => htmlspecialcharsex(!empty($arCatalogGroup["NAME_LANG"]) ? $arCatalogGroup["NAME_LANG"] : $arCatalogGroup["NAME"]), "align" => "right", "sort" => "CATALOG_PRICE_".$arCatalogGroup["ID"], ); $arCatGroup[$arCatalogGroup["ID"]] = $arCatalogGroup; } $arCatExtra = array(); $db_extras = CExtra::GetList(array("NAME" =>"ASC"));
/** * @param int $PRICE_ID * @param float|int $QUANTITY * @param array $arRewriteFields * @param array $arProductParams * @return bool|int */ function Add2Basket($PRICE_ID, $QUANTITY = 1, $arRewriteFields = array(), $arProductParams = array()) { global $APPLICATION; $PRICE_ID = (int) $PRICE_ID; if ($PRICE_ID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_PRODUCT_PRICE_NOT_FOUND'), "NO_PRODUCT_PRICE"); return false; } $QUANTITY = (double) $QUANTITY; if ($QUANTITY <= 0) { $QUANTITY = 1; } if (!Loader::includeModule("sale")) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (Loader::includeModule("statistic") && isset($_SESSION['SESS_SEARCHER_ID']) && (int) $_SESSION["SESS_SEARCHER_ID"] > 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $rsPrices = CPrice::GetListEx(array(), array('ID' => $PRICE_ID), false, false, array('ID', 'PRODUCT_ID', 'PRICE', 'CURRENCY', 'CATALOG_GROUP_ID')); if (!($arPrice = $rsPrices->Fetch())) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_PRODUCT_PRICE_NOT_FOUND'), "NO_PRODUCT_PRICE"); return false; } $arPrice['CATALOG_GROUP_NAME'] = ''; $rsCatGroups = CCatalogGroup::GetListEx(array(), array('ID' => $arPrice['CATALOG_GROUP_ID']), false, false, array('ID', 'NAME', 'NAME_LANG')); if ($arCatGroup = $rsCatGroups->Fetch()) { $arPrice['CATALOG_GROUP_NAME'] = !empty($arCatGroup['NAME_LANG']) ? $arCatGroup['NAME_LANG'] : $arCatGroup['NAME']; } $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $arPrice["PRODUCT_ID"]), false, false, array('ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'TYPE', 'MEASURE')); if (!($arCatalogProduct = $rsProducts->Fetch())) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $arCatalogProduct['MEASURE'] = (int) $arCatalogProduct['MEASURE']; $arCatalogProduct['MEASURE_NAME'] = ''; $arCatalogProduct['MEASURE_CODE'] = 0; if ($arCatalogProduct['MEASURE'] <= 0) { $arMeasure = CCatalogMeasure::getDefaultMeasure(true, true); $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } else { $rsMeasures = CCatalogMeasure::getList(array(), array('ID' => $arCatalogProduct['MEASURE']), false, false, array('ID', 'SYMBOL_RUS', 'CODE')); if ($arMeasure = $rsMeasures->GetNext()) { $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } } $dblQuantity = (double) $arCatalogProduct["QUANTITY"]; $intQuantity = (int) $arCatalogProduct["QUANTITY"]; $boolQuantity = $arCatalogProduct["CAN_BUY_ZERO"] != 'Y' && $arCatalogProduct["QUANTITY_TRACE"] == 'Y'; if ($boolQuantity && $dblQuantity <= 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_PRODUCT_RUN_OUT'), "PRODUCT_RUN_OUT"); return false; } $rsItems = CIBlockElement::GetList(array(), array("ID" => $arPrice["PRODUCT_ID"], "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'XML_ID', 'DETAIL_PAGE_URL')); if (!($arProduct = $rsItems->GetNext())) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $arProps = array(); $strIBlockXmlID = (string) CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID'); if ($strIBlockXmlID !== '') { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID); } // add sku props $arParentSku = CCatalogSku::GetProductInfo($arProduct['ID'], $arProduct['IBLOCK_ID']); if (!empty($arParentSku)) { if (strpos($arProduct["~XML_ID"], '#') === false) { $parentIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'XML_ID'), 'filter' => array('ID' => $arParentSku['ID']))); if ($parent = $parentIterator->fetch()) { $arProduct["~XML_ID"] = $parent['XML_ID'] . '#' . $arProduct["~XML_ID"]; } unset($parent, $parentIterator); } } if (!empty($arProductParams) && is_array($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array("NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"]); } unset($arOneProductParams); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["~XML_ID"]); $arFields = array("PRODUCT_ID" => $arPrice["PRODUCT_ID"], "PRODUCT_PRICE_ID" => $PRICE_ID, "PRICE" => $arPrice["PRICE"], "CURRENCY" => $arPrice["CURRENCY"], "WEIGHT" => $arCatalogProduct["WEIGHT"], "DIMENSIONS" => serialize(array("WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"])), "QUANTITY" => $boolQuantity && $dblQuantity < $QUANTITY ? $dblQuantity : $QUANTITY, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arProduct["~NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arProduct["~DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $strIBlockXmlID, "PRODUCT_XML_ID" => $arProduct["~XML_ID"], "PROPS" => $arProps, "TYPE" => $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : NULL, "MEASURE_NAME" => $arCatalogProduct['MEASURE_NAME'], "MEASURE_CODE" => $arCatalogProduct['MEASURE_CODE']); if (!empty($arRewriteFields) && is_array($arRewriteFields)) { $arFields = array_merge($arFields, $arRewriteFields); } $result = CSaleBasket::Add($arFields); if ($result) { if (Loader::includeModule("statistic")) { CStatistic::Set_Event("eStore", "add2basket", $arFields["PRODUCT_ID"]); } } return $result; }
} } $arSort = CIBlockParameters::GetElementSortFields( array('SHOWS', 'SORT', 'TIMESTAMP_X', 'NAME', 'ID', 'ACTIVE_FROM', 'ACTIVE_TO'), array('KEY_LOWERCASE' => 'Y') ); $arPrice = array(); if ($boolCatalog) { $arSort = array_merge($arSort, CCatalogIBlockParameters::GetCatalogSortFields()); $rsPrice=CCatalogGroup::GetListEx( array("SORT" => "ASC"), array(), false, false, array('ID', 'NAME', 'NAME_LANG') ); while($arr=$rsPrice->Fetch()) $arPrice[$arr["NAME"]] = "[".$arr["NAME"]."] ".$arr["NAME_LANG"]; } else { $arPrice = $arProperty_N; } $arAscDesc = array( "asc" => GetMessage("IBLOCK_SORT_ASC"), "desc" => GetMessage("IBLOCK_SORT_DESC"), );
$arF = array("ACTIVE" => "Y", "SORT" => "200", "NAME" => Loc::getMessage("CRM_VAT_2"), "RATE" => '18'); CCatalogVat::Add($arF); } } // get default vat $defCatVatId = 0; $dbVat = CCatalogVat::GetListEx(array('SORT' => 'ASC'), array(), false, array('nPageTop' => 1)); if ($arVat = $dbVat->Fetch()) { $defCatVatId = $arVat['ID']; } unset($arVat, $dbVat); $defCatVatId = (int) $defCatVatId; // create base price $basePriceId = 0; $basePrice = array(); $dbRes = CCatalogGroup::GetListEx(array(), array("BASE" => "Y"), false, false, array('ID')); if (!($basePrice = $dbRes->Fetch())) { $catalogGroupLangFiles = array(); foreach ($arActiveLangs as &$language) { $catalogGroupLangFiles[$language] = Loc::loadLanguageFile(__FILE__, $language); } $arFields = array(); $arFields["USER_LANG"] = array(); foreach ($arActiveLangs as &$language) { if (isset($catalogGroupLangFiles[$language])) { $arFields["USER_LANG"][$language] = $catalogGroupLangFiles[$language]['CRM_BASE_PRICE_NAME']; } } unset($language); unset($catalogGroupLangFiles); $arFields["BASE"] = "Y";