Перенос суммы расхода в наработку RSCM модуля

Материал из BiTel WiKi

Перейти к: навигация, поиск

Разработано для 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 );
}
Личные инструменты