возвращаясь к скриптам поведения. Не работает вот такой скрипт(не изменяется статус договора):
Код:
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.bean.event.*;
import bitel.billing.server.service.bean.*;
import bitel.billing.server.npay.bean.*;
import bitel.billing.common.KernelConst;
import java.util.*;
import bitel.billing.server.ipn.bean.*;
import ru.bitel.bgbilling.server.util.ModuleSetup;
GROUP_ERROR_BALANCE = 62;
cid = event.getContractID();
date = event.getGenerateTime().clone();
contract = new ContractManager(con).getContractByID(cid);
payment = event.getPayment();
pt = payment.getPaymentTypeID();
cl = contract.getBalanceLimit();
balance = new BalanceUtils(con);
cb = balance.getBalance(date.getTime(), cid);
ContractStatusManager statusManager = new ContractStatusManager(con);
status = statusManager.getStatus(cid, date);
if (status != null) {
cs = status.getStatus();
} else {
ContractStatus status = new ContractStatus();
status.setContractId(cid);
status.setDate1(date);
status.setDate2(null);
status.setStatus(KernelConst.CONTRACT_STATUS_ACTIVE);
status.setComment("Инициализация статуса сервером");
statusManager.changeStatus(status, 0);
cs = status.getStatus();
};
NPAY_MID = 2;
csm = new ContractServiceManager(con);
List sl = csm.getContractServiceList(cid, NPAY_MID);
print("Contract Limit: " + cl);
print("Contract Balance: " + cb);
for (Iterator it=sl.iterator(); it.hasNext(); ) {
cs = (ContractService)it.next();
print (cs.getServiceTitle());
}
if (pt == -1) { // Изменение лимита
if ((cb.floatValue() >= cl.floatValue()) && (cs == KernelConst.CONTRACT_STATUS_SUSPENDED)) {
// Баланс больше лимита. Подключаем договор.
cg = contract.getGroups();
cg = cg & ~(1L<<GROUP_ERROR_BALANCE);
query = "UPDATE contract SET gr=? WHERE id=?";
psUpdate = con.prepareStatement(query);
psUpdate.setLong(1, cg);
psUpdate.setInt(2, cid);
psUpdate.executeUpdate();
ContractStatusManager statusManager = new ContractStatusManager(con);
status = statusManager.getStatus(cid, date);
status.setContractId(cid);
status.setDate1(date);
status.setDate2(null);
status.setStatus(KernelConst.CONTRACT_STATUS_ACTIVE);
status.setComment("Смена статуса сервером - подключен по изменению лимита");
statusManager.changeStatus(status, 0);
} else if ((cb.floatValue() < cl.floatValue()) && (cs == KernelConst.CONTRACT_STATUS_ACTIVE)) {
// Баланса ниже лимита. Приостанавливаем договор.
cg = contract.getGroups();
cg = cg | (1L<<GROUP_ERROR_BALANCE);
query = "UPDATE contract SET gr=? WHERE id=?";
psUpdate = con.prepareStatement(query);
psUpdate.setLong(1, cg);
psUpdate.setInt(2, cid);
psUpdate.executeUpdate();
ContractStatusManager statusManager = new ContractStatusManager(con);
status = statusManager.getStatus(cid, date);
status.setContractId(cid);
status.setDate1(date);
status.setDate2(null);
status.setStatus(KernelConst.CONTRACT_STATUS_SUSPENDED);
status.setComment("Смена статуса сервером - приостановлен, поступивших средств недостаточно");
statusManager.changeStatus(status, 0);
}
} else { // Пришёл реальный платёж
if ((cb.floatValue() >= cl.floatValue()) && (cs == KernelConst.CONTRACT_STATUS_SUSPENDED)) {
// Баланс больше лимита. Подключаем договор.
cg = contract.getGroups();
cg = cg & ~(1L<<GROUP_ERROR_BALANCE);
query = "UPDATE contract SET gr=? WHERE id=?";
psUpdate = con.prepareStatement(query);
psUpdate.setLong(1, cg);
psUpdate.setInt(2, cid);
psUpdate.executeUpdate();
ContractStatusManager statusManager = new ContractStatusManager(con);
status = statusManager.getStatus(cid, date);
status.setContractId(cid);
status.setDate1(date);
status.setDate2(null);
status.setStatus(KernelConst.CONTRACT_STATUS_ACTIVE);
status.setComment("Смена статуса сервером - подключен по поступлению платежа");
statusManager.changeStatus(status, 0);
//Открыть шлюз
modset = new ModuleSetup(con, 1);
(new IPNContractStatusManager(con, 1, modset)).changeStatus(cid, 0, 0, true);
}
}
Он срабатывает при приходе платежа. Однако он не работает на 5.1. В письмо приходит сообщение:
Цитата:
ID события: bgbs.contract.script.error
Время регистрации события: 06.07.2010 16:30:39
Contract 116
GENERATE_TIME: 06.07.10 16:30:39
EXECUTION_STOP_TIME: 06.07.10 16:30:39
PROCESS_TIME: 37
OUT:
Contract Limit: 0.00
Contract Balance: 699.00
WARNINGS:
Function [id:3; title:Смена статуса договора при поступлении платежа]: using deprecated method [public int bitel.billing.server.script.bean.event.Event.getContractID()]
Function [id:3; title:Смена статуса договора при поступлении платежа]: using deprecated method [public bitel.billing.server.contract.bean.ContractStatus bitel.billing.server.contract.bean.ContractStatusManager.getStatus(int,java.util.Calendar)]
Смысл этого скрипта в том, чтобы изменять статус договора из "приостановлен" в "подключен", ну еще он выводит договор из спец группы, в которую попадают люди, у тех, у кого баланс отрицательный.