Снижение лимита при внесении расхода

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

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

Работает в 4.6, 5.0

При внесении некоторых типов расходов снижаем лимит на 30 дней.

1. В библиотеке скриптов "limit_manage":

public void my_setLimitPeriod(Contract c, int uid, BigDecimal limit, int period){
    int cid = c.getID();
    LimitManager limitManager = new LimitManager(con);
    BigDecimal current_limit = c.getBalanceLimit();
    BigDecimal new_limit = current_limit.add(limit);
 
    //меняем лимит:
    limitManager.updateContractLimit(0, new_limit, cid, "внесен расход "+t+" "+ p.getComment(), String.valueOf(period));
 
    //добавляем задание на возвращение лимита:
    Calendar dt = new GregorianCalendar();
    dt.add(6, period);
 
    task = new LimitChangeTask();
    task.setContractId(cid);
    task.setDate(dt);
    task.setUserId(uid);
    task.setSubSumm(limit);
 
    limitManager.addMoveTask(task);
 
    //гененрируем событие изменения лимита:
    Payment fakePayment = new Payment();
    fakePayment.setContractID(cid);
    fakePayment.setPaymentTypeID(-1);
    fakePayment.setDate(new Date());
    fakePayment.setUserID(-1);
    EventProcessor.getProcessor().addEvent(new PaymentEvent(fakePayment));
    return;
}

2. Событие "Занесение расхода"

import bitel.billing.server.contract.bean.*;
import java.util.*;
import bitel.billing.server.util.*;
import bitel.billing.common.TimeUtils;
import bitel.billing.server.script.bean.event.EventProcessor;
import bitel.billing.server.script.bean.event.PaymentEvent;
import java.math.BigDecimal;
 
int cid = event.getContractID();
cm = new ContractManager( con );
c = cm.getContractByID( cid );
if( c == null ) {
	error( "Contract with ID:" + cid + " not found!" );
	return;
}
 
p = event.getCharge();
 
//Берём название типа платежа:
t="";
ps = con.prepareStatement("select title from contract_charge_types where id=?");
ps.setInt(1, p.getChargeTypeID());
rs = ps.executeQuery(); if(rs.next()) {  t=rs.getString(1); } 
ps.close();
 
m = c.getTitle() + " " + c.getComment() + "\n";
m = m + "Занесен расход "+p.getSumma()+ "руб от "+TimeUtils.format(p.getChargeDate(),"dd.MM.yyyy")+"\n";
m = m + t + " " + p.getComment() + "\n";
 
//уменьшаем лимит для некоторых типов расходов:
if(p.getChargeTypeID() == 3)
{
	BigDecimal limit=p.getSumma().negate();
	period=30;
	ccid=cid;
	cc=c;
        //подключаем библиотеку:
	includeBGBS( "bgbs://ru.bitel.bgbilling.kernel.script.common.bean.ScriptLibrary/limit_manage");
 
	if(c.isDependSub()){
		ccid=c.getSuperId();
		cc=cm.getContractByID(ccid);
	}
 
	my_setLimitPeriod(cc, 0, limit, period);
	//перебираем все зависимые субдоговора
	ps = con.prepareStatement("select id from contract where scid=? and sub_mode=0");
	ps.setInt(1, ccid);
	rs = ps.executeQuery(); 
	while(rs.next()){
		subcid=rs.getInt(1); 
		scc=cm.getContractByID(subcid);
		my_setLimitPeriod(scc, 0, limit, period);
	}
	ps.close();
	m = m + "лимит снижен на "+ period + " дней";
}
print( "расход "+c.getTitle() + " " + p.getSumma()+ "р " + t+" "+ c.getComment() + "\n" + m);
Личные инструменты