package gcom.gui.faturamento; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.micromedicao.leitura.FiltroLeituraAnormalidade; import gcom.micromedicao.leitura.LeituraAnormalidade; import gcom.micromedicao.leitura.LeituraSituacao; import gcom.micromedicao.medicao.FiltroMedicaoTipo; import gcom.micromedicao.medicao.MedicaoHistorico; import gcom.micromedicao.medicao.MedicaoTipo; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.acesso.usuario.UsuarioAcao; import gcom.util.ConstantesSistema; import gcom.util.ControladorException; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; 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; /** * Action para exibir a p�gina de endere�o * * @author Felipe */ public class AlterarFaturamentoDadosAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ControladorException { // Seta o retorno ActionForward retorno = null; // Obt�m a sess�o HttpSession sessao = httpServletRequest.getSession(false); if (sessao.getAttribute("telaMedicaoConsumoDadosAnt") != null && !sessao.getAttribute("telaMedicaoConsumoDadosAnt") .equals("")) { retorno = actionMapping.findForward("exibirDadosAnalise"); } else { retorno = actionMapping.findForward("telaSucesso"); } Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado"); // Obt�m a inst�ncia da Fachada Fachada fachada = Fachada.getInstancia(); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); AlterarFaturamentoDadosActionForm alterarFaturamentoDadosActionForm = (AlterarFaturamentoDadosActionForm) actionForm; String idImovel = alterarFaturamentoDadosActionForm.getIdImovel(); String leituraAnterior = alterarFaturamentoDadosActionForm .getLeituraAnterior(); String dataLeituraAnteriorInformada = alterarFaturamentoDadosActionForm .getDataLeituraAnterior(); String leituraAtual = alterarFaturamentoDadosActionForm .getLeituraAtual(); String dataLeituraAtualInformada = alterarFaturamentoDadosActionForm .getDataLeituraAtual(); String indicadorConfirmacao = alterarFaturamentoDadosActionForm .getIndicadorConfirmacao(); String idAnormalidadeLeitura = alterarFaturamentoDadosActionForm .getIdAnormalidade(); String consumoInformado = alterarFaturamentoDadosActionForm .getConsumoInformado(); Integer tipoMedicao = new Integer(alterarFaturamentoDadosActionForm.getTipoMedicao()); String tipoMedicaoSelecionada = alterarFaturamentoDadosActionForm .getTipoMedicaoSelecionada(); Imovel imovel = (Imovel) sessao.getAttribute("imovel"); MedicaoHistorico medicaoHistorico = (MedicaoHistorico) sessao .getAttribute("medicaoHistorico"); LeituraSituacao leituraSituacao = new LeituraSituacao(); // testa para ver se o tipo de medicao foi alterado if (tipoMedicao != null && tipoMedicaoSelecionada != null) { FiltroMedicaoTipo filtroMedicaoTipo = new FiltroMedicaoTipo(); filtroMedicaoTipo.adicionarParametro(new ParametroSimples( FiltroMedicaoTipo.ID, tipoMedicao)); Collection colecaoTipomedicao = fachada.pesquisar( filtroMedicaoTipo, MedicaoTipo.class.getName()); MedicaoTipo medicaoTipo = (MedicaoTipo) Util .retonarObjetoDeColecao(colecaoTipomedicao); if (!medicaoTipo.getDescricao().trim().equalsIgnoreCase( tipoMedicaoSelecionada.trim())) { throw new ActionServletException("atencao.tipoMedicao.alterado"); } } if (imovel != null) { // Comparando o im�vel filtrado com o informado pelo usu�rio if (imovel.getId().toString().equals(idImovel)) { SimpleDateFormat dataFormatada = new SimpleDateFormat( "dd/MM/yyyy"); Date dataLeituraAtual = null; Date dataLeituraAnterior = null; String anoMesReferencia = "" + medicaoHistorico.getAnoMesReferencia(); if (imovel.getHidrometroInstalacaoHistorico() != null || (imovel.getLigacaoAgua() != null && imovel .getLigacaoAgua() .getHidrometroInstalacaoHistorico() != null)) { if (dataLeituraAtualInformada != null && !dataLeituraAtualInformada.equals("")) { try { dataLeituraAtual = dataFormatada .parse(dataLeituraAtualInformada); } catch (ParseException ex) { throw new ActionServletException("erro.sistema"); } Calendar dataAtual = new GregorianCalendar(); dataAtual.setTime(dataLeituraAtual); String anoMesAtual = "" + dataAtual.get(Calendar.YEAR); String mes = "" + (dataAtual.get(Calendar.MONTH) + 1); if (!(mes.length() == 2)) { mes = "0" + mes; } anoMesAtual += mes; // Comparando a data atual informada no form com o ano // m�s // refer�ncia e com o ano m�s seguinte /*if (!((Util.compararAnoMesReferencia(new Integer( anoMesReferencia), new Integer(anoMesAtual), "=")) || (Util.compararAnoMesReferencia( new Integer(anoMesReferenciaMaisUmMes), new Integer(anoMesAtual), "=")))) {*/ if ( !sistemaParametro.getNomeAbreviadoEmpresa().equals("COSAMA") ) { boolean mesAnoValido = fachada.validaDataFaturamentoIncompativel(anoMesReferencia, anoMesAtual); if(!mesAnoValido){ sessao.setAttribute("nomeCampo", "dataLeituraAtual"); sessao .setAttribute("nomeCampo", "dataLeituraAtual"); throw new ActionServletException( "atencao.faturamento_data_incompativel", null, "Data de Leitura Atual Informada"); } } if (dataLeituraAnteriorInformada != null && !dataLeituraAnteriorInformada.equals("")) { try { dataLeituraAnterior = dataFormatada .parse(dataLeituraAnteriorInformada); } catch (ParseException ex) { throw new ActionServletException("erro.sistema"); } Calendar dataAnterior = new GregorianCalendar(); dataAnterior.setTime(dataLeituraAnterior); // Comparando a data atual informada com a data // anterior // informada // Garantindo que a data atual seja posterior a data // anterior if (dataAtual.compareTo(dataAnterior) < 0) { sessao.setAttribute("nomeCampo", "dataLeituraAtual"); throw new ActionServletException( "atencao.faturamento_data_atual_inferior_data_anterior"); } } medicaoHistorico .setDataLeituraAtualFaturamento(dataLeituraAtual); medicaoHistorico .setDataLeituraAtualInformada(dataLeituraAtual); } if (dataLeituraAnteriorInformada != null && !dataLeituraAnteriorInformada.equals("")) { try { dataLeituraAnterior = dataFormatada .parse(dataLeituraAnteriorInformada); } catch (ParseException ex) { throw new ActionServletException("erro.sistema"); } Calendar dataAnterior = new GregorianCalendar(); dataAnterior.setTime(dataLeituraAnterior); String anoMesAnterior = "" + dataAnterior.get(Calendar.YEAR); String mesAnterior = "" + (dataAnterior.get(Calendar.MONTH) + 1); if (!(mesAnterior.length() == 2)) { mesAnterior = "0" + mesAnterior; } anoMesAnterior += mesAnterior; // Comparando a data anterior faturada no form com o ano // m�s // refer�ncia e com o ano m�s anterior /*if (!((Util.compararAnoMesReferencia(new Integer( anoMesReferencia), new Integer(anoMesAnterior), "=")) || (Util.compararAnoMesReferencia( new Integer(anoMesReferenciaMenosUmMes), new Integer(anoMesAnterior), "=")))) {*/ if ( !sistemaParametro.getNomeAbreviadoEmpresa().equals("COSAMA") ) { boolean anoMesInferiorValido = fachada.validaDataFaturamentoIncompativelInferior(anoMesReferencia, anoMesAnterior); if(!anoMesInferiorValido){ sessao.setAttribute("nomeCampo", "dataLeituraAnterior"); sessao.setAttribute("nomeCampo", "dataLeituraAnterior"); throw new ActionServletException( "atencao.faturamento_data_incompativel", null, "Data de Leitura Anterior de Faturamento"); } } medicaoHistorico .setDataLeituraAnteriorFaturamento(dataLeituraAnterior); } // Testando se o n�mero de d�gitos do hidrometro � menor que // o // n�mero de d�gitos da leitura /*if ((imovel.getHidrometroInstalacaoHistorico() == null ? imovel .getLigacaoAgua() .getHidrometroInstalacaoHistorico().getHidrometro() .getNumeroDigitosLeitura().intValue() : imovel.getHidrometroInstalacaoHistorico() .getHidrometro().getNumeroDigitosLeitura() .intValue()) <= leituraAtual.length()) { medicaoHistorico.setLeituraAtualInformada(leituraAtual .equals("") ? null : new Integer(leituraAtual)); } else { sessao.setAttribute("nomeCampo", "leituraAtual"); throw new ActionServletException( "atencao.digitos.leitura.maior.hidrometro"); }*/ if (((tipoMedicao.equals(MedicaoTipo.LIGACAO_AGUA) ? imovel.getLigacaoAgua().getHidrometroInstalacaoHistorico().getHidrometro().getNumeroDigitosLeitura().intValue() : imovel.getHidrometroInstalacaoHistorico().getHidrometro().getNumeroDigitosLeitura().intValue()) >= leituraAtual.length())&& ((tipoMedicao.equals(MedicaoTipo.LIGACAO_AGUA) ? imovel.getLigacaoAgua().getHidrometroInstalacaoHistorico().getHidrometro().getNumeroDigitosLeitura().intValue() : imovel.getHidrometroInstalacaoHistorico().getHidrometro().getNumeroDigitosLeitura().intValue()) >= leituraAnterior.length())) { medicaoHistorico.setLeituraAtualInformada(leituraAtual .equals("") ? null : new Integer(leituraAtual)); if (!("" + medicaoHistorico .getLeituraAnteriorFaturamento()) .equals(leituraAnterior)) { LeituraSituacao leituraSituacaoAnterior = new LeituraSituacao(); leituraSituacaoAnterior .setId(LeituraSituacao.LEITURA_ALTERADA); medicaoHistorico .setLeituraSituacaoAnterior(leituraSituacaoAnterior); } if (leituraAnterior != null && !leituraAnterior.equals("")) { medicaoHistorico.setLeituraAnteriorFaturamento(new Integer(leituraAnterior)); } else { medicaoHistorico.setLeituraAnteriorFaturamento(null); } } else { sessao.setAttribute("nomeCampo", "leituraAtual"); sessao.setAttribute("nomeCampo", "leituraAnterior"); throw new ActionServletException( "atencao.digitos.leitura.maior.hidrometro"); } /////////////////////////////////////////////////////////////////////////////////// //[FS0007] Validar Consumo Informado do M�s String confirmado = httpServletRequest.getParameter("confirmado"); if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")){ int consumo = 0; int consumoMedioMes = 0; if(alterarFaturamentoDadosActionForm.getConsumoMedido() != null && !alterarFaturamentoDadosActionForm.getConsumoMedido().equals("")){ consumoMedioMes = new Integer(alterarFaturamentoDadosActionForm.getConsumoMedido()); } imovel.setId(new Integer(idImovel)); int qtdeEconomias = fachada .obterQuantidadeEconomias(imovel); MedicaoTipo medicao = new MedicaoTipo(); medicao.setId(new Integer(tipoMedicao)); boolean houveIntslacaoHidrometro = false; try { houveIntslacaoHidrometro = fachada.verificarInstalacaoSubstituicaoHidrometro(imovel.getId(), medicao); } catch (ControladorException e) { e.printStackTrace(); } int[] consumoMedioImovel = fachada .obterVolumeMedioAguaEsgoto(imovel.getId(), sistemaParametro.getAnoMesFaturamento(),tipoMedicao, houveIntslacaoHidrometro); if (consumoMedioImovel != null && consumoMedioImovel.length > 0) { if(consumoInformado != null && !consumoInformado.equals("")){ consumo = new Integer(consumoInformado); } int consumoMedio = consumoMedioImovel[0]; int consumoMedio5 = consumoMedio * 5; int qtdeEconomias30 = qtdeEconomias * 30; if(consumo > consumoMedio5 && consumo > qtdeEconomias30 && consumo > consumoMedioMes){ httpServletRequest.setAttribute("caminhoActionConclusao", "/gsan/alterarDadosFaturamentoAction.do"); // Monta a p�gina de confirma��o para perguntar se o usu�rio // quer aceitar o consumo informado superior a cinco vezes ao // consumo m�dio do im�vel e superior a trinta vezes a quantidade de economias // e superior ao consumo m�dio return montarPaginaConfirmacao( "atencao.invalido.consumo", httpServletRequest, actionMapping, null,null); //} /*throw new ActionServletException( "atencao.invalido.consumo");*/ } } } ////////////////////////////////////////////////////////////////////////////////////////// if (idAnormalidadeLeitura != null && !idAnormalidadeLeitura.equals("")) { FiltroLeituraAnormalidade filtroLeituraAnormalidade = new FiltroLeituraAnormalidade(); filtroLeituraAnormalidade .adicionarParametro(new ParametroSimples( FiltroLeituraAnormalidade.ID, idAnormalidadeLeitura)); Collection anormalidadeLeituraEncontrada = fachada .pesquisar(filtroLeituraAnormalidade, LeituraAnormalidade.class.getName()); if (anormalidadeLeituraEncontrada != null && !anormalidadeLeituraEncontrada.isEmpty()) { medicaoHistorico .setLeituraAnormalidadeInformada(((LeituraAnormalidade) ((List) anormalidadeLeituraEncontrada) .get(0))); medicaoHistorico .setLeituraAnormalidadeFaturamento(((LeituraAnormalidade) ((List) anormalidadeLeituraEncontrada) .get(0))); } else { sessao.setAttribute("nomeCampo", "idAnormalidade"); throw new ActionServletException( "atencao.pesquisa_inexistente", null, "Anormalidade de Leitura"); } } else { medicaoHistorico.setLeituraAnormalidadeInformada(null); medicaoHistorico .setLeituraAnormalidadeFaturamento(null); } if (leituraAtual.equals("") || new Integer(leituraAtual).intValue() == 0) { leituraSituacao.setId(LeituraSituacao.NAO_REALIZADA); } else { if (indicadorConfirmacao .equals(ConstantesSistema.CONFIRMADA)) { leituraSituacao.setId(LeituraSituacao.CONFIRMADA); } else { leituraSituacao.setId(LeituraSituacao.REALIZADA); } } medicaoHistorico.setLeituraSituacaoAtual(leituraSituacao); if (consumoInformado != null && !consumoInformado.equalsIgnoreCase("")) { medicaoHistorico.setNumeroConsumoInformado(new Integer( consumoInformado)); } //regitrando operacao // medicaoHistorico.setOperacaoEfetuada(operacaoEfetuada); // medicaoHistorico.adicionarUsuario(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO); // registradorOperacao.registrarOperacao(medicaoHistorico); if ( sessao.getAttribute("medicaoHistoricoGerada") != null ){ fachada.inserir(medicaoHistorico); sessao.removeAttribute( "medicaoHistoricoGerada" ); } else if (medicaoHistorico.getId() != null) { if ( medicaoHistorico != null && medicaoHistorico.getId() != null ) { fachada.atualizarMedicaoHistorico(medicaoHistorico, usuarioLogado); } } } else { if (idAnormalidadeLeitura != null && !idAnormalidadeLeitura.equals("")) { FiltroLeituraAnormalidade filtroLeituraAnormalidade = new FiltroLeituraAnormalidade(); filtroLeituraAnormalidade .adicionarParametro(new ParametroSimples( FiltroLeituraAnormalidade.ID, idAnormalidadeLeitura)); Collection anormalidadeLeituraEncontrada = fachada .pesquisar(filtroLeituraAnormalidade, LeituraAnormalidade.class.getName()); if (anormalidadeLeituraEncontrada != null && !anormalidadeLeituraEncontrada.isEmpty()) { // Comparar a anormalidade if (((LeituraAnormalidade) ((List) anormalidadeLeituraEncontrada) .get(0)).getIndicadorImovelSemHidrometro() .equals(new Short("2"))) { sessao.setAttribute("nomeCampo", "idAnormalidade"); throw new ActionServletException( "atencao.leitura.anormalidade.nao.permitida"); } imovel .setLeituraAnormalidade((LeituraAnormalidade) ((List) anormalidadeLeituraEncontrada) .get(0)); } else { sessao.setAttribute("nomeCampo", "idAnormalidade"); throw new ActionServletException( "atencao.pesquisa_inexistente", null, "Anormalidade de Leitura"); } } else { imovel.setLeituraAnormalidade(null); imovel.setUltimaAlteracao(new Date()); } imovel.adicionarUsuario(usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO); fachada.atualizarImovelAlterarFaturamento(imovel, usuarioLogado); } } else { sessao.setAttribute("nomeCampo", "idImovel"); httpServletRequest.setAttribute("sucesso", "Dados do faturamento atualizados com sucesso"); throw new ActionServletException("atencao.imovel.alterado"); } if(sessao.getAttribute("habilitaBotaoAlterarDadosFaturamento") != null ){ montarPaginaSucesso(httpServletRequest, "Dados do faturamento do im�vel " + imovel.getId() + " atualizados com sucesso.", "Voltar para Analisar Excecoes de Leituras e Consumos", "exibirDadosAnaliseMedicaoConsumoResumoAction.do"); }else if (retorno.getName().equalsIgnoreCase("telaSucesso")) { montarPaginaSucesso(httpServletRequest, "Dados do faturamento do im�vel " + imovel.getId() + " atualizados com sucesso.", "Atualizar outros dados para faturamento", "exibirDadosFaturamentoAction.do?menu=sim"); } } sessao.removeAttribute("telaMedicaoConsumoDadosAnt"); return retorno; } }