"find outstanding bills for circ" gets its own sub
authorJeff Godin <jgodin@tadl.org>
Thu, 8 Dec 2011 17:49:36 +0000 (12:49 -0500)
committerJeff Godin <jgodin@tadl.org>
Tue, 29 May 2012 15:23:02 +0000 (11:23 -0400)
outstanding_bills_for_circ accepts an editor and a circ object,
and will return a reference to an array of outstanding billing
objects. this has been broken out of the forgive_overdues sub,
as it will be useful elsewhere.

Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/CircCommon.pm

index 64a2305..579b43d 100644 (file)
@@ -30,45 +30,9 @@ sub forgive_overdues {
 
     $logger->info("attempting to forgive overdues on circ " . $circ->id . " with note " . $note);
 
-    # find all unvoided bills in order
-    my $bill_search = [
-        { xact => $circ->id, voided=>'f' },
-        { order_by => { mb => { billing_ts => { direction => 'asc' } } } },
-    ];
-
-    # find all unvoided payments in order
-    my $payment_search = [
-        { xact => $circ->id, voided=>'f' },
-        { order_by => { mp => { payment_ts => { direction => 'asc' } } } },
-    ];
-
-    my $bills = $e->search_money_billing($bill_search);
-
-    my $payments = $e->search_money_payment($payment_search);
-
-    # "Pay" the bills, removing fully paid bills and
-    # adjusting the amount for partially paid bills
-    map {
-            my $payment = $_;
-            my $paybal = $payment->amount;
-
-            while ($paybal > 0) {
-                    # get next billing
-                    my $bill = shift @{$bills};
-                    my $newbal = (($paybal*100) - ($bill->amount*100))/100;
-                    if ($newbal < 0) {
-                            $newbal = 0;
-                            my $new_bill_amount = (($bill->amount*100) - ($paybal*100))/100;
-                            $bill->amount($new_bill_amount);
-                            unshift(@{$bills}, $bill); # put the partially-paid bill back on top of the stack
-                    }
-
-                    $paybal = $newbal;
-
-            }
-
-    } @$payments;
-
+    # get outstanding bills for the circ in question
+    my $bills = outstanding_bills_for_circ($e, $circ);
     # Sum any outstanding overdue billings, stopping at the first non-overdue billing
 
     my $outstanding_overdues = 0;
@@ -199,4 +163,56 @@ sub create_bill {
        return undef;
 }
 
+# -----------------------------------------------------------------
+# Given an editor and a circ, return a reference to an array of
+# billing objects which are outstanding (unpaid, not voided).
+# If a bill is partially paid, change the amount of the bill
+# to reflect the unpaid amount, not the original amount.
+# -----------------------------------------------------------------
+sub outstanding_bills_for_circ {
+    my ($class, $e, $circ) = @_;
+
+    # find all unvoided bills in order
+    my $bill_search = [
+        { xact => $circ->id, voided=>'f' },
+        { order_by => { mb => { billing_ts => { direction => 'asc' } } } },
+    ];
+
+    # find all unvoided payments in order
+    my $payment_search = [
+        { xact => $circ->id, voided=>'f' },
+        { order_by => { mp => { payment_ts => { direction => 'asc' } } } },
+    ];
+
+    my $bills = $e->search_money_billing($bill_search);
+
+    my $payments = $e->search_money_payment($payment_search);
+
+    # "Pay" the bills, removing fully paid bills and
+    # adjusting the amount for partially paid bills
+    map {
+            my $payment = $_;
+            my $paybal = $payment->amount;
+
+            while ($paybal > 0) {
+                    # get next billing
+                    my $bill = shift @{$bills};
+                    my $newbal = (($paybal*100) - ($bill->amount*100))/100;
+                    if ($newbal < 0) {
+                            $newbal = 0;
+                            my $new_bill_amount = (($bill->amount*100) - ($paybal*100))/100;
+                            $bill->amount($new_bill_amount);
+                            unshift(@{$bills}, $bill); # put the partially-paid bill back on top of the stack
+                    }
+
+                    $paybal = $newbal;
+
+            }
+
+    } @$payments;
+
+    return $bills;
+
+}
+
 1;