package gcom.gui.arrecadacao; import gcom.arrecadacao.banco.Agencia; import gcom.arrecadacao.banco.Banco; import gcom.arrecadacao.banco.FiltroAgencia; import gcom.arrecadacao.banco.FiltroBanco; import gcom.arrecadacao.debitoautomatico.DebitoAutomatico; import gcom.arrecadacao.debitoautomatico.FiltroDebitoAutomatico; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.filtro.ParametroNulo; import gcom.util.filtro.ParametroSimples; import java.util.Collection; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * [UC0802] - Filtrar Debito Autom�tico * * @author Bruno Barros * @date 11/06/2008 */ public class FiltrarDebitoAutomaticoAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { // Seta o retorno ActionForward retorno = actionMapping.findForward("exibirManterDebitoAutomatico"); FiltrarDebitoAutomaticoActionForm form = (FiltrarDebitoAutomaticoActionForm) actionForm; HttpSession sessao = httpServletRequest.getSession(false); // Iniciamos a montagem do filtro FiltroDebitoAutomatico filtroDebitoAutomatico = new FiltroDebitoAutomatico(); // Trazemos apenas os debitos com data de exclus�o nula filtroDebitoAutomatico.adicionarParametro( new ParametroNulo( FiltroDebitoAutomatico.DATA_EXCLUSAO ) ); // Verificamos se algum parametro foi informado, e em caso positivo // adicionamos ao filtro, caso contrario, informamos que ao menos 1 // parametro precisa ser informado boolean bInformouParametro = false; // Informou matricula ???? if ( form.getMatricula() != null && !form.getMatricula().equals( "" ) ){ bInformouParametro = true; // Uma vez que a matricula foi informada, verificamos se a mesma � valida // FS0001 - Verificar existencia de d�bito autom�tico para o imovel if ( !verificaExistenciaDebitoAutomatico( form.getMatricula() ) ){ throw new ActionServletException( "atencao.imovel_sem_debito_automatico_cadastrado" ); } filtroDebitoAutomatico.adicionarParametro( new ParametroSimples( FiltroDebitoAutomatico.IMOVEL_MATRICULA, form.getMatricula() ) ); } else { // Informou agencia ???? if ( form.getAgenciaCodigo() != null && !form.getAgenciaCodigo().equals( "" ) ){ bInformouParametro = true; // Uma vez que a agencia foi informada, verificamos se a mesma � v�lida // FS0003 - Verificar existencia da ag�ncia if ( !verificaCodigoAgenciaValido( form.getAgenciaCodigo() ) ){ throw new ActionServletException( "atencao.agenciaBancaria.inexistente" ); } filtroDebitoAutomatico.adicionarCaminhoParaCarregamentoEntidade( "agencia" ); filtroDebitoAutomatico.adicionarParametro( new ParametroSimples( FiltroDebitoAutomatico.AGENCIA_CODIGO, form.getAgenciaCodigo() ) ); } // Informou banco ???? if ( form.getBancoID() != null && !form.getBancoID().equals( "" ) ){ bInformouParametro = true; // uma vez que o banco foi informado, verificamos se a mesma � valida // FS0002 - Verificar exist�ncia do banco if ( !verificaExistenciaBancoId( form.getBancoID() ) ){ throw new ActionServletException( "atencao.banco.inexistente" ); } filtroDebitoAutomatico.adicionarParametro( new ParametroSimples( FiltroDebitoAutomatico.BANCO_ID, form.getBancoID() ) ); } } // Verificamos se ao menos 1 parametro foi informado // FS0004 - Verificar Preenchimento dos campos if ( !bInformouParametro ){ throw new ActionServletException( "atencao.filtro.nenhum_parametro_informado" ); } // Verificamos se a agencia informada pertence ao banco informado if ( form.getAgenciaCodigo() != null && !form.getAgenciaCodigo().equals( "" ) ){ verificaAgenciaPertenceAoBanco( form.getBancoID(), form.getAgenciaCodigo() ); } // Verificamos se a pesquisar ir� retornar algum resultado // FS0005 - Nenhum resultado encontrado if ( verificarRegistrosGeradosZerados( filtroDebitoAutomatico ) ){ throw new ActionServletException( "atencao.pesquisa.nenhumresultado" ); } // FS0006 - Verica se, informada a agencia, tambem informou o banco // Manda o filtro pelo request para o ExibirManterDebitoAutomatico sessao.setAttribute("filtroDebitoAutomatico", filtroDebitoAutomatico); return retorno; } // FS0001 - Verificar existencia de d�bito autom�tico para o imovel private boolean verificaExistenciaDebitoAutomatico( String matricula ){ // Montamos o filtro para verificar se a matricula do imovel // possue algum registro na tabela de debito automatico com // data de exclus�o diferente de nulo FiltroDebitoAutomatico filtro = new FiltroDebitoAutomatico(); filtro.adicionarParametro( new ParametroSimples( FiltroDebitoAutomatico.IMOVEL_MATRICULA, matricula ) ); filtro.adicionarParametro( new ParametroNulo( FiltroDebitoAutomatico.DATA_EXCLUSAO ) ); Collection<DebitoAutomatico> colDebitos = Fachada.getInstancia().pesquisar( filtro, DebitoAutomatico.class.getName() ); return colDebitos != null && colDebitos.size() > 0; } // FS0002 - Verificar existencia do banco private boolean verificaExistenciaBancoId( String bancoId ){ // Montamos o filtro para verificar se o banco existe FiltroBanco filtro = new FiltroBanco(); filtro.adicionarParametro( new ParametroSimples( FiltroBanco.ID, bancoId ) ); Collection<Banco> colBancos = Fachada.getInstancia().pesquisar( filtro, Banco.class.getName() ); return colBancos != null && colBancos.size() > 0; } // FS0003 - Verificar existencia da agencia bancaria private boolean verificaCodigoAgenciaValido( String agenciaCodigo ){ // Montamos o filtro para verificar se a agencia banc�ria existe FiltroAgencia filtro = new FiltroAgencia(); filtro.adicionarParametro( new ParametroSimples( FiltroAgencia.CODIGO_AGENCIA, agenciaCodigo ) ); Collection<Agencia> colAgencias = Fachada.getInstancia().pesquisar( filtro, Agencia.class.getName() ); return colAgencias != null && colAgencias.size() > 0; } // FS0005 - Nenhum registro encontrado private boolean verificarRegistrosGeradosZerados( FiltroDebitoAutomatico filtro ){ // Pesquisamos Collection<DebitoAutomatico> colDebito = Fachada.getInstancia().pesquisar( filtro, DebitoAutomatico.class.getName() ); return colDebito == null || colDebito.size() == 0; } // FS0006 - Verica se, informada a agencia, tambem informou o banco // e se a agencia pertence aquele banco private void verificaAgenciaPertenceAoBanco( String bancoId, String agenciaCodigo ) throws ActionServletException{ // Caso banco seja nulo, informar que ele e obrigatorio com a agencie if ( bancoId == null || bancoId.equals( "" ) ){ throw new ActionServletException( "atencao.agencia.sem_banco" ); } // Verificamo se a agencia pertence ao banco informado FiltroAgencia filtro = new FiltroAgencia(); filtro.adicionarParametro( new ParametroSimples( FiltroAgencia.CODIGO_AGENCIA, agenciaCodigo ) ); filtro.adicionarParametro( new ParametroSimples( FiltroAgencia.BANCO_ID, bancoId ) ); Collection<DebitoAutomatico> colDebitos = Fachada.getInstancia().pesquisar( filtro, Agencia.class.getName() ); if ( colDebitos == null || colDebitos.size() == 0 ){ throw new ActionServletException( "atencao.agencia.banco_errado" ); } } }