public MemoryStream Gerar(int projetoDigitalId)
        {
            UnidadeConsolidacaoRelatorio dataSource = _da.Obter(projetoDigitalId);

            ArquivoDocCaminho = @"~/Content/_pdfAspose/Ficha_Inscrição_UC.docx";

            ObterArquivoTemplate();

            #region Configurar Assinantes

            ConfiguracaoDefault.TextoTagAssinante   = "«Assinante.Nome»";
            ConfiguracaoDefault.TextoTagAssinantes1 = "«TableStart:Assinantes1»";
            ConfiguracaoDefault.TextoTagAssinantes2 = "«TableStart:Assinantes2»";

            #endregion

            ConfiguracaoDefault.ExibirSimplesConferencia = (dataSource.Situacao.Equals((int)eProjetoDigitalSituacao.EmElaboracao));
            ConfigurarCabecarioRodape(0, true);

            #region Configurar Tabelas

            ConfiguracaoDefault.AddLoadAcao((doc, dataSrc) =>
            {
            });

            #endregion

            #region Assinantes

            AssinanteDefault assinante = null;

            foreach (ResponsavelRelatorio responsavel in dataSource.Empreendimento.Responsaveis)
            {
                assinante           = new AssinanteDefault();
                assinante.Nome      = responsavel.NomeRazao;
                assinante.TipoTexto = "Representante Legal";
                ConfiguracaoDefault.Assinantes.Add(assinante);
            }

            foreach (ResponsavelRelatorio responsavel in dataSource.ResponsaveisTecnicos)
            {
                assinante           = new AssinanteDefault();
                assinante.Nome      = responsavel.NomeRazao;
                assinante.TipoTexto = "Responsável Técnico";
                ConfiguracaoDefault.Assinantes.Add(assinante);
            }

            #endregion

            return(GerarPdf(dataSource));
        }
        internal UnidadeConsolidacaoRelatorio Obter(int projetoDigitalId)
        {
            UnidadeConsolidacaoRelatorio unidadeConsolidacaoRelatorio = new UnidadeConsolidacaoRelatorio();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(EsquemaBancoCredenciado))
            {
                Comando comando = bancoDeDados.CriarComando(@"select uc.id, te.id empreendimentoID, te.denominador, te.cnpj, uc.codigo_uc, uc.local_livro_disponivel, tp.situacao, 
					uc.tipo_apresentacao_produto, tec.easting_utm, tec.northing_utm from {0}tab_empreendimento te, {0}tab_empreendimento_coord tec, {0}crt_unidade_consolidacao uc, 
					{0}tab_projeto_digital tp where uc.empreendimento = te.id and tec.empreendimento = te.id and tp.empreendimento = uc.empreendimento and tp.id = :id"                    , EsquemaBancoCredenciado);

                comando.AdicionarParametroEntrada("id", projetoDigitalId, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    if (reader.Read())
                    {
                        unidadeConsolidacaoRelatorio.Id                         = reader.GetValue <int>("id");
                        unidadeConsolidacaoRelatorio.CodigoUc                   = reader.GetValue <long>("codigo_uc");
                        unidadeConsolidacaoRelatorio.LocalLivro                 = reader.GetValue <string>("local_livro_disponivel");
                        unidadeConsolidacaoRelatorio.TipoApresentacao           = reader.GetValue <string>("tipo_apresentacao_produto");
                        unidadeConsolidacaoRelatorio.Situacao                   = reader.GetValue <int>("situacao");
                        unidadeConsolidacaoRelatorio.Empreendimento.Id          = reader.GetValue <int>("empreendimentoID");
                        unidadeConsolidacaoRelatorio.Empreendimento.Denominador = reader.GetValue <string>("denominador");
                        unidadeConsolidacaoRelatorio.Empreendimento.CNPJ        = reader.GetValue <string>("cnpj");
                        unidadeConsolidacaoRelatorio.Empreendimento.EastingUtm  = reader.GetValue <int>("easting_utm");
                        unidadeConsolidacaoRelatorio.Empreendimento.NorthingUtm = reader.GetValue <int>("northing_utm");
                    }
                }

                #region Responsaveis do empreendimento

                comando = bancoDeDados.CriarComando(@"
				select nvl(p.razao_social, p.nome) NomeRazao, nvl(p.cpf, p.cnpj) CpfCnpj, lt.texto TipoTexto 
				from tab_empreendimento_responsavel e, tab_pessoa p, lov_empreendimento_tipo_resp lt 
				where p.id = e.responsavel and e.tipo = lt.id and e.empreendimento = :empreendimento"                );

                comando.AdicionarParametroEntrada("empreendimento", unidadeConsolidacaoRelatorio.Empreendimento.Id, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        ResponsavelRelatorio responsavel = new ResponsavelRelatorio();
                        responsavel.NomeRazao = reader.GetValue <string>("NomeRazao");
                        responsavel.CpfCnpj   = reader.GetValue <string>("CpfCnpj");
                        responsavel.TipoTexto = reader.GetValue <string>("TipoTexto");

                        unidadeConsolidacaoRelatorio.Empreendimento.Responsaveis.Add(responsavel);
                    }
                }

                #endregion

                #region Endereço do empreendimento

                comando = bancoDeDados.CriarComando(@"select e.cep, e.logradouro, e.bairro, e.distrito, e.numero, m.texto MunicipioTexto, uf.sigla EstadoSigla, e.corrego, e.complemento, e.correspondencia
					from {0}tab_empreendimento_endereco e, {0}lov_municipio m, {0}lov_estado uf where m.id = e.municipio and uf.id = m.estado and e.empreendimento = :empreendimento"                    , EsquemaBancoCredenciado);

                comando.AdicionarParametroEntrada("empreendimento", unidadeConsolidacaoRelatorio.Empreendimento.Id, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        EnderecoRelatorio endereco = new EnderecoRelatorio()
                        {
                            Cep             = reader.GetValue <string>("cep"),
                            Logradouro      = reader.GetValue <string>("logradouro"),
                            Bairro          = reader.GetValue <string>("bairro"),
                            Distrito        = reader.GetValue <string>("distrito"),
                            Numero          = reader.GetValue <string>("numero"),
                            MunicipioTexto  = reader.GetValue <string>("MunicipioTexto"),
                            EstadoSigla     = reader.GetValue <string>("EstadoSigla"),
                            Corrego         = reader.GetValue <string>("corrego"),
                            Complemento     = reader.GetValue <string>("complemento"),
                            Correspondencia = reader.GetValue <int>("correspondencia")
                        };

                        unidadeConsolidacaoRelatorio.Empreendimento.Enderecos.Add(endereco);
                    }
                }

                #endregion

                #region Meio Contato

                comando = bancoDeDados.CriarComando(@"select t.valor, t.meio_contato, m.texto meio_contato_texto from {0}tab_empreendimento_contato t, 
					{0}tab_meio_contato m where m.id = t.meio_contato and t.empreendimento = :empreendimento"                    , EsquemaBancoCredenciado);

                comando.AdicionarParametroEntrada("empreendimento", unidadeConsolidacaoRelatorio.Empreendimento.Id, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        ContatoRelatorio contato = new ContatoRelatorio()
                        {
                            Valor     = reader.GetValue <string>("valor"),
                            TipoTexto = reader.GetValue <string>("meio_contato_texto")
                        };

                        switch (reader.GetValue <int>("meio_contato"))
                        {
                        case 1:
                            contato.TipoContato = eTipoContato.TelefoneResidencial;
                            break;

                        case 2:
                            contato.TipoContato = eTipoContato.TelefoneCelular;
                            break;

                        case 3:
                            contato.TipoContato = eTipoContato.TelefoneFax;
                            break;

                        case 4:
                            contato.TipoContato = eTipoContato.TelefoneComercial;
                            break;

                        case 5:
                            contato.TipoContato = eTipoContato.Email;
                            break;

                        case 6:
                            contato.TipoContato = eTipoContato.NomeContato;
                            break;
                        }

                        unidadeConsolidacaoRelatorio.Empreendimento.MeiosContatos.Add(contato);
                    }
                }

                #endregion

                #region Cultura

                comando = bancoDeDados.CriarComando(@"select c.capacidade_mes, c.unidade_medida, lu.texto unidade_medida_texto, tc.texto CulturaNome, cc.cultivar CultivarNome from {0}crt_unidade_cons_cultivar c, 
					{0}tab_cultura tc, {0}tab_cultura_cultivar cc, {0}lov_crt_un_conso_un_medida lu where tc.id = c.cultura and cc.id(+) = c.cultivar and lu.id = c.unidade_medida 
					and c.unidade_consolidacao = :unidade"                    , EsquemaBancoCredenciado);

                comando.AdicionarParametroEntrada("unidade", unidadeConsolidacaoRelatorio.Id, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        CultivarRelatorio cultivar = new CultivarRelatorio()
                        {
                            CulturaNome        = reader.GetValue <string>("CulturaNome"),
                            CapacidadeMes      = reader.GetValue <string>("capacidade_mes"),
                            UnidadeMedida      = reader.GetValue <int>("unidade_medida"),
                            UnidadeMedidaTexto = reader.GetValue <string>("unidade_medida_texto"),
                            CultivarNome       = reader.GetValue <string>("CultivarNome")
                        };

                        unidadeConsolidacaoRelatorio.Cultivar.Add(cultivar);
                    }
                }

                #endregion

                #region Responsaveis Tecnico

                comando = bancoDeDados.CriarComando(@"select nvl(p.nome, p.razao_social) NomeRazao, r.numero_hab_cfo_cfoc Habilitacao, 
				(select t.extensao_habilitacao from {0}tab_hab_emi_cfo_cfoc t where t.responsavel = c.id) ExtensaoHabilitacao 
				from {0}crt_unida_conso_resp_tec r, {0}crt_unidade_consolidacao u, {0}tab_credenciado c, {0}tab_pessoa p 
				where u.id = r.unidade_consolidacao and c.id = r.responsavel_tecnico and p.id = c.pessoa and u.empreendimento = :empreendimento"                , EsquemaBancoCredenciado);

                comando.AdicionarParametroEntrada("empreendimento", unidadeConsolidacaoRelatorio.Empreendimento.Id, DbType.Int32);
                bool extensao = false;

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        extensao = reader.GetValue <bool>("ExtensaoHabilitacao");

                        ResponsavelRelatorio responsavel = new ResponsavelRelatorio()
                        {
                            NomeRazao   = reader.GetValue <string>("NomeRazao"),
                            Habilitacao = extensao ? reader.GetValue <string>("Habilitacao") + " - ES" : reader.GetValue <string>("Habilitacao")
                        };

                        unidadeConsolidacaoRelatorio.ResponsaveisTecnicos.Add(responsavel);
                    }
                }

                #endregion
            }

            return(unidadeConsolidacaoRelatorio);
        }