package gcom.gui.faturamento.debito; import gcom.cadastro.cliente.ClienteImovel; import gcom.cadastro.cliente.ClienteRelacaoTipo; import gcom.cadastro.cliente.FiltroClienteImovel; import gcom.cadastro.imovel.FiltroImovel; import gcom.cadastro.imovel.Imovel; import gcom.fachada.Fachada; import gcom.faturamento.debito.DebitoACobrar; import gcom.faturamento.debito.FiltroDebitoACobrar; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.Intervalo; import gcom.util.filtro.MaiorQue; import gcom.util.filtro.MenorQue; import gcom.util.filtro.ParametroNulo; import gcom.util.filtro.ParametroSimples; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.Map; 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; /** * Realiza a pesquisa de d�bitos a cobrar de im�vel de acordo com os par�metros informados na p�gina * * @author Pedro Alexandre * @date 13/03/2006 */ public class PesquisarDebitoACobrarAction extends GcomAction { /** * Pesquisa os d�bitos a cobrar existentes para o im�vel * * [UC0271] Pesquisar D�bito a Cobrar * * <Breve descri��o sobre o subfluxo> * * <Identificador e nome do subfluxo> * * <Breve descri��o sobre o fluxo secund�rio> * * <Identificador e nome do fluxo secund�rio> * * @author Pedro Alexandre * @date 13/03/2006 * * @param actionMapping * @param actionForm * @param httpServletRequest * @param httpServletResponse * @return */ public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { //Seta o mapeamento de retorno para a tela de resultado da pesquisa de d�bitos a cobrar do im�vel ActionForward retorno = actionMapping.findForward("listaDebitoACobrar"); //Cria uma inst�ncia da fachada Fachada fachada = Fachada.getInstancia(); //Cria uma inst�ncia da sess�o HttpSession sessao = httpServletRequest.getSession(false); //Recupera o form de pesquisa de d�bitos a cobrar do im�vel PesquisarDebitoACobrarActionForm pesquisarDebitoACobrarActionForm = (PesquisarDebitoACobrarActionForm) actionForm; // Recupera os par�metros do form String idImovel = pesquisarDebitoACobrarActionForm.getIdImovel(); String referenciaDebitoInicial = pesquisarDebitoACobrarActionForm.getReferenciaDebitoInicial(); String referenciaDebitoFinal = pesquisarDebitoACobrarActionForm.getReferenciaDebitoFinal(); String dataGeracaoDebitoInicialEmString = pesquisarDebitoACobrarActionForm.getDataGeracaoDebitoInicial(); String dataGeracaoDebitoFinalEmString = pesquisarDebitoACobrarActionForm.getDataGeracaoDebitoFinal(); String[] idSituacaoDebitoACobrar = pesquisarDebitoACobrarActionForm.getIdSituacaoDebitoACobrar(); String[] idTipoDebito = pesquisarDebitoACobrarActionForm.getIdTipoDebitoSelecionados(); //Cria o filtro de d�bito a cobrar e seta a ordena��o de resultado da pesquisa //pelo tipo de d�bito do d�bito a cobrar FiltroDebitoACobrar filtroDebitoACobrar = new FiltroDebitoACobrar(); filtroDebitoACobrar.setCampoOrderBy(FiltroDebitoACobrar.DEBITO_TIPO); //Cria flag que vai indicar se o usu�rio informou ao menos um par�metro para pesquisar boolean peloMenosUmParametroInformado = false; //Caso o usu�rio informou o c�digo do im�vel, pesquisa todos os d�bitos a cobrar relacionados com o im�vel //caso contr�rio indica que o usu�rio n�o informou o im�vel if(idImovel != null && !idImovel.trim().equalsIgnoreCase("")){ //Indica que o usu�rio informou um par�metro para pesquisar os d�bitos a cobrar do im�vel //peloMenosUmParametroInformado = true; //Cria o fitro de im�vel, e seta no filtro quais objetos necess�rios para a pesquisa de im�vel FiltroImovel filtroImovel = new FiltroImovel(); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("setorComercial"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoAguaSituacao"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgotoSituacao"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgoto"); //Seta o c�digo do im�vel no filtro filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, idImovel)); //Pesquisa o im�vel informado, no sistema Collection colecaoImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName()); //Caso o im�vel informado pelo usu�rio n�o tenha sido encontrado no sistema //caso contr�rio manda o c�digo do im�vel no request if (colecaoImovel == null || colecaoImovel.isEmpty()){ throw new ActionServletException("atencao.naocadastrado", null, "im�vel"); }else{ httpServletRequest.setAttribute("idImovel",idImovel); } //Recupera o objeto im�vel da cole��o Imovel objetoImovel = (Imovel) Util.retonarObjetoDeColecao(colecaoImovel); //Cria o filtro para recuperar o relacionamento entre cliente e im�vel, //e seta os objetos necess�rios no retorno da pesquisa FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel(); filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("cliente"); filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.IMOVEL_ID, idImovel)); filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.CLIENTE_RELACAO_TIPO, ClienteRelacaoTipo.USUARIO)); filtroClienteImovel.adicionarParametro(new ParametroNulo(FiltroClienteImovel.FIM_RELACAO_MOTIVO)); //Efetua a pesquisa do relacionamento entre cliente e im�vel Collection colecaoClienteImovel = fachada.pesquisar(filtroClienteImovel, ClienteImovel.class.getName()); //Caso n�o exista nenhum cliente relacionado com o im�vel if (colecaoClienteImovel == null || colecaoClienteImovel.isEmpty()){ throw new ActionServletException( "atencao.naocadastrado", null, "cliente do tipo usu�rio foi"); } //Recupera o relacionamento entre cliente e im�vel da cole��o pesquisada ClienteImovel objetoClienteImovel = (ClienteImovel) Util.retonarObjetoDeColecao(colecaoClienteImovel); //Seta no form de pesquisar d�bito a cobrar todos os dados de im�vel para exibi��o na p�gina de resultado da pesquisa pesquisarDebitoACobrarActionForm.setInscricaoImovel(objetoImovel.getInscricaoFormatada()); pesquisarDebitoACobrarActionForm.setNomeClienteUsuario(objetoClienteImovel.getCliente().getNome()); pesquisarDebitoACobrarActionForm.setSituacaoAguaImovel(objetoImovel.getLigacaoAguaSituacao().getDescricao()); pesquisarDebitoACobrarActionForm.setSituacaoEsgotoImovel(objetoImovel.getLigacaoEsgotoSituacao().getDescricao()); //Seta no filtro de d�bito a cobrar o c�digo do im�vel informado pelo usu�rio filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.IMOVEL_ID, idImovel)); }else{ throw new ActionServletException("atencao.naoinformado",null, "Im�vel"); } //Caso o usu�rio tenha informado a refer�ncia inicial do d�bito a cobrar, pesquisa os d�bito a cobrar entre a refer�ncia inicial e final, replicando //a refer�ncia inicial na final caso essa n�o tenha sido informada //Caso contr�rio seta a refer�ncia final para vazio, e pesquisa os d�bito a cobrar para todas as refer�ncias existentes if (referenciaDebitoInicial != null && !referenciaDebitoInicial.trim().equalsIgnoreCase("")) { //Formata a refer�ncia inicial informada, para o formato de ano e depois m�s referenciaDebitoInicial = Util.formatarMesAnoParaAnoMesSemBarra((String) pesquisarDebitoACobrarActionForm.getReferenciaDebitoInicial()); //Caso a refer�ncia final n�o tenha sido informada , replica a refer�ncia inicial na final //Caso contr�rio, formata a refer�ncia final para ano e m�s if(referenciaDebitoFinal == null || referenciaDebitoFinal.trim().equalsIgnoreCase("")){ //Replica a refer�ncia inicial na refer�ncia final referenciaDebitoFinal = referenciaDebitoInicial; }else{ //Formata a refer�ncia final informada, para o formato de ano e depois m�s referenciaDebitoFinal = Util.formatarMesAnoParaAnoMesSemBarra((String) pesquisarDebitoACobrarActionForm.getReferenciaDebitoFinal()); //[FS0002]Caso a refer�ncia final do d�bito a cobrar seja anterior a inicial if((new Integer(referenciaDebitoInicial)).intValue() > (new Integer (referenciaDebitoFinal)).intValue()){ throw new ActionServletException("atencao.referenciafinal.menorque"); } } } else{ //Seta a refer�ncia final da conta para nula referenciaDebitoFinal = null; } //Caso a refer�ncia final do d�bito a cobrar esteja diferente de nulo, //Pesquisa os d�bitos a cobrar entre a refer�ncia inicial e final if (referenciaDebitoFinal != null && !referenciaDebitoFinal.trim().equalsIgnoreCase("")) { //Indica que o usu�rio informou um par�metro para pesquisar os d�bitos a cobrar do im�vel peloMenosUmParametroInformado = true; //Indica no filtro para pesquisar os d�bitos a cobrar no intervalo entre a refer�ncia inicial e a final filtroDebitoACobrar.adicionarParametro(new MaiorQue(FiltroDebitoACobrar.REFERENCIA_DEBITO, referenciaDebitoInicial, ParametroSimples.CONECTOR_AND)); filtroDebitoACobrar.adicionarParametro(new MenorQue(FiltroDebitoACobrar.REFERENCIA_DEBITO, referenciaDebitoFinal)); } //Cria o formato da data SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy"); //Cria as vari�veis que vai armazenar as datas inicial e final, da gera��o do d�bito Date dataGeracaoDebitoInicial = null; Date dataGeracaoDebitoFinal = null; //Caso o usu�rio informou a data de gera��o do d�bito a cobrar inicial, pesquisa os d�bitos a cobrar do im�vel referentes a data de //gera��o do d�bito informada //Caso contr�rio, pesquisa os d�bitos a cobrar sem restri��o de data de gera��o if (dataGeracaoDebitoInicialEmString != null && !dataGeracaoDebitoInicialEmString.toString().trim().equalsIgnoreCase("")) { //[FS0003] Valida a data de gera��o do d�bito inicial try { dataGeracaoDebitoInicial = formato.parse(dataGeracaoDebitoInicialEmString); //dataGeracaoDebitoInicialFormatoTimeStamp = new Timestamp(dataGeracaoDebitoInicial.getTime()); } catch (ParseException e) { throw new ActionServletException("atencao.datageracaoinicial.invalida"); } //Caso a data final de gera��o do d�bito n�o foi informada, replica a data inicial na final //Caso contr�rio, formata a data final if(dataGeracaoDebitoFinalEmString == null || dataGeracaoDebitoFinalEmString.trim().equalsIgnoreCase("")){ dataGeracaoDebitoFinal = dataGeracaoDebitoInicial; //dataGeracaoDebitoFinalFormatoTimeStamp = dataGeracaoDebitoInicialFormatoTimeStamp; }else{ //[FS0003] Valida a data de gera��o do d�bito final try { dataGeracaoDebitoFinal = formato.parse(dataGeracaoDebitoFinalEmString); //dataGeracaoDebitoFinalFormatoTimeStamp = new Timestamp(dataGeracaoDebitoFinal.getTime()); } catch (ParseException e) { throw new ActionServletException("atencao.datageracaofinal.invalida"); } //[FS0004]Caso a data de gera��o final do d�bito seja anterior a inicial //levanta a exce��o para o usu�rio indicando que a data final � anterior a data inicial if(dataGeracaoDebitoFinal.before(dataGeracaoDebitoInicial)){ throw new ActionServletException("atencao.datageracaofinal.menorque"); } } } else{ //Seta para nula a data final de gera��o do d�bito dataGeracaoDebitoFinalEmString = null; } //Cria uma vari�vel que vai auxiliar na data final de gera��o, //para setar a data para o �ltimo segundo do dia informado Calendar data = Calendar.getInstance(); //Caso a data de gera��o final do d�bito esteja diferente de nulo, //Pesquisa os d�bitos entre a data de gera��o inicial e final if (dataGeracaoDebitoFinalEmString != null && !dataGeracaoDebitoFinalEmString.toString().trim().equalsIgnoreCase("")) { //Indica que o usu�rio informou um par�metro para pesquisar os d�bitos a cobrar do im�vel peloMenosUmParametroInformado = true; //Seta a data final de gera��o no calendar data.setTime(dataGeracaoDebitoFinal); //Seta a data final de gera��o do d�bito para o �ltimo segundo do dia informado data.set(Calendar.HOUR, data.getMaximum(Calendar.HOUR_OF_DAY)); data.set(Calendar.MINUTE, data.getMaximum(Calendar.MINUTE)); data.set(Calendar.SECOND, data.getMaximum(Calendar.SECOND)); data.set(Calendar.MILLISECOND, data.getMaximum(Calendar.MILLISECOND)); //Recupera a data final dataGeracaoDebitoFinal = data.getTime(); //Indica no filtro para pesquisar os d�bitos a cobrar no intervalo entre a data de gera��o inicial e a final filtroDebitoACobrar.adicionarParametro(new Intervalo(FiltroDebitoACobrar.GERACAO_DEBITO, new Timestamp(dataGeracaoDebitoInicial.getTime()), new Timestamp(dataGeracaoDebitoFinal.getTime()))); } //Caso o usu�rio informou algum tipo de d�bito do d�bito a cobrar if(idTipoDebito != null && !idTipoDebito[0].equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)&& idTipoDebito.length >0){ //Indica que o usu�rio informou um par�metro para pesquisar peloMenosUmParametroInformado = true; //La�o para setar no filtro de guia todos os tipos de d�bitos selecionados for(int i=0; i< idTipoDebito.length; i++ ){ if(! (new Integer(idTipoDebito[i]).equals(new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO)))){ if(idTipoDebito.length == 1){ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_TIPO_ID,idTipoDebito[i])); }else{ if( i == 0 ){ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_TIPO_ID,idTipoDebito[i], ParametroSimples.CONECTOR_OR,idTipoDebito.length )); }else{ if( i == (idTipoDebito.length - 1) ){ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_TIPO_ID,idTipoDebito[i])); }else{ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_TIPO_ID,idTipoDebito[i], ParametroSimples.CONECTOR_OR)); } } } } } } //Caso o usu�rio informou alguma situa��o de d�bito do d�bito a cobrar if(idSituacaoDebitoACobrar != null && !idSituacaoDebitoACobrar[0].equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)&& idSituacaoDebitoACobrar.length >0){ //Indica que o usu�rio informou um par�metro para pesquisar os d�bitos a cobrar do im�vel peloMenosUmParametroInformado = true; //La�o para incluir no filtro todas as situa��es de d�bito a cobrar informadas pelo usu�rio para pesquisa for(int i=0; i< idSituacaoDebitoACobrar.length; i++ ){ if(! (new Integer(idSituacaoDebitoACobrar[i]).equals(new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO)))){ if(idSituacaoDebitoACobrar.length==1){ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_CREDITO_SITUACAO_ATUAL_ID,idSituacaoDebitoACobrar[i])); }else{ if( i == 0 ){ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_CREDITO_SITUACAO_ATUAL_ID,idSituacaoDebitoACobrar[i], ParametroSimples.CONECTOR_OR,idSituacaoDebitoACobrar.length )); }else{ if( i == (idSituacaoDebitoACobrar.length - 1) ){ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_CREDITO_SITUACAO_ATUAL_ID,idSituacaoDebitoACobrar[i])); }else{ filtroDebitoACobrar.adicionarParametro(new ParametroSimples(FiltroDebitoACobrar.DEBITO_CREDITO_SITUACAO_ATUAL_ID,idSituacaoDebitoACobrar[i], ParametroSimples.CONECTOR_OR)); } } } } } } // [FS0006] Erro caso o usu�rio mandou pesquisar sem nenhum par�metro if (!peloMenosUmParametroInformado) { throw new ActionServletException("atencao.filtro.nenhum_parametro_informado"); } //Carrega no filtro os objetos necess�rios para pesquisa filtroDebitoACobrar.adicionarCaminhoParaCarregamentoEntidade("debitoTipo"); filtroDebitoACobrar.adicionarCaminhoParaCarregamentoEntidade("debitoCreditoSituacaoAtual"); //Pesquisa os d�bitos a cobrar do im�vel, com os par�metros indicados no filtro Collection colecaoDebitosACobrar = null;//fachada.pesquisar(filtroDebitoACobrar,DebitoACobrar.class.getName()); Map resultado = controlarPaginacao(httpServletRequest, retorno, filtroDebitoACobrar, DebitoACobrar.class.getName()); colecaoDebitosACobrar = (Collection) resultado.get("colecaoRetorno"); retorno = (ActionForward) resultado.get("destinoActionForward"); //Caso nenhum d�bito a cobrar tenha sido encontrado com os par�metros indicados if (colecaoDebitosACobrar == null || colecaoDebitosACobrar.isEmpty()) { //[FS0008]Nenhum d�bito a cobrar cadastrado throw new ActionServletException("atencao.pesquisa.nenhumresultado", null, "D�bito a Cobrar"); //Caso o n� de d�bitos a cobrar retornados pela pesquisa seja maior que o n� m�ximo de registros permitidos } else if (colecaoDebitosACobrar.size() > ConstantesSistema.NUMERO_MAXIMO_REGISTROS_PESQUISA) { //[FS0007]Muitos registros encontrados throw new ActionServletException("atencao.pesquisa.muitosregistros"); } else { //Coloca a cole��o de d�bitos a cobrar do im�vel pesquisados na sess�o sessao.setAttribute("colecaoDebitosACobrar", colecaoDebitosACobrar); } //Retorna o mapeamento contido na vari�vel retorno return retorno; } }