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/