From 7f9eb710ea65872e945b3c827587c077dafff90c 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 | 11 +++++++---- 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, 17 insertions(+), 12 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 78f5ca3..0edb7be 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -1974,12 +1974,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 e46ced1..f6fc025 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -331,6 +331,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 bd09e21..a656172 100755 --- a/circ/hold-transfer-slip.pl +++ b/circ/hold-transfer-slip.pl @@ -36,7 +36,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( @@ -52,7 +53,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 80f228a..5a2b308 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -288,19 +288,22 @@ if ($barcode) { my $biblio = $item->biblio; $template->param( + item => $item, + issue => $issue, + borrower => $borrower, + + additional_materials => $materials, + returnbranch => $returnbranch, + title => $biblio->title, homebranch => $item->homebranch, holdingbranch => $item->holdingbranch, - returnbranch => $returnbranch, author => $biblio->author, itembarcode => $item->barcode, itemtype => $item->effective_itemtype, ccode => $item->ccode, itembiblionumber => $biblio->biblionumber, biblionumber => $biblio->biblionumber, - borrower => $borrower, - additional_materials => $materials, - issue => $issue, ); } # FIXME else we should not call AddReturn but set BadBarcode directly instead 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 d5507c0..e4047fa 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -381,7 +381,7 @@ $(document).ready(function() { - + [% END %] @@ -391,7 +391,7 @@ $(document).ready(function() { - + [% 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 b3b5910..41c5d36 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -55,7 +55,7 @@ $(document).ready(function () { $(".modal").on('hidden.bs.modal', function (e) { $("#barcode").focus(); }); [% IF print_slip %] - Dopop('hold-transfer-slip.pl?borrowernumber=[% 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 fd79427..4546f4f 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.10.2