Exemplo n.º 1
0
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);
		}
	}
}
Exemplo n.º 2
0
 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()) {