From dc9c0dfc2e65c0c4bb25fc93f57ea62058d27e29 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Mon, 27 Jul 2015 11:40:38 -0300 Subject: [PATCH] Bug 14598: Make C4::Circulation::AddReturn store the right itemtype This patch makes C4::Circulation::AddReturn correctly store the itemtype on the 'statistics' table. To reproduce: - Checkout master. - Make a checkout. - Check the 'statistics' table and notice the itemtype is correctly set > SELECT * FROM statistics; - Check the item in. - Check the 'statistics' table and notice the itemtype is not set > SELECT * FROM statistics WHERE type="return"; => FAIL: itemtype is set to NULL To test: - Apply the regression tests patch - Run the tests: $ prove t/db_dependent/Circulation/Returns.t => FAIL: Tests fail - Apply this patch - Run the regression tests: $ prove t/db_dependent/Circulation/Returns.t => SUCCESS: Tests now pass. - Repeat the 'To reproduce' steps => SUCCESS: itemtype is now correctly set (in real life) - Happily sign off :-D Sponsored-by: Universidad Empresarial Siglo 21 --- C4/Circulation.pm | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 7813e33..b369c63 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1745,13 +1745,19 @@ sub AddReturn { $branch = C4::Context->userenv->{'branch'} unless $branch; # we trust userenv to be a safe fallback/default my $messages; my $borrower; - my $biblio; my $doreturn = 1; my $validTransfert = 0; my $stat_type = 'return'; # get information on item - my $itemnumber = GetItemnumberFromBarcode( $barcode ); + my $item = GetItem( undef, $barcode ) + or die "GetItem( undef, $barcode ) failed"; + my $itemnumber = $item->{ itemnumber }; + my $biblio = GetBiblioData( $item->{ biblionumber } ); + my $itemtype = ( C4::Context->preference("item-level_itypes") ) + ? $item->{ itype } + : $biblio->{ itemtype }; + unless ($itemnumber) { return (0, { BadBarcode => $barcode }); # no barcode means no item or borrower. bail out. } @@ -1772,8 +1778,6 @@ sub AddReturn { } } - my $item = GetItem($itemnumber) or die "GetItem($itemnumber) failed"; - if ( $item->{'location'} eq 'PROC' ) { if ( C4::Context->preference("InProcessingToShelvingCart") ) { $item->{'location'} = 'CART'; @@ -1992,15 +1996,14 @@ sub AddReturn { } # Record the fact that this book was returned. - # FIXME itemtype should record item level type, not bibliolevel type UpdateStats({ - branch => $branch, - type => $stat_type, - itemnumber => $item->{'itemnumber'}, - itemtype => $biblio->{'itemtype'}, - borrowernumber => $borrowernumber, - ccode => $item->{'ccode'}} - ); + branch => $branch, + type => $stat_type, + itemnumber => $itemnumber, + itemtype => $itemtype, + borrowernumber => $borrowernumber, + ccode => $item->{ ccode } + }); # Send a check-in slip. # NOTE: borrower may be undef. probably shouldn't try to send messages then. my $circulation_alert = 'C4::ItemCirculationAlertPreference'; -- 2.5.0