-# -*- tab-width: 8 -*-
-# NOTE: This file uses standard 8-character tabs
-
package C4::Reserves;
# Copyright 2000-2002 Katipo Communications
use strict;
+# use warnings; # FIXME: someday
use C4::Context;
use C4::Biblio;
+use C4::Members;
use C4::Items;
use C4::Search;
use C4::Circulation;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-my $library_name = C4::Context->preference("LibraryName");
-
=head1 NAME
C4::Reserves - Koha functions for dealing with reservation.
$found, $waitingdate
);
+ # Send e-mail to librarian if syspref is active
+ if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){
+ my $borrower = GetMemberDetails($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?
}
=item GetReservesFromBiblionumber
-@borrowerreserv=&GetReserves($biblionumber,$itemnumber,$borrowernumber);
+($count, $title_reserves) = &GetReserves($biblionumber);
-this function get the list of reservation for an C<$biblionumber>, C<$itemnumber> or C<$borrowernumber>
-given on input arg.
-Only 1 argument has to be passed.
+This function gets the list of reservations for one C<$biblionumber>, returning a count
+of the reserves and an arrayref pointing to the reserves for C<$biblionumber>.
=cut
sub GetReservesFromBiblionumber {
- my ( $biblionumber, $itemnumber, $borrowernumber ) = @_;
+ my ($biblionumber) = shift or return (0, []);
my $dbh = C4::Context->dbh;
# Find the desired items in the reserves
AND reservedate = ?
';
my $csth = $dbh->prepare($query);
- $csth->execute( $data->{biblionumber}, $data->{borrowernumber},
- $data->{reservedate}, );
-
+ $csth->execute($data->{biblionumber}, $data->{borrowernumber}, $data->{reservedate});
my @bibitemno;
while ( my $bibitemnos = $csth->fetchrow_array ) {
push( @bibitemno, $bibitemnos ); # FIXME: inefficient: use fetchall_arrayref
# reserved by same person on same day
my $bdata;
if ( $count > 1 ) {
- $bdata = GetBiblioItemData( $bibitemno[$i] );
- $i++;
+ $bdata = GetBiblioItemData( $bibitemno[$i] ); # FIXME: This doesn't make sense.
+ $i++; # $i can increase each pass, but the next @bibitemno might be smaller?
}
else {
# Look up the book we just found.
my ( $bibitem, $biblio, $itemnumber ) = @_;
my $dbh = C4::Context->dbh;
- # TODO: consolidate at least the SELECT portion of the first 2 queries to a common $select var.
# check for exact targetted match
+ # This select is valid for both item_level and biblio_level
my $item_level_target_query = qq/
- SELECT reserves.biblionumber AS biblionumber,
- reserves.borrowernumber AS borrowernumber,
- reserves.reservedate AS reservedate,
- reserves.branchcode AS branchcode,
- reserves.cancellationdate AS cancellationdate,
- reserves.found AS found,
- reserves.reservenotes AS reservenotes,
- reserves.priority AS priority,
- reserves.timestamp AS timestamp,
- biblioitems.biblioitemnumber AS biblioitemnumber,
- reserves.itemnumber AS itemnumber
- FROM reserves
- JOIN biblioitems USING (biblionumber)
- JOIN hold_fill_targets USING (biblionumber, borrowernumber, itemnumber)
- WHERE found IS NULL
- AND priority > 0
- AND item_level_request = 1
- AND itemnumber = ?
- /;
- my $sth = $dbh->prepare($item_level_target_query);
- $sth->execute($itemnumber);
- my @results;
- if ( my $data = $sth->fetchrow_hashref ) {
- push( @results, $data );
- }
- return @results if @results;
-
- # check for title-level targetted match
- my $title_level_target_query = qq/
SELECT reserves.biblionumber AS biblionumber,
reserves.borrowernumber AS borrowernumber,
reserves.reservedate AS reservedate,
JOIN hold_fill_targets USING (biblionumber, borrowernumber)
WHERE found IS NULL
AND priority > 0
- AND item_level_request = 0
- AND hold_fill_targets.itemnumber = ?
+ AND holds_fill_targets.itemnumber = ?
+
/;
- $sth = $dbh->prepare($title_level_target_query);
+ my $sth = $dbh->prepare($item_level_target_query);
$sth->execute($itemnumber);
- @results = ();
- if ( my $data = $sth->fetchrow_hashref ) {
- push( @results, $data );
- }
- return @results if @results;
+ my $data = $sth->fetchall_arrayref({});
+ return @$data if ($data);
my $query = qq/
SELECT reserves.biblionumber AS biblionumber,
/;
$sth = $dbh->prepare($query);
$sth->execute( $biblio, $bibitem, $itemnumber );
- @results = ();
- while ( my $data = $sth->fetchrow_hashref ) {
- push( @results, $data );
- }
- return @results;
+ $data = $sth->fetchall_arrayref({});
+ return @$data if ($data);
+ return undef;
}
=item _koha_notify_reserve