Acq: Improvements to account-matching incoming EDI messages collab/senator/acq_edi_account_mismatch_same_ou
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Mon, 14 Oct 2013 21:28:07 +0000 (17:28 -0400)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Mon, 28 Oct 2013 16:16:58 +0000 (12:16 -0400)
commit2ed77ef3a39143abccb7dc4db5d1ee2f4d3d661a
treebe8000c51c5695d04b5581c7224edc7561f6e44d
parent35050456f325bed02b02f15707460865607f8034
Acq: Improvements to account-matching incoming EDI messages

The way the EDI fetcher works gives us a problem. That process iterates
over EDI accounts for which it has FTP host and credential information,
downloads documents from each of those sites, and files the messages
within those documents under the EDI account from which the login
credentials came. The problem is that in practice the exact same host
and login information is used by multiple accounts under the same
vendor, and files relating to these sub-accounts are commingled, so that
you can't make the decision about which messages should be filed under
which accounts based on the name of the document or its location. You
have to make that decision later, based on its contents.

We are already incompletely doing this, distinguishing between
sub-accounts under which we could file our messages when the vendor
specifies the buyer's SAN next to the specific sub-account number *and*
those sub-accounts belong to different Evergreen org units. We still
need ways to distinguish in other cases.

This will do what is natural for at least one vendor, and match the
message content against the vendacct field of the acq.edi_account table.

*Also,*

We were re-retrieving the working acq.edi_message row from the database
before writing it, throwing away possible changes to the object in hand
made by O::A::Acq::EDI::process_parsed_msg(). We should only do that in
the case where that function has raised an exception.

We were doing the same kind of thing in another place actually inside
process_parsed_msg() where we set the edi_message's purchase_order field
based on the first lineitem encountered if the message itself didn't
specify a valid PO identifier.

This supports making account-correction work for ORDRSP messages in
addition to INVOIC messages.

We also propagate that same correction to the provider and shipper
fields of any invoices that get created from said edi_message.

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/EDI.pm