From b06dd83ff7c11d2ddd81e6f9b55323f68c107d1b 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 Signed-off-by: Sam Lau --- 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 00f761511d..8a33260c7a 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.30.2