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); }
/// <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); }