From 6148a34e54d650bf73911d0b5f4575ec554300b9 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 3 Oct 2012 11:40:52 -0400 Subject: [PATCH] Remove piles of no-longer-used EDI code Signed-off-by: Bill Erickson --- .../perlmods/lib/OpenILS/Application/Acq/EDI.pm | 274 +-------------------- 1 file changed, 7 insertions(+), 267 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/EDI.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/EDI.pm index ada8f9af2f..3d8354af4e 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/EDI.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/EDI.pm @@ -16,8 +16,6 @@ use OpenILS::Utils::CStoreEditor q/new_editor/; use OpenILS::Utils::Fieldmapper; use OpenILS::Application::Acq::EDI::Translator; -use OpenILS::Utils::LooseEDI; -use Business::EDI; use OpenILS::Utils::EDIReader; use Data::Dumper; @@ -155,14 +153,15 @@ sub retrieve_core { return \@return; } -# my $in = OpenILS::Application::Acq::EDI->process_retrieval($file_content, $remote_filename, $server, $account_id, $editor); +# my $msg_ids = OpenILS::Application::Acq::EDI->process_retrieval( +# $file_content, $remote_filename, $server, $account_id, $editor); sub process_retrieval { - my ($class, $content, $filename, $server, $account_or_id, $e) = @_; + my ($class, $content, $filename, $server, $account_or_id) = @_; $content or return; - $e ||= new_editor; - my $account = __PACKAGE__->record_activity( $account_or_id, $e ); + my $e = new_editor; + my $account = __PACKAGE__->record_activity($account_or_id, $e); # a single EDI blob can contain multiple messages # create one edi_message per included message @@ -179,6 +178,8 @@ sub process_retrieval { $incoming->edi($content); $incoming->message_type($msg_hash->{message_type}); $incoming->jedi(OpenSRF::Utils::JSON->perl2JSON($msg_hash)); # jedi-2.0 + $incoming->status('translated'); + $incoming->translate_time('NOW'); if ($msg_hash->{purchase_order}) { $logger->info("EDI: processing message for PO " . $msg_hash->{purchase_order}); @@ -418,20 +419,6 @@ sub nice_string { # return substr($string,0,$head) . "... " . substr($string, -1*$tail); } -sub jedi2perl { - my ($class, $jedi) = @_; - $jedi or return; - my $msg = OpenSRF::Utils::JSON->JSON2perl( $jedi ); - open (FOO, ">>/tmp/JSON2perl_dump.txt"); - print FOO Dumper($msg), "\n\n"; - close FOO; - $logger->warn("Dumped JSON2perl to /tmp/JSON2perl_dump.txt"); - return $msg; -} - -our @datecodes = (35, 359, 17, 191, 69, 76, 75, 79, 85, 74, 84, 223); -our @noop_6063 = (21); - # parts of this process can fail without the entire # thing failing. If a catastrophic error occurs, # it will occur via die. @@ -768,252 +755,5 @@ sub create_acq_invoice_from_edi { return 1; } -# returns message object if processing should continue -# returns false/undef value if processing should abort - -sub message_object { - my $class = shift; - my $body = shift or return; - my $key = shift if @_; - my $keystring = $key || 'UNSPECIFIED'; - - my $msg = Business::EDI::Message->new($body); - unless ($msg) { - $logger->error("EDI interchange message: $keystring body failed Business::EDI constructor. Skipping it."); - return; - } - $key = $msg->code if ! $key; # Now we set the key for reference if it wasn't specified - my $val_0065 = $msg->xpath_value('UNH/S009/0065') || ''; - unless ($val_0065 eq $key) { - $logger->error("EDI $key UNH/S009/0065 ('$val_0065') conflicts w/ message type $key. Aborting"); - return; - } - my $val_0051 = $msg->xpath_value('UNH/S009/0051') || ''; - unless ($val_0051 eq 'UN') { - $logger->warn("EDI $key UNH/S009/0051 designates '$val_0051', not 'UN' as controlling agency. Attempting to process anyway"); - } - my $val_0054 = $msg->xpath_value('UNH/S009/0054') || ''; - if ($val_0054) { - $logger->info("EDI $key UNH/S009/0054 uses Spec revision version '$val_0054'"); - # Possible Spec Version limitation - # my $yy = $tag_0054 ? substr($val_0054,0,2) : ''; - # unless ($yy eq '00' or $yy > 94 ...) { - # $logger->warn("EDI $key UNH/S009/0051 Spec revision version '$val_0054' not supported"); - # } - } else { - $logger->warn("EDI $key UNH/S009/0054 does not reference a known Spec revision version"); - } - return $msg; -} - -=head2 ->eg_li($lineitem_object, [$remote, $server_log_string, $editor]) - -my $line_item = OpenILS::Application::Acq::EDI->eg_li($edi_line, $remote, "test_server_01", $e); - - $remote is a acq.edi_account Fieldmapper object. - $server_log_string is an arbitrary string use to identify the remote host in potential log messages. - -Updates: - acq.lineitem.estimated_unit_price, - acq.lineitem.state (dependent on mapping codes), - acq.lineitem.expected_recv_time, - acq.lineitem.edit_time (consequently) - -=cut - -sub eg_li { - my ($class, $line, $server, $server_log_string, $e) = @_; - $line or return; - $e ||= new_editor(); - - my $id; - # my $rff = $line->part('line_reference/RFF') or $logger->warn("EDI ORDRSP line_detail/RFF missing!"); - my $val_1153 = $line->xpath_value('line_reference/RFF/1153') || ''; - my $val_1154 = $line->xpath_value('line_reference/RFF/1154') || ''; - my $val_1082 = $line->xpath_value('LIN/1082') || ''; - - my @po_nums; - - $val_1154 =~ s#^(.*)\/##; # Many sources send the ID as 'order_ID/LI_ID' - $1 and push @po_nums, $1; - $val_1082 =~ s#^(.*)\/##; # Many sources send the ID as 'order_ID/LI_ID' - $1 and push @po_nums, $1; - - # TODO: possible check of po_nums - # now do a lot of checking - - if ($val_1153 eq 'LI') { - $id = $val_1154 or $logger->warn("EDI ORDRSP RFF/1154 reference to LI empty. Attempting failover to LIN/1082"); - } else { - $logger->warn("EDI ORDRSP RFF/1153 unexpected value ('$val_1153', not 'LI'). Attempting failover to LIN/1082"); - } - - # FIXME - the line item ID in LIN/1082 ought to match RFF/1154, but - # not all materials vendors obey this. Commenting out check for now - # as being too strict. - #if ($id and $val_1082 and $val_1082 ne $id) { - # $logger->warn("EDI ORDRSP LIN/1082 Line Item ID mismatch ($id vs. $val_1082): cannot target update"); - # return; - #} - - $id ||= $val_1082 || ''; - if ($id eq '') { - $logger->warn('Cannot identify line item from EDI message'); - return; - } - - $logger->info("EDI retrieve/update lineitem $id"); - - my $li = OpenILS::Application::Acq::Lineitem::retrieve_lineitem_impl($e, $id, { - flesh_li_details => 1, - }, 1); # Could send more {options}. The 1 is for no_auth. - - if (! $li or ref($li) ne 'Fieldmapper::acq::lineitem') { - $logger->error("EDI failed to retrieve lineitem by id '$id' for server $server_log_string"); - return; - } - unless ((! $server) or (! $server->provider)) { # but here we want $server to be acq.edi_account instead of RemoteAccount - if ($server->provider != $li->provider) { - # links go both ways: acq.provider.edi_default and acq.edi_account.provider - $logger->info("EDI acct provider (" . $server->provider. ") doesn't match lineitem provider(" - . $li->provider . "). Checking acq.provider.edi_default..."); - my $provider = $e->retrieve_acq_provider($li->provider); - if ($provider->edi_default != $server->id) { - $logger->error(sprintf "EDI provider/acct %s/%s (%s) is blocked from updating lineitem $id belonging to provider/edi_default %s/%s", - $server->provider, $server->id, $server->label, $li->provider, $provider->edi_default); - return; - } - } - } - - my @lin_1229 = $line->xpath('LIN/1229') or $logger->warn("EDI LIN/1229 Action Code missing!"); - my $key = $lin_1229[0] or return; - - my $eg_reason = $e->retrieve_acq_cancel_reason(1000 + $key->value); # DB populated w/ spec keys in 1000's - $eg_reason or $logger->warn(sprintf "EDI LIN/1229 Action Code '%s' (%s) not recognized in acq.cancel_reason", $key->value, $key->label); - $eg_reason or return; - - $li->cancel_reason($eg_reason->id); - unless ($eg_reason->keep_debits) { - $logger->warn("EDI LIN/1229 Action Code '%s' (%s) has keep_debits=0", $key->value, $key->label); - } - - my @prices = $line->xpath_value("line_price/PRI/5118"); - $li->estimated_unit_price($prices[0]) if @prices; - - return $li; -} - -# caching not needed for now (edi_fetcher is asynchronous) -# sub get_reason { -# my ($class, $key, $e) = @_; -# $reasons->{$key} and return $reasons->{$key}; -# $e ||= new_editor(); -# $reasons->{$key} = $e->retrieve_acq_cancel_reason($key); -# return $reasons->{$key}; -# } - 1; -__END__ - -Example JSON data. - -Note the pseudo-hash 2-element arrays. - -[ - 'SG26', - [ - [ - 'LIN', - { - '1229' => '5', - '1082' => 1, - 'C212' => { - '7140' => '9780446360272', - '7143' => 'EN' - } - } - ], - [ - 'IMD', - { - '7081' => 'BST', - '7077' => 'F', - 'C273' => { - '7008' => [ - 'NOT APPLIC WEBSTERS NEW WORLD THESA' - ] - } - } - ], - [ - 'QTY', - { - 'C186' => { - '6063' => '21', - '6060' => 10 - } - } - ], - [ - 'QTY', - { - 'C186' => { - '6063' => '12', - '6060' => 10 - } - } - ], - [ - 'QTY', - { - 'C186' => { - '6063' => '85', - '6060' => 0 - } - } - ], - [ - 'FTX', - { - '4451' => 'LIN', - 'C107' => { - '4441' => '01', - '3055' => '28', - '1131' => '8B' - } - } - ], - [ - 'SG30', - [ - [ - 'PRI', - { - 'C509' => { - '5118' => '4.5', - '5387' => 'SRP', - '5125' => 'AAB' - } - } - ] - ] - ], - [ - 'SG31', - [ - [ - 'RFF', - { - 'C506' => { - '1154' => '8/1', - '1153' => 'LI' - } - } - ] - ] - ] - ] -], - -- 2.11.0