package gcom.relatorio.financeiro; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.relatorio.ConstantesRelatorios; import gcom.relatorio.RelatorioDataSource; import gcom.seguranca.acesso.usuario.Usuario; import gcom.tarefa.TarefaException; import gcom.tarefa.TarefaRelatorio; import gcom.util.agendadortarefas.AgendadorTarefas; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Map; public class RelatorioVolumesConsumidosNaoFaturados extends TarefaRelatorio { private static final long serialVersionUID = 1L; private Integer tipoRelatorio; private Integer mesAno; private String opcaoTotalizacao; private Integer idEntidade; public RelatorioVolumesConsumidosNaoFaturados(Usuario usuario) { super(usuario, ConstantesRelatorios.RELATORIO_VOLUMES_CONSUMIDOS_NAO_FATURADOS); } @Deprecated public RelatorioVolumesConsumidosNaoFaturados() { super(null, ""); } @Override public Object executar() throws TarefaException { tipoRelatorio = (Integer) getParametro("tipoRelatorio"); mesAno = (Integer) getParametro("mesAno"); opcaoTotalizacao = (String) getParametro("opcaoTotalizacao"); idEntidade = (Integer) getParametro("idEntidade"); Fachada fachada = Fachada.getInstancia(); Map<String, Object> parametros = new HashMap<String, Object>(); List<RelatorioVolumesConsumidosNaoFaturadosBean> beans = new ArrayList<RelatorioVolumesConsumidosNaoFaturadosBean>(); popularParametros(parametros); Collection<RelatorioVolumesConsumidosNaoFaturadosBean> pesquisa = fachada.pesquisarVolumesConsumidosNaoFaturados(mesAno, opcaoTotalizacao, idEntidade); if (pesquisa == null || pesquisa.isEmpty()) { throw new ActionServletException("atencao.pesquisa_inexistente", null, "Volumes Consumidos Nao Faturados"); } // ------------------------------ // -- Estrutura de Dados para Agrupamento // ------------------------------ Map<Integer, RelatorioVolumesConsumidosNaoFaturadosBean> estadoBeans = new HashMap<Integer, RelatorioVolumesConsumidosNaoFaturadosBean>(); Map<Integer, RelatorioVolumesConsumidosNaoFaturadosBean> unidadeBeans = new HashMap<Integer, RelatorioVolumesConsumidosNaoFaturadosBean>(); Map<Integer, RelatorioVolumesConsumidosNaoFaturadosBean> gerenciaBeans = new HashMap<Integer, RelatorioVolumesConsumidosNaoFaturadosBean>(); RelatorioVolumesConsumidosNaoFaturadosBean totalEstadoBean = new RelatorioVolumesConsumidosNaoFaturadosBean("TOT"); RelatorioVolumesConsumidosNaoFaturadosBean totalGerenciaBean = new RelatorioVolumesConsumidosNaoFaturadosBean("TOT"); RelatorioVolumesConsumidosNaoFaturadosBean totalUnidadeBean = new RelatorioVolumesConsumidosNaoFaturadosBean("TOT"); RelatorioVolumesConsumidosNaoFaturadosBean totalLocalidadeBean = new RelatorioVolumesConsumidosNaoFaturadosBean("TOT"); RelatorioVolumesConsumidosNaoFaturadosBean totalMunicipioBean = new RelatorioVolumesConsumidosNaoFaturadosBean("TOT"); // ------------------------------ // -- Processamento // ------------------------------ int idAntigoLocalidade = -1; int idAntigoUnidade = -1; int idAntigoGerencia = -1; int idAntigoMunicipio = -1; for (RelatorioVolumesConsumidosNaoFaturadosBean bean : pesquisa) { int idCategoria = bean.getCategoria().getId(); int idLocalidade = bean.getLocalidade().getId(); int idUnidade = bean.getUnidade().getId(); int idGerencia = bean.getGerencia().getId(); int idMunicipio = 0; if(bean.getMunicipio()!= null){ idMunicipio = bean.getMunicipio().getId(); } if (opcaoEstado()) { parametros.put("titulo", (String) this.getParametro("estado")); } else if (opcaoGerenciaRegional()) { parametros.put("titulo", bean.getDescricaoGerencia()); } else if (opcaoUnidadeNegocio()) { parametros.put("titulo", bean.getDescricaoUnidade()); } else if (opcaoLocalidade()) { parametros.put("titulo", bean.getDescricaoLocalidade()); } else if(opcaoMunicipio()){ parametros.put("titulo", bean.getDescricaoMunicipio()); } else{ parametros.put("titulo", ""); } // ------------------------------ // -- Localidade // ------------------------------ if (totalizacaoPorLocalidade()) { if (idLocalidade != idAntigoLocalidade) { if (idAntigoLocalidade != -1) { beans.add(totalLocalidadeBean.copy()); } idAntigoLocalidade = idLocalidade; totalLocalidadeBean.resetValues(); } else { bean.setLocalidade(null); } totalLocalidadeBean.sum(bean); totalLocalidadeBean.copyEntidades(bean); } // ------------------------------ // -- Unidade // ------------------------------ if (opcaoUnidadeNegocio() || totalizacaoPorUnidade() || opcaoTotalizacao.equals("estadoPorLocalidade") || opcaoTotalizacao.equals("gerenciaRegionalPorLocalidade") || opcaoTotalizacao.equals("estadoPorMunicipio")) { if (idUnidade != idAntigoUnidade) { if (idAntigoUnidade != -1) { adicionarLinhasTotalUnidade(beans, unidadeBeans, totalUnidadeBean.copy()); } idAntigoUnidade = idUnidade; unidadeBeans.clear(); totalUnidadeBean.resetValues(); } RelatorioVolumesConsumidosNaoFaturadosBean categoriaUnidadeBean = getBean(bean, unidadeBeans, idCategoria); categoriaUnidadeBean.sum(bean); totalUnidadeBean.sum(bean); totalUnidadeBean.copyEntidades(bean); } // ------------------------------ // -- Gerencia // ------------------------------ if (opcaoGerenciaRegional() || totalizacaoPorGerencia() || opcaoTotalizacao.equals("estadoPorUnidadeNegocio") || opcaoTotalizacao.equals("estadoPorLocalidade") || opcaoTotalizacao.equals("estadoPorMunicipio")){ if (idGerencia != idAntigoGerencia) { if (idAntigoGerencia != -1) { adicionarLinhasTotalGerencia(beans, gerenciaBeans, totalGerenciaBean.copy()); } idAntigoGerencia = idGerencia; gerenciaBeans.clear(); totalGerenciaBean.resetValues(); } RelatorioVolumesConsumidosNaoFaturadosBean categoriaGerenciaBean = getBean(bean, gerenciaBeans, idCategoria); categoriaGerenciaBean.sum(bean); totalGerenciaBean.sum(bean); totalGerenciaBean.copyEntidades(bean); } // ------------------------------ // -- Munic�pio // ------------------------------ if (totalizacaoPorMunicipio()) { if (idMunicipio != idAntigoMunicipio) { if (idAntigoMunicipio != -1) { beans.add(totalMunicipioBean.copy()); } idAntigoMunicipio = idMunicipio; totalMunicipioBean.resetValues(); } else { bean.setMunicipio(null); } totalMunicipioBean.sum(bean); totalMunicipioBean.copyEntidades(bean); } // ------------------------------ // -- Estado // ------------------------------ if (opcaoEstado()) { RelatorioVolumesConsumidosNaoFaturadosBean categoriaEstadoBean = getBean(bean, estadoBeans, idCategoria); categoriaEstadoBean.sum(bean); totalEstadoBean.sum(bean); } if (totalizacaoPorLocalidade()) { beans.add(bean); } if (totalizacaoPorMunicipio()) { beans.add(bean); } } if (opcaoLocalidade() || totalizacaoPorLocalidade()) { beans.add(totalLocalidadeBean); } if (opcaoUnidadeNegocio() || totalizacaoPorUnidade() || opcaoTotalizacao.equals("estadoPorLocalidade") || opcaoTotalizacao.equals("gerenciaRegionalPorLocalidade")) { adicionarLinhasTotalUnidade(beans, unidadeBeans, totalUnidadeBean); } if (opcaoGerenciaRegional() || totalizacaoPorGerencia() || opcaoTotalizacao.equals("estadoPorUnidadeNegocio") || opcaoTotalizacao.equals("estadoPorLocalidade") || opcaoTotalizacao.equals("gerenciaRegionalPorLocalidade")) { adicionarLinhasTotalGerencia(beans, gerenciaBeans, totalGerenciaBean); } if (opcaoEstado()) { adicionarLinhasTotalEstado(beans, estadoBeans, totalEstadoBean); } if (opcaoMunicipio() || totalizacaoPorMunicipio()) { beans.add(totalMunicipioBean); } byte[] retorno = this.gerarRelatorio(ConstantesRelatorios.RELATORIO_VOLUMES_CONSUMIDOS_NAO_FATURADOS, parametros, new RelatorioDataSource(beans), tipoRelatorio); return retorno; } private boolean opcaoEstado() { if (opcaoTotalizacao.equals("estado") || opcaoTotalizacao.equals("estadoPorGerenciaRegional") || opcaoTotalizacao.equals("estadoPorUnidadeNegocio") || opcaoTotalizacao.equals("estadoPorLocalidade") || opcaoTotalizacao.equals("estadoPorMunicipio")){ return true; } else { return false; } } private boolean opcaoGerenciaRegional() { if (opcaoTotalizacao.equals("gerenciaRegional") || opcaoTotalizacao.equals("gerenciaRegionalPorUnidadeNegocio") || opcaoTotalizacao.equals("gerenciaRegionalPorLocalidade")) { return true; } else { return false; } } private boolean opcaoUnidadeNegocio() { if (opcaoTotalizacao.equals("unidadeNegocio") || opcaoTotalizacao.equals("unidadeNegocioPorLocalidade")) { return true; } else { return false; } } private boolean opcaoLocalidade() { if (opcaoTotalizacao.equals("localidade")) { return true; } else { return false; } } private boolean opcaoMunicipio() { if (opcaoTotalizacao.equals("municipio")) { return true; } else { return false; } } private boolean totalizacaoPorGerencia() { if (opcaoTotalizacao.equals("estadoPorGerenciaRegional") || opcaoTotalizacao.equals("gerenciaRegional")) { return true; } else { return false; } } private boolean totalizacaoPorUnidade() { if (opcaoTotalizacao.equals("estadoPorUnidadeNegocio") || opcaoTotalizacao.equals("gerenciaRegionalPorUnidadeNegocio") || opcaoTotalizacao.equals("unidadeNegocio")) { return true; } else { return false; } } private boolean totalizacaoPorLocalidade() { if (opcaoTotalizacao.equals("estadoPorLocalidade") || opcaoTotalizacao.equals("gerenciaRegionalPorLocalidade") || opcaoTotalizacao.equals("unidadeNegocioPorLocalidade") || opcaoTotalizacao.equals("localidade")) { return true; } else { return false; } } private boolean totalizacaoPorMunicipio() { if (this.opcaoTotalizacao.equals("municipio") || this.opcaoTotalizacao.equals("estadoPorMunicipio")) { return true; } else { return false; } } private void adicionarLinhasTotalGerencia(List<RelatorioVolumesConsumidosNaoFaturadosBean> beans, Map<Integer, RelatorioVolumesConsumidosNaoFaturadosBean> gerenciaBeans, RelatorioVolumesConsumidosNaoFaturadosBean totalGerenciaBean) { boolean primeiroUnidade = true; List<RelatorioVolumesConsumidosNaoFaturadosBean> listUnidadeBeans = new ArrayList<RelatorioVolumesConsumidosNaoFaturadosBean>(gerenciaBeans.values()); listUnidadeBeans.add(totalGerenciaBean.copy()); for (RelatorioVolumesConsumidosNaoFaturadosBean bean : listUnidadeBeans) { if (primeiroUnidade) { primeiroUnidade = false; if (totalizacaoPorGerencia()) { bean.setDescricaoLocalidade(bean.getDescricaoGerencia()); } else { bean.setDescricaoLocalidade("TOTAL DA REGIONAL " + bean.getDescricaoGerencia()); } } else { bean.setDescricaoLocalidade(""); } beans.add(bean); } } private void adicionarLinhasTotalUnidade(List<RelatorioVolumesConsumidosNaoFaturadosBean> beans, Map<Integer, RelatorioVolumesConsumidosNaoFaturadosBean> unidadeBeans, RelatorioVolumesConsumidosNaoFaturadosBean totalUnidadeBean) { boolean primeiroUnidade = true; List<RelatorioVolumesConsumidosNaoFaturadosBean> listUnidadeBeans = new ArrayList<RelatorioVolumesConsumidosNaoFaturadosBean>(unidadeBeans.values()); listUnidadeBeans.add(totalUnidadeBean.copy()); for (RelatorioVolumesConsumidosNaoFaturadosBean bean : listUnidadeBeans) { if (primeiroUnidade) { primeiroUnidade = false; if (totalizacaoPorUnidade()) { bean.setDescricaoLocalidade(bean.getDescricaoUnidade()); } else { bean.setDescricaoLocalidade("TOTAL DA UNIDADE " + bean.getDescricaoUnidade()); } } else { bean.setDescricaoLocalidade(""); } beans.add(bean); } } private void adicionarLinhasTotalEstado(List<RelatorioVolumesConsumidosNaoFaturadosBean> beans, Map<Integer, RelatorioVolumesConsumidosNaoFaturadosBean> estadoBeans, RelatorioVolumesConsumidosNaoFaturadosBean totalEstadoBean) { boolean primeiroEstado = true; List<RelatorioVolumesConsumidosNaoFaturadosBean> listEstadoBeans = new ArrayList<RelatorioVolumesConsumidosNaoFaturadosBean>(estadoBeans.values()); listEstadoBeans.add(totalEstadoBean); for (RelatorioVolumesConsumidosNaoFaturadosBean bean : listEstadoBeans) { if (primeiroEstado) { primeiroEstado = false; totalEstadoBean.copyEntidades(bean); bean.setDescricaoLocalidade("TOTAL DO ESTADO"); } else { bean.setDescricaoLocalidade(""); } bean.setTotalEstado(true); beans.add(bean); } } public RelatorioVolumesConsumidosNaoFaturadosBean getBean(RelatorioVolumesConsumidosNaoFaturadosBean bean, Map<Integer, RelatorioVolumesConsumidosNaoFaturadosBean> hash, Integer id) { RelatorioVolumesConsumidosNaoFaturadosBean result = hash.get(id); if (result == null) { result = bean.copy(); result.resetValues(); hash.put(id, result); } return result; } public void popularParametros(Map<String, Object> parametros) { Fachada fachada = Fachada.getInstancia(); String ano = mesAno.toString().substring(0, 4); String mes = mesAno.toString().substring(4); Calendar calendar = GregorianCalendar.getInstance(); calendar.set(new Integer(ano), new Integer(mes) -1, 1); String dia = "" + calendar.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); parametros.put("dataFinal", dia + "/" + mes + "/" + ano); SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema(); parametros.put("imagem", sistemaParametro.getImagemRelatorio()); parametros.put("tipoRelatorio", "RF0822"); this.addParametro("estado", "ESTADO DE " + sistemaParametro.getNomeEstado()); if (opcaoTotalizacao.equals("estado")) { parametros.put("opcaoTotalizacao", "ESTADO"); } else if (totalizacaoPorGerencia()) { parametros.put("opcaoTotalizacao", "GER�NCIA REGIONAL"); } else if (totalizacaoPorUnidade()) { parametros.put("opcaoTotalizacao", "UNIDADE DE NEG�CIO"); } else if (totalizacaoPorLocalidade()) { parametros.put("opcaoTotalizacao", "LOCALIDADE"); }else if(totalizacaoPorMunicipio()){ parametros.put("opcaoTotalizacao", "MUNIC�PIO"); } } @Override public int calcularTotalRegistrosRelatorio() { return 1; } @Override public void agendarTarefaBatch() { AgendadorTarefas.agendarTarefa("RelatorioVolumesConsumidosNaoFaturados", this); } }