BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 17 июн 2025, 15:23

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 08 апр 2015, 12:58 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Имеем кредитный способ расчета с абонентами, отключение производится после 20 числа, если абонент покрывал долг прошлого месяца - договор не активировался т.к. ему не хватало денег для покрытия полного долга(до 20 числа текущего месяца абонент может заплатить долг за прошлый месяц и должен начать работать до следующего отключения)
Написал скрипт поведения(Функции скриптов поведения) который висит на событии приход платежа:
Код:
import java.sql.*;
import java.util.*;
import java.math.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.util.*;
import ru.bitel.bgbilling.kernel.event.*;
import bitel.billing.server.script.bean.event.*;

public void onEvent( event, setup, con, conSlave )
{
   int cid = event.getContractId();
   ContractStatusManager contract_status_manager  = new ContractStatusManager( con );
   Contract contract = new ContractManager(con).getContractById(cid);
   Calendar DateNow = Calendar.getInstance();
   BalanceUtils bu = new BalanceUtils( con );
   //Получаю текущий день месяца
   int schDate = DateNow.get(Calendar.DAY_OF_MONTH); 
   //Получаю первый день предыдущего месяца
   month=bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.getPrevDay(bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.convertCalendarToDate(DateNow))));
   //Абонент должне заплатить абонплату до 20 числа, поэтому проверяем что текущий день месяца меньше или равен 20 числу
   if (schDate<21)
   {
      //Получаю Входящий остаток на начало прошлого месяца
      contract_balance = bu.getBalanceSumma1 (month, cid);
      bu.close();
      // Получаю платежи с 1 числа прошлого месяца по текущее число
      String sql = " SELECT sum(cp.summa) FROM contract_payment as cp left join contract on contract.id=cp.cid where cp.dt > \""+bitel.billing.common.TimeUtils.formatSQLDate(month)+"\" and cp.dt < \""+bitel.billing.common.TimeUtils.formatSQLDate(DateNow)+"\" and cp.cid="+cid;
      PreparedStatement ps = con.prepareStatement( sql );
      ResultSet rs = ps.executeQuery();
      while(rs.next())
      {
         int pm = rs.getInt( 1 );
         BigDecimal sum = new BigDecimal(pm.toString());
         //Складываем Входящий остаток и платежи
         BigDecimal balance=contract_balance.add(sum);
         //Если  Входящий остаток + платежи больше либо равен и договор не активен - активируем его
         if (balance.compareTo( new BigDecimal("0.00") )>= 0 && contract.getStatus()!=0)
         {
            // активируем договор
            ContractStatus status = new ContractStatus();
            status.setContractId( cid );
            status.setDateFrom( DateNow.getTime() );
            status.setDateTo( null );
            status.setStatus(0);
            status.setComment( "Активировано скриптом 1-20" );
            contract_status_manager.changeStatus( status, 0 );
         }
      }
   }
}
Меня тут сильно смущает вот этот кусок.Может есть способ попроще получить первый день прошлого месяца?
Код:
month=bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.getPrevDay(bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.convertCalendarToDate(DateNow))));

Ну и может кто какую ошибку увидит....


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 апр 2015, 13:17 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Код:
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -1);
Calendar firstDayOfPrevMonth = TimeUtils.getStartMonth(c);

если я правильно понял задачу

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 апр 2015, 13:22 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
skyb писал(а):
Код:
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -1);
Calendar firstDayOfPrevMonth = TimeUtils.getStartMonth(c);

если я правильно понял задачу


интересно, если из 31 марта вычесть 1 месяц, какую дата получим ;-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 апр 2015, 13:47 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
skn писал(а):
skyb писал(а):
Код:
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -1);
Calendar firstDayOfPrevMonth = TimeUtils.getStartMonth(c);

если я правильно понял задачу


интересно, если из 31 марта вычесть 1 месяц, какую дата получим ;-)

28 или 29 - зависит от того високосный год или нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 апр 2015, 14:07 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
кстати, тут можно
Код:
String sql = " SELECT sum(cp.summa) FROM contract_payment as cp left join contract on contract.id=cp.cid where cp.dt > \""+bitel.billing.common.TimeUtils.formatSQLDate(month)+"\" and cp.dt < \""+bitel.billing.common.TimeUtils.formatSQLDate(DateNow)+"\" and cp.cid="+cid;

использовать одинарные кавычки и не экранировать
Код:
String sql = " SELECT sum(cp.summa) FROM contract_payment as cp left join contract on contract.id=cp.cid where cp.dt > '"+bitel.billing.common.TimeUtils.formatSQLDate(month)+"' and cp.dt < '"+bitel.billing.common.TimeUtils.formatSQLDate(DateNow)+"' and cp.cid="+cid;

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


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

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


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

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


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

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