package C4::ILSDI::Utility; # Copyright 2009 SARL Biblibre # # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # Koha is distributed in the hope that it will be useful, but WITHOUT ANY # 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., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; use warnings; use C4::Members; use C4::Items; use C4::Circulation; use C4::Biblio; use C4::Reserves; use C4::Context; use C4::Branch qw/GetBranchName/; use Digest::MD5 qw(md5_base64); use vars qw($VERSION @ISA @EXPORT); BEGIN { # set the version for version checking $VERSION = 3.00; require Exporter; @ISA = qw(Exporter); @EXPORT = qw( &BorrowerExists &CanBookBeReserved &Availability ); } =head1 NAME C4::ILS-DI::Utility - ILS-DI Utilities =cut =head2 BorrowerExists Checks, for a given userid and password, if the borrower exists. if ( BorrowerExists($userid, $password) ) { # Do stuff } =cut sub BorrowerExists { my ( $userid, $password ) = @_; $password = md5_base64($password); my $dbh = C4::Context->dbh; my $sth = $dbh->prepare("SELECT COUNT(*) FROM borrowers WHERE userid =? and password=? "); $sth->execute( $userid, $password ); return $sth->fetchrow; } =head2 CanBookBeReserved Checks if a book (at bibliographic level) can be reserved by a borrower. if ( CanBookBeReserved($borrower, $biblionumber) ) { # Do stuff } =cut sub CanBookBeReserved { my ( $borrower, $biblionumber ) = @_; my $MAXIMUM_NUMBER_OF_RESERVES = C4::Context->preference("maxreserves"); my $MAXOUTSTANDING = C4::Context->preference("maxoutstanding"); my $out = 1; if ( $borrower->{'amountoutstanding'} > $MAXOUTSTANDING ) { $out = undef; } if ( $borrower->{gonenoaddress} eq 1 ) { $out = undef; } if ( $borrower->{lost} eq 1 ) { $out = undef; } if ( $borrower->{debarred} eq 1 ) { $out = undef; } my @reserves = GetReservesFromBorrowernumber( $borrower->{'borrowernumber'} ); if ( $MAXIMUM_NUMBER_OF_RESERVES && scalar(@reserves) >= $MAXIMUM_NUMBER_OF_RESERVES ) { $out = undef; } foreach my $res (@reserves) { if ( $res->{'biblionumber'} == $biblionumber ) { $out = undef; } } my $issues = GetPendingIssues( $borrower->{'borrowernumber'} ); foreach my $issue (@$issues) { if ( $issue->{'biblionumber'} == $biblionumber ) { $out = undef; } } return $out; } =head2 Availability Returns, for an itemnumber, an array containing availability information. my ($biblionumber, $status, $msg, $location) = Availability($id); =cut sub Availability { my ($itemnumber) = @_; my $item = GetItem( $itemnumber, undef, undef ); if ( not $item->{'itemnumber'} ) { return ( undef, 'unknown', 'Error: could not retrieve availability for this ID', undef ); } my $biblionumber = $item->{'biblioitemnumber'}; my $location = GetBranchName( $item->{'holdingbranch'} ); if ( $item->{'notforloan'} ) { return ( $biblionumber, 'not available', 'Not for loan', $location ); } elsif ( $item->{'onloan'} ) { return ( $biblionumber, 'not available', 'Checked out', $location ); } elsif ( $item->{'itemlost'} ) { return ( $biblionumber, 'not available', 'Item lost', $location ); } elsif ( $item->{'wthdrawn'} ) { return ( $biblionumber, 'not available', 'Item withdrawn', $location ); } elsif ( $item->{'damaged'} ) { return ( $biblionumber, 'not available', 'Item damaged', $location ); } else { return ( $biblionumber, 'available', undef, $location ); } die Data::Dumper::Dumper($item); } 1;