Esempio n. 1
0
        public void Obtem_Tabelas_Validas_Em_Periodo_Valido()
        {
            //Arrange
            IServicoFaturamento servicoFaturamento = new ServicoFaturamentoComContexto(_context, _endpoint);
            PeriodoSimples      periodo            = new PeriodoSimples();

            //Act
            Task <IEnumerable <ITabelaDePreco <int> > > task = servicoFaturamento.ListaTabelasDePrecoAsync(periodo);

            //Assert
            Assert.DoesNotThrow(task.Wait);

            IEnumerable <ITabelaDePreco <int> > tabelas = task.Result;

            ITabelaDePreco <int> tabela        = tabelas.ElementAt(new Random().Next(0, tabelas.Count() - 1));
            DateTime             dataAleatoria = PegaDataAleatoria(periodo);
            int categoriaAleatoria             = 1;


            Assert.DoesNotThrow(() => tabela.PrecoEm(dataAleatoria, categoriaAleatoria));
        }
        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);
            }
        }