Bug 8837: Dewey cn_sort inaccurate
authorsimith <simith@inlibro.com>
Wed, 6 Aug 2014 13:11:47 +0000 (09:11 -0400)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Tue, 28 Oct 2014 12:39:29 +0000 (09:39 -0300)
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 <paola.rossi@cineca.it>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
C4/ClassSortRoutine/Dewey.pm

index 25480ec..3b24650 100644 (file)
@@ -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'
+                }
             }
         }
     }