EDI with copies JEDI template; part 1
authorBill Erickson <berick@esilibrary.com>
Fri, 27 Jul 2012 16:11:23 +0000 (12:11 -0400)
committerBill Erickson <berick@esilibrary.com>
Fri, 27 Jul 2012 17:00:25 +0000 (13:00 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.data.jedi_with_copies.sql [new file with mode: 0644]

index f76ae20..8fae55d 100644 (file)
@@ -8050,7 +8050,9 @@ $$
 
 INSERT INTO action_trigger.environment (event_def, path) VALUES 
   (23, 'lineitems.attributes'), 
-  (23, 'lineitems.lineitem_details'), 
+  (23, 'lineitems.lineitem_details.owning_lib'),
+  (23, 'lineitems.lineitem_details.location'),
+  (23, 'lineitems.lineitem_details.fund'),
   (23, 'lineitems.lineitem_notes'), 
   (23, 'ordering_agency.mailing_address'), 
   (23, 'provider'),
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.jedi_with_copies.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.jedi_with_copies.sql
new file mode 100644 (file)
index 0000000..2155700
--- /dev/null
@@ -0,0 +1,139 @@
+UPDATE action_trigger.event_definition SET 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_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 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 %],
+            "copies" : [
+                [%- IF 1 -%]
+                [%- FOR lid IN li.lineitem_details -%]
+                {   [%- IF lid.fund %] "fund" : "[% lid.fund.code %]",[% END -%]
+                    [%- IF lid.cn_label %] "call_number" : "[% lid.cn_label %]", [% END -%]
+                    [%- IF lid.circ_modifier %] "item_type" : "[% lid.circ_modifier %]", [% END -%]
+                    [%- IF lid.location %] "copy_location" : "[% lid.location.name %]", [% END -%]
+                    [%- IF lid.owning_lib %] "owning_lib" : "[% lid.owning_lib.shortname %]", [% END -%]
+                    [%- #chomp %]"copy_id" : "[% lid.eg_copy_id %]" }[% ',' UNLESS loop.last %]
+                [% END -%]
+                [%- END -%]
+             ]
+        }[% 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;
+
+
+-- add copy-related fields to the environment if they're not already there.
+DO $$
+BEGIN
+    PERFORM 1 
+        FROM action_trigger.environment 
+        WHERE 
+            event_def = 23 AND 
+            path = 'lineitems.lineitem_details.owning_lib';
+    IF NOT FOUND THEN
+        INSERT INTO action_trigger.environment (event_def, path) 
+            VALUES (23, 'lineitems.lineitem_details.owning_lib'); 
+    END IF;
+
+    PERFORM 1 
+        FROM action_trigger.environment 
+        WHERE 
+            event_def = 23 AND 
+            path = 'lineitems.lineitem_details.fund';
+    IF NOT FOUND THEN
+        INSERT INTO action_trigger.environment (event_def, path) 
+            VALUES (23, 'lineitems.lineitem_details.fund'); 
+    END IF;
+
+    PERFORM 1 
+        FROM action_trigger.environment 
+        WHERE 
+            event_def = 23 AND 
+            path = 'lineitems.lineitem_details.location';
+    IF NOT FOUND THEN
+        INSERT INTO action_trigger.environment (event_def, path) 
+            VALUES (23, 'lineitems.lineitem_details.location'); 
+    END IF;
+
+    -- remove redundant entry
+    DELETE FROM action_trigger.environment 
+        WHERE event_def = 23 AND path = 'lineitems.lineitem_details'; 
+
+END $$;
+
+
+