Всё правильно:
Администратор писал(а):
При принятии решении о доступе пользователя к услуге по субдоговору используется остаток на едином балансе и лимит субдоговора.
-6645.65<-1850.00 => не пускаем субдоговор.
Поэтому у нас на зависимых субдоговорах обычно ставят такой же лимит, как на супердоговоре.
Для удобства даже доп. действие сделал, чтобы при смене лимита на основном можно было разом выровнять лимит на паре десятков субдоговоров:
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.admin.bean.*;
import java.util.*;
import bitel.billing.server.util.*;
import java.math.*;
import bitel.billing.server.script.bean.event.*;
import bitel.billing.server.admin.eventbus.BillingEventBus;
import bitel.billing.server.admin.eventbus.event.LimitChangedEvent;
cm = new ContractManager( con );
c = cm.getContractByID( event.getContractID() );
switch( event.getActionId() )
{
case 2://Выравниваем лимит субдоговоров
includeBGBS( "bgbs://ru.bitel.bgbilling.kernel.script.common.bean.ScriptLibrary/limit_manage" );
List contracts = cm.getSubContracts(c.getID(),0);
for(Contract sc : contracts){
custom_limit_Fix(sc, c.getBalanceLimit(), con);
print(sc.getID());
}
//Отчет:
m=c.getTitle()+" = "+c.getBalanceLimit()+"<br/><br/>\n";
List contracts = cm.getSubContracts(c.getID(),0);
for(Contract sc : contracts){
m+=sc.getTitle()+" = "+sc.getBalanceLimit()+"<br/>\n";
}
event.addReport( "<html>Выполнено:<br/><br/>\n"+m+"</html>" );
print("done");
break;
}
В limit_manage:
Код:
//выравниваем лимит на субдоговоре, добавляем недостающие задания на смену лимита
public void custom_limit_Fix(Contract subc, java.math.BigDecimal limit, java.sql.Connection con){
if(!subc.isDependSub()){return;}
LimitManager lm = new LimitManager(con);
//удаляем все задания на возвращение лимита на субдоговоре
List tasklist = lm.getContractMoveTasks(subc.getID());
for(LimitChangeTask task : tasklist){
try{
lm.deleteMoveTask(task.getId());
}catch(BaseException e){//Нельзя удалить лимит, заданный в личном кабинете например.
// return;
}
}
//Копируем задания на возвращение лимита с супердоговора
List tasklist = lm.getContractMoveTasks(subc.getSuperId());
for(LimitChangeTask task : tasklist){
task.setContractId(subc.getID());
lm.addMoveTask(task);
}
//Устанавливаем лимит для субдоговора
lm.updateContractLimit(0,limit,subc.getID(),"как на супердоговоре","");
BillingEventBus.publish(new LimitChangedEvent(subc.getID(), limit));
bitel.billing.server.contract.bean.Payment fakePayment = new bitel.billing.server.contract.bean.Payment();
fakePayment.setContractID(subc.getID());
fakePayment.setPaymentTypeID(-1);
fakePayment.setDate(new Date());
fakePayment.setUserID(-1);
bitel.billing.server.script.bean.event.EventProcessor.getProcessor().addEvent(new bitel.billing.server.script.bean.event.PaymentEvent(fakePayment));
return;
}