private static void ProcessSheetColumns( UserConnection userConnection, EntitySchema columnSchema, IEnumerable <ForecastColumn> columns) { foreach (ForecastColumn column in columns) { if (!IsFormulaColumn(column)) { continue; } FormulaSetting settings = column.GetColumnSettings <FormulaSetting>(); if (!ShouldMigrateColumn(settings)) { continue; } var sumFormulaItems = settings.UseInSummary ? BuildSumAllFormula(settings) : BuildSUMSelfFormula(column); settings.SummaryValue = sumFormulaItems; var newSettingsJson = JsonConvert.SerializeObject(settings); var entity = columnSchema.CreateEntity(userConnection); entity.FetchFromDB(column.Id); entity.SetColumnValue("Settings", newSettingsJson); entity.Save(false); } }
private static FormulaItem[] BuildSumAllFormula(FormulaSetting settings) { var value = settings.Value; if (value == null) { return(new FormulaItem[] {}); } var summaryValue = new List <FormulaItem>(value.Count() * 2); foreach (FormulaItem item in value) { if (item.Type != FormulaItemType.Column) { summaryValue.Add(item); continue; } summaryValue.Add(new FormulaItem { Type = FormulaItemType.Function, Caption = "SUM", Value = "SUM", }); summaryValue.Add(OpenBrace()); summaryValue.Add(item); summaryValue.Add(ClosedBrace()); } return(summaryValue.ToArray()); }
private bool IsFormulaInColumnValid(FormulaSetting settings, FormulaSettingType type) { if (UserConnection.GetIsFeatureEnabled("ForecastSummaryFormula")) { if (type == FormulaSettingType.Summary) { return(FormulaUtilities.Validate(settings.SummaryValue ?? new FormulaItem[0])); } } return(FormulaUtilities.Validate(settings.Value ?? new FormulaItem[0])); }
private IEnumerable <ForecastColumn> GetColumnsToCalculate(Guid sheetId) { var useFormulaColumn = UserConnection.GetIsFeatureEnabled("CalcTotalByFormula"); var columnsToCalculate = ColumnRepository.GetColumns(sheetId).Where(column => { if (!useFormulaColumn) { return(column.TypeId != ForecastConsts.FormulaColumnTypeId); } FormulaSetting setting = column.GetColumnSettings <FormulaSetting>(); return(!setting.UseInSummary); }); return(columnsToCalculate); }
private static bool ShouldMigrateColumn(FormulaSetting settings) { return(settings.SummaryValue == null); }