From acf1afb91e1ad8dc588be2f1f140a099e5213847 Mon Sep 17 00:00:00 2001 From: Dan Wells Date: Mon, 30 Apr 2018 11:05:11 -0400 Subject: [PATCH] LP#1749795 Close circ on adjustment when rebilled When doing a re-bill, we were aborting too early when it rebilled to exactly zero. Move the 'zero' check to the top of the loop, and thereby make sure we check if the xact can be closed if we do any adjustment, up or down. To test: - Run new billing test from previous commit, see it fail - Apply patch - Run tests again; all should pass Signed-off-by: Dan Wells Signed-off-by: Ben Shum --- .../perlmods/lib/OpenILS/Application/Circ/Money.pm | 33 ++++++++++++---------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Money.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Money.pm index 009da4001e..4fa1d1f458 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Money.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Money.pm @@ -1016,6 +1016,11 @@ sub adjust_bills_to_zero_manual { {flesh => 1, flesh_fields => {mbts => ['usr']}} ]) or return $e->die_event; + if ($xact->balance_owed == 0) { + # zero already, all done + next; + } + return $e->die_event unless $e->allowed('ADJUST_BILLS', $xact->usr->home_ou); @@ -1030,22 +1035,20 @@ sub adjust_bills_to_zero_manual { ]) or return $e->die_event; } - my $billings = $e->search_money_billing([ - { - xact => $xact_id, - }, - { - order_by => {mb => 'amount desc'}, - flesh => 1, - flesh_fields => {mb => ['adjustments']}, - } - ]); - - if ($xact->balance_owed == 0) { - # if was zero, or we rebilled it to zero - next; - } else { + if ($xact->balance_owed > 0) { # it's positive and needs to be adjusted + # (it either started positive, or we rebilled it positive) + my $billings = $e->search_money_billing([ + { + xact => $xact_id, + }, + { + order_by => {mb => 'amount desc'}, + flesh => 1, + flesh_fields => {mb => ['adjustments']}, + } + ]); + my @billings_to_zero = grep { !$U->is_true($_->voided) or !_is_fully_adjusted($_) } @$billings; $CC->adjust_bills_to_zero($e, \@billings_to_zero, "System: MANUAL ADJUSTMENT"); } -- 2.11.0