Bug 4265: Fix padding of short callnumbers and Bib-1 attribute for sorting
authorMagnus Enger <magnus@enger.priv.no>
Mon, 28 Mar 2011 15:42:57 +0000 (11:42 -0400)
committerChris Cormack <chrisc@catalyst.net.nz>
Tue, 29 Mar 2011 08:54:12 +0000 (21:54 +1300)
1. The current C4::ClassSortRoutine::Dewey turns "306 Les" into "306_Les" for items.cn_sort and MARC-field 952$6, which results in "306.46 Les" being sorted before "306 Les" in the OPAC. With this patch, "306 Les" is turned into "306_000000000000000_Les".

2. Currently, call_number_asc and call_number_desc are set up to sort by 1=20, but this is mapped to Local-classification in ccl.properties, which is mapped to 952$o in record.abs.

This patch changes these sorts to use 1=8007, which is mapped to cn-sort and 952$6.

Signed-off-by: Jared Camins-Esakov <jcamins@bywatersolutions.com>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
C4/ClassSortRoutine/Dewey.pm
C4/Search.pm

index b4ba921..62a68b9 100644 (file)
@@ -76,6 +76,10 @@ sub get_class_sort_key {
             }
         }
     }
+    # Pad the first digit_group if there was only one
+    if (1 == $digit_group_count) {
+        $tokens[0] .= '_000000000000000'
+    }
     my $key = join("_", @tokens);
     $key =~ s/[^\p{IsAlnum}_]//g;
 
index b698a93..21c61fb 100644 (file)
@@ -364,10 +364,10 @@ sub getRecords {
                 $sort_by .= "1=9003 >i ";
             }
             elsif ( $sort eq "call_number_asc" ) {
-                $sort_by .= "1=20  <i ";
+                $sort_by .= "1=8007  <i ";
             }
             elsif ( $sort eq "call_number_dsc" ) {
-                $sort_by .= "1=20 >i ";
+                $sort_by .= "1=8007 >i ";
             }
             elsif ( $sort eq "pubdate_asc" ) {
                 $sort_by .= "1=31 <i ";