1 package C4::Circulation::Main; #asummes C4/Circulation/Main
3 #package to deal with circulation
9 use C4::Circulation::Issues;
10 use C4::Circulation::Returns;
11 use C4::Circulation::Renewals;
12 use C4::Circulation::Borrower;
19 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
21 # set the version for version checking
25 @EXPORT = qw(&pastitems &checkoverdues &previousissue
26 &checkreserve &checkwaiting &scanbook &scanborrower &getbranch &getprinter);
27 %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
29 # your exported package globals go here,
30 # as well as any optionally exported functions
32 @EXPORT_OK = qw($Var1 %Hashit);
35 # non-exported package globals go here
36 use vars qw(@more $stuff);
38 # initalize package globals, first exported ones
43 # then the others (which are still accessible as $Some::Module::stuff)
47 # all file-scoped lexicals must be created before
48 # the functions below that use them.
50 # file-private lexicals go here
54 # here's a file-private function as a closure,
55 # callable as &$priv_func; it cannot be prototyped.
60 # make all your functions, whether exported or not;
65 my $query = "select * from branches order by branchcode";
66 my $sth = $dbh->prepare($query);
69 while (my $data = $sth->fetchrow_hashref) {
72 brmenu ($env,\@branches);
73 my $query = "select * from branches
74 where branchcode = '$env->{'branchcode'}'";
75 $sth = $dbh->prepare($query);
77 my $data = $sth->fetchrow_hashref;
78 $env->{'brdata'} = $data;
86 my $query = "select * from printers order by printername";
87 my $sth = $dbh->prepare($query);
90 while (my $data = $sth->fetchrow_hashref) {
93 prmenu ($env,\@printers);
99 #Get list of all items borrower has currently on issue
100 my ($env,$bornum,$dbh)=@_;
101 my $query1 = "select * from issues where (borrowernumber=$bornum)
102 and (returndate is null) order by date_due";
103 my $sth=$dbh->prepare($query1);
108 while (my $data1=$sth->fetchrow_hashref) {
109 my $data = itemnodata($env,$dbh,$data1->{'itemnumber'}); #C4::Search
110 my @date = split("-",$data1->{'date_due'});
111 my $odate = (@date[2]+0)."-".(@date[1]+0)."-".@date[0];
112 my $line = C4::Circulation::Issues::formatitem($env,$data,$odate,"");
117 return(\@items,\@items2);
121 #checks whether a borrower has overdue items
122 my ($env,$bornum,$dbh)=@_;
123 my @datearr = localtime;
124 my $today = ($datearr[5] + 1900)."-".($datearr[4]+1)."-".$datearr[3];
125 my $query = "Select count(*) from issues where borrowernumber=$bornum and
126 returndate is NULL and date_due < '$today'";
127 my $sth=$dbh->prepare($query);
129 my $data = $sth->fetchrow_hashref;
131 return $data->{'count(*)'};
135 my ($env,$itemnum,$dbh,$bornum)=@_;
136 my $sth=$dbh->prepare("Select
137 firstname,surname,issues.borrowernumber,cardnumber,returndate
138 from issues,borrowers where
139 issues.itemnumber='$itemnum' and
140 issues.borrowernumber=borrowers.borrowernumber
141 and issues.returndate is NULL");
143 my $borrower=$sth->fetchrow_hashref;
147 if ($borrower->{'borrowernumber'} ne ''){
148 if ($bornum eq $borrower->{'borrowernumber'}){
150 my ($renewstatus) = C4::Circulation::Renewals::renewstatus($env,$dbh,$bornum,$itemnum);
151 my ($resbor,$resrec) = checkreserve($env,$dbh,$itemnum);
152 if ($renewstatus == "0") {
153 info_msg($env,"</S>Issued to this borrower - No renewals<!S>");
155 } elsif ($resbor ne "") {
156 my $resp = C4::InterfaceCDK::msg_ny($env,"Book is issued to this borrower",
157 "and is reserved - Renew?");
159 $newdate = C4::Circulation::Renewals::renewbook($env,$dbh,$bornum,$itemnum);
165 my $resp = C4::InterfaceCDK::msg_yn($env,"Book is issued to this borrower", "Renew?");
167 $newdate = C4::Circulation::Renewals::renewbook($env,$dbh,$bornum,$itemnum);
174 my $text="Issued to $borrower->{'firstname'} $borrower->{'surname'} ($borrower->{'cardnumber'})";
175 my $resp = C4::InterfaceCDK::msg_yn($env,$text,"Mark as returned?");
177 &returnrecord($env,$dbh,$borrower->{'borrowernumber'},$itemnum);
183 return($borrower->{'borrowernumber'},$canissue,$newdate);
188 # Check for reserves for biblio
189 my ($env,$dbh,$itemnum)=@_;
191 my $query = "select * from reserves,items
192 where (items.itemnumber = '$itemnum')
193 and (reserves.cancellationdate is NULL)
194 and (items.biblionumber = reserves.biblionumber)
195 and ((reserves.found = 'W')
196 or (reserves.found is null))
198 my $sth = $dbh->prepare($query);
201 if (my $data=$sth->fetchrow_hashref) {
203 my $const = $data->{'constrainttype'};
205 $resbor = $data->{'borrowernumber'};
208 my $cquery = "select * from reserveconstraints,items
209 where (borrowernumber='$data->{'borrowernumber'}')
210 and reservedate='$data->{'reservedate'}'
211 and reserveconstraints.biblionumber='$data->{'biblionumber'}'
212 and (items.itemnumber=$itemnum and
213 items.biblioitemnumber = reserveconstraints.biblioitemnumber)";
214 my $csth = $dbh->prepare($cquery);
216 if (my $cdata=$csth->fetchrow_hashref) {$found = 1;}
218 if ($found eq 1) {$resbor = $data->{'borrowernumber'};}
220 if ($found eq 0) {$resbor = $data->{'borrowernumber'};}
226 return ($resbor,$resrec);
230 # check for reserves waiting
231 my ($env,$dbh,$bornum)=@_;
233 my $query = "select * from reserves
234 where (borrowernumber = '$bornum')
235 and (reserves.found='W') and cancellationdate is NULL";
236 my $sth = $dbh->prepare($query);
239 if (my $data=$sth->fetchrow_hashref) {
240 @itemswaiting[$cnt] =$data;
244 return ($cnt,\@itemswaiting);
248 my ($env,$interface)=@_;
250 my ($number,$reason)=dialog("Book Barcode:");
252 return ($number,$reason);
256 my ($env,$interface)=@_;
258 my ($number,$reason,$book)=C4::InterfaceCDK::borrower_dialog($env); #C4::InterfaceCDK
261 return ($number,$reason,$book);
265 END { } # module clean-up code here (global destructor)