Bug 21201: Replace C4::Items::GetItemnumbersForBiblio calls
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 6 Aug 2018 19:40:44 +0000 (16:40 -0300)
committerNick Clemens <nick@bywatersolutions.com>
Fri, 31 Aug 2018 10:44:04 +0000 (10:44 +0000)
Those calls to C4::Items::GetItemnumbersForBiblio can be replaced with
    my @itemnumbers = Koha::Items->search({ biblionumber => $biblionumber})->get_column("itemnumber")

Test plan:
- Use the GetAvailability service of ILS-DI
- Try to place a hold on an item that is available and another one
- Use the batch record deletion tool to remove record with and without items.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
C4/ILSDI/Services.pm
C4/Reserves.pm
C4/SIP/ILS/Patron.pm
cataloguing/additem.pl
tools/batch_delete_records.pl

index d3920dc..4e0877a 100644 (file)
@@ -38,6 +38,7 @@ use Koha::DateUtils;
 
 use Koha::Biblios;
 use Koha::Checkouts;
+use Koha::Items;
 use Koha::Libraries;
 use Koha::Patrons;
 
@@ -138,14 +139,15 @@ sub GetAvailability {
         } else {
             my $status;
             my $msg;
-            my $items = GetItemnumbersForBiblio($id);
-            if ($items) {
+            my $items = Koha::Items->search({ biblionumber => $id });
+            if ($items->count) {
                 # Open XML
                 $out .= "  <dlf:record>\n";
                 $out .= "    <dlf:bibliographic id=\"" .$id. "\" />\n";
                 $out .= "    <dlf:items>\n";
                 # We loop over the items to clean them
-                foreach my $itemnumber (@$items) {
+                while ( my $item = $items->next ) {
+                    my $itemnumber = $item->itemnumber;
                     my ( $biblionumber, $status, $msg, $location ) = _availability($itemnumber);
                     $out .= "      <dlf:item id=\"" . $itemnumber . "\">\n";
                     $out .= "        <dlf:simpleavailability>\n";
index 3b1ac5e..8e8bea3 100644 (file)
@@ -275,16 +275,16 @@ See CanItemBeReserved() for possible return values.
 sub CanBookBeReserved{
     my ($borrowernumber, $biblionumber) = @_;
 
-    my $items = GetItemnumbersForBiblio($biblionumber);
+    my @itemnumbers = Koha::Items->search({ biblionumber => $biblionumber})->get_column("itemnumber");
     #get items linked via host records
     my @hostitems = get_hostitemnumbers_of($biblionumber);
     if (@hostitems){
-    push (@$items,@hostitems);
+        push (@itemnumbers, @hostitems);
     }
 
     my $canReserve;
-    foreach my $item (@$items) {
-        $canReserve = CanItemBeReserved( $borrowernumber, $item );
+    foreach my $itemnumber (@itemnumbers) {
+        $canReserve = CanItemBeReserved( $borrowernumber, $itemnumber );
         return $canReserve if $canReserve->{status} eq 'OK';
     }
     return $canReserve;
index 3d9de0d..82ccc75 100644 (file)
@@ -22,7 +22,6 @@ use C4::Context;
 use C4::Koha;
 use C4::Members;
 use C4::Reserves;
-use C4::Items qw( GetItemnumbersForBiblio);
 use C4::Auth qw(checkpw);
 
 use Koha::Items;
index d36eb15..6af351d 100755 (executable)
@@ -652,8 +652,8 @@ if ($op eq "additem") {
 #-------------------------------------------------------------------------------
 } elsif ($op eq "delallitems") {
 #-------------------------------------------------------------------------------
-    my $itemnumbers = C4::Items::GetItemnumbersForBiblio( $biblionumber );
-    foreach my $itemnumber ( @$itemnumbers ) {
+    my @itemnumbers = Koha::Items->search({ biblionumber => $biblionumber })->get_column('itemnumber');
+    foreach my $itemnumber ( @itemnumbers ) {
         $error = C4::Items::DelItemCheck( $biblionumber, $itemnumber );
         next if $error == 1; # Means ok
         push @errors,$error;
index 149b44d..0194c5d 100755 (executable)
@@ -30,6 +30,7 @@ use C4::Biblio;
 
 use Koha::Authorities;
 use Koha::Biblios;
+use Koha::Items;
 
 my $input = new CGI;
 my $op = $input->param('op') // q|form|;
@@ -84,7 +85,7 @@ if ( $op eq 'form' ) {
             $biblio = $biblio->unblessed;
             my $record = &GetMarcBiblio({ biblionumber => $record_id });
             $biblio->{subtitle} = GetRecordValue( 'subtitle', $record, GetFrameworkCode( $record_id ) );
-            $biblio->{itemnumbers} = C4::Items::GetItemnumbersForBiblio( $record_id );
+            $biblio->{itemnumbers} = [Koha::Items->search({ biblionumber => $record_id })->get_column('itemnumber')];
             $biblio->{holds_count} = $holds_count;
             $biblio->{issues_count} = C4::Biblio::CountItemsIssued( $record_id );
             push @records, $biblio;
@@ -165,7 +166,7 @@ if ( $op eq 'form' ) {
             }
 
             # Delete items
-            my @itemnumbers = @{ C4::Items::GetItemnumbersForBiblio( $biblionumber ) };
+            my @itemnumbers = Koha::Items->search({ biblionumber => $biblionumber })->get_column('itemnumber');
             ITEMNUMBER: for my $itemnumber ( @itemnumbers ) {
                 my $error = eval { C4::Items::DelItemCheck( $biblionumber, $itemnumber ) };
                 if ( $error != 1 or $@ ) {