Open B0Bka opened 7 years ago
`EventManager::getInstance()->addEventHandler( 'catalog', 'OnPriceUpdate', "onUpdatePrice" ); EventManager::getInstance()->addEventHandler( 'catalog', 'OnProductSetUpdate', "onSetUpdate" ); EventManager::getInstance()->addEventHandler( 'catalog', 'OnProductSetAdd', "onSetUpdate" ); function onUpdatePrice($arg1, $arg2 = false) { $ELEMENT_ID = false; $IBLOCK_ID = false; $OFFERS_IBLOCK_ID = false; $PRICE_TYPE_ID = 1; \CModule::IncludeModule("catalog"); //Check for catalog event
if(is_array($arg2) && $arg2["PRODUCT_ID"] > 0) { //Get iblock element $rsPriceElement = \CIBlockElement::GetList( array(), array( "ID" => $arg2["PRODUCT_ID"], ), false, false, array("ID", "IBLOCK_ID") ); if($arPriceElement = $rsPriceElement->Fetch()) { $arCatalog = \CCatalog::GetByID($arPriceElement["IBLOCK_ID"]); if(is_array($arCatalog)) { //Check if it is offers iblock if($arCatalog["OFFERS"] == "Y") { //Find product element $rsElement = \CIBlockElement::GetProperty( $arPriceElement["IBLOCK_ID"], $arPriceElement["ID"], "sort", "asc", array("ID" => $arCatalog["SKU_PROPERTY_ID"]) ); $arElement = $rsElement->Fetch(); if($arElement && $arElement["VALUE"] > 0) { $ELEMENT_ID = $arElement["VALUE"]; $IBLOCK_ID = $arCatalog["PRODUCT_IBLOCK_ID"]; $OFFERS_IBLOCK_ID = $arCatalog["IBLOCK_ID"]; $OFFERS_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"]; } } //or iblock wich has offers elseif($arCatalog["OFFERS_IBLOCK_ID"] > 0) { $ELEMENT_ID = $arPriceElement["ID"]; $IBLOCK_ID = $arPriceElement["IBLOCK_ID"]; $OFFERS_IBLOCK_ID = $arCatalog["OFFERS_IBLOCK_ID"]; $OFFERS_PROPERTY_ID = $arCatalog["OFFERS_PROPERTY_ID"]; } //or it's regular catalog else { $ELEMENT_ID = $arPriceElement["ID"]; $IBLOCK_ID = $arPriceElement["IBLOCK_ID"]; $OFFERS_IBLOCK_ID = false; $OFFERS_PROPERTY_ID = false; } } } } //Check for iblock event elseif(is_array($arg1) && $arg1["ID"] > 0 && $arg1["IBLOCK_ID"] > 0) { //Check if iblock has offers $arOffers = \CIBlockPriceTools::GetOffersIBlock($arg1["IBLOCK_ID"]); if(is_array($arOffers)) { $ELEMENT_ID = $arg1["ID"]; $IBLOCK_ID = $arg1["IBLOCK_ID"]; $OFFERS_IBLOCK_ID = $arOffers["OFFERS_IBLOCK_ID"]; $OFFERS_PROPERTY_ID = $arOffers["OFFERS_PROPERTY_ID"]; } } if($ELEMENT_ID) { if(CCatalogProductSet::isProductHaveSet($ELEMENT_ID)) return false; $arSelect = Array("OWNER_ID", "ID"); $arFilter = Array("ITEM_ID"=>$ELEMENT_ID); $res = CCatalogProductSet::GetList(Array("SORT" => "ASC"), $arFilter, false, Array("nPageSize"=>500), $arSelect); while($ob = $res->GetNext()) { if(!in_array($ob['OWNER_ID'], $arSet)) $arSet[] = $ob['OWNER_ID']; } if(count($arSet) > 0) { foreach($arSet as $setId) { $arSetItems = CCatalogProductSet::getAllSetsByProduct($setId, CCatalogProductSet::TYPE_GROUP); $arComplectItems = CCatalogProductSet::getAllSetsByProduct($setId, CCatalogProductSet::TYPE_SET); $arSetItems[] = array_shift($arComplectItems); $sets = array_shift($arSetItems); if(is_array($sets)) { $sum = 0; foreach($sets['ITEMS'] as $el) { $arPrice = CCatalogProduct::GetOptimalPrice($el['ITEM_ID'], 1, array(2), $renewal, array(), 's1'); $sum += $arPrice['DISCOUNT_PRICE']; } $arFields = Array( "PRODUCT_ID" => $setId, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" => $sum, "CURRENCY" => "UAH", ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $setId, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ($arr = $res->Fetch()) { CPrice::Update($arr["ID"], $arFields); } } } } }
}
function onSetUpdate($id, $arFields) { $PRICE_TYPE_ID = 1; $set = CCatalogProductSet::getSetByID($id); $setId = $set['OWNER_ID']; foreach($set['ITEMS'] as $el) { $arPrice = CCatalogProduct::GetOptimalPrice($el['ITEM_ID'], 1, array(2), $renewal, array(), 's1'); $sum += $arPrice['DISCOUNT_PRICE']; } $arFields = Array( "PRODUCT_ID" => $setId, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" => $sum, "CURRENCY" => "UAH", ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $setId, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) );
if ($arr = $res->Fetch()) { CPrice::Update($arr["ID"], $arFields); }
}`
`EventManager::getInstance()->addEventHandler( 'catalog', 'OnPriceUpdate', "onUpdatePrice" ); EventManager::getInstance()->addEventHandler( 'catalog', 'OnProductSetUpdate', "onSetUpdate" ); EventManager::getInstance()->addEventHandler( 'catalog', 'OnProductSetAdd', "onSetUpdate" ); function onUpdatePrice($arg1, $arg2 = false) { $ELEMENT_ID = false; $IBLOCK_ID = false; $OFFERS_IBLOCK_ID = false; $PRICE_TYPE_ID = 1; \CModule::IncludeModule("catalog"); //Check for catalog event
}
function onSetUpdate($id, $arFields) { $PRICE_TYPE_ID = 1; $set = CCatalogProductSet::getSetByID($id); $setId = $set['OWNER_ID']; foreach($set['ITEMS'] as $el) { $arPrice = CCatalogProduct::GetOptimalPrice($el['ITEM_ID'], 1, array(2), $renewal, array(), 's1'); $sum += $arPrice['DISCOUNT_PRICE']; } $arFields = Array( "PRODUCT_ID" => $setId, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" => $sum, "CURRENCY" => "UAH", ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $setId, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) );
}`