LP#1373690 Midwest Library Service EDI attrs
authorBill Erickson <berickxx@gmail.com>
Thu, 22 Jun 2017 18:49:14 +0000 (14:49 -0400)
committerMike Rylander <mrylander@gmail.com>
Fri, 1 Sep 2017 17:13:30 +0000 (13:13 -0400)
Adds a new default collection of EDI attributes for Midwest Library
Service.  This includes 2 new attributes to support their EDI format:

1. BUYER_ID_ONLY_VENDCODE -- similar to BUYER_ID_INCLUDE_VENDCODE,
   except the buyer SAN is excluded from the NAD+BY segement.

2. INCLUDE_EMPTY_IMD_VALUES -- Render IMD+ fields (title, author,
   edition, etc.) as if they contain values even when they don't.  Empty
   values are included as single-space strings.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Utils/EDIWriter.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/YYYY.data.edi_attr_set.sql

index 6d825f1..2b94467 100644 (file)
@@ -131,10 +131,14 @@ sub compile_po {
             for @{$po->provider->edi_default->attr_set->attr_maps}
     }
 
-    $compiled{buyer_code} = 
-        $compiled{edi_attrs}->{BUYER_ID_INCLUDE_VENDCODE} ? # B&T
-        $compiled{vendor_san}.' '.$po->provider->edi_default->vendcode :
-        $po->provider->edi_default->vendacct;
+    $compiled{buyer_code} = $po->provider->edi_default->vendacct;
+
+    $compiled{buyer_code} = # B&T
+        $compiled{vendor_san}.' '.$po->provider->edi_default->vendcode
+        if $compiled{edi_attrs}->{BUYER_ID_INCLUDE_VENDCODE};
+
+    $compiled{buyer_code} = $po->provider->edi_default->vendcode
+        if $compiled{edi_attrs}->{BUYER_ID_ONLY_VENDCODE}; # MLS
 
     push(@{$compiled{lineitems}}, 
         $self->compile_li($_)) for @{$po->lineitems};
