Была такая задача на bitrix js Задача: сумма чека по еде для одного гостя На языке программиста: Добавить во вкладку с товарами расчет: сумма товаров со значением свойства PROPERTY_626 318,320, 322 (относятся к еде) / сумму количества гостей (UF_CRM_1530623573843+UF_CRM_1530623600935) Захотелось теперь это в поле сделки UF_CRM_AVERAGE_CHECK сохранять |
function CalcAverafeCheckForDeal(&$arFields){ if(isset($arFields["PRODUCT_ROWS"])){ foreach($arFields["PRODUCT_ROWS"] as $arProduct){ $arProductIds[] = $arProduct["PRODUCT_ID"]; } $sum = 0; if(!empty($arProductIds) && CModule::IncludeModule("iblock")){ $arFilter = Array( "IBLOCK_ID"=>28, "ID"=>$arProductIds ); $arSelect = Array("ID", "PROPERTY_626"); $res = CIBlockElement::GetList(Array("sort"=>"asc"), $arFilter, false, Array("nPageSize"=>50,"iNumPage"=>1), $arSelect); $arIds = []; while($arItem = $res->Fetch()){ //самый быстрый if(in_array($arItem["PROPERTY_626_ENUM_ID"], [318,320,322])){ $arIds[$arItem["ID"]] = $arItem["ID"]; } } if(!empty($arIds)){ foreach ($arFields["PRODUCT_ROWS"] as $arProduct) { if(isset($arIds[$arProduct["PRODUCT_ID"]])){ $sum = $sum + $arProduct["PRICE"]*$arProduct["QUANTITY"]; } } if($sum){ $questCount = 1; if(!isset($arFields['UF_CRM_1530623573843']) || !isset($arFields['UF_CRM_1530623600935'])){ //поля с количеством гостей $arFilter = array( "ID"=>$arFields["ID"], //выбираем определенную сделку по ID "CHECK_PERMISSIONS"=>"N" //не проверять права доступа текущего пользователя ); $arSelect = array( "ID", "UF_CRM_1530623573843", "UF_CRM_1530623600935" ); $res = CCrmDeal::GetList(Array(), $arFilter, $arSelect); if($deal = $res->Fetch()){ $questCount = $deal["UF_CRM_1530623573843"] + $deal["UF_CRM_1530623600935"]; } } else{ $questCount = $arFields["UF_CRM_1530623573843"] + $arFields["UF_CRM_1530623600935"]; } if($questCount < 1){ $questCount = 1; } $sum = ceil($sum/$questCount); } } } $arFields["UF_CRM_AVERAGE_CHECK"] = $sum; } } AddEventHandler('crm', 'OnBeforeCrmDealAdd', 'MyOnBeforeCrmDealAdd'); AddEventHandler('crm', 'OnBeforeCrmDealUpdate', 'MyOnBeforeCrmDealUpdate'); function MyOnBeforeCrmDealAdd(&$arFields){ CalcAverageCheckForDeal($arFields); } function MyOnBeforeCrmDealUpdate(&$arFields){ CalcAverageCheckForDeal($arFields); } |