From: Lebbeous Fogle-Weekley Date: Wed, 20 Feb 2013 14:41:03 +0000 (-0500) Subject: Move reusable bits of build_invoice_api() into new build_invoice_impl() X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=eb314122ce02c76134ca0a8ca646d9b68610f8d0;p=working%2FEvergreen.git Move reusable bits of build_invoice_api() into new build_invoice_impl() This is because we're about to send EDI invoice creation through that code instead of the separate stuff we had been doing. Signed-off-by: Lebbeous Fogle-Weekley --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Invoice.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Invoice.pm index 7563e88434..708c7dfd37 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Invoice.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Invoice.pm @@ -37,55 +37,32 @@ __PACKAGE__->register_method( } ); -sub build_invoice_api { - my($self, $conn, $auth, $invoice, $entries, $items) = @_; - - my $e = new_editor(xact => 1, authtoken=>$auth); - return $e->die_event unless $e->checkauth; - my $evt; - if(ref $invoice) { - if($invoice->isnew) { - $invoice->receiver($e->requestor->ws_ou) unless $invoice->receiver; - $invoice->recv_method('PPR') unless $invoice->recv_method; - $invoice->recv_date('now') unless $invoice->recv_date; - $e->create_acq_invoice($invoice) or return $e->die_event; - } elsif($invoice->isdeleted) { - i$e->delete_acq_invoice($invoice) or return $e->die_event; - } else { - $e->update_acq_invoice($invoice) or return $e->die_event; - } - } else { - # caller only provided the ID - $invoice = $e->retrieve_acq_invoice($invoice) or return $e->die_event; - } +sub build_invoice_impl { + my ($e, $invoice, $entries, $items, $do_commit) = @_; - return $e->die_event unless $e->allowed('CREATE_INVOICE', $invoice->receiver); + my $evt; - if($entries) { + if ($entries) { for my $entry (@$entries) { $entry->invoice($invoice->id); - if($entry->isnew) { - + if ($entry->isnew) { $e->create_acq_invoice_entry($entry) or return $e->die_event; return $evt if $evt = update_entry_debits($e, $entry); - } elsif($entry->isdeleted) { - - return $evt if $evt = rollback_entry_debits($e, $entry); + } elsif ($entry->isdeleted) { + return $evt if $evt = rollback_entry_debits($e, $entry); $e->delete_acq_invoice_entry($entry) or return $e->die_event; + } elsif ($entry->ischanged) { + my $orig_entry = $e->retrieve_acq_invoice_entry($entry->id) or + return $e->die_event; - } elsif($entry->ischanged) { - - my $orig_entry = $e->retrieve_acq_invoice_entry($entry->id) or return $e->die_event; - - if($orig_entry->amount_paid != $entry->amount_paid or - $entry->phys_item_count != $orig_entry->phys_item_count) { + if ($orig_entry->amount_paid != $entry->amount_paid or + $entry->phys_item_count != $orig_entry->phys_item_count) { - return $evt if $evt = rollback_entry_debits($e, $orig_entry); + return $evt if $evt = rollback_entry_debits($e,$orig_entry); return $evt if $evt = update_entry_debits($e, $entry); - } $e->update_acq_invoice_entry($entry) or return $e->die_event; @@ -93,12 +70,11 @@ sub build_invoice_api { } } - if($items) { + if ($items) { for my $item (@$items) { $item->invoice($invoice->id); - if($item->isnew) { - + if ($item->isnew) { $e->create_acq_invoice_item($item) or return $e->die_event; # future: cache item types @@ -108,45 +84,49 @@ sub build_invoice_api { # prorated items are handled separately unless($U->is_true($item_type->prorate)) { my $debit; - if($item->po_item) { - my $po_item = $e->retrieve_acq_po_item($item->po_item) or return $e->die_event; - $debit = $e->retrieve_acq_fund_debit($po_item->fund_debit) or return $e->die_event; + if ($item->po_item) { + my $po_item = $e->retrieve_acq_po_item($item->po_item) + or return $e->die_event; + $debit = $e->retrieve_acq_fund_debit($po_item->fund_debit) + or return $e->die_event; } else { $debit = Fieldmapper::acq::fund_debit->new; $debit->isnew(1); } _prepare_fund_debit_for_inv_item($debit, $item, $e); - if($debit->isnew) { - $e->create_acq_fund_debit($debit) or return $e->die_event; + if ($debit->isnew) { + $e->create_acq_fund_debit($debit) + or return $e->die_event; } else { - $e->update_acq_fund_debit($debit) or return $e->die_event; + $e->update_acq_fund_debit($debit) + or return $e->die_event; } $item->fund_debit($debit->id); $e->update_acq_invoice_item($item) or return $e->die_event; } - - } elsif($item->isdeleted) { - + } elsif ($item->isdeleted) { $e->delete_acq_invoice_item($item) or return $e->die_event; - if($item->po_item and $e->retrieve_acq_po_item($item->po_item)->fund_debit == $item->fund_debit) { - # the debit is attached to the po_item. instead of deleting it, roll it back - # to being an encumbrance. Note: a prorated invoice_item that points to a po_item - # could point to a different fund_debit. We can't go back in time to collect all the - # prorated invoice_items (nor is the caller asking us too), so when that happens, - # just delete the extraneous debit (in the else block). + if ($item->po_item and + $e->retrieve_acq_po_item($item->po_item)->fund_debit == $item->fund_debit) { + # the debit is attached to the po_item. instead of + # deleting it, roll it back to being an encumbrance. + # Note: a prorated invoice_item that points to a + # po_item could point to a different fund_debit. We + # can't go back in time to collect all the prorated + # invoice_items (nor is the caller asking us too), + # so when that happens, just delete the extraneous + # debit (in the else block). my $debit = $e->retrieve_acq_fund_debit($item->fund_debit); $debit->encumbrance('t'); $e->update_acq_fund_debit($debit) or return $e->die_event; - } elsif($item->fund_debit) { + } elsif ($item->fund_debit) { $e->delete_acq_fund_debit($e->retrieve_acq_fund_debit($item->fund_debit)) or return $e->die_event; } - - - } elsif($item->ischanged) { + } elsif ($item->ischanged) { my $debit; if (!$item->fund_debit) { @@ -177,11 +157,41 @@ sub build_invoice_api { } $invoice = fetch_invoice_impl($e, $invoice->id); - $e->commit; + if ($do_commit) { + $e->commit or return $e->die_event; + } return $invoice; } +sub build_invoice_api { + my($self, $conn, $auth, $invoice, $entries, $items) = @_; + + my $e = new_editor(xact => 1, authtoken=>$auth); + return $e->die_event unless $e->checkauth; + + if(ref $invoice) { + if($invoice->isnew) { + $invoice->receiver($e->requestor->ws_ou) unless $invoice->receiver; + $invoice->recv_method('PPR') unless $invoice->recv_method; + $invoice->recv_date('now') unless $invoice->recv_date; + $e->create_acq_invoice($invoice) or return $e->die_event; + } elsif($invoice->isdeleted) { + i$e->delete_acq_invoice($invoice) or return $e->die_event; + } else { + $e->update_acq_invoice($invoice) or return $e->die_event; + } + } else { + # caller only provided the ID + $invoice = $e->retrieve_acq_invoice($invoice) or return $e->die_event; + } + + return $e->die_event unless + $e->allowed('CREATE_INVOICE', $invoice->receiver); + + return build_invoice_impl($e, $invoice, $entries, $items, 1); +} + sub rollback_entry_debits { my($e, $entry) = @_;