Example #1
0
        public static IEnumerable <object[]> CenariosComDescontoMaiorQueValorBruto()
        {
            List <object[]> casos = new List <object[]>();
            Dinheiro        zero  = Dinheiro.Zero;

            try
            {
                IFechamentoDeRemuneracao fechamentoAlvo = LOMock.ConfiguraFechamento(LOMock.ID_FECHAMENTO_MOCK, LOMock.ID_FAVORECIDO, Dinheiro.EmReais(200), Dinheiro.EmReais(200));
                var caso1 = new object[] { fechamentoAlvo, zero, zero };

                var caso2 = new object[] { fechamentoAlvo, Dinheiro.EmReais(100), zero };

                var caso3 = new object[] { fechamentoAlvo, Dinheiro.EmReais(300), zero };

                casos.Add(caso1);
                casos.Add(caso2);
                casos.Add(caso3);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            //Nao permitir casos zerados
            return(casos.Where(caso => (!caso[1].Equals(zero) || !caso[2].Equals(zero)) && ((IFechamentoDeRemuneracao)caso[0]).ValorBruto < (Dinheiro)caso[1]));
        }
Example #2
0
 public void ConverterDolar()
 {
     Assert.IsTrue(Dinheiro.ConverterDolar(10) == "$10.00");
     Assert.IsTrue(Dinheiro.ConverterDolar(10.2M) == "$10.20");
     Assert.IsTrue(Dinheiro.ConverterDolar(564.52f) == "$564.52");
     Assert.IsTrue(Dinheiro.ConverterDolar(2000.10) == "$2,000.10");
 }
Example #3
0
 protected void SetUp()
 {
     Id         = Guid.NewGuid();
     Tamanho    = new Tamanho(122.53M, "KG");
     Fabricacao = Fabricacao.Importado;
     Valor      = new Dinheiro(100M);
 }
Example #4
0
 public void ConverterReal()
 {
     Assert.IsTrue(Dinheiro.ConverterReal(10) == "R$ 10,00");
     Assert.IsTrue(Dinheiro.ConverterReal(10.2M) == "R$ 10,20");
     Assert.IsTrue(Dinheiro.ConverterReal(564.52f) == "R$ 564,52");
     Assert.IsTrue(Dinheiro.ConverterReal(2000.10) == "R$ 2.000,10");
 }
Example #5
0
        public IEnumerable <IRemuneracao> AbaterValorExcedenteDasRemuneracoes(ILimiteDeRemuneracao limiteOriginario, IEnumerable <IRemuneracao> remuneracoes, Dinheiro valorExcedente)
        {
            //TODO funciona apenas para real
            Dinheiro valorTotal = remuneracoes.Select(rem => rem.ValorAjustado).SomaDinheiro();

            ConcurrentStack <IRemuneracao> remuneracoesAbatidas = new ConcurrentStack <IRemuneracao>();

            Dinheiro totalAbatido = Dinheiro.Zero;

            Parallel.ForEach(remuneracoes, (rem) =>
            {
                decimal percentualDeAbatimento = decimal.Round(rem.ValorAjustado / valorTotal, 7);

                Dinheiro valorDoAbatimento = percentualDeAbatimento * valorExcedente;

                Dinheiro valorDoAbatimentoArrendondado = Dinheiro.Arredondar(valorDoAbatimento, 7);

                IRemuneracao remuneracaoDivididaEmPartesAbatidas = AbaterRemuneracao(rem, valorDoAbatimentoArrendondado, limiteOriginario);

                if (limiteOriginario.Tipo.Id.Equals("LIMITE_MINIMO") && remuneracaoDivididaEmPartesAbatidas.ValorAjustado > Dinheiro.Zero || limiteOriginario.Tipo.Id.Equals("LIMITE_MAXIMO"))
                {
                    remuneracoesAbatidas.Push(remuneracaoDivididaEmPartesAbatidas);
                    totalAbatido += valorDoAbatimentoArrendondado;
                }
            });

            Dinheiro diferencaDeExcedente = Dinheiro.Arredondar(valorExcedente - totalAbatido, 6);

            if (diferencaDeExcedente != Dinheiro.Zero && remuneracoesAbatidas.Count() > 0)
            {
                CorrecaoDeArredondamentoDeExcedente(remuneracoesAbatidas.First(), diferencaDeExcedente);
            }

            return(remuneracoesAbatidas);
        }
        private IEnumerable <EntregaFixaProcessada> GeraTodasRecorrenciasDeUmaRegra(IEnumerable <Competencia> competencias = null, ParametrosDeRegraDeRemuneracao regraFixa = null)
        {
            PeriodoSimples periodo = competencias.ObtemPeriodoQueCompreendeTodasAsCompetencias();
            DateTime       inicio  = periodo.Inicio;
            DateTime       fim     = periodo.Fim;


            dynamic idMoeda = regraFixa.ParametrosExtras.Dinheiro["Moeda"]["Id"];
            decimal valor   = decimal.Parse(regraFixa.ParametrosExtras.Dinheiro["Valor"].ToString());

            Moeda moeda = Moeda.Obtem(idMoeda.ToString());

            Dinheiro valorRegra = new Dinheiro(valor, moeda);

            JsonSerializerSettings settingsSerializer = new JsonSerializerSettings()
            {
                ContractResolver = new JsonContractResolverDeModelosBase()
            };
            //Dinheiro valorRegra = JsonConvert.DeserializeObject<Dinheiro>(regraFixa.ParametrosExtras.Dinheiro.ToString(), settingsSerializer);
            Recorrencia <DateTime> rec = JsonConvert.DeserializeObject <Recorrencia <DateTime> >(regraFixa.ParametrosExtras.Recorrencia.ToString(), settingsSerializer);


            rec.Atual = regraFixa.Vigencia.Inicio;

            DateTime dataReferencia = rec.Atual;

            Dictionary <int, DateTime> datasDoPeriodo = new Dictionary <int, DateTime>();

            Recorrencia <DateTime> atual = rec;

            while (dataReferencia <= fim)
            {
                datasDoPeriodo.Add(atual.Serie, dataReferencia);
                atual          = atual.ProximoNaRecorrencia;
                dataReferencia = atual.Atual;
            }

            atual          = rec.AnteriorNaRecorrencia;
            dataReferencia = atual.Atual;


            List <EntregaFixaProcessada> entregas = new List <EntregaFixaProcessada>();

            foreach (KeyValuePair <int, DateTime> data in datasDoPeriodo)
            {
                foreach (Competencia comp in competencias)
                {
                    if (comp.Contem(data.Value))
                    {
                        EntregaFixaProcessada ent = new EntregaFixaProcessada(data.Value, comp);
                        ent.Serie   = data.Key;
                        ent.IdRegra = regraFixa.Id;
                        entregas.Add(ent);
                        break;
                    }
                }
            }

            return(entregas);
        }
        public Property TesteDivisaoPorZeroRetornaListaVazia(decimal valor)
        {
            Dinheiro dinheiro = valor;
            var      divisao  = dinheiro.DividirEntre(0);

            return((!divisao.Any()).ToProperty());
        }
        public void Deve_Remunerar_Linearmente_Proporcional_Ao_Percentual_Configurado_Para_a_Regra()
        {
            //Arrange
            Random  rnd           = new Random();
            decimal multiplicador = rnd.Next(0, 100) / 100.0M;
            var     valorHora     = new Dinheiro(valor: 100M, moeda: Moeda.Real);
            Mock <ITabelaDePreco <int> > tabelaMock = GeraTabelaMock(valorHora);
            Profissional   favorecido    = LOMock.GeraProfissionalMock(id: 1, categoria: new Categoria(), nome: "LeMock");
            IFavorecimento favorecimento = LOMock.GeraFavorecimentoMock(new[] { favorecido });
            ParametrosDeRegraDeRemuneracao parametrosRegra1 = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100);
            ParametrosDeRegraDeRemuneracao parametrosRegra2 = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100 * multiplicador);
            IRegraDeRemuneracao            regra1           = LOMock.ConstroiRegraPorHora(parametrosRegra1, favorecimento, tabelaMock.Object);
            IRegraDeRemuneracao            regra2           = LOMock.ConstroiRegraPorHora(parametrosRegra2, favorecimento, tabelaMock.Object);

            Mock <IHoraPreProcessada> entregaMock = ConfiguraMockEntregaRemuneravel(5, favorecido);

            //Act
            IEnumerable <IRemuneracao> remuneracoesA = regra1.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaMock.Object });
            IEnumerable <IRemuneracao> remuneracoesB = regra2.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaMock.Object });
            IEnumerator <IRemuneracao> enumeratorA   = remuneracoesA.GetEnumerator();
            IRemuneracao RemuneracaoA = remuneracoesA.First();
            IEnumerator <IRemuneracao> enumeratorB = remuneracoesB.GetEnumerator();
            IRemuneracao RemuneracaoB = remuneracoesB.First();

            //Assert
            Assert.AreEqual(multiplicador * RemuneracaoA.ValorAjustado.Valor, RemuneracaoB.ValorAjustado.Valor);
        }
