Altered newbiblio to be more generic - so can use with new acui.simple
[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 &makeitems &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);
21 %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
22
23 # your exported package globals go here,
24 # as well as any optionally exported functions
25
26 @EXPORT_OK   = qw($Var1 %Hashit);
27
28
29 # non-exported package globals go here
30 use vars qw(@more $stuff);
31
32 # initalize package globals, first exported ones
33
34 my $Var1   = '';
35 my %Hashit = ();
36
37
38
39 # then the others (which are still accessible as $Some::Module::stuff)
40 my $stuff  = '';
41 my @more   = ();
42
43 # all file-scoped lexicals must be created before
44 # the functions below that use them.
45
46 # file-private lexicals go here
47 my $priv_var    = '';
48 my %secret_hash = ();
49
50 # here's a file-private function as a closure,
51 # callable as &$priv_func;  it cannot be prototyped.
52 my $priv_func = sub {
53   # stuff goes here.
54   };
55   
56 # make all your functions, whether exported or not;
57
58 sub getorders {
59   my ($supplierid)=@_;
60   my $dbh=C4Connect;
61   my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where 
62   booksellerid='$supplierid' and (quantity > quantityreceived or
63   quantityreceived is NULL)
64   and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
65   $query.=" group by basketno order by entrydate desc";
66   #print $query;
67   my $sth=$dbh->prepare($query);
68   $sth->execute;
69   my @results;
70   my $i=0;
71   while (my $data=$sth->fetchrow_hashref){
72     $results[$i]=$data;
73     $i++;
74   }
75   $sth->finish;
76   $dbh->disconnect;
77   return ($i,\@results);
78 }
79
80 sub itemcount{
81   my ($biblio)=@_;
82   my $dbh=C4Connect;
83   my $query="Select count(*) from items where biblionumber=$biblio";
84 #  print $query;
85   my $sth=$dbh->prepare($query);
86   $sth->execute;
87   my $data=$sth->fetchrow_hashref;
88   $sth->finish;
89   $dbh->disconnect;
90   return($data->{'count(*)'});
91 }
92
93 sub getorder{
94   my ($bi,$bib)=@_;
95   my $dbh=C4Connect;
96   my $query="Select ordernumber from aqorders where biblionumber=$bib and
97   biblioitemnumber='$bi'";
98   my $sth=$dbh->prepare($query);
99   $sth->execute;
100   my $ordnum=$sth->fetchrow_hashref;
101   $sth->finish;
102   my $order=getsingleorder($ordnum->{'ordernumber'});
103   $dbh->disconnect;
104 #  print $query;
105   return ($order,$ordnum->{'ordernumber'});
106 }
107
108 sub getsingleorder {
109   my ($ordnum)=@_;
110   my $dbh=C4Connect;
111   my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown 
112   where aqorders.ordernumber='$ordnum' 
113   and biblio.biblionumber=aqorders.biblionumber and
114   biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
115   aqorders.ordernumber=aqorderbreakdown.ordernumber";
116   my $sth=$dbh->prepare($query);
117   $sth->execute;
118   my $data=$sth->fetchrow_hashref;
119   $sth->finish;
120   $dbh->disconnect;
121   return($data);
122 }
123
124 sub invoice {
125   my ($invoice)=@_;
126   my $dbh=C4Connect;
127   my $query="Select * from aqorders,biblio,biblioitems where
128   booksellerinvoicenumber='$invoice' 
129   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
130   aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
131   my $i=0;
132   my @results;
133   my $sth=$dbh->prepare($query);
134   $sth->execute;
135   while (my $data=$sth->fetchrow_hashref){
136     $results[$i]=$data;
137     $i++;
138   }
139   $sth->finish;
140   $dbh->disconnect;
141   return($i,@results);
142 }
143
144 sub getallorders {
145   #gets all orders from a certain supplier, orders them alphabetically
146   my ($supid)=@_;
147   my $dbh=C4Connect;
148   my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
149   and (cancelledby is NULL or cancelledby = '')
150   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=                    
151   aqorders.biblioitemnumber 
152   group by aqorders.biblioitemnumber 
153   order by
154   biblio.title";
155   my $i=0;
156   my @results;
157   my $sth=$dbh->prepare($query);
158   $sth->execute;
159   while (my $data=$sth->fetchrow_hashref){
160     $results[$i]=$data;
161     $i++;
162   }
163   $sth->finish;
164   $dbh->disconnect;
165   return($i,@results);
166 }
167
168 sub getrecorders {
169   #gets all orders from a certain supplier, orders them alphabetically
170   my ($supid)=@_;
171   my $dbh=C4Connect;
172   my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
173   and (cancelledby is NULL or cancelledby = '')
174   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=                    
175   aqorders.biblioitemnumber and
176   aqorders.quantityreceived>0
177   and aqorders.datereceived >=now()
178   group by aqorders.biblioitemnumber 
179   order by
180   biblio.title";
181   my $i=0;
182   my @results;
183   my $sth=$dbh->prepare($query);
184   $sth->execute;
185   while (my $data=$sth->fetchrow_hashref){
186     $results[$i]=$data;
187     $i++;
188   }
189   $sth->finish;
190   $dbh->disconnect;
191   return($i,@results);
192 }
193
194 sub ordersearch {
195   my ($search,$biblio,$catview)=@_;
196   my $dbh=C4Connect;
197   my $query="Select *,biblio.title from aqorders,biblioitems,biblio
198   where aqorders.biblioitemnumber=
199   biblioitems.biblioitemnumber and biblio.biblionumber=aqorders.biblionumber 
200   and (datecancellationprinted is NULL or datecancellationprinted =
201 '000-00-00')
202   and ((";
203   my @data=split(' ',$search);
204   my $count=@data;
205   for (my $i=0;$i<$count;$i++){
206     $query.= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
207   }
208   $query=~ s/ and $//;
209   $query.=" ) or biblioitems.isbn='$search' 
210   or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
211   if ($catview ne 'yes'){
212     $query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
213   }
214   $query.=" group by aqorders.ordernumber";
215   my $sth=$dbh->prepare($query);
216 #  print $query;
217   $sth->execute;
218   my $i=0;
219   my @results;
220   while (my $data=$sth->fetchrow_hashref){
221      my $sth2=$dbh->prepare("Select * from biblio where
222      biblionumber='$data->{'biblionumber'}'");
223      $sth2->execute;
224      my $data2=$sth2->fetchrow_hashref;
225      $sth2->finish;
226      $data->{'author'}=$data2->{'author'};
227      $data->{'seriestitle'}=$data2->{'seriestitle'};
228      $sth2=$dbh->prepare("Select * from aqorderbreakdown where
229     ordernumber=$data->{'ordernumber'}");
230     $sth2->execute;
231     $data2=$sth2->fetchrow_hashref;
232     $sth2->finish;
233     $data->{'branchcode'}=$data2->{'branchcode'};
234     $data->{'bookfundid'}=$data2->{'bookfundid'};
235     $results[$i]=$data;
236     $i++;
237   }
238   $sth->finish;
239   $dbh->disconnect;
240   return($i,@results);
241 }
242
243
244 sub bookseller {
245   my ($searchstring)=@_;
246   my $dbh=C4Connect;
247   my $query="Select * from aqbooksellers where name like '%$searchstring%' or
248   id = '$searchstring'";
249   my $sth=$dbh->prepare($query);
250   $sth->execute;
251   my @results;
252   my $i=0;
253   while (my $data=$sth->fetchrow_hashref){
254     $results[$i]=$data;
255     $i++;
256   }
257   $sth->finish;
258   $dbh->disconnect;
259   return($i,@results);
260 }
261
262 sub breakdown {
263   my ($id)=@_;
264   my $dbh=C4Connect;
265   my $query="Select * from aqorderbreakdown where ordernumber='$id'";
266   my $sth=$dbh->prepare($query);
267   $sth->execute;
268   my @results;
269   my $i=0;
270   while (my $data=$sth->fetchrow_hashref){
271     $results[$i]=$data;
272     $i++;
273   }
274   $sth->finish;
275   $dbh->disconnect;
276   return($i,\@results);
277 }
278
279 sub basket {
280   my ($basketno,$supplier)=@_;
281   my $dbh=C4Connect;
282   my $query="Select *,biblio.title from aqorders,biblio,biblioitems 
283   where basketno='$basketno'
284   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
285   =aqorders.biblioitemnumber 
286   and (datecancellationprinted is NULL or datecancellationprinted =
287   '0000-00-00')";
288   if ($supplier ne ''){
289     $query.=" and aqorders.booksellerid='$supplier'";
290   } 
291   $query.=" group by aqorders.ordernumber";
292   my $sth=$dbh->prepare($query);
293   $sth->execute;
294   my @results;
295 #  print $query;
296   my $i=0;
297   while (my $data=$sth->fetchrow_hashref){
298     $results[$i]=$data;
299     $i++;
300   }
301   $sth->finish;
302   $dbh->disconnect;
303   return($i,@results);
304 }
305
306 sub newbasket {
307   my $dbh=C4Connect;
308   my $query="Select max(basketno) from aqorders";
309   my $sth=$dbh->prepare($query);
310   $sth->execute;
311   my $data=$sth->fetchrow_arrayref;
312   my $basket=$$data[0];
313   $basket++;
314   $sth->finish;
315   $dbh->disconnect;
316   return($basket);
317 }
318
319 sub bookfunds {
320   my $dbh=C4Connect;
321   my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
322   =aqbudget.bookfundid 
323   and aqbudget.startdate='2001=07-01' 
324   group by aqbookfund.bookfundid order by bookfundname";
325   my $sth=$dbh->prepare($query);
326   $sth->execute;
327   my @results;
328   my $i=0;
329   while (my $data=$sth->fetchrow_hashref){
330     $results[$i]=$data;
331     $i++;
332   }
333   $sth->finish;
334   $dbh->disconnect;
335   return($i,@results);
336 }
337
338 sub branches {
339   my $dbh=C4Connect;
340   my $query="Select * from branches";
341   my $sth=$dbh->prepare($query);
342   $sth->execute;
343   my @results;
344   my $i=0;
345   while (my $data=$sth->fetchrow_hashref){
346     $results[$i]=$data;
347     $i++;
348   }
349   $sth->finish;
350   $dbh->disconnect;
351   return($i,@results);
352 }
353
354 sub bookfundbreakdown {
355   my ($id)=@_;
356   my $dbh=C4Connect;
357   my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
358   from aqorders,aqorderbreakdown where bookfundid='$id' and 
359   aqorders.ordernumber=aqorderbreakdown.ordernumber and ((budgetdate >=
360   '2001-07-01' and budgetdate <'2002-07-01') or
361   (datereceived >= '2001-07-01' and datereceived < '2002-07-01'))
362   and (datecancellationprinted is NULL or
363   datecancellationprinted='0000-00-00')";
364   my $sth=$dbh->prepare($query);
365   $sth->execute;
366   my $comtd=0;
367   my $spent=0;
368   while (my $data=$sth->fetchrow_hashref){
369     if ($data->{'subscription'} == 1){
370       $spent+=$data->{'quantity'}*$data->{'unitprice'};
371     } else {
372       my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
373       $comtd+=($data->{'ecost'})*$leftover;
374       $spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
375     }
376   }
377   $sth->finish;
378   $dbh->disconnect;
379   return($spent,$comtd);
380 }
381       
382
383 sub newbiblio {
384   my ($biblio) = @_;
385   my $dbh    = &C4Connect;
386   my $query  = "Select max(biblionumber) from biblio";
387   my $sth    = $dbh->prepare($query);
388   $sth->execute;
389   my $data   = $sth->fetchrow_arrayref;
390   my $bibnum = $$data[0] + 1;
391   my $series = 0;
392
393   $biblio->{'title'}       = $dbh->quote($biblio->{'title'});
394   $biblio->{'author'}      = $dbh->quote($biblio->{'author'});
395   $biblio->{'copyright'}   = $dbh->quote($biblio->{'copyright'});
396   $biblio->{'seriestitle'} = $dbh->quote($biblio->{'seriestitle'});
397   $biblio->{'notes'}       = $dbh->quote($biblio->{'notes'});
398   if ($biblio->{'seriestitle'}) { $series = 1 };
399
400   $sth->finish;
401   $query = "insert into biblio set
402 biblionumber  = $bibnum,
403 title         = $biblio->{'title'},
404 author        = $biblio->{'author'},
405 copyrightdate = $biblio->{'copyright'},
406 series        = $series;
407 seriestitle   = $biblio->{'seriestitle'},
408 notes         = $biblio->{'notes'}";
409
410   $sth = $dbh->prepare($query);
411 #  print $query;
412   $sth->execute;
413
414   $sth->finish;
415   $dbh->disconnect;
416   return($bibnum);
417 }
418
419 sub modbiblio {
420   my ($bibnum,$title,$author,$copyright,$seriestitle,$serial,$unititle,$notes)=@_;
421   my $dbh=C4Connect;
422   #$title=~ s/\'/\\\'/g;
423   #$author=~ s/\'/\\\'/g;
424   my $query="update biblio set title='$title',
425   author='$author',copyrightdate='$copyright',
426   seriestitle='$seriestitle',serial='$serial',unititle='$unititle',notes='$notes'
427   where
428   biblionumber=$bibnum";
429   my $sth=$dbh->prepare($query);
430   $sth->execute;
431   $sth->finish;
432   $dbh->disconnect;
433     return($bibnum);
434 }
435
436 sub modsubtitle {
437   my ($bibnum,$subtitle)=@_;
438   my $dbh=C4Connect;
439   my $query="update bibliosubtitle set subtitle='$subtitle' where biblionumber=$bibnum";
440   my $sth=$dbh->prepare($query);
441   $sth->execute;
442   $sth->finish;
443   $dbh->disconnect;
444 }
445
446 sub modaddauthor {
447   my ($bibnum,$author)=@_;
448   my $dbh=C4Connect;
449   my $query="Delete from additionalauthors where biblionumber=$bibnum";
450   my $sth=$dbh->prepare($query);
451   $sth->execute;
452     $query="insert into additionalauthors (author,biblionumber) values ('$author','$bibnum')";
453   $sth->finish;
454   $sth=$dbh->prepare($query);
455   $sth->execute;
456   $sth->finish;
457   $dbh->disconnect;
458
459
460 sub modsubject {
461   my ($bibnum,$force,@subject)=@_;
462   my $dbh=C4Connect;
463   my $count=@subject;
464   my $error;
465   for (my $i=0;$i<$count;$i++){
466     $subject[$i]=~ s/^ //g;
467     $subject[$i]=~ s/ $//g;
468     my $query="select * from catalogueentry where entrytype='s' and
469     catalogueentry='$subject[$i]'";
470     my $sth=$dbh->prepare($query);
471     $sth->execute;
472     if (my $data=$sth->fetchrow_hashref){
473       
474     } else {
475       if ($force eq $subject[$i]){
476          #subject not in aut, chosen to force anway
477          #so insert into cataloguentry so its in auth file
478          $query="Insert into catalogueentry (entrytype,catalogueentry)
479          values ('s','$subject[$i]')";
480          my $sth2=$dbh->prepare($query);
481 #        print $query;
482          $sth2->execute;
483          $sth2->finish;
484       } else {      
485         $error="$subject[$i]\n does not exist in the subject authority file";
486         $query= "Select * from catalogueentry where
487         entrytype='s' and (catalogueentry like '$subject[$i] %' or 
488         catalogueentry like '% $subject[$i] %' or catalogueentry like
489         '% $subject[$i]')";
490         my $sth2=$dbh->prepare($query);
491 #        print $query;
492         $sth2->execute;
493         while (my $data=$sth2->fetchrow_hashref){
494           $error=$error."<br>$data->{'catalogueentry'}";
495         }
496         $sth2->finish;
497 #       $error=$error."<br>$query";
498      }
499    }
500     $sth->finish;
501   }
502   if ($error eq ''){  
503     my $query="Delete from bibliosubject where biblionumber=$bibnum";
504 #  print $query;
505     my $sth=$dbh->prepare($query);
506 #  print $query;
507     $sth->execute;
508     $sth->finish;
509     for (my $i=0;$i<$count;$i++){
510       $sth=$dbh->prepare("Insert into bibliosubject values ('$subject[$i]',$bibnum)");
511 #     print $subject[$i];
512       $sth->execute;
513       $sth->finish;
514     }
515   }
516   $dbh->disconnect;
517   return($error);
518 }
519
520 sub modbibitem {
521   my ($bibitemnum,$itemtype,$isbn,$publishercode,$publicationdate,$classification,$dewey,$subclass,$illus,$pages,$volumeddesc,$notes,$size,$place)=@_;
522   my $dbh=C4Connect;
523   my $query="update biblioitems set itemtype='$itemtype',
524   isbn='$isbn',publishercode='$publishercode',publicationyear='$publicationdate',
525   classification='$classification',dewey='$dewey',subclass='$subclass',illus='$illus',
526   pages='$pages',volumeddesc='$volumeddesc',notes='$notes',size='$size',place='$place'
527   where
528   biblioitemnumber=$bibitemnum";
529   my $sth=$dbh->prepare($query);
530 #    print $query;
531   $sth->execute;
532   $sth->finish;
533   $dbh->disconnect;
534 }
535
536 sub modnote {
537   my ($bibitemnum,$note)=@_;
538   my $dbh=C4Connect;
539   my $query="update biblioitems set notes='$note' where
540   biblioitemnumber='$bibitemnum'";
541   my $sth=$dbh->prepare($query);
542   $sth->execute;
543   $sth->finish;
544   $dbh->disconnect;
545 }
546
547 sub newbiblioitem {
548   my ($bibnum,$itemtype,$isbn,$volinf,$class)=@_;
549   my $dbh=C4Connect;
550   my $query="Select max(biblioitemnumber) from biblioitems";
551   my $sth=$dbh->prepare($query);
552   $sth->execute;
553   my $data=$sth->fetchrow_arrayref;
554   my $bibitemnum=$$data[0];
555   $bibitemnum++;
556   $sth->finish;
557   $query="insert into biblioitems (biblionumber,biblioitemnumber,
558   itemtype,isbn,volumeddesc,classification) 
559   values
560   ($bibnum,$bibitemnum,'$itemtype','$isbn','$volinf','$class')";
561   $sth=$dbh->prepare($query);
562 #  print $query;
563   $sth->execute;
564   $sth->finish;
565   $dbh->disconnect;
566   return($bibitemnum);
567 }
568
569 sub newsubject {
570   my ($bibnum)=@_;
571   my $dbh=C4Connect;
572   my $query="insert into bibliosubject (biblionumber) values
573   ($bibnum)";
574   my $sth=$dbh->prepare($query);
575 #  print $query;
576   $sth->execute;
577   $sth->finish;
578   $dbh->disconnect;
579 }
580
581 sub newsubtitle {
582   my ($bibnum)=@_;
583   my $dbh=C4Connect;
584   my $query="insert into bibliosubtitle (biblionumber) values
585   ($bibnum)";
586   my $sth=$dbh->prepare($query);
587 #  print $query;
588   $sth->execute;
589   $sth->finish;
590   $dbh->disconnect;
591 }
592
593 sub neworder {
594   my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
595   if ($budget eq 'now'){
596     $budget="now()";
597   } else {
598     $budget="'2001-07-01'";
599   }
600   if ($sub eq 'yes'){
601     $sub=1;
602   } else {
603     $sub=0;
604   }
605   my $dbh=C4Connect;
606   my $query="insert into aqorders (biblionumber,title,basketno,
607   quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
608   biblioitemnumber,rrp,ecost,gst,budgetdate,unitprice,subscription,booksellerinvoicenumber)
609
610   values
611   ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
612   '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst',$budget,'$cost',
613   '$sub','$invoice')";
614   my $sth=$dbh->prepare($query);
615 #  print $query;
616   $sth->execute;
617   $sth->finish;
618   $query="select * from aqorders where
619   biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
620   $sth=$dbh->prepare($query);
621   $sth->execute;
622   my $data=$sth->fetchrow_hashref;
623   $sth->finish;
624   $ordnum=$data->{'ordernumber'};
625   $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
626   ($ordnum,'$bookfund')";
627   $sth=$dbh->prepare($query);
628 #  print $query;
629   $sth->execute;
630   $sth->finish;
631   $dbh->disconnect;
632 }
633
634 sub delorder {
635   my ($bibnum,$ordnum)=@_;
636   my $dbh=C4Connect;
637   my $query="update aqorders set datecancellationprinted=now()
638   where biblionumber='$bibnum' and
639   ordernumber='$ordnum'";
640   my $sth=$dbh->prepare($query);
641   #print $query;
642   $sth->execute;
643   $sth->finish;
644   my $count=itemcount($bibnum);
645   if ($count == 0){
646     delbiblio($bibnum);
647   }
648   $dbh->disconnect;
649 }
650
651 sub modorder {
652   my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
653   my $dbh=C4Connect;
654   my $query="update aqorders set title='$title',
655   quantity='$quantity',listprice='$listprice',basketno='$basketno', 
656   rrp='$rrp',ecost='$ecost',unitprice='$cost',
657   booksellerinvoicenumber='$invoice'
658   where
659   ordernumber=$ordnum and biblionumber=$bibnum";
660   my $sth=$dbh->prepare($query);
661 #  print $query;
662   $sth->execute;
663   $sth->finish;
664   $query="update aqorderbreakdown set bookfundid=$bookfund where
665   ordernumber=$ordnum";
666   $sth=$dbh->prepare($query);
667 #  print $query;
668   $sth->execute;
669   $sth->finish;
670   $dbh->disconnect;
671 }
672
673 sub newordernum {
674   my $dbh=C4Connect;
675   my $query="Select max(ordernumber) from aqorders";
676   my $sth=$dbh->prepare($query);
677   $sth->execute;
678   my $data=$sth->fetchrow_arrayref;
679   my $ordnum=$$data[0];
680   $ordnum++;
681   $sth->finish;
682   $dbh->disconnect;
683   return($ordnum);
684 }
685
686 sub receiveorder {
687   my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
688   my $dbh=C4Connect;
689   my $query="update aqorders set quantityreceived='$quantrec',
690   datereceived=now(),booksellerinvoicenumber='$invoiceno',
691   biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
692   rrp='$rrp'
693   where biblionumber=$biblio and ordernumber=$ordnum
694   ";
695 #  print $query;
696   my $sth=$dbh->prepare($query);
697   $sth->execute;
698   $sth->finish;
699   $query="update aqorderbreakdown set bookfundid=$bookfund where
700   ordernumber=$ordnum";
701   $sth=$dbh->prepare($query);
702 #  print $query;
703   $sth->execute;
704   $sth->finish;  
705   $dbh->disconnect;
706 }
707 sub updaterecorder{
708   my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
709   my $dbh=C4Connect;
710   my $query="update aqorders set
711   unitprice='$cost', rrp='$rrp'
712   where biblionumber=$biblio and ordernumber=$ordnum
713   ";
714 #  print $query;
715   my $sth=$dbh->prepare($query);
716   $sth->execute;
717   $sth->finish;
718   $query="update aqorderbreakdown set bookfundid=$bookfund where
719   ordernumber=$ordnum";
720   $sth=$dbh->prepare($query);
721 #  print $query;
722   $sth->execute;
723   $sth->finish;  
724   $dbh->disconnect;
725 }
726
727 sub curconvert {
728   my ($currency,$price)=@_;
729   my $dbh=C4Connect;
730   my $query="Select rate from currency where currency='$currency'";
731   my $sth=$dbh->prepare($query);
732   $sth->execute;
733   my $data=$sth->fetchrow_hashref;
734   $sth->finish;
735   $dbh->disconnect;
736   my $cur=$data->{'rate'};
737   if ($cur==0){
738     $cur=1;
739   }
740   my $price=$price / $cur;
741   return($price);
742 }
743
744 sub getcurrencies {
745   my $dbh=C4Connect;
746   my $query="Select * from currency";
747   my $sth=$dbh->prepare($query);
748   $sth->execute;
749   my @results;
750   my $i=0;
751   while (my $data=$sth->fetchrow_hashref){
752     $results[$i]=$data;
753     $i++;
754   }
755   $sth->finish;
756   $dbh->disconnect;
757   return($i,\@results);
758
759
760 sub getcurrency {
761   my ($cur)=@_;
762   my $dbh=C4Connect;
763   my $query="Select * from currency where currency='$cur'";
764   my $sth=$dbh->prepare($query);
765   $sth->execute;
766
767   my $data=$sth->fetchrow_hashref;
768   $sth->finish;
769   $dbh->disconnect;
770   return($data);
771
772
773 sub updatecurrencies {
774   my ($currency,$rate)=@_;
775   my $dbh=C4Connect;
776   my $query="update currency set rate=$rate where currency='$currency'";
777   my $sth=$dbh->prepare($query);
778   $sth->execute;
779   $sth->finish;
780   $dbh->disconnect;
781
782
783 sub updatesup {
784    my ($data)=@_;
785    my $dbh=C4Connect;
786    my $query="Update aqbooksellers set
787    name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
788    address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
789    phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
790    contact='$data->{'contact'}',contpos='$data->{'contpos'}',
791    contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
792    '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
793    '$data->{'contnotes'}', active=$data->{'active'},
794    listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
795    gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
796    invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
797    discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
798    nocalc='$data->{'nocalc'}'
799    where id='$data->{'id'}'";
800    my $sth=$dbh->prepare($query);
801    $sth->execute;
802    $sth->finish;
803    $dbh->disconnect;
804 #   print $query;
805 }
806
807 sub insertsup {
808   my ($data)=@_;
809   my $dbh=C4Connect;
810   my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
811   $sth->execute;
812   my $data2=$sth->fetchrow_hashref;
813   $sth->finish;
814   $data2->{'max(id)'}++;
815   $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
816   $sth->execute;
817   $sth->finish;
818   $data->{'id'}=$data2->{'max(id)'};
819   $dbh->disconnect;
820   updatesup($data);
821   return($data->{'id'});
822 }
823
824 sub makeitems {
825   my
826 ($count,$bibitemno,$biblio,$replacement,$price,$booksellerid,$branch,$loan,@barcodes)=@_;
827   my $dbh=C4Connect;
828   my $sth=$dbh->prepare("Select max(itemnumber) from items");
829   $sth->execute;
830   my $data=$sth->fetchrow_hashref;
831   my $item=$data->{'max(itemnumber)'};
832   $sth->finish;
833   $item++;
834   my $error;
835   for (my $i=0;$i<$count;$i++){
836     $barcodes[$i]=uc $barcodes[$i];
837     my $query="Insert into items (biblionumber,biblioitemnumber,itemnumber,barcode,
838     booksellerid,dateaccessioned,homebranch,holdingbranch,price,replacementprice,
839     replacementpricedate,notforloan) values
840     ($biblio,$bibitemno,$item,'$barcodes[$i]','$booksellerid',now(),'$branch',
841     '$branch','$price','$replacement',now(),$loan)";
842     my $sth=$dbh->prepare($query);
843     $sth->execute;
844     $error.=$sth->errstr;
845     $sth->finish;
846     $item++;
847 #    print $query;
848   }
849   $dbh->disconnect;
850   return($error);
851 }
852
853 sub checkitems{
854   my ($count,@barcodes)=@_;
855   my $dbh=C4Connect;
856   my $error;
857   for (my $i=0;$i<$count;$i++){
858     $barcodes[$i]=uc $barcodes[$i];
859     my $query="Select * from items where barcode='$barcodes[$i]'";
860     my $sth=$dbh->prepare($query);
861     $sth->execute;
862     if (my $data=$sth->fetchrow_hashref){
863       $error.=" Duplicate Barcode: $barcodes[$i]";
864     }
865     $sth->finish;
866   }
867   $dbh->disconnect;
868   return($error);
869 }
870
871 sub moditem {
872   my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
873   my $dbh=C4Connect;
874   my $query="update items set biblioitemnumber=$bibitemnum,
875   barcode='$barcode',itemnotes='$notes'
876   where itemnumber=$itemnum";
877   if ($barcode eq ''){
878     $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum";
879   }
880   if ($lost ne ''){
881     $query="update items set biblioitemnumber=$bibitemnum,
882       barcode='$barcode',itemnotes='$notes',homebranch='$homebranch',
883       itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum";
884   }
885   if ($replacement ne ''){
886     $query=~ s/ where/,replacementprice='$replacement' where/;
887   }
888
889   my $sth=$dbh->prepare($query);
890   $sth->execute;
891   $sth->finish;
892   $dbh->disconnect;
893 }
894
895 sub updatecost{
896   my($price,$rrp,$itemnum)=@_;
897   my $dbh=C4Connect;
898   my $query="update items set price='$price',replacementprice='$rrp'
899   where itemnumber=$itemnum";
900   my $sth=$dbh->prepare($query);
901   $sth->execute;
902   $sth->finish;
903   $dbh->disconnect;
904 }
905 sub countitems{
906   my ($bibitemnum)=@_;
907   my $dbh=C4Connect;
908   my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'";
909   my $sth=$dbh->prepare($query);
910   $sth->execute;
911   my $data=$sth->fetchrow_hashref;
912   $sth->finish;
913   $dbh->disconnect;
914   return($data->{'count(*)'});
915 }
916
917 sub findall {
918   my ($biblionumber)=@_;
919   my $dbh=C4Connect;
920   my $query="Select * from biblioitems,items,itemtypes where 
921   biblioitems.biblionumber=$biblionumber 
922   and biblioitems.biblioitemnumber=items.biblioitemnumber and
923   itemtypes.itemtype=biblioitems.itemtype
924   order by items.biblioitemnumber";
925   my $sth=$dbh->prepare($query);
926   $sth->execute;
927   my @results;
928   my $i;
929   while (my $data=$sth->fetchrow_hashref){
930     $results[$i]=$data;
931     $i++;
932   }
933   $sth->finish;
934   $dbh->disconnect;
935   return(@results);
936 }
937
938 sub needsmod{
939   my ($bibitemnum,$itemtype)=@_;
940   my $dbh=C4Connect;
941   my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
942   and itemtype='$itemtype'";
943   my $sth=$dbh->prepare($query);
944   $sth->execute;
945   my $result=0;
946   if (my $data=$sth->fetchrow_hashref){
947     $result=1;
948   }
949   $sth->finish;
950   $dbh->disconnect;
951   return($result);
952 }
953
954 sub delitem{
955   my ($itemnum)=@_;
956   my $dbh=C4Connect;
957   my $query="select * from items where itemnumber=$itemnum";
958   my $sth=$dbh->prepare($query);
959   $sth->execute;
960   my @data=$sth->fetchrow_array;
961   $sth->finish;
962   $query="Insert into deleteditems values (";
963   foreach my $temp (@data){
964     $query=$query."'$temp',";
965   }
966   $query=~ s/\,$/\)/;
967 #  print $query;
968   $sth=$dbh->prepare($query);
969   $sth->execute;
970   $sth->finish;
971   $query = "Delete from items where itemnumber=$itemnum";
972   $sth=$dbh->prepare($query);
973   $sth->execute;
974   $sth->finish;
975   $dbh->disconnect;
976 }
977
978 sub delbibitem{
979   my ($itemnum)=@_;
980   my $dbh=C4Connect;
981   my $query="select * from biblioitems where biblioitemnumber=$itemnum";
982   my $sth=$dbh->prepare($query);
983   $sth->execute;
984   if (my @data=$sth->fetchrow_array){
985     $sth->finish;
986     $query="Insert into deletedbiblioitems values (";
987     foreach my $temp (@data){
988       $temp=~ s/\'/\\\'/g;
989       $query=$query."'$temp',";
990     }
991     $query=~ s/\,$/\)/;
992 #   print $query;
993     $sth=$dbh->prepare($query);
994     $sth->execute;
995     $sth->finish;
996     $query = "Delete from biblioitems where biblioitemnumber=$itemnum";
997     $sth=$dbh->prepare($query);
998     $sth->execute;
999     $sth->finish;
1000   }
1001   $sth->finish;
1002   $dbh->disconnect;
1003 }
1004
1005 sub delbiblio{
1006   my ($biblio)=@_;
1007   my $dbh=C4Connect;
1008   my $query="select * from biblio where biblionumber=$biblio";
1009   my $sth=$dbh->prepare($query);
1010   $sth->execute;
1011   if (my @data=$sth->fetchrow_array){
1012     $sth->finish;
1013     $query="Insert into deletedbiblio values (";
1014     foreach my $temp (@data){
1015       $temp=~ s/\'/\\\'/g;
1016       $query=$query."'$temp',";
1017     }
1018     $query=~ s/\,$/\)/;
1019 #   print $query;
1020     $sth=$dbh->prepare($query);
1021     $sth->execute;
1022     $sth->finish;
1023     $query = "Delete from biblio where biblionumber=$biblio";
1024     $sth=$dbh->prepare($query);
1025     $sth->execute;
1026     $sth->finish;
1027   }
1028   $sth->finish;
1029   $dbh->disconnect;
1030 }
1031
1032 END { }       # module clean-up code here (global destructor)
1033   
1034