Bug 30687: Allow pickup location to be forced when override is allowed
This is Julian's patch with some extra cleanup to reduce repeated code If AllowHoldPolicyOverride is enabled and only some pickup locations are available, you still have the possibility to force one of the others pickup locations. But when there are zero pickup locations available, that is not possible. This patch change that by always displaying the list of pickup locations when AllowHoldPolicyOverride is enabled. Test plan: 1. Apply patch 2. Disable AllowHoldPolicyOverride 3. Create a biblio B with an item I at library A. 4. Configure this library A to not be a pickup location 5. Add a "Default holds policy by item type" for item I type where "Hold pickup library match" is "item's home library" 6. Try to place a hold on biblio B You should not be able to place a hold because there is no valid pickup locations 7. Enable AllowHoldPolicyOverride 8. Try to place a hold on biblio B You should now see all valid pickup locations in a dropdown list (with an exclamation mark in front of each option) with none selected by default 9. Verify you can place a title-level hold and an item-level hold Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Julian Maurice <julian.maurice@biblibre.com> Signed-off-by: Aleisha Amohia <aleishaamohia@hotmail.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
f97b448661
commit
ab93008da7
|
|
@ -801,7 +801,7 @@
|
|||
[% END # /IF force_hold_level %]
|
||||
</td>
|
||||
<td>
|
||||
[% IF (itemloo.pickup_locations_count > 0) %]
|
||||
[% IF (itemloo.pickup_locations_count > 0) || itemloo.override %]
|
||||
<select name="item_pickup_[% itemloo.itemnumber | html %]" class="pickup_locations" style="width:100%;"
|
||||
data-item-id="[% itemloo.itemnumber | html %]"
|
||||
data-patron-id="[% patron.borrowernumber | html %]"
|
||||
|
|
@ -1520,7 +1520,7 @@
|
|||
msg = (_("- Please select an item to place a hold") + "\n");
|
||||
}
|
||||
} else {
|
||||
if( $("#pickup").length < 1 || $("#pickup").val() == "" ){
|
||||
if( $("#pickup").length < 1 || $("#pickup").val() == "" || $('#pickup').val() === null ){
|
||||
msg = _("- Please select a pickup location for this hold" + "\n");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -503,13 +503,21 @@ if ( ( $findborrower && $borrowernumber_hold || $findclub && $club_hold )
|
|||
$default_pickup_branch = C4::Context->userenv->{branch};
|
||||
}
|
||||
|
||||
if (
|
||||
!$item->{cantreserve}
|
||||
&& !$exceeded_maxreserves
|
||||
&& $can_item_be_reserved eq 'OK'
|
||||
# items_any_available defined outside of the current loop,
|
||||
# so we avoiding loop inside IsAvailableForItemLevelRequest:
|
||||
&& IsAvailableForItemLevelRequest($item_object, $patron, undef, $items_any_available)
|
||||
if ( $can_item_be_reserved eq 'itemAlreadyOnHold' ) {
|
||||
# itemAlreadyOnHold cannot be overridden
|
||||
$num_alreadyheld++
|
||||
}
|
||||
elsif (
|
||||
(
|
||||
!$item->{cantreserve}
|
||||
&& !$exceeded_maxreserves
|
||||
&& $can_item_be_reserved eq 'OK'
|
||||
# items_any_available defined outside of the current loop,
|
||||
# so we avoiding loop inside IsAvailableForItemLevelRequest:
|
||||
&& IsAvailableForItemLevelRequest($item_object, $patron, undef, $items_any_available)
|
||||
) || C4::Context->preference('AllowHoldPolicyOverride')
|
||||
# If AllowHoldPolicyOverride is set, it overrides EVERY restriction
|
||||
# not just branch item rules
|
||||
)
|
||||
{
|
||||
# Send the pickup locations count to the UI, the pickup locations will be pulled using the API
|
||||
|
|
@ -522,37 +530,17 @@ if ( ( $findborrower && $borrowernumber_hold || $findclub && $club_hold )
|
|||
my $default_pickup_location = $pickup_locations->search({ branchcode => $default_pickup_branch })->next;
|
||||
$item->{default_pickup_location} = $default_pickup_location;
|
||||
}
|
||||
elsif ( C4::Context->preference('AllowHoldPolicyOverride') ){
|
||||
$num_items_available++;
|
||||
$item->{override} = 1;
|
||||
my $default_pickup_location = $pickup_locations->search({ branchcode => $default_pickup_branch })->next;
|
||||
$item->{default_pickup_location} = $default_pickup_location;
|
||||
}
|
||||
else {
|
||||
$item->{available} = 0;
|
||||
$item->{not_holdable} = "no_valid_pickup_location";
|
||||
}
|
||||
|
||||
push( @available_itemtypes, $item->{itype} );
|
||||
}
|
||||
elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) {
|
||||
# If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules
|
||||
# with the exception of itemAlreadyOnHold because, you know, the item is already on hold
|
||||
if ( $can_item_be_reserved ne 'itemAlreadyOnHold' ) {
|
||||
# Send the pickup locations count to the UI, the pickup locations will be pulled using the API
|
||||
my @pickup_locations = $item_object->pickup_locations({ patron => $patron })->as_list;
|
||||
$item->{pickup_locations_count} = scalar @pickup_locations;
|
||||
|
||||
if ( @pickup_locations ) {
|
||||
$num_items_available++;
|
||||
$item->{override} = 1;
|
||||
|
||||
my $default_pickup_location;
|
||||
|
||||
($default_pickup_location) = grep { $_->branchcode eq $default_pickup_branch } @pickup_locations;
|
||||
|
||||
$item->{default_pickup_location} = $default_pickup_location;
|
||||
}
|
||||
else {
|
||||
$item->{available} = 0;
|
||||
$item->{not_holdable} = "no_valid_pickup_location";
|
||||
}
|
||||
} else { $num_alreadyheld++ }
|
||||
|
||||
push( @available_itemtypes, $item->{itype} );
|
||||
} else {
|
||||
# If none of the conditions hold true, then neither override nor available is set and the item cannot be checked
|
||||
|
|
|
|||
Loading…
Reference in New Issue