[open-ils-commits] r17693 - in branches/rel_2_0/Open-ILS: examples/apache src/edi_translator src/perlmods/OpenILS/Application/Acq src/perlmods/OpenILS/Application/Trigger/Validator/Acq src/perlmods/OpenILS/Utils src/support-scripts src/support-scripts/test-scripts tests/datasets tests/datasets/edi_scratch web/templates/default/conify/global/acq (gmc)
svn at svn.open-ils.org
svn at svn.open-ils.org
Wed Sep 15 09:27:23 EDT 2010
Author: gmc
Date: 2010-09-15 09:27:21 -0400 (Wed, 15 Sep 2010)
New Revision: 17693
Added:
branches/rel_2_0/Open-ILS/tests/datasets/edi_scratch/
Removed:
branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/edi_object.pl
branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ordrsp_parse.pl
Modified:
branches/rel_2_0/Open-ILS/examples/apache/eg_vhost.conf
branches/rel_2_0/Open-ILS/src/edi_translator/README
branches/rel_2_0/Open-ILS/src/edi_translator/test_client.pl
branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/EDI.pm
branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm
branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm
branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm
branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/Cronscript.pm
branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/RemoteAccount.pm
branches/rel_2_0/Open-ILS/src/support-scripts/edi_fetcher.pl
branches/rel_2_0/Open-ILS/src/support-scripts/edi_pusher.pl
branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ftp_ls.pl
branches/rel_2_0/Open-ILS/web/templates/default/conify/global/acq/edi_account.tt2
Log:
backport EDI changes from trunk (r17669:17690,r17692)
EDI work done by Joe Atzberger; highlights of the enhancements are:
* ORDRSP processing improvements
* overhaul of edi_fetcher
* EDI test files
* Beginning of modperl EDI message viewer
Signed-off-by: Galen Charlton <gmc at esilibrary.com>
Modified: branches/rel_2_0/Open-ILS/examples/apache/eg_vhost.conf
===================================================================
--- branches/rel_2_0/Open-ILS/examples/apache/eg_vhost.conf 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/examples/apache/eg_vhost.conf 2010-09-15 13:27:21 UTC (rev 17693)
@@ -27,7 +27,7 @@
# ----------------------------------------------------------------------------------
# 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
# ----------------------------------------------------------------------------------
@@ -442,6 +442,17 @@
</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>
Modified: branches/rel_2_0/Open-ILS/src/edi_translator/README
===================================================================
--- branches/rel_2_0/Open-ILS/src/edi_translator/README 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/edi_translator/README 2010-09-15 13:27:21 UTC (rev 17693)
@@ -26,7 +26,7 @@
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
@@ -36,10 +36,5 @@
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
Modified: branches/rel_2_0/Open-ILS/src/edi_translator/test_client.pl
===================================================================
--- branches/rel_2_0/Open-ILS/src/edi_translator/test_client.pl 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/edi_translator/test_client.pl 2010-09-15 13:27:21 UTC (rev 17693)
@@ -6,9 +6,11 @@
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;
@@ -23,7 +25,7 @@
$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";
@@ -39,49 +41,86 @@
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);
}
- my $resp = $commands[0] eq 'json2edi' ?
- $client->send_request('json2edi', $string) :
- $client->send_request('edi2json', $string) ;
- print "Response: ", Dumper($resp);
- $resp or next;
+ unless ($resp) {
+ warn "Response does not have a payload value!";
+ 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";
@@ -95,10 +134,11 @@
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";
+
Modified: branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/EDI.pm
===================================================================
--- branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/EDI.pm 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/EDI.pm 2010-09-15 13:27:21 UTC (rev 17693)
@@ -17,7 +17,6 @@
use OpenILS::Application::Acq::EDI::Translator;
use Business::EDI;
-use Business::EDI::Segment::BGM;
use Data::Dumper;
our $verbose = 0;
@@ -29,6 +28,8 @@
return $self;
}
+# our $reasons = {}; # cache for acq.cancel_reason rows ?
+
our $translator;
sub translator {
@@ -79,7 +80,7 @@
);
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);
@@ -91,31 +92,59 @@
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;
}
@@ -123,6 +152,40 @@
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
@@ -217,7 +280,7 @@
$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',
@@ -267,7 +330,7 @@
($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;
}
@@ -291,10 +354,13 @@
);
}
+# 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;
@@ -329,34 +395,43 @@
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:
@@ -365,8 +440,9 @@
# 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++;
@@ -375,96 +451,169 @@
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;
- }
- }
- return \@li, $perl; # TODO process perl
-}
+ 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; #?
+ }
-=head2 ->parse_ordrsp($segments, $server, $e)
+ # 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.
-Returns array of lineitems.
+ # 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;
-=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 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;
+ 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;
}
- 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");
+ 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)
+ }
+ }
}
- } 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 @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");
+ 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;
}
- $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);
+ # $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);
}
- push @lins, \@chunks;
- } elsif ($tag ne 'UNH' and $tag ne 'BGM') {
- push @ignored, $tag;
}
}
- @ignored and $logger->debug("EDI: ignoring " . scalar(@ignored) . " segment(s): " . join(', ', @ignored));
- return @lins;
+ return \@messages;
}
-=head2 ->update_li($lineitem_id, $lineitem_object, [$server, $editor])
+# returns message object if processing should continue
+# returns false/undef value if processing should abort
+sub message_object {
+ my $class = shift;
+ my $body = shift or return;
+ my $key = shift if @_;
+ my $keystring = $key || 'UNSPECIFIED';
+
+ my $msg = Business::EDI::Message->new($body);
+ unless ($msg) {
+ $logger->error("EDI interchange message: $keystring body failed Business::EDI constructor. Skipping it.");
+ return;
+ }
+ $key = $msg->code if ! $key; # Now we set the key for reference if it wasn't specified
+ my $val_0065 = $msg->xpath_value('UNH/S009/0065') || '';
+ unless ($val_0065 eq $key) {
+ $logger->error("EDI $key UNH/S009/0065 ('$val_0065') conflicts w/ message type $key. Aborting");
+ return;
+ }
+ my $val_0051 = $msg->xpath_value('UNH/S009/0051') || '';
+ unless ($val_0051 eq 'UN') {
+ $logger->warn("EDI $key UNH/S009/0051 designates '$val_0051', not 'UN' as controlling agency. Attempting to process anyway");
+ }
+ my $val_0054 = $msg->xpath_value('UNH/S009/0054') || '';
+ if ($val_0054) {
+ $logger->info("EDI $key UNH/S009/0054 uses Spec revision version '$val_0054'");
+ # Possible Spec Version limitation
+ # my $yy = $tag_0054 ? substr($val_0054,0,2) : '';
+ # unless ($yy eq '00' or $yy > 94 ...) {
+ # $logger->warn("EDI $key UNH/S009/0051 Spec revision version '$val_0054' not supported");
+ # }
+ } else {
+ $logger->warn("EDI $key UNH/S009/0054 does not reference a known Spec revision version");
+ }
+ return $msg;
+}
+
+=head2 ->eg_li($lineitem_object, [$remote, $server_log_string, $editor])
+
+my $line_item = OpenILS::Application::Acq::EDI->eg_li($edi_line, $remote, "test_server_01", $e);
+
+ $remote is a acq.edi_account Fieldmapper object.
+ $server_log_string is an arbitrary string use to identify the remote host in potential log messages.
+
Updates:
acq.lineitem.estimated_unit_price,
acq.lineitem.state (dependent on mapping codes),
@@ -473,17 +622,49 @@
=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("
@@ -496,12 +677,135 @@
}
}
}
- 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'
+ }
+ }
+ ]
+ ]
+ ]
+ ]
+],
+
Modified: branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm
===================================================================
--- branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm 2010-09-15 13:27:21 UTC (rev 17693)
@@ -94,7 +94,7 @@
}
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 = {
@@ -108,16 +108,16 @@
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};
}
@@ -151,12 +151,12 @@
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}) {
Modified: branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm
===================================================================
--- branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm 2010-09-15 13:27:21 UTC (rev 17693)
@@ -1160,9 +1160,9 @@
# ----------------------------------------------------------------------------
__PACKAGE__->register_method(
- method => 'upload_records',
+ method => 'upload_records',
api_name => 'open-ils.acq.process_upload_records',
- stream => 1,
+ stream => 1,
);
sub upload_records {
@@ -1175,14 +1175,14 @@
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;
@@ -1214,8 +1214,7 @@
$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;
@@ -1223,10 +1222,8 @@
while(1) {
- my $err;
- my $xml;
+ my ($err, $xml, $r);
$count++;
- my $r;
try {
$r = $batch->next;
@@ -1283,7 +1280,7 @@
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;
}
@@ -1315,14 +1312,15 @@
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;
}
@@ -1483,10 +1481,10 @@
__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'}
@@ -1506,10 +1504,10 @@
# 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};
@@ -1544,14 +1542,11 @@
__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/
}
);
@@ -1834,8 +1829,8 @@
__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 {
@@ -1863,10 +1858,10 @@
__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'}
Modified: branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm
===================================================================
--- branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm 2010-09-15 13:27:21 UTC (rev 17693)
@@ -16,8 +16,10 @@
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;
Modified: branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/Cronscript.pm
===================================================================
--- branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/Cronscript.pm 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/Cronscript.pm 2010-09-15 13:27:21 UTC (rev 17693)
@@ -55,7 +55,7 @@
'debug' => 0,
'verbose+' => 0,
'help' => 0,
- 'internal_var' => 'XYZ',
+ # 'internal_var' => 'XYZ',
},
# lockfile => undef,
# session => undef,
Modified: branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/RemoteAccount.pm
===================================================================
--- branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/RemoteAccount.pm 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/perlmods/OpenILS/Utils/RemoteAccount.pm 2010-09-15 13:27:21 UTC (rev 17693)
@@ -24,7 +24,7 @@
our %keyfiles = ();
my %fields = (
- accound_object => undef,
+ account_object => undef,
remote_host => undef,
remote_user => undef,
remote_password => undef,
@@ -327,13 +327,14 @@
# 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;
}
@@ -481,18 +482,20 @@
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;
}
@@ -552,23 +555,37 @@
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;
@@ -641,7 +658,7 @@
$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 (@_) {
Modified: branches/rel_2_0/Open-ILS/src/support-scripts/edi_fetcher.pl
===================================================================
--- branches/rel_2_0/Open-ILS/src/support-scripts/edi_fetcher.pl 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/support-scripts/edi_fetcher.pl 2010-09-15 13:27:21 UTC (rev 17693)
@@ -21,44 +21,164 @@
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,
+};
-OpenILS::Utils::Cronscript->new()->session('open-ils.acq') or die "No session created";
-OpenILS::Utils::CStoreEditor::init();
+my $core = OpenILS::Utils::Cronscript->new($defaults);
+my $opts = $core->MyGetOptions() or die "Getting options failed!";
+my $e = $core->editor();
+my $debug = $opts->{debug};
-sub editor {
- my $ed = OpenILS::Utils::CStoreEditor->new(@_) or die "Failed to get new CStoreEditor";
- return $ed;
+if ($debug) {
+ print join "\n", "OPTIONS:", map {sprintf "%16s: %s", $_, $opts->{$_}} sort keys %$opts;
+ print "\n\n";
}
+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 $e = editor();
-my $set = $e->retrieve_all_acq_edi_account();
+my $set = main_search() or die "No EDI accounts found in database (table: 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) : '') ;
+}
-my $res = OpenILS::Application::Acq::EDI->retrieve_core();
+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($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 at esilibrary.com>
+
+=cut
+
Modified: branches/rel_2_0/Open-ILS/src/support-scripts/edi_pusher.pl
===================================================================
--- branches/rel_2_0/Open-ILS/src/support-scripts/edi_pusher.pl 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/support-scripts/edi_pusher.pl 2010-09-15 13:27:21 UTC (rev 17693)
@@ -112,7 +112,7 @@
$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([
Deleted: branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/edi_object.pl
===================================================================
--- branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/edi_object.pl 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/edi_object.pl 2010-09-15 13:27:21 UTC (rev 17693)
@@ -1,2985 +0,0 @@
-#!/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"
-}
Modified: branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ftp_ls.pl
===================================================================
--- branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ftp_ls.pl 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ftp_ls.pl 2010-09-15 13:27:21 UTC (rev 17693)
@@ -57,7 +57,7 @@
}
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*';
Deleted: branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ordrsp_parse.pl
===================================================================
--- branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ordrsp_parse.pl 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/src/support-scripts/test-scripts/ordrsp_parse.pl 2010-09-15 13:27:21 UTC (rev 17693)
@@ -1,3058 +0,0 @@
-#!/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"
-}
Copied: branches/rel_2_0/Open-ILS/tests/datasets/edi_scratch (from rev 17692, trunk/Open-ILS/tests/datasets/edi_scratch)
Property changes on: branches/rel_2_0/Open-ILS/tests/datasets/edi_scratch
___________________________________________________________________
Name: svn:mergeinfo
+ /trunk/edi_scratch:10932,10935
Modified: branches/rel_2_0/Open-ILS/web/templates/default/conify/global/acq/edi_account.tt2
===================================================================
--- branches/rel_2_0/Open-ILS/web/templates/default/conify/global/acq/edi_account.tt2 2010-09-15 13:13:32 UTC (rev 17692)
+++ branches/rel_2_0/Open-ILS/web/templates/default/conify/global/acq/edi_account.tt2 2010-09-15 13:27:21 UTC (rev 17693)
@@ -1,4 +1,5 @@
[% 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">
More information about the open-ils-commits
mailing list