Bug 30960: Fix JS error message when no pick-up location is selected when placing a hold

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 patron'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 location,
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.

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 505b62b4d2)

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Petro Vashchuk 2022-06-13 15:02:28 +03:00 committed by Lucas Gass
parent a2d22ee029
commit 348fe09847
2 changed files with 25 additions and 24 deletions

View File

@ -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!

View File

@ -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) {