Редактирование дат тарифных опций
Материал из BiTel WiKi
Настройка Асситента
Редактирование производится в два этапа: сперва в договоре выбирается тарифная опция, затем изменяются её даты. Создаётся два действия для ассистента, родительское и дочернее:
Затем создаются классы-обработчики (их можно создать прямо при создании действий):
package ru.televid.assistant; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.tariff.option.common.bean.ContractTariffOption; import ru.bitel.bgbilling.kernel.tariff.option.common.service.TariffOptionService; import ru.bitel.bgbilling.plugins.assistant.common.bean.AssistantKeyValue; import ru.bitel.bgbilling.plugins.assistant.server.bean.AssistantActionBase; import ru.bitel.bgbilling.plugins.assistant.server.bean.AssistantRequest; import ru.bitel.bgbilling.plugins.assistant.server.bean.AssistantResponse; import ru.bitel.common.TimeUtils; import java.util.ArrayList; public class ChooseTariffOption extends AssistantActionBase { int cid = 0; @Override public AssistantResponse doAction( AssistantRequest assistantRequest ) throws BGException, BGMessageException { this.assistantRequest = assistantRequest; this.cid = assistantRequest.getContractId(); // System.out.println("Step 2 doAction " + this.cid); return super.doAction( assistantRequest ); } @Override public AssistantResponse showAction( AssistantRequest assistantRequest ) throws BGException, BGMessageException { this.assistantRequest = assistantRequest; this.cid = assistantRequest.getContractId(); // System.out.println("Step 2 showAction "+this.cid); ServerContext serverContext = ServerContext.get(); TariffOptionService tops = serverContext.getService(TariffOptionService.class, 0); //получаем список всех тарифных опций договора ArrayList<AssistantKeyValue> optionlist = new ArrayList<AssistantKeyValue>(1); for (ContractTariffOption option : tops.contractTariffOptionList(this.cid, null)) { optionlist.add(new AssistantKeyValue(Integer.toString(option.getId()), option.getOptionTitle() + " с " + TimeUtils.format(option.getTimeFrom(), TimeUtils.DATE_FORMAT_PATTERN_DDMMYYYY) + " по " + TimeUtils.format(option.getTimeTo(), TimeUtils.DATE_FORMAT_PATTERN_DDMMYYYY)) ); } AssistantKeyValue[] values = new AssistantKeyValue[optionlist.size()]; optionlist.toArray(values); assistantResponse.addFieldData( "contractTariffOptions", values); return this.assistantResponse; } }
package ru.televid.assistant; import org.json.JSONException; import ru.bitel.bgbilling.kernel.contract.api.common.bean.ContractNote; import ru.bitel.bgbilling.kernel.contract.api.common.service.ContractNoteService; import ru.bitel.bgbilling.kernel.tariff.option.server.bean.ContractTariffOptionDao; import org.json.JSONObject; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.kernel.tariff.option.common.bean.ContractTariffOption; import ru.bitel.bgbilling.plugins.assistant.common.bean.AssistantKeyValue; import ru.bitel.bgbilling.plugins.assistant.server.bean.AssistantActionBase; import ru.bitel.bgbilling.plugins.assistant.server.bean.AssistantRequest; import ru.bitel.bgbilling.plugins.assistant.server.bean.AssistantResponse; import ru.bitel.common.TimeUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; public class EditTariffOption extends AssistantActionBase { int tpid = 0; @Override public AssistantResponse doAction( AssistantRequest assistantRequest ) throws BGException, BGMessageException { int cid = assistantRequest.getContractId(); StringBuilder comment = new StringBuilder(); ServerContext serverContext = ServerContext.get(); Connection con = serverContext.getConnection(); JSONObject data = assistantRequest.getData().getJSONObject( "fields" ); JSONObject period = data.getJSONObject("tariffOptionPeriod"); Date dateFrom; try { dateFrom = TimeUtils.parseDate(period.getString("from") + " 00:00:00", "yyyy-MM-dd HH:mm:ss"); } catch (JSONException e) { dateFrom = null; } Date dateTo; try { dateTo = TimeUtils.parseDate(period.getString("to") + " 23:59:59", "yyyy-MM-dd HH:mm:ss"); } catch (JSONException e) { dateTo = null; } int ctoid = Integer.parseInt(data.getString("tariffOptionId")); ContractTariffOptionDao ctodao = new ContractTariffOptionDao(con); ContractTariffOption cto = ctodao.get(ctoid); ctodao.close(); comment.append("Было: "). append("с " + TimeUtils.format(cto.getTimeFrom(), "dd.MM.yyyy")). append(" по " + TimeUtils.format(cto.getTimeTo(), "dd.MM.yyyy")). append('\n'). append("Стало: "). append("с " + TimeUtils.format(dateFrom, "dd.MM.yyyy")). append(" по " + TimeUtils.format(dateTo, "dd.MM.yyyy")). append('\n'); String query = "UPDATE contract_tariff_option SET time_from=?, time_to=? WHERE id=?"; try { PreparedStatement ps = con.prepareStatement(query); ps.setTimestamp(1, TimeUtils.convertDateToTimestamp(dateFrom)); ps.setTimestamp(2, TimeUtils.convertDateToTimestamp(dateTo)); ps.setInt(3, ctoid); ps.executeUpdate(); ps.close(); } catch (SQLException sqlException) { comment.append(sqlException.toString()); } //сохраняем ход выполнения в комментарии договора ContractNote cn = new ContractNote(); cn.setContractId(cid); cn.setVisible(true); cn.setDateTime(new Date()); cn.setComment(comment.toString()); cn.setUserId(serverContext.getUserId()); cn.setTitle("Изменение периода действия тарифной опции #" + cto.getId()); ContractNoteService cns = serverContext.getService(ContractNoteService.class,0); cns.contractNoteUpdate(cid,cn); return this.assistantResponse; } @Override public AssistantResponse showAction( AssistantRequest assistantRequest ) throws BGException, BGMessageException { ServerContext serverContext = ServerContext.get(); ContractTariffOptionDao ctodao = new ContractTariffOptionDao(serverContext.getConnection()); JSONObject data = assistantRequest.getData().getJSONObject( "fields" ); this.tpid = Integer.parseInt(data.getString("contractTariffOptions")); assistantResponse.addFieldData( "tariffOptionId", data.getString("contractTariffOptions") ); ContractTariffOption cto = ctodao.get(this.tpid); assistantResponse.addFieldData( "tariffOptionPeriod", new AssistantKeyValue[] { new AssistantKeyValue( "dateFrom", TimeUtils.format(cto.getTimeFrom(),"dd.MM.yyyy") ), new AssistantKeyValue( "dateTo", TimeUtils.format(cto.getTimeTo(),"dd.MM.yyyy") ) } ); ctodao.close(); return this.assistantResponse; } }
Результат:
Предупреждение: даты и совместимость тарифных опций в данном примере не проверяются! Также не производится перерасчёт абонентской платы - его можно запустить вручную при необходимости.