function recalculateStoreBalances($id) { global $DB; $arFields = array(); if (COption::GetOptionString('catalog', 'default_use_store_control', 'N') != 'Y') { return true; } $dbStoreProduct = CCatalogStoreProduct::GetList(array(), array("STORE_ID" => $id, "!AMOUNT" => 0), false, false, array("PRODUCT_ID", "AMOUNT")); while ($arStoreProduct = $dbStoreProduct->Fetch()) { $dbAmount = $DB->Query("select SUM(SP.AMOUNT) as SUM, CP.QUANTITY_RESERVED as RESERVED, CS.ACTIVE FROM b_catalog_store_product SP inner join b_catalog_product CP on SP.PRODUCT_ID = CP.ID inner join b_catalog_store CS on SP.STORE_ID = CS.ID where SP.PRODUCT_ID = " . $arStoreProduct['PRODUCT_ID'] . " and CS.ACTIVE = 'Y' group by QUANTITY_RESERVED, ACTIVE", true); if ($arAmount = $dbAmount->Fetch()) { $arFields["QUANTITY"] = doubleval($arAmount["SUM"] - $arAmount["RESERVED"]); } else { if ($arReservAmount = CCatalogProduct::GetByID($arStoreProduct['PRODUCT_ID'])) { $arFields["QUANTITY"] = doubleval(0 - $arReservAmount["QUANTITY_RESERVED"]); } } CCatalogProduct::Update($arStoreProduct["PRODUCT_ID"], $arFields); } return true; }
?> <td class="COLUMN_QUANTITY"> <?echo $arItem["QUANTITY"]." ".$measure?> </td> <? } if ($columnCode == "COLUMN_REMAINING_QUANTITY") { ?> <td class="COLUMN_REMAINING_QUANTITY"> <? $balance = 0; if ($arItem["MODULE"] == "catalog" && $bUseCatalog) { $ar_res = CCatalogProduct::GetByID($arItem["PRODUCT_ID"]); $balance = FloatVal($ar_res["QUANTITY"]); } ?> <?echo $balance?> </td> <? } if ($columnCode == "COLUMN_PROPS") { ?> <td class="COLUMN_PROPS"> <? if (!empty($arBasketProps[$arItem["ID"]]) && is_array($arBasketProps[$arItem["ID"]])) {
} if (($columnCode == "COLUMN_REMAINING_QUANTITY") || (!array_key_exists("COLUMN_REMAINING_QUANTITY", $arUserColumns) && !in_array("COLUMN_REMAINING_QUANTITY", $arShownColumns))) { $hidden = (!(array_key_exists("COLUMN_REMAINING_QUANTITY", $arUserColumns))) ? "style=\"display:none\"" : ""; $arShownColumns[] = "COLUMN_REMAINING_QUANTITY"; ?> <td class="COLUMN_REMAINING_QUANTITY" <?php echo $hidden; ?> > <? $balance = "0"; if ($val["MODULE"] == "catalog" && $bUseCatalog) { $ar_res = CCatalogProduct::GetByID($val["PRODUCT_ID"]); $balance = floatval($ar_res["QUANTITY"]); } ?> <div id="DIV_BALANCE_<?php echo $val["ID"]; ?> "><?php echo $balance; ?> </div> </td> <? } if (($columnCode == "COLUMN_PROPS") || (!array_key_exists("COLUMN_PROPS", $arUserColumns) && !in_array("COLUMN_PROPS", $arShownColumns)))
/** * @param $arFields * @return array|bool */ public static function cancellationDocument($arFields) { global $DB; $id = intval($arFields["ID"]); $i = 0; $dbDocElements = CCatalogStoreDocsElement::getList(array(), array("DOC_ID" => $id)); while ($arDocElement = $dbDocElements->Fetch()) { $arResult = array(); $arProductInfo = CCatalogProduct::GetByID($arDocElement["ELEMENT_ID"]); $newReserved = $arProductInfo["QUANTITY_RESERVED"] + $arDocElement["AMOUNT"]; $arResult["QUANTITY_RESERVED"] = $newReserved; $dbAmount = $DB->Query("SELECT SUM(SP.AMOUNT) as SUM, CP.QUANTITY_RESERVED as RESERVED FROM b_catalog_store_product SP INNER JOIN b_catalog_product CP ON SP.PRODUCT_ID = CP.ID INNER JOIN b_catalog_store CS ON SP.STORE_ID = CS.ID WHERE SP.PRODUCT_ID = " . $arDocElement["ELEMENT_ID"] . " AND CS.ACTIVE = 'Y' GROUP BY QUANTITY_RESERVED ", true); if ($arAmount = $dbAmount->Fetch()) { $arResult["QUANTITY"] = doubleval($arAmount["SUM"] - $newReserved); if (!CCatalogProduct::Update($arDocElement["ELEMENT_ID"], $arResult)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_PURCHASING_INFO_ERROR")); return false; } } $i++; } if ($i > 0) { return true; } return false; }
function exportElement($arElement, $SECTION_MAP, $PROPERTY_MAP) { if (strlen($arElement["XML_ID"]) > 0) { $xml_id = $arElement["XML_ID"]; } else { $xml_id = $arElement["ID"]; } if ($this->PRODUCT_IBLOCK_ID > 0) { $arPropOrder = array("sort" => "asc", "id" => "asc", "enum_sort" => "asc", "value_id" => "asc"); $rsLink = CIBlockElement::GetProperty($this->arIBlock["ID"], $arElement["ID"], $arPropOrder, array("ACTIVE" => "Y", "CODE" => "CML2_LINK")); $arLink = $rsLink->Fetch(); if (is_array($arLink) && !is_array($arLink["VALUE"]) && $arLink["VALUE"] > 0) { $xml_id = $this->GetElementXML_ID($this->PRODUCT_IBLOCK_ID, $arLink["VALUE"]) . "#" . $xml_id; } } fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_ID") . ">" . htmlspecialcharsbx($xml_id) . "</" . GetMessage("IBLOCK_XML2_ID") . ">\n"); if (!$this->only_price) { $this->exportElementFields($arElement, $SECTION_MAP); if ($this->next_step["catalog"] && !$this->bExtended) { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_ITEM_ATTRIBUTES") . ">\n"); } else { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_PROPERTIES_VALUES") . ">\n"); } $this->exportElementProperties($arElement, $PROPERTY_MAP); if ($this->next_step["catalog"] && !$this->bExtended) { fwrite($this->fp, "\t\t\t\t</" . GetMessage("IBLOCK_XML2_ITEM_ATTRIBUTES") . ">\n"); } else { fwrite($this->fp, "\t\t\t\t</" . GetMessage("IBLOCK_XML2_PROPERTIES_VALUES") . ">\n"); } if ($this->bExtended) { $elementTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($this->arIBlock["ID"], $arElement["ID"]); $this->exportInheritedTemplates(4, $elementTemplates); } } if ($this->next_step["catalog"]) { $rsProduct = CCatalogProduct::GetList(array(), array("ID" => $arElement["ID"])); $arProduct = $rsProduct->Fetch(); static $measure = null; if (!isset($measure)) { $measure = array(); $rsBaseUnit = CCatalogMeasure::GetList(array(), array()); while ($arIDUnit = $rsBaseUnit->Fetch()) { $measure[$arIDUnit["ID"]] = $arIDUnit["CODE"]; } } $xmlMeasure = GetMessage("IBLOCK_XML2_PCS"); if ($arProduct["MEASURE"] > 0 && isset($measure[$arProduct["MEASURE"]])) { $xmlMeasure = $measure[$arProduct["MEASURE"]]; } $arPrices = array(); $rsPrices = CPrice::GetList(array(), array("PRODUCT_ID" => $arElement["ID"])); while ($arPrice = $rsPrices->Fetch()) { if (!$arPrice["QUANTITY_FROM"] && !$arPrice["QUANTITY_TO"]) { $arPrices[] = array(GetMessage("IBLOCK_XML2_PRICE_TYPE_ID") => $this->prices[$arPrice["CATALOG_GROUP_ID"]], GetMessage("IBLOCK_XML2_PRICE_FOR_ONE") => $arPrice["PRICE"], GetMessage("IBLOCK_XML2_CURRENCY") => $arPrice["CURRENCY"], GetMessage("IBLOCK_XML2_MEASURE") => $xmlMeasure); } } if (count($arPrices) > 0) { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_PRICES") . ">\n"); foreach ($arPrices as $arPrice) { fwrite($this->fp, "\t\t\t\t\t<" . GetMessage("IBLOCK_XML2_PRICE") . ">\n"); foreach ($arPrice as $key => $value) { fwrite($this->fp, "\t\t\t\t\t\t<" . $key . ">" . htmlspecialcharsbx($value) . "</" . $key . ">\n"); } fwrite($this->fp, "\t\t\t\t\t</" . GetMessage("IBLOCK_XML2_PRICE") . ">\n"); } fwrite($this->fp, "\t\t\t\t</" . GetMessage("IBLOCK_XML2_PRICES") . ">\n"); $arCatalogProduct = CCatalogProduct::GetByID($arElement["ID"]); if ($arCatalogProduct) { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_AMOUNT") . ">" . htmlspecialcharsbx($arCatalogProduct["QUANTITY"]) . "</" . GetMessage("IBLOCK_XML2_AMOUNT") . ">\n"); } } } }
<?php if ($USER->CanDoOperation('catalog_read') || $USER->CanDoOperation('catalog_price')) { include GetLangFileName($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/catalog/lang/", "/templates/product_edit.php"); $IBLOCK_ID = intval($IBLOCK_ID); if ($IBLOCK_ID <= 0) { return; } $MENU_SECTION_ID = intval($MENU_SECTION_ID); $arCatalog = CCatalog::GetByID($IBLOCK_ID); $PRODUCT_ID = 0 < $ID ? CIBlockElement::GetRealElement($ID) : 0; $arBaseProduct = CCatalogProduct::GetByID($PRODUCT_ID); if (0 < $PRODUCT_ID) { $bReadOnly = !($USER->CanDoOperation('catalog_price') && CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $PRODUCT_ID, "element_edit_price")); } else { $bReadOnly = !($USER->CanDoOperation('catalog_price') && CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $MENU_SECTION_ID, "element_edit_price")); } $bDiscount = $USER->CanDoOperation('catalog_discount'); ?> <style type="text/css"> input.wrong {background-color: #FF8080;} </style> <tr class="heading"> <td colspan="2"><?php echo GetMessage("IBLOCK_TCATALOG"); if ($bReadOnly) { echo " " . GetMessage("IBLOCK_TREADONLY"); } ?> <script type="text/javascript"> var bReadOnly = <?php
} $arFields["MODIFIED_BY"] = $USER->GetID(); $ib = new CIBlockElement(); $DB->StartTransaction(); if (!$ib->Update($subID, $arFields, true, true, true)) { $lAdmin->AddUpdateError(GetMessage("IBEL_A_SAVE_ERROR", array("#ID#" => $subID, "#ERROR_TEXT#" => $ib->LAST_ERROR)), $subID); $DB->Rollback(); } else { $DB->Commit(); } if ($boolSubCatalog) { if ($USER->CanDoOperation('catalog_price') && CIBlockElementRights::UserHasRightTo($intSubIBlockID, $subID, "element_edit_price")) { $CATALOG_QUANTITY = $arFields["CATALOG_QUANTITY"]; $CATALOG_QUANTITY_TRACE = $arFields["CATALOG_QUANTITY_TRACE"]; $CATALOG_WEIGHT = $arFields["CATALOG_WEIGHT"]; if (!CCatalogProduct::GetByID($subID)) { $arCatalogQuantity = array("ID" => $subID); if (strlen($CATALOG_QUANTITY) > 0) { $arCatalogQuantity["QUANTITY"] = $CATALOG_QUANTITY; } if (strlen($CATALOG_QUANTITY_TRACE) > 0) { $arCatalogQuantity["QUANTITY_TRACE"] = $CATALOG_QUANTITY_TRACE == "Y" ? "Y" : ($CATALOG_QUANTITY_TRACE == "D" ? "D" : "N"); } if (strlen($CATALOG_WEIGHT) > 0) { $arCatalogQuantity['WEIGHT'] = $CATALOG_WEIGHT; } CCatalogProduct::Add($arCatalogQuantity); } else { $arCatalogQuantity = array(); if (strlen($CATALOG_QUANTITY) > 0) { $arCatalogQuantity["QUANTITY"] = $CATALOG_QUANTITY;
foreach ($arAvailValueFields_names as $key => $value) { $arResPrices[$intDiap][$value['field'] . '_' . $arProductPrice["CATALOG_GROUP_ID"]] = $arProductPrice[$value['field']]; } $arResPrices[$intDiap]['QUANTITY_FROM'] = $arProductPrice["QUANTITY_FROM"]; $arResPrices[$intDiap]['QUANTITY_TO'] = $arProductPrice["QUANTITY_TO"]; //$arResPrices[$arResPricesMap[$arProductPrice["QUANTITY_FROM"]."-".$arProductPrice["QUANTITY_TO"]]][IntVal($arProductPrice["CATALOG_GROUP_ID"])] = $arProductPrice; } if (empty($arResPrices)) { $arResPrices[] = array(); } } else { $arResPrices[] = array(); } $arResProducts = array(); if ($boolCatalog && $bNeedProducts) { $arProduct = CCatalogProduct::GetByID($arIBlockElement["ID"]); if (!empty($arProduct)) { foreach ($arAvailPriceFields_names as $key => $value) { $arResProducts[$value['field']] = $arProduct[$value['field']]; } } } $arResFields = array(); foreach ($arResSections as $arPath) { foreach ($arResPrices as $arPrice) { $arTuple = array(); foreach ($arNeedFields as $field_name) { if (strncmp($field_name, "IE_", 3) == 0) { $arTuple[] = $arIBlockElement["~" . substr($field_name, 3)]; } elseif (strncmp($field_name, "IP_PROP", 7) == 0) { $arTuple[] = $arPropsValues[intval(substr($field_name, 7))];
$strOfferYandex .= $strValue."\n"; } } } $strOfferYandex .= "</offer>\n"; $arItem['OFFERS'][] = $strOfferYandex; $boolItemOffers = true; $boolItemExport = true; } } if ('X' == $arCatalog['CATALOG_TYPE'] && !$boolItemOffers) { $arItem['CATALOG_QUANTITY'] = ''; $arItem['CATALOG_QUANTITY_TRACE'] = 'N'; $arProduct = CCatalogProduct::GetByID($arItem['ID']); if (!empty($arProduct)) { $arItem['CATALOG_QUANTITY'] = $arProduct['QUANTITY']; $arItem['CATALOG_QUANTITY_TRACE'] = $arProduct['QUANTITY_TRACE']; } $str_QUANTITY = DoubleVal($arItem["CATALOG_QUANTITY"]); $str_QUANTITY_TRACE = $arItem["CATALOG_QUANTITY_TRACE"]; if (($str_QUANTITY <= 0) && ($str_QUANTITY_TRACE == "Y")) $str_AVAILABLE = ' available="false"'; else $str_AVAILABLE = ' available="true"'; $minPrice = 0; $minPriceRUR = 0; $minPriceGroup = 0;
$ImgUrl = $productImg["src"]; } $arPrice = CCatalogProduct::GetOptimalPrice($arItems["ID"], 1, $arBuyerGroups, "N", array(), $LID); $arCurFormat = CCurrencyLang::GetCurrencyFormat($arPrice["PRICE"]["CURRENCY"]); $priceValutaFormat = str_replace("#", '', $arCurFormat["FORMAT_STRING"]); if (!is_array($arPrice["DISCOUNT"]) || count($arPrice["DISCOUNT"]) <= 0) { $arPrice["DISCOUNT_PRICE"] = 0; $price = $arPrice["PRICE"]["PRICE"]; } else { $price = $arPrice["DISCOUNT_PRICE"]; } $summaFormated = CurrencyFormatNumber($price, $arPrice["PRICE"]["CURRENCY"]); $currentTotalPriceFormat = CurrencyFormatNumber($price, $arPrice["PRICE"]["CURRENCY"]); $balance = 0; $weight = 0; if ($ar_res = CCatalogProduct::GetByID($arItems["ID"])) { $balance = FloatVal($ar_res["QUANTITY"]); $weight = FloatVal($ar_res["WEIGHT"]); } $discountPercent = 0; if ($arPrice["DISCOUNT_PRICE"] > 0) { $discountPercent = ($arPrice["PRICE"]["PRICE"] - $arPrice["DISCOUNT_PRICE"]) * 100 / $arPrice["PRICE"]["PRICE"]; $discountPercent = roundEx($discountPercent, SALE_VALUE_PRECISION); $priceDiscount = $arPrice["PRICE"]["PRICE"] - $arPrice["DISCOUNT_PRICE"]; } $urlEdit = "/bitrix/admin/iblock_element_edit.php?ID=" . $arItems["ID"] . "&type=" . $arItems["IBLOCK_TYPE_ID"] . "&lang=" . LANG . "&IBLOCK_ID=" . $arItems["IBLOCK_ID"] . "&find_section_section=" . IntVal($arItems["IBLOCK_SECTION_ID"]); $arParams = array('id' => $arItems["ID"], 'name' => CUtil::JSEscape($arItems["NAME"]), 'url' => CUtil::JSEscape($arItems["DETAIL_PAGE_URL"]), 'urlImg' => CUtil::JSEscape($ImgUrl), 'urlEdit' => CUtil::JSEscape($urlEdit), 'price' => CUtil::JSEscape($price), 'priceFormated' => CUtil::JSEscape($price), 'priceBase' => CUtil::JSEscape($arPrice["PRICE"]["PRICE"]), 'priceBaseFormat' => CUtil::JSEscape($arPrice["PRICE"]["PRICE"]), 'valutaFormat' => CUtil::JSEscape($priceValutaFormat), 'priceDiscount' => CUtil::JSEscape($priceDiscount), 'summaFormated' => CUtil::JSEscape($summaFormated), 'priceTotalFormated' => CUtil::JSEscape($currentTotalPriceFormat), 'discountPercent' => CUtil::JSEscape($discountPercent), 'balance' => CUtil::JSEscape($balance), 'quantity' => floatval($arGetProduct[$arItems["ID"]]), 'module' => 'catalog', 'currency' => CUtil::JSEscape($arPrice["PRICE"]["CURRENCY"]), 'weight' => $weight, 'vatRate' => DoubleVal('0'), 'priceType' => '', 'catalogXmlID' => '', 'productXmlID' => '', 'skuProps' => CUtil::PhpToJSObject($arSkuProps), 'productProviderClass' => 'CCatalogProductProvider'); $arParams = CUtil::PhpToJSObject($arParams); echo "FillProductFields(0, " . $arParams . ", 0);\n"; } //end while
protected function processAmount($element) { $product = \CCatalogProduct::GetByID($element['ID']); $element['QUANTITY'] = $product['QUANTITY']; return $element; }
function recalculateStoreBalances($id) { global $DB; $arFields = array(); if (COption::GetOptionString('catalog', 'default_use_store_control', 'N') != 'Y') { return false; } $dbStoreProduct = CCatalogStoreProduct::GetList(array(), array("STORE_ID" => $id, "!AMOUNT" => 0), false, false, array("PRODUCT_ID", "AMOUNT")); while ($arStoreProduct = $dbStoreProduct->Fetch()) { $dbAmount = $DB->Query("SELECT SUM(SP.AMOUNT) as SUM, CP.QUANTITY_RESERVED as RESERVED, CS.ACTIVE FROM b_catalog_store_product SP INNER JOIN b_catalog_product CP ON SP.PRODUCT_ID = CP.ID INNER JOIN b_catalog_store CS ON SP.STORE_ID = CS.ID WHERE SP.PRODUCT_ID = " . $arStoreProduct['PRODUCT_ID'] . " AND CS.ACTIVE = 'Y' GROUP BY QUANTITY_RESERVED, ACTIVE ", true); if ($arAmount = $dbAmount->Fetch()) { $arFields["QUANTITY"] = doubleval($arAmount["SUM"] - $arAmount["RESERVED"]); } else { if ($arReservAmount = CCatalogProduct::GetByID($arStoreProduct['PRODUCT_ID'])) { $arFields["QUANTITY"] = doubleval(0 - $arReservAmount["QUANTITY_RESERVED"]); } } if (!CCatalogProduct::Update($arStoreProduct["PRODUCT_ID"], $arFields)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_PURCHASING_INFO_ERROR")); return false; } } return true; }
/** * @param $documentId * @param $userId * @return bool */ public static function cancellationDocument($documentId, $userId) { global $DB, $APPLICATION; $documentId = (int) $documentId; $i = 0; $dbDocElements = CCatalogStoreDocsElement::getList(array(), array("DOC_ID" => $documentId)); while ($arDocElement = $dbDocElements->Fetch()) { $arResult = array(); $arProductInfo = CCatalogProduct::GetByID($arDocElement["ELEMENT_ID"]); $newReserved = $arProductInfo["QUANTITY_RESERVED"] + $arDocElement["AMOUNT"]; $arResult["QUANTITY_RESERVED"] = $newReserved; $dbAmount = $DB->Query("SELECT SUM(SP.AMOUNT) as SUM, CP.QUANTITY_RESERVED as RESERVED FROM b_catalog_store_product SP INNER JOIN b_catalog_product CP ON SP.PRODUCT_ID = CP.ID INNER JOIN b_catalog_store CS ON SP.STORE_ID = CS.ID WHERE SP.PRODUCT_ID = " . $arDocElement["ELEMENT_ID"] . " AND CS.ACTIVE = 'Y' GROUP BY QUANTITY_RESERVED ", true); if ($arAmount = $dbAmount->Fetch()) { $arResult["QUANTITY"] = doubleval($arAmount["SUM"] - $newReserved); if (!CCatalogProduct::Update($arDocElement["ELEMENT_ID"], $arResult)) { $APPLICATION->ThrowException(GetMessage("CAT_DOC_PURCHASING_INFO_ERROR")); return false; } if (self::isNeedClearPublicCache($arProductInfo['QUANTITY'], $arResult['QUANTITY'], $arProductInfo['QUANTITY_TRACE'], $arProductInfo['CAN_BUY_ZERO'])) { $productInfo = array('CAN_BUY_ZERO' => $arProductInfo['CAN_BUY_ZERO'], 'NEGATIVE_AMOUNT_TRACE' => $arProductInfo['NEGATIVE_AMOUNT_TRACE'], 'QUANTITY_TRACE' => $arProductInfo['QUANTITY_TRACE'], 'OLD_QUANTITY' => $arProductInfo['QUANTITY'], 'QUANTITY' => $arResult['QUANTITY'], 'DELTA' => $arResult['QUANTITY'] - $arProductInfo['QUANTITY']); self::clearPublicCache($arProductInfo['ID'], $productInfo); } } $i++; } return $i > 0; }
{ $DB->Commit(); } if ($bCatalog) { if( $USER->CanDoOperation('catalog_price') && CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ID, "element_edit_price") ) { $CATALOG_QUANTITY = $arFields["CATALOG_QUANTITY"]; $CATALOG_QUANTITY_TRACE = $arFields["CATALOG_QUANTITY_TRACE"]; $CATALOG_WEIGHT = $arFields["CATALOG_WEIGHT"]; if(!CCatalogProduct::GetByID($ID)) { $arCatalogQuantity = Array("ID" => $ID); if(strlen($CATALOG_QUANTITY) > 0) { if (COption::GetOptionString("catalog", "default_use_store_control") != "Y") $arCatalogQuantity["QUANTITY"] = $CATALOG_QUANTITY; } if(strlen($CATALOG_QUANTITY_TRACE) > 0) $arCatalogQuantity["QUANTITY_TRACE"] = (($CATALOG_QUANTITY_TRACE == "Y") ? "Y" : (($CATALOG_QUANTITY_TRACE == "D") ? "D" : "N")); if (strlen($CATALOG_WEIGHT) > 0) $arCatalogQuantity['WEIGHT'] = $CATALOG_WEIGHT; CCatalogProduct::Add($arCatalogQuantity); } else {
/** * get sku for product. * * @param integer $USER_ID User. * @param string $LID Site. * @param integer $PRODUCT_ID Product id. * @param string $PRODUCT_NAME Product name. * @param string CURRENCY Currency. * @param array $arProduct Iblock list. * @return array|false */ function GetProductSku($USER_ID, $LID, $PRODUCT_ID, $PRODUCT_NAME = '', $CURRENCY = '', $arProduct = array()) { $USER_ID = (int) $USER_ID; $PRODUCT_ID = (int) $PRODUCT_ID; if ($PRODUCT_ID <= 0) { return false; } $LID = trim($LID); if ($LID == '') { return false; } $PRODUCT_NAME = trim($PRODUCT_NAME); $arResult = array(); $arOffers = array(); static $arCacheGroups = array(); if (!is_set($arCacheGroups[$USER_ID])) { $arCacheGroups[$USER_ID] = CUser::GetUserGroup($USER_ID); } $arGroups = $arCacheGroups[$USER_ID]; if (empty($arProduct)) { $arProduct = CSaleProduct::GetProductListIblockInfo(array($PRODUCT_ID)); } static $arOffersIblock = array(); if (!is_set($arOffersIblock[$arProduct["IBLOCK_ID"]])) { $mxResult = CCatalogSKU::GetInfoByProductIBlock($arProduct["IBLOCK_ID"]); if (is_array($mxResult)) { $arOffersIblock[$arProduct["IBLOCK_ID"]] = $mxResult["IBLOCK_ID"]; } } if ($arOffersIblock[$arProduct["IBLOCK_ID"]] > 0) { static $arCacheOfferProperties = array(); if (!is_set($arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]])) { $dbOfferProperties = CIBlock::GetProperties($arOffersIblock[$arProduct["IBLOCK_ID"]], array(), array("!XML_ID" => "CML2_LINK")); while ($arOfferProperties = $dbOfferProperties->Fetch()) { $arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]][] = $arOfferProperties; } } $arOfferProperties = $arCacheOfferProperties[$arOffersIblock[$arProduct["IBLOCK_ID"]]]; $arIblockOfferProps = array(); $arIblockOfferPropsFilter = array(); if (is_array($arOfferProperties)) { foreach ($arOfferProperties as $val) { $arIblockOfferProps[] = array("CODE" => $val["CODE"], "NAME" => $val["NAME"]); $arIblockOfferPropsFilter[] = $val["CODE"]; } } $arOffers = CIBlockPriceTools::GetOffersArray($arProduct["IBLOCK_ID"], $PRODUCT_ID, array("ID" => "DESC"), array("NAME"), $arIblockOfferPropsFilter, 0, array(), 1, array(), $USER_ID, $LID); $arSku = array(); $minItemPrice = 0; $minItemPriceFormat = ""; $arSkuId = array(); $arImgSku = array(); foreach ($arOffers as $arOffer) { $arSkuId[] = $arOffer['ID']; } if (!empty($arSkuId)) { $res = CIBlockElement::GetList(array(), array("ID" => $arSkuId), false, false, array("ID", "IBLOCK_ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE", "DETAIL_PAGE_URL")); while ($arOfferImg = $res->GetNext()) { $arImgSku[$arOfferImg["ID"]] = $arOfferImg; } } foreach ($arOffers as $arOffer) { $arPrice = CCatalogProduct::GetOptimalPrice($arOffer['ID'], 1, $arGroups, "N", array(), $LID); if (empty($arPrice)) { break; } elseif (strlen($CURRENCY) > 0) { $arPrice["PRICE"]["PRICE"] = CCurrencyRates::ConvertCurrency($arPrice["PRICE"]["PRICE"], $arPrice["PRICE"]["CURRENCY"], $CURRENCY); if ($arPrice["DISCOUNT_PRICE"] > 0) { $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice["DISCOUNT_PRICE"], $arPrice["PRICE"]["CURRENCY"], $CURRENCY); } $arPrice["PRICE"]["CURRENCY"] = $CURRENCY; } $arSkuTmp = array(); $arOffer["CAN_BUY"] = "N"; $arCatalogProduct = CCatalogProduct::GetByID($arOffer['ID']); if (!empty($arCatalogProduct)) { if ($arCatalogProduct["CAN_BUY_ZERO"] != "Y" && ($arCatalogProduct["QUANTITY_TRACE"] == "Y" && doubleval($arCatalogProduct["QUANTITY"]) <= 0)) { $arOffer["CAN_BUY"] = "N"; } else { $arOffer["CAN_BUY"] = "Y"; } } $arSkuTmp["ImageUrl"] = ''; if ($arOffer["CAN_BUY"] == "Y") { $productImg = ""; if (isset($arImgSku[$arOffer['ID']]) && !empty($arImgSku[$arOffer['ID']])) { if ('' == $PRODUCT_NAME) { $PRODUCT_NAME = $arImgSku[$arOffer['ID']]["~NAME"]; } if ($arImgSku[$arOffer['ID']]["PREVIEW_PICTURE"] != "") { $productImg = $arImgSku[$arOffer['ID']]["PREVIEW_PICTURE"]; } elseif ($arImgSku[$arOffer['ID']]["DETAIL_PICTURE"] != "") { $productImg = $arImgSku[$arOffer['ID']]["DETAIL_PICTURE"]; } if ($productImg == "") { if ($arProduct["PREVIEW_PICTURE"] != "") { $productImg = $arProduct["PREVIEW_PICTURE"]; } elseif ($arProduct["DETAIL_PICTURE"] != "") { $productImg = $arProduct["DETAIL_PICTURE"]; } } if ($productImg != "") { $arFile = CFile::GetFileArray($productImg); $productImg = CFile::ResizeImageGet($arFile, array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); $arSkuTmp["ImageUrl"] = $productImg["src"]; } } } if ($minItemPrice === 0 || $arPrice["DISCOUNT_PRICE"] < $minItemPrice) { $minItemPrice = $arPrice["DISCOUNT_PRICE"]; $minItemPriceFormat = SaleFormatCurrency($arPrice["DISCOUNT_PRICE"], $arPrice["PRICE"]["CURRENCY"]); } foreach ($arIblockOfferProps as $arCode) { if (array_key_exists($arCode["CODE"], $arOffer["PROPERTIES"])) { if (is_array($arOffer["PROPERTIES"][$arCode["CODE"]]["VALUE"])) { $arSkuTmp[] = implode("/", $arOffer["PROPERTIES"][$arCode["CODE"]]["VALUE"]); } else { $arSkuTmp[] = $arOffer["PROPERTIES"][$arCode["CODE"]]["VALUE"]; } } } if (!empty($arCatalogProduct)) { $arSkuTmp["BALANCE"] = $arCatalogProduct["QUANTITY"]; $arSkuTmp["WEIGHT"] = $arCatalogProduct["WEIGHT"]; $arSkuTmp["BARCODE_MULTI"] = $arCatalogProduct["BARCODE_MULTI"]; } else { $arSkuTmp["BALANCE"] = 0; $arSkuTmp["WEIGHT"] = 0; $arSkuTmp["BARCODE_MULTI"] = 'N'; } $urlEdit = CIBlock::GetAdminElementEditLink($arOffer["IBLOCK_ID"], $arOffer['ID'], array('find_section_section' => 0, 'WF' => 'Y')); $discountPercent = 0; $arSkuTmp["USER_ID"] = $USER_ID; $arSkuTmp["ID"] = $arOffer["ID"]; $arSkuTmp["NAME"] = CUtil::JSEscape($arOffer["NAME"]); $arSkuTmp["PRODUCT_NAME"] = CUtil::JSEscape($PRODUCT_NAME); $arSkuTmp["PRODUCT_ID"] = $PRODUCT_ID; $arSkuTmp["LID"] = CUtil::JSEscape($LID); $arSkuTmp["MIN_PRICE"] = $minItemPriceFormat; $arSkuTmp["URL_EDIT"] = $urlEdit; $arSkuTmp["DISCOUNT_PRICE"] = ''; $arSkuTmp["DISCOUNT_PRICE_FORMATED"] = ''; $arSkuTmp["PRICE"] = $arPrice["PRICE"]["PRICE"]; $arSkuTmp["PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arPrice["PRICE"]["PRICE"], $arPrice["PRICE"]["CURRENCY"], false); $arPriceType = GetCatalogGroup($arPrice["PRICE"]["CATALOG_GROUP_ID"]); $arSkuTmp["PRICE_TYPE"] = $arPriceType["NAME_LANG"]; $arSkuTmp["VAT_RATE"] = $arPrice["PRICE"]["VAT_RATE"]; if (count($arPrice["DISCOUNT"]) > 0) { $discountPercent = IntVal($arPrice["DISCOUNT"]["VALUE"]); $arSkuTmp["DISCOUNT_PRICE"] = $arPrice["DISCOUNT_PRICE"]; $arSkuTmp["DISCOUNT_PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arPrice["DISCOUNT_PRICE"], $arPrice["PRICE"]["CURRENCY"], false); } $arCurFormat = CCurrencyLang::GetCurrencyFormat($arPrice["PRICE"]["CURRENCY"]); $arSkuTmp["VALUTA_FORMAT"] = str_replace("#", '', $arCurFormat["FORMAT_STRING"]); $arSkuTmp["DISCOUNT_PERCENT"] = $discountPercent; $arSkuTmp["CURRENCY"] = $arPrice["PRICE"]["CURRENCY"]; $arSkuTmp["CAN_BUY"] = $arOffer["CAN_BUY"]; $arSku[] = $arSkuTmp; } if ((!is_array($arIblockOfferProps) || empty($arIblockOfferProps)) && is_array($arSku) && !empty($arSku)) { $arIblockOfferProps[0] = array("CODE" => "TITLE", "NAME" => GetMessage("SKU_TITLE")); foreach ($arSku as $key => $val) { $arSku[$key][0] = $val["NAME"]; } } $arResult["SKU_ELEMENTS"] = $arSku; $arResult["SKU_PROPERTIES"] = $arIblockOfferProps; $arResult["OFFERS_IBLOCK_ID"] = $arOffersIblock[$arProduct["IBLOCK_ID"]]; } //if OFFERS_IBLOCK_ID > 0 return $arResult; }
$arIBlocks = array(); $arResult["SEARCH"] = array(); foreach ($arResult["CATEGORIES"] as $category_id => $arCategory) { foreach ($arCategory["ITEMS"] as $i => $arItem) { if (isset($arItem["ITEM_ID"])) { $arResult["SEARCH"][] =& $arResult["CATEGORIES"][$category_id]["ITEMS"][$i]; } } } foreach ($arResult["SEARCH"] as $i => $arItem) { switch ($arItem["MODULE_ID"]) { case "iblock": if (CModule::IncludeModule("catalog")) { $arParams["CURRENCY"] = $arParams["CURRENCY"] ? $arParams["CURRENCY"] : CCurrency::GetBaseCurrency(); $arConvertParams = array('CURRENCY_ID' => $arParams["CURRENCY"]); $ProductPrarams = CCatalogProduct::GetByID($arItem["ITEM_ID"]); //echo $ProductPrarams[VAT_INCLUDED]; $arPrices = CatalogGetPriceTableEx($arItem["ITEM_ID"], 0, array(), 'Y', $arConvertParams); unset($arResult["SEARCH"][$i]["MIN_PRICE"]); unset($arResult["SEARCH"][$i]["PRICES"]); foreach ($arParams["PRICE_CODE"] as $key => $prid) { if ($arPrices["MATRIX"][$prid][0]) { if (isset($arResult["SEARCH"][$i]["MIN_PRICE"])) { if ($arPrices["MATRIX"][$prid][0]["ORIG_DISCOUNT_PRICE"]) { $price_orig_val = $arPrices["MATRIX"][$prid][0]["ORIG_DISCOUNT_PRICE"]; } else { $price_orig_val = $arPrices["MATRIX"][$prid][0]["DISCOUNT_PRICE"]; } if ($arResult["SEARCH"][$i]["MIN_PRICE"]["DISCOUNT_PRICE"] > $price_orig_val) { $arResult["SEARCH"][$i]["MIN_PRICE"] = $arPrices["MATRIX"][$prid][0]; }
$op = CSaleBasket::Add($arProduct); //резерв $ar_res = CCatalogProduct::GetByID($item['offer']['externalId']); $arFields = array( 'QUANTITY' => (int)$ar_res['QUANTITY'] - (int)$item['quantity'], 'QUANTITY_RESERVED' => (int)$ar_res['QUANTITY_RESERVED'] + (int)$item['quantity'], ); $d = CCatalogProduct::Update($item['offer']['externalId'], $arFields); } } //удаляем лишние товары foreach($bItms as $bItm){ if(!in_array($bItm['PRODUCT_ID'], $CrmItms)){ CSaleBasket::Delete($bItm['ID']); //удаляем товары из резерва $ar_res = CCatalogProduct::GetByID($bItm['PRODUCT_ID']); $arFields = array( 'QUANTITY' => (int)$ar_res['QUANTITY'] + (int)$bItm['QUANTITY'], 'QUANTITY_RESERVED' => (int)$ar_res['QUANTITY_RESERVED'] - (int)$bItm['QUANTITY'], ); $d = CCatalogProduct::Update($bItm['PRODUCT_ID'], $arFields); } } if (isset($order['delivery']) === false || isset($order['delivery']['cost']) === false) { $order['delivery']['cost'] = $arFields['PRICE_DELIVERY']; } if (isset($order['summ']) === false || $order['summ'] <= 0) { $order['summ'] = $arFields['PRICE'] - $arFields['PRICE_DELIVERY']; }
function ExportElements($PROPERTY_MAP, $SECTION_MAP, $start_time, $INTERVAL, $counter_limit = 0, $arElementFilter = false) { $counter = 0; $arSelect = array( "ID", "IBLOCK_ID", "XML_ID", "ACTIVE", "CODE", "NAME", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE", "ACTIVE_FROM", "ACTIVE_TO", "SORT", "TAGS", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "PREVIEW_PICTURE", "DETAIL_PICTURE", ); if(is_array($arElementFilter)) { $arFilter = $arElementFilter; } else { if($arElementFilter === "none") return 0; $arFilter = array ( "IBLOCK_ID"=> $this->arIBlock["ID"], "ACTIVE" => "Y", ">ID" => $this->next_step["LAST_ID"], ); if($arElementFilter === "all") unset($arFilter["ACTIVE"]); } $arOrder = array( "ID" => "ASC", ); $arPropOrder = array( "sort" => "asc", "id" => "asc", "enum_sort" => "asc", "value_id" => "asc", ); $rsElements = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect); while($arElement = $rsElements->Fetch()) { if($this->next_step["catalog"]) fwrite($this->fp, "\t\t\t<".GetMessage("IBLOCK_XML2_OFFER").">\n"); else fwrite($this->fp, "\t\t\t<".GetMessage("IBLOCK_XML2_POSITION").">\n"); if(strlen($arElement["XML_ID"])>0) $xml_id = $arElement["XML_ID"]; else $xml_id = $arElement["ID"]; if($this->PRODUCT_IBLOCK_ID > 0) { $rsLink = CIBlockElement::GetProperty($this->arIBlock["ID"], $arElement["ID"], $arPropOrder, array("ACTIVE"=>"Y", "CODE" => "CML2_LINK")); $arLink = $rsLink->Fetch(); if(is_array($arLink) && !is_array($arLink["VALUE"]) && $arLink["VALUE"] > 0) $xml_id = $this->GetElementXML_ID($this->PRODUCT_IBLOCK_ID, $arLink["VALUE"])."#".$xml_id; } fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_ID").">".htmlspecialcharsbx($xml_id)."</".GetMessage("IBLOCK_XML2_ID").">\n"); if(!$this->only_price) { fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_NAME").">".htmlspecialcharsbx($arElement["NAME"])."</".GetMessage("IBLOCK_XML2_NAME").">\n"); if($this->bExtended) fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_BX_TAGS").">".htmlspecialcharsbx($arElement["TAGS"])."</".GetMessage("IBLOCK_XML2_BX_TAGS").">\n"); $arSections = array(); $rsSections = CIBlockElement::GetElementGroups($arElement["ID"], true); while($arSection = $rsSections->Fetch()) if(array_key_exists($arSection["ID"], $SECTION_MAP)) $arSections[] = $SECTION_MAP[$arSection["ID"]]; fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_GROUPS").">\n"); foreach($arSections as $xml_id) fwrite($this->fp, "\t\t\t\t\t<".GetMessage("IBLOCK_XML2_ID").">".htmlspecialcharsbx($xml_id)."</".GetMessage("IBLOCK_XML2_ID").">\n"); fwrite($this->fp, "\t\t\t\t</".GetMessage("IBLOCK_XML2_GROUPS").">\n"); if(!$this->bExtended) fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_DESCRIPTION").">".htmlspecialcharsbx(FormatText($arElement["DETAIL_TEXT"], $arElement["DETAIL_TEXT_TYPE"]))."</".GetMessage("IBLOCK_XML2_DESCRIPTION").">\n"); fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_PICTURE"), $this->ExportFile($arElement["DETAIL_PICTURE"]))); fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_PROPERTIES_VALUES").">\n"); if($this->bExtended) { $this->ExportPropertyValue("CML2_ACTIVE", ($arElement["ACTIVE"]=="Y"? "true": "false")); $this->ExportPropertyValue("CML2_CODE", $arElement["CODE"]); $this->ExportPropertyValue("CML2_SORT", intval($arElement["SORT"])); $this->ExportPropertyValue("CML2_ACTIVE_FROM", CDatabase::FormatDate($arElement["ACTIVE_FROM"], CLang::GetDateFormat("FULL"), "YYYY-MM-DD HH:MI:SS")); $this->ExportPropertyValue("CML2_ACTIVE_TO", CDatabase::FormatDate($arElement["ACTIVE_TO"], CLang::GetDateFormat("FULL"), "YYYY-MM-DD HH:MI:SS")); $this->ExportPropertyValue("CML2_PREVIEW_TEXT", $arElement["PREVIEW_TEXT"], $arElement["PREVIEW_TEXT_TYPE"]); $this->ExportPropertyValue("CML2_DETAIL_TEXT", $arElement["DETAIL_TEXT"], $arElement["DETAIL_TEXT_TYPE"]); $this->ExportPropertyValue("CML2_PREVIEW_PICTURE", $this->ExportFile($arElement["PREVIEW_PICTURE"])); } $rsProps = CIBlockElement::GetProperty($this->arIBlock["ID"], $arElement["ID"], $arPropOrder, array("ACTIVE"=>"Y")); $arProps = array(); while($arProp = $rsProps->Fetch()) { $pid = $arProp["ID"]; if(!array_key_exists($pid, $arProps)) $arProps[$pid] = array( "PROPERTY_TYPE" => $arProp["PROPERTY_TYPE"], "LINK_IBLOCK_ID" => $arProp["LINK_IBLOCK_ID"], "VALUES" => array(), ); if($arProp["PROPERTY_TYPE"] == "L") $arProps[$pid]["VALUES"][] = array( "VALUE" => $arProp["VALUE_ENUM"], "DESCRIPTION" => $arProp["DESCRIPTION"], "VALUE_ENUM_ID" => $arProp["VALUE"], ); else $arProps[$pid]["VALUES"][] = array( "VALUE" => $arProp["VALUE"], "DESCRIPTION" => $arProp["DESCRIPTION"], "VALUE_ENUM_ID" => $arProp["VALUE_ENUM_ID"], ); } foreach($arProps as $pid => $arProp) { $bEmpty = true; fwrite($this->fp, "\t\t\t\t\t<".GetMessage("IBLOCK_XML2_PROPERTY_VALUES").">\n"); fwrite($this->fp, "\t\t\t\t\t\t<".GetMessage("IBLOCK_XML2_ID").">".htmlspecialcharsbx($PROPERTY_MAP[$pid])."</".GetMessage("IBLOCK_XML2_ID").">\n"); foreach($arProp["VALUES"] as $arValue) { $value = $arValue["VALUE"]; if(is_array($value) || strlen($value)) { $bEmpty = false; $bSerialized = false; if($this->bExtended) { if($arProp["PROPERTY_TYPE"]=="L") { $value = CIBlockPropertyEnum::GetByID($arValue["VALUE_ENUM_ID"]); $value = $value["XML_ID"]; } elseif($arProp["PROPERTY_TYPE"]=="F") { $value = $this->ExportFile($value); } elseif($arProp["PROPERTY_TYPE"]=="G") { $value = $this->GetSectionXML_ID($arProp["LINK_IBLOCK_ID"], $value); } elseif($arProp["PROPERTY_TYPE"]=="E") { $value = $this->GetElementXML_ID($arProp["LINK_IBLOCK_ID"], $value); } if(is_array($value) && $arProp["PROPERTY_TYPE"]!=="F") { $bSerialized = true; $value = serialize($value); } } fwrite($this->fp, $this->formatXMLNode(6, GetMessage("IBLOCK_XML2_VALUE"), $value)); if($this->bExtended) { fwrite($this->fp, "\t\t\t\t\t\t<".GetMessage("IBLOCK_XML2_PROPERTY_VALUE").">\n"); if($bSerialized) fwrite($this->fp, "\t\t\t\t\t\t\t<".GetMessage("IBLOCK_XML2_SERIALIZED").">true</".GetMessage("IBLOCK_XML2_SERIALIZED").">\n"); fwrite($this->fp, $this->formatXMLNode(7, GetMessage("IBLOCK_XML2_VALUE"), $value)); fwrite($this->fp, "\t\t\t\t\t\t\t<".GetMessage("IBLOCK_XML2_DESCRIPTION").">".htmlspecialcharsbx($arValue["DESCRIPTION"])."</".GetMessage("IBLOCK_XML2_DESCRIPTION").">\n"); fwrite($this->fp, "\t\t\t\t\t\t</".GetMessage("IBLOCK_XML2_PROPERTY_VALUE").">\n"); } } } if($bEmpty) fwrite($this->fp, "\t\t\t\t\t\t<".GetMessage("IBLOCK_XML2_VALUE")."></".GetMessage("IBLOCK_XML2_VALUE").">\n"); fwrite($this->fp, "\t\t\t\t\t</".GetMessage("IBLOCK_XML2_PROPERTY_VALUES").">\n"); } fwrite($this->fp, "\t\t\t\t</".GetMessage("IBLOCK_XML2_PROPERTIES_VALUES").">\n"); } if($this->next_step["catalog"]) { $arPrices = array(); $rsPrices = CPrice::GetList(array(), array("PRODUCT_ID" => $arElement["ID"])); while($arPrice = $rsPrices->Fetch()) { if(!$arPrice["QUANTITY_FROM"] && !$arPrice["QUANTITY_TO"]) { $arPrices[] = array( GetMessage("IBLOCK_XML2_PRICE_TYPE_ID") => $this->prices[$arPrice["CATALOG_GROUP_ID"]], GetMessage("IBLOCK_XML2_PRICE_FOR_ONE") => $arPrice["PRICE"], GetMessage("IBLOCK_XML2_CURRENCY") => $arPrice["CURRENCY"], GetMessage("IBLOCK_XML2_MEASURE") => GetMessage("IBLOCK_XML2_PCS"), ); } } if(count($arPrices)>0) { fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_PRICES").">\n"); foreach($arPrices as $arPrice) { fwrite($this->fp, "\t\t\t\t\t<".GetMessage("IBLOCK_XML2_PRICE").">\n"); foreach($arPrice as $key=>$value) { fwrite($this->fp, "\t\t\t\t\t\t<".$key.">".htmlspecialcharsbx($value)."</".$key.">\n"); } fwrite($this->fp, "\t\t\t\t\t</".GetMessage("IBLOCK_XML2_PRICE").">\n"); } fwrite($this->fp, "\t\t\t\t</".GetMessage("IBLOCK_XML2_PRICES").">\n"); $arCatalogProduct = CCatalogProduct::GetByID($arElement["ID"]); if($arCatalogProduct) fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_AMOUNT").">".htmlspecialcharsbx($arCatalogProduct["QUANTITY"])."</".GetMessage("IBLOCK_XML2_AMOUNT").">\n"); } } if($this->next_step["catalog"]) fwrite($this->fp, "\t\t\t</".GetMessage("IBLOCK_XML2_OFFER").">\n"); else fwrite($this->fp, "\t\t\t</".GetMessage("IBLOCK_XML2_POSITION").">\n"); $this->next_step["LAST_ID"] = $arElement["ID"]; $counter++; if($INTERVAL > 0 && (time()-$start_time) > $INTERVAL) break; if($counter_limit > 0 && ($counter >= $counter_limit)) break; } return $counter; }
function __MakeOrder($prdCnt=1, $arData = Array()) { global $APPLICATION, $USER, $DB; CModule::IncludeModule("iblock"); CModule::IncludeModule("sale"); CModule::IncludeModule("catalog"); $arPrd = Array(); $dbItem = CIBlockElement::GetList(Array("PROPERTY_MORE_PHOTO" => "DESC", "ID" => "ASC"), Array("IBLOCK_TYPE" => "offers", "IBLOCK_SITE_ID" => WIZARD_SITE_ID, "PROPERTY_NEWPRODUCT" => false), false, Array("nTopCount" => 10), Array("ID", "IBLOCK_ID", "XML_ID", "NAME", "DETAIL_PAGE_URL", "IBLOCK_XML_ID")); while($arItem = $dbItem->GetNext()) $arPrd[] = $arItem; if(!empty($arPrd)) { for($i=0; $i<$prdCnt;$i++) { $prdID = $arPrd[mt_rand(0, 9)]; $arProduct = CCatalogProduct::GetByID($prdID["ID"]); $CALLBACK_FUNC = ""; $arCallbackPrice = CSaleBasket::ReReadPrice($CALLBACK_FUNC, "catalog", $prdID["ID"], 1); $arFields = array( "PRODUCT_ID" => $prdID["ID"], "PRODUCT_PRICE_ID" => $arCallbackPrice["PRODUCT_PRICE_ID"], "PRICE" => $arCallbackPrice["PRICE"], "CURRENCY" => $arCallbackPrice["CURRENCY"], "WEIGHT" => $arProduct["WEIGHT"], "QUANTITY" => 1, "LID" => WIZARD_SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $prdID["NAME"], "CALLBACK_FUNC" => $CALLBACK_FUNC, "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "ORDER_CALLBACK_FUNC" => "", "CANCEL_CALLBACK_FUNC" => "", "PAY_CALLBACK_FUNC" => "", "DETAIL_PAGE_URL" => $prdID["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $prdID["IBLOCK_XML_ID"], "PRODUCT_XML_ID" => $prdID["XML_ID"], "VAT_RATE" => $arCallbackPrice['VAT_RATE'], ); $addres = CSaleBasket::Add($arFields); } $arOrder = Array( "LID" => $arData["SITE_ID"], "PERSON_TYPE_ID" => $arData["PERSON_TYPE_ID"], "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE" => 1, "CURRENCY" => $arData["CURRENCY"], "USER_ID" => $arData["USER_ID"], "PAY_SYSTEM_ID" => $arData["PAY_SYSTEM_ID"], //"PRICE_DELIVERY" => $arData["PRICE_DELIVERY"], //"DELIVERY_ID" => $arData["DELIVERY_ID"], ); $dbFUserListTmp = CSaleUser::GetList(array("USER_ID" => $arData["USER_ID"])); if(empty($dbFUserListTmp)) { $arFields = array( "=DATE_INSERT" => $DB->GetNowFunction(), "=DATE_UPDATE" => $DB->GetNowFunction(), "USER_ID" => $arData["USER_ID"] ); $ID = CSaleUser::_Add($arFields); } $orderID = CSaleOrder::Add($arOrder); CSaleBasket::OrderBasket($orderID, CSaleBasket::GetBasketUserID(), WIZARD_SITE_ID); $dbBasketItems = CSaleBasket::GetList( array("NAME" => "ASC"), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => WIZARD_SITE_ID, "ORDER_ID" => $orderID ), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME") ); $ORDER_PRICE = 0; while ($arBasketItems = $dbBasketItems->GetNext()) { $ORDER_PRICE += roundEx($arBasketItems["PRICE"], SALE_VALUE_PRECISION) * DoubleVal($arBasketItems["QUANTITY"]); } $totalOrderPrice = $ORDER_PRICE + $arData["PRICE_DELIVERY"]; CSaleOrder::Update($orderID, Array("PRICE" => $totalOrderPrice)); foreach($arData["PROPS"] as $val) { $arFields = Array( "ORDER_ID" => $orderID, "ORDER_PROPS_ID" => $val["ID"], "NAME" => $val["NAME"], "CODE" => $val["CODE"], "VALUE" => $val["VALUE"], ); CSaleOrderPropsValue::Add($arFields); } return $orderID; } }
$dbRes = CIBlockElement::GetList(array("PROPERTY_WEEK_COUNTER" => "desc"), $arFilter, false, array("nTopCount" => 3), $arSelect); while ($obEl = $dbRes->GetNextElement()) { $arFields = $obEl->GetFields(); if (!empty($arFields["IBLOCK_SECTION_ID"])) { $arSec = $arSect; } $path = !empty($arFields['DETAIL_PICTURE']) ? $arFields['DETAIL_PICTURE'] : $arFields['PREVIEW_PICTURE']; if (empty($path)) { $arProp = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], array(), array('CODE' => 'MORE_PHOTO'))->Fetch(); $path = $arProp["VALUE"]; } $path = CFile::ResizeImageGet($path, array('width' => 150, 'height' => 150), BX_RESIZE_IMAGE_PROPORTIONAL, false); $path = $path['src']; if (CModule::IncludeModule('catalog')) { $arResultPrices = CIBlockPriceTools::GetCatalogPrices($arFields["IBLOCK_ID"], array($arParams["PRICE_CODE"])); $arProduct = CCatalogProduct::GetByID($arFields["ID"]); $arProduct['VAT_INCLUDED'] = $arProduct['VAT_INCLUDED'] == 'Y' ? true : false; $arPrices = CIBlockPriceTools::GetItemPrices($arFields["IBLOCK_ID"], $arResultPrices, $arFields, $arProduct['VAT_INCLUDED'], array("CURRENCY_ID" => $arParams["CURRENCY"])); } $arHits[$index][] = array("NAME" => $arFields["NAME"], "SECTION" => $arSec["NAME"], "SECTION_PAGE_URL" => $arSec["SECTION_PAGE_URL"], "DETAIL_PAGE_URL" => $arFields["DETAIL_PAGE_URL"], "PHOTO" => $path, "PRICE" => $arPrices, "SALELEADER" => $arFields["PROPERTY_SALELEADER_VALUE"], "NEWPRODUCT" => $arFields["PROPERTY_NEWPRODUCT_VALUE"], "SPECIAL_OFFER" => $arFields["PROPERTY_SPECIAL_OFFER_VALUE"]); } // while( $obEl = $dbRes->GetNextElement() ) $arResult['HITS'][$index] = $arHits[$index]; } // if($arParams["VIEW_HIT"] == "Y" && $arItem['DEPTH_LEVEL'] == 1) } // foreach($arResult as &$arItem => $index) if ($obCache->StartDataCache($life_time, $cache_id, "/")) { $obCache->EndDataCache(array("MENU_HITS" => $arHits)); } }
<div class="col l3 no-padding"> <div class="action-panel"> <?if(!empty($arResult['OFFERS'])): $offers = array(); $quentity_product = 0; $num=0; foreach($arResult['OFFERS'] as $i=>$itemOffer): $minPrice = (isset($itemOffer['RATIO_PRICE']) ? $itemOffer['RATIO_PRICE'] : $itemOffer['MIN_PRICE']); $option = ''; foreach($itemOffer['PROPERTIES']['CML2_ATTRIBUTES']['VALUE'] as $a=>$item): if($a==0){ $option .= $item;} else{$option .= ' '.$item;} endforeach; $quentity = CCatalogProduct::GetByID($itemOffer['ID']); $itemOffer['CATALOG_QUANTITY'] = $quentity['QUANTITY']; $quentity_product += $itemOffer['CATALOG_QUANTITY']; if($itemOffer['CATALOG_QUANTITY']!=0 ): $offers[$num]['ID'] = $itemOffer['ID']; $offers[$num]['PRICE'] = $minPrice['VALUE']; $offers[$num]['OPTION'] = $option; $offers[$num]['NAME'] = $itemOffer['NAME']; $offers[$num]['CATALOG_PRICE_1'] = $itemOffer['CATALOG_PRICE_1']; $offers[$num]['CATALOG_PRICE_ID_1'] = $itemOffer['CATALOG_PRICE_ID_1']; $num++; endif;
function CatalogRecurringCallback($productID, $userID) { global $APPLICATION; 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, Loc::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"], Loc::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, Loc::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, Loc::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, Loc::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, Loc::getMessage("I_NO_IBLOCK_ELEM")), "NO_IBLOCK_ELEMENT"); return false; } } else { if ('R' > CIBlock::GetPermission($arIBlockElement['IBLOCK_ID'], $userID)) { $APPLICATION->ThrowException(str_replace("#ID#", $productID, Loc::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"], Loc::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, Loc::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 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' => '', 'MODULE_ID' => 'catalog'); if ($arOneDiscount['COUPON']) { $arOneList['COUPON'] = $arOneDiscount['COUPON']; } $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 == CCatalogProduct::TIME_PERIOD_HOUR) { $recurSchemeVal = mktime(date("H") + $recurLength, date("i"), date("s"), date("m"), date("d"), date("Y")); } elseif ($recurType == CCatalogProduct::TIME_PERIOD_DAY) { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + $recurLength, date("Y")); } elseif ($recurType == CCatalogProduct::TIME_PERIOD_WEEK) { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7 * $recurLength, date("Y")); } elseif ($recurType == CCatalogProduct::TIME_PERIOD_MONTH) { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + $recurLength, date("d"), date("Y")); } elseif ($recurType == CCatalogProduct::TIME_PERIOD_QUART) { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + 3 * $recurLength, date("d"), date("Y")); } elseif ($recurType == CCatalogProduct::TIME_PERIOD_SEMIYEAR) { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m") + 6 * $recurLength, date("d"), date("Y")); } elseif ($recurType == CCatalogProduct::TIME_PERIOD_YEAR) { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") + $recurLength); } elseif ($recurType == CCatalogProduct::TIME_PERIOD_DOUBLE_YEAR) { $recurSchemeVal = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") + 2 * $recurLength); } $arResult = array("WEIGHT" => floatval($arProduct["WEIGHT"]), "DIMENSIONS" => serialize(array("WIDTH" => $arProduct["WIDTH"], "HEIGHT" => $arProduct["HEIGHT"], "LENGTH" => $arProduct["LENGTH"])), "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"], "TYPE" => $arProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : NULL, "NEXT_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID)), $recurSchemeVal)); if (!empty($arPrice["DISCOUNT_LIST"])) { $arResult['DISCOUNT_LIST'] = $arDiscountList; } return $arResult; }
/** * функция после добавлением элемента в инфоблока * @param $arFields поля элемента ифоблока * для страницы Объявления * eсли VIP объявление то добавляет корзину * привязывает по ID созданное объявления к товару в корзине * редирект на необходимы url */ function AuthtorizeAfterAds(&$arFields){ unset($_SESSION['user777999authorize']); if($arFields['PROPERTY_VALUES']['114']){ foreach($arFields['PROPERTY_VALUES']['114'] as $key114 => $item114){ if($item114['VALUE']){ foreach($arFields['PROPERTY_VALUES']['113'] as $key113 => $item113){ if($item113['VALUE']){ $arFields['PROPERTY_VALUES']['113'][$key113]=ConvertDateTime($item114['VALUE'], "YYYY-MM-DD HH:MI:SS"); }else{ $arFields['PROPERTY_VALUES']['113'][n0]=ConvertDateTime($item114['VALUE'], "YYYY-MM-DD HH:MI:SS"); } } } } } if(($arFields["IBLOCK_ID"] == 16)&&(!CUser::IsAuthorized())){ global $USER; $rsUser = CUser::GetByID($_SESSION['NEW_USER_ID']); $arUser = $rsUser->Fetch(); $_SESSION['$arUser']=$arUser; $USER = new CUser; $arAuthResult = $USER->Login($arUser['LOGIN'], $arUser['PASSWORD'], "Y","N"); } //$_SESSION['user777authorize']=$arFields; if(($arFields["IBLOCK_ID"] == 16)&&(CModule::IncludeModule("catalog"))&&(CModule::IncludeModule("sale"))){ $price_product=floatval($arFields["PROPERTY_VALUES"][86]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][87]); if($price_product){ $PRODUCT_ID = $arFields['ID']; $PRICE_TYPE_ID = 1; $arFieldsprice = Array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" =>$price_product, "CURRENCY" => "RUB", "QUANTITY_FROM" => 1, ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ($arr = $res->Fetch()) { CPrice::Update($arr["ID"], $arFieldsprice); } else { CPrice::Add($arFieldsprice,true); } } } if ( ( (($arFields["IBLOCK_ID"] == 2)&& (is_numeric($arFields["PROPERTY_VALUES"][73]))) || (($arFields["IBLOCK_ID"] == 15)&& (is_numeric($arFields["PROPERTY_VALUES"][76]))) || (($arFields["IBLOCK_ID"] == 14)&& (is_numeric($arFields["PROPERTY_VALUES"][78]))) ) && CModule::IncludeModule("catalog") && CModule::IncludeModule("sale") && ((strstr($_SERVER['REQUEST_URI'],'/personal/moy-magazin/'))||(strstr($_SERVER['REQUEST_URI'],'/obyavleniya/add-ads/'))) ) { switch($arFields["IBLOCK_ID"]){ case 2: $price_product=floatval($arFields["PROPERTY_VALUES"][73]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][75]); break; case 14: $price_product=floatval($arFields["PROPERTY_VALUES"][78]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][79]); break; case 15: $price_product=floatval($arFields["PROPERTY_VALUES"][76]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][77]); break; } if($price_product){ $PRODUCT_ID = $arFields['ID']; $PRICE_TYPE_ID = 1; if($quantity_product){ $ar_res_product=CCatalogProduct::GetByID($PRODUCT_ID); if($ar_res_product['QUANTITY']!=""){ $arFields_quant = array( 'QUANTITY' => $quantity_product ); CCatalogProduct::Update($PRODUCT_ID, $arFields_quant); }else{ $arFields_quant = array( 'ID'=>$PRODUCT_ID, 'QUANTITY' => $quantity_product ); CCatalogProduct::Add($arFields_quant); } } $arFieldsprice = Array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" =>$price_product, "CURRENCY" => "RUB", ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ($arr = $res->Fetch()) { CPrice::Update($arr["ID"], $arFieldsprice,true); $_SESSION['price_add']=$arr; } else { CPrice::Add($arFieldsprice,true); } } } // добавление в корзину vip и поднять if(($arFields["IBLOCK_ID"] == 16)&&(($arFields["PROPERTY_VALUES"][81][0]==40)||($arFields["PROPERTY_VALUES"][81][0]==46))){ unset($_SESSION['ELEMENT_ADS_ID']); if(($_REQUEST['CODE'])&&(CModule::IncludeModule("iblock"))){ if((CModule::IncludeModule("catalog"))&&(CModule::IncludeModule("sale"))){ $dbBasketItems = CSaleBasket::GetList( array(), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, array("ID", "NAME") ); if($arFields["PROPERTY_VALUES"][81][0]==46){ $test_ads="TEST_ADSUP"; } if($arFields["PROPERTY_VALUES"][81][0]==40){ $test_ads="TEST_VIP"; } while ($arBasketItems = $dbBasketItems->Fetch()) { $dbProp = CSaleBasket::GetPropsList(array("SORT" => "ASC", "ID" => "ASC"), array("BASKET_ID" => $arBasketItems["ID"])); if($arProp = $dbProp -> GetNext()) { $props[] = $arProp; $dbProp = CSaleBasket::GetPropsList(array("SORT" => "ASC", "ID" => "ASC"), array("BASKET_ID" => $arBasketItems["ID"])); if($arProp = $dbProp -> GetNext()) { if($arProp['CODE']==$test_ads){ $ELEMENT_ID = intval($arProp['VALUE']); if($ELEMENT_ID==$_REQUEST['CODE']){ $vip=true; } } } } } } } //var_dump($vip);die(); if(!$vip){ $arPropsBasket = array(); if($arFields["PROPERTY_VALUES"][81][0]==46){ $code_price="up-ads"; $arPropsBasket[] = array( "NAME" => "Название: ".$arFields['NAME'], "CODE" => "TEST_ADSUP", "VALUE" => $arFields['ID'] ); } if($arFields["PROPERTY_VALUES"][81][0]==40){ $code_price="vip-ads"; $arPropsBasket[] = array( "NAME" => "Название: ".$arFields['NAME'], "CODE" => "TEST_VIP", "VALUE" => $arFields['ID'] ); } $arSelect2 = Array("ID", "IBLOCK_ID", "NAME","PROPERTY_*"); $arFilter2 = Array("IBLOCK_ID"=>17, "CODE"=>$code_price, "ACTIVE"=>"Y"); $res2 = CIBlockElement::GetList(Array(), $arFilter2, false, Array("nPageSize"=>1), $arSelect2); while($ob2 = $res2->GetNextElement()){ $arFieldIdAds = $ob2->GetFields(); if (CModule::IncludeModule("sale")) { $base_price=CPrice::GetBasePrice($arFieldIdAds['ID']); $arFieldsB = array( "PRODUCT_ID" => $arFieldIdAds['ID'], "PRICE" => $base_price['PRICE'], "CURRENCY" => "RUB", "QUANTITY" => 1, "LID" => LANG, "NAME" => $arFieldIdAds['NAME'], ); $arFieldsB["PROPS"] = $arPropsBasket; $id_basket = CSaleBasket::Add($arFieldsB); $db_res = CSaleBasket::GetPropsList( array( "SORT" => "ASC", "NAME" => "ASC" ), array("BASKET_ID" => $id_basket) ); while ($ar_res = $db_res->Fetch()) { $_SESSION['order_fields_after'][]= $ar_res["NAME"]."=".$ar_res["VALUE"]."<br>"; } } } } unset($_SESSION['NEW_USER_ID']); LocalRedirect('/personal/cart/'); } if(($arFields["IBLOCK_ID"] == 16)&&($arFields["PROPERTY_VALUES"][81][0]==47)){ $_SESSION['ELEMENT_ADS_ID']=$arFields['ID']; } }
} else { $currentPrice = $currentPrice - $currentDiscount; } } $vatRate = $arPrice["PRICE"]["VAT_RATE"]; $fieldValue = FormatCurrency($currentPrice, $arPrice["PRICE"]["CURRENCY"]); if (DoubleVal($nearestQuantity) != DoubleVal($QUANTITY)) { $fieldValue .= str_replace("#CNT#", $nearestQuantity, GetMessage("SOPS_PRICE1")); } } if (strlen($BASE_LANG_CURR) <= 0) { $arCurFormat = CCurrencyLang::GetCurrencyFormat($arPrice["PRICE"]["CURRENCY"]); $priceValutaFormat = str_replace("#", '', $arCurFormat["FORMAT_STRING"]); } $row->AddField("PRICE", $fieldValue); $arCatalogProduct = CCatalogProduct::GetByID($arItems["ID"]); $balance = FloatVal($arCatalogProduct["QUANTITY"]); $row->AddField("BALANCE", $balance); $URL = CIBlock::ReplaceDetailUrl($arItems["DETAIL_PAGE_URL"], $arItems, true); $arPriceType = GetCatalogGroup($arPrice["PRICE"]["CATALOG_GROUP_ID"]); $PriceType = $arPriceType["NAME_LANG"]; $productImg = ""; if ($arItems["PREVIEW_PICTURE"] != "") { $productImg = $arItems["PREVIEW_PICTURE"]; } elseif ($arItems["DETAIL_PICTURE"] != "") { $productImg = $arItems["DETAIL_PICTURE"]; } $ImgUrl = ""; if ($productImg != "") { $arFile = CFile::GetFileArray($productImg); $productImg = CFile::ResizeImageGet($arFile, array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false);
function nodeHandler(CDataXML $value) { $value = $value->GetArray(); $value = $value[GetMessage("CC_BSC1_DOCUMENT")]; if ($value["#"][GetMessage("CC_BSC1_OPERATION")][0]["#"] == GetMessage("CC_BSC1_ORDER")) { $orderId = IntVal($value["#"][GetMessage("CC_BSC1_NUMBER")][0]["#"]); $arOrder = array(); $arItem = array(); $arOrder["AMOUNT"] = $value["#"][GetMessage("CC_BSC1_SUMM")][0]["#"]; $arOrder["AMOUNT"] = str_replace($SumFormat, ".", $arOrder["AMOUNT"]); $arOrder["COMMENT"] = $value["#"][GetMessage("CC_BSC1_COMMENT")][0]["#"]; foreach ($value["#"][GetMessage("CC_BSC1_REK_VALUES")][0]["#"][GetMessage("CC_BSC1_REK_VALUE")] as $val) { $arOrder["TRAITS"][$val["#"][GetMessage("CC_BSC1_NAME")][0]["#"]] = $val["#"][GetMessage("CC_BSC1_VALUE")][0]["#"]; } $taxValue = 0; $taxValueTmp = 0; $taxName = ""; if (is_array($value["#"][GetMessage("CC_BSC1_ITEMS")][0]["#"][GetMessage("CC_BSC1_ITEM")])) { foreach ($value["#"][GetMessage("CC_BSC1_ITEMS")][0]["#"][GetMessage("CC_BSC1_ITEM")] as $val) { $val = $val["#"]; $productID = $val[GetMessage("CC_BSC1_ID")][0]["#"]; $bGood = false; $discountPrice = ""; $priceAll = str_replace($SumFormat, ".", $val[GetMessage("CC_BSC1_SUMM")][0]["#"]); $priceone = str_replace($SumFormat, ".", $val[GetMessage("CC_BSC1_PRICE_PER_UNIT")][0]["#"]); $quantity = str_replace($QuantityFormat, ".", $val[GetMessage("CC_BSC1_QUANTITY")][0]["#"]); $price = $priceAll / $quantity; if ($priceone != $price) { $discountPrice = $priceone - $price; } //DISCOUNTS! $arItem[$productID] = array("NAME" => $val[GetMessage("CC_BSC1_NAME")][0]["#"], "PRICE" => $price, "QUANTITY" => $quantity, "DISCOUNT_PRICE" => $discountPrice); if (is_array($val[GetMessage("CC_BSC1_PROPS_ITEMS")][0]["#"][GetMessage("CC_BSC1_PROP_ITEM")])) { foreach ($val[GetMessage("CC_BSC1_PROPS_ITEMS")][0]["#"][GetMessage("CC_BSC1_PROP_ITEM")] as $val1) { $arItem[$productID]["ATTRIBUTES"][$val1["#"][GetMessage("CC_BSC1_NAME")][0]["#"]] = $val1["#"][GetMessage("CC_BSC1_VALUE")][0]["#"]; } } if (is_array($val[GetMessage("CC_BSC1_REK_VALUES")][0]["#"][GetMessage("CC_BSC1_REK_VALUE")])) { foreach ($val[GetMessage("CC_BSC1_REK_VALUES")][0]["#"][GetMessage("CC_BSC1_REK_VALUE")] as $val1) { if ($val1["#"][GetMessage("CC_BSC1_NAME")][0]["#"] == GetMessage("CC_BSC1_ITEM_TYPE")) { $arItem[$productID]["TYPE"] = $val1["#"][GetMessage("CC_BSC1_VALUE")][0]["#"]; } } } if (strlen($value["#"][GetMessage("CC_BSC1_TAXES")][0]["#"][GetMessage("CC_BSC1_TAX")][0]["#"][GetMessage("CC_BSC1_NAME")][0]["#"]) > 0) { $taxValueTmp = $val[GetMessage("CC_BSC1_TAXES")][0]["#"][GetMessage("CC_BSC1_TAX")][0]["#"][GetMessage("CC_BSC1_TAX_VALUE")][0]["#"]; $arItem[$productID]["VAT_RATE"] = $taxValueTmp / 100; if (IntVal($taxValueTmp) > IntVal($taxValue)) { $taxName = $val[GetMessage("CC_BSC1_TAXES")][0]["#"][GetMessage("CC_BSC1_TAX")][0]["#"][GetMessage("CC_BSC1_NAME")][0]["#"]; $taxValue = $taxValueTmp; } } } } if (IntVal($taxValue) > 0) { $price = str_replace($SumFormat, ".", $value["#"][GetMessage("CC_BSC1_TAXES")][0]["#"][GetMessage("CC_BSC1_TAX")][0]["#"][GetMessage("CC_BSC1_SUMM")][0]["#"]); $arOrder["TAX"] = array("NAME" => $taxName, "VALUE" => $taxValue, "IS_IN_PRICE" => $value["#"][GetMessage("CC_BSC1_TAXES")][0]["#"][GetMessage("CC_BSC1_TAX")][0]["#"][GetMessage("CC_BSC1_IN_PRICE")][0]["#"] == "true" ? "Y" : "N", "VALUE_MONEY" => $price); } $arOrder["items"] = $arItem; $v = $arOrder; if ($orderInfo = CSaleOrder::GetByID($orderId)) { if ($orderInfo["PAYED"] != "Y" && $orderInfo["ALLOW_DELIVERY"] != "Y" && $orderInfo["STATUS_ID"] != "F") { $dbOrderTax = CSaleOrderTax::GetList(array(), array("ORDER_ID" => $orderId), false, false, array("ID", "TAX_NAME", "VALUE", "VALUE_MONEY", "CODE", "IS_IN_PRICE")); $bTaxFound = false; if ($arOrderTax = $dbOrderTax->Fetch()) { $bTaxFound = true; if (IntVal($arOrderTax["VALUE_MONEY"]) != IntVal($v["TAX"]["VALUE_MONEY"]) || IntVal($arOrderTax["VALUE"]) != IntVal($v["TAX"]["VALUE"]) || $arOrderTax["IS_IN_PRICE"] != $v["TAX"]["IS_IN_PRICE"]) { if (IntVal($v["TAX"]["VALUE"]) > 0) { $arFields = array("TAX_NAME" => $v["TAX"]["NAME"], "ORDER_ID" => $orderId, "VALUE" => $v["TAX"]["VALUE"], "IS_PERCENT" => "Y", "IS_IN_PRICE" => $v["TAX"]["IS_IN_PRICE"], "VALUE_MONEY" => $v["TAX"]["VALUE_MONEY"], "CODE" => "VAT1C", "APPLY_ORDER" => "100"); CSaleOrderTax::Update($arOrderTax["ID"], $arFields); CSaleOrder::Update($orderId, array("TAX_VALUE" => $v["TAX"]["VALUE_MONEY"])); } else { CSaleOrderTax::Delete($arOrderTax["ID"]); CSaleOrder::Update($orderId, array("TAX_VALUE" => 0)); } } } if (!$bTaxFound) { if (IntVal($v["TAX"]["VALUE"]) > 0) { $arFields = array("TAX_NAME" => $v["TAX"]["NAME"], "ORDER_ID" => $orderId, "VALUE" => $v["TAX"]["VALUE"], "IS_PERCENT" => "Y", "IS_IN_PRICE" => $v["TAX"]["IS_IN_PRICE"], "VALUE_MONEY" => $v["TAX"]["VALUE_MONEY"]); CSaleOrderTax::Add($arFields); CSaleOrder::Update($orderId, array("TAX_VALUE" => $v["TAX"]["VALUE_MONEY"])); } } $dbBasket = CSaleBasket::GetList(array("NAME" => "ASC"), array("ORDER_ID" => $orderId)); $basketSum = 0; while ($arBasket = $dbBasket->Fetch()) { $arFields = array(); if (!empty($v["items"][$arBasket["PRODUCT_XML_ID"]])) { if ($arBasket["QUANTITY"] != $v["items"][$arBasket["PRODUCT_XML_ID"]]["QUANTITY"]) { $arFields["QUANTITY"] = $v["items"][$arBasket["PRODUCT_XML_ID"]]["QUANTITY"]; } if ($arBasket["PRICE"] != $v["items"][$arBasket["PRODUCT_XML_ID"]]["PRICE"]) { $arFields["PRICE"] = $v["items"][$arBasket["PRODUCT_XML_ID"]]["PRICE"]; } if ($arBasket["VAT_RATE"] != $v["items"][$arBasket["PRODUCT_XML_ID"]]["VAT_RATE"]) { $arFields["VAT_RATE"] = $v["items"][$arBasket["PRODUCT_XML_ID"]]["VAT_RATE"]; } if ($arBasket["DISCOUNT_PRICE"] != $v["items"][$arBasket["PRODUCT_XML_ID"]]["DISCOUNT_PRICE"]) { $arFields["DISCOUNT_PRICE"] = $v["items"][$arBasket["PRODUCT_XML_ID"]]["DISCOUNT_PRICE"]; } if (count($arFields) > 0) { CSaleBasket::Update($arBasket["ID"], $arFields); } $v["items"][$arBasket["PRODUCT_XML_ID"]]["CHECKED"] = "Y"; } else { CSaleBasket::Delete($arBasket["ID"]); } } foreach ($v["items"] as $itemID => $arItem) { if ($arItem["CHECKED"] != "Y") { if ($arItem["TYPE"] == GetMessage("CC_BSC1_ITEM")) { CModule::IncludeModule("iblock"); $dbIBlockElement = CIBlockElement::GetList(array(), array("XML_ID" => $itemID, "ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y"), false, false, array("ID", "IBLOCK_ID", "XML_ID", "NAME", "DETAIL_PAGE_URL")); if ($arIBlockElement = $dbIBlockElement->GetNext()) { $dbIBlock = CIBlock::GetList(array(), array("ID" => $arIBlockElement["IBLOCK_ID"])); if ($arIBlock = $dbIBlock->Fetch()) { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $arIBlock["XML_ID"]); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arIBlockElement["XML_ID"]); $arProduct = CCatalogProduct::GetByID($arIBlockElement["ID"]); $arFields = array("ORDER_ID" => $orderId, "PRODUCT_ID" => $arIBlockElement["ID"], "PRICE" => $arItem["PRICE"], "CURRENCY" => $orderInfo["CURRENCY"], "WEIGHT" => $arProduct["WEIGHT"], "QUANTITY" => $arItem["QUANTITY"], "LID" => $orderInfo["LID"], "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arIBlockElement["~NAME"], "CALLBACK_FUNC" => "CatalogBasketCallback", "MODULE" => "catalog", "NOTES" => $arProduct["CATALOG_GROUP_NAME"], "ORDER_CALLBACK_FUNC" => "CatalogBasketOrderCallback", "CANCEL_CALLBACK_FUNC" => "CatalogBasketCancelCallback", "PAY_CALLBACK_FUNC" => "CatalogPayOrderCallback", "DETAIL_PAGE_URL" => $arIBlockElement["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $arIBlock["XML_ID"], "PRODUCT_XML_ID" => $arIBlockElement["XML_ID"], "IGNORE_CALLBACK_FUNC" => "Y", "VAT_RATE" => $arItem["VAT_RATE"]); CSaleBasket::Add($arFields); } else { $this->strError .= "\n" . GetMessage("CC_BSC1_PRODUCT_NOT_FOUND") . $orderId . " - [" . $itemID . "] " . $arItem["NAME"]; } } elseif ($arItem["TYPE"] == GetMessage("CC_BSC1_SERVICE")) { if (IntVal($arItem["PRICE"]) != IntVal($orderInfo["PRICE_DELIVERY"])) { CSaleOrder::Update($orderId, array("PRICE_DELIVERY" => $arItem["PRICE"])); } } } } $arOrderFields = array(); if ($v["AMOUNT"] != $orderInfo["PRICE"]) { $arOrderFields = array("PRICE" => $v["AMOUNT"]); } if (DoubleVal($orderInfo["DISCOUNT_VALUE"]) > 0) { $arOrderFields["DISCOUNT_VALUE"] = 0; } $arOrderFields["UPDATED_1C"] = "Y"; if (!empty($arOrderFields)) { CSaleOrder::Update($orderId, $arOrderFields); } } else { $this->strError .= "\n" . GetMessage("CC_BSC1_FINAL_NOT_EDIT", array("#ID#" => $orderId)); } $arAditFields = array(); if ($v["TRAITS"][GetMessage("CC_BSC1_CANCELED")] == "true") { if ($orderInfo["CANCELED"] == "N") { CSaleOrder::CancelOrder($orderId, "Y", $v["COMMENT"]); } $arAditFields["UPDATED_1C"] = "Y"; } else { if ($orderInfo["CANCELED"] == "Y") { CSaleOrder::CancelOrder($orderId, "N", $v["COMMENT"]); } $arAditFields["UPDATED_1C"] = "Y"; if (strlen($v["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_DATE")]) > 1) { if ($orderInfo["PAYED"] == "N") { CSaleOrder::PayOrder($orderId, "Y"); } $arAditFields["PAY_VOUCHER_DATE"] = CDatabase::FormatDate(str_replace("T", " ", $v["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_DATE")]), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)); if (strlen($v["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_NUM")]) > 0) { $arAditFields["PAY_VOUCHER_NUM"] = $v["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_NUM")]; } $arAditFields["UPDATED_1C"] = "Y"; } if (strlen($v["TRAITS"][GetMessage("CC_BSC1_1C_DELIVERY_DATE")]) > 1) { if ($orderInfo["ALLOW_DELIVERY"] == "N") { CSaleOrder::DeliverOrder($orderId, "Y"); } $arAditFields["DATE_ALLOW_DELIVERY"] = CDatabase::FormatDate(str_replace("T", " ", $v["TRAITS"][GetMessage("CC_BSC1_1C_DELIVERY_DATE")]), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)); if (strlen($arParams["FINAL_STATUS_ON_DELIVERY"]) > 0 && $orderInfo["STATUS_ID"] != "F" && $orderInfo["STATUS_ID"] != $arParams["FINAL_STATUS_ON_DELIVERY"]) { CSaleOrder::StatusOrder($orderId, $arParams["FINAL_STATUS_ON_DELIVERY"]); } $arAditFields["UPDATED_1C"] = "Y"; } } if (count($arAditFields) > 0) { CSaleOrder::Update($orderId, $arAditFields); } } else { $this->strError .= "\n" . GetMessage("CC_BSC1_ORDER_NOT_FOUND", array("#ID#" => $orderId)); } } }
if ( $boolCatalogPrice && CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ID, "element_edit_price") ) { $arCatalogProduct = array(); if (isset($arFields['CATALOG_WEIGHT']) && '' != $arFields['CATALOG_WEIGHT']) $arCatalogProduct['WEIGHT'] = $arFields['CATALOG_WEIGHT']; if (isset($arFields['CATALOG_VAT_INCLUDED']) && !empty($arFields['CATALOG_VAT_INCLUDED'])) $arCatalogProduct['VAT_INCLUDED'] = $arFields['CATALOG_VAT_INCLUDED']; if (isset($arFields['CATALOG_QUANTITY_TRACE']) && !empty($arFields['CATALOG_QUANTITY_TRACE'])) $arCatalogProduct['QUANTITY_TRACE'] = $arFields['CATALOG_QUANTITY_TRACE']; if ('Y' != $strUseStoreControl) { if (isset($arFields['CATALOG_QUANTITY']) && '' != $arFields['CATALOG_QUANTITY']) $arCatalogProduct['QUANTITY'] = $arFields['CATALOG_QUANTITY']; } $boolProductExists = ($boolMethodExist ? CCatalogProduct::IsExistProduct($ID) : CCatalogProduct::GetByID($ID) ); if (!$boolProductExists) { $arCatalogProduct['ID'] = $ID; CCatalogProduct::Add($arCatalogProduct, false); } else { if (!empty($arCatalogProduct)) CCatalogProduct::Update($ID, $arCatalogProduct); } if (isset($arFields['CATALOG_MEASURE_RATIO']) && '' != trim($arFields['CATALOG_MEASURE_RATIO'])) { $intRatioID = 0; $rsRatios = CCatalogMeasureRatio::getList( array(), array('PRODUCT_ID' => $ID), false, false, array('ID', 'PRODUCT_ID') ); if ($arRatio = $rsRatios->Fetch()) { $intRatioID = intval($arRatio['ID']);
function fGetFormatedProduct($USER_ID, $LID, $arData, $currency, $type = '') { global $crmMode; $result = ""; $arSet = array(); if (!is_array($arData["ITEMS"]) || count($arData["ITEMS"]) <= 0) return $result; $result = "<table width=\"100%\">"; if (CModule::IncludeModule('catalog') && CModule::IncludeModule('iblock')) { $arProductId = array(); $arDataTab = array(); $arSkuParentChildren = array(); $arSkuParentId = array(); $arSkuParent = array(); foreach ($arData["ITEMS"] as $item) { if (!empty($item["CURRENCY"]) && $item["CURRENCY"] != $currency) { if (floatval($item["PRICE"]) > 0) $item["PRICE"] = CCurrencyRates::ConvertCurrency($item["PRICE"], $item["CURRENCY"], $currency); if (floatval($item["DISCOUNT_PRICE"]) > 0) $item["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($item["DISCOUNT_PRICE"], $item["CURRENCY"], $currency); $item["CURRENCY"] = $currency; } /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($item)) { if (method_exists($productProvider, "GetSetItems")) { $itemInfo = (isset($item['ID']) ? array('BASKET_ID' => $item['ID']) : array()); $arSets = $productProvider::GetSetItems($item["PRODUCT_ID"], CSaleBasket::TYPE_SET, $itemInfo); unset($itemInfo); if (is_array($arSets)) { foreach ($arSets as $arSetData) { foreach ($arSetData["ITEMS"] as $setItem) { $setItem["FUSER_ID"] = $item["FUSER_ID"]; $setItem["LID"] = $item["LID"]; $setItem["MODULE"] = $item["MODULE"]; $setItem["PRODUCT_PROVIDER_CLASS"] = $productProvider; $setItem["SET_PARENT_ID"] = $item["ID"]; $arSet[$item["PRODUCT_ID"]][] = $setItem; } } } } } if ($item["MODULE"] == "catalog") { $arProductId[$item["PRODUCT_ID"]] = $item["PRODUCT_ID"]; $arDataTab[$item["PRODUCT_ID"]] = $item; $arParent = CCatalogSku::GetProductInfo($item["PRODUCT_ID"]); if ($arParent) { $arSkuParentChildren[$item["PRODUCT_ID"]] = $arParent["ID"]; $arSkuParentId[$arParent["ID"]] = $arParent["ID"]; } } } if(!empty($arSkuParentId)) { $res = CIBlockElement::GetList(array(), array("ID" => $arSkuParentId), false, false, array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "NAME", "DETAIL_PAGE_URL")); while ($arItems = $res->GetNext()) $arSkuParent[$arItems["ID"]] = $arItems; } if(!empty($arProductId)) { $dbProduct = CIBlockElement::GetList(array(), array("ID" => $arProductId), false, false, array('ID', 'IBLOCK_ID', 'IBLOCK_SECTION_ID', 'DETAIL_PICTURE', 'PREVIEW_PICTURE', 'IBLOCK_TYPE_ID')); while($arProduct = $dbProduct->Fetch()) { $imgCode = 0; $arImgProduct = false; $arFile = false; $imgUrl = ''; $imgProduct = ''; $arDataTab[$arProduct['ID']]['IBLOCK_ID'] = $arProduct['IBLOCK_ID']; $arDataTab[$arProduct['ID']]['IBLOCK_SECTION_ID'] = $arProduct['IBLOCK_SECTION_ID']; $arDataTab[$arProduct['ID']]['DETAIL_PICTURE'] = $arProduct['DETAIL_PICTURE']; $arDataTab[$arProduct['ID']]['PREVIEW_PICTURE'] = $arProduct['PREVIEW_PICTURE']; $arDataTab[$arProduct['ID']]['IBLOCK_TYPE_ID'] = $arProduct['IBLOCK_TYPE_ID']; $item = $arDataTab[$arProduct['ID']]; if ($item["PREVIEW_PICTURE"] == "" && $item["DETAIL_PICTURE"] == "" && is_set($arSkuParentChildren[$item["PRODUCT_ID"]])) { $idTmp = $arSkuParentChildren[$item["PRODUCT_ID"]]; $item["DETAIL_PICTURE"] = $arSkuParent[$idTmp]["DETAIL_PICTURE"]; $item["PREVIEW_PICTURE"] = $arSkuParent[$idTmp]["PREVIEW_PICTURE"]; } if ($item["DETAIL_PICTURE"] > 0) $imgCode = $item["DETAIL_PICTURE"]; elseif ($item["PREVIEW_PICTURE"] > 0) $imgCode = $item["PREVIEW_PICTURE"]; $arSkuProperty = CSaleProduct::GetProductSkuProps($item["PRODUCT_ID"], $item["IBLOCK_ID"]); $item["NAME"] = htmlspecialcharsex($item["NAME"]); $item["EDIT_PAGE_URL"] = htmlspecialcharsex($item["EDIT_PAGE_URL"]); $item["CURRENCY"] = htmlspecialcharsex($item["CURRENCY"]); if ($imgCode > 0) { $arFile = CFile::GetFileArray($imgCode); $arImgProduct = CFile::ResizeImageGet($arFile, array('width'=>80, 'height'=>80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); } if (is_array($arImgProduct)) { $imgUrl = $arImgProduct["src"]; $imgProduct = "<a href=\"".$item["EDIT_PAGE_URL"]."\" target=\"_blank\"><img src=\"".$imgUrl."\" alt=\"\" title=\"".$item["NAME"]."\" ></a>"; } else $imgProduct = "<div class='no_foto'>".GetMessage('NO_FOTO')."</div>"; $arCurFormat = CCurrencyLang::GetCurrencyFormat($item["CURRENCY"]); $priceValutaFormat = str_replace("#", '', $arCurFormat["FORMAT_STRING"]); $currentTotalPrice = ($item["PRICE"] + $item["DISCOUNT_PRICE"]); $discountPercent = 0; if ($item["DISCOUNT_PRICE"] > 0) $discountPercent = intval(($item["DISCOUNT_PRICE"] * 100) / $currentTotalPrice); $arProduct = CCatalogProduct::GetByID($item["PRODUCT_ID"]); $balance = floatval($arProduct["QUANTITY"]); $result .= "<tr id='more_".$type."_".$item["ID"]."'> <td class=\"tab_img\" >".$imgProduct."</td> <td class=\"tab_text\"> <div class=\"order_name\"><a href=\"".$item["EDIT_PAGE_URL"]."\" target=\"_blank\" title=\"".$item["NAME"]."\">".$item["NAME"]."</a></div> <div class=\"order_price\"> ".GetMessage('NEWO_SUBTAB_PRICE').": <b>".SaleFormatCurrency($item["PRICE"], $currency)."</b>"; if (!empty($arSet) && array_key_exists($arProduct["ID"], $arSet)) // show/hide set item link { $result .= '<br/> <div> <a id="set_toggle_link_b'.$arProduct["ID"].'" href="javascript:void(0);" class="dashed-link show-set-link" title="'.GetMessage("SOE_SHOW_SET").'" onclick="fToggleSetItems(\'b'.$arProduct["ID"].'\');">'.GetMessage("SOE_SHOW_SET").'</a> </div>'; } $result .= "</div>"; $arResult = CSaleProduct::GetProductSku($USER_ID, $LID, $item["PRODUCT_ID"], $item["NAME"], $currency, $arProduct); if (count($arResult["SKU_ELEMENTS"]) > 0) { foreach ($arResult["SKU_ELEMENTS"] as $key => $val) { $arTmp = array(); foreach ($val as $k => $v) { if (is_numeric($k)) { $arTmp[$arResult["SKU_PROPERTIES"][$k]["NAME"]] = $v; } } $arResult["SKU_ELEMENTS"][$key]["SKU_PROPS"] = CUtil::PhpToJSObject($arTmp); } } $arResult["POPUP_MESSAGE"] = array( "PRODUCT_ADD" => GetMessage('NEWO_POPUP_TO_BASKET'), "PRODUCT_ORDER" => GetMessage('NEWO_POPUP_TO_ORDER'), "PRODUCT_NOT_ADD" => GetMessage('NEWO_POPUP_DONT_CAN_BUY'), "PRODUCT_PRICE_FROM" => GetMessage('NEWO_POPUP_FROM') ); if (count($arResult["SKU_ELEMENTS"]) <= 0) $result .= "<a href=\"javascript:void(0);\" class=\"get_new_order\" onClick=\"fAddToBasketMoreProduct('".$type."', ".$item["PRODUCT_ID"].");return false;\"><span></span>".GetMessage('NEWO_SUBTAB_ADD_BASKET')."</a><br>"; else $result .= "<a href=\"javascript:void(0);\" class=\"get_new_order\" onClick=\"fAddToBasketMoreProductSku(".CUtil::PhpToJsObject($arResult['SKU_ELEMENTS']).", ".CUtil::PhpToJsObject($arResult['SKU_PROPERTIES']).", 'basket', ".CUtil::PhpToJsObject($arResult["POPUP_MESSAGE"]).");\"><span></span>".GetMessage('NEWO_SUBTAB_ADD_BASKET')."</a><br>"; if (!$crmMode) { if (count($arResult["SKU_ELEMENTS"]) > 0) { $result .= "<a href=\"javascript:void(0);\" class=\"get_new_order\" onClick=\"fAddToBasketMoreProductSku(".CUtil::PhpToJsObject($arResult['SKU_ELEMENTS']).", ".CUtil::PhpToJsObject($arResult['SKU_PROPERTIES']).", 'neworder', ".CUtil::PhpToJsObject($arResult["POPUP_MESSAGE"]).");\"><span></span>".GetMessage('NEWO_SUBTAB_ADD_ORDER')."</a>"; } else { $cntProd = (floatval($item["QUANTITY"]) > 0) ? floatval($item["QUANTITY"]) : 1; $url = "/bitrix/admin/sale_order_new.php?lang=".LANGUAGE_ID."&user_id=".$USER_ID."&LID=".$LID."&product[".$item["PRODUCT_ID"]."]=".$cntProd; $result .= "<a href=\"".$url."\" target=\"_blank\" class=\"get_new_order\"><span></span>".GetMessage('NEWO_SUBTAB_ADD_ORDER')."</a>"; } } $result .= "</td></tr>"; // show set items if (!empty($arSet) && array_key_exists($arProduct["ID"], $arSet)) { foreach ($arSet[$arProduct["ID"]] as $set) { $editUrl = CIBlock::GetAdminElementEditLink($set["IBLOCK_ID"], $set["ITEM_ID"], array( "find_section_section" => $set["IBLOCK_SECTION_ID"], 'WF' => 'Y', )); if ($set["PREVIEW_PICTURE"] > 0) $imgCode = $set["PREVIEW_PICTURE"]; elseif ($set["DETAIL_PICTURE"] > 0) $imgCode = $set["DETAIL_PICTURE"]; if ($imgCode > 0) { $arFile = CFile::GetFileArray($imgCode); $arImgProduct = CFile::ResizeImageGet($arFile, array('width'=>80, 'height'=>80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); if (is_array($arImgProduct)) { $imgUrl = $arImgProduct["src"]; $img = '<a href="'.$editUrl.'" target="_blank"><img src="'.$arImgProduct["src"].'" alt="" title="'.$set["NAME"].'" ></a>'; } } else $img = '<div class="no_foto">'.GetMessage('SOD_NO_FOTO')."</div>"; $result .= ' <tr style="display:none" class="set_item_b'.$arProduct["ID"].'"> <td class="tab_img">'.$img.'</td> <td class="tab_text"> <div class="order_name"> <a href="'.$editUrl.'" style="font-style:italic" target="_blank" title="'.$set["NAME"].'">'.$set["NAME"].'</a> </div> <div class="order_price">'.GetMessage('NEWO_SUBTAB_PRICE').': <b>'.SaleFormatCurrency($set["PRICE"], $currency).'</b></div> </td> </tr>'; } } }//end foreach } }//end if if ($arData["CNT"] > 2 && $arData["CNT"] != count($arData["ITEMS"])) { $result .= "<tr><td colspan='2' align='right' class=\"more_product\">"; if ($type == "basket") $result .= "<a href='javascript:void(0);' onClick='fGetMoreBasket(\"Y\");' class=\"get_more\">".GetMessage('NEWO_SUBTAB_MORE')."<span></span></a>"; elseif ($type == "viewed") $result .= "<a href='javascript:void(0);' onClick='fGetMoreViewed(\"Y\");' class=\"get_more\">".GetMessage('NEWO_SUBTAB_MORE')."<span></span></a>"; else $result .= "<a href='javascript:void(0);' onClick='fGetMoreRecom();' class=\"get_more\">".GetMessage('NEWO_SUBTAB_MORE')."<span></span></a>"; $result .= "</td></tr>"; } $result .= "</table>"; return $result; }
function prepareProduct4Basket($itemID, $arItem, $orderId, $orderInfo) { $arFields = array(); if(CModule::IncludeModule("iblock")) { $dbIBlockElement = CIBlockElement::GetList(array(), array("XML_ID" => $itemID, "ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y"), false, false, array("ID", "IBLOCK_ID", "XML_ID", "NAME", "DETAIL_PAGE_URL")); if($arIBlockElement = $dbIBlockElement->Fetch()) { if(empty($this->arIBInfo[$arIBlockElement["IBLOCK_ID"]])) { $dbIBlock = CIBlock::GetList( array(), array("ID" => $arIBlockElement["IBLOCK_ID"]) ); if ($arIBlock = $dbIBlock->Fetch()) { $this->arIBInfo[$arIBlockElement["IBLOCK_ID"]] = $arIBlock; } } $arProps[] = array( "NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $this->arIBInfo[$arIBlockElement["IBLOCK_ID"]]["XML_ID"] ); $arProps[] = array( "NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arIBlockElement["XML_ID"] ); $arProduct = CCatalogProduct::GetByID($arIBlockElement["ID"]); $arFields = array( "ORDER_ID" => $orderId, "PRODUCT_ID" => $arIBlockElement["ID"], "PRICE" => $arItem["PRICE"], "CURRENCY" => $orderInfo["CURRENCY"], "WEIGHT" => $arProduct["WEIGHT"], "QUANTITY" => $arItem["QUANTITY"], "LID" => $orderInfo["LID"], "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arIBlockElement["NAME"], "MODULE" => "catalog", "NOTES" => $arProduct["CATALOG_GROUP_NAME"], "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "DETAIL_PAGE_URL" => $arIBlockElement["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $this->arIBInfo[$arIBlockElement["IBLOCK_ID"]]["XML_ID"], "PRODUCT_XML_ID" => $arIBlockElement["XML_ID"], "IGNORE_CALLBACK_FUNC" => "Y", "VAT_RATE" => $arItem["VAT_RATE"], ); } } if(empty($arFields)) { $arFields = array( "ORDER_ID" => $orderId, "PRICE" => $arItem["PRICE"], "CURRENCY" => $orderInfo["CURRENCY"], "QUANTITY" => $arItem["QUANTITY"], "LID" => $orderInfo["LID"], "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arItem["NAME"], "MODULE" => "1c_exchange", "PRODUCT_PROVIDER_CLASS" => false, "CATALOG_XML_ID" => "1c_exchange", "PRODUCT_XML_ID" => $itemID, "IGNORE_CALLBACK_FUNC" => "Y", "VAT_RATE" => $arItem["VAT_RATE"], "DISCOUNT_PRICE" => $arItem["DISCOUNT_PRICE"], ); if($this->bNewVersion) { $arFields["MEASURE_CODE"] = $arItem["MEASURE_CODE"]; $arFields["MEASURE_NAME"] = $arItem["MEASURE_NAME"]; } $ri = new RandomSequence($itemID); $arFields["PRODUCT_ID"] = $ri->rand(1000000, 9999999); } if(strlen($arFields["LID"]) <= 0) $arFields["LID"] = $orderInfo["SITE_ID"]; return $arFields; }
/** * <p>Функция по коду товара ID возвращает все параметры этого товара, включая относящиеся к товару как к элементу информационного блока. </p> <p><b>Важно!</b> Метод нежелателен к использованию в связи с избыточностью данных и низкой производительностью.</p> * * * * * @param int $ID Код товара. * * * * @return array <p>Возвращает ассоциативный массив параметров товара или <i>false</i> в * случае ошибки. Для просмотра всех доступных параметров * воспользуйтесь кодом из приведенного ниже примера. </p><a * name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $ID = 5; * $ar_res = CCatalogProduct::GetByIDEx($ID); * echo "<br>Товар с кодом ".$ID." имеет следующие параметры:<br><pre>"; * print_r($ar_res); * echo "</pre>"; * ?> * <b>Примечание:</b> до версии модуля <b>12.5.6</b> на агенте этот метод выдает ошибку, т.к. использует объект $USER, который еще не определен (см. <a href="https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=3436" target="_blank">учебный курс</a>). * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getbyidex.c95826cc.php * @author Bitrix */ public static function GetByIDEx($ID, $boolAllValues = false) { global $DB, $USER; $boolAllValues = (true == $boolAllValues ? true : false); $ID = intval($ID); if (0 >= $ID) return false; $arFilter = Array("ID" => $ID, "ACTIVE_DATE" => "Y", "ACTIVE" => "Y"); $dbIBlockElement = CIBlockElement::GetList(array(), $arFilter); if ($arIBlockElement = $dbIBlockElement->GetNext()) { if ($arIBlock = CIBlock::GetArrayByID($arIBlockElement["IBLOCK_ID"])) { $arIBlockElement["IBLOCK_ID"] = $arIBlock["ID"]; $arIBlockElement["IBLOCK_NAME"] = htmlspecialcharsbx($arIBlock["NAME"]); $arIBlockElement["~IBLOCK_NAME"] = $arIBlock["NAME"]; $arIBlockElement["PROPERTIES"] = false; $dbProps = CIBlockElement::GetProperty($arIBlock["ID"], $ID, "sort", "asc", Array("ACTIVE"=>"Y", "NON_EMPTY"=>"Y")); if ($arProp = $dbProps->Fetch()) { $arAllProps = array(); do { $strID = (strlen($arProp["CODE"])>0 ? $arProp["CODE"] : $arProp["ID"]); if (is_array($arProp["VALUE"])) { foreach ($arProp["VALUE"] as &$strOneValue) { $strOneValue = htmlspecialcharsbx($strOneValue); } if (isset($strOneValue)) unset($strOneValue); } else { $arProp["VALUE"] = htmlspecialcharsbx($arProp["VALUE"]); } if ($boolAllValues && 'Y' == $arProp['MULTIPLE']) { if (!isset($arAllProps[$strID])) { $arAllProps[$strID] = array( "NAME" => htmlspecialcharsbx($arProp["NAME"]), "VALUE" => array($arProp["VALUE"]), "VALUE_ENUM" => array(htmlspecialcharsbx($arProp["VALUE_ENUM"])), "VALUE_XML_ID" => array(htmlspecialcharsbx($arProp["VALUE_XML_ID"])), "DEFAULT_VALUE" => htmlspecialcharsbx($arProp["DEFAULT_VALUE"]), "SORT" => htmlspecialcharsbx($arProp["SORT"]), "MULTIPLE" => $arProp['MULTIPLE'], ); } else { $arAllProps[$strID]['VALUE'][] = $arProp["VALUE"]; $arAllProps[$strID]['VALUE_ENUM'][] = htmlspecialcharsbx($arProp["VALUE_ENUM"]); $arAllProps[$strID]['VALUE_XML_ID'][] = htmlspecialcharsbx($arProp["VALUE_XML_ID"]); } } else { $arAllProps[$strID] = array( "NAME" => htmlspecialcharsbx($arProp["NAME"]), "VALUE" => $arProp["VALUE"], "VALUE_ENUM" => htmlspecialcharsbx($arProp["VALUE_ENUM"]), "VALUE_XML_ID" => htmlspecialcharsbx($arProp["VALUE_XML_ID"]), "DEFAULT_VALUE" => htmlspecialcharsbx($arProp["DEFAULT_VALUE"]), "SORT" => htmlspecialcharsbx($arProp["SORT"]), "MULTIPLE" => $arProp['MULTIPLE'], ); } } while($arProp = $dbProps->Fetch()); $arIBlockElement["PROPERTIES"] = $arAllProps; } // bugfix: 2007-07-31 by Sigurd $arIBlockElement["PRODUCT"] = CCatalogProduct::GetByID($ID); $dbPrices = CPrice::GetList(array("SORT" => "ASC"), array("PRODUCT_ID" => $ID)); if ($arPrices = $dbPrices->Fetch()) { $arAllPrices = Array(); do { $arAllPrices[$arPrices["CATALOG_GROUP_ID"]] = Array("EXTRA_ID"=>intval($arPrices["EXTRA_ID"]), "PRICE"=>doubleval($arPrices["PRICE"]), "CURRENCY"=>htmlspecialcharsbx($arPrices["CURRENCY"])); } while($arPrices = $dbPrices->Fetch()); $arIBlockElement["PRICES"] = $arAllPrices; } return $arIBlockElement; } } return false; }
function Add2BasketByProductID($PRODUCT_ID, $QUANTITY = 1, $arRewriteFields = array(), $arProductParams = false) { global $APPLICATION; /* for old use */ if (false === $arProductParams) { $arProductParams = $arRewriteFields; $arRewriteFields = array(); } $PRODUCT_ID = IntVal($PRODUCT_ID); if ($PRODUCT_ID <= 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } $QUANTITY = DoubleVal($QUANTITY); if ($QUANTITY <= 0) { $QUANTITY = 1; } if (!CModule::IncludeModule("sale")) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (CModule::IncludeModule("statistic") && IntVal($_SESSION["SESS_SEARCHER_ID"]) > 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $arProduct = CCatalogProduct::GetByID($PRODUCT_ID); if ($arProduct === false) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $CALLBACK_FUNC = "CatalogBasketCallback"; $productProviderClass = "CCatalogProductProvider"; //ADD PRODUCT TO SUBSCRIBE if (isset($arRewriteFields["SUBSCRIBE"]) && $arRewriteFields["SUBSCRIBE"] == "Y") { global $USER; if ($USER->IsAuthorized() && !isset($_SESSION["NOTIFY_PRODUCT"][$USER->GetID()])) { $_SESSION["NOTIFY_PRODUCT"][$USER->GetID()] = array(); } $arBuyerGroups = CUser::GetUserGroup($USER->GetID()); $arPrice = CCatalogProduct::GetOptimalPrice($PRODUCT_ID, 1, $arBuyerGroups, "N", array(), SITE_ID, array()); $arCallbackPrice = array("PRICE" => $arPrice["DISCOUNT_PRICE"], "VAT_RATE" => 0, "CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), "QUANTITY" => 1); } else { $arRewriteFields["SUBSCRIBE"] = "N"; if ($arProduct["CAN_BUY_ZERO"] != 'Y' && $arProduct["QUANTITY_TRACE"] == "Y" && DoubleVal($arProduct["QUANTITY"]) <= 0) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_PRODUCT_RUN_OUT'), "PRODUCT_RUN_OUT"); return false; } $arCallbackPrice = CSaleBasket::ReReadPrice($CALLBACK_FUNC, "catalog", $PRODUCT_ID, $QUANTITY, "N", $productProviderClass); if (!is_array($arCallbackPrice) || empty($arCallbackPrice)) { $APPLICATION->ThrowException(GetMessage('CATALOG_PRODUCT_PRICE_NOT_FOUND'), "NO_PRODUCT_PRICE"); return false; } } $dbIBlockElement = CIBlockElement::GetList(array(), array("ID" => $PRODUCT_ID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array("ID", "IBLOCK_ID", "XML_ID", "NAME", "DETAIL_PAGE_URL")); $arIBlockElement = $dbIBlockElement->GetNext(); if ($arIBlockElement == false) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_IBLOCK_ELEMENT'), "NO_IBLOCK_ELEMENT"); return false; } $arProps = array(); $dbIBlock = CIBlock::GetList(array(), array("ID" => $arIBlockElement["IBLOCK_ID"])); if ($arIBlock = $dbIBlock->Fetch()) { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $arIBlock["XML_ID"]); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arIBlockElement["XML_ID"]); $arPrice = CPrice::GetByID($arCallbackPrice["PRODUCT_PRICE_ID"]); $arFields = array("PRODUCT_ID" => $PRODUCT_ID, "PRODUCT_PRICE_ID" => $arCallbackPrice["PRODUCT_PRICE_ID"], "PRICE" => $arCallbackPrice["PRICE"], "CURRENCY" => $arCallbackPrice["CURRENCY"], "WEIGHT" => $arProduct["WEIGHT"], "QUANTITY" => $QUANTITY, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => $arIBlockElement["~NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arIBlockElement["DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $arIBlock["XML_ID"], "PRODUCT_XML_ID" => $arIBlockElement["XML_ID"], "VAT_RATE" => $arCallbackPrice['VAT_RATE'], "SUBSCRIBE" => $arRewriteFields["SUBSCRIBE"]); if ($arProduct["CAN_BUY_ZERO"] != "Y" && $arProduct["QUANTITY_TRACE"] == "Y") { if (IntVal($arProduct["QUANTITY"]) - $QUANTITY < 0) { $arFields["QUANTITY"] = DoubleVal($arProduct["QUANTITY"]); } } if (is_array($arProductParams) && !empty($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["PROPS"] = $arProps; if (is_array($arRewriteFields) && !empty($arRewriteFields)) { while (list($key, $value) = each($arRewriteFields)) { $arFields[$key] = $value; } } $addres = CSaleBasket::Add($arFields); if ($addres) { if (isset($arRewriteFields["SUBSCRIBE"]) && $arRewriteFields["SUBSCRIBE"] == "Y") { $_SESSION["NOTIFY_PRODUCT"][$USER->GetID()][$PRODUCT_ID] = $PRODUCT_ID; } if (CModule::IncludeModule("statistic")) { CStatistic::Set_Event("sale2basket", "catalog", $arFields["DETAIL_PAGE_URL"]); } } return $addres; }