Пример #1
0
 public static HtmlBuilder CrosstabBody(
     this HtmlBuilder hb,
     Context context,
     SiteSettings ss,
     View view,
     Column groupByX,
     Column groupByY,
     List <Column> columns,
     string aggregateType,
     Column value,
     string timePeriod,
     DateTime month,
     EnumerableRowCollection <DataRow> dataRows,
     bool inRange = true)
 {
     if (!inRange)
     {
         return(hb);
     }
     if (groupByY != null)
     {
         hb.Table(
             context: context,
             ss: ss,
             choicesX: CrosstabUtilities.ChoicesX(groupByX, timePeriod, month),
             choicesY: CrosstabUtilities.ChoicesY(groupByY),
             aggregateType: aggregateType,
             value: value,
             daily: Daily(groupByX, timePeriod),
             data: CrosstabUtilities.Elements(groupByX, groupByY, dataRows));
     }
     else
     {
         var columnList = CrosstabUtilities.GetColumns(
             context: context,
             ss: ss,
             columns: columns);
         hb.Table(
             context: context,
             ss: ss,
             choicesX: CrosstabUtilities.ChoicesX(groupByX, timePeriod, month),
             choicesY: CrosstabUtilities.ChoicesY(columnList),
             aggregateType: aggregateType,
             value: value,
             daily: Daily(groupByX, timePeriod),
             data: CrosstabUtilities.ColumnsElements(groupByX, dataRows, columnList));
     }
     return(hb
            .Hidden(controlId: "CrosstabXType", value: groupByX?.TypeName)
            .Hidden(controlId: "CrosstabPrevious", value: Times.PreviousMonth(month))
            .Hidden(controlId: "CrosstabNext", value: Times.NextMonth(month))
            .Hidden(controlId: "CrosstabThisMonth", value: Times.ThisMonth()));
 }
Пример #2
0
        private static HtmlBuilder CrosstabColumnsBody(
            this HtmlBuilder hb,
            SiteSettings ss,
            View view,
            string groupByX,
            string columns,
            string aggregateType,
            string value,
            string timePeriod,
            DateTime month,
            EnumerableRowCollection <DataRow> dataRows)
        {
            var columnList = CrosstabUtilities.GetColumns(
                ss, columns.Deserialize <IEnumerable <string> >());
            var data = new List <CrosstabElement>();

            dataRows.ForEach(o =>
                             columnList.ForEach(column =>
                                                data.Add(new CrosstabElement(
                                                             o["GroupByX"].ToString(),
                                                             column,
                                                             o[column].ToDecimal()))));
            var xColumn  = ss.GetColumn(groupByX);
            var choicesX = xColumn?.TypeName == "datetime"
                ? CorrectedChoices(xColumn, timePeriod, month)
                : CorrectedChoices(
                xColumn, xColumn?.Choices(data.Select(o => o.GroupByX)));
            var choicesY = columnList.ToDictionary(
                o => o,
                o => new ControlData(ss.GetColumn(o)?.LabelText));

            return(hb.Table(
                       ss: ss,
                       choicesX: choicesX,
                       choicesY: choicesY,
                       aggregateType: aggregateType,
                       value: ss.GetColumn(value),
                       daily: Daily(xColumn, timePeriod),
                       columns: columnList,
                       data: data));
        }
Пример #3
0
        private static HtmlBuilder CrosstabColumnsBody(
            this HtmlBuilder hb,
            SiteSettings ss,
            View view,
            Column groupByX,
            List <Column> columns,
            string aggregateType,
            Column value,
            string timePeriod,
            DateTime month,
            EnumerableRowCollection <DataRow> dataRows)
        {
            var columnList = CrosstabUtilities.GetColumns(ss, columns);
            var data       = new List <CrosstabElement>();

            dataRows.ForEach(o =>
                             columnList.ForEach(column =>
                                                data.Add(new CrosstabElement(
                                                             o.String(groupByX.ColumnName),
                                                             column.ColumnName,
                                                             o.Decimal(column.ColumnName)))));
            var choicesX = groupByX?.TypeName == "datetime"
                ? CorrectedChoices(groupByX, timePeriod, month)
                : groupByX.ChoiceHash.ToDictionary(
                o => o.Key,
                o => new ControlData(o.Value.Text));
            var choicesY = columnList.ToDictionary(
                o => o.ColumnName,
                o => new ControlData(o?.LabelText));

            return(hb.Table(
                       ss: ss,
                       choicesX: choicesX,
                       choicesY: choicesY,
                       aggregateType: aggregateType,
                       value: value,
                       daily: Daily(groupByX, timePeriod),
                       columns: columnList,
                       data: data));
        }