Exemplo n.º 1
1
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;
}
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
 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));
     }
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
                            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;
                            }
                        }
                    }
                }
            }
        }
    }
}
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
 /**
  * @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;
 }
Exemplo n.º 8
0
     $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'));
Exemplo n.º 9
0
            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";
Exemplo n.º 10
0
 /**
  * @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;
 }
Exemplo n.º 11
0
 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;
 }
Exemplo n.º 12
0
	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;
	}
Exemplo n.º 13
0
			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'];
		}
	}
Exemplo n.º 14
0
 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;
 }
Exemplo n.º 15
0
 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"]);
Exemplo n.º 17
0
 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;
 }
Exemplo n.º 18
0
 $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"]);