public async Task <IEnumerable <EntregaDeSaldoFuncionario> > ObterEntregasDeSaldoDosFuncionariosDaRegra(ParametrosDeRegraDeRemuneracao modelo)
        {
            var tipoDaRegra = TipoDeRegraBD.Get(modelo.Tipo.Id);
            RegraDeRemuneracaoBD      regra = tipoDaRegra.ConverterDe(modelo);
            ParametrosDeFavorecimento fav   = new ParametrosDeFavorecimento();

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                ContratoDeRemuneracaoBD contrato = await context.Contratos
                                                   .Include(c => c.Favorecimento)
                                                   .Where(x => x.Id == regra.IdContrato).FirstOrDefaultAsync();

                if (contrato.Favorecimento == null)
                {
                    return(new List <EntregaDeSaldoFuncionario>());
                }

                fav = contrato.Favorecimento.ConverterPara();
            }



            using (var context = _fabricaDeContextos.CriaContextoDe <EntregaContext>(TipoDeConexao.Entrega))
            {
                IEnumerable <EntregaDeSaldoFuncionarioBD> entregas = await context.EntregasSaldoFuncionario
                                                                     //.Include(c=>c.Regra)
                                                                     .Where(x => fav.IdsDasEntidadesFavorecidas.Contains(x.IdFuncionario)).ToArrayAsync();

                IEnumerable <EntregaDeSaldoFuncionario> retorno = ConversorEntregaBSFuncionario.ConverteParaDominio(entregas);
                return(retorno);
            }
        }
Beispiel #2
0
        //public async Task<IEnumerable<IRegraDeRemuneracao>> ListarVigentesEm(IEnumerable<Competencia> competencias, TipoDeRegra[] tiposDeRegras = null)
        //{
        //    if (competencias == null)
        //        throw new ArgumentException(nameof(competencias) + " é nulo");


        //    IEnumerable<RegraDeRemuneracaoModeloBancoDeDados> regrasBD;
        //    contextOptions<RemuneracaoContext> option = Helper.ObtemOpcoesDeConexao<RemuneracaoContext>(_stringDeConexao);

        //    using (var context = new RemuneracaoContext(option))
        //    {
        //        regrasBD = await (from regra in context.Regras
        //                          select regra).ToListAsync();
        //    }

        //    regrasBD = regrasBD.Where(reg => reg.Vigencia.ContemCompetencia(competencias.ToArray()));

        //    ConcurrentQueue<IRegraDeRemuneracao> regras = new ConcurrentQueue<IRegraDeRemuneracao>();

        //    //await Task.Factory.StartNew(() => Parallel.ForEach(regrasBD, regraBD =>
        //    //{
        //    //    regras.Enqueue(regraBD.ConverterParaRegra());
        //    //}));

        //    return regras;
        //}

        //public async Task<IEnumerable<IRegraDeRemuneracao>> ListarVigentesEm(IEnumerable<Periodo> periodos, TipoDeRegra[] tiposDeRegras = null)
        //{
        //    if (periodos == null)
        //        throw new ArgumentException(nameof(periodos) + " é nulo");

        //    IEnumerable<RegraDeRemuneracaoModeloBancoDeDados> regrasBD;
        //    contextOptions<RemuneracaoContext> option = Helper.ObtemOpcoesDeConexao<RemuneracaoContext>(_stringDeConexao);

        //    using (var context = new RemuneracaoContext(option))
        //    {
        //        regrasBD = await (from regra in context.Regras
        //                          select regra).ToListAsync();
        //    }

        //    regrasBD = regrasBD.Where(reg => periodos.Where(periodo => periodo.Intersecta(reg.Vigencia)).Count() > 0);

        //    ConcurrentQueue<IRegraDeRemuneracao> regras = new ConcurrentQueue<IRegraDeRemuneracao>();

        //    //await Task.Factory.StartNew(() => Parallel.ForEach(regrasBD, regraBD =>
        //    //{
        //    //    regras.Enqueue(regraBD.ConverterParaRegra());
        //    //}));

        //    return regras;
        //}

        public async Task RemoveAsync(int id)
        {
            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                RegraDeRemuneracaoBD regra = await context.Regras.FindAsync(id);

                regra.Deleted = true;
                context.Update(regra);
                await context.SaveChangesAsync();
            }
        }
