1 package C4::Acquisitions; #assumes C4/Acquisitions.pm
4 # Copyright 2000-2002 Katipo Communications
6 # This file is part of Koha.
8 # Koha is free software; you can redistribute it and/or modify it under the
9 # terms of the GNU General Public License as published by the Free Software
10 # Foundation; either version 2 of the License, or (at your option) any later
13 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License along with
18 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19 # Suite 330, Boston, MA 02111-1307 USA
22 # NOTE: This module is deprecated in Koha 1.3.x, and will shortly be
30 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
32 # set the version for version checking
37 C4::Acquisitions - Koha module dealing with acquisitions and orders
45 B<NOTE:> This module is deprecated in Koha 1.3.x.
47 The functions in this module deal with acquisitions, managing book
48 orders, converting money to different currencies, and so forth.
57 @EXPORT = qw(&getorders &bookseller &breakdown &basket &newbasket &bookfunds
58 &ordersearch &newbiblio &newbiblioitem &newsubject &newsubtitle &neworder
59 &newordernum &modbiblio &modorder &getsingleorder &invoice &receiveorder
60 &bookfundbreakdown &curconvert &updatesup &insertsup &newitems &modbibitem
61 &getcurrencies &modsubtitle &modsubject &modaddauthor &moditem &countitems
62 &findall &needsmod &delitem &deletebiblioitem &delbiblio &delorder &branches
63 &getallorders &getrecorders &updatecurrencies &getorder &getcurrency &updaterecorder
64 &updatecost &checkitems &modnote &getitemtypes &getbiblio
65 &getbiblioitembybiblionumber
66 &getbiblioitem &getitemsbybiblioitem &isbnsearch
67 &websitesearch &addwebsite &updatewebsite &deletewebsite);
68 %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
70 # your exported package globals go here,
71 # as well as any optionally exported functions
73 @EXPORT_OK = qw($Var1 %Hashit); # FIXME - Never used
76 # non-exported package globals go here
77 use vars qw(@more $stuff); # FIXME - Never used
79 # initalize package globals, first exported ones
86 # then the others (which are still accessible as $Some::Module::stuff)
91 # all file-scoped lexicals must be created before
92 # the functions below that use them.
94 # file-private lexicals go here
100 # here's a file-private function as a closure,
101 # callable as &$priv_func; it cannot be prototyped.
102 my $priv_func = sub {
106 # make all your functions, whether exported or not;
110 ($count, $orders) = &getorders($booksellerid);
112 Finds pending orders from the bookseller with the given ID. Ignores
113 completed and cancelled orders.
115 C<$count> is the number of elements in C<@{$orders}>.
117 C<$orders> is a reference-to-array; each element is a
118 reference-to-hash with the following fields:
124 Gives the number of orders in with this basket number.
126 =item C<authorizedby>
132 These give the value of the corresponding field in the aqorders table
133 of the Koha database.
137 Results are ordered from most to least recent.
141 # FIXME - This exact function already exists in C4::Catalogue
144 my $dbh = C4::Context->dbh;
145 my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where
146 booksellerid='$supplierid' and (quantity > quantityreceived or
147 quantityreceived is NULL)
148 and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
149 $query.=" group by basketno order by entrydate desc";
151 my $sth=$dbh->prepare($query);
155 while (my $data=$sth->fetchrow_hashref){
160 return ($i,\@results);
163 # Only used internally
164 # FIXME - This is the same as &C4::Biblio::itemcount, but not
165 # the same as &C4::Search::itemcount
168 my $dbh = C4::Context->dbh;
169 my $query="Select count(*) from items where biblionumber=$biblio";
171 my $sth=$dbh->prepare($query);
173 my $data=$sth->fetchrow_hashref;
175 return($data->{'count(*)'});
180 ($order, $ordernumber) = &getorder($biblioitemnumber, $biblionumber);
182 Looks up the order with the given biblionumber and biblioitemnumber.
184 Returns a two-element array. C<$ordernumber> is the order number.
185 C<$order> is a reference-to-hash describing the order; its keys are
186 fields from the biblio, biblioitems, aqorders, and aqorderbreakdown
187 tables of the Koha database.
191 # FIXME - There are functions &getorder and &getorders. Isn't this
192 # somewhat likely to cause confusion?
193 # FIXME - Almost the exact same function is already in C4::Catalogue
196 my $dbh = C4::Context->dbh;
197 my $query="Select ordernumber
199 where biblionumber=? and biblioitemnumber=?";
200 my $sth=$dbh->prepare($query);
201 $sth->execute($bib,$bi);
202 my $ordnum=$sth->fetchrow_hashref;
204 my $order=getsingleorder($ordnum->{'ordernumber'});
206 return ($order,$ordnum->{'ordernumber'});
211 $order = &getsingleorder($ordernumber);
213 Looks up an order by order number.
215 Returns a reference-to-hash describing the order. The keys of
216 C<$order> are fields from the biblio, biblioitems, aqorders, and
217 aqorderbreakdown tables of the Koha database.
221 # FIXME - This is practically the same function as
222 # &C4::Catalogue::getsingleorder and &C4::Biblio::getsingleorder.
225 my $dbh = C4::Context->dbh;
226 my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown
227 where aqorders.ordernumber=?
228 and biblio.biblionumber=aqorders.biblionumber and
229 biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
230 aqorders.ordernumber=aqorderbreakdown.ordernumber";
231 my $sth=$dbh->prepare($query);
232 $sth->execute($ordnum);
233 my $data=$sth->fetchrow_hashref;
240 ($count, @results) = &invoice($booksellerinvoicenumber);
242 Looks up orders by invoice number.
244 Returns an array. C<$count> is the number of elements in C<@results>.
245 C<@results> is an array of references-to-hash; the keys of each
246 elements are fields from the aqorders, biblio, and biblioitems tables
247 of the Koha database.
251 # FIXME - This exact function is already in C4::Catalogue
254 my $dbh = C4::Context->dbh;
255 my $query="Select * from aqorders,biblio,biblioitems where
256 booksellerinvoicenumber='$invoice'
257 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
258 aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
261 my $sth=$dbh->prepare($query);
263 while (my $data=$sth->fetchrow_hashref){
273 ($count, @results) = &getallorders($booksellerid);
275 Looks up all of the pending orders from the supplier with the given
276 bookseller ID. Ignores cancelled orders.
278 C<$count> is the number of elements in C<@results>. C<@results> is an
279 array of references-to-hash. The keys of each element are fields from
280 the aqorders, biblio, and biblioitems tables of the Koha database.
282 C<@results> is sorted alphabetically by book title.
286 # FIXME - Almost (but not quite) the same function appears in C4::Catalogue
287 # That one only lists incomplete orders.
289 #gets all orders from a certain supplier, orders them alphabetically
291 my $dbh = C4::Context->dbh;
292 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
293 and (cancelledby is NULL or cancelledby = '')
294 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
295 aqorders.biblioitemnumber
296 group by aqorders.biblioitemnumber
301 my $sth=$dbh->prepare($query);
303 while (my $data=$sth->fetchrow_hashref){
311 # FIXME - There's a getrecorders in C4::Catalogue
312 # FIXME - Never used (neither is the other one, actually)
314 #gets all orders from a certain supplier, orders them alphabetically
316 my $dbh = C4::Context->dbh;
317 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
318 and (cancelledby is NULL or cancelledby = '')
319 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
320 aqorders.biblioitemnumber and
321 aqorders.quantityreceived>0
322 and aqorders.datereceived >=now()
323 group by aqorders.biblioitemnumber
328 my $sth=$dbh->prepare($query);
330 while (my $data=$sth->fetchrow_hashref){
340 ($count, @results) = &ordersearch($search, $biblionumber, $complete);
344 C<$search> may take one of several forms: if it is an ISBN,
345 C<&ordersearch> returns orders with that ISBN. If C<$search> is an
346 order number, C<&ordersearch> returns orders with that order number
347 and biblionumber C<$biblionumber>. Otherwise, C<$search> is considered
348 to be a space-separated list of search terms; in this case, all of the
349 terms must appear in the title (matching the beginning of title
352 If C<$complete> is C<yes>, the results will include only completed
353 orders. In any case, C<&ordersearch> ignores cancelled orders.
355 C<&ordersearch> returns an array. C<$count> is the number of elements
356 in C<@results>. C<@results> is an array of references-to-hash with the
373 # FIXME - The same function (modulo whitespace) appears in C4::Catalogue
375 my ($search,$biblio,$catview)=@_;
376 my $dbh = C4::Context->dbh;
377 my $query="Select *,biblio.title from aqorders,biblioitems,biblio
378 where aqorders.biblioitemnumber = biblioitems.biblioitemnumber
379 and biblio.biblionumber=aqorders.biblionumber
380 and ((datecancellationprinted is NULL)
381 or (datecancellationprinted = '0000-00-00'))
383 my @data=split(' ',$search);
385 for (my $i=0;$i<$count;$i++){
386 $query.= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
389 $query.=" ) or biblioitems.isbn='$search'
390 or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
391 if ($catview ne 'yes'){
392 $query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
394 $query.=" group by aqorders.ordernumber";
395 my $sth=$dbh->prepare($query);
400 while (my $data=$sth->fetchrow_hashref){
401 my $sth2=$dbh->prepare("Select * from biblio where
402 biblionumber='$data->{'biblionumber'}'");
404 my $data2=$sth2->fetchrow_hashref;
406 $data->{'author'}=$data2->{'author'};
407 $data->{'seriestitle'}=$data2->{'seriestitle'};
408 $sth2=$dbh->prepare("Select * from aqorderbreakdown where
409 ordernumber=$data->{'ordernumber'}");
411 $data2=$sth2->fetchrow_hashref;
413 $data->{'branchcode'}=$data2->{'branchcode'};
414 $data->{'bookfundid'}=$data2->{'bookfundid'};
424 ($count, @results) = &bookseller($searchstring);
426 Looks up a book seller. C<$searchstring> may be either a book seller
427 ID, or a string to look for in the book seller's name.
429 C<$count> is the number of elements in C<@results>. C<@results> is an
430 array of references-to-hash, whose keys are the fields of of the
431 aqbooksellers table in the Koha database.
435 # FIXME - This function appears in C4::Catalogue
437 my ($searchstring)=@_;
438 my $dbh = C4::Context->dbh;
439 my $query="Select * from aqbooksellers where name like '%$searchstring%' or
440 id = '$searchstring'";
441 my $sth=$dbh->prepare($query);
445 while (my $data=$sth->fetchrow_hashref){
455 ($count, $results) = &breakdown($ordernumber);
457 Looks up an order by order ID, and returns its breakdown.
459 C<$count> is the number of elements in C<$results>. C<$results> is a
460 reference-to-array; its elements are references-to-hash, whose keys
461 are the fields of the aqorderbreakdown table in the Koha database.
465 # FIXME - This function appears in C4::Catalogue.
468 my $dbh = C4::Context->dbh;
469 my $query="Select * from aqorderbreakdown where ordernumber='$id'";
470 my $sth=$dbh->prepare($query);
474 while (my $data=$sth->fetchrow_hashref){
479 return($i,\@results);
484 ($count, @orders) = &basket($basketnumber, $booksellerID);
486 Looks up the pending (non-cancelled) orders with the given basket
487 number. If C<$booksellerID> is non-empty, only orders from that seller
490 C<&basket> returns a two-element array. C<@orders> is an array of
491 references-to-hash, whose keys are the fields from the aqorders,
492 biblio, and biblioitems tables in the Koha database. C<$count> is the
493 number of elements in C<@orders>.
497 # FIXME - Almost the same function (with less error-checking) appears in
500 my ($basketno,$supplier)=@_;
501 my $dbh = C4::Context->dbh;
502 my $query="Select *,biblio.title from aqorders,biblio,biblioitems
503 where basketno='$basketno'
504 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
505 =aqorders.biblioitemnumber
506 and (datecancellationprinted is NULL or datecancellationprinted =
508 if (defined $supplier && $supplier ne ''){
509 $query.=" and aqorders.booksellerid='$supplier'";
511 $query.=" group by aqorders.ordernumber";
512 my $sth=$dbh->prepare($query);
517 while (my $data=$sth->fetchrow_hashref){
527 $basket = &newbasket();
529 Finds the next unused basket number in the aqorders table of the Koha
530 database, and returns it.
534 # FIXME - There's a race condition here:
536 # B calls &newbasket (gets the same number as A)
537 # A updates the basket
538 # B updates the basket, and clobbers A's result.
539 # A better approach might be to create a dummy order (with, say,
540 # requisitionedby == "Dummy-$$" or notes == "dummy <time> <pid>"), and
541 # see which basket number it gets. Then have a cron job periodically
542 # remove out-of-date dummy orders.
543 # FIXME - This function appears in C4::Catalogue.pm
545 my $dbh = C4::Context->dbh;
546 my $query="Select max(basketno) from aqorders";
547 my $sth=$dbh->prepare($query);
549 my $data=$sth->fetchrow_arrayref;
550 my $basket=$$data[0];
558 ($count, @results) = &bookfunds();
560 Returns a list of all book funds started on Sep 1, 2001.
562 C<$count> is the number of elements in C<@results>. C<@results> is an
563 array of references-to-hash, whose keys are fields from the aqbookfund
564 and aqbudget tables of the Koha database. Results are ordered
565 alphabetically by book fund name.
569 # FIXME - An identical function (without the hardcoded date) appears in
572 my $dbh = C4::Context->dbh;
573 my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
575 and aqbudget.startdate='2001-07-01'
576 group by aqbookfund.bookfundid order by bookfundname";
577 my $sth=$dbh->prepare($query);
581 while (my $data=$sth->fetchrow_hashref){
591 ($count, @results) = &branches();
593 Returns a list of all library branches.
595 C<$count> is the number of elements in C<@results>. C<@results> is an
596 array of references-to-hash, whose keys are the fields of the branches
597 table of the Koha database.
601 # FIXME - This function (modulo whitespace) appears in C4::Catalogue
603 my $dbh = C4::Context->dbh;
604 my $query="Select * from branches";
605 my $sth=$dbh->prepare($query);
610 while (my $data = $sth->fetchrow_hashref){
616 return($i, @results);
619 # FIXME - POD. But I can't figure out what this function is doing
620 # FIXME - An almost identical function appears in C4::Catalogue
621 sub bookfundbreakdown {
623 my $dbh = C4::Context->dbh;
624 my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
625 from aqorders,aqorderbreakdown where bookfundid='$id' and
626 aqorders.ordernumber=aqorderbreakdown.ordernumber and ((budgetdate >=
627 '2001-07-01' and budgetdate <'2002-07-01') or
628 (datereceived >= '2001-07-01' and datereceived < '2002-07-01'))
629 and (datecancellationprinted is NULL or
630 datecancellationprinted='0000-00-00')";
631 my $sth=$dbh->prepare($query);
635 while (my $data=$sth->fetchrow_hashref){
636 if ($data->{'subscription'} == 1){
637 $spent+=$data->{'quantity'}*$data->{'unitprice'};
639 my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
640 $comtd+=($data->{'ecost'})*$leftover;
641 $spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
645 return($spent,$comtd);
648 # FIXME - This is in effect identical to &C4::Biblio::newbiblio.
649 # Pick one and stick with it.
651 # FIXME - Never used (anything that uses &newbiblio uses
652 # &C4::Biblio::newbiblio). Nuke this.
655 my $dbh = C4::Context->dbh;
656 my $query = "Select max(biblionumber) from biblio";
657 my $sth = $dbh->prepare($query);
659 my $data = $sth->fetchrow_arrayref;
660 my $bibnum = $$data[0] + 1;
663 $biblio->{'title'} = $dbh->quote($biblio->{'title'});
664 $biblio->{'author'} = $dbh->quote($biblio->{'author'});
665 $biblio->{'copyright'} = $dbh->quote($biblio->{'copyright'});
666 $biblio->{'seriestitle'} = $dbh->quote($biblio->{'seriestitle'});
667 $biblio->{'notes'} = $dbh->quote($biblio->{'notes'});
668 $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'});
669 if ($biblio->{'seriestitle'}) { $series = 1 };
675 SET biblionumber = $bibnum,
676 title = $biblio->{'title'},
677 author = $biblio->{'author'},
678 copyrightdate = $biblio->{'copyright'},
680 seriestitle = $biblio->{'seriestitle'},
681 notes = $biblio->{'notes'},
682 abstract = $biblio->{'abstract'}
690 $biblionumber = &modbiblio($biblio);
692 Update a biblio record.
694 C<$biblio> is a reference-to-hash whose keys are the fields in the
695 biblio table in the Koha database. All fields must be present, not
696 just the ones you wish to change.
698 C<&modbiblio> updates the record defined by
699 C<$biblio-E<gt>{biblionumber}> with the values in C<$biblio>.
701 C<&modbiblio> returns C<$biblio-E<gt>{biblionumber}> whether it was
706 # FIXME - This is in effect the same as &C4::Biblio::modbiblio.
707 # Pick one and stick with it.
710 my $dbh = C4::Context->dbh;
714 $biblio->{'title'} = $dbh->quote($biblio->{'title'});
715 $biblio->{'author'} = $dbh->quote($biblio->{'author'});
716 $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'});
717 $biblio->{'copyrightdate'} = $dbh->quote($biblio->{'copyrightdate'});
718 $biblio->{'seriestitle'} = $dbh->quote($biblio->{'serirestitle'});
719 $biblio->{'serial'} = $dbh->quote($biblio->{'serial'});
720 $biblio->{'unititle'} = $dbh->quote($biblio->{'unititle'});
721 $biblio->{'notes'} = $dbh->quote($biblio->{'notes'});
723 $query = "Update biblio set
724 title = $biblio->{'title'},
725 author = $biblio->{'author'},
726 abstract = $biblio->{'abstract'},
727 copyrightdate = $biblio->{'copyrightdate'},
728 seriestitle = $biblio->{'seriestitle'},
729 serial = $biblio->{'serial'},
730 unititle = $biblio->{'unititle'},
731 notes = $biblio->{'notes'}
732 where biblionumber = $biblio->{'biblionumber'}";
733 $sth = $dbh->prepare($query);
738 return($biblio->{'biblionumber'});
743 &modsubtitle($biblionumber, $subtitle);
745 Sets the subtitle of a book.
747 C<$biblionumber> is the biblionumber of the book to modify.
749 C<$subtitle> is the new subtitle.
753 # FIXME - This is in effect identical to &C4::Biblio::modsubtitle.
754 # Pick one and stick with it.
756 my ($bibnum, $subtitle) = @_;
757 my $dbh = C4::Context->dbh;
758 my $query = "update bibliosubtitle set
759 subtitle = '$subtitle'
760 where biblionumber = $bibnum";
761 my $sth = $dbh->prepare($query);
769 &modaddauthor($biblionumber, $author);
771 Replaces all additional authors for the book with biblio number
772 C<$biblionumber> with C<$author>. If C<$author> is the empty string,
773 C<&modaddauthor> deletes all additional authors.
777 # FIXME - This is functionally identical to &C4::Biblio::modaddauthor
778 # Pick one and stick with it.
779 # FIXME - This API is bogus: you should be able to have more than 2
782 my ($bibnum, $author) = @_;
783 my $dbh = C4::Context->dbh;
784 # FIXME - Use $dbh->do()
785 my $query = "Delete from additionalauthors where biblionumber = $bibnum";
786 my $sth = $dbh->prepare($query);
792 $query = "Insert into additionalauthors set
794 biblionumber = '$bibnum'";
795 $sth = $dbh->prepare($query);
805 $error = &modsubject($biblionumber, $force, @subjects);
807 $force - a subject to force
809 $error - Error message, or undef if successful.
813 # FIXME - This is in effect identical to &C4::Biblio::modsubject.
814 # Pick one and stick with it.
815 # FIXME - Bogus API: either $force should force all subjects to be
816 # added to catalogueentry, or else you should be able to specify a
817 # list of subjects to force.
819 my ($bibnum, $force, @subject) = @_;
820 my $dbh = C4::Context->dbh;
821 my $count = @subject;
824 # Loop over list of subjects
825 # FIXME - Use foreach my $subject (@subjects)
826 for (my $i = 0; $i < $count; $i++) {
827 $subject[$i] =~ s/^ //g; # Trim whitespace
828 $subject[$i] =~ s/ $//g;
830 # Look up the subject in the authority file.
831 my $query = "select * from catalogueentry
832 where entrytype = 's'
833 and catalogueentry = '$subject[$i]'";
834 my $sth = $dbh->prepare($query);
837 if (my $data = $sth->fetchrow_hashref) {
838 # FIXME - Ick! Empty if-clauses suck. Use a "not" or something.
840 if ($force eq $subject[$i]) {
842 # subject not in aut, chosen to force anway
843 # so insert into cataloguentry so its in auth file
844 $query = "Insert into catalogueentry
845 (entrytype,catalogueentry)
846 values ('s','$subject[$i]')";
847 my $sth2 = $dbh->prepare($query);
854 $error = "$subject[$i]\n does not exist in the subject authority file";
855 $query = "Select * from catalogueentry
856 where entrytype = 's'
857 and (catalogueentry like '$subject[$i] %'
858 or catalogueentry like '% $subject[$i] %'
859 or catalogueentry like '% $subject[$i]')";
860 my $sth2 = $dbh->prepare($query);
863 while (my $data = $sth2->fetchrow_hashref) {
864 $error = $error."<br>$data->{'catalogueentry'}"; # FIXME - .=
873 my $query = "Delete from bibliosubject where biblionumber = $bibnum";
874 my $sth = $dbh->prepare($query);
879 for (my $i = 0; $i < $count; $i++) {
880 $sth = $dbh->prepare("Insert into bibliosubject
881 values ('$subject[$i]', $bibnum)");
891 # FIXME - This is very similar to &C4::Biblio::modbibitem.
892 # Pick one and stick with it.
893 # If it's this one, it needs a POD.
895 my ($biblioitem) = @_;
896 my $dbh = C4::Context->dbh;
899 # foreach my $field (qw( ... ))
901 # $biblioitem->{$field} = $dbh->quote($biblioitem->{$field});
903 $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'});
904 $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'});
905 $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'});
906 $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'});
907 $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
908 $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'});
909 $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'});
910 $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'});
911 $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
912 $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'});
913 $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'});
914 $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'});
915 $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'});
916 $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'});
920 SET itemtype = $biblioitem->{'itemtype'},
921 url = $biblioitem->{'url'},
922 isbn = $biblioitem->{'isbn'},
923 publishercode = $biblioitem->{'publishercode'},
924 publicationyear = $biblioitem->{'publicationyear'},
925 classification = $biblioitem->{'classification'},
926 dewey = $biblioitem->{'dewey'},
927 subclass = $biblioitem->{'subclass'},
928 illus = $biblioitem->{'illus'},
929 pages = $biblioitem->{'pages'},
930 volumeddesc = $biblioitem->{'volumeddesc'},
931 notes = $biblioitem->{'notes'},
932 size = $biblioitem->{'size'},
933 place = $biblioitem->{'place'}
934 WHERE biblioitemnumber = $biblioitem->{'biblioitemnumber'}
938 # FIXME - This is in effect identical to &C4::Biblio::modnote.
939 # Pick one and stick with it.
940 # If it's this one, it needs a POD.
942 my ($bibitemnum,$note)=@_;
943 my $dbh = C4::Context->dbh;
948 WHERE biblioitemnumber = '$bibitemnum'
952 # FIXME - &C4::Biblio::newbiblioitem is quite similar to this
953 # Pick one and stick with it.
954 # If it's this one, it needs a POD.
956 my ($biblioitem) = @_;
957 my $dbh = C4::Context->dbh;
958 my $query = "Select max(biblioitemnumber) from biblioitems";
959 my $sth = $dbh->prepare($query);
963 $biblioitem->{'volume'} = $dbh->quote($biblioitem->{'volume'});
964 $biblioitem->{'number'} = $dbh->quote($biblioitem->{'number'});
965 $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'});
966 $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'});
967 $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'});
968 $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'});
969 $biblioitem->{'issn'} = $dbh->quote($biblioitem->{'issn'});
970 $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'});
971 $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'});
972 $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
973 $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'});
974 $biblioitem->{'volumedate'} = $dbh->quote($biblioitem->{'volumedate'});
975 $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
976 $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
977 $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'});
978 $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'});
979 $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'});
980 $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'});
981 $biblioitem->{'lccn'} = $dbh->quote($biblioitem->{'lccn'});
982 $biblioitem->{'marc'} = $dbh->quote($biblioitem->{'marc'});
985 $data = $sth->fetchrow_arrayref;
986 $bibitemnum = $$data[0] + 1;
990 $query = "insert into biblioitems set
991 biblioitemnumber = $bibitemnum,
992 biblionumber = $biblioitem->{'biblionumber'},
993 volume = $biblioitem->{'volume'},
994 number = $biblioitem->{'number'},
995 classification = $biblioitem->{'classification'},
996 itemtype = $biblioitem->{'itemtype'},
997 url = $biblioitem->{'url'},
998 isbn = $biblioitem->{'isbn'},
999 issn = $biblioitem->{'issn'},
1000 dewey = $biblioitem->{'dewey'},
1001 subclass = $biblioitem->{'subclass'},
1002 publicationyear = $biblioitem->{'publicationyear'},
1003 publishercode = $biblioitem->{'publishercode'},
1004 volumedate = $biblioitem->{'volumedate'},
1005 volumeddesc = $biblioitem->{'volumeddesc'},
1006 illus = $biblioitem->{'illus'},
1007 pages = $biblioitem->{'pages'},
1008 notes = $biblioitem->{'notes'},
1009 size = $biblioitem->{'size'},
1010 lccn = $biblioitem->{'lccn'},
1011 marc = $biblioitem->{'marc'},
1012 place = $biblioitem->{'place'}";
1014 $sth = $dbh->prepare($query);
1018 return($bibitemnum);
1021 # FIXME - This is in effect identical to &C4::Biblio::newsubject.
1022 # Pick one and stick with it.
1023 # If it's this one, it needs a POD.
1026 my $dbh = C4::Context->dbh;
1027 my $query="insert into bibliosubject (biblionumber) values
1029 my $sth=$dbh->prepare($query);
1035 # FIXME - This is in effect the same as &C4::Biblio::newsubtitle
1036 # Pick one and stick with it.
1037 # If it's this one, it needs a POD.
1039 my ($bibnum, $subtitle) = @_;
1040 my $dbh = C4::Context->dbh;
1041 $subtitle = $dbh->quote($subtitle);
1042 my $query = "insert into bibliosubtitle set
1043 biblionumber = $bibnum,
1044 subtitle = $subtitle";
1045 my $sth = $dbh->prepare($query);
1054 &neworder($biblionumber, $title, $ordnum, $basket, $quantity, $listprice,
1055 $booksellerid, $who, $notes, $bookfund, $biblioitemnumber, $rrp,
1056 $ecost, $gst, $budget, $unitprice, $subscription,
1057 $booksellerinvoicenumber);
1059 Adds a new order to the database. Any argument that isn't described
1060 below is the new value of the field with the same name in the aqorders
1061 table of the Koha database.
1063 C<$ordnum> is a "minimum order number." After adding the new entry to
1064 the aqorders table, C<&neworder> finds the first entry in aqorders
1065 with order number greater than or equal to C<$ordnum>, and adds an
1066 entry to the aqorderbreakdown table, with the order number just found,
1067 and the book fund ID of the newly-added order.
1069 C<$budget> is effectively ignored.
1071 C<$subscription> may be either "yes", or anything else for "no".
1075 # FIXME - This function appears in C4::Catalogue
1077 my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
1078 if ($budget eq 'now'){
1081 $budget="'2001-07-01'";
1088 my $dbh = C4::Context->dbh;
1089 my $query="insert into aqorders (biblionumber,title,basketno,
1090 quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
1091 biblioitemnumber,rrp,ecost,gst,unitprice,subscription,booksellerinvoicenumber)
1094 ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
1095 '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst','$cost',
1096 '$sub','$invoice')";
1097 my $sth=$dbh->prepare($query);
1101 $query="select * from aqorders where
1102 biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
1103 $sth=$dbh->prepare($query);
1105 my $data=$sth->fetchrow_hashref;
1107 $ordnum=$data->{'ordernumber'};
1108 $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
1109 ($ordnum,'$bookfund')";
1110 $sth=$dbh->prepare($query);
1118 &delorder($biblionumber, $ordernumber);
1120 Cancel the order with the given order and biblio numbers. It does not
1121 delete any entries in the aqorders table, it merely marks them as
1124 If there are no items remaining with the given biblionumber,
1125 C<&delorder> also deletes them from the marc_subfield_table and
1126 marc_biblio tables of the Koha database.
1130 # FIXME - This function appears in C4::Catalogue
1132 my ($bibnum,$ordnum)=@_;
1133 my $dbh = C4::Context->dbh;
1134 my $query="update aqorders set datecancellationprinted=now()
1135 where biblionumber='$bibnum' and
1136 ordernumber='$ordnum'";
1137 my $sth=$dbh->prepare($query);
1141 my $count=itemcount($bibnum);
1149 &modorder($title, $ordernumber, $quantity, $listprice,
1150 $biblionumber, $basketno, $supplier, $who, $notes,
1151 $bookfundid, $bibitemnum, $rrp, $ecost, $gst, $budget,
1152 $unitprice, $booksellerinvoicenumber);
1154 Modifies an existing order. Updates the order with order number
1155 C<$ordernumber> and biblionumber C<$biblionumber>. All other arguments
1156 update the fields with the same name in the aqorders table of the Koha
1159 Entries with order number C<$ordernumber> in the aqorderbreakdown
1160 table are also updated to the new book fund ID.
1164 # FIXME - This function appears in C4::Catalogue
1166 my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
1167 my $dbh = C4::Context->dbh;
1168 my $query="update aqorders set title='$title',
1169 quantity='$quantity',listprice='$listprice',basketno='$basketno',
1170 rrp='$rrp',ecost='$ecost',unitprice='$cost',
1171 booksellerinvoicenumber='$invoice'
1173 ordernumber=$ordnum and biblionumber=$bibnum";
1174 my $sth=$dbh->prepare($query);
1178 $query="update aqorderbreakdown set bookfundid=$bookfund where
1179 ordernumber=$ordnum";
1180 $sth=$dbh->prepare($query);
1188 $order = &newordernum();
1190 Finds the next unused order number in the aqorders table of the Koha
1191 database, and returns it.
1195 # FIXME - Race condition
1196 # FIXME - This function appears in C4::Catalogue
1198 my $dbh = C4::Context->dbh;
1199 my $query="Select max(ordernumber) from aqorders";
1200 my $sth=$dbh->prepare($query);
1202 my $data=$sth->fetchrow_arrayref;
1203 my $ordnum=$$data[0];
1211 &receiveorder($biblionumber, $ordernumber, $quantityreceived, $user,
1212 $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
1213 $freight, $bookfund, $rrp);
1215 Updates an order, to reflect the fact that it was received, at least
1216 in part. All arguments not mentioned below update the fields with the
1217 same name in the aqorders table of the Koha database.
1219 Updates the order with bibilionumber C<$biblionumber> and ordernumber
1222 Also updates the book fund ID in the aqorderbreakdown table.
1226 # FIXME - This function appears in C4::Catalogue
1228 my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
1229 my $dbh = C4::Context->dbh;
1230 my $query="update aqorders set quantityreceived='$quantrec',
1231 datereceived=now(),booksellerinvoicenumber='$invoiceno',
1232 biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
1234 where biblionumber=$biblio and ordernumber=$ordnum
1237 my $sth=$dbh->prepare($query);
1240 $query="update aqorderbreakdown set bookfundid=$bookfund where
1241 ordernumber=$ordnum";
1242 $sth=$dbh->prepare($query);
1248 =item updaterecorder
1250 &updaterecorder($biblionumber, $ordernumber, $user, $unitprice,
1253 Updates the order with biblionumber C<$biblionumber> and order number
1254 C<$ordernumber>. C<$bookfundid> is the new value for the book fund ID
1255 in the aqorderbreakdown table of the Koha database. All other
1256 arguments update the fields with the same name in the aqorders table.
1258 C<$user> is ignored.
1262 # FIXME - This function appears in C4::Catalogue
1264 my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
1265 my $dbh = C4::Context->dbh;
1266 my $query="update aqorders set
1267 unitprice='$cost', rrp='$rrp'
1268 where biblionumber=$biblio and ordernumber=$ordnum
1271 my $sth=$dbh->prepare($query);
1274 $query="update aqorderbreakdown set bookfundid=$bookfund where
1275 ordernumber=$ordnum";
1276 $sth=$dbh->prepare($query);
1284 $foreignprice = &curconvert($currency, $localprice);
1286 Converts the price C<$localprice> to foreign currency C<$currency> by
1287 dividing by the exchange rate, and returns the result.
1289 If no exchange rate is found, C<&curconvert> assumes the rate is one
1294 # FIXME - An almost identical version of this function appears in
1297 my ($currency,$price)=@_;
1298 my $dbh = C4::Context->dbh;
1299 my $query="Select rate from currency where currency='$currency'";
1300 my $sth=$dbh->prepare($query);
1302 my $data=$sth->fetchrow_hashref;
1304 my $cur=$data->{'rate'};
1308 $price=$price / $cur; # FIXME - /=
1314 ($count, $currencies) = &getcurrencies();
1316 Returns the list of all known currencies.
1318 C<$count> is the number of elements in C<$currencies>. C<$currencies>
1319 is a reference-to-array; its elements are references-to-hash, whose
1320 keys are the fields from the currency table in the Koha database.
1324 # FIXME - This function appears in C4::Catalogue
1326 my $dbh = C4::Context->dbh;
1327 my $query="Select * from currency";
1328 my $sth=$dbh->prepare($query);
1332 while (my $data=$sth->fetchrow_hashref){
1337 return($i,\@results);
1340 # FIXME - This function appears in C4::Catalogue. Neither one is used.
1343 my $dbh = C4::Context->dbh;
1344 my $query="Select * from currency where currency='$cur'";
1345 my $sth=$dbh->prepare($query);
1348 my $data=$sth->fetchrow_hashref;
1353 =item updatecurrencies
1355 &updatecurrencies($currency, $newrate);
1357 Sets the exchange rate for C<$currency> to be C<$newrate>.
1361 # FIXME - This function appears in C4::Catalogue
1362 sub updatecurrencies {
1363 my ($currency,$rate)=@_;
1364 my $dbh = C4::Context->dbh;
1365 my $query="update currency set rate=$rate where currency='$currency'";
1366 my $sth=$dbh->prepare($query);
1373 &updatesup($bookseller);
1375 Updates the information for a given bookseller. C<$bookseller> is a
1376 reference-to-hash whose keys are the fields of the aqbooksellers table
1377 in the Koha database. It must contain entries for all of the fields.
1378 The entry to modify is determined by C<$bookseller-E<gt>{id}>.
1380 The easiest way to get all of the necessary fields is to look up a
1381 book seller with C<&booksellers>, modify what's necessary, then call
1382 C<&updatesup> with the result.
1386 # FIXME - This function appears in C4::Catalogue
1389 my $dbh = C4::Context->dbh;
1390 my $query="Update aqbooksellers set
1391 name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
1392 address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
1393 phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
1394 contact='$data->{'contact'}',contpos='$data->{'contpos'}',
1395 contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
1396 '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
1397 '$data->{'contnotes'}', active=$data->{'active'},
1398 listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
1399 gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
1400 invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
1401 discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
1402 nocalc='$data->{'nocalc'}'
1403 where id='$data->{'id'}'";
1404 my $sth=$dbh->prepare($query);
1412 $id = &insertsup($bookseller);
1414 Creates a new bookseller. C<$bookseller> is a reference-to-hash whose
1415 keys are the fields of the aqbooksellers table in the Koha database.
1416 All fields must be present.
1418 Returns the ID of the newly-created bookseller.
1422 # FIXME - This function also appears in C4::Catalogue. Pick one and
1426 my $dbh = C4::Context->dbh;
1427 my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
1429 my $data2=$sth->fetchrow_hashref;
1431 $data2->{'max(id)'}++;
1432 $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
1435 $data->{'id'}=$data2->{'max(id)'};
1437 return($data->{'id'});
1440 # FIXME - This is different from &C4::Biblio::newitems, though both
1442 # FIXME - Never used AFAICT. Obsolete.
1443 # Otherwise, this needs a POD.
1445 my ($item, @barcodes) = @_;
1446 my $dbh = C4::Context->dbh;
1447 my $query = "Select max(itemnumber) from items";
1448 my $sth = $dbh->prepare($query);
1454 $data = $sth->fetchrow_hashref;
1455 $itemnumber = $data->{'max(itemnumber)'} + 1;
1458 $item->{'booksellerid'} = $dbh->quote($item->{'booksellerid'});
1459 $item->{'homebranch'} = $dbh->quote($item->{'homebranch'});
1460 $item->{'price'} = $dbh->quote($item->{'price'});
1461 $item->{'replacementprice'} = $dbh->quote($item->{'replacementprice'});
1462 $item->{'itemnotes'} = $dbh->quote($item->{'itemnotes'});
1464 foreach my $barcode (@barcodes) {
1465 $barcode = uc($barcode);
1466 $barcode = $dbh->quote($barcode);
1467 $query = "Insert into items set
1468 itemnumber = $itemnumber,
1469 biblionumber = $item->{'biblionumber'},
1470 biblioitemnumber = $item->{'biblioitemnumber'},
1472 booksellerid = $item->{'booksellerid'},
1473 dateaccessioned = NOW(),
1474 homebranch = $item->{'homebranch'},
1475 holdingbranch = $item->{'homebranch'},
1476 price = $item->{'price'},
1477 replacementprice = $item->{'replacementprice'},
1478 replacementpricedate = NOW(),
1479 itemnotes = $item->{'itemnotes'}";
1481 if ($item->{'loan'}) {
1483 notforloan = $item->{'loan'}";
1486 $sth = $dbh->prepare($query);
1489 $error .= $sth->errstr;
1498 # FIXME - This is the same as &C4::Biblio::Checkitems.
1499 # Pick one and stick with it.
1500 # If it's this one, it needs a POD.
1502 my ($count,@barcodes)=@_;
1503 my $dbh = C4::Context->dbh;
1505 for (my $i=0;$i<$count;$i++){
1506 $barcodes[$i]=uc $barcodes[$i];
1507 my $query="Select * from items where barcode='$barcodes[$i]'";
1508 my $sth=$dbh->prepare($query);
1510 if (my $data=$sth->fetchrow_hashref){
1511 $error.=" Duplicate Barcode: $barcodes[$i]";
1518 # FIXME - This appears to be functionally equivalent to
1519 # &C4::Biblio::moditem.
1520 # Pick one and stick with it.
1521 # If it's this one, it needs a POD.
1523 my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
1524 my $dbh = C4::Context->dbh;
1525 my $query="update items set biblioitemnumber=$bibitemnum,
1526 barcode='$barcode',itemnotes='$notes'
1527 where itemnumber=$itemnum";
1528 if ($barcode eq ''){
1529 $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum";
1532 $query="update items set biblioitemnumber=$bibitemnum,
1533 barcode='$barcode',itemnotes='$notes',homebranch='$homebranch',
1534 itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum";
1536 if ($replacement ne ''){
1537 $query=~ s/ where/,replacementprice='$replacement' where/;
1540 my $sth=$dbh->prepare($query);
1545 # FIXME - This function appears in C4::Catalogue. Neither one is used
1547 my($price,$rrp,$itemnum)=@_;
1548 my $dbh = C4::Context->dbh;
1549 my $query="update items set price='$price',replacementprice='$rrp'
1550 where itemnumber=$itemnum";
1551 my $sth=$dbh->prepare($query);
1556 # FIXME - This is identical to &C4::Biblio::countitems.
1557 # Pick one and stick with it.
1558 # If it's this one, it needs a POD.
1560 my ($bibitemnum)=@_;
1561 my $dbh = C4::Context->dbh;
1562 my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'";
1563 my $sth=$dbh->prepare($query);
1565 my $data=$sth->fetchrow_hashref;
1567 return($data->{'count(*)'});
1570 # FIXME - This function appears in C4::Catalogue. Neither one is used.
1572 my ($biblionumber)=@_;
1573 my $dbh = C4::Context->dbh;
1574 my $query="Select * from biblioitems,items,itemtypes where
1575 biblioitems.biblionumber=$biblionumber
1576 and biblioitems.biblioitemnumber=items.biblioitemnumber and
1577 itemtypes.itemtype=biblioitems.itemtype
1578 order by items.biblioitemnumber";
1579 my $sth=$dbh->prepare($query);
1583 while (my $data=$sth->fetchrow_hashref){
1591 # FIXME - This function appears in C4::Catalogue. Neither one is used
1593 my ($bibitemnum,$itemtype)=@_;
1594 my $dbh = C4::Context->dbh;
1595 my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
1596 and itemtype='$itemtype'";
1597 my $sth=$dbh->prepare($query);
1600 if (my $data=$sth->fetchrow_hashref){
1607 # FIXME - A nearly-identical function, appears in C4::Biblio
1608 # Pick one and stick with it.
1609 # If it's this one, it needs a POD.
1612 my $dbh = C4::Context->dbh;
1613 my $query="select * from items where itemnumber=$itemnum";
1614 my $sth=$dbh->prepare($query);
1616 my @data=$sth->fetchrow_array;
1618 $query="Insert into deleteditems values (";
1619 foreach my $temp (@data){
1620 $query=$query."'$temp',"; # FIXME - .=
1624 $sth=$dbh->prepare($query);
1627 $query = "Delete from items where itemnumber=$itemnum";
1628 $sth=$dbh->prepare($query);
1633 # FIXME - This is functionally identical to &C4::Biblio::deletebiblioitem.
1634 # Pick one and stick with it.
1635 # If it's this one, it needs a POD.
1636 sub deletebiblioitem {
1637 my ($biblioitemnumber) = @_;
1638 my $dbh = C4::Context->dbh;
1639 my $query = "Select * from biblioitems
1640 where biblioitemnumber = $biblioitemnumber";
1641 my $sth = $dbh->prepare($query);
1646 if (@results = $sth->fetchrow_array) {
1648 $query = "Insert into deletedbiblioitems values (";
1649 foreach my $value (@results) {
1650 $value = $dbh->quote($value);
1651 $query .= "$value,";
1654 $query =~ s/\,$/\)/;
1658 DELETE FROM biblioitems
1659 WHERE biblioitemnumber = $biblioitemnumber
1665 # Now delete all the items attached to the biblioitem
1667 $query = "Select * from items where biblioitemnumber = $biblioitemnumber";
1668 $sth = $dbh->prepare($query);
1672 while (@results = $sth->fetchrow_array) {
1674 $query = "Insert into deleteditems values (";
1675 foreach my $value (@results) {
1676 $value = $dbh->quote($value);
1677 $query .= "$value,";
1680 $query =~ s/\,$/\)/;
1684 $sth->finish; # FIXME - This is bogus, isn't it?
1688 WHERE biblioitemnumber = $biblioitemnumber
1691 } # sub deletebiblioitem
1693 # FIXME - This is functionally identical to &C4::Biblio::delbiblio.
1694 # Pick one and stick with it.
1695 # If it's this one, it needs a POD.
1698 my $dbh = C4::Context->dbh;
1699 my $query="select * from biblio where biblionumber=$biblio";
1700 my $sth=$dbh->prepare($query);
1702 if (my @data=$sth->fetchrow_array){
1704 $query="Insert into deletedbiblio values (";
1705 foreach my $temp (@data){
1706 $temp=~ s/\'/\\\'/g;
1707 $query=$query."'$temp',"; # FIXME - .=
1711 $sth=$dbh->prepare($query);
1714 $query = "Delete from biblio where biblionumber=$biblio";
1715 $sth=$dbh->prepare($query);
1723 # FIXME - There's also a C4::Biblio::getitemtypes.
1724 # FIXME - Never used AFAICT. This function is obsolete.
1725 # If not, it needs a POD.
1727 my $dbh = C4::Context->dbh;
1728 my $query = "select * from itemtypes";
1729 my $sth = $dbh->prepare($query);
1730 # || die "Cannot prepare $query" . $dbh->errstr;
1735 # || die "Cannot execute $query\n" . $sth->errstr;
1736 while (my $data = $sth->fetchrow_hashref) {
1737 $results[$count] = $data;
1742 return($count, @results);
1743 } # sub getitemtypes
1745 # FIXME - This is identical to &C4::Biblio::getitemtypes.
1746 # Pick one and stick with it.
1747 # If it's this one, it needs a POD.
1749 my ($biblionumber) = @_;
1750 my $dbh = C4::Context->dbh;
1751 my $query = "Select * from biblio where biblionumber = $biblionumber";
1752 my $sth = $dbh->prepare($query);
1753 # || die "Cannot prepare $query\n" . $dbh->errstr;
1758 # || die "Cannot execute $query\n" . $sth->errstr;
1759 while (my $data = $sth->fetchrow_hashref) {
1760 $results[$count] = $data;
1765 return($count, @results);
1768 # FIXME - There's also a &C4::Biblio::getbiblioitem.
1769 # Pick one and stick with it.
1770 # If it's this one, it needs a POD.
1772 my ($biblioitemnum) = @_;
1773 my $dbh = C4::Context->dbh;
1774 my $query = "Select * from biblioitems where
1775 biblioitemnumber = $biblioitemnum";
1776 my $sth = $dbh->prepare($query);
1782 while (my $data = $sth->fetchrow_hashref) {
1783 $results[$count] = $data;
1788 return($count, @results);
1789 } # sub getbiblioitem
1791 # FIXME - This is identical to &C4::Biblio::getbiblioitem.
1792 # Pick one and stick with it.
1793 # If it's this one, it needs a POD.
1794 sub getbiblioitembybiblionumber {
1795 my ($biblionumber) = @_;
1796 my $dbh = C4::Context->dbh;
1797 my $query = "Select * from biblioitems where biblionumber =
1799 my $sth = $dbh->prepare($query);
1805 while (my $data = $sth->fetchrow_hashref) {
1806 $results[$count] = $data;
1811 return($count, @results);
1814 # FIXME - This is identical to
1815 # &C4::Biblio::getbiblioitembybiblionumber.
1816 # Pick one and stick with it.
1817 # If it's this one, it needs a POD.
1818 sub getitemsbybiblioitem {
1819 my ($biblioitemnum) = @_;
1820 my $dbh = C4::Context->dbh;
1821 my $query = "Select * from items, biblio where
1822 biblio.biblionumber = items.biblionumber and biblioitemnumber
1824 my $sth = $dbh->prepare($query);
1825 # || die "Cannot prepare $query\n" . $dbh->errstr;
1830 # || die "Cannot execute $query\n" . $sth->errstr;
1831 while (my $data = $sth->fetchrow_hashref) {
1832 $results[$count] = $data;
1837 return($count, @results);
1838 } # sub getitemsbybiblioitem
1840 # FIXME - This is identical to &C4::Biblio::isbnsearch.
1841 # Pick one and stick with it.
1842 # If it's this one, it needs a POD.
1845 my $dbh = C4::Context->dbh;
1851 $isbn = $dbh->quote($isbn);
1852 $query = "Select biblio.* from biblio, biblioitems where
1853 biblio.biblionumber = biblioitems.biblionumber
1855 $sth = $dbh->prepare($query);
1858 while (my $data = $sth->fetchrow_hashref) {
1859 $results[$count] = $data;
1864 return($count, @results);
1869 ($count, @results) = &websitesearch($keywordlist);
1871 Looks up biblioitems by URL.
1873 C<$keywordlist> is a space-separated list of search terms.
1874 C<&websitesearch> returns those biblioitems whose URL contains at
1875 least one of the search terms.
1877 C<$count> is the number of elements in C<@results>. C<@results> is an
1878 array of references-to-hash, whose keys are the fields of the biblio
1879 and biblioitems tables in the Koha database.
1883 # FIXME - This function appears in C4::Catalogue
1885 my ($keywordlist) = @_;
1886 my $dbh = C4::Context->dbh;
1887 my $query = "Select distinct biblio.* from biblio, biblioitems where
1888 biblio.biblionumber = biblioitems.biblionumber and (";
1892 my @keywords = split(/ +/, $keywordlist);
1893 my $keyword = shift(@keywords);
1895 $keyword =~ s/%/\\%/g;
1896 $keyword =~ s/_/\\_/;
1897 $keyword = "%" . $keyword . "%";
1898 $keyword = $dbh->quote($keyword);
1899 $query .= " (url like $keyword)";
1901 foreach $keyword (@keywords) {
1902 $keyword =~ s/%/\\%/;
1903 $keyword =~ s/_/\\_/;
1904 $keyword = "%" . $keyword . "%";
1905 $keyword = $dbh->quote($keyword);
1906 $query .= " or (url like $keyword)";
1910 $sth = $dbh->prepare($query);
1913 while (my $data = $sth->fetchrow_hashref) {
1914 $results[$count] = $data;
1919 return($count, @results);
1920 } # sub websitesearch
1924 &addwebsite($website);
1926 Adds a new web site. C<$website> is a reference-to-hash, with the keys
1927 C<biblionumber>, C<title>, C<description>, and C<url>. All of these
1932 # FIXME - This function appears in C4::Catalogue
1935 my $dbh = C4::Context->dbh;
1937 $website->{'biblionumber'} = $dbh->quote($website->{'biblionumber'});
1938 $website->{'title'} = $dbh->quote($website->{'title'});
1939 $website->{'description'} = $dbh->quote($website->{'description'});
1940 $website->{'url'} = $dbh->quote($website->{'url'});
1943 INSERT INTO websites
1944 SET biblionumber = $website->{'biblionumber'},
1945 title = $website->{'title'},
1946 description = $website->{'description'},
1947 url = $website->{'url'}
1953 &updatewebsite($website);
1955 Updates an existing web site. C<$website> is a reference-to-hash with
1956 the keys C<websitenumber>, C<title>, C<description>, and C<url>. All
1957 of these are mandatory. C<$website-E<gt>{websitenumber}> identifies
1958 the entry to update.
1962 # FIXME - This function appears in C4::Catalogue
1965 my $dbh = C4::Context->dbh;
1967 $website->{'title'} = $dbh->quote($website->{'title'});
1968 $website->{'description'} = $dbh->quote($website->{'description'});
1969 $website->{'url'} = $dbh->quote($website->{'url'});
1973 SET title = $website->{'title'},
1974 description = $website->{'description'},
1975 url = $website->{'url'}
1976 where websitenumber = $website->{'websitenumber'}
1978 } # sub updatewebsite
1982 &deletewebsite($websitenumber);
1984 Deletes the web site with number C<$websitenumber>.
1988 # FIXME - This function appears in C4::Catalogue
1990 my ($websitenumber) = @_;
1991 my $dbh = C4::Context->dbh;
1994 DELETE FROM websites
1995 WHERE websitenumber = $websitenumber
1997 } # sub deletewebsite
2000 END { } # module clean-up code here (global destructor)
2009 Koha Developement team <info@koha.org>