From 79ea6c5eb6efe4e0f7a5a3afa163fb50917d5522 Mon Sep 17 00:00:00 2001 From: Petro Vashchuk Date: Mon, 13 Jun 2022 15:02:28 +0300 Subject: [PATCH] Bug 30960: Don't allow user to place the hold without a pick-up place It's possible to place item-level hold without selecting a pick-up location, which causes problems: if the item is then returned, Koha tells about a hold, but gives error 500. At customer's hold tab you see the number of holds, but cannot see the actual holds there. However, if you go to the title in question, then modify the hold so that it has a pick-up place, then the hold will work normally again. This patch fixes already existing but not working js error message and ensures that hold cannot be made while pickup location is undefined. To reproduce: 1. Go to admin page, to the libraries configurations, and disable pickup location for one of them. 2. Pick any biblio that has items that have that same library as a default pickup location. 3. When placing the item-level hold, notice that the pickup location dropdown box is empty by default. Keep it empty, place the hold. 4. Go to the patron's page of the patron who you placed that hold for, check that it doesn't show the new hold. 5. Apply patch. 6. Repeat steps 2 and 3, it shouldn't let you make the item-level hold until you select a specific pickup location. --- .../prog/en/modules/reserve/request.tt | 2 +- reserve/placerequest.pl | 47 ++++++++++--------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index 396afc7964..306ee91c33 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -1362,7 +1362,7 @@ var msg = ""; - if ( $("#requestany").attr("checked") !== "checked" ) { + if ( ! $("#requestany").is(":checked") ) { // requestany not selected, go through the item-specific cases if ( $('input[type="radio"]:checked').length > 0 ) { // got item-specific hold requests in the form! diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl index 4f255fdcc5..0fc7361b73 100755 --- a/reserve/placerequest.pl +++ b/reserve/placerequest.pl @@ -71,34 +71,35 @@ if ( $patron ) { my $can_override = C4::Context->preference('AllowHoldPolicyOverride'); if ( defined $checkitem && $checkitem ne '' ) { - my $item_pickup_location = $input->param("item_pickup_$checkitem"); + if ( my $item_pickup_location = $input->param("item_pickup_$checkitem") ) { - my $item = Koha::Items->find($checkitem); + my $item = Koha::Items->find($checkitem); - if ( $item->biblionumber ne $biblionumber ) { - $biblionumber = $item->biblionumber; - } + if ( $item->biblionumber ne $biblionumber ) { + $biblionumber = $item->biblionumber; + } - my $can_item_be_reserved = CanItemBeReserved($patron, $item, $item_pickup_location)->{status}; + my $can_item_be_reserved = CanItemBeReserved($patron, $item, $item_pickup_location)->{status}; - if ( $can_item_be_reserved eq 'OK' || ( $can_item_be_reserved ne 'itemAlreadyOnHold' && $can_override ) ) { - AddReserve( - { - branchcode => $item_pickup_location, - borrowernumber => $patron->borrowernumber, - biblionumber => $biblionumber, - priority => $rank[0], - reservation_date => $startdate, - expiration_date => $expirationdate, - notes => $notes, - title => $title, - itemnumber => $checkitem, - found => $found, - itemtype => $itemtype, - non_priority => $non_priority, - } - ); + if ( $can_item_be_reserved eq 'OK' || ( $can_item_be_reserved ne 'itemAlreadyOnHold' && $can_override ) ) { + AddReserve( + { + branchcode => $item_pickup_location, + borrowernumber => $patron->borrowernumber, + biblionumber => $biblionumber, + priority => $rank[0], + reservation_date => $startdate, + expiration_date => $expirationdate, + notes => $notes, + title => $title, + itemnumber => $checkitem, + found => $found, + itemtype => $itemtype, + non_priority => $non_priority, + } + ); + } } } elsif (@biblionumbers > 1) { -- 2.35.3