@@ -, +, @@ when canceling a hold A quick test version would be "Reason: <>" -- -- you should now be able to cancel a hold with a reason, but no email will be generated --- C4/Reserves.pm | 9 ++--- Koha/Hold.pm | 33 +++++++++++++++++++ .../prog/en/includes/holds_table.inc | 8 +++-- .../prog/en/modules/circ/circulation.tt | 10 ++++++ .../prog/en/modules/members/moremember.tt | 10 ++++++ .../prog/en/modules/reserve/request.tt | 17 ++++++++++ reserve/modrequest.pl | 2 ++ 7 files changed, 82 insertions(+), 7 deletions(-) --- a/C4/Reserves.pm +++ a/C4/Reserves.pm @@ -983,6 +983,7 @@ sub ModReserve { my $suspend_until = $params->{'suspend_until'}; my $borrowernumber = $params->{'borrowernumber'}; my $biblionumber = $params->{'biblionumber'}; + my $cancellation_reason = $params->{'cancellation_reason'}; return if $rank eq "W"; return if $rank eq "n"; @@ -1000,7 +1001,7 @@ sub ModReserve { $hold ||= Koha::Holds->find($reserve_id); if ( $rank eq "del" ) { - $hold->cancel; + $hold->cancel({ cancellation_reason => $cancellation_reason }); } elsif ($rank =~ /^\d+/ and $rank > 0) { logaction( 'HOLDS', 'MODIFY', $hold->reserve_id, Dumper($hold->unblessed) ) @@ -1185,7 +1186,7 @@ sub ModReserveAffect { =head2 ModReserveCancelAll - ($messages,$nextreservinfo) = &ModReserveCancelAll($itemnumber,$borrowernumber); + ($messages,$nextreservinfo) = &ModReserveCancelAll($itemnumber,$borrowernumber,$reason); function to cancel reserv,check other reserves, and transfer document if it's necessary @@ -1194,12 +1195,12 @@ function to cancel reserv,check other reserves, and transfer document if it's ne sub ModReserveCancelAll { my $messages; my $nextreservinfo; - my ( $itemnumber, $borrowernumber ) = @_; + my ( $itemnumber, $borrowernumber, $cancellation_reason ) = @_; #step 1 : cancel the reservation my $holds = Koha::Holds->search({ itemnumber => $itemnumber, borrowernumber => $borrowernumber }); return unless $holds->count; - $holds->next->cancel; + $holds->next->cancel({ cancellation_reason => $cancellation_reason }); #step 2 launch the subroutine of the others reserves ( $messages, $nextreservinfo ) = GetOtherReserves($itemnumber); --- a/Koha/Hold.pm +++ a/Koha/Hold.pm @@ -24,8 +24,10 @@ use Carp; use Data::Dumper qw(Dumper); use C4::Context qw(preference); +use C4::Letters; use C4::Log; +use Koha::AuthorisedValues; use Koha::DateUtils qw(dt_from_string output_pref); use Koha::Patrons; use Koha::Biblios; @@ -365,6 +367,37 @@ sub cancel { sub { $self->cancellationdate( dt_from_string->strftime( '%Y-%m-%d %H:%M:%S' ) ); $self->priority(0); + $self->cancellation_reason( $params->{cancellation_reason} ); + $self->store(); + + if ( $params->{cancellation_reason} ) { + my $letter = C4::Letters::GetPreparedLetter( + module => 'reserves', + letter_code => 'HOLD_CANCELLATION', + message_transport_type => 'email', + branchcode => $self->borrower->branchcode, + lang => $self->borrower->lang, + tables => { + branches => $self->borrower->branchcode, + borrowers => $self->borrowernumber, + items => $self->itemnumber, + biblio => $self->biblionumber, + biblioitems => $self->biblionumber, + reserves => $self->unblessed, + } + ); + + if ($letter) { + C4::Letters::EnqueueLetter( + { + letter => $letter, + borrowernumber => $self->borrowernumber, + message_transport_type => 'email', + } + ); + } + } + $self->_move_to_old; $self->SUPER::delete(); # Do not add a DELETE log --- a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc @@ -1,4 +1,6 @@ [% USE Koha %] +[% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %] +[% USE AuthorisedValues %] [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %] @@ -31,10 +33,10 @@ [% IF Koha.Preference('HoldsSplitQueue') == "nothing" && !hold.found %] - [% ELSE %] - - + + + [% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %] + [% IF hold_cancellation %] + + [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -839,6 +839,16 @@
+ + [% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %] + [% IF hold_cancellation %] + + [% END %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -909,6 +909,23 @@ [% END # /IF biblioloo.reserveloop %] [% END # FOREACH biblioloo %] +
+ [% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %] + [% IF hold_cancellation %] + + + [% END %] +
+ +
+ +
+ [% END # IF reserveloop %] [% END # UNLESS patron %] --- a/reserve/modrequest.pl +++ a/reserve/modrequest.pl @@ -71,6 +71,7 @@ else { for (my $i=0;$i<$count;$i++){ undef $itemnumber[$i] if !$itemnumber[$i]; my $suspend_until = $query->param( "suspend_until_" . $reserve_id[$i] ); + my $cancellation_reason = $query->param("cancellation-reason"); my $params = { rank => $rank[$i], reserve_id => $reserve_id[$i], @@ -78,6 +79,7 @@ else { branchcode => $branch[$i], itemnumber => $itemnumber[$i], defined $suspend_until ? ( suspend_until => $suspend_until ) : (), + cancellation_reason => $cancellation_reason, }; if (C4::Context->preference('AllowHoldDateInFuture')) { $params->{reservedate} = $reservedates[$i] ? dt_from_string($reservedates[$i]) : undef; --