X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FAccounts.pm;h=6f5bc9187216331c26c9b18a6445166f373f00dd;hb=e1d907c688499de689ed613014261c761a0158c8;hp=6930e5ac6cdbc5b00ef504e4c8a0b048ba952c3a;hpb=0d7b552dec8fe611c70045db841317382b67e674;p=koha.git diff --git a/C4/Accounts.pm b/C4/Accounts.pm index 6930e5ac6c..6f5bc91872 100755 --- a/C4/Accounts.pm +++ b/C4/Accounts.pm @@ -24,7 +24,7 @@ require Exporter; use C4::Context; use C4::Stats; use C4::Members; -#use C4::Circulation::Circ2; +#use C4::Circulation; use vars qw($VERSION @ISA @EXPORT); # set the version for version checking @@ -50,63 +50,17 @@ patron. =cut @ISA = qw(Exporter); -@EXPORT = qw(&checkaccount &recordpayment &fixaccounts &makepayment &manualinvoice +@EXPORT = qw(&recordpayment &fixaccounts &makepayment &manualinvoice &getnextacctno &reconcileaccount); -=head2 checkaccount - - $owed = &checkaccount($env, $borrowernumber, $dbh, $date); - -Looks up the total amount of money owed by a borrower (fines, etc.). - -C<$borrowernumber> specifies the borrower to look up. - -C<$dbh> is a DBI::db handle for the Koha database. - -C<$env> is ignored. - -=cut - -#' -sub checkaccount { - #take borrower number - #check accounts and list amounts owing - my ($env,$borrowernumber,$dbh,$date)=@_; - my $select="SELECT SUM(amountoutstanding) AS total - FROM accountlines - WHERE borrowernumber = ? - AND amountoutstanding<>0"; - my @bind = ($borrowernumber); - if ($date && $date ne ''){ - $select.=" AND date < ?"; - push(@bind,$date); - } - # print $select; - my $sth=$dbh->prepare($select); - $sth->execute(@bind); - my $data=$sth->fetchrow_hashref; - my $total = $data->{'total'} || 0; - $sth->finish; - # output(1,2,"borrower owes $total"); - #if ($total > 0){ - # # output(1,2,"borrower owes $total"); - # if ($total > 5){ - # reconcileaccount($env,$dbh,$borrowernumber,$total); - # } - #} - # pause(); - return($total); -} =head2 recordpayment - &recordpayment($env, $borrowernumber, $payment); + &recordpayment($borrowernumber, $payment); Record payment by a patron. C<$borrowernumber> is the patron's borrower number. C<$payment> is a floating-point number, giving the -amount that was paid. C<$env> is a reference-to-hash; -C<$env-E{branchcode}> is the code of the branch where payment was -made. +amount that was paid. Amounts owed are paid off oldest first. That is, if the patron has a $1 fine from Feb. 1, another $1 fine from Mar. 1, and makes a payment @@ -118,19 +72,18 @@ will be credited to the next one. #' sub recordpayment{ #here we update both the accountoffsets and the account lines - my ($env,$borrowernumber,$data)=@_; + my ($borrowernumber,$data)=@_; my $dbh = C4::Context->dbh; my $newamtos = 0; my $accdata = ""; - my $branch=$env->{'branchcode'}; - warn $branch; + my $branch=C4::Context->userenv->{'branch'}; my $amountleft = $data; # begin transaction - my $nextaccntno = getnextacctno($env,$borrowernumber,$dbh); + my $nextaccntno = getnextacctno($borrowernumber); # get lines with outstanding amounts to offset - my $sth = $dbh->prepare("select * from accountlines - where (borrowernumber = ?) and (amountoutstanding<>0) - order by date"); + my $sth = $dbh->prepare("SELECT * FROM accountlines + WHERE (borrowernumber = ?) AND (amountoutstanding<>0) + ORDER BY date"); $sth->execute($borrowernumber); # offset transactions while (($accdata=$sth->fetchrow_hashref) and ($amountleft>0)){ @@ -142,23 +95,23 @@ sub recordpayment{ $amountleft = 0; } my $thisacct = $accdata->{accountno}; - my $usth = $dbh->prepare("update accountlines set amountoutstanding= ? - where (borrowernumber = ?) and (accountno=?)"); + my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ? + WHERE (borrowernumber = ?) AND (accountno=?)"); $usth->execute($newamtos,$borrowernumber,$thisacct); $usth->finish; - $usth = $dbh->prepare("insert into accountoffsets + $usth = $dbh->prepare("INSERT INTO accountoffsets (borrowernumber, accountno, offsetaccount, offsetamount) - values (?,?,?,?)"); + VALUES (?,?,?,?)"); $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos); $usth->finish; } # create new line - my $usth = $dbh->prepare("insert into accountlines + my $usth = $dbh->prepare("INSERT INTO accountlines (borrowernumber, accountno,date,amount,description,accounttype,amountoutstanding) - values (?,?,now(),?,'Payment,thanks','Pay',?)"); + VALUES (?,?,now(),?,'Payment,thanks','Pay',?)"); $usth->execute($borrowernumber,$nextaccntno,0-$data,0-$amountleft); $usth->finish; - UpdateStats($env,$branch,'payment',$data,'','','',$borrowernumber); + UpdateStats($branch,'payment',$data,'','','',$borrowernumber); $sth->finish; } @@ -185,46 +138,43 @@ sub makepayment{ #updated to check, if they are paying off a lost item, we return the item # from their card, and put a note on the item record my ($borrowernumber,$accountno,$amount,$user,$branch)=@_; - my %env; - $env{'branchcode'}=$branch; my $dbh = C4::Context->dbh; # begin transaction - my $nextaccntno = getnextacctno(\%env,$borrowernumber,$dbh); + my $nextaccntno = getnextacctno($borrowernumber); my $newamtos=0; - my $sth=$dbh->prepare("Select * from accountlines where borrowernumber=? and accountno=?"); + my $sth=$dbh->prepare("SELECT * FROM accountlines WHERE borrowernumber=? AND accountno=?"); $sth->execute($borrowernumber,$accountno); my $data=$sth->fetchrow_hashref; $sth->finish; - $dbh->do(<do("UPDATE accountlines SET amountoutstanding = 0 WHERE borrowernumber = $borrowernumber AND accountno = $accountno -EOT + "); # print $updquery; - $dbh->do(<do(" INSERT INTO accountoffsets (borrowernumber, accountno, offsetaccount, offsetamount) VALUES ($borrowernumber, $accountno, $nextaccntno, $newamtos) -EOT + "); # create new line my $payment=0-$amount; - $dbh->do(<do(" INSERT INTO accountlines (borrowernumber, accountno, date, amount, description, accounttype, amountoutstanding) VALUES ($borrowernumber, $nextaccntno, now(), $payment, 'Payment,thanks - $user', 'Pay', 0) -EOT + "); # FIXME - The second argument to &UpdateStats is supposed to be the # branch code. # UpdateStats is now being passed $accountno too. MTJ - UpdateStats(\%env,$user,'payment',$amount,'','','',$borrowernumber,$accountno); + UpdateStats($user,'payment',$amount,'','','',$borrowernumber,$accountno); $sth->finish; #check to see what accounttype if ($data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L'){ @@ -234,25 +184,22 @@ EOT =head2 getnextacctno - $nextacct = &getnextacctno($env, $borrowernumber, $dbh); + $nextacct = &getnextacctno($borrowernumber); Returns the next unused account number for the patron with the given borrower number. -C<$dbh> is a DBI::db handle to the Koha database. - -C<$env> is ignored. - =cut #' # FIXME - Okay, so what does the above actually _mean_? sub getnextacctno { - my ($env,$borrowernumber,$dbh)=@_; + my ($borrowernumber)=@_; my $nextaccntno = 1; - my $sth = $dbh->prepare("select * from accountlines - where (borrowernumber = ?) - order by accountno desc"); + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT * FROM accountlines + WHERE (borrowernumber = ?) + ORDER BY accountno DESC"); $sth->execute($borrowernumber); if (my $accdata=$sth->fetchrow_hashref){ $nextaccntno = $accdata->{'accountno'} + 1; @@ -272,8 +219,8 @@ sub getnextacctno { sub fixaccounts { my ($borrowernumber,$accountno,$amount)=@_; my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("Select * from accountlines where borrowernumber=? - and accountno=?"); + my $sth=$dbh->prepare("SELECT * FROM accountlines WHERE borrowernumber=? + AND accountno=?"); $sth->execute($borrowernumber,$accountno); my $data=$sth->fetchrow_hashref; # FIXME - Error-checking @@ -294,15 +241,15 @@ EOT sub returnlost{ my ($borrowernumber,$itemnum)=@_; my $dbh = C4::Context->dbh; - my $borrower=borrdata('',$borrowernumber); - my $sth=$dbh->prepare("Update issues set returndate=now() where - borrowernumber=? and itemnumber=? and returndate is null"); + my $borrower=GetMember($borrowernumber,'borrowernumber'); + my $sth=$dbh->prepare("UPDATE issues SET returndate=now() WHERE + borrowernumber=? AND itemnumber=? AND returndate IS NULL"); $sth->execute($borrowernumber,$itemnum); $sth->finish; my @datearr = localtime(time); my $date = (1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3]; my $bor="$borrower->{'firstname'} $borrower->{'surname'} $borrower->{'cardnumber'}"; - $sth=$dbh->prepare("Update items set paidfor=? where itemnumber=?"); + $sth=$dbh->prepare("UPDATE items SET paidfor=? WHERE itemnumber=?"); $sth->execute("Paid for by $bor $date",$itemnum); $sth->finish; } @@ -329,14 +276,13 @@ sub manualinvoice{ my $notifyid; my $insert; $itemnum=~ s/ //g; - my %env; - my $accountno=getnextacctno('',$borrowernumber,$dbh); + my $accountno=getnextacctno($borrowernumber); my $amountleft=$amount; if ($type eq 'CS' || $type eq 'CB' || $type eq 'CW' || $type eq 'CF' || $type eq 'CL'){ my $amount2=$amount*-1; # FIXME - $amount2 = -$amount - $amountleft=fixcredit(\%env,$borrowernumber,$amount2,$itemnum,$type,$user); + $amountleft=fixcredit($borrowernumber,$amount2,$itemnum,$type,$user); } if ($type eq 'N'){ $desc.="New Card"; @@ -380,7 +326,7 @@ sub manualinvoice{ =head2 fixcredit - $amountleft = &fixcredit($env, $borrowernumber, $data, $barcode, $type, $user); + $amountleft = &fixcredit($borrowernumber, $data, $barcode, $type, $user); This function is only used internally, not exported. FIXME - Figure out what this function does, and write it down. @@ -389,21 +335,21 @@ sub manualinvoice{ sub fixcredit{ #here we update both the accountoffsets and the account lines - my ($env,$borrowernumber,$data,$barcode,$type,$user)=@_; + my ($borrowernumber,$data,$barcode,$type,$user)=@_; my $dbh = C4::Context->dbh; my $newamtos = 0; my $accdata = ""; my $amountleft = $data; if ($barcode ne ''){ - my $item=getiteminformation('',$barcode); - my $nextaccntno = getnextacctno($env,$borrowernumber,$dbh); - my $query="Select * from accountlines where (borrowernumber=? - and itemnumber=? and amountoutstanding > 0)"; + my $item=GetBiblioFromItemNumber('',$barcode); + my $nextaccntno = getnextacctno($borrowernumber); + my $query="SELECT * FROM accountlines WHERE (borrowernumber=? + AND itemnumber=? AND amountoutstanding > 0)"; if ($type eq 'CL'){ - $query.=" and (accounttype = 'L' or accounttype = 'Rep')"; + $query.=" AND (accounttype = 'L' OR accounttype = 'Rep')"; } elsif ($type eq 'CF'){ - $query.=" and (accounttype = 'F' or accounttype = 'FU' or - accounttype='Res' or accounttype='Rent')"; + $query.=" AND (accounttype = 'F' OR accounttype = 'FU' OR + accounttype='Res' OR accounttype='Rent')"; } elsif ($type eq 'CB'){ $query.=" and accounttype='A'"; } @@ -420,22 +366,22 @@ sub fixcredit{ $amountleft = 0; } my $thisacct = $accdata->{accountno}; - my $usth = $dbh->prepare("update accountlines set amountoutstanding= ? - where (borrowernumber = ?) and (accountno=?)"); + my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ? + WHERE (borrowernumber = ?) AND (accountno=?)"); $usth->execute($newamtos,$borrowernumber,$thisacct); $usth->finish; - $usth = $dbh->prepare("insert into accountoffsets + $usth = $dbh->prepare("INSERT INTO accountoffsets (borrowernumber, accountno, offsetaccount, offsetamount) - values (?,?,?,?)"); + VALUES (?,?,?,?)"); $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos); $usth->finish; } # begin transaction - my $nextaccntno = getnextacctno($env,$borrowernumber,$dbh); + my $nextaccntno = getnextacctno($borrowernumber); # get lines with outstanding amounts to offset - my $sth = $dbh->prepare("select * from accountlines - where (borrowernumber = ?) and (amountoutstanding >0) - order by date"); + my $sth = $dbh->prepare("SELECT * FROM accountlines + WHERE (borrowernumber = ?) AND (amountoutstanding >0) + ORDER BY date"); $sth->execute($borrowernumber); # print $query; # offset transactions @@ -448,20 +394,19 @@ sub fixcredit{ $amountleft = 0; } my $thisacct = $accdata->{accountno}; - my $usth = $dbh->prepare("update accountlines set amountoutstanding= ? - where (borrowernumber = ?) and (accountno=?)"); + my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ? + WHERE (borrowernumber = ?) AND (accountno=?)"); $usth->execute($newamtos,$borrowernumber,$thisacct); $usth->finish; - $usth = $dbh->prepare("insert into accountoffsets + $usth = $dbh->prepare("INSERT INTO accountoffsets (borrowernumber, accountno, offsetaccount, offsetamount) - values (?,?,?,?)"); + VALUE (?,?,?,?)"); $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos); $usth->finish; } $sth->finish; - $env->{'branch'}=$user; $type="Credit ".$type; - UpdateStats($env,$user,$type,$data,$user,'','',$borrowernumber); + UpdateStats($user,$type,$data,$user,'','',$borrowernumber); $amountleft*=-1; return($amountleft); @@ -475,19 +420,18 @@ sub fixcredit{ sub refund{ #here we update both the accountoffsets and the account lines - my ($env,$borrowernumber,$data)=@_; + my ($borrowernumber,$data)=@_; my $dbh = C4::Context->dbh; my $newamtos = 0; my $accdata = ""; -# my $branch=$env->{'branchcode'}; my $amountleft = $data *-1; # begin transaction - my $nextaccntno = getnextacctno($env,$borrowernumber,$dbh); + my $nextaccntno = getnextacctno($borrowernumber); # get lines with outstanding amounts to offset - my $sth = $dbh->prepare("select * from accountlines - where (borrowernumber = ?) and (amountoutstanding<0) - order by date"); + my $sth = $dbh->prepare("SELECT * FROM accountlines + WHERE (borrowernumber = ?) AND (amountoutstanding<0) + ORDER BY date"); $sth->execute($borrowernumber); # print $amountleft; # offset transactions @@ -501,13 +445,13 @@ sub refund{ } # print $amountleft; my $thisacct = $accdata->{accountno}; - my $usth = $dbh->prepare("update accountlines set amountoutstanding= ? - where (borrowernumber = ?) and (accountno=?)"); + my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ? + WHERE (borrowernumber = ?) AND (accountno=?)"); $usth->execute($newamtos,$borrowernumber,$thisacct); $usth->finish; - $usth = $dbh->prepare("insert into accountoffsets + $usth = $dbh->prepare("INSERT INTO accountoffsets (borrowernumber, accountno, offsetaccount, offsetamount) - values (?,?,?,?)"); + VALUES (?,?,?,?)"); $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos); $usth->finish; }