@@ -, +, @@
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
--