From 737866e63a36c62f5d7a9a5478075a86ffbfc39c Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Tue, 11 Sep 2012 12:41:08 -0400 Subject: [PATCH] EDI order template Collect useful information (vendor, etc.) in variables at the top of the template for easier template management. Signed-off-by: Bill Erickson --- edi_order.tt2 | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 edi_order.tt2 diff --git a/edi_order.tt2 b/edi_order.tt2 new file mode 100644 index 0000000000..85562b8f06 --- /dev/null +++ b/edi_order.tt2 @@ -0,0 +1,196 @@ +[%- 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; + VENDOR_INGRAM = 0; + VENDOR_BRODART = 0; + VENDOR_MW_TAPE = 0; + + 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; + 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; + + # END GIR configuration --------------------------------- + +-%] +[%- BLOCK big_block -%] +{ + "recipient":"[% VENDOR_SAN %]", + "sender":"[% ORG_UNIT_SAN %]", + "body": [{ + "ORDERS":[ "order", { + + "po_number":[% target.id %], + + "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":"[% 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) %]"}, + {"BPH":"[% helpers.get_li_attr_jedi('pagination','', li.attributes) %]"} + ], + [%- 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; + #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 %], + + [%- 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