Bug 11947 - renumber reserves when hold is confirmed
Currently when a reserve is moved to "waiting" status because it's acknowledged on checkin, the reserve priorities aren't renumbered. This causes things to go a bit haywire in the UI, in particular, some reserves can unjustly end up with priority 1 when they shouldn't. It also seemed to mess with the logic of who should get it next, but I didn't look too closely at that. This patch forces a renumbering so that all the priorities remain copacetic. Test plan: * have a few borrowers, say 4. * have a biblio with a single item (you can scale this up, it should work just the same.) * issue the item to borrower A * have borrowers B, C, and D place a hold on the item * return the item, acknowledge that it'll be put aside for B. * view the holds on the item. Without the patch: * the hold priorities in the UI end up being "waiting, 2, 1" when they should be "waiting, 1, 2". * in the database "reserves" table, they're really "0, 2, 3" when they should be "0, 1, 2". With the patch: * the hold priorities in the UI end up being "waiting, 1, 2" * in the database, they're "0, 1, 2" Signed-off-by: Owen Leonard <oleonard@myacpl.org> Test plan confirms that the problem exists and that the patch corrects it. Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> Passes all tests and QA script, especially t/db_dependent/Reserves.t. Improves priority calculation. Signed-off-by: Galen Charlton <gmc@esilibrary.com>
This commit is contained in:
parent
dcca71f0be
commit
95056d17b7
2 changed files with 27 additions and 2 deletions
|
@ -1296,7 +1296,7 @@ sub ModReserveAffect {
|
|||
$sth = $dbh->prepare($query);
|
||||
$sth->execute( $itemnumber, $borrowernumber,$biblionumber);
|
||||
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf );
|
||||
|
||||
_FixPriority( { biblionumber => $biblionumber } );
|
||||
if ( C4::Context->preference("ReturnToShelvingCart") ) {
|
||||
CartToShelf( $itemnumber );
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 31;
|
||||
use Test::More tests => 34;
|
||||
use MARC::Record;
|
||||
use DateTime::Duration;
|
||||
|
||||
|
@ -15,6 +15,7 @@ use t::lib::Mocks;
|
|||
|
||||
use Koha::DateUtils;
|
||||
|
||||
use Data::Dumper;
|
||||
BEGIN {
|
||||
use_ok('C4::Reserves');
|
||||
}
|
||||
|
@ -199,6 +200,30 @@ my ($itemnum_cpl, $itemnum_fpl);
|
|||
barcode => 'bug10272_FPL'
|
||||
} , $bibnum2);
|
||||
|
||||
# Ensure that priorities are numbered correcly when a hold is moved to waiting
|
||||
# (bug 11947)
|
||||
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum2));
|
||||
AddReserve('RPL', $requesters{'RPL'}, $bibnum2,
|
||||
$constraint, $bibitems, 1, $resdate, $expdate, $notes,
|
||||
$title, $checkitem, $found);
|
||||
AddReserve('FPL', $requesters{'FPL'}, $bibnum2,
|
||||
$constraint, $bibitems, 2, $resdate, $expdate, $notes,
|
||||
$title, $checkitem, $found);
|
||||
AddReserve('CPL', $requesters{'CPL'}, $bibnum2,
|
||||
$constraint, $bibitems, 3, $resdate, $expdate, $notes,
|
||||
$title, $checkitem, $found);
|
||||
ModReserveAffect($itemnum_cpl, $requesters{'RPL'}, 0);
|
||||
|
||||
# Now it should have different priorities.
|
||||
my $title_reserves = GetReservesFromBiblionumber({biblionumber => $bibnum2});
|
||||
# Sort by reserve number in case the database gives us oddly ordered results
|
||||
my @reserves = sort { $a->{reserve_id} <=> $b->{reserve_id} } @$title_reserves;
|
||||
is($reserves[0]{priority}, 0, 'Item is correctly waiting');
|
||||
is($reserves[1]{priority}, 1, 'Item is correctly priority 1');
|
||||
is($reserves[2]{priority}, 2, 'Item is correctly priority 2');
|
||||
|
||||
|
||||
$dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum2));
|
||||
AddReserve('RPL', $requesters{'RPL'}, $bibnum2,
|
||||
$constraint, $bibitems, 1, $resdate, $expdate, $notes,
|
||||
$title, $checkitem, $found);
|
||||
|
|
Loading…
Reference in a new issue