br.gov.jfrj.siga.relatorio.HistoricoUsuarioRelatorio.java Source code

Java tutorial

Introduction

Here is the source code for br.gov.jfrj.siga.relatorio.HistoricoUsuarioRelatorio.java

Source

/*******************************************************************************
 * Copyright (c) 2006 - 2011 SJRJ.
 * 
 *     This file is part of SIGA.
 * 
 *     SIGA is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     SIGA is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with SIGA.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/
package br.gov.jfrj.siga.relatorio;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;

import org.hibernate.Query;

import ar.com.fdvs.dj.domain.builders.DJBuilderException;
import br.gov.jfrj.relatorio.dinamico.AbstractRelatorioBaseBuilder;
import br.gov.jfrj.relatorio.dinamico.RelatorioRapido;
import br.gov.jfrj.relatorio.dinamico.RelatorioTemplate;
import br.gov.jfrj.siga.cp.CpConfiguracao;
import br.gov.jfrj.siga.cp.CpPerfil;
import br.gov.jfrj.siga.cp.CpServico;
import br.gov.jfrj.siga.cp.CpTipoConfiguracao;
import br.gov.jfrj.siga.cp.bl.Cp;
import br.gov.jfrj.siga.dp.CpOrgaoUsuario;
import br.gov.jfrj.siga.dp.DpLotacao;
import br.gov.jfrj.siga.dp.DpPessoa;
import br.gov.jfrj.siga.dp.dao.CpDao;
import br.gov.jfrj.siga.sinc.lib.Item;
import br.gov.jfrj.siga.sinc.lib.Sincronizador;
import br.gov.jfrj.siga.sinc.lib.Sincronizavel;

public class HistoricoUsuarioRelatorio extends RelatorioTemplate {
    private DpPessoa dpPessoa;
    private List<DpPessoa> pessoasDoUsuario;
    private Date dtAnterior;
    private DpLotacao lotacaoAnterior;

    /**
     * @return the pessoasDoUsuario
     */
    public List<DpPessoa> getPessoasDoUsuario() {
        return pessoasDoUsuario;
    }

    /**
     * @param pessoasDoUsuario
     *            the pessoasDoUsuario to set
     */
    public void setPessoasDoUsuario(List<DpPessoa> pessoasDoUsuario) {
        this.pessoasDoUsuario = pessoasDoUsuario;
    }

    /**
     * @return the dtAnterior
     */
    public Date getDtAnterior() {
        return dtAnterior;
    }

    /**
     * @param dtAnterior
     *            the dtAnterior to set
     */
    public void setDtAnterior(Date dtAnterior) {
        this.dtAnterior = dtAnterior;
    }

    /**
     * @return the lotacaoAnterior
     */
    public DpLotacao getLotacaoAnterior() {
        return lotacaoAnterior;
    }

    /**
     * @param lotacaoAnterior
     *            the lotacaoAnterior to set
     */
    public void setLotacaoAnterior(DpLotacao lotacaoAnterior) {
        this.lotacaoAnterior = lotacaoAnterior;
    }

    @SuppressWarnings("unchecked")
    public HistoricoUsuarioRelatorio(Map parametros) throws DJBuilderException {
        super(parametros);
        if (parametros.get("idPessoa") == null) {
            throw new DJBuilderException("Parmetro idPessoa no informado!");
        }
        try {
            Long t_lngIdPessoa = Long.parseLong((String) parametros.get("idPessoa"));
            setDpPessoa(dao().consultar(t_lngIdPessoa, DpPessoa.class, false));
        } catch (Exception e) {
            throw new DJBuilderException("Parmetro idPessoa invlido!");
        }
        setPessoasDoUsuario(obterPessoasDoUsuario());
        @SuppressWarnings("unused")
        int conta = 0;
    }

    @Override
    public AbstractRelatorioBaseBuilder configurarRelatorio() throws DJBuilderException {
        this.setTemplateFile(null);
        this.setTitle("Histrico de Usurio: " + "(" + dpPessoa.getSesbPessoa() + dpPessoa.getMatricula() + ") "
                + dpPessoa.getNomePessoa());
        this.addColuna("Lotao", 0, RelatorioRapido.ESQUERDA, true, false);
        this.addColuna("Desde", 12, RelatorioRapido.ESQUERDA, false, false);
        this.addColuna("Servio", 40, RelatorioRapido.ESQUERDA, false, false);
        this.addColuna("Situao", 15, RelatorioRapido.ESQUERDA, false, false);
        this.addColuna("Origem", 13, RelatorioRapido.ESQUERDA, false, false);
        this.addColuna("Cadastrante", 20, RelatorioRapido.ESQUERDA, false, false);
        return this;
    }

    /**
     * Preenche os dados com as informaes da configurao j formatados
     * 
     * @param cfga
     *            - Configurao acesso
     * @param dados
     *            - coleo de linhas do relatrio
     */

    private void processarItem(Item itm, List<String> dados, Date dt) {

        AlteracaoDireitosItem novo = (AlteracaoDireitosItem) itm.getNovo();
        DpLotacao lot = novo.getPessoa().getLotacao();
        try {
            dados.add(lot.getSiglaLotacao());
        } catch (Exception e) {
            dados.add("");
        }
        try {
            if (getDtAnterior() == null || !printDate(getDtAnterior()).equals(printDate(dt))
                    || getLotacaoAnterior() == null || !lot.equals(getLotacaoAnterior())) {
                dados.add(printDate(dt));
            } else {
                dados.add("");
            }
        } catch (Exception e) {
            dados.add(" *");
        }
        try {
            dados.add(novo.getServico().getDescricao());
        } catch (Exception e) {
            dados.add("");
        }
        try {
            dados.add(novo.getSituacao().getDscSitConfiguracao());
        } catch (Exception e) {
            dados.add("");
        }
        try {
            dados.add(novo.printOrigemCurta());
        } catch (Exception e) {
            dados.add("");
        }

        try {
            dados.add(String.valueOf(novo.getCadastrante().getSesbPessoa() + novo.getCadastrante().getMatricula()));
        } catch (Exception e) {
            dados.add("");
        }
        setDtAnterior(dt);
        setLotacaoAnterior(lot);
    }

    private String printDate(Date dte) {
        try {
            SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
            return df.format(dte);
        } catch (Exception e) {
            return "";
        }
    }

    private SortedSet<Date> obterDatasRelevantes() {
        SortedSet<Date> datas = new TreeSet<Date>();
        datas.addAll(obterDatasAlteracaoPessoa());
        datas.addAll(obterDatasAlteracaoConfiguracao());
        datas.add(new Date());
        return datas;
    }

    private ArrayList<Date> obterDatasAlteracaoPessoa() {
        ArrayList<Date> arlDatas = new ArrayList<Date>();
        for (DpPessoa pes : getPessoasDoUsuario()) {
            arlDatas.add(pes.getDataInicio());
            if (pes.getDataFim() != null) {
                arlDatas.add(pes.getDataFim());
            }
        }
        return arlDatas;
    }

    private DpPessoa obterPessoaDoUsuarioAtivaNaData(Date dt) {
        for (DpPessoa pes : getPessoasDoUsuario()) {
            if (pes.ativaNaData(dt)) {
                return pes;
            }
        }
        return getDpPessoa();
    }

    private ArrayList<Date> obterDatasAlteracaoConfiguracao() {
        List<CpConfiguracao> confs = dao().listarConfiguracoes();
        ArrayList<Date> arlDatas = new ArrayList<Date>();
        for (CpConfiguracao conf : confs) {

            if (conf.getCpTipoConfiguracao() != null) {
                if (conf.getCpTipoConfiguracao().getIdTpConfiguracao()
                        .equals(CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO)
                        || conf.getCpTipoConfiguracao().getIdTpConfiguracao()
                                .equals(CpTipoConfiguracao.TIPO_CONFIG_PERTENCER)) {

                    if (conf.getHisDtIni() != null) {
                        arlDatas.add(conf.getHisDtIni());
                    }

                    if (conf.getHisDtFim() != null) {
                        arlDatas.add(conf.getHisDtFim());
                    }

                }

            }
        }
        return arlDatas;
    }

    @SuppressWarnings("unchecked")
    private List<DpPessoa> obterPessoasDoUsuario() {
        final Query queryPessoas = dao().getSessao()
                .getNamedQuery("consultarPorIdInicialDpPessoaInclusiveFechadas");
        Long t_lngIdPessoaInicial = getDpPessoa().getIdInicial();
        queryPessoas.setLong("idPessoaIni", t_lngIdPessoaInicial);
        return (List<DpPessoa>) queryPessoas.list();
    }

    /**
     * Processa as configuraes ativas ou no para os vrios ids da pessoa
     * (mesmo id inicial que a pessoa selecionada)
     */

    @SuppressWarnings("unchecked")
    @Override
    public Collection processarDados() {
        ArrayList<String> dados = new ArrayList<String>();
        List<CpServico> servicos = CpDao.getInstance().listarServicos();
        CpTipoConfiguracao tipo = CpDao.getInstance().consultar(CpTipoConfiguracao.TIPO_CONFIG_UTILIZAR_SERVICO,
                CpTipoConfiguracao.class, false);

        SortedSet<Sincronizavel> setAntes = new TreeSet<Sincronizavel>(); // obterItensDosServicosNaData(tipo,
        setDtAnterior(null);
        setLotacaoAnterior(null);
        for (Date dt : obterDatasRelevantes()) {
            try {
                SortedSet<Sincronizavel> setDepois = obterItensDosServicosNaData(tipo, servicos, dt);

                List<Item> list = compararServicosNoPeriodo(setAntes, setDepois, servicos);
                for (Item itm : list) {
                    processarItem(itm, dados, dt);
                }
                setAntes = setDepois;
            } catch (Exception e) {
                throw new Error(e);
            }
        }
        // gerarArquivoDados(dados, "c:\\RelHistUsu.txt");
        return dados;

    }

    @SuppressWarnings("unused")
    private void gerarArquivoDados(ArrayList<String> dados, String nomeArq) {
        final int QUANTOS_CAMPOS = 6;
        File file = new File(nomeArq);
        try {
            Writer output = new BufferedWriter(new FileWriter(file));
            int contaCampos = 0;
            for (String campo : dados) {
                contaCampos++;
                output.write(campo);
                if (contaCampos < QUANTOS_CAMPOS) {
                    output.write("\t");

                } else {
                    output.write("\r\n");
                    contaCampos = 0;
                }
            }
            output.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public List<Item> compararServicosNoPeriodo(SortedSet<Sincronizavel> setAntes,
            SortedSet<Sincronizavel> setDepois, List<CpServico> srvs) throws Exception {
        Sincronizador sinc = new Sincronizador();
        sinc.setSetNovo(setDepois);
        sinc.setSetAntigo(setAntes);
        List<Item> list = sinc.getEncaixe();
        for (Item itm : list)
            System.out.println(itm.getDescricao());
        return list;
    }

    @SuppressWarnings("unchecked")
    public SortedSet obterItensDosServicosNaData(CpTipoConfiguracao tipo, List<CpServico> srvs, Date dtEvn)
            throws Exception {
        TreeSet lista = new TreeSet<AlteracaoDireitosItem>();
        for (CpServico srv : srvs) {
            AlteracaoDireitosItem item = gerar(tipo, null, obterPessoaDoUsuarioAtivaNaData(dtEvn), null, null, srv,
                    dtEvn);
            lista.add(item);
        }
        return lista;
    }

    static public AlteracaoDireitosItem gerar(CpTipoConfiguracao tipo, CpPerfil perfil, DpPessoa pessoa,
            DpLotacao lotacao, CpOrgaoUsuario orgao, CpServico servico, Date dtEvn) throws Exception {
        CpConfiguracao cfgFiltro = new CpConfiguracao();
        cfgFiltro.setCpGrupo(perfil);
        cfgFiltro.setDpPessoa(pessoa);
        cfgFiltro.setLotacao(lotacao);
        cfgFiltro.setOrgaoUsuario(orgao);
        cfgFiltro.setCpServico(servico);
        cfgFiltro.setCpTipoConfiguracao(tipo);
        CpConfiguracao cfg = Cp.getInstance().getConf().buscaConfiguracao(cfgFiltro, new int[0], dtEvn);
        AlteracaoDireitosItem itm = new AlteracaoDireitosItem();
        itm.setServico(servico);
        itm.setPessoa(pessoa);
        if (cfg != null) {
            itm.setCfg(cfg);
            itm.setSituacao(cfg.getCpSituacaoConfiguracao());
        } else {
            itm.setSituacao(servico.getCpTipoServico().getSituacaoDefault());
        }
        return itm;
    }

    private CpDao dao() {
        return CpDao.getInstance();
    }

    /**
     * @return the cpServico
     */
    public DpPessoa getDpPessoa() {
        return dpPessoa;
    }

    /**
     * @param cpServico
     *            the cpServico to set
     */
    public void setDpPessoa(DpPessoa dpPessoa) {
        this.dpPessoa = dpPessoa;
    }
    /*
       public static void main(String args[]) throws Exception {
          Configuration cfg = CpDao.criarHibernateCfg(
        "jdbc:oracle:thin:@servidor:1521:instancia", "usuario",
        "senha");
          HibernateUtil.configurarHibernate(cfg, "");
          Map<String, String> listaParametros = new HashMap<String, String>();
          listaParametros.put("idPessoa", "129972");
          HistoricoUsuarioRelatorio r = new HistoricoUsuarioRelatorio(
        listaParametros);
          r.gerar();
          JasperViewer.viewReport(r.getRelatorioJasperPrint());
       }
       */
}