Редактирование дат тарифных опций

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

Версия от 13:18, 9 июня 2021; Pavelk (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Настройка Асситента

Редактирование производится в два этапа: сперва в договоре выбирается тарифная опция, затем изменяются её даты. Создаётся два действия для ассистента, родительское и дочернее:

Первое действие
Второе действие

Затем создаются классы-обработчики (их можно создать прямо при создании действий):

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;
	}
 
}

Результат:

Шаг 1 - выбор действия
Шаг 2 - выбор опции
Шаг 3 - изменение даты
Итог

Предупреждение: даты и совместимость тарифных опций в данном примере не проверяются! Также не производится перерасчёт абонентской платы - его можно запустить вручную при необходимости.

Личные инструменты