/// <summary> /// Executa o calculo da rentabilidade sobre o item informado. /// </summary> /// <param name="item"></param> /// <returns></returns> public ResultadoRentabilidade Calcular(IItemRentabilidade item) { item.Require(nameof(item)).NotNull(); var variaveisItem = CriarVariaveisItem(item); var agregador = new Mathematical.AggregateVariavelCollection(); agregador.Add(variaveisItem); agregador.Add(_variaveisIndicadoresFinanceiro); // Percorre as variáveis de calculo compiladas var variaveisCalculo = new Mathematical.VariavelCollection( _variaveisCalculo.Select(f => ((Mathematical.Formula)f).CreateCopy(agregador))); agregador.Add(variaveisCalculo); var formula = _formulaCalculo.CreateCopy(agregador); var custoTotal = formula.ObterValor(); return(new ResultadoRentabilidade(_variaveisIndicadoresFinanceiro, variaveisItem, variaveisCalculo, custoTotal, item)); }
/// <summary> /// Cria as variáveis para as expressões de calculo. /// </summary> /// <returns></returns> private Mathematical.IVariavelCollection CriarVariaveisCalculo() { var agregador = new Mathematical.AggregateVariavelCollection(); agregador.Add(CriarIndicadoresFinanceiros()); agregador.Add(CriarVariaveisItem(new ItemRentabilidadeFake())); foreach (var i in Calculo.Expressoes.Select(f => new Mathematical.Constante(f.Nome, 0.0))) { agregador.Add(i); } var formulas = new List <Mathematical.Formula>(); foreach (var expressao in Calculo.Expressoes) { var formula = new Mathematical.Formula(expressao.Nome, expressao.Texto, agregador); formula.Compilar(); formulas.Add(formula); } return(new Mathematical.VariavelCollection(formulas)); }