public Resultado ProrrogarProjeto(Projeto dados, out Etapa etapa)
        {
            var resultado = new Resultado();

            etapa          = null;
            resultado.Acao = "Prorrogar projeto";
            var projeto = _context.Projetos.Include("Etapas").FirstOrDefault(p => p.Id == dados.Id);

            if (projeto == null)
            {
                resultado.Inconsistencias.Add("Projeto não localizado");
            }
            else
            {
                if (projeto.DataInicio == null)
                {
                    resultado.Inconsistencias.Add("Data Inicio projeto não definida");
                }
                if (projeto.Etapas.Count() == 0)
                {
                    resultado.Inconsistencias.Add("Projeto não possui etapas");
                }
            }
            if (resultado.Inconsistencias.Count() == 0)
            {
                var LastEtapa = _etapaService.AddDataEtapas(projeto.Etapas).LastOrDefault();
                if (LastEtapa.DataFim != null)
                {
                    var duracao  = Math.Abs(12 * (LastEtapa.DataFim.Value.Year - dados.DataFim.Value.Year) + LastEtapa.DataFim.Value.Month - dados.DataFim.Value.Month);
                    var newDate  = LastEtapa.DataFim.Value.AddMonths(duracao);
                    var newEtapa = new Etapa {
                        ProjetoId     = projeto.Id,
                        Nome          = "Prorrogação",
                        Desc          = "Prorrogação",
                        Duracao       = duracao,
                        DataInicio    = LastEtapa.DataFim,
                        DataFim       = newDate,
                        EtapaProdutos = _etapaService.MontEtapaProdutos(dados.Etapa)
                    };
                    _context.Etapas.Add(newEtapa);
                    _context.SaveChanges();
                    etapa        = newEtapa;
                    resultado.Id = newEtapa.Id.ToString();
                }
            }
            return(resultado);
        }
