function catalog_offer_mutator_1c(&$arLoadOffer, &$xOfferNode) { global $arProperties; $sQuantity = $arLoadOffer['QUANTITY']; $newQuanity = 0; $priceTypeId = ''; if ($obPrice = $xOfferNode->SelectNodes('/Цены/Цена/ИдТипаЦены')) { $priceTypeId = $obPrice->textContent(); if ($priceTypeId != '') { $Store = new CCatalogStore(); $storeProd = new CCatalogStoreProduct(); $rsStore = $Store->GetList(array(), array('XML_ID' => $priceTypeId), false, false, array('*')); if ($arStore = $rsStore->Fetch()) { $storeId = $arStore['ID']; } else { $arFields = array("TITLE" => 'Store_' . $priceTypeId, "ACTIVE" => 'Y', "ADDRESS" => '-', "XML_ID" => $priceTypeId); $storeId = CCatalogStore::Add($arFields); } $storeProd->Add(array("PRODUCT_ID" => $arLoadOffer['ID'], "STORE_ID" => $storeId, "AMOUNT" => $sQuantity)); $rsStoreProd = $storeProd->GetList(array(), array('PRODUCT_ID' => $arLoadOffer['ID']), false, false, array('AMOUNT')); while ($arStore = $rsStoreProd->Fetch()) { $newQuanity = $newQuanity + $arStore['AMOUNT']; } if ($newQuanity > 0) { $arLoadOffer['QUANTITY'] = $newQuanity; } } } return $arLoadOffer; }
public static function UpdateFromForm($arFields) { $rsProps = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $arFields['PRODUCT_ID'], "STORE_ID" => $arFields['STORE_ID']), false, false, array('ID')); if ($arID = $rsProps->GetNext()) { return self::Update($arID["ID"], $arFields); } else { return CCatalogStoreProduct::Add($arFields); } }
public static function addToBalanceOfStore($storeId, $productId, $amount) { $rsProps = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $productId, "STORE_ID" => $storeId), false, false, array('ID', 'AMOUNT')); if ($arID = $rsProps->Fetch()) { $amount = $arID["AMOUNT"] + $amount; return self::Update($arID["ID"], array("AMOUNT" => $amount, "PRODUCT_ID" => $productId, "STORE_ID" => $storeId)); } else { return CCatalogStoreProduct::Add(array("PRODUCT_ID" => $productId, "STORE_ID" => $storeId, "AMOUNT" => $amount)); } }
protected function distributeElementsToStores($arFields, $userId) { global $DB; $arErrorElement = array(); if (isset($arFields["ELEMENTS"]) && is_array($arFields["ELEMENTS"])) { foreach ($arFields["ELEMENTS"] as $arElement) { $arErrorElement = self::checkTotalAmount($arElement); if (isset($arElement["STORE_FROM"])) { $rsResult = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $arElement["PRODUCT_ID"], "STORE_ID" => $arElement["STORE_FROM"]), false, false, array('ID', 'AMOUNT')); $arID = $rsResult->Fetch(); $storeFromName = CCatalogStoreControlUtil::getStoreName($arElement["STORE_FROM"]); $productInfo = CCatalogStoreControlUtil::getProductInfo($arElement["PRODUCT_ID"]); if ($arID !== false || $arElement["NEGATIVE_AMOUNT_TRACE"] == 'Y') { $amountForUpdate = doubleval($arID["AMOUNT"]) - $arElement["AMOUNT"]; if ($amountForUpdate >= 0 || $arElement["NEGATIVE_AMOUNT_TRACE"] == 'Y') { if (!CCatalogStoreProduct::UpdateFromForm(array("PRODUCT_ID" => $arElement['PRODUCT_ID'], "STORE_ID" => $arElement['STORE_FROM'], "AMOUNT" => $amountForUpdate))) { return false; } } else { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_INSUFFICIENTLY_AMOUNT", array("#STORE#" => '"' . $storeFromName . '"', "#PRODUCT#" => '"' . $productInfo["NAME"] . '"'))); return false; } } else { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_INSUFFICIENTLY_AMOUNT", array("#STORE#" => $storeFromName, "#PRODUCT#" => $productInfo["NAME"]))); return false; } } if (isset($arElement["STORE_TO"])) { if (!CCatalogStoreProduct::addToBalanceOfStore($arElement["STORE_TO"], $arElement["PRODUCT_ID"], $arElement["AMOUNT"])) { return false; } } if (isset($arElement["BARCODES"]) && is_array($arElement["BARCODES"])) { foreach ($arElement["BARCODES"] as $arBarCode) { if (!self::applyBarCode($arBarCode, $userId)) { return false; } } } $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 = " . $arElement["PRODUCT_ID"] . " AND CS.ACTIVE = 'Y' GROUP BY QUANTITY_RESERVED ", true); if ($arAmount = $dbAmount->Fetch()) { $arFields = array(); if (isset($arElement["PURCHASING_INFO"])) { $arFields = $arElement["PURCHASING_INFO"]; } $arFields["QUANTITY"] = doubleval($arAmount["SUM"] - $arAmount["RESERVED"]); if (!CCatalogProduct::Update($arElement["PRODUCT_ID"], $arFields)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_PURCHASING_INFO_ERROR")); return false; } } else { return false; } } } if (!empty($arErrorElement)) { return $arErrorElement; } return true; }
if (isset(${"CAT_USER_GROUP_ID_" . $arGroup["ID"]}) && ${"CAT_USER_GROUP_ID_" . $arGroup["ID"]} == "Y") { if (IntVal(${"CAT_ACCESS_LENGTH_" . $arGroup["ID"]}) != IntVal($arCurProductGroups[$arGroup["ID"]]["ACCESS_LENGTH"]) || ${"CAT_ACCESS_LENGTH_TYPE_" . $arGroup["ID"]} != $arCurProductGroups[$arGroup["ID"]]["ACCESS_LENGTH_TYPE"]) { $arCatalogFields = array("ACCESS_LENGTH" => IntVal(${"CAT_ACCESS_LENGTH_" . $arGroup["ID"]}), "ACCESS_LENGTH_TYPE" => ${"CAT_ACCESS_LENGTH_TYPE_" . $arGroup["ID"]}); CCatalogProductGroups::Update($arCurProductGroups[$arGroup["ID"]]["ID"], $arCatalogFields); } } else { CCatalogProductGroups::Delete($arCurProductGroups[$arGroup["ID"]]["ID"]); } } else { if (isset(${"CAT_USER_GROUP_ID_" . $arGroup["ID"]}) && ${"CAT_USER_GROUP_ID_" . $arGroup["ID"]} == "Y") { $arCatalogFields = array("PRODUCT_ID" => $ID, "GROUP_ID" => $arGroup["ID"], "ACCESS_LENGTH" => IntVal(${"CAT_ACCESS_LENGTH_" . $arGroup["ID"]}), "ACCESS_LENGTH_TYPE" => ${"CAT_ACCESS_LENGTH_TYPE_" . $arGroup["ID"]}); CCatalogProductGroups::Add($arCatalogFields); } } } } if ($USER->CanDoOperation('catalog_store')) { $rsStores = CCatalogStore::GetList(array(), array('ACTIVE' => 'Y'), false, false, array('ID')); while ($arStore = $rsStores->Fetch()) { if (isset($_POST['AR_AMOUNT'][$arStore['ID']])) { $arStoreProductFields = array("PRODUCT_ID" => $ID, "STORE_ID" => $arStore['ID'], "AMOUNT" => $_POST['AR_AMOUNT'][$arStore['ID']]); if (!CCatalogStoreProduct::UpdateFromForm($arStoreProductFields)) { $bVarsFromForm = true; } } } } } } } }
public static function GetProductStores($arParams) { $strUseStoreControl = COption::GetOptionString('catalog', 'default_use_store_control'); //without store control stores are used for information purposes only and manual deduction won't work if ($strUseStoreControl == "N") { return false; } $arResult = array(); $arStoreID = array(); if (intval($arParams["PRODUCT_ID"] < 0)) { return false; } $arFilter = array("ACTIVE" => "Y", "SHIPPING_CENTER" => "Y"); if (isset($arParams["SITE_ID"]) && strlen($arParams["SITE_ID"]) > 0) { $arFilter["+SITE_ID"] = $arParams["SITE_ID"]; } $proxyStoresCountKey = md5(join('|', $arFilter)); if (!($arStoreID = static::getHitCache('CATALOG_STORE', $proxyStoresCountKey))) { $dbStoreRes = CCatalogStore::GetList(array("SORT" => "DESC"), $arFilter, false, false, array("ID", "ACTIVE")); while ($arStoreRes = $dbStoreRes->Fetch()) { $arStoreID[] = $arStoreRes["ID"]; } static::setHitCache('CATALOG_STORE', $proxyStoresCountKey, $arStoreID); } if (!($arResult = static::getHitCache('CATALOG_STORE_PRODUCT', $arParams["PRODUCT_ID"]))) { $dbRes = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $arParams["PRODUCT_ID"]), false, false, array("STORE_NAME", "STORE_ID", "AMOUNT", "PRODUCT_ID")); while ($arRes = $dbRes->Fetch()) { if (in_array($arRes["STORE_ID"], $arStoreID)) { if (isset($arParams["ENUM_BY_ID"]) && $arParams["ENUM_BY_ID"] == true) { $arResult[$arRes["STORE_ID"]] = $arRes; } else { $arResult[] = $arRes; } } } if (!empty($arResult) && is_array($arResult)) { static::setHitCache('CATALOG_STORE_PRODUCT', $arParams["PRODUCT_ID"], $arResult); } } return $arResult; }
/** * @param \CDBResult $dbResultList * @return array */ protected function makeItemsFromDbResult(\CDBResult $dbResultList) { $arItemsResult = $arProductIds = array(); while ($arItem = $dbResultList->Fetch()) { if ($arItem['TYPE'] != 'S') { $arProductIds[] = $arItem['ID']; $arItem['PROPERTIES'] = $this->getItemProperies($arItem['ID']); $arItemsResult[$arItem['ID']] = $arItem; } else { $arItemsResult['S' . $arItem['ID']] = $arItem; } } if (!empty($arProductIds)) { $dbCatalogProduct = \CCatalogProduct::GetList(array(), array('@ID' => $arProductIds)); while ($arCatalogProduct = $dbCatalogProduct->fetch()) { $arItemsResult[$arCatalogProduct['ID']]['PRODUCT'] = $arCatalogProduct; } $offersExistsIds = \CCatalogSKU::getExistOffers($arProductIds, $this->getIblockId()); $noOffersIds = array(); if (empty($offersExistsIds)) { $noOffersIds = $arProductIds; } else { $this->loadAllSku(array_keys(array_filter($offersExistsIds))); foreach ($offersExistsIds as $id => $bExists) { $arItem =& $arItemsResult[$id]; if ($bExists) { $arItem['SKU_ITEMS'] = $this->getProductSku($arItem); } else { $noOffersIds[] = $id; } } unset($id, $bExists); } if (!empty($noOffersIds)) { $productRatioList = Catalog\ProductTable::getCurrentRatioWithMeasure($noOffersIds); if (!empty($productRatioList)) { foreach ($productRatioList as $productId => $productRatio) { if (!isset($arItemsResult[$productId]['PRODUCT'])) { continue; } $arItemsResult[$productId]['PRODUCT']['MEASURE_RATIO'] = $productRatio['RATIO']; $arItemsResult[$productId]['PRODUCT']['MEASURE'] = $productRatio['MEASURE']; } unset($productRatio, $productId); } unset($productRatioList); $priceIds = $this->getVisiblePrices(); foreach ($priceIds as $priceId) { $dbPrice = \CPrice::GetListEx(array(), array('PRODUCT_ID' => $noOffersIds, 'CATALOG_GROUP_ID' => $priceId), false, false, array('PRODUCT_ID', 'PRICE', 'CURRENCY', 'QUANTITY_FROM', 'QUANTITY_TO')); while ($arPrice = $dbPrice->fetch()) { $arPrice['QUANTITY_FROM'] = (int) $arPrice['QUANTITY_FROM']; $arPrice['QUANTITY_TO'] = (int) $arPrice['QUANTITY_TO']; if (!isset($arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId]) || $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId]['QUANTITY_FROM'] > $arPrice['QUANTITY_FROM']) { $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId] = array('PRICE' => $arPrice['PRICE'], 'CURRENCY' => $arPrice['CURRENCY'], 'QUANTITY_FROM' => $arPrice['QUANTITY_FROM'], 'QUANTITY_TO' => $arPrice['QUANTITY_TO']); } } unset($arPrice, $dbPrice); } if ($this->getStoreId()) { $dbStoreProduct = \CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $noOffersIds, "STORE_ID" => $this->getStoreId())); while ($arStoreProduct = $dbStoreProduct->Fetch()) { $arItemsResult[$arStoreProduct["PRODUCT_ID"]]['PRODUCT']['STORE_AMOUNT'] = $arStoreProduct["AMOUNT"]; } } $groupsIterator = CCatalogProductSet::getList(array(), array('OWNER_ID' => $noOffersIds, 'SET_ID' => 0, 'TYPE' => \CCatalogProductSet::TYPE_GROUP), false, false, array('ID', 'OWNER_ID', 'ITEM_ID', 'SET_ID', 'TYPE')); while ($group = $groupsIterator->Fetch()) { if ($group['OWNER_ID'] == $group['ITEM_ID']) { $arItemsResult[$group['OWNER_ID']]['PRODUCT']['IS_GROUP'] = true; } } } } return $arItemsResult; }
$sPath = "/" . $strImageStorePath . "/" . $sPath["SUBDIR"] . "/" . $sPath["FILE_NAME"]; } else { $sPath = ""; } $price = CCurrencyLang::GetCurrencyFormat($el["CATALOG_PURCHASING_CURRENCY"], "ru")["FORMAT_STRING"]; $arResult[$el["ID"]] = $el; $arResult[$el["ID"]]["PRICE"] = str_replace("#", $el["CATALOG_PURCHASING_PRICE"], $price); $arResult[$el["ID"]]["PRICE_WITH_DISCOUNT"] = $discountPrice ? str_replace("#", $discountPrice, $price) : ""; $arResult[$el["ID"]]["PRODUCT_ID"] = $iProductId; /*Неэффективный кусок кода*/ $arResult[$el["ID"]]["ARTNUMBER"] = CIBlockElement::GetProperty($el["IBLOCK_ID"], $el["ID"], array(), array("CODE" => "ARTNUMBER"))->GetNext()["VALUE"]; //Получение артикула, для каждого инфоблока свой артикул, поэтому нельзя выбрать для всех сразу /**********************************/ $arResult[$el["ID"]]["IMAGE"] = $sPath; /***Получение количества товара с учетом наличия его на складе***/ $arProd = (int) CCatalogStoreProduct::GetList(array(), array('PRODUCT_ID' => $iProductId, "STORE_ID" => 1), false, false, array('AMOUNT'))->GetNext()['AMOUNT']; $arResult[$el["ID"]]["QUANTITY"] = $arProd <= 0 || $arResult[$el["ID"]]['CATALOG_QUANTITY'] <= 0 ? 0 : $arResult[$el["ID"]]['CATALOG_QUANTITY']; unset($arProd); /****Получение ссылок редактирования и удаления элемента из публичной части****/ $arButtons = CIBlock::GetPanelButtons($el["IBLOCK_ID"], $el["ID"], 0, array("SECTION_BUTTONS" => false, "SESSID" => false)); $arResult[$el["ID"]]["EDIT_LINK"] = $arButtons["edit"]["edit_element"]["ACTION_URL"]; $arResult[$el["ID"]]["DELETE_LINK"] = $arButtons["edit"]["delete_element"]["ACTION_URL"]; unset($arButtons); /******************************************************************************************/ //Получаем ИД поста (коммента) //примечание: CIBlockPropertyTools::CODE_BLOG_COMMENTS_COUNT - возвращает некорректное значение $iCommentId = (int) CIBlockElement::GetProperty($el["IBLOCK_ID"], $el["ID"], array("sort" => "asc"), array("CODE" => CIBlockPropertyTools::CODE_BLOG_POST))->GetNext()["ID"]; //Получем ИД самого коментария для товарной еденицы $dbProp = CIBlockElement::GetList(array(), array("ID" => $el["ID"]), false, array(), array("PROPERTY_" . $iCommentId, "ID")); //Получаем количество коментариев $rsPosts = CBlogPost::GetList(array(), array('ID' => $dbProp->GetNext()["PROPERTY_" . $iCommentId . "_VALUE"]), false, false, array('NUM_COMMENTS'));
CCatalogProduct::Update($arElements["ID"], array("QUANTITY_RESERVED" => 0, "QUANTITY" => $quantity)); } COption::SetOptionString('catalog', 'clear_reserved_quantity_user', $userId); COption::SetOptionString('catalog', 'clear_reserved_quantity_date', $strDateAction); } elseif ($_REQUEST['action'] == "clearStore") { $storeId = isset($_REQUEST["storeId"]) ? intval($_REQUEST["storeId"]) : 0; if ($storeId > 0 || $storeId == -1) { $arElementsId = array(); $dbElements = CCatalogProduct::GetList(array(), array("ELEMENT_IBLOCK_ID" => $iblockId), false, false, array("ID", "QUANTITY")); while ($arElements = $dbElements->Fetch()) { $arElementsId[$arElements["ID"]] = $arElements["QUANTITY"]; } if ($storeId === -1) { $dbStoreElements = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => array_keys($arElementsId)), false, false, array("ID", "AMOUNT", "PRODUCT_ID")); } else { $dbStoreElements = CCatalogStoreProduct::GetList(array(), array("STORE_ID" => $storeId, "PRODUCT_ID" => array_keys($arElementsId)), false, false, array("ID", "AMOUNT", "PRODUCT_ID")); } while ($arStoreElements = $dbStoreElements->Fetch()) { CCatalogStoreProduct::Update($arStoreElements["ID"], array("AMOUNT" => 0)); if ($strUseStoreControl === 'Y') { $arElementsId[$arStoreElements["PRODUCT_ID"]] = $arElementsId[$arStoreElements["PRODUCT_ID"]] - $arStoreElements["AMOUNT"]; CCatalogProduct::Update($arStoreElements["PRODUCT_ID"], array("QUANTITY" => $arElementsId[$arStoreElements["PRODUCT_ID"]])); } } COption::SetOptionString('catalog', 'clear_store_user', $userId); COption::SetOptionString('catalog', 'clear_store_date', $strDateAction); } } } echo CUtil::PhpToJSObject($buttonId); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php";
/** * @param \CDBResult $dbResultList * @return array */ protected function makeItemsFromDbResult(\CDBResult $dbResultList) { $arItemsResult = $arProductIds = array(); while ($arItem = $dbResultList->Fetch()) { if ($arItem['TYPE'] != 'S') { $arProductIds[] = $arItem['ID']; $arItem['PROPERTIES'] = $this->getItemProperies($arItem['ID']); } $arItemsResult[$arItem['ID']] = $arItem; } if (!empty($arProductIds)) { $dbCatalogProduct = \CCatalogProduct::GetList(array(), array("ID" => $arProductIds)); while ($arCatalogProduct = $dbCatalogProduct->fetch()) { $arItemsResult[$arCatalogProduct["ID"]]['PRODUCT'] = $arCatalogProduct; } $offersExistsIds = \CCatalogSKU::getExistOffers($arProductIds, $this->getIblockId()); $noOffersIds = array(); if ($offersExistsIds === false) { $noOffersIds = $arProductIds; } else { $this->loadAllSku(array_keys(array_filter($offersExistsIds))); foreach ($offersExistsIds as $id => $bExists) { $arItem =& $arItemsResult[$id]; if ($bExists) { $arItem['SKU_ITEMS'] = $this->getProductSku($arItem); } else { $noOffersIds[] = $id; } } } if (!empty($noOffersIds)) { $priceIds = $this->getVisiblePrices(); foreach ($priceIds as $priceId) { $dbPrice = \CPrice::GetList(array(), array('PRODUCT_ID' => $noOffersIds, 'CATALOG_GROUP_ID' => $priceId), false, false, array('PRODUCT_ID', 'PRICE', 'CURRENCY')); while ($arPrice = $dbPrice->fetch()) { $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId] = array('PRICE' => $arPrice['PRICE'], 'CURRENCY' => $arPrice['CURRENCY']); } } if ($this->getStoreId()) { $dbStoreProduct = \CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $noOffersIds, "STORE_ID" => $this->getStoreId())); while ($arStoreProduct = $dbStoreProduct->Fetch()) { $arItemsResult[$arStoreProduct["PRODUCT_ID"]]['PRODUCT']['STORE_AMOUNT'] = $arStoreProduct["AMOUNT"]; } } $groupsIterator = CCatalogProductSet::getList(array(), array('OWNER_ID' => $noOffersIds, 'SET_ID' => 0, 'TYPE' => \CCatalogProductSet::TYPE_GROUP), false, false, array('ID', 'OWNER_ID', 'ITEM_ID', 'SET_ID', 'TYPE')); while ($group = $groupsIterator->Fetch()) { if ($group['OWNER_ID'] == $group['ITEM_ID']) { $arItemsResult[$group['OWNER_ID']]['PRODUCT']['IS_GROUP'] = true; } } } } return $arItemsResult; }
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; }
public static function GetProductStores($arParams) { $strUseStoreControl = COption::GetOptionString('catalog','default_use_store_control'); //without store control stores are used for information purposes only and manual deduction won't work if ($strUseStoreControl == "N") return false; $arResult = array(); $arStoreID = array(); if (intval($arParams["PRODUCT_ID"] < 0)) return false; $arFilter = array("ACTIVE" => "Y", "SHIPPING_CENTER" => "Y"); if (isset($arParams["SITE_ID"]) && strlen($arParams["SITE_ID"]) > 0) $arFilter["+SITE_ID"] = $arParams["SITE_ID"]; $dbStoreRes = CCatalogStore::GetList( array("SORT" => "DESC"), $arFilter, false, false, array("ID", "ACTIVE") ); while ($arStoreRes = $dbStoreRes->Fetch()) $arStoreID[] = $arStoreRes["ID"]; $dbRes = CCatalogStoreProduct::GetList( array(), array( "PRODUCT_ID" => $arParams["PRODUCT_ID"], // ">AMOUNT" => "0" ), false, false, array("STORE_NAME", "STORE_ID", "AMOUNT", "PRODUCT_ID") ); while ($arRes = $dbRes->Fetch()) { if (in_array($arRes["STORE_ID"], $arStoreID)) { if(isset($arParams["ENUM_BY_ID"]) && $arParams["ENUM_BY_ID"] == true) $arResult[$arRes["STORE_ID"]] = $arRes; else $arResult[] = $arRes; } } return $arResult; }
array('ID' => 'DESC'), array('IBLOCK_ID' => $skuInfo['IBLOCK_ID'], 'PROPERTY_'.$skuInfo['SKU_PROPERTY_ID'] => $productId), false, false, array('ID') ); $productSku = array(); while ($sku = $skuIterator->Fetch()) { $amount = array(); $sum = 0; $filter = array('PRODUCT_ID' => $sku['ID']); if (!empty($arParams['STORES'])) $filter['STORE_ID'] = $arParams['STORES']; $storeIterator = CCatalogStoreProduct::GetList(array(), $filter, false, false, array("STORE_ID", "AMOUNT")); while ($store = $storeIterator->Fetch()) { if ($arParams["SHOW_GENERAL_STORE_INFORMATION"] == "Y") $sum += $store['AMOUNT']; else $amount[$store['STORE_ID']] = $store['AMOUNT']; } if ($arParams["SHOW_GENERAL_STORE_INFORMATION"] == "Y") $productSku[$sku['ID']][] = $sum; else $productSku[$sku['ID']] = $amount; $arParams["ELEMENT_ID"] = $sku['ID']; } }
public static function GetProductStores($arParams) { $strUseStoreControl = COption::GetOptionString('catalog', 'default_use_store_control', 'N'); //without store control stores are used for information purposes only and manual deduction won't work if ($strUseStoreControl == "N") { return false; } $arResult = array(); if (intval($arParams["PRODUCT_ID"] < 0)) { return false; } $dbStoreRes = CCatalogStore::GetList(array(), array("ACTIVE" => "Y"), false, false, array("ID", "ACTIVE")); while ($arStoreRes = $dbStoreRes->Fetch()) { $arStoreID[] = $arStoreRes["ID"]; } $dbRes = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $arParams["PRODUCT_ID"]), false, false, array("STORE_NAME", "STORE_ID", "AMOUNT", "PRODUCT_ID")); while ($arRes = $dbRes->Fetch()) { if (in_array($arRes["STORE_ID"], $arStoreID)) { $arResult[] = $arRes; } } return $arResult; }
function ImportStoresAmount($arElement, $elementID, &$counter) { $arFields = array(); $arFields['PRODUCT_ID'] = $elementID; static $arStoreResult = false; if ($arStoreResult === false) { $arStoreResult = array(); $resStore = CCatalogStore::GetList(array(), array(), false, false, array("ID", "XML_ID")); while ($arStore = $resStore->Fetch()) { $arStoreResult[$arStore["XML_ID"]] = $arStore["ID"]; } } foreach ($arElement as $xmlID => $amount) { if (isset($arStoreResult[$xmlID])) { $arFields['STORE_ID'] = $arStoreResult[$xmlID]; $arFields['AMOUNT'] = $amount; $res = CCatalogStoreProduct::UpdateFromForm($arFields); if (!$res) { $counter["ERR"]++; } } } return true; }
if ($res != "") { $v .= ($v != '' ? ' / ' : '') . $res; } } if ($v != "") { $row->AddViewField("PROPERTY_" . $aProp['ID'], $v); } unset($arSelectedProps[$aProp['ID']]["CACHE"]); } } } else { $fieldValue = ""; $nearestQuantity = $QUANTITY; $amountToStore = 0; if ($storeFromId > 0) { $dbStoreProduct = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $arItems["ID"], "STORE_ID" => $storeFromId)); if ($arStoreProduct = $dbStoreProduct->Fetch()) { $amountToStore = $arStoreProduct["AMOUNT"]; } } $arCatalogProduct["BARCODE"] = ''; if ($arCatalogProduct["BARCODE_MULTI"] == 'N') { $dbBarCodes = CCatalogStoreBarCode::getList(array(), array("PRODUCT_ID" => $arItems["ID"])); while ($arBarCode = $dbBarCodes->Fetch()) { $arCatalogProduct["BARCODE"][] = $arBarCode["BARCODE"]; } } if (is_array($arCatalogProduct["BARCODE"])) { $arCatalogProduct["BARCODE"] = implode(', ', $arCatalogProduct["BARCODE"]); } $balance = $storeFromId > 0 ? FloatVal($arCatalogProduct["QUANTITY"]) . " / " . FloatVal($amountToStore) : FloatVal($arCatalogProduct["QUANTITY"]);
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; }
$res = CIBlockElement::GetList(array(), array('ID' => $arParams['ELEMENT_ID']), false, false, array('ID', 'IBLOCK_ID')); if ($productInfo = $res->Fetch()) { $productId = $productInfo['ID']; $iblockId = $productInfo['IBLOCK_ID']; } $skuInfo = CCatalogSKU::GetInfoByProductIBlock($iblockId); $skuIterator = CIBlockElement::GetList(array('ID' => 'DESC'), array('IBLOCK_ID' => $skuInfo['IBLOCK_ID'], 'PROPERTY_' . $skuInfo['SKU_PROPERTY_ID'] => $productId), false, false, array('ID')); $productSku = array(); while ($sku = $skuIterator->Fetch()) { $amount = array(); $sum = 0; $filter = array('PRODUCT_ID' => $sku['ID']); if (!empty($arParams['STORES'])) { $filter['STORE_ID'] = $arParams['STORES']; } $storeIterator = CCatalogStoreProduct::GetList(array(), $filter, false, false, array('ID', 'STORE_ID', 'AMOUNT')); while ($store = $storeIterator->Fetch()) { if ($arParams["SHOW_GENERAL_STORE_INFORMATION"] == "Y") { $sum += $store['AMOUNT']; } else { $amount[$store['STORE_ID']] = 0; $amount[$store['STORE_ID']] += $store['AMOUNT']; } } unset($store, $storeIterator, $filter); if ($arParams["SHOW_GENERAL_STORE_INFORMATION"] == "Y") { $productSku[$sku['ID']][] = $sum; } else { $productSku[$sku['ID']] = $amount; } $arParams["ELEMENT_ID"] = $sku['ID'];
$currentPrice = $arCatalogProduct["PURCHASING_PRICE"] != null ? $arCatalogProduct["PURCHASING_PRICE"] : 0; $currentPriceCurrency = $arCatalogProduct["PURCHASING_CURRENCY"] != null ? $arCatalogProduct["PURCHASING_CURRENCY"] : ""; $fieldValue = htmlspecialcharsbx(FormatCurrency($currentPrice, $currentPriceCurrency)); 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 = htmlspecialcharsbx(str_replace("#", '', $arCurFormat["FORMAT_STRING"])); } $row->AddField("PRICE", $fieldValue); $amountToStore = 0; $arCatalogProduct = CCatalogProduct::GetByID($arItems["ID"]); if ($STORE_FROM_ID > 0) { $dbStoreProduct = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $arItems["ID"], "STORE_ID" => $STORE_FROM_ID)); if ($arStoreProduct = $dbStoreProduct->Fetch()) { $amountToStore = $arStoreProduct["AMOUNT"]; } } $arCatalogProduct["BARCODE"] = ''; if ($arCatalogProduct["BARCODE_MULTI"] == 'N') { $dbBarCodes = CCatalogStoreBarCode::getList(array(), array("PRODUCT_ID" => $arItems["ID"])); if ($arBarCode = $dbBarCodes->Fetch()) { $arCatalogProduct["BARCODE"] = $arBarCode["BARCODE"]; } } $balance = $STORE_FROM_ID > 0 ? FloatVal($arCatalogProduct["QUANTITY"]) . " / " . FloatVal($amountToStore) : FloatVal($arCatalogProduct["QUANTITY"]); $row->AddField("BALANCE", $balance); $URL = CIBlock::ReplaceDetailUrl($arItems["DETAIL_PAGE_URL"], $arItems, true); $arPriceType = GetCatalogGroup($arPrice["PRICE"]["CATALOG_GROUP_ID"]);