From a61c3a76881aca4a5910bbb0bb3683f14d916f52 Mon Sep 17 00:00:00 2001 From: simith Date: Wed, 6 Aug 2014 09:11:47 -0400 Subject: [PATCH] Bug 8837: Dewey cn_sort inaccurate This patch fix the cn_sort sorting accurace described by Joy Nelson. Testing: I) Appy the bug 12424 patch Before applying this patch: 0) Select 3 items. 1) Edit the items selected 2) Change "Full call number" option to 971/P23w/v.1-2/pt.8, 971.01/P23w/v.1-2/pt.6-7 and 971.01/P23w/v.1-2/pt.7 3) Save changes 4) Valide 971P23WV_12PT_8_000000000000000, 971_000000000000000_01P23WV_12PT_67 and 971_01P23WV_12PT_700000000000000 (table items - cn_sort column). After applying this patch: 5) Edit again the item selected in 0 3) Save changes 4) Valide 971_000000000000000_P23W_V_12_PT_8, 971_010000000000000_P23W_V_12_PT_67, 971_010000000000000_P23W_V_12_PT_7 (table items - cn_sort column). Signed-off-by: Paola Rossi Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- C4/ClassSortRoutine/Dewey.pm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/C4/ClassSortRoutine/Dewey.pm b/C4/ClassSortRoutine/Dewey.pm index 25480ec082..3b246502db 100644 --- a/C4/ClassSortRoutine/Dewey.pm +++ b/C4/ClassSortRoutine/Dewey.pm @@ -63,6 +63,7 @@ sub get_class_sort_key { my $init = uc "$cn_class $cn_item"; $init =~ s/^\s+//; $init =~ s/\s+$//; + $init =~ s/\// /g; $init =~ s!/!!g; $init =~ s/^([\p{IsAlpha}]+)/$1 /; my @tokens = split /\.|\s+/, $init; @@ -75,8 +76,12 @@ sub get_class_sort_key { $first_digit_group_idx = $i; } if (2 == $digit_group_count) { - $tokens[$i] = sprintf("%-15.15s", $tokens[$i]); - $tokens[$i] =~ tr/ /0/; + if ($i - $first_digit_group_idx == 1) { + $tokens[$i] = sprintf("%-15.15s", $tokens[$i]); + $tokens[$i] =~ tr/ /0/; + } else { + $tokens[$first_digit_group_idx] .= '_000000000000000' + } } } } -- 2.39.5