|
Lines 485-490
sub add_credit {
Link Here
|
| 485 |
return $line; |
485 |
return $line; |
| 486 |
} |
486 |
} |
| 487 |
|
487 |
|
|
|
488 |
=head3 offset_amount |
| 489 |
|
| 490 |
my $credit = $account->offset_amount( |
| 491 |
{ |
| 492 |
amount => $amount, |
| 493 |
credit_type => $credit_type, |
| 494 |
payment_type => $payment_type, |
| 495 |
cash_register => $register_id, |
| 496 |
interface => $interface, |
| 497 |
library_id => $branchcode, |
| 498 |
user_id => $staff_id, |
| 499 |
debts => $debit_lines, |
| 500 |
description => $description, |
| 501 |
note => $note |
| 502 |
} |
| 503 |
); |
| 504 |
|
| 505 |
This method allows an amount to be offset into a patrons account and immediately applied against debts. |
| 506 |
|
| 507 |
You can optionally pass a debts parameter which consists of an arrayref of Koha::Account::Line debit lines. |
| 508 |
|
| 509 |
$credit_type can be any of: |
| 510 |
- 'PAYMENT' |
| 511 |
- 'WRITEOFF' |
| 512 |
- 'FORGIVEN' |
| 513 |
|
| 514 |
=cut |
| 515 |
|
| 516 |
sub offset_amount { |
| 517 |
my ( $self, $params ) = @_; |
| 518 |
|
| 519 |
# check for mandatory params |
| 520 |
my @mandatory = ( 'interface', 'amount', 'credit_type' ); |
| 521 |
for my $param (@mandatory) { |
| 522 |
unless ( defined( $params->{$param} ) ) { |
| 523 |
Koha::Exceptions::MissingParameter->throw( |
| 524 |
error => "The $param parameter is mandatory" ); |
| 525 |
} |
| 526 |
} |
| 527 |
|
| 528 |
# amount should always be passed as a positive value |
| 529 |
my $amount = $params->{amount} * -1; |
| 530 |
unless ( $amount < 0 ) { |
| 531 |
Koha::Exceptions::Account::AmountNotPositive->throw( |
| 532 |
error => 'Debit amount passed is not positive' ); |
| 533 |
} |
| 534 |
|
| 535 |
my $credit; |
| 536 |
my $schema = Koha::Database->new->schema; |
| 537 |
try { |
| 538 |
$schema->txn_do( |
| 539 |
sub { |
| 540 |
|
| 541 |
# Add payin credit |
| 542 |
$credit = $self->add_credit($params); |
| 543 |
|
| 544 |
# Offset debts passed first |
| 545 |
if ( exists( $params->{debts} ) ) { |
| 546 |
$credit->apply( |
| 547 |
{ |
| 548 |
debits => $params->{debts}, |
| 549 |
offset_type => $params->{credit_type} |
| 550 |
} |
| 551 |
); |
| 552 |
$credit->discard_changes; |
| 553 |
} |
| 554 |
|
| 555 |
# Offset against remaining balance if AutoReconcile |
| 556 |
$credit->apply( |
| 557 |
{ |
| 558 |
debits => [ $self->outstanding_debits->as_list ], |
| 559 |
offset_type => $params->{credit_type} |
| 560 |
} |
| 561 |
) if ( C4::Context->preference("AccountAutoReconcile") ); |
| 562 |
} |
| 563 |
); |
| 564 |
} |
| 565 |
catch { |
| 566 |
if ( ref($_) eq 'Koha::Exceptions::Object::FKConstraint' ) { |
| 567 |
if ( $_->broken_fk eq 'credit_type_code' ) { |
| 568 |
Koha::Exceptions::Account::UnrecognisedType->throw( |
| 569 |
error => 'Type of credit not recognised' ); |
| 570 |
} |
| 571 |
else { |
| 572 |
$_->rethrow; |
| 573 |
} |
| 574 |
} |
| 575 |
}; |
| 576 |
|
| 577 |
return $credit->discard_changes; |
| 578 |
} |
| 579 |
|
| 488 |
=head3 add_debit |
580 |
=head3 add_debit |
| 489 |
|
581 |
|
| 490 |
This method allows adding debits to a patron's account |
582 |
This method allows adding debits to a patron's account |
| 491 |
- |
|
|