# ------------------------------------------------------------------
# restore those overdue charges voided when item was set to lost
# ------------------------------------------------------------------
-
my $ods = $self->editor->search_money_billing(
{
xact => $self->circ->id,
);
$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"
+ );
}
}