package gcom.gui.micromedicao; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.imovel.bean.ImovelMicromedicao; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.fachada.Fachada; import gcom.faturamento.FaturamentoGrupo; import gcom.faturamento.MotivoInterferenciaTipo; 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.MedicaoHistorico; import gcom.micromedicao.medicao.MedicaoTipo; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.OperacaoEfetuada; import gcom.seguranca.acesso.usuario.Usuario; 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; public class AtualizarConsumosResumoAction extends GcomAction { @SuppressWarnings("rawtypes") public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { ActionForward retorno = actionMapping.findForward("atualizarConsumoResumo"); LeituraConsumoActionForm leituraConsumoActionForm = (LeituraConsumoActionForm) actionForm; Fachada fachada = Fachada.getInstancia(); HttpSession sessao = httpServletRequest.getSession(false); Operacao operacao = new Operacao(); operacao.setId(Operacao.OPERACAO_BAIRRO_ATUALIZAR); OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada(); operacaoEfetuada.setOperacao(operacao); String idImovel = (String) sessao.getAttribute("idImovel"); String dataLeituraAnteriorInformada = leituraConsumoActionForm.getDataLeituraAnteriorFaturamento(); String leituraAnterior = leituraConsumoActionForm.getLeituraAnteriorFaturamento(); String dataLeituraAtualInformada = leituraConsumoActionForm.getDataLeituraAtualInformada(); String leituraAtual = leituraConsumoActionForm.getLeituraAtualInformada(); String consumoInformado = leituraConsumoActionForm.getConsumoInformado(); String indicadorConfirmacao = leituraConsumoActionForm.getConfirmacao(); Integer idMotivoInterferenciaTipo = leituraConsumoActionForm.getMotivoInterferenciaTipo(); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); FaturamentoGrupo faturamentoGrupo = (FaturamentoGrupo) sessao.getAttribute("faturamentoGrupo"); if (indicadorConfirmacao == null || indicadorConfirmacao.trim().equals("")) { indicadorConfirmacao = "0"; } String idAnormalidadeLeitura = leituraConsumoActionForm.getIdAnormalidade(); String tipoMedicao = (String) sessao.getAttribute("tipoMedicao"); Imovel imovel = ((ImovelMicromedicao) sessao.getAttribute("imovelMicromedicaoDadosResumo")).getImovel(); MedicaoHistorico medicaoHistorico = (MedicaoHistorico) sessao.getAttribute("medicaoHistoricoAnoMesAtual"); boolean alterouAnormalidade = existeAltracaoAnormalidade(idAnormalidadeLeitura, medicaoHistorico); LeituraSituacao leituraSituacao = new LeituraSituacao(); if (imovel != null) { SimpleDateFormat dataFormatada = new SimpleDateFormat("dd/MM/yyyy"); Date dataLeituraAtual = null; Date dataLeituraAnterior = null; String anoMesReferencia = "" + medicaoHistorico.getAnoMesReferencia(); if (isImovelHidrometrado(imovel)) { 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; boolean mesAnoValido = fachada.validaDataFaturamentoIncompativel(anoMesReferencia, anoMesAtual); if (!mesAnoValido) { sessao.setAttribute("nomeCampo", "dataLeituraAtual"); throw new ActionServletException("atencao.faturamento_data_incompativel", null,"Data de Leitura Atual Informada"); } if (dataLeituraAnteriorInformada != null && !dataLeituraAnteriorInformada.equals("")) { try { if (Util.validarDiaMesAno(dataLeituraAnteriorInformada)) { throw new ActionServletException("atencao.data.invalida", null, "Data Anterior"); } dataLeituraAnterior = dataFormatada.parse(dataLeituraAnteriorInformada); } catch (ParseException ex) { throw new ActionServletException("erro.sistema"); } Calendar dataAnterior = new GregorianCalendar(); dataAnterior.setTime(dataLeituraAnterior); 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 { if (Util.validarDiaMesAno(dataLeituraAnteriorInformada)) { throw new ActionServletException("atencao.data.invalida", null, "Data Anterior"); } 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; boolean anoMesInferiorValido = fachada.validaDataFaturamentoIncompativelInferior(anoMesReferencia, anoMesAnterior); try { if (!anoMesInferiorValido && !fachada.verificarInstalacaoSubstituicaoHidrometro(new Integer(idImovel), new MedicaoTipo(new Integer(tipoMedicao)))) { sessao.setAttribute("nomeCampo", "dataLeituraAnterior"); throw new ActionServletException("atencao.faturamento_data_incompativel", null, "Data de Leitura Anterior de Faturamento"); } } catch (NumberFormatException e) { } catch (ControladorException e) { } medicaoHistorico.setDataLeituraAnteriorFaturamento(dataLeituraAnterior); } if ((obterNumeroDigitosLeituraHidrometro(imovel) >= leituraAtual.length()) && (obterNumeroDigitosLeituraHidrometro(imovel) >= leituraAnterior.length())) { if (!("" + medicaoHistorico.getLeituraAnteriorFaturamento()).equals(leituraAnterior)) { LeituraSituacao leituraSituacaoAnterior = new LeituraSituacao(LeituraSituacao.LEITURA_ALTERADA); medicaoHistorico.setLeituraSituacaoAnterior(leituraSituacaoAnterior); } medicaoHistorico.setLeituraAnteriorFaturamento(new Integer(leituraAnterior)); } else { sessao.setAttribute("nomeCampo", "leituraAnterior"); throw new ActionServletException("atencao.digitos.leitura.maior.hidrometro"); } if (possuiAnormalidadeLeitura(idAnormalidadeLeitura)) { Collection anormalidadeLeituraEncontrada = obterAnormalidadeLeitura(fachada, idAnormalidadeLeitura); 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 (obterNumeroDigitosLeituraHidrometro(imovel) >= leituraAtual.length()) { medicaoHistorico.setLeituraAtualInformada(leituraAtual.equals("") ? null : new Integer(leituraAtual)); } else { sessao.setAttribute("nomeCampo", "leituraAtual"); throw new ActionServletException("atencao.digitos.leitura.maior.hidrometro"); } leituraSituacao = obterSituacaoLeitura(leituraAtual, indicadorConfirmacao, leituraSituacao); medicaoHistorico.setLeituraSituacaoAtual(leituraSituacao); if (consumoInformado != null && !consumoInformado.equalsIgnoreCase("")) { medicaoHistorico.setNumeroConsumoInformado(new Integer(consumoInformado)); } } else { if (possuiAnormalidadeLeitura(idAnormalidadeLeitura)) { Collection anormalidadeLeituraEncontrada = obterAnormalidadeLeitura(fachada, idAnormalidadeLeitura); if (anormalidadeLeituraEncontrada != null && !anormalidadeLeituraEncontrada.isEmpty()) { if (((LeituraAnormalidade) ((List) anormalidadeLeituraEncontrada).get(0)).getIndicadorImovelSemHidrometro().equals(ConstantesSistema.NAO)) { 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()); } } boolean ligacaoAgua = (Boolean) sessao.getAttribute("ligacaoAgua"); Integer idLeituraAnormalidade = null; if (possuiAnormalidadeLeitura(idAnormalidadeLeitura)) { idLeituraAnormalidade = new Integer(idAnormalidadeLeitura); } String confirmado = httpServletRequest.getParameter("confirmado"); if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")) { int consumo = 0; int consumoMedioMes = 0; if (leituraConsumoActionForm.getConsumoMedido() != null && !leituraConsumoActionForm.getConsumoMedido().equals("")) { consumoMedioMes = new Integer(leituraConsumoActionForm.getConsumoMedido()); } imovel.setId(new Integer(idImovel)); int qtdeEconomias = fachada.obterQuantidadeEconomias(imovel); boolean houveIntslacaoHidrometro = false; try { MedicaoTipo medicao = new MedicaoTipo(); if (tipoMedicao != null) { medicao.setId(new Integer(tipoMedicao)); houveIntslacaoHidrometro = fachada.verificarInstalacaoSubstituicaoHidrometro(imovel.getId(), medicao); } } catch (ControladorException e) { e.printStackTrace(); } int idLigacaoAgua = fachada.verificarTipoLigacao(imovel); int[] consumoMedioImovel = fachada.obterVolumeMedioAguaEsgoto(imovel.getId(), sistemaParametro.getAnoMesFaturamento(), idLigacaoAgua, 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/atualizarConsumoResumoAction.do"); return montarPaginaConfirmacao("atencao.invalido.consumo", httpServletRequest, actionMapping, null, null); } } } Usuario usuarioLogado = this.getUsuarioLogado(httpServletRequest); MotivoInterferenciaTipo motivoInterferenciaTipo = new MotivoInterferenciaTipo(); if (idMotivoInterferenciaTipo != null && idMotivoInterferenciaTipo > 0) { motivoInterferenciaTipo.setId(idMotivoInterferenciaTipo); } Integer index = null; if (sessao.getAttribute("index") != null) { index = (Integer) sessao.getAttribute("index"); } Collection colecaoIdsImovel = (Collection) sessao.getAttribute("colecaoIdsImovelTotal"); if (colecaoIdsImovel != null && !colecaoIdsImovel.isEmpty() && index != null) { ((ImovelMicromedicao) ((List) colecaoIdsImovel).get(index)).getMedicaoHistorico().setUsuarioAlteracao(usuarioLogado); } if(leituraSituacao.getId().equals(LeituraSituacao.CONFIRMADA)){ fachada.calcularLeituraConfirmada(new Integer(leituraAnterior), new Integer(leituraAtual), leituraSituacao, new Integer(idImovel), medicaoHistorico.getAnoMesReferencia(), faturamentoGrupo, sistemaParametro, dataLeituraAtualInformada, idLeituraAnormalidade, alterouAnormalidade); } else { fachada.atualizarLeituraConsumoResumido(new Integer(idImovel), medicaoHistorico.getMesAno().toString(), dataLeituraAnteriorInformada, leituraAnterior, dataLeituraAtualInformada, leituraAtual, consumoInformado, ligacaoAgua, idLeituraAnormalidade, leituraSituacao.getId(), faturamentoGrupo, usuarioLogado, alterouAnormalidade, motivoInterferenciaTipo, new Integer(tipoMedicao)); } httpServletRequest.setAttribute("sucesso", true); } return retorno; } private int obterNumeroDigitosLeituraHidrometro(Imovel imovel) { return imovel.getHidrometroInstalacaoHistorico() == null ? imovel.getLigacaoAgua().getHidrometroInstalacaoHistorico().getHidrometro().getNumeroDigitosLeitura().intValue() : imovel.getHidrometroInstalacaoHistorico().getHidrometro().getNumeroDigitosLeitura().intValue(); } private boolean isImovelHidrometrado(Imovel imovel) { return imovel.getHidrometroInstalacaoHistorico() != null || (imovel.getLigacaoAgua() != null && imovel.getLigacaoAgua().getHidrometroInstalacaoHistorico() != null); } private boolean possuiAnormalidadeLeitura(String idAnormalidadeLeitura) { return idAnormalidadeLeitura != null && !idAnormalidadeLeitura.trim().equals(""); } @SuppressWarnings("rawtypes") private Collection obterAnormalidadeLeitura(Fachada fachada, String idAnormalidadeLeitura) { FiltroLeituraAnormalidade filtroLeituraAnormalidade = new FiltroLeituraAnormalidade(); filtroLeituraAnormalidade.adicionarParametro(new ParametroSimples(FiltroLeituraAnormalidade.ID, idAnormalidadeLeitura)); Collection anormalidadeLeituraEncontrada = fachada.pesquisar(filtroLeituraAnormalidade, LeituraAnormalidade.class.getName()); return anormalidadeLeituraEncontrada; } private LeituraSituacao obterSituacaoLeitura(String leituraAtual, String indicadorConfirmacao, LeituraSituacao leituraSituacao) { 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); } } return leituraSituacao; } private boolean existeAltracaoAnormalidade(String idAnormalidadeLeitura, MedicaoHistorico medicaoHistorico) { boolean existeAlteracaoAnormalidade = false; if (medicaoHistorico.getLeituraAnormalidadeFaturamento() != null) { if (medicaoHistorico.getLeituraAnormalidadeFaturamento().getId() != null && idAnormalidadeLeitura != null && !idAnormalidadeLeitura.equals("")) { if (!medicaoHistorico.getLeituraAnormalidadeFaturamento().getId().toString().equalsIgnoreCase(idAnormalidadeLeitura)) { existeAlteracaoAnormalidade = true; } } else if (medicaoHistorico.getLeituraAnormalidadeFaturamento().getId() != null && idAnormalidadeLeitura == null) { existeAlteracaoAnormalidade = true; } else if (medicaoHistorico.getLeituraAnormalidadeFaturamento().getId() == null && idAnormalidadeLeitura != null && !idAnormalidadeLeitura.equals("")) { existeAlteracaoAnormalidade = true; } } else if (medicaoHistorico.getLeituraAnormalidadeFaturamento() == null && idAnormalidadeLeitura != null && !idAnormalidadeLeitura.equals("")) { existeAlteracaoAnormalidade = true; } return existeAlteracaoAnormalidade; } }