BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Кредитный метод расчетов
СообщениеДобавлено: 11 дек 2012, 08:41 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Кредитный договоры,20 числа каждого месяца происходит отключение абонентов.
Допустим у абонента на 01.11.12 входящий остаток -330 руб
20.11.12 его отключают за долги за октябрь
на 01.12.12 у абонента входящий баланс -660 руб
03.12.12 абонент оплачивает 330 руб, т.е. текущий баланс абонента -330 руб+наработка за 3 дня
по идеи мы должны включить данного абонента т.к. метод кредитный и за октябрь он оплатил, а за ноябрь отключение будет только 20 декабря, т.е. при таком раскладе абонент должна быть активен с 03.12.12 по 20.12.12 если не внесет платеж за ноябрь месяц.
От сюда вопрос, можно ли как то отслеживать таких абонентов?

Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кредитный метод расчетов
СообщениеДобавлено: 11 дек 2012, 09:43 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
У нас такая же логика. Отключаем кредитных руками 25 числа каждого месяца.
Включаются они скриптом по приходу платежа: для кредитовых договоров проверяется, оплачен ли предыдущий месяц. Если оплачен - включаем.
Могу поделиться скриптом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кредитный метод расчетов
СообщениеДобавлено: 11 дек 2012, 09:48 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Если не жалко :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кредитный метод расчетов
СообщениеДобавлено: 11 дек 2012, 10:29 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Скрипт старый и довольно странный, сейчас я бы написал его постройнее. Но работает.

Код:
package ru.dsi.bgbilling.kernel.scripts;

import ru.bitel.bgbilling.kernel.contract.balance.server.event.PaymentEvent;
import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

import bitel.billing.server.contract.bean.*;

import java.sql.Connection;
import java.util.*;


public class MyCreditOpenLogic
   extends EventScriptBase<Event>
{
   @Override
   public void onEvent( Event event, Setup setup, ConnectionSet connectionSet )
      throws Exception
   {
      
         Connection con = connectionSet.getConnection();
   
         int cid = event.getContractId();
         Calendar now = Calendar.getInstance();
         Date d_now = new Date();
         if(event instanceof PaymentEvent){
            Payment p = ((PaymentEvent)event).getPayment();
            print("Сумма платежа" + p.getSumma()+"\n");
         }
   
         ContractManager cm = new ContractManager( con );
         ContractStatusManager cstm = new ContractStatusManager( con );
         BalanceUtils bu = new BalanceUtils( con );
         Contract c = cm.getContractById( cid );
   
         
         print("Текущий статус: " + c.getStatus()+"\n");
   
         if((c.getBalanceMode()==Contract.DEBET_BALANCE_MODE) &&(c.getStatus()==3)){
            print("debet + статус=3 => выходим");
            return;//Для дебета не обрабатываем
         }
   
         // Если мы - субдоговор с зависимым балансом - ничего не делаем
         // Вообще, на зависимые субдоговора не должны приходить платежи. Это ненормальная ситуация. При приходе платежа на субдоговор не генерируется евент прихода платежа для основного, поэтому основной не откроется, хотя должен. Но мы не будем обрабатывать подобные ситуации, т.к. это исключение.
         if (c.getSuperId()>0 && c.getSubMode()==0){
            print("Договор является субдоговором с зависимым балансом => ничего не делаем");
            return;
         }
   
         //Если баланс больше лимита, то выполняем далее, иначе не выполняем
         Float balance_limit = c.getBalanceLimit().floatValue();
         Float current_balance = bu.getBalance(new Date(), c).floatValue();
   
         print("Баланс: "+current_balance);
         if(current_balance < balance_limit){
           print("Баланс меньше лимита. Пропускаем договор\n");
           return;
         }else{
           print("Баланс ОК\n");
         }
   
         //Проверка сальдо для кредитных договоров:
         //Если в текущем месяце при разблокировании смотреть на :
         //1. Лимит - остаток должен быть больше лимита
         //2. до 25 проверять чтобы оплата была >= остатку на 1-е число предыдущего месяца, после 26 числа оплата должна быть >= остатку на 1-е число текущего месяца
         if(c.getBalanceMode()==Contract.CREDIT_BALANCE_MODE){
            float saldo = 0;
            float debt = 0;
            if((new GregorianCalendar()).get(Calendar.DAY_OF_MONTH)<25){
               Calendar last_month = (Calendar)now.clone();
               last_month.add(Calendar.MONTH,-1);
               saldo = bu.getSaldo(last_month.getTime(), c.getId()).floatValue()+ bu.getSaldo(now.getTime(), c.getId()).floatValue() - bu.getBalanceSumma1(now.getTime(), c.getId()).floatValue();
               debt = bu.getBalanceSumma1(last_month.getTime(), c.getId()).floatValue();
               print("Сальдо за предыдущий месяц + приход в текущем: " + saldo+"\n");
               print("Входящий остаток в предыдущем месяце: " + debt+"\n");
            }else{
               saldo = bu.getSaldo(now.getTime(), c.getId()).floatValue();
               debt = bu.getBalanceSumma1(now.getTime(), c.getId()).floatValue();
               print("Сальдо за текущий месяц: " + saldo+"\n");
               print("Входящий остаток в текущем месяце: " + debt+"\n");
            }
            //
            if(saldo<0.05*debt){
               print("Сальдо < 0.05*(вх. остаток), долг не погашен - не открываем: \n");
               print(saldo + " < " + "0.05*"+debt + "\n");
               return;
            }
         }
   
         //Все тесты прошли - можно открывать клиента:
         //----------------------------------------------------------------------//
         //Если текущий статус Активен и далее нет никаких статусов в будущем пропускаем скрипт
         print("Можно открывать!\n");
         List<ContractStatus> statusList =  cstm.getStatusList(cid, d_now);
         if(statusList.size() == 0){
            print("Список изменений статусов пуст, ничего не делаем - видимо договор и так активен\n");
            return;
         }
         int lastStatus = ((ContractStatus)statusList.get(0)).getStatus();
         if(statusList.size() == 1 && lastStatus == 0){
            print("Договор и так активен\n");
            return;
         }
         // Если последний и единственный на текущее время статус договора приостановить.
         // пропускаем выполнение.
         if(statusList.size() == 1 && lastStatus == 4){
            print("Договору не нужен статус = АКТИВЕН. Последний статус договора = Приостановить.\n");
            return;
         }
   
         ContractStatus s = new ContractStatus();
         s.setContractId(cid);
         s.setDateFrom(new Date());
         s.setDateTo(null);
         s.setStatus(0);
         s.setComment("Статус изменен по приходу платежа");
         cstm.changeStatus(s,0,true);
         
         cstm.recycle();
   }

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кредитный метод расчетов
СообщениеДобавлено: 12 дек 2012, 06:25 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
т.к. не силен в яве вопрос: сильно придется переделывать этот скрипт в случае платежей на суб договоры с зависимым балансом?
Печально что под 5.2.......в 5.1 нету EventScriptBase<Event> ((


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кредитный метод расчетов
СообщениеДобавлено: 18 дек 2012, 11:37 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Может есть у кого вариант под 5.1?


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

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


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

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 1


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

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