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