From 7445855e879fd9f9febbaa02aab1e59b07526a01 Mon Sep 17 00:00:00 2001 From: Jesse Weaver Date: Fri, 5 Dec 2008 15:11:13 -0600 Subject: [PATCH] bug 2848 [1/2]: Send notifications to patrons when hold is received This adds notification code to Reserves.pm to send notifications through email or SMS to patrons when their hold is filled. It does not send the letter directly, but instead uses EnqueueLetter. Also, it relies on EnhancedPatronMessaging being on and the hold notification being turned on for the specific patron through the 'Messaging' tab. Signed-off-by: Galen Charlton --- C4/Letters.pm | 2 + C4/Members/Messaging.pm | 1 + C4/Reserves.pm | 76 +++++++++++++++++++ .../prog/en/modules/tools/letter.tmpl | 10 +++ tools/letter.pl | 10 ++- 5 files changed, 98 insertions(+), 1 deletion(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index b30b5095c2..6df8fb09ca 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -762,6 +762,8 @@ sub _send_message_by_email ($) { my $message = shift or return undef; my $member = C4::Members::GetMember( $message->{'borrowernumber'} ); + return unless $message->{'to_address'} or $member->{'email'}; + my $content = encode('utf8', $message->{'content'}); my %sendmail_params = ( To => $message->{'to_address'} || $member->{'email'}, diff --git a/C4/Members/Messaging.pm b/C4/Members/Messaging.pm index 4ca03b5bfb..cbcfdd1583 100644 --- a/C4/Members/Messaging.pm +++ b/C4/Members/Messaging.pm @@ -91,6 +91,7 @@ END_SQL # warn( Data::Dumper->Dump( [ $row ], [ 'row' ] ) ); $return->{'days_in_advance'} = $row->{'days_in_advance'} if defined $row->{'days_in_advance'}; $return->{'wants_digest'} = $row->{'wants_digest'} if defined $row->{'wants_digest'}; + $return->{'letter_code'} = $row->{'letter_code'}; $transports{$row->{'message_transport_type'}} = 1; } @{$return->{'transports'}} = keys %transports; diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 31ba6cb330..76de3ac9c8 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -31,6 +31,13 @@ use C4::Search; use C4::Circulation; use C4::Accounts; +# for _koha_notify_reserve +use C4::Members::Messaging; +use C4::Members qw( GetMember ); +use C4::Letters; +use C4::Branch qw( GetBranchDetail ); +use List::MoreUtils qw( firstidx ); + use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); my $library_name = C4::Context->preference("LibraryName"); @@ -992,6 +999,9 @@ sub ModReserveAffect { $sth = $dbh->prepare($query); $sth->execute( $itemnumber, $borrowernumber,$biblionumber); $sth->finish; + + _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo ); + return; } @@ -1355,6 +1365,72 @@ sub _Findgroupreserve { return @results; } +=item _koha_notify_reserve + +=over 4 + +_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ); + +=back + +Sends a notification to the patron that their hold has been filled (through +ModReserveAffect, _not_ ModReserveFill) + +=cut + +sub _koha_notify_reserve { + my ($itemnumber, $borrowernumber, $biblionumber) = @_; + + my $dbh = C4::Context->dbh; + my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, message_name => 'Hold Filled' } ); + + return if ( !defined( $messagingprefs->{'letter_code'} ) ); + + my $sth = $dbh->prepare(" + SELECT * + FROM reserves + WHERE borrowernumber = ? + AND biblionumber = ? + "); + $sth->execute( $borrowernumber, $biblionumber ); + my $reserve = $sth->fetchrow_hashref; + my $branch_details = GetBranchDetail( $reserve->{'branchcode'} ); + + my $admin_email_address = $branch_details->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress'); + + my $letter = getletter( 'reserves', $messagingprefs->{'letter_code'} ); + + C4::Letters::parseletter( $letter, 'branches', $reserve->{'branchcode'} ); + C4::Letters::parseletter( $letter, 'borrowers', $reserve->{'borrowernumber'} ); + C4::Letters::parseletter( $letter, 'biblio', $reserve->{'biblionumber'} ); + C4::Letters::parseletter( $letter, 'reserves', $reserve->{'borrowernumber'}, $reserve->{'biblionumber'} ); + + if ( $reserve->{'itemnumber'} ) { + C4::Letters::parseletter( $letter, 'items', $reserve->{'itemnumber'} ); + } + $letter->{'content'} =~ s/<<[a-z0-9_]+\.[a-z0-9]+>>//g; #remove any stragglers + + if ( -1 != firstidx { $_ eq 'email' } @{$messagingprefs->{transports}} ) { + # aka, 'email' in ->{'transports'} + C4::Letters::EnqueueLetter( + { letter => $letter, + borrowernumber => $borrowernumber, + message_transport_type => 'email', + from_address => $admin_email_address, + } + ); + } + + if ( -1 != firstidx { $_ eq 'sms' } @{$messagingprefs->{transports}} ) { + C4::Letters::EnqueueLetter( + { letter => $letter, + borrowernumber => $borrowernumber, + message_transport_type => 'sms', + } + ); + } +} + =back =head1 AUTHOR diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tmpl index e2e9032f09..f61604fd46 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tmpl @@ -213,6 +213,11 @@ $(document).ready(function() { + + + + +
  • @@ -254,6 +259,11 @@ $(document).ready(function() { + + + + +
  • diff --git a/tools/letter.pl b/tools/letter.pl index 5fa48122e3..14a4fc5efb 100755 --- a/tools/letter.pl +++ b/tools/letter.pl @@ -54,10 +54,12 @@ sub StringSearch { return $sth->fetchall_arrayref({}); } +# FIXME untranslateable our %column_map = ( aqbooksellers => 'BOOKSELLERS', aqorders => 'ORDERS', serial => 'SERIALS', + reserves => 'HOLDS', ); sub column_picks ($) { @@ -151,7 +153,13 @@ if ( $op eq 'add_form' ) { push @SQLfieldname, column_picks('branches'); # add acquisition specific tables - if ( index( $module, "acquisition" ) > 0 ) { # FIXME: imprecise comparison + if ( $module eq "reserves" ) { + push @SQLfieldname, column_picks('borrowers'), + column_picks('reserves'), + column_picks('biblio'), + column_picks('items'); + } + elsif ( index( $module, "acquisition" ) > 0 ) { # FIXME: imprecise comparison push @SQLfieldname, column_picks('aqbooksellers'), column_picks('aqorders'); # add issues specific tables } -- 2.39.5