LP#1749795 Close circ on adjustment when rebilled
authorDan Wells <dbw2@calvin.edu>
Mon, 30 Apr 2018 15:05:11 +0000 (11:05 -0400)
committerChris Sharp <csharp@georgialibraries.org>
Wed, 11 Jul 2018 21:09:13 +0000 (17:09 -0400)
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 <dbw2@calvin.edu>
Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Money.pm

index 009da40..4fa1d1f 100644 (file)
@@ -1016,6 +1016,11 @@ sub adjust_bills_to_zero_manual {
                 {flesh => 1, flesh_fields => {mbts => ['usr']}}
             ]) or return $e->die_event;
 
                 {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);
 
         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;
         }
 
                 ]) 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'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");
         }
             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");
         }