Avoid replacing the loop target in-loop user/miker/logic_thinko
authorMike Rylander <mrylander@gmail.com>
Tue, 12 Jul 2016 19:42:01 +0000 (15:42 -0400)
committerMike Rylander <mrylander@gmail.com>
Tue, 12 Jul 2016 19:42:01 +0000 (15:42 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/CircCommon.pm

index 9da9dd8..09f2a8e 100644 (file)
@@ -802,17 +802,19 @@ sub bill_payment_map_for_xact {
 
     # Try to map payments to bills by amounts starting with the
     # largest payments:
+    my @p;
     foreach my $payment (sort {$b->amount() <=> $a->amount()} @$payments) {
         my @bills2pay = grep {$_->{bill}->amount() == $payment->amount()} @entries;
         if (@bills2pay) {
             my $entry = $bills2pay[0];
             $entry->{bill}->amount(0);
             push @{$entry->{payments}}, $payment;
-            # Remove the payment from the master list.
-            my @p = grep {$_->id() != $payment->id()} @$payments;
-            $payments = \@p;
+        } else {
+            # keep the payment on the master list.
+            push @p, $payment
         }
     }
+    $payments = \@p;
 
     # Map remaining bills to payments in whatever order.
     foreach  my $entry (grep {$_->{bill}->amount() > 0} @entries) {