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

[6.2] DebetStatusManageOpenGetAdditionalCharge (CRM)
http://forum.bitel.ru/viewtopic.php?f=19&t=10988
Страница 1 из 1

Автор:  Phricker [ 14 окт 2015, 21:48 ]
Заголовок сообщения:  [6.2] DebetStatusManageOpenGetAdditionalCharge

Собсно есть эта фишка. Запрос доп. расхода для открытия договора.
Есть такой скрипт
Код:
public class GetAdditionalCharge
        extends EventScriptBase
{
    @Override
    public void onEvent( Event event, Setup setup, ConnectionSet connectionSet )
            throws Exception
    {
        Connection con  = connectionSet.getConnection();
        DebetStatusManageOpenGetAdditionalCharge e = (DebetStatusManageOpenGetAdditionalCharge)event;
        e.setMode(DebetStatusManageOpenGetAdditionalCharge.MODE_REPLACE);
        e.setSumma(new BigDecimal(1000));
    }
}


Есть договор на котором висит этот скрипт.
Изображение

Что надо сделать чтобы статус на договоре сменился на активен?
Я занес 1500 рублей одним платежом - статус остался "Недостаточно средств".

Автор:  Phricker [ 14 окт 2015, 21:50 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Это тестовый сервер.

Код:
  Клиент: вер. 6.2.756 / 23.09.2015 17:49:41
    os: Windows 8.1; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_31
  Сервер: вер. 6.2.952 / 23.09.2015 17:50:37
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_31

   npay: вер. 6.2.183 / 23.09.2015 17:51:59

Автор:  Phricker [ 14 окт 2015, 21:51 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Изображение

Автор:  stark [ 15 окт 2015, 14:55 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

а что не так ? Слева в дереве 1000 же напротив npay.

Автор:  Phricker [ 15 окт 2015, 14:57 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Ну да.
Только я занес туда 10000 одним платежом, и это 1000 так и стоит на месте.
Что хочет оно?

Автор:  stark [ 15 окт 2015, 15:00 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

вы своим скриптом сделали так что там всегда выводится 1000. Вы же не проверяете лимит, баланс и т.п . Штаную логику вы подменили . Вообще что нужно получить ? Я что-то собирался сделать с этим событием, но сейчас уже смутно помню. Кажется я хотел туда передавать сумму из штатной логики уже рассчитанную, чтобы легче было писать скрипт и заново не вычислять то же самое.

Автор:  Phricker [ 15 окт 2015, 15:07 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Я хочу сделать, чтобы при блокировании договора, абоненту необходимо было оплатить сумму тарифа для разблокировки договора.
О чем мы общались в похожей теме.

Если убрать строку
Код:
e.setMode(DebetStatusManageOpenGetAdditionalCharge.MODE_REPLACE);

то все будет корретно, за исключением суммы.
К сумме тарифа будет прибавляться сумма тарифа который установлен сейчас
Изображение

Изображение

Т.е. запрашивается еще и сумма до конца месяца (для теста не "до текущего дня" тариф установлен а "авансом за месяц").
В этом случае я могу закинуть платежи и договор активируется
Изображение



Проблема в сумме. Я не хочу чтобы туда прибавлялась сумма которая еще необходима. Пойдите объясните это клиенту потом :) Т.е. я ставлю фиксированную сумму для разблокировки = сумме тарифа в будущем.
Для этого мне нужна строка
Код:
e.setMode(DebetStatusManageOpenGetAdditionalCharge.MODE_REPLACE);


НО с этой строкой договор не активируется по платежу.
Вопрос почему и как сделать чтобы активировался?

Автор:  Phricker [ 15 окт 2015, 15:07 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

ох фак. сейчас скрины поправлю

Автор:  stark [ 15 окт 2015, 15:10 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

маленькие скриншоты в последнем посте. Я пока не понял в чем проблема. Может опишите в цифрах?

Автор:  Phricker [ 15 окт 2015, 15:14 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Если непонятно распишу в цифрах и подробнее :)

Автор:  Phricker [ 15 окт 2015, 15:15 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Код:
e.setMode(DebetStatusManageOpenGetAdditionalCharge.MODE_REPLACE);
        e.setSumma(new BigDecimal(1000));

Этими строками я хочу сказать, чтобы договор активировался только в том случае если у него на балансе будет >= 1000 рублей.
Одним платежом или 1000 по 1 рублю без разницы.
Но сейчас договор вообще не активируется в данном случае.
О чем говорит скриншот в третьем сообщении

Автор:  Phricker [ 15 окт 2015, 15:43 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Пока обедал понял свою ошибку.
Именно то, что вы и написали, что я не вычисляю сумму а просто внаглую леплю 1000.

Каждый раз :)

Цитата:
Я что-то собирался сделать с этим событием, но сейчас уже смутно помню. Кажется я хотел туда передавать сумму из штатной логики уже рассчитанную, чтобы легче было писать скрипт и заново не вычислять то же самое.

А будет нечто подобное в ближайшем будущем? Коммерсы торопят.

Автор:  stark [ 15 окт 2015, 16:22 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Phricker писал(а):
Пока обедал понял свою ошибку.
Именно то, что вы и написали, что я не вычисляю сумму а просто внаглую леплю 1000.

Каждый раз :)

Цитата:
Я что-то собирался сделать с этим событием, но сейчас уже смутно помню. Кажется я хотел туда передавать сумму из штатной логики уже рассчитанную, чтобы легче было писать скрипт и заново не вычислять то же самое.

А будет нечто подобное в ближайшем будущем? Коммерсы торопят.


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

Сейчас я могу передать уже вычисленную сумму для разблокировки . Далее что вы хотите с ней сделать? Могу передать дельту наработки, которая получится при начислении - мы ее вычисляем ..Или надо все передать - а баланс и лимит, и какая наработка сейчас и какая будет после начисления .

Вы хотите любую сумму дополнять до 1000? ..Например для активации нужно 54.84 как на вашем первом скриншоте. Вы хотите чтобы это было не 1000, а 54.83. Если я правильно понял, то тогда будет достаточно передать сумму 54.84 в событие, и скрипт ее проверит. Если сумма < 0, скрипт ничего не сделает (итак все нормально) - он не выставит сумму вообще(null) . Если больше 0( в нашем случае 54.83), то он выдаст 1000 вместо нее в режиме replace. После оплаты эта сумма уже будет приходить отрицательной и скрипт будет опять выдавать null. Если я прав, до достаточно передать эту сумму и будет простой скрипт с одним условием.
Или все намного сложнее и цифру 1000 тоже надо как-то вычислять и требуется какая-то дополнительная информация. Тогда мне нужно знать откуда берется 1000.

Автор:  Phricker [ 15 окт 2015, 16:37 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Вообще задача всё та же
Снятие штрафа за разблокировку в размере суммы тарифа
Коммерсы пока видят следующее:
1) При единовременной оплате в сумме N*сумму тарифа - +100500 мбит к тарифу на 3 месяца (активация тарифной опции)
2) При попадании в финансовую блокировку модулем NPAY - требование оплаты всей суммы по тарифному плану (нужна стоимость тарифа)
3) При единовременной оплате в сумме N*сумму тарифа - 1 бесплатный месяц (активация тарифной опции по которой не будет абонплаты)


Т.к. на данный момент нет простейшей возможности получить сумму тарифа без выполнения предначислений и т.п., (Не гибко это как-то ©) выхожу из положения тем, что сумму тарифа буду писать либо в названии тарифа и потом парсить эту строку, либо метками тарифов (благо на помесячные тарифы хватит 10-15 меток) с ценами в названии. А для подневных буду писать в названии...
Изображение

Ниже пример гибкости в тестовом скрипте :)
Код:
List<ContractTariff> contractTariffs = ctd.list(cid, new Date());
        for(ContractTariff ct : contractTariffs){
            TariffPlan tp =  tpd.get(ct.getTariffPlanId());
            List<TariffLabelItem> tariffLabelItems = tariffLabelManager.getTariffLabelItemList();
            Set<Integer> tariffLabelSet = tariffLabelManager.getTariffLabelIds(tp.getId());
            for(TariffLabelItem tariffLabelItem : tariffLabelItems){
                if(tariffLabelSet.contains(tariffLabelItem.getId())){
                    if(tariffLabelItem.getParentId() == MONTH_LABEL_ID){
                        tariffPrice = tariffPrice.add(Utils.parseBigDecimal(tariffLabelItem.getTitle(),BigDecimal.ZERO));
                        tariffPrice = tariffPrice.multiply(new BigDecimal(3.0));
                    }
                    else if(tariffLabelItem.getId() == DAY_LABEL_ID){
                        String tpTitle = tp.getTitle();
                        int indexOf = tp.getTitle().indexOf("=");
                        tpTitle = tpTitle.substring(indexOf);
                        System.err.print("tpTitle = " + tpTitle );
                        tariffPrice = tariffPrice.add(Utils.parseBigDecimal(tpTitle.replaceAll("[^0-9]", ""), BigDecimal.ZERO));
                        tariffPrice = tariffPrice.multiply(new BigDecimal(90.0));
                    }
                }
            }
        }

Автор:  stark [ 15 окт 2015, 16:53 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

итак осталось теперь понять что есть сумма по тарифу. Я где-то описывал, кажется тут, или может быть где-то еще.

1. Если тариф помесячный до текущего дня (у вас есть такие тарифы? ).

Скрипт должен сколько взять . В данном случае планируемое начисление скорее всего будет равно сумме в день. Скрипт ее умножит на 30 или 31, в зависимости от количеста дней. Или всегда на 30? Что вы сейчас забиваете в label для таких тарифов?

2. Аналогично для месячных тарифов. Они у вас безусловные ? или какие ? Что вы забиваете в label для них?

Т.е распишите алгоритм вычисления для ваших тарифов. Сколько вы хотите брать ? всегда за 30 дней или 30-31 в зависимости от месяца. что такое N и сумма тарифов у ваших комерсов?

Автор:  Phricker [ 15 окт 2015, 17:47 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Есть тарифы до текущего дня.
В этом случае будем считать месяцем 30 дней.

Помесячные тарифы в основном (может и есть 1-2 безусловных) все подневные авансом за месяц.

Сумма тарифа в приказе выглядит вот так вот (это как раз из свежих тарифов)

Изображение

Автор:  Phricker [ 15 окт 2015, 17:52 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Большая часть тарифов выглядит как
Изображение

без всяких заморочек для клиентов.
Сейчас чем проще тарифы тем лучше.
И даже сейчас уходим от этого "Плати постоянно - будет увеличиваться скорость" и приходим к день/ночь и тупо сумме.

Автор:  stark [ 15 окт 2015, 18:06 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Phricker писал(а):
Большая часть тарифов выглядит как
Изображение

без всяких заморочек для клиентов.
Сейчас чем проще тарифы тем лучше.
И даже сейчас уходим от этого "Плати постоянно - будет увеличиваться скорость" и приходим к день/ночь и тупо сумме.

А зачем для такого тариф какие-то скрипты ? для него должно итак работать из коробки. Я так понимаю это режим всегда безусловно пытается 3000 списать. Или вы хотите чтобы если у него на счету сейчас 2999 , то он платил не рубль, а все равно 3000 ?

Автор:  Phricker [ 15 окт 2015, 18:18 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

stark писал(а):
Или вы хотите чтобы если у него на счету сейчас 2999 , то он платил не рубль, а все равно 3000 ?

Не совсем. Если у абонента тарифный план 3000 рублей в месяц, то у него должно быть на счете 3000 для активации.
В любой момент времени.
А сейчас для тарифов помесячных получается вот такая вещь (реальный договор сегодняшним числом)
Изображение
Ему достаточно пополнить договор на сумму до конца месяца :) И он активируется

Автор:  stark [ 16 окт 2015, 15:24 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Phricker писал(а):
stark писал(а):
Или вы хотите чтобы если у него на счету сейчас 2999 , то он платил не рубль, а все равно 3000 ?

Не совсем. Если у абонента тарифный план 3000 рублей в месяц, то у него должно быть на счете 3000 для активации.
В любой момент времени.
А сейчас для тарифов помесячных получается вот такая вещь (реальный договор сегодняшним числом)
Изображение
Ему достаточно пополнить договор на сумму до конца месяца :) И он активируется


в смысле у него дата начала абоплаты сегодняшним числом ? Там при этом режиме(на скрине в тарифе) вроде бы НЕ пропорционально статусу, а только пропорционально периоду абопплат. Откуда там 327.27?

Автор:  Phricker [ 19 окт 2015, 12:24 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge (CRM)

По порядку
1) Создаем договор от 01.10.2015
2) Вешаем на него абонплату, и тариф с этой абонплатой.
Изображение
3) Приостанавливаем договор с 15.10.2015
Изображение
4) Видим, что для того, чтобы договор активировался, необходимо пополнить счет на сумму ДО конца месяца
Изображение


Необходимо же, чтобы пользователь оплатил сумму тарифа для активации. В ЛЮБОЙ день месяца.

Автор:  stark [ 19 окт 2015, 17:46 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge (CRM)

тут только скрипт не спасет тогда. Там уже сумма их тарифа приходи неправильная. Нам надо при тарификации сообщить о том что статусы действуют весь месяц. Это надо либо чтобы сам скрипт проводил заново тарификацию с правильными настройками либо нам надо сделать (опционально) это.

вот тут есть
Код:
calculator.setActiveFromDate( startMonth );


Мы же вызываем у себя калькулятор без этой настройки. Либо надо в скрипте все писать самим или у нас поменять. Наверное сделаем отдельный режим, типа не учитывать приостановленные статусы с начала месяца(и до конца, в будущем тоже).

Автор:  stark [ 19 окт 2015, 18:16 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge (CRM)

выложено обновление 6.2. Обновитесь и поставьте в конфигурации npay :
Код:
#при приходе платежа считаем что он активен с начала месяца(не учитываем приостановленные статусы, в которых абонку не надо начислять).
debet.npay.payment.active.from.month.start=1


И пока вообще без скрипта. Для этого случая должно хватить. И потом будем дальше разбираться что еще надо в скрипт(может быть ничего и не надо уже будет).

Проверьте работу, если нормально, я добавлю этот режим в документацию.

Автор:  stark [ 19 окт 2015, 18:18 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge (CRM)

Обновления еще нет, выкладывается. Будет в течении 10 минут.

Автор:  stark [ 19 окт 2015, 19:20 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge (CRM)

выложено. Есть правда еще проблема в с режимом "до текущего дня". Там эта настойка не спасет, надо еще что-то добавить, подумаем.

Автор:  stark [ 19 окт 2015, 20:28 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge (CRM)

надо еще раз обновится. переименовали флаг и поменяли логику.
Цитата:
F: Новый режим дебетовых абонплат, при расчете сумму разблокировки считаем что он активен с начала месяца и до конца(debet.npay.payment.active.full.month=1).


Теперь будут работать тарифы до текущего дня.

Автор:  stark [ 19 окт 2015, 21:00 ]
Заголовок сообщения:  Re: [6.2] DebetStatusManageOpenGetAdditionalCharge

Phricker писал(а):


Если нужен именно вариант skn из той схемы, то его тоже можем реализовать . Т.е вычислить сколько осталось дней в этом(из 30), сколько нужно заплатить за остаток дней в следующем и показать сумму для разблокировки с учетом этого. Но пока это не нужно насколько я понял.

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