public OrcamentoEmpresas orcamentoEmpresas(int projetoId)
        {
            List <AlocacaoRh> alocacaoRhs = AlocacaoRhService.ListarTodos(projetoId).ToList();
            List <AlocacaoRm> alocacaoRms = AlocacaoRmService.ListarTodos(projetoId).ToList();

            OrcamentoEmpresas orcamentos = new OrcamentoEmpresas(alocacaoRhs, alocacaoRms);

            return(orcamentos);
        }
        public List <RelatorioEmpresaCsv> FormatRelatorioCsv(OrcamentoEmpresas Relatorios)
        {
            var records = new List <RelatorioEmpresaCsv>();

            foreach (var empresa in Relatorios.Empresas)
            {
                foreach (var relatorio in empresa.Relatorios)
                {
                    foreach (var item in relatorio.Items)
                    {
                        var newItem = new RelatorioEmpresaCsv();
                        newItem.NomeRecurso = item.Desc;
                        if (item.RecursoHumano != null)
                        {
                            newItem.CPF                    = item.RecursoHumano.CPF;
                            newItem.FUNCAO                 = item.RecursoHumano.FuncaoValor;
                            newItem.TITULACAO              = item.RecursoHumano.TitulacaoValor;
                            newItem.CL                     = item.RecursoHumano.UrlCurriculo;
                            newItem.ValorHora              = item.RecursoHumano.ValorHora;
                            newItem.EntidadeRecebedora     = (item.RecursoHumano.Empresa.Cnpj == null) ? item.RecursoHumano.Empresa.CatalogEmpresa.Nome : item.RecursoHumano.Empresa.RazaoSocial;
                            newItem.CnpjEntidadeRecebedora = (item.RecursoHumano.Empresa.Cnpj == null) ? null : item.RecursoHumano.Empresa.Cnpj;
                            newItem.CategoriaContabil      = CategoriaContabil.RH.ToString();
                        }
                        if (item.AlocacaoRh != null)
                        {
                            newItem.QtdHoras             = item.AlocacaoRh.HrsTotais;
                            newItem.ValorTotal           = newItem.ValorHora * newItem.QtdHoras;
                            newItem.Justificativa        = item.AlocacaoRh.Justificativa;
                            newItem.EntidadePagadora     = (item.AlocacaoRh.Empresa.Cnpj == null) ? item.AlocacaoRh.Empresa.CatalogEmpresa.Nome : item.AlocacaoRh.Empresa.RazaoSocial;
                            newItem.CnpjEntidadePagadora = item.AlocacaoRh.Empresa.Cnpj;
                        }
                        if (item.RecursoMaterial != null)
                        {
                            newItem.CategoriaContabil    = item.RecursoMaterial.CategoriaContabilValor;
                            newItem.ValorUnitario        = item.RecursoMaterial.ValorUnitario;
                            newItem.EspecificacaoTecnica = item.RecursoMaterial.Especificacao;
                        }
                        if (item.AlocacaoRm != null)
                        {
                            newItem.Unidades               = item.AlocacaoRm.Qtd;
                            newItem.ValorTotal             = newItem.ValorUnitario * newItem.Unidades;
                            newItem.Justificativa          = item.AlocacaoRm.Justificativa;
                            newItem.EntidadePagadora       = (item.AlocacaoRm.EmpresaFinanciadora.Cnpj == null) ? item.AlocacaoRm.EmpresaFinanciadora.CatalogEmpresa.Nome : item.AlocacaoRm.EmpresaFinanciadora.RazaoSocial;
                            newItem.CnpjEntidadePagadora   = (item.AlocacaoRm.EmpresaFinanciadora.Cnpj == null) ? null : item.AlocacaoRm.EmpresaFinanciadora.Cnpj;;
                            newItem.EntidadeRecebedora     = (item.AlocacaoRm.EmpresaRecebedora == null) ? null : (item.AlocacaoRm.EmpresaRecebedora.Cnpj == null) ? item.AlocacaoRm.EmpresaRecebedora.CatalogEmpresa.Nome : item.AlocacaoRm.EmpresaRecebedora.RazaoSocial;
                            newItem.CnpjEntidadeRecebedora = (item.AlocacaoRm.EmpresaRecebedora == null) ? null : (item.AlocacaoRm.EmpresaRecebedora.Cnpj == null) ? null : item.AlocacaoRm.EmpresaRecebedora.Cnpj;
                        }
                        //if (item.RegistroFinanceiro != null) {
                        //    newItem.NomeItem = item.RegistroFinanceiro.NomeItem;
                        //    newItem.MesReferencia = item.RegistroFinanceiro.Mes.Value.Month.ToString() + "/" + item.RegistroFinanceiro.Mes.Value.Year.ToString();
                        //    newItem.TipoDocumento = item.RegistroFinanceiro.TipoDocumentoValor;
                        //    newItem.DataDocumento = item.RegistroFinanceiro.DataDocumento.ToString();
                        //    newItem.ArquivoComprovante = (item.RegistroFinanceiro.Uploads.FirstOrDefault() != null) ? item.RegistroFinanceiro.Uploads.FirstOrDefault().NomeArquivo : null;
                        //    newItem.AtividadeRealizada = item.RegistroFinanceiro.AtividadeRealizada;
                        //    newItem.Beneficiado = item.RegistroFinanceiro.Beneficiado;
                        //    newItem.ObsInternas = (item.RegistroFinanceiro.ObsInternas.LastOrDefault() != null) ? item.RegistroFinanceiro.ObsInternas.LastOrDefault().Texto : null;
                        //    newItem.UsuarioAprovacao = (item.RegistroFinanceiro.ObsInternas.LastOrDefault() != null) ? item.RegistroFinanceiro.ObsInternas.LastOrDefault().User.NomeCompleto : null;
                        //    newItem.EquiparLabExistente = (item.RegistroFinanceiro.EquiparLabExistente.HasValue) ? "Sim" : "Nao";
                        //    newItem.EquiparLabNovo = (item.RegistroFinanceiro.EquiparLabNovo.HasValue) ? "Sim" : "Nao";
                        //    newItem.ItemNacional = (item.RegistroFinanceiro.ItemNacional.HasValue) ? "Sim" : "Nao";
                        //    newItem.DataAprovacao = (item.RegistroFinanceiro.ObsInternas.LastOrDefault() != null) ? item.RegistroFinanceiro.ObsInternas.LastOrDefault().Created.ToString() : null;
                        //}
                        newItem.Id    = item.AlocacaoId;
                        newItem.Etapa = (item.Etapa != null) ? item.Etapa.Nome : null;

                        records.Add(newItem);
                    }
                }
            }
            return(records);
        }
        public XLWorkbook gerarXLSOrcamento(int projetoId)
        {
            var projeto = context.Projetos.Find(projetoId);

            XLWorkbook xls = new XLWorkbook();

            var workRH = xls.AddWorksheet("Recursos Humanos");

            workRH.ColumnWidth = 40;
            var workRM = xls.AddWorksheet("Recursos Materiais");

            workRM.ColumnWidth = 40;

            var etapas = context.Etapas.Where(e => e.ProjetoId == projetoId).OrderBy(e => e.Id).ToList();

            List <OrcamentoEmpresaItem> items = new List <OrcamentoEmpresaItem>();

            OrcamentoEmpresas orcamento = orcamentoEmpresas(projetoId);

            foreach (var empresa in orcamento.Empresas)
            {
                foreach (var categoria in empresa.Relatorios)
                {
                    foreach (var item in categoria.Items)
                    {
                        items.Add(item);
                    }
                }
            }

            var table = new DataTable("Recursos Humanos");

            table.Columns.Add("Nome");
            table.Columns.Add("Titulo");
            table.Columns.Add("Cpf");
            table.Columns.Add("Empresa");
            table.Columns.Add("Empresa Recebedora");
            table.Columns.Add("Etapa");
            table.Columns.Add("Custo Hora", typeof(decimal));
            table.Columns.Add("Horas Totais", typeof(int));
            table.Columns.Add("Custo", typeof(decimal));
            table.Columns.Add("Currículo Lattes");

            var rhItems = from i in items
                          where i.RecursoHumano != null
                          let custo = i.RecursoHumano.ValorHora * i.AlocacaoRh.HrsTotais
                                      select new {
                Nome              = i.Desc,
                Titulo            = i.RecursoHumano.TitulacaoValor,
                Cpf               = i.RecursoHumano.CPF,
                EmpresaRecebedora = i.RecursoHumano.Empresa.NomeEmpresa,
                Etapa             = etapas.IndexOf(i.AlocacaoRh.Etapa) + 1,
                Empresa           = i.AlocacaoRh.Empresa.NomeEmpresa,
                i.RecursoHumano.ValorHora,
                HorasTotais = i.AlocacaoRh.HrsTotais,
                custo,
                i.RecursoHumano.UrlCurriculo
            };

            foreach (var item in rhItems)
            {
                table.Rows.Add(item.Nome, item.Titulo, item.Cpf, item.Empresa, item.EmpresaRecebedora, item.Etapa, item.ValorHora, item.HorasTotais, item.custo, item.UrlCurriculo);
            }

            workRH.Cell(1, 1).InsertTable(table);

            table = new DataTable("Recursos Materiais");
            table.Columns.Add("Descrição");
            table.Columns.Add("Nome");
            table.Columns.Add("Categoria");
            table.Columns.Add("Especificação");
            table.Columns.Add("Atividade");
            table.Columns.Add("Quantidade", typeof(int));
            table.Columns.Add("Valor Unitário", typeof(decimal));
            table.Columns.Add("Custo", typeof(decimal));
            table.Columns.Add("Etapa");
            table.Columns.Add("Empresa Financiadora");
            table.Columns.Add("Empresa Recebedora");

            var rmItems = from i in items
                          where i.RecursoMaterial != null
                          select i;



            foreach (var i in rmItems)
            {
                string  atividade = i.RecursoMaterial.Atividade != null ? i.RecursoMaterial.Atividade.Nome : String.Empty;
                decimal custo     = i.AlocacaoRm.Qtd * i.RecursoMaterial.ValorUnitario;
                try {
                    table.Rows.Add(
                        i.Desc,
                        i.RecursoMaterial.Nome,
                        i.RecursoMaterial.categoria,
                        i.RecursoMaterial.Especificacao,
                        atividade,

                        i.AlocacaoRm.Qtd,
                        i.RecursoMaterial.ValorUnitario,
                        custo,
                        etapas.IndexOf(i.AlocacaoRm.Etapa) + 1,
                        i.AlocacaoRm.EmpresaFinanciadora.NomeEmpresa,
                        projeto.Tipo == TipoProjeto.PD ? i.AlocacaoRm.EmpresaRecebedora.NomeEmpresa : i.AlocacaoRm.EmpresaFinanciadora.NomeEmpresa
                        );
                }
                catch (Exception) {
                }
            }

            workRM.Cell(1, 1).InsertTable(table);

            return(xls);
        }