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/ |