package gcom.gui.faturamento.conta; import gcom.cadastro.imovel.Categoria; import gcom.cadastro.imovel.Subcategoria; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.fachada.Fachada; import gcom.faturamento.bean.CalcularValoresAguaEsgotoHelper; import gcom.faturamento.consumotarifa.ConsumoTarifa; import gcom.faturamento.consumotarifa.FiltroConsumoTarifa; import gcom.faturamento.conta.Conta; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Vector; import java.math.BigDecimal; import gcom.seguranca.acesso.PermissaoEspecial; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.transacao.TabelaColuna; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; 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 CalcularValoresRetificarContaAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { //Seta o mapeamento de retorno ActionForward retorno = actionMapping .findForward("exibirRetificarConta"); 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 RetificarContaActionForm retificarContaActionForm = (RetificarContaActionForm) actionForm; Conta contaAtual = (Conta) sessao.getAttribute("contaRetificar"); //Recebendo os dados enviados pelo formul�rio String imovelID = retificarContaActionForm.getIdImovel(); String mesAnoConta = retificarContaActionForm.getMesAnoConta(); Integer situacaoAguaConta = new Integer(retificarContaActionForm.getSituacaoAguaConta()); Integer situacaoEsgotoConta = new Integer(retificarContaActionForm.getSituacaoEsgotoConta()); String consumoAgua = retificarContaActionForm.getConsumoAgua(); String consumoEsgoto = retificarContaActionForm.getConsumoEsgoto(); String percentualEsgoto = retificarContaActionForm.getPercentualEsgoto(); //Carrega as cole��es de acordo com os objetos da sess�o Collection colecaoDebitoCobrado = null; if (sessao.getAttribute("colecaoDebitoCobrado") != null){ colecaoDebitoCobrado = (Collection) sessao.getAttribute("colecaoDebitoCobrado"); } Collection colecaoCreditoRealizado = new Vector(); if (sessao.getAttribute("colecaoCreditoRealizado") != null) { colecaoCreditoRealizado = (Collection) sessao .getAttribute("colecaoCreditoRealizado"); } //RM4132 - adicionado por Vivianne Sousa - 17/02/2011 - analista:Jeferson Pedrosa SistemaParametro sistemaParametro = this.getFachada().pesquisarParametrosDoSistema(); verificarValoresLeituraAnteriorEAtualPoco(retificarContaActionForm.getLeituraAnteriorPoco(), retificarContaActionForm.getLeituraAtualPoco(), retificarContaActionForm.getConsumoFaturadoPoco(),sistemaParametro); //Alterado por Raphael Rossiter em 17/04/2007 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); } //[SF0001] - Determinar Valores para Faturamento de �gua e/ou Esgoto Usuario usuarioLogado = (Usuario)sessao.getAttribute(Usuario.USUARIO_LOGADO); // Adicionado por Bruno Barros, 25/07/2008 // Verificar se foi informado a tarifa de consumo da conta no retificar // Caso sim, calcular com o novo ConsumoTarifa informado, sen�o, // utilizar o da conta // Carregamos todas as tarifas de consumo ativas if ( sessao.getAttribute( "colecaoConsumoTarifa" ) == null ){ FiltroConsumoTarifa filtro = new FiltroConsumoTarifa(); filtro.adicionarParametro( new ParametroSimples( FiltroConsumoTarifa.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO ) ); Collection<ConsumoTarifa> colConsumoTarifa = Fachada.getInstancia().pesquisar( filtro, ConsumoTarifa.class.getName() ); sessao.setAttribute( "colecaoConsumoTarifa", colConsumoTarifa ); } Integer idConsumoTarifa = contaAtual.getConsumoTarifa().getId(); if ( retificarContaActionForm.getIdConsumoTarifa() != null && !retificarContaActionForm.getIdConsumoTarifa().equals( ConstantesSistema.NUMERO_NAO_INFORMADO ) ){ idConsumoTarifa = Integer.parseInt( retificarContaActionForm.getIdConsumoTarifa() ); } // Verificamos se a conta possue tarifa de consumo retificarContaActionForm.setIdConsumoTarifa( idConsumoTarifa+"" ); Collection<CalcularValoresAguaEsgotoHelper> valoresConta = fachada.calcularValoresConta(mesAnoConta, imovelID, situacaoAguaConta, situacaoEsgotoConta, colecaoCategoriaOUSubcategoria, consumoAgua, consumoEsgoto, percentualEsgoto, idConsumoTarifa, usuarioLogado); // Verificar a permiss�o especial da tarifa de consumo boolean temPermissaoAlterarTarifaConsumo = fachada.verificarPermissaoEspecial( PermissaoEspecial.ALTERAR_TARIFA_CONSUMO_RETIFICAR_CONTA , (Usuario) sessao.getAttribute("usuarioLogado") ); httpServletRequest.setAttribute("temPermissaoAlterarTarifaConsumo",temPermissaoAlterarTarifaConsumo); // Fim alterador por Bruno Barros, 25/07/2008 //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()); //C�lcula o valor total dos cr�ditos de uma conta de acordo com o informado pelo usu�rio BigDecimal valorTotalCreditosConta = fachada.calcularValorTotalCreditoConta(colecaoCreditoRealizado, httpServletRequest.getParameterMap()); //Totalizando os valores de �gua e esgoto BigDecimal valorTotalAgua = new BigDecimal("0.00"); BigDecimal valorTotalEsgoto = new BigDecimal("0.00"); 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()); } } } // Inclui valor do Rateio na conta de agua if (contaAtual.getValorRateioAgua() != null) { valorTotalAgua = valorTotalAgua.add(contaAtual.getValorRateioAgua()); } if (contaAtual.getValorRateioEsgoto() != null) { valorTotalEsgoto = valorTotalEsgoto.add(contaAtual.getValorRateioEsgoto()); } BigDecimal valorTotalConta = new BigDecimal("0.00"); valorTotalConta = valorTotalConta.add(valorTotalAgua); valorTotalConta = valorTotalConta.add(valorTotalEsgoto); valorTotalConta = valorTotalConta.add(valorTotalDebitosConta); valorTotalConta = valorTotalConta.subtract(valorTotalCreditosConta); if(valoresConta != null){ // Consumo de Esgoto Integer consumoAgua2 = fachada.calcularConsumoTotalAguaOuEsgotoPorCategoria( valoresConta, ConstantesSistema.CALCULAR_AGUA); if(consumoAgua2 != null) { retificarContaActionForm.setConsumoAgua(consumoAgua2.toString()); } Integer consumoEsgoto2 = fachada.calcularConsumoTotalAguaOuEsgotoPorCategoria( valoresConta, ConstantesSistema.CALCULAR_ESGOTO); if(consumoEsgoto2 != null) { retificarContaActionForm.setConsumoEsgoto(consumoEsgoto2.toString()); } } //[FS0008] - Verificar valor da conta igual a zero if (valorTotalConta.equals(new BigDecimal("0.00")) && (valorTotalCreditosConta == null || valorTotalCreditosConta.equals(new BigDecimal("0.00")))) { throw new ActionServletException("atencao.valor_conta_igual_zero"); } else if (valorTotalConta.compareTo(new BigDecimal("0.00")) == -1){ throw new ActionServletException("atencao.valor_conta_negativo"); } //Arredondando os valores obtidos para duas casas decimais valorTotalAgua.setScale(2, BigDecimal.ROUND_HALF_UP); valorTotalEsgoto.setScale(2, BigDecimal.ROUND_HALF_UP); valorTotalDebitosConta.setScale(2, BigDecimal.ROUND_HALF_UP); valorTotalCreditosConta.setScale(2, BigDecimal.ROUND_HALF_UP); valorTotalConta.setScale(2, BigDecimal.ROUND_HALF_UP); //Exibindo os valores calculados retificarContaActionForm.setValorAgua(Util.formatarMoedaReal(valorTotalAgua)); retificarContaActionForm.setValorEsgoto(Util.formatarMoedaReal(valorTotalEsgoto)); retificarContaActionForm.setValorDebito(Util.formatarMoedaReal(valorTotalDebitosConta)); retificarContaActionForm.setValorCredito(Util.formatarMoedaReal(valorTotalCreditosConta)); retificarContaActionForm.setValorTotal(Util.formatarMoedaReal(valorTotalConta)); /* * Colocado por Raphael Rossiter em 17/04/2007 * Objetivo: Manipula��o dos objetos que ser�o exibidos no formul�rio de acordo com a empresa */ // SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); httpServletRequest.setAttribute("empresaNome", sistemaParametro.getNomeAbreviadoEmpresa().trim()); //verifica se o usu�rio tem permiss�o especial. boolean temPermissaoParaRetificarContaNorma = fachada.verificarPermissaoEspecial(PermissaoEspecial.RETIFICAR_CONTA_NORMA_REVISAO_FATURAMENTO, usuarioLogado); //[FS0038]-habilitar/desabilitar campos para retifica��o habilitarCampos(retificarContaActionForm.getMotivoRetificacaoID(),httpServletRequest,sistemaParametro,temPermissaoParaRetificarContaNorma); 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; } /* [FS0039] � Verificar valores de Leitura Anterior e Atual do Po�o * Vivianne Sousa - 17/02/2011 * RM4132 - analista respons�vel:Jeferson Pedrosa */ public void verificarValoresLeituraAnteriorEAtualPoco(String leituraAnteriorPocoString, String leituraAtualPocoString, String consumoFaturadoPocoString,SistemaParametro sistemaParametro) { if(sistemaParametro.getIndicadorNormaRetificacao().equals(ConstantesSistema.SIM)){ if(leituraAnteriorPocoString != null && leituraAtualPocoString != null && consumoFaturadoPocoString != null && !leituraAnteriorPocoString.equalsIgnoreCase("") && !leituraAtualPocoString.equalsIgnoreCase("") && !consumoFaturadoPocoString.equalsIgnoreCase("")){ //Caso exista informa��o do Volume de Po�o, da Leitura Anterior Po�o e da Leitura Atual Po�o: Integer leituraAnteriorPoco = new Integer(leituraAnteriorPocoString); Integer leituraAtualPoco = new Integer(leituraAtualPocoString); Integer consumoFaturadoPoco = new Integer(consumoFaturadoPocoString); int diferencaLeituraAnteriorELeituraAtual = 0; if(leituraAtualPoco.intValue() > leituraAnteriorPoco.intValue()){ diferencaLeituraAnteriorELeituraAtual = leituraAtualPoco.intValue() - leituraAnteriorPoco.intValue(); }else if(leituraAnteriorPoco.intValue() > leituraAtualPoco.intValue()){ diferencaLeituraAnteriorELeituraAtual = leituraAnteriorPoco.intValue() - leituraAtualPoco.intValue(); } if(diferencaLeituraAnteriorELeituraAtual != consumoFaturadoPoco.intValue()){ throw new ActionServletException("atencao.leitura_poco_fora_faixa"); } } } } /*[FS0038]-habilitar/desabilitar campos para retifica��o * Vivianne Sousa - 14/02/2011 * RM4132 - analista respons�vel:Jeferson Pedrosa */ public void habilitarCampos(String idMotivoSelecionado,HttpServletRequest httpServletRequest, SistemaParametro sistemaParametro,boolean temPermissaoParaRetificarContaNorma){ if(sistemaParametro.getIndicadorNormaRetificacao().equals(ConstantesSistema.SIM)){ //Caso a Empresa esteja na Norma de Retifica��o de Conta String habilitaSituacaoAgua = "2"; String habilitaConsumoAgua = "2"; String habilitaLeituraAnterior = "2"; String habilitaLeituraAtual = "2"; String habilitaSituacaoEsgoto = "2"; String habilitaConsumoEsgoto = "2"; String habilitaPercentualEsgoto = "2"; String habilitaPercentualColeta = "2"; String habilitaVolumePoco = "2"; String habilitaLeituraAnteriorPoco = "2"; String habilitaLeituraAtualPoco = "2"; String habilitaListaCategoriasEQuantidadesEconomias = "2"; String habilitaListaDebitos = "2"; String habilitaListaCreditos = "2"; if(idMotivoSelecionado != null && !idMotivoSelecionado.equalsIgnoreCase("") && !idMotivoSelecionado.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)){ Collection colecaoTabelaColuna = getFachada().pesquisaTabelaColunaContaMotivoRetificacaoColuna(new Integer(idMotivoSelecionado)); Iterator iterTabelaColuna = colecaoTabelaColuna.iterator(); while (iterTabelaColuna.hasNext()) { TabelaColuna tabelaColuna = (TabelaColuna) iterTabelaColuna.next(); String nomeAbreviado = tabelaColuna.getNomeAbreviado(); if (nomeAbreviado != null) { if(nomeAbreviado.equalsIgnoreCase("SITAGU")){ habilitaSituacaoAgua = "1"; }else if(nomeAbreviado.equalsIgnoreCase("CONAGU")){ habilitaConsumoAgua = "1"; }else if(nomeAbreviado.equalsIgnoreCase("LANAGU")){ habilitaLeituraAnterior = "1"; }else if(nomeAbreviado.equalsIgnoreCase("LATAGU")){ habilitaLeituraAtual = "1"; }else if(nomeAbreviado.equalsIgnoreCase("SITESG")){ habilitaSituacaoEsgoto = "1"; }else if(nomeAbreviado.equalsIgnoreCase("CONESG")){ habilitaConsumoEsgoto = "1"; }else if(nomeAbreviado.equalsIgnoreCase("PERESG")){ habilitaPercentualEsgoto = "1"; }else if(nomeAbreviado.equalsIgnoreCase("PERCOL")){ habilitaPercentualColeta = "1"; }else if(nomeAbreviado.equalsIgnoreCase("VOLPOC")){ habilitaVolumePoco = "1"; }else if(nomeAbreviado.equalsIgnoreCase("LANPOC")){ habilitaLeituraAnteriorPoco = "1"; }else if(nomeAbreviado.equalsIgnoreCase("LATPOC")){ habilitaLeituraAtualPoco = "1"; }else if(nomeAbreviado.equalsIgnoreCase("CATECO")){ habilitaListaCategoriasEQuantidadesEconomias = "1"; }else if(nomeAbreviado.equalsIgnoreCase("DEBITO")){ habilitaListaDebitos = "1"; }else if(nomeAbreviado.equalsIgnoreCase("CREDIT")){ habilitaListaCreditos = "1"; } } } } httpServletRequest.setAttribute("habilitaSituacaoAgua",habilitaSituacaoAgua); httpServletRequest.setAttribute("habilitaConsumoAgua",habilitaConsumoAgua); httpServletRequest.setAttribute("habilitaLeituraAnterior",habilitaLeituraAnterior); httpServletRequest.setAttribute("habilitaLeituraAtual",habilitaLeituraAtual); httpServletRequest.setAttribute("habilitaSituacaoEsgoto",habilitaSituacaoEsgoto); httpServletRequest.setAttribute("habilitaConsumoEsgoto",habilitaConsumoEsgoto); httpServletRequest.setAttribute("habilitaPercentualEsgoto",habilitaPercentualEsgoto); httpServletRequest.setAttribute("habilitaPercentualColeta",habilitaPercentualColeta); httpServletRequest.setAttribute("habilitaVolumePoco",habilitaVolumePoco); httpServletRequest.setAttribute("habilitaLeituraAnteriorPoco",habilitaLeituraAnteriorPoco); httpServletRequest.setAttribute("habilitaLeituraAtualPoco",habilitaLeituraAtualPoco); httpServletRequest.setAttribute("habilitaListaCategoriasEQuantidadesEconomias",habilitaListaCategoriasEQuantidadesEconomias); httpServletRequest.setAttribute("habilitaListaDebitos",habilitaListaDebitos); httpServletRequest.setAttribute("habilitaListaCreditos",habilitaListaCreditos); } } }