Backport r19134 from trunk
authorsenator <senator@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 7 Jan 2011 20:06:18 +0000 (20:06 +0000)
committersenator <senator@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 7 Jan 2011 20:06:18 +0000 (20:06 +0000)
Acq: fix prorating bug

When prorating, the system decides what funds to target by looking at what
funds have already been spent against.  Previously, the system only looked at
acqie objects, but an invoice can also be composed of acqii objects.

git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_2_0@19135 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Acq/Invoice.pm

index 25e5e8a..d0c20d2 100644 (file)
@@ -392,9 +392,16 @@ sub prorate_invoice {
     my @lid_debits;
     push(@lid_debits, @{find_entry_debits($e, $_, 'f', entry_amount_per_item($_))}) for @{$invoice->entries};
 
+    my $inv_items = $e->search_acq_invoice_item([
+        {"invoice" => $invoice_id, "fund_debit" => {"!=" => undef}},
+        {"flesh" => 1, "flesh_fields" => {"acqii" => ["fund_debit"]}}
+    ]) or return $e->die_event;
+
+    my @item_debits = map { $_->fund_debit } @$inv_items;
+
     my %fund_totals;
     my $total_entry_paid = 0;
-    for my $debit (@lid_debits) {
+    for my $debit (@lid_debits, @item_debits) {
         $fund_totals{$debit->fund} = 0 unless $fund_totals{$debit->fund};
         $fund_totals{$debit->fund} += $debit->amount;
         $total_entry_paid += $debit->amount;