@@ -, +, @@ Check out tab or Details tab) --- C4/Reserves.pm | 38 +++++++++++++++++++++++++++++++++++--- circ/pendingreserves.pl | 32 +++++++++++++++++++++++++++++++- reserve/request.pl | 16 ++++++++++++++++ 3 files changed, 82 insertions(+), 4 deletions(-) --- a/C4/Reserves.pm +++ a/C4/Reserves.pm @@ -1005,9 +1005,24 @@ sub ModReserve { $hold ||= Koha::Holds->find($reserve_id); if ( $rank eq "del" ) { + my $hold_branchcode = $hold->branchcode; + my $hold_biblionumber = $hold->biblionumber; + my $hold_borrowernumber = $hold->borrowernumber; + my $hold_borrower = Koha::Patrons->find( $hold_borrowernumber ); $hold->cancel({ cancellation_reason => $cancellation_reason }); - } - elsif ($rank =~ /^\d+/ and $rank > 0) { + + # send notice to user that their hold has been cancelled + my $letter = C4::Letters::GetPreparedLetter ( + module => 'reserves', + letter_code => 'HOLD_MANUAL_CANCEL', + branchcode => $hold_branchcode, + tables => { + 'biblio', $hold_biblionumber, + 'borrowers', $hold_borrowernumber + } + ); + C4::Message->enqueue($letter, $hold_borrower->unblessed, 'email'); + } elsif ($rank =~ /^\d+/ and $rank > 0) { logaction( 'HOLDS', 'MODIFY', $hold->reserve_id, Dumper($hold->unblessed) ) if C4::Context->preference('HoldsLog'); @@ -1204,7 +1219,24 @@ sub ModReserveCancelAll { #step 1 : cancel the reservation my $holds = Koha::Holds->search({ itemnumber => $itemnumber, borrowernumber => $borrowernumber }); return unless $holds->count; - $holds->next->cancel({ cancellation_reason => $cancellation_reason }); + my $hold = $holds->next; + my $hold_branchcode = $hold->branchcode; + my $hold_biblionumber = $hold->biblionumber; + my $hold_borrowernumber = $hold->borrowernumber; + my $hold_borrower = Koha::Patrons->find( $hold_borrowernumber ); + $hold->cancel({ cancellation_reason => $cancellation_reason }); + + # send notice to user that their hold has been cancelled + my $letter = C4::Letters::GetPreparedLetter ( + module => 'reserves', + letter_code => 'HOLD_MANUAL_CANCEL', + branchcode => $hold_branchcode, + tables => { + 'biblio', $hold_biblionumber, + 'borrowers', $hold_borrowernumber + } + ); + C4::Message->enqueue($letter, $hold_borrower->unblessed, 'email'); #step 2 launch the subroutine of the others reserves ( $messages, $nextreservinfo ) = GetOtherReserves($itemnumber); --- a/circ/pendingreserves.pl +++ a/circ/pendingreserves.pl @@ -55,16 +55,35 @@ my @messages; if ( $op eq 'cancel_reserve' and $reserve_id ) { my $hold = Koha::Holds->find( $reserve_id ); if ( $hold ) { + my $hold_branchcode = $hold->branchcode; + my $hold_biblionumber = $hold->biblionumber; + my $hold_borrowernumber = $hold->borrowernumber; + my $hold_borrower = Koha::Patrons->find( $hold_borrowernumber ); my $cancellation_reason = $input->param('cancellation-reason'); $hold->cancel({ cancellation_reason => $cancellation_reason }); push @messages, { type => 'message', code => 'hold_cancelled' }; + + # send notice to user that their hold has been cancelled + my $letter = C4::Letters::GetPreparedLetter ( + module => 'reserves', + letter_code => 'HOLD_MANUAL_CANCEL', + branchcode => $hold_branchcode, + tables => { + 'biblio', $hold_biblionumber, + 'borrowers', $hold_borrowernumber + } + ); + C4::Message->enqueue($letter, $hold_borrower->unblessed, 'email'); } } elsif ( $op =~ m|^mark_as_lost| ) { my $hold = Koha::Holds->find( $reserve_id ); + my $hold_branchcode = $hold->branchcode; + my $hold_biblionumber = $hold->biblionumber; + my $hold_borrowernumber = $hold->borrowernumber; + my $patron = $hold->borrower; die "wrong reserve_id" unless $hold; # This is a bit rude, but we are not supposed to get a wrong reserve_id my $item = $hold->item; if ( $item and C4::Context->preference('CanMarkHoldsToPullAsLost') =~ m|^allow| ) { - my $patron = $hold->borrower; C4::Circulation::LostItem( $item->itemnumber, "pendingreserves" ); if ( $op eq 'mark_as_lost_and_notify' and C4::Context->preference('CanMarkHoldsToPullAsLost') eq 'allow_and_notify' ) { my $library = $hold->branch; @@ -123,6 +142,17 @@ if ( $op eq 'cancel_reserve' and $reserve_id ) { } } + # send notice to user that their hold has been cancelled + my $letter = C4::Letters::GetPreparedLetter ( + module => 'reserves', + letter_code => 'HOLD_MANUAL_CANCEL', + branchcode => $hold_branchcode, + tables => { + 'biblio', $hold_biblionumber, + 'borrowers', $hold_borrowernumber + } + ); + C4::Message->enqueue($letter, $patron->unblessed, 'email'); } elsif ( not $item ) { push @messages, { type => 'alert', code => 'hold_placed_at_biblio_level'}; } # else the url parameters have been modified and the user is not allowed to continue --- a/reserve/request.pl +++ a/reserve/request.pl @@ -107,7 +107,23 @@ if ( $action eq 'move' ) { my $reserve_id = $input->param('reserve_id'); my $cancellation_reason = $input->param("cancellation-reason"); my $hold = Koha::Holds->find( $reserve_id ); + my $hold_branchcode = $hold->branchcode; + my $hold_biblionumber = $hold->biblionumber; + my $hold_borrowernumber = $hold->borrowernumber; + my $hold_borrower = Koha::Patrons->find( $hold_borrowernumber ); $hold->cancel({ cancellation_reason => $cancellation_reason }) if $hold; + + # send notice to user that their hold has been cancelled + my $letter = C4::Letters::GetPreparedLetter ( + module => 'reserves', + letter_code => 'HOLD_MANUAL_CANCEL', + branchcode => $hold_branchcode, + tables => { + 'biblio', $hold_biblionumber, + 'borrowers', $hold_borrowernumber + } + ); + C4::Message->enqueue($letter, $hold_borrower->unblessed, 'email'); } elsif ( $action eq 'setLowestPriority' ) { my $reserve_id = $input->param('reserve_id'); ToggleLowestPriority( $reserve_id ); --