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 override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var remuneracao = new ParametrosDeLimites(); serializer.Populate(reader, remuneracao); return(remuneracao); }
private async Task VerificaSeLimiteEstaNaVigenciaDaRegra(ParametrosDeLimites limite) { ParametrosDeRegraDeRemuneracao regraDoLimite = (await _repositorioDeRegras.ObterAsync(limite.IdsDosContextosDeAplicacao)).First(); PeriodoSimples vigenciaDaRegraDoLimite = new PeriodoSimples(regraDoLimite.Vigencia.Inicio.Date, regraDoLimite.Vigencia.Fim.Date.AddDays(1)); if (!vigenciaDaRegraDoLimite.Contem(limite.DataInicio.Value.Date) || !vigenciaDaRegraDoLimite.Contem(limite.DataFim.Value.Date)) { throw new UserException("A vigência do Limite deve estar dentro da vigência da regra"); } }
public ParametrosDeLimitesBD(ParametrosDeLimites parametros) { Id = parametros.Id; Nome = parametros.Nome; ValorLimite = parametros.ValorLimite; TipoDeAbatimento = parametros.TipoDeAbatimento; TipoDeContextoDeAcumulacao = parametros.TipoDeContextoDeAcumulacao; TipoDeContextoDeAplicacao = parametros.TipoDeContextoDeAplicacao; TipoDeLimite = parametros.Tipo; UnidadeDoLimite = parametros.UnidadeDoLimite; DataFim = parametros.DataFim.Value.Date; DataInicio = parametros.DataInicio.Value.Date; IdsDosContextosDeAplicacao = parametros.IdsDosContextosDeAplicacao; }
public async Task <int> AtualizaLimiteAsync(LimiteViewModel limiteVM) { ParametrosDeLimites limite = new ParametrosDeLimites(limiteVM); try { await _repositorioDeLimites.UpdateAsync(limite); } catch (Exception ex) { throw ex; } return(limite.Id); }
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); } }
internal ConstrutorDeLimitePadrao(ParametrosDeLimites parametros) { _parametros = parametros; }
public async Task <object> SalvaLimiteAsync(LimiteViewModel limiteVM) { ParametrosDeLimites limite = new ParametrosDeLimites(limiteVM); return(await _repositorioDeLimites.InserirLimite(limite)); }
private ILimiteDeRemuneracao ConstruirLimite(ParametrosDeLimites parametros) { var construtor = new ConstrutorDeLimitePadrao(parametros); return(construtor.ConstruirContexto().ConstruirFormaDeAbatimento().Construir()); }