forum.bitel.ru http://forum.bitel.ru/ |
|
Управление лимитом через личный кабинет [6.1] http://forum.bitel.ru/viewtopic.php?f=22&t=11122 |
Страница 1 из 1 |
Автор: | Villian [ 25 ноя 2015, 18:37 ] |
Заголовок сообщения: | Управление лимитом через личный кабинет [6.1] |
Доброго дня... В Данный момент лимиты в ЛК выглядят так ![]() Это не удобно при списание Абонентской платы авансом за месяц в начале месяца. (абоненту нужно знать сумму которая спишется с него по ТП.) Как сделать чтобы абонент выбирал только количество дней.. а лимит будет выставляться 100500 допустим указанный в параметре Код: contract.limit.1.maxsumm=
|
Автор: | Amir [ 25 ноя 2015, 19:07 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Как вариант, просто поле сделать hidden и value указать тоже что и contract.limit.1.maxsumm, а minsumm=maxsumm. |
Автор: | Phricker [ 26 ноя 2015, 12:20 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Амир, а можно каким-либо скриптом устанавливать этот maxsumm? Ну на событие какое-нибудь повесить или т.п.? |
Автор: | skyb [ 26 ноя 2015, 12:31 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Phricker писал(а): Амир, а можно каким-либо скриптом устанавливать этот maxsumm? Ну на событие какое-нибудь повесить или т.п.? перепиши экшен с нужными условиями, или тебе динамически это делать нужно? |
Автор: | Phricker [ 26 ноя 2015, 12:44 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Переписать не проблема, скажите только что переписать. Я последние три дня ипусь с одной хренью, и мозг на что-то другое не отвлекается. В идеале я хочу чтобы туда передавалась сумма из модуля NPAY, которой недостаточно для активации договора. Т.е. надо скрипт. На что этот скрипт вешать? |
Автор: | Phricker [ 26 ноя 2015, 12:46 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Так то да, пишешь Код: <td><input type="hidden" name="summ" size="6" value=${dataMap['contractLimitParameters'].maxSumm}></input></td> и нет проблем. Но это такое решение не очень. Где-то кстати обсуждалось, что кто-то написал эту страницу просто с одной кнопкой понизить лимит. И все. Само вычисляет сумму, дни и т.п. Чтобы не заморачивать пользователя. У опсосов ты же не выбираешь сумму или дни. Тебе дают на 3 дня сумму зависящую от твоих платежей за последний месяц (билайн), или у МТСа ты можешь выбрать сумму но тебе так же дают на 3 (или 5) дней. При этом я должен гадать какой же у меня тарифный план чтобы не прогадать с суммой. |
Автор: | Phricker [ 26 ноя 2015, 12:50 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Кстати вот /summon vkulakov Поделитесь реализацией пожалста ![]() |
Автор: | skyb [ 27 ноя 2015, 06:35 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
даже удивился )))) dynaction:contract.web.ActionContractLimit=ru.skyb.scripts.action.ActionContractLimit Код: package ru.skyb.scripts.action;
import java.math.BigDecimal; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; import bitel.billing.server.contract.bean.BalanceUtils; import bitel.billing.server.ActionResultContentType; import bitel.billing.server.contract.bean.Contract; import bitel.billing.server.contract.bean.ContractManager; import bitel.billing.server.contract.bean.LimitManager; import bitel.billing.server.contract.bean.LimitManager.ContractLimitParameters; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.kernel.event.events.ContractLimitUserLow; import ru.bitel.bgbilling.kernel.event.events.LimitChangedEvent; import ru.bitel.bgbilling.kernel.event.events.system.SystemLimitChangedEvent; import bitel.billing.common.TimeUtils; import ru.bitel.common.Utils; public class ActionContractLimit extends bitel.billing.server.contract.action.web.ActionContractLimit { private ContractLimitParameters clp = null; @Override public void doAction() throws SQLException, BGException { String action = request.getParameter("act"); request.setAttribute( "contentType", ActionResultContentType.jsp ); java.util.Date currentDate = new java.util.Date(); //BigDecimal summ = getBigDecimalParameter( "summ", BigDecimal.ZERO ); BigDecimal summ = new BigDecimal(1000); LimitManager lm = new LimitManager( con ); ContractManager cm = new ContractManager( con ); Contract contract = cm.getContractById( cid ); BalanceUtils bu = new BalanceUtils (con); String query = " SELECT date1 FROM contract WHERE id = " + cid; PreparedStatement contractPs = con.prepareStatement( query ); ResultSet contractRs = contractPs.executeQuery(); /* else if( contract.getBalanceLimit().subtract( summ ).compareTo( clp.minLimit ) < 0 ) { throw new BGMessageException( "Понижение лимита ниже " + Utils.formatBigDecimalSumm( clp.minLimit ) + " невозможно." ); } */ reloadClp( lm, contract ); //if( clp != null && summ.compareTo( BigDecimal.ZERO ) > 0 && contract.getBalanceMode() == Contract.DEBET_BALANCE_MODE ) if( clp != null && "Взять платеж".equals(action) && contract.getBalanceMode() == Contract.DEBET_BALANCE_MODE ) { while ( contractRs.next() ) { Date date = contractRs.getDate( 1 ); int mounth = TimeUtils.monthsDelta(date, currentDate); /* *Больше месяца - день *Больше трех - три *Больше пол года - пять */ if (bu.getBalance(currentDate, cid).compareTo( new BigDecimal(0) ) >= 0) { if (mounth == 0) { System.out.println("While sql " + date + " mounth " + mounth + " currentDate " + currentDate); throw new BGMessageException( "Обещанный платеж можно брать только через месяц" ); } if (mounth >= 1 && mounth < 3) { lm.lowLimit( cid, summ, 1 ); contract = cm.getContractById( cid ); context.publishAfterCommit( new ContractLimitUserLow( userID, cid, summ, 1 ) ); context.publishAfterCommit( new SystemLimitChangedEvent( cid, contract.getBalanceLimit()) ); context.publishAfterCommit( new LimitChangedEvent( cid, contract.getBalanceLimit()) ); reloadClp( lm, contract ); System.out.println("While sql " + date + " mounth " + mounth + " currentDate " + currentDate); } if (mounth >= 3 && mounth < 6) { lm.lowLimit( cid, summ, 3 ); contract = cm.getContractById( cid ); context.publishAfterCommit( new ContractLimitUserLow( userID, cid, summ, 3 ) ); context.publishAfterCommit( new SystemLimitChangedEvent( cid, contract.getBalanceLimit()) ); context.publishAfterCommit( new LimitChangedEvent( cid, contract.getBalanceLimit()) ); reloadClp( lm, contract ); System.out.println("While sql " + date + " mounth " + mounth + " currentDate " + currentDate); } if (mounth >= 6) { lm.lowLimit( cid, summ, 5 ); contract = cm.getContractById( cid ); context.publishAfterCommit( new ContractLimitUserLow( userID, cid, summ, 5 ) ); context.publishAfterCommit( new SystemLimitChangedEvent( cid, contract.getBalanceLimit()) ); context.publishAfterCommit( new LimitChangedEvent( cid, contract.getBalanceLimit()) ); reloadClp( lm, contract ); System.out.println("While sql " + date + " mounth " + mounth + " currentDate " + currentDate); } } else { throw new BGMessageException( "Понижение лимита при отрицательном балансе невозможно." ); } } contractPs.close(); contractRs.close(); } super.doAction(); } private void reloadClp( LimitManager lm, Contract contract ) throws BGException { try { clp = null; clp = lm.getContractLimitParameters( setup, contract ); } catch( BGMessageException e ) { setMsg( e.getMessage() ); } } } |
Автор: | Phricker [ 27 ноя 2015, 18:06 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Угу. В правильном направлении направил. Вопрос к разрабам. В LimitManager есть переменные. Код: public static class ContractLimitParameters { public final long groups; public final int maxNotPayoffed; public final int maxPartialPayoffed; public final int maxExpiredForBlock; public final int minDays; public final int maxDays; public final BigDecimal minSumm; public final BigDecimal maxSumm; public final BigDecimal minLimit; И из своего класса их невозможно переопределить (что в принципе логично ага) ![]() Но хотелось бы какой-то обратной связи со страницей. Т.е. если я в своем классе переопределяю сумму лимита в размере тарифного плана, например, или же в сумму необходимую модулю NPAY для активации договора, то хотелось бы на странице вывести что нибудь типа "Ваш лимит будет понижен на N рублей строком на N дней". И переопределить это в clp я не могу. |
Автор: | skn [ 27 ноя 2015, 20:00 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
создать свой экземпляр ContractLimitParameters скопировать все неизмененные параметры и заменить те что нужно, присвоить переменной clp ссылку на этот экземпляр |
Автор: | Phricker [ 27 ноя 2015, 20:52 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Что-то к концу пятницы не соображаю уже. Можно пример? |
Автор: | skn [ 27 ноя 2015, 21:35 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Phricker писал(а): Что-то к концу пятницы не соображаю уже. Можно пример? Код: clp = lm.getContractLimitParameters( setup, contract );
clp = new ContractLimitParameters( clp.groups, clp.maxNotPayoffed, clp.maxPartialPayoffed, clp.maxExpiredForBlock, clp.minDays, clp.maxDays, new BigDecimal( 100 ), new BigDecimal( 100 ), clp.minLimit ); |
Автор: | Phricker [ 28 ноя 2015, 00:57 ] |
Заголовок сообщения: | Re: Управление лимитом через личный кабинет [6.1] |
Угу, так точно. Благодарю! ![]() В понедельник будет что пилить. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |