package gcom.gui.faturamento.conta; import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao; import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao; import gcom.cadastro.imovel.Categoria; import gcom.cadastro.imovel.FiltroImovel; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.imovel.Subcategoria; import gcom.fachada.Fachada; import gcom.faturamento.bean.CalcularValoresAguaEsgotoHelper; import gcom.faturamento.conta.ContaMotivoInclusao; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.Map; import java.util.Vector; 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; public class InserirContaAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { // Seta o mapeamento de retorno ActionForward retorno = actionMapping.findForward("telaSucesso"); Fachada fachada = Fachada.getInstancia(); // Mudar isso quando tiver esquema de seguran�a HttpSession sessao = httpServletRequest.getSession(false); // Inst�ncia do formul�rio que est� sendo utilizado InserirContaActionForm inserirContaActionForm = (InserirContaActionForm) actionForm; // Recebendo os dados enviados pelo formul�rio String imovelIdJSP = inserirContaActionForm.getIdImovel(); String mesAnoContaJSP = inserirContaActionForm.getMesAnoConta(); String vencimentoContaJSP = inserirContaActionForm.getVencimentoConta(); Integer situacaoAguaContaJSP = new Integer(inserirContaActionForm .getSituacaoAguaConta()); Integer situacaoEsgotoContaJSP = new Integer(inserirContaActionForm .getSituacaoEsgotoConta()); Integer motivoInclusaoContaJSP = new Integer(inserirContaActionForm .getMotivoInclusaoID()); String consumoAguaJSP = inserirContaActionForm.getConsumoAgua(); String consumoEsgotoJSP = inserirContaActionForm.getConsumoEsgoto(); String percentualEsgotoJSP = inserirContaActionForm .getPercentualEsgoto(); Map<String, String[]> requestMap = httpServletRequest.getParameterMap(); // Carrega as cole��es de acordo com os objetos da sess�o Collection colecaoDebitoCobrado = new Vector(); if (sessao.getAttribute("colecaoDebitoCobrado") != null) { colecaoDebitoCobrado = (Collection) sessao .getAttribute("colecaoDebitoCobrado"); } Collection colecaoCategoriaOUSubcategoria = null; if (sessao.getAttribute("colecaoCategoria") != null){ colecaoCategoriaOUSubcategoria = (Collection) sessao.getAttribute("colecaoCategoria"); this.atualizarQuantidadeEconomiasCategoria(colecaoCategoriaOUSubcategoria, httpServletRequest); } else{ colecaoCategoriaOUSubcategoria = (Collection) sessao.getAttribute("colecaoSubcategoria"); this.atualizarQuantidadeEconomiasSubcategoria(colecaoCategoriaOUSubcategoria, httpServletRequest); } // [FS0015] - Verificar se foi efetuado o c�lculo da conta //============================================================================================== Collection<CalcularValoresAguaEsgotoHelper> valoresConta = null; //[SF0001] - Determinar Valores para Faturamento de �gua e/ou Esgoto //******************************************************************** Usuario usuarioLogado = (Usuario)sessao.getAttribute(Usuario.USUARIO_LOGADO); valoresConta = fachada.calcularValoresConta(mesAnoContaJSP, imovelIdJSP, situacaoAguaContaJSP, situacaoEsgotoContaJSP, colecaoCategoriaOUSubcategoria, consumoAguaJSP, consumoEsgotoJSP, percentualEsgotoJSP, null, usuarioLogado); //C�lcula o valor total dos d�bitos de uma conta de acordo com o informado pelo usu�rio BigDecimal valorTotalDebitosConta = fachada.calcularValorTotalDebitoConta(colecaoDebitoCobrado, httpServletRequest.getParameterMap()); //Totalizando os valores de �gua e esgoto BigDecimal valorTotalAgua = new BigDecimal("0"); BigDecimal valorTotalEsgoto = new BigDecimal("0"); if (valoresConta != null && !valoresConta.isEmpty()){ Iterator valoresContaIt = valoresConta.iterator(); CalcularValoresAguaEsgotoHelper valoresContaObjeto = null; while (valoresContaIt.hasNext()){ valoresContaObjeto = (CalcularValoresAguaEsgotoHelper) valoresContaIt.next(); //Valor Faturado de �gua if (valoresContaObjeto.getValorFaturadoAguaCategoria() != null){ valorTotalAgua = valorTotalAgua.add(valoresContaObjeto.getValorFaturadoAguaCategoria()); } //Valor Faturado de Esgoto if (valoresContaObjeto.getValorFaturadoEsgotoCategoria() != null){ valorTotalEsgoto = valorTotalEsgoto.add(valoresContaObjeto.getValorFaturadoEsgotoCategoria()); } } } BigDecimal valorTotalConta = new BigDecimal("0.00"); valorTotalConta = valorTotalConta.add(valorTotalAgua); valorTotalConta = valorTotalConta.add(valorTotalEsgoto); valorTotalConta = valorTotalConta.add(valorTotalDebitosConta); // [FS0008] - Verificar valor da conta igual a zero if (valorTotalConta.equals(new BigDecimal("0.00"))) { throw new ActionServletException("atencao.valor_conta_igual_zero"); } //************************************************************************************** //Invertendo o formato para yyyyMM (sem a barra) mesAnoContaJSP = Util.formatarMesAnoParaAnoMesSemBarra(mesAnoContaJSP); // Carregando as informa��es do im�vel FiltroImovel filtroImovel = new FiltroImovel(); // Objetos que ser�o retornados pelo hibernate filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra.setorComercial.localidade"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra.rota"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("consumoTarifa"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("imovelPerfil"); filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, imovelIdJSP)); Collection<Imovel> colecaoImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName()); // [FS0001] - Verificar exist�ncia da matr�cula do im�vel if (colecaoImovel == null || colecaoImovel.isEmpty()) { throw new ActionServletException("atencao.naocadastrado", null, "im�vel"); } Imovel imovel = (Imovel) Util.retonarObjetoDeColecao(colecaoImovel); // LigacaoAguaSituacao LigacaoAguaSituacao ligacaoAguaSituacao = new LigacaoAguaSituacao(); ligacaoAguaSituacao.setId(situacaoAguaContaJSP); // LigacaoEsgotoSituacao LigacaoEsgotoSituacao ligacaoEsgotoSituacao = new LigacaoEsgotoSituacao(); ligacaoEsgotoSituacao.setId(situacaoEsgotoContaJSP); // Data de vencimento da conta // Para auxiliar na formata��o de uma data SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy"); Date dataVencimentoConta; try { dataVencimentoConta = formatoData.parse(vencimentoContaJSP); } catch (ParseException ex) { dataVencimentoConta = null; } // Motivo da inclus�o da conta ContaMotivoInclusao contaMotivoInclusao = new ContaMotivoInclusao(); contaMotivoInclusao.setId(motivoInclusaoContaJSP); //CRC4202 - adicionado por Vivianne Sousa - 21/09/2010 - analista:Adriana Ribeiro Integer leituraAnterior = null; if(inserirContaActionForm.getLeituraAnteriorAgua() != null && !inserirContaActionForm.getLeituraAnteriorAgua().trim().equalsIgnoreCase("")) { leituraAnterior = new Integer(inserirContaActionForm.getLeituraAnteriorAgua()); } Integer leituraAtual = null; if(inserirContaActionForm.getLeituraAtualAgua() != null && !inserirContaActionForm.getLeituraAtualAgua().trim().equalsIgnoreCase("")) { leituraAtual = new Integer(inserirContaActionForm.getLeituraAtualAgua()); } // [SF002] - Gerar dados da conta, [SF003] - Gerar os d�bitos cobrados Integer idConta = fachada.inserirConta(new Integer(mesAnoContaJSP), imovel, colecaoDebitoCobrado, ligacaoAguaSituacao, ligacaoEsgotoSituacao, colecaoCategoriaOUSubcategoria, consumoAguaJSP, consumoEsgotoJSP, percentualEsgotoJSP, dataVencimentoConta, valoresConta, contaMotivoInclusao, requestMap, usuarioLogado, leituraAnterior,leituraAtual); montarPaginaSucesso(httpServletRequest, "Conta " + Util.formatarMesAnoReferencia(new Integer(mesAnoContaJSP).intValue()) + " do im�vel " + imovel.getId() + " inserida com sucesso.", "Inserir outra Conta", "exibirInserirContaAction.do?menu=sim", "exibirManterContaAction.do?idImovelRequest=" + imovel.getId() , "Atualizar Conta(s) do Imovel " + imovel.getId(), "Emitir 2� Via de Conta", "gerarRelatorio2ViaContaAction.do?idConta="+ idConta); return retorno; } private Integer atualizarQuantidadeEconomiasCategoria(Collection colecaoCategorias, HttpServletRequest httpServletRequest){ /* * Atualizando a quantidade de economias por categoria de acordo com o * informado pelo usu�rio */ Integer qtdEconnomia = 0; if (colecaoCategorias != null && !colecaoCategorias.isEmpty()){ Iterator colecaoCategoriaIt = colecaoCategorias.iterator(); Categoria categoria; Map<String, String[]> requestMap = httpServletRequest.getParameterMap(); String qtdPorEconomia; while (colecaoCategoriaIt.hasNext()) { categoria = (Categoria) colecaoCategoriaIt.next(); if (requestMap.get("categoria" + categoria.getId().intValue()) != null) { qtdPorEconomia = (requestMap.get("categoria" + categoria.getId().intValue()))[0]; if (qtdPorEconomia == null || qtdPorEconomia.equalsIgnoreCase("")) { throw new ActionServletException( "atencao.campo_texto.obrigatorio", null, "Quantidade de economias"); } categoria.setQuantidadeEconomiasCategoria(new Integer( qtdPorEconomia)); qtdEconnomia = Util.somaInteiros(qtdEconnomia,new Integer(qtdPorEconomia)); } } } return qtdEconnomia; } private Integer atualizarQuantidadeEconomiasSubcategoria(Collection colecaoSubcategorias, HttpServletRequest httpServletRequest){ /* * Atualizando a quantidade de economias por subcategoria de acordo com o * informado pelo usu�rio */ Integer qtdEconnomia = 0; if (colecaoSubcategorias != null && !colecaoSubcategorias.isEmpty()){ Iterator colecaoSubcategoriaIt = colecaoSubcategorias.iterator(); Subcategoria subcategoria; Map<String, String[]> requestMap = httpServletRequest.getParameterMap(); String qtdPorEconomia; while (colecaoSubcategoriaIt.hasNext()) { subcategoria = (Subcategoria) colecaoSubcategoriaIt.next(); if (requestMap.get("subcategoria" + subcategoria.getId().intValue()) != null) { qtdPorEconomia = (requestMap.get("subcategoria" + subcategoria.getId().intValue()))[0]; if (qtdPorEconomia == null || qtdPorEconomia.equalsIgnoreCase("")) { throw new ActionServletException( "atencao.campo_texto.obrigatorio", null, "Quantidade de economias"); } subcategoria.setQuantidadeEconomias(new Integer( qtdPorEconomia)); qtdEconnomia = Util.somaInteiros(qtdEconnomia,new Integer(qtdPorEconomia)); } } } return qtdEconnomia; } }