From a1b5bd95341b81deec29493997e824c84849001e 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 Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi --- 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 79deaaac25..97a4cbd1b4 100644 --- a/Koha/REST/V1/Holds.pm +++ b/Koha/REST/V1/Holds.pm @@ -535,6 +535,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.39.2