示例#2
0
        public XmlRelatorioFinal GerarXml(int ProjetoId, string Versao, string UserId)
        {
            XmlRelatorioFinal relatorio = new XmlRelatorioFinal();
            Projeto           projeto   = _context.Projetos
                                          .Include("CatalogEmpresa")
                                          .Include("Empresas.Estado")
                                          .Include("Etapas")
                                          .Include("AlocacoesRh.RecursoHumano")
                                          .Include("AlocacoesRm.RecursoMaterial")
                                          .Include("Empresas.CatalogEmpresa")
                                          .Include("RelatorioFinal.Uploads")
                                          .Where(p => p.Id == ProjetoId)
                                          .FirstOrDefault();

            var registros = _context.RegistrosFinanceiros
                            .Include("RecursoHumano")
                            .Include("RecursoMaterial")
                            .Where(p => p.ProjetoId == ProjetoId)
                            .Where(p => p.StatusValor == "Aprovado")
                            .ToList();

            int?[] rhIds = registros.Where(r => r.RecursoHumano != null).Select(r => r.RecursoHumanoId).ToArray();
            int?[] rmIds = registros.Where(r => r.RecursoMaterial != null).Select(r => r.RecursoMaterialId).ToArray();

            #region <PD_RelFinalBase>
            relatorio.PD_RelFinalBase = new PD_RelFinalBasePD {
                CodProjeto  = projeto.Codigo,
                ArquivoPDF  = projeto.RelatorioFinal.Uploads.Where(u => u.CategoriaValor == "RelatorioFinalAnual").FirstOrDefault().NomeArquivo,
                DataIniODS  = projeto.DataInicio.ToString(),
                DataFimODS  = (projeto.Etapas.LastOrDefault().DataFim == null) ? _etapaService.AddDataEtapas(projeto.Etapas).LastOrDefault().DataFim.ToString() : projeto.Etapas.LastOrDefault().DataFim.ToString(),
                ProdPrev    = projeto.RelatorioFinal.ProdutoAlcancado.ToString(),
                ProdJust    = projeto.RelatorioFinal.JustificativaProduto,
                ProdEspTec  = projeto.RelatorioFinal.EspecificacaoProduto,
                TecPrev     = projeto.RelatorioFinal.TecnicaPrevista.ToString(),
                TecJust     = projeto.RelatorioFinal.JustificativaTecnica,
                TecDesc     = projeto.RelatorioFinal.DescTecnica,
                AplicPrev   = projeto.RelatorioFinal.AplicabilidadePrevista.ToString(),
                AplicJust   = projeto.RelatorioFinal.JustificativaAplicabilidade,
                AplicFnc    = projeto.RelatorioFinal.DescTestes,
                AplicAbrang = projeto.RelatorioFinal.DescAbrangencia,
                AplicAmbito = projeto.RelatorioFinal.DescAmbito,
                TxDifTec    = projeto.RelatorioFinal.DescAtividades
            };
            #endregion

            #region <PD_EquipeEmp>

            var PedEmpresaList = new List <PedEmpresa>();

            var EmpresasFinanciadoras = projeto.Empresas
                                        .Where(p => p.ClassificacaoValor == "Energia" || p.ClassificacaoValor == "Proponente")
                                        .ToList();

            foreach (Empresa empresa in EmpresasFinanciadoras)
            {
                var equipeList = new List <EquipeEmpresa>();

                var registroRhEmpresa = registros.Where(r => r.RecursoHumano != null && r.RecursoHumano.Empresa == empresa).GroupBy(r => r.RecursoHumanoId).Select(r => r.First());

                foreach (var registro in registroRhEmpresa)
                {
                    var strMesHora = ObterMesReferencia(projeto, registros.Where(r => r.RecursoHumanoId == registro.RecursoHumanoId).ToList());

                    equipeList.Add(new EquipeEmpresa {
                        NomeMbEqEmp      = registro.RecursoHumano.NomeCompleto,
                        CpfMbEqEmp       = registro.RecursoHumano.CPF,
                        TitulacaoMbEqEmp = registro.RecursoHumano.TitulacaoValor,
                        FuncaoMbEqEmp    = registro.RecursoHumano.FuncaoValor,
                        HhMbEqEmp        = registro.RecursoHumano.ValorHora.ToString(),
                        MesMbEqEmp       = strMesHora[0],
                        HoraMesMbEqEmp   = strMesHora[1]
                    });
                }

                PedEmpresaList.Add(new PedEmpresa {
                    CodEmpresa  = empresa.CatalogEmpresa.Valor,
                    TipoEmpresa = empresa.ClassificacaoValor,
                    Equipe      = new Equipe {
                        EquipeEmpresa = equipeList
                    }
                });
            }
            #endregion

            #region <PD_EquipeExec>

            // PD_EQUIPEEXEC
            var PedExecutoraList = new List <PedExecutora>();

            foreach (Empresa empresa in projeto.Empresas
                     .Where(p => p.ClassificacaoValor == "Executora")
                     .ToList())
            {
                var equipeList        = new List <EquipeExec>();
                var registroRhEmpresa = registros.Where(r => r.RecursoHumano != null && r.RecursoHumano.Empresa == empresa).GroupBy(r => r.RecursoHumanoId).Select(r => r.First());
                foreach (var registro in registroRhEmpresa)
                {
                    var strMesHora = ObterMesReferencia(projeto, registros.Where(r => r.RecursoHumanoId == registro.RecursoHumanoId).ToList());

                    equipeList.Add(new EquipeExec {
                        NomeMbEqExec      = registro.RecursoHumano.NomeCompleto,
                        BRMbEqExec        = registro.RecursoHumano.NacionalidadeValor,
                        DocMbEqExec       = registro.RecursoHumano.CPF ?? registro.RecursoHumano.Passaporte,
                        TitulacaoMbEqExec = registro.RecursoHumano.TitulacaoValor,
                        FuncaoMbEqExec    = registro.RecursoHumano.FuncaoValor,
                        HhMbEqExec        = registro.RecursoHumano.ValorHora.ToString(),
                        MesMbEqExec       = strMesHora[0],
                        HoraMesMbEqExec   = strMesHora[1]
                    });
                }
                PedExecutoraList.Add(new PedExecutora {
                    CNPJExec        = empresa.Cnpj,
                    RazaoSocialExec = empresa.RazaoSocial,
                    UfExec          = empresa.Estado.Valor,
                    Equipe          = new ExecEquipe {
                        EquipeExec = equipeList
                    }
                });
            }

            relatorio.PD_EquipeEmp = new PD_EquipeEmp {
                Empresas = new PedEmpresas {
                    Empresa = PedEmpresaList
                }
            };
            relatorio.PD_EquipeExec = new PD_EquipeExec {
                Executoras = new PedExecutoras {
                    Executora = PedExecutoraList
                }
            };

            #endregion


            #region <PD_ETAPAS>
            var EtapasList = new List <PD_Etapa>();
            int ordem      = 1;
            int anterior   = 0;
            foreach (Etapa etapa in projeto.Etapas.OrderBy(e => e.Id))
            {
                string mesExecEtapa = null;
                int    duracao      = etapa.Duracao;
                var    etapalist    = new List <string>();
                int    last         = 0;
                for (int a = anterior + 1; a <= (anterior + duracao); a++)
                {
                    etapalist.Add((a).ToString());
                    last = a;
                }
                anterior     = last;
                mesExecEtapa = String.Join(",", etapalist);

                EtapasList.Add(new PD_Etapa {
                    EtapaN       = ordem.ToString().PadLeft(2, '0'),
                    Atividades   = etapa.AtividadesRealizadas,
                    MesExecEtapa = mesExecEtapa
                });
                ordem++;
            }
            relatorio.PD_Etapas = new PD_Etapas {
                Etapa = EtapasList
            };
            #endregion

            #region <PD_RECURSO>
            relatorio.PD_Recursos = new RF_Recursos {
                RecursoEmpresa  = new List <RF_RecursoEmpresa>(),
                RecursoParceira = new List <RF_RecursoParceira>()
            };
            foreach (Empresa empresa in EmpresasFinanciadoras)
            {
                var DestRecursosExec = new List <RF_DestRecursosExec>();
                foreach (var rm in projeto.AlocacoesRm
                         .Where(p => p.EmpresaRecebedora.ClassificacaoValor == "Executora")
                         .Where(p => p.EmpresaFinanciadora == empresa)
                         .Where(p => rmIds.Contains(p.RecursoMaterial.Id))
                         .GroupBy(p => p.EmpresaRecebedora)
                         .ToList())
                {
                    DestRecursosExec.Add(new RF_DestRecursosExec {
                        CNPJExec         = rm.First().EmpresaRecebedora.Cnpj,
                        CustoCatContabil = ObterCustosCat(rm, registros)
                    });
                }

                var DestRecursosEmp = new List <RF_DestRecursosEmp>();
                foreach (var rm in projeto.AlocacoesRm
                         .Where(p => p.EmpresaRecebedora == empresa)
                         .Where(p => p.EmpresaFinanciadora == empresa)
                         .Where(p => rmIds.Contains(p.RecursoMaterial.Id))
                         .GroupBy(p => p.EmpresaRecebedora)
                         .ToList())
                {
                    DestRecursosEmp.Add(new RF_DestRecursosEmp {
                        CustoCatContabil = ObterCustosCat(rm, registros)
                    });
                }

                relatorio.PD_Recursos.RecursoEmpresa.Add(new RF_RecursoEmpresa {
                    CodEmpresa   = empresa.CatalogEmpresa.Valor,
                    DestRecursos = new DestRecursos {
                        DestRecursosEmp  = DestRecursosEmp,
                        DestRecursosExec = DestRecursosExec
                    }
                });
            }

            foreach (Empresa empresa in projeto.Empresas
                     .Where(p => p.ClassificacaoValor == "Parceira")
                     .ToList())
            {
                var DestRecursosExec = new List <RF_DestRecursosExec>();
                //RH
                foreach (var rh in projeto.AlocacoesRh
                         .Where(p => p.Empresa.ClassificacaoValor == "Executora")
                         .Where(p => rhIds.Contains(p.RecursoHumano.Id))
                         .ToList())
                {
                    var CustoCatContabil = new List <CustoCatContabil <ItemDespesa> >();
                    var itemDespesa      = new List <ItemDespesa>();
                    foreach (var registro in registros
                             .Where(p => p.RecursoHumano != null).ToList())
                    {
                        itemDespesa.Add(new ItemDespesa {
                            NomeItem      = registro.RecursoHumano.NomeCompleto,
                            JustificaItem = rh.Justificativa,
                            QtdeItem      = registro.QtdHrs,
                            ValorIndItem  = registro.RecursoHumano.ValorHora.ToString(),
                            TipoItem      = (registro.RecursoHumano.NacionalidadeValor == "Brasileiro") ? "True" : "false"
                                            //ItemLabE = registro.EquiparLabExistente.ToString(),
                                            //ItemLabN = registro.EquiparLabNovo.ToString()
                        });
                    }
                    CustoCatContabil.Add(new CustoCatContabil <ItemDespesa> {
                        CategoriaContabil = "RH",
                        ItemDespesa       = itemDespesa
                    });
                    DestRecursosExec.Add(new RF_DestRecursosExec {
                        CNPJExec         = rh.Empresa.Cnpj,
                        CustoCatContabil = CustoCatContabil
                    });
                }
                //RM
                foreach (var rm in projeto.AlocacoesRm
                         .Where(p => p.EmpresaRecebedora.ClassificacaoValor == "Executora")
                         .Where(p => p.EmpresaFinanciadora == empresa)
                         .Where(p => rmIds.Contains(p.RecursoMaterial.Id))
                         .GroupBy(p => p.EmpresaRecebedora)
                         .ToList())
                {
                    DestRecursosExec.Add(new RF_DestRecursosExec {
                        CNPJExec         = rm.First().EmpresaRecebedora.Cnpj,
                        CustoCatContabil = ObterCustosCat(rm, registros)
                    });
                }

                relatorio.PD_Recursos.RecursoParceira.Add(new RF_RecursoParceira {
                    CNPJParc         = empresa.Cnpj,
                    DestRecursosExec = DestRecursosExec
                });
            }

            #endregion

            #region <PD_RESULTADO>
            relatorio.PD_Resultados = new PD_Resultados {
                PD_ResultadosCP = new PD_ResultadosCP(),
                PD_ResultadosCT = new PD_ResultadosCT {
                    PD_ResultadosCT_PC = new PD_ResultadosCT_PC(),
                    PD_ResultadosCT_IE = new PD_ResultadosCT_IE(),
                    PD_ResultadosCT_PI = new PD_ResultadosCT_PI()
                },
                PD_ResultadosSA = new PD_ResultadosSA(),
                PD_ResultadosIE = new PD_ResultadosIE()
            };
            var listIdCp = new List <IdCP>();
            foreach (ResultadoCapacitacao rCp in _context.ResultadosCapacitacao.Include("RecursoHumano").Include("Uploads").Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                var file = rCp.Uploads.FirstOrDefault();
                listIdCp.Add(new IdCP {
                    TipoCP      = rCp.TipoValor,
                    ConclusaoCP = rCp.Conclusao.ToString(),
                    DataCP      = rCp.DataConclusao.ToString(),
                    DocMmbEqCP  = (rCp.RecursoHumano.CPF != null) ? rCp.RecursoHumano.CPF : rCp.RecursoHumano.Passaporte,
                    CNPJInstCP  = rCp.CnpjInstituicao,
                    AreaCP      = rCp.AreaPesquisa,
                    TituloCP    = rCp.TituloTrabalho,
                    ArquivoPDF  = file != null ? file.NomeArquivo : "",
                });
            }
            relatorio.PD_Resultados.PD_ResultadosCP.IdCP = listIdCp;

            var listIdCT_PC = new List <IdCT_PC>();
            foreach (ResultadoProducao rCT_PC in _context.ResultadosProducao.Include("Pais").Include("Uploads").Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                var file = rCT_PC.Uploads.FirstOrDefault();
                listIdCT_PC.Add(new IdCT_PC {
                    TipoCT_PC    = rCT_PC.TipoValor,
                    ConfPubCT_PC = rCT_PC.Confirmacao.ToString(),
                    DataCT_PC    = rCT_PC.DataPublicacao.ToString(),
                    NomeCT_PC    = rCT_PC.Nome,
                    LinkCT_PC    = rCT_PC.Url,
                    PaisCT_PC    = rCT_PC.Pais.Nome,
                    CidadeCT_PC  = rCT_PC.Cidade,
                    TituloCT_PC  = rCT_PC.Titulo,
                    ArquivoPDF   = file != null ? file.NomeArquivo : "",
                });
            }
            relatorio.PD_Resultados.PD_ResultadosCT.PD_ResultadosCT_PC.IdCT_PC = listIdCT_PC;

            var listIdCT_IE = new List <IdCT_IE>();
            foreach (ResultadoInfra rCT_IE in _context.ResultadosInfra.Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                listIdCT_IE.Add(new IdCT_IE {
                    TipoCT_IE          = rCT_IE.TipoValor,
                    CNPJInstBenefCT_IE = rCT_IE.CnpjReceptora,
                    NomeLabCT_IE       = rCT_IE.NomeLaboratorio,
                    AreaLabCT_IE       = rCT_IE.AreaPesquisa,
                    ApoioLabCT_IE      = rCT_IE.ListaMateriais
                });
            }
            relatorio.PD_Resultados.PD_ResultadosCT.PD_ResultadosCT_IE.IdCT_IE = listIdCT_IE;

            var listIdCT_PI = new List <IdCT_PI>();
            foreach (ResultadoIntelectual rCT_PI in _context.ResultadosIntelectual.Include("Inventores.RecursoHumano").Include("Depositantes.Empresa.CatalogEmpresa").Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                var listIvts = new List <Inventor_PI>();
                foreach (ResultadoIntelectualInventor ivt in rCT_PI.Inventores)
                {
                    listIvts.Add(new Inventor_PI {
                        DocMbEqCT_PI = (ivt.RecursoHumano.CPF != null) ? ivt.RecursoHumano.CPF : ivt.RecursoHumano.Passaporte
                    });
                }
                var listDpts = new List <Depositante_PI>();
                foreach (ResultadoIntelectualDepositante dpt in rCT_PI.Depositantes)
                {
                    listDpts.Add(new Depositante_PI {
                        CNPJInstCT_PI = (dpt.Empresa.Cnpj != null) ? dpt.Empresa.Cnpj : dpt.Empresa.CatalogEmpresa.Cnpj,
                        PercInstCT_PI = dpt.Entidade.ToString()
                    });
                }
                listIdCT_PI.Add(new IdCT_PI {
                    TipoCT_PI     = rCT_PI.TipoValor,
                    DataCT_PI     = rCT_PI.DataPedido.ToString(),
                    NumeroCT_PI   = rCT_PI.NumeroPedido,
                    TituloCT_PI   = rCT_PI.Titulo,
                    Inventores_PI = new Inventores_PI {
                        Inventor = listIvts
                    },
                    Depositantes_PI = new Depositantes_PI {
                        Depositante = listDpts
                    }
                });
            }
            relatorio.PD_Resultados.PD_ResultadosCT.PD_ResultadosCT_PI.IdCT_PI = listIdCT_PI;

            // PD_RESULTADOS_SA
            var listIdSA = new List <IdSA>();
            foreach (ResultadoSocioAmbiental rSa in _context.ResultadosSocioAmbiental.Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                listIdSA.Add(new IdSA {
                    TipoISA   = rSa.TipoValor,
                    PossibISA = rSa.Positivo.ToString(),
                    TxtISA    = rSa.Desc
                });
            }
            relatorio.PD_Resultados.PD_ResultadosSA.IdSA = listIdSA;

            // PD_RESULTADOS_IE
            var listIdIE = new List <IdIE>();
            foreach (ResultadoEconomico rIe in _context.ResultadosEconomico.Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                listIdIE.Add(new IdIE {
                    TipoIE      = rIe.TipoValor,
                    TxtBenefIE  = rIe.Desc,
                    UnidBenefIE = rIe.UnidadeBase,
                    BaseBenefIE = rIe.ValorIndicador.ToString(),
                    PerBenefIE  = rIe.Percentagem.ToString(),
                    VlrBenefIE  = rIe.ValorBeneficio.ToString()
                });
            }
            relatorio.PD_Resultados.PD_ResultadosIE.IdIE = listIdIE;

            #endregion

            return(relatorio);
        }
        public XmlRelatorioFinalGestao GerarXml(int ProjetoId, string Versao, string UserId)
        {
            XmlRelatorioFinalGestao relatorio = new XmlRelatorioFinalGestao();
            Projeto projeto = _context.Projetos
                              .Include("CatalogEmpresa")
                              .Include("Empresas.Estado")
                              .Include("Etapas.EtapaMeses")
                              .Include("Atividades")
                              //.Include("AlocacoesRh.RecursoHumano")
                              //.Include("AlocacoesRm.RecursoMaterial.CategoriaContabilGestao")
                              .Include("Empresas.CatalogEmpresa")
                              .Include("RelatorioFinal.Uploads")
                              .Where(p => p.Id == ProjetoId)
                              .FirstOrDefault();

            var registros = _context.RegistrosFinanceiros
                            .Include("RecursoHumano")
                            .Include("RecursoMaterial.CategoriaContabilGestao")
                            .Include("CategoriaContabilGestao")
                            .Include("Atividade")
                            .Where(p => p.ProjetoId == ProjetoId)
                            .Where(p => p.StatusValor == "Aprovado")
                            .ToList();

            int?[] rhIds = registros.Where(r => r.RecursoHumano != null).Select(r => r.RecursoHumanoId).ToArray();
            int?[] rmIds = registros.Where(r => r.RecursoMaterial != null).Select(r => r.RecursoMaterialId).ToArray();

            var AtividadesList = new List <RFG_Atividade>();

            foreach (var rm0 in registros.Where(r => r.RecursoMaterial != null && r.Atividade != null).GroupBy(p => p.Atividade.Valor))
            {
                decimal?custo = 0;
                foreach (var rm1 in rm0)
                {
                    custo += rm1.ValorUnitario * rm1.QtdItens;
                }
                string _resAtividade = null;
                switch (rm0.First().Atividade.Valor)
                {
                case "HH":
                    _resAtividade = projeto.Atividades.ResDedicacaoHorario;
                    break;

                case "EC":
                    _resAtividade = projeto.Atividades.ResParticipacaoMembros;
                    break;

                case "FG":
                    _resAtividade = projeto.Atividades.ResDesenvFerramenta;
                    break;

                case "PP":
                    _resAtividade = projeto.Atividades.ResProspTecnologica;
                    break;

                case "RP":
                    _resAtividade = projeto.Atividades.ResDivulgacaoResultados;
                    break;

                case "AP":
                    _resAtividade = projeto.Atividades.ResParticipacaoTecnicos;
                    break;

                case "BA":
                    _resAtividade = projeto.Atividades.ResBuscaAnterioridade;
                    break;

                case "CA":
                    _resAtividade = projeto.Atividades.ResContratacaoAuditoria;
                    break;

                case "AC":
                    _resAtividade = projeto.Atividades.ResApoioCitenel;
                    break;
                }
                AtividadesList.Add(new RFG_Atividade {
                    TipoAtividade  = rm0.First().Atividade.Valor,
                    ResAtividade   = _resAtividade,
                    CustoAtividade = custo.ToString()
                });
            }

            relatorio.PD_RelFinalBase = new PD_RelFinalBase {
                CodProjeto = projeto.Codigo,
                ArquivoPDF = projeto.RelatorioFinal.Uploads.Where(u => u.CategoriaValor == "RelatorioFinalAnual").FirstOrDefault().NomeArquivo,
                DataIniODS = projeto.DataInicio.ToString(),
                DataFimODS = (projeto.Etapas.LastOrDefault().DataFim == null) ? _etapaService.AddDataEtapas(projeto.Etapas).LastOrDefault().DataFim.ToString() : projeto.Etapas.LastOrDefault().DataFim.ToString(),
                Atividades = new RFG_Atividades {
                    Atividade = AtividadesList
                }
            };

            // PD_EQUIPEEMP
            var PedEmpresaList        = new List <PedEmpresa>();
            var EmpresasFinanciadoras = projeto.Empresas
                                        .Where(p => p.ClassificacaoValor == "Energia" || p.ClassificacaoValor == "Proponente")
                                        .ToList();

            foreach (Empresa empresa in EmpresasFinanciadoras)
            {
                var equipeList = new List <EquipeEmpresa>();

                var registrosRH = from r in registros
                                  where r.RecursoHumano != null && r.RecursoHumano.CPF != null && r.RecursoHumano.Empresa.Id == empresa.Id
                                  select r;

                foreach (var reg in registrosRH)
                {
                    var strMesHora = ObterMesReferencia(projeto, registros.Where(r => r.RecursoHumanoId == reg.RecursoHumanoId).ToList());
                    equipeList.Add(new EquipeEmpresa {
                        NomeMbEqEmp    = reg.RecursoHumano.NomeCompleto,
                        CpfMbEqEmp     = reg.RecursoHumano.CPF,
                        HhMbEqEmp      = reg.RecursoHumano.ValorHora.ToString(),
                        MesMbEqEmp     = strMesHora[0],
                        HoraMesMbEqEmp = strMesHora[1]
                    });
                }

                PedEmpresaList.Add(new PedEmpresa {
                    CodEmpresa  = empresa.CatalogEmpresa.Valor,
                    TipoEmpresa = empresa.ClassificacaoValor,
                    Equipe      = new Equipe {
                        EquipeEmpresa = equipeList
                    }
                });
            }
            relatorio.PD_Equipe = new PD_Equipe {
                Empresas = new PedEmpresas {
                    Empresa = PedEmpresaList
                }
            };
            // PD_ETAPAS
            var EtapasList = new List <PD_Etapa>();
            int ordem      = 1;

            var meses = new List <DateTime>();

            projeto.Etapas.ForEach(e =>
                                   meses.AddRange(
                                       e.EtapaMeses.Select(m => m.Mes)
                                       )
                                   );
            meses = meses.GroupBy(m => m).Select(m => m.First()).OrderBy(m => m).ToList();


            projeto.Etapas.Select(e => e.EtapaMeses.Select(m => m.Mes));

            foreach (Etapa etapa in projeto.Etapas.OrderBy(e => e.Id))
            {
                var etapalist = etapa.EtapaMeses.Select(m => meses.IndexOf(m.Mes) + 1).OrderBy(i => i).ToList();

                var mesExecEtapa = String.Join(",", etapalist);

                EtapasList.Add(new PD_Etapa {
                    EtapaN       = ordem.ToString().PadLeft(2, '0'),
                    Atividades   = etapa.AtividadesRealizadas,
                    MesExecEtapa = mesExecEtapa
                });

                ordem++;
            }
            relatorio.PD_Etapas = new PD_Etapas {
                Etapa = EtapasList
            };
            // PD_RECURSO
            relatorio.PD_Recursos = new RFG_Recursos {
                RecursoEmpresa = new List <RFG_RecursoEmpresa>()
            };
            foreach (Empresa empresa in EmpresasFinanciadoras)
            {
                relatorio.PD_Recursos.RecursoEmpresa.Add(new RFG_RecursoEmpresa {
                    CodEmpresa       = empresa.CatalogEmpresa.Valor,
                    CustoCatContabil = ObterCustosCat(registros.Where(r => r.EmpresaFinanciadoraId == empresa.Id && r.RecursoMaterial != null).ToList())
                });
            }


            // PD_RESULTADO
            var listIdCp = new List <IdCP>();

            foreach (ResultadoCapacitacao rCp in _context.ResultadosCapacitacao.Include("RecursoHumano").Include("Uploads").Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                listIdCp.Add(new IdCP {
                    TipoCP      = rCp.TipoValor,
                    ConclusaoCP = rCp.Conclusao.ToString(),
                    DataCP      = rCp.DataConclusao.ToString(),
                    DocMmbEqCP  = (rCp.RecursoHumano.CPF != null) ? rCp.RecursoHumano.CPF : rCp.RecursoHumano.Passaporte,
                    CNPJInstCP  = rCp.CnpjInstituicao,
                    AreaCP      = rCp.AreaPesquisa,
                    TituloCP    = rCp.TituloTrabalho,
                    ArquivoPDF  = rCp.Uploads.First().NomeArquivo,
                });
            }

            relatorio.PD_ResultadosCP = new PD_ResultadosCP {
                IdCP = listIdCp
            };

            var listIdPC = new List <IdPC>();

            foreach (ResultadoProducao rCT_PC in _context.ResultadosProducao.Include("Pais").Include("Uploads").Where(r => r.ProjetoId == ProjetoId).ToList())
            {
                listIdPC.Add(new IdPC {
                    TipoPC     = rCT_PC.TipoValor,
                    ConfPubPC  = rCT_PC.Confirmacao.ToString(),
                    DataPC     = rCT_PC.DataPublicacao.ToString(),
                    NomePC     = rCT_PC.Nome,
                    LinkPC     = rCT_PC.Url,
                    PaisPC     = rCT_PC.Pais.Nome,
                    CidadePC   = rCT_PC.Cidade,
                    TituloPC   = rCT_PC.Titulo,
                    ArquivoPDF = rCT_PC.Uploads.First().NomeArquivo,
                });
            }
            relatorio.PD_ResultadosPC = new PD_ResultadosPC {
                IdPC = listIdPC
            };
            return(relatorio);
        }