From 4dd61b0fc452da2d1a026acbb07955ce1286424d Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Fri, 11 Feb 2022 15:28:31 -0300 Subject: [PATCH] Bug 30072: Add missing hold actions plugin hooks This patch introduces the after_hold_action plugin hook, with 4 different 'action' parameters: - fill - cancel - suspend - resume To test: 1. Apply the unit tests 2. Run: $ kshell k$ t/db_dependent/Koha/Plugins/Holds_hooks.t -v => FAIL: The hooks are not in the code, so the expected output from the Koha::Plugin::Test plugin is not there, and the tests fail 3. Apply this patch 4. Repeat 2 => SUCCESS: Tests pass! 5. Sign off :-D Note: I think we could deprecate 'after_hold_create' and migrate it to the one introduced here, using the 'place' action. Signed-off-by: Tomas Cohen Arazi Signed-off-by: Martin Renvoize Signed-off-by: Kyle M Hall (cherry picked from commit f2d1b126b97ede8d67a3deee97c3a2dc44b334c8) Signed-off-by: Andrew Fuerste-Henry --- C4/Reserves.pm | 10 +++++++++- Koha/Hold.pm | 28 +++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index e7f3b5580b..053f2eab4d 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -1122,7 +1122,15 @@ sub ModReserveFill { if C4::Context->preference('HoldsLog'); # FIXME Must call Koha::Hold->cancel ? => No, should call ->filled and add the correct log - Koha::Old::Hold->new( $hold->unblessed() )->store(); + my $old_hold = Koha::Old::Hold->new( $hold->unblessed() )->store(); + + Koha::Plugins->call( + 'after_hold_action', + { + action => 'fill', + payload => { hold => $old_hold->get_from_storage } + } + ); $hold->delete(); diff --git a/Koha/Hold.pm b/Koha/Hold.pm index 110176a675..234d3eb0a7 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -36,6 +36,7 @@ use Koha::Items; use Koha::Libraries; use Koha::Old::Holds; use Koha::Calendar; +use Koha::Plugins; use Koha::Exceptions::Hold; @@ -114,6 +115,14 @@ sub suspend_hold { $self->suspend_until($date); $self->store(); + Koha::Plugins->call( + 'after_hold_action', + { + action => 'suspend', + payload => { hold => $self->get_from_storage } + } + ); + logaction( 'HOLDS', 'SUSPEND', $self->reserve_id, Dumper( $self->unblessed ) ) if C4::Context->preference('HoldsLog'); @@ -134,6 +143,14 @@ sub resume { $self->store(); + Koha::Plugins->call( + 'after_hold_action', + { + action => 'resume', + payload => { hold => $self->get_from_storage } + } + ); + logaction( 'HOLDS', 'RESUME', $self->reserve_id, Dumper($self->unblessed) ) if C4::Context->preference('HoldsLog'); @@ -547,7 +564,16 @@ sub cancel { } } - $self->_move_to_old; + my $old_me = $self->_move_to_old; + + Koha::Plugins->call( + 'after_hold_action', + { + action => 'cancel', + payload => { hold => $old_me->get_from_storage } + } + ); + $self->SUPER::delete(); # Do not add a DELETE log # now fix the priority on the others.... -- 2.39.5