Bug 23413: Add a holds method to Koha::Items
authorNick Clemens <nick@bywatersolutions.com>
Thu, 1 Aug 2019 18:11:19 +0000 (18:11 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Tue, 13 Aug 2019 10:30:22 +0000 (11:30 +0100)
To test;
1 - prove -v t/db_dependent/Koha/Items.t

Signed-off-by: Maryse Simard <maryse.simard@inlibro.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Koha/Item.pm
t/db_dependent/Koha/Items.t

index 4bd3ba2..5b270ae 100644 (file)
@@ -126,6 +126,23 @@ sub checkout {
     return Koha::Checkout->_new_from_dbic( $checkout_rs );
 }
 
+=head3 holds
+
+my $transfer = $item->holds();
+my $transfer = $item->holds($params);
+my $transfer = $item->holds({ found => 'W'});
+
+Return reserves attached to an item, optionally accept a hashref of params to pass to search
+
+=cut
+
+sub holds {
+    my ( $self,$params ) = @_;
+    my $transfer_rs = $self->_result->reserves->search($params);
+    return unless $transfer_rs->count;
+    return Koha::Holds->_new_from_dbic( $transfer_rs );
+}
+
 =head3 get_transfer
 
 my $transfer = $item->get_transfer;
index 98e51b3..6c1bedc 100644 (file)
@@ -19,7 +19,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 9;
+use Test::More tests => 10;
 use Test::Exception;
 
 use C4::Circulation;
@@ -81,6 +81,25 @@ subtest 'get_transfer' => sub {
     is( $transfer->itemnumber, $new_item_1->itemnumber, 'Koha::Item->get_transfer should return a valid Koha::Item::Transfers object' );
 };
 
+subtest 'holds' => sub {
+    plan tests => 5;
+
+    my $biblio = $builder->build_sample_biblio();
+    my $item   = $builder->build_sample_item({
+        biblionumber => $biblio->biblionumber,
+    });
+    $nb_of_items++;
+    is($item->holds(), undef, "Nothing returned if no holds");
+    my $hold1 = $builder->build({ source => 'Reserve', value => { itemnumber=>$item->itemnumber, found => 'T' }});
+    my $hold2 = $builder->build({ source => 'Reserve', value => { itemnumber=>$item->itemnumber, found => 'W' }});
+    my $hold3 = $builder->build({ source => 'Reserve', value => { itemnumber=>$item->itemnumber, found => 'W' }});
+
+    is($item->holds()->count,3,"Three holds found");
+    is($item->holds({found => 'W'})->count,2,"Two waiting holds found");
+    is_deeply($item->holds({found => 'T'})->next->unblessed,$hold1,"Found transit holds matches the hold");
+    is($item->holds({found => undef}),undef,"Nothing returned if no matching holds");
+};
+
 subtest 'biblio' => sub {
     plan tests => 2;