Example #9
0
 public bool dinheiroDisponivel(int totalConta)
 {
     if (totalConta <= Dinheiro.ObterValor())
     {
         return(true);
     }
     return(false);
 }
Example #10
0
    public void GiveMoney()
    {
        int dinheiroEarned = MoneyCalculation();

        SaveManager.player.dinheiro += dinheiroEarned;
        Dinheiro.CreateGain(dinheiroEarned, moneyText.transform.position);
        UpdateTextMoney();
    }
        public Property TesteDivisaoNaoPerdeDinheiro2(decimal valor, uint divisor)
        {
            Dinheiro    dinheiro = valor;
            var         divisao  = dinheiro.DividirEntre(divisor);
            Func <bool> property = () => dinheiro.Equals(divisao.Aggregate((Dinheiro)0, (acc, novo) => acc + novo));

            return(property.When(valor > 0 && divisor > 0));
        }
        private static Mock <ITabelaDePreco <int> > GeraTabelaMock(Dinheiro valorHora, int id = ID_TABELA_PRECO)
        {
            Mock <ITabelaDePreco <int> > tabelaMock = new Mock <ITabelaDePreco <int> >();

            tabelaMock.Setup(tab => tab.PrecoEm(It.IsAny <DateTime>(), It.IsAny <int>(), It.IsAny <Moeda>())).Returns(delegate { return(valorHora); });
            tabelaMock.Setup(tab => tab.Id).Returns(id);
            return(tabelaMock);
        }
