//price update with extra
AddEventHandler("catalog", "OnPriceAdd", "BXIBlockAfterSave");
AddEventHandler("catalog", "OnPriceUpdate", "BXIBlockAfterSave");
function BXIBlockAfterSave($ID,$arFields=array()){
//наценка => тип цены
$arExtraBind = array(
'2' => 2
,'3' => 3
,'4' => 4
,'5' => 5
,'6' => 6
,'7' => 7
,'8' => 8
,'9' => 9
,'10' => 10
,'11' => 11
,'12' => 12
,'13' => 13
,'14' => 14
,'15' => 15
,'16' => 16
,'17' => 17
,'18' => 18
,'19' => 19
,'20' => 20
,'21' => 21
,'22' => 22
,'23' => 23
,'24' => 24
,'26' => 26
,'25' => 25
);
$basePriceId = 254; //базовая цена id
//флаг события обновления элемента инфоблока (не добавления цены)
$flgElemUpd = false;
//ручное изменение цены (не по событию)
if(is_array($ID) && isset($ID['ID']) && !empty($ID['ID']) && empty($arFields)){
$arFields = $ID;
$ID = $arFields['ID'];
$PRODUCT_ID = (isset($arFields['ID']) && intval($arFields['ID']) > 0)?$arFields['ID']:((isset($arFields['PRODUCT_ID']) && intval($arFields['PRODUCT_ID']) > 0)?$arFields['PRODUCT_ID']:0);
$flgElemUpd = true;
}
$PRODUCT_ID = (isset($arFields['ID']) && intval($arFields['ID']) > 0)?$arFields['ID']:((isset($arFields['PRODUCT_ID']) && intval($arFields['PRODUCT_ID']) > 0)?$arFields['PRODUCT_ID']:0);
if($PRODUCT_ID){
if((isset($arFields['CATALOG_GROUP_ID']) && $arFields['CATALOG_GROUP_ID'] == $basePriceId) || $flgElemUpd){
//получаем цены у товара
$res = CPrice::GetList(array(),array("PRODUCT_ID" => $PRODUCT_ID));
$arPricesData = $basePriceData = array();
while($arPrices = $res->Fetch()){
$arPricesData[$arPrices['CATALOG_GROUP_ID']] = $arPrices;
if($arPrices['CATALOG_GROUP_ID'] == 254){
$basePriceData = $arPrices;
}
}
//Bitrix\Main\Diag\Debug::writeToFile(array($ID, $arFields, $arPricesData),"","LogBXIBlockAfterSavet.txt");
if(isset($basePriceData['PRICE']) && !empty($basePriceData['PRICE']) && count($arPricesData) > 0){
foreach($arExtraBind as $extraId => $priceTypeId){
$arFieldPrice = Array(
"PRODUCT_ID" => $PRODUCT_ID,
"EXTRA_ID" => $extraId,
"CATALOG_GROUP_ID" => $priceTypeId,
"PRICE" => $basePriceData['PRICE'],
"CURRENCY" => $basePriceData['CURRENCY']
);
if (is_array($arPricesData[$priceTypeId])) {
CPrice::Update($arPricesData[$priceTypeId]['ID'], $arFieldPrice, true);
} else {
CPrice::Add($arFieldPrice, true);
}
}
}
}
}
}
|