Проверка уникальности контрагента по ИНН
Материал из BiTel WiKi
При редактировании параметра ИНН если будет найден контрагент с таким же значением параметра, то он будет открыт в системе с выводом сообщения.
Также скрипт заполняет значение параметра КПП на основании ИНН. Коды параметров ИНН и КПП заданы в константах.
Класс-обработчик указывается для параметра ИНН:
package ru.bgcrm.dyn.ufanet; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.apache.log4j.Logger; import ru.bgcrm.dao.ParamValueDAO; import ru.bgcrm.dao.Tables; import ru.bgcrm.event.Event; import ru.bgcrm.event.ParamChangingEvent; import ru.bgcrm.event.client.CustomerOpenEvent; import ru.bgcrm.event.listener.DynamicEventListener; import ru.bgcrm.model.param.Parameter; import ru.bgcrm.model.BGMessageException; import ru.bgcrm.struts.form.DynActionForm; import ru.bgcrm.util.Utils; import ru.bgcrm.util.sql.ConnectionSet; public class CustomerParameterUpdate extends DynamicEventListener { private static final int INN_PARAMETER_ID = 248; private static final int KPP_PARAMETER_ID = 249; private static final Logger log = Logger.getLogger( CustomerParameterUpdate.class ); @Override public void notify( Event e, ConnectionSet connectionSet ) { if( !(e instanceof ParamChangingEvent) ) { return; } ParamChangingEvent event = (ParamChangingEvent)e; DynActionForm form = event.getForm(); Connection con = connectionSet.getConnection(); Parameter parameter = event.getParameter(); int customerId = event.getObjectId(); try { if( INN_PARAMETER_ID == parameter.getId() ) { //проверка дупликата String sql = " SELECT * FROM " + Tables.TABLE_CUSTOMER + " AS c " + " INNER JOIN " + Tables.TABLE_PARAM_TEXT + " AS pt ON c.id=pt.id AND pt.param_id=" + INN_PARAMETER_ID + " WHERE pt.value=? AND c.id<>? "; PreparedStatement ps = con.prepareStatement( sql ); ps.setString( 1, String.valueOf( event.getValue() ) ); ps.setInt( 2, customerId ); StringBuilder sb = new StringBuilder(); ResultSet rs = ps.executeQuery(); while( rs.next() ) { int id = rs.getInt( "c.id" ); String title = rs.getString( "c.title" ); sb.append( "(ID: " ).append( id ).append( ") " ); sb.append( title ).append( "\n" ); form.getResponse().addEvent( new CustomerOpenEvent( id ) ); } if( Utils.notBlankString( sb.toString() ) ) { throw new BGMessageException( "Сущетвуют контрагенты с похожими данными:\n" + sb.toString() ); } else { //вставка кпп ParamValueDAO paramDao = new ParamValueDAO( con ); String kppValue = paramDao.getParamText( customerId, KPP_PARAMETER_ID ); if( Utils.isBlankString( kppValue ) ) { kppValue = String.valueOf( event.getValue() ).substring( 0, 4 ) + "01001"; paramDao.updateParamText( customerId, KPP_PARAMETER_ID, kppValue ); } } } } catch( Exception ex ) { log.error( ex.getMessage(), ex ); } } }