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]));
 }
示例#4
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);
 }