public async Task <int> InserirSaldoFuncionarioAsync(EntregaDeSaldoFuncionario modelo)
        {
            EntregaDeSaldoFuncionarioBD entregaBSFuncionarioBD = ConversorEntregaBSFuncionario.ConverteDoDominio(modelo);

            using (var context = _fabricaDeContextos.CriaContextoDe <EntregaContext>(TipoDeConexao.Entrega))
            {
                EntityEntry <EntregaDeSaldoFuncionarioBD> insertedObject = await context.EntregasSaldoFuncionario.AddAsync(entregaBSFuncionarioBD);

                await context.SaveChangesAsync();

                return(insertedObject.Entity.Id);
            }
        }
        public async Task <bool> AtualizarEntregasDosFuncionariosDaRegraInativada(IEnumerable <EntregaDeSaldoFuncionario> entregas)
        {
            var idEntregas = entregas.Select(x => x.Id).Distinct();

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

                    entrega.IdRegra = null;
                    entrega.PercentualDeRemuneracao = 0;
                    entrega.Valor     = 0;
                    entrega.ValorHora = 0;
                    context.EntregasSaldoFuncionario.Update(entrega);
                }

                try
                {
                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    return(false);
                }
                //IEnumerable<EntregaDeSaldoFuncionarioBD> entregasToUpdate = await context.EntregasSaldoFuncionario.Where(x=> idEntregas.Contains(x.Id)).ToArrayAsync();

                //foreach (EntregaDeSaldoFuncionarioBD entrega in entregasToUpdate)
                //{
                //    entrega.
                //}

                //IEnumerable<EntregaDeSaldoFuncionario> retorno = entregas.Select(x => x.ConverteParaDominio());
                return(true);
            }
        }
        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);
            }
        }