From 020da0e81712ca3d6856e31af4cd3b8d18346c01 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 Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi Signed-off-by: Nick Clemens --- C4/Circulation.pm | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index dd913e6f04..51dde19697 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2339,29 +2339,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.39.5