From f257da41fa20d9f7b25064a36b27130b354773a2 Mon Sep 17 00:00:00 2001
From: Julian Maurice <julian.maurice@biblibre.com>
Date: Wed, 7 Sep 2022 11:24:49 +0200
Subject: [PATCH] Bug 30687 (alternative patch): Always allow to force hold
 pickup location

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
---
 koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt | 4 ++--
 reserve/request.pl                                         | 4 ++--
 2 files changed, 4 insertions(+), 4 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 2abf57ab8b..f0f70b4a5d 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
@@ -745,7 +745,7 @@
                                                     [% END # /IF force_hold_level %]
                                                 </td>
                                                 <td>
-                                                [% IF (itemloo.pickup_locations_count > 0) %]
+                                                [% IF (itemloo.pickup_locations_count > 0) || Koha.Preference('AllowHoldPolicyOverride') %]
                                                     <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 %]"
@@ -1457,7 +1457,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");
                 }
             }
diff --git a/reserve/request.pl b/reserve/request.pl
index 2c28f2c58f..beed754a02 100755
--- a/reserve/request.pl
+++ b/reserve/request.pl
@@ -511,7 +511,7 @@ if (   ( $findborrower && $borrowernumber_hold || $findclub && $club_hold )
                         # 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 });
                         $item->{pickup_locations_count} = $pickup_locations->count;
-                        if ( $item->{pickup_locations_count} > 0 ) {
+                        if ( $item->{pickup_locations_count} > 0 || C4::Context->preference('AllowHoldPolicyOverride') ) {
                             $num_items_available++;
                             $item->{available} = 1;
                             # pass the holding branch for use as default
@@ -533,7 +533,7 @@ if (   ( $findborrower && $borrowernumber_hold || $findclub && $club_hold )
                             my @pickup_locations = $item_object->pickup_locations({ patron => $patron })->as_list;
                             $item->{pickup_locations_count} = scalar @pickup_locations;
 
-                            if ( @pickup_locations ) {
+                            if ( @pickup_locations || C4::Context->preference('AllowHoldPolicyOverride') ) {
                                 $num_items_available++;
                                 $item->{override} = 1;
 
-- 
2.30.2