# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA 02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use strict;
# use warnings; # FIXME: someday
use C4::Context;
use C4::Biblio;
+use C4::Members;
use C4::Items;
use C4::Search;
use C4::Circulation;
# for _koha_notify_reserve
use C4::Members::Messaging;
-use C4::Members qw( GetMember );
+use C4::Members qw();
use C4::Letters;
use C4::Branch qw( GetBranchDetail );
use C4::Dates qw( format_date_in_iso );
&CanBookBeReserved
&CanItemBeReserved
&CancelReserve
+ &CancelExpiredReserves
&IsAvailableForItemLevelRequest
$found, $waitingdate, $expdate
);
+ # Send e-mail to librarian if syspref is active
+ if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){
+ my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
+ my $biblio = GetBiblioData($biblionumber);
+ my $letter = C4::Letters::getletter( 'reserves', 'HOLDPLACED');
+ my $admin_email_address = C4::Context->preference('KohaAdminEmailAddress');
+
+ my %keys = (%$borrower, %$biblio);
+ foreach my $key (keys %keys) {
+ my $replacefield = "<<$key>>";
+ $letter->{content} =~ s/$replacefield/$keys{$key}/g;
+ $letter->{title} =~ s/$replacefield/$keys{$key}/g;
+ }
+
+ C4::Letters::EnqueueLetter(
+ { letter => $letter,
+ borrowernumber => $borrowernumber,
+ message_transport_type => 'email',
+ from_address => $admin_email_address,
+ to_address => $admin_email_address,
+ }
+ );
+
+
+ }
+
+
#}
($const eq "o" || $const eq "e") or return; # FIXME: why not have a useful return value?
$query = qq/
foreach (@$bibitems) {
$sth->execute($borrowernumber, $biblionumber, $resdate, $_);
}
+
return; # FIXME: why not have a useful return value?
}
sub CancelExpiredReserves {
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare( "SELECT * FROM reserves WHERE DATE(expirationdate) < DATE( CURDATE() ) AND expirationdate != '0000-00-00'" );
- $sth->execute();
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( "
+ SELECT * FROM reserves WHERE DATE(expirationdate) < DATE( CURDATE() )
+ AND expirationdate IS NOT NULL
+ " );
+ $sth->execute();
- while ( my $res = $sth->fetchrow_hashref() ) {
- CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} );
- }
+ while ( my $res = $sth->fetchrow_hashref() ) {
+ CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} );
+ }
}
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 $borrower = C4::Members::GetMember( $borrowernumber );
+ my $letter_code;
+ my $print_mode = 0;
+ my $messagingprefs;
+ if ( $borrower->{'email'} || $borrower->{'smsalertnumber'} ) {
+ $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, message_name => 'Hold Filled' } );
+
+ return if ( !defined( $messagingprefs->{'letter_code'} ) );
+ $letter_code = $messagingprefs->{'letter_code'};
+ } else {
+ $letter_code = 'HOLD_PRINT';
+ $print_mode = 1;
+ }
my $sth = $dbh->prepare("
SELECT *
my $admin_email_address = $branch_details->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress');
- my $letter = getletter( 'reserves', $messagingprefs->{'letter_code'} );
+ my $letter = getletter( 'reserves', $letter_code );
+ die "Could not find a letter called '$letter_code' in the 'reserves' module" unless( $letter );
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'} );
+ C4::Letters::parseletter( $letter, 'borrowers', $borrowernumber );
+ C4::Letters::parseletter( $letter, 'biblio', $biblionumber );
+ C4::Letters::parseletter( $letter, 'reserves', $borrowernumber, $biblionumber );
if ( $reserve->{'itemnumber'} ) {
C4::Letters::parseletter( $letter, 'items', $reserve->{'itemnumber'} );
}
+ my $today = C4::Dates->new()->output();
+ $letter->{'title'} =~ s/<<today>>/$today/g;
+ $letter->{'content'} =~ s/<<today>>/$today/g;
$letter->{'content'} =~ s/<<[a-z0-9_]+\.[a-z0-9]+>>//g; #remove any stragglers
- if ( -1 != firstidx { $_ eq 'email' } @{$messagingprefs->{transports}} ) {
+ if ( $print_mode ) {
+ C4::Letters::EnqueueLetter( {
+ letter => $letter,
+ borrowernumber => $borrowernumber,
+ message_transport_type => 'print',
+ } );
+
+ return;
+ }
+
+ if ( grep { $_ eq 'email' } @{$messagingprefs->{transports}} ) {
# aka, 'email' in ->{'transports'}
C4::Letters::EnqueueLetter(
{ letter => $letter,
);
}
- if ( -1 != firstidx { $_ eq 'sms' } @{$messagingprefs->{transports}} ) {
+ if ( grep { $_ eq 'sms' } @{$messagingprefs->{transports}} ) {
C4::Letters::EnqueueLetter(
{ letter => $letter,
borrowernumber => $borrowernumber,