From 2aa49ebab4cb4d36bea42f094df9ccb03945454e Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Thu, 19 Dec 2019 05:29:47 +0000 Subject: [PATCH] Bug 3426: Allow for multiple fields in itemcallnumber syspref Note that we change both cataloguing/additem.pl and C4/Items->PrepareItemrecordfordisplay I can find no code that uses callnumber from the C4/Items sub, except for the itemrecorddisplay script which is not called with an itemnumber from Koha and should be deprecated for REST or ILSDI or OAI (imho) To test: 1 - Define itemcallnumber syspref as "082ab,092ab,9520,245a" 2 - Find a record with no items 3 - Ensure it has no 082 field, but an 092 field 4 - Go to add an item - itemcallnumber is empty 5 - Apply patch 6 - Go to add item, itemcallnumber should be the 092ab fields 7 - Delete the 092 field 8 - Go to add item, itemcallnumber should be the 245a 9 - Edit the callnumber to be "testing" and save item 10 - For should now show itemcallnumber="testing" as default 11 - Browse to http://localhost:8081/cgi-bin/koha/services/itemrecorddisplay.pl?itemnumber=## subbing the correct itemnumber 12 - Ensure the callnumber is defaulting to testing 13 - delete the item you created 14 - browse to URL above - callnumber should now be 245 again 15 - Add an 092 field to record and ensure it is now default callnumber 16 - Add an 082 field, it should now be default Signed-off-by: Andrew Fuerste-Henry Signed-off-by: Katrin Fischer Signed-off-by: Martin Renvoize --- C4/Items.pm | 12 +++++++----- cataloguing/additem.pl | 12 ++++++------ .../en/modules/admin/preferences/cataloguing.pref | 4 ++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index bd335d5563..1b41846d82 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -2402,11 +2402,13 @@ sub PrepareItemrecordDisplay { # search for itemcallnumber if applicable if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' - && C4::Context->preference('itemcallnumber') ) { - my $CNtag = substr( C4::Context->preference('itemcallnumber'), 0, 3 ); - my $CNsubfield = substr( C4::Context->preference('itemcallnumber'), 3, 1 ); - if ( $itemrecord and my $field = $itemrecord->field($CNtag) ) { - $defaultvalue = $field->subfield($CNsubfield); + && C4::Context->preference('itemcallnumber') && $itemrecord) { + foreach my $itemcn_pref (split(/,/,C4::Context->preference('itemcallnumber'))){ + my $CNtag = substr( $itemcn_pref, 0, 3 ); + next unless my $field = $itemrecord->field($CNtag); + my $CNsubfields = substr( $itemcn_pref, 3 ); + $defaultvalue = $field->as_string( $CNsubfields, ' '); + last if $defaultvalue; } } if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index babf6d3d4c..0fa84374d9 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -154,12 +154,14 @@ sub generate_subfield_form { my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); if (!$value && $subfieldlib->{kohafield} eq 'items.itemcallnumber' && $pref_itemcallnumber) { - my $CNtag = substr( $pref_itemcallnumber, 0, 3 ); # 3-digit tag number - my $CNsubfields = substr( $pref_itemcallnumber, 3 ); # Any and all subfields - my $temp2 = $temp->field($CNtag); + foreach my $pref_itemcallnumber_part (split(/,/, $pref_itemcallnumber)){ + my $CNtag = substr( $pref_itemcallnumber_part, 0, 3 ); # 3-digit tag number + my $CNsubfields = substr( $pref_itemcallnumber_part, 3 ); # Any and all subfields + my $temp2 = $temp->field($CNtag); - if ($temp2) { + next unless $temp2; $value = $temp2->as_string( $CNsubfields, ' ' ); + last if $value; } } @@ -881,8 +883,6 @@ foreach my $subfield_code (sort keys(%witness)) { my @loop_data =(); my $i=0; -my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); - my $branch = $input->param('branch') || C4::Context->userenv->{branch}; my $libraries = Koha::Libraries->search({}, { order_by => ['branchname'] })->unblessed;# build once ahead of time, instead of multiple times later. for my $library ( @$libraries ) { diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref index 456f732fa1..61bf51dd44 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref @@ -72,9 +72,9 @@ Cataloging: no: bibliographic record - as the authoritative item type (for determining circulation and fines rules, for displaying an item type icon on either opac detail or results page, etc). - - - Map the MARC subfield + - Map the MARC subfields - pref: itemcallnumber - - "to an item's callnumber. (This can contain multiple subfields to look in; for instance 082ab would look in 082 subfields a and b.)
Note: The order of the subfields in the record will be preserved.
Examples (for MARC21 records): Dewey: 082ab or 092ab; LOC: 050ab or 090ab; from the item record: 852hi" + - "to an item's callnumber. List multiple comma-separated fields to check them sequentially. Each field can include multiple subfields. For example: '082ab,092ab' will look in the 082$a and 082$b, then the 092$a and 092$b. Examples (for MARC21 records): Dewey: 082ab,092ab; LOC: 050ab,090ab; from the item record: 952hi" - - Display MARC subfield - pref: AlternateHoldingsField -- 2.39.5