From 6e724f4572fd03dc547888ce31ae87e0727717ea Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Mon, 31 Jul 2023 14:26:01 -0300 Subject: [PATCH] Bug 34024: Block changing pickup location for found holds This patch adds a check on holds for 'found' statuses. Holds with the following statuses have special workflows in Koha, and overwritting their pickup locations yields uncertain scenarios: * Waiting: the item has probably been put on a special shelve * In transit: the item is travelling to a new destination, and changing the pickup location should include some validations, and probably generate some notifications. At least. * In processing: the item has already been taken out of the shelve for some internal processing. Changing the pickup location could interfere with this workflow. Overriding this limitation could be introduced with care on a separate report. To test: 1. Apply the unit tests patch 2. Run: $ ktd --shell k$ prove t/db_dependent/api/v1/holds.t => FAIL: Tests don't pass. Holds go through (200) instead of being rejected (409). 3. Apply this patch 4. Repeat 2 => SUCCESS: Tests pass! 5. Sign off :-D --- Koha/REST/V1/Holds.pm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Koha/REST/V1/Holds.pm b/Koha/REST/V1/Holds.pm index 00f761511d4..8a33260c7a9 100644 --- a/Koha/REST/V1/Holds.pm +++ b/Koha/REST/V1/Holds.pm @@ -522,6 +522,17 @@ sub update_pickup_location { my $overrides = $c->stash('koha.overrides'); my $can_override = $overrides->{any} && C4::Context->preference('AllowHoldPolicyOverride'); + my $error_code = + $hold->is_waiting ? 'hold_waiting' + : $hold->is_in_transit ? 'hold_in_transit' + : $hold->is_in_processing ? 'hold_in_processing' + : undef; + + return $c->render( + status => 409, + openapi => { error => 'Cannot change pickup location', error_code => $error_code } + ) if $error_code; + $hold->set_pickup_location( { library_id => $pickup_library_id, -- 2.41.0