|
Lines 88-95
was made.
Link Here
|
| 88 |
sub makepayment { |
88 |
sub makepayment { |
| 89 |
my ( $accountlines_id, $borrowernumber, $accountno, $amount, $user, $branch, $payment_note ) = @_; |
89 |
my ( $accountlines_id, $borrowernumber, $accountno, $amount, $user, $branch, $payment_note ) = @_; |
| 90 |
|
90 |
|
|
|
91 |
my $line = Koha::Account::Lines->find( $accountlines_id ); |
| 92 |
|
| 91 |
return Koha::Account->new( { patron_id => $borrowernumber } ) |
93 |
return Koha::Account->new( { patron_id => $borrowernumber } ) |
| 92 |
->pay( { accountlines_id => $accountlines_id, amount => $amount, library_id => $branch, note => $payment_note } ); |
94 |
->pay( { lines => [ $line ], amount => $amount, library_id => $branch, note => $payment_note } ); |
| 93 |
} |
95 |
} |
| 94 |
|
96 |
|
| 95 |
=head2 getnextacctno |
97 |
=head2 getnextacctno |
|
Lines 396-484
will be credited to the next one.
Link Here
|
| 396 |
sub recordpayment_selectaccts { |
398 |
sub recordpayment_selectaccts { |
| 397 |
my ( $borrowernumber, $amount, $accts, $note ) = @_; |
399 |
my ( $borrowernumber, $amount, $accts, $note ) = @_; |
| 398 |
|
400 |
|
| 399 |
my $dbh = C4::Context->dbh; |
401 |
my @lines = Koha::Account::Lines->search( |
| 400 |
my $newamtos = 0; |
402 |
{ |
| 401 |
my $accdata = q{}; |
403 |
borrowernumber => $borrowernumber, |
| 402 |
my $branch = C4::Context->userenv->{branch}; |
404 |
amountoutstanding => { '<>' => 0 }, |
| 403 |
my $amountleft = $amount; |
405 |
accountno => { 'IN' => $accts }, |
| 404 |
my $manager_id = 0; |
406 |
}, |
| 405 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
407 |
{ order_by => 'date' } |
| 406 |
my $sql = 'SELECT * FROM accountlines WHERE (borrowernumber = ?) ' . |
408 |
); |
| 407 |
'AND (amountoutstanding<>0) '; |
|
|
| 408 |
if (@{$accts} ) { |
| 409 |
$sql .= ' AND accountlines_id IN ( ' . join ',', @{$accts}; |
| 410 |
$sql .= ' ) '; |
| 411 |
} |
| 412 |
$sql .= ' ORDER BY date'; |
| 413 |
# begin transaction |
| 414 |
my $nextaccntno = getnextacctno($borrowernumber); |
| 415 |
|
| 416 |
# get lines with outstanding amounts to offset |
| 417 |
my $rows = $dbh->selectall_arrayref($sql, { Slice => {} }, $borrowernumber); |
| 418 |
|
| 419 |
# offset transactions |
| 420 |
my $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' . |
| 421 |
'WHERE accountlines_id=?'); |
| 422 |
|
409 |
|
| 423 |
my @ids; |
410 |
return Koha::Account->new( |
| 424 |
for my $accdata ( @{$rows} ) { |
411 |
{ |
| 425 |
if ($amountleft == 0) { |
412 |
patron_id => $borrowernumber, |
| 426 |
last; |
|
|
| 427 |
} |
| 428 |
if ( $accdata->{amountoutstanding} < $amountleft ) { |
| 429 |
$newamtos = 0; |
| 430 |
$amountleft -= $accdata->{amountoutstanding}; |
| 431 |
} |
413 |
} |
| 432 |
else { |
414 |
)->pay( |
| 433 |
$newamtos = $accdata->{amountoutstanding} - $amountleft; |
415 |
{ |
| 434 |
$amountleft = 0; |
416 |
amount => $amount, |
|
|
417 |
lines => \@lines, |
| 418 |
note => $note |
| 435 |
} |
419 |
} |
| 436 |
my $thisacct = $accdata->{accountlines_id}; |
420 |
); |
| 437 |
$sth->execute( $newamtos, $thisacct ); |
|
|
| 438 |
|
| 439 |
if ( C4::Context->preference("FinesLog") ) { |
| 440 |
logaction("FINES", 'MODIFY', $borrowernumber, Dumper({ |
| 441 |
action => 'fee_payment', |
| 442 |
borrowernumber => $borrowernumber, |
| 443 |
old_amountoutstanding => $accdata->{'amountoutstanding'}, |
| 444 |
new_amountoutstanding => $newamtos, |
| 445 |
amount_paid => $accdata->{'amountoutstanding'} - $newamtos, |
| 446 |
accountlines_id => $accdata->{'accountlines_id'}, |
| 447 |
accountno => $accdata->{'accountno'}, |
| 448 |
manager_id => $manager_id, |
| 449 |
})); |
| 450 |
push( @ids, $accdata->{'accountlines_id'} ); |
| 451 |
} |
| 452 |
|
| 453 |
} |
| 454 |
|
| 455 |
# create new line |
| 456 |
$sql = 'INSERT INTO accountlines ' . |
| 457 |
'(borrowernumber, accountno,date,amount,description,accounttype,amountoutstanding,manager_id,note) ' . |
| 458 |
q|VALUES (?,?,now(),?,'','Pay',?,?,?)|; |
| 459 |
$dbh->do($sql,{},$borrowernumber, $nextaccntno, 0 - $amount, 0 - $amountleft, $manager_id, $note ); |
| 460 |
UpdateStats({ |
| 461 |
branch => $branch, |
| 462 |
type => 'payment', |
| 463 |
amount => $amount, |
| 464 |
borrowernumber => $borrowernumber, |
| 465 |
accountno => $nextaccntno} |
| 466 |
); |
| 467 |
|
| 468 |
if ( C4::Context->preference("FinesLog") ) { |
| 469 |
logaction("FINES", 'CREATE',$borrowernumber,Dumper({ |
| 470 |
action => 'create_payment', |
| 471 |
borrowernumber => $borrowernumber, |
| 472 |
accountno => $nextaccntno, |
| 473 |
amount => 0 - $amount, |
| 474 |
amountoutstanding => 0 - $amountleft, |
| 475 |
accounttype => 'Pay', |
| 476 |
accountlines_paid => \@ids, |
| 477 |
manager_id => $manager_id, |
| 478 |
})); |
| 479 |
} |
| 480 |
|
| 481 |
return; |
| 482 |
} |
421 |
} |
| 483 |
|
422 |
|
| 484 |
# makepayment needs to be fixed to handle partials till then this separate subroutine |
423 |
# makepayment needs to be fixed to handle partials till then this separate subroutine |