From 2e3c8215646033003ad2c49aa2759aa21986ab7e Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Thu, 5 Sep 2013 16:23:28 +0000 Subject: [PATCH] Bug 10792: fix sorting of funds table on acquisitions home page This patch introduces a DataTables sorting plugin, title-numeric, for sorting cells based on a decimal number embedded in a span title attribute. This allows currency amounts to be formatted properly for display without having to writing a sorting plugin that's super-smart about removing the formatting, particularly for locales that use a comma as the decimal mark. The sorter plugin can be used like this: - In the DataTables config: "aoColumns": [ { "sType": "title-numeric" }, ] - In the table data [% formatted currency %] To test: [1] Ensure that there is at least one active budget and at least one inactive one. [2] Go to the acquisitions home page. Note that changing the sort order on the amount, ordered, spent, or avail columns results in incorrect sorting that is either ASCII-betical or which ignores any component of large numbers that occur after the thousands separator. [3] Apply the patch. [4] Verify that the sorting now works correctly and that no JavaScript errors appear in the JS debug console of your choice. Signed-off-by: Galen Charlton Signed-off-by: Katrin Fischer Sorting now works correctly, for active and inactive funds. Passes all tests and QA script. Signed-off-by: Kyle M Hall Signed-off-by: Galen Charlton --- acqui/acqui-home.pl | 2 +- .../intranet-tmpl/prog/en/js/datatables.js | 30 ++++++++++++++++++- .../prog/en/modules/acqui/acqui-home.tt | 24 +++++++-------- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/acqui/acqui-home.pl b/acqui/acqui-home.pl index 5688452cfd..cd5683185a 100755 --- a/acqui/acqui-home.pl +++ b/acqui/acqui-home.pl @@ -135,7 +135,7 @@ foreach my $budget ( @{$budget_arr} ) { } for my $field (qw( budget_amount budget_spent budget_ordered budget_avail ) ) { - $budget->{$field} = $num_formatter->format_price( $budget->{$field} ); + $budget->{"formatted_$field"} = $num_formatter->format_price( $budget->{$field} ); } push @budget_loop, $budget; diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js index fc24036172..d2433926af 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js @@ -495,6 +495,34 @@ jQuery.extend( jQuery.fn.dataTableExt.oSort, { } } ); + +/* Plugin to allow sorting on numeric data stored in a span's title attribute + * + * Ex: + * [% formatted currency %] + * + * + * In DataTables config: + * "aoColumns": [ + * { "sType": "title-numeric" }, + * ] + * http://datatables.net/plug-ins/sorting#hidden_title + */ +jQuery.extend( jQuery.fn.dataTableExt.oSort, { + "title-numeric-pre": function ( a ) { + var x = a.match(/title="*(-?[0-9\.]+)/)[1]; + return parseFloat( x ); + }, + + "title-numeric-asc": function ( a, b ) { + return ((a < b) ? -1 : ((a > b) ? 1 : 0)); + }, + + "title-numeric-desc": function ( a, b ) { + return ((a < b) ? 1 : ((a > b) ? -1 : 0)); + } +} ); + (function() { /* Plugin to allow text sorting to ignore articles @@ -537,4 +565,4 @@ jQuery.extend( jQuery.fn.dataTableExt.oSort, { } }); -}()); \ No newline at end of file +}()); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/acqui-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/acqui-home.tt index 2ee9d0bee4..4fabffed67 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/acqui-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/acqui-home.tt @@ -32,10 +32,10 @@ $(document).ready(function() { null, null, null, - null, - { "sType": "num-html" }, - { "sType": "num-html" }, - null + { "sType": "title-numeric" }, + { "sType": "title-numeric" }, + { "sType": "title-numeric" }, + { "sType": "title-numeric" } ], 'sDom': 't', 'bPaginate': false, @@ -154,10 +154,10 @@ $(document).ready(function() { [% END %] [% loop_budge.budget_branchname %] - [% loop_budge.budget_amount %] - [% loop_budge.budget_ordered %] - [% loop_budge.budget_spent %] - [% loop_budge.budget_avail %] + [% loop_budge.formatted_budget_amount %] + [% loop_budge.formatted_budget_ordered %] + [% loop_budge.formatted_budget_spent %] + [% loop_budge.formatted_budget_avail %] [% ELSE %] @@ -177,10 +177,10 @@ $(document).ready(function() { [% END %] [% loop_budge.budget_branchname %] - [% loop_budge.budget_amount %] - [% loop_budge.budget_ordered %] - [% loop_budge.budget_spent %] - [% loop_budge.budget_avail %] + [% loop_budge.formatted_budget_amount %] + [% loop_budge.formatted_budget_ordered %] + [% loop_budge.formatted_budget_spent %] + [% loop_budge.formatted_budget_avail %] [% END %] [% END %] -- 2.39.5