From 72efb5a9786c349da88ff4f8e754d732ded089ee Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 18 Apr 2019 09:44:01 +0100 Subject: [PATCH] Bug 22200: Add credit when forgiving overdue Prior to this patch the exemptfine option for_FixOverduesOnReturn would directly set the overdue amount to 0 rather than creating an appropriate credit of the type forgiven and offseting it against the debt. Test Plan: 1) Find a checkout that is overdue with fines 2) Check the item in with the forgive fines option checked 3) Note that the users account details now shows the overdue as forgiven and a forgiven credit is added which matches the overdue amount (and is applied against it, i.e. both overdue and forgiven lines have 0 amountoutstanding). Signed-off-by: Martin Renvoize --- C4/Circulation.pm | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index c93ee3d302..b8a774af46 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2329,29 +2329,35 @@ sub _FixOverduesOnReturn { } # check for overdue fine - my $accountline = Koha::Account::Lines->search( + my $accountlines = Koha::Account::Lines->search( { borrowernumber => $borrowernumber, itemnumber => $item, accounttype => 'OVERDUE', status => 'UNRETURNED' } - )->next(); - return 0 unless $accountline; # no warning, there's just nothing to fix + ); + return 0 unless $accountlines->count; # no warning, there's just nothing to fix + my $accountline = $accountlines->next; if ($exemptfine) { my $amountoutstanding = $accountline->amountoutstanding; - $accountline->status('FORGIVEN'); - $accountline->amountoutstanding(0); - - Koha::Account::Offset->new( + my $account = Koha::Account->new({patron_id => $borrowernumber}); + my $credit = $account->add_credit( { - debit_id => $accountline->id, - type => 'Forgiven', - amount => $amountoutstanding * -1, + amount => $amountoutstanding, + user_id => C4::Context->userenv ? C4::Context->userenv->{'number'} : undef, + library_id => C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef, + interface => C4::Context->interface, + type => 'forgiven', + item_id => $item } - )->store(); + ); + + $credit->apply({ debits => $accountlines->reset, offset_type => 'Forgiven' }); + + $accountline->status('FORGIVEN'); if (C4::Context->preference("FinesLog")) { &logaction("FINES", 'MODIFY',$borrowernumber,"Overdue forgiven: item $item"); -- 2.20.1