function __recalcSaleDiscount($user_id) { if(!$user_id) return; CModule::IncludeModule('sale'); CModule::IncludeModule('highloadblock'); $UserPrc = false; $hlblock = Bitrix\Highloadblock\HighloadBlockTable::getList(array('filter'=>array('NAME' => 'UserDiscounts')))->fetch(); $entity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity( $hlblock ); $entity_data_class = $entity->getDataClass(); $rsData = $entity_data_class::getList(array( "select" => array("*"), "order" => array("ID" => "ASC"), "filter" => array('UF_USER_ID' => $user_id) )); if($arData = $rsData->Fetch()) { $UserPrc = $arData['UF_DISCOUNT']; } if($UserPrc) { $bCreated = false; $dbSaleDiscounts = CSaleDiscount::GetList( array(), array( "ACTIVE" => "Y", //"XML_ID" => 'HL_DISCOUNT_'.$UserPrc, ), false, false, array('ID','NAME',"XML_ID",'CONDITIONS') ); while ($arSaleDiscount = $dbSaleDiscounts->Fetch()) { $issetUsers = array(); $CONDITIONS = unserialize($arSaleDiscount['CONDITIONS']); foreach($CONDITIONS['CHILDREN'] as $arChildren) { if($arChildren['CLASS_ID'] == 'CondSaleOrderUserID') { $issetUsers[$arChildren['DATA']['value']] = $arChildren['DATA']['value']; } } if($arSaleDiscount['XML_ID'] == 'HL_DISCOUNT_'.$UserPrc) { $bCreated = true; if(!in_array($user_id, $issetUsers)) { $CONDITIONS['CHILDREN'][] = Array( 'CLASS_ID' => 'CondSaleOrderUserID', 'DATA' => Array( 'logic' => 'Equal', 'value' => $user_id ) ); $arDiscountFields = array( 'NAME' => $arSaleDiscount['NAME'], "ACTIVE" => 'Y', 'CONDITIONS' => $CONDITIONS ); CSaleDiscount::Update($arSaleDiscount['ID'], $arDiscountFields); } } else { if(in_array($user_id, $issetUsers)) { $tmpCond = array(); foreach($CONDITIONS['CHILDREN'] as $arChildren) { if(!($arChildren['CLASS_ID'] == 'CondSaleOrderUserID' && $arChildren['DATA']['value'] == $user_id)) { $tmpCond[] = $arChildren; } } if(empty($tmpCond)) { CSaleDiscount::Delete($arSaleDiscount['ID']); } else { $CONDITIONS['CHILDREN'] = $tmpCond; $arDiscountFields = array( 'NAME' => $arSaleDiscount['NAME'], "ACTIVE" => 'Y', 'CONDITIONS' => $CONDITIONS ); CSaleDiscount::Update($arSaleDiscount['ID'], $arDiscountFields); } } } } if(!$bCreated) { $arDiscountFields = array( "LID" => 's1', "NAME" => 'Скидка пользователям - '.$UserPrc.'%', "ACTIVE_FROM" => '', "ACTIVE_TO" => '', "ACTIVE" => 'Y', "SORT" => 100, "PRIORITY" => 1, "LAST_DISCOUNT" => 'Y', "XML_ID" => 'HL_DISCOUNT_'.$UserPrc, 'CONDITIONS' => Array( 'CLASS_ID' => 'CondGroup', 'DATA' => Array( 'All' => 'OR', 'True' => 'True' ), 'CHILDREN' => Array( Array( 'CLASS_ID' => 'CondSaleOrderUserID', 'DATA' => Array( 'logic' => 'Equal', 'value' => $user_id ) ), ) ), 'ACTIONS' => array( 'CLASS_ID' => 'CondGroup', 'DATA' => Array( 'All' => 'AND', ), 'CHILDREN' => Array( Array( 'CLASS_ID' => 'ActSaleBsktGrp', 'DATA' => Array( 'Type' => 'Discount', 'Value' => $UserPrc, 'Unit' => 'Perc', 'All' => 'AND', ), 'CHILDREN' => Array() ), ) ), 'USER_GROUPS' => array(2), ); $DiscountID = CSaleDiscount::Add($arDiscountFields); } } }
if ($_REQUEST['action_target'] == 'selected') { $arID = array(); $dbResultList = CSaleDiscount::GetList($by, $order, $arFilter); while ($arResult = $dbResultList->Fetch()) { $arID[] = $arResult['ID']; } } foreach ($arID as $ID) { if (strlen($ID) <= 0) { continue; } switch ($_REQUEST['action']) { case "delete": @set_time_limit(0); $DB->StartTransaction(); if (!CSaleDiscount::Delete($ID)) { $DB->Rollback(); if ($ex = $APPLICATION->GetException()) { $lAdmin->AddGroupError($ex->GetString(), $ID); } else { $lAdmin->AddGroupError(GetMessage("BT_SALE_DISCOUNT_LIST_ERR_DELETE_DISCOUNT"), $ID); } } else { $DB->Commit(); } break; case "activate": case "deactivate": $arFields = array("ACTIVE" => $_REQUEST['action'] == "activate" ? "Y" : "N"); if (!CSaleDiscount::Update($ID, $arFields)) { if ($ex = $APPLICATION->GetException()) {