Как-то так, например:
Добавляем два события для скриптов:
- GetAvailableContractTariffOptions extends LocalEvent
- TariffOptionActivateEvent extends LocalEvent
Код:
package ru.bitel.bgbilling.kernel.tariff.option.server.bean.event;
import java.util.Date;
import java.util.List;
import ru.bitel.bgbilling.kernel.tariff.option.common.bean.ContractTariffOption;
import ru.bitel.bgbilling.kernel.tariff.option.common.bean.TariffOption;
import bitel.billing.server.contract.bean.Contract;
import ru.bitel.bgbilling.kernel.event.LocalEvent;
public class GetAvailableContractTariffOptions extends LocalEvent {
private static final long serialVersionUID = -8540903770573008054L;
private Contract contract;
private Date date;
private List<TariffOption> availableTariffOptons;
private List<ContractTariffOption> currentContractOptions;
public GetAvailableContractTariffOptions(Contract contract, Date date,
List<TariffOption> availableTariffOptons,
List<ContractTariffOption> currentContractOptions) {
super(0,contract.getId(),contract.getSuperId(),0);
this.contract = contract;
this.date = date;
this.availableTariffOptons = availableTariffOptons;
this.currentContractOptions = currentContractOptions;
}
public Contract getContract() {
return contract;
}
public Date getDate() {
return date;
}
public List<TariffOption> getAvailableTariffOptons() {
return availableTariffOptons;
}
public void setAvailableTariffOptons(List<TariffOption> availableTariffOptons) {
this.availableTariffOptons = availableTariffOptons;
}
public List<ContractTariffOption> getCurrentContractOptions() {
return currentContractOptions;
}
}
Код:
package ru.bitel.bgbilling.kernel.tariff.option.server.bean.event;
import ru.bitel.bgbilling.kernel.tariff.option.common.bean.ContractTariffOption;
import bitel.billing.server.contract.bean.Charge;
import ru.bitel.bgbilling.kernel.event.LocalEvent;
public class TariffOptionActivateEvent extends LocalEvent {
private static final long serialVersionUID = -1619381846416198092L;
private String error = null;
private ContractTariffOption contractOption;
private Charge charge;
public TariffOptionActivateEvent(int userId, int cid,
ContractTariffOption contractOption, Charge charge) {
super(0, cid, -1, userId);
this.contractOption = contractOption;
this.charge = charge;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public ContractTariffOption getContractOption() {
return contractOption;
}
public void setContractOption(ContractTariffOption contractOption) {
this.contractOption = contractOption;
}
public Charge getCharge() {
return charge;
}
public void setCharge(Charge charge) {
this.charge = charge;
}
}
Вставляем вызовы этих событий в классы ContractTariffOptionActivateManager и TariffOptionManager:
в ContractTariffOptionActivateManager, перед строкой 240 (BGBillingServer v 5.1 build 665 from 14.06.2011 11:39:55):
Код:
TariffOptionActivateEvent event = new TariffOptionActivateEvent(userId, cid, contractOption, charge);
ru.bitel.bgbilling.kernel.event.EventProcessor.getInstance().request(event);
if(event.getError()!=null){
throw new BGMessageException(event.getError());
}
charge = event.getCharge();
contractOption = event.getContractOption();
if(null==contractOption){
throw new BGMessageException();
}
В TariffOptionManager перед строкой 147 (BGBillingServer v 5.1 build 665 from 14.06.2011 11:39:55):
Код:
GetAvailableContractTariffOptions event = new GetAvailableContractTariffOptions(contract, date, result, currentContractOptions);
ru.bitel.bgbilling.kernel.event.EventProcessor.getInstance().request(event);
result = event.getAvailableTariffOptons();
if(null==result){
result = new ArrayList<TariffOption>();
}
Потестировал эти события на тестовом сервере с подмененными классами - всё работает.
Итого имеем:
- Возможность модифицировать список доступных опций для договора (как в веб так и в клиенте, правда нельзя определить, откуда именно)
- Возможность запретить активацию опции на договоре с указанием причины (возможна разная логика для web и различных пользователей клиента биллинга)
- Возможность модифицировать опцию договора перед активацией (менять режим активации, даты...)
- Возможность задавать/изменять расход при активации опции