добавлю здесь вдруг кому пригодится
на одном из сайтов продавали подарочные сертификаты. оформили их как купоны на скидку на определенную сумму, но при выгрузке заказа в 1с требовалось, чтобы заказ был на полную сумму без скидки. но при этом должно было быть видно, что часть оплачена. Решили заменить скидку на оплату с внутреннего счета.
я использовала событие сохранения заказа OnSaleOrderSaved
http://julianapriz.ru/internet-magazin-na-1s-bitriks-zamenit-skidku-po-kuponu-na-oplatu-s-vnutrennego-scheta/
на одном из сайтов продавали подарочные сертификаты. оформили их как купоны на скидку на определенную сумму, но при выгрузке заказа в 1с требовалось, чтобы заказ был на полную сумму без скидки. но при этом должно было быть видно, что часть оплачена. Решили заменить скидку на оплату с внутреннего счета.
я использовала событие сохранения заказа OnSaleOrderSaved
Код |
---|
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(); } } } |