From: Llewellyn Marshall Date: Thu, 25 May 2023 18:16:08 +0000 (-0400) Subject: add string aggregate transform to reporter module. String aggregate X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=refs%2Fheads%2Fuser%2Flew%2Freporter_string_agg_rebase;p=working%2FEvergreen.git add string aggregate transform to reporter module. String aggregate works on any data-type, converting it to a string before performing the operation. Duplicate values and blanks are skipped. signed-off-by: Llewellyn Marshall --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Reporter/SQLBuilder.pm b/Open-ILS/src/perlmods/lib/OpenILS/Reporter/SQLBuilder.pm index f80557568c..5a1f6d7c59 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Reporter/SQLBuilder.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Reporter/SQLBuilder.pm @@ -888,6 +888,15 @@ sub toSQL { sub is_aggregate { return 1 } +#------------------------------------------------------------------------------------------------- +package OpenILS::Reporter::SQLBuilder::Column::Transform::string_agg; + +sub toSQL { + my $self = shift; + return 'STRING_AGG(DISTINCT nullif("' . $self->{_relation} . '"."' . $self->name . '"::text,\'\'),\',\')'; +} + +sub is_aggregate { return 1 } #------------------------------------------------------------------------------------------------- package OpenILS::Reporter::SQLBuilder::Column::Where; diff --git a/Open-ILS/src/templates/staff/reporter/share/report_strings.tt2 b/Open-ILS/src/templates/staff/reporter/share/report_strings.tt2 index cc49019002..ab8d94d6ca 100644 --- a/Open-ILS/src/templates/staff/reporter/share/report_strings.tt2 +++ b/Open-ILS/src/templates/staff/reporter/share/report_strings.tt2 @@ -82,6 +82,7 @@ s.TFORMS_LABEL_AGE = '[% l( "Age") %]'; s.TFORMS_LABEL_MONTHS_AGO = '[% l( "Months ago") %]'; s.TFORMS_LABEL_QUARTERS_AGO = '[% l( "Quarters ago") %]'; s.TFORMS_LABEL_SUM = '[% l( "Sum") %]'; +s.TFORMS_LABEL_STRING_AGG = '[% l( "String Aggregate") %]'; s.TFORMS_LABEL_AVERAGE = '[% l( "Average") %]'; s.TFORMS_LABEL_ROUND = '[% l( "Round") %]'; s.TFORMS_LABEL_INT = '[% l( "Drop trailing decimals") %]'; @@ -173,6 +174,7 @@ s.TRANSFORMS_AGE = '[% l( "Age") %]'; s.TRANSFORMS_MONTHS_AGO = '[% l( "Months ago") %]'; s.TRANSFORMS_QUARTERS_AGO = '[% l( "Quarters ago") %]'; s.TRANSFORMS_SUM = '[% l( "Sum") %]'; +s.TRANSFORMS_STRING_AGG = '[% l( "String Aggregate") %]'; s.TRANSFORMS_AVERAGE = '[% l( "Average") %]'; s.TRANSFORMS_ROUND = '[% l( "Round") %]'; s.TRANSFORMS_INT = '[% l( "Drop trailing decimals") %]'; diff --git a/Open-ILS/web/js/dojo/openils/reports/nls/reports.js b/Open-ILS/web/js/dojo/openils/reports/nls/reports.js index 17de210e90..efd86cb981 100644 --- a/Open-ILS/web/js/dojo/openils/reports/nls/reports.js +++ b/Open-ILS/web/js/dojo/openils/reports/nls/reports.js @@ -77,6 +77,7 @@ "TFORMS_LABEL_MONTHS_AGO": "Months ago", "TFORMS_LABEL_QUARTERS_AGO": "Quarters ago", "TFORMS_LABEL_SUM": "Sum", + "TFORMS_LABEL_STRING_AGG": "String Aggregate", "TFORMS_LABEL_AVERAGE": "Average", "TFORMS_LABEL_ROUND": "Round", "TFORMS_LABEL_INT": "Drop trailing decimals", @@ -166,6 +167,7 @@ "TRANSFORMS_MONTHS_AGO": "Months ago", "TRANSFORMS_QUARTERS_AGO": "Quarters ago", "TRANSFORMS_SUM": "Sum", + "TRANSFORMS_STRING_AGG": "String Aggregate", "TRANSFORMS_AVERAGE": "Average", "TRANSFORMS_ROUND": "Round", "TRANSFORMS_INT": "Drop trailing decimals" diff --git a/Open-ILS/web/js/ui/default/staff/reporter/services/template.js b/Open-ILS/web/js/ui/default/staff/reporter/services/template.js index 39086549ec..adc6dca354 100644 --- a/Open-ILS/web/js/ui/default/staff/reporter/services/template.js +++ b/Open-ILS/web/js/ui/default/staff/reporter/services/template.js @@ -162,7 +162,12 @@ function($uibModal , $q , egCore , egConfirmDialog , egAlertDialog) { aggregate : true, label : egCore.strings.TRANSFORMS_MAX }, - + + string_agg : { + datatype : OILS_RPT_DTYPE_NOT_BOOL, + label : egCore.strings.TRANSFORMS_STRING_AGG, + aggregate : true + }, /* string transforms ------------------------- */ substring : { diff --git a/Open-ILS/web/reports/oils_rpt_tforms.js b/Open-ILS/web/reports/oils_rpt_tforms.js index ff9da5577c..cf37b61294 100644 --- a/Open-ILS/web/reports/oils_rpt_tforms.js +++ b/Open-ILS/web/reports/oils_rpt_tforms.js @@ -35,6 +35,11 @@ var OILS_RPT_TRANSFORMS = { aggregate : true, label : rpt_strings.TFORMS_LABEL_MAX }, + + string_agg : { + aggregate : true, + label : rpt_strings.TFORMS_STRING_AGG + }, /* string transforms ------------------------- */ diff --git a/Open-ILS/web/reports/xul/transforms.js b/Open-ILS/web/reports/xul/transforms.js index 96b909d8ee..7bcbda9c31 100644 --- a/Open-ILS/web/reports/xul/transforms.js +++ b/Open-ILS/web/reports/xul/transforms.js @@ -74,6 +74,11 @@ var OILS_RPT_TRANSFORMS = { label : rpt_strings.TRANSFORMS_MAX }, + string_agg : { + datatype : OILS_RPT_DTYPE_NOT_BOOL, + label : rpt_strings.TRANSFORMS_STRING_AGG, + aggregate : true + }, /* string transforms ------------------------- */ substring : { diff --git a/build/i18n/po/reports.js/en-CA.po b/build/i18n/po/reports.js/en-CA.po index 46d36692f6..2fb7d057eb 100644 --- a/build/i18n/po/reports.js/en-CA.po +++ b/build/i18n/po/reports.js/en-CA.po @@ -436,6 +436,10 @@ msgstr "Hour of day" msgid "Max" msgstr "Max" +#: reports.js:TFORMS_LABEL_STRING_AGG reports.js:TRANSFORMS_STRING_AGG +msgid "String Aggregate" +msgstr "String Aggregate" + #: reports.js:TEMPLATE_CONF_NOT_IN reports.js:TEMPLATE_CONF_NO_MATCH msgid "Field does not match one of list (comma separated):" msgstr "Field does not match one of list (comma separated):" diff --git a/build/i18n/po/reports.js/en-GB.po b/build/i18n/po/reports.js/en-GB.po index 5a0c70be0e..f0e4251da1 100644 --- a/build/i18n/po/reports.js/en-GB.po +++ b/build/i18n/po/reports.js/en-GB.po @@ -441,6 +441,10 @@ msgstr "Hour of day" msgid "Max" msgstr "Max" +#: reports.js:TFORMS_LABEL_STRING_AGG reports.js:TRANSFORMS_STRING_AGG +msgid "String Aggregate" +msgstr "String Aggregate" + #: reports.js:TEMPLATE_CONF_NOT_IN reports.js:TEMPLATE_CONF_NO_MATCH msgid "Field does not match one of list (comma separated):" msgstr "Field does not match one of list (comma separated):" diff --git a/build/i18n/po/reports.js/reports.js.pot b/build/i18n/po/reports.js/reports.js.pot index 77cee9219d..56253cab3f 100644 --- a/build/i18n/po/reports.js/reports.js.pot +++ b/build/i18n/po/reports.js/reports.js.pot @@ -216,6 +216,10 @@ msgstr "" msgid "Max" msgstr "" +#: reports.js:TFORMS_LABEL_STRING_AGG reports.js:TRANSFORMS_STRING_AGG +msgid "String Aggregate" +msgstr "" + #: reports.js:TFORMS_LABEL_LOWER reports.js:TRANSFORMS_LOWER msgid "Lower case" msgstr ""