Cleaned up contents of location information
[koha.git] / C4 / Circulation.pm
1 package C4::Circulation; #assumes C4/Circulation
2
3 #package to deal with circulation 
4
5 use strict;
6 require Exporter;
7 use DBI;
8 use C4::Database;
9 use C4::Circulation::Issues;
10 use C4::Circulation::Returns;
11 use C4::Circulation::Renewals;
12 use C4::Circulation::Borrower;
13 use C4::Reserves;
14 #use C4::Interface;
15 use C4::Security;
16
17 use vars qw($VERSION @ISA @EXPORT);
18   
19 # set the version for version checking
20 $VERSION = 0.01;
21     
22 @ISA = qw(Exporter);
23 @EXPORT = qw(&Start_circ &scanborrower);
24
25 sub Start_circ{
26   my ($env)=@_;
27   #connect to database
28   #start interface
29   &startint($env,'Circulation');
30   my $donext = 'Circ';
31   my $reason;
32   my $data;
33   while ($donext ne 'Quit') {
34     if ($donext  eq "Circ") {
35       clearscreen();        
36       ($reason,$data) = menu($env,'console','Circulation', 
37         ('Issues','Returns','Borrower Enquiries','Reserves','Log In'));
38       #debug_msg($env,"data = $data");
39     } else {
40       $data = $donext;
41     }
42     if ($data eq 'Issues') {  
43       $donext=Issue($env); #C4::Circulation::Issues
44       #debug_msg("","do next $donext");
45     } elsif ($data eq 'Returns') {
46       $donext=Returns($env); #C4::Circulation::Returns
47     } elsif ($data eq 'Borrower Enquiries'){
48       $donext=Borenq($env); #C4::Circulation::Borrower
49     } elsif ($data eq 'Reserves'){
50       $donext=EnterReserves($env); #C4::Reserves
51     } elsif ($data eq 'Log In') {
52       &endint($env);
53       &Login($env);   #C4::Security
54       &startint($env,'Circulation');
55     } elsif ($data eq 'Quit') { 
56       $donext = $data;
57     }
58     #debug_msg($env,"donext -  $donext");
59   }
60   &endint($env)  
61 }
62
63 sub pastitems{
64   #Get list of all items borrower has currently on issue
65   my ($env,$bornum,$dbh)=@_;
66   my $sth=$dbh->prepare("Select * from issues,items,biblio
67     where borrowernumber=$bornum and issues.itemnumber=items.itemnumber
68     and items.biblionumber=biblio.biblionumber
69     and returndate is null
70     order by date_due");
71   $sth->execute;
72   my $i=0;
73   my @items;
74   my @items2;
75   #$items[0]=" "x29;
76   #$items2[0]=" "x29;
77   $items[0]=" "x72;
78   $items2[0]=" "x72;
79   while (my $data=$sth->fetchrow_hashref) {
80      my $line = "$data->{'date_due'} $data->{'title'}";
81      # $items[$i]=fmtstr($env,$line,"L29");
82      $items[$i]=fmtstr($env,$line,"L72");
83      $i++;
84   }
85   return(\@items,\@items2);
86   $sth->finish;
87 }
88
89 sub checkoverdues{
90   #checks whether a borrower has overdue items
91   my ($env,$bornum,$dbh)=@_;
92   my $sth=$dbh->prepare("Select * from issues,items,biblio where
93   borrowernumber=$bornum and issues.itemnumber=items.itemnumber and
94   items.biblionumber=biblio.biblionumber");
95   $sth->execute;
96   my $row=1;
97   my $col=40;
98   while (my $data=$sth->fetchrow_hashref){
99     output($row,$col,$data->{'title'});
100     $row++;
101   }
102   $sth->finish;
103 }
104
105 sub previousissue {
106   my ($env,$itemnum,$dbh,$bornum)=@_;
107   my $sth=$dbh->prepare("Select firstname,surname,issues.borrowernumber,cardnumber,returndate
108   from issues,borrowers where 
109   issues.itemnumber='$itemnum' and
110   issues.borrowernumber=borrowers.borrowernumber and issues.returndate is
111 NULL");
112   $sth->execute;
113   my $borrower=$sth->fetchrow_hashref;
114   $sth->finish;
115   if ($borrower->{'borrowernumber'} ne ''){
116     if ($bornum eq $borrower->{'borrowernumber'}){
117       # no need to issue
118       my ($renewstatus) = &renewstatus($env,$dbh,$bornum,$itemnum);
119       my $resp = &msg_yn("Book is issued to this borrower", "Renew?");
120       if ($resp == "y") {
121         &renewbook($env,$dbh,$bornum,$itemnum);
122       }  
123       
124     } else {
125       my $text="Issued to $borrower->{'firstname'} $borrower->{'surname'} ($borrower->{'cardnumber'})";    
126       my $resp = &msg_yn($text,"Mark as returned?");
127       if ($resp == "y") {
128         &returnrecord($env,$dbh,$borrower->{'borrowernumber'},$itemnum);
129         # can issue
130       } else {
131         # can't issue
132       } 
133     }
134   } 
135   return($borrower->{'borrowernumber'});
136   $sth->finish;
137 }
138
139
140 sub checkreserve{
141   # Check for reserves for biblio 
142   # does not look at constraints yet
143   my ($env,$dbh,$itemnum)=@_;
144   my $resbor = "";
145   my $query = "select * from reserves,items 
146   where (items.itemnumber = '$itemnum')
147   and (items.biblionumber = reserves.biblionumber)
148   and (reserves.found is null) order by priority";
149   my $sth = $dbh->prepare($query);
150   $sth->execute();
151   if (my $data=$sth->fetchrow_hashref) {
152     $resbor = $data->{'borrowernumber'}; 
153   }
154   return ($resbor);
155   $sth->finish;
156 }
157
158 sub checkwaiting{
159   # check for reserves waiting
160   my ($env,$dbh,$bornum)=@_;
161   my @itemswaiting="";
162   my $query = "select * from reserves
163   where (borrowernumber = '$bornum')
164   and (reserves.found='W')";
165   my $sth = $dbh->prepare($query);
166   $sth->execute();
167   if (my $data=$sth->fetchrow_hashref) {
168     push @itemswaiting,$data->{'itemnumber'}; 
169   }
170   return (\@itemswaiting);
171   $sth->finish;
172 }
173
174 sub scanbook {
175   my ($env,$interface)=@_;
176   #scan barcode
177   my ($number,$reason)=dialog("Book Barcode:");
178   $number=uc $number;
179   return ($number,$reason);
180 }
181
182 sub scanborrower {
183   my ($env,$interface)=@_;
184   #scan barcode
185   my ($number,$reason,$book)=&borrower_dialog($env); #C4::Interface
186   $number= $number;
187   $book=uc $book;
188   return ($number,$reason,$book);
189 }
190
191
192 END { }       # module clean-up code here (global destructor)