From 9c044ba109097f75e0da165b65c3a8409a980f57 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 10 Dec 2012 14:59:32 -0500 Subject: [PATCH] Move improved EDI A/t template into SQL seed data Move the temporary .tt2 file (used for ease of development) into the seed data. Note that no upgrade script is provided, since we don't want to overwrite existing EDI templates. Signed-off-by: Bill Erickson --- Open-ILS/src/sql/Pg/950.data.seed-values.sql | 201 +++++++++++++++++++----- edi_order.tt2 | 225 --------------------------- 2 files changed, 160 insertions(+), 266 deletions(-) delete mode 100644 edi_order.tt2 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 e89a2e84b6..2c50b16427 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -7991,47 +7991,104 @@ 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:00:00', NULL, NULL, -$$[%- 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; +$$ +[%- USE date -%] +[% + # extract some commonly used variables + + VENDOR_SAN = target.provider.san; + VENDCODE = target.provider.edi_default.vendcode; + VENDACCT = target.provider.edi_default.vendacct; + ORG_UNIT_SAN = target.ordering_agency.mailing_address.san; + + # set the vendor / provider + + VENDOR_BT = 0; # Baker & Taylor + VENDOR_INGRAM = 0; + VENDOR_BRODART = 0; + VENDOR_MW_TAPE = 0; # Midwest Tape + VENDOR_RB = 0; # Recorded Books + VENDOR_ULS = 0; # ULS + + IF VENDOR_SAN == '1556150'; VENDOR_BT = 1; + ELSIF VENDOR_SAN == '1697684'; VENDOR_BRODART = 1; + ELSIF VENDOR_SAN == '1697978'; VENDOR_INGRAM = 1; + ELSIF VENDOR_SAN == '2549913'; VENDOR_MW_TAPE = 1; + ELSIF VENDOR_SAN == '1113984'; VENDOR_RB = 1; + ELSIF VENDOR_SAN == '1699342'; VENDOR_ULS = 1; + END; + + # if true, pass the PO name as a secondary identifier + # RFF+LI:/li_id + INC_PO_NAME = 0; + IF VENDOR_INGRAM; + INC_PO_NAME = 1; + END; + + # GIR configuration -------------------------------------- + + INC_COPIES = 1; # copies on/off switch + INC_FUND = 0; + INC_CALLNUMBER = 0; + INC_ITEM_TYPE = 1; + INC_LOCATION = 0; + INC_COLLECTION_CODE = 1; + INC_OWNING_LIB = 1; + INC_QUANTITY = 1; + INC_COPY_ID = 0; + + IF VENDOR_BT; + INC_CALLNUMBER = 1; + END; + + IF VENDOR_BRODART; + INC_FUND = 1; + END; + + IF VENDOR_MW_TAPE; + INC_FUND = 1; + INC_COLLECTION_CODE = 0; + INC_ITEM_TYPE = 0; + END; + + # END GIR configuration --------------------------------- + -%] [%- BLOCK big_block -%] { - "recipient":"[% target.provider.san %]", - "sender":"[% target.ordering_agency.mailing_address.san %]", + "recipient":"[% VENDOR_SAN %]", + "sender":"[% ORG_UNIT_SAN %]", "body": [{ "ORDERS":[ "order", { + "po_number":[% target.id %], + + [% IF INC_PO_NAME %] + "po_name":"[% target.name | replace('\/', ' ') | replace('"', '\"') %]", + [% END %] + "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 -%] + [% IF VENDOR_BT %] + {"id-qualifier": 91, "id":"[% ORG_UNIT_SAN %] [% VENDCODE %]"} + [% ELSE %] + {"id":"[% ORG_UNIT_SAN %]"}, + {"id-qualifier": 91, "id":"[% VENDACCT %]"} + [% END %] ], + "vendor":[ - [%- # target.provider.name (target.provider.id) -%] - "[% target.provider.san %]", + "[% VENDOR_SAN %]", {"id-qualifier": 92, "id":"[% target.provider.id %]"} ], + "currency":"[% target.provider.currency_type %]", "items":[ [%- FOR li IN target.lineitems %] { - "line_index":"[% li.id %]", + "line_index":"[% VENDOR_ULS ? loop.count : li.id %]", "identifiers":[ [%-# li.isbns = helpers.get_li_isbns(li.attributes) %] [% FOR isbn IN helpers.get_li_isbns(li.attributes) -%] [% IF isbn.length == 13 -%] @@ -8047,29 +8104,50 @@ END; {"BTI":"[% helpers.get_li_attr_jedi('title', '', li.attributes) %]"}, {"BPU":"[% helpers.get_li_attr_jedi('publisher', '', li.attributes) %]"}, {"BPD":"[% helpers.get_li_attr_jedi('pubdate', '', li.attributes) %]"}, + [% IF VENDOR_ULS -%] + {"BEN":"[% helpers.get_li_attr_jedi('edition', '', li.attributes) %]"}, + {"BAU":"[% helpers.get_li_attr_jedi('author', '', li.attributes) %]"} + [%- ELSE -%] {"BPH":"[% helpers.get_li_attr_jedi('pagination','', li.attributes) %]"} + [%- END %] ], [%- ftx_vals = []; - FOR note IN li.lineitem_notes; + FOR note IN li.lineitem_notes; NEXT UNLESS note.vendor_public == 't'; ftx_vals.push(note.value); END; + IF VENDOR_BRODART; # look for copy-level spec code + FOR lid IN li.lineitem_details; + IF lid.note; + spec_note = lid.note.match('spec code ([a-zA-Z0-9_])'); + IF spec_note.0; ftx_vals.push(spec_note.0); END; + END; + END; + 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 + + # BT & ULS want FTX+LIN for every LI, even if empty + IF ((VENDOR_BT OR VENDOR_ULS) AND ftx_vals.size == 0); + ftx_vals.unshift(''); + END; -%] "free-text":[ [% FOR note IN ftx_vals -%] "[% note %]"[% UNLESS loop.last %], [% END %][% END %] ], + "quantity":[% li.lineitem_details.size %], + + [%- IF INC_COPIES -%] "copies" : [ - [%- IF 1 -%] - [%- FOR lid IN li.lineitem_details; + [%- compressed_copies = []; + FOR lid IN li.lineitem_details; fund = lid.fund.code; item_type = lid.circ_modifier; callnumber = lid.cn_label; owning_lib = lid.owning_lib.shortname; location = lid.location; + collection_code = lid.collection_code; # when we have real copy data, treat it as authoritative for some fields acp = lid.eg_copy_id; @@ -8077,19 +8155,60 @@ END; item_type = acp.circ_modifier; callnumber = acp.call_number.label; location = acp.location.name; - END -%] - { [%- IF fund %] "fund" : "[% fund %]",[% END -%] - [%- IF callnumber %] "call_number" : "[% callnumber %]", [% END -%] - [%- IF item_type %] "item_type" : "[% item_type %]", [% END -%] - [%- IF location %] "copy_location" : "[% location %]", [% END -%] - [%- IF owning_lib %] "owning_lib" : "[% owning_lib %]", [% END -%] - [%- #chomp %]"copy_id" : "[% lid.id %]" }[% ',' UNLESS loop.last %] - [% END -%] - [%- END -%] - ] - }[% UNLESS loop.last %],[% END %] - [%-# TODO: lineitem details (later) -%] - [% END %] + END ; + + + # collapse like copies into groups w/ quantity + + found_match = 0; + IF !INC_COPY_ID; # INC_COPY_ID implies 1 copy per GIR + FOR copy IN compressed_copies; + IF (fund == copy.fund OR (!fund AND !copy.fund)) AND + (item_type == copy.item_type OR (!item_type AND !copy.item_type)) AND + (callnumber == copy.callnumber OR (!callnumber AND !copy.callnumber)) AND + (owning_lib == copy.owning_lib OR (!owning_lib AND !copy.owning_lib)) AND + (location == copy.location OR (!location AND !copy.location)) AND + (collection_code == copy.collection_code OR (!collection_code AND !copy.collection_code)); + + copy.quantity = copy.quantity + 1; + found_match = 1; + END; + END; + END; + + IF !found_match; + compressed_copies.push({ + fund => fund, + item_type => item_type, + callnumber => callnumber, + owning_lib => owning_lib, + location => location, + collection_code => collection_code, + copy_id => li.id, # for INC_COPY_ID + quantity => 1 + }); + END; + END; + FOR copy IN compressed_copies; + + # If we assume owning_lib is required and set, + # it is safe to prepend each following copy field w/ a "," + + %]{[%- IF INC_OWNING_LIB AND copy.owning_lib %] "owning_lib":"[% copy.owning_lib %]"[% END -%] + [%- IF INC_FUND AND copy.fund %],"fund":"[% copy.fund %]"[% END -%] + [%- IF INC_CALLNUMBER AND copy.callnumber %],"call_number":"[% copy.callnumber %]"[% END -%] + [%- IF INC_ITEM_TYPE AND copy.item_type %],"item_type":"[% copy.item_type %]"[% END -%] + [%- IF INC_LOCATION AND copy.location %],"copy_location":"[% copy.location %]"[% END -%] + [%- IF INC_COLLECTION_CODE AND copy.collection_code %],"collection_code":"[% copy.collection_code %]"[% END -%] + [%- IF INC_QUANTITY %],"quantity":"[% copy.quantity %]"[% END -%] + [%- IF INC_COPY_ID %],"copy_id":"[% copy.copy_id %]" [% END %]}[% ',' UNLESS loop.last -%] + [%- END -%] [%# FOR compressed_copies -%] + ] + [%- END -%] [%# IF INC_COPIES %] + + }[% UNLESS loop.last %],[% END -%] + + [% END %] [%# END lineitems %] ], "line_items":[% target.lineitems.size %] }] [%# close ORDERS array %] diff --git a/edi_order.tt2 b/edi_order.tt2 deleted file mode 100644 index cfe8c0a50b..0000000000 --- a/edi_order.tt2 +++ /dev/null @@ -1,225 +0,0 @@ -[%- USE date -%] -[% - # extract some commonly used variables - - VENDOR_SAN = target.provider.san; - VENDCODE = target.provider.edi_default.vendcode; - VENDACCT = target.provider.edi_default.vendacct; - ORG_UNIT_SAN = target.ordering_agency.mailing_address.san; - - # set the vendor / provider - - VENDOR_BT = 0; # Baker & Taylor - VENDOR_INGRAM = 0; - VENDOR_BRODART = 0; - VENDOR_MW_TAPE = 0; # Midwest Tape - VENDOR_RB = 0; # Recorded Books - VENDOR_ULS = 0; # ULS - - IF VENDOR_SAN == '1556150'; VENDOR_BT = 1; - ELSIF VENDOR_SAN == '1697684'; VENDOR_BRODART = 1; - ELSIF VENDOR_SAN == '1697978'; VENDOR_INGRAM = 1; - ELSIF VENDOR_SAN == '2549913'; VENDOR_MW_TAPE = 1; - ELSIF VENDOR_SAN == '1113984'; VENDOR_RB = 1; - ELSIF VENDOR_SAN == '1699342'; VENDOR_ULS = 1; - END; - - # if true, pass the PO name as a secondary identifier - # RFF+LI:/li_id - INC_PO_NAME = 0; - IF VENDOR_INGRAM; - INC_PO_NAME = 1; - END; - - # GIR configuration -------------------------------------- - - INC_COPIES = 1; # copies on/off switch - INC_FUND = 0; - INC_CALLNUMBER = 0; - INC_ITEM_TYPE = 1; - INC_LOCATION = 0; - INC_COLLECTION_CODE = 1; - INC_OWNING_LIB = 1; - INC_QUANTITY = 1; - INC_COPY_ID = 0; - - IF VENDOR_BT; - INC_CALLNUMBER = 1; - END; - - IF VENDOR_BRODART; - INC_FUND = 1; - END; - - IF VENDOR_MW_TAPE; - INC_FUND = 1; - INC_COLLECTION_CODE = 0; - INC_ITEM_TYPE = 0; - END; - - # END GIR configuration --------------------------------- - --%] -[%- BLOCK big_block -%] -{ - "recipient":"[% VENDOR_SAN %]", - "sender":"[% ORG_UNIT_SAN %]", - "body": [{ - "ORDERS":[ "order", { - - "po_number":[% target.id %], - - [% IF INC_PO_NAME %] - "po_name":"[% target.name | replace('\/', ' ') | replace('"', '\"') %]", - [% END %] - - "date":"[% date.format(date.now, '%Y%m%d') %]", - - "buyer":[ - [% IF VENDOR_BT %] - {"id-qualifier": 91, "id":"[% ORG_UNIT_SAN %] [% VENDCODE %]"} - [% ELSE %] - {"id":"[% ORG_UNIT_SAN %]"}, - {"id-qualifier": 91, "id":"[% VENDACCT %]"} - [% END %] - ], - - "vendor":[ - "[% VENDOR_SAN %]", - {"id-qualifier": 92, "id":"[% target.provider.id %]"} - ], - - "currency":"[% target.provider.currency_type %]", - - "items":[ - [%- FOR li IN target.lineitems %] - { - "line_index":"[% VENDOR_ULS ? loop.count : 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_jedi('title', '', li.attributes) %]"}, - {"BPU":"[% helpers.get_li_attr_jedi('publisher', '', li.attributes) %]"}, - {"BPD":"[% helpers.get_li_attr_jedi('pubdate', '', li.attributes) %]"}, - [% IF VENDOR_ULS -%] - {"BEN":"[% helpers.get_li_attr_jedi('edition', '', li.attributes) %]"}, - {"BAU":"[% helpers.get_li_attr_jedi('author', '', li.attributes) %]"} - [%- ELSE -%] - {"BPH":"[% helpers.get_li_attr_jedi('pagination','', li.attributes) %]"} - [%- END %] - ], - [%- ftx_vals = []; - FOR note IN li.lineitem_notes; - NEXT UNLESS note.vendor_public == 't'; - ftx_vals.push(note.value); - END; - IF VENDOR_BRODART; # look for copy-level spec code - FOR lid IN li.lineitem_details; - IF lid.note; - spec_note = lid.note.match('spec code ([a-zA-Z0-9_])'); - IF spec_note.0; ftx_vals.push(spec_note.0); END; - END; - END; - END; - IF xtra_ftx; ftx_vals.unshift(xtra_ftx); END; - - # BT & ULS want FTX+LIN for every LI, even if empty - IF ((VENDOR_BT OR VENDOR_ULS) AND ftx_vals.size == 0); - ftx_vals.unshift(''); - END; - -%] - - "free-text":[ - [% FOR note IN ftx_vals -%] "[% note %]"[% UNLESS loop.last %], [% END %][% END %] - ], - - "quantity":[% li.lineitem_details.size %], - - [%- IF INC_COPIES -%] - "copies" : [ - [%- compressed_copies = []; - FOR lid IN li.lineitem_details; - fund = lid.fund.code; - item_type = lid.circ_modifier; - callnumber = lid.cn_label; - owning_lib = lid.owning_lib.shortname; - location = lid.location; - collection_code = lid.collection_code; - - # when we have real copy data, treat it as authoritative for some fields - acp = lid.eg_copy_id; - IF acp; - item_type = acp.circ_modifier; - callnumber = acp.call_number.label; - location = acp.location.name; - END ; - - - # collapse like copies into groups w/ quantity - - found_match = 0; - IF !INC_COPY_ID; # INC_COPY_ID implies 1 copy per GIR - FOR copy IN compressed_copies; - IF (fund == copy.fund OR (!fund AND !copy.fund)) AND - (item_type == copy.item_type OR (!item_type AND !copy.item_type)) AND - (callnumber == copy.callnumber OR (!callnumber AND !copy.callnumber)) AND - (owning_lib == copy.owning_lib OR (!owning_lib AND !copy.owning_lib)) AND - (location == copy.location OR (!location AND !copy.location)) AND - (collection_code == copy.collection_code OR (!collection_code AND !copy.collection_code)); - - copy.quantity = copy.quantity + 1; - found_match = 1; - END; - END; - END; - - IF !found_match; - compressed_copies.push({ - fund => fund, - item_type => item_type, - callnumber => callnumber, - owning_lib => owning_lib, - location => location, - collection_code => collection_code, - copy_id => li.id, # for INC_COPY_ID - quantity => 1 - }); - END; - END; - FOR copy IN compressed_copies; - - # If we assume owning_lib is required and set, - # it's safe to prepend each following copy field w/ a "," - - %]{[%- IF INC_OWNING_LIB AND copy.owning_lib %] "owning_lib":"[% copy.owning_lib %]"[% END -%] - [%- IF INC_FUND AND copy.fund %],"fund":"[% copy.fund %]"[% END -%] - [%- IF INC_CALLNUMBER AND copy.callnumber %],"call_number":"[% copy.callnumber %]"[% END -%] - [%- IF INC_ITEM_TYPE AND copy.item_type %],"item_type":"[% copy.item_type %]"[% END -%] - [%- IF INC_LOCATION AND copy.location %],"copy_location":"[% copy.location %]"[% END -%] - [%- IF INC_COLLECTION_CODE AND copy.collection_code %],"collection_code":"[% copy.collection_code %]"[% END -%] - [%- IF INC_QUANTITY %],"quantity":"[% copy.quantity %]"[% END -%] - [%- IF INC_COPY_ID %],"copy_id":"[% copy.copy_id %]" [% END %]}[% ',' UNLESS loop.last -%] - [%- END -%] [%# FOR compressed_copies -%] - ] - [%- END -%] [%# IF INC_COPIES %] - - }[% UNLESS loop.last %],[% END -%] - - [% END %] [%# END lineitems %] - ], - "line_items":[% target.lineitems.size %] - }] [%# close ORDERS array %] - }] [%# close body array %] -} -[% END %] -[% tempo = PROCESS big_block; helpers.escape_json(tempo) %] - -- 2.11.0