# ----------------------------------------------------------------------------------
# Assign a default locale to the accessible OPAC
# ----------------------------------------------------------------------------------
-RedirectMatch 301 ^/opac/extras/slimpac/start.html$ /opac/en-US/extras/slimpac/start.html
+RedirectMatch 301 ^/opac/extras/slimpac/start.html$ /opac/en-US/extras/slimpac/start.html
RedirectMatch 301 ^/opac/extras/slimpac/advanced.html$ /opac/en-US/extras/slimpac/advanced.html
# ----------------------------------------------------------------------------------
</LocationMatch>
# ----------------------------------------------------------------------------------
+# EDI Message viewer
+# ----------------------------------------------------------------------------------
+<Location /edi>
+ SetHandler perl-script
+ PerlHandler OpenILS::WWW::EDI
+ Options +ExecCGI
+ PerlSendHeader On
+ allow from all
+</Location>
+
+# ----------------------------------------------------------------------------------
# XML-RPC gateway
# ----------------------------------------------------------------------------------
<Location /xml-rpc>
There is no such thing (yet?) as "push" from a vendor of their EDI responses. Basically
they just put responses in an FTP directory somewhere that you are expected to check. It
would be cool if there were a better way to do that like consuming some RSS feed or
-remote API callbacks.
+remote API callbacks. Similarly, nobody seems willing to utilize interactive EDI.
Evergreen will only support one delivery address per PO. That limitation is based
on the mapping to the delivery address via the ordering_agency org_unit. If items
on SAN, add a new one on SAN + profile_code. Profile code then goes in the template.
The template logic could get rather complex to support all the optional data elements.
-mbklein says:
-'order' mapper won't work for EDIFACT versions later than D.96A, because of a change
-to the structure of the BGM segment. But as long as all the supported vendors will
-accept a D.96A ORDERS (which I think they do), that's not a problem.
-
SEE ALSO:
http://github.com/mbklein/openils-mapper
use Getopt::Long;
use RPC::XML::Client;
+use JSON::XS;
use Data::Dumper;
# DEFAULTS
+$Data::Dumper::Indent = 1;
my $host = 'http://localhost';
my $verbose = 0;
$host .= '/EDI';
sub get_in {
- print "Getting " . (shift) . " from input\n";
+ print STDERR "Getting " . (shift) . " from input\n";
my $json = join("", <STDIN>);
$json or return;
print $json, "\n";
return substr($string,0,$head) . " ...\n... " . substr($string, -1*$tail);
}
+sub JSONObject2Perl {
+ my $obj = shift;
+ if ( ref $obj eq 'HASH' ) { # is a hash w/o class marker; simply revivify innards
+ for my $k (keys %$obj) {
+ $obj->{$k} = JSONObject2Perl($obj->{$k}) unless ref $obj->{$k} eq 'JSON::XS::Boolean';
+ }
+ } elsif ( ref $obj eq 'ARRAY' ) {
+ for my $i (0..scalar(@$obj) - 1) {
+ $obj->[$i] = JSONObject2Perl($obj->[$i]) unless ref $obj->[$i] eq 'JSON::XS::Boolean';
+ }
+ }
+ # ELSE: return vivified non-class hashes, all arrays, and anything that isn't a hash or array ref
+ return $obj;
+}
+
# MAIN
print "Trying host: $host\n";
+my $parser;
+
my $client = new RPC::XML::Client($host);
$client->request->header('Content-Type' => 'text/xml;charset=utf-8');
-print "User-agent: ", Dumper($client->useragent);
-print "Request: ", Dumper($client->request);
-print "Headers: \n";
-foreach ($client->request->header_field_names) {
- print "\t$_ =>", $client->request->header($_), "\n";
+
+if ($verbose) {
+ print "User-agent: ", Dumper($client->useragent);
+ print "Request: ", Dumper($client->request);
+ print "Headers: \n";
+ foreach ($client->request->header_field_names) {
+ print "\t$_ =>", $client->request->header($_), "\n";
+ }
}
my @commands = @ARGV ? @ARGV : 'system.listMethods';
-if ($commands[0] eq 'json2edi' or $commands[0] eq 'edi2json') {
+my $command = lc $commands[0];
+if ($command eq 'json2edi' or $command eq 'edi2json' or $command eq 'edi2perl') {
shift;
- @commands > 1 and print "Ignoring commands after $commands[0]\n";
+ @commands > 1 and print STDERR "Ignoring commands after $command\n";
my $string;
- my $type = $commands[0] eq 'json2edi' ? 'JSON' : 'EDI';
+ my $type = $command eq 'json2edi' ? 'JSON' : 'EDI';
while ($string = get_in($type)) { # assignment
- if ($commands[0] ne 'json2edi') {
- $string =~ s/ORDRSP:0(:...:UN::)/ORDRSP:D$1/ and print "Corrected broken data 'ORDRSP:0' ==> 'ORDRSP:D'\n";
+ my $resp;
+ if ($command eq 'json2edi') {
+ $resp = $client->send_request('json2edi', $string);
+ print "# $command Response: \n", Dumper($resp);
+ } else {
+ $string =~ s/ORDRSP:0(:...:UN::)/ORDRSP:D$1/ and print STDERR "Corrected broken data 'ORDRSP:0' ==> 'ORDRSP:D'\n";
+ $resp = $client->send_request('edi2json', $string);
+ }
+ unless ($resp) {
+ warn "Response does not have a payload value!";
+ next;
}
- my $resp = $commands[0] eq 'json2edi' ?
- $client->send_request('json2edi', $string) :
- $client->send_request('edi2json', $string) ;
- print "Response: ", Dumper($resp);
- $resp or next;
if ($resp->is_fault) {
print "\n\nERROR code ", $resp->code, " received:\n", nice_string($resp->string) . "\n...\n";
next;
}
+ if ($command ne 'json2edi') { # like the else of the first conditional
+ $parser ||= JSON::XS->new()->pretty(1)->ascii(1)->allow_nonref(1)->space_before(0); # get it once
+ $verbose and print Dumper($resp);
+ my $parsed = $parser->decode($resp->value) or warn "Failed to decode response payload value";
+ my $perl = JSONObject2Perl($parsed) or warn "Failed to decode and create perl object from JSON";
+ if ($perl) {
+ print STDERR "\n########## We were able to decode and perl-ify the JSON\n";
+ } else {
+ print STDERR "\n########## ERROR: Failed to decode and perl-ify the JSON\n";
+ }
+ print "# $command Response: \n", $command eq 'edi2perl' ? Dumper($perl) : $parser->encode($parsed);
+ }
}
exit;
}
-print "Sending request: \n ", join("\n ", @commands), "\n\n";
+print STDERR "Sending request: \n ", join("\n ", @commands), "\n\n";
my $resp = $client->send_request(@commands);
print Dumper($resp);
exit;
if (ref $resp) {
- print "Return is " . ref($resp), "\n";
+ print STDERR "Return is " . ref($resp), "\n";
# print "Code: ", ($resp->{code}->as_string || 'UNKNOWN'), "\n";
foreach (@$resp) {
print Dumper ($_), "\n";
print "\n";
}
} else {
- print "ERROR: unrecognized response:\n\n", Dumper($resp), "\n";
+ print STDERR "ERROR: unrecognized response:\n\n", Dumper($resp), "\n";
}
$verbose and print Dumper($resp);
$verbose and print "\nKEYS (level 1):\n",
map {sprintf "%12s: %s\n", $_, scalar $resp->{$_}->value} sort keys %$resp;
# print "spooled_filename: ", $resp->{spooled_filename}->value, "\n";
+
use OpenILS::Application::Acq::EDI::Translator;
use Business::EDI;
-use Business::EDI::Segment::BGM;
use Data::Dumper;
our $verbose = 0;
return $self;
}
+# our $reasons = {}; # cache for acq.cancel_reason rows ?
+
our $translator;
sub translator {
);
sub retrieve_core {
- my ($self, $e, $set, $max) = @_; # $e is a working editor
+ my ($self, $set, $max, $e, $test) = @_; # $e is a working editor
$e ||= new_editor();
$set ||= __PACKAGE__->retrieve_vendors($e);
my $server;
$logger->info("EDI check for vendor " . ++$vcount . " of " . scalar(@$set) . ": " . $account->host);
unless ($server = __PACKAGE__->remote_account($account)) { # assignment, not comparison
- $logger->err(sprintf "Failed remote account connection for %s (%s)", $account->host, $account->id);
+ $logger->err(sprintf "Failed remote account mapping for %s (%s)", $account->host, $account->id);
next;
};
- my @files = $server->ls({remote_file => ($account->in_dir || '.')});
- my @ok_files = grep {$_ !~ /\/\.?\.$/ } @files;
- $logger->info(sprintf "%s of %s files at %s/%s", scalar(@ok_files), scalar(@files), $account->host, ($account->in_dir || ''));
- foreach (@ok_files) {
+# my $rf_starter = './'; # default to current dir
+ if ($account->in_dir) {
+ if ($account->in_dir =~ /\*+.*\//) {
+ $logger->err("EDI in_dir has a slash after an asterisk in value: '" . $account->in_dir . "'. Skipping account with indeterminate target dir!");
+ next;
+ }
+# $rf_starter = $account->in_dir;
+# $rf_starter =~ s/((\/)?[^\/]*)\*+[^\/]*$//; # kill up to the first (possible) slash before the asterisk: keep the preceeding static dir
+# $rf_starter .= '/' if $rf_starter or $2; # recap the dir, or replace leading "/" if there was one (but don't add if empty)
+ }
+ my @files = ($server->ls({remote_file => ($account->in_dir || './')}));
+ my @ok_files = grep {$_ !~ /\/\.?\.$/ and $_ ne '0'} @files;
+ $logger->info(sprintf "%s of %s files at %s/%s", scalar(@ok_files), scalar(@files), $account->host, $account->in_dir);
+ # $server->remote_path(undef);
+ foreach my $remote_file (@ok_files) {
+ # my $remote_file = $rf_starter . $_;
+ my $description = sprintf "%s/%s", $account->host, $remote_file;
+
+ # deduplicate vs. acct/filenames already in DB
+ my $hits = $e->search_acq_edi_message([
+ {
+ account => $account->id,
+ remote_file => $remote_file,
+ status => {'in' => [qw/ processed /]}, # if it never got processed, go ahead and get the new one (try again)
+ # create_time => 'NOW() - 60 DAYS', # if we wanted to allow filenames to be reused after a certain time
+ # ideally we would also use the date from FTP, but that info isn't available via RemoteAccount
+ }
+ # { flesh => 1, flesh_fields => {...}, }
+ ]);
+ if (scalar(@$hits)) {
+ $logger->debug("EDI: $remote_file already retrieved. Skipping");
+ warn "EDI: $remote_file already retrieved. Skipping";
+ next;
+ }
+
++$count;
$max and $count > $max and last;
+ $logger->info(sprintf "%s of %s targets: %s", $count, scalar(@ok_files), $description);
+ print sprintf "%s of %s targets: %s\n", $count, scalar(@ok_files), $description;
+ if ($test) {
+ push @return, "test_$count";
+ next;
+ }
my $content;
my $io = IO::Scalar->new(\$content);
- unless ($server->get({remote_file => $_, local_file => $io})) {
- $logger->error("(S)FTP get($_) failed");
+ unless ( $server->get({remote_file => $remote_file, local_file => $io}) ) {
+ $logger->error("(S)FTP get($description) failed");
next;
}
- my $incoming = Fieldmapper::acq::edi_message->new;
- $incoming->remote_file($_);
- $incoming->edi($content);
- $incoming->account($account->id);
- __PACKAGE__->attempt_translation($incoming);
- $e->xact_begin;
- $e->create_acq_edi_message($incoming);
- $e->xact_commit;
- __PACKAGE__->record_activity($account, $e);
- __PACKAGE__->process_jedi($incoming, $server, $e);
+ my $incoming = __PACKAGE__->process_retrieval($content, $remote_file, $server, $account->id, $e);
# $server->delete(remote_file => $_); # delete remote copies of saved message
push @return, $incoming->id;
}
return \@return;
}
+# my $in = OpenILS::Application::Acq::EDI->process_retrieval($file_content, $remote_filename, $server, $account_id, $editor);
+
+sub process_retrieval {
+ my $incoming = Fieldmapper::acq::edi_message->new;
+ my ($class, $content, $remote, $server, $account_or_id, $e) = @_;
+ $content or return;
+ $e ||= new_editor;
+
+ my $account = __PACKAGE__->record_activity( $account_or_id, $e );
+
+ my $z; # must predeclare
+ $z = ( $content =~ s/('UNH\+\d+\+ORDRSP:)0(:96A:UN')/$1D$2/g )
+ and $logger->warn("Patching bogus spec reference ORDRSP:0:96A:UN => ORDRSP:D:96A:UN ($z times)"); # Hack/fix some faulty "0" in (B&T) data
+
+ $incoming->remote_file($remote);
+ $incoming->account($account->id);
+ $incoming->edi($content);
+ $incoming->message_type(($content =~ /'UNH\+\d+\+(\S{6}):/) ? $1 : 'ORDRSP'); # cheap sniffing, ORDRSP fallback
+ __PACKAGE__->attempt_translation($incoming);
+ $e->xact_begin;
+ $e->create_acq_edi_message($incoming);
+ $e->xact_commit;
+ # refresh: send process_jedi the updated row
+ my $res = __PACKAGE__->process_jedi($e->retrieve_acq_edi_message($incoming->id), $server, $account, $e);
+ my $outgoing = $e->retrieve_acq_edi_message($incoming->id); # refresh again!
+ $outgoing->status($res ? 'processed' : 'proc_error');
+ if ($res) {
+ $e->xact_begin;
+ $e->update_acq_edi_message($outgoing);
+ $e->xact_commit;
+ }
+ return $outgoing;
+}
+
# ->send_core
# $account is a Fieldmapper object for acq.edi_account row
# $messageset is an arrayref with acq.edi_message.id values
$e ||= new_editor();
my $criteria = {'+acqpro' => {active => 't'}};
- # $criteria->{vendor_id} = $vendor_id if $vendor_id;
+ $criteria->{'+acqpro'}->{id} = $vendor_id if $vendor_id;
return $e->search_acq_edi_account([
$criteria, {
'join' => 'acqpro',
($host =~ s/^(S?FTP)://i and $args{type} = uc($1)) or
($host =~ s/^(SSH|SCP)://i and $args{type} = 'SCP' ) ;
$host =~ s/:(\d+)$// and $args{port} = $1;
- ($args{remote_host} = $host) =~ s#/+##;
+ ($args{remote_host} = $host) =~ s#/+##;
$verbose and $logger->warn("field_map: " . Dumper(\%args));
return %args;
}
);
}
+# takes account ID or account Fieldmapper object
+
sub record_activity {
- my ($class, $account, $e) = @_;
- $account or return;
+ my ($class, $account_or_id, $e) = @_;
+ $account_or_id or return;
$e ||= new_editor();
+ my $account = ref($account_or_id) ? $account_or_id : $e->retrieve_acq_edi_account($account_or_id);
$logger->info("EDI record_activity calling update_acq_edi_account");
$account->last_activity('NOW') or return;
$e->xact_begin;
return $msg;
}
-# ->process_jedi($message, $server, $e)
+our @datecodes = (35, 359, 17, 191, 69, 76, 75, 79, 85, 74, 84, 223);
+our @noop_6063 = (21);
+
+# ->process_jedi($message, $server, $remote, $e)
+# $message is an edi_message object
+#
sub process_jedi {
- my $class = shift;
- my $message = shift or return;
- my $server = shift || {}; # context
- my $jedi = ref($message) ? $message->jedi : $message; # If we got an object, it's an edi_message. A string is the jedi content itself.
- unless ($jedi) {
- $logger->warn("EDI process_jedi missing required argument (edi_message object with jedi or jedi scalar)!");
+ my ($class, $message, $server, $remote, $e) = @_;
+ $message or return;
+ $server ||= {}; # context
+ $remote ||= {}; # context
+ $e ||= new_editor;
+ my $jedi;
+ unless (ref($message) and $jedi = $message->jedi) { # assignment, not comparison
+ $logger->warn("EDI process_jedi missing required argument (edi_message object with jedi)!");
return;
}
- my $e = @_ ? shift : new_editor();
- my $perl = __PACKAGE__->jedi2perl($jedi);
+ my $perl = __PACKAGE__->jedi2perl($jedi);
+ my $error = '';
if (ref($message) and not $perl) {
- $message->error(($message->error || '') . " JSON2perl (jedi2perl) FAILED to convert jedi");
+ $error = ($message->error || '') . " JSON2perl (jedi2perl) FAILED to convert jedi";
+ }
+ elsif (! $perl->{body}) {
+ $error = "EDI interchange body not found!";
+ }
+ elsif (! $perl->{body}->[0]) {
+ $error = "EDI interchange body not a populated arrayref!";
+ }
+ if ($error) {
+ $logger->warn($error);
+ $message->error($error);
$message->error_time('NOW');
$e->xact_begin;
- $e->udpate_acq_edi_message($message) or $logger->warn("EDI update_acq_edi_message failed! $!");
+ $e->update_acq_edi_message($message) or $logger->warn("EDI update_acq_edi_message failed! $!");
$e->xact_commit;
return;
}
- if (! $perl->{body}) {
- $logger->warn("EDI interchange body not found!");
- return;
- }
- if (! $perl->{body}->[0]) {
- $logger->warn("EDI interchange body not a populated arrayref!");
- return;
- }
# Crazy data structure. Most of the arrays will be 1 element... we think.
# JEDI looks like:
# So you might access it like:
# $obj->{body}->[0]->{ORDERS}->[0]->[0] eq 'UNH'
- $logger->info("EDI interchange body has " . scalar(@{$perl->{body}}) . " messages(s)");
- my @li;
+ $logger->info("EDI interchange body has " . scalar(@{$perl->{body}}) . " message(s)");
+ my @ok_msg_codes = qw/ORDRSP OSTRPT/;
+ my @messages;
my $i = 0;
foreach my $part (@{$perl->{body}}) {
$i++;
next;
}
foreach my $key (keys %$part) {
- unless ($key eq 'ORDRSP') { # We only do one type for now. TODO: other types here
- $logger->warn("EDI interchange message $i contains unhandled type '$key'. Ignoring.");
+ if (! grep {$_ eq $key} @ok_msg_codes) { # We only do one type for now. TODO: other types here
+ $logger->warn("EDI interchange $i contains unhandled '$key' message. Ignoring it.");
next;
}
- my @li_chunk = __PACKAGE__->parse_ordrsp($part->{$key}, $server, $e);
- $logger->info("EDI $key parsing returned " . scalar(@li_chunk) . " line items");
- push @li, @li_chunk;
+ my $msg = __PACKAGE__->message_object($part->{$key}) or next;
+ push @messages, $msg;
+
+ my $bgm = $msg->xpath('BGM') or $logger->warn("EDI No BGM segment found?!");
+ my $tag4343 = $msg->xpath('BGM/4343');
+ my $tag1225 = $msg->xpath('BGM/1225');
+ if (ref $tag4343) {
+ $logger->info(sprintf "EDI $key BGM/4343 Response Type: %s - %s", $tag4343->value, $tag4343->label)
+ } else {
+ $logger->warn("EDI $key BGM/4343 Response Type Code unrecognized"); # next; #?
+ }
+ if (ref $tag1225) {
+ $logger->info(sprintf "EDI $key BGM/1225 Message Function: %s - %s", $tag1225->value, $tag1225->label);
+ } else {
+ $logger->warn("EDI $key BGM/1225 Message Function Code unrecognized"); # next; #?
+ }
+
+ # TODO: currency check, just to be paranoid
+ # *should* be unnecessary (vendor should reply in currency we send in ORDERS)
+ # That begs a policy question: how to handle mismatch? convert (bad accuracy), reject, or ignore? I say ignore.
+
+ # ALL those codes below are basically some form of (lastest) delivery date/time
+ # see, e.g.: http://www.stylusstudio.com/edifact/D04B/2005.htm
+ # The order is the order of definitiveness (first match wins)
+ # Note: if/when we do serials via EDI, dates (and ranges/periods) will need massive special handling
+ my @dates;
+ my $ddate;
+
+ foreach my $date ($msg->xpath('delivery_schedule')) {
+ my $val_2005 = $date->xpath_value('DTM/2005') or next;
+ (grep {$val_2005 eq $_} @datecodes) or next; # no match means some other kind of date we don't care about
+ push @dates, $date;
+ }
+ if (@dates) {
+ DATECODE: foreach my $dcode (@datecodes) { # now cycle back through hits in order of dcode definitiveness
+ foreach my $date (@dates) {
+ $date->xpath_value('DTM/2005') == $dcode or next;
+ $ddate = $date->xpath_value('DTM/2380') and last DATECODE;
+ # TODO: conversion based on format specified in DTM/2379 (best encapsulated in Business::EDI)
+ }
+ }
+ }
+ foreach my $detail ($msg->part('line_detail')) {
+ my $eg_line = __PACKAGE__->eg_li($detail, $remote, $server->{remote_host}, $e) or next;
+ my $li_date = $detail->xpath_value('DTM/2380') || $ddate;
+ my $price = $detail->xpath_value('line_price/PRI/5118') || '';
+ $eg_line->expected_recv_time($li_date) if $li_date;
+ $eg_line->estimated_unit_price($price) if $price;
+ if (not $message->purchase_order) { # first good lineitem sets the message PO link
+ $message->purchase_order($eg_line->purchase_order); # EG $message object NOT Business::EDI $msg object
+ $e->xact_begin;
+ $e->update_acq_edi_message($message) or $logger->warn("EDI update_acq_edi_message (for PO number) failed! $!");
+ $e->xact_commit;
+ }
+ # $e->search_acq_edi_account([]);
+ my $touches = 0;
+ my $eg_lids = $e->search_acq_lineitem_detail({lineitem => $eg_line->id}); # should be the same as $eg_line->lineitem_details
+ my $lidcount = scalar(@$eg_lids);
+ $lidcount == $eg_line->item_count or $logger->warn(
+ sprintf "EDI: LI %s itemcount (%d) mismatch, %d LIDs found", $eg_line->id, $eg_line->item_count, $lidcount
+ );
+ foreach my $qty ($detail->part('all_QTY')) {
+ my $ubound = $qty->xpath_value('6060') or next; # nothing to do if qty is 0
+ my $val_6063 = $qty->xpath_value('6063');
+ $ubound > 0 or next; # don't be crazy!
+ if (! $val_6063) {
+ $logger->warn("EDI: Response for LI " . $eg_line->id . " specifies quantity $ubound with no 6063 code! Contact vendor to resolve.");
+ next;
+ }
+
+ my $eg_reason = $e->retrieve_acq_cancel_reason(1200 + $val_6063); # DB populated w/ 6063 keys in 1200's
+ if (! $eg_reason) {
+ $logger->warn("EDI: Unhandled quantity code '$val_6063' (LI " . $eg_line->id . ") $ubound items unprocessed");
+ next;
+ } elsif (grep {$val_6063 == $_} @noop_6063) { # an FYI like "ordered quantity"
+ $ubound eq $lidcount
+ or $logger->warn("EDI: LI " . $eg_line->id . " -- Vendor says we ordered $ubound, but we have $lidcount LIDs!)");
+ next;
+ }
+ # elsif ($val_6063 == 83) { # backorder
+ #} elsif ($val_6063 == 85) { # cancel
+ #} elsif ($val_6063 == 12 or $val_6063 == 57 or $val_6063 == 84 or $val_6063 == 118) {
+ # despatched, in transit, urgent delivery, or quantity manifested
+ #}
+ if ($touches >= $lidcount) {
+ $logger->warn("EDI: LI " . $eg_line->id . ", We already updated $touches of $lidcount LIDS, " .
+ "but message wants QTY $ubound more set to " . $eg_reason->label . ". Ignoring!");
+ next;
+ }
+ $e->xact_begin;
+ foreach (1 .. $ubound) {
+ my $eg_lid = shift @$eg_lids or $logger->warn("EDI: Used up all $lidcount LIDs! Ignoring extra status " . $eg_reason->label);
+ $eg_lid or next;
+ $logger->debug(sprintf "Updating LID %s to %s", $eg_lid->id, $eg_reason->label);
+ $eg_lid->cancel_reason($eg_reason->id);
+ $e->update_acq_lineitem_detail($eg_lid);
+ $touches++;
+ }
+ $e->xact_commit;
+ if ($ubound == $eg_line->item_count) {
+ $eg_line->cancel_reason($eg_reason->id); # if ALL the items have the same cancel_reason, the PO gets it too
+ }
+ }
+ $eg_line->edit_time('NOW'); # TODO: have this field automatically updated via ON UPDATE trigger.
+ $e->xact_begin;
+ $e->update_acq_lineitem($eg_line) or $logger->warn("EDI: update_acq_lineitem FAILED");
+ $e->xact_commit;
+ # print STDERR "Lineitem update: ", Dumper($eg_line);
+ }
}
}
- return \@li, $perl; # TODO process perl
+ return \@messages;
}
+# returns message object if processing should continue
+# returns false/undef value if processing should abort
-=head2 ->parse_ordrsp($segments, $server, $e)
-
-Returns array of lineitems.
-
-=cut
-
-# TODO: Build Business::EDI::Message::ORDRSP object instead
-# TODO: Convert access to methods, not reaching inside the data/object like $segbody->{S009}->{'0065'}
+sub message_object {
+ my $class = shift;
+ my $body = shift or return;
+ my $key = shift if @_;
+ my $keystring = $key || 'UNSPECIFIED';
-sub parse_ordrsp {
- my ($class, $segments, $server, $e, $test) = @_; # test not implemented
- $e ||= new_editor();
- my $type = 'ORDRSP';
- $logger->info("EDI " . scalar(@$segments) . " segments in $type message");
- my (@lins, $bgm);
- foreach my $segment (@$segments) { # Prepass: catch the conditions that might cause us to bail
- my ($tag, $segbody, @extra) = @$segment;
- unless ($tag ) {$logger->warn("EDI empty segment received" ); next;}
- unless ($segbody) {$logger->warn("EDI segment '$tag' missing body"); next;}
- @extra and $logger->warn("EDI extra data (" . scalar(@extra) . " elements) found after pseudohash pair for $tag");
- if ($tag eq 'UNH') {
- unless ($segbody->{S009}->{'0065'} and $segbody->{S009}->{'0065'} eq $type) {
- $logger->error("EDI $tag/S009/0065 ('" . ($segbody->{S009}->{'0065'} || '') . "') conflict w/ message type $type\. Aborting");
- return;
- }
- unless ($segbody->{S009}->{'0051'} and $segbody->{S009}->{'0051'} eq 'UN') {
- $logger->warn("EDI $tag/S009/0051 does not designate 'UN' as controlling agency. Will attempt to process anyway");
- }
- } elsif ($tag eq 'BGM') {
- $bgm = Business::EDI::Segment::BGM->new($segbody);
- $bgm->seg4343 or $logger->warn(sprintf "EDI $tag/4343 Response Type Code '%s' unrecognized", ($segbody->{4343} || ''));
- $logger->info(sprintf "EDI $tag/4343 response type: %s - %s (%s)", $bgm->seg4343->value, $bgm->seg4343->label, $bgm->seg4343->desc);
- my $fcn = $bgm->seg1225;
- unless ($fcn) {
- $logger->error(sprintf "EDI $tag/1225 Message Function Code '%s' unrecognized. Aborting", ($segbody->{1225} || ''));
- return;
- }
- }
+ my $msg = Business::EDI::Message->new($body);
+ unless ($msg) {
+ $logger->error("EDI interchange message: $keystring body failed Business::EDI constructor. Skipping it.");
+ return;
}
- my @ignored;
- foreach my $segment (@$segments) { # The main pass
- my ($tag, $segbody, @extra) = @$segment;
- next unless ($tag and $segbody); # warnings above
- if ($tag eq 'LIN') {
- my @chunks = @{$segbody->{SG26}};
- my $count = scalar(@chunks);
- $logger->debug("EDI LIN/SG26 has $count chunks");
-# CHUNK:
-# ["RFF", {
-# "C506": {
-# "1153": "LI",
-# "1154": "4639/1"
-# }
-# }]
- foreach (@chunks) {
- my $label = $_->[0];
- my $body = $_->[1];
- # $label eq 'QTY' and push @qtys, $body;
- $label eq 'RFF' or next;
- my $obj;
- unless ($obj = Business::EDI::Segment::RFF->new($body)) { # assignment, not comparison
- $logger->error("EDI $tag/$label failed to convert to an object");
- }
- $obj->seg1153 and $obj->seg1153->value eq 'LI' or $logger->warn("EDI $tag/$label object unexpected 1153 value (not 'LI')");
- __PACKAGE__->update_li($obj->seg1154->value, $segbody, $server, $e);
- }
- push @lins, \@chunks;
- } elsif ($tag ne 'UNH' and $tag ne 'BGM') {
- push @ignored, $tag;
- }
+ $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");
}
- @ignored and $logger->debug("EDI: ignoring " . scalar(@ignored) . " segment(s): " . join(', ', @ignored));
- return @lins;
+ return $msg;
}
-=head2 ->update_li($lineitem_id, $lineitem_object, [$server, $editor])
+=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,
=cut
-sub update_li {
- my ($class, $id, $object, $server, $e) = @_;
+sub eg_li {
+ my ($class, $line, $server, $server_log_string, $e) = @_;
+ $line or return;
$e ||= new_editor();
- $id =~ s#^.*\/##; # Temporary fix for mbklein's testdata
- print STDERR "Here we would retrieve/update lineitem $id\n";
- my $li = OpenILS::Application::Acq::Lineitem::retrieve_lineitem_impl($e, $id); # Could send {options}
+
+ 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");
+ }
+
+ 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 || '';
+ print STDERR "EDI retrieve/update lineitem $id\n";
+
+ 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'");
+ $logger->error("EDI failed to retrieve lineitem by id '$id' for server $server_log_string");
return;
}
- unless ((! $server) or (! $server->provider)) {
+ 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("
}
}
}
- return; # TODO: actual updates
- $e->xact_begin;
- $e->update_acq_lineitem($li) or $logger->warn("EDI: in update_li, update_acq_lineitem FAILED");
- $e->xact_commit;
- # print STDERR "Lineitem to update: ", Dumper($li);
+
+ 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'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+],
+
}
sub retrieve_lineitem_impl {
- my ($e, $li_id, $options) = @_;
+ my ($e, $li_id, $options, $no_auth) = @_; # no_auth needed for EDI scripts
$options ||= {};
my $flesh = {
my $fields = $flesh->{flesh_fields};
- push(@{$fields->{jub}}, 'attributes') if $$options{flesh_attrs};
- push(@{$fields->{jub}}, 'lineitem_notes') if $$options{flesh_notes};
- push(@{$fields->{acqlin}}, 'alert_text') if $$options{flesh_notes};
- push(@{$fields->{jub}}, 'order_summary') if $$options{flesh_order_summary};
+ push(@{$fields->{jub} }, 'attributes') if $$options{flesh_attrs};
+ push(@{$fields->{jub} },'lineitem_notes') if $$options{flesh_notes};
+ push(@{$fields->{acqlin}}, 'alert_text') if $$options{flesh_notes};
+ push(@{$fields->{jub} }, 'order_summary') if $$options{flesh_order_summary};
push(@{$fields->{acqlin}}, 'cancel_reason') if $$options{flesh_cancel_reason};
if($$options{flesh_li_details}) {
- push(@{$fields->{jub}}, 'lineitem_details');
- push(@{$fields->{acqlid}}, 'fund') if $$options{flesh_fund};
- push(@{$fields->{acqlid}}, 'fund_debit') if $$options{flesh_fund_debit};
+ push(@{$fields->{jub} }, 'lineitem_details');
+ push(@{$fields->{acqlid}}, 'fund' ) if $$options{flesh_fund};
+ push(@{$fields->{acqlid}}, 'fund_debit' ) if $$options{flesh_fund_debit};
push(@{$fields->{acqlid}}, 'cancel_reason') if $$options{flesh_cancel_reason};
}
return $e->event unless (
$li->purchase_order and
- $e->allowed(['VIEW_PURCHASE_ORDER', 'CREATE_PURCHASE_ORDER'],
- $li->purchase_order->ordering_agency, $li->purchase_order)
+ ($no_auth or $e->allowed(['VIEW_PURCHASE_ORDER', 'CREATE_PURCHASE_ORDER'],
+ $li->purchase_order->ordering_agency, $li->purchase_order))
) or (
$li->picklist and !$li->purchase_order and # user doesn't have view_po perms
- $e->allowed(['VIEW_PICKLIST', 'CREATE_PICKLIST'],
- $li->picklist->org_unit, $li->picklist)
+ ($no_auth or $e->allowed(['VIEW_PICKLIST', 'CREATE_PICKLIST'],
+ $li->picklist->org_unit, $li->picklist))
);
unless ($$options{flesh_po}) {
# ----------------------------------------------------------------------------
__PACKAGE__->register_method(
- method => 'upload_records',
+ method => 'upload_records',
api_name => 'open-ils.acq.process_upload_records',
- stream => 1,
+ stream => 1,
);
sub upload_records {
my $cache = OpenSRF::Utils::Cache->new;
my $data = $cache->get_cache("vandelay_import_spool_$key");
- my $purpose = $data->{purpose};
- my $filename = $data->{path};
- my $provider = $data->{provider};
- my $picklist = $data->{picklist};
- my $create_po = $data->{create_po};
- my $activate_po = $data->{activate_po};
+ my $purpose = $data->{purpose};
+ my $filename = $data->{path};
+ my $provider = $data->{provider};
+ my $picklist = $data->{picklist};
+ my $create_po = $data->{create_po};
+ my $activate_po = $data->{activate_po};
my $ordering_agency = $data->{ordering_agency};
- my $create_assets = $data->{create_assets};
+ my $create_assets = $data->{create_assets};
my $po;
my $evt;
$logger->info("acq processing MARC file=$filename");
- my $marctype = 'USMARC'; # ?
- my $batch = new MARC::Batch ($marctype, $filename);
+ my $batch = new MARC::Batch ('USMARC', $filename);
$batch->strict_off;
my $count = 0;
while(1) {
- my $err;
- my $xml;
+ my ($err, $xml, $r);
$count++;
- my $r;
try {
$r = $batch->next;
unlink($filename);
$cache->delete_cache('vandelay_import_spool_' . $key);
- if($create_assets) {
+ if ($create_assets) {
create_lineitem_list_assets($mgr, \@li_list) or return $e->die_event;
}
last unless $$compiled{quantity};
for(1..$$compiled{quantity}) {
- my $lid = create_lineitem_detail($mgr,
- lineitem => $li->id,
- owning_lib => $$compiled{owning_lib},
- cn_label => $$compiled{call_number},
- fund => $$compiled{fund},
- circ_modifier => $$compiled{circ_modifier},
- note => $$compiled{note},
- location => $$compiled{copy_location},
+ my $lid = create_lineitem_detail(
+ $mgr,
+ lineitem => $li->id,
+ owning_lib => $$compiled{owning_lib},
+ cn_label => $$compiled{call_number},
+ fund => $$compiled{fund},
+ circ_modifier => $$compiled{circ_modifier},
+ note => $$compiled{note},
+ location => $$compiled{copy_location},
collection_code => $$compiled{collection_code}
) or return 0;
}
__PACKAGE__->register_method(
- method => 'create_purchase_order_api',
- api_name => 'open-ils.acq.purchase_order.create',
- signature => {
- desc => 'Creates a new purchase order',
+ method => 'create_purchase_order_api',
+ api_name => 'open-ils.acq.purchase_order.create',
+ signature => {
+ desc => 'Creates a new purchase order',
params => [
{desc => 'Authentication token', type => 'string'},
{desc => 'purchase_order to create', type => 'object'}
# create the PO
my %pargs = (ordering_agency => $e->requestor->ws_ou); # default
- $pargs{provider} = $po->provider if $po->provider;
- $pargs{ordering_agency} = $po->ordering_agency if $po->ordering_agency;
- $pargs{prepayment_required} = $po->prepayment_required
- if $po->prepayment_required;
+ $pargs{provider} = $po->provider if $po->provider;
+ $pargs{ordering_agency} = $po->ordering_agency if $po->ordering_agency;
+ $pargs{prepayment_required} = $po->prepayment_required if $po->prepayment_required;
+
$po = create_purchase_order($mgr, %pargs) or return $e->die_event;
my $li_ids = $$args{lineitems};
__PACKAGE__->register_method(
- method => 'update_lineitem_fund_batch',
- api_name => 'open-ils.acq.lineitem.fund.update.batch',
- stream => 1,
+ method => 'update_lineitem_fund_batch',
+ api_name => 'open-ils.acq.lineitem.fund.update.batch',
+ stream => 1,
signature => {
- desc => q/
- Given a set of lineitem IDS, updates the fund for all attached
- lineitem details
- /
+ desc => q/Given a set of lineitem IDS, updates the fund for all attached lineitem details/
}
);
__PACKAGE__->register_method(
- method => 'rollback_receive_po_api',
- api_name => 'open-ils.acq.purchase_order.receive.rollback'
+ method => 'rollback_receive_po_api',
+ api_name => 'open-ils.acq.purchase_order.receive.rollback'
);
sub rollback_receive_po_api {
__PACKAGE__->register_method(
- method => 'rollback_receive_lineitem_detail_api',
- api_name => 'open-ils.acq.lineitem_detail.receive.rollback',
- signature => {
- desc => 'Mark a lineitem_detail as Un-received',
+ method => 'rollback_receive_lineitem_detail_api',
+ api_name => 'open-ils.acq.lineitem_detail.receive.rollback',
+ signature => {
+ desc => 'Mark a lineitem_detail as Un-received',
params => [
{desc => 'Authentication token', type => 'string'},
{desc => 'lineitem detail ID', type => 'number'}
new_editor->retrieve_acq_provider($po->provider);
return 1 if
- $po->state eq 'on-order' and
- $provider->edi_default and
+ ($po->state eq 'on-order' or
+ $po->state eq 'retry' ) and
+ $provider and
+ $provider->edi_default and
$U->is_true($provider->active);
return 0;
'debug' => 0,
'verbose+' => 0,
'help' => 0,
- 'internal_var' => 'XYZ',
+ # 'internal_var' => 'XYZ',
},
# lockfile => undef,
# session => undef,
our %keyfiles = ();
my %fields = (
- accound_object => undef,
+ account_object => undef,
remote_host => undef,
remote_user => undef,
remote_password => undef,
# Checks if the filename part of a pathname has one or more glob characters
# We split out the filename portion of the path
# Detect glob or no glob.
-# return: regex for matching filenames
+# returns: directory, regex for matching filenames
sub glob_parse {
my $self = shift;
my $path = shift or return;
my ($vol, $dir, $file) = File::Spec->splitpath($path); # we don't care about attempted globs in mid-filepath
- $file =~ /\*/ and return (File::Spec->catdir($vol, $dir), glob_to_regex($file));
- $file =~ /\?/ and return (File::Spec->catdir($vol, $dir), glob_to_regex($file));
+ my $front = $vol ? File::Spec->catdir($vol, $dir) : $dir;
+ $file =~ /\*/ and return ($front, glob_to_regex($file));
+ $file =~ /\?/ and return ($front, glob_to_regex($file));
$logger->debug("No glob detected in '$path'");
return;
}
if ($regex) {
my $count = scalar(@pool);
@pool = grep {$_->{name} =~ /$regex/} @pool;
- $logger->info("Glob regex($regex) matches " . scalar(@pool) . " of $count files");
- }
+ $logger->info("SSH ls: Glob regex($regex) matches " . scalar(@pool) . " of $count files");
+ } # else { $logger->info("SSH ls: No Glob regex in '$target'. Just a regular ls"); }
push @list, @pool;
}
return @list;
}
-sub _slash_path { # not OO
+sub _slash_path {
my $self = shift;
my $dir = shift || '.';
my $file = shift || '';
+ my ($dirpath, $regex) = $self->glob_parse($dir);
+ $dir = $dirpath if $dirpath;
return $dir . ($dir =~ /\/$/ ? '' : '/') . $file;
}
return $self->local_file;
}
-sub ls_uftp {
+sub ls_uftp { # returns full path like: dir/path/file.ext
my $self = shift;
my $ftp = $self->_uftp or return;
my @list;
foreach (@_) {
my @part;
my ($dirpath, $regex) = $self->glob_parse($_);
- eval { @part = $ftp->ls($dirpath || $_) };
+ my $dirtarget = $dirpath || $_;
+ $dirtarget =~ s/\/+$//;
+ eval { @part = $ftp->ls($dirtarget) }; # this ls returns relative/path/filenames. defer filename glob filtering for below.
if ($@) {
$logger->error($self->_error("ls from", $self->remote_host, "failed with error: $@"));
next;
}
+ if ($dirtarget and $dirtarget ne '.' and $dirtarget ne './' and $ftp->is_dir($dirtarget)) {
+ foreach my $file (@part) { # we ensure full(er) path
+ $file =~ /^$dirtarget\// and next;
+ $logger->debug("ls_uftp: prepending $dirtarget/ to $file");
+ $file = File::Spec->catdir($dirtarget, $file);
+ }
+ }
if ($regex) {
my $count = scalar(@part);
- @part = grep {/$regex/} @part;
- $logger->info("Glob regex($regex) matches " . scalar(@part) . " of $count files");
- }
+ # @part = grep {my @a = split('/',$_); scalar(@a) ? /$regex/ : ($a[-1] =~ /$regex/)} @part;
+ my @bulk = @part;
+ @part = grep {
+ my ($vol, $dir, $file) = File::Spec->splitpath($_);
+ $file =~ /$regex/
+ } @part;
+ $logger->info("FTP ls: Glob regex($regex) matches " . scalar(@part) . " of $count files");
+ } # else {$logger->info("FTP ls: No Glob regex in '$_'. Just a regular ls");}
push @list, @part;
}
return @list;
$name =~ s/.*://; # strip leading package stuff
unless (exists $self->{_permitted}->{$name}) {
- croak "Cannot access '$name' field of class '$class'";
+ croak "AUTOLOAD error: Cannot access '$name' field of class '$class'";
}
if (@_) {
use vars qw/$debug/;
use OpenILS::Application::Acq::EDI;
-use OpenILS::Utils::CStoreEditor; # needs init() after IDL is loaded (by Cronscript session)
use OpenILS::Utils::Cronscript;
+use File::Spec;
-INIT {
- $debug = 1;
-}
+my $defaults = {
+ "account=i" => 0,
+ "provider=i" => 0,
+ "inactive" => 0,
+ "test" => 0,
+};
+
+my $core = OpenILS::Utils::Cronscript->new($defaults);
+my $opts = $core->MyGetOptions() or die "Getting options failed!";
+my $e = $core->editor();
+my $debug = $opts->{debug};
-OpenILS::Utils::Cronscript->new()->session('open-ils.acq') or die "No session created";
-OpenILS::Utils::CStoreEditor::init();
+if ($debug) {
+ print join "\n", "OPTIONS:", map {sprintf "%16s: %s", $_, $opts->{$_}} sort keys %$opts;
+ print "\n\n";
+}
-sub editor {
- my $ed = OpenILS::Utils::CStoreEditor->new(@_) or die "Failed to get new CStoreEditor";
- return $ed;
+sub main_search {
+ my $select = {'+acqpro' => {active => {"in"=>['t','f']}} }; # either way
+ my %args = @_ ? @_ : ();
+ foreach (keys %args) {
+ $select->{$_} = $args{$_};
+ }
+ return $e->search_acq_edi_account([
+ $select,
+ {
+ 'join' => 'acqpro',
+ flesh => 1,
+ flesh_fields => {acqedi => ['provider']},
+ }
+ ]);
}
+my $set = main_search() or die "No EDI accounts found in database (table: acq.edi_account)";
-my $e = editor();
-my $set = $e->retrieve_all_acq_edi_account();
my $total_accts = scalar(@$set);
($total_accts) or die "No EDI accounts found in database (table: acq.edi_account)";
-print "EDI Accounts Total : ", scalar(@$set), "\n";
+print "EDI Accounts Total : $total_accts\n";
+my $active = [ grep {$_->provider->active eq 't'} @$set ];
+print "EDI Accounts Active: ", scalar(@$active), "\n";
-my $subset = $e->search_acq_edi_account([
- {'+acqpro' => {active => 't'}},
- {
- 'join' => 'acqpro',
- flesh => 1,
- flesh_fields => {acqedi => ['provider']},
+my $subset;
+if ($opts->{inactive} or $opts->{provider} or $opts->{account}) {
+ print "Including inactive accounts\n";
+ $subset = [@$set];
+} else {
+ $subset = $active;
+}
+
+my ($acct, $pro);
+if ($opts->{provider}) {
+ print "Limiting by provider: " . $opts->{provider} . "\n";
+ $pro = $e->retrieve_acq_provider($opts->{provider}) or die "provider '" . $opts->{provider} . "' not found";
+ printf "Provider %s found (edi_default %s)\n", $pro->id, $pro->edi_default;
+ $subset = main_search( 'id' => $pro->edi_default );
+ # $subset = [ grep {$_->provider->id == $opts->{provider}} @$subset ];
+ foreach (@$subset) {
+ $_->provider($pro); # force provider match (short of LEFT JOINing the main_search query and dealing w/ multiple combos)
}
-]);
+ scalar(@$subset) or die "provider '" . $opts->{provider} . "' edi_default invalid (failed to match acq.edi_account.id)";
+ if ($opts->{account} and $opts->{account} != $pro->edi_default) {
+ die sprintf "ERROR: --provider=%s and --account=%s specify rows that exist, but are not paired by acq.provider.edi_default", $opts->{provider}, $opts->{account};
+ }
+ $acct = $subset->[0];
+}
+if ($opts->{account}) {
+ print "Limiting by account: " . $opts->{account} . "\n";
+ $subset = [ grep {$opts->{account} == $_->id} @$subset ];
+ scalar(@$subset) or die "No acq.provider.edi_default matches option --account=" . $opts->{account} . " ";
+ scalar(@$subset) > 1 and warn "account '" . $opts->{account} . "' has multiple matches. Ignoring all but the first.";
+ $acct = $subset->[0];
+}
+scalar(@$subset) or die "No acq.provider rows match options " .
+ ($opts->{account} ? ("--account=" . $opts->{account} ) : '') .
+ ($opts->{provider} ? ("--provider=" . $opts->{provider}) : '') ;
-print "EDI Accounts Active: ", scalar(@$subset), "\n";
+print "Limiting to " . scalar(@$subset) . " account(s)\n";
+foreach (@$subset) {
+ printf "Provider %s - %s, edi_account %s - %s: %s%s\n",
+ $_->provider->id, $_->provider->name, $_->id, $_->label, $_->host, ($_->in_dir ? ('/' . $_->in_dir) : '') ;
+}
+
+if (@ARGV) {
+ $opts->{provider} or $opts->{account}
+ or die "ERROR: --account=[ID] or --provider=[ID] option required for local data ingest, with valid edi_account or provider id";
+ print "READING FROM ", scalar(@ARGV), " LOCAL SOURCE(s) ONLY. NO REMOTE SERVER(s) WILL BE USED\n";
+ printf "File will be attributed to edi_account %s - %s: %s\n", $acct->id, $acct->label, $acct->host;
+ my @files = @ARGV; # copy original @ARGV
+ foreach (@files) {
+ @ARGV = ($_); # We'll use the diamond op, so we can pull from STDIN too
+ my $content = join '', <> or next;
+ $opts->{test} and next;
+ my $in = OpenILS::Application::Acq::EDI->process_retrieval(
+ $content,
+ "localhost:" . File::Spec->rel2abs($_),
+ OpenILS::Application::Acq::EDI->remote_account($acct),
+ $acct,
+ $e
+ );
+ }
+ exit;
+}
+# else no args
-my $res = OpenILS::Application::Acq::EDI->retrieve_core();
+my $res = OpenILS::Application::Acq::EDI->retrieve_core($subset,undef,undef,$opts->{test});
print "Files retrieved: ", scalar(@$res), "\n";
$debug and print "retrieve_core returns ", scalar(@$res), " ids: " . join(', ', @$res), "\n";
-$debug and print Dumper($set);
+# $Data::Dumper::Indent = 1;
+$debug and print map {Dumper($_) . "\n"} @$subset;
print "\ndone\n";
+
+__END__
+
+=pod
+
+=head1 NAME
+
+edi_fetcher.pl - A script for retrieving and processing EDI files from remote accounts.
+
+=head1 DESCRIPTION
+
+This script is expected to be run via crontab, for the purpose of retrieving vendor EDI files.
+
+Note: Depending on your vendors' and your own network environments, you may want to set/export
+the environmental variable FTP_PASSIVE like:
+
+ export FTP_PASSIVE=1
+ # or
+ FTP_PASSIVE=1 Open-ILS/src/support-scripts/edi_fetcher.pl
+
+=head1 OPTIONS
+
+ --account=[id] Target one account, whether or not it is inactive.
+ --inactive Includes inactive provider accounts (default OFF, forced ON if --account specified)
+
+=head1 ARGUMENTS
+
+edi_fetcher can also read from files specified as arguments on the command line, or from STDIN, or both.
+In such cases, the filename is not used to check whether the file has been loaded or not.
+
+=head1 TODO
+
+More docs here.
+
+=head1 SEE ALSO
+
+ OpenILS::Utils::Cronscript
+ edi_pusher.pl
+
+=head1 AUTHOR
+
+Joe Atzberger <jatzberger@esilibrary.com>
+
+=cut
+
$remaining -= scalar(@$events);
- print "Event definition ", $def->id, " has ", scalar(@$events), " event(s)\n";
+ print "Event definition ", $def->id, " has ", scalar(@$events), " (completed) event(s)\n";
foreach (@$events) {
my $event = $e->retrieve_action_trigger_event([
+++ /dev/null
-#!/usr/bin/perl
-#
-
-use strict; use warnings;
-
-use Data::Dumper;
-
-use OpenILS::Application::Acq::EDI;
-use OpenILS::Utils::Cronscript;
-use Business::EDI::Object;
-use Business::EDI::Segment::RFF;
-use vars qw/%code_hash/;
-
-require Business::EDI::DataElement;
-
-my $core = OpenILS::Utils::Cronscript->new();
-my $editor = $core->editor;
-
-my $slurp = join '', <DATA>;
-
-my ($aref, $whole) = OpenILS::Application::Acq::EDI->process_jedi($slurp);
-
-$Data::Dumper::Indent = 1;
-my $i = 0;
-foreach (@$aref) {
- print "Building object from chunk ", ++$i, "\n";
- my $obj = Business::EDI::Object->new($_);
- print Dumper($obj);
-}
-
-print "\ndone\n";
-
-__DATA__
-{
-"trailer": ["UNZ", {
- "0020": "2045",
- "0036": 1
-}],
-"body": [{
- "ORDRSP": [["UNH", {
- "S009": {
- "0052": "D",
- "0054": "96A",
- "0065": "ORDRSP",
- "0051": "UN"
- },
- "0062": "723"
- }], ["BGM", {
- "4343": "AC",
- "1225": "29",
- "C002": {
- "1001": "231"
- },
- "1004": "582822"
- }], ["DTM", {
- "C507": {
- "2379": "102",
- "2380": "20070618",
- "2005": "137"
- }
- }], ["RFF", {
- "C506": {
- "1153": "ON",
- "1154": "E07158FIC"
- }
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "31B"
- },
- "3035": "BY"
- }], ["NAD", {
- "C082": {
- "3039": "1556150",
- "3055": "31B"
- },
- "3035": "SU"
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "91"
- },
- "3035": "BY"
- }], ["CUX", {
- "C504": [{
- "6345": "USD",
- "6347": "2",
- "6343": "9"
- }]
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LACY, AL THINGS NOT SEEN"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 10.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/1"
- }
- }]],
- "C212": {
- "7140": "9781576734131",
- "7143": "EN"
- },
- "1082": 1,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LACY, AL FINAL JUSTICE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 1,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 1,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/2"
- }
- }]],
- "C212": {
- "7140": "9781590529966",
- "7143": "EN"
- },
- "1082": 2,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MALAMUD, B NATURAL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/3"
- }
- }]],
- "C212": {
- "7140": "9780374502003",
- "7143": "EN"
- },
- "1082": 3,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SCOTT, PAU RAJ QUARTET THE JEWEL IN"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 32.5
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/4"
- }
- }]],
- "C212": {
- "7140": "9780307263964",
- "7143": "EN"
- },
- "1082": 4,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JAMES, P. SHROUD FOR A NIGHTINGALE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/6"
- }
- }]],
- "C212": {
- "7140": "9780743219600",
- "7143": "EN"
- },
- "1082": 5,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LAHAYE, TI TRIBULATION FORCE THE CO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/7"
- }
- }]],
- "C212": {
- "7140": "9780842329217",
- "7143": "EN"
- },
- "1082": 6,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ZANE AFTERBURN A NOVEL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 15
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/8"
- }
- }]],
- "C212": {
- "7140": "9780743470988",
- "7143": "EN"
- },
- "1082": 7,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CABOT, MEG BOY NEXT DOOR"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/9"
- }
- }]],
- "C212": {
- "7140": "9780060096199",
- "7143": "EN"
- },
- "1082": 8,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["VONNEGUT, BREAKFAST OF CHAMPIONS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/10"
- }
- }]],
- "C212": {
- "7140": "9780385334204",
- "7143": "EN"
- },
- "1082": 9,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["DOSTOYEVSK BROTHERS KARAMAZOV"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 9.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/11"
- }
- }]],
- "C212": {
- "7140": "9781593083526",
- "7143": "EN"
- },
- "1082": 10,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["KINGSBURY, FORGIVEN"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/12"
- }
- }]],
- "C212": {
- "7140": "9780842387446",
- "7143": "EN"
- },
- "1082": 11,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BERLINSKI, FIELDWORK"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/13"
- }
- }]],
- "C212": {
- "7140": "9780374299163",
- "7143": "EN"
- },
- "1082": 12,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GREGORY, P MERIDON A NOVEL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/14"
- }
- }]],
- "C212": {
- "7140": "9780743249317",
- "7143": "EN"
- },
- "1082": 13,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MCCALL SMI MORALITY FOR BEAUTIFUL G"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/15"
- }
- }]],
- "C212": {
- "7140": "9781400031368",
- "7143": "EN"
- },
- "1082": 14,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CLEAGE, PE WHAT LOOKS LIKE CRAZY ON"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/16"
- }
- }]],
- "C212": {
- "7140": "9780380794874",
- "7143": "EN"
- },
- "1082": 15,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GREGORY, P WIDEACRE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/17"
- }
- }]],
- "C212": {
- "7140": "9780743249294",
- "7143": "EN"
- },
- "1082": 16,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["FERBER, ED SO BIG"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "07",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/18"
- }
- }]],
- "C212": {
- "7140": "9780060956691",
- "7143": "EN"
- },
- "1082": 17,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GREGORY, P OTHER BOLEYN GIRL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/19"
- }
- }]],
- "C212": {
- "7140": "9780743227445",
- "7143": "EN"
- },
- "1082": 18,
- "1229": "5"
- }], ["UNS", {
- "0081": "S"
- }], ["CNT", {
- "C270": {
- "6069": "2",
- "6066": 18
- }
- }], ["UNT", {
- "0074": 155,
- "0062": "723"
- }]]
-},
-{
- "ORDRSP": [["UNH", {
- "S009": {
- "0052": "D",
- "0054": "96A",
- "0065": "ORDRSP",
- "0051": "UN"
- },
- "0062": "724"
- }], ["BGM", {
- "4343": "AC",
- "1225": "29",
- "C002": {
- "1001": "231"
- },
- "1004": "582828"
- }], ["DTM", {
- "C507": {
- "2379": "102",
- "2380": "20070618",
- "2005": "137"
- }
- }], ["RFF", {
- "C506": {
- "1153": "ON",
- "1154": "E07159ANF"
- }
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "31B"
- },
- "3035": "BY"
- }], ["NAD", {
- "C082": {
- "3039": "1556150",
- "3055": "31B"
- },
- "3035": "SU"
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "91"
- },
- "3035": "BY"
- }], ["CUX", {
- "C504": [{
- "6345": "USD",
- "6347": "2",
- "6343": "9"
- }]
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["HOLM, BILL WINDOWS OF BRIMNES"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/1"
- }
- }]],
- "C212": {
- "7140": "9781571313027",
- "7143": "EN"
- },
- "1082": 1,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["REPA, BARB YOUR RIGHTS IN THE WORKP"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/2"
- }
- }]],
- "C212": {
- "7140": "9781413306439",
- "7143": "EN"
- },
- "1082": 2,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GUERIN, LI ESSENTIAL GUIDE TO WORKP"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 39.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/3"
- }
- }]],
- "C212": {
- "7140": "9781413306910",
- "7143": "EN"
- },
- "1082": 3,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CLIFFORD, ESTATE PLANNING BASICS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 21.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/4"
- }
- }]],
- "C212": {
- "7140": "9781413307023",
- "7143": "EN"
- },
- "1082": 4,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["FRIEDMAN, BABY CARE BOOK"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/5"
- }
- }]],
- "C212": {
- "7140": "9780778801603",
- "7143": "EN"
- },
- "1082": 5,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["KING, RUSS ATLAS OF HUMAN MIGRATION"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 40
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/6"
- }
- }]],
- "C212": {
- "7140": "9781554072873",
- "7143": "EN"
- },
- "1082": 6,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ASH, RUSSE FIREFLYS WORLD OF FACTS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/7"
- }
- }]],
- "C212": {
- "7140": "9781554073139",
- "7143": "EN"
- },
- "1082": 7,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["WARNER, RA 101 LAW FORMS FOR PERSON"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/8"
- }
- }]],
- "C212": {
- "7140": "9781413307122",
- "7143": "EN"
- },
- "1082": 8,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BRAY, ILON NOLOS ESSENTIAL GUIDE TO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 10,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 10,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/9"
- }
- }]],
- "C212": {
- "7140": "9781413306286",
- "7143": "EN"
- },
- "1082": 9,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["WESTWOOD, HOW TO WRITE A MARKETING"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 1,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "99",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 17.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/10"
- }
- }]],
- "C212": {
- "7140": "9780749445546",
- "7143": "EN"
- },
- "1082": 10,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ROANE, SUS HOW TO WORK A ROOM YOUR "]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/11"
- }
- }]],
- "C212": {
- "7140": "9780061238673",
- "7143": "EN"
- },
- "1082": 11,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GERMAIN, D REACHING PAST THE WIRE A"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/12"
- }
- }]],
- "C212": {
- "7140": "9780873516068",
- "7143": "EN"
- },
- "1082": 12,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["KLING, KEV DOG SAYS HOW"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/13"
- }
- }]],
- "C212": {
- "7140": "9780873515993",
- "7143": "EN"
- },
- "1082": 13,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SHORT, SUS BUNDT CAKE BLISS DELICIO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/14"
- }
- }]],
- "C212": {
- "7140": "9780873515856",
- "7143": "EN"
- },
- "1082": 14,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BRADY, TIM GOPHER GOLD LEGENDARY FI"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/15"
- }
- }]],
- "C212": {
- "7140": "9780873516013",
- "7143": "EN"
- },
- "1082": 15,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ROBERTS, K MINNESOTA 150 THE PEOPLE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 19.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/16"
- }
- }]],
- "C212": {
- "7140": "9780873515948",
- "7143": "EN"
- },
- "1082": 16,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MAK, GEERT IN EUROPE A JOURNEY THRO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 35
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/17"
- }
- }]],
- "C212": {
- "7140": "9780375424953",
- "7143": "EN"
- },
- "1082": 17,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["DONAHUE, P PARENTING WITHOUT FEAR O"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/18"
- }
- }]],
- "C212": {
- "7140": "9780312358914",
- "7143": "EN"
- },
- "1082": 18,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MURRAY, LI BABYCENTERS ESSENTIAL GU"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 15.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/19"
- }
- }]],
- "C212": {
- "7140": "9781594864117",
- "7143": "EN"
- },
- "1082": 19,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LAPINE, MI SNEAKY CHEF SIMPLE STRAT"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 17.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/20"
- }
- }]],
- "C212": {
- "7140": "9780762430758",
- "7143": "EN"
- },
- "1082": 20,
- "1229": "5"
- }], ["UNS", {
- "0081": "S"
- }], ["CNT", {
- "C270": {
- "6069": "2",
- "6066": 20
- }
- }], ["UNT", {
- "0074": 171,
- "0062": "724"
- }]]
-},
-{
- "ORDRSP": [["UNH", {
- "S009": {
- "0052": "D",
- "0054": "96A",
- "0065": "ORDRSP",
- "0051": "UN"
- },
- "0062": "725"
- }], ["BGM", {
- "4343": "AC",
- "1225": "29",
- "C002": {
- "1001": "231"
- },
- "1004": "582830"
- }], ["DTM", {
- "C507": {
- "2379": "102",
- "2380": "20070618",
- "2005": "137"
- }
- }], ["RFF", {
- "C506": {
- "1153": "ON",
- "1154": "E07160FIC"
- }
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "31B"
- },
- "3035": "BY"
- }], ["NAD", {
- "C082": {
- "3039": "1556150",
- "3055": "31B"
- },
- "3035": "SU"
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "91"
- },
- "3035": "BY"
- }], ["CUX", {
- "C504": [{
- "6345": "USD",
- "6347": "2",
- "6343": "9"
- }]
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SHAW, REBE COUNTRY LOVERS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/1"
- }
- }]],
- "C212": {
- "7140": "9781400098224",
- "7143": "EN"
- },
- "1082": 1,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BLAKE, TON TEMPT ME TONIGHT"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "07",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/2"
- }
- }]],
- "C212": {
- "7140": "9780061136092",
- "7143": "EN"
- },
- "1082": 2,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MONING, KA BLOODFEVER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/3"
- }
- }]],
- "C212": {
- "7140": "9780385339162",
- "7143": "EN"
- },
- "1082": 3,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MCKENNA, S EDGE OF MIDNIGHT"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/4"
- }
- }]],
- "C212": {
- "7140": "9780758211859",
- "7143": "EN"
- },
- "1082": 4,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BALZO, SAN GROUNDS FOR MURDER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 27.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/5"
- }
- }]],
- "C212": {
- "7140": "9780727865496",
- "7143": "EN"
- },
- "1082": 5,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["PALMER, DI HARD TO HANDLE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/6"
- }
- }]],
- "C212": {
- "7140": "9780373772612",
- "7143": "EN"
- },
- "1082": 6,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JONES, LLO MR PIP"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 20
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/7"
- }
- }]],
- "C212": {
- "7140": "9780385341066",
- "7143": "EN"
- },
- "1082": 7,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JILES, PAU STORMY WEATHER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/8"
- }
- }]],
- "C212": {
- "7140": "9780060537326",
- "7143": "EN"
- },
- "1082": 8,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["DELILLO, D FALLING MAN A NOVEL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 26
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/9"
- }
- }]],
- "C212": {
- "7140": "9781416546023",
- "7143": "EN"
- },
- "1082": 9,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MORRISON, SWEETER THAN HONEY"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/10"
- }
- }]],
- "C212": {
- "7140": "9780758215116",
- "7143": "EN"
- },
- "1082": 10,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SMITH, SHE FOX"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 25.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/11"
- }
- }]],
- "C212": {
- "7140": "9780756404215",
- "7143": "EN"
- },
- "1082": 11,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GROSSMAN, SOON I WILL BE INVINCIBL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/12"
- }
- }]],
- "C212": {
- "7140": "9780375424861",
- "7143": "EN"
- },
- "1082": 12,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LEWYCKA, M SHORT HISTORY OF TRACTOR"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/13"
- }
- }]],
- "C212": {
- "7140": "9780143036746",
- "7143": "EN"
- },
- "1082": 13,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BANNISTER, FLAWED"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/14"
- }
- }]],
- "C212": {
- "7140": "9780312375669",
- "7143": "EN"
- },
- "1082": 14,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ALEXANDER, REMEMBERED"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/15"
- }
- }]],
- "C212": {
- "7140": "9780764201103",
- "7143": "EN"
- },
- "1082": 15,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["TANIGUCHI, OCEAN IN THE CLOSET"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/16"
- }
- }]],
- "C212": {
- "7140": "9781566891943",
- "7143": "EN"
- },
- "1082": 16,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["HENKE, ROX SECRET OF US"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/17"
- }
- }]],
- "C212": {
- "7140": "9780736917018",
- "7143": "EN"
- },
- "1082": 17,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["HERMAN, KA EVER PRESENT DANGER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/18"
- }
- }]],
- "C212": {
- "7140": "9781590529218",
- "7143": "EN"
- },
- "1082": 18,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CHAPMAN, G IT HAPPENS EVERY SPRING"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "07",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/19"
- }
- }]],
- "C212": {
- "7140": "9781414311654",
- "7143": "EN"
- },
- "1082": 19,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JACKSON, N YADA YADA PRAYER GROUP G"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/20"
- }
- }]],
- "C212": {
- "7140": "9781591453628",
- "7143": "EN"
- },
- "1082": 20,
- "1229": "5"
- }], ["UNS", {
- "0081": "S"
- }], ["CNT", {
- "C270": {
- "6069": "2",
- "6066": 20
- }
- }], ["UNT", {
- "0074": 171,
- "0062": "725"
- }]]
-}],
-"recipient": "8888888",
-"sender": "1556150",
-"header": ["UNB", {
- "S003": {
- "0007": "31B",
- "0010": "8888888"
- },
- "0020": "2045",
- "S004": {
- "0019": 1556,
- "0017": 70618
- },
- "S001": {
- "0001": "UNOC",
- "0002": 3
- },
- "S002": {
- "0007": "31B",
- "0004": "1556150"
- }
-}],
-"sender_qual": "31B",
-"UNA": {
- "seg_term": "'",
- "decimal_sign": ".",
- "esc_char": "?",
- "de_sep": "+",
- "ce_sep": ":",
- "rep_sep": " "
-},
-"recipient_qual": "31B"
-}
}
close TEMP;
-my $dir = '/home/some_user/out';
+my $dir = '/home/' . $config{remote_user} . '/out';
$delay and print "Sleeping $delay seconds\n" and sleep $delay;
my $glob6 = $dir . '/*Q*';
+++ /dev/null
-#!/usr/bin/perl
-#
-
-use strict; use warnings;
-
-use Data::Dumper;
-
-use OpenILS::Utils::Cronscript;
-use OpenILS::Application::Acq::EDI;
-use Business::EDI::DataElement;
-use Business::EDI::Segment::RFF;
-use vars qw/%code_hash/;
-
-require Business::EDI::DataElement;
-
-my $verbose = @ARGV ? shift : 0;
-
-my $core = OpenILS::Utils::Cronscript->new();
-my $editor = $core->editor;
-
-my $slurp = join '', <DATA>;
-
-my ($aref, $whole) = OpenILS::Application::Acq::EDI->process_jedi($slurp);
-
-$Data::Dumper::Indent = 1;
-# print Dumper($aref);
-my @innards = @$aref;
-my @rffs;
-
-# `print Dumper(\@innards);
-
-=pod
- ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LACY, AL THINGS NOT SEEN"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ...
- ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/1"
- }
- }], ... ]}]
-
-=cut
-
-my @qtys = ();
-foreach (@innards) {
-
-# my $count = scalar(@{$_->{SG26}});
- my $count = scalar(@$_);
- print STDERR "->{SG26} has $count pieces: ";
- for (my $i = 0; $i < $count; $i++) {
- my $label = $_->[$i]->[0];
- my $body = $_->[$i]->[1];
- print STDERR "$label ";
- $label eq 'QTY' and push @qtys, $body;
- $label eq 'RFF' and push @rffs, $body;
- }
- print STDERR "\n";
- # foreach my $qty (@{$_->{SG26}->[0]}) {
-}
-
-printf "%4d LINs found\n", scalar(@innards);
-printf "%4d QTYs found\n", scalar(@qtys);
-printf "%4d RFFs found (inside LINs)\n", scalar(@rffs);
-
-sub example_dump {
- my $example = shift or return;
- print "\nexample QTY: ", Dumper($example);
- foreach (keys %{$example->{C186}}) {
- # no warnings 'uninitialized';
- my $x = Business::EDI::DataElement->new($_);
- print $x->label, " ($_) : ", $example->{C186}->{$_}, "\n";
- }
-}
-
-# example_dump($qtys[-1]);
-
-# We want: RFF > C506 > 1154 where 1153 = LI
-foreach my $rff (@rffs) {
- my $obj = Business::EDI::Segment::RFF->new($rff);
- $verbose and print Dumper ($obj);
- foreach my $subrff (keys %$rff) {
- $subrff eq 'C506' or next;
- my $i = 0;
- foreach (sort keys %{$rff->{$subrff}}) {
- my $x = Business::EDI::DataElement->new($_, $rff->{$subrff}->{$_});
- $x or warn "Unknown DataElement code $_";
- print "$_ ", $x->label, " ", $x->value, " ";
- $i++ == 0 and print "==> ";
- }
- print "\n";
- }
-}
-print "\ndone\n";
-
-__DATA__
-{
-"trailer": ["UNZ", {
- "0020": "2045",
- "0036": 1
-}],
-"body": [{
- "ORDRSP": [["UNH", {
- "S009": {
- "0052": "D",
- "0054": "96A",
- "0065": "ORDRSP",
- "0051": "UN"
- },
- "0062": "723"
- }], ["BGM", {
- "4343": "AC",
- "1225": "29",
- "C002": {
- "1001": "231"
- },
- "1004": "582822"
- }], ["DTM", {
- "C507": {
- "2379": "102",
- "2380": "20070618",
- "2005": "137"
- }
- }], ["RFF", {
- "C506": {
- "1153": "ON",
- "1154": "E07158FIC"
- }
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "31B"
- },
- "3035": "BY"
- }], ["NAD", {
- "C082": {
- "3039": "1556150",
- "3055": "31B"
- },
- "3035": "SU"
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "91"
- },
- "3035": "BY"
- }], ["CUX", {
- "C504": [{
- "6345": "USD",
- "6347": "2",
- "6343": "9"
- }]
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LACY, AL THINGS NOT SEEN"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 10.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/1"
- }
- }]],
- "C212": {
- "7140": "9781576734131",
- "7143": "EN"
- },
- "1082": 1,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LACY, AL FINAL JUSTICE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 1,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 1,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/2"
- }
- }]],
- "C212": {
- "7140": "9781590529966",
- "7143": "EN"
- },
- "1082": 2,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MALAMUD, B NATURAL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/3"
- }
- }]],
- "C212": {
- "7140": "9780374502003",
- "7143": "EN"
- },
- "1082": 3,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SCOTT, PAU RAJ QUARTET THE JEWEL IN"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 32.5
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/4"
- }
- }]],
- "C212": {
- "7140": "9780307263964",
- "7143": "EN"
- },
- "1082": 4,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JAMES, P. SHROUD FOR A NIGHTINGALE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/6"
- }
- }]],
- "C212": {
- "7140": "9780743219600",
- "7143": "EN"
- },
- "1082": 5,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LAHAYE, TI TRIBULATION FORCE THE CO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/7"
- }
- }]],
- "C212": {
- "7140": "9780842329217",
- "7143": "EN"
- },
- "1082": 6,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ZANE AFTERBURN A NOVEL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 15
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/8"
- }
- }]],
- "C212": {
- "7140": "9780743470988",
- "7143": "EN"
- },
- "1082": 7,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CABOT, MEG BOY NEXT DOOR"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/9"
- }
- }]],
- "C212": {
- "7140": "9780060096199",
- "7143": "EN"
- },
- "1082": 8,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["VONNEGUT, BREAKFAST OF CHAMPIONS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/10"
- }
- }]],
- "C212": {
- "7140": "9780385334204",
- "7143": "EN"
- },
- "1082": 9,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["DOSTOYEVSK BROTHERS KARAMAZOV"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 9.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/11"
- }
- }]],
- "C212": {
- "7140": "9781593083526",
- "7143": "EN"
- },
- "1082": 10,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["KINGSBURY, FORGIVEN"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/12"
- }
- }]],
- "C212": {
- "7140": "9780842387446",
- "7143": "EN"
- },
- "1082": 11,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BERLINSKI, FIELDWORK"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/13"
- }
- }]],
- "C212": {
- "7140": "9780374299163",
- "7143": "EN"
- },
- "1082": 12,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GREGORY, P MERIDON A NOVEL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/14"
- }
- }]],
- "C212": {
- "7140": "9780743249317",
- "7143": "EN"
- },
- "1082": 13,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MCCALL SMI MORALITY FOR BEAUTIFUL G"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/15"
- }
- }]],
- "C212": {
- "7140": "9781400031368",
- "7143": "EN"
- },
- "1082": 14,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CLEAGE, PE WHAT LOOKS LIKE CRAZY ON"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/16"
- }
- }]],
- "C212": {
- "7140": "9780380794874",
- "7143": "EN"
- },
- "1082": 15,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GREGORY, P WIDEACRE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/17"
- }
- }]],
- "C212": {
- "7140": "9780743249294",
- "7143": "EN"
- },
- "1082": 16,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["FERBER, ED SO BIG"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "07",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/18"
- }
- }]],
- "C212": {
- "7140": "9780060956691",
- "7143": "EN"
- },
- "1082": 17,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GREGORY, P OTHER BOLEYN GIRL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4639/19"
- }
- }]],
- "C212": {
- "7140": "9780743227445",
- "7143": "EN"
- },
- "1082": 18,
- "1229": "5"
- }], ["UNS", {
- "0081": "S"
- }], ["CNT", {
- "C270": {
- "6069": "2",
- "6066": 18
- }
- }], ["UNT", {
- "0074": 155,
- "0062": "723"
- }]]
-},
-{
- "ORDRSP": [["UNH", {
- "S009": {
- "0052": "D",
- "0054": "96A",
- "0065": "ORDRSP",
- "0051": "UN"
- },
- "0062": "724"
- }], ["BGM", {
- "4343": "AC",
- "1225": "29",
- "C002": {
- "1001": "231"
- },
- "1004": "582828"
- }], ["DTM", {
- "C507": {
- "2379": "102",
- "2380": "20070618",
- "2005": "137"
- }
- }], ["RFF", {
- "C506": {
- "1153": "ON",
- "1154": "E07159ANF"
- }
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "31B"
- },
- "3035": "BY"
- }], ["NAD", {
- "C082": {
- "3039": "1556150",
- "3055": "31B"
- },
- "3035": "SU"
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "91"
- },
- "3035": "BY"
- }], ["CUX", {
- "C504": [{
- "6345": "USD",
- "6347": "2",
- "6343": "9"
- }]
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["HOLM, BILL WINDOWS OF BRIMNES"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/1"
- }
- }]],
- "C212": {
- "7140": "9781571313027",
- "7143": "EN"
- },
- "1082": 1,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["REPA, BARB YOUR RIGHTS IN THE WORKP"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/2"
- }
- }]],
- "C212": {
- "7140": "9781413306439",
- "7143": "EN"
- },
- "1082": 2,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GUERIN, LI ESSENTIAL GUIDE TO WORKP"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 39.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/3"
- }
- }]],
- "C212": {
- "7140": "9781413306910",
- "7143": "EN"
- },
- "1082": 3,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CLIFFORD, ESTATE PLANNING BASICS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 21.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/4"
- }
- }]],
- "C212": {
- "7140": "9781413307023",
- "7143": "EN"
- },
- "1082": 4,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["FRIEDMAN, BABY CARE BOOK"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/5"
- }
- }]],
- "C212": {
- "7140": "9780778801603",
- "7143": "EN"
- },
- "1082": 5,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["KING, RUSS ATLAS OF HUMAN MIGRATION"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 40
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/6"
- }
- }]],
- "C212": {
- "7140": "9781554072873",
- "7143": "EN"
- },
- "1082": 6,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ASH, RUSSE FIREFLYS WORLD OF FACTS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/7"
- }
- }]],
- "C212": {
- "7140": "9781554073139",
- "7143": "EN"
- },
- "1082": 7,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["WARNER, RA 101 LAW FORMS FOR PERSON"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 29.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/8"
- }
- }]],
- "C212": {
- "7140": "9781413307122",
- "7143": "EN"
- },
- "1082": 8,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BRAY, ILON NOLOS ESSENTIAL GUIDE TO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 10,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 10,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/9"
- }
- }]],
- "C212": {
- "7140": "9781413306286",
- "7143": "EN"
- },
- "1082": 9,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["WESTWOOD, HOW TO WRITE A MARKETING"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 1,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "99",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 17.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/10"
- }
- }]],
- "C212": {
- "7140": "9780749445546",
- "7143": "EN"
- },
- "1082": 10,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ROANE, SUS HOW TO WORK A ROOM YOUR "]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/11"
- }
- }]],
- "C212": {
- "7140": "9780061238673",
- "7143": "EN"
- },
- "1082": 11,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GERMAIN, D REACHING PAST THE WIRE A"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/12"
- }
- }]],
- "C212": {
- "7140": "9780873516068",
- "7143": "EN"
- },
- "1082": 12,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["KLING, KEV DOG SAYS HOW"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/13"
- }
- }]],
- "C212": {
- "7140": "9780873515993",
- "7143": "EN"
- },
- "1082": 13,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SHORT, SUS BUNDT CAKE BLISS DELICIO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 16.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/14"
- }
- }]],
- "C212": {
- "7140": "9780873515856",
- "7143": "EN"
- },
- "1082": 14,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BRADY, TIM GOPHER GOLD LEGENDARY FI"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/15"
- }
- }]],
- "C212": {
- "7140": "9780873516013",
- "7143": "EN"
- },
- "1082": 15,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ROBERTS, K MINNESOTA 150 THE PEOPLE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 19.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/16"
- }
- }]],
- "C212": {
- "7140": "9780873515948",
- "7143": "EN"
- },
- "1082": 16,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MAK, GEERT IN EUROPE A JOURNEY THRO"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 35
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/17"
- }
- }]],
- "C212": {
- "7140": "9780375424953",
- "7143": "EN"
- },
- "1082": 17,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["DONAHUE, P PARENTING WITHOUT FEAR O"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/18"
- }
- }]],
- "C212": {
- "7140": "9780312358914",
- "7143": "EN"
- },
- "1082": 18,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MURRAY, LI BABYCENTERS ESSENTIAL GU"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 15.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/19"
- }
- }]],
- "C212": {
- "7140": "9781594864117",
- "7143": "EN"
- },
- "1082": 19,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LAPINE, MI SNEAKY CHEF SIMPLE STRAT"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 17.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4640/20"
- }
- }]],
- "C212": {
- "7140": "9780762430758",
- "7143": "EN"
- },
- "1082": 20,
- "1229": "5"
- }], ["UNS", {
- "0081": "S"
- }], ["CNT", {
- "C270": {
- "6069": "2",
- "6066": 20
- }
- }], ["UNT", {
- "0074": 171,
- "0062": "724"
- }]]
-},
-{
- "ORDRSP": [["UNH", {
- "S009": {
- "0052": "D",
- "0054": "96A",
- "0065": "ORDRSP",
- "0051": "UN"
- },
- "0062": "725"
- }], ["BGM", {
- "4343": "AC",
- "1225": "29",
- "C002": {
- "1001": "231"
- },
- "1004": "582830"
- }], ["DTM", {
- "C507": {
- "2379": "102",
- "2380": "20070618",
- "2005": "137"
- }
- }], ["RFF", {
- "C506": {
- "1153": "ON",
- "1154": "E07160FIC"
- }
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "31B"
- },
- "3035": "BY"
- }], ["NAD", {
- "C082": {
- "3039": "1556150",
- "3055": "31B"
- },
- "3035": "SU"
- }], ["NAD", {
- "C082": {
- "3039": "8888888",
- "3055": "91"
- },
- "3035": "BY"
- }], ["CUX", {
- "C504": [{
- "6345": "USD",
- "6347": "2",
- "6343": "9"
- }]
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SHAW, REBE COUNTRY LOVERS"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/1"
- }
- }]],
- "C212": {
- "7140": "9781400098224",
- "7143": "EN"
- },
- "1082": 1,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BLAKE, TON TEMPT ME TONIGHT"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "07",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/2"
- }
- }]],
- "C212": {
- "7140": "9780061136092",
- "7143": "EN"
- },
- "1082": 2,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MONING, KA BLOODFEVER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 6,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/3"
- }
- }]],
- "C212": {
- "7140": "9780385339162",
- "7143": "EN"
- },
- "1082": 3,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MCKENNA, S EDGE OF MIDNIGHT"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/4"
- }
- }]],
- "C212": {
- "7140": "9780758211859",
- "7143": "EN"
- },
- "1082": 4,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BALZO, SAN GROUNDS FOR MURDER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 27.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/5"
- }
- }]],
- "C212": {
- "7140": "9780727865496",
- "7143": "EN"
- },
- "1082": 5,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["PALMER, DI HARD TO HANDLE"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/6"
- }
- }]],
- "C212": {
- "7140": "9780373772612",
- "7143": "EN"
- },
- "1082": 6,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JONES, LLO MR PIP"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 20
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/7"
- }
- }]],
- "C212": {
- "7140": "9780385341066",
- "7143": "EN"
- },
- "1082": 7,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JILES, PAU STORMY WEATHER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/8"
- }
- }]],
- "C212": {
- "7140": "9780060537326",
- "7143": "EN"
- },
- "1082": 8,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["DELILLO, D FALLING MAN A NOVEL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 26
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/9"
- }
- }]],
- "C212": {
- "7140": "9781416546023",
- "7143": "EN"
- },
- "1082": 9,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["MORRISON, SWEETER THAN HONEY"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/10"
- }
- }]],
- "C212": {
- "7140": "9780758215116",
- "7143": "EN"
- },
- "1082": 10,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["SMITH, SHE FOX"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 25.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/11"
- }
- }]],
- "C212": {
- "7140": "9780756404215",
- "7143": "EN"
- },
- "1082": 11,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["GROSSMAN, SOON I WILL BE INVINCIBL"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 22.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/12"
- }
- }]],
- "C212": {
- "7140": "9780375424861",
- "7143": "EN"
- },
- "1082": 12,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["LEWYCKA, M SHORT HISTORY OF TRACTOR"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 3,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/13"
- }
- }]],
- "C212": {
- "7140": "9780143036746",
- "7143": "EN"
- },
- "1082": 13,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["BANNISTER, FLAWED"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 4,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "03",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 24.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/14"
- }
- }]],
- "C212": {
- "7140": "9780312375669",
- "7143": "EN"
- },
- "1082": 14,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["ALEXANDER, REMEMBERED"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/15"
- }
- }]],
- "C212": {
- "7140": "9780764201103",
- "7143": "EN"
- },
- "1082": 15,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["TANIGUCHI, OCEAN IN THE CLOSET"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 2,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 14.95
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/16"
- }
- }]],
- "C212": {
- "7140": "9781566891943",
- "7143": "EN"
- },
- "1082": 16,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["HENKE, ROX SECRET OF US"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/17"
- }
- }]],
- "C212": {
- "7140": "9780736917018",
- "7143": "EN"
- },
- "1082": 17,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["HERMAN, KA EVER PRESENT DANGER"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/18"
- }
- }]],
- "C212": {
- "7140": "9781590529218",
- "7143": "EN"
- },
- "1082": 18,
- "1229": "5"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["CHAPMAN, G IT HAPPENS EVERY SPRING"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 5,
- "6063": "83"
- }
- }], ["FTX", {
- "C107": {
- "4441": "07",
- "3055": "28",
- "1131": "7B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 12.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/19"
- }
- }]],
- "C212": {
- "7140": "9781414311654",
- "7143": "EN"
- },
- "1082": 19,
- "1229": "24"
- }], ["LIN", {
- "SG26": [["IMD", {
- "C273": {
- "7008": ["JACKSON, N YADA YADA PRAYER GROUP G"]
- },
- "7077": "F",
- "7081": "BST"
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "21"
- }
- }], ["QTY", {
- "C186": {
- "6060": 8,
- "6063": "12"
- }
- }], ["QTY", {
- "C186": {
- "6060": 0,
- "6063": "85"
- }
- }], ["FTX", {
- "C107": {
- "4441": "01",
- "3055": "28",
- "1131": "8B"
- },
- "4451": "LIN"
- }], ["PRI", {
- "C509": {
- "5387": "SRP",
- "5125": "AAB",
- "5118": 13.99
- }
- }], ["RFF", {
- "C506": {
- "1153": "LI",
- "1154": "4641/20"
- }
- }]],
- "C212": {
- "7140": "9781591453628",
- "7143": "EN"
- },
- "1082": 20,
- "1229": "5"
- }], ["UNS", {
- "0081": "S"
- }], ["CNT", {
- "C270": {
- "6069": "2",
- "6066": 20
- }
- }], ["UNT", {
- "0074": 171,
- "0062": "725"
- }]]
-}],
-"recipient": "8888888",
-"sender": "1556150",
-"header": ["UNB", {
- "S003": {
- "0007": "31B",
- "0010": "8888888"
- },
- "0020": "2045",
- "S004": {
- "0019": 1556,
- "0017": 70618
- },
- "S001": {
- "0001": "UNOC",
- "0002": 3
- },
- "S002": {
- "0007": "31B",
- "0004": "1556150"
- }
-}],
-"sender_qual": "31B",
-"UNA": {
- "seg_term": "'",
- "decimal_sign": ".",
- "esc_char": "?",
- "de_sep": "+",
- "ce_sep": ":",
- "rep_sep": " "
-},
-"recipient_qual": "31B"
-}
--- /dev/null
+my $o = '{"trailer":["UNZ",{"0020":"02","0036":1}],"recipient_qual":"31B","body":[{"ORDRSP":[["UNH",{"S009":{"0052":"D","0054":"96A","0065":"ORDRSP","0051":"UN"},"0062":"02"}],["BGM",{"1225":"4","C002":{"1001":"231"},"1004":"000000","4343":"AC"}],["DTM",{"C507":{"2379":"102","2380":"20100611","2005":"137"}}],["SG1",[["RFF",{"C506":{"1153":"ON","1154":"8"}}]]],["SG3",[["NAD",{"3035":"SU","C082":{"3039":"1692100","3055":"9"}}]]],["SG8",[["CUX",{"C504":[{"6345":"USD","6347":"2","6343":"9"}]}]]],["SG26",[["LIN",{"1082":1,"1229":"2"}],["IMD",{"C273":{"7008":[" "]},"7077":"F","7081":"BST"}],["QTY",{"C186":{"6060":10,"6063":"21"}}],["QTY",{"C186":{"6060":0,"6063":"12"}}],["QTY",{"C186":{"6060":10,"6063":"85"}}],["FTX",{"C107":{"1131":"8B","3055":"28","4441":"27"},"4451":"LIN"}],["SG30",[["PRI",{"C509":{"5125":"AAB","5118":0,"5387":"SRP"}}]]],["SG31",[["RFF",{"C506":{"1153":"LI","1154":"8/1"}}]]]]],["SG26",[["LIN",{"1082":2,"1229":"2"}],["IMD",{"C273":{"7008":[" "]},"7077":"F","7081":"BST"}],["QTY",{"C186":{"6060":8,"6063":"21"}}],["QTY",{"C186":{"6060":0,"6063":"12"}}],["QTY",{"C186":{"6060":8,"6063":"85"}}],["FTX",{"C107":{"1131":"8B","3055":"28","4441":"27"},"4451":"LIN"}],["SG30",[["PRI",{"C509":{"5125":"AAB","5118":0,"5387":"SRP"}}]]],["SG31",[["RFF",{"C506":{"1153":"LI","1154":"8/2"}}]]]]],["SG26",[["LIN",{"1082":3,"1229":"2"}],["IMD",{"C273":{"7008":[" "]},"7077":"F","7081":"BST"}],["QTY",{"C186":{"6060":5,"6063":"21"}}],["QTY",{"C186":{"6060":0,"6063":"12"}}],["QTY",{"C186":{"6060":5,"6063":"85"}}],["FTX",{"C107":{"1131":"8B","3055":"28","4441":"27"},"4451":"LIN"}],["SG30",[["PRI",{"C509":{"5125":"AAB","5118":0,"5387":"SRP"}}]]],["SG31",[["RFF",{"C506":{"1153":"LI","1154":"8/3"}}]]]]],["UNS",{"0081":"S"}],["CNT",{"C270":{"6069":"2","6066":3}}],["UNT",{"0074":33,"0062":"02"}]]}],"sender":"1556150","header":["UNB",{"S003":{"0007":"31B","0010":"123EVER"},"0020":"02","S004":{"0019":1155,"0017":100611},"S001":{"0001":"UNOC","0002":3},"S002":{"0007":"31B","0004":"1556150"}}],"recipient":"123EVER","sender_qual":"31B","UNA":{"seg_term":"\'","decimal_sign":".","esc_char":"?","de_sep":"+","ce_sep":":","rep_sep":" "}}';
--- /dev/null
+UNA:+.? 'UNB+UNOB:3+123EVER:31B+1556150:31B+100804:1504+1'UNH+1+ORDERS:D:96A:UN'BGM+220+12+9'DTM+137:20100804:102'NAD+BY+123EVER 0001::91'NAD+SU+1556150::31B'NAD+SU+8::92'CUX+2:USD:9'LIN+67++9780754809654:EN'PIA+5+9780754809654:EN+075480965X:IB+67:SA'IMD+F+BTI+:::The arthritis cookbook ?:'IMD+F+BPU+:::Lorenz,'IMD+F+BPD+:::2002.'IMD+F+BPH+:::96 p. ?:'QTY+21:5'PRI+AAB:15'RFF+LI:12/67'LIN+66++9780596526856:EN'PIA+5+9780596526856:EN+0596526857:IB+66:SA'IMD+F+BTI+:::Illustrated guide to astronomical w:onders'IMD+F+BPU+:::Make?:Books,'IMD+F+BPD+:::cop. 2007.'IMD+F+BPH+:::519 p. ?:'QTY+21:13'PRI+AAB:24'RFF+LI:12/66'LIN+69++9789990545371:EN'PIA+5+9789990545371:EN+69:SA'IMD+F+BTI+:::Ancient Text'QTY+21:5'PRI+AAB:35'RFF+LI:12/69'LIN+68++9780446360012:EN'PIA+5+9780446360012:EN+0446360015:IB+68:SA'IMD+F+BTI+:::On leaving Charleston /'IMD+F+BPU+:::Warner Books,'IMD+F+BPD+:::1984.'IMD+F+BPH+:::574 p.'QTY+21:12'PRI+AAB:12'RFF+LI:12/68'UNS+S'CNT+2:4'UNT+43+1'UNZ+1+1'
--- /dev/null
+UNA:+.? 'UNB+UNOB:3+123EVER:31B+1556150:31B+100622:0212+1'UNH+1+ORDERS:D:96A:UN'BGM+220+8+9'DTM+137:20100621:102'NAD+BY+123EVER 0001::91'NAD+SU+1556150::31B'NAD+SU+8::92'CUX+2:USD:9'LIN+1++9780446360272:EN'PIA+5+9780446360272:EN+0446360279:IB+57:SA'IMD+F+BTI+:::Webster?'s new world thesaurus ?:'IMD+F+BPU+:::Warner Books, Inc.,'IMD+F+BPD+:::1990.'IMD+F+BPH+:::xv, 494 p. ;'QTY+21:10'PRI+AAB:4.5'RFF+LI:8/1'LIN+2++9780446357197:EN'PIA+5+9780446357197:EN+0446357197:IB+0446831832:IB+9780446831833:EN+59:SA'IMD+F+BTI+:::The world is full of divorced women: /'IMD+F+BPU+:::Warner Books,'IMD+F+BPD+:::c1980.'IMD+F+BPH+:::413 p. ;'QTY+21:8'PRI+AAB:7.99'RFF+LI:8/2'LIN+3++9780446350105:EN'PIA+5+9780446350105:EN+0446350109:IB+60:SA'IMD+F+BTI+:::Windmills of the gods /'IMD+F+BPU+:::Warner Books,'IMD+F+BPD+:::1988, c1987.'IMD+F+BPH+:::xiii, 434 p. ;'QTY+21:5'PRI+AAB:8.75'RFF+LI:8/3'UNS+S'CNT+2:3'UNT+37+1'UNZ+1+1'
--- /dev/null
+UNA:+.? 'UNB+UNOB:3+123EVER:31B+1556150:31B+100727:1833+1'UNH+1+ORDERS:D:96A:UN'BGM+220+8+9'DTM+137:20100621:102'NAD+BY+123EVER 0001::91'NAD+SU+1556150::31B'NAD+SU+8::92'CUX+2:USD:9'LIN+1++9780446360272:EN'PIA+5+9780446360272:EN+0446360279:IB+57:SA'IMD+F+BTI+:::Webster?'s new world thesaurus ?:'IMD+F+BPU+:::Warner Books, Inc.,'IMD+F+BPD+:::1990.'IMD+F+BPH+:::xv, 494 p. ;'QTY+21:10'PRI+AAB:4.5'RFF+LI:8/1'LIN+2++9780446357197:EN'PIA+5+9780446357197:EN+0446357197:IB+0446831832:IB+9780446831833:EN+59:SA'IMD+F+BTI+:::The world is full of divorced women: /'IMD+F+BPU+:::Warner Books,'IMD+F+BPD+:::c1980.'IMD+F+BPH+:::413 p. ;'QTY+21:8'PRI+AAB:7.99'RFF+LI:8/2'LIN+3++9780446350105:EN'PIA+5+9780446350105:EN+0446350109:IB+60:SA'IMD+F+BTI+:::Windmills of the gods /'IMD+F+BPU+:::Warner Books,'IMD+F+BPD+:::1988, c1987.'IMD+F+BPH+:::xiii, 434 p. ;'QTY+21:5'PRI+AAB:8.75'RFF+LI:8/3'UNS+S'CNT+2:3'UNT+37+1'UNZ+1+1'
--- /dev/null
+
+Every LID needs a Fund. Interface doesn't enforce this.
+
+When the interface intends to make you cancel rather than "X" a LID (because the PO is active)
+you can still delete LIDs by changing the Item Count and clicking "Go".
+
+LID Save Changes: when it works quickly, you have no idea that it succeeded. Especially if you
+are conditioned to eternally hung progress bars.
+
+Upload MARC file for acq: hangs.
+
+No chrome package registered for chrome://open_ils_staff_client/js/dojo/dojo/dojo.js
+No chrome package registered for chrome://extensiondev/content/rdfhistory.js
+No chrome package registered for chrome://extensiondev/content/chromeShellExtras.js
+
+Error: buildGrid is not defined
+Source File: http://dev-vm7.lan.hq.esilibrary.com/js/ui/default/vandelay/vandelay.js
+Line: 1325
+
+Error: list[i].toHash is not a function
+Source File: http://dev-vm7.lan.hq.esilibrary.com/js/dojo/dojo/dojo.js
+Line: 71
+
+Title of tab for /eg/vandelay/vandelay is "Server Settings" (not "MARC Import/Export") as in FF.
--- /dev/null
+UNA:+.? 'UNB+UNOC:3+1556150:31B+123EVER:31B+100622:1004+03'UNG+ORDRSP+1556150:31B+123EVER:31B+100622:1004+38+UN+D 'UNH+03+ORDRSP:D:96A:UN'BGM+231+071678+29+AC'DTM+137:20100622:102'RFF+ON:8'NAD+BY+123EVER::9'NAD+BY+123EVER 0001::91'CUX+2:USD:9'LIN+1+5+9780446360272:EN'IMD+F+BST+:::NOT APPLIC WEBSTERS NEW WORLD THESA'QTY+21:10'QTY+12:10'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:4.5::SRP'RFF+LI:8/1'LIN+2+5+9780446357197:EN'IMD+F+BST+:::COLLINS, J WORLD IS FULL OF DIVORCE'QTY+21:8'QTY+12:8'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.5::SRP'RFF+LI:8/2'LIN+3+5+9780446350105:EN'IMD+F+BST+:::SHELDON, S WINDMILLS OF THE GODS'QTY+21:5'QTY+12:5'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.99::SRP'RFF+LI:8/3'UNS+S'CNT+2:3'UNT+34+03'UNE+1+38'UNZ+1+03'
\ No newline at end of file
--- /dev/null
+UNA:+.? '
+UNB+UNOC:3+1556150:31B+123EVER:31B+100622:1004+03'
+UNG+ORDRSP+1556150:31B+123EVER:31B+100622:1004+38+UN+D '
+UNH+03+ORDRSP:D:96A:UN'
+BGM+231+071678+29+AC'
+DTM+137:20100622:102'
+RFF+ON:8'
+NAD+BY+123EVER::9'
+NAD+BY+123EVER 0001::91'
+CUX+2:USD:9'
+LIN+1+5+9780446360272:EN'
+IMD+F+BST+:::NOT APPLIC WEBSTERS NEW WORLD THESA'
+QTY+21:10'
+QTY+12:10'
+QTY+85:0'
+FTX+LIN++01:8B:28'
+PRI+AAB:4.5::SRP'
+RFF+LI:8/1'
+LIN+2+5+9780446357197:EN'
+IMD+F+BST+:::COLLINS, J WORLD IS FULL OF DIVORCE'
+QTY+21:8'
+QTY+12:8'
+QTY+85:0'
+FTX+LIN++01:8B:28'
+PRI+AAB:6.5::SRP'
+RFF+LI:8/2'
+LIN+3+5+9780446350105:EN'
+IMD+F+BST+:::SHELDON, S WINDMILLS OF THE GODS'
+QTY+21:5'
+QTY+12:5'
+QTY+85:0'
+FTX+LIN++01:8B:28'
+PRI+AAB:6.99::SRP'
+RFF+LI:8/3'
+UNS+S'
+CNT+2:3'
+UNT+34+03'
+UNE+1+38'
+UNZ+1+03'
+======================================================================
+
--- /dev/null
+UNA:+.? 'UNB+UNOC:3+1556150:31B+123EVER:31B+100707:0941+05'UNG+ORDRSP+1556150:31B+123EVER:31B+100707:0941+40+UN+D:96A:UN'UNH+05+ORDRSP:D:96A:UN'BGM+231+071681+29+AC'DTM+137:20100622:102'RFF+ON:8'NAD+BY+123EVER::9'NAD+SU+1556150::9'NAD+BY+123EVER 0001::91'CUX+2:USD:9'LIN+1+5+9780446360272:EN'IMD+F+BST+:::NOT APPLIC WEBSTERS NEW WORLD THESA'QTY+21:10'QTY+12:10'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:4.5::SRP'RFF+LI:8/1'LIN+2+5+9780446357197:EN'IMD+F+BST+:::COLLINS, J WORLD IS FULL OF DIVORCE'QTY+21:8'QTY+12:8'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.5::SRP'RFF+LI:8/2'LIN+3+5+9780446350105:EN'IMD+F+BST+:::SHELDON, S WINDMILLS OF THE GODS'QTY+21:5'QTY+12:5'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.99::SRP'RFF+LI:8/3'UNS+S'CNT+2:3'UNT+35+05'UNE+1+40'UNZ+1+05'
\ No newline at end of file
--- /dev/null
+UNA:+.? 'UNB+UNOC:3+1556150:31B+123EVER:31B+100622:1004+03'UNG+ORDRSP+1556150:31B+123EVER:31B+100622:1004+38+UN+D 'UNH+03+ORDRSP:D:96A:UN'BGM+231+071678+29+AC'DTM+137:20100622:102'RFF+ON:8'NAD+BY+123EVER::9'NAD+BY+123EVER 0001::91'CUX+2:USD:9'LIN+1+5+9780446360272:EN'IMD+F+BST+:::NOT APPLIC WEBSTERS NEW WORLD THESA'QTY+21:10'QTY+12:10'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:4.5::SRP'RFF+LI:8/1'LIN+2+5+9780446357197:EN'IMD+F+BST+:::COLLINS, J WORLD IS FULL OF DIVORCE'QTY+21:8'QTY+12:8'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.5::SRP'RFF+LI:8/2'LIN+3+5+9780446350105:EN'IMD+F+BST+:::SHELDON, S WINDMILLS OF THE GODS'QTY+21:5'QTY+12:5'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.99::SRP'RFF+LI:8/3'UNS+S'CNT+2:3'UNT+34+03'UNE+1+38'UNZ+1+03'
+
+# edi2json Response:
+$VAR1 = {
+ 'body' => [
+ {
+ 'ORDRSP' => [
+ [
+ 'UNH',
+ {
+ '0062' => '03',
+ 'S009' => {
+ '0051' => 'UN',
+ '0052' => 'D',
+ '0065' => 'ORDRSP',
+ '0054' => '96A'
+ }
+ }
+ ],
+ [
+ 'BGM',
+ {
+ '1004' => '071678',
+ '4343' => 'AC',
+ '1225' => '29',
+ 'C002' => {
+ '1001' => '231'
+ }
+ }
+ ],
+ [
+ 'DTM',
+ {
+ 'C507' => {
+ '2005' => '137',
+ '2379' => '102',
+ '2380' => '20100622'
+ }
+ }
+ ],
+ [
+ 'SG1',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8',
+ '1153' => 'ON'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG3',
+ [
+ [
+ 'NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER',
+ '3055' => '9'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG3',
+ [
+ [
+ 'NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER 0001',
+ '3055' => '91'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG8',
+ [
+ [
+ 'CUX',
+ {
+ 'C504' => [
+ {
+ '6345' => 'USD',
+ '6343' => '9',
+ '6347' => '2'
+ }
+ ]
+ }
+ ]
+ ]
+ ],
+ [
+ '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'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'SG26',
+ [
+ [
+ 'LIN',
+ {
+ '1229' => '5',
+ '1082' => 2,
+ 'C212' => {
+ '7140' => '9780446357197',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ [
+ 'IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' => [
+ 'COLLINS, J WORLD IS FULL OF DIVORCE'
+ ]
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 8
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 8
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ [
+ 'FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ [
+ 'SG30',
+ [
+ [
+ 'PRI',
+ {
+ 'C509' => {
+ '5118' => '6.5',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG31',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8/2',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'SG26',
+ [
+ [
+ 'LIN',
+ {
+ '1229' => '5',
+ '1082' => 3,
+ 'C212' => {
+ '7140' => '9780446350105',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ [
+ 'IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' => [
+ 'SHELDON, S WINDMILLS OF THE GODS'
+ ]
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 5
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 5
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ [
+ 'FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ [
+ 'SG30',
+ [
+ [
+ 'PRI',
+ {
+ 'C509' => {
+ '5118' => '6.99',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG31',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8/3',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'UNS',
+ {
+ '0081' => 'S'
+ }
+ ],
+ [
+ 'CNT',
+ {
+ 'C270' => {
+ '6066' => 3,
+ '6069' => '2'
+ }
+ }
+ ],
+ [
+ 'UNT',
+ {
+ '0062' => '03',
+ '0074' => 34
+ }
+ ]
+ ]
+ }
+ ],
+ 'trailer' => [
+ 'UNZ',
+ {
+ '0036' => 1,
+ '0020' => '03'
+ }
+ ],
+ 'recipient' => '123EVER',
+ 'sender' => '1556150',
+ 'recipient_qual' => '31B',
+ 'sender_qual' => '31B',
+ 'UNA' => {
+ 'ce_sep' => ':',
+ 'decimal_sign' => '.',
+ 'de_sep' => '+',
+ 'seg_term' => '\'',
+ 'rep_sep' => ' ',
+ 'esc_char' => '?'
+ },
+ 'header' => [
+ 'UNB',
+ {
+ 'S003' => {
+ '0007' => '31B',
+ '0010' => '123EVER'
+ },
+ 'S004' => {
+ '0017' => 100622,
+ '0019' => 1004
+ },
+ 'S001' => {
+ '0002' => 3,
+ '0001' => 'UNOC'
+ },
+ 'S002' => {
+ '0004' => '1556150',
+ '0007' => '31B'
+ },
+ '0020' => '03'
+ }
+ ]
+};
--- /dev/null
+=doc
+
+UNA:+.? 'UNB+UNOC:3+1556150:31B+123EVER:31B+100622:1004+03'UNG+ORDRSP+1556150:31B+123EVER:31B+100622:1004+38+UN+D 'UNH+03+ORDRSP:D:96A:UN'BGM+231+071678+29+AC'DTM+137:20100622:102'RFF+ON:8'NAD+BY+123EVER::9'NAD+BY+123EVER 0001::91'CUX+2:USD:9'LIN+1+5+9780446360272:EN'IMD+F+BST+:::NOT APPLIC WEBSTERS NEW WORLD THESA'QTY+21:10'QTY+12:10'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:4.5::SRP'RFF+LI:8/1'LIN+2+5+9780446357197:EN'IMD+F+BST+:::COLLINS, J WORLD IS FULL OF DIVORCE'QTY+21:8'QTY+12:8'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.5::SRP'RFF+LI:8/2'LIN+3+5+9780446350105:EN'IMD+F+BST+:::SHELDON, S WINDMILLS OF THE GODS'QTY+21:5'QTY+12:5'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.99::SRP'RFF+LI:8/3'UNS+S'CNT+2:3'UNT+34+03'UNE+1+38'UNZ+1+03'
+
+=cut
+
+# edi2json Response:
+$VAR1 = {
+ 'body' => [
+ {
+ 'ORDRSP' => [
+ [
+ 'UNH',
+ {
+ '0062' => '03',
+ 'S009' => {
+ '0051' => 'UN',
+ '0052' => 'D',
+ '0065' => 'ORDRSP',
+ '0054' => '96A'
+ }
+ }
+ ],
+ [
+ 'BGM',
+ {
+ '1004' => '071678',
+ '4343' => 'AC',
+ '1225' => '29',
+ 'C002' => {
+ '1001' => '231'
+ }
+ }
+ ],
+ [
+ 'DTM',
+ {
+ 'C507' => {
+ '2005' => '137',
+ '2379' => '102',
+ '2380' => '20100622'
+ }
+ }
+ ],
+ [
+ 'SG1',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8',
+ '1153' => 'ON'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG3',
+ [
+ [
+ 'NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER',
+ '3055' => '9'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG3',
+ [
+ [
+ 'NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER 0001',
+ '3055' => '91'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG8',
+ [
+ [
+ 'CUX',
+ {
+ 'C504' => [
+ {
+ '6345' => 'USD',
+ '6343' => '9',
+ '6347' => '2'
+ }
+ ]
+ }
+ ]
+ ]
+ ],
+ [
+ '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'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'SG26',
+ [
+ [
+ 'LIN',
+ {
+ '1229' => '5',
+ '1082' => 2,
+ 'C212' => {
+ '7140' => '9780446357197',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ [
+ 'IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' => [
+ 'COLLINS, J WORLD IS FULL OF DIVORCE'
+ ]
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 8
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 8
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ [
+ 'FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ [
+ 'SG30',
+ [
+ [
+ 'PRI',
+ {
+ 'C509' => {
+ '5118' => '6.5',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG31',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8/2',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'SG26',
+ [
+ [
+ 'LIN',
+ {
+ '1229' => '5',
+ '1082' => 3,
+ 'C212' => {
+ '7140' => '9780446350105',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ [
+ 'IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' => [
+ 'SHELDON, S WINDMILLS OF THE GODS'
+ ]
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 5
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 5
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ [
+ 'FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ [
+ 'SG30',
+ [
+ [
+ 'PRI',
+ {
+ 'C509' => {
+ '5118' => '6.99',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG31',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8/3',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'UNS',
+ {
+ '0081' => 'S'
+ }
+ ],
+ [
+ 'CNT',
+ {
+ 'C270' => {
+ '6066' => 3,
+ '6069' => '2'
+ }
+ }
+ ],
+ [
+ 'UNT',
+ {
+ '0062' => '03',
+ '0074' => 34
+ }
+ ]
+ ]
+ }
+ ],
+ 'trailer' => [
+ 'UNZ',
+ {
+ '0036' => 1,
+ '0020' => '03'
+ }
+ ],
+ 'recipient' => '123EVER',
+ 'sender' => '1556150',
+ 'recipient_qual' => '31B',
+ 'sender_qual' => '31B',
+ 'UNA' => {
+ 'ce_sep' => ':',
+ 'decimal_sign' => '.',
+ 'de_sep' => '+',
+ 'seg_term' => '\'',
+ 'rep_sep' => ' ',
+ 'esc_char' => '?'
+ },
+ 'header' => [
+ 'UNB',
+ {
+ 'S003' => {
+ '0007' => '31B',
+ '0010' => '123EVER'
+ },
+ 'S004' => {
+ '0017' => 100622,
+ '0019' => 1004
+ },
+ 'S001' => {
+ '0002' => 3,
+ '0001' => 'UNOC'
+ },
+ 'S002' => {
+ '0004' => '1556150',
+ '0007' => '31B'
+ },
+ '0020' => '03'
+ }
+ ]
+};
--- /dev/null
+
+=doc
+
+UNA:+.? 'UNB+UNOC:3+1556150:31B+123EVER:31B+100622:1004+03'UNG+ORDRSP+1556150:31B+123EVER:31B+100622:1004+38+UN+D 'UNH+03+ORDRSP:D:96A:UN'BGM+231+071678+29+AC'DTM+137:20100622:102'RFF+ON:8'NAD+BY+123EVER::9'NAD+BY+123EVER 0001::91'CUX+2:USD:9'LIN+1+5+9780446360272:EN'IMD+F+BST+:::NOT APPLIC WEBSTERS NEW WORLD THESA'QTY+21:10'QTY+12:10'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:4.5::SRP'RFF+LI:8/1'LIN+2+5+9780446357197:EN'IMD+F+BST+:::COLLINS, J WORLD IS FULL OF DIVORCE'QTY+21:8'QTY+12:8'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.5::SRP'RFF+LI:8/2'LIN+3+5+9780446350105:EN'IMD+F+BST+:::SHELDON, S WINDMILLS OF THE GODS'QTY+21:5'QTY+12:5'QTY+85:0'FTX+LIN++01:8B:28'PRI+AAB:6.99::SRP'RFF+LI:8/3'UNS+S'CNT+2:3'UNT+34+03'UNE+1+38'UNZ+1+03'
+
+=cut
+
+# edi2json Response:
+$VAR1 = {
+ 'body' => [
+ {
+ 'ORDRSP' => [
+ [
+ 'UNH',
+ {
+ '0062' => '03',
+ 'S009' => {
+ '0051' => 'UN',
+ '0052' => 'D',
+ '0065' => 'ORDRSP',
+ '0054' => '96A'
+ }
+ }
+ ],
+ [
+ 'BGM',
+ {
+ '1004' => '071678',
+ '4343' => 'AC',
+ '1225' => '29',
+ 'C002' => { '1001' => '231' }
+ }
+ ],
+ [
+ 'DTM',
+ {
+ 'C507' => {
+ '2005' => '137',
+ '2379' => '102',
+ '2380' => '20100622'
+ }
+ }
+ ],
+ [
+ 'SG1',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8',
+ '1153' => 'ON'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG3',
+ [
+ [
+ 'NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER',
+ '3055' => '9'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG3',
+ [
+ [
+ 'NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER 0001',
+ '3055' => '91'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG8',
+ [
+ [
+ 'CUX',
+ {
+ 'C504' => [
+ {
+ '6345' => 'USD',
+ '6343' => '9',
+ '6347' => '2'
+ }
+ ]
+ }
+ ]
+ ]
+ ],
+ [
+ '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'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'SG26',
+ [
+ [
+ 'LIN',
+ {
+ '1229' => '5',
+ '1082' => 2,
+ 'C212' => {
+ '7140' => '9780446357197',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ [
+ 'IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' =>
+ [ 'COLLINS, J WORLD IS FULL OF DIVORCE' ]
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 8
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 8
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ [
+ 'FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ [
+ 'SG30',
+ [
+ [
+ 'PRI',
+ {
+ 'C509' => {
+ '5118' => '6.5',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG31',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8/2',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'SG26',
+ [
+ [
+ 'LIN',
+ {
+ '1229' => '5',
+ '1082' => 3,
+ 'C212' => {
+ '7140' => '9780446350105',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ [
+ 'IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' =>
+ [ 'SHELDON, S WINDMILLS OF THE GODS' ]
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 5
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 5
+ }
+ }
+ ],
+ [
+ 'QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ [
+ 'FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ [
+ 'SG30',
+ [
+ [
+ 'PRI',
+ {
+ 'C509' => {
+ '5118' => '6.99',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ [
+ 'SG31',
+ [
+ [
+ 'RFF',
+ {
+ 'C506' => {
+ '1154' => '8/3',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ [ 'UNS', { '0081' => 'S' } ],
+ [
+ 'CNT',
+ {
+ 'C270' => {
+ '6066' => 3,
+ '6069' => '2'
+ }
+ }
+ ],
+ [
+ 'UNT',
+ {
+ '0062' => '03',
+ '0074' => 34
+ }
+ ]
+ ]
+ }
+ ],
+ 'trailer' => [
+ 'UNZ',
+ {
+ '0036' => 1,
+ '0020' => '03'
+ }
+ ],
+ 'recipient' => '123EVER',
+ 'sender' => '1556150',
+ 'recipient_qual' => '31B',
+ 'sender_qual' => '31B',
+ 'UNA' => {
+ 'ce_sep' => ':',
+ 'decimal_sign' => '.',
+ 'de_sep' => '+',
+ 'seg_term' => '\'',
+ 'rep_sep' => ' ',
+ 'esc_char' => '?'
+ },
+ 'header' => [
+ 'UNB',
+ {
+ 'S003' => {
+ '0007' => '31B',
+ '0010' => '123EVER'
+ },
+ 'S004' => {
+ '0017' => 100622,
+ '0019' => 1004
+ },
+ 'S001' => {
+ '0002' => 3,
+ '0001' => 'UNOC'
+ },
+ 'S002' => {
+ '0004' => '1556150',
+ '0007' => '31B'
+ },
+ '0020' => '03'
+ }
+ ]
+};
--- /dev/null
+// ID: 338
+
+done
+$VAR1 = {
+ 'body' => [
+ {
+ 'ORDRSP' => [
+ ['UNH',
+ {
+ '0062' => '05',
+ 'S009' => {
+ '0051' => 'UN',
+ '0052' => 'D',
+ '0065' => 'ORDRSP',
+ '0054' => '96A'
+ }
+ }
+ ],
+ ['BGM',
+ {
+ '1004' => '071681',
+ '4343' => 'AC',
+ '1225' => '29',
+ 'C002' => {
+ '1001' => '231'
+ }
+ }
+ ],
+ ['DTM',
+ {
+ 'C507' => {
+ '2005' => '137',
+ '2379' => '102',
+ '2380' => '20100622'
+ }
+ }
+ ],
+ ['SG1',
+ [['RFF',
+ {
+ 'C506' => {
+ '1154' => '8',
+ '1153' => 'ON'
+ }
+ }
+ ]
+ ]
+ ],
+ ['SG3',
+ [['NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER',
+ '3055' => '9'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ ['SG3',
+ [['NAD',
+ {
+ 'C082' => {
+ '3039' => '1556150',
+ '3055' => '9'
+ },
+ '3035' => 'SU'
+ }
+ ]
+ ]
+ ],
+ ['SG3',
+ [['NAD',
+ {
+ 'C082' => {
+ '3039' => '123EVER 0001',
+ '3055' => '91'
+ },
+ '3035' => 'BY'
+ }
+ ]
+ ]
+ ],
+ ['SG8',
+ [['CUX',
+ {
+ 'C504' => [
+ {
+ '6345' => 'USD',
+ '6343' => '9',
+ '6347' => '2'
+ }
+ ]
+ }
+ ]
+ ]
+ ],
+ ['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'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ ['SG26',
+ [['LIN',
+ {
+ '1229' => '5',
+ '1082' => 2,
+ 'C212' => {
+ '7140' => '9780446357197',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ ['IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' => [
+ 'COLLINS, J WORLD IS FULL OF DIVORCE'
+ ]
+ }
+ }
+ ],
+ ['QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 8
+ }
+ }
+ ],
+ ['QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 8
+ }
+ }
+ ],
+ ['QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ ['FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ ['SG30',
+ [['PRI',
+ {
+ 'C509' => {
+ '5118' => '6.5',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ ['SG31',
+ [['RFF',
+ {
+ 'C506' => {
+ '1154' => '8/2',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ ['SG26',
+ [['LIN',
+ {
+ '1229' => '5',
+ '1082' => 3,
+ 'C212' => {
+ '7140' => '9780446350105',
+ '7143' => 'EN'
+ }
+ }
+ ],
+ ['IMD',
+ {
+ '7081' => 'BST',
+ '7077' => 'F',
+ 'C273' => {
+ '7008' => [
+ 'SHELDON, S WINDMILLS OF THE GODS'
+ ]
+ }
+ }
+ ],
+ ['QTY',
+ {
+ 'C186' => {
+ '6063' => '21',
+ '6060' => 5
+ }
+ }
+ ],
+ ['QTY',
+ {
+ 'C186' => {
+ '6063' => '12',
+ '6060' => 5
+ }
+ }
+ ],
+ ['QTY',
+ {
+ 'C186' => {
+ '6063' => '85',
+ '6060' => 0
+ }
+ }
+ ],
+ ['FTX',
+ {
+ '4451' => 'LIN',
+ 'C107' => {
+ '4441' => '01',
+ '3055' => '28',
+ '1131' => '8B'
+ }
+ }
+ ],
+ ['SG30',
+ [['PRI',
+ {
+ 'C509' => {
+ '5118' => '6.99',
+ '5387' => 'SRP',
+ '5125' => 'AAB'
+ }
+ }
+ ]
+ ]
+ ],
+ ['SG31',
+ [['RFF',
+ {
+ 'C506' => {
+ '1154' => '8/3',
+ '1153' => 'LI'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+ ],
+ ['UNS',
+ {
+ '0081' => 'S'
+ }
+ ],
+ ['CNT',
+ {
+ 'C270' => {
+ '6066' => 3,
+ '6069' => '2'
+ }
+ }
+ ],
+ ['UNT',
+ {
+ '0062' => '05',
+ '0074' => 35
+ }
+ ]
+ ]
+ }
+ ],
+ 'trailer' => [
+ 'UNZ',
+ {
+ '0036' => 1,
+ '0020' => '05'
+ }
+ ],
+ 'recipient' => '123EVER',
+ 'sender' => '1556150',
+ 'recipient_qual' => '31B',
+ 'sender_qual' => '31B',
+ 'UNA' => {
+ 'ce_sep' => ':',
+ 'decimal_sign' => '.',
+ 'de_sep' => '+',
+ 'seg_term' => '\'',
+ 'rep_sep' => ' ',
+ 'esc_char' => '?'
+ },
+ 'header' => [
+ 'UNB',
+ {
+ 'S003' => {
+ '0007' => '31B',
+ '0010' => '123EVER'
+ },
+ 'S004' => {
+ '0017' => 100707,
+ '0019' => 941
+ },
+ 'S001' => {
+ '0002' => 3,
+ '0001' => 'UNOC'
+ },
+ 'S002' => {
+ '0004' => '1556150',
+ '0007' => '31B'
+ },
+ '0020' => '05'
+ }
+ ]
+};
+
--- /dev/null
+UNA:+.? 'UNB+UNOB:3+9999867:31B+1697684:31B+100811:1927+1'UNH+1+ORDERS:D:96A:UN'BGM+220+15+9'DTM+137:20100811:102'NAD+BY+9999867 0001::91'NAD+SU+1697684::31B'NAD+SU+7::92'CUX+2:USD:9'LIN+81++0743294394:IB'PIA+5+0743294394:IB+81:SA'IMD+F+BTI+:::206 BONES'IMD+F+BPU+:::Scribner'IMD+F+BPD+:::2009-08-01'QTY+21:4'PRI+AAB:0'RFF+LI:15/81'LIN+80++1598883275:IB'PIA+5+1598883275:IB+80:SA'IMD+F+BTI+:::COUNTY AND CITY EXTRA'IMD+F+BPU+:::Bernan Press'IMD+F+BPD+:::2009-07-01'QTY+21:4'PRI+AAB:0'RFF+LI:15/80'LIN+79++1590203097:IB'PIA+5+1590203097:IB+79:SA'IMD+F+BTI+:::2017'IMD+F+BPU+:::Overlook Pr'IMD+F+BPD+:::2010-03-01'QTY+21:4'PRI+AAB:0'RFF+LI:15/79'LIN+78++1598884093:IB'PIA+5+1598884093:IB+78:SA'IMD+F+BTI+:::COUNTY AND CITY EXTRA'IMD+F+BPU+:::Bernan Press'IMD+F+BPD+:::2010-07-01'QTY+21:4'PRI+AAB:0'RFF+LI:15/78'UNS+S'CNT+2:4'UNT+42+1'UNZ+1+1'
--- /dev/null
+#!/usr/bin/perl
+#
+#
+# Purpose here is to break up EDI messages to make them more readable
+# (i.e., not all on one line).
+#
+
+use warnings;
+use strict;
+
+
+my @unindented = qw( LIN BGM );
+
+my $delim = "'";
+while (my $line = <>) {
+ foreach (split $delim, $line) {
+ '+' eq substr($_,3,1) or warn "Line $. missing '+' delimiter as 4th character: $_";
+ my $tag = substr($_,0,3) or warn "Line $. Unexpectedly short: $_";
+ unless ($tag =~ /^UN\S/ or grep {$_ eq $tag} @unindented) {
+ print "\t";
+ }
+ print "$_$delim\n";
+ }
+ print '=' x 70, "\n\n";
+}
+
--- /dev/null
+
+ {
+ "recipient":"1556150",
+ "sender":"6666666",
+ "body": [{
+ "ORDERS":[ "order", {
+ "po_number":8,
+ "date":"20100610",
+ "buyer":[{ "id":"6666666" }],
+ "vendor":[ "1556150",
+ {"id-qualifier": 92, "id":"8"}
+ ],
+ "currency":"USD",
+ "items":[
+
+ {
+ "identifiers":[
+ {"id-qualifier":"EN","id":"9780446360272"},
+ {"id-qualifier":"SA","id":"57"},
+ {"id-qualifier":"IB","id":"0446360279"}
+ ],
+ "price":4.50,
+ "desc":[
+ {"BTI":"Webster's new world thesaurus :"},
+ {"BPU":"Warner Books, Inc.,"},
+ {"BPD":"1990."},
+ {"BPH":"xv, 494 p. ;"}
+ ],
+ "quantity":8,
+ // "FTX":[ { "4451": "LIN", "C108": {"4440": "This is a TEST! zzz!"} } ]
+ "FTX": { "4451": "LIN", "C108": {"4440": "This is a TEST! zzz!"} }
+ },
+ {
+ "identifiers":[
+ {"id-qualifier":"SA","id":"59"},
+ {"id-qualifier":"IB","id":"0446831832"},
+ {"id-qualifier":"EN","id":"9780446357197"}
+ ],
+ "price":7.99,
+ "desc":[
+ {"BTI":"The world is full of divorced women /"},
+ {"BPU":"Warner Books,"},
+ {"BPD":"c1980."},
+ {"BPH":"413 p. ;"}
+ ],
+ "quantity":10
+ },
+ {
+ "identifiers":[
+ {"id-qualifier":"SA","id":"60"},
+ {"id-qualifier":"IB","id":"0446350109"},
+ {"id-qualifier":"EN","id":"9780446350105"}
+ ],
+ "price":8.75,
+ "desc":[
+ {"BTI":"Windmills of the gods /"},
+ {"BPU":"Warner Books,"},
+ {"BPD":"1988, c1987."},
+ {"BPH":"xiii, 434 p. ;"}
+ ],
+ "quantity":5
+ }
+ ],
+ "line_items":3
+ }]
+ }]
+ }
+
+
--- /dev/null
+ {
+ "recipient":"1556150",
+ "sender":"6666666",
+ "body": [{
+ "ORDERS":[ "order", {
+ "po_number":8,
+ "date":"20100610",
+ "buyer":[{ "id":"6666666" }],
+ "vendor":[ "1556150",
+ {"id-qualifier": 92, "id":"8"}
+ ],
+ "currency":"USD",
+ "items":[
+
+ {
+ "identifiers":[
+ {"id-qualifier":"EN","id":"9780446360272"},
+ {"id-qualifier":"SA","id":"57"},
+ {"id-qualifier":"IB","id":"0446360279"}
+ ],
+ "price":4.50,
+ "desc":[
+ {"BTI":"Webster's new world thesaurus :"},
+ {"BPU":"Warner Books, Inc.,"},
+ {"BPD":"1990."},
+ {"BPH":"xv, 494 p. ;"}
+ ],
+ "quantity":8,
+ "FTX": { "4451": "LIN", "C108": {"4440": "This is a TEST! zzz!"} }
+ },
+ {
+ "identifiers":[
+ {"id-qualifier":"SA","id":"59"},
+ {"id-qualifier":"IB","id":"0446831832"},
+ {"id-qualifier":"EN","id":"9780446357197"}
+ ],
+ "price":7.99,
+ "desc":[
+ {"BTI":"The world is full of divorced women /"},
+ {"BPU":"Warner Books,"},
+ {"BPD":"c1980."},
+ {"BPH":"413 p. ;"}
+ ],
+ "quantity":10
+ },
+ {
+ "identifiers":[
+ {"id-qualifier":"SA","id":"60"},
+ {"id-qualifier":"IB","id":"0446350109"},
+ {"id-qualifier":"EN","id":"9780446350105"}
+ ],
+ "price":8.75,
+ "desc":[
+ {"BTI":"Windmills of the gods /"},
+ {"BPU":"Warner Books,"},
+ {"BPD":"1988, c1987."},
+ {"BPH":"xiii, 434 p. ;"}
+ ],
+ "quantity":5
+ }
+ ],
+ "line_items":3
+ }]
+ }]
+ }
+
+
+
+# json2edi Response:
+$VAR1 = bless( do{\(my $o = 'UNA:+.? \'UNB+UNOB:3+6666666:31B+1556150:31B+100812:2026+1\'UNH+1+ORDERS:D:96A:UN\'BGM+220+8+9\'DTM+137:20100610:102\'NAD+BY+6666666::31B\'NAD+SU+1556150::31B\'NAD+SU+8::92\'CUX+2:USD:9\'LIN+1++9780446360272:EN\'PIA+5+9780446360272:EN+57:SA+0446360279:IB\'IMD+F+BTI+:::Webster?\'s new world thesaurus ?:\'IMD+F+BPU+:::Warner Books, Inc.,\'IMD+F+BPD+:::1990.\'IMD+F+BPH+:::xv, 494 p. ;\'QTY+21:8\'PRI+AAB:4.5\'RFF+LI:8/1\'LIN+2++59:SA\'PIA+5+59:SA+0446831832:IB+9780446357197:EN\'IMD+F+BTI+:::The world is full of divorced women: /\'IMD+F+BPU+:::Warner Books,\'IMD+F+BPD+:::c1980.\'IMD+F+BPH+:::413 p. ;\'QTY+21:10\'PRI+AAB:7.99\'RFF+LI:8/2\'LIN+3++60:SA\'PIA+5+60:SA+0446350109:IB+9780446350105:EN\'IMD+F+BTI+:::Windmills of the gods /\'IMD+F+BPU+:::Warner Books,\'IMD+F+BPD+:::1988, c1987.\'IMD+F+BPH+:::xiii, 434 p. ;\'QTY+21:5\'PRI+AAB:8.75\'RFF+LI:8/3\'UNS+S\'CNT+2:3\'UNT+37+1\'UNZ+1+1\'')}, 'RPC::XML::string' );
--- /dev/null
+
+{
+ "recipient":"1556150",
+ "sender":"6666666",
+ "body": [{
+ "ORDERS":[ "order", {
+ "po_number":8,
+ "date":"20100621",
+ "buyer":[{ "id":"6666666 0001",
+ "id-qualifier": 91 }],
+ "vendor":[ "1556150",
+ {"id-qualifier": 92, "id":"8"}
+ ],
+ "currency":"USD",
+ "items":[
+
+ {
+ "identifiers":[
+ {"id-qualifier":"EN","id":"9780446360272"},
+
+ {"id-qualifier":"IB","id":"0446360279"},
+
+ {"id-qualifier":"SA","id":"57"}
+ ],
+ "price":4.50,
+ "desc":[
+ {"BTI":"Webster's new world thesaurus :"},
+ {"BPU":"Warner Books, Inc.,"},
+ {"BPD":"1990."},
+ {"BPH":"xv, 494 p. ;"}
+ ],
+ "quantity":10
+ },
+ {
+ "identifiers":[
+ {"id-qualifier":"EN","id":"9780446357197"},
+
+ {"id-qualifier":"IB","id":"0446357197"},
+ {"id-qualifier":"IB","id":"0446831832"},
+ {"id-qualifier":"EN","id":"9780446831833"},
+
+
+ {"id-qualifier":"SA","id":"59"}
+ ],
+ "price":7.99,
+ "desc":[
+ {"BTI":"The world is full of divorced women /"},
+ {"BPU":"Warner Books,"},
+ {"BPD":"c1980."},
+ {"BPH":"413 p. ;"}
+ ],
+ "quantity":8
+ },
+ {
+ "identifiers":[
+ {"id-qualifier":"EN","id":"9780446350105"},
+
+ {"id-qualifier":"IB","id":"0446350109"},
+
+ {"id-qualifier":"SA","id":"60"}
+ ],
+ "price":8.75,
+ "desc":[
+ {"BTI":"Windmills of the gods /"},
+ {"BPU":"Warner Books,"},
+ {"BPD":"1988, c1987."},
+ {"BPH":"xiii, 434 p. ;"}
+ ],
+ "quantity":5
+ }
+ ],
+ "line_items":3
+ }]
+ }]
+}
--- /dev/null
+UNA:+.? 'UNB+UNOB:3+123EVER:31B+1556150:31B+100804:1504+1'UNH+1+ORDERS:D:96A:UN'BGM+220+9+9'DTM+137:20100804:102'NAD+BY+123EVER 0001::91'NAD+SU+1556150::31B'NAD+SU+8::92'CUX+2:USD:9'LIN+61++9787777777777:EN'PIA+5+9787777777777:EN+61:SA'IMD+F+BTI+:::Fake Book'QTY+21:3'PRI+AAB:5'RFF+LI:9/61'LIN+63++9781591430476:EN'PIA+5+9781591430476:EN+159143047X:IB+63:SA'IMD+F+BTI+:::Merlin and the discovery of Avalon :in the New World /'IMD+F+BPU+:::Bear & Co.,'IMD+F+BPD+:::c2005.'IMD+F+BPH+:::vi, 231, [14] p. of plates ?:'QTY+21:5'PRI+AAB:7'RFF+LI:9/63'LIN+62++9780446310062:EN'PIA+5+9780446310062:EN+0446310069:IB+0446313033:IB+9780446313032:EN+0446314129:IB'PIA+5+9780446314121:EN+62:SA'IMD+F+BTI+:::Shroud for a nightingale /'IMD+F+BPU+:::Warner Books,'IMD+F+BPD+:::1982, c1971.'IMD+F+BPH+:::287 p. ;'QTY+21:10'PRI+AAB:8'RFF+LI:9/62'UNS+S'CNT+2:3'UNT+35+1'UNZ+1+1'
[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = 'EDI Accounts' %]
<script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/default/conify/global/acq/edi_account.js'> </script>
<script type="text/javascript">