Bug fixes to get the new acqui.simple system working.
[koha.git] / C4 / Acquisitions.pm
1 package C4::Acquisitions; #asummes C4/Acquisitions.pm
2
3 use strict;
4 require Exporter;
5 use C4::Database;
6
7 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
8
9 # set the version for version checking
10 $VERSION = 0.01;
11
12 @ISA = qw(Exporter);
13 @EXPORT = qw(&getorders &bookseller &breakdown &basket &newbasket &bookfunds
14 &ordersearch &newbiblio &newbiblioitem &newsubject &newsubtitle &neworder
15 &newordernum &modbiblio &modorder &getsingleorder &invoice &receiveorder
16 &bookfundbreakdown &curconvert &updatesup &insertsup &newitems &modbibitem
17 &getcurrencies &modsubtitle &modsubject &modaddauthor &moditem &countitems 
18 &findall &needsmod &delitem &delbibitem &delbiblio &delorder &branches
19 &getallorders &getrecorders &updatecurrencies &getorder &getcurrency &updaterecorder
20 &updatecost &checkitems &modnote &getitemtypes &getbiblio
21 &getbiblioitem &getitemsbybiblioitem &isbnsearch &keywordsearch
22 &websitesearch);
23 %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
24
25 # your exported package globals go here,
26 # as well as any optionally exported functions
27
28 @EXPORT_OK   = qw($Var1 %Hashit);
29
30
31 # non-exported package globals go here
32 use vars qw(@more $stuff);
33
34 # initalize package globals, first exported ones
35
36 my $Var1   = '';
37 my %Hashit = ();
38
39
40
41 # then the others (which are still accessible as $Some::Module::stuff)
42 my $stuff  = '';
43 my @more   = ();
44
45 # all file-scoped lexicals must be created before
46 # the functions below that use them.
47
48 # file-private lexicals go here
49 my $priv_var    = '';
50 my %secret_hash = ();
51
52 # here's a file-private function as a closure,
53 # callable as &$priv_func;  it cannot be prototyped.
54 my $priv_func = sub {
55   # stuff goes here.
56   };
57   
58 # make all your functions, whether exported or not;
59
60 sub getorders {
61   my ($supplierid)=@_;
62   my $dbh=C4Connect;
63   my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where 
64   booksellerid='$supplierid' and (quantity > quantityreceived or
65   quantityreceived is NULL)
66   and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
67   $query.=" group by basketno order by entrydate desc";
68   #print $query;
69   my $sth=$dbh->prepare($query);
70   $sth->execute;
71   my @results;
72   my $i=0;
73   while (my $data=$sth->fetchrow_hashref){
74     $results[$i]=$data;
75     $i++;
76   }
77   $sth->finish;
78   $dbh->disconnect;
79   return ($i,\@results);
80 }
81
82 sub itemcount{
83   my ($biblio)=@_;
84   my $dbh=C4Connect;
85   my $query="Select count(*) from items where biblionumber=$biblio";
86 #  print $query;
87   my $sth=$dbh->prepare($query);
88   $sth->execute;
89   my $data=$sth->fetchrow_hashref;
90   $sth->finish;
91   $dbh->disconnect;
92   return($data->{'count(*)'});
93 }
94
95 sub getorder{
96   my ($bi,$bib)=@_;
97   my $dbh=C4Connect;
98   my $query="Select ordernumber from aqorders where biblionumber=$bib and
99   biblioitemnumber='$bi'";
100   my $sth=$dbh->prepare($query);
101   $sth->execute;
102   my $ordnum=$sth->fetchrow_hashref;
103   $sth->finish;
104   my $order=getsingleorder($ordnum->{'ordernumber'});
105   $dbh->disconnect;
106 #  print $query;
107   return ($order,$ordnum->{'ordernumber'});
108 }
109
110 sub getsingleorder {
111   my ($ordnum)=@_;
112   my $dbh=C4Connect;
113   my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown 
114   where aqorders.ordernumber='$ordnum' 
115   and biblio.biblionumber=aqorders.biblionumber and
116   biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
117   aqorders.ordernumber=aqorderbreakdown.ordernumber";
118   my $sth=$dbh->prepare($query);
119   $sth->execute;
120   my $data=$sth->fetchrow_hashref;
121   $sth->finish;
122   $dbh->disconnect;
123   return($data);
124 }
125
126 sub invoice {
127   my ($invoice)=@_;
128   my $dbh=C4Connect;
129   my $query="Select * from aqorders,biblio,biblioitems where
130   booksellerinvoicenumber='$invoice' 
131   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
132   aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
133   my $i=0;
134   my @results;
135   my $sth=$dbh->prepare($query);
136   $sth->execute;
137   while (my $data=$sth->fetchrow_hashref){
138     $results[$i]=$data;
139     $i++;
140   }
141   $sth->finish;
142   $dbh->disconnect;
143   return($i,@results);
144 }
145
146 sub getallorders {
147   #gets all orders from a certain supplier, orders them alphabetically
148   my ($supid)=@_;
149   my $dbh=C4Connect;
150   my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
151   and (cancelledby is NULL or cancelledby = '')
152   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=                    
153   aqorders.biblioitemnumber 
154   group by aqorders.biblioitemnumber 
155   order by
156   biblio.title";
157   my $i=0;
158   my @results;
159   my $sth=$dbh->prepare($query);
160   $sth->execute;
161   while (my $data=$sth->fetchrow_hashref){
162     $results[$i]=$data;
163     $i++;
164   }
165   $sth->finish;
166   $dbh->disconnect;
167   return($i,@results);
168 }
169
170 sub getrecorders {
171   #gets all orders from a certain supplier, orders them alphabetically
172   my ($supid)=@_;
173   my $dbh=C4Connect;
174   my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
175   and (cancelledby is NULL or cancelledby = '')
176   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=                    
177   aqorders.biblioitemnumber and
178   aqorders.quantityreceived>0
179   and aqorders.datereceived >=now()
180   group by aqorders.biblioitemnumber 
181   order by
182   biblio.title";
183   my $i=0;
184   my @results;
185   my $sth=$dbh->prepare($query);
186   $sth->execute;
187   while (my $data=$sth->fetchrow_hashref){
188     $results[$i]=$data;
189     $i++;
190   }
191   $sth->finish;
192   $dbh->disconnect;
193   return($i,@results);
194 }
195
196 sub ordersearch {
197   my ($search,$biblio,$catview) = @_;
198   my $dbh   = C4Connect;
199   my $query = "Select *,biblio.title from aqorders,biblioitems,biblio
200 where aqorders.biblioitemnumber = biblioitems.biblioitemnumber
201 and biblio.biblionumber=aqorders.biblionumber
202 and ((datecancellationprinted is NULL)
203 or (datecancellationprinted = '0000-00-00')
204 and ((";
205   my @data  = split(' ',$search);
206   my $count = @data;
207   for (my $i = 0; $i < $count; $i++) {
208     $query .= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
209   }
210   $query=~ s/ and $//;
211   $query.=" ) or biblioitems.isbn='$search' 
212   or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
213   if ($catview ne 'yes'){
214     $query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
215   }
216   $query.=" group by aqorders.ordernumber";
217   my $sth=$dbh->prepare($query);
218 #  print $query;
219   $sth->execute;
220   my $i=0;
221   my @results;
222   while (my $data=$sth->fetchrow_hashref){
223      my $sth2=$dbh->prepare("Select * from biblio where
224      biblionumber='$data->{'biblionumber'}'");
225      $sth2->execute;
226      my $data2=$sth2->fetchrow_hashref;
227      $sth2->finish;
228      $data->{'author'}=$data2->{'author'};
229      $data->{'seriestitle'}=$data2->{'seriestitle'};
230      $sth2=$dbh->prepare("Select * from aqorderbreakdown where
231     ordernumber=$data->{'ordernumber'}");
232     $sth2->execute;
233     $data2=$sth2->fetchrow_hashref;
234     $sth2->finish;
235     $data->{'branchcode'}=$data2->{'branchcode'};
236     $data->{'bookfundid'}=$data2->{'bookfundid'};
237     $results[$i]=$data;
238     $i++;
239   }
240   $sth->finish;
241   $dbh->disconnect;
242   return($i,@results);
243 }
244
245
246 sub bookseller {
247   my ($searchstring)=@_;
248   my $dbh=C4Connect;
249   my $query="Select * from aqbooksellers where name like '%$searchstring%' or
250   id = '$searchstring'";
251   my $sth=$dbh->prepare($query);
252   $sth->execute;
253   my @results;
254   my $i=0;
255   while (my $data=$sth->fetchrow_hashref){
256     $results[$i]=$data;
257     $i++;
258   }
259   $sth->finish;
260   $dbh->disconnect;
261   return($i,@results);
262 }
263
264 sub breakdown {
265   my ($id)=@_;
266   my $dbh=C4Connect;
267   my $query="Select * from aqorderbreakdown where ordernumber='$id'";
268   my $sth=$dbh->prepare($query);
269   $sth->execute;
270   my @results;
271   my $i=0;
272   while (my $data=$sth->fetchrow_hashref){
273     $results[$i]=$data;
274     $i++;
275   }
276   $sth->finish;
277   $dbh->disconnect;
278   return($i,\@results);
279 }
280
281 sub basket {
282   my ($basketno,$supplier)=@_;
283   my $dbh=C4Connect;
284   my $query="Select *,biblio.title from aqorders,biblio,biblioitems 
285   where basketno='$basketno'
286   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
287   =aqorders.biblioitemnumber 
288   and (datecancellationprinted is NULL or datecancellationprinted =
289   '0000-00-00')";
290   if ($supplier ne ''){
291     $query.=" and aqorders.booksellerid='$supplier'";
292   } 
293   $query.=" group by aqorders.ordernumber";
294   my $sth=$dbh->prepare($query);
295   $sth->execute;
296   my @results;
297 #  print $query;
298   my $i=0;
299   while (my $data=$sth->fetchrow_hashref){
300     $results[$i]=$data;
301     $i++;
302   }
303   $sth->finish;
304   $dbh->disconnect;
305   return($i,@results);
306 }
307
308 sub newbasket {
309   my $dbh=C4Connect;
310   my $query="Select max(basketno) from aqorders";
311   my $sth=$dbh->prepare($query);
312   $sth->execute;
313   my $data=$sth->fetchrow_arrayref;
314   my $basket=$$data[0];
315   $basket++;
316   $sth->finish;
317   $dbh->disconnect;
318   return($basket);
319 }
320
321 sub bookfunds {
322   my $dbh=C4Connect;
323   my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
324   =aqbudget.bookfundid 
325   and aqbudget.startdate='2001=07-01' 
326   group by aqbookfund.bookfundid order by bookfundname";
327   my $sth=$dbh->prepare($query);
328   $sth->execute;
329   my @results;
330   my $i=0;
331   while (my $data=$sth->fetchrow_hashref){
332     $results[$i]=$data;
333     $i++;
334   }
335   $sth->finish;
336   $dbh->disconnect;
337   return($i,@results);
338 }
339
340 sub branches {
341   my $dbh=C4Connect;
342   my $query="Select * from branches";
343   my $sth=$dbh->prepare($query);
344   $sth->execute;
345   my @results;
346   my $i=0;
347   while (my $data=$sth->fetchrow_hashref){
348     $results[$i]=$data;
349     $i++;
350   }
351   $sth->finish;
352   $dbh->disconnect;
353   return($i,@results);
354 }
355
356 sub bookfundbreakdown {
357   my ($id)=@_;
358   my $dbh=C4Connect;
359   my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
360   from aqorders,aqorderbreakdown where bookfundid='$id' and 
361   aqorders.ordernumber=aqorderbreakdown.ordernumber and ((budgetdate >=
362   '2001-07-01' and budgetdate <'2002-07-01') or
363   (datereceived >= '2001-07-01' and datereceived < '2002-07-01'))
364   and (datecancellationprinted is NULL or
365   datecancellationprinted='0000-00-00')";
366   my $sth=$dbh->prepare($query);
367   $sth->execute;
368   my $comtd=0;
369   my $spent=0;
370   while (my $data=$sth->fetchrow_hashref){
371     if ($data->{'subscription'} == 1){
372       $spent+=$data->{'quantity'}*$data->{'unitprice'};
373     } else {
374       my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
375       $comtd+=($data->{'ecost'})*$leftover;
376       $spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
377     }
378   }
379   $sth->finish;
380   $dbh->disconnect;
381   return($spent,$comtd);
382 }
383       
384
385 sub newbiblio {
386   my ($biblio) = @_;
387   my $dbh    = &C4Connect;
388   my $query  = "Select max(biblionumber) from biblio";
389   my $sth    = $dbh->prepare($query);
390   $sth->execute;
391   my $data   = $sth->fetchrow_arrayref;
392   my $bibnum = $$data[0] + 1;
393   my $series = 0;
394
395   $biblio->{'title'}       = $dbh->quote($biblio->{'title'});
396   $biblio->{'author'}      = $dbh->quote($biblio->{'author'});
397   $biblio->{'copyright'}   = $dbh->quote($biblio->{'copyright'});
398   $biblio->{'seriestitle'} = $dbh->quote($biblio->{'seriestitle'});
399   $biblio->{'notes'}       = $dbh->quote($biblio->{'notes'});
400   $biblio->{'abstract'}    = $dbh->quote($biblio->{'abstract'});
401   if ($biblio->{'seriestitle'}) { $series = 1 };
402
403   $sth->finish;
404   $query = "insert into biblio set
405 biblionumber  = $bibnum,
406 title         = $biblio->{'title'},
407 author        = $biblio->{'author'},
408 copyrightdate = $biblio->{'copyright'},
409 serial        = $series,
410 seriestitle   = $biblio->{'seriestitle'},
411 notes         = $biblio->{'notes'},
412 abstract      = $biblio->{'abstract'}";
413
414   $sth = $dbh->prepare($query);
415   $sth->execute;
416
417   $sth->finish;
418   $dbh->disconnect;
419   return($bibnum);
420 }
421
422 sub modbiblio {
423   my ($bibnum, $title, $author, $copyright, $seriestitle, $serial, $unititle, $notes)=@_;
424   my $dbh   = C4Connect;
425   my $query = "Update biblio set
426 title         = '$title',
427 author        = '$author',
428 copyrightdate = '$copyright',
429 seriestitle   = '$seriestitle',
430 serial        = '$serial',
431 unititle      = '$unititle',
432 notes         = '$notes'
433 where biblionumber = $bibnum";
434   my $sth   = $dbh->prepare($query);
435
436   $sth->execute;
437
438   $sth->finish;
439   $dbh->disconnect;
440   return($bibnum);
441 }
442
443 sub modsubtitle {
444   my ($bibnum,$subtitle)=@_;
445   my $dbh=C4Connect;
446   my $query="update bibliosubtitle set subtitle='$subtitle' where biblionumber=$bibnum";
447   my $sth=$dbh->prepare($query);
448   $sth->execute;
449   $sth->finish;
450   $dbh->disconnect;
451 }
452
453 sub modaddauthor {
454     my ($bibnum, $author) = @_;
455     my $dbh   = C4Connect;
456     my $query = "Delete from additionalauthors where biblionumber = $bibnum";
457     my $sth = $dbh->prepare($query);
458
459     $sth->execute;
460     $sth->finish;
461
462     if ($author ne '') {
463         $query = "Insert into additionalauthors set
464 author       = '$author',
465 biblionumber = '$bibnum'";
466         $sth   = $dbh->prepare($query);
467
468         $sth->execute;
469
470         $sth->finish;
471     } # if
472
473   $dbh->disconnect;
474 } # sub modaddauthor
475
476
477 sub modsubject {
478   my ($bibnum,$force,@subject)=@_;
479   my $dbh=C4Connect;
480   my $count=@subject;
481   my $error;
482   for (my $i=0;$i<$count;$i++){
483     $subject[$i]=~ s/^ //g;
484     $subject[$i]=~ s/ $//g;
485     my $query="select * from catalogueentry where entrytype='s' and
486     catalogueentry='$subject[$i]'";
487     my $sth=$dbh->prepare($query);
488     $sth->execute;
489     if (my $data=$sth->fetchrow_hashref){
490       
491     } else {
492       if ($force eq $subject[$i]){
493          #subject not in aut, chosen to force anway
494          #so insert into cataloguentry so its in auth file
495          $query="Insert into catalogueentry (entrytype,catalogueentry)
496          values ('s','$subject[$i]')";
497          my $sth2=$dbh->prepare($query);
498 #        print $query;
499          $sth2->execute;
500          $sth2->finish;
501       } else {      
502         $error="$subject[$i]\n does not exist in the subject authority file";
503         $query= "Select * from catalogueentry where
504         entrytype='s' and (catalogueentry like '$subject[$i] %' or 
505         catalogueentry like '% $subject[$i] %' or catalogueentry like
506         '% $subject[$i]')";
507         my $sth2=$dbh->prepare($query);
508 #        print $query;
509         $sth2->execute;
510         while (my $data=$sth2->fetchrow_hashref){
511           $error=$error."<br>$data->{'catalogueentry'}";
512         }
513         $sth2->finish;
514 #       $error=$error."<br>$query";
515      }
516    }
517     $sth->finish;
518   }
519   if ($error eq ''){  
520     my $query="Delete from bibliosubject where biblionumber=$bibnum";
521 #  print $query;
522     my $sth=$dbh->prepare($query);
523 #  print $query;
524     $sth->execute;
525     $sth->finish;
526     for (my $i=0;$i<$count;$i++){
527       $sth=$dbh->prepare("Insert into bibliosubject values ('$subject[$i]',$bibnum)");
528 #     print $subject[$i];
529       $sth->execute;
530       $sth->finish;
531     }
532   }
533   $dbh->disconnect;
534   return($error);
535 }
536
537 sub modbibitem {
538   my ($bibitemnum,$itemtype,$isbn,$publishercode,$publicationdate,$classification,$dewey,$subclass,$illus,$pages,$volumeddesc,$notes,$size,$place)=@_;
539   my $dbh=C4Connect;
540   my $query="update biblioitems set itemtype='$itemtype',
541   isbn='$isbn',publishercode='$publishercode',publicationyear='$publicationdate',
542   classification='$classification',dewey='$dewey',subclass='$subclass',illus='$illus',
543   pages='$pages',volumeddesc='$volumeddesc',notes='$notes',size='$size',place='$place'
544   where
545   biblioitemnumber=$bibitemnum";
546   my $sth=$dbh->prepare($query);
547 #    print $query;
548   $sth->execute;
549   $sth->finish;
550   $dbh->disconnect;
551 }
552
553 sub modnote {
554   my ($bibitemnum,$note)=@_;
555   my $dbh=C4Connect;
556   my $query="update biblioitems set notes='$note' where
557   biblioitemnumber='$bibitemnum'";
558   my $sth=$dbh->prepare($query);
559   $sth->execute;
560   $sth->finish;
561   $dbh->disconnect;
562 }
563
564 sub newbiblioitem {
565   my ($biblioitem) = @_;
566   my $dbh   = C4Connect;
567   my $query = "Select max(biblioitemnumber) from biblioitems";
568   my $sth   = $dbh->prepare($query);
569   my $data;
570   my $bibitemnum;
571   
572   $biblioitem->{'volume'}          = $dbh->quote($biblioitem->{'volume'});
573   $biblioitem->{'number'}          = $dbh->quote($biblioitem->{'number'});
574   $biblioitem->{'classification'}  = $dbh->quote($biblioitem->{'classification'});
575   $biblioitem->{'itemtype'}        = $dbh->quote($biblioitem->{'itemtype'});
576   $biblioitem->{'url'}             = $dbh->quote($biblioitem->{'url'});
577   $biblioitem->{'isbn'}            = $dbh->quote($biblioitem->{'isbn'});
578   $biblioitem->{'issn'}            = $dbh->quote($biblioitem->{'issn'});
579   $biblioitem->{'dewey'}           = $dbh->quote($biblioitem->{'dewey'});
580   $biblioitem->{'subclass'}        = $dbh->quote($biblioitem->{'subclass'});
581   $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
582   $biblioitem->{'publishercode'}   = $dbh->quote($biblioitem->{'publishercode'});
583   $biblioitem->{'volumedate'}      = $dbh->quote($biblioitem->{'volumedate'});
584   $biblioitem->{'volumeddesc'}     = $dbh->quote($biblioitem->{'volumeddesc'});  $biblioitem->{'illus'}            = $dbh->quote($biblioitem->{'illus'});
585   $biblioitem->{'pages'}           = $dbh->quote($biblioitem->{'pages'});
586   $biblioitem->{'notes'}           = $dbh->quote($biblioitem->{'notes'});
587   $biblioitem->{'size'}            = $dbh->quote($biblioitem->{'size'});
588   $biblioitem->{'place'}           = $dbh->quote($biblioitem->{'place'});
589   
590   $sth->execute;
591   $data       = $sth->fetchrow_arrayref;
592   $bibitemnum = $$data[0] + 1;
593
594   $sth->finish;
595
596   $query = "insert into biblioitems set
597 biblioitemnumber = $bibitemnum,
598 biblionumber     = $biblioitem->{'biblionumber'},
599 volume           = $biblioitem->{'volume'},
600 number           = $biblioitem->{'number'},
601 classification   = $biblioitem->{'classification'},
602 itemtype         = $biblioitem->{'itemtype'},
603 url              = $biblioitem->{'url'},
604 isbn             = $biblioitem->{'isbn'},
605 issn             = $biblioitem->{'issn'},
606 dewey            = $biblioitem->{'dewey'},
607 subclass         = $biblioitem->{'subclass'},
608 publicationyear  = $biblioitem->{'publicationyear'},
609 publishercode    = $biblioitem->{'publishercode'},
610 volumedate       = $biblioitem->{'volumedate'},
611 volumeddesc      = $biblioitem->{'volumeddesc'},
612 illus            = $biblioitem->{'illus'},
613 pages            = $biblioitem->{'pages'},
614 notes            = $biblioitem->{'notes'},
615 size             = $biblioitem->{'size'},
616 place            = $biblioitem->{'place'}";
617
618   $sth = $dbh->prepare($query);
619   $sth->execute;
620
621   $sth->finish;
622   $dbh->disconnect;
623   return($bibitemnum);
624 }
625
626 sub newsubject {
627   my ($bibnum)=@_;
628   my $dbh=C4Connect;
629   my $query="insert into bibliosubject (biblionumber) values
630   ($bibnum)";
631   my $sth=$dbh->prepare($query);
632 #  print $query;
633   $sth->execute;
634   $sth->finish;
635   $dbh->disconnect;
636 }
637
638 sub newsubtitle {
639   my ($bibnum, $subtitle) = @_;
640   my $dbh   = C4Connect;
641   $subtitle = $dbh->quote($subtitle);
642   my $query = "insert into bibliosubtitle set
643 biblionumber = $bibnum,
644 subtitle = $subtitle";
645   my $sth   = $dbh->prepare($query);
646
647   $sth->execute;
648
649   $sth->finish;
650   $dbh->disconnect;
651 }
652
653 sub neworder {
654   my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
655   if ($budget eq 'now'){
656     $budget="now()";
657   } else {
658     $budget="'2001-07-01'";
659   }
660   if ($sub eq 'yes'){
661     $sub=1;
662   } else {
663     $sub=0;
664   }
665   my $dbh=C4Connect;
666   my $query="insert into aqorders (biblionumber,title,basketno,
667   quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
668   biblioitemnumber,rrp,ecost,gst,budgetdate,unitprice,subscription,booksellerinvoicenumber)
669
670   values
671   ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
672   '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst',$budget,'$cost',
673   '$sub','$invoice')";
674   my $sth=$dbh->prepare($query);
675 #  print $query;
676   $sth->execute;
677   $sth->finish;
678   $query="select * from aqorders where
679   biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
680   $sth=$dbh->prepare($query);
681   $sth->execute;
682   my $data=$sth->fetchrow_hashref;
683   $sth->finish;
684   $ordnum=$data->{'ordernumber'};
685   $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
686   ($ordnum,'$bookfund')";
687   $sth=$dbh->prepare($query);
688 #  print $query;
689   $sth->execute;
690   $sth->finish;
691   $dbh->disconnect;
692 }
693
694 sub delorder {
695   my ($bibnum,$ordnum)=@_;
696   my $dbh=C4Connect;
697   my $query="update aqorders set datecancellationprinted=now()
698   where biblionumber='$bibnum' and
699   ordernumber='$ordnum'";
700   my $sth=$dbh->prepare($query);
701   #print $query;
702   $sth->execute;
703   $sth->finish;
704   my $count=itemcount($bibnum);
705   if ($count == 0){
706     delbiblio($bibnum);
707   }
708   $dbh->disconnect;
709 }
710
711 sub modorder {
712   my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
713   my $dbh=C4Connect;
714   my $query="update aqorders set title='$title',
715   quantity='$quantity',listprice='$listprice',basketno='$basketno', 
716   rrp='$rrp',ecost='$ecost',unitprice='$cost',
717   booksellerinvoicenumber='$invoice'
718   where
719   ordernumber=$ordnum and biblionumber=$bibnum";
720   my $sth=$dbh->prepare($query);
721 #  print $query;
722   $sth->execute;
723   $sth->finish;
724   $query="update aqorderbreakdown set bookfundid=$bookfund where
725   ordernumber=$ordnum";
726   $sth=$dbh->prepare($query);
727 #  print $query;
728   $sth->execute;
729   $sth->finish;
730   $dbh->disconnect;
731 }
732
733 sub newordernum {
734   my $dbh=C4Connect;
735   my $query="Select max(ordernumber) from aqorders";
736   my $sth=$dbh->prepare($query);
737   $sth->execute;
738   my $data=$sth->fetchrow_arrayref;
739   my $ordnum=$$data[0];
740   $ordnum++;
741   $sth->finish;
742   $dbh->disconnect;
743   return($ordnum);
744 }
745
746 sub receiveorder {
747   my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
748   my $dbh=C4Connect;
749   my $query="update aqorders set quantityreceived='$quantrec',
750   datereceived=now(),booksellerinvoicenumber='$invoiceno',
751   biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
752   rrp='$rrp'
753   where biblionumber=$biblio and ordernumber=$ordnum
754   ";
755 #  print $query;
756   my $sth=$dbh->prepare($query);
757   $sth->execute;
758   $sth->finish;
759   $query="update aqorderbreakdown set bookfundid=$bookfund where
760   ordernumber=$ordnum";
761   $sth=$dbh->prepare($query);
762 #  print $query;
763   $sth->execute;
764   $sth->finish;  
765   $dbh->disconnect;
766 }
767 sub updaterecorder{
768   my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
769   my $dbh=C4Connect;
770   my $query="update aqorders set
771   unitprice='$cost', rrp='$rrp'
772   where biblionumber=$biblio and ordernumber=$ordnum
773   ";
774 #  print $query;
775   my $sth=$dbh->prepare($query);
776   $sth->execute;
777   $sth->finish;
778   $query="update aqorderbreakdown set bookfundid=$bookfund where
779   ordernumber=$ordnum";
780   $sth=$dbh->prepare($query);
781 #  print $query;
782   $sth->execute;
783   $sth->finish;  
784   $dbh->disconnect;
785 }
786
787 sub curconvert {
788   my ($currency,$price)=@_;
789   my $dbh=C4Connect;
790   my $query="Select rate from currency where currency='$currency'";
791   my $sth=$dbh->prepare($query);
792   $sth->execute;
793   my $data=$sth->fetchrow_hashref;
794   $sth->finish;
795   $dbh->disconnect;
796   my $cur=$data->{'rate'};
797   if ($cur==0){
798     $cur=1;
799   }
800   my $price=$price / $cur;
801   return($price);
802 }
803
804 sub getcurrencies {
805   my $dbh=C4Connect;
806   my $query="Select * from currency";
807   my $sth=$dbh->prepare($query);
808   $sth->execute;
809   my @results;
810   my $i=0;
811   while (my $data=$sth->fetchrow_hashref){
812     $results[$i]=$data;
813     $i++;
814   }
815   $sth->finish;
816   $dbh->disconnect;
817   return($i,\@results);
818
819
820 sub getcurrency {
821   my ($cur)=@_;
822   my $dbh=C4Connect;
823   my $query="Select * from currency where currency='$cur'";
824   my $sth=$dbh->prepare($query);
825   $sth->execute;
826
827   my $data=$sth->fetchrow_hashref;
828   $sth->finish;
829   $dbh->disconnect;
830   return($data);
831
832
833 sub updatecurrencies {
834   my ($currency,$rate)=@_;
835   my $dbh=C4Connect;
836   my $query="update currency set rate=$rate where currency='$currency'";
837   my $sth=$dbh->prepare($query);
838   $sth->execute;
839   $sth->finish;
840   $dbh->disconnect;
841
842
843 sub updatesup {
844    my ($data)=@_;
845    my $dbh=C4Connect;
846    my $query="Update aqbooksellers set
847    name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
848    address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
849    phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
850    contact='$data->{'contact'}',contpos='$data->{'contpos'}',
851    contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
852    '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
853    '$data->{'contnotes'}', active=$data->{'active'},
854    listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
855    gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
856    invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
857    discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
858    nocalc='$data->{'nocalc'}'
859    where id='$data->{'id'}'";
860    my $sth=$dbh->prepare($query);
861    $sth->execute;
862    $sth->finish;
863    $dbh->disconnect;
864 #   print $query;
865 }
866
867 sub insertsup {
868   my ($data)=@_;
869   my $dbh=C4Connect;
870   my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
871   $sth->execute;
872   my $data2=$sth->fetchrow_hashref;
873   $sth->finish;
874   $data2->{'max(id)'}++;
875   $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
876   $sth->execute;
877   $sth->finish;
878   $data->{'id'}=$data2->{'max(id)'};
879   $dbh->disconnect;
880   updatesup($data);
881   return($data->{'id'});
882 }
883
884
885 sub newitems {
886   my ($item, @barcodes) = @_;
887   my $dbh   = C4Connect;
888   my $query = "Select max(itemnumber) from items";
889   my $sth   = $dbh->prepare($query);
890   my $data;
891   my $itemnumber;
892   my $error;
893
894   $sth->execute;
895   $data       = $sth->fetchrow_hashref;
896   $itemnumber = $data->{'max(itemnumber)'} + 1;
897   $sth->finish;
898   
899   $item->{'booksellerid'}     = $dbh->quote($item->{'bookselletid'});
900   $item->{'homebranch'}       = $dbh->quote($item->{'homebranch'});
901   $item->{'price'}            = $dbh->quote($item->{'price'});
902   $item->{'replacementprice'} = $dbh->quote($item->{'replacementprice'});
903   $item->{'itemnotes'}        = $dbh->quote($item->{'itemnotes'});
904
905   foreach my $barcode (@barcodes) {
906     $barcode = uc($barcode);
907     $query   = "Insert into items set
908 itemnumber           = $itemnumber,
909 biblionumber         = $item->{'biblionumber'},
910 biblioitemnumber     = $item->{'biblioitemnumber'},
911 barcode              = $barcode,
912 booksellerid         = $item->{'booksellerid'},
913 dateaccessioned      = NOW(),
914 homebranch           = $item->{'homebranch'},
915 holdingbranch        = $item->{'homebranch'},
916 price                = $item->{'price'},
917 replacementprice     = $item->{'replacementprice'},
918 replacementpricedate = NOW(),
919 itemnotes            = $item->{'itemnotes'}";
920
921     if ($item->{'loan'}) {
922       $query .= ",
923 notforloan           = $item->{'loan'}";
924     } # if
925
926     $sth = $dbh->prepare($query);
927     $sth->execute;
928
929     $error .= $sth->errstr;
930
931     $sth->finish;
932     $itemnumber++;
933   } # for
934
935   $dbh->disconnect;
936   return($error);
937 }
938
939 sub checkitems{
940   my ($count,@barcodes)=@_;
941   my $dbh=C4Connect;
942   my $error;
943   for (my $i=0;$i<$count;$i++){
944     $barcodes[$i]=uc $barcodes[$i];
945     my $query="Select * from items where barcode='$barcodes[$i]'";
946     my $sth=$dbh->prepare($query);
947     $sth->execute;
948     if (my $data=$sth->fetchrow_hashref){
949       $error.=" Duplicate Barcode: $barcodes[$i]";
950     }
951     $sth->finish;
952   }
953   $dbh->disconnect;
954   return($error);
955 }
956
957 sub moditem {
958   my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
959   my $dbh=C4Connect;
960   my $query="update items set biblioitemnumber=$bibitemnum,
961   barcode='$barcode',itemnotes='$notes'
962   where itemnumber=$itemnum";
963   if ($barcode eq ''){
964     $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum";
965   }
966   if ($lost ne ''){
967     $query="update items set biblioitemnumber=$bibitemnum,
968       barcode='$barcode',itemnotes='$notes',homebranch='$homebranch',
969       itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum";
970   }
971   if ($replacement ne ''){
972     $query=~ s/ where/,replacementprice='$replacement' where/;
973   }
974
975   my $sth=$dbh->prepare($query);
976   $sth->execute;
977   $sth->finish;
978   $dbh->disconnect;
979 }
980
981 sub updatecost{
982   my($price,$rrp,$itemnum)=@_;
983   my $dbh=C4Connect;
984   my $query="update items set price='$price',replacementprice='$rrp'
985   where itemnumber=$itemnum";
986   my $sth=$dbh->prepare($query);
987   $sth->execute;
988   $sth->finish;
989   $dbh->disconnect;
990 }
991 sub countitems{
992   my ($bibitemnum)=@_;
993   my $dbh=C4Connect;
994   my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'";
995   my $sth=$dbh->prepare($query);
996   $sth->execute;
997   my $data=$sth->fetchrow_hashref;
998   $sth->finish;
999   $dbh->disconnect;
1000   return($data->{'count(*)'});
1001 }
1002
1003 sub findall {
1004   my ($biblionumber)=@_;
1005   my $dbh=C4Connect;
1006   my $query="Select * from biblioitems,items,itemtypes where 
1007   biblioitems.biblionumber=$biblionumber 
1008   and biblioitems.biblioitemnumber=items.biblioitemnumber and
1009   itemtypes.itemtype=biblioitems.itemtype
1010   order by items.biblioitemnumber";
1011   my $sth=$dbh->prepare($query);
1012   $sth->execute;
1013   my @results;
1014   my $i;
1015   while (my $data=$sth->fetchrow_hashref){
1016     $results[$i]=$data;
1017     $i++;
1018   }
1019   $sth->finish;
1020   $dbh->disconnect;
1021   return(@results);
1022 }
1023
1024 sub needsmod{
1025   my ($bibitemnum,$itemtype)=@_;
1026   my $dbh=C4Connect;
1027   my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
1028   and itemtype='$itemtype'";
1029   my $sth=$dbh->prepare($query);
1030   $sth->execute;
1031   my $result=0;
1032   if (my $data=$sth->fetchrow_hashref){
1033     $result=1;
1034   }
1035   $sth->finish;
1036   $dbh->disconnect;
1037   return($result);
1038 }
1039
1040 sub delitem{
1041   my ($itemnum)=@_;
1042   my $dbh=C4Connect;
1043   my $query="select * from items where itemnumber=$itemnum";
1044   my $sth=$dbh->prepare($query);
1045   $sth->execute;
1046   my @data=$sth->fetchrow_array;
1047   $sth->finish;
1048   $query="Insert into deleteditems values (";
1049   foreach my $temp (@data){
1050     $query=$query."'$temp',";
1051   }
1052   $query=~ s/\,$/\)/;
1053 #  print $query;
1054   $sth=$dbh->prepare($query);
1055   $sth->execute;
1056   $sth->finish;
1057   $query = "Delete from items where itemnumber=$itemnum";
1058   $sth=$dbh->prepare($query);
1059   $sth->execute;
1060   $sth->finish;
1061   $dbh->disconnect;
1062 }
1063
1064 sub delbibitem{
1065   my ($itemnum)=@_;
1066   my $dbh=C4Connect;
1067   my $query="select * from biblioitems where biblioitemnumber=$itemnum";
1068   my $sth=$dbh->prepare($query);
1069   $sth->execute;
1070   if (my @data=$sth->fetchrow_array){
1071     $sth->finish;
1072     $query="Insert into deletedbiblioitems values (";
1073     foreach my $temp (@data){
1074       $temp=~ s/\'/\\\'/g;
1075       $query=$query."'$temp',";
1076     }
1077     $query=~ s/\,$/\)/;
1078 #   print $query;
1079     $sth=$dbh->prepare($query);
1080     $sth->execute;
1081     $sth->finish;
1082     $query = "Delete from biblioitems where biblioitemnumber=$itemnum";
1083     $sth=$dbh->prepare($query);
1084     $sth->execute;
1085     $sth->finish;
1086   }
1087   $sth->finish;
1088   $dbh->disconnect;
1089 }
1090
1091 sub delbiblio{
1092   my ($biblio)=@_;
1093   my $dbh=C4Connect;
1094   my $query="select * from biblio where biblionumber=$biblio";
1095   my $sth=$dbh->prepare($query);
1096   $sth->execute;
1097   if (my @data=$sth->fetchrow_array){
1098     $sth->finish;
1099     $query="Insert into deletedbiblio values (";
1100     foreach my $temp (@data){
1101       $temp=~ s/\'/\\\'/g;
1102       $query=$query."'$temp',";
1103     }
1104     $query=~ s/\,$/\)/;
1105 #   print $query;
1106     $sth=$dbh->prepare($query);
1107     $sth->execute;
1108     $sth->finish;
1109     $query = "Delete from biblio where biblionumber=$biblio";
1110     $sth=$dbh->prepare($query);
1111     $sth->execute;
1112     $sth->finish;
1113   }
1114
1115   $sth->finish;
1116   $dbh->disconnect;
1117 }
1118
1119 sub getitemtypes {
1120   my $dbh   = C4Connect;
1121   my $query = "select * from itemtypes";
1122   my $sth   = $dbh->prepare($query);
1123     # || die "Cannot prepare $query" . $dbh->errstr;
1124   my $count = 0;
1125   my @results;
1126   
1127   $sth->execute;
1128     # || die "Cannot execute $query\n" . $sth->errstr;
1129   while (my $data = $sth->fetchrow_hashref) {
1130     @results[$count] = $data;
1131     $count++;
1132   } # while
1133   
1134   $sth->finish;
1135   $dbh->disconnect;
1136   return($count, @results);
1137 } # sub getitemtypes
1138
1139
1140 sub getbiblio {
1141     my ($biblionumber) = @_;
1142     my $dbh   = C4Connect;
1143     my $query = "Select * from biblio where biblionumber = $biblionumber";
1144     my $sth   = $dbh->prepare($query);
1145       # || die "Cannot prepare $query\n" . $dbh->errstr;
1146     my $count = 0;
1147     my @results;
1148     
1149     $sth->execute;
1150       # || die "Cannot execute $query\n" . $sth->errstr;
1151     while (my $data = $sth->fetchrow_hashref) {
1152       $results[$count] = $data;
1153       $count++;
1154     } # while
1155     
1156     $sth->finish;
1157     $dbh->disconnect;
1158     return($count, @results);
1159 } # sub getbiblio
1160
1161
1162 sub getbiblioitem {
1163     my ($biblioitemnum) = @_;
1164     my $dbh   = C4Connect;
1165     my $query = "Select * from biblioitems where
1166 biblioitemnumber = $biblioitemnum";
1167     my $sth   = $dbh->prepare($query);
1168     my $count = 0;
1169     my @results;
1170
1171     $sth->execute;
1172
1173     while (my $data = $sth->fetchrow_hashref) {
1174         $results[$count] = $data;
1175         $count++;
1176     } # while
1177
1178     $sth->finish;
1179     $dbh->disconnect;
1180     return($count, @results);
1181 } # sub getbiblioitem
1182
1183
1184 sub getitemsbybiblioitem {
1185     my ($biblioitemnum) = @_;
1186     my $dbh   = C4Connect;
1187     my $query = "Select * from items, biblio where
1188 biblio.biblionumber = items.biblionumber and biblioitemnumber
1189 = $biblioitemnum";
1190     my $sth   = $dbh->prepare($query);
1191       # || die "Cannot prepare $query\n" . $dbh->errstr;
1192     my $count = 0;
1193     my @results;
1194     
1195     $sth->execute;
1196       # || die "Cannot execute $query\n" . $sth->errstr;
1197     while (my $data = $sth->fetchrow_hashref) {
1198       $results[$count] = $data;
1199       $count++;
1200     } # while
1201     
1202     $sth->finish;
1203     $dbh->disconnect;
1204     return($count, @results);
1205 } # sub getitemsbybiblioitem
1206
1207
1208 sub isbnsearch {
1209     my ($isbn) = @_;
1210     my $dbh   = C4Connect;
1211     my $count = 0;
1212     my $query;
1213     my $sth;
1214     my @results;
1215     
1216     $isbn  = $dbh->quote($isbn);
1217     $query = "Select * from biblioitems where isbn = $isbn";
1218     $sth   = $dbh->prepare($query);
1219     
1220     $sth->execute;
1221     while (my $data = $sth->fetchrow_hashref) {
1222         $results[$count] = $data;
1223         $count++;
1224     } # while
1225
1226     $sth->finish;
1227     $dbh->disconnect;
1228     return($count, @results);
1229 } # sub isbnsearch
1230
1231
1232 sub keywordsearch {
1233   my ($keywordlist) = @_;
1234   my $dbh   = C4Connect;
1235   my $query = "Select * from biblio where";
1236   my $count = 0;
1237   my $sth;
1238   my @results;
1239   my @keywords = split(/ +/, $keywordlist);
1240   my $keyword = shift(@keywords);
1241
1242   $keyword =~ s/%/\\%/g;
1243   $keyword =~ s/_/\\_/;
1244   $keyword = "%" . $keyword . "%";
1245   $keyword = $dbh->quote($keyword);
1246   $query  .= " (author like $keyword) or
1247 (title like $keyword) or (unititle like $keyword) or
1248 (notes like $keyword) or (seriestitle like $keyword) or
1249 (abstract like $keyword)";
1250
1251   foreach $keyword (@keywords) {
1252     $keyword =~ s/%/\\%/;
1253     $keyword =~ s/_/\\_/;
1254     $keyword = "%" . $keyword . "%";
1255     $keyword = $dbh->quote($keyword);
1256     $query  .= " or (author like $keyword) or
1257 (title like $keyword) or (unititle like $keyword) or 
1258 (notes like $keyword) or (seriestitle like $keyword) or
1259 (abstract like $keyword)";
1260   } # foreach
1261   
1262   $sth = $dbh->prepare($query);
1263   $sth->execute;
1264   
1265   while (my $data = $sth->fetchrow_hashref) {
1266     $results[$count] = $data;
1267     $count++;
1268   } # while
1269   
1270   $sth->finish;
1271   $dbh->disconnect;
1272   return($count, @results);
1273 } # sub keywordsearch
1274
1275
1276 sub websitesearch {
1277     my ($keywordlist) = @_;
1278     my $dbh   = C4Connect;
1279     my $query = "Select distinct biblio.* from biblio, biblioitems where
1280 biblio.biblionumber = biblioitems.biblionumber and (";
1281     my $count = 0;
1282     my $sth;
1283     my @results;
1284     my @keywords = split(/ +/, $keywordlist);
1285     my $keyword = shift(@keywords);
1286
1287     $keyword =~ s/%/\\%/g;
1288     $keyword =~ s/_/\\_/;
1289     $keyword = "%" . $keyword . "%";
1290     $keyword = $dbh->quote($keyword);
1291     $query  .= " (url like $keyword)";
1292
1293     foreach $keyword (@keywords) {
1294         $keyword =~ s/%/\\%/;
1295         $keyword =~ s/_/\\_/;
1296         $keyword = "%" . $keyword . "%";
1297         $keyword = $dbh->quote($keyword);
1298         $query  .= " or (url like $keyword)";
1299     } # foreach
1300
1301     $query .= ")";
1302     $sth    = $dbh->prepare($query);
1303     $sth->execute;
1304
1305     while (my $data = $sth->fetchrow_hashref) {
1306         $results[$count] = $data;
1307         $count++;
1308     } # while
1309
1310     $sth->finish;
1311     $dbh->disconnect;
1312     return($count, @results);
1313 } # sub websitesearch
1314
1315
1316 END { }       # module clean-up code here (global destructor)