LP 1198465: Update logic in checkin_handle_lost_or_lo_now_found_restore_od
authorJason Stephenson <jason@sigio.com>
Sun, 6 Oct 2013 21:13:01 +0000 (17:13 -0400)
committerBen Shum <bshum@biblio.org>
Tue, 28 Jul 2015 20:24:33 +0000 (16:24 -0400)
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Ben Shum <bshum@biblio.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm

index c11b213..93c288e 100644 (file)
@@ -3821,18 +3821,29 @@ sub checkin_handle_lost_or_lo_now_found_restore_od {
     );
 
     $logger->debug("returning ".scalar(@$ods)." overdue charges pre-$tag");
-    for my $bill (@$ods) {
-        if( $U->is_true($bill->voided) ) {
-                $logger->info("$tag item returned - restoring overdue ".$bill->id);
-                $bill->voided('f');
-                $bill->clear_void_time;
-                $bill->voider($self->editor->requestor->id);
-                my $note = ($bill->note) ? $bill->note . "\n" : '';
-                $bill->note("${note}System: $tag RETURNED - OVERDUES REINSTATED");
-
-                $self->bail_on_events($self->editor->event)
-                        unless $self->editor->update_money_billing($bill);
-        }
+    # Because actual users get up to all kinds of unexpectedness, we
+    # only recreate up to $circ->max_fine in bills.  I know you think
+    # it wouldn't happen that bills could get created, voided, and
+    # recreated more than once, but I guaran-damn-tee you that it will
+    # happen.
+    if ($ods && @$ods) {
+        my $void_amount = 0;
+        my $void_max = $self->circ->max_fine();
+        my @billings = map {$_->id()} @$ods;
+        my $voids = $self->editor->search_money_adjustment_payment(
+            {
+                billing => \@billings
+            }
+        );
+        map {$void_amount += $_->amount()} @$voids;
+        $CC->create_bill(
+            $self->editor,
+            ($void_amount < $void_max ? $void_amount : $void_max),
+            $ods->[0]->btype(),
+            $ods->[0]->billing_type(),
+            $self->circ->id(),
+            "System: $tag RETURNED - OVERDUES REINSTATED"
+        );
     }
 }