|
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 113-124
sub recordpayment {
Link Here
|
| 113 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
113 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
| 114 |
$amountleft = 0; |
114 |
$amountleft = 0; |
| 115 |
} |
115 |
} |
| 116 |
my $thisacct = $accdata->{accountno}; |
116 |
my $thisacct = $accdata->{accountlinesid}; |
| 117 |
my $usth = $dbh->prepare( |
117 |
my $usth = $dbh->prepare( |
| 118 |
"UPDATE accountlines SET amountoutstanding= ? |
118 |
"UPDATE accountlines SET amountoutstanding= ? |
| 119 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
119 |
WHERE (accountlinesid = ?)" |
| 120 |
); |
120 |
); |
| 121 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
121 |
$usth->execute( $newamtos, $thisacct ); |
| 122 |
$usth->finish; |
122 |
$usth->finish; |
| 123 |
# $usth = $dbh->prepare( |
123 |
# $usth = $dbh->prepare( |
| 124 |
# "INSERT INTO accountoffsets |
124 |
# "INSERT INTO accountoffsets |
|
Lines 144-150
sub recordpayment {
Link Here
|
| 144 |
|
144 |
|
| 145 |
=head2 makepayment |
145 |
=head2 makepayment |
| 146 |
|
146 |
|
| 147 |
&makepayment($borrowernumber, $acctnumber, $amount, $branchcode); |
147 |
&makepayment($accountlinesid, $borrowernumber, $acctnumber, $amount, $branchcode); |
| 148 |
|
148 |
|
| 149 |
Records the fact that a patron has paid off the entire amount he or |
149 |
Records the fact that a patron has paid off the entire amount he or |
| 150 |
she owes. |
150 |
she owes. |
|
Lines 165-171
sub makepayment {
Link Here
|
| 165 |
#here we update both the accountoffsets and the account lines |
165 |
#here we update both the accountoffsets and the account lines |
| 166 |
#updated to check, if they are paying off a lost item, we return the item |
166 |
#updated to check, if they are paying off a lost item, we return the item |
| 167 |
# from their card, and put a note on the item record |
167 |
# from their card, and put a note on the item record |
| 168 |
my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
168 |
my ( $accountlinesid, $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
| 169 |
my $dbh = C4::Context->dbh; |
169 |
my $dbh = C4::Context->dbh; |
| 170 |
my $manager_id = 0; |
170 |
my $manager_id = 0; |
| 171 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
171 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
|
Lines 173-182
sub makepayment {
Link Here
|
| 173 |
# begin transaction |
173 |
# begin transaction |
| 174 |
my $nextaccntno = getnextacctno($borrowernumber); |
174 |
my $nextaccntno = getnextacctno($borrowernumber); |
| 175 |
my $newamtos = 0; |
175 |
my $newamtos = 0; |
| 176 |
my $sth = |
176 |
my $sth = $dbh->prepare("SELECT * FROM accountlines WHERE accountlinesid=?"); |
| 177 |
$dbh->prepare( |
177 |
$sth->execute( $accountlinesid ); |
| 178 |
"SELECT * FROM accountlines WHERE borrowernumber=? AND accountno=?"); |
|
|
| 179 |
$sth->execute( $borrowernumber, $accountno ); |
| 180 |
my $data = $sth->fetchrow_hashref; |
178 |
my $data = $sth->fetchrow_hashref; |
| 181 |
$sth->finish; |
179 |
$sth->finish; |
| 182 |
|
180 |
|
|
Lines 185-206
sub makepayment {
Link Here
|
| 185 |
$dbh->prepare( |
183 |
$dbh->prepare( |
| 186 |
"UPDATE accountlines |
184 |
"UPDATE accountlines |
| 187 |
SET amountoutstanding = 0, description = 'Payment,thanks' |
185 |
SET amountoutstanding = 0, description = 'Payment,thanks' |
| 188 |
WHERE borrowernumber = ? |
186 |
WHERE accountlinesid = ? |
| 189 |
AND accountno = ? |
|
|
| 190 |
" |
187 |
" |
| 191 |
); |
188 |
); |
| 192 |
$udp->execute($borrowernumber, $accountno ); |
189 |
$udp->execute($accountlinesid); |
| 193 |
$udp->finish; |
190 |
$udp->finish; |
| 194 |
}else{ |
191 |
}else{ |
| 195 |
my $udp = |
192 |
my $udp = |
| 196 |
$dbh->prepare( |
193 |
$dbh->prepare( |
| 197 |
"UPDATE accountlines |
194 |
"UPDATE accountlines |
| 198 |
SET amountoutstanding = 0 |
195 |
SET amountoutstanding = 0 |
| 199 |
WHERE borrowernumber = ? |
196 |
WHERE accountlinesid = ? |
| 200 |
AND accountno = ? |
|
|
| 201 |
" |
197 |
" |
| 202 |
); |
198 |
); |
| 203 |
$udp->execute($borrowernumber, $accountno ); |
199 |
$udp->execute($accountlinesid); |
| 204 |
$udp->finish; |
200 |
$udp->finish; |
| 205 |
|
201 |
|
| 206 |
# create new line |
202 |
# create new line |
|
Lines 227-232
sub makepayment {
Link Here
|
| 227 |
if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) { |
223 |
if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) { |
| 228 |
C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} ); |
224 |
C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} ); |
| 229 |
} |
225 |
} |
|
|
226 |
my $sthr = $dbh->prepare("SELECT max(accountlinesid) AS lastinsertid FROM accountlines"); |
| 227 |
$sthr->execute(); |
| 228 |
my $datalastinsertid = $sthr->fetchrow_hashref; |
| 229 |
$sthr->finish; |
| 230 |
return $datalastinsertid->{'lastinsertid'}; |
| 230 |
} |
231 |
} |
| 231 |
|
232 |
|
| 232 |
=head2 getnextacctno |
233 |
=head2 getnextacctno |
|
Lines 254-271
sub getnextacctno ($) {
Link Here
|
| 254 |
|
255 |
|
| 255 |
=head2 fixaccounts (removed) |
256 |
=head2 fixaccounts (removed) |
| 256 |
|
257 |
|
| 257 |
&fixaccounts($borrowernumber, $accountnumber, $amount); |
258 |
&fixaccounts($accountlinesid, $borrowernumber, $accountnumber, $amount); |
| 258 |
|
259 |
|
| 259 |
#' |
260 |
#' |
| 260 |
# FIXME - I don't understand what this function does. |
261 |
# FIXME - I don't understand what this function does. |
| 261 |
sub fixaccounts { |
262 |
sub fixaccounts { |
| 262 |
my ( $borrowernumber, $accountno, $amount ) = @_; |
263 |
my ( $accountlinesid, $borrowernumber, $accountno, $amount ) = @_; |
| 263 |
my $dbh = C4::Context->dbh; |
264 |
my $dbh = C4::Context->dbh; |
| 264 |
my $sth = $dbh->prepare( |
265 |
my $sth = $dbh->prepare( |
| 265 |
"SELECT * FROM accountlines WHERE borrowernumber=? |
266 |
"SELECT * FROM accountlines WHERE accountlinesid=?" |
| 266 |
AND accountno=?" |
|
|
| 267 |
); |
267 |
); |
| 268 |
$sth->execute( $borrowernumber, $accountno ); |
268 |
$sth->execute( $accountlinesid ); |
| 269 |
my $data = $sth->fetchrow_hashref; |
269 |
my $data = $sth->fetchrow_hashref; |
| 270 |
|
270 |
|
| 271 |
# FIXME - Error-checking |
271 |
# FIXME - Error-checking |
|
Lines 277-284
sub fixaccounts {
Link Here
|
| 277 |
UPDATE accountlines |
277 |
UPDATE accountlines |
| 278 |
SET amount = '$amount', |
278 |
SET amount = '$amount', |
| 279 |
amountoutstanding = '$outstanding' |
279 |
amountoutstanding = '$outstanding' |
| 280 |
WHERE borrowernumber = $borrowernumber |
280 |
WHERE accountlinesid = $accountlinesid |
| 281 |
AND accountno = $accountno |
|
|
| 282 |
EOT |
281 |
EOT |
| 283 |
# FIXME: exceedingly bad form. Use prepare with placholders ("?") in query and execute args. |
282 |
# FIXME: exceedingly bad form. Use prepare with placholders ("?") in query and execute args. |
| 284 |
} |
283 |
} |
|
Lines 456-467
sub fixcredit {
Link Here
|
| 456 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
455 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
| 457 |
$amountleft = 0; |
456 |
$amountleft = 0; |
| 458 |
} |
457 |
} |
| 459 |
my $thisacct = $accdata->{accountno}; |
458 |
my $thisacct = $accdata->{accountlinesid}; |
| 460 |
my $usth = $dbh->prepare( |
459 |
my $usth = $dbh->prepare( |
| 461 |
"UPDATE accountlines SET amountoutstanding= ? |
460 |
"UPDATE accountlines SET amountoutstanding= ? |
| 462 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
461 |
WHERE (accountlinesid = ?)" |
| 463 |
); |
462 |
); |
| 464 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
463 |
$usth->execute( $newamtos, $thisacct ); |
| 465 |
$usth->finish; |
464 |
$usth->finish; |
| 466 |
$usth = $dbh->prepare( |
465 |
$usth = $dbh->prepare( |
| 467 |
"INSERT INTO accountoffsets |
466 |
"INSERT INTO accountoffsets |
|
Lines 495-506
sub fixcredit {
Link Here
|
| 495 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
494 |
$newamtos = $accdata->{'amountoutstanding'} - $amountleft; |
| 496 |
$amountleft = 0; |
495 |
$amountleft = 0; |
| 497 |
} |
496 |
} |
| 498 |
my $thisacct = $accdata->{accountno}; |
497 |
my $thisacct = $accdata->{accountlinesid}; |
| 499 |
my $usth = $dbh->prepare( |
498 |
my $usth = $dbh->prepare( |
| 500 |
"UPDATE accountlines SET amountoutstanding= ? |
499 |
"UPDATE accountlines SET amountoutstanding= ? |
| 501 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
500 |
WHERE (accountlinesid = ?)" |
| 502 |
); |
501 |
); |
| 503 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
502 |
$usth->execute( $newamtos, $thisacct ); |
| 504 |
$usth->finish; |
503 |
$usth->finish; |
| 505 |
$usth = $dbh->prepare( |
504 |
$usth = $dbh->prepare( |
| 506 |
"INSERT INTO accountoffsets |
505 |
"INSERT INTO accountoffsets |
|
Lines 561-572
sub refund {
Link Here
|
| 561 |
} |
560 |
} |
| 562 |
|
561 |
|
| 563 |
# print $amountleft; |
562 |
# print $amountleft; |
| 564 |
my $thisacct = $accdata->{accountno}; |
563 |
my $thisacct = $accdata->{accountlinesid}; |
| 565 |
my $usth = $dbh->prepare( |
564 |
my $usth = $dbh->prepare( |
| 566 |
"UPDATE accountlines SET amountoutstanding= ? |
565 |
"UPDATE accountlines SET amountoutstanding= ? |
| 567 |
WHERE (borrowernumber = ?) AND (accountno=?)" |
566 |
WHERE (accountlinesid = ?)" |
| 568 |
); |
567 |
); |
| 569 |
$usth->execute( $newamtos, $borrowernumber, $thisacct ); |
568 |
$usth->execute( $newamtos, $thisacct ); |
| 570 |
$usth->finish; |
569 |
$usth->finish; |
| 571 |
$usth = $dbh->prepare( |
570 |
$usth = $dbh->prepare( |
| 572 |
"INSERT INTO accountoffsets |
571 |
"INSERT INTO accountoffsets |
|
Lines 599-608
sub getcharges {
Link Here
|
| 599 |
} |
598 |
} |
| 600 |
|
599 |
|
| 601 |
sub ModNote { |
600 |
sub ModNote { |
| 602 |
my ( $borrowernumber, $accountno, $note ) = @_; |
601 |
my ( $accountlinesid, $note ) = @_; |
| 603 |
my $dbh = C4::Context->dbh; |
602 |
my $dbh = C4::Context->dbh; |
| 604 |
my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE borrowernumber = ? AND accountno = ?'); |
603 |
my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE accountlinesid = ?'); |
| 605 |
$sth->execute( $note, $borrowernumber, $accountno ); |
604 |
$sth->execute( $note, $accountlinesid ); |
| 606 |
} |
605 |
} |
| 607 |
|
606 |
|
| 608 |
sub getcredits { |
607 |
sub getcredits { |
|
Lines 647-667
sub getrefunds {
Link Here
|
| 647 |
} |
646 |
} |
| 648 |
|
647 |
|
| 649 |
sub ReversePayment { |
648 |
sub ReversePayment { |
| 650 |
my ( $borrowernumber, $accountno ) = @_; |
649 |
my ( $accountlinesid ) = @_; |
| 651 |
my $dbh = C4::Context->dbh; |
650 |
my $dbh = C4::Context->dbh; |
| 652 |
|
651 |
|
| 653 |
my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE borrowernumber = ? AND accountno = ?'); |
652 |
my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE accountlinesid = ?'); |
| 654 |
$sth->execute( $borrowernumber, $accountno ); |
653 |
$sth->execute( $accountlinesid ); |
| 655 |
my $row = $sth->fetchrow_hashref(); |
654 |
my $row = $sth->fetchrow_hashref(); |
| 656 |
my $amount_outstanding = $row->{'amountoutstanding'}; |
655 |
my $amount_outstanding = $row->{'amountoutstanding'}; |
| 657 |
|
656 |
|
| 658 |
if ( $amount_outstanding <= 0 ) { |
657 |
if ( $amount_outstanding <= 0 ) { |
| 659 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?'); |
658 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE accountlinesid = ?'); |
| 660 |
$sth->execute( $borrowernumber, $accountno ); |
659 |
$sth->execute( $accountlinesid ); |
| 661 |
} else { |
660 |
} else { |
| 662 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?'); |
661 |
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE accountlinesid = ?'); |
| 663 |
$sth->execute( $borrowernumber, $accountno ); |
662 |
$sth->execute( $accountlinesid ); |
| 664 |
} |
663 |
} |
| 665 |
} |
664 |
} |
| 666 |
|
665 |
|
| 667 |
=head2 recordpayment_selectaccts |
666 |
=head2 recordpayment_selectaccts |
|
Lines 703-709
sub recordpayment_selectaccts {
Link Here
|
| 703 |
|
702 |
|
| 704 |
# offset transactions |
703 |
# offset transactions |
| 705 |
my $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' . |
704 |
my $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' . |
| 706 |
'WHERE (borrowernumber = ?) AND (accountno=?)'); |
705 |
'WHERE accountlinesid=?'); |
| 707 |
for my $accdata ( @{$rows} ) { |
706 |
for my $accdata ( @{$rows} ) { |
| 708 |
if ($amountleft == 0) { |
707 |
if ($amountleft == 0) { |
| 709 |
last; |
708 |
last; |
|
Lines 716-723
sub recordpayment_selectaccts {
Link Here
|
| 716 |
$newamtos = $accdata->{amountoutstanding} - $amountleft; |
715 |
$newamtos = $accdata->{amountoutstanding} - $amountleft; |
| 717 |
$amountleft = 0; |
716 |
$amountleft = 0; |
| 718 |
} |
717 |
} |
| 719 |
my $thisacct = $accdata->{accountno}; |
718 |
my $thisacct = $accdata->{accountlinesid}; |
| 720 |
$sth->execute( $newamtos, $borrowernumber, $thisacct ); |
719 |
$sth->execute( $newamtos, $thisacct ); |
| 721 |
} |
720 |
} |
| 722 |
|
721 |
|
| 723 |
# create new line |
722 |
# create new line |
|
Lines 732-738
sub recordpayment_selectaccts {
Link Here
|
| 732 |
# makepayment needs to be fixed to handle partials till then this separate subroutine |
731 |
# makepayment needs to be fixed to handle partials till then this separate subroutine |
| 733 |
# fills in |
732 |
# fills in |
| 734 |
sub makepartialpayment { |
733 |
sub makepartialpayment { |
| 735 |
my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
734 |
my ( $accountlinesid, $borrowernumber, $accountno, $amount, $user, $branch ) = @_; |
| 736 |
my $manager_id = 0; |
735 |
my $manager_id = 0; |
| 737 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
736 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
| 738 |
if (!$amount || $amount < 0) { |
737 |
if (!$amount || $amount < 0) { |
|
Lines 744-755
sub makepartialpayment {
Link Here
|
| 744 |
my $newamtos = 0; |
743 |
my $newamtos = 0; |
| 745 |
|
744 |
|
| 746 |
my $data = $dbh->selectrow_hashref( |
745 |
my $data = $dbh->selectrow_hashref( |
| 747 |
'SELECT * FROM accountlines WHERE borrowernumber=? AND accountno=?',undef,$borrowernumber,$accountno); |
746 |
'SELECT * FROM accountlines WHERE accountlinesid=?',undef,$accountlinesid); |
| 748 |
my $new_outstanding = $data->{amountoutstanding} - $amount; |
747 |
my $new_outstanding = $data->{amountoutstanding} - $amount; |
| 749 |
|
748 |
|
| 750 |
my $update = 'UPDATE accountlines SET amountoutstanding = ? WHERE borrowernumber = ? ' |
749 |
my $update = 'UPDATE accountlines SET amountoutstanding = ? WHERE accountlinesid = ? '; |
| 751 |
. ' AND accountno = ?'; |
750 |
$dbh->do( $update, undef, $new_outstanding, $accountlinesid); |
| 752 |
$dbh->do( $update, undef, $new_outstanding, $borrowernumber, $accountno); |
|
|
| 753 |
|
751 |
|
| 754 |
# create new line |
752 |
# create new line |
| 755 |
my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, ' |
753 |
my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, ' |