From: atz Date: Thu, 7 Oct 2010 18:48:45 +0000 (+0000) Subject: EDI template update for ORDERS X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d4db369551c2a694d6a7a10c4db1bd55205f209b;p=evergreen%2Fpines.git EDI template update for ORDERS This template produces JSON for the edi translator to convert into actual EDI lines. It now handles vendor-specific requirements for account and sub-account identification, and also transmits notes of the vendor-public variety as FTX segments in the lineitem. git-svn-id: svn://svn.open-ils.org/ILS/trunk@18224 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 995bd0f9b6..e2276c6d9b 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -70,7 +70,7 @@ CREATE TABLE config.upgrade_log ( install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); -INSERT INTO config.upgrade_log (version) VALUES ('0432'); -- Scott McKellar +INSERT INTO config.upgrade_log (version) VALUES ('0433'); -- atz CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index a0c20b0f48..9dc925131f 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -4949,9 +4949,19 @@ INSERT INTO action_trigger.reactor (module, description) INSERT INTO action_trigger.event_definition (id, active, owner, name, hook, validator, reactor, cleanup_success, cleanup_failure, delay, delay_field, group_field, template) - VALUES (23, true, 1, 'PO JEDI', 'acqpo.activated', 'Acq::PurchaseOrderEDIRequired', 'GeneratePurchaseOrderJEDI', NULL, NULL, '00:05:00', NULL, NULL, + VALUES (23, true, 1, 'PO JEDI', 'acqpo.activated', 'Acq::PurchaseOrderEDIRequired', 'GeneratePurchaseOrderJEDI', NULL, NULL, '00:00:00', NULL, NULL, $$[%- USE date -%] -[%# start JEDI document -%] +[%# start JEDI document + # Vendor specific kludges: + # BT - vendcode goes to NAD/BY *suffix* w/ 91 qualifier + # INGRAM - vendcode goes to NAD/BY *segment* w/ 91 qualifier (separately) + # BRODART - vendcode goes to FTX segment (lineitem level) +-%] +[%- +IF target.provider.edi_default.vendcode && target.provider.code == 'BRODART'; + xtra_ftx = target.provider.edi_default.vendcode; +END; +-%] [%- BLOCK big_block -%] { "recipient":"[% target.provider.san %]", @@ -4960,23 +4970,27 @@ $$[%- USE date -%] "ORDERS":[ "order", { "po_number":[% target.id %], "date":"[% date.format(date.now, '%Y%m%d') %]", - "buyer":[{ - [%- IF target.provider.edi_default.vendcode -%] - "id":"[% target.ordering_agency.mailing_address.san _ ' ' _ target.provider.edi_default.vendcode %]", - "id-qualifier": 91 + "buyer":[ + [% IF target.provider.edi_default.vendcode && (target.provider.code == 'BT' || target.provider.name.match('(?i)^BAKER & TAYLOR')) -%] + {"id-qualifier": 91, "id":"[% target.ordering_agency.mailing_address.san _ ' ' _ target.provider.edi_default.vendcode %]"} + [%- ELSIF target.provider.edi_default.vendcode && target.provider.code == 'INGRAM' -%] + {"id":"[% target.ordering_agency.mailing_address.san %]"}, + {"id-qualifier": 91, "id":"[% target.provider.edi_default.vendcode %]"} [%- ELSE -%] - "id":"[% target.ordering_agency.mailing_address.san %]" - [%- END -%] - }], - "vendor":[ + {"id":"[% target.ordering_agency.mailing_address.san %]"} + [%- END -%] + ], + "vendor":[ [%- # target.provider.name (target.provider.id) -%] "[% target.provider.san %]", {"id-qualifier": 92, "id":"[% target.provider.id %]"} ], "currency":"[% target.provider.currency_type %]", + "items":[ - [% FOR li IN target.lineitems %] + [%- FOR li IN target.lineitems %] { + "line_index":"[% li.id %]", "identifiers":[ [%-# li.isbns = helpers.get_li_isbns(li.attributes) %] [% FOR isbn IN helpers.get_li_isbns(li.attributes) -%] [% IF isbn.length == 13 -%] @@ -4985,23 +4999,35 @@ $$[%- USE date -%] {"id-qualifier":"IB","id":"[% isbn %]"}, [%- END %] [% END %] - {"id-qualifier":"SA","id":"[% li.id %]"} + {"id-qualifier":"IN","id":"[% li.id %]"} ], "price":[% li.estimated_unit_price || '0.00' %], "desc":[ - {"BTI":"[% helpers.get_li_attr('title', '', li.attributes) %]"}, + {"BTI":"[% helpers.get_li_attr('title', '', li.attributes) %]"}, {"BPU":"[% helpers.get_li_attr('publisher', '', li.attributes) %]"}, {"BPD":"[% helpers.get_li_attr('pubdate', '', li.attributes) %]"}, {"BPH":"[% helpers.get_li_attr('pagination','', li.attributes) %]"} ], + [%- ftx_vals = []; + FOR note IN li.lineitem_notes; + NEXT UNLESS note.vendor_public == 't'; + ftx_vals.push(note.value); + END; + IF xtra_ftx; ftx_vals.unshift(xtra_ftx); END; + IF ftx_vals.size == 0; ftx_vals.unshift(''); END; # BT needs FTX+LIN for every LI, even if it is an empty one + -%] + + "free-text":[ + [% FOR note IN ftx_vals -%] "[% note %]"[% UNLESS loop.last %], [% END %][% END %] + ], "quantity":[% li.lineitem_details.size %] }[% UNLESS loop.last %],[% END %] [%-# TODO: lineitem details (later) -%] [% END %] ], "line_items":[% target.lineitems.size %] - }] [% # close ORDERS array %] - }] [% # close body array %] + }] [%# close ORDERS array %] + }] [%# close body array %] } [% END %] [% tempo = PROCESS big_block; helpers.escape_json(tempo) %] diff --git a/Open-ILS/src/sql/Pg/upgrade/0433.edi_orders_template.sql b/Open-ILS/src/sql/Pg/upgrade/0433.edi_orders_template.sql new file mode 100644 index 0000000000..0aec927adb --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0433.edi_orders_template.sql @@ -0,0 +1,91 @@ +BEGIN; + +INSERT INTO config.upgrade_log (version) VALUES ('0433'); -- atz + +UPDATE action_trigger.event_definition SET delay='00:00:00', template=$$ +[%- USE date -%] +[%# start JEDI document + # Vendor specific kludges: + # BT - vendcode goes to NAD/BY *suffix* w/ 91 qualifier + # INGRAM - vendcode goes to NAD/BY *segment* w/ 91 qualifier (separately) + # BRODART - vendcode goes to FTX segment (lineitem level) +-%] +[%- +IF target.provider.edi_default.vendcode && target.provider.code == 'BRODART'; + xtra_ftx = target.provider.edi_default.vendcode; +END; +-%] +[%- BLOCK big_block -%] +{ + "recipient":"[% target.provider.san %]", + "sender":"[% target.ordering_agency.mailing_address.san %]", + "body": [{ + "ORDERS":[ "order", { + "po_number":[% target.id %], + "date":"[% date.format(date.now, '%Y%m%d') %]", + "buyer":[ + [% IF target.provider.edi_default.vendcode && (target.provider.code == 'BT' || target.provider.name.match('(?i)^BAKER & TAYLOR')) -%] + {"id-qualifier": 91, "id":"[% target.ordering_agency.mailing_address.san _ ' ' _ target.provider.edi_default.vendcode %]"} + [%- ELSIF target.provider.edi_default.vendcode && target.provider.code == 'INGRAM' -%] + {"id":"[% target.ordering_agency.mailing_address.san %]"}, + {"id-qualifier": 91, "id":"[% target.provider.edi_default.vendcode %]"} + [%- ELSE -%] + {"id":"[% target.ordering_agency.mailing_address.san %]"} + [%- END -%] + ], + "vendor":[ + [%- # target.provider.name (target.provider.id) -%] + "[% target.provider.san %]", + {"id-qualifier": 92, "id":"[% target.provider.id %]"} + ], + "currency":"[% target.provider.currency_type %]", + + "items":[ + [%- FOR li IN target.lineitems %] + { + "line_index":"[% li.id %]", + "identifiers":[ [%-# li.isbns = helpers.get_li_isbns(li.attributes) %] + [% FOR isbn IN helpers.get_li_isbns(li.attributes) -%] + [% IF isbn.length == 13 -%] + {"id-qualifier":"EN","id":"[% isbn %]"}, + [% ELSE -%] + {"id-qualifier":"IB","id":"[% isbn %]"}, + [%- END %] + [% END %] + {"id-qualifier":"IN","id":"[% li.id %]"} + ], + "price":[% li.estimated_unit_price || '0.00' %], + "desc":[ + {"BTI":"[% helpers.get_li_attr('title', '', li.attributes) %]"}, + {"BPU":"[% helpers.get_li_attr('publisher', '', li.attributes) %]"}, + {"BPD":"[% helpers.get_li_attr('pubdate', '', li.attributes) %]"}, + {"BPH":"[% helpers.get_li_attr('pagination','', li.attributes) %]"} + ], + [%- ftx_vals = []; + FOR note IN li.lineitem_notes; + NEXT UNLESS note.vendor_public == 't'; + ftx_vals.push(note.value); + END; + IF xtra_ftx; ftx_vals.unshift(xtra_ftx); END; + IF ftx_vals.size == 0; ftx_vals.unshift(''); END; # BT needs FTX+LIN for every LI, even if it is an empty one + -%] + + "free-text":[ + [% FOR note IN ftx_vals -%] "[% note %]"[% UNLESS loop.last %], [% END %][% END %] + ], + "quantity":[% li.lineitem_details.size %] + }[% UNLESS loop.last %],[% END %] + [%-# TODO: lineitem details (later) -%] + [% END %] + ], + "line_items":[% target.lineitems.size %] + }] [%# close ORDERS array %] + }] [%# close body array %] +} +[% END %] +[% tempo = PROCESS big_block; helpers.escape_json(tempo) %] + +$$ +WHERE id=23; + +COMMIT;