Acquisitions::newbiblioitem updated to be usable for new acqui.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 &getitemtypes &getbiblio);
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 ($biblioitem) = @_;
549   my $dbh   = C4Connect;
550   my $query = "Select max(biblioitemnumber) from biblioitems";
551   my $sth   = $dbh->prepare($query);
552   my $data;
553   my $bibitemnum;
554   
555   $biblioitem->{'volume'}          = $dbh->quote($biblioitem->{'volume'});
556   $biblioitem->{'number'}          = $dbh->quote($biblioitem->{'number'});
557   $biblioitem->{'classification'}  = $dbh->quote($biblioitem->{'classification'});
558   $biblioitem->{'itemtype'}        = $dbh->quote($biblioitem->{'itemtype'});
559   $biblioitem->{'isbn'}            = $dbh->quote($biblioitem->{'isbn'});
560   $biblioitem->{'issn'}            = $dbh->quote($biblioitem->{'issn'});
561   $biblioitem->{'dewey'}           = $dbh->quote($biblioitem->{'dewey'});
562   $biblioitem->{'subclass'}        = $dbh->quote($biblioitem->{'subclass'});
563   $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
564   $biblioitem->{'publishercode'}   = $dbh->quote($biblioitem->{'publishercode'});
565   $biblioitem->{'volumedate'}      = $dbh->quote($biblioitem->{'volumedate'});
566   $biblioitem->{'volumeddesc'}     = $dbh->quote($biblioitem->{'volumeddesc'});  $biblioitem->{'illus'}            = $dbh->quote($biblioitem->{'illus'});
567   $biblioitem->{'pages'}           = $dbh->quote($biblioitem->{'pages'});
568   $biblioitem->{'notes'}           = $dbh->quote($biblioitem->{'notes'});
569   $biblioitem->{'size'}            = $dbh->quote($biblioitem->{'size'});
570   $biblioitem->{'place'}           = $dbh->quote($biblioitem->{'place'});
571   
572   $sth->execute;
573   $data       = $sth->fetchrow_arrayref;
574   $bibitemnum = $$data[0] + 1;
575
576   $sth->finish;
577
578   $query = "insert into biblioitems set
579 biblioitemnumber = $bibitemnum,
580 biblionumber     = $biblioitem->{'biblionumber'},
581 volume           = $biblioitem->{'volume'},
582 number           = $biblioitem->{'number'},
583 classification   = $biblioitem->{'classification'},
584 itemtype         = $biblioitem->{'itemtype'},
585 isbn             = $biblioitem->{'isbn'},
586 issn             = $biblioitem->{'issn'},
587 dewey            = $biblioitem->{'dewey'},
588 subclass         = $biblioitem->{'subclass'},
589 publicationyear  = $biblioitem->{'publicationyear'},
590 publishercode    = $biblioitem->{'publishercode'},
591 volumedate       = $biblioitem->{'volumedate'},
592 volumeddesc      = $biblioitem->{'volumeddesc'},
593 illus            = $biblioitem->{'illus'},
594 pages            = $biblioitem->{'pages'},
595 notes            = $biblioitem->{'notes'},
596 size             = $biblioitem->{'size'},
597 place            = $biblioitem->{'place'}";
598
599   $sth = $dbh->prepare($query);
600   $sth->execute;
601
602   $sth->finish;
603   $dbh->disconnect;
604   return($bibitemnum);
605 }
606
607 sub newsubject {
608   my ($bibnum)=@_;
609   my $dbh=C4Connect;
610   my $query="insert into bibliosubject (biblionumber) values
611   ($bibnum)";
612   my $sth=$dbh->prepare($query);
613 #  print $query;
614   $sth->execute;
615   $sth->finish;
616   $dbh->disconnect;
617 }
618
619 sub newsubtitle {
620   my ($bibnum, $subtitle) = @_;
621   my $dbh   = C4Connect;
622   $subtitle = $dbh->quote($subtitle);
623   my $query = "insert into bibliosubtitle set
624 biblionumber = $bibnum,
625 subtitle = $subtitle";
626   my $sth   = $dbh->prepare($query);
627
628   $sth->execute;
629
630   $sth->finish;
631   $dbh->disconnect;
632 }
633
634 sub neworder {
635   my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
636   if ($budget eq 'now'){
637     $budget="now()";
638   } else {
639     $budget="'2001-07-01'";
640   }
641   if ($sub eq 'yes'){
642     $sub=1;
643   } else {
644     $sub=0;
645   }
646   my $dbh=C4Connect;
647   my $query="insert into aqorders (biblionumber,title,basketno,
648   quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
649   biblioitemnumber,rrp,ecost,gst,budgetdate,unitprice,subscription,booksellerinvoicenumber)
650
651   values
652   ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
653   '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst',$budget,'$cost',
654   '$sub','$invoice')";
655   my $sth=$dbh->prepare($query);
656 #  print $query;
657   $sth->execute;
658   $sth->finish;
659   $query="select * from aqorders where
660   biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
661   $sth=$dbh->prepare($query);
662   $sth->execute;
663   my $data=$sth->fetchrow_hashref;
664   $sth->finish;
665   $ordnum=$data->{'ordernumber'};
666   $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
667   ($ordnum,'$bookfund')";
668   $sth=$dbh->prepare($query);
669 #  print $query;
670   $sth->execute;
671   $sth->finish;
672   $dbh->disconnect;
673 }
674
675 sub delorder {
676   my ($bibnum,$ordnum)=@_;
677   my $dbh=C4Connect;
678   my $query="update aqorders set datecancellationprinted=now()
679   where biblionumber='$bibnum' and
680   ordernumber='$ordnum'";
681   my $sth=$dbh->prepare($query);
682   #print $query;
683   $sth->execute;
684   $sth->finish;
685   my $count=itemcount($bibnum);
686   if ($count == 0){
687     delbiblio($bibnum);
688   }
689   $dbh->disconnect;
690 }
691
692 sub modorder {
693   my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
694   my $dbh=C4Connect;
695   my $query="update aqorders set title='$title',
696   quantity='$quantity',listprice='$listprice',basketno='$basketno', 
697   rrp='$rrp',ecost='$ecost',unitprice='$cost',
698   booksellerinvoicenumber='$invoice'
699   where
700   ordernumber=$ordnum and biblionumber=$bibnum";
701   my $sth=$dbh->prepare($query);
702 #  print $query;
703   $sth->execute;
704   $sth->finish;
705   $query="update aqorderbreakdown set bookfundid=$bookfund where
706   ordernumber=$ordnum";
707   $sth=$dbh->prepare($query);
708 #  print $query;
709   $sth->execute;
710   $sth->finish;
711   $dbh->disconnect;
712 }
713
714 sub newordernum {
715   my $dbh=C4Connect;
716   my $query="Select max(ordernumber) from aqorders";
717   my $sth=$dbh->prepare($query);
718   $sth->execute;
719   my $data=$sth->fetchrow_arrayref;
720   my $ordnum=$$data[0];
721   $ordnum++;
722   $sth->finish;
723   $dbh->disconnect;
724   return($ordnum);
725 }
726
727 sub receiveorder {
728   my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
729   my $dbh=C4Connect;
730   my $query="update aqorders set quantityreceived='$quantrec',
731   datereceived=now(),booksellerinvoicenumber='$invoiceno',
732   biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
733   rrp='$rrp'
734   where biblionumber=$biblio and ordernumber=$ordnum
735   ";
736 #  print $query;
737   my $sth=$dbh->prepare($query);
738   $sth->execute;
739   $sth->finish;
740   $query="update aqorderbreakdown set bookfundid=$bookfund where
741   ordernumber=$ordnum";
742   $sth=$dbh->prepare($query);
743 #  print $query;
744   $sth->execute;
745   $sth->finish;  
746   $dbh->disconnect;
747 }
748 sub updaterecorder{
749   my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
750   my $dbh=C4Connect;
751   my $query="update aqorders set
752   unitprice='$cost', 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
768 sub curconvert {
769   my ($currency,$price)=@_;
770   my $dbh=C4Connect;
771   my $query="Select rate from currency where currency='$currency'";
772   my $sth=$dbh->prepare($query);
773   $sth->execute;
774   my $data=$sth->fetchrow_hashref;
775   $sth->finish;
776   $dbh->disconnect;
777   my $cur=$data->{'rate'};
778   if ($cur==0){
779     $cur=1;
780   }
781   my $price=$price / $cur;
782   return($price);
783 }
784
785 sub getcurrencies {
786   my $dbh=C4Connect;
787   my $query="Select * from currency";
788   my $sth=$dbh->prepare($query);
789   $sth->execute;
790   my @results;
791   my $i=0;
792   while (my $data=$sth->fetchrow_hashref){
793     $results[$i]=$data;
794     $i++;
795   }
796   $sth->finish;
797   $dbh->disconnect;
798   return($i,\@results);
799
800
801 sub getcurrency {
802   my ($cur)=@_;
803   my $dbh=C4Connect;
804   my $query="Select * from currency where currency='$cur'";
805   my $sth=$dbh->prepare($query);
806   $sth->execute;
807
808   my $data=$sth->fetchrow_hashref;
809   $sth->finish;
810   $dbh->disconnect;
811   return($data);
812
813
814 sub updatecurrencies {
815   my ($currency,$rate)=@_;
816   my $dbh=C4Connect;
817   my $query="update currency set rate=$rate where currency='$currency'";
818   my $sth=$dbh->prepare($query);
819   $sth->execute;
820   $sth->finish;
821   $dbh->disconnect;
822
823
824 sub updatesup {
825    my ($data)=@_;
826    my $dbh=C4Connect;
827    my $query="Update aqbooksellers set
828    name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
829    address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
830    phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
831    contact='$data->{'contact'}',contpos='$data->{'contpos'}',
832    contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
833    '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
834    '$data->{'contnotes'}', active=$data->{'active'},
835    listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
836    gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
837    invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
838    discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
839    nocalc='$data->{'nocalc'}'
840    where id='$data->{'id'}'";
841    my $sth=$dbh->prepare($query);
842    $sth->execute;
843    $sth->finish;
844    $dbh->disconnect;
845 #   print $query;
846 }
847
848 sub insertsup {
849   my ($data)=@_;
850   my $dbh=C4Connect;
851   my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
852   $sth->execute;
853   my $data2=$sth->fetchrow_hashref;
854   $sth->finish;
855   $data2->{'max(id)'}++;
856   $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
857   $sth->execute;
858   $sth->finish;
859   $data->{'id'}=$data2->{'max(id)'};
860   $dbh->disconnect;
861   updatesup($data);
862   return($data->{'id'});
863 }
864
865 sub makeitems {
866   my
867 ($count,$bibitemno,$biblio,$replacement,$price,$booksellerid,$branch,$loan,@barcodes)=@_;
868   my $dbh=C4Connect;
869   my $sth=$dbh->prepare("Select max(itemnumber) from items");
870   $sth->execute;
871   my $data=$sth->fetchrow_hashref;
872   my $item=$data->{'max(itemnumber)'};
873   $sth->finish;
874   $item++;
875   my $error;
876   for (my $i=0;$i<$count;$i++){
877     $barcodes[$i]=uc $barcodes[$i];
878     my $query="Insert into items (biblionumber,biblioitemnumber,itemnumber,barcode,
879     booksellerid,dateaccessioned,homebranch,holdingbranch,price,replacementprice,
880     replacementpricedate,notforloan) values
881     ($biblio,$bibitemno,$item,'$barcodes[$i]','$booksellerid',now(),'$branch',
882     '$branch','$price','$replacement',now(),$loan)";
883     my $sth=$dbh->prepare($query);
884     $sth->execute;
885     $error.=$sth->errstr;
886     $sth->finish;
887     $item++;
888 #    print $query;
889   }
890   $dbh->disconnect;
891   return($error);
892 }
893
894 sub checkitems{
895   my ($count,@barcodes)=@_;
896   my $dbh=C4Connect;
897   my $error;
898   for (my $i=0;$i<$count;$i++){
899     $barcodes[$i]=uc $barcodes[$i];
900     my $query="Select * from items where barcode='$barcodes[$i]'";
901     my $sth=$dbh->prepare($query);
902     $sth->execute;
903     if (my $data=$sth->fetchrow_hashref){
904       $error.=" Duplicate Barcode: $barcodes[$i]";
905     }
906     $sth->finish;
907   }
908   $dbh->disconnect;
909   return($error);
910 }
911
912 sub moditem {
913   my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
914   my $dbh=C4Connect;
915   my $query="update items set biblioitemnumber=$bibitemnum,
916   barcode='$barcode',itemnotes='$notes'
917   where itemnumber=$itemnum";
918   if ($barcode eq ''){
919     $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum";
920   }
921   if ($lost ne ''){
922     $query="update items set biblioitemnumber=$bibitemnum,
923       barcode='$barcode',itemnotes='$notes',homebranch='$homebranch',
924       itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum";
925   }
926   if ($replacement ne ''){
927     $query=~ s/ where/,replacementprice='$replacement' where/;
928   }
929
930   my $sth=$dbh->prepare($query);
931   $sth->execute;
932   $sth->finish;
933   $dbh->disconnect;
934 }
935
936 sub updatecost{
937   my($price,$rrp,$itemnum)=@_;
938   my $dbh=C4Connect;
939   my $query="update items set price='$price',replacementprice='$rrp'
940   where itemnumber=$itemnum";
941   my $sth=$dbh->prepare($query);
942   $sth->execute;
943   $sth->finish;
944   $dbh->disconnect;
945 }
946 sub countitems{
947   my ($bibitemnum)=@_;
948   my $dbh=C4Connect;
949   my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'";
950   my $sth=$dbh->prepare($query);
951   $sth->execute;
952   my $data=$sth->fetchrow_hashref;
953   $sth->finish;
954   $dbh->disconnect;
955   return($data->{'count(*)'});
956 }
957
958 sub findall {
959   my ($biblionumber)=@_;
960   my $dbh=C4Connect;
961   my $query="Select * from biblioitems,items,itemtypes where 
962   biblioitems.biblionumber=$biblionumber 
963   and biblioitems.biblioitemnumber=items.biblioitemnumber and
964   itemtypes.itemtype=biblioitems.itemtype
965   order by items.biblioitemnumber";
966   my $sth=$dbh->prepare($query);
967   $sth->execute;
968   my @results;
969   my $i;
970   while (my $data=$sth->fetchrow_hashref){
971     $results[$i]=$data;
972     $i++;
973   }
974   $sth->finish;
975   $dbh->disconnect;
976   return(@results);
977 }
978
979 sub needsmod{
980   my ($bibitemnum,$itemtype)=@_;
981   my $dbh=C4Connect;
982   my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
983   and itemtype='$itemtype'";
984   my $sth=$dbh->prepare($query);
985   $sth->execute;
986   my $result=0;
987   if (my $data=$sth->fetchrow_hashref){
988     $result=1;
989   }
990   $sth->finish;
991   $dbh->disconnect;
992   return($result);
993 }
994
995 sub delitem{
996   my ($itemnum)=@_;
997   my $dbh=C4Connect;
998   my $query="select * from items where itemnumber=$itemnum";
999   my $sth=$dbh->prepare($query);
1000   $sth->execute;
1001   my @data=$sth->fetchrow_array;
1002   $sth->finish;
1003   $query="Insert into deleteditems values (";
1004   foreach my $temp (@data){
1005     $query=$query."'$temp',";
1006   }
1007   $query=~ s/\,$/\)/;
1008 #  print $query;
1009   $sth=$dbh->prepare($query);
1010   $sth->execute;
1011   $sth->finish;
1012   $query = "Delete from items where itemnumber=$itemnum";
1013   $sth=$dbh->prepare($query);
1014   $sth->execute;
1015   $sth->finish;
1016   $dbh->disconnect;
1017 }
1018
1019 sub delbibitem{
1020   my ($itemnum)=@_;
1021   my $dbh=C4Connect;
1022   my $query="select * from biblioitems where biblioitemnumber=$itemnum";
1023   my $sth=$dbh->prepare($query);
1024   $sth->execute;
1025   if (my @data=$sth->fetchrow_array){
1026     $sth->finish;
1027     $query="Insert into deletedbiblioitems values (";
1028     foreach my $temp (@data){
1029       $temp=~ s/\'/\\\'/g;
1030       $query=$query."'$temp',";
1031     }
1032     $query=~ s/\,$/\)/;
1033 #   print $query;
1034     $sth=$dbh->prepare($query);
1035     $sth->execute;
1036     $sth->finish;
1037     $query = "Delete from biblioitems where biblioitemnumber=$itemnum";
1038     $sth=$dbh->prepare($query);
1039     $sth->execute;
1040     $sth->finish;
1041   }
1042   $sth->finish;
1043   $dbh->disconnect;
1044 }
1045
1046 sub delbiblio{
1047   my ($biblio)=@_;
1048   my $dbh=C4Connect;
1049   my $query="select * from biblio where biblionumber=$biblio";
1050   my $sth=$dbh->prepare($query);
1051   $sth->execute;
1052   if (my @data=$sth->fetchrow_array){
1053     $sth->finish;
1054     $query="Insert into deletedbiblio values (";
1055     foreach my $temp (@data){
1056       $temp=~ s/\'/\\\'/g;
1057       $query=$query."'$temp',";
1058     }
1059     $query=~ s/\,$/\)/;
1060 #   print $query;
1061     $sth=$dbh->prepare($query);
1062     $sth->execute;
1063     $sth->finish;
1064     $query = "Delete from biblio where biblionumber=$biblio";
1065     $sth=$dbh->prepare($query);
1066     $sth->execute;
1067     $sth->finish;
1068   }
1069
1070   $sth->finish;
1071   $dbh->disconnect;
1072 }
1073
1074 sub getitemtypes {
1075   my $dbh   = C4Connect;
1076   my $query = "select * from itemtypes";
1077   my $sth   = $dbh->prepare($query);
1078     # || die "Cannot prepare $query" . $dbh->errstr;
1079   my $count = 0;
1080   my @results;
1081   
1082   $sth->execute;
1083     # || die "Cannot execute $query\n" . $sth->errstr;
1084   while (my $data = $sth->fetchrow_hashref) {
1085     @results[$count] = $data;
1086     $count++;
1087   } # while
1088   
1089   $sth->finish;
1090   $dbh->disconnect;
1091   return($count, @results);
1092 } # sub getitemtypes
1093
1094
1095 sub getbiblio {
1096     my ($biblionumber) = @_;
1097     my $dbh   = C4Connect;
1098     my $query = "Select * from biblio where biblionumber = $biblionumber";
1099     my $sth   = $dbh->prepare($query);
1100       # || die "Cannot prepare $query" . $dbh->errstr;
1101     my $count = 0;
1102     my @results;
1103     
1104     $sth->execute;
1105       # || die "Cannot execute $query" . $sth->errstr;
1106     while (my $data = $sth->fetchrow_hashref) {
1107       $results[$count] = $data;
1108       $count++;
1109     } # while
1110     
1111     $sth->finish;
1112     $dbh->disconnect;
1113     return($count, @results);
1114 } # sub getbiblio
1115
1116
1117 END { }       # module clean-up code here (global destructor)