From dbfe35eb5548fe8e4cc877000753f459e620dbe2 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 Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- C4/Circulation.pm | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 70ae3fd..a300ad1 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1852,13 +1852,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. } @@ -1879,8 +1885,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'; @@ -2113,15 +2117,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.7.4