From f02dbfe16552b534f8239579c016cc78f1aeb943 Mon Sep 17 00:00:00 2001 From: Lari Taskula Date: Tue, 7 Feb 2017 17:51:18 +0200 Subject: [PATCH] Bug 7614: Check transfer limit in CanBookBeReserved and CanItemBeReserved This patch adds $branchcode_to parameter to CanBookBeReserved and CanItemBeReserved. It represents the pickup location for the hold. This patch checks if the library is configured to be a pickup location (see Bug 7534), and also if the item can be transferred into the given library (see Bug 18072). To test: 1. prove t/db_dependent/Holds.t Signed-off-by: Bob Bennhoff Signed-off-by: Kyle M Hall Signed-off-by: Nick Clemens (cherry picked from commit b028a2d1a53a7106a00a7ec6a860e813c0781342) Signed-off-by: Martin Renvoize --- C4/Reserves.pm | 16 ++++++++++++++++ t/db_dependent/Holds.t | 24 +++++++++++++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 78e8f6a360..bb53f1c078 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -296,6 +296,7 @@ sub CanBookBeReserved{ $canReserve = &CanItemBeReserved($borrowernumber, $itemnumber, $branchcode) if ($canReserve->{status} eq 'OK') { #We can reserve this Item! } +<<<<<<< HEAD @RETURNS { status => OK }, if the Item can be reserved. { status => ageRestricted }, if the Item is age restricted for this borrower. { status => damaged }, if the Item is damaged. @@ -304,6 +305,17 @@ sub CanBookBeReserved{ { status => notReservable }, if holds on this item are not allowed { status => libraryNotFound }, if given branchcode is not an existing library { status => libraryNotPickupLocation }, if given branchcode is not configured to be a pickup location +======= +@RETURNS OK, if the Item can be reserved. + ageRestricted, if the Item is age restricted for this borrower. + damaged, if the Item is damaged. + cannotReserveFromOtherBranches, if syspref 'canreservefromotherbranches' is OK. + tooManyReserves, if the borrower has exceeded his maximum reserve amount. + notReservable, if holds on this item are not allowed + libraryNotFound if given branchcode is not an existing library + libraryNotPickupLocation if given branchcode is not configured to be a pickup location + cannotBeTransferred if branch transfer limit applies on given item and branchcode +>>>>>>> Bug 7614: Check transfer limit in CanBookBeReserved and CanItemBeReserved =cut @@ -474,12 +486,16 @@ sub CanItemBeReserved { my $destination = Koha::Libraries->find({ branchcode => $pickup_branchcode, }); + unless ($destination) { return { status => 'libraryNotFound' }; } unless ($destination->pickup_location) { return { status => 'libraryNotPickupLocation' }; } + unless ($item->can_be_transferred({ to => $destination })) { + return 'cannotBeTransferred'; + } } return { status => 'OK' }; diff --git a/t/db_dependent/Holds.t b/t/db_dependent/Holds.t index 863ae27f63..89af53b46a 100755 --- a/t/db_dependent/Holds.t +++ b/t/db_dependent/Holds.t @@ -9,17 +9,19 @@ use C4::Context; use Test::More tests => 57; use MARC::Record; -use C4::Items; + use C4::Biblio; -use C4::Reserves; use C4::Calendar; +use C4::Items; +use C4::Reserves; -use Koha::Database; -use Koha::DateUtils qw( dt_from_string output_pref ); use Koha::Biblios; use Koha::CirculationRules; +use Koha::Database; +use Koha::DateUtils qw( dt_from_string output_pref ); use Koha::Holds; use Koha::IssuingRules; +use Koha::Item::Transfer::Limits; use Koha::Items; use Koha::Libraries; use Koha::Patrons; @@ -490,7 +492,7 @@ subtest 'Test max_holds per library/patron category' => sub { }; subtest 'Pickup location availability tests' => sub { - plan tests => 3; + plan tests => 4; my ( $bibnum, $title, $bibitemnum ) = create_helper_biblio('ONLY1'); my ( $item_bibnum, $item_bibitemnum, $itemnumber ) @@ -505,13 +507,25 @@ subtest 'Pickup location availability tests' => sub { my $item = Koha::Items->find($itemnumber); my $branch_to = $builder->build({ source => 'Branch' })->{ branchcode }; my $library = Koha::Libraries->find($branch_to); + $library->pickup_location('1')->store; my $patron = $builder->build({ source => 'Borrower' })->{ borrowernumber }; t::lib::Mocks::mock_preference('UseBranchTransferLimits', 1); t::lib::Mocks::mock_preference('BranchTransferLimitsType', 'itemtype'); + $library->pickup_location('1')->store; is(CanItemBeReserved($patron, $item->itemnumber, $branch_to)->{status}, 'OK', 'Library is a pickup location'); + + my $limit = Koha::Item::Transfer::Limit->new({ + fromBranch => $item->holdingbranch, + toBranch => $branch_to, + itemtype => $item->effective_itemtype, + })->store; + is(CanItemBeReserved($patron, $item->itemnumber, $branch_to), + 'cannotBeTransferred', 'Item cannot be transferred'); + $limit->delete; + $library->pickup_location('0')->store; is(CanItemBeReserved($patron, $item->itemnumber, $branch_to)->{status}, 'libraryNotPickupLocation', 'Library is not a pickup location'); -- 2.39.5