示例#1
0
        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.");
                }
            }
        }
示例#2
0
        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();
                }
            }
        }
示例#3
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var remuneracao = new ParametrosDeLimites();

            serializer.Populate(reader, remuneracao);

            return(remuneracao);
        }
示例#4
0
        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");
            }
        }
示例#5
0
 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);
        }
示例#7
0
        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);
            }
        }
示例#8
0
 internal ConstrutorDeLimitePadrao(ParametrosDeLimites parametros)
 {
     _parametros = parametros;
 }
        public async Task <object> SalvaLimiteAsync(LimiteViewModel limiteVM)
        {
            ParametrosDeLimites limite = new ParametrosDeLimites(limiteVM);

            return(await _repositorioDeLimites.InserirLimite(limite));
        }
示例#10
0
        private ILimiteDeRemuneracao ConstruirLimite(ParametrosDeLimites parametros)
        {
            var construtor = new ConstrutorDeLimitePadrao(parametros);

            return(construtor.ConstruirContexto().ConstruirFormaDeAbatimento().Construir());
        }