addSubtotals method

Future<void> addSubtotals(
  1. Iterable<int> amountCols,
  2. Iterable<VolvoxGridSubtotalLevel> levels, {
  3. AggregateType aggregate = AggregateType.AGG_SUM,
  4. bool clearExisting = true,
  5. int mergeColFrom = _subtotalNoMergeColumn,
  6. int mergeColTo = _subtotalNoMergeColumn,
})

Add subtotals for multiple aggregate columns and grouping levels.

Implementation

Future<void> addSubtotals(
  Iterable<int> amountCols,
  Iterable<VolvoxGridSubtotalLevel> levels, {
  AggregateType aggregate = AggregateType.AGG_SUM,
  bool clearExisting = true,
  int mergeColFrom = _subtotalNoMergeColumn,
  int mergeColTo = _subtotalNoMergeColumn,
}) async {
  final amountList = amountCols.toList();
  final levelList = levels.toList();
  if (!isCreated || amountList.isEmpty || levelList.isEmpty) return;

  await withRedrawSuspended(() async {
    if (amountList.length > 1) {
      await _configure(
          GridConfig()..outline = (OutlineConfig()..multiTotals = true));
    }
    if (clearExisting) {
      await subtotal(
        AggregateType.AGG_CLEAR,
        groupOnCol: _subtotalClearColumn,
        aggregateCol: _subtotalClearColumn,
        caption: '',
        backColor: _subtotalClearColor,
        foreColor: _subtotalClearColor,
        addOutline: false,
      );
    }
    final wantMerge = mergeColFrom >= _subtotalMinValidMergeColumn &&
        mergeColTo >= mergeColFrom;
    for (final level in levelList) {
      final groupIndex = level.groupCol ?? _subtotalNoGroupColumn;
      for (final col in amountList) {
        final result = await subtotal(
          aggregate,
          groupOnCol: groupIndex,
          aggregateCol: col,
          caption: level.caption,
          backColor: level.backColor,
          foreColor: level.foreColor,
          addOutline: true,
        );
        if (wantMerge) {
          await _mergeSubtotalLevelZero(result, mergeColFrom, mergeColTo);
        }
      }
    }
  });
}