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<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(); } }
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"); } }
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); }
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(); } }
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."); } } }
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); } }
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); }
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); } }
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); } }