переписали под версию 4.6
Код:
import java.sql.*;
import java.util.*;
import java.math.*;
import bitel.billing.common.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.bean.event.*;
import bitel.billing.server.rscm.bean.*;
import bitel.billing.common.CommonUtils;
CHARGE_EVENT_ID = 2; // Тип события - Расход
CHARGE_TYPE_ID = 3; // Тип расхода - Активация опции "Турбо"
RSCM_MID = 16; // Код модуля RSCM
RSCM_SERVICE_ID = 49; // Код услуги в модуле RSCM
//print ("Got event with type: " + event.getTypeID());
// Фильтрация по типу события Расход (ChargeEvent)
if (event.getTypeID() != CHARGE_EVENT_ID) {
print("Event type isn't ChargeEvent. Skipping.");
return;
}
cid = event.getContractID();
charge = event.getCharge();
// Фильтрация по типу расхода (Активация опции "Турбо")
if (charge.getChargeTypeID() != CHARGE_TYPE_ID) {
print ("Charge type isn't 'Turbo'. Skipping.");
return;
}
print ("Обрабатываем расход (Активация опции 'Турбо') на сумму: " + charge.getSumma());
bu = new BalanceUtils(con);
cm = new ChargeManager(con);
csm = new bitel.billing.server.rscm.bean.ContractServiceManager(con, RSCM_MID);
contract = new ContractManager(con);
// Преобразуем дату платежа к типу java.util.Calendar
date = TimeUtils.convertDateToCalendar(charge.getChargeDate());
// Создаем TariffTreeSet для обсчета сессий
tts = contract.getRealtimeTariffTreeSet(cid, date, "rscm", RSCM_MID, true);
tree = tts.getTree(date);
if (tree == null) {
print("RSCM tariff not found");
}
// Создаем тарифный запрос
req = new TariffRequest();
req.setRequestParam("sid", RSCM_SERVICE_ID);
req.setRequestParam("time", date);
tree.processRequest(req);
if (!req.wasAccepted()) {
print ("Request wasn't accepted");
return;
}
cost = req.getResponseParam("cost");
divisor = req.getResponseParam( "divisor" );
if(cost == null || divisor == null || divisor <= 0) {
print ("Got incorrect cost: " + cost + " or divisor: " + divisor);
return;
}
// Создаем наработку по услуге
cs = new bitel.billing.server.rscm.bean.ContractService();
cs.setContractId(cid);
cs.setDate(date);
cs.setServiceId(RSCM_SERVICE_ID);
cs.setAmount(new CommonUtils().parseLongString(charge.getSumma().setScale(0, BigDecimal.ROUND_HALF_UP).toPlainString()));
cs.setComment("Активация кнопки 'Турбо'");
// Заносим наработку в договор
csm.updateContractService(cs);
// Заключительная часть
print ("Обнуляем расход с ID=" + charge.getID() + " и обновляем баланс договора");
charge.setSumma(BigDecimal.ZERO);
cm.updateCharge(charge);
bu.updateBalance(charge.getChargeDate(), cid);
если проверяем в биллинге(делаем платеж редактируемым и заносим на него расход) то все отрабатывает нормально:
Код:
GENERATE_TIME: 21.04.10 12:29:55
EXECUTION_STOP_TIME: 21.04.10 12:29:56
PROCESS_TIME: 168
OUT:
Обрабатываем расход (Активация опции 'Турбо') на сумму: 50.0
Обнуляем расход с ID=50 и обновляем баланс договора
ERROR:
EXCEPTIONS:
WARNINGS:
когда активируем опцию "турбо" через личный кабинет то:
- расход начисляется,
- событие "занесение расхода" не генерируется,
- скрипт не запускается.
можете посмотреть в каком месте засада?