Example #1
0
        public void CalculoBasico()
        {
            var indicadoresFinanceiros = new Dictionary <string, decimal>();

            indicadoresFinanceiros.Add("PCustoADM", 0.18m);
            indicadoresFinanceiros.Add("PIMPFED", 0.0593m);
            indicadoresFinanceiros.Add("TaxaFinanceira", 0.03m);

            var calculo = new CalculoRentabilidade();

            calculo.Add("PrecoCusto2", "-PrecoCusto");
            calculo.Add("CustoFinanceiro", "PrecoVenda * -((TaxaFinanceira/30) * PrazoMedio)");
            calculo.Add("ICMSCompra", "PICMSCompra * PrecoVenda");
            calculo.Add("ICMSVenda", "PrecoVenda * -PICMSVenda");
            calculo.Add("SubstituicaoCompras", "-PrecoCusto * FatorICMSSubstituicao");
            calculo.Add("IPICompra", "PrecoCusto * PIPICompra");
            calculo.Add("IPIVenda", "PrecoVenda * -PIPIVenda");
            calculo.Add("Comissao", "PrecoVenda * -PComissao");
            calculo.Add("CustoADM", "PrecoVenda * -PCustoADM");
            calculo.Add("TOTIMPFED", "PIMPFED * -PrecoVenda");
            calculo.Add("Extras", "-CustosExtras");

            calculo.Formula = "PrecoCusto2 + CustoFinanceiro + ICMSCompra + ICMSVenda + SubstituicaoCompras + IPICompra + IPIVenda + Comissao + CustoADM + TOTIMPFED + Extras";

            var calculadora = new CalculadoraRentabilidade(new ProvedorIndicadorFinanceiro(indicadoresFinanceiros), calculo);

            calculadora.Preparar();

            var item = new MockRetabilidadeItem
            {
                PrecoVendaSemIPI      = 10000,
                PrecoCusto            = 4500,
                PrazoMedio            = 30,
                PercentualICMSCompra  = 0.18M,
                PercentualICMSVenda   = 0.12M,
                FatorICMSSubstituicao = 0,
                PercentualIPICompra   = 0,
                PercentualIPIVenda    = 0,
                PercentualComissao    = 0.03M,
                CustosExtras          = 1500.0M
            };

            var rentabilidade = calculadora.Calcular(item);

            Assert.AreEqual(-8393, rentabilidade.CustoTotal);
            Assert.AreEqual(1607, rentabilidade.RentabilidadeFinanceira);
        }
Example #2
0
        /// <summary>
        /// Cria o calculo da rentabilidade.
        /// </summary>
        /// <returns></returns>
        private Rentabilidade.CalculoRentabilidade CriarCalculoRentabilidade()
        {
            var calculo = new CalculoRentabilidade();

            var expressoes = SourceContext.Instance.CreateQuery()
                             .From <Data.Model.ExpressaoRentabilidade>("e")
                             .LeftJoin <Data.Model.ConfigRegistroRentabilidade>("c.Tipo=?tipo AND c.IdRegistro=e.IdExpressaoRentabilidade", "c")
                             .Add("?tipo", TipoRegistroRentabilidade.Expressao)
                             .Select("e.IdExpressaoRentabilidade, e.Nome, e.Descricao, e.Expressao, e.Formatacao, " +
                                     "ISNULL(c.Posicao, 9999) AS Posicao, ISNULL(c.ExibirRelatorio, 0) AS ExibirRelatorio, e.SomaFormulaRentabilidade")
                             .Execute()
                             .Select(f => new
            {
                IdExpressaoRentabilidade = f.GetInt32("IdExpressaoRentabilidade"),
                Nome                     = f.GetString("Nome"),
                Descricao                = f.GetString("Descricao"),
                Expressao                = f.GetString("Expressao"),
                Formatacao               = f.GetString("Formatacao"),
                Posicao                  = f.GetInt32("Posicao"),
                ExibirRelatorio          = f.GetBoolean("ExibirRelatorio"),
                SomaFormulaRentabilidade = f.GetBoolean("SomaFormulaRentabilidade")
            }).ToList();

            foreach (var i in expressoes)
            {
                calculo.Add(i.Nome, i.Expressao);
            }

            _descritoresExpressaoRentabilidade = expressoes
                                                 .Select(f => new DescritorExpressaoRentabilidade(
                                                             f.IdExpressaoRentabilidade, f.Nome, f.Descricao,
                                                             f.Posicao, f.ExibirRelatorio, f.Formatacao)).ToList();

            calculo.Formula = string.Join(" + ", expressoes.Where(f => f.SomaFormulaRentabilidade).Select(f => f.Nome));
            return(calculo);
        }