Bug 8338: Remove zero amount overdues on backdated returns where appropriate
authorMartin Renvoize <martin.renvoize@ptfs-europe.com>
Wed, 13 May 2020 13:11:38 +0000 (14:11 +0100)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 20 Jul 2020 14:08:22 +0000 (16:08 +0200)
This patch removes any overdues which would be reversed on a backdated
return if CalcFineOnBackdate is enabled and the user has not already
attempted to pay off the accruing fine.

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

C4/Circulation.pm

index 00fefee..6b95b83 100644 (file)
@@ -2441,9 +2441,12 @@ sub _FixOverduesOnReturn {
             return 0 unless $accountlines->count; # no warning, there's just nothing to fix
 
             my $accountline = $accountlines->next;
+            my $payments = $accountline->credits;
 
             my $amountoutstanding = $accountline->amountoutstanding;
-            if ($exemptfine && ($amountoutstanding != 0)) {
+            if ( $accountline->amount == 0 && $payments->count == 0 ) {
+                $accountline->delete;
+            } elsif ($exemptfine && ($amountoutstanding != 0)) {
                 my $account = Koha::Account->new({patron_id => $borrowernumber});
                 my $credit = $account->add_credit(
                     {
@@ -2459,15 +2462,15 @@ sub _FixOverduesOnReturn {
                 $credit->apply({ debits => [ $accountline ], offset_type => 'Forgiven' });
 
                 $accountline->status('FORGIVEN');
+                $accountline->store();
 
                 if (C4::Context->preference("FinesLog")) {
                     &logaction("FINES", 'MODIFY',$borrowernumber,"Overdue forgiven: item $item");
                 }
             } else {
                 $accountline->status($status);
+                $accountline->store();
             }
-
-            return $accountline->store();
         }
     );