Example #13
0
File: Arma.cs Project: Nichals/RPG
 public Arma(String nome, Dinheiro dinheiro, Dano dano, float peso, String propriedades, String categoria)
 {
     this.nome         = nome;
     this.valor        = dinheiro;
     this.dano         = dano;
     this.peso         = peso;
     this.propriedades = propriedades;
     this.categoria    = categoria;
 }
Example #14
0
        public void Lanca_Excecao_Se_Desconto_For_Maior_Que_Valor_Bruto(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto, Dinheiro bonus)
        {
            //Arrange
            Initialize(fechamentoDeRemuneracao);
            Dinheiro valorBruto = fechamentoDeRemuneracao.ValorBruto;

            //Act && Assert
            Assert.Throws(typeof(AggregateException), () => _diretor.AplicaAjustesA(fechamentoDeRemuneracao.Id, desconto, bonus).Wait());
        }
        public void TesteDivisaoNaoPerdeDinheiro()
        {
            Dinheiro dinheiro = 1.00M;
            var      divisao  = dinheiro.DividirEntre(3);

            Assert.Collection(divisao
                              , item => Assert.Equal(0.34M, item)
                              , item => Assert.Equal(0.33M, item)
                              , item => Assert.Equal(0.33M, item));
        }
Example #16
0
        public void Deve_formatar_como_string()
        {
            var dinheiro = new Dinheiro("R$", 10.50m);

            var dinheiroComoString = dinheiro.ToString();

            var esperado = string.Format("{0} {1:n2}", dinheiro.Moeda, dinheiro.Valor);

            Assert.AreEqual(esperado, dinheiroComoString);
        }
Example #17
0
 public static Produto CriarProdutoInternacional(Guid id,
                                                 Tamanho tamanho,
                                                 Fabricacao fabricacao,
                                                 Dinheiro valor)
 {
     return(new ProdutoInternacional(id,
                                     tamanho,
                                     fabricacao,
                                     valor));
 }
Example #18
0
 public void AtualizarValores(Guid id,
                              Tamanho tamanho,
                              Fabricacao fabricacao,
                              Dinheiro valor)
 {
     Id         = id;
     Fabricacao = fabricacao;
     Tamanho    = tamanho ?? throw new ArgumentNullException(nameof(tamanho));
     Valor      = valor ?? throw new ArgumentNullException(nameof(valor));
 }
