public IEnumerable <ProjetoTipoDemanda> AssociarTipoDemandaProjeto(int projetoId, IEnumerable <TipoDemanda> tiposDemandas) { var atual = ObterTipoDemandasAssociadas(projetoId).ToList(); var toRemove = atual.Except(tiposDemandas).ToList(); var toAdd = tiposDemandas.Except(atual).ToList(); if (toRemove.Any()) { var curr = repoPrjTpDem.BuscarPor(t => t.ProjetoId == projetoId && t.Ativo).ToList() .Join( toRemove, d => d.TipoDemandaId, r => r.Id, (TipoDemandaProjeto, TipoDemanda) => new { TipoDemandaProjeto, TipoDemanda } ).Where(w => w.TipoDemanda.Id == w.TipoDemandaProjeto.TipoDemandaId); foreach (var r in curr) { repository.Remover(r.TipoDemandaProjeto.Id); } } foreach (var a in toAdd) { var objToAdd = new ProjetoTipoDemanda { ProjetoId = projetoId, TipoDemandaId = a.Id }; repoPrjTpDem.Adicionar(objToAdd); } repository.SaveChanges(); return(repoPrjTpDem.BuscarPor(b => b.ProjetoId == projetoId && b.Ativo)); }
public dynamic ObterPessoaColaborador(int pessoaId) { try { var pessoa = repository.ObterPorId(pessoaId); if (pessoa == null) { throw new Exception($"Pessoa com ID: {pessoaId}, não existe"); } var colaborador = repColaborador.BuscarPor(c => c.PessoaId == pessoaId).FirstOrDefault(); var telefones = repTelefones.BuscarPor(t => t.PessoaId == pessoaId && t.Ativo == true, i => i.Tipo).ToList(); var ferramentasAssociadas = colaborador != null ? (from af in ctx.AcessoFerramentas join f in ctx.Ferramentas on af.FerramentaId equals f.Id where af.Ativo && af.ColaboradorId == colaborador.Id select f).ToList() : new List <Ferramenta>(); var siglasAssociadas = colaborador != null ? (from acs in ctx.AcessoSiglas join s in ctx.Siglas on acs.SiglaId equals s.Id where acs.Ativo && acs.ColaboradorId == colaborador.Id select s).ToList() : new List <Sigla>(); dynamic result = new { pessoa, colaborador, ferramentasAssociadas, siglasAssociadas, telefones }; return(result); } catch (Exception ex) { throw ex; } }