forum.bitel.ru
http://forum.bitel.ru/

[фичреквест] События доступа к тарифным опциям
http://forum.bitel.ru/viewtopic.php?f=22&t=5574
Страница 1 из 1

Автор:  Cromeshnic [ 07 июн 2011, 11:22 ]
Заголовок сообщения:  [фичреквест] События доступа к тарифным опциям

Фичреквест:
- Событие на выдачу списка доступных опций (тыц)
- Событие "перед активацией тарифной опции" с возможностью запретить активацию и возвратить текст ошибки
- Гибкое редактирование опций договора в клиенте (тыц)

Первое и второе мне сейчас понадобилось для следующего:
Подключать опции и менять тарифы через лк у нас могут только те клиенты, у которых заключено доп соглашение к договору, описывающее эти процедуры. Сейчас подписавшим доп. соглашение в биллинге проставляется группа тарифов и группа "Турбокнопка" на договоре, которая разрешает активировать опцию.
Проблема в том, что клиент без доп соглашения заходит в раздел "Тарифные опции" и видит пустой экран. С точки зрения маркетинга же правильнее было бы показывать ему эти опции неактивными, либо активными, но при попытке подключить их клиенту бы выдавалось сообщение о необходимости заключения доп соглашения. Когда опций нет совсем, он как бы и не знает о их существовании.
Если я сам смогу рулить доступом к опциям на уровне скриптов, то всё это решаемо.
Плюс, можно будет давать доступ к опциям в зависимости от времени дня, баланса, наработки по определённым услугам или фазы луны :)


Может мне написать патч? :)

Автор:  Cromeshnic [ 07 июн 2011, 11:25 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Ещё пример применения: опции с квотой по трафику/времени/наработке. Опция доступна, пока месячная квота не исчерпана.

Автор:  skyb [ 07 июн 2011, 11:27 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

На самом деле неплохо было бы иметь доступ к опциям(активации, деактивации) со скриптов.

Автор:  snark [ 07 июн 2011, 18:12 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

+1 к просьбе ТС

Автор:  max [ 07 июн 2011, 23:35 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

поддерживаю

Автор:  Dog [ 08 июн 2011, 03:10 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

+1

Автор:  Amir [ 17 июн 2011, 18:41 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Цитата:
- Гибкое редактирование опций договора в клиенте

Речь об активации на любой период или же редактирование периода активированной опции?
Первое легко сделать, для второго нужно отслеживать обновления кэшей в других серверах.

Автор:  Cromeshnic [ 20 июн 2011, 07:23 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Насколько я понимаю, для второго достаточно выстрелить TariffOptionChanged, чтобы обновить кэш опций сессий в радуисе:
Код:
BillingEventBus.publish(new TariffOptionChanged(cid));

Автор:  Cromeshnic [ 20 июн 2011, 13:51 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Как-то так, например:

Добавляем два события для скриптов:
- 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 и различных пользователей клиента биллинга)
- Возможность модифицировать опцию договора перед активацией (менять режим активации, даты...)
- Возможность задавать/изменять расход при активации опции

Автор:  Cromeshnic [ 20 июн 2011, 13:52 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Краудсорсинг, ага :roll:

Автор:  Amir [ 20 июн 2011, 14:35 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

В 5.2 - нет, там уже нет BillingEventBus. Там через mq/EventProcessor.
И по данным события не просто сбрасывает кэш, а обновляет его.

Автор:  Amir [ 20 июн 2011, 14:38 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Это уже сделали в 5.2 (кроме setCharge/getCharge, тоже надо бы добавить) :)
Осталось только редактирование активированной опции и дополнительные режимы активации.

Автор:  Cromeshnic [ 20 июн 2011, 17:17 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Круто, а в 5.1 можно?

Автор:  skyb [ 20 июн 2011, 17:37 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

Cromeshnic писал(а):
Круто, а в 5.1 можно?

:-P

Автор:  Amir [ 20 июн 2011, 20:00 ]
Заголовок сообщения:  Re: [фичреквест] События доступа к тарифным опциям

К сожалению, нет :(
Т.к. код 5.2 уже сильно отличается от 5.1 - недавно делали платную доработку в модуле карточек - замучались патчить на 5.1.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/