diff --git a/ext/search_kit/ang/crmSearchAdmin.module.js b/ext/search_kit/ang/crmSearchAdmin.module.js index 0364e3e5a6a7922e62e21044a3d221c8c5bd5cb0..ddd9bc3350a1053a0d473f35d7bbea0f1e88f9e7 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 3e121a8203ef367a5ab145502064b8571de55bc3..53a30ef8c141a603a21889193068a06d2a35baaa 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 d2e09fcd4960287e355981680a4e9c809ab4fe86..b735571bfe47a03f4a9c53132c13a012853f8e9d 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))) }; } });