@@ -, +, @@ 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 --- C4/Items.pm | 12 +++++++----- cataloguing/additem.pl | 12 ++++++------ .../prog/en/modules/admin/preferences/cataloguing.pref | 4 ++-- 3 files changed, 15 insertions(+), 13 deletions(-) --- a/C4/Items.pm +++ a/C4/Items.pm @@ -2401,11 +2401,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' --- a/cataloguing/additem.pl +++ a/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 ) { --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref +++ a/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.)
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 --