From 9db6daf7af1b66712c3c6bc186de4995ff45e7f6 Mon Sep 17 00:00:00 2001 From: Jason Stephenson Date: Wed, 14 Nov 2012 13:41:37 -0500 Subject: [PATCH] LP1076399: Prevent reactivated holds from expiring immediately. Clear the expire_time on deactivated holds. Recalculate the expire_time when a hold is reactivated. Upgrade script to set expire_time to NULL on frozen action.hold_requests. Signed-off-by: Jason Stephenson Signed-off-by: Ben Shum --- .../perlmods/lib/OpenILS/Application/Circ/Holds.pm | 9 +++++++++ .../XXXX.data.frozen_holds_clear_expire_time.sql | 11 +++++++++++ 2 files changed, 20 insertions(+) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.frozen_holds_clear_expire_time.sql diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm index 3e32d62604..0b188bf2e2 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm @@ -1009,6 +1009,9 @@ sub update_hold_impl { $logger->info("clearing current_copy and check_time for frozen hold ".$hold->id); $hold->clear_current_copy; $hold->clear_prev_check_time; + # Clear expire_time to prevent frozen holds from expiring. + $logger->info("clearing expire_time for frozen hold ".$hold->id); + $hold->clear_expire_time; } # If the hold_expire_time is in the past && is not equal to the @@ -1018,6 +1021,12 @@ sub update_hold_impl { $hold->expire_time(calculate_expire_time($hold->request_lib)); } + # If the hold is reactivated, reset the expire_time. + if(!$U->is_true($hold->frozen) && $U->is_true($orig_hold->frozen)) { + $logger->info("Reset expire_time on activated hold ".$hold->id); + $hold->expire_time(calculate_expire_time($hold->request_lib)); + } + $e->update_action_hold_request($hold) or return $e->die_event; $e->commit; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.frozen_holds_clear_expire_time.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.frozen_holds_clear_expire_time.sql new file mode 100644 index 0000000000..2bd15b8fc2 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.frozen_holds_clear_expire_time.sql @@ -0,0 +1,11 @@ +-- LP1076399: Prevent reactivated holds from canceling immediately. +-- Set the expire_time to NULL on all frozen/suspended holds. +BEGIN; + +SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); + +UPDATE action.hold_request +SET expire_time = NULL +WHERE frozen = 't'; + +COMMIT; -- 2.43.2