@@ -, +, @@ Koha::Biblios->find( $biblionumber )->items; Koha::Items->search({ biblionumber => $biblionumber }) Koha::Biblios->find( $biblionumber )->items->get_column('itemnumber'); --- C4/Items.pm | 51 +++------------------------------------------ cataloguing/merge.pl | 13 ++++++------ labels/label-item-search.pl | 34 +++++++++++++----------------- reserve/request.pl | 6 ++---- 4 files changed, 26 insertions(+), 78 deletions(-) --- a/C4/Items.pm +++ a/C4/Items.pm @@ -77,7 +77,6 @@ BEGIN { GetItemsLocationInfo GetHostItemsInfo GetItemnumbersForBiblio - get_itemnumbers_of get_hostitemnumbers_of GetItemnumberFromBarcode GetBarcodeFromItemnumber @@ -1478,41 +1477,6 @@ sub GetItemnumbersForBiblio { return \@items; } -=head2 get_itemnumbers_of - - my @itemnumbers_of = get_itemnumbers_of(@biblionumbers); - -Given a list of biblionumbers, return the list of corresponding itemnumbers -for each biblionumber. - -Return a reference on a hash where keys are biblionumbers and values are -references on array of itemnumbers. - -=cut - -sub get_itemnumbers_of { - my @biblionumbers = @_; - - my $dbh = C4::Context->dbh; - - my $query = ' - SELECT itemnumber, - biblionumber - FROM items - WHERE biblionumber IN (?' . ( ',?' x scalar @biblionumbers - 1 ) . ') - '; - my $sth = $dbh->prepare($query); - $sth->execute(@biblionumbers); - - my %itemnumbers_of; - - while ( my ( $itemnumber, $biblionumber ) = $sth->fetchrow_array ) { - push @{ $itemnumbers_of{$biblionumber} }, $itemnumber; - } - - return \%itemnumbers_of; -} - =head2 get_hostitemnumbers_of my @itemnumbers_of = get_hostitemnumbers_of($biblionumber); @@ -1548,18 +1512,9 @@ sub get_hostitemnumbers_of { foreach my $hostfield ( $marcrecord->field($tag) ) { my $hostbiblionumber = $hostfield->subfield($biblio_s); my $linkeditemnumber = $hostfield->subfield($item_s); - my @itemnumbers; - if ( my $itemnumbers = - get_itemnumbers_of($hostbiblionumber)->{$hostbiblionumber} ) - { - @itemnumbers = @$itemnumbers; - } - foreach my $itemnumber (@itemnumbers) { - if ( $itemnumber eq $linkeditemnumber ) { - push( @returnhostitemnumbers, $itemnumber ); - last; - } - } + my $is_from_biblio = Koha::Items->search({ itemnumber => $linkeditemnumber, biblionumber => $hostbiblionumber }); + push @returnhostitemnumbers, $linkeditemnumber + if $is_from_biblio; } return @returnhostitemnumbers; --- a/cataloguing/merge.pl +++ a/cataloguing/merge.pl @@ -31,6 +31,7 @@ use C4::Reserves qw/MergeHolds/; use C4::Acquisition qw/ModOrder GetOrdersByBiblionumber/; use Koha::BiblioFrameworks; +use Koha::Items; use Koha::MetadataRecord; my $input = new CGI; @@ -87,14 +88,14 @@ if ($merge) { # Moving items from the other record to the reference record foreach my $biblionumber (@biblionumbers) { - my $itemnumbers = get_itemnumbers_of($biblionumber); - foreach my $itemnumber (@{ $itemnumbers->{$biblionumber} }) { - my $res = MoveItemFromBiblio($itemnumber, $biblionumber, $ref_biblionumber); - if (not defined $res) { - push @notmoveditems, $itemnumber; + my $items = Koha::Items->search({ biblionumber => $biblionumber }); + while ( my $item = $items->next) { + my $res = MoveItemFromBiblio( $item->itemnumber, $biblionumber, $ref_biblionumber ); + if ( not defined $res ) { + push @notmoveditems, $item->itemnumber; + } } } - } # If some items could not be moved : if (scalar(@notmoveditems) > 0) { my $itemlist = join(' ',@notmoveditems); --- a/labels/label-item-search.pl +++ a/labels/label-item-search.pl @@ -30,11 +30,12 @@ use C4::Output qw(output_html_with_http_headers); use C4::Context; use C4::Search qw(SimpleSearch); use C4::Biblio qw(TransformMarcToKoha); -use C4::Items qw(GetItemInfosOf get_itemnumbers_of); +use C4::Items qw(GetItemInfosOf); use C4::Creators::Lib qw(html_table); use C4::Debug; -use Koha::DateUtils; +use Koha::DateUtils; +use Koha::Items; use Koha::ItemTypes; use Koha::SearchEngine::Search; @@ -139,28 +140,21 @@ if ($show_results) { push (@results_set, $biblio); my $biblionumber = $biblio->{'biblionumber'}; #DEBUG Notes: Grab the item numbers associated with this MARC record... - my $itemnums = get_itemnumbers_of($biblionumber); + my $items = Koha::Items->search({ biblionumber => $biblionumber }, { order_by => { -desc => 'itemnumber' }}); #DEBUG Notes: Retrieve the item data for each number... - if (my $iii = $itemnums->{$biblionumber}) { - my $item_results = GetItemInfosOf(@$iii); - foreach my $item ( keys %$item_results ) { - #DEBUG Notes: Build an array element 'item' of the correct bib (results) hash which contains item-specific data... - if ($item_results->{$item}->{'biblionumber'} eq $results_set[$i]->{'biblionumber'}) { - my $item_data; - $item_data->{'_item_number'} = $item_results->{$item}->{'itemnumber'}; - $item_data->{'_item_call_number'} = ($item_results->{$item}->{'itemcallnumber'} ? $item_results->{$item}->{'itemcallnumber'} : 'NA'); - $item_data->{'_date_accessioned'} = $item_results->{$item}->{'dateaccessioned'}; - $item_data->{'_barcode'} = ( $item_results->{$item}->{'barcode'} ? $item_results->{$item}->{'barcode'} : 'NA'); - $item_data->{'_add'} = $item_results->{$item}->{'itemnumber'}; - unshift (@row_data, $item_data); # item numbers are given to us in descending order by get_itemnumbers_of()... - } + while ( my $item = $items->next ) { + #DEBUG Notes: Build an array element 'item' of the correct bib (results) hash which contains item-specific data... + if ( $item->biblionumber eq $results_set[$i]->{'biblionumber'} ) { + my $item_data; + $item_data->{'_item_number'} = $item->itemnumber; + $item_data->{'_item_call_number'} = ( $item->itemcallnumber || 'NA' ); + $item_data->{'_date_accessioned'} = $item->dateaccessioned; + $item_data->{'_barcode'} = ( $item->barcode || 'NA' ); + $item_data->{'_add'} = $item->itemnumber; + push @row_data, $item_data; } $results_set[$i]->{'item_table'} = html_table($display_columns, \@row_data); } - else { - # FIXME: Some error trapping code needed - warn sprintf('No item numbers retrieved for biblio number: %s', $biblionumber); - } } ( $template, $loggedinuser, $cookie ) = get_template_and_user( --- a/reserve/request.pl +++ a/reserve/request.pl @@ -293,12 +293,10 @@ foreach my $biblionumber (@biblionumbers) { my $fixedRank = $count+1; my %itemnumbers_of_biblioitem; - my @itemnumbers; ## $items is array of 'item' table numbers - if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){ - @itemnumbers = @$items; - } + my $items = Koha::Items->search({ biblionumber => $biblionumber }); + my @itemnumbers = $items->get_column('itemnumber'); my @hostitems = get_hostitemnumbers_of($biblionumber); if (@hostitems){ $template->param('hostitemsflag' => 1); --