Проверка уникальности контрагента по ИНН

Материал из 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 );
		}
	}
}
Личные инструменты