From bb61bd76f6ecfca0268bafb29e3bd86a19cdb4c0 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 31 Oct 2017 07:31:34 -0400 Subject: [PATCH] Bug 19549 - Reserve Slip prints first found hold when patron has multiple holds on a biblio In C4/Reserves.pm the ReserveSlip function uses this call to get the reserve: 1982 my $hold = Koha::Holds->search({biblionumber => $biblionumber, borrowernumber => $borrowernumber })->next; If a patron has multiple holds there is no way to know if we have the correct one. This function should be updated to take an itemnumber as well and all calls updated. Test Plan: 1) Apply this patch 2) Capture some holds, ensure the correct hold was caught and printed in the notice 3) prove t/db_dependent/Reserves.t --- C4/Reserves.pm | 4 ++-- circ/circulation.pl | 1 + circ/hold-transfer-slip.pl | 5 +++-- circ/returns.pl | 6 +++++- koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt | 4 ++-- koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt | 2 +- t/db_dependent/Reserves.t | 2 +- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 73b86b6..59dba94 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -1874,12 +1874,12 @@ available within the slip: =cut sub ReserveSlip { - my ($branch, $borrowernumber, $biblionumber) = @_; + my ($branch, $borrowernumber, $biblionumber, $itemnumber) = @_; # return unless ( C4::Context->boolean_preference('printreserveslips') ); my $patron = Koha::Patrons->find( $borrowernumber ); - my $hold = Koha::Holds->search({biblionumber => $biblionumber, borrowernumber => $borrowernumber })->next; + my $hold = Koha::Holds->search({biblionumber => $biblionumber, borrowernumber => $borrowernumber, itemnumber => $itemnumber })->next; return unless $hold; my $reserve = $hold->unblessed; diff --git a/circ/circulation.pl b/circ/circulation.pl index 93ed09c..beb624e 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -346,6 +346,7 @@ if (@$barcodes) { $template_params->{messages} = $messages; my $item = Koha::Items->find({ barcode => $barcode }); + $template->param( item => $item ); my ( $biblio, $mss ); if ( $item ) { diff --git a/circ/hold-transfer-slip.pl b/circ/hold-transfer-slip.pl index 115a434..64bfc76 100755 --- a/circ/hold-transfer-slip.pl +++ b/circ/hold-transfer-slip.pl @@ -35,7 +35,8 @@ my $input = new CGI; my $sessionID = $input->cookie("CGISESSID"); my $session = get_session($sessionID); -my $biblionumber = $input->param('biblionumber'); +my $itemnumber = $input->param('itemnumber'); +my $biblionumber = $input->param('biblionumber'); my $borrowernumber = $input->param('borrowernumber'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -51,7 +52,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $userenv = C4::Context->userenv; my ($slip, $is_html); -if ( my $letter = ReserveSlip ($session->param('branch') || $userenv->{branch}, $borrowernumber, $biblionumber) ) { +if ( my $letter = ReserveSlip ($session->param('branch') || $userenv->{branch}, $borrowernumber, $biblionumber, $itemnumber) ) { $slip = $letter->{content}; $is_html = $letter->{is_html}; } diff --git a/circ/returns.pl b/circ/returns.pl index 162f8fd..8f9bfa6 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -279,10 +279,14 @@ if ($barcode) { my $checkout = $item->checkout; my $biblio = $item->biblio; $template->param( + item => $item, + borrower => $borrower, + + returnbranch => $returnbranch, + title => $biblio->title, homebranch => $item->homebranch, holdingbranch => $item->holdingbranch, - returnbranch => $returnbranch, author => $biblio->author, itembarcode => $item->barcode, itemtype => $item->effective_itemtype, diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index 4c66feb..ebb344f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -256,7 +256,7 @@ - + [% END %] @@ -266,7 +266,7 @@ - + [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt index f18ea69..f9a153f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -711,7 +711,7 @@ $(".modal").on('hidden.bs.modal', function (e) { $("#barcode").focus(); }); [% IF print_slip %] - Dopop('hold-transfer-slip.pl?borrowernumber=[% patron.borrowernumber %]&biblionumber=[% biblionumber %]'); + Dopop('hold-transfer-slip.pl?borrowernumber=[% borrowernumber %]&biblionumber=[% biblionumber %]&itemnumber=[% item.itemnumber %]'); [% END %] var columns_settings = [% ColumnsSettings.GetColumns( 'circ', 'returns', 'checkedintable', 'json' ) %] diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t index 57de1dd..3aeecd4 100755 --- a/t/db_dependent/Reserves.t +++ b/t/db_dependent/Reserves.t @@ -387,7 +387,7 @@ is( 'item that is captured to fill a hold cannot be deleted', ); -my $letter = ReserveSlip($branch_1, $requesters{$branch_1}, $bibnum); +my $letter = ReserveSlip($branch_1, $requesters{$branch_1}, $bibnum, $itemnumber); ok(defined($letter), 'can successfully generate hold slip (bug 10949)'); # Tests for bug 9788: Does Koha::Item->current_holds return a future wait? -- 2.1.4