1 package C4::Catalogue; #assumes C4/Acquisitions.pm
3 # Continue working on updateItem!!!!!!
5 # updateItem is looking not bad. Need to add addSubfield and deleteSubfield
8 # Trying to track down $dbh's that aren't disconnected....
13 # Copyright 2000-2002 Katipo Communications
15 # This file is part of Koha.
17 # Koha is free software; you can redistribute it and/or modify it under the
18 # terms of the GNU General Public License as published by the Free Software
19 # Foundation; either version 2 of the License, or (at your option) any later
22 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
23 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
24 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
26 # You should have received a copy of the GNU General Public License along with
27 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
28 # Suite 330, Boston, MA 02111-1307 USA
36 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
38 # set the version for version checking
63 &getorders &getallorders &getrecorders
64 &getorder &neworder &delorder
66 &modorder &getsingleorder &invoice &receiveorder
67 &updaterecorder &newordernum
69 &bookfunds &bookfundbreakdown &updatecost
70 &curconvert &getcurrencies &updatecurrencies &getcurrency
72 &findall &needsmod &branches &updatesup &insertsup
73 &bookseller &breakdown &checkitems
74 &websitesearch &addwebsite &updatewebsite &deletewebsite
76 %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
78 # your exported package globals go here,
79 # as well as any optionally exported functions
81 @EXPORT_OK = qw($Var1 %Hashit); # FIXME - Unused
84 # non-exported package globals go here
85 use vars qw(@more $stuff); # FIXME - Unused
87 # initalize package globals, first exported ones
93 # then the others (which are still accessible as $Some::Module::stuff)
98 # all file-scoped lexicals must be created before
99 # the functions below that use them.
101 # file-private lexicals go here
104 my %secret_hash = ();
106 # here's a file-private function as a closure,
107 # callable as &$priv_func; it cannot be prototyped.
109 my $priv_func = sub {
113 # make all your functions, whether exported or not;
125 ($count, @orders) = &basket($basketnumber, $booksellerID);
127 Looks up the pending (non-cancelled) orders with the given basket
128 number. If C<$booksellerID> is non-empty, only orders from that seller
131 C<&basket> returns a two-element array. C<@orders> is an array of
132 references-to-hash, whose keys are the fields from the aqorders,
133 biblio, and biblioitems tables in the Koha database. C<$count> is the
134 number of elements in C<@orders>.
139 my ($basketno,$supplier)=@_;
141 my $query="Select *,biblio.title from aqorders,biblio,biblioitems
142 where basketno='$basketno'
143 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
144 =aqorders.biblioitemnumber
145 and (datecancellationprinted is NULL or datecancellationprinted =
147 if ($supplier ne ''){
148 $query.=" and aqorders.booksellerid='$supplier'";
150 $query.=" group by aqorders.ordernumber";
151 my $sth=$dbh->prepare($query);
156 while (my $data=$sth->fetchrow_hashref){
167 $basket = &newbasket();
169 Finds the next unused basket number in the aqorders table of the Koha
170 database, and returns it.
174 # FIXME - There's a race condition here:
176 # B calls &newbasket (gets the same number as A)
177 # A updates the basket
178 # B updates the basket, and clobbers A's result.
179 # A better approach might be to create a dummy order (with, say,
180 # requisitionedby == "Dummy-$$" or notes == "dummy <time> <pid>"), and
181 # see which basket number it gets. Then have a cron job periodically
182 # remove out-of-date dummy orders.
185 my $query="Select max(basketno) from aqorders";
186 my $sth=$dbh->prepare($query);
188 my $data=$sth->fetchrow_arrayref;
189 my $basket=$$data[0];
198 &neworder($biblionumber, $title, $ordnum, $basket, $quantity, $listprice,
199 $booksellerid, $who, $notes, $bookfund, $biblioitemnumber, $rrp,
200 $ecost, $gst, $budget, $unitprice, $subscription,
201 $booksellerinvoicenumber);
203 Adds a new order to the database. Any argument that isn't described
204 below is the new value of the field with the same name in the aqorders
205 table of the Koha database.
207 C<$ordnum> is a "minimum order number." After adding the new entry to
208 the aqorders table, C<&neworder> finds the first entry in aqorders
209 with order number greater than or equal to C<$ordnum>, and adds an
210 entry to the aqorderbreakdown table, with the order number just found,
211 and the book fund ID of the newly-added order.
213 C<$budget> is effectively ignored.
215 C<$subscription> may be either "yes", or anything else for "no".
220 my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
221 if ($budget eq 'now'){
224 $budget="'2001-07-01'";
232 my $query="insert into aqorders (biblionumber,title,basketno,
233 quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
234 biblioitemnumber,rrp,ecost,gst,unitprice,subscription,booksellerinvoicenumber)
237 ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
238 '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst','$cost',
240 my $sth=$dbh->prepare($query);
244 $query="select * from aqorders where
245 biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
246 $sth=$dbh->prepare($query);
248 my $data=$sth->fetchrow_hashref;
250 $ordnum=$data->{'ordernumber'};
251 $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
252 ($ordnum,'$bookfund')";
253 $sth=$dbh->prepare($query);
262 &delorder($biblionumber, $ordernumber);
264 Cancel the order with the given order and biblio numbers. It does not
265 delete any entries in the aqorders table, it merely marks them as
268 If there are no items remaining with the given biblionumber,
269 C<&delorder> also deletes them from the marc_subfield_table and
270 marc_biblio tables of the Koha database.
275 my ($bibnum,$ordnum)=@_;
277 my $query="update aqorders set datecancellationprinted=now()
278 where biblionumber='$bibnum' and
279 ordernumber='$ordnum'";
280 my $sth=$dbh->prepare($query);
284 my $count=itemcount($bibnum);
286 delbiblio($bibnum); # This is C4::Biblio::delbiblio, not
287 # C4::Acquisitions::delbiblio
294 &modorder($title, $ordernumber, $quantity, $listprice,
295 $biblionumber, $basketno, $supplier, $who, $notes,
296 $bookfundid, $bibitemnum, $rrp, $ecost, $gst, $budget,
297 $unitprice, $booksellerinvoicenumber);
299 Modifies an existing order. Updates the order with order number
300 C<$ordernumber> and biblionumber C<$biblionumber>. All other arguments
301 update the fields with the same name in the aqorders table of the Koha
304 Entries with order number C<$ordernumber> in the aqorderbreakdown
305 table are also updated to the new book fund ID.
309 # FIXME - This function appears in C4::Acquisitions
311 my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
313 my $query="update aqorders set title='$title',
314 quantity='$quantity',listprice='$listprice',basketno='$basketno',
315 rrp='$rrp',ecost='$ecost',unitprice='$cost',
316 booksellerinvoicenumber='$invoice'
318 ordernumber=$ordnum and biblionumber=$bibnum";
319 my $sth=$dbh->prepare($query);
323 $query="update aqorderbreakdown set bookfundid=$bookfund where
324 ordernumber=$ordnum";
325 $sth=$dbh->prepare($query);
334 $order = &newordernum();
336 Finds the next unused order number in the aqorders table of the Koha
337 database, and returns it.
341 # FIXME - Race condition
344 my $query="Select max(ordernumber) from aqorders";
345 my $sth=$dbh->prepare($query);
347 my $data=$sth->fetchrow_arrayref;
348 my $ordnum=$$data[0];
357 &receiveorder($biblionumber, $ordernumber, $quantityreceived, $user,
358 $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
359 $freight, $bookfund, $rrp);
361 Updates an order, to reflect the fact that it was received, at least
362 in part. All arguments not mentioned below update the fields with the
363 same name in the aqorders table of the Koha database.
365 Updates the order with bibilionumber C<$biblionumber> and ordernumber
368 Also updates the book fund ID in the aqorderbreakdown table.
373 my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
375 my $query="update aqorders set quantityreceived='$quantrec',
376 datereceived=now(),booksellerinvoicenumber='$invoiceno',
377 biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
379 where biblionumber=$biblio and ordernumber=$ordnum
382 my $sth=$dbh->prepare($query);
385 $query="update aqorderbreakdown set bookfundid=$bookfund where
386 ordernumber=$ordnum";
387 $sth=$dbh->prepare($query);
396 &updaterecorder($biblionumber, $ordernumber, $user, $unitprice,
399 Updates the order with biblionumber C<$biblionumber> and order number
400 C<$ordernumber>. C<$bookfundid> is the new value for the book fund ID
401 in the aqorderbreakdown table of the Koha database. All other
402 arguments update the fields with the same name in the aqorders table.
409 my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
411 my $query="update aqorders set
412 unitprice='$cost', rrp='$rrp'
413 where biblionumber=$biblio and ordernumber=$ordnum
416 my $sth=$dbh->prepare($query);
419 $query="update aqorderbreakdown set bookfundid=$bookfund where
420 ordernumber=$ordnum";
421 $sth=$dbh->prepare($query);
436 ($count, $orders) = &getorders($booksellerid);
438 Finds pending orders from the bookseller with the given ID. Ignores
439 completed and cancelled orders.
441 C<$count> is the number of elements in C<@{$orders}>.
443 C<$orders> is a reference-to-array; each element is a
444 reference-to-hash with the following fields:
450 Gives the number of orders in with this basket number.
452 =item C<authorizedby>
458 These give the value of the corresponding field in the aqorders table
459 of the Koha database.
463 Results are ordered from most to least recent.
470 my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where
471 booksellerid='$supplierid' and (quantity > quantityreceived or
472 quantityreceived is NULL)
473 and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
474 $query.=" group by basketno order by entrydate desc";
476 my $sth=$dbh->prepare($query);
480 while (my $data=$sth->fetchrow_hashref){
486 return ($i,\@results);
491 ($order, $ordernumber) = &getorder($biblioitemnumber, $biblionumber);
493 Looks up the order with the given biblionumber and biblioitemnumber.
495 Returns a two-element array. C<$ordernumber> is the order number.
496 C<$order> is a reference-to-hash describing the order; its keys are
497 fields from the biblio, biblioitems, aqorders, and aqorderbreakdown
498 tables of the Koha database.
505 my $query="Select ordernumber from aqorders where biblionumber=$bib and
506 biblioitemnumber='$bi'";
507 my $sth=$dbh->prepare($query);
509 # FIXME - Use fetchrow_array(), since we're only interested in the one
511 my $ordnum=$sth->fetchrow_hashref;
513 my $order=getsingleorder($ordnum->{'ordernumber'});
516 return ($order,$ordnum->{'ordernumber'});
521 $order = &getsingleorder($ordernumber);
523 Looks up an order by order number.
525 Returns a reference-to-hash describing the order. The keys of
526 C<$order> are fields from the biblio, biblioitems, aqorders, and
527 aqorderbreakdown tables of the Koha database.
531 # FIXME - This is basically the same thing as
532 # C4::Acquisitions::getsingleorder. Figure out where it goes and nuke
537 my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown
538 where aqorders.ordernumber='$ordnum'
539 and biblio.biblionumber=aqorders.biblionumber and
540 biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
541 aqorders.ordernumber=aqorderbreakdown.ordernumber";
542 my $sth=$dbh->prepare($query);
544 my $data=$sth->fetchrow_hashref;
552 ($count, @results) = &getallorders($booksellerid);
554 Looks up all of the pending orders from the supplier with the given
555 bookseller ID. Ignores cancelled and completed orders.
557 C<$count> is the number of elements in C<@results>. C<@results> is an
558 array of references-to-hash. The keys of each element are fields from
559 the aqorders, biblio, and biblioitems tables of the Koha database.
561 C<@results> is sorted alphabetically by book title.
566 #gets all orders from a certain supplier, orders them alphabetically
569 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
570 and (cancelledby is NULL or cancelledby = '')
571 and (quantityreceived < quantity or quantityreceived is NULL)
572 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
573 aqorders.biblioitemnumber
574 group by aqorders.biblioitemnumber
579 my $sth=$dbh->prepare($query);
581 while (my $data=$sth->fetchrow_hashref){
592 #gets all orders from a certain supplier, orders them alphabetically
595 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
596 and (cancelledby is NULL or cancelledby = '')
597 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
598 aqorders.biblioitemnumber and
599 aqorders.quantityreceived>0
600 and aqorders.datereceived >=now()
601 group by aqorders.biblioitemnumber
606 my $sth=$dbh->prepare($query);
608 while (my $data=$sth->fetchrow_hashref){
619 ($count, @results) = &ordersearch($search, $biblionumber, $complete);
623 C<$search> may take one of several forms: if it is an ISBN,
624 C<&ordersearch> returns orders with that ISBN. If C<$search> is an
625 order number, C<&ordersearch> returns orders with that order number
626 and biblionumber C<$biblionumber>. Otherwise, C<$search> is considered
627 to be a space-separated list of search terms; in this case, all of the
628 terms must appear in the title (matching the beginning of title
631 If C<$complete> is C<yes>, the results will include only completed
632 orders. In any case, C<&ordersearch> ignores cancelled orders.
634 C<&ordersearch> returns an array. C<$count> is the number of elements
635 in C<@results>. C<@results> is an array of references-to-hash with the
653 my ($search,$biblio,$catview) = @_;
655 my $query = "Select *,biblio.title from aqorders,biblioitems,biblio
656 where aqorders.biblioitemnumber = biblioitems.biblioitemnumber
657 and biblio.biblionumber=aqorders.biblionumber
658 and ((datecancellationprinted is NULL)
659 or (datecancellationprinted = '0000-00-00'))
661 my @data = split(' ',$search);
663 for (my $i = 0; $i < $count; $i++) {
664 $query .= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
667 # FIXME - Redo this properly instead of hacking off the
669 $query.=" ) or biblioitems.isbn='$search'
670 or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
671 if ($catview ne 'yes'){
672 $query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
674 $query.=" group by aqorders.ordernumber";
675 my $sth=$dbh->prepare($query);
679 while (my $data=$sth->fetchrow_hashref){
680 my $sth2=$dbh->prepare("Select * from biblio where
681 biblionumber='$data->{'biblionumber'}'");
683 my $data2=$sth2->fetchrow_hashref;
685 $data->{'author'}=$data2->{'author'};
686 $data->{'seriestitle'}=$data2->{'seriestitle'};
687 $sth2=$dbh->prepare("Select * from aqorderbreakdown where
688 ordernumber=$data->{'ordernumber'}");
690 $data2=$sth2->fetchrow_hashref;
692 $data->{'branchcode'}=$data2->{'branchcode'};
693 $data->{'bookfundid'}=$data2->{'bookfundid'};
709 ($count, @results) = &invoice($booksellerinvoicenumber);
711 Looks up orders by invoice number.
713 Returns an array. C<$count> is the number of elements in C<@results>.
714 C<@results> is an array of references-to-hash; the keys of each
715 elements are fields from the aqorders, biblio, and biblioitems tables
716 of the Koha database.
723 my $query="Select * from aqorders,biblio,biblioitems where
724 booksellerinvoicenumber='$invoice'
725 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
726 aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
729 my $sth=$dbh->prepare($query);
731 while (my $data=$sth->fetchrow_hashref){
742 ($count, @results) = &bookfunds();
744 Returns a list of all book funds.
746 C<$count> is the number of elements in C<@results>. C<@results> is an
747 array of references-to-hash, whose keys are fields from the aqbookfund
748 and aqbudget tables of the Koha database. Results are ordered
749 alphabetically by book fund name.
755 my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
757 group by aqbookfund.bookfundid order by bookfundname";
758 my $sth=$dbh->prepare($query);
762 while (my $data=$sth->fetchrow_hashref){
771 # FIXME - POD. I can't figure out what this function is doing. Then
772 # again, I don't think it's being used (anymore).
773 sub bookfundbreakdown {
776 my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
777 from aqorders,aqorderbreakdown where bookfundid='$id' and
778 aqorders.ordernumber=aqorderbreakdown.ordernumber
779 and (datecancellationprinted is NULL or
780 datecancellationprinted='0000-00-00')";
781 my $sth=$dbh->prepare($query);
785 while (my $data=$sth->fetchrow_hashref){
786 if ($data->{'subscription'} == 1){
787 $spent+=$data->{'quantity'}*$data->{'unitprice'};
789 my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
790 $comtd+=($data->{'ecost'})*$leftover;
791 $spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
796 return($spent,$comtd);
801 $foreignprice = &curconvert($currency, $localprice);
803 Converts the price C<$localprice> to foreign currency C<$currency> by
804 dividing by the exchange rate, and returns the result.
806 If no exchange rate is found, C<&curconvert> assumes the rate is one
812 my ($currency,$price)=@_;
814 my $query="Select rate from currency where currency='$currency'";
815 my $sth=$dbh->prepare($query);
817 my $data=$sth->fetchrow_hashref;
820 my $cur=$data->{'rate'};
824 my $price=$price / $cur;
830 ($count, $currencies) = &getcurrencies();
832 Returns the list of all known currencies.
834 C<$count> is the number of elements in C<$currencies>. C<$currencies>
835 is a reference-to-array; its elements are references-to-hash, whose
836 keys are the fields from the currency table in the Koha database.
842 my $query="Select * from currency";
843 my $sth=$dbh->prepare($query);
847 while (my $data=$sth->fetchrow_hashref){
853 return($i,\@results);
860 my $query="Select * from currency where currency='$cur'";
861 my $sth=$dbh->prepare($query);
864 my $data=$sth->fetchrow_hashref;
870 =item updatecurrencies
872 &updatecurrencies($currency, $newrate);
874 Sets the exchange rate for C<$currency> to be C<$newrate>.
878 sub updatecurrencies {
879 my ($currency,$rate)=@_;
881 my $query="update currency set rate=$rate where currency='$currency'";
882 my $sth=$dbh->prepare($query);
888 # FIXME - Identical to &C4::Acquisitions::updatecost. Neither one is
891 my($price,$rrp,$itemnum)=@_;
893 my $query="update items set price='$price',replacementprice='$rrp'
894 where itemnumber=$itemnum";
895 my $sth=$dbh->prepare($query);
909 ($count, @results) = &bookseller($searchstring);
911 Looks up a book seller. C<$searchstring> may be either a book seller
912 ID, or a string to look for in the book seller's name.
914 C<$count> is the number of elements in C<@results>. C<@results> is an
915 array of references-to-hash, whose keys are the fields of of the
916 aqbooksellers table in the Koha database.
921 my ($searchstring)=@_;
923 my $query="Select * from aqbooksellers where name like '%$searchstring%' or
924 id = '$searchstring'";
925 my $sth=$dbh->prepare($query);
929 while (my $data=$sth->fetchrow_hashref){
940 ($count, $results) = &breakdown($ordernumber);
942 Looks up an order by order ID, and returns its breakdown.
944 C<$count> is the number of elements in C<$results>. C<$results> is a
945 reference-to-array; its elements are references-to-hash, whose keys
946 are the fields of the aqorderbreakdown table in the Koha database.
953 my $query="Select * from aqorderbreakdown where ordernumber='$id'";
954 my $sth=$dbh->prepare($query);
958 while (my $data=$sth->fetchrow_hashref){
964 return($i,\@results);
969 ($count, @results) = &branches();
971 Returns a list of all library branches.
973 C<$count> is the number of elements in C<@results>. C<@results> is an
974 array of references-to-hash, whose keys are the fields of the branches
975 table of the Koha database.
981 my $query = "Select * from branches";
982 my $sth = $dbh->prepare($query);
987 while (my $data = $sth->fetchrow_hashref) {
988 $results[$i] = $data;
994 return($i, @results);
999 my ($biblionumber)=@_;
1001 my $query="Select * from biblioitems,items,itemtypes where
1002 biblioitems.biblionumber=$biblionumber
1003 and biblioitems.biblioitemnumber=items.biblioitemnumber and
1004 itemtypes.itemtype=biblioitems.itemtype
1005 order by items.biblioitemnumber";
1006 my $sth=$dbh->prepare($query);
1010 while (my $data=$sth->fetchrow_hashref){
1019 # FIXME - Never used
1021 my ($bibitemnum,$itemtype)=@_;
1023 my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
1024 and itemtype='$itemtype'";
1025 my $sth=$dbh->prepare($query);
1028 if (my $data=$sth->fetchrow_hashref){
1038 &updatesup($bookseller);
1040 Updates the information for a given bookseller. C<$bookseller> is a
1041 reference-to-hash whose keys are the fields of the aqbooksellers table
1042 in the Koha database. It must contain entries for all of the fields.
1043 The entry to modify is determined by C<$bookseller-E<gt>{id}>.
1045 The easiest way to get all of the necessary fields is to look up a
1046 book seller with C<&booksellers>, modify what's necessary, then call
1047 C<&updatesup> with the result.
1054 my $query="Update aqbooksellers set
1055 name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
1056 address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
1057 phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
1058 contact='$data->{'contact'}',contpos='$data->{'contpos'}',
1059 contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
1060 '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
1061 '$data->{'contnotes'}', active=$data->{'active'},
1062 listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
1063 gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
1064 invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
1065 discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
1066 nocalc='$data->{'nocalc'}'
1067 where id='$data->{'id'}'";
1068 my $sth=$dbh->prepare($query);
1077 $id = &insertsup($bookseller);
1079 Creates a new bookseller. C<$bookseller> is a reference-to-hash whose
1080 keys are the fields of the aqbooksellers table in the Koha database.
1081 All fields must be present.
1083 Returns the ID of the newly-created bookseller.
1090 my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
1092 my $data2=$sth->fetchrow_hashref;
1094 $data2->{'max(id)'}++;
1095 $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
1098 $data->{'id'}=$data2->{'max(id)'};
1101 return($data->{'id'});
1106 ($count, @results) = &websitesearch($keywordlist);
1108 Looks up biblioitems by URL.
1110 C<$keywordlist> is a space-separated list of search terms.
1111 C<&websitesearch> returns those biblioitems whose URL contains at
1112 least one of the search terms.
1114 C<$count> is the number of elements in C<@results>. C<@results> is an
1115 array of references-to-hash, whose keys are the fields of the biblio
1116 and biblioitems tables in the Koha database.
1121 my ($keywordlist) = @_;
1122 my $dbh = C4Connect;
1123 my $query = "Select distinct biblio.* from biblio, biblioitems where
1124 biblio.biblionumber = biblioitems.biblionumber and (";
1128 my @keywords = split(/ +/, $keywordlist);
1129 my $keyword = shift(@keywords);
1132 # $query .= join(" and ",
1133 # apply { url like "%$_%" } @keywords
1135 $keyword =~ s/%/\\%/g;
1136 $keyword =~ s/_/\\_/;
1137 $keyword = "%" . $keyword . "%";
1138 $keyword = $dbh->quote($keyword);
1139 $query .= " (url like $keyword)";
1141 foreach $keyword (@keywords) {
1142 $keyword =~ s/%/\\%/;
1143 $keyword =~ s/_/\\_/;
1144 $keyword = "%" . $keyword . "%";
1145 $keyword = $dbh->quote($keyword);
1146 $query .= " or (url like $keyword)";
1150 $sth = $dbh->prepare($query);
1153 while (my $data = $sth->fetchrow_hashref) {
1154 $results[$count] = $data;
1160 return($count, @results);
1161 } # sub websitesearch
1165 &addwebsite($website);
1167 Adds a new web site. C<$website> is a reference-to-hash, with the keys
1168 C<biblionumber>, C<title>, C<description>, and C<url>. All of these
1175 my $dbh = C4Connect;
1179 # for (qw( biblionumber title description url )) # and any others
1181 # $website->{$_} = $dbh->quote($_);
1183 # Perhaps extend this to building the query as well. This might allow
1184 # some of the fields to be optional.
1185 $website->{'biblionumber'} = $dbh->quote($website->{'biblionumber'});
1186 $website->{'title'} = $dbh->quote($website->{'title'});
1187 $website->{'description'} = $dbh->quote($website->{'description'});
1188 $website->{'url'} = $dbh->quote($website->{'url'});
1190 $query = "Insert into websites set
1191 biblionumber = $website->{'biblionumber'},
1192 title = $website->{'title'},
1193 description = $website->{'description'},
1194 url = $website->{'url'}";
1203 &updatewebsite($website);
1205 Updates an existing web site. C<$website> is a reference-to-hash with
1206 the keys C<websitenumber>, C<title>, C<description>, and C<url>. All
1207 of these are mandatory. C<$website-E<gt>{websitenumber}> identifies
1208 the entry to update.
1214 my $dbh = C4Connect;
1217 $website->{'title'} = $dbh->quote($website->{'title'});
1218 $website->{'description'} = $dbh->quote($website->{'description'});
1219 $website->{'url'} = $dbh->quote($website->{'url'});
1221 $query = "Update websites set
1222 title = $website->{'title'},
1223 description = $website->{'description'},
1224 url = $website->{'url'}
1225 where websitenumber = $website->{'websitenumber'}";
1230 } # sub updatewebsite
1234 &deletewebsite($websitenumber);
1236 Deletes the web site with number C<$websitenumber>.
1241 my ($websitenumber) = @_;
1242 my $dbh = C4Connect;
1243 my $query = "Delete from websites where websitenumber = $websitenumber";
1248 } # sub deletewebsite
1250 END { } # module clean-up code here (global destructor)
1259 Koha Developement team <info@koha.org>