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);
            }
        }
        public async Task <int> InserirAsync(IContratoDeRemuneracao modelo)
        {
            var tipo = TipoDeContratoDeRemuneracaoBancoDeDados.Parse(modelo.Tipo.Name);
            ContratoDeRemuneracaoBD contratoBD = tipo.ConverteDe(modelo);

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                EntityEntry <ContratoDeRemuneracaoBD> contratoInserido = await context.AddAsync(contratoBD);

                await context.SaveChangesAsync();

                return(contratoInserido.Entity.Id);
            }
        }
        public async Task <int> UpdateAsync(IContratoDeRemuneracao modelo, int id)
        {
            var tipo = TipoDeContratoDeRemuneracaoBancoDeDados.Parse(modelo.Tipo.Name);
            ContratoDeRemuneracaoBD contratoBD = tipo.ConverteDe(modelo);

            contratoBD.Id = id;

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                context.Contratos.Update(contratoBD);
                await context.SaveChangesAsync();

                return(contratoBD.Id);
            }
        }
        public async Task RemoveAsync(int id)
        {
            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                ContratoDeRemuneracaoBD contrato = await context.Contratos.FindAsync(id);

                contrato.Deleted = true;
                //context.Contratos.Remove(contrato);
                await context.SaveChangesAsync();
            }



            //HTTP DELETE - Remover registro de contrato
            //DbContextOptions<RemuneracaoContext> option = Helper.ObtemOpcoesDeConexao<RemuneracaoContext>(_stringDeConexao);
            //using (var context = new RemuneracaoContext(option))
            //{
            //    ContratoDeRemuneracaoBD contrato = await context.Contratos.FindAsync(id);
            //    context.Contratos.Remove(contrato);
            //    await context.SaveChangesAsync();
            //}
        }
        public async Task AtualizaVinculosAsync(int id, int[] ids)
        {
            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                IEnumerable <RegraDeRemuneracaoBD> regras = await(from regra in context.Regras
                                                                  where ids.Contains(regra.Id)
                                                                  select regra).ToArrayAsync();

                ContratoDeRemuneracaoBD contratos = await(from contrato in context.Contratos
                                                          where contrato.Id == id
                                                          select contrato).FirstOrDefaultAsync();
                if (contratos.Regras != null)
                {
                    contratos.Regras.Concat(regras);
                }
                else
                {
                    contratos.Regras = regras;
                }
                //context.AttachRange(regras);
                //context.Attach(contrato);
                await context.SaveChangesAsync();
            }
        }