Скрипт предоставление скидки пенсионерам
Материал из BiTel WiKi
Версия от 06:59, 23 июля 2010; Boris (Обсуждение | вклад)
Скидка предоставляется пенсионерам, при наличии в договоре заполненного параметра даты предъявления пенсионного удостоверения в текущем году. Скидка предоставляется при условии предоплаты услуг, при отсутствии предоплаты, скидка не предоставляется, в случае предоплаты, скидка восстанавливаться со следующего месяца. Скидка достигаеться путем изменения услуги. При смене услуги, договор также переводиться в группу льготников.
import bitel.billing.server.util.*; import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import bitel.billing.server.contract.bean.BalanceUtils; import bitel.billing.server.contract.bean.ContractParameterManager; import bitel.billing.server.npay.bean.ServiceObject; import bitel.billing.server.npay.bean.ServiceObjectManager; ServiceObjectManager sm =null; Calendar now = null; //ИД ПАРАМЕТРА ДАТЫ ПРЕДЪЯВЛЕНИЯПЕНСИОННОГО УДОСТОВЕРЕНИЯ int pid = 27; //МОДУЛЬ АБОНПЛАТ int mid = 66; //УСЛУГА АБОНПЛАТЫ БЕЗ СКИДКИ int sidNormal = 79; //ЛЬГОТНАЯ УСЛУГА АБОНПЛАТЫ int sidLgota = 75; //ГРУППА НЕ ЛЬГОТНИКОВ int groupFrom = 9; //ГРУППА ЛЬГОТНИКОВ int groupTo = 10; Calendar endDate = null; Calendar startDate = null; PreparedStatement psClearGroup = null; PreparedStatement psAddGroup = null; public void main( setup, con, conSlave ) throws Exception { now = new GregorianCalendar(); endDate = (Calendar)now.clone(); endDate.add( Calendar.MONTH, -1 ); endDate.set( Calendar.DAY_OF_MONTH, endDate.getActualMaximum( Calendar.DAY_OF_MONTH )); startDate = (Calendar)now.clone(); startDate.set( Calendar.DAY_OF_MONTH, 1); //это для отключения и лобавления групп psClearGroup = con.prepareStatement( "UPDATE contract set gr=gr&~(1<<?) where id=?" ); psAddGroup = con.prepareStatement( "UPDATE contract SET gr=gr|(1<<?) WHERE id=?" ); psClearGroup.setInt(1,groupFrom); psAddGroup.setInt(1,groupTo); ContractParameterManager pm = new ContractParameterManager( con ); sm = new ServiceObjectManager( con, mid ); BalanceUtils bu = new BalanceUtils(con); //String sql = "SELECT id FROM contract WHERE status = 0"; String sql = "SELECT id FROM contract WHERE status = 0 ANd id =352751"; PreparedStatement ps = con.prepareStatement( sql ); ResultSet rs = ps.executeQuery(); while(rs.next()) { int cid = rs.getInt( 1 ); Calendar date = pm.getDateParam( cid, pid ); //даты нет или она не этого года if( date == null || date.get( Calendar.YEAR )!= now.get( Calendar.YEAR )) { closeLgota(cid); continue; } BigDecimal rest = bu.getBalanceSumma1( now.getTime(), cid ); if(rest.compareTo( BigDecimal.ZERO ) < 0) { closeLgota(cid); } else { openLgota( cid); } } } private void closeLgota(int cid) { ServiceObject so = findSevice( cid, sidLgota); if( so == null) { return; } print("close lgota for cid =>"+cid); //закрываем абонплату последним днем прошлого месяца если она не ботьлше даты открытия иначе удаляем if( so.getDate1().compareTo( endDate.getTime() )>=0) { sm.deleteServiceObject( so.getId() ); } else { so.setDate2( endDate.getTime() ); sm.updateServiceObject( so ); } ServiceObject serviceObject = new ServiceObject(); serviceObject.setId( -1 ); serviceObject.setContractId( cid ); serviceObject.setServiceId( sidNormal ); serviceObject.setObjectId( 0 ); serviceObject.setCol( so.getCol() ); serviceObject.setEntityMid( so.getEntityMid() ); serviceObject.setEntityId( so.getEntityId() ); serviceObject.setDate1( startDate.getTime() ); serviceObject.setDate2( null ); serviceObject.setComment( "Отключение льготы скриптом" ); sm.updateServiceObject( serviceObject ); } private void openLgota(int cid) { ServiceObject so = findSevice( cid, sidNormal); if( so == null) { return; } print("open lgota for cid =>"+cid); //закрываем абонплату последним днем прошлого месяца если она не ботьлше даты открытия иначе удаляем if( so.getDate1().compareTo( endDate.getTime() )>=0) { sm.deleteServiceObject( so.getId() ); } else { so.setDate2( endDate.getTime() ); sm.updateServiceObject( so ); } ServiceObject serviceObject = new ServiceObject(); serviceObject.setId( -1 ); serviceObject.setContractId( cid ); serviceObject.setServiceId( sidLgota ); serviceObject.setObjectId( 0 ); serviceObject.setCol( so.getCol() ); serviceObject.setEntityMid( so.getEntityMid() ); serviceObject.setEntityId( so.getEntityId() ); serviceObject.setDate1( startDate.getTime() ); serviceObject.setDate2( null ); serviceObject.setComment( "Включение льготы скриптом" ); sm.updateServiceObject( serviceObject ); //меняем льготу changeGroup(cid); } private ServiceObject findSevice( int cid, int sid) { List list = sm.getServiceObjectList( cid, now.getTime() ); for( ServiceObject so : list) { if( so.getServiceId() == sid) { return so ; } } return null; } private void changeGroup(int cid) { psClearGroup.setInt(2,cid); psAddGroup.setInt(2,cid); psClearGroup.executeUpdate(); psAddGroup.executeUpdate(); }