# Copyright 2000-2002 Katipo Communications
# 2006 SAN Ouest Provence
# 2007-2010 BibLibre Paul POULAIN
+# 2011 Catalyst IT
#
# This file is part of Koha.
#
use C4::Biblio;
use C4::Members;
use C4::Items;
-use C4::Search;
use C4::Circulation;
use C4::Accounts;
BEGIN {
# set the version for version checking
$VERSION = 3.01;
- require Exporter;
+ require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(
&AddReserve
&AlterPriority
&ToggleLowestPriority
);
+ @EXPORT_OK = qw( MergeHolds );
}
=head2 AddReserve
sub CanBookBeReserved{
my ($borrowernumber, $biblionumber) = @_;
- my @items = GetItemsInfo($biblionumber);
+ my @items = get_itemnumbers_of($biblionumber);
+ #get items linked via host records
+ my @hostitems = get_hostitemnumbers_of($biblionumber);
+ if (@hostitems){
+ push (@items,@hostitems);
+ }
+
foreach my $item (@items){
- return 1 if CanItemBeReserved($borrowernumber, $item->{itemnumber});
+ return 1 if CanItemBeReserved($borrowernumber, $item);
}
return 0;
}
my ( $item, $barcode ) = @_;
my $dbh = C4::Context->dbh;
my $sth;
- my $select = "
- SELECT items.biblionumber,
+ my $select;
+ if (C4::Context->preference('item-level_itypes')){
+ $select = "
+ SELECT items.biblionumber,
items.biblioitemnumber,
itemtypes.notforloan,
items.notforloan AS itemnotforloan,
items.itemnumber
- FROM items
- LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
- LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype
- ";
-
+ FROM items
+ LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
+ LEFT JOIN itemtypes ON items.itype = itemtypes.itemtype
+ ";
+ }
+ else {
+ $select = "
+ SELECT items.biblionumber,
+ items.biblioitemnumber,
+ itemtypes.notforloan,
+ items.notforloan AS itemnotforloan,
+ items.itemnumber
+ FROM items
+ LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
+ LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype
+ ";
+ }
+
if ($item) {
$sth = $dbh->prepare("$select WHERE itemnumber = ?");
$sth->execute($item);
} else {
# See if this item is more important than what we've got so far
if ( $res->{'priority'} && $res->{'priority'} < $priority ) {
- my $borrowerinfo=C4::Members::GetMemberDetails($res->{'borrowernumber'});
+ my $borrowerinfo=C4::Members::GetMember(borrowernumber => $res->{'borrowernumber'});
my $iteminfo=C4::Items::GetItem($itemnumber);
my $branch=C4::Circulation::_GetCircControlBranch($iteminfo,$borrowerinfo);
my $branchitemrule = C4::Circulation::GetBranchItemRule($branch,$iteminfo->{'itype'});
my $dbh = C4::Context->dbh;
my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
+
+ # Try to get the borrower's email address
+ my $to_address;
+ my $which_address = C4::Context->preference('AutoEmailPrimaryAddress');
+ # If the system preference is set to 'first valid' (value == OFF), look up email address
+ if ($which_address eq 'OFF') {
+ $to_address = C4::Members::GetFirstValidEmailAddress( $borrowernumber );
+ } else {
+ $to_address = $borrower->{$which_address};
+ }
+
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' } );
+ if ( $to_address || $borrower->{'smsalertnumber'} ) {
+ $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, message_name => 'Hold_Filled' } );
return if ( !defined( $messagingprefs->{'letter_code'} ) );
$letter_code = $messagingprefs->{'letter_code'};
return $new_priority; # so the caller knows what priority they wind up receiving
}
+=head2 MergeHolds
+
+ MergeHolds($dbh,$to_biblio, $from_biblio);
+
+This shifts the holds from C<$from_biblio> to C<$to_biblio> and reorders them by the date they were placed
+
+=cut
+
+sub MergeHolds {
+ my ( $dbh, $to_biblio, $from_biblio ) = @_;
+ my $sth = $dbh->prepare(
+ "SELECT count(*) as reservenumber FROM reserves WHERE biblionumber = ?"
+ );
+ $sth->execute($from_biblio);
+ if ( my $data = $sth->fetchrow_hashref() ) {
+
+ # holds exist on old record, if not we don't need to do anything
+ $sth = $dbh->prepare(
+ "UPDATE reserves SET biblionumber = ? WHERE biblionumber = ?");
+ $sth->execute( $to_biblio, $from_biblio );
+
+ # Reorder by date
+ # don't reorder those already waiting
+
+ $sth = $dbh->prepare(
+"SELECT * FROM reserves WHERE biblionumber = ? AND (found <> ? AND found <> ? OR found is NULL) ORDER BY reservedate ASC"
+ );
+ my $upd_sth = $dbh->prepare(
+"UPDATE reserves SET priority = ? WHERE biblionumber = ? AND borrowernumber = ?
+ AND reservedate = ? AND constrainttype = ? AND (itemnumber = ? or itemnumber is NULL) "
+ );
+ $sth->execute( $to_biblio, 'W', 'T' );
+ my $priority = 1;
+ while ( my $reserve = $sth->fetchrow_hashref() ) {
+ $upd_sth->execute(
+ $priority, $to_biblio,
+ $reserve->{'borrowernumber'}, $reserve->{'reservedate'},
+ $reserve->{'constrainttype'}, $reserve->{'itemnumber'}
+ );
+ $priority++;
+ }
+ }
+}
+
+
=head1 AUTHOR
Koha Development Team <http://koha-community.org/>