From a3adec2d9fecd6e63d5feb1532670fc5435bb0db 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: Jeff Davis Signed-off-by: Chris Sharp --- .../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