From 2897ecbca127a6b7cb88f35f9840af4ff4e326b8 Mon Sep 17 00:00:00 2001 From: Olli-Antti Kivilahti Date: Fri, 19 Dec 2014 13:11:43 +0200 Subject: [PATCH] Bug 13482 - A race condition prevents item info from being available for ReserveSlip (hold notice) printing. Occasionally the ReserveSlip doesn't have any values from the koha.items-table. There is no apparent reason why. The issue seems to be more prevalent when fulfilling holds (checkin-in) to be transferred to another branch. Traced the issues to a race condition between printing a just-fulfilled hold and writing the itemnumber to the reserves-table. TEST PLAN: 1. Find a borrower, make a hold for him, and check-in the book to trigger the "Hold found:"-prompt. Do not Confirm it! 2. Reproduce the print error by entering the following to a javascript console at the same page. Dopop('hold-transfer-slip.pl?transfer=1&borrowernumber=10904891&biblionumber=469263&op=slip'); 3. Notice the missing item fields. After this patch, one can confirm that it works by using this command: Dopop('hold-transfer-slip.pl?transfer=1&borrowernumber=10904891&biblionumber=469263&itemnumber=10563811&op=slip'); MAKE SURE TO REPLACE PARAMETERS WITH CORRECT VALUES. --- C4/Reserves.pm | 11 +++++++++-- circ/hold-transfer-slip.pl | 3 ++- circ/returns.pl | 2 ++ .../intranet-tmpl/prog/en/modules/circ/returns.tt | 10 +++++----- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 5058c51..42dd625 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -2314,14 +2314,19 @@ sub GetReserveId { =head2 ReserveSlip - ReserveSlip($branchcode, $borrowernumber, $biblionumber) + ReserveSlip($branchcode, $borrowernumber, $biblionumber, $itemnumber) Returns letter hash ( see C4::Letters::GetPreparedLetter ) or undef + +$itemnumber is needed to make sure that the ReserveSlip printing has access to the item in question. +There is a race condition where the slip is printed before the reservation is confirmed to the DB, +thus the reserve target needs to be explicitly passed from the calling module if such a race condition is encoutered. +Otherwise $itemnumber is pulled properly from the reserves-table. =cut sub ReserveSlip { - my ($branch, $borrowernumber, $biblionumber) = @_; + my ($branch, $borrowernumber, $biblionumber, $itemnumber) = @_; # return unless ( C4::Context->boolean_preference('printreserveslips') ); @@ -2331,6 +2336,8 @@ sub ReserveSlip { }) or return; my $reserve = GetReserveInfo($reserve_id) or return; + $reserve->{itemnumber} = $itemnumber if (not($reserve->{itemnumber}) && $itemnumber); + return C4::Letters::GetPreparedLetter ( module => 'circulation', letter_code => 'RESERVESLIP', diff --git a/circ/hold-transfer-slip.pl b/circ/hold-transfer-slip.pl index 525e25a..2f062fb 100755 --- a/circ/hold-transfer-slip.pl +++ b/circ/hold-transfer-slip.pl @@ -38,6 +38,7 @@ my $session = get_session($sessionID); my $biblionumber = $input->param('biblionumber'); my $borrowernumber = $input->param('borrowernumber'); +my $itemnumber = $input->param('itemnumber'); my $transfer = $input->param('transfer'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -53,7 +54,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 adc2f1e..ce16724 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -236,6 +236,7 @@ if ($barcode) { $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace $barcode = barcodedecode($barcode) if C4::Context->preference('itemBarcodeInputFilter'); $itemnumber = GetItemnumberFromBarcode($barcode); + # # save the return @@ -267,6 +268,7 @@ if ($barcode) { author => $biblio->{'author'}, itembarcode => $biblio->{'barcode'}, itemtype => $biblio->{'itemtype'}, + itemnumber => $itemnumber, ccode => $biblio->{'ccode'}, itembiblionumber => $biblio->{'biblionumber'}, borrower => $borrower, 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 3fe2e53..8b6cc73 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -161,7 +161,7 @@ $(document).ready(function () { - + @@ -199,7 +199,7 @@ $(document).ready(function () {
- + [% FOREACH inputloo IN inputloop %] @@ -244,7 +244,7 @@ $(document).ready(function () { - + [% FOREACH inputloo IN inputloop %] @@ -361,10 +361,10 @@ $(document).ready(function () { [% IF ( transfertodo ) %] - + [% ELSE %] - + [% END %] [% FOREACH inputloo IN inputloop %] -- 1.7.9.5