BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 27 апр 2024, 23:46

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 17 фев 2016, 13:45 
Не в сети

Зарегистрирован: 11 мар 2015, 15:49
Сообщения: 49
Карма: 0
Добрый день, пытаемся реализовать схему, с минимальной суммой платежка для разблокировки договора равной абонентской плате (ну или абонентской плате минус остаток заблокированного депозита), методами биллинга можно установить только фиксированную сумму на модуль, не совсем то что нужно.
Подскажите может есть у кого реализация данной задачи ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 14:35 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Там есть событие, можно свою сумму в скрипте выставить. Но возможно будут проблемы с ее вычислением.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 16:20 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Версии?

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 16:26 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Мы вышли из ситуации следующим образом.
В каждом тарифе в названии была добавлена стоимость тарифа.
И нарисованы три метки (соответственно списанию абонплат и собственно требованию доп. расхода).
Изображение
На событие "Запрос доп. расхода для открытия договора" повесили скрипт.
Код:
package ru.ellcom.bgbilling.scripts.tariff;

import bitel.billing.server.contract.bean.*;
import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.kernel.tariff.common.bean.TariffLabelItem;
import ru.bitel.bgbilling.kernel.tariff.common.bean.TariffPlan;
import ru.bitel.bgbilling.kernel.tariff.server.bean.TariffLabelManager;
import ru.bitel.bgbilling.kernel.tariff.server.bean.TariffPlanManager;
import ru.bitel.bgbilling.modules.npay.server.bean.event.DebetStatusManageOpenGetAdditionalCharge;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.Utils;
import ru.bitel.common.sql.ConnectionSet;

        import java.math.BigDecimal;
        import java.sql.Connection;
        import java.util.Date;
        import java.util.List;
        import java.util.Set;

public class GetAdditionalCharge
        extends EventScriptBase {
    private static int LABEL_GET_ADD_CHARGE = 84;
    private static int LABEL_DAY_TARIFF = 86;
    private static int LABEL_MONTH_TARIFF = 85;

    @Override
    public void onEvent(Event event, Setup setup, ConnectionSet connectionSet)
            throws Exception {
        Connection con = connectionSet.getConnection();
        ContractTariffManager ctm = new ContractTariffManager(con);
        ContractManager cm = new ContractManager(con);
        TariffPlanManager tpm = new TariffPlanManager(con);
        TariffLabelManager tariffLabelManager = new TariffLabelManager(con);
        BalanceUtils bu = new BalanceUtils(con);
        Boolean needAddCharge = false;

        DebetStatusManageOpenGetAdditionalCharge e = (DebetStatusManageOpenGetAdditionalCharge) event;
        int cid = e.getContractId();
        Date nowDate = new Date();
        Contract contract = cm.getContractById(cid);
        BigDecimal result = BigDecimal.ZERO;
        BigDecimal currentBalance = bu.getBalance(nowDate, contract);
        BigDecimal currentLimit = contract.getBalanceLimit();
        result = currentBalance.subtract(currentLimit).negate();
        BigDecimal tariffPrice = BigDecimal.ZERO;
       
        List<ContractTariff> contractTariffs = ctm.getContractTariffList(cid, new Date());
        for (ContractTariff ct : contractTariffs) {
            TariffPlan tp = tpm.getTariffPlan(ct.getTariffPlanId());
            List<TariffLabelItem> tariffLabelItems = tariffLabelManager.getTariffLabelItemList();
            Set<Integer> tariffLabelSet = tariffLabelManager.getTariffLabelIds(tp.getId());
            if (tariffLabelSet.contains(LABEL_GET_ADD_CHARGE)) {
                needAddCharge = true;
                for (TariffLabelItem tariffLabelItem : tariffLabelItems) {
                    if (tariffLabelSet.contains(tariffLabelItem.getId())) {
                        if (tariffLabelItem.getId() == LABEL_DAY_TARIFF) {
                            String tpTitle = tp.getTitle();
                            int indexOf = tp.getTitle().indexOf("=");
                            tpTitle = tpTitle.substring(indexOf);
                            tariffPrice = tariffPrice.add(Utils.parseBigDecimal(tpTitle.replaceAll("[^0-9]", ""), BigDecimal.ZERO));
                            tariffPrice = tariffPrice.multiply(new BigDecimal(30.0));
                        }
                        if (tariffLabelItem.getId() == LABEL_MONTH_TARIFF) {
                            String tpTitle = tp.getTitle();
                            int indexOf = tp.getTitle().indexOf("=");
                            tpTitle = tpTitle.substring(indexOf);
                            tariffPrice = tariffPrice.add(Utils.parseBigDecimal(tpTitle.replaceAll("[^0-9]", ""), BigDecimal.ZERO));
                        }
                    }
                }
            }
        }
        if(needAddCharge && tariffPrice.compareTo(BigDecimal.ZERO) > 0){
            result = result.add(tariffPrice);
            //System.err.print("RESULT! Договор " + contract.getTitle() + ". Сумма для разблокировки = " + result);
            e.setMode(DebetStatusManageOpenGetAdditionalCharge.MODE_REPLACE);
            e.setSumma(result);
        }
    }
}


Вроде работает.

P.S. Это версия с тестового сервера, но она рабочая.
На рабочем были изменены условие needAddCharge. Я от него тупо избавился.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 16:28 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
На вики нет потому что пока проходит боевую эксплуатацию и было пару фиксов.
Работает с 01.02.2016 :)

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 16:53 
Не в сети

Зарегистрирован: 11 мар 2015, 15:49
Сообщения: 49
Карма: 0
А почему не стали по id тарифу вычислять нужную сумму для открытия статуса ?

Вешь очень нужная, разработчики бы поддержали данный вопрос, да бы костылями его не решать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 17:55 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
telesystem писал(а):
А почему не стали по id тарифу вычислять нужную сумму для открытия статуса ?

Ну ну.
Вы еще попросите чтобы можно было высчитать сумму абонплат тарифа )

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 20:14 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
telesystem писал(а):
А почему не стали по id тарифу вычислять нужную сумму для открытия статуса ?

Вешь очень нужная, разработчики бы поддержали данный вопрос, да бы костылями его не решать.



Я тут расписывал вроде вариант со скриптом. И еще вроде в какой-то другой теме для Phricker. Можно попробовать пойти по этому пути.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2016, 20:27 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
viewtopic.php?f=19&t=10988
Тут.
Но мне не понравилось )
И я решил скриптом.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 фев 2016, 19:34 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
а что за метки в скрине, как они добавляются и на кой они нужны?

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.783s | 38 Queries | GZIP : On ]