Better logic for checkin_handle_lost_or_lo_now_found_restore_od.
authorJason Stephenson <jason@sigio.com>
Mon, 7 Oct 2013 07:31:02 +0000 (03:31 -0400)
committerJason Stephenson <jason@sigio.com>
Thu, 7 Nov 2013 22:02:29 +0000 (17:02 -0500)
Signed-off-by: Jason Stephenson <jason@sigio.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm

index 3cc5667..3c10e91 100644 (file)
@@ -3990,7 +3990,6 @@ sub checkin_handle_lost_or_lo_now_found_restore_od {
     # ------------------------------------------------------------------
     # restore those overdue charges voided when item was set to lost
     # ------------------------------------------------------------------
-
     my $ods = $self->editor->search_money_billing(
         {
             xact => $self->circ->id,
@@ -3999,9 +3998,29 @@ sub checkin_handle_lost_or_lo_now_found_restore_od {
     );
 
     $logger->debug("returning ".scalar(@$ods)." overdue charges pre-$tag");
-    for my $bill (@$ods) {
-        my $result = $CC->unvoid_bill($self->editor->authtoken, $bill, "System: $tag RETURNED - OVERDUES REINSTATED" );
-        $self->bail_on_events($result) if ($result);
+    # 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_billing(
+            {
+                billing => \@bills
+            }
+        );
+        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"
+        );
     }
 }