| Была такая задача на 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);
} |