package gcom.gui.faturamento.conta; 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.conta.Conta; import gcom.faturamento.conta.FiltroConta; import gcom.faturamento.debito.DebitoCreditoSituacao; 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.text.ParseException; import java.text.SimpleDateFormat; 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 contas de im�vel de acordo com os par�metros informados na p�gina * * @author Pedro Alexandre * @date 02/03/2006 */ public class PesquisarContaAction extends GcomAction { /** * Pesquisa as contas existentes para o im�vel * * [UC0248] Pesquisar Contas do Im�vel * * <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 02/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 contas do im�vel ActionForward retorno = actionMapping.findForward("listaConta"); //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 contas do im�vel PesquisarContaActionForm pesquisarContaActionForm = (PesquisarContaActionForm) actionForm; // Recupera os par�metros do form String idImovel = (String) pesquisarContaActionForm.getIdImovel(); String referenciaContaInicial = (String) pesquisarContaActionForm.getReferenciaContaInicial(); String referenciaContaFinal = (String) pesquisarContaActionForm.getReferenciaContaFinal(); String dataEmissaoContaInicialEmString = (String) pesquisarContaActionForm.getDataEmissaoContaInicial(); String dataEmissaoContaFinalEmString = (String) pesquisarContaActionForm.getDataEmissaoContaFinal(); String dataVencimentoContaInicialEmString = (String) pesquisarContaActionForm.getDataVencimentoContaInicial(); String dataVencimentoContaFinalEmString = (String) pesquisarContaActionForm.getDataVencimentoContaFinal(); String[] idSituacaoConta = (String[]) pesquisarContaActionForm.getIdSituacaoConta(); //Cria o filtro de conta e seta a ordena��o de resultado da pesquisa //pelo c�digo da conta FiltroConta filtroConta = new FiltroConta(); filtroConta.setCampoOrderBy(FiltroConta.ID); //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 todas as contas relacionadas 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 as contas 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 conta todos os dados de im�vel para exibi��o na p�gina de resultado da pesquisa pesquisarContaActionForm.setInscricaoImovel(objetoImovel.getInscricaoFormatada()); pesquisarContaActionForm.setNomeClienteUsuario(objetoClienteImovel.getCliente().getNome()); pesquisarContaActionForm.setSituacaoAguaImovel(objetoImovel.getLigacaoAguaSituacao().getDescricao()); pesquisarContaActionForm.setSituacaoEsgotoImovel(objetoImovel.getLigacaoEsgotoSituacao().getDescricao()); //Seta no filtro de conta o c�digo do im�vel informado pelo usu�rio filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.IMOVEL_ID, idImovel)); }else{ throw new ActionServletException("atencao.naoinformado",null, "Im�vel"); } //Caso o usu�rio tenha informado a refer�ncia inicial da conta, pesquisa as contas 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 as contas para todas as refer�ncias existentes if (referenciaContaInicial != null && !referenciaContaInicial.trim().equalsIgnoreCase("")) { //Formata a refer�ncia inicial informada, para o formato de ano e depois m�s referenciaContaInicial = Util.formatarMesAnoParaAnoMesSemBarra((String) pesquisarContaActionForm.getReferenciaContaInicial()); //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(referenciaContaFinal == null || referenciaContaFinal.trim().equalsIgnoreCase("")){ //Replica a refer�ncia inicial na refer�ncia final referenciaContaFinal = referenciaContaInicial; }else{ //Formata a refer�ncia final informada, para o formato de ano e depois m�s referenciaContaFinal = Util.formatarMesAnoParaAnoMesSemBarra((String) pesquisarContaActionForm.getReferenciaContaFinal()); //[FS0002]Caso a refer�ncia final da conta seja anterior a inicial, levanta a exce��o para o //usu�rio indicando que a refer�ncia final � anterior a inicial if((new Integer(referenciaContaInicial)).intValue() > (new Integer (referenciaContaFinal)).intValue()){ throw new ActionServletException("atencao.referenciafinal.menorque"); } } } else{ //Seta a refer�ncia final da conta para nula referenciaContaFinal = null; } //Caso a refer�ncia final da conta esteja diferente de nulo, //Pesquisa as contas entre a refer�ncia inicial e final if (referenciaContaFinal != null && !referenciaContaFinal.trim().equalsIgnoreCase("")) { //Indica que o usu�rio informou um par�metro para pesquisar as contas do im�vel peloMenosUmParametroInformado = true; //Indica no filtro para pesquisar as contas no intervalo entre a refer�ncia inicial e a final filtroConta.adicionarParametro(new MaiorQue(FiltroConta.REFERENCIA, referenciaContaInicial, ParametroSimples.CONECTOR_AND)); filtroConta.adicionarParametro(new MenorQue(FiltroConta.REFERENCIA, referenciaContaFinal)); } //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 emiss�o das contas Date dataEmissaoContaInicial = null; Date dataEmissaoContaFinal = null; //Caso o usu�rio informou a data de emiss�o da conta inicial, pesquisa as contas do im�vel referentes a data de //emiss�o da conta informada //Caso contr�rio, pesquisa as contas sem restri��o de data de emiss�o if (dataEmissaoContaInicialEmString != null && !dataEmissaoContaInicialEmString.toString().trim().equalsIgnoreCase("")) { //[FS0003] Valida a data de emiss�o da conta inicial try { dataEmissaoContaInicial = formato.parse(dataEmissaoContaInicialEmString); } catch (ParseException e) { throw new ActionServletException("atencao.dataemissaoinicial.invalida"); } //Caso a data final de emiss�o da conta n�o foi informada, replica a data inicial na final //Caso contr�rio, formata a data final if(dataEmissaoContaFinalEmString == null || dataEmissaoContaFinalEmString.trim().equalsIgnoreCase("")){ dataEmissaoContaFinal = dataEmissaoContaInicial; }else{ //[FS0003] Valida a data de emiss�o da conta final try { dataEmissaoContaFinal = formato.parse(dataEmissaoContaFinalEmString); } catch (ParseException e) { throw new ActionServletException("atencao.dataemissaofinal.invalida"); } //[FS0004]Caso a data de emiss�o final da conta seja anterior a inicial //levanta a exce��o para o usu�rio indicando que a data final � anterior a data inicial if(dataEmissaoContaFinal.before(dataEmissaoContaInicial)){ throw new ActionServletException("atencao.dataemissaofinal.menorque"); } } } else{ //Seta para nula a data final de emiss�o da conta dataEmissaoContaFinalEmString = null; } //Caso a data de emiss�o final da conta esteja diferente de nulo, //Pesquisa as contas entre a data de emiss�o inicial e final if (dataEmissaoContaFinalEmString != null && !dataEmissaoContaFinalEmString.toString().trim().equalsIgnoreCase("")) { //Indica que o usu�rio informou um par�metro para pesquisar as contas do im�vel peloMenosUmParametroInformado = true; //Indica no filtro para pesquisar as contas no intervalo entre a data de emiss�o inicial e a final filtroConta.adicionarParametro(new Intervalo(FiltroConta.DATA_EMISSAO, dataEmissaoContaInicial, dataEmissaoContaFinal)); } //Cria as vari�veis que vai armazenar as datas inicial e final, de vencimento das contas Date dataVencimentoContaInicial = null; Date dataVencimentoContaFinal = null; //Caso o usu�rio informou a data de vencimento da conta inicial, pesquisa as contas do im�vel referentes a data de //vencimento da conta informada //Caso contr�rio, pesquisa as contas sem restri��o de data de vencimento if (dataVencimentoContaInicialEmString != null && !dataVencimentoContaInicialEmString.toString().trim().equalsIgnoreCase("")) { //[FS0003] valida a data de vencimento da conta inicial try { dataVencimentoContaInicial = formato.parse(dataVencimentoContaInicialEmString); } catch (ParseException e) { throw new ActionServletException("atencao.datavencimentoinicial.invalida"); } //Caso a data final de vencimento da conta n�o foi informada, replica a data inicial na final //Caso contr�rio, formata a data final if(dataVencimentoContaFinalEmString == null || dataVencimentoContaFinalEmString.trim().equalsIgnoreCase("")){ dataVencimentoContaFinal = dataVencimentoContaInicial; }else{ //[FS0003] valida a data de vencimento da conta final try { dataVencimentoContaFinal = formato.parse(dataVencimentoContaFinalEmString); } catch (ParseException e) { throw new ActionServletException("atencao.datavencimentofinal.invalida"); } //[FS0004]Caso a data de vencimento final da conta for anterior a inicial if(dataVencimentoContaFinal.before(dataVencimentoContaInicial)){ throw new ActionServletException("atencao.datavencimentofinal.menorque"); } } } else{ //Seta para nula a data final de vencimento da conta dataVencimentoContaFinalEmString = null; } //Caso a data de vencimento final da conta for diferente de nulo, //Pesquisa as contas entre a data de vencimento inicial e final if (dataVencimentoContaFinalEmString != null && !dataVencimentoContaFinalEmString.toString().trim().equalsIgnoreCase("")) { //indica que o usu�rio informou um par�metro para pesquisar as contas do im�vel peloMenosUmParametroInformado = true; //Indica no filtro para pesquisar as contas no intervalo entre a data de vencimento inicial e a final filtroConta.adicionarParametro(new Intervalo(FiltroConta.DATA_VENCIMENTO, dataVencimentoContaInicial, dataVencimentoContaFinal)); } //Caso o usu�rio informou alguma situa��o de conta if(idSituacaoConta != null && idSituacaoConta.length >0){ //Indica que o usu�rio informou um par�metro para pesquisar as contas do im�vel peloMenosUmParametroInformado = true; //La�o para incluir no filtro todas as situa��es de conta informadas pelo usu�rio para pesquisa for(int i=0; i< idSituacaoConta.length; i++ ){ if(! (new Integer(idSituacaoConta[i]).equals(new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO)))){ if( i == 0 ){ filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.DEBITO_CREDITO_SITUACAO_ATUAL_ID,idSituacaoConta[i], ParametroSimples.CONECTOR_OR,idSituacaoConta.length )); }else{ if( i == (idSituacaoConta.length - 1) ){ filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.DEBITO_CREDITO_SITUACAO_ATUAL_ID,idSituacaoConta[i])); }else{ filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.DEBITO_CREDITO_SITUACAO_ATUAL_ID,idSituacaoConta[i], ParametroSimples.CONECTOR_OR)); } } } } }else if (sessao.getAttribute("situacaoConta") != null) { filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.DEBITO_CREDITO_SITUACAO_ATUAL_ID, DebitoCreditoSituacao.NORMAL,ParametroSimples.CONECTOR_OR,3 )); filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.DEBITO_CREDITO_SITUACAO_ATUAL_ID, DebitoCreditoSituacao.RETIFICADA)); filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.DEBITO_CREDITO_SITUACAO_ATUAL_ID, DebitoCreditoSituacao.INCLUIDA, 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 filtroConta.adicionarCaminhoParaCarregamentoEntidade("debitoCreditoSituacaoAtual"); //Pesquisa as contas do im�vel, com os par�metros indicados no filtro Collection colecaoContasImovel = null; // = fachada.pesquisar(filtroConta,Conta.class.getName()); Map resultado = controlarPaginacao(httpServletRequest, retorno, filtroConta, Conta.class.getName()); colecaoContasImovel = (Collection) resultado.get("colecaoRetorno"); retorno = (ActionForward) resultado.get("destinoActionForward"); //Caso nenhuma conta tenha sido encontrada com os par�metros indicados if (colecaoContasImovel == null || colecaoContasImovel.isEmpty()) { //[FS0008]Nenhuma conta cadastrado throw new ActionServletException("atencao.pesquisa.nenhumresultado", null, "Conta"); //Caso o n� de contas retornadas pela pesquisa seja maior que o n� m�ximo de registros permitidos } else if (colecaoContasImovel.size() > ConstantesSistema.NUMERO_MAXIMO_REGISTROS_PESQUISA) { //[FS0007]Muitos registros encontrados throw new ActionServletException("atencao.pesquisa.muitosregistros"); } else { //Coloca a cole��o de contas do im�vel pesquisadas na sess�o sessao.setAttribute("colecaoContasImovel", colecaoContasImovel); } //Retorna o mapeamento contido na vari�vel retorno return retorno; } }