From 49f708d770f710abbc7e1b554773f7111bfd83c2 Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Thu, 1 Aug 2019 18:11:19 +0000
Subject: [PATCH] Bug 23413: Add a holds method to Koha::Items

To test;
1 - prove -v t/db_dependent/Koha/Items.t
---
 Koha/Item.pm                | 17 +++++++++++++++++
 t/db_dependent/Koha/Items.t | 21 ++++++++++++++++++++-
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/Koha/Item.pm b/Koha/Item.pm
index 4bd3ba2d1c..5b270aee41 100644
--- a/Koha/Item.pm
+++ b/Koha/Item.pm
@@ -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;
diff --git a/t/db_dependent/Koha/Items.t b/t/db_dependent/Koha/Items.t
index 98e51b3fec..6c1bedc1f9 100644
--- a/t/db_dependent/Koha/Items.t
+++ b/t/db_dependent/Koha/Items.t
@@ -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;
 
-- 
2.11.0