Example #19
0
        internal override ILimiteDeRemuneracao Construir(IUnidadeDeEntrega valorLimite, bool podeAbaterFechadas = false)
        {
            if (!(valorLimite is Dinheiro))
            {
                throw new ArgumentException("LimiteDoTipoMonetarioMinimo so pode utilizar valores limites em forma de dinheiro");
            }

            Dinheiro limite = (Dinheiro)valorLimite;

            return(new LimiteMinimoPorValorMonetario(limite, podeAbaterFechadas));
        }
Example #20
0
        internal override IMetaConstruivel Construir(IUnidadeDeEntrega valorDaMeta, decimal percentualBonus, decimal percentualPenalizacao)
        {
            if (!(valorDaMeta is Dinheiro))
            {
                throw new ArgumentException("MetaDoTipoMonetarioMinimo so pode utilizar valores limites em forma de dinheiro");
            }

            Dinheiro meta = (Dinheiro)valorDaMeta;

            return(new MetaMonetariaMaximaPorPercentualSobreOTodo(meta, percentualBonus, percentualPenalizacao));
        }
Example #21
0
        public void Deve_Receber_Params_E_Retornar_Nulo()
        {
            var id         = Guid.NewGuid();
            var tamanho    = new Tamanho(122.53M, "KG");
            var fabricacao = Fabricacao.Importado;
            var valor      = new Dinheiro(25.95M);

            var result = new Produto(id, tamanho, fabricacao, valor);

            Assert.IsNull(result, "Objeto deve ser nulo");
        }
Example #22
0
    public static void Receber(int valor)
    {
        int dinheiro = Dinheiro.ObterValor() + valor;

        if (dinheiro >= 9999999)
        {
            dinheiro = 9999999;
        }

        GameObject.Find("Dinheiro").transform.FindChild("Valor").GetComponent <GUIText>().text = dinheiro.ToString();
    }
Example #23
0
        public static void PagamentoAVista()
        {
            Console.WriteLine("À vista você ainda tem 10% de desconto no valor final da sua compra :) ");
            Console.WriteLine("O total da Sua compra foi: " + ValorCompra);
            Console.WriteLine("Informe o valor recebido: ");
            double valorRecebido   = Double.Parse(Console.ReadLine());
            var    pagamentoAvista = new Dinheiro(ValorCompra, valorRecebido);

            pagamentoAvista.Pagar();
            historicoAVista.Add(pagamentoAvista);
        }
Example #24
0
        private void CorrecaoDeArredondamentoDeExcedente(IRemuneracao remuneracao, Dinheiro diferencaDeExcedente)
        {
            var remuneracaoLimitada = remuneracao as IRemuneracaoLimitada;

            IExcedenteDeRemuneracao excedente = remuneracaoLimitada.Excedentes.Last();

            remuneracaoLimitada.RemoverExcedente(excedente);

            IExcedenteDeRemuneracao novoExcedente = new ExcedenteDeRemuneracao(remuneracaoLimitada, excedente.Limite, excedente.ValorBruto, valorExcedenteAoLimiteDestaRemuneracao: excedente.ValorExcedente + diferencaDeExcedente);

            remuneracaoLimitada.AdicionarExcedente(novoExcedente);
        }
        public static IFechamentoDeRemuneracao ConfiguraFechamentoMock(IFechamentoDeRemuneracao fechamento, int idAdicional = 0)
        {
            Dinheiro valorBruto   = fechamento.ValorBruto;
            Dinheiro valorLiquido = fechamento.ValorLiquido;
            Dinheiro desconto     = fechamento.Desconto;
            Dinheiro bonus        = fechamento.Bonus;
            int      idFavorecido = fechamento.LancamentosDeRemuneracao.First().IdFavorecido;
            int      idConta      = fechamento.ContaExecutoraDoInicioDoFechamento;
            int      id           = fechamento.Id + idAdicional;

            IFechamentoDeRemuneracao fechamentoNovo = FabricaDeFechamentos.CriaFechamento(id, ConfiguraLancamentosDeFechamento(idFavorecido, valorBruto, valorLiquido), idConta);

            return(fechamentoNovo);
        }