@@ -346,6 +350,12 @@ sub compile_copy {
 # IMD fields should only display the +::: when a value is present
 sub IMD {
     my ($self, $code, $value) = @_;
+
+    $value = ' ' if (
+        $value eq '' &&
+        $self->{compiled}->{edi_attrs}->{INCLUDE_EMPTY_IMD_VALUES}
+    );
+
     if ($value) {
         my $s = '';
         for my $part ($value =~ m/.{1,70}/g) {
@@ -388,8 +398,10 @@ BGM+220+$c{po_id}+9'
 DTM+137:$date:102'
 EDI
 
-    $edi .= "NAD+BY+$c{org_unit_san}::31B'\n"
-        unless $self->{compiled}->{edi_attrs}->{BUYER_ID_INCLUDE_VENDCODE};
+    $edi .= "NAD+BY+$c{org_unit_san}::31B'\n" unless (
+        $self->{compiled}->{edi_attrs}->{BUYER_ID_ONLY_VENDCODE} ||
+        $self->{compiled}->{edi_attrs}->{BUYER_ID_INCLUDE_VENDCODE}
+    );
 
     $edi .= <<EDI;
 NAD+BY+$c{buyer_code}::91'
index 8523778..b42d580 100644 (file)
@@ -17224,6 +17224,9 @@ INSERT INTO acq.edi_attr (key, label) VALUES
     ('BUYER_ID_INCLUDE_VENDCODE', 
         oils_i18n_gettext('BUYER_ID_INCLUDE_VENDCODE', 
         'Buyer ID Qualifier Includes Vendcode', 'aea', 'label')),
+    ('BUYER_ID_ONLY_VENDCODE', 
+        oils_i18n_gettext('BUYER_ID_ONLY_VENDCODE', 
+        'Buyer ID Qualifier Only Contains Vendcode', 'aea', 'label')),
     ('INCLUDE_BIB_EDITION', 
         oils_i18n_gettext('INCLUDE_BIB_EDITION', 
         'Order Lineitems Include Edition Info', 'aea', 'label')),
@@ -17236,6 +17239,9 @@ INSERT INTO acq.edi_attr (key, label) VALUES
     ('COPY_SPEC_CODES', 
         oils_i18n_gettext('COPY_SPEC_CODES', 
         'Order Lineitem Notes Include Copy Spec Codes', 'aea', 'label')),
+    ('INCLUDE_EMPTY_IMD_VALUES', 
+        oils_i18n_gettext('INCLUDE_EMPTY_IMD_VALUES',
+        'Lineitem Title, Author, etc. Fields Are Present Even if Empty', 'aea', 'label')),
     ('INCLUDE_EMPTY_LI_NOTE', 
         oils_i18n_gettext('INCLUDE_EMPTY_LI_NOTE', 
         'Order Lineitem Notes Always Present (Even if Empty)', 'aea', 'label')),
@@ -17266,6 +17272,7 @@ INSERT INTO acq.edi_attr_set (id, label) VALUES (3, 'Brodart Default');
 INSERT INTO acq.edi_attr_set (id, label) VALUES (4, 'Midwest Tape Default');
 INSERT INTO acq.edi_attr_set (id, label) VALUES (5, 'ULS Default');
 INSERT INTO acq.edi_attr_set (id, label) VALUES (6, 'Recorded Books Default');
+INSERT INTO acq.edi_attr_set (id, label) VALUES (7, 'Midwest Library Service');
 
 -- carve out space for mucho defaults
 SELECT SETVAL('acq.edi_attr_set_id_seq'::TEXT, 1000);
@@ -17331,6 +17338,13 @@ INSERT INTO acq.edi_attr_set_map (attr_set, attr) VALUES
     (6, 'INCLUDE_COLLECTION_CODE'),
     (6, 'INCLUDE_OWNING_LIB'),
     (6, 'INCLUDE_QUANTITY'),
-    (6, 'INCLUDE_BIB_PAGINATION')
+    (6, 'INCLUDE_BIB_PAGINATION'),
+
+    -- Midwest Library Service
+    (7, 'INCLUDE_BIB_AUTHOR'),
+    (7, 'INCLUDE_BIB_EDITION'),
+    (7, 'BUYER_ID_ONLY_VENDCODE'),
+    (7, 'INCLUDE_EMPTY_IMD_VALUES')
+
 ;
 
index 7bb42f6..a38a129 100644 (file)
@@ -39,6 +39,9 @@ INSERT INTO acq.edi_attr (key, label) VALUES
     ('BUYER_ID_INCLUDE_VENDCODE', 
         oils_i18n_gettext('BUYER_ID_INCLUDE_VENDCODE', 
         'Buyer ID Qualifier Includes Vendcode', 'aea', 'label')),
+    ('BUYER_ID_ONLY_VENDCODE', 
+        oils_i18n_gettext('BUYER_ID_ONLY_VENDCODE', 
+        'Buyer ID Qualifier Only Contains Vendcode', 'aea', 'label')),
     ('INCLUDE_BIB_EDITION', 
         oils_i18n_gettext('INCLUDE_BIB_EDITION', 
         'Order Lineitems Include Edition Info', 'aea', 'label')),
@@ -51,6 +54,9 @@ INSERT INTO acq.edi_attr (key, label) VALUES
     ('COPY_SPEC_CODES', 
         oils_i18n_gettext('COPY_SPEC_CODES', 
         'Order Lineitem Notes Include Copy Spec Codes', 'aea', 'label')),
+    ('INCLUDE_EMPTY_IMD_VALUES', 
+        oils_i18n_gettext('INCLUDE_EMPTY_IMD_VALUES',
+        'Lineitem Title, Author, etc. Fields Are Present Even if Empty', 'aea', 'label')),
     ('INCLUDE_EMPTY_LI_NOTE', 
         oils_i18n_gettext('INCLUDE_EMPTY_LI_NOTE', 
         'Order Lineitem Notes Always Present (Even if Empty)', 'aea', 'label')),
@@ -81,6 +87,7 @@ INSERT INTO acq.edi_attr_set (id, label) VALUES (3, 'Brodart Default');
 INSERT INTO acq.edi_attr_set (id, label) VALUES (4, 'Midwest Tape Default');
 INSERT INTO acq.edi_attr_set (id, label) VALUES (5, 'ULS Default');
 INSERT INTO acq.edi_attr_set (id, label) VALUES (6, 'Recorded Books Default');
+INSERT INTO acq.edi_attr_set (id, label) VALUES (7, 'Midwest Library Service');
 
 -- carve out space for mucho defaults
 SELECT SETVAL('acq.edi_attr_set_id_seq'::TEXT, 1000);
@@ -146,7 +153,13 @@ INSERT INTO acq.edi_attr_set_map (attr_set, attr) VALUES
     (6, 'INCLUDE_COLLECTION_CODE'),
     (6, 'INCLUDE_OWNING_LIB'),
     (6, 'INCLUDE_QUANTITY'),
-    (6, 'INCLUDE_BIB_PAGINATION')
+    (6, 'INCLUDE_BIB_PAGINATION'),
+
+    -- Midwest Library Service
+    (7, 'INCLUDE_BIB_AUTHOR'),
+    (7, 'INCLUDE_BIB_EDITION'),
+    (7, 'BUYER_ID_ONLY_VENDCODE'),
+    (7, 'INCLUDE_EMPTY_IMD_VALUES')
 ;