=cut
sub parseletter {
- my ( $letter, $table, $pk ) = @_;
+ my ( $letter, $table, $pk, $pk2 ) = @_;
# warn "Parseletter : ($letter,$table,$pk)";
my $dbh = C4::Context->dbh;
my $sth;
if ( $table eq 'biblio' ) {
$sth = $dbh->prepare("select * from biblio where biblionumber=?");
- }
- elsif ( $table eq 'biblioitems' ) {
+ } elsif ( $table eq 'biblioitems' ) {
$sth = $dbh->prepare("select * from biblioitems where biblionumber=?");
- }
- elsif ( $table eq 'borrowers' ) {
+ } elsif ( $table eq 'items' ) {
+ $sth = $dbh->prepare("select * from items where itemnumber=?");
+ } elsif ( $table eq 'reserves' ) {
+ $sth = $dbh->prepare("select * from reserves where borrowernumber = ? and biblionumber=?");
+ } elsif ( $table eq 'borrowers' ) {
$sth = $dbh->prepare("select * from borrowers where borrowernumber=?");
- }
- elsif ( $table eq 'branches' ) {
+ } elsif ( $table eq 'branches' ) {
$sth = $dbh->prepare("select * from branches where branchcode=?");
- }
- elsif ( $table eq 'aqbooksellers' ) {
+ } elsif ( $table eq 'aqbooksellers' ) {
$sth = $dbh->prepare("select * from aqbooksellers where id=?");
}
- $sth->execute($pk);
+
+ if ( $pk2 ) {
+ $sth->execute($pk, $pk2);
+ } else {
+ $sth->execute($pk);
+ }
# store the result in an hash
my $values = $sth->fetchrow_hashref;
my $replacefield = "<<$table.$field>>";
my $replacedby = $values->{$field};
- # warn "REPLACE $replacefield by $replacedby";
$letter->{title} =~ s/$replacefield/$replacedby/g;
$letter->{content} =~ s/$replacefield/$replacedby/g;
}
my $message = shift;
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'},
# 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;
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");
$sth = $dbh->prepare($query);
$sth->execute( $itemnumber, $borrowernumber,$biblionumber);
$sth->finish;
+
+ _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo );
+
return;
}
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
<!--TMPL_ELSE-->
<option value="members">Members</option>
<!--/TMPL_IF-->
+ <!--TMPL_IF Name="reserves"-->
+ <option value="reserves" selected="selected">Holds</option>
+ <!--TMPL_ELSE-->
+ <option value="reserves">Holds</option>
+ <!--/TMPL_IF-->
</select>
</li>
<li>
<!--TMPL_ELSE-->
<option value="members">Members</option>
<!--/TMPL_IF-->
+ <!--TMPL_IF Name="reserves"-->
+ <option value="reserves" selected="selected">Holds</option>
+ <!--TMPL_ELSE-->
+ <option value="reserves">Holds</option>
+ <!--/TMPL_IF-->
</select>
</li>
<li>
return $sth->fetchall_arrayref({});
}
+# FIXME untranslateable
our %column_map = (
aqbooksellers => 'BOOKSELLERS',
aqorders => 'ORDERS',
serial => 'SERIALS',
+ reserves => 'HOLDS',
);
sub column_picks ($) {
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
}