Beispiel #3
0
        private async Task VerificaSeRegraEstaNaVigenciaDoContrato(RegraDeRemuneracaoBD regra)
        {
            IContratoDeRemuneracao contratoDaRegra = (await _repositorioDeContratos.ObterAsync(new int[] { regra.IdContrato })).First();

            PeriodoSimples vigenciaDoContrato = new PeriodoSimples(contratoDaRegra.Vigencia.Inicio.Date, contratoDaRegra.Vigencia.Fim.Date.AddDays(1));
            PeriodoSimples vigenciaDaRegra    = new PeriodoSimples(regra.Vigencia.Inicio.Date, regra.Vigencia.Fim.Date);

            if (!vigenciaDoContrato.Contem(vigenciaDaRegra))
            {
                throw new UserException("A vigência da regra deve estar dentro da vigência do contrato");
            }
        }
Beispiel #4
0
        public RegraDeRemuneracaoBD ConverterDe(ParametrosDeRegraDeRemuneracao parametros)
        {
            if (!(parametros.Tipo == TipoDeRegra.Fixa))
            {
                throw new ArgumentException("Este conversor converte apenas regras fixas");
            }

            RegraDeRemuneracaoBD regraConvertida = new RegraDeRemuneracaoBD(TipoDeRegraBD.Fixa, parametros);

            regraConvertida.Parametros = JsonConvert.SerializeObject(parametros.ParametrosExtras);

            return(regraConvertida);
        }
Beispiel #5
0
        public async Task UpdateAsync(ParametrosDeRegraDeRemuneracao modelo)
        {
            var tipoDaRegra            = TipoDeRegraBD.Get(modelo.Tipo.Id);
            RegraDeRemuneracaoBD regra = tipoDaRegra.ConverterDe(modelo);

            await VerificaSeRegraEstaNaVigenciaDoContrato(regra);
            await VerificaSeJaExisteRegraComMesmoTipoNoContrato(regra);

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                context.Update(regra);
                await context.SaveChangesAsync();
            }
        }
Beispiel #6
0
        private async Task VerificaSeJaExisteRegraComMesmoTipoNoContrato(RegraDeRemuneracaoBD regra)
        {
            IContratoDeRemuneracao contratoDaRegra = (await _repositorioDeContratos.ObterAsync(new int[] { regra.IdContrato })).First();

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                var existeRegra = await context.Regras.Where(r => !r.Deleted && r.IdContrato == regra.IdContrato && r.Tipo == regra.Tipo && r.Vigencia.IntersectaIntervaloFechado(regra.Vigencia) && r.Id != regra.Id).ToListAsync();

                if (existeRegra.Count() > 0)
                {
                    throw new UserException("Não foi possível inserir esta regra. Este contrato já possui uma regra do mesmo tipo nesta vigência, tente alterar a vigência da regra.");
                }
            }
        }
Beispiel #7
0
        public async Task <int> InserirAsync(IRegraDeRemuneracao modelo)
        {
            var tipoDaRegra            = TipoDeRegraBD.Get(modelo.Tipo.Id);
            RegraDeRemuneracaoBD regra = tipoDaRegra.ConverteDe(modelo);

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                EntityEntry <RegraDeRemuneracaoBD> insertedObject = await context.Regras.AddAsync(regra);

                await context.SaveChangesAsync();

                return(insertedObject.Entity.Id);
            }
        }
