Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Автоматический расчет суммы чека по еде для одного гостя



Была такая задача на bitrix js

Задача:
сумма чека по еде для одного гостя

На языке программиста:
Добавить во вкладку с товарами расчет:
сумма товаров со значением свойства PROPERTY_626 318,320, 322 (относятся к еде) / сумму количества гостей (UF_CRM_1530623573843+UF_CRM_1530623600935)


Захотелось теперь это в поле сделки UF_CRM_AVERAGE_CHECK сохранять
обработчик в init.php
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);
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!