"find outstanding bills for circ" gets its own sub user/jeff/lost_avoid_void
authorJeff Godin <jgodin@tadl.org>
Thu, 8 Dec 2011 17:49:36 +0000 (12:49 -0500)
committerJeff Godin <jgodin@tadl.org>
Fri, 9 Dec 2011 20:55:08 +0000 (15:55 -0500)
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 441aac6..0a28dbe 100644 (file)
@@ -30,44 +30,8 @@ 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
 
@@ -302,4 +266,56 @@ sub extend_grace_period {
     return $grace_period;
 }
 
+# -----------------------------------------------------------------
+# 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;