From 18209bda1e349a8e248af4da435a6b309a97c8da Mon Sep 17 00:00:00 2001 From: Coleman Watts <coleman@civicrm.org> Date: Tue, 24 May 2022 19:15:30 -0400 Subject: [PATCH] SearchKit - Fix default aggregate function for grand total rows --- ext/search_kit/ang/crmSearchAdmin.module.js | 18 ++++++++---------- .../crmSearchAdmin/crmSearchAdmin.component.js | 5 +++-- .../searchAdminDisplayTable.component.js | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/ext/search_kit/ang/crmSearchAdmin.module.js b/ext/search_kit/ang/crmSearchAdmin.module.js index 0364e3e5a6a..ddd9bc3350a 100644 --- a/ext/search_kit/ang/crmSearchAdmin.module.js +++ b/ext/search_kit/ang/crmSearchAdmin.module.js @@ -340,22 +340,20 @@ fieldToColumn: fieldToColumn, // Supply default aggregate function appropriate to the data_type getDefaultAggregateFn: function(info) { - var ret = {flag_before: ''}; + var arg = info.args[0] || {}; + if (arg.suffix) { + return null; + } switch (info.data_type) { case 'Integer': // For the `id` field, default to COUNT, otherwise SUM - ret.fnName = (info.args[0] && info.args[0].field && info.args[0].field.name === 'id') ? 'COUNT' : 'SUM'; - break; + return (!info.fn && arg.field && arg.field.name === 'id') ? 'COUNT' : 'SUM'; case 'Float': - ret.fnName = 'SUM'; - break; - - default: - ret.fnName = 'GROUP_CONCAT'; - ret.flag_before = 'DISTINCT '; + case 'Money': + return 'SUM'; } - return ret; + return null; }, // Find all possible search columns that could serve as contact_id for a smart group getSmartGroupColumns: function(api_entity, api_params) { diff --git a/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js b/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js index 3e121a8203e..53a30ef8c14 100644 --- a/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -330,8 +330,9 @@ if (ctrl.canAggregate(col)) { // Ensure all non-grouped columns are aggregated if using GROUP BY if (!info.fn || info.fn.category !== 'aggregate') { - var dfl = searchMeta.getDefaultAggregateFn(info); - ctrl.savedSearch.api_params.select[pos] = dfl.fnName + '(' + dfl.flag_before + fieldExpr + ') AS ' + dfl.fnName + '_' + fieldExpr.replace(/[.:]/g, '_'); + var dflFn = searchMeta.getDefaultAggregateFn(info) || 'GROUP_CONCAT', + flagBefore = dflFn === 'GROUP_CONCAT' ? 'DISTINCT ' : ''; + ctrl.savedSearch.api_params.select[pos] = dflFn + '(' + flagBefore + fieldExpr + ') AS ' + dflFn + '_' + fieldExpr.replace(/[.:]/g, '_'); } } else { // Remove aggregate functions when no grouping diff --git a/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js b/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js index d2e09fcd496..b735571bfe4 100644 --- a/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js +++ b/ext/search_kit/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js @@ -67,7 +67,7 @@ _.each(ctrl.display.settings.columns, function(col) { if (col.type === 'field') { col.tally = { - fn: searchMeta.getDefaultAggregateFn(searchMeta.parseExpr(col.key)).fnName + fn: searchMeta.getDefaultAggregateFn(searchMeta.parseExpr(ctrl.parent.getExprFromSelect(col.key))) }; } }); -- GitLab