package gcom.gui.faturamento; import gcom.cadastro.localidade.FiltroLocalidade; import gcom.cadastro.localidade.Localidade; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.gui.micromedicao.DadosMovimentacao; import gcom.micromedicao.FiltroRota; import gcom.micromedicao.Rota; import gcom.micromedicao.leitura.FiltroLeituraAnormalidade; import gcom.micromedicao.leitura.LeituraAnormalidade; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.acesso.usuario.UsuarioAbrangencia; import gcom.util.ConstantesSistema; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; 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; public class ExibirFaturamentoSeletivoAction extends GcomAction { private int qtdRgistrosExibidos = 12; @Override public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { HttpSession sessao = httpServletRequest.getSession(false); ActionForward retorno = actionMapping.findForward("exibirFaturamentoSeletivo"); Usuario usuarioLogado = this.getUsuarioLogado(httpServletRequest); FaturamentoSeletivoActionForm form = (FaturamentoSeletivoActionForm) actionForm; limparLeiturasAntigas(form); 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)); Fachada fachada = Fachada.getInstancia(); StringBuffer faixas = new StringBuffer(); Integer matriculaImovel = null; if (form.getMatriculaImovel() != null && !form.getMatriculaImovel().equals("")) { matriculaImovel = new Integer(form.getMatriculaImovel()); } verificarAbrangenciaUsuario(httpServletRequest, usuarioLogado, Util.converterStringParaInteger(form.getIdLocalidade())); Rota rota = obterRota(form, fachada); if (rota != null) { form.setDescricaoRota(getDescricaoRota(rota)); Collection<DadosMovimentacao> dados = fachada.buscarImoveisFaturamentoSeletivo(matriculaImovel, rota, form.getTipo().trim().equals("1")); if (dados != null && !dados.isEmpty()) { Vector<DadosMovimentacao> v = new Vector<DadosMovimentacao>(); v.addAll(dados); form.setDados(v); form.setIndice(new Integer(1)); form.setTotal(obterQtdTotalPaginas(dados)); Collection<DadosMovimentacao> dadosExibicao = new ArrayList<DadosMovimentacao>(); Iterator<DadosMovimentacao> it = dados.iterator(); char delimitador = '/'; char delimitador2 = ';'; List<ImovelFaturamentoSeletivo> imoveisFaturamentoSeletivo = new ArrayList<ImovelFaturamentoSeletivo>(); for (int i = 0; i < this.qtdRgistrosExibidos && it.hasNext(); i++) { ImovelFaturamentoSeletivo imovel = new ImovelFaturamentoSeletivo(); DadosMovimentacao dado = it.next(); dado.getInscricao(); faixas.append(dado.getFaixaLeituraEsperadaInferior()); faixas.append(delimitador2); faixas.append(dado.getFaixaLeituraEsperadaSuperior()); if (i + 1 < this.qtdRgistrosExibidos && it.hasNext()) { faixas.append(delimitador); } dadosExibicao.add(dado); imovel.setDadoMovimentacao(dado); imovel.setIdImovel(dado.getMatriculaImovel()); imoveisFaturamentoSeletivo.add(imovel); } form.setColecaoImoveisFaturamentoSeletivo(imoveisFaturamentoSeletivo); sessao.setAttribute("colecaoLeituras", form.getColecaoImoveisFaturamentoSeletivo()); sessao.setAttribute("form", form); httpServletRequest.setAttribute("qnt", "" + dadosExibicao.size()); listarAnormalidadesSessao(httpServletRequest, filtro,delimitador, delimitador2); httpServletRequest.setAttribute("faixa", faixas.toString()); } else { throw new ActionServletException("atencao.rota_sem_imovel_para_leitura", form.getRota()); } } else { throw new ActionServletException("atencao.pesquisa.rota_inexistente"); } httpServletRequest.setAttribute("nomeCampo", "rota"); return retorno; } @SuppressWarnings("unchecked") private Rota obterRota(FaturamentoSeletivoActionForm form, Fachada fachada) { Rota rota = null; FiltroRota filtroRota = new FiltroRota(); filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.EMPRESA); filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.FATURAMENTO_GRUPO); filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.SETOR_COMERCIAL); filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.LOCALIDADE); filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.LEITURA_TIPO); 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<Rota> colecao = (Collection<Rota>)fachada.pesquisar(filtroRota, Rota.class.getName()); if (colecao != null && !colecao.isEmpty()) { rota = (Rota) colecao.iterator().next(); } return rota; } @SuppressWarnings("unchecked") private void listarAnormalidadesSessao(HttpServletRequest httpServletRequest, FiltroLeituraAnormalidade filtro, char delimitador, char delimitador2) { Collection<LeituraAnormalidade> colecaoLeituraAnormalidade = Fachada.getInstancia().pesquisar(filtro, LeituraAnormalidade.class.getName()); Iterator<LeituraAnormalidade> iterator = colecaoLeituraAnormalidade.iterator(); StringBuffer anormalidades = new StringBuffer(); while (iterator.hasNext()) { LeituraAnormalidade l = (LeituraAnormalidade) iterator.next(); anormalidades.append(l.getId().toString()); anormalidades.append(delimitador2); anormalidades.append(l.getIndicadorLeitura().toString()); if (iterator.hasNext()) { anormalidades.append(delimitador); } } httpServletRequest.setAttribute("anormalidadesBanco", anormalidades.toString()); } private Integer obterQtdTotalPaginas(Collection<DadosMovimentacao> dados) { Integer total = 0; if (dados.size() % this.qtdRgistrosExibidos == 0) { total = new Integer(dados.size() / this.qtdRgistrosExibidos); } else { total = new Integer((dados.size() / this.qtdRgistrosExibidos) + 1); } return total; } private String getDescricaoRota(Rota rota) { return rota.getEmpresa().getDescricao() + " " + rota.getFaturamentoGrupo().getDescricaoAbreviada() + " " + rota.getSetorComercial().getLocalidade().getId() + "." + rota.getSetorComercial().getCodigo() + "." + rota.getCodigo(); } private void limparLeiturasAntigas(FaturamentoSeletivoActionForm form) { form.setAnormalidades(null); form.setLeituras(null); form.setDatas(null); } private void verificarAbrangenciaUsuario(HttpServletRequest httpServletRequest, Usuario usuarioLogado, Integer idLocalidade) { Fachada fachada = Fachada.getInstancia(); Localidade localidade = obterLocalidade(idLocalidade, fachada); if (usuarioLogado.getUsuarioAbrangencia().getId().equals(UsuarioAbrangencia.LOCALIDADE)) { if (!usuarioLogado.getLocalidade().getId().equals(idLocalidade)) { throw new ActionServletException("atencao.acesso.negado.abrangencia"); } } else if (usuarioLogado.getUsuarioAbrangencia().getId().equals(UsuarioAbrangencia.GERENCIA_REGIONAL)) { if (!usuarioLogado.getGerenciaRegional().getId().equals(localidade.getGerenciaRegional().getId())) { throw new ActionServletException("atencao.acesso.negado.abrangencia"); } } else if (usuarioLogado.getUsuarioAbrangencia().getId().equals(UsuarioAbrangencia.UNIDADE_NEGOCIO)) { if (!usuarioLogado.getUnidadeNegocio().getId().equals(localidade.getUnidadeNegocio().getId())) { throw new ActionServletException("atencao.acesso.negado.abrangencia"); } } else if (usuarioLogado.getUsuarioAbrangencia().getId().equals(UsuarioAbrangencia.ELO_POLO)) { if (!usuarioLogado.getLocalidadeElo().getId().equals(localidade.getLocalidade().getId())) { throw new ActionServletException("atencao.acesso.negado.abrangencia"); } } } @SuppressWarnings("unchecked") private Localidade obterLocalidade(Integer idLocalidade, Fachada fachada) { FiltroLocalidade filtroLocalidade = new FiltroLocalidade(); filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID, idLocalidade)); Collection<Localidade> colecaoLocalidade = (Collection<Localidade>) fachada.pesquisar(filtroLocalidade, Localidade.class.getName()); Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(colecaoLocalidade); return localidade; } }