Перенос суммы расхода в наработку RSCM модуля
Материал из BiTel WiKi
Версия от 09:38, 20 апреля 2010; Admin (Обсуждение | вклад)
Разработано для 5.0 версии.
Функция скрипта поведения обрабатывает событие ядра Занесение расхода. При поступлении расхода определённого типа он преобразуется в наработку по услуге RSCM модуля из расчёта 1 единица услуги = 1 рубль. В тарифном плане договора цена данной услуги отражена. Преобразование расхода в услугу происходит только если цена в тарифе найдена. Наработка в договоре появляется после выполения задачи планировщика Начисление RSCM.
import bitel.billing.server.contract.bean.ChargeManager; import bitel.billing.server.contract.bean.ContractManager; import bitel.billing.server.contract.bean.BalanceUtils; import bitel.billing.server.rscm.bean.*; import bitel.billing.common.*; import ru.bitel.common.*; import bitel.billing.server.tariff.*; import java.math.*; CHARGE_TYPE_ID = 39; RSCM_MID = 60; RSCM_SID = 133; public void onEvent( event, setup, con, conSlave ) { charge = event.getCharge(); cid = event.getContractID(); if( charge.getChargeTypeID() != CHARGE_TYPE_ID ) { print( "Skipping process" ); return; } contractManager = new ContractManager( conSlave ); csm = new ContractServiceManager( con, RSCM_MID ); chm = new ChargeManager( con ); bu = new BalanceUtils( con ); date = TimeUtils.convertDateToCalendar( charge.getChargeDate() ); tts = contractManager.getRealtimeTariffTreeSet( cid, date, "rscm", RSCM_MID, true ); tree = tts.getTree( date ); if( tree == null ) { error( "Not found RSCM tariff" ); return; } req = new TariffRequest(); req.setRequestParam( "sid", RSCM_SID ); req.setRequestParam( "time", date ); tree.processRequest( req ); cost = req.getResponseParam( "cost" ); divisor = req.getResponseParam( "divisor" ); if( !req.wasAccepted() || cost == null || divisor == null || divisor <= 0 ) { error( "Incorrect result tariff RSCM request. cost: " + cost + "; devisor: " + devisor ); return; } cs = new ContractService(); cs.setContractId( event.getContractID() ); cs.setDate( date ); cs.setServiceId( RSCM_SID ); cs.setAmount( Utils.parseLong( charge.getSumma().setScale( 0, BigDecimal.ROUND_HALF_UP ).toPlainString() ) ); cs.setComment( "Перенос расхода" ); csm.updateContractService( cs ); charge.setSumma( BigDecimal.ZERO ); chm.updateCharge( charge ); bu.updateBalance( charge.getChargeDate(), cid ); }