private IEnumerable <FunctionInfo> GetFormulaFunctions(ForecastColumn column) { var settings = column.GetColumnSettings <FormulaSetting>(); var formula = settings.SummaryValue ?? settings.Value ?? new FormulaItem[0]; var functions = FormulaUtilities.GetFunctions(formula); return(functions); }
private IEnumerable <TableCell> InnerCalculate(IEnumerable <TableCell> cells, Guid recordId) { var calculatedCells = new List <TableCell>(cells); var formulaSummaryCells = new List <TableCell>(); IEnumerable <ForecastColumn> notFormulaColumns = ForecastColumns.Where(column => !column.GetColumnSettings <FormulaSetting>().UseInSummary); FormulaUtilities.IterateFormulaColumns(ForecastColumns, (formulaColumn) => { if (notFormulaColumns.Contains(formulaColumn)) { return; } IEnumerable <TableCell> newCells = CalculateValuesForColumn(formulaColumn, calculatedCells, recordId); formulaSummaryCells.AddRange(newCells); calculatedCells.AddRange(newCells); }); return(formulaSummaryCells); }
private IEnumerable <TableCell> CalculateValuesForColumn(ForecastColumn calculationColumn, IEnumerable <TableCell> cells, Guid recordId) { var calculatedCells = new List <TableCell>(); var formula = FormulaUtilities.DeserializeFormula(calculationColumn); foreach (var period in Periods) { var values = GetFormulaValues(formula, period, cells); decimal value = FormulaUtilities.Calculate(formula, values); calculatedCells.Add(new TableCell { GroupCode = period, ColumnCode = calculationColumn.Code, Value = (double)value, RecordId = recordId, Id = calculationColumn.Id }); } return(calculatedCells); }