From 17f1f4a4389427d67a3c85911757b703cdfc16b8 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 --- C4/Items.pm | 9 +++++---- cataloguing/additem.pl | 13 ++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index b81fb0aa17..7abfb48b46 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -2404,10 +2404,11 @@ 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) ) { + && 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 $CNsubfield = substr( $itemcn_pref, 3, 1 ); $defaultvalue = $field->subfield($CNsubfield); } } diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index 2c371def28..6f12f8b5cb 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -154,11 +154,12 @@ 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); - my $CNsubfield = substr($pref_itemcallnumber, 3, 1); - my $CNsubfield2 = substr($pref_itemcallnumber, 4, 1); - my $temp2 = $temp->field($CNtag); - if ($temp2) { + foreach my $pref_itemcallnumber_part (split(/,/, $pref_itemcallnumber)){ + my $CNtag = substr($pref_itemcallnumber_part, 0, 3); + my $temp2 = $temp->field($CNtag); + next unless $temp2; + my $CNsubfield = substr($pref_itemcallnumber_part, 3, 1); + my $CNsubfield2 = substr($pref_itemcallnumber_part, 4, 1); $value = join ' ', $temp2->subfield($CNsubfield) || q{}, $temp2->subfield($CNsubfield2) || q{}; #remove any trailing space incase one subfield is used $value =~ s/^\s+|\s+$//g; @@ -883,8 +884,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 ) { -- 2.11.0