Lines 72-78
patron.
Link Here
|
72 |
|
72 |
|
73 |
Record payment by a patron. C<$borrowernumber> is the patron's |
73 |
Record payment by a patron. C<$borrowernumber> is the patron's |
74 |
borrower number. C<$payment> is a floating-point number, giving the |
74 |
borrower number. C<$payment> is a floating-point number, giving the |
75 |
amount that was paid. |
75 |
amount that was paid. |
76 |
|
76 |
|
77 |
Amounts owed are paid off oldest first. That is, if the patron has a |
77 |
Amounts owed are paid off oldest first. That is, if the patron has a |
78 |
$1 fine from Feb. 1, another $1 fine from Mar. 1, and makes a payment |
78 |
$1 fine from Feb. 1, another $1 fine from Mar. 1, and makes a payment |
Lines 115-126
sub recordpayment {
Link Here
|
115 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
115 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
116 |
$amountleft = 0; |
116 |
$amountleft = 0; |
117 |
} |
117 |
} |
118 |
my $thisacct = $accdata->{accountno}; |
118 |
my $thisacct = $accdata->{accountlines_id}; |
119 |
my $usth = $dbh->prepare( |
119 |
my $usth = $dbh->prepare( |
120 |
"UPDATE accountlines SET amountoutstanding= ? |
120 |
"UPDATE accountlines SET amountoutstanding= ? |
121 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
121 |
WHERE (accountlines_id = ?)" |
122 |
); |
122 |
); |
123 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
123 |
$usth->execute( $newamtos, $thisacct ); |
124 |
$usth->finish; |
124 |
$usth->finish; |
125 |
# $usth = $dbh->prepare( |
125 |
# $usth = $dbh->prepare( |
126 |
# "INSERT INTO accountoffsets |
126 |
# "INSERT INTO accountoffsets |
Lines 146-152
sub recordpayment {
Link Here
|
146 |
|
146 |
|
147 |
=head2 makepayment |
147 |
=head2 makepayment |
148 |
|
148 |
|
149 |
&makepayment($borrowernumber, $acctnumber, $amount, $branchcode); |
149 |
&makepayment($accountlines_id, $borrowernumber, $acctnumber, $amount, $branchcode); |
150 |
|
150 |
|
151 |
Records the fact that a patron has paid off the entire amount he or |
151 |
Records the fact that a patron has paid off the entire amount he or |
152 |
she owes. |
152 |
she owes. |
Lines 167-173
sub makepayment {
Link Here
|
167 |
#here we update both the accountoffsets and the account lines |
167 |
#here we update both the accountoffsets and the account lines |
168 |
#updated to check, if they are paying off a lost item, we return the item |
168 |
#updated to check, if they are paying off a lost item, we return the item |
169 |
# from their card, and put a note on the item record |
169 |
# from their card, and put a note on the item record |
170 |
my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
170 |
my ( $accountlines_id, $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
171 |
my $dbh = C4::Context->dbh; |
171 |
my $dbh = C4::Context->dbh; |
172 |
my $manager_id = 0; |
172 |
my $manager_id = 0; |
173 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
173 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
Lines 175-184
sub makepayment {
Link Here
|
175 |
# begin transaction |
175 |
# begin transaction |
176 |
my $nextaccntno = getnextacctno($borrowernumber); |
176 |
my $nextaccntno = getnextacctno($borrowernumber); |
177 |
my $newamtos = 0; |
177 |
my $newamtos = 0; |
178 |
my $sth = |
178 |
my $sth = $dbh->prepare("SELECT * FROM accountlines WHERE accountlines_id=?"); |
179 |
$dbh->prepare( |
179 |
$sth->execute( $accountlines_id ); |
180 |
"SELECT * FROM accountlines WHERE borrowernumber=? AND accountno=?"); |
|
|
181 |
$sth->execute( $borrowernumber, $accountno ); |
182 |
my $data = $sth->fetchrow_hashref; |
180 |
my $data = $sth->fetchrow_hashref; |
183 |
$sth->finish; |
181 |
$sth->finish; |
184 |
|
182 |
|
Lines 187-208
sub makepayment {
Link Here
|
187 |
$dbh->prepare( |
185 |
$dbh->prepare( |
188 |
"UPDATE accountlines |
186 |
"UPDATE accountlines |
189 |
SET amountoutstanding = 0, description = 'Payment,thanks' |
187 |
SET amountoutstanding = 0, description = 'Payment,thanks' |
190 |
WHERE borrowernumber = ? |
188 |
WHERE accountlines_id = ? |
191 |
AND accountno = ? |
|
|
192 |
" |
189 |
" |
193 |
); |
190 |
); |
194 |
$udp->execute($borrowernumber, $accountno ); |
191 |
$udp->execute($accountlines_id); |
195 |
$udp->finish; |
192 |
$udp->finish; |
196 |
}else{ |
193 |
}else{ |
197 |
my $udp = |
194 |
my $udp = |
198 |
$dbh->prepare( |
195 |
$dbh->prepare( |
199 |
"UPDATE accountlines |
196 |
"UPDATE accountlines |
200 |
SET amountoutstanding = 0 |
197 |
SET amountoutstanding = 0 |
201 |
WHERE borrowernumber = ? |
198 |
WHERE accountlines_id = ? |
202 |
AND accountno = ? |
|
|
203 |
" |
199 |
" |
204 |
); |
200 |
); |
205 |
$udp->execute($borrowernumber, $accountno ); |
201 |
$udp->execute($accountlines_id); |
206 |
$udp->finish; |
202 |
$udp->finish; |
207 |
|
203 |
|
208 |
# create new line |
204 |
# create new line |
Lines 229-234
sub makepayment {
Link Here
|
229 |
if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) { |
225 |
if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) { |
230 |
C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} ); |
226 |
C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} ); |
231 |
} |
227 |
} |
|
|
228 |
my $sthr = $dbh->prepare("SELECT max(accountlines_id) AS lastinsertid FROM accountlines"); |
229 |
$sthr->execute(); |
230 |
my $datalastinsertid = $sthr->fetchrow_hashref; |
231 |
$sthr->finish; |
232 |
return $datalastinsertid->{'lastinsertid'}; |
232 |
} |
233 |
} |
233 |
|
234 |
|
234 |
=head2 getnextacctno |
235 |
=head2 getnextacctno |
Lines 256-273
sub getnextacctno ($) {
Link Here
|
256 |
|
257 |
|
257 |
=head2 fixaccounts (removed) |
258 |
=head2 fixaccounts (removed) |
258 |
|
259 |
|
259 |
&fixaccounts($borrowernumber, $accountnumber, $amount); |
260 |
&fixaccounts($accountlines_id, $borrowernumber, $accountnumber, $amount); |
260 |
|
261 |
|
261 |
#' |
262 |
#' |
262 |
# FIXME - I don't understand what this function does. |
263 |
# FIXME - I don't understand what this function does. |
263 |
sub fixaccounts { |
264 |
sub fixaccounts { |
264 |
my ( $borrowernumber, $accountno, $amount ) = @_; |
265 |
my ( $accountlines_id, $borrowernumber, $accountno, $amount ) = @_; |
265 |
my $dbh = C4::Context->dbh; |
266 |
my $dbh = C4::Context->dbh; |
266 |
my $sth = $dbh->prepare( |
267 |
my $sth = $dbh->prepare( |
267 |
"SELECT * FROM accountlines WHERE borrowernumber=? |
268 |
"SELECT * FROM accountlines WHERE accountlines_id=?" |
268 |
AND accountno=?" |
|
|
269 |
); |
269 |
); |
270 |
$sth->execute( $borrowernumber, $accountno ); |
270 |
$sth->execute( $accountlines_id ); |
271 |
my $data = $sth->fetchrow_hashref; |
271 |
my $data = $sth->fetchrow_hashref; |
272 |
|
272 |
|
273 |
# FIXME - Error-checking |
273 |
# FIXME - Error-checking |
Lines 279-286
sub fixaccounts {
Link Here
|
279 |
UPDATE accountlines |
279 |
UPDATE accountlines |
280 |
SET amount = '$amount', |
280 |
SET amount = '$amount', |
281 |
amountoutstanding = '$outstanding' |
281 |
amountoutstanding = '$outstanding' |
282 |
WHERE borrowernumber = $borrowernumber |
282 |
WHERE accountlines_id = $accountlines_id |
283 |
AND accountno = $accountno |
|
|
284 |
EOT |
283 |
EOT |
285 |
# FIXME: exceedingly bad form. Use prepare with placholders ("?") in query and execute args. |
284 |
# FIXME: exceedingly bad form. Use prepare with placholders ("?") in query and execute args. |
286 |
} |
285 |
} |
Lines 460-471
sub fixcredit {
Link Here
|
460 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
459 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
461 |
$amountleft = 0; |
460 |
$amountleft = 0; |
462 |
} |
461 |
} |
463 |
my $thisacct = $accdata->{accountno}; |
462 |
my $thisacct = $accdata->{accountlines_id}; |
464 |
my $usth = $dbh->prepare( |
463 |
my $usth = $dbh->prepare( |
465 |
"UPDATE accountlines SET amountoutstanding= ? |
464 |
"UPDATE accountlines SET amountoutstanding= ? |
466 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
465 |
WHERE (accountlines_id = ?)" |
467 |
); |
466 |
); |
468 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
467 |
$usth->execute( $newamtos, $thisacct ); |
469 |
$usth->finish; |
468 |
$usth->finish; |
470 |
$usth = $dbh->prepare( |
469 |
$usth = $dbh->prepare( |
471 |
"INSERT INTO accountoffsets |
470 |
"INSERT INTO accountoffsets |
Lines 499-510
sub fixcredit {
Link Here
|
499 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
498 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
500 |
$amountleft = 0; |
499 |
$amountleft = 0; |
501 |
} |
500 |
} |
502 |
my $thisacct = $accdata->{accountno}; |
501 |
my $thisacct = $accdata->{accountlines_id}; |
503 |
my $usth = $dbh->prepare( |
502 |
my $usth = $dbh->prepare( |
504 |
"UPDATE accountlines SET amountoutstanding= ? |
503 |
"UPDATE accountlines SET amountoutstanding= ? |
505 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
504 |
WHERE (accountlines_id = ?)" |
506 |
); |
505 |
); |
507 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
506 |
$usth->execute( $newamtos, $thisacct ); |
508 |
$usth->finish; |
507 |
$usth->finish; |
509 |
$usth = $dbh->prepare( |
508 |
$usth = $dbh->prepare( |
510 |
"INSERT INTO accountoffsets |
509 |
"INSERT INTO accountoffsets |
Lines 565-576
sub refund {
Link Here
|
565 |
} |
564 |
} |
566 |
|
565 |
|
567 |
# print $amountleft; |
566 |
# print $amountleft; |
568 |
my $thisacct = $accdata->{accountno}; |
567 |
my $thisacct = $accdata->{accountlines_id}; |
569 |
my $usth = $dbh->prepare( |
568 |
my $usth = $dbh->prepare( |
570 |
"UPDATE accountlines SET amountoutstanding= ? |
569 |
"UPDATE accountlines SET amountoutstanding= ? |
571 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
570 |
WHERE (accountlines_id = ?)" |
572 |
); |
571 |
); |
573 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
572 |
$usth->execute( $newamtos, $thisacct ); |
574 |
$usth->finish; |
573 |
$usth->finish; |
575 |
$usth = $dbh->prepare( |
574 |
$usth = $dbh->prepare( |
576 |
"INSERT INTO accountoffsets |
575 |
"INSERT INTO accountoffsets |
Lines 603-612
sub getcharges {
Link Here
|
603 |
} |
602 |
} |
604 |
|
603 |
|
605 |
sub ModNote { |
604 |
sub ModNote { |
606 |
my ( $borrowernumber, $accountno, $note ) = @_; |
605 |
my ( $accountlines_id, $note ) = @_; |
607 |
my $dbh = C4::Context->dbh; |
606 |
my $dbh = C4::Context->dbh; |
608 |
my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE borrowernumber = ? AND accountno = ?'); |
607 |
my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE accountlines_id = ?'); |
609 |
$sth->execute( $note, $borrowernumber, $accountno ); |
608 |
$sth->execute( $note, $accountlines_id ); |
610 |
} |
609 |
} |
611 |
|
610 |
|
612 |
sub getcredits { |
611 |
sub getcredits { |
Lines 651-671
sub getrefunds {
Link Here
|
651 |
} |
650 |
} |
652 |
|
651 |
|
653 |
sub ReversePayment { |
652 |
sub ReversePayment { |
654 |
my ( $borrowernumber, $accountno ) = @_; |
653 |
my ( $accountlines_id ) = @_; |
655 |
my $dbh = C4::Context->dbh; |
654 |
my $dbh = C4::Context->dbh; |
656 |
|
655 |
|
657 |
my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE borrowernumber = ? AND accountno = ?'); |
656 |
my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE accountlines_id = ?'); |
658 |
$sth->execute( $borrowernumber, $accountno ); |
657 |
$sth->execute( $accountlines_id ); |
659 |
my $row = $sth->fetchrow_hashref(); |
658 |
my $row = $sth->fetchrow_hashref(); |
660 |
my $amount_outstanding = $row->{'amountoutstanding'}; |
659 |
my $amount_outstanding = $row->{'amountoutstanding'}; |
661 |
|
660 |
|
662 |
if ( $amount_outstanding <= 0 ) { |
661 |
if ( $amount_outstanding <= 0 ) { |
663 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?'); |
662 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE accountlines_id = ?'); |
664 |
$sth->execute( $borrowernumber, $accountno ); |
663 |
$sth->execute( $accountlines_id ); |
665 |
} else { |
664 |
} else { |
666 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?'); |
665 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE accountlines_id = ?'); |
667 |
$sth->execute( $borrowernumber, $accountno ); |
666 |
$sth->execute( $accountlines_id ); |
668 |
} |
667 |
} |
669 |
} |
668 |
} |
670 |
|
669 |
|
671 |
=head2 recordpayment_selectaccts |
670 |
=head2 recordpayment_selectaccts |
Lines 709-715
sub recordpayment_selectaccts {
Link Here
|
709 |
|
708 |
|
710 |
# offset transactions |
709 |
# offset transactions |
711 |
my $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' . |
710 |
my $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' . |
712 |
'WHERE (borrowernumber = ?) AND (accountno=?)'); |
711 |
'WHERE accountlines_id=?'); |
713 |
for my $accdata ( @{$rows} ) { |
712 |
for my $accdata ( @{$rows} ) { |
714 |
if ($amountleft == 0) { |
713 |
if ($amountleft == 0) { |
715 |
last; |
714 |
last; |
Lines 722-729
sub recordpayment_selectaccts {
Link Here
|
722 |
$newamtos = $accdata->{amountoutstanding} - $amountleft; |
721 |
$newamtos = $accdata->{amountoutstanding} - $amountleft; |
723 |
$amountleft = 0; |
722 |
$amountleft = 0; |
724 |
} |
723 |
} |
725 |
my $thisacct = $accdata->{accountno}; |
724 |
my $thisacct = $accdata->{accountlines_id}; |
726 |
$sth->execute( $newamtos, $borrowernumber, $thisacct ); |
725 |
$sth->execute( $newamtos, $thisacct ); |
727 |
} |
726 |
} |
728 |
|
727 |
|
729 |
# create new line |
728 |
# create new line |
Lines 738-744
sub recordpayment_selectaccts {
Link Here
|
738 |
# makepayment needs to be fixed to handle partials till then this separate subroutine |
737 |
# makepayment needs to be fixed to handle partials till then this separate subroutine |
739 |
# fills in |
738 |
# fills in |
740 |
sub makepartialpayment { |
739 |
sub makepartialpayment { |
741 |
my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
740 |
my ( $accountlines_id, $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
742 |
my $manager_id = 0; |
741 |
my $manager_id = 0; |
743 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
742 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
744 |
if (!$amount || $amount < 0) { |
743 |
if (!$amount || $amount < 0) { |
Lines 750-761
sub makepartialpayment {
Link Here
|
750 |
my $newamtos = 0; |
749 |
my $newamtos = 0; |
751 |
|
750 |
|
752 |
my $data = $dbh->selectrow_hashref( |
751 |
my $data = $dbh->selectrow_hashref( |
753 |
'SELECT * FROM accountlines WHERE borrowernumber=? AND accountno=?',undef,$borrowernumber,$accountno); |
752 |
'SELECT * FROM accountlines WHERE accountlines_id=?',undef,$accountlines_id); |
754 |
my $new_outstanding = $data->{amountoutstanding} - $amount; |
753 |
my $new_outstanding = $data->{amountoutstanding} - $amount; |
755 |
|
754 |
|
756 |
my $update = 'UPDATE accountlines SET amountoutstanding = ? WHERE borrowernumber = ? ' |
755 |
my $update = 'UPDATE accountlines SET amountoutstanding = ? WHERE accountlines_id = ? '; |
757 |
. ' AND accountno = ?'; |
756 |
$dbh->do( $update, undef, $new_outstanding, $accountlines_id); |
758 |
$dbh->do( $update, undef, $new_outstanding, $borrowernumber, $accountno); |
|
|
759 |
|
757 |
|
760 |
# create new line |
758 |
# create new line |
761 |
my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, ' |
759 |
my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, ' |