добавлю здесь вдруг кому пригодится
на одном из сайтов продавали подарочные сертификаты. оформили их как купоны на скидку на определенную сумму, но при выгрузке заказа в 1с требовалось, чтобы заказ был на полную сумму без скидки. но при этом должно было быть видно, что часть оплачена. Решили заменить скидку на оплату с внутреннего счета.
я использовала событие сохранения заказа OnSaleOrderSaved
[CODE]Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderSaved',
'ConvertCoupon'
);
function ConvertCoupon($event){
AddMessage2Log("ConvertCoupon");
$order = $event->getParameter("ENTITY");
\Bitrix\Main\Loader::includeModule('sale');
$userId=$order->getUserId();
$discountData = $order->getDiscount()->getApplyResult();
foreach($discountData['FULL_DISCOUNT_LIST'] as $i=>$d){
if($i==43){
$sumCoupon=$d['ACTIONS']['CHILDREN'][0]['DATA']['Value'];
}
}
foreach($discountData["COUPON_LIST"] as $k=>$c){
if($c["DATA"]["DISCOUNT_ID"]==43){
\Bitrix\Sale\DiscountCouponsManager::clearApplyCoupon($k);
$discount=$order->getDiscount();
$discount->setOrderRefresh(true);
$discount->setApplyResult(array());
$basket = $order->getBasket();
$basket->refreshData(array('PRICE', 'COUPONS'));
$discount->setUseMode(1);
$discount->calculate();
$order->save();
if(!CSaleUserAccount::GetByUserID($userId, "RUB")){
$arFields = Array("USER_ID" => $userId, "CURRENCY" => "RUB", "CURRENT_BUDGET" => $sumCoupon);
$useraccId=CSaleUserAccount::Add($arFields);
}
else{
CSaleUserAccount::UpdateAccount( $userId, $sumCoupon, "RUB", "MANUAL", 0 );
}
Bitrix\Sale\Compatible\OrderCompatibility::payFromBudget($order,false,true);
$order->save();
}
}
}[/CODE]
http://julianapriz.ru/internet-magazin-na-1s-bitriks-zamenit-skidku-po-kuponu-na-oplatu-s-vnutrennego-scheta/