From c46aa8af33728f63b3bf83deb1109dc76166bc1e 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 (cherry picked from commit a1b5bd95341b81deec29493997e824c84849001e) Signed-off-by: Fridolin Somers (cherry picked from commit 6b2b54151f82d84efab611db25994bc10393dde3) Signed-off-by: Pedro Amorim --- 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 41cb28897c..93e48c07e4 100644 --- a/Koha/REST/V1/Holds.pm +++ b/Koha/REST/V1/Holds.pm @@ -540,6 +540,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.5