Beispiel #8
0
        public ParametrosDeRegraDeRemuneracao ConverterDe(RegraDeRemuneracaoBD regraBD)
        {
            dynamic parametrosExtras = null;

            if (regraBD.Parametros != null)
            {
                JObject jobj = JsonConvert.DeserializeObject <JObject>(regraBD.Parametros);
                parametrosExtras             = new ExpandoObject();
                parametrosExtras.Versao      = jobj["Versao"];
                parametrosExtras.Recorrencia = jobj["Recorrencia"];
                parametrosExtras.Dinheiro    = jobj["Dinheiro"];
            }
            ParametrosDeRegraDeRemuneracao parametros = new ParametrosDeRegraDeRemuneracao(regraBD.Id, regraBD.Nome, regraBD.IdContrato, regraBD.Percentual, regraBD.PercentualDesconto, TipoDeRegra.Fixa, parametros: parametrosExtras, vigencia: regraBD.Vigencia);

            return(parametros);
        }
Beispiel #9
0
        public async Task <int> InserirAsync(ParametrosDeRegraDeRemuneracao modelo)
        {
            var tipoDaRegra            = TipoDeRegraBD.Get(modelo.Tipo.Id);
            RegraDeRemuneracaoBD regra = tipoDaRegra.ConverterDe(modelo);

            await VerificaSeRegraEstaNaVigenciaDoContrato(regra);
            await VerificaSeJaExisteRegraComMesmoTipoNoContrato(regra);

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                EntityEntry <RegraDeRemuneracaoBD> insertedObject = await context.Regras.AddAsync(regra);

                await context.SaveChangesAsync();

                return(insertedObject.Entity.Id);
            }
        }
Beispiel #10
0
        public RegraDeRemuneracaoBD ConverterDe(IRegraDeRemuneracao regra)
        {
            if (!(regra is RegraFixaPorValor))
            {
                throw new ArgumentException("Este conversor converte apenas regras fixas");
            }

            var regraPorHora = regra as RegraFixaPorValor;

            RegraDeRemuneracaoBD regraConvertida = new RegraDeRemuneracaoBD(TipoDeRegraBD.Fixa, regra);

            regraConvertida.Parametros = JsonConvert.SerializeObject(regra.Parametros.ParametrosExtras);

            if (regraConvertida.Vigencia != null)
            {
                regraConvertida.Vigencia = new PeriodoSimples(regraConvertida.Vigencia.Inicio.Date, regraConvertida.Vigencia.Fim.Date);
            }

            return(regraConvertida);
        }
        public async Task <bool> AtualizarEntregasDosFuncionariosDaRegra(IEnumerable <EntregaDeSaldoFuncionario> entregas, ParametrosDeRegraDeRemuneracao paramRegra, IEnumerable <ITabelaDePreco <int> > tabelasDePreco)
        {
            var idEntregas              = entregas.Select(x => x.Id).Distinct();
            var tipoDaRegra             = TipoDeRegraBD.Get(paramRegra.Tipo.Id);
            RegraDeRemuneracaoBD regra  = tipoDaRegra.ConverterDe(paramRegra);
            var idTabelaDePreco         = paramRegra.ParametrosExtras.IdTabelaDePreco.Value;
            ITabelaDePreco <int> tabela = tabelasDePreco.Single(x => x.Id == idTabelaDePreco);


            using (var context = _fabricaDeContextos.CriaContextoDe <EntregaContext>(TipoDeConexao.Entrega))
            {
                foreach (var idEntrega in idEntregas)
                {
                    EntregaDeSaldoFuncionarioBD entrega = await context.EntregasSaldoFuncionario.FindAsync(idEntrega);

                    Dinheiro valorHora = tabela.PrecoEm(entrega.DataFaturamento, entrega.IdCategoria, Moeda.Real);
                    entrega.IdRegra = regra.Id;
                    entrega.PercentualDeRemuneracao = (int)regra.Percentual;
                    entrega.Valor     = (entrega.QtdMinutos / 60) * valorHora.Valor;
                    entrega.ValorHora = valorHora.Valor;

                    context.EntregasSaldoFuncionario.Update(entrega);
                }

                try
                {
                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    return(false);
                }

                return(true);
            }
        }