public async Task <Prazo> Obter(int IdPrazo) { using (var dbContext = _fabricaDeContextos.CriaContextoDe <CadastroExternoContext>(TipoDeConexao.PreCadastro)) { var taskPrazo = dbContext.Prazos.AsNoTracking().FirstOrDefaultAsync(x => x.Id == IdPrazo); List <PrazoParticipanteBD> taskParticipantesPrazo = await dbContext.PrazoParticipantes.Where(x => x.IdPrazo == IdPrazo).ToListAsync(); IQueryable <PrazoBD> filhosQryObject = dbContext.Prazos.Where(x => x.IdPai == IdPrazo); var taskSubtarefas = filhosQryObject.AsNoTracking().ToListAsync(); Task.WaitAll(taskPrazo, taskSubtarefas); PrazoBD prazo = taskPrazo.Result; //List<PrazoParticipanteBD> participantes = taskParticipantesPrazo; List <PrazoBD> subTarefas = taskSubtarefas.Result; prazo.Participantes = _mapper.Map <List <PrazoParticipanteBD> >(taskParticipantesPrazo); prazo.SubTarefas = subTarefas; foreach (PrazoBD st in prazo.SubTarefas) { List <PrazoParticipanteBD> participantesST = await dbContext.PrazoParticipantes.Where(x => x.IdPrazo == IdPrazo).ToListAsync(); st.Participantes = participantesST.ToArray(); } return(_mapper.Map <Prazo>(prazo)); } }
public async Task CadastrarNovo(Prazo prazo, Guid userGuid) { var userContextData = _sessionContextDataSingleton.ObterUserContext(userGuid); prazo.IdResponsavel = userContextData.IdFuncionario; DateTime agora = DateTime.Now; prazo.DataCriacao = agora; if (prazo.SubTarefas != null) { foreach (Prazo st in prazo.SubTarefas) { st.DataCriacao = agora; st.IdResponsavel = prazo.IdResponsavel; } } using (var dbContext = _fabricaDeContextos.CriaContextoDe <CadastroExternoContext>(TipoDeConexao.PreCadastro)) { prazo.TarefaPai = null; var newPrazo = new PrazoBD().ConverterDeModelo(prazo); await dbContext.Prazos.AddAsync(newPrazo); dbContext.SaveUserGuidForLog(userGuid); await dbContext.SaveChangesAsync(); } }
public async Task Atualizar(Prazo prazo, Guid userGuid) { var userContextData = _sessionContextDataSingleton.ObterUserContext(userGuid); prazo.IdResponsavel = userContextData.IdFuncionario; using (var dbContext = _fabricaDeContextos.CriaContextoDe <CadastroExternoContext>(TipoDeConexao.PreCadastro)) { await DeletarParticipantes(prazo.Id); await DeletaSubTarefas(prazo, dbContext); var prazoDB = await dbContext.Prazos.FindAsync(prazo.Id); var prazoAud = new PrazoBD().ConverterDeModelo(prazo); prazoDB.Atualizar(prazoAud); dbContext.Set <PrazoBD>().Update(prazoDB); dbContext.SaveUserGuidForLog(userGuid); await dbContext.SaveChangesAsync(); if (prazo.SubTarefas != null) { foreach (Prazo st in prazo.SubTarefas) { if (st.PrecisaAtualizar()) { await Atualizar(st, userGuid); } else { await CadastrarNovo(st, userGuid); } } } } }