Доброго времени суток... Вот потребовалась задача, при оплате заказа нужно просмотреть все товары в заказе, достать опр. свойсво и потом обновить свойство у пользователя... Все с виду просто и банально... Но CSaleBasket::GetList просто отказывается работать... Т.е. есть вот такой код:
Код |
---|
AddEventHandler("sale", "OnSalePayOrder", "UserDiscount");
function UserDiscount($id,$val)
{
$UserDiscount= new CUser;
$arFields = Array();
$arOrder=CSaleOrder::GetByID($id);
$rsUsers = $UserDiscount->GetList(($by="personal_country"), ($order="desc"), Array('USER_ID'=>$arOrder['USER_ID']),array('SELECT'=>Array('UF_BONUS')));
$arUSER=$rsUsers->Fetch();
$bonus = 0;
$dbBasketItems = CSaleBasket::GetList(
array(
"NAME" => "ASC",
"ID" => "ASC"
),
array(
"LID" => SITE_ID,
"ORDER_ID" => $id
),
false,
false,
array("PRODUCT_ID", "QUANTITY")
);
while ($arItems = $dbBasketItems->Fetch())
{
mail("nastudio@ya.ru", "My Subject", $arItems["PRODUCT_ID"]);
$db_props = CIBlockElement::GetProperty(29, $arItems["PRODUCT_ID"], "sort", "asc", Array("CODE"=>"BONUS"));
if($ar_props = $db_props->Fetch()){
$bonus = ($ar_props["VALUE"]*$arItems["QUANTITY"])+$bonus;
}
}
if ($val=='Y'){
$arFields['UF_BONUS'] = Double Val($arUSER['UF_BONUS'])+$bonus;
}elseif(($val=='N')&&(Double Val($arUSER['UF_BONUS'])>0)){
$arFields['UF_BONUS']=Double Val($arUSER['UF_BONUS'])-$bonus;
}
$UserDiscount->Update($arOrder['USER_ID'],$arFields);
} |
Я думаю тут все понятно - у товара есть свойство - бонус при покупке... После оплаты закза мы суммируем все бонусы и прибавляем к тем которые уже есть у пользователя и соответсвенно обновляем пользователя... Все это находится естественно в init.php... Я пытался вынести подсчет бонуса в функцию... примерно так:
Код |
---|
AddEventHandler("sale", "OnSalePayOrder", "UserDiscount");
function UserDiscount($id,$val)
{
$UserDiscount= new CUser;
$arFields = Array();
$arOrder=CSaleOrder::GetByID($id);
$rsUsers = $UserDiscount->GetList(($by="personal_country"), ($order="desc"), Array('USER_ID'=>$arOrder['USER_ID']),array('SELECT'=>Array('UF_BONUS')));
$arUSER=$rsUsers->Fetch();
$bonus = get_bonus($id);
if ($val=='Y'){
$arFields['UF_BONUS'] = Double Val($arUSER['UF_BONUS'])+$bonus;
}elseif(($val=='N')&&(Double Val($arUSER['UF_BONUS'])>0)){
$arFields['UF_BONUS']=Double Val($arUSER['UF_BONUS'])-$bonus;
}
$UserDiscount->Update($arOrder['USER_ID'],$arFields);
}
function get_bonus($id){
$bonus = 0;
$dbBasketItems = CSaleBasket::GetList(
array(
"NAME" => "ASC",
"ID" => "ASC"
),
array(
"LID" => SITE_ID,
"ORDER_ID" => $id
),
false,
false,
array("PRODUCT_ID", "QUANTITY")
);
while ($arItems = $dbBasketItems->Fetch())
{
$db_props = CIBlockElement::GetProperty(29, $arItems["PRODUCT_ID"], "sort", "asc", Array("CODE"=>"BONUS"));
if($ar_props = $db_props->Fetch()){
$bonus = ($ar_props["VALUE"]*$arItems["QUANTITY"])+$bonus;
}
}
return $bonus;
} |
Но увы... Причем если эту функцию вызвать отдельно и передать в нее нужный ид заказ - то все ок... А тут нет
Как быть - хз уже всю голову сломал(((