Bug 27995: Update return for Koha::Account::Line->apply

This patch updates the return value of Koha::Account::Line->apply to return the
updated Koha::Account::Line object with Koha::Object::Messages embedded
for the results of any triggered renewals.

Available credit, the former return value, is still availabe via the
object directly as `amountoutstanding`.

Koha::REST::V1::Patrons::Account->add_credit has been updated to reflect
the change. No other area's of Koha relied upon the return value.

This patch also fixes a bug whereby if you passed a list of debits with
an outstanding debit larger than the outstanding credit then you could
end up with superflous offest lines with zero amounts that was
highlighted by the improved unit tests in
t/db_dependent/Koha/Account/Line.t

Test plan
1/ Run t/db_dependent/Koha/Account/Line.t
2/ Run t/db_dependent/api/v1/patrons_accounts.t
3/ If both tests pass then signoff

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Martin Renvoize 2021-03-19 10:52:54 +00:00 committed by Jonathan Druart
parent 479c8d997e
commit fb3a67f21b
2 changed files with 13 additions and 5 deletions

View File

@ -657,7 +657,14 @@ sub apply {
# Attempt to renew the item associated with this debit if
# appropriate
if ( $self->credit_type_code ne 'FORGIVEN' && $debit->is_renewable ) {
$debit->renew_item( { interface => $params->{interface} } );
my $outcome = $debit->renew_item( { interface => $params->{interface} } );
$self->add_message(
{
type => 'info',
message => 'renewal',
payload => $outcome
}
) if $outcome;
}
# Same logic exists in Koha::Account::pay
@ -677,10 +684,12 @@ sub apply {
C4::Circulation::ReturnLostItem( $self->borrowernumber,
$debit->itemnumber );
}
last if $available_credit == 0;
}
});
return $available_credit;
return $self;
}
=head3 payout

View File

@ -132,13 +132,12 @@ sub add_credit {
$debits = Koha::Account::Lines->search({ accountlines_id => { -in => $debits_ids } })
if $debits_ids;
my $outstanding_credit = $credit->amountoutstanding;
if ($debits) {
# pay them!
$outstanding_credit = $credit->apply({ debits => [ $debits->as_list ], offset_type => 'payment' });
$credit = $credit->apply({ debits => [ $debits->as_list ], offset_type => 'payment' });
}
if ($outstanding_credit) {
if ($credit->amountoutstanding != 0) {
my $outstanding_debits = $account->outstanding_debits;
$credit->apply({ debits => [ $outstanding_debits->as_list ], offset_type => 'payment' });
}