Example #26
0
        public void Valor_Ajustado_Deve_Ser_Calculado_A_Partir_Do_Valor_Bruto_Da_Remuneracao(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto, Dinheiro bonus)
        {
            //Arrange
            Initialize(fechamentoDeRemuneracao);
            Dinheiro valorBruto = fechamentoDeRemuneracao.ValorBruto;
            Dinheiro ajuste     = bonus - desconto;

            //Act
            _diretor.AplicaAjustesA(fechamentoDeRemuneracao.Id, desconto, bonus).Wait();
            IFechamentoDeRemuneracao remuneracaoAjustada = _repositorio.ObtemFechamento(fechamentoDeRemuneracao.Id).WaitForResult();

            //Assert
            Assert.AreEqual(remuneracaoAjustada.ValorBruto, remuneracaoAjustada.ValorLiquido - ajuste);
        }
Example #27
0
 public Remuneracao(int id, Dinheiro valorARemunerar, int iDFavorecido, Competencia competencia,
                    Vinculacao vinculacao, DateTime dataDaEntrega, bool foiFechada, string nomeFavorecido = null
                    , IRegraDeRemuneracao regraGeradora = null)
 {
     Id                   = id;
     ValorAjustado        = valorARemunerar;
     IdFavorecido         = iDFavorecido;
     CompetenciaDaEntrega = competencia;
     RegraGeradora        = regraGeradora;
     Vinculacao           = vinculacao;
     DataDaEntrega        = dataDaEntrega;
     FoiFechada           = foiFechada;
     NomeFavorecido       = nomeFavorecido;
 }
        private ConstrutorDeRegraDeRemuneracaoFixaPorValor ConstruirValorPagamento(dynamic valorPagamento)
        {
            dynamic idMoeda = valorPagamento["Moeda"]["Id"];
            decimal valor   = decimal.Parse(valorPagamento["Valor"].ToString());

            Moeda moeda = Moeda.Obtem(idMoeda.ToString());

            Dinheiro valorRegra = new Dinheiro(valor, moeda);

            //JsonSerializerSettings settingsSerializer = new JsonSerializerSettings() { ContractResolver = new JsonContractResolverDeModelosBase() };
            //_regraConstruida.ValorDoPagamento = JsonConvert.DeserializeObject<Dinheiro>(valorRegra, settingsSerializer);
            _regraConstruida.ValorDoPagamento = valorRegra;

            return(this);
        }
Example #29
0
        public Dinheiro ObterRendaTotal()
        {
            var dinheiroTotal = Dinheiro.CriarNovo(0);

            foreach (var pessoa in Pessoas)
            {
                if (!pessoa.PossuiRenda())
                {
                    continue;
                }

                dinheiroTotal = pessoa.Renda.Somar(dinheiroTotal);
            }

            return(dinheiroTotal);
        }
        //TODO Melhorar reutilizacao de codigo usando pattern Template - note que a funcao aplica limites é idêntica para o limite máximo e o mínimo

        internal override IEnumerable <IRemuneracao> LimitaRemuneracoesDoContexto(IEnumerable <IRemuneracao> remuneracoesPorContextoDeAcumulacao)
        {
            IEnumerable <IRemuneracao> remuneracoesLimitadasNoContexto = null;
            Dinheiro totalDaRemuneracao = new Dinheiro();

            totalDaRemuneracao = remuneracoesPorContextoDeAcumulacao.Select(rem => rem is IRemuneracaoLimitada ? rem.ValorBruto : rem.ValorAjustado).SomaDinheiro();

            Dinheiro valorJaExcedido = ObtemTotalExcedidoDesteLimite(remuneracoesPorContextoDeAcumulacao);

            Dinheiro valorExcedente = Dinheiro.MenorEntre(_valorLimite, totalDaRemuneracao);
            IEnumerable <IRemuneracao> remuneracoesDisponiveisParaAbatimento = remuneracoesPorContextoDeAcumulacao.Where(rem => !rem.FoiEmitida && (!rem.FoiFechada || _podeAbaterFechadas));

            remuneracoesLimitadasNoContexto = FormaDeAbatimento.AbaterValorExcedenteDasRemuneracoes(this, remuneracoesDisponiveisParaAbatimento, valorExcedente);

            return(remuneracoesLimitadasNoContexto);
        }