private async Task VerificaSeTipoLimiteJaExiste(ParametrosDeLimites limite) { using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao)) { ParametrosDeLimitesBD limiteBD = new ParametrosDeLimitesBD(limite); //TODO: Talvez tenha que mudar maneira de pegar idsDosContextosDeAplicacao quando tiver mais de um contexto. PeriodoSimples periodoLimite = new PeriodoSimples(limite.DataInicio, limite.DataFim.Value.Date.AddDays(1)); IEnumerable <int> idsVinculos = await context.VinculosLimites.Where(x => x.IdVinculo == limite.IdsDosContextosDeAplicacao.First()).Select(l => l.IdLimite).ToListAsync(); IEnumerable <ParametrosDeLimitesBD> limiteEncontrado = await context.Limites.Where( l => l.TipoDeLimite == limiteBD.TipoDeLimite && l.Deleted == false && new PeriodoSimples(l.DataInicio, l.DataFim.Value.AddDays(1)).Intersecta(periodoLimite) && idsVinculos.Contains(l.Id) && l.Id != limite.Id).ToListAsync(); if (limiteEncontrado.Count() > 0) { throw new UserException("Não foi possível inserir o limite. Esta regra já possui um " + limite.Tipo.Name + " nesta vigência."); } } }
public async Task UpdateAsync(ParametrosDeLimites limite) { var limiteBDNew = new ParametrosDeLimitesBD(limite); await VerificaSeTipoLimiteJaExiste(limite); await VerificaSeLimiteEstaNaVigenciaDaRegra(limite); using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao)) { var limiteBD = context.Limites.FirstOrDefault(x => x.Id == limite.Id); if (limiteBD != null) { var vinculos = context.VinculosLimites.Where(x => x.IdLimite == limiteBD.Id); foreach (VinculoDeContextoDeLimiteBD vinculo in vinculos) { context.Entry(vinculo).State = EntityState.Deleted; } await context.SaveChangesAsync(); limiteBD.Atualizar(limite); context.Update(limiteBD); await context.SaveChangesAsync(); } } }
public async Task RemoveAsync(int id) { using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao)) { ParametrosDeLimitesBD limite = await context.Limites.FindAsync(id); limite.Deleted = true; context.Update(limite); await context.SaveChangesAsync(); } }
public async Task <object> InserirLimite(ParametrosDeLimites limite) { ParametrosDeLimitesBD limiteBD = new ParametrosDeLimitesBD(limite); await VerificaSeTipoLimiteJaExiste(limite); await VerificaSeLimiteEstaNaVigenciaDaRegra(limite); using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao)) { EntityEntry <ParametrosDeLimitesBD> limiteInserido = await context.Limites.AddAsync(limiteBD); await context.SaveChangesAsync(); return(limiteInserido.Entity.Id); } }