From a8a5451d950ee5d3fbf7f87e4de054dc5243b1b6 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 28 Aug 2020 10:01:04 -0400 Subject: [PATCH] Bug 26282: Allow staff to decide if a hold cancellation notice will be sent when cancelling a hold Bug 25534 adds the option to send hold cancellation notices when a reason was given. It would be nice if you could give a reason but still decide not to send to the patron. Say the patron called and will not be able to pick up numerous holds for some time. You cancel them all with "patron requested cancellation" but don't want to send multiple notices. I could imagine a checkbox next to the reason to activate/deactivate sending the notice. Test Plan: 1) Apply this patch 2) Visit each area in Koha where a hold can be canceled with a reason 3) Note the new 'Notify patron' checkbox 4) Test canceling a hold with and without this checkbox checked 5) Verify leaving it unchecked does not trigger a notice to be sent to the patron Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi Signed-off-by: Josef Moravec Rebased-by: Victor Grousset/tuxayo --- C4/Reserves.pm | 3 ++- Koha/Hold.pm | 2 +- circ/pendingreserves.pl | 3 ++- .../prog/en/modules/circ/pendingreserves.tt | 3 +++ .../prog/en/modules/reserve/request.tt | 16 +++++++++++----- reserve/modrequest.pl | 3 +++ reserve/request.pl | 3 ++- 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 729d5d0eae7..e0793084ecc 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -1032,6 +1032,7 @@ sub ModReserve { my $biblionumber = $params->{'biblionumber'}; my $cancellation_reason = $params->{'cancellation_reason'}; my $date = $params->{expirationdate}; + my $notify_patron = $params->{'notify_patron'}; return if defined $rank && $rank eq "n"; @@ -1053,7 +1054,7 @@ sub ModReserve { my $original = C4::Context->preference('HoldsLog') ? $hold->unblessed : undef; if ( $rank eq "del" ) { - $hold->cancel({ cancellation_reason => $cancellation_reason }); + $hold->cancel({ cancellation_reason => $cancellation_reason, notify_patron => $notify_patron }); } elsif ($hold->found && $hold->priority eq '0' && $date) { diff --git a/Koha/Hold.pm b/Koha/Hold.pm index 1faec873ec2..f2898c8fd18 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -738,7 +738,7 @@ sub cancel { }, undef, $self->id ); - if ( $params->{cancellation_reason} ) { + if ( $params->{cancellation_reason} && $params->{notify_patron} ) { my $letter = C4::Letters::GetPreparedLetter( module => 'reserves', letter_code => 'HOLD_CANCELLATION', diff --git a/circ/pendingreserves.pl b/circ/pendingreserves.pl index 366d0009af7..c306bf6b8cc 100755 --- a/circ/pendingreserves.pl +++ b/circ/pendingreserves.pl @@ -55,7 +55,8 @@ if ( $op eq 'cud-cancel_reserve' and $reserve_id ) { my $hold = Koha::Holds->find( $reserve_id ); if ( $hold ) { my $cancellation_reason = $input->param('cancellation-reason'); - $hold->cancel({ cancellation_reason => $cancellation_reason }); + my $cancellation_notify_patron = $input->param('cancellation-notify-patron'); + $hold->cancel({ cancellation_reason => $cancellation_reason, notify_patron => $cancellation_notify_patron }); push @messages, { type => 'message', code => 'hold_cancelled' }; } } elsif ( $op =~ m|^mark_as_lost| ) { diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt index 701aab6dca5..3f4d741fabb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt @@ -220,6 +220,9 @@ [% END %] + + + [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index 39ed6cd9909..af7bc83928a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -1264,6 +1264,9 @@ [% END %] + + + [% END %] @@ -1458,6 +1461,9 @@ [% END %] + + + [% END %] @@ -1852,11 +1858,11 @@ e.preventDefault; cancel_link = $(this); $("#cancel_modal_form #inputs").empty(); - let reserve_id = cancel_link.data('id'); - let biblionumber = cancel_link.data('biblionumber'); - $("#cancel_modal_form #inputs").append(''); - $("#cancel_modal_form #inputs").append(''); - $("#cancel_modal_form #inputs").append(''); + let reserve_id = cancel_link.data('id'); + let biblionumber = cancel_link.data('biblionumber'); + $("#cancel_modal_form #inputs").append(''); + $("#cancel_modal_form #inputs").append(''); + $("#cancel_modal_form #inputs").append(''); $('#cancelModal').modal('show'); return false; }); diff --git a/reserve/modrequest.pl b/reserve/modrequest.pl index fbf960a5541..648fae89a46 100755 --- a/reserve/modrequest.pl +++ b/reserve/modrequest.pl @@ -56,6 +56,8 @@ if( $op eq 'cud-cancelall' || $op eq 'cud-modifyall' ) { undef $itemnumber[$i] if !$itemnumber[$i]; my $suspend_until = $query->param( "suspend_until_" . $reserve_id[$i] ); my $cancellation_reason = $query->param("cancellation-reason"); + my $cancellation_notify_patron = $query->param("cancellation-notify-patron"); + my $params = { rank => $rank[$i], reserve_id => $reserve_id[$i], @@ -64,6 +66,7 @@ if( $op eq 'cud-cancelall' || $op eq 'cud-modifyall' ) { itemnumber => $itemnumber[$i], defined $suspend_until ? ( suspend_until => $suspend_until ) : (), cancellation_reason => $cancellation_reason, + notify_patron => $cancellation_notify_patron, }; if (C4::Context->preference('AllowHoldDateInFuture')) { $params->{reservedate} = $reservedates[$i] || undef; diff --git a/reserve/request.pl b/reserve/request.pl index 5d0887764d0..3a3be57e63d 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -113,8 +113,9 @@ if ( $op eq 'cud-move' ) { elsif ( $op eq 'cud-cancel' ) { my $reserve_id = $input->param('reserve_id'); my $cancellation_reason = $input->param("cancellation-reason"); + my $cancellation_notify_patron = $input->param("cancellation-notify-patron"); my $hold = Koha::Holds->find($reserve_id); - $hold->cancel( { cancellation_reason => $cancellation_reason } ) if $hold; + $hold->cancel( { cancellation_reason => $cancellation_reason, notify_patron => $cancellation_notify_patron } ) if $hold; } elsif ( $op eq 'cud-setLowestPriority' ) { my $reserve_id = $input->param('reserve_id'); -- 2.39.3 (Apple Git-146)