Koha/C4/Acquisitions.pm

1464 lines
40 KiB
Perl

package C4::Acquisitions; #assumes C4/Acquisitions.pm
# Copyright 2000-2002 Katipo Communications
#
# 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., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
use strict;
require Exporter;
use C4::Database;
#use C4::Biblio;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
# set the version for version checking
$VERSION = 0.01;
@ISA = qw(Exporter);
@EXPORT = qw(&getorders &bookseller &breakdown &basket &newbasket &bookfunds
&ordersearch &newbiblio &newbiblioitem &newsubject &newsubtitle &neworder
&newordernum &modbiblio &modorder &getsingleorder &invoice &receiveorder
&bookfundbreakdown &curconvert &updatesup &insertsup &newitems &modbibitem
&getcurrencies &modsubtitle &modsubject &modaddauthor &moditem &countitems
&findall &needsmod &delitem &deletebiblioitem &delbiblio &delorder &branches
&getallorders &getrecorders &updatecurrencies &getorder &getcurrency &updaterecorder
&updatecost &checkitems &modnote &getitemtypes &getbiblio
&getbiblioitembybiblionumber
&getbiblioitem &getitemsbybiblioitem &isbnsearch
&websitesearch &addwebsite &updatewebsite &deletewebsite);
%EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
# your exported package globals go here,
# as well as any optionally exported functions
@EXPORT_OK = qw($Var1 %Hashit);
# non-exported package globals go here
use vars qw(@more $stuff);
# initalize package globals, first exported ones
my $Var1 = '';
my %Hashit = ();
# then the others (which are still accessible as $Some::Module::stuff)
my $stuff = '';
my @more = ();
# all file-scoped lexicals must be created before
# the functions below that use them.
# file-private lexicals go here
my $priv_var = '';
my %secret_hash = ();
# here's a file-private function as a closure,
# callable as &$priv_func; it cannot be prototyped.
my $priv_func = sub {
# stuff goes here.
};
# make all your functions, whether exported or not;
sub getorders {
my ($supplierid)=@_;
my $dbh=C4Connect;
my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where
booksellerid='$supplierid' and (quantity > quantityreceived or
quantityreceived is NULL)
and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
$query.=" group by basketno order by entrydate desc";
#print $query;
my $sth=$dbh->prepare($query);
$sth->execute;
my @results;
my $i=0;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return ($i,\@results);
}
sub itemcount{
my ($biblio)=@_;
my $dbh=C4Connect;
my $query="Select count(*) from items where biblionumber=$biblio";
# print $query;
my $sth=$dbh->prepare($query);
$sth->execute;
my $data=$sth->fetchrow_hashref;
$sth->finish;
$dbh->disconnect;
return($data->{'count(*)'});
}
sub getorder{
my ($bi,$bib)=@_;
my $dbh=C4Connect;
my $query="Select ordernumber
from aqorders
where biblionumber=? and biblioitemnumber=?";
my $sth=$dbh->prepare($query);
$sth->execute($bib,$bi);
my $ordnum=$sth->fetchrow_hashref;
$sth->finish;
my $order=getsingleorder($ordnum->{'ordernumber'});
$dbh->disconnect;
# print $query;
return ($order,$ordnum->{'ordernumber'});
}
sub getsingleorder {
my ($ordnum)=@_;
my $dbh=C4Connect;
my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown
where aqorders.ordernumber=?
and biblio.biblionumber=aqorders.biblionumber and
biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
aqorders.ordernumber=aqorderbreakdown.ordernumber";
my $sth=$dbh->prepare($query);
$sth->execute($ordnum);
my $data=$sth->fetchrow_hashref;
$sth->finish;
$dbh->disconnect;
return($data);
}
sub invoice {
my ($invoice)=@_;
my $dbh=C4Connect;
my $query="Select * from aqorders,biblio,biblioitems where
booksellerinvoicenumber='$invoice'
and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
my $i=0;
my @results;
my $sth=$dbh->prepare($query);
$sth->execute;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,@results);
}
sub getallorders {
#gets all orders from a certain supplier, orders them alphabetically
my ($supid)=@_;
my $dbh=C4Connect;
my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
and (cancelledby is NULL or cancelledby = '')
and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
aqorders.biblioitemnumber
group by aqorders.biblioitemnumber
order by
biblio.title";
my $i=0;
my @results;
my $sth=$dbh->prepare($query);
$sth->execute;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,@results);
}
sub getrecorders {
#gets all orders from a certain supplier, orders them alphabetically
my ($supid)=@_;
my $dbh=C4Connect;
my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
and (cancelledby is NULL or cancelledby = '')
and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
aqorders.biblioitemnumber and
aqorders.quantityreceived>0
and aqorders.datereceived >=now()
group by aqorders.biblioitemnumber
order by
biblio.title";
my $i=0;
my @results;
my $sth=$dbh->prepare($query);
$sth->execute;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,@results);
}
sub ordersearch {
my ($search,$biblio,$catview)=@_;
my $dbh=C4Connect;
my $query="Select *,biblio.title from aqorders,biblioitems,biblio
where aqorders.biblioitemnumber = biblioitems.biblioitemnumber
and biblio.biblionumber=aqorders.biblionumber
and ((datecancellationprinted is NULL)
or (datecancellationprinted = '0000-00-00'))
and ((";
my @data=split(' ',$search);
my $count=@data;
for (my $i=0;$i<$count;$i++){
$query.= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
}
$query=~ s/ and $//;
$query.=" ) or biblioitems.isbn='$search'
or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
if ($catview ne 'yes'){
$query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
}
$query.=" group by aqorders.ordernumber";
my $sth=$dbh->prepare($query);
# print $query;
$sth->execute;
my $i=0;
my @results;
while (my $data=$sth->fetchrow_hashref){
my $sth2=$dbh->prepare("Select * from biblio where
biblionumber='$data->{'biblionumber'}'");
$sth2->execute;
my $data2=$sth2->fetchrow_hashref;
$sth2->finish;
$data->{'author'}=$data2->{'author'};
$data->{'seriestitle'}=$data2->{'seriestitle'};
$sth2=$dbh->prepare("Select * from aqorderbreakdown where
ordernumber=$data->{'ordernumber'}");
$sth2->execute;
$data2=$sth2->fetchrow_hashref;
$sth2->finish;
$data->{'branchcode'}=$data2->{'branchcode'};
$data->{'bookfundid'}=$data2->{'bookfundid'};
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,@results);
}
sub bookseller {
my ($searchstring)=@_;
my $dbh=C4Connect;
my $query="Select * from aqbooksellers where name like '%$searchstring%' or
id = '$searchstring'";
my $sth=$dbh->prepare($query);
$sth->execute;
my @results;
my $i=0;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,@results);
}
sub breakdown {
my ($id)=@_;
my $dbh=C4Connect;
my $query="Select * from aqorderbreakdown where ordernumber='$id'";
my $sth=$dbh->prepare($query);
$sth->execute;
my @results;
my $i=0;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,\@results);
}
sub basket {
my ($basketno,$supplier)=@_;
my $dbh=C4Connect;
my $query="Select *,biblio.title from aqorders,biblio,biblioitems
where basketno='$basketno'
and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
=aqorders.biblioitemnumber
and (datecancellationprinted is NULL or datecancellationprinted =
'0000-00-00')";
if (defined $supplier && $supplier ne ''){
$query.=" and aqorders.booksellerid='$supplier'";
}
$query.=" group by aqorders.ordernumber";
my $sth=$dbh->prepare($query);
$sth->execute;
my @results;
# print $query;
my $i=0;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,@results);
}
sub newbasket {
my $dbh=C4Connect;
my $query="Select max(basketno) from aqorders";
my $sth=$dbh->prepare($query);
$sth->execute;
my $data=$sth->fetchrow_arrayref;
my $basket=$$data[0];
$basket++;
$sth->finish;
$dbh->disconnect;
return($basket);
}
sub bookfunds {
my $dbh=C4Connect;
my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
=aqbudget.bookfundid
and aqbudget.startdate='2001-07-01'
group by aqbookfund.bookfundid order by bookfundname";
my $sth=$dbh->prepare($query);
$sth->execute;
my @results;
my $i=0;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,@results);
}
sub branches {
my $dbh=C4Connect;
my $query="Select * from branches";
my $sth=$dbh->prepare($query);
my $i=0;
my @results;
$sth->execute;
while (my $data = $sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
} # while
$sth->finish;
$dbh->disconnect;
return($i, @results);
} # sub branches
sub bookfundbreakdown {
my ($id)=@_;
my $dbh=C4Connect;
my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
from aqorders,aqorderbreakdown where bookfundid='$id' and
aqorders.ordernumber=aqorderbreakdown.ordernumber and ((budgetdate >=
'2001-07-01' and budgetdate <'2002-07-01') or
(datereceived >= '2001-07-01' and datereceived < '2002-07-01'))
and (datecancellationprinted is NULL or
datecancellationprinted='0000-00-00')";
my $sth=$dbh->prepare($query);
$sth->execute;
my $comtd=0;
my $spent=0;
while (my $data=$sth->fetchrow_hashref){
if ($data->{'subscription'} == 1){
$spent+=$data->{'quantity'}*$data->{'unitprice'};
} else {
my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
$comtd+=($data->{'ecost'})*$leftover;
$spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
}
}
$sth->finish;
$dbh->disconnect;
return($spent,$comtd);
}
sub newbiblio {
my ($biblio) = @_;
my $dbh = &C4Connect;
my $query = "Select max(biblionumber) from biblio";
my $sth = $dbh->prepare($query);
$sth->execute;
my $data = $sth->fetchrow_arrayref;
my $bibnum = $$data[0] + 1;
my $series = 0;
$biblio->{'title'} = $dbh->quote($biblio->{'title'});
$biblio->{'author'} = $dbh->quote($biblio->{'author'});
$biblio->{'copyright'} = $dbh->quote($biblio->{'copyright'});
$biblio->{'seriestitle'} = $dbh->quote($biblio->{'seriestitle'});
$biblio->{'notes'} = $dbh->quote($biblio->{'notes'});
$biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'});
if ($biblio->{'seriestitle'}) { $series = 1 };
$sth->finish;
$query = "insert into biblio set
biblionumber = $bibnum,
title = $biblio->{'title'},
author = $biblio->{'author'},
copyrightdate = $biblio->{'copyright'},
serial = $series,
seriestitle = $biblio->{'seriestitle'},
notes = $biblio->{'notes'},
abstract = $biblio->{'abstract'}";
$sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
return($bibnum);
}
sub modbiblio {
my ($biblio) = @_;
my $dbh = C4Connect;
my $query;
my $sth;
$biblio->{'title'} = $dbh->quote($biblio->{'title'});
$biblio->{'author'} = $dbh->quote($biblio->{'author'});
$biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'});
$biblio->{'copyrightdate'} = $dbh->quote($biblio->{'copyrightdate'});
$biblio->{'seriestitle'} = $dbh->quote($biblio->{'serirestitle'});
$biblio->{'serial'} = $dbh->quote($biblio->{'serial'});
$biblio->{'unititle'} = $dbh->quote($biblio->{'unititle'});
$biblio->{'notes'} = $dbh->quote($biblio->{'notes'});
$query = "Update biblio set
title = $biblio->{'title'},
author = $biblio->{'author'},
abstract = $biblio->{'abstract'},
copyrightdate = $biblio->{'copyrightdate'},
seriestitle = $biblio->{'seriestitle'},
serial = $biblio->{'serial'},
unititle = $biblio->{'unititle'},
notes = $biblio->{'notes'}
where biblionumber = $biblio->{'biblionumber'}";
$sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
return($biblio->{'biblionumber'});
} # sub modbiblio
sub modsubtitle {
my ($bibnum, $subtitle) = @_;
my $dbh = C4Connect;
my $query = "update bibliosubtitle set
subtitle = '$subtitle'
where biblionumber = $bibnum";
my $sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
} # sub modsubtitle
sub modaddauthor {
my ($bibnum, $author) = @_;
my $dbh = C4Connect;
my $query = "Delete from additionalauthors where biblionumber = $bibnum";
my $sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
if ($author ne '') {
$query = "Insert into additionalauthors set
author = '$author',
biblionumber = '$bibnum'";
$sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
} # if
$dbh->disconnect;
} # sub modaddauthor
sub modsubject {
my ($bibnum, $force, @subject) = @_;
my $dbh = C4Connect;
my $count = @subject;
my $error;
for (my $i = 0; $i < $count; $i++) {
$subject[$i] =~ s/^ //g;
$subject[$i] =~ s/ $//g;
my $query = "select * from catalogueentry
where entrytype = 's'
and catalogueentry = '$subject[$i]'";
my $sth = $dbh->prepare($query);
$sth->execute;
if (my $data = $sth->fetchrow_hashref) {
} else {
if ($force eq $subject[$i]) {
# subject not in aut, chosen to force anway
# so insert into cataloguentry so its in auth file
$query = "Insert into catalogueentry
(entrytype,catalogueentry)
values ('s','$subject[$i]')";
my $sth2 = $dbh->prepare($query);
$sth2->execute;
$sth2->finish;
} else {
$error = "$subject[$i]\n does not exist in the subject authority file";
$query = "Select * from catalogueentry
where entrytype = 's'
and (catalogueentry like '$subject[$i] %'
or catalogueentry like '% $subject[$i] %'
or catalogueentry like '% $subject[$i]')";
my $sth2 = $dbh->prepare($query);
$sth2->execute;
while (my $data = $sth2->fetchrow_hashref) {
$error = $error."<br>$data->{'catalogueentry'}";
} # while
$sth2->finish;
} # else
} # else
$sth->finish;
} # else
if ($error eq '') {
my $query = "Delete from bibliosubject where biblionumber = $bibnum";
my $sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
for (my $i = 0; $i < $count; $i++) {
$sth = $dbh->prepare("Insert into bibliosubject
values ('$subject[$i]', $bibnum)");
$sth->execute;
$sth->finish;
} # for
} # if
$dbh->disconnect;
return($error);
} # sub modsubject
sub modbibitem {
my ($biblioitem) = @_;
my $dbh = C4Connect;
my $query;
$biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'});
$biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'});
$biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'});
$biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'});
$biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
$biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'});
$biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'});
$biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'});
$biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
$biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'});
$biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'});
$biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'});
$biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'});
$biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'});
$query = "Update biblioitems set
itemtype = $biblioitem->{'itemtype'},
url = $biblioitem->{'url'},
isbn = $biblioitem->{'isbn'},
publishercode = $biblioitem->{'publishercode'},
publicationyear = $biblioitem->{'publicationyear'},
classification = $biblioitem->{'classification'},
dewey = $biblioitem->{'dewey'},
subclass = $biblioitem->{'subclass'},
illus = $biblioitem->{'illus'},
pages = $biblioitem->{'pages'},
volumeddesc = $biblioitem->{'volumeddesc'},
notes = $biblioitem->{'notes'},
size = $biblioitem->{'size'},
place = $biblioitem->{'place'}
where biblioitemnumber = $biblioitem->{'biblioitemnumber'}";
$dbh->do($query);
$dbh->disconnect;
} # sub modbibitem
sub modnote {
my ($bibitemnum,$note)=@_;
my $dbh=C4Connect;
my $query="update biblioitems set notes='$note' where
biblioitemnumber='$bibitemnum'";
my $sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub newbiblioitem {
my ($biblioitem) = @_;
my $dbh = C4Connect;
my $query = "Select max(biblioitemnumber) from biblioitems";
my $sth = $dbh->prepare($query);
my $data;
my $bibitemnum;
$biblioitem->{'volume'} = $dbh->quote($biblioitem->{'volume'});
$biblioitem->{'number'} = $dbh->quote($biblioitem->{'number'});
$biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'});
$biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'});
$biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'});
$biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'});
$biblioitem->{'issn'} = $dbh->quote($biblioitem->{'issn'});
$biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'});
$biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'});
$biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
$biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'});
$biblioitem->{'volumedate'} = $dbh->quote($biblioitem->{'volumedate'});
$biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
$biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
$biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'});
$biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'});
$biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'});
$biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'});
$biblioitem->{'lccn'} = $dbh->quote($biblioitem->{'lccn'});
$biblioitem->{'marc'} = $dbh->quote($biblioitem->{'marc'});
$sth->execute;
$data = $sth->fetchrow_arrayref;
$bibitemnum = $$data[0] + 1;
$sth->finish;
$query = "insert into biblioitems set
biblioitemnumber = $bibitemnum,
biblionumber = $biblioitem->{'biblionumber'},
volume = $biblioitem->{'volume'},
number = $biblioitem->{'number'},
classification = $biblioitem->{'classification'},
itemtype = $biblioitem->{'itemtype'},
url = $biblioitem->{'url'},
isbn = $biblioitem->{'isbn'},
issn = $biblioitem->{'issn'},
dewey = $biblioitem->{'dewey'},
subclass = $biblioitem->{'subclass'},
publicationyear = $biblioitem->{'publicationyear'},
publishercode = $biblioitem->{'publishercode'},
volumedate = $biblioitem->{'volumedate'},
volumeddesc = $biblioitem->{'volumeddesc'},
illus = $biblioitem->{'illus'},
pages = $biblioitem->{'pages'},
notes = $biblioitem->{'notes'},
size = $biblioitem->{'size'},
lccn = $biblioitem->{'lccn'},
marc = $biblioitem->{'marc'},
place = $biblioitem->{'place'}";
$sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
return($bibitemnum);
}
sub newsubject {
my ($bibnum)=@_;
my $dbh=C4Connect;
my $query="insert into bibliosubject (biblionumber) values
($bibnum)";
my $sth=$dbh->prepare($query);
# print $query;
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub newsubtitle {
my ($bibnum, $subtitle) = @_;
my $dbh = C4Connect;
$subtitle = $dbh->quote($subtitle);
my $query = "insert into bibliosubtitle set
biblionumber = $bibnum,
subtitle = $subtitle";
my $sth = $dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub neworder {
my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
if ($budget eq 'now'){
$budget="now()";
} else {
$budget="'2001-07-01'";
}
if ($sub eq 'yes'){
$sub=1;
} else {
$sub=0;
}
my $dbh=C4Connect;
my $query="insert into aqorders (biblionumber,title,basketno,
quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
biblioitemnumber,rrp,ecost,gst,unitprice,subscription,booksellerinvoicenumber)
values
($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
'$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst','$cost',
'$sub','$invoice')";
my $sth=$dbh->prepare($query);
# print $query;
$sth->execute;
$sth->finish;
$query="select * from aqorders where
biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
$sth=$dbh->prepare($query);
$sth->execute;
my $data=$sth->fetchrow_hashref;
$sth->finish;
$ordnum=$data->{'ordernumber'};
$query="insert into aqorderbreakdown (ordernumber,bookfundid) values
($ordnum,'$bookfund')";
$sth=$dbh->prepare($query);
# print $query;
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub delorder {
my ($bibnum,$ordnum)=@_;
my $dbh=C4Connect;
my $query="update aqorders set datecancellationprinted=now()
where biblionumber='$bibnum' and
ordernumber='$ordnum'";
my $sth=$dbh->prepare($query);
#print $query;
$sth->execute;
$sth->finish;
my $count=itemcount($bibnum);
if ($count == 0){
delbiblio($bibnum);
}
$dbh->disconnect;
}
sub modorder {
my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
my $dbh=C4Connect;
my $query="update aqorders set title='$title',
quantity='$quantity',listprice='$listprice',basketno='$basketno',
rrp='$rrp',ecost='$ecost',unitprice='$cost',
booksellerinvoicenumber='$invoice'
where
ordernumber=$ordnum and biblionumber=$bibnum";
my $sth=$dbh->prepare($query);
# print $query;
$sth->execute;
$sth->finish;
$query="update aqorderbreakdown set bookfundid=$bookfund where
ordernumber=$ordnum";
$sth=$dbh->prepare($query);
# print $query;
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub newordernum {
my $dbh=C4Connect;
my $query="Select max(ordernumber) from aqorders";
my $sth=$dbh->prepare($query);
$sth->execute;
my $data=$sth->fetchrow_arrayref;
my $ordnum=$$data[0];
$ordnum++;
$sth->finish;
$dbh->disconnect;
return($ordnum);
}
sub receiveorder {
my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
my $dbh=C4Connect;
my $query="update aqorders set quantityreceived='$quantrec',
datereceived=now(),booksellerinvoicenumber='$invoiceno',
biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
rrp='$rrp'
where biblionumber=$biblio and ordernumber=$ordnum
";
# print $query;
my $sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$query="update aqorderbreakdown set bookfundid=$bookfund where
ordernumber=$ordnum";
$sth=$dbh->prepare($query);
# print $query;
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub updaterecorder{
my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
my $dbh=C4Connect;
my $query="update aqorders set
unitprice='$cost', rrp='$rrp'
where biblionumber=$biblio and ordernumber=$ordnum
";
# print $query;
my $sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$query="update aqorderbreakdown set bookfundid=$bookfund where
ordernumber=$ordnum";
$sth=$dbh->prepare($query);
# print $query;
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub curconvert {
my ($currency,$price)=@_;
my $dbh=C4Connect;
my $query="Select rate from currency where currency='$currency'";
my $sth=$dbh->prepare($query);
$sth->execute;
my $data=$sth->fetchrow_hashref;
$sth->finish;
$dbh->disconnect;
my $cur=$data->{'rate'};
if ($cur==0){
$cur=1;
}
$price=$price / $cur;
return($price);
}
sub getcurrencies {
my $dbh=C4Connect;
my $query="Select * from currency";
my $sth=$dbh->prepare($query);
$sth->execute;
my @results;
my $i=0;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return($i,\@results);
}
sub getcurrency {
my ($cur)=@_;
my $dbh=C4Connect;
my $query="Select * from currency where currency='$cur'";
my $sth=$dbh->prepare($query);
$sth->execute;
my $data=$sth->fetchrow_hashref;
$sth->finish;
$dbh->disconnect;
return($data);
}
sub updatecurrencies {
my ($currency,$rate)=@_;
my $dbh=C4Connect;
my $query="update currency set rate=$rate where currency='$currency'";
my $sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub updatesup {
my ($data)=@_;
my $dbh=C4Connect;
my $query="Update aqbooksellers set
name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
contact='$data->{'contact'}',contpos='$data->{'contpos'}',
contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
'$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
'$data->{'contnotes'}', active=$data->{'active'},
listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
nocalc='$data->{'nocalc'}'
where id='$data->{'id'}'";
my $sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
# print $query;
}
sub insertsup {
my ($data)=@_;
my $dbh=C4Connect;
my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
$sth->execute;
my $data2=$sth->fetchrow_hashref;
$sth->finish;
$data2->{'max(id)'}++;
$sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
$sth->execute;
$sth->finish;
$data->{'id'}=$data2->{'max(id)'};
$dbh->disconnect;
updatesup($data);
return($data->{'id'});
}
sub newitems {
my ($item, @barcodes) = @_;
my $dbh = C4Connect;
my $query = "Select max(itemnumber) from items";
my $sth = $dbh->prepare($query);
my $data;
my $itemnumber;
my $error;
$sth->execute;
$data = $sth->fetchrow_hashref;
$itemnumber = $data->{'max(itemnumber)'} + 1;
$sth->finish;
$item->{'booksellerid'} = $dbh->quote($item->{'booksellerid'});
$item->{'homebranch'} = $dbh->quote($item->{'homebranch'});
$item->{'price'} = $dbh->quote($item->{'price'});
$item->{'replacementprice'} = $dbh->quote($item->{'replacementprice'});
$item->{'itemnotes'} = $dbh->quote($item->{'itemnotes'});
foreach my $barcode (@barcodes) {
$barcode = uc($barcode);
$barcode = $dbh->quote($barcode);
$query = "Insert into items set
itemnumber = $itemnumber,
biblionumber = $item->{'biblionumber'},
biblioitemnumber = $item->{'biblioitemnumber'},
barcode = $barcode,
booksellerid = $item->{'booksellerid'},
dateaccessioned = NOW(),
homebranch = $item->{'homebranch'},
holdingbranch = $item->{'homebranch'},
price = $item->{'price'},
replacementprice = $item->{'replacementprice'},
replacementpricedate = NOW(),
itemnotes = $item->{'itemnotes'}";
if ($item->{'loan'}) {
$query .= ",
notforloan = $item->{'loan'}";
} # if
$sth = $dbh->prepare($query);
$sth->execute;
$error .= $sth->errstr;
$sth->finish;
$itemnumber++;
} # for
$dbh->disconnect;
return($error);
}
sub checkitems{
my ($count,@barcodes)=@_;
my $dbh=C4Connect;
my $error;
for (my $i=0;$i<$count;$i++){
$barcodes[$i]=uc $barcodes[$i];
my $query="Select * from items where barcode='$barcodes[$i]'";
my $sth=$dbh->prepare($query);
$sth->execute;
if (my $data=$sth->fetchrow_hashref){
$error.=" Duplicate Barcode: $barcodes[$i]";
}
$sth->finish;
}
$dbh->disconnect;
return($error);
}
sub moditem {
my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
my $dbh=C4Connect;
my $query="update items set biblioitemnumber=$bibitemnum,
barcode='$barcode',itemnotes='$notes'
where itemnumber=$itemnum";
if ($barcode eq ''){
$query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum";
}
if ($lost ne ''){
$query="update items set biblioitemnumber=$bibitemnum,
barcode='$barcode',itemnotes='$notes',homebranch='$homebranch',
itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum";
}
if ($replacement ne ''){
$query=~ s/ where/,replacementprice='$replacement' where/;
}
my $sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub updatecost{
my($price,$rrp,$itemnum)=@_;
my $dbh=C4Connect;
my $query="update items set price='$price',replacementprice='$rrp'
where itemnumber=$itemnum";
my $sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub countitems{
my ($bibitemnum)=@_;
my $dbh=C4Connect;
my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'";
my $sth=$dbh->prepare($query);
$sth->execute;
my $data=$sth->fetchrow_hashref;
$sth->finish;
$dbh->disconnect;
return($data->{'count(*)'});
}
sub findall {
my ($biblionumber)=@_;
my $dbh=C4Connect;
my $query="Select * from biblioitems,items,itemtypes where
biblioitems.biblionumber=$biblionumber
and biblioitems.biblioitemnumber=items.biblioitemnumber and
itemtypes.itemtype=biblioitems.itemtype
order by items.biblioitemnumber";
my $sth=$dbh->prepare($query);
$sth->execute;
my @results;
my $i;
while (my $data=$sth->fetchrow_hashref){
$results[$i]=$data;
$i++;
}
$sth->finish;
$dbh->disconnect;
return(@results);
}
sub needsmod{
my ($bibitemnum,$itemtype)=@_;
my $dbh=C4Connect;
my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
and itemtype='$itemtype'";
my $sth=$dbh->prepare($query);
$sth->execute;
my $result=0;
if (my $data=$sth->fetchrow_hashref){
$result=1;
}
$sth->finish;
$dbh->disconnect;
return($result);
}
sub delitem{
my ($itemnum)=@_;
my $dbh=C4Connect;
my $query="select * from items where itemnumber=$itemnum";
my $sth=$dbh->prepare($query);
$sth->execute;
my @data=$sth->fetchrow_array;
$sth->finish;
$query="Insert into deleteditems values (";
foreach my $temp (@data){
$query=$query."'$temp',";
}
$query=~ s/\,$/\)/;
# print $query;
$sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$query = "Delete from items where itemnumber=$itemnum";
$sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$dbh->disconnect;
}
sub deletebiblioitem {
my ($biblioitemnumber) = @_;
my $dbh = C4Connect;
my $query = "Select * from biblioitems
where biblioitemnumber = $biblioitemnumber";
my $sth = $dbh->prepare($query);
my @results;
$sth->execute;
if (@results = $sth->fetchrow_array) {
$query = "Insert into deletedbiblioitems values (";
foreach my $value (@results) {
$value = $dbh->quote($value);
$query .= "$value,";
} # foreach
$query =~ s/\,$/\)/;
$dbh->do($query);
$query = "Delete from biblioitems
where biblioitemnumber = $biblioitemnumber";
$dbh->do($query);
} # if
$sth->finish;
# Now delete all the items attached to the biblioitem
$query = "Select * from items where biblioitemnumber = $biblioitemnumber";
$sth = $dbh->prepare($query);
$sth->execute;
while (@results = $sth->fetchrow_array) {
$query = "Insert into deleteditems values (";
foreach my $value (@results) {
$value = $dbh->quote($value);
$query .= "$value,";
} # foreach
$query =~ s/\,$/\)/;
$dbh->do($query);
} # while
$sth->finish;
$query = "Delete from items where biblioitemnumber = $biblioitemnumber";
$dbh->do($query);
$dbh->disconnect;
} # sub deletebiblioitem
sub delbiblio{
my ($biblio)=@_;
my $dbh=C4Connect;
my $query="select * from biblio where biblionumber=$biblio";
my $sth=$dbh->prepare($query);
$sth->execute;
if (my @data=$sth->fetchrow_array){
$sth->finish;
$query="Insert into deletedbiblio values (";
foreach my $temp (@data){
$temp=~ s/\'/\\\'/g;
$query=$query."'$temp',";
}
$query=~ s/\,$/\)/;
# print $query;
$sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
$query = "Delete from biblio where biblionumber=$biblio";
$sth=$dbh->prepare($query);
$sth->execute;
$sth->finish;
}
$sth->finish;
$dbh->disconnect;
}
sub getitemtypes {
my $dbh = C4Connect;
my $query = "select * from itemtypes";
my $sth = $dbh->prepare($query);
# || die "Cannot prepare $query" . $dbh->errstr;
my $count = 0;
my @results;
$sth->execute;
# || die "Cannot execute $query\n" . $sth->errstr;
while (my $data = $sth->fetchrow_hashref) {
$results[$count] = $data;
$count++;
} # while
$sth->finish;
$dbh->disconnect;
return($count, @results);
} # sub getitemtypes
sub getbiblio {
my ($biblionumber) = @_;
my $dbh = C4Connect;
my $query = "Select * from biblio where biblionumber = $biblionumber";
my $sth = $dbh->prepare($query);
# || die "Cannot prepare $query\n" . $dbh->errstr;
my $count = 0;
my @results;
$sth->execute;
# || die "Cannot execute $query\n" . $sth->errstr;
while (my $data = $sth->fetchrow_hashref) {
$results[$count] = $data;
$count++;
} # while
$sth->finish;
$dbh->disconnect;
return($count, @results);
} # sub getbiblio
sub getbiblioitem {
my ($biblioitemnum) = @_;
my $dbh = C4Connect;
my $query = "Select * from biblioitems where
biblioitemnumber = $biblioitemnum";
my $sth = $dbh->prepare($query);
my $count = 0;
my @results;
$sth->execute;
while (my $data = $sth->fetchrow_hashref) {
$results[$count] = $data;
$count++;
} # while
$sth->finish;
$dbh->disconnect;
return($count, @results);
} # sub getbiblioitem
sub getbiblioitembybiblionumber {
my ($biblionumber) = @_;
my $dbh = C4Connect;
my $query = "Select * from biblioitems where biblionumber =
$biblionumber";
my $sth = $dbh->prepare($query);
my $count = 0;
my @results;
$sth->execute;
while (my $data = $sth->fetchrow_hashref) {
$results[$count] = $data;
$count++;
} # while
$sth->finish;
$dbh->disconnect;
return($count, @results);
} # sub
sub getitemsbybiblioitem {
my ($biblioitemnum) = @_;
my $dbh = C4Connect;
my $query = "Select * from items, biblio where
biblio.biblionumber = items.biblionumber and biblioitemnumber
= $biblioitemnum";
my $sth = $dbh->prepare($query);
# || die "Cannot prepare $query\n" . $dbh->errstr;
my $count = 0;
my @results;
$sth->execute;
# || die "Cannot execute $query\n" . $sth->errstr;
while (my $data = $sth->fetchrow_hashref) {
$results[$count] = $data;
$count++;
} # while
$sth->finish;
$dbh->disconnect;
return($count, @results);
} # sub getitemsbybiblioitem
sub isbnsearch {
my ($isbn) = @_;
my $dbh = C4Connect;
my $count = 0;
my $query;
my $sth;
my @results;
$isbn = $dbh->quote($isbn);
$query = "Select biblio.* from biblio, biblioitems where
biblio.biblionumber = biblioitems.biblionumber
and isbn = $isbn";
$sth = $dbh->prepare($query);
$sth->execute;
while (my $data = $sth->fetchrow_hashref) {
$results[$count] = $data;
$count++;
} # while
$sth->finish;
$dbh->disconnect;
return($count, @results);
} # sub isbnsearch
sub websitesearch {
my ($keywordlist) = @_;
my $dbh = C4Connect;
my $query = "Select distinct biblio.* from biblio, biblioitems where
biblio.biblionumber = biblioitems.biblionumber and (";
my $count = 0;
my $sth;
my @results;
my @keywords = split(/ +/, $keywordlist);
my $keyword = shift(@keywords);
$keyword =~ s/%/\\%/g;
$keyword =~ s/_/\\_/;
$keyword = "%" . $keyword . "%";
$keyword = $dbh->quote($keyword);
$query .= " (url like $keyword)";
foreach $keyword (@keywords) {
$keyword =~ s/%/\\%/;
$keyword =~ s/_/\\_/;
$keyword = "%" . $keyword . "%";
$keyword = $dbh->quote($keyword);
$query .= " or (url like $keyword)";
} # foreach
$query .= ")";
$sth = $dbh->prepare($query);
$sth->execute;
while (my $data = $sth->fetchrow_hashref) {
$results[$count] = $data;
$count++;
} # while
$sth->finish;
$dbh->disconnect;
return($count, @results);
} # sub websitesearch
sub addwebsite {
my ($website) = @_;
my $dbh = C4Connect;
my $query;
$website->{'biblionumber'} = $dbh->quote($website->{'biblionumber'});
$website->{'title'} = $dbh->quote($website->{'title'});
$website->{'description'} = $dbh->quote($website->{'description'});
$website->{'url'} = $dbh->quote($website->{'url'});
$query = "Insert into websites set
biblionumber = $website->{'biblionumber'},
title = $website->{'title'},
description = $website->{'description'},
url = $website->{'url'}";
$dbh->do($query);
$dbh->disconnect;
} # sub website
sub updatewebsite {
my ($website) = @_;
my $dbh = C4Connect;
my $query;
$website->{'title'} = $dbh->quote($website->{'title'});
$website->{'description'} = $dbh->quote($website->{'description'});
$website->{'url'} = $dbh->quote($website->{'url'});
$query = "Update websites set
title = $website->{'title'},
description = $website->{'description'},
url = $website->{'url'}
where websitenumber = $website->{'websitenumber'}";
$dbh->do($query);
$dbh->disconnect;
} # sub updatewebsite
sub deletewebsite {
my ($websitenumber) = @_;
my $dbh = C4Connect;
my $query = "Delete from websites where websitenumber = $websitenumber";
$dbh->do($query);
$dbh->disconnect;
} # sub deletewebsite
END { } # module clean-up code here (global destructor)