package gcom.gui.micromedicao; import gcom.batch.FiltroProcessoIniciado; import gcom.batch.Processo; import gcom.batch.ProcessoIniciado; import gcom.batch.ProcessoSituacao; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.micromedicao.ArquivoTextoRoteiroEmpresa; import gcom.micromedicao.FiltroRota; import gcom.micromedicao.Rota; import gcom.micromedicao.SituacaoTransmissaoLeitura; import gcom.micromedicao.leitura.FiltroLeituraAnormalidade; import gcom.micromedicao.leitura.LeituraAnormalidade; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import gcom.util.filtro.ParametroSimplesIn; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; 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; /** * <p> * [UC0936] Informar Leitura por Rota * </p> * * @author Thiago Nascimento */ public class InformarLeituraRotaAction extends GcomAction { @Override public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { HttpSession sessao = httpServletRequest.getSession(false); ActionForward retorno = actionMapping.findForward("InformarLeituraRotaAction"); InformarLeituraRotaActionForm form = (InformarLeituraRotaActionForm) actionForm; Fachada fachada = Fachada.getInstancia(); FiltroLeituraAnormalidade filtro = new FiltroLeituraAnormalidade(FiltroLeituraAnormalidade.ID); filtro.adicionarParametro(new ParametroSimples(FiltroLeituraAnormalidade.INDICADOR_USO, ConstantesSistema.SIM)); filtro.adicionarParametro(new ParametroSimples(FiltroLeituraAnormalidade.INDICADOR_USO_SISTEMA, ConstantesSistema.NAO)); StringBuffer faixas = new StringBuffer(); int indice = form.getIndice().intValue(); char delimitador = '/'; char delimitador2 = ';'; try { String temPreenchido = httpServletRequest.getParameter("temPreenchido"); if (!temPreenchido.trim().equals("0")) { FiltroRota filtroRota = new FiltroRota(); filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.LOCALIDADE_ID, form.getIdLocalidade())); filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.SETOR_COMERCIAL_CODIGO, form.getCodigoSetorComercial())); filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.CODIGO_ROTA, form.getRota())); Collection colecao = fachada.pesquisar(filtroRota, Rota.class.getName()); Rota rota = null; if (!Util.isVazioOrNulo(colecao)) { rota = (Rota) Util.retonarObjetoDeColecao(colecao); } Collection<Integer> processoSituacao = new ArrayList<Integer>(); processoSituacao.add(ProcessoSituacao.EM_ESPERA); processoSituacao.add(ProcessoSituacao.EM_PROCESSAMENTO); FiltroProcessoIniciado filtroProcessoIniciado = new FiltroProcessoIniciado(); filtroProcessoIniciado.adicionarParametro(new ParametroSimples(FiltroProcessoIniciado.ID_PROCESSO, Processo.FATURAR_GRUPO_FATURAMENTO)); filtroProcessoIniciado.adicionarParametro(new ParametroSimples(FiltroProcessoIniciado.CODIGO_GRUPO, rota.getFaturamentoGrupo().getId())); filtroProcessoIniciado.adicionarParametro(new ParametroSimplesIn(FiltroProcessoIniciado.PROCESSO_SITUACAO_ID, processoSituacao)); Collection colecaoProcessos = fachada.pesquisar(filtroProcessoIniciado, ProcessoIniciado.class.getName()); if (!Util.isVazioOrNulo(colecaoProcessos)) { throw new ActionServletException("atencao.processo_faturamento_em_execucao"); } Vector<DadosMovimentacao> dados = new Vector<DadosMovimentacao>(); int lengthLeituras = form.getLeituras().length; String[] leituras = form.getLeituras(); String[] anormalidades = form.getAnormalidades(); String[] datas = form.getDatas(); /* * Auxiliar criada para remover 1 dos arrays de leituras, * anormalidades e datas quando existir um dado com msg de * supressao ou hidrometro retirado. */ int auxiliar = 0; for (int i = (indice - 1) * 12; i < (indice - 1) * 12 + lengthLeituras; i++) { DadosMovimentacao dado = form.getDados().get(i); int aux = i % 12; if (dado.getMsgImovelSuprimidoOuHidrometroRetirado() == null || dado.getMsgImovelSuprimidoOuHidrometroRetirado().equals("")) { if (auxiliar > 0) { aux = aux - auxiliar; } if (leituras[aux] != null && !leituras[aux].equals("")) { dado.setLeituraHidrometro(new Integer(leituras[aux])); if (dado.getLeituraHidrometro().intValue() >= dado.getFaixaLeituraEsperadaInferior().intValue() && dado.getLeituraHidrometro().intValue() <= dado.getFaixaLeituraEsperadaSuperior().intValue()) { dado.setIndicadorConfirmacaoLeitura(new Byte((byte) 1)); } else { dado.setIndicadorConfirmacaoLeitura(new Byte((byte) 0)); } } else { dado.setLeituraHidrometro(null); dado.setIndicadorConfirmacaoLeitura(new Byte((byte) 0)); } if (anormalidades[aux] != null && !anormalidades[aux].equals("")) { dado.setCodigoAnormalidade(new Integer(anormalidades[aux])); } else { dado.setCodigoAnormalidade(new Integer(0)); } if (datas[aux] != null && !datas[aux].equals("")) { dado.setDataLeituraCampo(Util.converteStringParaDate(datas[aux])); if (dado.getDataLeituraCampo() == null) { throw new ActionServletException("atencao.date", null, "Data"); } else if (dado.getDataLeituraCampo().after(new Date())) { throw new ActionServletException("atencao.data_menor_que_atual", null, "Leitura"); } } } else { /* * aumenta um indice no tamanho de dados da tela, pois * nao conta com os dados que ligacao de agua suprimida * ou hidrometro retirado. */ lengthLeituras = lengthLeituras + 1; auxiliar = auxiliar + 1; dado.setLeituraHidrometro(null); dado.setIndicadorConfirmacaoLeitura(new Byte((byte) 0)); dado.setCodigoAnormalidade(new Integer(0)); dado.setDataLeituraCampo(new Date()); } dados.add(dado); } fachada.atualizarLeituraAnormalidadeSemCelular(dados); } String action = httpServletRequest.getParameter("action").toString(); boolean concluir = false; if (action.equals("voltar")) { // Voltar indice--; } else if (action.equals("avancar")) { // Avan�ar indice++; } else if (action.equals("concluir")) { // Concluir Iterator<DadosMovimentacao> it = form.getDados().iterator(); concluir = true; boolean naoAcabou = false; while (it.hasNext()) { DadosMovimentacao dado = it.next(); if (dado.getDataLeituraCampo() == null || (dado.getLeituraHidrometro() == null && dado.getCodigoAnormalidade() == null)) { if (dado.getMsgImovelSuprimidoOuHidrometroRetirado() == null || dado.getMsgImovelSuprimidoOuHidrometroRetirado().equals("")) { naoAcabou = true; break; } } } if (!naoAcabou) { FiltroRota filtroRota = new FiltroRota(); filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.LOCALIDADE_ID, form.getIdLocalidade())); filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.SETOR_COMERCIAL_CODIGO, form.getCodigoSetorComercial())); filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.CODIGO_ROTA, form.getRota())); Collection colecao = fachada.pesquisar(filtroRota, Rota.class.getName()); Rota rota = null; if (colecao != null && !colecao.isEmpty()) { rota = (Rota) colecao.iterator().next(); } Collection<Integer> processoSituacao = new ArrayList<Integer>(); processoSituacao.add(ProcessoSituacao.EM_ESPERA); processoSituacao.add(ProcessoSituacao.EM_PROCESSAMENTO); FiltroProcessoIniciado filtroProcessoIniciado = new FiltroProcessoIniciado(); filtroProcessoIniciado.adicionarParametro(new ParametroSimples(FiltroProcessoIniciado.ID_PROCESSO, Processo.FATURAR_GRUPO_FATURAMENTO)); filtroProcessoIniciado.adicionarParametro(new ParametroSimples(FiltroProcessoIniciado.CODIGO_GRUPO, rota.getFaturamentoGrupo().getId())); filtroProcessoIniciado.adicionarParametro(new ParametroSimplesIn(FiltroProcessoIniciado.PROCESSO_SITUACAO_ID, processoSituacao)); Collection colecaoProcessos = fachada.pesquisar(filtroProcessoIniciado, ProcessoIniciado.class.getName()); if (!Util.isVazioOrNulo(colecaoProcessos)) { throw new ActionServletException("atencao.processo_faturamento_em_execucao"); } // FiltroRota filtroRota = new FiltroRota(); // filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.FATURAMENTO_GRUPO); // // filtroRota.adicionarParametro(new // ParametroSimples(FiltroRota.LOCALIDADE_ID, // form.getIdLocalidade())); // filtroRota.adicionarParametro(new // ParametroSimples(FiltroRota.SETOR_COMERCIAL_CODIGO, // form.getCodigoSetorComercial())); // filtroRota.adicionarParametro(new // ParametroSimples(FiltroRota.CODIGO_ROTA, // form.getRota())); // // Collection colecao = f.pesquisar(filtroRota, // Rota.class.getName()); // // if(colecao !=null && !colecao.isEmpty()){ // Rota rota = (Rota)colecao.iterator().next(); // f.efetuarRateioDeConsumoPorRota(rota, // rota.getFaturamentoGrupo().getAnoMesReferencia()); // } Date dataRealizacao = null; if (form.getDados().get(0) != null && form.getDados().get(0).getDataLeituraCampo() != null && !form.getDados().get(0).getDataLeituraCampo().equals("")) { dataRealizacao = form.getDados().get(0).getDataLeituraCampo(); } else { dataRealizacao = new Date(); } fachada.atualizarFaturamentoAtividadeCronogramaRegistrarConsistirEfetuarLeitura(form.getDados().get(0).getGrupoFaturamento(), dataRealizacao); Iterator<DadosMovimentacao> itera = form.getDados().iterator(); ArquivoTextoRoteiroEmpresa arquivoTextoRoteiroEmpresa = null; while (itera.hasNext()) { DadosMovimentacao dado = itera.next(); if (dado.getArquivoTextoRoteiroEmpresa() != null) { arquivoTextoRoteiroEmpresa = dado.getArquivoTextoRoteiroEmpresa(); break; } } if (arquivoTextoRoteiroEmpresa != null && arquivoTextoRoteiroEmpresa.getSituacaoTransmissaoLeitura() != null && arquivoTextoRoteiroEmpresa.getSituacaoTransmissaoLeitura().getId().compareTo(SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO) != 0) { arquivoTextoRoteiroEmpresa.setSituacaoTransmissaoLeitura(new SituacaoTransmissaoLeitura(SituacaoTransmissaoLeitura.FINALIZADO_POR_DIGITACAO)); arquivoTextoRoteiroEmpresa.setUltimaAlteracao(new Date()); fachada.atualizar(arquivoTextoRoteiroEmpresa); } retorno = actionMapping.findForward("telaSucesso"); montarPaginaSucesso(httpServletRequest, "Leituras e Anormalidades da Rota inseridas com sucesso", "Leituras e Anormalidades por Rota", "exibirInformarLeituraRotaAction.do?menu=sim"); } else { // Mensagem de erro throw new ActionServletException("atencao.leitura_rota_nao_concluida", null, form.getRota()); } } if (!concluir) { form.setIndice(new Integer(indice)); Collection<DadosMovimentacao> dados12 = new ArrayList<DadosMovimentacao>(); for (int i = (indice - 1) * 12; i < (indice - 1) * 12 + 12 && i < form.getDados().size(); i++) { DadosMovimentacao dado = form.getDados().get(i); dados12.add(dado); faixas.append(dado.getFaixaLeituraEsperadaInferior()); faixas.append(delimitador2); faixas.append(dado.getFaixaLeituraEsperadaSuperior()); if (i + 1 < (indice - 1) * 12 + 12 && i + 1 < form.getDados().size()) { faixas.append(delimitador); } } // Novos 12 imoveis sessao.setAttribute("colecaoLeituras", dados12); httpServletRequest.setAttribute("qnt", "" + dados12.size()); // Anormalidades do banco Collection colecaoLeituraAnormalidade = Fachada.getInstancia().pesquisar(filtro, LeituraAnormalidade.class.getName()); Iterator iterator = colecaoLeituraAnormalidade.iterator(); StringBuffer anor = new StringBuffer(); while (iterator.hasNext()) { LeituraAnormalidade l = (LeituraAnormalidade) iterator.next(); anor.append(l.getId().toString()); anor.append(delimitador2); anor.append(l.getIndicadorLeitura().toString()); if (iterator.hasNext()) { anor.append(delimitador); } } httpServletRequest.setAttribute("anormalidadesBanco", anor.toString()); httpServletRequest.setAttribute("faixa", faixas.toString()); } } catch (NumberFormatException n) { throw new ActionServletException("atencao.integer", n, "Leitura ou Anormalidade"); } catch (IllegalArgumentException i) { throw new ActionServletException("atencao.date", i, "Data"); } return retorno; } // // private void verificaGrupoFaturado( // String idLocalidade, // String cdSetorComercial, // String cdRota, // InformarLeituraRotaActionForm form, // HttpServletRequest httpServletRequest, Fachada fachada) { // // SistemaParametro sistemaParametro = // fachada.pesquisarParametrosDoSistema(); // // FiltroRota filtroRota = new FiltroRota(); // filtroRota.adicionarParametro(new // ParametroSimples(FiltroRota.CODIGO_ROTA, cdRota)); // filtroRota.adicionarParametro(new // ParametroSimples(FiltroRota.LOCALIDADE_ID, idLocalidade)); // filtroRota.adicionarParametro(new // ParametroSimples(FiltroRota.SETOR_COMERCIAL_CODIGO,cdSetorComercial)); // // filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.SETOR_COMERCIAL); // filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.LOCALIDADE); // filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.FATURAMENTO_GRUPO); // filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.EMPRESA); // // Collection pesquisa = fachada.pesquisar(filtroRota, // Rota.class.getName()); // // if (pesquisa != null && !pesquisa.isEmpty()) { // Rota rota = (Rota) Util.retonarObjetoDeColecao(pesquisa); // // FaturamentoGrupo grupoFaturamento = rota.getFaturamentoGrupo(); // Integer anoMesFaturamento = sistemaParametro.getAnoMesFaturamento(); // // if(Util.compararAnoMesReferencia(grupoFaturamento.getAnoMesReferencia(), // anoMesFaturamento, ">") ){ // throw new ActionServletException("atencao.grupo.ja.faturado"); // } // } // } // }