· 9 years ago · Dec 01, 2016, 03:36 PM
1CREATE OR REPLACE PACKAGE BODY NC_YES_UHE_ON_DEMAND_EXPORT is
2-- (C) 2003 Pilat Media Ltd.
3-- All Rights Reserved.
4--
5-- Pilat Media Ltd considers all information contained in or disclosed by this
6-- script confidential and proprietary. Pilat Media Ltd reserves the right to
7-- use this design in other projects without reference to the recipient.
8--
9-- By accepting this material, the recipient agrees that this material and
10-- the information contained therein will be held in confidence and in trust
11-- and will not be copied or disclosed in whole or in part to any third party.
12--
13-- The following code is managed and updated by Pilat Media Ltd.
14-- This is the latest source code version for the following IBMS database objects.
15
16/************************************************************************
17 * PLEASE DO NOT TOUCH *
18 * *
19 * $Revision: 300251 $ (Source Safe latest version) *
20 * $Author: marianci $ (last Source Safe author) *
21 * $Date: 2016-11-29 12:15:32 +0000 (Tue, 29 Nov 2016) $ (last update) *
22* $Product Version: 6.04.11.34.05 $ *
23 * $Nokeywords: $ (no keyword expansion for all keywords that follow ) *
24 ************************************************************************/
25/*---------------------------------------------------------------------------------------------------------------
26Purpose: Send the VOD Schedule to NDS streamserver 9.0 for VOD 2
27-----------------------------------------------------------------------------------------------------------------
28MODIFICATION HISTORY
29-----------------------------------------------------------------------------------------------------------------
30 Person Date Trckr Comments
31 Monicab 20.07.2015 396635001 Initial Load To SVN
32 Andreit 31.07.2015 399936001 Added get_offer_parental_rating and break_offer_to_uhe API
33 Andreit 03.08.2015 399936001 Minor fixes and tweaks to break_offer_to_uhe API
34 Andreit 04.08.2015 399936001 Fixed break_offer_to_uhe and added new field to collection
35 Andreit 06.08.2015 399936001 Fixed break_offer_to_uhe API FED param type
36 MCiobanu 10.08.2015 399937001 Added Get_Billing_Info procedure which obtains the billing info string.
37 OrenB 25.08.2015 396636001 Merged UHE Offer Export process to the package
38 Monicab 09.09.2015 396635001 Changes after Unit Test on YES Database
39 Monicab 17.09.2015 396635001 Fixed CR Bug 396635001-01
40 OrenB 20.09.2015 396636001 Added format_uri_enum
41 Monicab 23.09.2015 396635001 Fixed CR Bugs 03, 04 ,05
42 Monicab 25.09.2015 396635001 Added v_clssification_term := tbl_tree_node_rec(i).termid;
43 Monicab 01.10.2015 396635001 Add new function in order to get multiple termAttribute elemens.
44 Monicab 01.10.2015 396635001 Fixed get_classif_term_xml function
45 Monicab 07.10.2015 396635001 Added v_term_attribute_final := NULL on uhe_classification_tree_export procedure
46 OrenB 11.10.2015 396635001 Added sending of HTTP requests to the UHE Offer Export process
47 MonicaB 06.11.2015 396635005 Equivalents for 396635004 Task
48 Andreit 06.11.2015 399936004 Fixed break_offer_to_uhe related to CA ProductID, Certification and FED parameters NULL values
49 MCiobanu 06.11.2015 399937004 Fixed a bug where Get_Billing_Info would fail if no marketing info would be attached.
50 Andreit 16.11.2015 399936004 Fixed bug related to null interface Default FED param value
51 Monicab 25.11.2015 396635005 Fixed classif Term URL and resrourceId
52 Monicab 25.11.2015 406897002 Classif Term For Root Node Added
53 Monicab 25.11.2015 406830002 <key> Element Added to Classification Term
54 Andreit 26.11.2015 406903002 Fixed break_offer_to_uhe API for CA Template, Parental Rating and FED params related bugs
55 Monicab 26.11.2015 406830002 Moved <key> element after <presentationMedia>
56 Monicab 26.11.2015 406980002 <parentalGuidance> structure changed, new property added Parental-Rating UHE Code Prefix.
57 property Max Certification Mapping removed
58 MCiobanu 27.11.2015 407079002 Fixed a bug where FED value is not converted to UTC for break_offer_to_uhe procedure.
59 Monicab 27.11.2015 406898002 Removed URN form <mediaType>
60 MCiobanu 24.12.2015 400802001 Implemented support for TSTV offers.
61 Monicab 08.01.2016 406903002 Equivalent for 406903001, error on CA param in break_offer_to_uhe API
62 MonicaB 18.01.2016 408239002 New Function added get_classif_term_pres_media
63 MCiobanu 21.01.2016 407258002 Changed providerRef mapping to use only the value set under ?UHE Default Provider?;
64 groupType for series and show now use hardcoded values.
65 Andreit 21.01.2016 408016002 Improved the break_offer_to_uhe API to support the new Yes requirements: added new Default CA Product Type Property and
66 adapted the UHE Offer ID to replace spaces with underscores as required by Cisco
67 Oren B 21.01.2016 396636004 Added fixes of several minor issues in Offer Export
68 MCiobanu 21.01.2016 407076002 Changed mapping logic for Media Types, Credit Roles, Locale ID; added Genre UHE Code Prefix;
69 Removed UHE Genre, UHE Sub Genre and UHE Code URI Prefix from 708 interface.
70 Monicab 08.02.2016 408925002 Changed l_media_hierarchy whit g_media_hierarchy in Get_Offer_Data API
71 MonicaB 08.02.2016 408363002 Changed STRING_LENGTH_TYPE_SHORT with STRING_LENGTH_TYPE_MEDIUM for synopsis
72 MonicaB 08.02.2016 408154002 CR Yes UHE - TVOD on complex offer needs to complaint with regular TVOD - equivalent
73 MonicaB 09.02.2016 408573002 Changed AND with OR under config_validations API
74 MonicaB 09.02.2016 408364002 Added new functionality in order to export multiple Presentation Media if there is no language selected for the classification term
75 OBunimovic 10.02.2016 408497002 Fixed filter on referenced Offers for classification
76 OBunimovic 10.02.2016 408570002 Corrected formatting for ContentInstanceMetadata elements
77 Osharabi 18.02.2016 409108002 Fixed synopsis and description not contain a extra space
78 OBunimovic 21.02.2016 408493002 Added usage of LTS
79 OBunimovic 29.02.2016 408296002 Changed the logging process of Offer Export
80 OBunimovic 01.03.2016 400802005 Fixed a series of bugs after QA testing: URL and resourceId should contain the same value from id, catchupAvailability and restartAvailability - serviceRef errors,
81 bug in identifying correctly if an offer is linear linked.
82 Osharabi 10.03.2016 408493005 Fixed system take the next available EPG/LTS in Get_Lts_Data procedure
83 Osharabi 13.03.2016 409775001 Fixed Season and Show sortStringEx is only in English.
84 MonicaB 16.03.2016 409921002 Add filter for Presentation Media based on the interface Property ("Presentation Media")
85 OBunimovic 16.03.2016 409918001 Added handling of "phantom" IO Log Element
86 OBunimovic 20.03.2016 410066002 Fixed handling of case where season doesn't have production year
87 MCiobanu 23.03.2016 408296002 Modified a couple of elements according to this enhancement - ContentInstanceMetadata (Program): key,
88 relatedMaterial/RelatedMaterial/contentInstanceRef, presentationMedia/PresentationMedia/contentInstanceRef, ID for TSTV PurchasableTitle
89 OBunimovic 29.03.2016 409918003 Fixed handling of offer deleted from DB in log_process_start
90 Monicab 31.03.2016 410365002 changed e_exception with e_business under Get_Purchase_Offering_Data when break_offer_to_uhe returns an error
91 MonicaB 11.04.2016 410525001 changed the offerBinding@contentInstanceId to match TSTV offer
92 MCiobanu 14.04.2016 410203002 fileSize element now displays integer values.
93 Osharabi 19.04.2016 410836001 Fixed that after deleting a offer the Airing Category in the slot property should be set to false
94 OBunimovic 29.03.2016 409918003 Modified logic of root element in log_contentxml_to_io_log
95 Andreit 28.04.2016 411030002 Fixed Get_Purchase_Offering_Data, when Get_Billing_Info returns error, will raise e_business exception
96 Osharabi 04.05.2016 410836001 Added get_slot_id procedure.
97 TFeder 08.05.2016 411433002 Replaced '&' with '&' for i_message in Http_Post_UHE procedure
98 MonicaB 11.05.2016 411644002 Fixed ORA for "maximum open cursors exceeded" on Classification Tree Export
99 MonicaB 11.05.2016 411644002 Fixed loop conditions so the data will be exported correctly.
100 Osharabi 16.05.2016 408914002 Added new output variables in uhe_classification_tree_export procedure to know if the broadcaster reference is changed.
101 Osharabi 19.05.2016 411739001 Fixed get_slot_id procedure.
102 Marian C 25.05.2016 411433003 reversed above work from 08.05.2016 and created replace_synopsis_chars just to replace synpsis tag special chars - also replace other special char issue see &amp; later
103 Marian C 31.05.2016 411433002 replaced replace_synopsis_chars with a more generic function called replace_with_escape_chars which has the same functionality but for more elements.
104 Osharabi 01.06.2016 408914002 changed o_new_broad_ref from Israel time to UTC time,
105 Osharabi 07.06.2016 412159002 Added service_validation procedure.
106 Marian C 13.06.2016 412556002 No UHE Pres Related Media Type config will now raise an e_business exception and the status will be updated.
107 Marian C 16.06.2016 412398002 Fixed a Season Id issue.
108 MonicaB 22.06.2016 412904002 Added >= under Get_Member_Of_Content_Group, in order to fix Offer with episode 0
109 Osharabi 03.07.2016 412710002 Fixed that Only the EPG with the highest Listing Text will be export and displayed in the xml.
110 Osharabi 03.07.2016 412710002 Fixed the field in condition.
111 Monicab 06.07.2016 413139002 Added startDateTime under PurchaseOffering element.Logic took from OfferPurchasability element.
112 AndreiT 06.07.2016 410533001 Added Get_Offer_Channel_Group_ID and changed Get_Descriptive_Metadata to support the export of the relevant offer ClassificationTerms
113 and also the ones related to the same Channel-Group as the Offer in context
114 Osharabi 12.07.2016 413193001 Fixed that TSTV offers exported one time to UHE
115 AndreiT 18.07.2016 410533004 Fixed Get_Descriptive_Metadata, Get_Offer_Channel_Group_ID to support the Channel-Group single offer items
116 AndreiT 19.07.2016 410533004 Changed Get_Purchasable_Season_Data to support the export of the relevant Series offer ClassificationTerms and also the ones related
117 to the same Channel-Group as the Series Offer in context
118 MonicaB 21.07.2016 413323001 Changed logic on Optimization for Handling of a Series Offers
119 MonicaB 22.07.2016 413323001 Revert changes for live issue fix
120 AndreiT 22.07.2016 413724001 Fixed Get_Purchasable_Season_Data and Get_Descriptive_Metadata issues related to multiple ClassificationsTerms exported
121 MonicaB 25.07.2016 413323001 Changed logic on Optimization for Handling of a Series Offers (CR added after revert)
122 osharabi 26.07.2016 413746001 Fixed that the error message will display in the element tab.
123 OrenB 27.07.2016 413767001 Changed condition for classificationRef
124 Tfeder 28.07.2016 413630001 Changed the condition - Else in config_validations procedure
125 osharabi 28.07.2016 413791001 Changed condition for classificationRef to support PurchasableSeason contains classifications from Series Offers referring to the same Season
126 osharabi 31.07.2016 413746001 Fixed that the error message will indicate what is the problem.
127 osharabi 01.08.2016 413817001 Fixed ID in PurchasableTitle.
128 Marian C 05.08.2016 413322001 Introduced the CollectionContentGroupMetadata (virtual season) for Series or Collection Offers without leading season
129 MonicaB 05.08.2016 413630001 Fixed issue for Offers created in Released for Export not exported
130 MonicaB 05.08.2016 413746001 Fixed issue for Special Category properties not set
131 Marian C 08.08.2016 413322004 Changed marketingMessage element structure; changed order of evaluation for some conditions.
132 Oren B 15.08.2016 413998001 Added additional memberOf elements
133 Oren B 15.08.2016 414128001 Added Get_Start_End_Datetime, disabled several tags for TSTV offers
134 Monica B 24.08.2016 414371001 Removed duplicates for classification reference when season with series offer and single offers have other offers on the catalogue
135 Oren B 24.08.2016 413998001 Fixed condition in loop for additional memberOf elements
136 MonicaB 26.08.2016 414355001 Changed call to on_damand_api SETOFFERSTATUS to include the now inputs
137 MonicaB 02.09.2016 414832001 Fixed issue for UHE - RGR: Timeout Message on I/O File log
138 Oren B 14.09.2016 413998004 Added a condition on memberOF for single item offers
139 TFeder 28.09.2016 413353001 Added PresentationMedia element for Export offer for channel logo associated content
140 AndreiT 28.09.2016 415456001 Changed Get_Collection_Cont_Metadata function, to get only the valid offers that with the Success Status
141 MonicaB 12.10.2016 415574001 Fixed issue when Posters are not exported to UHE for Classification Terms without EPG
142 Oren B 20.10.2016 414531001 Changed conditions for exporting different components
143 Monica B 02.10.2016 416439001 The time zone ID will be selected once in Get_Offer_Data SP, so it will work for each offer type
144 MCiobanu 09.11.2016 416616001 Fixed Get_Virtual_Season_Group_Desc bug for classificationRef element
145 ATurcu 15.11.2016 407275004 Changed uhe_classification_tree_export to export Classification Tree based on Show Classification Category or Show Classification Internal Interface Property conditions
146 and changed Get_Purchasable_Show_Data to support Classification Tree
147 MonicaB 21.11.2016 416911001 Updated Filter for classificationRef, Classification will be exported if the period is selected, and if it has no period added it will be exported only once.
148 ATurcu 23.11.2016 407275004 Fixed get_settings_tree_export to support get property values for Show Classification Category and Show Classification Internal interface properties
149 Marian C 29.11.2016 416571001 Added Get_Classification_Sharing
150--------------- -------- ----- -----------------------------------------------------------------------------*/
151 --Global Constants
152 k_true CONSTANT k.logical%TYPE := k.logical_true;
153 k_false CONSTANT k.logical%TYPE := k.logical_false;
154 k_true_text CONSTANT VARCHAR2(4) := 'true';
155 k_false_text CONSTANT VARCHAR2(5) := 'false';
156 k_colon CONSTANT VARCHAR2(1) :=':';
157 k_comma CONSTANT VARCHAR2(1) :=',';
158 k_slash CONSTANT VARCHAR2(1) :='/';
159 k_space CONSTANT VARCHAR2(1) :=' ';
160 k_underscore CONSTANT VARCHAR2(1) :='_';
161 k_pound CONSTANT VARCHAR2(1) :='#';
162 k_start_of_times CONSTANT VARCHAR2(21) := '1970-01-01T00:00:00Z';
163 k_day_start_time CONSTANT PLS_INTEGER := 0;
164 k_day_end_time CONSTANT PLS_INTEGER := 86400;
165 k_uhe_date_format CONSTANT VARCHAR2(27) := 'YYYY-MM-DD"T"HH24:MI:SS"Z"';
166 k_log_date_format CONSTANT VARCHAR2(27) := 'YYYY-MM-DD HH24:MI:SS';
167 k_year_start CONSTANT VARCHAR2(04) := '0101';
168 k_str_type_long CONSTANT VARCHAR2(23) := 'STRING_LENGTH_TYPE_LONG';
169 k_str_type_med CONSTANT VARCHAR2(25) := 'STRING_LENGTH_TYPE_MEDIUM';--408363001
170 k_eng CONSTANT VARCHAR2(3) := 'ENG';
171 k_error CONSTANT VARCHAR2(1) := 'E';
172 k_info CONSTANT VARCHAR2(1) := 'I';
173 k_start CONSTANT VARCHAR2(1) := 'C';
174 k_infobit_dolby CONSTANT NUMBER := 16;
175 k_infobit_hd_native CONSTANT NUMBER := 32;
176 k_infobit_hd_cont CONSTANT NUMBER := 128;
177 k_hours_in_day CONSTANT NUMBER := 24;
178 k_minutes_in_hour CONSTANT NUMBER := 60;
179 k_seconds_in_minute CONSTANT NUMBER := 60;
180 k_millisec_in_sec CONSTANT NUMBER := 1000;
181 k_seconds_in_day CONSTANT PLS_INTEGER := 24 * 60 * 60;
182 k_title CONSTANT VARCHAR2(2) := 'TI';
183 k_season CONSTANT VARCHAR2(2) := 'MN';
184 k_show CONSTANT VARCHAR2(2) := 'SW';
185 k_series CONSTANT VARCHAR2(6) := 'Series';
186 k_single_item CONSTANT VARCHAR2(17) := 'Single Offer Item';
187 k_coll_assets CONSTANT VARCHAR2(20) := 'Collection of Assets';
188 k_purchase_offering CONSTANT VARCHAR2(2) := 'PO';
189 k_cf CONSTANT VARCHAR2(2) := 'CF';
190 k_fn CONSTANT VARCHAR2(2) := 'FN';
191 k_ln CONSTANT VARCHAR2(2) := 'LN';
192 k_vod_offer CONSTANT VARCHAR2(6) := 'VODOFR';
193 k_vod_offer_ext CONSTANT VARCHAR2(6) := 'VODOFE';
194 k_product_param_typ CONSTANT NUMBER(2) := 7;
195 k_par_rating_param CONSTANT NUMBER(2) := 14;
196 k_fed_param_type CONSTANT NUMBER(2) := 44;
197 k_date_t_character CONSTANT VARCHAR2(1) :='T';
198 k_price_offset CONSTANT NUMBER(1) := 0;
199 k_group_member_inst CONSTANT VARCHAR2(34) := 'GROUP_MEMBER_TYPE_CONTENT_INSTANCE';
200 k_group_member_grp CONSTANT VARCHAR2(34) := 'GROUP_MEMBER_TYPE_CONTENT_GROUP';
201 k_bmp CONSTANT VARCHAR2(3) := 'BMP';
202 k_gif CONSTANT VARCHAR2(3) := 'GIF';
203 k_jpeg CONSTANT VARCHAR2(4) := 'JPEG';
204 k_tiff CONSTANT VARCHAR2(4) := 'TIFF';
205 k_png CONSTANT VARCHAR2(3) := 'PNG';
206 k_image_bmp CONSTANT VARCHAR2(10) := 'image/bmp';
207 k_image_gif CONSTANT VARCHAR2(10) := 'image/gif';
208 k_image_jpeg CONSTANT VARCHAR2(10) := 'image/jpeg';
209 k_image_tiff CONSTANT VARCHAR2(10) := 'image/tiff';
210 k_image_png CONSTANT VARCHAR2(10) := 'image/png';
211 k_text_xml CONSTANT VARCHAR2(10) := 'text/xml';
212 k_create_action CONSTANT VARCHAR2(6) := 'CREATE';
213 k_update_action CONSTANT VARCHAR2(6) := 'UPDATE';
214 k_offer_name_start CONSTANT NUMBER := 40;
215 k_offer_name_length CONSTANT NUMBER := 100;
216 k_service_start CONSTANT NUMBER := 149;
217 k_service_length CONSTANT NUMBER := 100;
218 k_old_value_start CONSTANT NUMBER := 249;
219 k_old_value_length CONSTANT NUMBER := 30;
220 k_new_value_start CONSTANT NUMBER := 285;
221 k_new_value_length CONSTANT NUMBER := 30;
222 k_timestamp_start CONSTANT NUMBER := 0;
223 k_timestamp_length CONSTANT NUMBER := 30;
224 k_export CONSTANT VARCHAR2(1) := 'E';
225 k_delete CONSTANT VARCHAR2(1) := 'D';
226 k_none CONSTANT VARCHAR2(1) := 'N';
227 k_xml_version_encode CONSTANT k.max_varchar2%TYPE := '<?xml version="1.0" encoding="UTF-8"?>';
228 k_xml_version_encode_response CONSTANT k.max_varchar2%TYPE := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
229 k_error_response CONSTANT k.max_varchar2%TYPE := '<ErrorResponse>';
230 k_error_response_f CONSTANT k.max_varchar2%TYPE := '</ErrorResponse>';
231 k_special_char_1 CONSTANT VARCHAR2(1) := '^';
232 k_special_char_2 CONSTANT VARCHAR2(1) := '~';
233 k_number_string CONSTANT VARCHAR2(10) := '0123456789';
234 k_zero CONSTANT VARCHAR2(1) := '0';
235 k_one CONSTANT VARCHAR2(1) := '1';
236 k_main CONSTANT VARCHAR2(4) :='Main';
237 k_eol CONSTANT VARCHAR2(3) := CHR(13)||CHR(10);
238 k_classification_tree CONSTANT k.max_varchar2%TYPE := 'classificationTree:';
239 k_classification_term CONSTANT k.max_varchar2%TYPE := 'ClassificationTerm:';
240 k_image CONSTANT k.max_varchar2%TYPE := 'ImageContentInstanceMetadata:';
241 k_classif_root_node CONSTANT k.max_varchar2%TYPE := 'ClassificationRootNode:';
242 k_classification_node CONSTANT k.max_varchar2%TYPE := 'ClassificationNode:';
243 k_classifTreeRequestEnd CONSTANT k.max_varchar2%TYPE := '</ClassificationTreeRequest>';
244 k_classTreeElementEnd CONSTANT k.max_varchar2%TYPE := '</ClassificationTree>';
245 k_id CONSTANT k.max_varchar2%TYPE := '<id>';
246 k_id_end CONSTANT k.max_varchar2%TYPE := '</id>';
247 k_instantce_type CONSTANT k.max_varchar2%TYPE := 'Image';
248 k_delivery_type CONSTANT k.max_varchar2%TYPE := 'deliveryType/';
249 k_file_format CONSTANT k.max_varchar2%TYPE := 'fileFormat/';
250 k_message_code CONSTANT io_file_log.message_code%TYPE := '61708';
251 k_message_code_exp CONSTANT io_file_log.message_code%TYPE := '62708';
252 k_message_code_del CONSTANT io_file_log.message_code%TYPE := '63708';
253 k_msg_code_exp_start CONSTANT io_file_log.message_code%TYPE := '64708';
254 k_msg_code_del_start CONSTANT io_file_log.message_code%TYPE := '65708';
255 k_date_format CONSTANT VARCHAR2(8) := 'yyyymmdd';
256 k_date_dash CONSTANT VARCHAR2(10) := 'yyyy-mm-dd';
257 k_date_delete_format CONSTANT VARCHAR2(20) := 'DDMMYYYYHH24MISS';
258 k_time_format CONSTANT VARCHAR2(10) := 'HH24:MI:SS';
259 k_object_type CONSTANT VARCHAR2(2) :='CA';
260 k_reference_usage CONSTANT VARCHAR2(3) :='UHE';
261 k_t CONSTANT VARCHAR2(1) := 'T';
262 k_z CONSTANT VARCHAR2(1) := 'Z';
263 k_min_date CONSTANT VARCHAR2(8) := k.min_date;
264 k_date_mask CONSTANT VARCHAR2(8) := k.datemask;
265 k_time_mask CONSTANT VARCHAR2(5) := k.timemask;
266 k_root CONSTANT VARCHAR2(5) := '_ROOT';
267 k_eng_atr CONSTANT VARCHAR2(3) := 'eng';
268 k_label CONSTANT VARCHAR2(5) := 'Label';
269 k_show_group CONSTANT VARCHAR2(40) := 'urn:nnds:mercury:metadata:GroupType/show';
270 k_series_group CONSTANT VARCHAR2(42) := 'urn:nnds:mercury:metadata:GroupType/series';
271 k_ltsttp_tl CONSTANT table_line.table_id%TYPE := 'LTSTTP';
272 k_audio_tl CONSTANT table_line.table_id%TYPE := 'AUDIO';
273 k_vertyp_tl CONSTANT table_line.table_id%TYPE := 'VERTYP';
274 k_resltn_tl CONSTANT table_line.table_id%TYPE := 'RESLTN';
275 k_rescat_tl CONSTANT table_line.table_id%TYPE := 'RESCAT';
276 k_tapetp_tl CONSTANT table_line.table_id%TYPE := 'TAPETP';
277 k_matfor_tl CONSTANT table_line.table_id%TYPE := 'MATFOR';
278 k_caprod_tl CONSTANT table_line.table_id%TYPE := 'CAPROD';
279 k_ttlusg_tl CONSTANT table_line.table_id%TYPE := 'TTLUSG';
280 k_vercer_tl CONSTANT table_line.table_id%TYPE := 'VERCER';
281 k_cast_tl CONSTANT table_line.table_id%TYPE := 'CAST';
282 k_vodofr_tl CONSTANT table_line.table_id%TYPE := 'VODOFR';
283 k_ofrtcc_tl CONSTANT table_line.table_id%TYPE := 'OFRTCC';
284 k_ofrtta_tl CONSTANT table_line.table_id%TYPE := 'OFRTTA';
285 k_vodcls_tl CONSTANT table_line.table_id%TYPE := 'VODCLS';
286 k_vocaty_tl CONSTANT table_line.table_id%TYPE := 'VOCATY';
287 k_stan_tl CONSTANT table_line.table_id%TYPE := 'STAN';
288 k_vodotk_tl CONSTANT table_line.table_id%TYPE := 'VODOTK';
289 k_odoref_tl CONSTANT table_line.table_id%TYPE := 'ODOREF';
290 k_schctx_tl CONSTANT table_line.table_id%TYPE := 'SCHCTX';
291 k_odoref_condon_tc CONSTANT table_line.table_code%TYPE := 'CONDON';
292 k_odoref_stdref_tc CONSTANT table_line.table_code%TYPE := 'STDREF';
293 k_schctx_ofclad_tc CONSTANT table_line.table_code%TYPE := 'OFCLAD';
294 k_schctx_ofclmd_tc CONSTANT table_line.table_code%TYPE := 'OFCLMD';
295 k_schctx_ofclrm_tc CONSTANT table_line.table_code%TYPE := 'OFCLRM';
296 k_ssr9_tstv CONSTANT table_line.table_code%TYPE := 'SITSTV';
297 k_uri_mi_filename_ex CONSTANT VARCHAR2(30) := '<#MI_FILENAME_EXT';
298 k_uri_mi CONSTANT VARCHAR2(10) := '<#MI>';
299 k_uri_asset_delivery_id CONSTANT vod_media_uri_type.type_id%TYPE := 1;
300 k_uri_asset_media_id CONSTANT vod_media_uri_type.type_id%TYPE := 2;
301 k_uri_asset_class_id CONSTANT vod_media_uri_type.type_id%TYPE := 3;
302 k_target_type_code_ver CONSTANT table_line.table_code%TYPE:='VER';
303 k_target_type_code_chg CONSTANT table_line.table_code%TYPE:='CHG';
304 k_lts_channel_group_type CONSTANT channel_group.channel_group_type%TYPE:='LTSGRP';
305
306 k_interface_type CONSTANT interface_parameter.interface_type%TYPE:= '708';
307
308 --Property Constants
309 k_708_classtree_urid_prop CONSTANT ibms_prop.t_property_code := '708_CLASSTREE_URID';--408914001
310 k_708_filter_by_servic_prop CONSTANT ibms_prop.t_property_code := '708_FILTER_BY_SERVIC';
311 k_708_eligible_statuse_prop CONSTANT ibms_prop.t_property_code := '708_ELIGIBLE_STATUSE';
312 k_708_next_tree_status_prop CONSTANT ibms_prop.t_property_code := '708_NEXT_TREE_STATUS';
313 k_708_uhe_pres_related_prop CONSTANT ibms_prop.t_property_code := '708_UHE_PRES_RELATED';
314 k_708_use_src_file_for_prop CONSTANT ibms_prop.t_property_code := '708_USE_SRC_FILE_FOR';
315 k_708_pres_group_class_prop CONSTANT ibms_prop.t_property_code := '708_PRES_GROUP_CLASS';
316 k_708_uhe_resource_uri_prop CONSTANT ibms_prop.t_property_code := '708_UHE_RESOURCE_URI';
317 k_708_uhe_locale_id_prop CONSTANT ibms_prop.t_property_code := '708_UHE_LOCALE_ID';
318 k_708_media_classifica_prop CONSTANT ibms_prop.t_property_code := '708_MEDIA_CLASSIFICA';
319 k_708_default_category_prop CONSTANT ibms_prop.t_property_code := '708_DEFAULT_CATEGORY';
320 k_708_classification_t_prop CONSTANT ibms_prop.t_property_code := '708_CLASSIFICATION_T';
321 k_708_uhe_rest_base_ur_prop CONSTANT ibms_prop.t_property_code := '708_UHE_REST_BASE_UR';
322 k_708_http_timeout_prop CONSTANT ibms_prop.t_property_code := '708_HTTP_TIMEOUT';
323 k_708_uhe_delivery_typ_prop CONSTANT ibms_prop.t_property_code := '708_UHE_DELIVERY_TYP';
324 k_708_offer_status_for_prop CONSTANT ibms_prop.t_property_code := '708_OFFER_STATUS_FOR';
325 k_708_n_status_on_ex_s_prop CONSTANT ibms_prop.t_property_code := '708_N_STATUS_ON_EX_S';
326 k_708_n_status_on_sysf_prop CONSTANT ibms_prop.t_property_code := '708_N_STATUS_ON_SYSF';
327 k_708_next_stat_bus_f_prop CONSTANT ibms_prop.t_property_code := '708_NEXT_STAT_BUS_F';
328 k_708_next_status_defe_prop CONSTANT ibms_prop.t_property_code := '708_NEXT_STATUS_DEFE';
329 k_708_retry_interval_f_prop CONSTANT ibms_prop.t_property_code := '708_RETRY_INTERVAL_F';
330 k_708_retry_for_busine_prop CONSTANT ibms_prop.t_property_code := '708_RETRY_FOR_BUSINE';
331 k_708_retry_deferred_prop CONSTANT ibms_prop.t_property_code := '708_RETRY_DEFERRED';
332 k_708_max_num_of_sysfa_prop CONSTANT ibms_prop.t_property_code := '708_MAX_NUM_OF_SYSFA';
333 k_708_max_num_of_busin_prop CONSTANT ibms_prop.t_property_code := '708_MAX_NUM_OF_BUSIN';
334 k_708_max_num_of_defer_prop CONSTANT ibms_prop.t_property_code := '708_MAX_NUM_OF_DEFER';
335 k_708_status_for_delet_prop CONSTANT ibms_prop.t_property_code := '708_STATUS_FOR_DELET';
336 k_708_next_status_on_d_prop CONSTANT ibms_prop.t_property_code := '708_NEXT_STATUS_ON_D';
337 k_708_next_stat_on_d_f_prop CONSTANT ibms_prop.t_property_code := '708_NEXT_STAT_ON_D_F';
338 k_708_support_epg_lang_prop CONSTANT ibms_prop.t_property_code := '708_SUPPORT_EPG_LANG';
339 k_708_related_material_prop CONSTANT ibms_prop.t_property_code := '708_RELATED_MATERIAL';
340 k_708_copy_protection__prop CONSTANT ibms_prop.t_property_code := '708_COPY_PROTECTION_';
341 k_708_rental_duration__prop CONSTANT ibms_prop.t_property_code := '708_RENTAL_DURATION_';
342 k_708_rental_units_prop CONSTANT ibms_prop.t_property_code := '708_RENTAL_UNITS';
343 k_708_subtitle_compone_prop CONSTANT ibms_prop.t_property_code := '708_SUBTITLE_COMPONE';
344 k_708_content_level_ca_prop CONSTANT ibms_prop.t_property_code := '708_CONTENT_LEVEL_CA';
345 k_708_content_sort_mod_prop CONSTANT ibms_prop.t_property_code := '708_CONTENT_SORT_MOD';
346 k_708_include_programm_prop CONSTANT ibms_prop.t_property_code := '708_INCLUDE_PROGRAMM';
347 k_708_cast_roles_for_e_prop CONSTANT ibms_prop.t_property_code := '708_CAST_ROLES_FOR_E';
348 k_708_cast_alt_lang_prop CONSTANT ibms_prop.t_property_code := '708_CAST_ALT_LANG';
349 k_708_physical_instanc_prop CONSTANT ibms_prop.t_property_code := '708_PHYSICAL_INSTANC';
350 k_708_dolby_services_prop CONSTANT ibms_prop.t_property_code := '708_DOLBY_SERVICES';
351 k_708_average_bit_rate_prop CONSTANT ibms_prop.t_property_code := '708_AVERAGE_BIT_RATE';
352 k_708_cast_alternative_prop CONSTANT ibms_prop.t_property_code := '708_CAST_ALTERNATIVE';
353 k_708_send_calculated__prop CONSTANT ibms_prop.t_property_code := '708_SEND_CALCULATED_';
354 k_708_uhe_show_group_t_prop CONSTANT ibms_prop.t_property_code := '708_UHE_SHOW_GROUP_T';
355 k_708_uhe_show_sub_gro_prop CONSTANT ibms_prop.t_property_code := '708_UHE_SHOW_SUB_GRO';
356 k_708_uhe_default_prov_prop CONSTANT ibms_prop.t_property_code := '708_UHE_DEFAULT_PROV';
357 k_708_uhe_defaut_curr_prop CONSTANT ibms_prop.t_property_code := '708_UHE_DEFAUT_CURR';
358 k_708_uhe_default_prot_prop CONSTANT ibms_prop.t_property_code := '708_UHE_DEFAULT_PROT';
359 k_708_default_classif__prop CONSTANT ibms_prop.t_property_code := '708_DEFAULT_CLASSIF_';
360 k_708_uhe_sound_type_prop CONSTANT ibms_prop.t_property_code := '708_UHE_SOUND_TYPE';
361 k_708_uhe_credit_role_prop CONSTANT ibms_prop.t_property_code := '708_UHE_CREDIT_ROLE';
362 k_708_currency_id_prop CONSTANT ibms_prop.t_property_code := '708_CURRENCY_ID';
363 k_708_uhe_purchase_off_prop CONSTANT ibms_prop.t_property_code := '708_UHE_PURCHASE_OFF';
364 k_708_hard_of_hearing__prop CONSTANT ibms_prop.t_property_code := '708_HARD_OF_HEARING_';
365 k_708_uhe_business_rul_prop CONSTANT ibms_prop.t_property_code := '708_UHE_BUSINESS_RUL';
366 k_708_uhe_pres_map_prop CONSTANT ibms_prop.t_property_code := '708_UHE_PRES_MAP';
367 k_708_default_certific_prop CONSTANT ibms_prop.t_property_code := '708_DEFAULT_CERTIFIC';
368 k_708_default_time_for_prop CONSTANT ibms_prop.t_property_code := '708_DEFAULT_TIME_FOR';
369 k_708_billing_info_par_prop CONSTANT ibms_prop.t_property_code := '708_BILLING_INFO_PAR';
370 k_708_uhe_enum_uri_pre_prop CONSTANT ibms_prop.t_property_code := '708_UHE_ENUM_URI_PRE';
371 k_708_offline_mode_prop CONSTANT ibms_prop.t_property_code := '708_OFFLINE_MODE';
372 k_708_uhe_service_name_prop CONSTANT ibms_prop.t_property_code := '708_UHE_SERVICE_NAME';
373 k_708_uhe_cls_trm_attr_prop CONSTANT ibms_prop.t_property_code := '708_UHE_CLS_TRM_ATTR';
374 k_708_root_clas_trm_id_prop CONSTANT ibms_prop.t_property_code := '708_ROOT_CLAS_TRM_ID';
375 k_708_clas_trm_def_pg_prop CONSTANT ibms_prop.t_property_code := '708_CLAS_TRM_DEF_PG';
376 k_708_prrtg_uhe_cd_prf_prop CONSTANT ibms_prop.t_property_code := '708_PRRTG_UHE_CD_PRF';
377 k_708_genre_uhe_cd_pre_prop CONSTANT ibms_prop.t_property_code := '708_GENRE_UHE_CD_PRE'; --407076001
378 k_708_uhe_other_identi_prop CONSTANT ibms_prop.t_property_code := '708_UHE_OTHER_IDENTI';
379 k_708_sp_air_cat_catch_prop CONSTANT ibms_prop.t_property_code := '708_SP_AIR_CAT_CATCH';
380 k_708_sp_air_cat_resta_prop CONSTANT ibms_prop.t_property_code := '708_SP_AIR_CAT_RESTA';
381 k_708_sp_air_cat_st_pr_prop CONSTANT ibms_prop.t_property_code := '708_SP_AIR_CAT_ST_PR';
382 k_708_uhe_service_id_prop CONSTANT ibms_prop.t_property_code := '708_UHE_SERVICE_ID';
383 k_avail_as_catch_up_prop CONSTANT ibms_prop.t_property_code := 'AVAIL_AS_CATCH_UP';
384 k_avail_as_start_over_prop CONSTANT ibms_prop.t_property_code := 'AVAIL_AS_START_OVER';
385 k_avail_as_start_previ_prop CONSTANT ibms_prop.t_property_code := 'AVAIL_AS_START_PREVI';
386 k_708_def_ca_prod_type_prop CONSTANT ibms_prop.t_property_code := '708_DEF_CA_PROD_TYPE'; --408016001
387 k_708_classif_ch_gr_ty_prop CONSTANT ibms_prop.t_property_code := '708_CLASSIF_CH_GR_TY'; --410533001
388 k_708_ch_logo_term_id_prop CONSTANT ibms_prop.t_property_code := '708_CH_LOGO_TERM_ID';
389 k_708_default_refresh__prop CONSTANT ibms_prop.t_property_code := '708_DEFAULT_REFRESH_';
390 k_708_show_class_categ_prop CONSTANT ibms_prop.t_property_code := '708_SHOW_CLASS_CATEG';--407275004
391 k_708_show_class_inter_prop CONSTANT ibms_prop.t_property_code := '708_SHOW_CLASS_INTER';--407275004
392 k_708_classif_share_va_prop CONSTANT ibms_prop.t_property_code := '708_CLASSIF_SHARE_VA';--416571001
393
394 g_offer_data CLOB:='';
395 g_offer_id vod_offer_schedule_item.offer_id%TYPE;
396 g_platform_id vod_item_schedule.platform_id%TYPE;
397 g_io_file_id io_file_log.file_id%TYPE;
398 g_error_response VARCHAR2(4000);
399 g_media_hierarchy VARCHAR2(7):='SERVICE';
400 g_io_content_xml XMLTYPE;
401
402 g_interface_id table_line.table_id%TYPE := NULL;
403 g_base_url VARCHAR2(100);
404 g_uri_prefix VARCHAR2(50);
405 g_urn_prefix VARCHAR2(50);
406 g_uri_enum_prefix VARCHAR2(50);
407 g_copy_protection VARCHAR2(50);
408 g_default_copy_prot VARCHAR2(50);
409 g_hard_of_hearing component.component_type_id%TYPE;
410 g_subtitle component.component_type_id%TYPE;
411 g_send_calculated NUMBER;
412 g_sort_string VARCHAR2(50);
413 g_default_class NUMBER;
414 g_default_provider VARCHAR2(50);
415 g_use_src_file_img NUMBER;
416 g_copy_prot_ca_val VARCHAR2(100);
417 g_rental_un_ca_val VARCHAR2(100);
418 g_show_group_stype VARCHAR2(50);
419 g_default_cert_code NUMBER;
420 g_default_currency VARCHAR2(50);
421 g_rental_param_nam VARCHAR2(50);
422 g_rental_units NUMBER;
423 g_next_status_update table_line.table_line_isn%TYPE;
424 g_default_category k.max_varchar2%TYPE;
425 g_uhe_based_url k.max_varchar2%TYPE;
426 g_http_timeout NUMBER(4);
427 g_default_parental k.max_varchar2%TYPE;
428 g_name_xml xmltype;
429 g_definition_xml xmltype;
430 g_success_status table_line.table_code%TYPE;
431 g_sysfail_status table_line.table_code%TYPE;
432 g_bizfail_status table_line.table_code%TYPE;
433 g_term_attribute k.max_varchar2%TYPE;
434 g_offline_mode k.logical%TYPE;
435 g_service_namespace VARCHAR2(100);
436 g_series k.logical%TYPE;
437 g_collection k.logical%TYPE;
438 g_virtual_season k.logical%TYPE;
439 g_season_id season.season_id%TYPE;
440 g_show_id show.show_id%TYPE;
441 g_parental_raiting_uri VARCHAR2(100);
442 g_genre_code_prefix VARCHAR2(100); --407076001
443 g_parental_rating VARCHAR2(100); --407076001
444 g_other_identifier VARCHAR2(30);
445 g_tstv_restart table_line.table_code%TYPE;
446 g_tstv_catchup table_line.table_code%TYPE;
447 g_tstv_staprev table_line.table_code%TYPE;
448 g_is_tstv_offer k.logical%TYPE;
449 g_tstv_type table_line.table_code%TYPE;
450 g_ch_logo_term_id_prop NUMBER(10) := NULL;
451 g_default_refresh table_line.table_line_isn%TYPE;
452 g_timezone_id channel.timezone_id%TYPE;
453 g_show_class_categ table_line.table_code%TYPE;
454 g_show_class_inter k.logical%TYPE;
455
456 TYPE response_rec is RECORD (
457 response_seq NUMBER,
458 broadcaster_ref VARCHAR2(40),
459 response_result VARCHAR2(10),
460 msg_type VARCHAR2(1),
461 msg_code NUMBER(8),
462 msg VARCHAR2(2000)
463 );
464
465 TYPE audio_type_tab IS TABLE OF VARCHAR2(50) INDEX BY version.audio%TYPE;
466 gt_audio_type_set audio_type_tab;
467
468 TYPE content_control_ca_tab IS TABLE OF NUMBER INDEX BY ca_template_param_type.ca_param_type%TYPE;
469 gt_content_control_ca_set content_control_ca_tab;
470
471 TYPE vod_platform_tab IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(9);
472 gt_uhe_locale_set vod_platform_tab;
473
474 TYPE avg_bitrate_tab IS TABLE OF VARCHAR2(20) INDEX BY VARCHAR2(19);
475 gt_avg_bitrate avg_bitrate_tab;
476
477 TYPE delivery_type_tab IS TABLE OF VARCHAR2(50) INDEX BY table_line.table_code%TYPE;
478 gt_delivery_type delivery_type_tab;
479
480 TYPE assoc_usage_tab IS TABLE OF NUMBER INDEX BY table_line.table_code%TYPE;
481 gt_related_usage assoc_usage_tab;
482 gt_present_usage assoc_usage_tab;
483
484 TYPE support_epg_tab IS TABLE OF NUMBER INDEX BY language.language_code%TYPE;
485 gt_support_epg_lang support_epg_tab;
486
487 TYPE usage_map_tab IS TABLE OF VARCHAR2(50) INDEX BY table_line.table_code%TYPE;
488 gt_usage_map usage_map_tab;
489
490 TYPE dolby_services_tab IS TABLE OF NUMBER INDEX BY vod_platform.channel_code%TYPE;
491 gt_dolby_services dolby_services_tab;
492
493 TYPE cast_for_export_tab IS TABLE OF NUMBER INDEX BY table_line.table_code%TYPE;
494 gt_cast_for_export cast_for_export_tab;
495
496 TYPE cast_mapping_tab IS TABLE OF VARCHAR(50) INDEX BY table_line.table_code%TYPE;
497 gt_cast_mapping cast_mapping_tab;
498
499 TYPE cast_lang_map_tab IS TABLE OF NUMBER INDEX BY VARCHAR2(9);
500 gt_cast_language_map cast_lang_map_tab;
501
502 TYPE tt_mapped_physical_suffix IS TABLE OF VARCHAR2(512) INDEX BY VARCHAR2(12); -- vc type table code + mat format table code
503 gt_mapped_physical_suffix tt_mapped_physical_suffix;
504
505 TYPE ca_prod_type_map_tab IS TABLE OF VARCHAR2(50) INDEX BY table_line.table_code%TYPE;
506 gt_ca_product_type_map ca_prod_type_map_tab;
507
508 TYPE currency_map_tab IS TABLE OF VARCHAR2(50) INDEX BY currency.currency_code%TYPE;
509 gt_currency_map currency_map_tab;
510
511 TYPE classif_sharing IS TABLE OF table_line.table_code%TYPE INDEX BY table_line.table_code%TYPE;
512 gt_classif_sharing classif_sharing;
513 TYPE genre_map_tab IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(9);
514
515 TYPE tt_id_exists IS TABLE OF NUMBER INDEX BY VARCHAR2(50);
516
517 TYPE tt_status_transition IS TABLE OF table_line.table_code%TYPE INDEX BY table_line.table_code%TYPE;
518 gt_status_transition_exp tt_status_transition;
519 gt_status_transition_del tt_status_transition;
520
521 TYPE rt_rec_media IS RECORD (
522 house_media media_item.house_media%TYPE,
523 format media_item.format%TYPE,
524 capacity media_item.capacity%TYPE
525 );
526 TYPE tt_media IS TABLE OF rt_rec_media INDEX BY VARCHAR2(13); -- version_id(9) + tape_type (4)
527 gt_media tt_media;
528
529 TYPE r_tstv_info IS RECORD
530 (
531 channel_id channel.channel_id%TYPE,
532 offer_item vod_offer_schedule_item.item_schedule_id%TYPE,
533 Utc_Date_Time VARCHAR2(25) ,
534 schedule_item_id schedule_item.schedule_item_id%TYPE,
535 spec_air_cat vod_offer_schedule.special_airing_category%TYPE
536 );
537 TYPE tt_tstv_info IS TABLE OF r_tstv_info;
538 gt_tstv_info tt_tstv_info := tt_tstv_info();
539 TYPE rt_offer_item_main_media IS RECORD (
540 version_copy_id version_copy.version_copy_id%TYPE,
541 media_item_id media_segment.media_item_id%TYPE
542 );
543 TYPE tt_offer_item_main_media IS TABLE OF rt_offer_item_main_media INDEX BY VARCHAR2(9);
544 gt_offer_item_main_media tt_offer_item_main_media;
545
546 --411644001,413353001
547 TYPE rt_classif_term_assoc_media IS RECORD(
548 usage_code table_line.table_code%TYPE,
549 usage_descr table_line.table_description%TYPE,
550 media_item_id media_item.media_item_id%TYPE,
551 house_media media_item.house_media%TYPE,
552 source_file_name multimedia.source_file_name%TYPE,
553 term_id vod_platform_content.term_id%TYPE,
554 width multimedia.width%TYPE,
555 height multimedia.height%TYPE,
556 checksum multimedia.checksum%TYPE,
557 file_format multimedia.format_type%TYPE,
558 iso_639_code language.Iso_639_Code%TYPE,
559 iso_639_3_code language.Iso_639_3_Code%TYPE,
560 tx_type_code tx_tranob.tx_type%TYPE,
561 tx_type_descr tx_tranob.description%TYPE,
562 version_type_code version.version_type%TYPE,
563 version_type_desc table_line.table_description%TYPE,
564 version_copy_id version_copy.version_copy_id%TYPE
565 );
566 r_cls_associated_med_rec rt_classif_term_assoc_media;
567
568 TYPE tt_cls_associated_med_rec IS TABLE OF r_cls_associated_med_rec%TYPE INDEX BY BINARY_INTEGER;
569 gt_tbl_cls_associated_med_rec tt_cls_associated_med_rec;
570
571 TYPE rt_media_assoc IS RECORD (
572 --just like t_r_vitem_media_assoc but with offerId
573 offerId vod_offer.vod_offer_id%TYPE,
574 vod_sch_item_id NUMBER(9),
575 association_type VARCHAR2(10),
576 role_code VARCHAR2(6),
577 role_descr VARCHAR2(30),
578 media_item_id NUMBER(9),
579 segmentNo NUMBER(3),
580 templateName VARCHAR2(100),
581 continuousProgramParts NUMBER(1),
582 resolution VARCHAR2(6),
583 componentTypeId NUMBER(9),
584 componentTypeName VARCHAR2(30),
585 componentLanguageName VARCHAR2(30),
586 componentLanguageCode VARCHAR2(3),
587 componentIso639Code CHAR (2 BYTE),
588 componentIso6393Code CHAR (3 BYTE),
589 parentalRaiting NUMBER(9),
590 horizontalFrameSize NUMBER(9),
591 verticalFrameSize NUMBER(9),
592 categorycode VARCHAR2(6),
593 categorydescription VARCHAR2(30),
594 actualAudioType VARCHAR2(6),
595 versionCopyId NUMBER(9),
596 versionId NUMBER(9),
597 isHd NUMBER(1),
598 txTypeCode VARCHAR2(6),
599 txTypeDescription VARCHAR2(100),
600 versionTypeCode VARCHAR2(6),
601 versionTypeDesc VARCHAR2(30)
602 );
603
604 TYPE tt_media_assoc IS TABLE OF rt_media_assoc;
605 gt_media_assoc tt_media_assoc:=tt_media_assoc();
606
607 TYPE uhe_offer_Rec IS RECORD
608 (
609 purchase_offer_id VARCHAR2(100),
610 business_rule_id ca_instance_param.param_value%TYPE,
611 product_type table_line.table_description%TYPE,
612 product_type_code table_line.table_code%TYPE,
613 ca_param_description ca_template_param.descr%TYPE,
614 ca_param_type_code ca_template_param.param_type%TYPE,
615 ca_param_value ca_instance_param.param_value%TYPE
616 );
617 TYPE tt_uhe_offer_tab IS TABLE OF uhe_offer_Rec;
618
619 TYPE ca_params_rec IS RECORD
620 (
621 offerId vod_offer_schedule.offer_id%TYPE,
622 parameterNumber ca_instance_param.param_num%TYPE,
623 "name" ca_template_param.descr%TYPE,
624 "value" ca_instance_param.param_value%TYPE,
625 paramTypeCode ca_template_param_type.ca_param_type%TYPE,
626 paramTypeDescription ca_template_param_type.description%TYPE,
627 paramSubTypeCode table_line.table_code%TYPE,
628 paramSubTypeDescription table_line.table_description%TYPE
629 );
630 TYPE tt_ca_params IS TABLE OF ca_params_rec;
631 gt_content_control_ca tt_ca_params:=tt_ca_params();
632
633 TYPE ca_params_for_breakdown_rec IS RECORD
634 (
635 offer_id ca_instance.ca_object_id%TYPE,
636 ca_template_id ca_template.ca_template_id%TYPE,
637 ca_template_name ca_template.ui_descr%TYPE,
638 ca_param_num ca_instance_param.param_num%TYPE,
639 ca_param_descr ca_template_param.descr%TYPE,
640 ca_param_type_code ca_template_param.param_type%TYPE,
641 ca_param_type ca_template_param_type.ca_param_type%TYPE,
642 ca_param_value ca_instance_param.param_value%TYPE,
643 next_ca_param_type ca_template_param_type.description%TYPE,
644 next_ca_param_num ca_instance_param.param_value%TYPE
645 );
646
647 TYPE Offer_Classification_Rec IS RECORD
648 (
649 offerId vod_offer_schedule.offer_id%TYPE,
650 classificationTermId vod_platform_content.term_id%TYPE,
651 effectivePeriodStartDate vod_offer_class_period.start_date%TYPE,
652 effectivePeriodStartTime vod_offer_class_period.start_time%TYPE,
653 effectivePeriodFinishDate vod_offer_class_period.end_date%TYPE,
654 effectivePeriodFinishTime vod_offer_class_period.end_time%TYPE,
655 contentId vod_platform_content.content_id%TYPE,
656 presentationOrder vod_offer_classification.presentation_order%TYPE
657 );
658
659 TYPE Object_Media_Assoc_Rec IS RECORD
660 (
661 objectId show.show_id%TYPE,
662 objectType table_line.table_code%TYPE,
663 associationType VARCHAR2(100),
664 roleCode table_line.table_code%TYPE,
665 roleDescr table_line.table_description%TYPE,
666 mediaItemId media_item.media_item_id%TYPE,
667 resolution version_copy.resolution%TYPE,
668 componentTypeId component.component_type_id%TYPE,
669 componentTypeName component_type.component_type_name%TYPE,
670 languageName language.language_name%TYPE,
671 languageCode language.language_code%TYPE,
672 iso639Code language.iso_639_code%TYPE,
673 iso6393Code language.iso_639_3_code%TYPE,
674 parentalRaiting table_line.numeric_1%TYPE,
675 horizontalFrameSize table_line.numeric_1%TYPE,
676 verticalFrameSize table_line.numeric_2%TYPE,
677 categorycode table_line.table_code%TYPE,
678 categorydescription table_line.table_description%TYPE,
679 actualAudioType table_line.table_code%TYPE,
680 versionCopyId version_copy.version_copy_id%TYPE,
681 versionId version.version_id%TYPE,
682 ishd t.logical%TYPE,
683 tx_type_code tx_tranob.tx_type%TYPE,
684 tx_type_description tx_tranob.description%TYPE,
685 version_type_code version.version_type%TYPE,
686 version_type_desc table_line.table_description%TYPE
687 );
688 TYPE tt_object_media_assoc IS TABLE OF Object_Media_Assoc_Rec;
689
690 TYPE rt_lts_set IS RECORD
691 (
692 object_type listing_text_set.object_type%TYPE,
693 object_id NUMBER(30),
694 set_id listing_text_set.set_id%TYPE,
695 set_name listing_text_set.set_name%TYPE,
696 target_type_code table_line.table_code%TYPE,
697 target_type_desc table_line.table_description%TYPE,
698 from_date listing_text_set.from_date%TYPE,
699 to_date listing_text_set.to_date%TYPE,
700 language_code language.language_code%TYPE,
701 title_name listing_set_lang_specific.title_name%TYPE,
702 name_sortable listing_set_lang_specific.title_name%TYPE,
703 synopsis listing_set_lang_specific.synopsis%TYPE,
704 long_description listing_set_lang_specific.long_description%TYPE,
705 marketing_message listing_set_lang_specific.marketing_message%TYPE,
706 langname language.language_name%TYPE,
707 langwincode language.windows_language_code%TYPE,
708 langisocode language.iso_639_code%TYPE,
709 langiso3code language.iso_639_3_code%TYPE,
710 target_code VARCHAR2(200),
711 target_desc VARCHAR2(400)
712 );
713 TYPE tt_lts_set IS TABLE OF rt_lts_set;
714
715 TYPE Main_Media_Rec IS RECORD
716 (
717 associationType VARCHAR2(100),
718 roleCode table_line.table_code%TYPE,
719 roleDescr table_line.table_description%TYPE,
720 mediaItemId media_item.media_item_id%TYPE,
721 segmentNo VARCHAR2(100),
722 templateName VARCHAR2(100),
723 continuousProgramParts VARCHAR2(100),
724 resolution version_copy.resolution%TYPE,
725 componentTypeId component.component_type_id%TYPE,
726 componentTypeName component_type.component_type_name%TYPE,
727 componentLanguageName language.language_name%TYPE,
728 componentLanguageCode language.language_code%TYPE,
729 componentIso639Code language.iso_639_code%TYPE,
730 componentIso6393Code language.iso_639_3_code%TYPE,
731 parentalRating table_line.numeric_1%TYPE,
732 actualAudioType table_line.table_code%TYPE,
733 versionCopyId version_copy.version_copy_id%TYPE,
734 versionId version.version_id%TYPE,
735 ishd t.logical%TYPE,
736 tx_type_code tx_tranob.tx_type%TYPE,
737 tx_type_description tx_tranob.description%TYPE,
738 version_type_code version.version_type%TYPE,
739 version_type_desc table_line.table_description%TYPE
740 );
741
742 TYPE rt_components_to_send IS RECORD
743 (
744 purchasable_title NUMBER,
745 purchasable_season NUMBER,
746 purchasable_show NUMBER,
747 purchase_offering NUMBER
748 );
749
750 --to store mapped value i.e. all properties where atleast we have level 1
751 TYPE t_mapped_value IS TABLE OF property_value_view.value%TYPE INDEX BY k.max_varchar2%TYPE;
752 tbl_prop_mapped t_mapped_value;
753
754 CURSOR c_items (i_offer_id IN vod_offer_schedule_item.offer_id%TYPE) IS
755 SELECT vosi.item_schedule_id,v.title_id,v.version_id,vis.purchase_id, vis.platform_id
756 FROM vod_offer_schedule_item vosi
757 JOIN vod_item_schedule vis ON (vis.item_schedule_id = vosi.item_schedule_id)
758 JOIN version v ON (v.version_id = vis.version_id)
759 WHERE vosi.offer_id = i_offer_id;
760
761 --Exceptions
762 e_error EXCEPTION;
763 e_skip EXCEPTION;
764 e_property EXCEPTION;
765 e_exception EXCEPTION;
766 e_invalid_term EXCEPTION;
767 e_server_fail EXCEPTION;
768 e_business EXCEPTION;
769
770 /*--------------------------------------------------------------------------------
771 FUNCTION: format_date_time
772 Descr: returns a string in the pre-defined format k_uhe_date_format
773 ----------------------------------------------------------------------------------*/
774 FUNCTION format_date_time(i_date IN DATE )
775 RETURN VARCHAR2
776 IS
777 v_return VARCHAR2(20) := NULL;
778
779 BEGIN
780 IF i_date IS NOT NULL THEN
781 v_return := TO_CHAR(i_date, k_uhe_date_format);
782 ELSE
783 v_return := NULL;
784 END IF;
785
786 RETURN v_return;
787 END format_date_time;
788
789 ----------------------------------------------------------------------------------------------
790 -- Returns a utc date time converted based on Channel timezone
791 -- receives date/time as Oracle date and returns a string in the pre-defined format k_uhe_date_format
792 -----------------------------------------------------------------------------------------------
793 FUNCTION format_ora_date_utc ( i_timezone_id IN channel.timezone_id%TYPE,
794 i_ora_date IN DATE)
795 RETURN VARCHAR2
796 IS
797 v_converted_date DATE;
798 v_format_date_time_utc VARCHAR2(20) := NULL;
799 BEGIN
800 IF i_ora_date IS NULL THEN
801 v_format_date_time_utc := NULL;
802 ELSE
803 IF i_timezone_id > 0 THEN
804 v_converted_date := timezones.CHANGE( i_from_timezone_id => i_timezone_id,
805 i_current_date_time => i_ora_date,
806 i_to_timezone_id => 0);
807 v_format_date_time_utc := format_date_time( v_converted_date);
808 ELSE
809 v_format_date_time_utc := format_date_time(i_ora_date);
810 END IF;
811 END IF;
812
813 RETURN v_format_date_time_utc;
814 END format_ora_date_utc;
815
816 -----------------------------
817 -- Function: format_urn
818 -----------------------------
819 FUNCTION format_urn (i_element_name IN VARCHAR2,
820 i_data IN VARCHAR2) return VARCHAR2 IS
821
822 v_ret VARCHAR2(100);
823
824 BEGIN
825
826 RETURN rtrim(g_urn_prefix,k_colon) || k_colon || i_element_name || k_colon|| i_data;
827
828 EXCEPTION
829 WHEN OTHERS THEN
830 RETURN NULL;
831
832 END format_urn;
833
834 -----------------------------
835 -- Function: format_uri
836 -----------------------------
837 FUNCTION format_uri (i_element_name IN VARCHAR2,
838 i_data IN VARCHAR2) RETURN VARCHAR2 IS
839
840 v_ret VARCHAR2(100);
841
842 BEGIN
843 IF g_uri_prefix IS NULL THEN
844 g_interface_id := iface.interface_id(k_interface_type);
845 g_uri_prefix := ibms_prop.get_property_char(k_708_uhe_resource_uri_prop, g_interface_id);
846 END IF;
847
848 RETURN rtrim(g_uri_prefix,k_colon) || k_colon || i_element_name || k_colon|| i_data;
849
850 EXCEPTION
851 WHEN OTHERS THEN
852 RETURN NULL;
853
854 END format_uri;
855
856 -----------------------------
857 -- Function: format_uri_enum
858 -----------------------------
859 FUNCTION format_uri_enum (i_element_name IN VARCHAR2,
860 i_data IN VARCHAR2) RETURN VARCHAR2 IS
861
862 v_ret VARCHAR2(100);
863
864 BEGIN
865 IF g_uri_enum_prefix IS NULL THEN
866 g_interface_id := iface.interface_id(k_interface_type);
867 g_uri_enum_prefix := ibms_prop.get_property_char(k_708_uhe_enum_uri_pre_prop, g_interface_id);
868 END IF;
869
870 RETURN rtrim(g_uri_enum_prefix,k_colon) || k_colon || i_element_name || k_slash|| i_data;
871
872 EXCEPTION
873 WHEN OTHERS THEN
874 RETURN NULL;
875
876 END format_uri_enum;
877
878 -- Procedure: get_settings
879 -----------------------------
880 PROCEDURE get_settings IS
881
882 v_error_reported k.logical%TYPE DEFAULT k_false;
883
884 BEGIN
885 g_error_response := 'No configuration found for property';
886
887 g_interface_id := iface.interface_id(k_interface_type);
888 g_uri_prefix := ibms_prop.get_property_char(k_708_uhe_resource_uri_prop, g_interface_id);
889 g_uri_enum_prefix := ibms_prop.get_property_char(k_708_uhe_enum_uri_pre_prop, g_interface_id);
890 g_copy_protection := ibms_prop.get_property_char(k_708_copy_protection__prop, g_interface_id);
891 g_default_copy_prot := ibms_prop.get_property_char(k_708_uhe_default_prot_prop, g_interface_id);
892 g_hard_of_hearing := ibms_prop.get_property_number(k_708_hard_of_hearing__prop, g_interface_id);
893 g_subtitle := ibms_prop.get_property_number(k_708_subtitle_compone_prop, g_interface_id);
894 g_send_calculated := ibms_prop.get_property_number(k_708_send_calculated__prop, g_interface_id);
895 g_sort_string := ibms_prop.get_property_char(k_708_content_sort_mod_prop, g_interface_id);
896 g_default_class := ibms_prop.get_property_number(k_708_default_classif__prop, g_interface_id);
897 g_default_provider := ibms_prop.get_property_char(k_708_uhe_default_prov_prop, g_interface_id);
898 g_use_src_file_img := ibms_prop.get_property_number(k_708_use_src_file_for_prop, g_interface_id);
899 g_show_group_stype := ibms_prop.get_property_char(k_708_uhe_show_sub_gro_prop, g_interface_id);
900 g_default_cert_code := ibms_prop.get_property_number(k_708_default_certific_prop, g_interface_id);
901 g_default_currency := ibms_prop.get_property_char(k_708_uhe_defaut_curr_prop, g_interface_id);
902 g_rental_param_nam := ibms_prop.get_property_char(k_708_rental_duration__prop, g_interface_id);
903 g_rental_units := ibms_prop.get_property_number(k_708_rental_units_prop, g_interface_id);
904 g_base_url := ibms_prop.get_property_char (k_708_uhe_rest_base_ur_prop,g_interface_id);
905 g_http_timeout := ibms_prop.get_property_number (k_708_http_timeout_prop,g_interface_id);
906 g_offline_mode := ibms_prop.get_property_number (k_708_offline_mode_prop,g_interface_id);
907 g_service_namespace := ibms_prop.get_property_char (k_708_uhe_service_name_prop,g_interface_id);
908 g_genre_code_prefix := ibms_prop.get_property_char (k_708_genre_uhe_cd_pre_prop, g_interface_id); --407076001
909 g_parental_rating := ibms_prop.get_property_char (k_708_prrtg_uhe_cd_prf_prop, g_interface_id); --407076001
910 g_other_identifier := ibms_prop.get_property_char (k_708_uhe_other_identi_prop, g_interface_id);
911 g_default_refresh := ibms_prop.get_property_number (k_708_default_refresh__prop,g_interface_id);
912 g_show_class_categ := table_line_util.table_code(i_table_line_isn => ibms_prop.get_property_number (k_708_show_class_categ_prop,g_interface_id));--407275004
913 g_show_class_inter := ibms_prop.get_property_number (k_708_show_class_inter_prop,g_interface_id);--407275004
914
915
916 BEGIN
917 SELECT table_code
918 INTO g_tstv_restart
919 FROM table_line
920 WHERE table_line_isn = ibms.ibms_prop.get_property_number (k_708_sp_air_cat_resta_prop, g_interface_id);
921 EXCEPTION
922 WHEN NO_DATA_FOUND THEN
923 g_error_response := g_error_response || ' Special Airing Cat - Restart';
924 v_error_reported := k_true;
925
926 END;
927
928 BEGIN
929 SELECT table_code
930 INTO g_tstv_catchup
931 FROM table_line
932 WHERE table_line_isn = ibms.ibms_prop.get_property_number (k_708_sp_air_cat_catch_prop, g_interface_id);
933 EXCEPTION
934 WHEN NO_DATA_FOUND THEN
935 g_error_response := g_error_response || CASE length(g_error_response)
936 WHEN 35 THEN ' Special Airing Cat - Catchup'
937 ELSE ', Special Airing Cat - Catchup'
938 END;
939 v_error_reported := k_true;
940
941 END;
942
943 BEGIN
944 SELECT table_code
945 INTO g_tstv_staprev
946 FROM table_line
947 WHERE table_line_isn = ibms.ibms_prop.get_property_number (k_708_sp_air_cat_st_pr_prop, g_interface_id);
948 EXCEPTION
949 WHEN NO_DATA_FOUND THEN
950 g_error_response := g_error_response || CASE length(g_error_response)
951 WHEN 35 THEN ' Special Airing Cat - Start Pre'
952 ELSE ', Special Airing Cat - Start Pre'
953 END;
954 v_error_reported := k_true;
955
956 END;
957
958 SELECT table_code
959 INTO g_success_status
960 FROM table_line
961 WHERE table_line_isn = ibms_prop.get_property_number (k_708_n_status_on_ex_s_prop,g_interface_id);
962
963 SELECT table_code
964 INTO g_sysfail_status
965 FROM table_line
966 WHERE table_line_isn = ibms_prop.get_property_number (k_708_n_status_on_sysf_prop,g_interface_id);
967
968 SELECT table_code
969 INTO g_bizfail_status
970 FROM table_line
971 WHERE table_line_isn = ibms_prop.get_property_number (k_708_next_stat_bus_f_prop,g_interface_id);
972 gt_audio_type_set.DELETE;
973 FOR v_type IN ( SELECT t.table_code,
974 t.table_line_isn
975 FROM table_line t
976 WHERE t.table_id = k_audio_tl)
977 LOOP
978 gt_audio_type_set(v_type.table_code) := ibms_prop.get_property_char(k_708_uhe_sound_type_prop, g_interface_id, v_type.table_line_isn);
979 END LOOP;
980
981 gt_content_control_ca_set.DELETE;
982 FOR v_ca_param_type IN (select CA_PARAM_TYPE
983 from CA_TEMPLATE_PARAM_TYPE)
984 LOOP
985 IF ibms_prop.get_property_number(k_708_content_level_ca_prop,g_interface_id, v_ca_param_type.ca_param_type) > 0 THEN
986 gt_content_control_ca_set(v_ca_param_type.ca_param_type) := 1;
987 END IF;
988 END LOOP;
989
990 gt_uhe_locale_set.DELETE;
991 FOR v_locale IN ( SELECT to_char(vod_platform_id) as platform_id
992 FROM vod_platform)
993 LOOP
994 IF nvl(ibms_prop.get_property_char(k_708_uhe_locale_id_prop, g_interface_id, v_locale.platform_id),k_space) != k_space THEN
995 gt_uhe_locale_set(v_locale.platform_id) := ibms_prop.get_property_char(k_708_uhe_locale_id_prop, g_interface_id, v_locale.platform_id);
996 END IF;
997 END LOOP;
998
999 gt_dolby_services.DELETE;
1000 FOR v_platform IN ( SELECT channel_code,
1001 vod_platform_id
1002 FROM vod_platform)
1003 LOOP
1004 IF ibms_prop.get_property_number(k_708_dolby_services_prop, g_interface_id, v_platform.vod_platform_id) > 0 THEN
1005 gt_dolby_services(v_platform.channel_code) := 1;
1006 END IF;
1007 END LOOP;
1008
1009 gt_delivery_type.DELETE;
1010 FOR v_delivery_type IN (select table_code,
1011 table_line_isn
1012 from table_line
1013 where table_id = k_tapetp_tl)
1014 LOOP
1015 IF nvl(ibms_prop.get_property_char(k_708_uhe_delivery_typ_prop, g_interface_id, v_delivery_type.table_line_isn),k_space) != k_space THEN
1016 gt_delivery_type(v_delivery_type.table_code) := ibms_prop.get_property_char(k_708_uhe_delivery_typ_prop, g_interface_id, v_delivery_type.table_line_isn);
1017 END IF;
1018
1019 END LOOP;
1020
1021 gt_avg_bitrate.DELETE;
1022 FOR v_avg_set IN (SELECT tapetp.table_line_isn tapetp_isn,
1023 matfor.table_line_isn matfor_isn
1024 FROM table_line tapetp,
1025 table_line matfor
1026 WHERE tapetp.table_id = k_tapetp_tl
1027 AND matfor.table_id = k_matfor_tl
1028 AND matfor.not_selectable = k_false)
1029 LOOP
1030 IF nvl(ibms_prop.get_property_char(k_708_average_bit_rate_prop,g_interface_id,v_avg_set.tapetp_isn,v_avg_set.matfor_isn),k_space) != k_space THEN
1031 gt_avg_bitrate(to_char(v_avg_set.tapetp_isn)||k_slash||to_char(v_avg_set.matfor_isn)):=
1032 ibms_prop.get_property_char(k_708_average_bit_rate_prop,g_interface_id,v_avg_set.tapetp_isn,v_avg_set.matfor_isn);
1033 END IF;
1034 END LOOP;
1035
1036 gt_related_usage.DELETE;
1037 FOR v_usage IN (select table_code,
1038 table_line_isn
1039 from table_line
1040 where table_id = k_ttlusg_tl)
1041 LOOP
1042 IF ibms_prop.get_property_number(k_708_related_material_prop, g_interface_id, v_usage.table_line_isn) >0 THEN
1043 gt_related_usage(v_usage.table_code) := ibms_prop.get_property_number(k_708_related_material_prop, g_interface_id, v_usage.table_line_isn);
1044 END IF;
1045 END LOOP;
1046
1047 gt_present_usage.DELETE;
1048 FOR v_usage IN (select table_code,
1049 table_line_isn
1050 from table_line
1051 where table_id = k_ttlusg_tl)
1052 LOOP
1053 IF ibms_prop.get_property_number(k_708_uhe_pres_related_prop, g_interface_id, v_usage.table_line_isn) >0 THEN
1054 gt_present_usage(v_usage.table_code) := ibms_prop.get_property_number(k_708_uhe_pres_related_prop, g_interface_id, v_usage.table_line_isn);
1055 END IF;
1056 END LOOP;
1057
1058 gt_usage_map.DELETE;
1059 FOR v_usage IN (select table_code,
1060 table_line_isn
1061 from table_line
1062 where table_id = k_ttlusg_tl)
1063 LOOP
1064 IF nvl(ibms_prop.get_property_char(k_708_uhe_pres_map_prop, g_interface_id, v_usage.table_line_isn),k_space) != k_space THEN
1065 gt_usage_map(v_usage.table_code) := ibms_prop.get_property_char(k_708_uhe_pres_map_prop, g_interface_id, v_usage.table_line_isn);
1066 END IF;
1067 END LOOP;
1068
1069 gt_cast_for_export.DELETE;
1070 FOR v_cast IN (select table_code,
1071 table_line_isn
1072 from table_line
1073 where table_id = k_cast_tl)
1074 LOOP
1075 IF ibms_prop.get_property_number(k_708_cast_roles_for_e_prop, g_interface_id, v_cast.table_line_isn) >0 THEN
1076 gt_cast_for_export(v_cast.table_code) := 1;
1077 END IF;
1078 END LOOP;
1079
1080 gt_cast_mapping.DELETE;
1081 FOR v_cast IN ( select table_code,
1082 table_line_isn,
1083 table_description
1084 from table_line
1085 where table_id = k_cast_tl)
1086 LOOP
1087 IF nvl(ibms_prop.get_property_char(k_708_uhe_credit_role_prop, g_interface_id, v_cast.table_line_isn),k_space) != k_space THEN
1088 gt_cast_mapping(v_cast.table_code) := ibms_prop.get_property_char(k_708_uhe_credit_role_prop, g_interface_id, v_cast.table_line_isn);
1089 ELSE gt_cast_mapping(v_cast.table_code) := v_cast.table_description;
1090 END IF;
1091 END LOOP;
1092
1093 gt_cast_language_map.DELETE;
1094 FOR v_lang IN ( select l.language_code,
1095 to_char(l.language_id) as language_id
1096 from language l)
1097 LOOP
1098 IF ibms_prop.get_property_number(k_708_cast_alt_lang_prop, g_interface_id, v_lang.language_id) >0 THEN
1099 gt_cast_language_map(v_lang.language_id) := ibms_prop.get_property_number(k_708_cast_alt_lang_prop, g_interface_id, v_lang.language_id);
1100 ELSE gt_cast_language_map(v_lang.language_id) := v_lang.language_id;
1101 END IF;
1102 END LOOP;
1103
1104 gt_support_epg_lang.DELETE;
1105 FOR v_lang IN ( select l.language_code,
1106 l.language_id
1107 from language l)
1108 LOOP
1109 IF ibms_prop.get_property_number(k_708_support_epg_lang_prop, g_interface_id, v_lang.language_id) >0 THEN
1110 gt_support_epg_lang(v_lang.language_code) := 1;
1111 END IF;
1112 END LOOP;
1113
1114 gt_ca_product_type_map.DELETE;
1115 FOR v_ca_prod_type IN ( select table_code,
1116 table_line_isn
1117 from table_line
1118 where table_id = k_caprod_tl)
1119 LOOP
1120 IF nvl(ibms_prop.get_property_char(k_708_uhe_purchase_off_prop, g_interface_id, v_ca_prod_type.table_line_isn),k_space) != k_space THEN
1121 gt_ca_product_type_map(v_ca_prod_type.table_code) := ibms_prop.get_property_char(k_708_uhe_purchase_off_prop, g_interface_id, v_ca_prod_type.table_line_isn);
1122 END IF;
1123 END LOOP;
1124
1125
1126 gt_currency_map.DELETE;
1127 FOR v_currency IN ( select currency_id,
1128 currency_code
1129 FROM currency)
1130 LOOP
1131 IF nvl(ibms_prop.get_property_char(k_708_currency_id_prop, g_interface_id, v_currency.currency_id),k_space) != k_space THEN
1132 gt_currency_map(v_currency.currency_code) := ibms_prop.get_property_char(k_708_currency_id_prop, g_interface_id, v_currency.currency_id);
1133 END IF;
1134 END LOOP;
1135 gt_classif_sharing.DELETE;
1136 FOR v_stat IN ( SELECT t.table_code
1137 FROM table_line t
1138 WHERE t.table_id = k_vod_offer)
1139 LOOP
1140 IF ibms_prop.get_property_number(k_708_classif_share_va_prop ,g_interface_id, v_stat.table_code) > 0 THEN
1141 gt_classif_sharing(v_stat.table_code) := v_stat.table_code;
1142 END IF;
1143 END LOOP;
1144 --407076001
1145 /*gt_genre_map.DELETE;
1146
1147 FOR v_genre IN ( SELECT genre_id
1148 FROM genre_descr
1149 WHERE lang = k_eng)
1150 LOOP
1151 IF nvl(ibms_prop.get_property_char(k_708_uhe_genre_prop, g_interface_id, v_genre.genre_id),k_space) != k_space THEN
1152 gt_genre_map(to_char(v_genre.genre_id)) := ibms_prop.get_property_char(k_708_uhe_genre_prop, g_interface_id, v_genre.genre_id);
1153 END IF;
1154 END LOOP;
1155
1156
1157 gt_sub_genre_map.DELETE;
1158 FOR v_genre IN ( SELECT full_id
1159 FROM epg_genre_language_view
1160 WHERE language_code = k_eng)
1161 LOOP
1162 IF nvl(ibms_prop.get_property_char(k_708_uhe_sub_genre_prop, g_interface_id, v_genre.full_id),k_space) != k_space THEN
1163 gt_sub_genre_map(to_char(v_genre.full_id)) := ibms_prop.get_property_char(k_708_uhe_sub_genre_prop, g_interface_id, v_genre.full_id);
1164 END IF;
1165 END LOOP;*/
1166 IF v_error_reported = k_true THEN
1167 RAISE e_business;
1168 END IF;
1169 END get_settings;
1170
1171 ----------------------------------
1172 -- Procedure: get_settings_to_wf
1173 ----------------------------------
1174 PROCEDURE get_settings_to_wf (o_wf_settings OUT SYS_REFCURSOR) IS
1175
1176 v_wf_settings SYS_REFCURSOR;
1177
1178 BEGIN
1179
1180 g_interface_id := iface.interface_id(k_interface_type);
1181
1182 OPEN v_wf_settings FOR
1183 SELECT ibms_prop.get_property_char (k_708_uhe_rest_base_ur_prop,g_interface_id) AS Rest_Base_Url,
1184 ibms_prop.get_property_char (k_708_http_timeout_prop,g_interface_id) AS HTTP_Timeout,
1185 (SELECT table_code FROM table_line WHERE table_line_isn =
1186 ibms_prop.get_property_number (k_708_n_status_on_ex_s_prop,g_interface_id)) AS export_success_status,
1187 (SELECT table_code FROM table_line WHERE table_line_isn =
1188 ibms_prop.get_property_number (k_708_next_status_defe_prop,g_interface_id)) AS deferred_offer_Status,
1189 (SELECT table_code FROM table_line WHERE table_line_isn =
1190 ibms_prop.get_property_number (k_708_n_status_on_sysf_prop,g_interface_id)) AS system_fail_status,
1191 (SELECT table_code FROM table_line WHERE table_line_isn =
1192 ibms_prop.get_property_number (k_708_next_stat_bus_f_prop,g_interface_id)) AS business_fail_Status,
1193 (SELECT table_code FROM table_line WHERE table_line_isn =
1194 ibms_prop.get_property_number (k_708_next_status_on_d_prop,g_interface_id)) AS delete_success_status,
1195 (SELECT table_code FROM table_line WHERE table_line_isn =
1196 ibms_prop.get_property_number (k_708_next_stat_on_d_f_prop,g_interface_id)) AS delete_fail_status,
1197 ibms_prop.get_property_number (k_708_offline_mode_prop,g_interface_id) AS offline_mode,
1198 (SELECT table_code FROM table_line WHERE table_line_isn =
1199 ibms.ibms_prop.get_property_number (k_708_sp_air_cat_resta_prop, g_interface_id))AS restart,
1200 (SELECT table_code FROM table_line WHERE table_line_isn =
1201 ibms.ibms_prop.get_property_number (k_708_sp_air_cat_catch_prop, g_interface_id))AS catchup,
1202 (SELECT table_code FROM table_line WHERE table_line_isn =
1203 ibms.ibms_prop.get_property_number (k_708_sp_air_cat_st_pr_prop, g_interface_id)) AS startprev
1204 FROM dual;
1205
1206 o_wf_settings := v_wf_settings;
1207
1208 EXCEPTION
1209 WHEN NO_DATA_FOUND THEN
1210 iface.set_client_info('One of the Next Status properties is not set for interface:'|| k_interface_type, TRUE);
1211 RAISE e_property;
1212 END;
1213
1214 -----------------------------
1215 -- Procedure: get_ca_values
1216 -----------------------------
1217 PROCEDURE get_ca_values (i_offer_id IN vod_offer_schedule.offer_id%TYPE) IS
1218
1219 l_offer_ca_parameters sys_refcursor;
1220 l_error_reported number;
1221 l_error_response sys_refcursor;
1222 l_properties sys_refcursor;
1223 v_error_response response_rec;
1224 v_ca_params ca_params_rec;
1225
1226 BEGIN
1227 on_demand_schedule_util.GetOfferCaParams(i_offer_id => i_offer_id,
1228 o_offer_ca_parameters => l_offer_ca_parameters,
1229 o_error_reported => l_error_reported,
1230 o_error_response => l_error_response,
1231 o_properties => l_properties) ;
1232 IF l_error_reported = 0 THEN
1233 gt_content_control_ca.DELETE;
1234 LOOP
1235 FETCH l_offer_ca_parameters into v_ca_params;
1236 EXIT WHEN l_offer_ca_parameters%NOTFOUND;
1237
1238 IF v_ca_params.paramTypeDescription = g_copy_protection THEN
1239 g_copy_prot_ca_val := v_ca_params."value";
1240 END IF;
1241
1242 IF v_ca_params.paramTypeDescription = g_rental_param_nam THEN
1243 g_rental_un_ca_val := v_ca_params."value";
1244 END IF;
1245
1246 IF gt_content_control_ca_set.EXISTS(v_ca_params.paramtypecode) THEN
1247 gt_content_control_ca.extend();
1248 gt_content_control_ca(gt_content_control_ca.count) := v_ca_params;
1249 END IF;
1250 END LOOP;
1251 ELSE
1252 FETCH l_error_response into v_error_response;
1253 CLOSE l_error_response;
1254 g_error_response := 'Error in GetOfferCaParams: '||v_error_response.msg;
1255 RAISE e_error;
1256 END IF;
1257
1258 CLOSE l_offer_ca_parameters;
1259 END get_ca_values;
1260
1261 -------------------------------------
1262 -- Function: get_offer_parental_rating
1263 --------------------------------------
1264 FUNCTION get_offer_parental_rating(i_offer_id IN vod_offer_schedule.offer_id%TYPE) RETURN NUMBER
1265 IS
1266
1267 CURSOR c_offer_max_cer(i_offer_id IN vod_offer_schedule_item.offer_id%TYPE) IS
1268 SELECT MAX(cer.numeric_1) AS par_rating
1269 FROM vod_offer_schedule_item osi
1270 JOIN vod_item_schedule its ON (its.item_schedule_id = osi.item_schedule_id)
1271 JOIN version v ON (v.version_id = its.version_id)
1272 JOIN title t ON (t.title_id = v.title_id)
1273 LEFT JOIN
1274 table_line cer ON ( cer.table_id = k_vercer_tl
1275 AND cer.table_code = v.certification_code)
1276 WHERE osi.offer_id = i_offer_id;
1277
1278 v_par_rating NUMBER(9) := 0;
1279
1280 BEGIN
1281 OPEN c_offer_max_cer(i_offer_id);
1282 FETCH c_offer_max_cer
1283 INTO v_par_rating;
1284 CLOSE c_offer_max_cer;
1285
1286 RETURN v_par_rating;
1287 END get_offer_parental_rating;
1288
1289 -------------------------------------
1290 -- Function: get_mapped_language_id
1291 --------------------------------------
1292 FUNCTION get_mapped_language_id (i_language_id IN language.language_id%TYPE) return language.language_id%TYPE IS
1293 BEGIN
1294
1295 IF gt_cast_language_map.EXISTS(to_char(i_language_id))
1296 THEN RETURN gt_cast_language_map(to_char(i_language_id));
1297 ELSE RETURN i_language_id;
1298 END IF;
1299
1300 END get_mapped_language_id;
1301
1302 -------------------------------------
1303 -- Function: get_genre_mapping
1304 --------------------------------------
1305/* FUNCTION get_genre_mapping ( i_genre_id IN genre.genre_id%TYPE) RETURN VARCHAR2 IS --407076001
1306
1307 BEGIN
1308
1309 IF gt_genre_map.EXISTS(to_char(i_genre_id)) THEN
1310 RETURN gt_genre_map(to_char(i_genre_id));
1311 ELSIF gt_sub_genre_map.EXISTS(to_char(i_genre_id)) THEN
1312 RETURN gt_sub_genre_map(to_char(i_genre_id));
1313 ELSE RETURN NULL;
1314 END IF;
1315
1316 END get_genre_mapping;*/
1317
1318 -------------------------------------
1319 -- Function: get_epg_info_bits
1320 --------------------------------------
1321 FUNCTION get_epg_info_bits( i_channel_code IN channel.channel_code%TYPE,
1322 i_version_copy_id IN version_copy.version_copy_id%TYPE)
1323 RETURN VARCHAR2
1324 IS
1325 v_key VARCHAR2(20);
1326 v_version_copy_id version_copy.version_copy_id%TYPE := 0;
1327 v_hd_content_bit k.logical%TYPE := 0;
1328 v_hd_native_bit k.logical%TYPE := 0;
1329 v_dolby_audio_bit k.logical%TYPE := 0;
1330
1331 BEGIN
1332
1333 -- If Channel not HD Content, then both HD Flags set to off
1334 IF hd_support.is_hd_channel(0,i_channel_code,to_char(g.now,k.datemask)) = 0 THEN
1335 v_hd_content_bit := 0;
1336 v_hd_native_bit := 0;
1337 ELSE
1338 -- HD Channel Content
1339 v_hd_content_bit := 1;
1340 -- Determine if Programme is HD Native
1341 v_hd_native_bit := hd_support.is_hd_version_copy_id(i_version_copy_id);
1342
1343 --Either both are on or both are off
1344 v_hd_content_bit := v_hd_content_bit * v_hd_native_bit;
1345
1346 END IF;
1347
1348 -- If Channel not Dolby Audio, then Audio flag set to off
1349 IF NOT gt_dolby_services.exists(i_channel_code) THEN
1350 v_dolby_audio_bit := 0;
1351 ELSE
1352 -- Determine if Version Audio is marked as Dolby in System Table
1353 BEGIN
1354 SELECT 1
1355 INTO v_dolby_audio_bit
1356 FROM version_copy vc
1357 WHERE vc.version_copy_id = i_version_copy_id
1358 AND EXISTS ( SELECT 1
1359 FROM component c
1360 JOIN table_line tl_audio ON (c.actual_audio_type_id = tl_audio.table_line_isn)
1361 WHERE c.version_copy_id = vc.version_copy_id
1362 AND tl_audio.logical_2 = k_true);
1363 EXCEPTION
1364 WHEN OTHERS THEN
1365 v_dolby_audio_bit := 0;
1366 END;
1367 END IF;
1368
1369 RETURN Trim(to_char( (k_infobit_hd_cont * v_hd_content_bit) + (k_infobit_hd_native * v_hd_native_bit) + (k_infobit_dolby * v_dolby_audio_bit), '0X'));
1370 END get_epg_info_bits;
1371
1372
1373 -------------------------------------
1374 -- Function: subsititute_uri_media_tags
1375 --------------------------------------
1376 FUNCTION subsititute_uri_media_tags(i_uri_pattern IN vod_media_uri_rule.uri_pattern%TYPE,
1377 i_house_media IN media_item.house_media%TYPE)
1378 RETURN VARCHAR2
1379 IS
1380 v_media_uri vod_snap_media_uri.media_uri%TYPE := substr(i_uri_pattern,1,512); -- length 512
1381 v_mi_filename_start INTEGER;
1382 v_lang_extension VARCHAR2(10);
1383 v_media_has_extension BOOLEAN := instr(i_house_media, k.dot) > 0;
1384 v_media_file_name_only VARCHAR2(100) := strtoken(i_house_media, 1, k.dot);
1385 v_media_file_ext VARCHAR2(100) := strtoken(i_house_media, 2, k.dot);
1386 BEGIN
1387 v_mi_filename_start := instr(v_media_uri, k_uri_mi_filename_ex);
1388 IF v_mi_filename_start > 0 THEN
1389 v_lang_extension := strtoken(substr(v_media_uri,v_mi_filename_start), 2, '"') ;
1390 v_media_uri := substr(v_media_uri, 1, v_mi_filename_start-1) -- bit of pattern before k_uri_mi_filename_ex tag
1391 || v_media_file_name_only
1392 || v_lang_extension
1393 || CASE WHEN v_media_has_extension THEN k.dot END
1394 || v_media_file_ext;
1395 ELSE
1396 v_media_uri := REPLACE(v_media_uri, k_uri_mi, i_house_media);
1397 END IF;
1398
1399 RETURN substr(v_media_uri, 1, 512);
1400 END subsititute_uri_media_tags;
1401
1402 -------------------------------------
1403 -- Function: get_rule_media_uri
1404 --------------------------------------
1405 FUNCTION get_rule_media_uri(i_rule_type IN vod_media_uri_rule.type_id%TYPE,
1406 i_house_media IN media_item.house_media%TYPE,
1407 i_platform_id IN vod_media_uri_rule.type_id%TYPE,
1408 i_language_id IN vod_media_uri_rule.language_id%TYPE DEFAULT 0,
1409 i_usage_type_id IN vod_media_uri_rule.usage_type_id%TYPE DEFAULT 0,
1410 i_custom_1 IN vod_media_uri_rule.custom_1%TYPE DEFAULT NULL,
1411 i_version_copy_type_id IN vod_media_uri_rule.version_copy_type_id%TYPE DEFAULT 0,
1412 i_material_format_id IN vod_media_uri_rule.material_format_id%TYPE DEFAULT 0)
1413 RETURN VARCHAR2
1414 IS
1415 v_media_uri_pattern vod_snap_media_uri.media_uri%TYPE; -- length 512
1416 v_match BOOLEAN := FALSE;
1417 v_default_uri_pattern vod_media_uri_rule.uri_pattern%TYPE := NULL;
1418 CURSOR c_rules IS
1419 SELECT r.custom_1,
1420 r.language_id,
1421 r.material_format_id,
1422 r.usage_type_id,
1423 r.version_copy_type_id,
1424 r.vod_platform_id,
1425 r.uri_pattern,
1426 r.default_rule
1427 FROM vod_media_uri_rule r
1428 WHERE r.active = k_true
1429 AND r.type_id = i_rule_type
1430 ORDER BY r.default_rule; -- ensures that Default Rules applied last
1431 BEGIN
1432 FOR v_rule IN c_rules
1433 LOOP
1434 v_match := (CASE WHEN v_rule.language_id <=0 THEN TRUE ELSE v_rule.language_id = i_language_id END)
1435 AND (CASE WHEN v_rule.material_format_id <=0 THEN TRUE ELSE v_rule.material_format_id = i_material_format_id END)
1436 AND (CASE WHEN v_rule.usage_type_id <=0 THEN TRUE ELSE v_rule.usage_type_id = i_usage_type_id END)
1437 AND (CASE WHEN v_rule.version_copy_type_id <=0 THEN TRUE ELSE v_rule.version_copy_type_id = i_version_copy_type_id END)
1438 AND (CASE WHEN v_rule.vod_platform_id <=0 THEN TRUE ELSE v_rule.vod_platform_id = i_platform_id END);
1439 IF v_match THEN
1440 v_media_uri_pattern := v_rule.uri_pattern;
1441 EXIT;
1442 END IF;
1443 IF v_default_uri_pattern IS NULL AND v_rule.default_rule = k_true THEN
1444 v_default_uri_pattern := v_rule.uri_pattern;
1445 END IF;
1446 END LOOP;
1447 --
1448 -- Revert to default if no match found
1449 IF NOT v_match THEN
1450 v_media_uri_pattern := v_default_uri_pattern;
1451 END IF;
1452
1453 v_media_uri_pattern:=REPLACE(REPLACE(v_media_uri_pattern,CHR(14844060),'"'),CHR(14844061),'"');
1454
1455 RETURN subsititute_uri_media_tags(
1456 i_uri_pattern => v_media_uri_pattern,
1457 i_house_media => i_house_media);
1458 END get_rule_media_uri;
1459
1460 -------------------------------------
1461 -- Function: get_mapped_physical_suffix
1462 --------------------------------------
1463 FUNCTION get_mapped_physical_suffix(
1464 i_version_copy_type IN table_line.table_code%TYPE,
1465 i_material_format IN table_line.table_code%TYPE DEFAULT NULL)
1466 RETURN vod_snap_material.physical_content_id%TYPE
1467 IS
1468 v_physical_suffix vod_snap_material.physical_content_id%TYPE := NULL;
1469 v_cache_key VARCHAR2(12) := lpad(i_version_copy_type,6) || lpad(i_material_format,6);
1470 BEGIN
1471 -- Check cache first
1472 IF gt_mapped_physical_suffix.exists(v_cache_key) THEN
1473 v_physical_suffix := gt_mapped_physical_suffix(v_cache_key);
1474 ELSE
1475 -- Using VC Type Based Physical Suffix (Foxtel method)
1476 BEGIN
1477 SELECT ibms_prop.get_property_char(k_708_physical_instanc_prop, g_interface_id, tp.table_line_isn)
1478 INTO v_physical_suffix
1479 FROM table_line tp
1480 WHERE tp.table_id = k_tapetp_tl
1481 AND tp.table_code = i_version_copy_type;
1482 EXCEPTION
1483 WHEN OTHERS THEN
1484 NULL;
1485 END;
1486 gt_mapped_physical_suffix(v_cache_key) := v_physical_suffix;
1487 END IF; -- Cached function result exists?
1488
1489 RETURN rtrim(v_physical_suffix);
1490
1491 END get_mapped_physical_suffix;
1492
1493 -------------------------------------
1494 -- Procedure: get_house_and_format
1495 --------------------------------------
1496 PROCEDURE get_house_and_format
1497 (
1498 i_version_id IN version_copy.version_id%TYPE,
1499 i_version_copy_type IN version_copy.tape_type%TYPE,
1500 o_house_media OUT media_item.house_media%TYPE,
1501 o_media_format OUT media_item.format%TYPE,
1502 o_capacity OUT media_item.capacity%TYPE
1503 )
1504 IS
1505 v_house_media media_item.house_media%TYPE := NULL;
1506 v_media_format media_item.format%TYPE := NULL;
1507 v_capacity media_item.capacity%TYPE := 0;
1508 v_tt_index VARCHAR2(13);
1509
1510 v_media_rec rt_rec_media;
1511 BEGIN
1512
1513 v_tt_index := lpad(i_version_id, 9, '0') || i_version_copy_type;
1514
1515 IF gt_media.exists(v_tt_index)
1516 THEN
1517 v_media_rec := gt_media(v_tt_index);
1518 ELSE
1519 BEGIN
1520 SELECT mi.house_media,
1521 mi.format,
1522 mi.capacity
1523 INTO v_house_media,
1524 v_media_format,
1525 v_capacity
1526 FROM version_copy vc
1527 JOIN media_item mi ON (mi.media_item_id = main_house_media_id(vc.version_copy_id))
1528 WHERE vc.version_id = i_version_id
1529 -- Filter to platform's Version Copy type
1530 AND vc.tape_type = i_version_copy_type
1531 AND rownum=1;
1532 EXCEPTION
1533 WHEN no_data_found THEN
1534 NULL;
1535 END;
1536 v_media_rec.house_media := v_house_media;
1537 v_media_rec.format := v_media_format;
1538 v_media_rec.capacity := v_capacity;
1539
1540 gt_media(v_tt_index) := v_media_rec;
1541
1542 END IF; -- cached media value exists?
1543
1544 o_house_media := v_media_rec.house_media;
1545 o_media_format := v_media_rec.format;
1546 o_capacity := v_media_rec.capacity;
1547
1548 END get_house_and_format;
1549
1550 -------------------------------------
1551 -- Procedure: get_phys_content_id
1552 --------------------------------------
1553 PROCEDURE get_phys_content_id( i_version_id IN version.version_id%TYPE,
1554 i_version_copy_type IN table_line.table_code%TYPE,
1555 i_programme_name IN title.programme_name%TYPE,
1556 i_house_media IN media_item.house_media%TYPE DEFAULT NULL,
1557 i_material_format IN table_line.table_code%TYPE,
1558 o_phys_content_id OUT VARCHAR2,
1559 o_house_media OUT media_item.house_media%TYPE,
1560 o_error_text OUT VARCHAR2)
1561 IS
1562 v_phys_content_suffix vod_snap_material.physical_content_id%TYPE;
1563 v_house_media media_item.house_media%TYPE;
1564 v_media_format media_item.format%TYPE := NULL;
1565 v_version_copy_type_desc table_line.table_description%TYPE;
1566 v_capacity media_item.capacity%TYPE;
1567
1568 BEGIN
1569 o_error_text := NULL;
1570 v_version_copy_type_desc := NULL;
1571 BEGIN
1572 SELECT tl.table_description
1573 INTO v_version_copy_type_desc
1574 FROM table_line tl
1575 WHERE tl.table_id = k_tapetp_tl
1576 AND tl.table_code = i_version_copy_type;
1577 EXCEPTION
1578 WHEN no_data_found THEN
1579 NULL;
1580 END;
1581
1582 v_phys_content_suffix := get_mapped_physical_suffix(
1583 i_version_copy_type => i_version_copy_type,
1584 i_material_format => i_material_format);
1585
1586 -- Calculate house_media only if not provided by caller
1587 IF i_house_media IS NOT NULL THEN
1588 v_house_media := i_house_media;
1589 ELSE
1590 get_house_and_format( i_version_id => i_version_id,
1591 i_version_copy_type => i_version_copy_type,
1592 o_house_media => v_house_media,
1593 o_media_format => v_media_format,
1594 o_capacity => v_capacity);
1595 END IF;
1596
1597 IF trim(v_house_media) IS NULL
1598 THEN
1599 o_error_text := 'Record skipped. Media Item No. not found for Programme: ' || i_programme_name || '(VC: ' ||v_version_copy_type_desc||')'; RAISE e_skip;
1600 END IF;
1601
1602 o_phys_content_id := v_house_media || rtrim(v_phys_content_suffix);
1603 o_house_media := v_house_media;
1604 EXCEPTION
1605 WHEN e_skip THEN NULL;
1606 END get_phys_content_id;
1607
1608 -------------------------------------
1609 -- Function: get_delivery_uri
1610 --------------------------------------
1611 FUNCTION get_delivery_uri( i_use_uri_rules IN vod_media_uri_rule.type_id%TYPE,
1612 i_platform_id IN vod_platform.vod_platform_id%TYPE,
1613 i_version_id IN version.version_id%TYPE,
1614 i_version_copy_type IN table_line.table_code%TYPE,
1615 i_house_media IN media_item.house_media%TYPE,
1616 i_programme_name IN title.programme_name%TYPE,
1617 i_material_format IN table_line.table_code%TYPE,
1618 i_usage_type_id IN table_line.table_line_isn%TYPE DEFAULT 0,
1619 i_language_id IN language.language_id%TYPE DEFAULT 0) RETURN vod_snap_cat_asset_delivery.delivery_uri%TYPE
1620 IS
1621 v_delivery_uri vod_snap_cat_asset_delivery.delivery_uri%TYPE := NULL;
1622 v_physical_content_id vod_snap_material.physical_content_id%TYPE;
1623 v_house_media media_item.house_media%TYPE;
1624 v_error_text VARCHAR2(2000);
1625 v_version_copy_type_id table_line.table_line_isn%TYPE := 0;
1626 v_material_format_id table_line.table_line_isn%TYPE := 0;
1627 BEGIN
1628 BEGIN
1629 SELECT tl.table_line_isn
1630 INTO v_material_format_id
1631 FROM table_line tl
1632 WHERE tl.table_id = k_matfor_tl
1633 AND tl.table_code = i_material_format;
1634 EXCEPTION
1635 WHEN no_data_found THEN
1636 NULL;
1637 END;
1638 BEGIN
1639 SELECT tl.table_line_isn
1640 INTO v_version_copy_type_id
1641 FROM table_line tl
1642 WHERE tl.table_id = k_tapetp_tl
1643 AND tl.table_code = i_version_copy_type;
1644 EXCEPTION
1645 WHEN no_data_found THEN
1646 NULL;
1647 END;
1648 -- Use URI Rules functionality for deriving Delivery URI
1649 v_delivery_uri := get_rule_media_uri(i_rule_type => i_use_uri_rules,
1650 i_house_media => i_house_media,
1651 i_platform_id => i_platform_id,
1652 i_language_id => i_language_id,
1653 i_version_copy_type_id => v_version_copy_type_id,
1654 i_usage_type_id => i_usage_type_id,
1655 i_material_format_id => v_material_format_id);
1656
1657 RETURN rtrim(v_delivery_uri);
1658
1659 END get_delivery_uri;
1660
1661 -------------------------------------
1662 -- Function: get_mime_type
1663 -- returns the mimetype format
1664 --------------------------------------
1665 FUNCTION get_mime_type (i_file_format IN multimedia.source_file_name%TYPE) RETURN VARCHAR2 IS
1666 v_return VARCHAR2(10);
1667 BEGIN
1668 CASE i_file_format
1669 WHEN k_bmp THEN
1670 v_return := k_image_bmp;
1671 WHEN k_gif THEN
1672 v_return := k_image_gif;
1673 WHEN k_jpeg THEN
1674 v_return := k_image_jpeg;
1675 WHEN k_png THEN
1676 v_return := k_image_png;
1677 WHEN k_tiff THEN
1678 v_return := k_image_tiff;
1679 ELSE v_return := i_file_format;
1680 END CASE;
1681
1682 RETURN v_return;
1683 END;
1684
1685 -------------------------------------
1686 -- Function: calc_asset_delivery_size
1687 --------------------------------------
1688 FUNCTION calc_asset_delivery_size
1689 (
1690 i_version_id IN version.version_id%TYPE,
1691 i_version_copy_type IN version_copy.tape_type%TYPE,
1692 i_media_format IN media_item.format%TYPE,
1693 i_asset_duration IN NUMBER
1694 ) RETURN number
1695 IS
1696
1697 v_size NUMBER;
1698 v_duration NUMBER;
1699 v_average_bit_rate NUMBER := NULL;
1700 v_tapetp_isn table_line.table_line_isn%TYPE;
1701 v_format_isn table_line.table_line_isn%TYPE;
1702
1703 FUNCTION get_version_durat_by_segment( i_version_id IN version.version_id%TYPE,
1704 i_version_copy_type_id IN version_copy.version_copy_type_id%TYPE
1705 )
1706 RETURN NUMBER
1707 IS
1708 v_ver_duration NUMBER;
1709 v_max_frames NUMBER;
1710 v_master_component_id component.component_id%TYPE;
1711
1712 CURSOR c_calc_duration IS
1713 SELECT SUM(duration) + FLOOR(SUM(duration_frame) / v_max_frames)
1714 FROM component_segment CS
1715 INNER JOIN component c
1716 ON cs.Component_Id = c.component_id
1717 INNER JOIN version_copy vc
1718 ON vc.version_copy_id = c.version_copy_id
1719 WHERE vc.version_id = i_version_id
1720 AND vc.latest = k_true
1721 AND vc.version_copy_type_id = i_version_copy_type_id
1722 AND c.master_component = k_true;
1723 BEGIN
1724 SELECT master_component
1725 INTO v_master_component_id
1726 FROM version_master_component_view
1727 WHERE version_id = i_version_id;
1728
1729 SELECT MAX(numeric_1)
1730 INTO v_max_frames
1731 FROM media_item mi, table_line stan, media_segment ms, component_segment cs
1732 WHERE stan.table_id = k_stan_tl
1733 AND stan.table_code = mi.STANDARD
1734 AND mi.media_item_id = ms.media_item_id
1735 AND ms.media_segment_id = cs.media_segment_id
1736 AND cs.component_id = v_master_component_id;
1737
1738 IF v_max_frames IS NULL THEN
1739 v_max_frames := g.no_of_frames;
1740 END IF;
1741
1742 OPEN c_calc_duration;
1743 FETCH c_calc_duration INTO v_ver_duration;
1744 CLOSE c_calc_duration;
1745 IF v_ver_duration IS NULL THEN
1746 v_ver_duration := 0;
1747 END IF;
1748 RETURN v_ver_duration;
1749 END get_version_durat_by_segment;
1750
1751 BEGIN
1752
1753 SELECT tp.table_line_isn
1754 INTO v_tapetp_isn
1755 FROM table_line tp
1756 WHERE tp.table_id = k_tapetp_tl
1757 AND tp.table_code = i_version_copy_type;
1758
1759 SELECT mf.table_line_isn
1760 INTO v_format_isn
1761 FROM table_line mf
1762 WHERE mf.table_id = k_matfor_tl
1763 AND mf.table_code = i_media_format;
1764
1765 v_duration := get_version_durat_by_segment (i_version_id, v_tapetp_isn);
1766
1767 IF nvl(v_duration, 0) = 0 THEN
1768 v_duration:=version_total_duration(i_version_id);
1769 END IF;
1770
1771 IF nvl(v_duration, 0) = 0 THEN
1772 v_duration := i_asset_duration;
1773 END IF;
1774
1775 v_average_bit_rate := gt_avg_bitrate(to_char(v_tapetp_isn) || k_slash || to_char(v_format_isn));
1776
1777 IF nvl(v_duration, 0) = 0 OR nvl(v_average_bit_rate, 0) = 0
1778 THEN
1779 v_size := NULL;
1780 ELSE
1781 v_size := (v_average_bit_rate / 10) * (v_duration/60);
1782 END IF;
1783
1784 RETURN v_size;
1785 END calc_asset_delivery_size;
1786
1787 ------------------------------------------
1788 -- PROCEDURE: log_element
1789 ------------------------------------------
1790 PROCEDURE log_element (i_io_file_id IN io_file_log.file_id%TYPE,
1791 i_record_type IN VARCHAR2,
1792 i_message IN VARCHAR2,
1793 i_error_type IN VARCHAR2) IS
1794
1795 k_phantom io_file_log_element.object_type%TYPE := 'XA';
1796
1797 BEGIN
1798
1799 ERROR_HANDLING_API.CREATESINGLEIOELEMENT (i_io_file_id => i_io_file_id,
1800 i_object_type => i_record_type,
1801 i_broadcaster_reference => to_char(SYSDATE,k_log_date_format),
1802 i_message => i_message,
1803 i_validation_type => i_error_type);
1804
1805 --Occasionally a "phantom element" appears in the IO Log. This query will delete it.
1806 DELETE FROM io_file_log_element
1807 WHERE object_type = k_phantom
1808 AND file_id = i_io_file_id;
1809
1810 END log_element;
1811
1812 ------------------------------------------
1813 -- PROCEDURE: get_user_info_msg
1814 ------------------------------------------
1815 PROCEDURE log_process_start (i_offer_id IN vod_offer_schedule.offer_id%TYPE,
1816 i_process_id IN wf_process.process_id%TYPE,
1817 o_io_file_id OUT io_file_log.file_id%TYPE,
1818 o_user_info OUT io_file_log.client_info%TYPE) IS
1819
1820 v_log_message VARCHAR2(2000);
1821 v_element_msg VARCHAR2(2000);
1822 v_add_info wf_process_field.field_value%TYPE;
1823 v_offer_name vod_offer_schedule.offer_name%TYPE;
1824 v_service_name vod_platform.platform_name%TYPE;
1825 v_old_status_desc VARCHAR2(30);
1826 v_new_status_desc VARCHAR2(30);
1827 v_status_desc VARCHAR2(30);
1828 v_timestamp VARCHAR2(30);
1829 v_event VARCHAR2(50);
1830 v_process VARCHAR2(100);
1831 v_message_code VARCHAR2(5);
1832 v_file_id io_file_log.file_id%TYPE;
1833
1834 BEGIN
1835
1836 ACQUISITIONS_WORKFLOW.GET_WF_ADDITIONAL_INFO(i_process_id => i_process_id,
1837 o_additional_info => v_add_info);
1838 v_offer_name := TRIM(SUBSTR(v_add_info,k_offer_name_start,k_offer_name_length));
1839 v_service_name := TRIM(SUBSTR(v_add_info,k_service_start,k_service_length));
1840 v_old_status_desc := TRIM(SUBSTR(v_add_info,k_old_value_start,k_old_value_length));
1841 v_new_status_desc := TRIM(SUBSTR(v_add_info,k_new_value_start,k_new_value_length));
1842 v_timestamp := TRIM(SUBSTR(v_add_info,k_timestamp_start,k_timestamp_length));
1843
1844 BEGIN
1845 IF v_new_status_desc IS NULL THEN
1846 SELECT tl.table_description
1847 INTO v_status_desc
1848 FROM vod_offer_schedule vos
1849 JOIN table_line tl ON vos.status = tl.table_reference
1850 WHERE vos.offer_id = i_offer_id;
1851 ELSE
1852 v_status_desc := v_new_status_desc;
1853 END IF;
1854 EXCEPTION
1855 WHEN no_data_found THEN
1856 v_status_desc := 'Offer Deleted';
1857 END;
1858
1859 v_log_message :='Offer-ID: '||i_offer_id ||', Offer-Name: "'||v_offer_name||'", Offer-Status: "'
1860 || v_status_desc || ', Service: "'||v_service_name||'"';
1861
1862 IF v_new_status_desc IS NOT NULL THEN
1863 v_event:= 'Offer-Status Change Event';
1864 ELSE
1865 v_event:= 'Offer Refresh Event';
1866 END IF;
1867
1868 SELECT wpd.process_description
1869 INTO v_process
1870 FROM wf_process wp,
1871 wf_process_definition wpd
1872 WHERE wp.process_definition_id = wpd.process_definition_id
1873 AND wp.process_id = i_process_id;
1874
1875 IF upper(v_process) like '%YES%OFFER%DELETE%' THEN
1876 v_process := 'Delete';
1877 v_message_code := k_msg_code_del_start;
1878 ELSE
1879 v_process := 'Export';
1880 v_message_code := k_msg_code_exp_start;
1881 END IF;
1882
1883 IFACE.LOG_IO_FILE_ACTION( i_interface_type => k_interface_type,
1884 i_message_type => k_info,
1885 i_message_code => v_message_code,
1886 i_client_info => v_log_message,
1887 o_io_file_id => v_file_id);
1888
1889 v_timestamp := to_char(to_date(v_timestamp,k_uhe_date_format),k_log_date_format);
1890
1891 v_element_msg := 'Offer '||v_process||' started as a result of '||v_event||' raised at '||v_timestamp||'.';
1892
1893 IF v_new_status_desc IS NOT NULL THEN
1894 v_element_msg := v_element_msg || ' Offer''s old status:'||v_old_status_desc||', Offer''s new status:'||v_new_status_desc||'.';
1895 ELSE
1896 v_element_msg := v_element_msg || ' Offer''s old status:'||v_status_desc||', Offer''s new status:'||v_status_desc||'.';
1897 END IF;
1898
1899 log_element ( i_io_file_id => v_file_id,
1900 i_record_type => 'EVENT',
1901 i_message => v_element_msg,
1902 i_error_type => k_info);
1903
1904 o_io_file_id := v_file_id;
1905 o_user_info := v_log_message;
1906
1907 END log_process_start;
1908 ------------------------------------------
1909 -- PROCEDURE: log_offer_message
1910 ------------------------------------------
1911 PROCEDURE log_offer_messages (i_offer_id IN vod_offer_schedule.offer_id%TYPE,
1912 i_process_id IN wf_process.process_id%TYPE,
1913 i_msg_text IN VARCHAR2,
1914 i_msg_type IN VARCHAR2) IS
1915
1916 v_offer_name vod_offer_schedule.offer_name%TYPE;
1917 v_service_name vod_platform.platform_name%TYPE;
1918 v_log_message VARCHAR2(2000);
1919 v_msg_prefix VARCHAR2(100);
1920 v_add_info wf_process_field.field_value%TYPE;
1921 v_old_status_desc VARCHAR2(30);
1922 v_new_status_desc VARCHAR2(30);
1923 v_timestamp VARCHAR2(30);
1924 v_event VARCHAR2(50);
1925
1926 BEGIN
1927
1928 ACQUISITIONS_WORKFLOW.GET_WF_ADDITIONAL_INFO(i_process_id => i_process_id,
1929 o_additional_info => v_add_info);
1930 v_offer_name := TRIM(SUBSTR(v_add_info,k_offer_name_start,k_offer_name_length));
1931 v_service_name := TRIM(SUBSTR(v_add_info,k_service_start,k_service_length));
1932 v_old_status_desc := TRIM(SUBSTR(v_add_info,k_old_value_start,k_old_value_length));
1933 v_new_status_desc := TRIM(SUBSTR(v_add_info,k_new_value_start,k_new_value_length));
1934 v_timestamp := TRIM(SUBSTR(v_add_info,k_timestamp_start,k_timestamp_length));
1935
1936 v_log_message :=i_msg_text||'. Offer-ID: '||i_offer_id ||', Offer-Name: '||v_offer_name||', Service: '||v_service_name;
1937
1938
1939 IF v_new_status_desc IS NOT NULL THEN
1940 v_event:= 'Offer Status Change Event';
1941 ELSE
1942 v_event:= 'Offer Refresh Event';
1943 END IF;
1944
1945 IF i_msg_type = k.msg_info THEN
1946 v_msg_prefix := v_event||' handled successfully';
1947 ELSE
1948 v_msg_prefix := 'Failed to handle '||v_event;
1949 END IF;
1950
1951 v_log_message := v_msg_prefix || ' for Offer '||i_offer_id ||'"'||v_offer_name||'".';
1952 IF v_new_status_desc IS NOT NULL THEN
1953 v_log_message := v_log_message || 'Offer''s old status: "'||v_old_status_desc||'", new status: "'||v_new_status_desc||'".';
1954 END IF;
1955 v_log_message := v_log_message || '[Event Timestamp: '||v_timestamp||']';
1956
1957 iface.log_io_action (i_interface_type => k_interface_type,
1958 i_message_type => i_msg_type,
1959 i_client_info => v_log_message);
1960
1961 IF i_msg_type = k.msg_info THEN
1962 NC_YES_OFFER_EXPORT_MANAGEMENT.progressnumoffailescounter(i_offer_id => i_offer_id,
1963
1964
1965 i_default_value => 0);
1966 ELSIF i_msg_type = k.msg_error THEN
1967 NC_YES_OFFER_EXPORT_MANAGEMENT.progressnumoffailescounter(i_offer_id => i_offer_id,
1968 i_default_value => -1);
1969 END IF;
1970
1971 END log_offer_messages;
1972
1973 ------------------------------------------
1974 -- PROCEDURE: update_offer_item_checklist
1975 ------------------------------------------
1976 PROCEDURE update_offer_item_checklist (i_offer_id IN vod_offer_schedule.offer_id%TYPE,
1977 i_chklist_status IN table_line.table_code%TYPE,
1978 o_error_reported OUT k.logical%TYPE,
1979 o_error_response OUT SYS_REFCURSOR) IS
1980
1981 v_error_reported k.logical%TYPE;
1982 v_error_response SYS_REFCURSOR;
1983
1984 BEGIN
1985
1986 FOR r_item IN c_items (i_offer_id) LOOP
1987 on_demand_api.setcheckliststatus (i_object_id => r_item.item_schedule_id,
1988 i_status_code => i_chklist_status,
1989 o_error_reported => v_error_reported,
1990 o_error_response => v_error_response);
1991
1992 END LOOP;
1993
1994 END update_offer_item_checklist;
1995
1996 -------------------------------------
1997 -- PROCEDURE: Config_validations
1998 --------------------------------------
1999 PROCEDURE config_validations ( i_offer_id IN vod_offer_schedule.offer_id%TYPE,
2000 i_old_status IN table_line.table_code%TYPE,
2001 i_new_status IN table_line.table_code%TYPE,
2002 o_validation_status OUT VARCHAR2) IS
2003
2004 v_platform_id vod_platform.vod_platform_id%TYPE;
2005 v_old_status_isn table_line.table_line_isn%TYPE;
2006 v_new_status_isn table_line.table_line_isn%TYPE;
2007 v_curr_status_isn table_line.table_line_isn%TYPE;
2008
2009 BEGIN
2010
2011 g_interface_id := iface.interface_id(k_interface_type);
2012
2013 SELECT vis.platform_id
2014 INTO v_platform_id
2015 FROM vod_offer_schedule_item vosi
2016 JOIN vod_item_schedule vis ON (vis.item_schedule_id = vosi.item_schedule_id)
2017 WHERE vosi.offer_id = i_offer_id
2018 AND rownum = 1;
2019
2020 IF TRIM(i_old_status) IS NULL OR TRIM(i_new_status) IS NULL THEN
2021
2022 IF TRIM(i_old_status) IS NOT NULL THEN
2023 v_curr_status_isn := table_line_util.table_line_isn (i_table_id => k_vodofr_tl,
2024 i_table_code => i_old_status );
2025 ELSIF TRIM(i_new_status) IS NOT NULL THEN
2026 v_curr_status_isn := table_line_util.table_line_isn (i_table_id => k_vodofr_tl,
2027 i_table_code => i_new_status );
2028 ELSE
2029 SELECT vodofr_tl.table_line_isn
2030 INTO v_curr_status_isn
2031 FROM vod_offer_schedule vos
2032 JOIN table_line vodofr_tl on vodofr_tl.table_reference = vos.status
2033 WHERE vos.offer_id = i_offer_id;
2034 END IF;
2035 --Offer Refreshed
2036 IF NVL(ibms_prop.get_property_number(k_708_filter_by_servic_prop, g_interface_id, v_platform_id),0) *
2037 NVL(ibms_prop.get_property_number(k_708_offer_status_for_prop, g_interface_id,v_curr_status_isn, v_curr_status_isn),0) > 0 THEN
2038 o_validation_status := k_export;
2039 ELSE o_validation_status := k_none;
2040 END IF;
2041 ELSE
2042
2043 SELECT t1.table_line_isn,
2044 t2.table_line_isn
2045 INTO v_old_status_isn,
2046 v_new_status_isn
2047 FROM table_line t1,
2048 table_line t2
2049 WHERE t1.table_id = k_vodofr_tl
2050 AND t1.table_code = i_old_status
2051 AND t2.table_id = k_vodofr_tl
2052 AND t2.table_code = i_new_status;
2053
2054 IF NVL(ibms_prop.get_property_number(k_708_filter_by_servic_prop, g_interface_id, v_platform_id),0) *
2055 NVL(ibms_prop.get_property_number(k_708_offer_status_for_prop, g_interface_id,v_old_status_isn, v_new_status_isn),0) > 0 THEN
2056 o_validation_status := k_export;
2057 ELSIF nvl(ibms_prop.get_property_number(k_708_filter_by_servic_prop, g_interface_id, v_platform_id),0) *
2058 NVL(ibms_prop.get_property_number(k_708_status_for_delet_prop, g_interface_id,v_old_status_isn, v_new_status_isn),0) > 0 THEN
2059 o_validation_status := k_delete;
2060 ELSE o_validation_status := k_none;
2061 END IF;
2062
2063 END IF;
2064
2065 EXCEPTION
2066 WHEN no_data_found THEN
2067 o_validation_status := k_none;
2068
2069 END config_validations;
2070
2071 PROCEDURE init_components ( i_event_type IN table_line.table_reference%TYPE,
2072 i_change_type IN table_line.table_reference%TYPE,
2073 io_components IN OUT rt_components_to_send) IS
2074
2075 v_event_type table_line.table_code%TYPE;
2076 v_change_type table_line.table_code%TYPE;
2077
2078 BEGIN
2079
2080 SELECT MAX(table_code) --MAX is used because i_event_Type can be null
2081 INTO v_event_type
2082 FROM table_line tl
2083 WHERE tl.table_reference = i_event_type
2084 AND tl.table_id = k_odoref_tl;
2085
2086 IF v_event_type = k_odoref_stdref_tc THEN
2087
2088 io_components.purchasable_title := k_true;
2089 io_components.purchasable_season := k_true;
2090 io_components.purchasable_show := k_true;
2091 io_components.purchase_offering := k_true;
2092
2093 ELSE
2094 IF v_event_type IS NULL AND i_change_type IS NULL THEN
2095 SELECT MAX(table_code)
2096 INTO v_event_type
2097 FROM table_line tl
2098 WHERE tl.table_line_isn = g_default_refresh
2099 AND tl.table_id = k_odoref_tl;
2100 END IF;
2101
2102 SELECT MAX(table_code) --MAX is used because i_change_type can be null
2103 INTO v_change_type
2104 FROM table_line tl
2105 WHERE tl.table_reference = i_change_type
2106 AND tl.table_id = k_schctx_tl;
2107
2108 IF v_event_type = k_odoref_condon_tc THEN
2109 io_components.purchasable_title := k_true;
2110 IF g_collection = k_true OR g_series = k_true THEN
2111 io_components.purchasable_season := k_true;
2112 io_components.purchasable_show := k_true;
2113 ELSE
2114 io_components.purchasable_season := k_false;
2115 io_components.purchasable_show := k_false;
2116 END IF;
2117 io_components.purchase_offering := k_false;
2118 ELSIF v_change_type IN (k_schctx_ofclad_tc, k_schctx_ofclmd_tc, k_schctx_ofclrm_tc) THEN
2119 IF g_collection = k_true OR g_series = k_true THEN
2120 io_components.purchasable_title := k_false;
2121 io_components.purchasable_season := k_true;
2122 io_components.purchasable_show := k_true;
2123 io_components.purchase_offering := k_false;
2124 ELSE
2125 io_components.purchasable_title := k_true;
2126 io_components.purchasable_season := k_false;
2127 io_components.purchasable_show := k_false;
2128 io_components.purchase_offering := k_false;
2129 END IF;
2130 ELSE
2131 io_components.purchasable_title := k_true;
2132 io_components.purchasable_season := k_true;
2133 io_components.purchasable_show := k_true;
2134 io_components.purchase_offering := k_true;
2135 END IF;
2136
2137 END IF;
2138
2139 END init_components;
2140
2141 -------------------------------------
2142 -- FUNCTION: get_price_currency
2143 --------------------------------------
2144 FUNCTION get_price_currency (i_currency_code IN vod_offer_schedule.currency_code%TYPE) RETURN VARCHAR2 IS
2145
2146 v_ret VARCHAR2(50);
2147
2148 BEGIN
2149
2150 IF i_currency_code IS NULL THEN RETURN g_default_currency;
2151 ELSE RETURN gt_currency_map(i_currency_code);
2152 END IF;
2153
2154 END get_price_currency;
2155
2156 -------------------------------------
2157 -- FUNCTION: get_rental_duration
2158 --------------------------------------
2159 FUNCTION get_rental_duration (i_ca_rental_dur IN NUMBER) RETURN NUMBER IS
2160
2161 v_ret NUMBER;
2162
2163 BEGIN
2164
2165 CASE g_rental_units
2166 WHEN 1
2167 THEN v_ret := i_ca_rental_dur * k_hours_in_day * k_minutes_in_hour * k_seconds_in_minute * k_millisec_in_sec;
2168 WHEN 2
2169 THEN v_ret := i_ca_rental_dur * k_minutes_in_hour * k_seconds_in_minute * k_millisec_in_sec;
2170 WHEN 3
2171 THEN v_ret := i_ca_rental_dur * k_seconds_in_minute * k_millisec_in_sec;
2172 WHEN 4
2173 THEN v_ret := i_ca_rental_dur * k_millisec_in_sec;
2174 WHEN 5
2175 THEN v_ret := i_ca_rental_dur;
2176 ELSE v_ret := i_ca_rental_dur;
2177 END CASE;
2178
2179 RETURN v_ret;
2180
2181 END get_rental_duration;
2182
2183 ---------------------------------------------------------------------------------------------------
2184 -- Function : get_version_copy_id
2185 ---------------------------------------------------------------------------------------------------
2186 FUNCTION get_media_item_id (i_offer_item_id IN vod_offer_schedule_item.item_schedule_id%TYPE) RETURN NUMBER IS
2187
2188 BEGIN
2189
2190 RETURN gt_offer_item_main_media(to_char(i_offer_item_id)).media_item_id;
2191
2192 EXCEPTION
2193 WHEN OTHERS THEN
2194 RETURN 0;
2195
2196 END get_media_item_id;
2197
2198 ---------------------------------------------------------------------------------------------------
2199 -- Function : get_version_copy_id
2200 ---------------------------------------------------------------------------------------------------
2201 FUNCTION get_version_copy_id (i_offer_item_id IN vod_offer_schedule_item.item_schedule_id%TYPE) RETURN NUMBER IS
2202
2203 BEGIN
2204
2205 RETURN gt_offer_item_main_media(to_char(i_offer_item_id)).version_copy_id;
2206
2207 EXCEPTION
2208 WHEN OTHERS THEN
2209 RETURN 0;
2210
2211 END get_version_copy_id;
2212
2213 ---------------------------------------------------------------------------------------------------
2214 -- Procedure : log_content_to_XML
2215 ---------------------------------------------------------------------------------------------------
2216 Procedure log_content_to_XML ( i_msg IN CLOB,
2217 i_msg_direction IN VARCHAR2,
2218 i_msg_name IN VARCHAR2,
2219 i_http_url IN VARCHAR2,
2220 i_method_name IN VARCHAR2,
2221 i_status_code IN VARCHAR2 default NULL
2222 ) IS
2223
2224 v_single_xml XMLTYPE;
2225
2226 BEGIN
2227
2228 SELECT XMLELEMENT ("Message",
2229 XMLATTRIBUTES( to_char(sysdate,k_uhe_date_format) as "Timestamp",
2230 i_msg_direction as "direction",
2231 i_msg_name as "message_name",
2232 i_http_url as "HTTP_URL",
2233 i_method_name as "method_name",
2234 i_Status_code as "status_code"),
2235 substr(i_msg,length(k_xml_version_encode)+1)
2236 )
2237 INTO v_single_xml
2238 FROM dual;
2239
2240 SELECT XMLCONCAT (g_io_content_xml, v_single_xml)
2241 INTO g_io_content_xml
2242 FROM dual;
2243
2244
2245 END log_content_to_XML;
2246
2247 ---------------------------------------------------------------------------------------------------
2248 -- Procedure : log_contentxml_to_io_log
2249 ---------------------------------------------------------------------------------------------------
2250 PROCEDURE log_contentxml_to_io_log (i_io_file_id IN io_file_log.file_id%TYPE DEFAULT NULL,
2251 i_content_clob IN CLOB DEFAULT NULL) IS
2252
2253 v_temp_clob CLOB;
2254 v_msg_blob BLOB;
2255 v_io_file_id io_file_log.file_id%TYPE;
2256 v_main_element VARCHAR2(20);
2257
2258 BEGIN
2259
2260 IF i_io_file_id IS NULL
2261 THEN
2262 v_io_file_id := g_io_file_id;
2263 v_main_element := 'OfferExportUHE';
2264 ELSE
2265 v_io_file_id := i_io_file_id;
2266 v_main_element := 'OfferDeleteUHE';
2267 END IF;
2268
2269 IF i_content_clob IS NULL THEN
2270 IF g_io_content_xml IS NULL THEN
2271 v_temp_clob := NULL;
2272 ELSE v_temp_clob := g_io_content_xml.getclobval();
2273 END IF;
2274 ELSE v_temp_clob := i_content_clob;
2275 END IF;
2276 v_temp_clob := replace(replace(replace(replace(replace(replace(v_temp_clob,'&','&'),'<','<'),'>','>'),'"','"'),''',''''),'&amp;','&');
2277 v_temp_clob := replace (v_temp_clob,k_xml_version_encode_response);
2278 v_temp_clob := k_xml_version_encode||'<'||v_main_element||'>'
2279 || v_temp_clob || '</'||v_main_element||'>';
2280 iface.write_clob_to_blob(v_temp_clob,v_msg_blob);
2281 DBMS_LOB.FREETEMPORARY(v_temp_clob);
2282 IFACE.LOG_IO_CONTENT_FILE_ID (i_content_code => 'FILE',
2283 i_description => 'Trace Request Response',
2284 i_mime_type => k_text_xml,
2285 i_file_name => 'TraceRequestResponse',
2286 i_content_blob => v_msg_blob,
2287 i_file_id => v_io_file_id);
2288 END log_contentxml_to_io_log;
2289 ---------------------------------------------------------------------------------------------------
2290 -- Procedure : populate_offer_item_media
2291 ---------------------------------------------------------------------------------------------------
2292 PROCEDURE populate_offer_item_media ( i_offer_item_id IN vod_offer_schedule_item.item_schedule_id%TYPE,
2293 i_media_hierarchy IN VARCHAR2 DEFAULT NULL,
2294 i_required_attrs IN VARCHAR2 DEFAULT NULL) IS
2295 v_main_media SYS_REFCURSOR;
2296 v_error_indicator NUMBER;
2297 v_error_response SYS_REFCURSOR;
2298 v_properties SYS_REFCURSOR;
2299
2300 r_main_media Main_Media_Rec;
2301
2302 BEGIN
2303
2304 ON_DEMAND_API.GetOnDemandMainMedia( i_offer_item_id => i_offer_item_id,
2305 i_media_hierarchy => i_media_hierarchy,
2306 i_required_attrs => i_required_attrs,
2307 o_main_media => v_main_media,
2308 o_error_indicator => v_error_indicator,
2309 o_error_response => v_error_response,
2310 o_properties => v_properties);
2311
2312 IF v_error_indicator = k_true THEN
2313 RETURN;
2314 END IF;
2315
2316 LOOP
2317 FETCH v_main_media INTO r_main_media;
2318 EXIT WHEN v_main_media%NOTFOUND;
2319
2320 IF r_main_media.associationType = k_main THEN
2321 gt_offer_item_main_media(to_char(i_offer_item_id)).version_copy_id := r_main_media.versionCopyId;
2322 gt_offer_item_main_media(to_char(i_offer_item_id)).media_item_id := r_main_media.mediaItemId;
2323 EXIT;
2324 END IF;
2325 END LOOP;
2326
2327 CLOSE v_main_media;
2328
2329 END populate_offer_item_media;
2330
2331 ---------------------------------------------------------------------------------------------------
2332 -- Procedure : extract_error_response
2333 ---------------------------------------------------------------------------------------------------
2334 PROCEDURE extract_error_response (
2335 i_response_clob IN CLOB,
2336 o_error_code OUT VARCHAR2,
2337 o_error_msg OUT VARCHAR2)
2338 IS
2339 v_response_xml XMLTYPE;
2340 v_response_code VARCHAR2(40);
2341 v_response_err_msg t.max_varchar2_plsql%TYPE;
2342
2343 BEGIN
2344
2345 IF INSTR(i_response_clob,k_error_response)>0 THEN
2346 v_response_xml := XMLTYPE(substr(i_response_clob,instr(i_response_clob,k_error_response),
2347 instr(i_response_clob,k_error_response_f)+length(k_error_response_f)-instr(i_response_clob,k_error_response)));
2348
2349 SELECT response_code,
2350 response_err_msg
2351 INTO v_response_code,
2352 v_response_err_msg
2353 FROM XMLTABLE('/' passing v_response_xml
2354 columns response_code VARCHAR2(40) path '//code',
2355 response_err_msg VARCHAR2(4000) path '//message');
2356 END IF;
2357
2358 o_error_code := v_response_code;
2359 o_error_msg := v_response_err_msg;
2360
2361 END extract_error_response;
2362 --
2363 ----------------------------------------------------------------------------------------------------
2364 -- function : replace_with_escape_chars
2365 -- Description : Replaces illegal XML chars (currently only '&') with their corresponding entities
2366 -- ****NOTE****
2367 -- If this bug is raised again for a different element, all you have to do is increase the size of
2368 -- t_elem_start and t_elem_end and add the new element to the v_elem_start and v_elem_end varrays
2369 -- ************
2370 ----------------------------------------------------------------------------------------------------
2371 FUNCTION replace_with_escape_chars (i_clob IN CLOB) RETURN CLOB
2372 IS
2373
2374 TYPE r_char_positions IS RECORD (
2375 start_pos NUMBER,
2376 end_pos NUMBER
2377 );
2378 TYPE t_char_positions IS TABLE OF r_char_positions;
2379 gt_char_positions t_char_positions := t_char_positions();
2380
2381 TYPE t_elem_start IS VARRAY(6) OF VARCHAR2(20);
2382 v_elem_start t_elem_start := t_elem_start('<synopsis','<title ', '<sortString>', '<personName', '<description', '<name '); --here we add the opening tag of the element.
2383
2384 TYPE t_elem_end IS VARRAY(6) OF VARCHAR2(15);
2385 v_elem_end t_elem_end := t_elem_end('</synopsis','</title', '</sortString>','/personName>', '/description>', '/name>'); --here we add the closing tag of the element.
2386
2387 v_string CLOB;
2388 v_work_string VARCHAR2(5000);
2389 v_work_string_final VARCHAR2(5000);
2390 k_amp VARCHAR2(5) := '&';
2391 v_stop k.logical%TYPE;
2392 v_index_start_pos NUMBER;
2393 v_index_end_pos NUMBER;
2394
2395 BEGIN
2396
2397 v_string := i_clob;
2398 gt_char_positions.delete();
2399
2400 FOR i IN 1..v_elem_start.count LOOP
2401 v_index_start_pos :=1;
2402 v_index_end_pos :=1;
2403 v_stop := k.logical_false;
2404 LOOP
2405 v_index_start_pos := REGEXP_INSTR (v_string, v_elem_start(i), v_index_start_pos);
2406 v_index_end_pos := REGEXP_INSTR (v_string, v_elem_end(i), v_index_end_pos);
2407
2408 IF v_index_start_pos = 0 OR v_index_end_pos = 0 THEN
2409 v_stop := k.logical_true;
2410 END IF;
2411 --first check if element is not empty
2412 --and if the element is no longer found (happens during the last loop).
2413 IF SUBSTR (v_string, v_index_start_pos + length(v_elem_start(i)), 1) != '/' AND v_index_start_pos != 0
2414 THEN
2415 gt_char_positions.extend();
2416 gt_char_positions(gt_char_positions.last).start_pos := v_index_start_pos;
2417 gt_char_positions(gt_char_positions.last).end_pos := v_index_end_pos;
2418 ELSE
2419 v_index_start_pos := v_index_start_pos +1;
2420 v_index_end_pos := v_index_start_pos +1; --intentionally having v_index_start_pos +1 instead of v_index_end_pos +1 to avoid further complications.
2421 END IF;
2422 --increment index so it won't infinitely loop on the current position
2423 v_index_start_pos := v_index_start_pos +1;
2424 v_index_end_pos := v_index_end_pos +1;
2425
2426 EXIT WHEN v_stop = k.logical_true;
2427 END LOOP;
2428 --having positions indexed for the current element,
2429 --the replacement can start.
2430 --start from the end so we don't have to increment the rest of the positions after a replacement
2431 FOR j IN REVERSE 1..gt_char_positions.count LOOP
2432 v_work_string := NULL;
2433 v_work_string_final := NULL;
2434 v_work_string := SUBSTR (v_string, gt_char_positions(j).start_pos, gt_char_positions(j).end_pos - gt_char_positions(j).start_pos);
2435 v_work_string_final := replace(v_work_string, '&',k_amp);
2436 v_string := REPLACE(v_string,v_work_string,v_work_string_final);
2437 END LOOP;
2438
2439 gt_char_positions.delete(); -- clear positions indexes for the next element
2440
2441 END LOOP;
2442
2443 v_elem_start.delete();
2444 v_elem_end.delete();
2445 gt_char_positions.delete();
2446
2447 RETURN v_string;
2448 END;
2449
2450
2451 ---------------------------------------------------------------------------------------------------
2452 -- Procedure : Http_Post_UHE
2453 ---------------------------------------------------------------------------------------------------
2454 PROCEDURE Http_Post_UHE(
2455 i_url IN VARCHAR2,
2456 i_method IN VARCHAR2 DEFAULT 'PUT',
2457 i_object_type IN table_line.table_code%TYPE,
2458 i_object_id IN VARCHAR2,
2459 i_message IN CLOB,
2460 i_io_file_id IN io_file_log.file_id%TYPE,
2461 o_status OUT PLS_INTEGER
2462 )
2463 IS
2464
2465 k_amount_max CONSTANT BINARY_INTEGER := 32767;
2466 k_no_data_string CONSTANT VARCHAR2(7) := '$NoData';
2467 v_http_start_time DATE := g.now;
2468 v_request UTL_HTTP.REQ;
2469 v_resp UTL_HTTP.RESP;
2470 v_name VARCHAR2(255);
2471 v_value VARCHAR2(1023);
2472 v_loop_count PLS_INTEGER := 0;
2473 v_amount BINARY_INTEGER;
2474 v_offset INTEGER;
2475 v_buffer RAW(32767);
2476 v_data_length NUMBER := 0;
2477 v_header_length NUMBER := 0;
2478 v_message_clob CLOB;
2479 v_message_blob BLOB;
2480 v_response t.max_varchar2_plsql%TYPE; --t.varchar2_table;
2481 v_response_blob BLOB;
2482 v_response_clob CLOB;
2483 v_response_code VARCHAR2(40);
2484 v_response_err_msg t.max_varchar2_plsql%TYPE;
2485 v_url k.max_varchar2%TYPE;
2486 v_api VARCHAR2(50);
2487 v_element_message VARCHAR2(2000);
2488 v_record_type VARCHAR2(4);
2489 v_error_reported k.logical%TYPE;
2490 v_error_response SYS_REFCURSOR;
2491 v_error_code VARCHAR2(5);
2492
2493 BEGIN
2494 o_status := k_false;
2495 --io_mediator_p2p_log.pxf_request_sent := galaxy_common.glxtimestamp;
2496 v_url := i_url;
2497
2498 iface.set_client_info('Set Timeout parameter: ' || g_http_timeout, TRUE);
2499 UTL_HTTP.SET_TRANSFER_TIMEOUT(g_http_timeout);
2500 --
2501 DBMS_LOB.CREATETEMPORARY(v_response_blob, FALSE, dbms_lob.call);
2502 --
2503 UTL_HTTP.set_cookie_support(FALSE);
2504 UTL_HTTP.set_body_charset('UTF8');
2505 ------------------------------
2506 -- request that exceptions are raised for error Status Codes
2507 ------------------------------
2508 UTL_HTTP.SET_RESPONSE_ERROR_CHECK (ENABLE => FALSE );
2509 ------------------------------
2510 -- allow testing for exceptions like Utl_Http.Http_Server_Error
2511 ------------------------------
2512 UTL_HTTP.SET_DETAILED_EXCP_SUPPORT (ENABLE => TRUE );
2513
2514
2515 -- R E Q U E S T
2516
2517 SELECT decode (i_object_type,
2518 k_title,'purchasableTitle',
2519 k_show,'purchasableShow',
2520 k_season,'purchasableSeason',
2521 k_purchase_offering,'purchaseOffering')
2522 INTO v_api
2523 FROM dual;
2524
2525 v_element_message := 'Create/Update '|| v_api;
2526
2527 log_content_to_XML (i_msg => i_message,
2528 i_msg_direction => 'IBMS to UHE',
2529 i_msg_name => v_element_message,
2530 i_http_url => v_url,
2531 i_method_name => 'PUT');
2532
2533 v_message_clob := replace(replace(replace(replace(replace(replace(i_message,'&','&'),'<','<'),'>','>'),'"','"'),''',''''), '&amp;', '&');
2534 --v_message_clob := replace(i_message,'&','&');
2535 v_message_clob := replace_with_escape_chars(v_message_clob); --MC 20160525
2536 iface.write_clob_to_blob(v_message_clob,v_message_blob);
2537 DBMS_LOB.FREETEMPORARY(v_message_clob);
2538
2539 v_element_message := 'Sending '|| v_api || ', ID='|| i_object_id;
2540 v_record_type:='REQ';
2541
2542 log_element (i_io_file_id => i_io_file_id,
2543 i_record_type => v_record_type,
2544 i_message => v_element_message,
2545 i_error_type => k_info);
2546
2547 BEGIN
2548 v_request := UTL_HTTP.BEGIN_REQUEST (url => v_url, method => i_method);
2549 EXCEPTION
2550
2551 WHEN OTHERS THEN
2552 v_response := 'Failed to send Request message to UHE. Reason: ' || UTL_HTTP.GET_DETAILED_SQLERRM;
2553 g_error_response := v_response;
2554 iface.set_client_info(v_response,TRUE);
2555 iface.write_to_blob (v_response, v_response_blob);
2556 RAISE e_server_fail;
2557 END;
2558
2559 g.debug('Request Successful', v_request.url, v_request.method, v_request.http_version );
2560 g.debug('Start Data Posting');
2561
2562 -- Write the HTTP request body - the SOAP message
2563 v_amount := k_amount_max;
2564 v_offset := 1;
2565 v_data_length :=lengthb(v_message_blob);
2566
2567 UTL_HTTP.set_header( r => v_request,
2568 name => 'Content-Length',
2569 value => v_data_length );
2570
2571 UTL_HTTP.set_header( r => v_request,
2572 name => 'Content-Type',
2573 value => 'application/xml' );
2574
2575 IF NVL(v_data_length, k_false) = k_false THEN
2576 g_error_response := 'Message is NULL or empty';
2577 RAISE e_error;
2578 END IF;
2579
2580 -- Read message from BLOB and write to HTTP request body
2581 WHILE v_offset <= v_data_length LOOP
2582 DBMS_LOB.read( lob_loc => v_message_blob,
2583 amount => v_amount,
2584 offset => v_offset,
2585 buffer => v_buffer );
2586 UTL_HTTP.write_raw( r => v_request,
2587 data => v_buffer );
2588
2589 v_offset := v_offset + v_amount;
2590
2591 END LOOP;
2592
2593 o_status := 1;
2594 g.debug('Response:');
2595 v_record_type:='RESP';
2596 BEGIN
2597 v_resp := UTL_HTTP.GET_RESPONSE (r => v_request);
2598 EXCEPTION
2599
2600 WHEN UTL_HTTP.HTTP_SERVER_ERROR THEN
2601 v_response := 'Failed to receive response from UHE. Reason: Server Error ' || UTL_HTTP.GET_DETAILED_SQLERRM;
2602 g_error_response := v_response;
2603 iface.set_client_info(v_response,TRUE);
2604 iface.write_to_blob (v_response, v_response_blob);
2605 RAISE e_server_fail;
2606
2607 WHEN OTHERS THEN
2608 v_response := 'Failed to receive response from UHE. Reason: ' || UTL_HTTP.GET_DETAILED_SQLERRM;
2609 g_error_response := v_response;
2610 iface.set_client_info(v_response,TRUE);
2611 iface.write_to_blob (v_response, v_response_blob);
2612 RAISE e_server_fail;
2613 END;
2614
2615 g.debug ('Status code: ' || v_resp.status_code);
2616 g.debug ('Reason phrase: ' || v_resp.reason_phrase);
2617
2618 -- Get body of returned document
2619 iface.set_client_info('Create temporary CLOBS to store return stream',TRUE);
2620 v_response := NULL;
2621 BEGIN
2622 LOOP
2623 v_loop_count := v_loop_count+1;
2624 UTL_HTTP.READ_LINE (r => v_resp, DATA => v_response);--, remove_crlf => TRUE);
2625 --g.debug('v_response',v_response);
2626 IF LENGTH(v_response) > 0 THEN
2627 iface.write_to_blob (v_response, v_response_blob);
2628 ELSE
2629 iface.write_to_blob (k_no_data_string, v_response_blob);
2630 EXIT;
2631 END IF;
2632 END LOOP;
2633 EXCEPTION
2634 WHEN UTL_HTTP.END_OF_BODY THEN
2635 iface.set_client_info('Finished reading body',TRUE);
2636 WHEN UTL_HTTP.TRANSFER_TIMEOUT THEN
2637 iface.set_client_info('Transfer timeout exception while reading HTTP response', TRUE);
2638 RAISE e_server_fail;
2639 WHEN UTL_HTTP.PARTIAL_MULTIBYTE_CHAR THEN
2640 iface.set_client_info('Partial multi-byte exception while reading HTTP response', TRUE);
2641 RAISE e_server_fail;
2642 WHEN OTHERS THEN
2643 iface.set_client_info('Error reading response ' || SQLERRM,TRUE);
2644 RAISE e_server_fail;
2645 END;
2646
2647 v_response_clob := iface.blob_to_clob(v_response_blob);
2648
2649 log_content_to_XML (i_msg => v_response_clob,
2650 i_msg_direction => 'UHE to IBMS',
2651 i_msg_name => 'Response from UHE',
2652 i_http_url => v_url,
2653 i_method_name => 'PUT',
2654 i_status_code => v_resp.status_code);
2655
2656 extract_error_response (v_response_clob, v_response_code, v_response_err_msg);
2657
2658 IF v_response_code IS NOT NULL THEN
2659 v_element_message := 'Error reported from external system. Error-Code: '||v_response_code||', Error-Message: '||v_response_err_msg;
2660
2661 log_element (i_io_file_id => i_io_file_id,
2662 i_record_type => v_record_type,
2663 i_message => v_element_message,
2664 i_error_type => k_info);
2665
2666 g_error_response := v_element_message;
2667 RAISE e_business;
2668 END IF;
2669
2670 SELECT v_api|| ' called succesfully at ' || v_url
2671 INTO v_element_message
2672 FROM dual;
2673
2674 log_element(i_io_file_id => i_io_file_id,
2675 i_record_type => k_info,
2676 i_message => v_element_message,
2677 i_error_type => v_record_type);
2678
2679 -- Finish Request
2680 UTL_HTTP.END_RESPONSE(R => v_resp);
2681 g.debug('dbms_lob.substr(o_response,256,1):',DBMS_LOB.SUBSTR(v_response_blob,256,1));
2682
2683 g.debug('After read text');
2684 o_status := v_resp.status_code;
2685
2686 EXCEPTION
2687 WHEN e_server_fail THEN
2688 IF g_offline_mode = k_false THEN
2689 BEGIN
2690 log_content_to_XML (i_msg => iface.blob_to_clob(v_response_blob),
2691 i_msg_direction => 'UHE to IBMS',
2692 i_msg_name => 'Error Response from UHE',
2693 i_http_url => v_url,
2694 i_method_name => 'PUT',
2695 i_status_code => v_resp.status_code);
2696
2697 EXCEPTION
2698 WHEN OTHERS THEN
2699 log_content_to_XML (i_msg => iface.blob_to_clob(v_response_blob),
2700 i_msg_direction => 'UHE to IBMS',
2701 i_msg_name => 'Error Response from UHE',
2702 i_http_url => v_url,
2703 i_method_name => 'PUT',
2704 i_status_code => null);
2705 END;
2706
2707 log_element(i_io_file_id => i_io_file_id,
2708 i_record_type => k_error,
2709 i_message => g_error_response,
2710 i_error_type => v_record_type);
2711
2712 ON_DEMAND_API.SETOFFERSTATUS (i_offer_id => g_offer_id,
2713 i_target_status => g_sysfail_status,
2714 i_wf_called => k_true,
2715 i_do_not_replicate_to_child => k_true,
2716 o_error_reported => v_error_reported,
2717 o_error_response => v_error_response,
2718 o_offer_error_code => v_error_code);
2719
2720 g_error_response := v_response;
2721
2722 RAISE e_server_fail;
2723 END IF;
2724 END Http_Post_UHE;
2725 -------------------------------------
2726 -- PROCEDURE: breakOfferToUHE
2727 --------------------------------------
2728
2729 PROCEDURE break_offer_to_uhe(i_offer_id IN vod_offer.vod_offer_id%TYPE,
2730 o_all_uhe_offer OUT tt_uhe_offer_tab,
2731 o_error_reported OUT k.logical%TYPE,
2732 o_error_response OUT t.max_varchar2%TYPE)
2733 IS
2734
2735 g_uhe_708_business_rule_header k.max_varchar2%TYPE;
2736 g_uhe_708_default_certific k.max_varchar2%TYPE;
2737 g_uhe_708_default_time_fed k.max_varchar2%TYPE;
2738 g_uhe_708_def_ca_prod_type k.max_varchar2%TYPE;
2739 g_def_cert table_line.numeric_1%TYPE;
2740 v_ca_parameter_value ca_instance_param.param_value%TYPE;
2741 r_business_rule_header ca_params_for_breakdown_rec;
2742 r_uhe_params ca_params_for_breakdown_rec;
2743 r_uhe_common_params ca_params_for_breakdown_rec;
2744
2745 v_uhe_offer VARCHAR2(300);
2746 v_ca_product_type table_line.table_description%TYPE;
2747 v_ca_product_type_code table_line.table_code%TYPE;
2748 v_ca_product_type_id table_line.table_code%TYPE;
2749 v_business_rule_id ca_instance_param.param_value%TYPE;
2750 r_all_uhe_offer1 tt_uhe_offer_tab := tt_uhe_offer_tab();
2751 v_sqlcode t.max_varchar2%TYPE;
2752 v_sqlerrm t.max_varchar2%TYPE;
2753 v_br_header_count NUMBER := 0;
2754 v_current_br_header_pos NUMBER := 0;
2755 v_next_br_header_pos NUMBER := 0;
2756 c_params_br SYS_REFCURSOR;
2757 v_ca_product_value ca_instance_param.param_value%TYPE;
2758 v_prov_end_date vod_offer_schedule.provisional_end_date%TYPE;
2759 v_timezone vod_platform.timezone_id%TYPE;
2760 v_count_ca_product NUMBER := 0;
2761
2762
2763 CURSOR c_common_params IS
2764 --Cursor to return all common params.
2765 SELECT *
2766 FROM (SELECT ci.ca_object_id AS offer_id,
2767 cat.ca_template_id AS ca_template_id,
2768 cat.ui_descr AS ca_template_name,
2769 cip.param_num AS ca_param_num,
2770 ctp.descr AS ca_param_descr,
2771 ctp.param_type AS ca_param_type_code,
2772 ctpt.ca_param_type AS ca_param_type,
2773 cip.param_value AS ca_param_value,
2774 LEAD(ctpt.description) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_type,
2775 LEAD(cip.param_num) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_num
2776
2777 FROM ca_template cat
2778 JOIN ca_template_param ctp
2779 ON (ctp.ca_template_id = cat.ca_template_id)
2780
2781 JOIN ca_template_param_type ctpt
2782 ON ctpt.ca_param_type = ctp.param_type
2783 JOIN ca_instance ci
2784 ON ci.ca_template_id = cat.ca_template_id
2785 JOIN ca_instance_param cip
2786 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
2787 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
2788
2789 WHERE ci.ca_object_id = i_offer_id
2790 ORDER BY cip.param_num,
2791 cip.param_value) a
2792 WHERE a.ca_param_num <
2793
2794 (SELECT b.ca_param_num
2795 FROM ((SELECT ci.ca_object_id AS offer_id,
2796 cat.ca_template_id AS ca_template_id,
2797 cat.ui_descr AS ca_template_name,
2798 cip.param_num AS ca_param_num,
2799 ctp.descr AS ca_param_descr,
2800 ctpt.description AS ca_param_type,
2801 cip.param_value AS ca_param_value,
2802 rownum
2803
2804 FROM ca_template cat
2805 JOIN ca_template_param ctp
2806 ON (ctp.ca_template_id = cat.ca_template_id)
2807
2808 JOIN ca_template_param_type ctpt
2809 ON ctpt.ca_param_type = ctp.param_type
2810 JOIN ca_instance ci
2811 ON ci.ca_template_id = cat.ca_template_id
2812 JOIN ca_instance_param cip
2813 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
2814 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
2815
2816 WHERE ci.ca_object_id = i_offer_id
2817 ORDER BY cip.param_num,
2818 cip.param_value)) b
2819 WHERE b.ca_param_type = g_uhe_708_business_rule_header
2820 AND rownum = 1);
2821
2822 --Cursor to return all business rule headers
2823 CURSOR c_business_rule_header IS
2824
2825 SELECT ci.ca_object_id AS offer_id,
2826 cat.ca_template_id AS ca_template_id,
2827 cat.ui_descr AS ca_template_name,
2828 cip.param_num AS ca_param_num,
2829 ctp.descr AS ca_param_descr,
2830 ctp.param_type AS ca_param_type_code,
2831 ctpt.ca_param_type AS ca_param_type,
2832 cip.param_value AS ca_param_value,
2833 lead(ctpt.description) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_type,
2834 lead(cip.param_num) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_num
2835
2836 FROM ca_template cat
2837 JOIN ca_template_param ctp
2838 ON (ctp.ca_template_id = cat.ca_template_id)
2839
2840 JOIN ca_template_param_type ctpt
2841 ON ctpt.ca_param_type = ctp.param_type
2842 JOIN ca_instance ci
2843 ON ci.ca_template_id = cat.ca_template_id
2844 JOIN ca_instance_param cip
2845 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
2846 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
2847
2848 WHERE ci.ca_object_id = i_offer_id
2849 AND ctpt.description = g_uhe_708_business_rule_header
2850 ORDER BY cip.param_num,
2851 cip.param_value;
2852
2853 BEGIN
2854
2855 --Clear collection
2856 IF r_all_uhe_offer1 IS NOT NULL
2857 THEN
2858 r_all_uhe_offer1.delete;
2859 END IF;
2860
2861 IF o_all_uhe_offer IS NOT NULL
2862 THEN
2863 o_all_uhe_offer.delete;
2864 END IF;
2865
2866 g.debug('Starting break_offer_to_uhe');
2867
2868 o_error_reported := k_false;
2869 g_interface_id := iface.interface_id(k_interface_type);
2870 g.debug('Interface ID ='||g_interface_id);
2871 --Get UHE Business Rule Header--
2872 g_uhe_708_business_rule_header := TRIM(SUBSTR((ibms_prop.get_property_char(k_708_uhe_business_rul_prop,g_interface_id)),INSTR(ibms_prop.get_property_char(k_708_uhe_business_rul_prop,g_interface_id),k_space,1)));
2873 g.debug('Business Rule Header value = ' || g_uhe_708_business_rule_header);
2874
2875 g_uhe_708_default_certific := ibms_prop.get_property_number(k_708_default_certific_prop,g_interface_id);
2876 g.debug('Default Certification in 708 Interface = '||g_uhe_708_default_certific);
2877 g_uhe_708_default_time_fed := ibms_prop.get_property_char(k_708_default_time_for_prop,g_interface_id);
2878 g.debug('Default Time for FED in 708 Interface = '||g_uhe_708_default_time_fed);
2879
2880 IF (g_uhe_708_default_certific = 0) THEN
2881 BEGIN
2882 SELECT tl.numeric_1
2883 INTO g_def_cert
2884 FROM table_line tl
2885 WHERE tl.table_id = k_vercer_tl
2886 AND tl.logical_1 = 1;
2887 EXCEPTION
2888 WHEN NO_DATA_FOUND THEN
2889 o_error_response := 'break_offer_to_uhe Error: Default Parental Rating not set-up - See VERCER Table Line logical 1 field.';
2890 o_error_reported := k_true;
2891 RAISE e_error;
2892 WHEN TOO_MANY_ROWS THEN
2893 o_error_response := 'break_offer_to_uhe Error: More than one default Parental Rating has been set-up - See VERCER Table Line logical 1 field';
2894 o_error_reported := k_true;
2895 RAISE e_error;
2896 END;
2897 END IF;
2898 SELECT vp.timezone_id
2899 INTO v_timezone
2900 FROM vod_platform vp
2901 JOIN vod_offer_schedule vos
2902 ON vos.platform_id = vp.vod_platform_id
2903 WHERE vos.offer_id = i_offer_id AND rownum = 1;
2904 g.debug('Get Default CA Prod Type from Interface 708');
2905 g_uhe_708_def_ca_prod_type := TRIM(SUBSTR((ibms_prop.get_property_char(k_708_def_ca_prod_type_prop,g_interface_id)),INSTR(ibms_prop.get_property_char(k_708_def_ca_prod_type_prop,g_interface_id),k_space,1)));--408154001
2906
2907 /*IF g_uhe_708_business_rule_header IS NULL THEN
2908 iface.set_client_info('Property UHE Business Rule Header is not set '|| '708', TRUE);
2909 RAISE e_property;
2910 END IF;*/
2911 OPEN c_business_rule_header;
2912 LOOP
2913 FETCH c_business_rule_header
2914 INTO r_business_rule_header;
2915 EXIT WHEN c_business_rule_header%NOTFOUND;
2916
2917 IF (r_business_rule_header.ca_param_value IS NOT NULL)
2918 THEN
2919 v_br_header_count := v_br_header_count + 1;
2920 v_business_rule_id := r_business_rule_header.ca_param_value;
2921 v_current_br_header_pos := r_business_rule_header.ca_param_num;
2922 v_next_br_header_pos := r_business_rule_header.next_ca_param_num;
2923 g.debug('Business Rule Header number:' || v_br_header_count);
2924 g.debug('Next Business Rule Header position: ' || v_next_br_header_pos);
2925
2926 IF g_uhe_708_business_rule_header IS NULL
2927 THEN
2928 --Selecting the ca product value
2929 BEGIN
2930 SELECT cip.param_value
2931 INTO v_ca_product_value
2932 FROM ca_template cat
2933 JOIN ca_template_param ctp
2934 ON (ctp.ca_template_id = cat.ca_template_id)
2935 JOIN ca_template_param_type ctpt
2936 ON ctpt.ca_param_type = ctp.param_type
2937 JOIN ca_instance ci
2938 ON ci.ca_template_id = cat.ca_template_id
2939 JOIN ca_instance_param cip
2940 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
2941 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
2942
2943 WHERE ci.ca_object_id = i_offer_id
2944 AND cip.param_num > r_business_rule_header.ca_param_num
2945 AND cip.param_num < v_next_br_header_pos
2946 AND ctp.param_type = k_product_param_typ;
2947 g.debug('Value ca product:' || v_ca_product_value);
2948 EXCEPTION
2949
2950 WHEN too_many_rows THEN
2951 o_error_response := 'break_offer_to_uhe Error: Business-Rule section in Offer CA found more than 1 CA Product.';
2952 o_error_reported := k_true;
2953 RAISE e_error;
2954 WHEN no_data_found THEN
2955 o_error_response := 'break_offer_to_uhe Error: Business-Rule section in Offer CA must contain a CA Product.';
2956 o_error_reported := k_true;
2957 RAISE e_error;
2958 END;
2959
2960 --Selecting the ca product value
2961
2962 ELSIF (g_uhe_708_business_rule_header IS NOT NULL AND v_next_br_header_pos IS NOT NULL)
2963 THEN
2964 BEGIN
2965 SELECT cip.param_value
2966 INTO v_ca_product_value
2967 FROM ca_template cat
2968 JOIN ca_template_param ctp
2969 ON (ctp.ca_template_id = cat.ca_template_id)
2970 JOIN ca_template_param_type ctpt
2971 ON ctpt.ca_param_type = ctp.param_type
2972 JOIN ca_instance ci
2973 ON ci.ca_template_id = cat.ca_template_id
2974 JOIN ca_instance_param cip
2975 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
2976 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
2977
2978 WHERE ci.ca_object_id = i_offer_id
2979 AND cip.param_num > r_business_rule_header.ca_param_num
2980 AND cip.param_num < v_next_br_header_pos
2981 AND ctp.param_type = k_product_param_typ;
2982 g.debug('Value ca product:' || v_ca_product_value);
2983 EXCEPTION
2984
2985 WHEN too_many_rows THEN
2986 o_error_response := 'break_offer_to_uhe Error: Business-Rule section in Offer CA found more than 1 CA Product.';
2987 o_error_reported := k_true;
2988 RAISE e_error;
2989 WHEN no_data_found THEN
2990 /*o_error_response := 'break_offer_to_uhe Error: Business-Rule section in Offer CA must contain a CA Product.';
2991 o_error_reported := k_true;
2992 RAISE e_error;*/
2993 g.debug('When no CA Product defined use the Default CA Product Type from the Interface');
2994 v_ca_product_value := NULL;
2995 END;
2996
2997 ELSE
2998 BEGIN
2999 SELECT cip.param_value
3000 INTO v_ca_product_value
3001 FROM ca_template cat
3002 JOIN ca_template_param ctp
3003 ON (ctp.ca_template_id = cat.ca_template_id)
3004 JOIN ca_template_param_type ctpt
3005 ON ctpt.ca_param_type = ctp.param_type
3006 JOIN ca_instance ci
3007 ON ci.ca_template_id = cat.ca_template_id
3008 JOIN ca_instance_param cip
3009 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3010 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3011
3012 WHERE ci.ca_object_id = i_offer_id
3013 AND cip.param_num > r_business_rule_header.ca_param_num
3014
3015 AND ctp.param_type = k_product_param_typ;
3016 g.debug('Value ca product:' || v_ca_product_value);
3017 EXCEPTION
3018
3019 WHEN too_many_rows THEN
3020 o_error_response := 'break_offer_to_uhe Error: Business-Rule section in Offer CA found more than 1 CA Product.';
3021 o_error_reported := k_true;
3022 RAISE e_error;
3023 WHEN no_data_found THEN
3024 g.debug('When no CA Product defined use the Default CA Product Type from the Interface');
3025 v_ca_product_value := NULL;
3026 END;
3027
3028 END IF;
3029
3030 v_ca_product_type_id := LTRIM(RTRIM(SUBSTR(v_ca_product_value,0,1)));
3031
3032 g.debug('Prod Type ID=' || v_ca_product_type_id);
3033 BEGIN
3034 SELECT
3035 tl.table_description,
3036 tl.table_code
3037 INTO v_ca_product_type,
3038 v_ca_product_type_code
3039 FROM table_line tl
3040 WHERE tl.table_id = k_caprod_tl
3041 AND tl.table_code = v_ca_product_type_id;
3042 EXCEPTION WHEN NO_DATA_FOUND THEN
3043 IF trim(g_uhe_708_def_ca_prod_type) IS NULL
3044 THEN
3045
3046 o_error_response := 'break_offer_to_uhe Error: Default CA Product Type property is not set in 708 Interface.';
3047 o_error_reported := k_true;
3048 RAISE e_error;
3049
3050 ELSE
3051 --Assign the Default Ca Product Type value from 708 Interface
3052 v_ca_product_type := g_uhe_708_def_ca_prod_type;
3053 g.debug('Default Ca Product Type value from 708 Interface: '|| g_uhe_708_def_ca_prod_type);
3054
3055 SELECT tl.table_code
3056 INTO v_ca_product_type_code
3057 FROM table_line tl
3058 WHERE tl.table_id = k_caprod_tl
3059 AND tl.table_line_isn = ibms_prop.get_property_number(k_708_def_ca_prod_type_prop,g_interface_id);
3060 END IF;
3061 END;
3062
3063 v_ca_parameter_value := LTRIM(RTRIM(SUBSTR(v_ca_product_value,2,20)));
3064
3065 g.debug('ca_template_id=' || v_ca_parameter_value);
3066 IF (v_ca_parameter_value IS NULL)
3067 THEN
3068
3069 v_uhe_offer := i_offer_id || k_underscore || v_ca_product_type;
3070
3071 ELSE
3072 v_uhe_offer := i_offer_id || k_underscore || v_ca_product_type || k_underscore || v_ca_parameter_value;
3073
3074 END IF;
3075 --Fetch all params for a business rule.
3076 g.debug('UHE OFFER=' || v_uhe_offer);
3077
3078 IF (v_next_br_header_pos IS NOT NULL)
3079 THEN
3080 OPEN c_params_br
3081
3082 FOR
3083
3084 SELECT ci.ca_object_id AS offer_id,
3085 cat.ca_template_id AS ca_template_id,
3086 cat.ui_descr AS ca_template_name,
3087 cip.param_num AS ca_param_num,
3088 ctp.descr AS ca_param_descr,
3089 ctp.param_type AS ca_param_type_code,
3090 ctpt.ca_param_type AS ca_param_type,
3091 cip.param_value AS ca_param_value,
3092 lead(ctpt.description) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_type,
3093 lead(cip.param_num) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_num
3094
3095 FROM ca_template cat
3096 JOIN ca_template_param ctp
3097 ON (ctp.ca_template_id = cat.ca_template_id)
3098
3099 JOIN ca_template_param_type ctpt
3100 ON ctpt.ca_param_type = ctp.param_type
3101 JOIN ca_instance ci
3102 ON ci.ca_template_id = cat.ca_template_id
3103 JOIN ca_instance_param cip
3104 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3105 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3106
3107 WHERE ci.ca_object_id = i_offer_id
3108 AND cip.param_num > v_current_br_header_pos
3109 AND cip.param_num < v_next_br_header_pos
3110 ORDER BY cip.param_num,
3111 cip.param_value;
3112
3113 ELSE
3114 OPEN c_params_br
3115
3116 FOR
3117
3118 SELECT ci.ca_object_id AS offer_id,
3119 cat.ca_template_id AS ca_template_id,
3120 cat.ui_descr AS ca_template_name,
3121 cip.param_num AS ca_param_num,
3122 ctp.descr AS ca_param_descr,
3123 ctp.param_type AS ca_param_type_code,
3124 ctpt.ca_param_type AS ca_param_type,
3125 cip.param_value AS ca_param_value,
3126 lead(ctpt.description) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_type,
3127 lead(cip.param_num) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_num
3128
3129 FROM ca_template cat
3130 JOIN ca_template_param ctp
3131 ON (ctp.ca_template_id = cat.ca_template_id)
3132
3133 JOIN ca_template_param_type ctpt
3134 ON ctpt.ca_param_type = ctp.param_type
3135 JOIN ca_instance ci
3136 ON ci.ca_template_id = cat.ca_template_id
3137 JOIN ca_instance_param cip
3138 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3139 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3140
3141 WHERE ci.ca_object_id = i_offer_id
3142 AND cip.param_num > v_current_br_header_pos
3143 ORDER BY cip.param_num,
3144 cip.param_value;
3145
3146 END IF;
3147
3148 LOOP
3149 FETCH c_params_br
3150 INTO r_uhe_params;
3151 EXIT WHEN c_params_br%NOTFOUND;
3152
3153 IF (r_uhe_params.ca_param_type_code = k_product_param_typ)
3154 THEN
3155
3156 v_ca_product_type_id := LTRIM(RTRIM(SUBSTR(r_uhe_params.ca_param_value,0,1)));
3157 g.debug('Prod Type ID='||v_ca_product_type_id);
3158 BEGIN
3159 SELECT
3160 tl.table_description,
3161 tl.table_code
3162 INTO v_ca_product_type,
3163 v_ca_product_type_code
3164 FROM table_line tl
3165 WHERE tl.table_id = k_caprod_tl
3166 AND tl.table_code = v_ca_product_type_id;
3167 EXCEPTION WHEN NO_DATA_FOUND THEN
3168 IF trim(g_uhe_708_def_ca_prod_type) IS NULL
3169 THEN
3170
3171 o_error_response := 'break_offer_to_uhe Error: Default CA Product Type property is not set in 708 Interface.';
3172 o_error_reported := k_true;
3173 RAISE e_error;
3174
3175 ELSE
3176 --Assign the Default Ca Product Type value from 708 Interface
3177 v_ca_product_type := g_uhe_708_def_ca_prod_type;
3178 g.debug('Default Ca Product Type value from 708 Interface: '|| g_uhe_708_def_ca_prod_type);
3179
3180 SELECT tl.table_code
3181 INTO v_ca_product_type_code
3182 FROM table_line tl
3183 WHERE tl.table_id = k_caprod_tl
3184 AND tl.table_line_isn = ibms_prop.get_property_number(k_708_def_ca_prod_type_prop,g_interface_id);
3185 END IF;
3186 END;--408154001
3187 v_ca_parameter_value := LTRIM(RTRIM(SUBSTR(r_uhe_params.ca_param_value,2,20)));
3188
3189 -- Parental Rating parameter
3190 ELSIF r_uhe_params.ca_param_type_code = k_par_rating_param
3191 THEN
3192
3193 IF trim(r_uhe_params.ca_param_value) IS NOT NULL
3194 THEN
3195 SELECT decode(tl.numeric_1,-1,0,tl.numeric_1)
3196 INTO v_ca_parameter_value
3197 FROM table_line tl
3198 WHERE tl.table_id = k_vercer_tl
3199 AND tl.table_code = r_uhe_params.ca_param_value;
3200 g.debug('CERTIFICATION ='||v_ca_parameter_value);
3201 ELSIF trim(r_uhe_params.ca_param_value) IS NULL
3202 THEN
3203 --Get maximum certification
3204 v_ca_parameter_value := get_offer_parental_rating(i_offer_id => i_offer_id);
3205 IF trim(v_ca_parameter_value) IS NULL AND trim(g_uhe_708_default_certific) != 0 OR trim(v_ca_parameter_value) = 0 THEN
3206 --Get value from 708 Default Certification
3207 SELECT tl.numeric_1
3208 INTO v_ca_parameter_value
3209 FROM table_line tl
3210 WHERE tl.table_id = k_vercer_tl
3211 AND tl.table_line_isn = g_uhe_708_default_certific;
3212 ELSIF trim(v_ca_parameter_value) IS NULL AND trim(g_uhe_708_default_certific) = 0 THEN
3213 BEGIN
3214 --Get value from Table Line VERCER where logical_1 = 1
3215 v_ca_parameter_value := g_def_cert;
3216
3217 EXCEPTION
3218
3219 WHEN no_data_found THEN
3220 o_error_response := 'break_offer_to_uhe Error: Failed to set value for CA Parameter ' ||r_uhe_params.ca_param_type;
3221 o_error_reported := k_true;
3222 END;
3223 END IF;
3224 END IF;
3225 -- Fed parameter type
3226 ELSIF r_uhe_params.ca_param_type = k_fed_param_type
3227 THEN
3228
3229 IF trim(r_uhe_params.ca_param_value) IS NOT NULL
3230 THEN
3231
3232 v_ca_parameter_value := format_ora_date_utc(v_timezone, TO_DATE(r_uhe_params.ca_param_value,k_uhe_date_format));
3233
3234 ELSE
3235 BEGIN
3236 --Selecting the provisional end date from Offer Level
3237 SELECT vos.provisional_end_date
3238 INTO v_prov_end_date
3239 FROM vod_offer_schedule vos
3240 WHERE vos.offer_id = i_offer_id;
3241
3242 IF v_prov_end_date IS NOT NULL AND v_prov_end_date != k_min_date AND trim(g_uhe_708_default_time_fed) IS NOT NULL
3243 THEN
3244 --Take value from interface and concatenate it with Prov End Date.
3245 v_ca_parameter_value := format_ora_date_utc(v_timezone, TO_DATE(v_prov_end_date ||k_date_t_character ||g_uhe_708_default_time_fed,k_uhe_date_format));
3246 ELSE
3247 v_ca_parameter_value := NULL;
3248 END IF;
3249
3250 EXCEPTION
3251 WHEN no_data_found THEN
3252 o_error_response := 'break_offer_to_uhe Error: Failed to set value for CA Parameter '||r_uhe_params.ca_param_type;
3253 o_error_reported := k_true;
3254 END;
3255
3256 END IF;
3257
3258 ELSE
3259
3260 v_ca_parameter_value := r_uhe_params.ca_param_value;
3261
3262 END IF;
3263 IF (r_uhe_params.ca_param_type_code = k_product_param_typ AND trim(LTRIM(RTRIM(SUBSTR(r_uhe_params.ca_param_value,2,20)))) IS NULL)
3264 --if CA Product ID is null or we have more than 2 Ca Products we will omit it from the set of Ca Params
3265 THEN
3266 g.debug('Ca Product ID Value will be omited from the Export');
3267 r_all_uhe_offer1.extend();
3268 r_all_uhe_offer1(r_all_uhe_offer1.last).purchase_offer_id := replace(v_uhe_offer,k_space, k_underscore);
3269 r_all_uhe_offer1(r_all_uhe_offer1.last).business_rule_id := v_business_rule_id;
3270 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type := replace(v_ca_product_type,k_space, k_underscore);
3271 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type_code := v_ca_product_type_code;
3272 ELSE
3273 r_all_uhe_offer1.extend();
3274 r_all_uhe_offer1(r_all_uhe_offer1.last).purchase_offer_id := replace(v_uhe_offer,k_space, k_underscore);
3275 r_all_uhe_offer1(r_all_uhe_offer1.last).business_rule_id := v_business_rule_id;
3276 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type := replace(v_ca_product_type,k_space, k_underscore);
3277 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type_code := v_ca_product_type_code;
3278 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_description := r_uhe_params.ca_param_descr;
3279 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_type_code := r_uhe_params.ca_param_type_code;
3280 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_value := v_ca_parameter_value;
3281 END IF;--408154001
3282 --Adding Common params
3283 IF (r_uhe_params.next_ca_param_type = g_uhe_708_business_rule_header OR
3284 r_uhe_params.next_ca_param_type IS NULL)
3285 THEN
3286
3287 OPEN c_common_params;
3288
3289 LOOP
3290 FETCH c_common_params
3291 INTO r_uhe_common_params;
3292 EXIT WHEN c_common_params%NOTFOUND;
3293
3294 IF (r_uhe_params.ca_param_type != r_uhe_common_params.ca_param_type)
3295 THEN
3296 IF r_uhe_common_params.ca_param_type_code = k_par_rating_param
3297 THEN
3298 IF trim(r_uhe_common_params.ca_param_value) IS NOT NULL
3299 THEN
3300 SELECT decode(tl.numeric_1,-1,0,tl.numeric_1)
3301 INTO v_ca_parameter_value
3302 FROM table_line tl
3303 WHERE tl.table_id = k_vercer_tl
3304 AND tl.table_code = r_uhe_common_params.ca_param_value;
3305 g.debug('CERTIFICATION ='||v_ca_parameter_value);
3306 ELSIF trim(r_uhe_common_params.ca_param_value) IS NULL
3307 THEN
3308 v_ca_parameter_value := get_offer_parental_rating(i_offer_id => i_offer_id);
3309 IF trim(v_ca_parameter_value) IS NULL AND trim(g_uhe_708_default_certific) != 0 OR trim(v_ca_parameter_value) = 0 THEN
3310 SELECT tl.numeric_1
3311 INTO v_ca_parameter_value
3312 FROM table_line tl
3313 WHERE tl.table_id = k_vercer_tl
3314 AND tl.table_line_isn = g_uhe_708_default_certific;
3315 ELSIF trim(v_ca_parameter_value) IS NULL AND trim(g_uhe_708_default_certific) = 0 THEN
3316 BEGIN
3317 v_ca_parameter_value := g_def_cert;
3318 EXCEPTION
3319 WHEN no_data_found THEN
3320 o_error_response := 'break_offer_to_uhe Error: Failed to set value for CA Parameter ' ||r_uhe_common_params.ca_param_type;
3321 o_error_reported := k_true;
3322 END;
3323 END IF;
3324 END IF;
3325 ELSIF r_uhe_common_params.ca_param_type = k_fed_param_type
3326 THEN
3327 IF trim(r_uhe_common_params.ca_param_value) IS NOT NULL
3328 THEN
3329 v_ca_parameter_value := format_ora_date_utc(v_timezone, TO_DATE(r_uhe_common_params.ca_param_value,k_uhe_date_format));
3330 ELSE
3331 BEGIN
3332 SELECT vos.provisional_end_date
3333 INTO v_prov_end_date
3334 FROM vod_offer_schedule vos
3335 WHERE vos.offer_id = i_offer_id;
3336 IF v_prov_end_date IS NOT NULL AND v_prov_end_date != k_min_date AND trim(g_uhe_708_default_time_fed) IS NOT NULL
3337 THEN
3338 v_ca_parameter_value := format_ora_date_utc(v_timezone, TO_DATE(v_prov_end_date ||k_date_t_character ||g_uhe_708_default_time_fed,k_uhe_date_format));
3339 ELSE
3340 v_ca_parameter_value := NULL;
3341 END IF;
3342 EXCEPTION
3343 WHEN no_data_found THEN
3344 o_error_response := 'break_offer_to_uhe Error: Failed to set value for CA Parameter '||r_uhe_common_params.ca_param_type;
3345 o_error_reported := k_true;
3346 END;
3347 END IF;
3348 ELSE
3349 v_ca_parameter_value := r_uhe_common_params.ca_param_value;
3350 END IF;
3351 --Fetching common parameters into Collection;
3352 r_all_uhe_offer1.extend();
3353 r_all_uhe_offer1(r_all_uhe_offer1.last).purchase_offer_id := replace(v_uhe_offer,k_space, k_underscore);
3354 r_all_uhe_offer1(r_all_uhe_offer1.last).business_rule_id := v_business_rule_id;
3355 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type := replace(v_ca_product_type,k_space, k_underscore);
3356 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type_code := v_ca_product_type_code;
3357 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_description := r_uhe_common_params.ca_param_descr;
3358 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_type_code := r_uhe_common_params.ca_param_type_code;
3359 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_value := v_ca_parameter_value;
3360
3361 END IF;
3362
3363 END LOOP;
3364
3365 CLOSE c_common_params;
3366 END IF;
3367
3368 END LOOP;
3369
3370 END IF;
3371
3372 END LOOP;
3373
3374 IF v_br_header_count = 0
3375 THEN
3376 --When no Business Rule Header
3377
3378 --Count number of Ca Products
3379
3380 SELECT COUNT(cip.param_value)
3381 INTO v_count_ca_product
3382 FROM ca_template cat
3383 JOIN ca_template_param ctp
3384 ON (ctp.ca_template_id = cat.ca_template_id)
3385 JOIN ca_template_param_type ctpt
3386 ON ctpt.ca_param_type = ctp.param_type
3387 JOIN ca_instance ci
3388 ON ci.ca_template_id = cat.ca_template_id
3389 JOIN ca_instance_param cip
3390 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3391 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3392
3393 WHERE ci.ca_object_id = i_offer_id
3394 AND ctp.param_type = k_product_param_typ;
3395
3396 IF v_count_ca_product > 1 OR v_count_ca_product = 0 --when no Ca Product or more then one Ca Product
3397 THEN
3398
3399 g.debug('More then 1 Ca Product found in the Basic Template');
3400 --g_uhe_708_def_ca_prod_type := TRIM(SUBSTR((ibms_prop.get_property_char(k_708_def_ca_prod_type_prop,g_interface_id)),INSTR(ibms_prop.get_property_char(k_708_def_ca_prod_type_prop,g_interface_id),k_space,1)));
3401 --Checking if the Default CA Product Type property is set in 708 Interface
3402 IF trim(g_uhe_708_def_ca_prod_type) IS NULL
3403 THEN
3404
3405 o_error_response := 'break_offer_to_uhe Error: Default CA Product Type property is not set in 708 Interface.';
3406 o_error_reported := k_true;
3407 RAISE e_error;
3408
3409 ELSE
3410 --Assign the Default Ca Product Type value from 708 Interface
3411 v_ca_product_type := g_uhe_708_def_ca_prod_type;
3412 g.debug('Default Ca Product Type value from 708 Interface: '|| g_uhe_708_def_ca_prod_type);
3413
3414 SELECT tl.table_code
3415 INTO v_ca_product_type_code
3416 FROM table_line tl
3417 WHERE tl.table_id = k_caprod_tl
3418 AND tl.table_description = v_ca_product_type;
3419 END IF;
3420
3421 ELSE
3422
3423 BEGIN
3424
3425 SELECT cip.param_value
3426 INTO v_ca_product_value
3427 FROM ca_template cat
3428 JOIN ca_template_param ctp
3429 ON (ctp.ca_template_id = cat.ca_template_id)
3430 JOIN ca_template_param_type ctpt
3431 ON ctpt.ca_param_type = ctp.param_type
3432 JOIN ca_instance ci
3433 ON ci.ca_template_id = cat.ca_template_id
3434 JOIN ca_instance_param cip
3435 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3436 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3437
3438 WHERE ci.ca_object_id = i_offer_id
3439 AND ctp.param_type = k_product_param_typ;
3440
3441 g.debug('Value ca product:' || v_ca_product_value);
3442
3443 --checking if Ca Product Type is having a value
3444 IF Trim(LTRIM(RTRIM(SUBSTR(v_ca_product_value,0,1)))) IS NOT NULL
3445 THEN
3446 BEGIN
3447
3448 v_ca_product_type_id := LTRIM(RTRIM(SUBSTR(v_ca_product_value,0,1)));
3449
3450 g.debug('Prod Type ID=' || v_ca_product_type_id);
3451
3452 SELECT
3453 tl.table_description,
3454 tl.table_code
3455 INTO v_ca_product_type,
3456 v_ca_product_type_code
3457 FROM table_line tl
3458 WHERE tl.table_id = k_caprod_tl
3459 AND tl.table_code = v_ca_product_type_id;
3460
3461 v_ca_parameter_value := LTRIM(RTRIM(SUBSTR(v_ca_product_value,2,20)));
3462
3463 g.debug('ca_template_id=' || v_ca_parameter_value);
3464 END;
3465
3466 ELSE
3467 BEGIN
3468 --When Ca Product Type is empty, get the Default Ca Product Type value from Interface
3469 g.debug('Getting Ca Product Type value from Interface');
3470 g_uhe_708_def_ca_prod_type := TRIM(SUBSTR((ibms_prop.get_property_char(k_708_def_ca_prod_type_prop,g_interface_id)),INSTR(ibms_prop.get_property_char(k_708_def_ca_prod_type_prop,g_interface_id),k_space,1)));
3471
3472 IF trim(g_uhe_708_def_ca_prod_type) IS NULL
3473 THEN
3474
3475 o_error_response := 'break_offer_to_uhe Error: Default CA Product Type property is not set in 708 Interface.';
3476 o_error_reported := k_true;
3477 RAISE e_error;
3478
3479 ELSE
3480 --Assign the Default Ca Product Type value from Interface
3481 v_ca_product_type := g_uhe_708_def_ca_prod_type;
3482 g.debug('Default Ca Product Type value from 708 Interface: '|| g_uhe_708_def_ca_prod_type);
3483
3484 SELECT tl.table_code
3485 INTO v_ca_product_type_code
3486 FROM table_line tl
3487 WHERE tl.table_id = k_caprod_tl
3488 AND tl.table_description = v_ca_product_type;
3489 END IF;
3490 END;
3491
3492 END IF;
3493
3494 END;
3495
3496 END IF;
3497
3498 v_uhe_offer := i_offer_id;
3499
3500 ---Fetch all params when there's no business rule.
3501 g.debug('UHE OFFER=' || v_uhe_offer);
3502
3503 OPEN c_params_br
3504
3505 FOR
3506
3507 SELECT ci.ca_object_id AS offer_id,
3508 cat.ca_template_id AS ca_template_id,
3509 cat.ui_descr AS ca_template_name,
3510 cip.param_num AS ca_param_num,
3511 ctp.descr AS ca_param_descr,
3512 ctp.param_type AS ca_param_type_code,
3513 ctpt.ca_param_type AS ca_param_type,
3514 cip.param_value AS ca_param_value,
3515 lead(ctpt.description) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_type,
3516 lead(cip.param_num) over(ORDER BY cip.param_num, cip.param_value) AS next_ca_param_num
3517
3518 FROM ca_template cat
3519 JOIN ca_template_param ctp
3520 ON (ctp.ca_template_id = cat.ca_template_id)
3521
3522 JOIN ca_template_param_type ctpt
3523 ON ctpt.ca_param_type = ctp.param_type
3524 JOIN ca_instance ci
3525 ON ci.ca_template_id = cat.ca_template_id
3526 JOIN ca_instance_param cip
3527 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3528 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3529
3530 WHERE ci.ca_object_id = i_offer_id
3531 ORDER BY cip.param_num,
3532 cip.param_value;
3533
3534 LOOP
3535 FETCH c_params_br
3536 INTO r_uhe_params;
3537 EXIT WHEN c_params_br%NOTFOUND;
3538
3539 --Checking if CA Product ID is not null
3540 IF (r_uhe_params.ca_param_type_code = k_product_param_typ)
3541 THEN
3542
3543 v_ca_product_type_id := LTRIM(RTRIM(SUBSTR(r_uhe_params.ca_param_value,0,1)));
3544
3545 --checking if we have just 1 Ca Product in the Basic Ca Template, to set the Ca Product Type
3546 IF(TRIM(v_ca_product_type_id) IS NOT NULL AND v_count_ca_product = 1)
3547 THEN
3548 --g.debug('Prod Type ID='||v_ca_product_type_id);
3549
3550 SELECT tl.table_description,
3551 tl.table_code
3552 INTO v_ca_product_type,
3553 v_ca_product_type_code
3554 FROM table_line tl
3555 WHERE tl.table_id = k_caprod_tl
3556 AND tl.table_code = v_ca_product_type_id;
3557 END IF;
3558
3559 --checking if the Ca Product ID is not empty
3560 IF TRIM(LTRIM(RTRIM(SUBSTR(r_uhe_params.ca_param_value,2,20)))) IS NOT NULL
3561 THEN
3562 v_ca_parameter_value := LTRIM(RTRIM(SUBSTR(r_uhe_params.ca_param_value,2,20)));
3563 END IF;
3564 -- Parental Rating parameter
3565 ELSIF r_uhe_params.ca_param_type_code = k_par_rating_param
3566 THEN
3567 IF trim(r_uhe_params.ca_param_value) IS NOT NULL
3568 THEN
3569 SELECT decode(tl.numeric_1,-1,0,tl.numeric_1)
3570 INTO v_ca_parameter_value
3571 FROM table_line tl
3572 WHERE tl.table_id = k_vercer_tl
3573 AND tl.table_code = r_uhe_params.ca_param_value;
3574 g.debug('CERTIFICATION ='||v_ca_parameter_value);
3575 ELSIF trim(r_uhe_params.ca_param_value) IS NULL
3576 THEN
3577 --Get maximum certification
3578 v_ca_parameter_value := get_offer_parental_rating(i_offer_id => i_offer_id);
3579 IF trim(v_ca_parameter_value) IS NULL AND trim(g_uhe_708_default_certific) != 0 OR trim(v_ca_parameter_value) = 0 THEN
3580 --Get value from 708 Default Certification
3581 SELECT tl.numeric_1
3582 INTO v_ca_parameter_value
3583 FROM table_line tl
3584 WHERE tl.table_id = k_vercer_tl
3585 AND tl.table_line_isn = g_uhe_708_default_certific;
3586 ELSIF trim(v_ca_parameter_value) IS NULL AND trim(g_uhe_708_default_certific) = 0 THEN
3587 --Get value from Table Line VERCER where logical_1 = 1
3588 BEGIN
3589 v_ca_parameter_value := g_def_cert;
3590
3591 EXCEPTION
3592 WHEN no_data_found THEN
3593 o_error_response := 'break_offer_to_uhe Error: Failed to set value for CA Parameter '||r_uhe_params.ca_param_type;
3594 o_error_reported := k_true;
3595
3596 END;
3597 END IF;
3598 END IF;
3599
3600 --Fed parameter type
3601 ELSIF r_uhe_params.ca_param_type = k_fed_param_type
3602 THEN
3603
3604 IF trim(r_uhe_params.ca_param_value) IS NOT NULL
3605 THEN
3606
3607 v_ca_parameter_value := format_ora_date_utc(v_timezone, TO_DATE(r_uhe_params.ca_param_value,k_uhe_date_format));
3608
3609 ELSE
3610 BEGIN
3611 --Selecting the provisional end date from Offer Level
3612 SELECT vos.provisional_end_date
3613 INTO v_prov_end_date
3614 FROM vod_offer_schedule vos
3615 WHERE vos.offer_id = i_offer_id;
3616
3617 IF v_prov_end_date IS NOT NULL AND v_prov_end_date != k_min_date AND trim(g_uhe_708_default_time_fed) IS NOT NULL
3618 THEN
3619 --Take value from interface and concatenate it with Prov End Date.
3620 v_ca_parameter_value := format_ora_date_utc(v_timezone, TO_DATE(v_prov_end_date || k_date_t_character ||g_uhe_708_default_time_fed,k_uhe_date_format));
3621 ELSE
3622 v_ca_parameter_value := NULL;
3623
3624 END IF;
3625
3626 EXCEPTION
3627 WHEN no_data_found THEN
3628 o_error_response := 'break_offer_to_uhe Error: Failed to set value for CA Parameter ' || r_uhe_params.ca_param_type;
3629 o_error_reported := k_true;
3630 END;
3631
3632 END IF;
3633
3634 ELSE
3635 v_ca_parameter_value := r_uhe_params.ca_param_value;
3636
3637 END IF;
3638
3639 IF (r_uhe_params.ca_param_type_code = k_product_param_typ AND trim(LTRIM(RTRIM(SUBSTR(r_uhe_params.ca_param_value,2,20)))) IS NULL)
3640 --if CA Product ID is null or we have more than 2 Ca Products we will omit it from the set of Ca Params
3641 THEN
3642
3643 g.debug('Ca Product Element will be omited from the Export');
3644
3645 ELSE
3646
3647 v_business_rule_id := r_uhe_params.ca_template_id;
3648 --Adding the values to the collection
3649 r_all_uhe_offer1.extend();
3650 r_all_uhe_offer1(r_all_uhe_offer1.last).purchase_offer_id := v_uhe_offer;
3651 r_all_uhe_offer1(r_all_uhe_offer1.last).business_rule_id := v_business_rule_id;
3652 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type := replace(v_ca_product_type,k_space, k_underscore);
3653 r_all_uhe_offer1(r_all_uhe_offer1.last).product_type_code := v_ca_product_type_code;
3654 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_description := r_uhe_params.ca_param_descr;
3655 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_type_code := r_uhe_params.ca_param_type_code;
3656 r_all_uhe_offer1(r_all_uhe_offer1.last).ca_param_value := v_ca_parameter_value;
3657
3658 END IF;
3659 END LOOP;
3660
3661 END IF;
3662
3663 o_all_uhe_offer := r_all_uhe_offer1;
3664
3665 g.debug('break_offer_to_uhe generated the following Collection:');
3666 IF r_all_uhe_offer1 IS NOT NULL
3667 THEN
3668
3669 FOR i IN 1 .. r_all_uhe_offer1.count
3670 LOOP
3671 g.debug('-----------------------------');
3672 g.debug('Param Number:' || i);
3673 g.debug('UHE Offer Id:' || r_all_uhe_offer1(i).purchase_offer_id);
3674 g.debug('Business Rule Id:' || r_all_uhe_offer1(i).business_rule_id);
3675 g.debug('Product Type:' || r_all_uhe_offer1(i).product_type);
3676 g.debug('Product Type Code:' || r_all_uhe_offer1(i).product_type_code);
3677 g.debug('CA Param Description:' || r_all_uhe_offer1(i).ca_param_description);
3678 g.debug('Ca Param Type Code:' || r_all_uhe_offer1(i).ca_param_type_code);
3679 g.debug('CA Param Value:' || r_all_uhe_offer1(i).ca_param_value);
3680 g.debug('-----------------------------');
3681 END LOOP;
3682
3683 END IF;
3684
3685 EXCEPTION
3686 WHEN e_error THEN
3687
3688 o_error_reported := k_true;
3689
3690 WHEN OTHERS THEN
3691 v_sqlcode := SQLCODE;
3692 v_sqlerrm := SQLERRM;
3693 o_error_response := 'break_offer_to_uhe process failed. Reason: ' || v_sqlcode || v_sqlerrm;
3694 o_error_reported := k_true;
3695
3696 END;
3697
3698
3699 -------------------------------------------------------------------
3700 -- FUNCTION: Get_Start_End_DateTime
3701 -- Returns startDateTime and startEndTime elements
3702 -------------------------------------------------------------------
3703 FUNCTION Get_Start_End_DateTime (i_offer_id IN vod_offer_schedule.offer_id%TYPE) RETURN XMLTYPE IS
3704
3705 v_return_xml XMLTYPE;
3706
3707 BEGIN
3708
3709 SELECT XMLCONCAT(
3710 XMLELEMENT("startDateTime",
3711 format_ora_date_utc(nvl(ch.timezone_id,0),
3712 TO_DATE(vos.start_date||vos.start_time,k.datemask || k.timemask))
3713 ),
3714 XMLELEMENT("endDateTime",
3715 format_ora_date_utc(nvl(ch.timezone_id,0),
3716 TO_DATE(vos.end_date||vos.end_time,k.datemask || k.timemask))
3717 )
3718 )
3719 INTO v_return_xml
3720 FROM vod_offer_schedule vos
3721 JOIN vod_platform vp ON (vos.platform_id = vp.vod_platform_id)
3722 LEFT OUTER JOIN channel ch ON (ch.channel_code = vp.channel_code)
3723 WHERE vos.offer_id = i_offer_id;
3724
3725 RETURN v_return_xml;
3726
3727 END;
3728 -------------------------------------------------------------------
3729 -- PROCEDURE: Get_Billing_Info
3730 -- This procedure obtains the billing info string
3731 -------------------------------------------------------------------
3732 Procedure Get_Billing_Info (i_offer_id IN vod_offer.vod_offer_id%type,
3733 o_billing_info OUT CLOB,
3734 o_error_message OUT Varchar2,
3735 o_error_reported OUT k.logical%type)
3736 IS
3737
3738
3739 v_billing_info_xml XMLTYPE;
3740 v_ca_detail_xml XMLTYPE;
3741 v_temp_xml XMLTYPE;
3742 v_offer_id vod_offer.vod_offer_id%TYPE;
3743 v_offer_kind table_line.table_description%TYPE;
3744 v_content_code table_line.table_description%TYPE;
3745 v_content_attribute table_line.table_code%TYPE;
3746 v_target_audience table_line.table_description%TYPE;
3747 v_target_attribute table_line.table_code%TYPE;
3748 v_billing_prop_value VARCHAR2(4000);
3749 v_parameter_value ca_instance_param.param_value%TYPE;
3750 v_interface_id table_line.table_id%TYPE := iface.interface_id(k_interface_type);
3751 v_ca_template_id ca_template.ca_template_id%TYPE;
3752 v_temp_billing VARCHAR2(4000);
3753 v_ca_param_num ca_instance_param.param_num%TYPE;
3754 v_param_value ca_instance_param.param_value%TYPE;
3755 v_check_params VARCHAR2(4000);
3756
3757 BEGIN
3758 o_billing_info := NULL;
3759 o_error_reported := k_false;
3760
3761
3762 SELECT cat.ca_template_id
3763 INTO v_ca_template_id
3764 FROM ca_template cat
3765 JOIN ca_instance ci
3766 ON ci.ca_template_id = cat.ca_template_id
3767 WHERE ci.ca_object_id = i_offer_id;
3768
3769 v_billing_prop_value := ibms_prop.get_property_char(i_property_code => k_708_billing_info_par_prop ,
3770 i_object_id => v_interface_id ,
3771 i_level_1_id => v_ca_template_id,
3772 i_level_2_id => 0);
3773
3774 g.debug('Original v_billing_prop_value:'||v_billing_prop_value);
3775 IF trim(v_billing_prop_value) IS NOT NULL THEN
3776 v_ca_detail_xml := NULL;
3777 v_check_params := NULL;
3778 WHILE trim(v_billing_prop_value) IS NOT NULL
3779 LOOP
3780
3781 --perform a series of checks on the retrieved string--
3782 --check if string is under expected format e.g '3~VOD Parameter^4~VOD Parameter[...]'--
3783
3784 IF instr (v_billing_prop_value, '^',1,1) > 0 THEN
3785 v_temp_billing := substr(v_billing_prop_value, 1, instr (v_billing_prop_value, k_special_char_1, 1, 1));
3786 g.debug('v_temp_billing:'||v_temp_billing);
3787
3788 --check if param id is a number--
3789 IF instr(v_temp_billing, k_special_char_2) >0
3790 AND (LENGTH(TRIM(TRANSLATE(SUBSTR(v_temp_billing,1,INSTR(v_temp_billing,k_special_char_2)-1), k_number_string, ' '))) IS NULL )
3791 AND INSTR(v_temp_billing,k_special_char_2)>1
3792 THEN
3793 v_billing_prop_value := SUBSTR(v_billing_prop_value, length(v_temp_billing)+1);
3794 v_temp_billing := REPLACE(v_temp_billing,k_special_char_1, '');
3795 g.debug('New v_billing_prop_value:'||v_billing_prop_value);
3796 g.debug('Check string is :'||v_check_params);
3797 IF v_check_params IS NULL OR instr(v_check_params, v_temp_billing ) = 0 THEN
3798 BEGIN
3799 SELECT cip.param_value
3800 INTO v_param_value
3801 FROM ca_template cat
3802 JOIN ca_template_param ctp
3803 ON (ctp.ca_template_id = cat.ca_template_id)
3804 JOIN ca_template_param_type ctpt
3805 ON ctpt.ca_param_type = ctp.param_type
3806 JOIN ca_instance ci
3807 ON ci.ca_template_id = cat.ca_template_id
3808 JOIN ca_instance_param cip
3809 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3810 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3811 WHERE ci.ca_object_id = i_offer_id
3812 AND cip.param_num = SUBSTR(v_temp_billing,1,INSTR(v_temp_billing,k_special_char_2)-1);
3813
3814 EXCEPTION
3815 WHEN no_data_found THEN
3816 o_error_message := 'Configured parameter number '||SUBSTR(v_temp_billing,1,INSTR(v_temp_billing,k_special_char_2)-1) ||' does not exist in CA Template instance for offer '||i_offer_id;
3817 RAISE e_error;
3818 END;
3819 --handle empty attribute case--
3820 IF trim(' ' FROM v_param_value) IS NOT NULL THEN
3821
3822 SELECT XMLCONCAT(v_ca_detail_xml,
3823 XMLCONCAT(XMLELEMENT("parameter",
3824 XMLATTRIBUTES( SUBSTR(v_temp_billing,INSTR(v_temp_billing,k_special_char_2)+1) AS "name",
3825 v_param_value AS "value")
3826 )
3827 )
3828 )
3829 INTO v_ca_detail_xml
3830 FROM dual;
3831
3832 ELSE
3833
3834 SELECT XMLELEMENT("parameter",
3835 XMLATTRIBUTES( SUBSTR(v_temp_billing,INSTR(v_temp_billing,k_special_char_2)+1) AS "name",
3836 trim(' ' FROM v_param_value) AS "value")
3837 )
3838
3839 INTO v_temp_xml
3840 FROM dual;
3841
3842 v_temp_xml := iface.add_empty_attribute(i_xml => v_temp_xml , i_attribute_name =>'value');
3843
3844 SELECT XMLCONCAT(v_ca_detail_xml,
3845 XMLCONCAT(v_temp_xml))
3846 INTO v_ca_detail_xml
3847 FROM dual;
3848
3849 END IF;
3850 v_check_params := v_check_params || v_temp_billing || '^';
3851 g.debug('Check string is :'||v_check_params);
3852 ELSE
3853 v_billing_info_xml := NULL;
3854 o_billing_info := NULL;
3855 o_error_message := 'Multiple occurrences of '|| REPLACE(v_temp_billing,k_special_char_1, '') || '. Please check values for property "Billing Info Parameters" under interface 708';
3856 RAISE e_error;
3857 END IF;
3858 ELSE
3859 v_billing_info_xml := NULL;
3860 o_billing_info := NULL;
3861 o_error_message := 'CA Template value does not have expected format for "'|| REPLACE(v_temp_billing,k_special_char_1, '') || '". Please check values for property "Billing Info Parameters" under interface 708';
3862 RAISE e_error;
3863
3864 END IF;
3865
3866 ELSE
3867
3868 v_temp_billing := v_billing_prop_value;
3869 --check if param id is a number--
3870
3871 IF instr(v_temp_billing, k_special_char_2) >0
3872 AND (LENGTH(TRIM(TRANSLATE(SUBSTR(v_temp_billing,1,INSTR(v_temp_billing,k_special_char_2)-1), k_number_string, ' '))) IS NULL)
3873 AND INSTR(v_temp_billing,k_special_char_2)>1
3874 THEN
3875 IF v_check_params is null or instr(v_check_params, v_temp_billing ) = 0 THEN
3876 g.debug('New v_billing_prop_value:'||v_billing_prop_value);
3877 BEGIN
3878 SELECT cip.param_value
3879 INTO v_param_value
3880 FROM ca_template cat
3881 JOIN ca_template_param ctp
3882 ON (ctp.ca_template_id = cat.ca_template_id)
3883 JOIN ca_template_param_type ctpt
3884 ON ctpt.ca_param_type = ctp.param_type
3885 JOIN ca_instance ci
3886 ON ci.ca_template_id = cat.ca_template_id
3887 JOIN ca_instance_param cip
3888 ON (cip.ca_template_id = cat.ca_template_id AND cip.param_num = ctp.param_num AND
3889 cip.ca_object_type = ci.ca_object_type AND cip.ca_object_id = ci.ca_object_id)
3890 WHERE ci.ca_object_id = i_offer_id
3891 AND cip.param_num = SUBSTR(v_temp_billing,1,INSTR(v_temp_billing,k_special_char_2)-1);
3892
3893 EXCEPTION
3894 WHEN no_data_found THEN
3895 o_error_message := 'Configured parameter number '||SUBSTR(v_temp_billing,1,INSTR(v_temp_billing,k_special_char_2)-1) ||' does not exist in CA Template instance for offer '||i_offer_id;
3896 RAISE e_error;
3897 END;
3898
3899 --handle empty attribute case--
3900 IF trim(' ' FROM v_param_value) IS NOT NULL THEN
3901
3902
3903 SELECT XMLCONCAT(v_ca_detail_xml,
3904 XMLCONCAT(XMLELEMENT("parameter",
3905 XMLATTRIBUTES( SUBSTR(v_temp_billing,INSTR(v_temp_billing,k_special_char_2)+1) AS "name",
3906 v_param_value AS "value")
3907 )
3908 )
3909 )
3910 INTO v_ca_detail_xml
3911 FROM dual;
3912
3913 ELSE
3914
3915 SELECT XMLELEMENT("parameter",
3916 XMLATTRIBUTES( SUBSTR(v_temp_billing,INSTR(v_temp_billing,k_special_char_2)+1) AS "name",
3917 trim(' ' FROM v_param_value) AS "value")
3918 )
3919
3920 INTO v_temp_xml
3921 FROM dual;
3922
3923 v_temp_xml := iface.add_empty_attribute(i_xml => v_temp_xml , i_attribute_name =>'value');
3924
3925 SELECT XMLCONCAT(v_ca_detail_xml,
3926 XMLCONCAT(v_temp_xml))
3927 INTO v_ca_detail_xml
3928 FROM dual;
3929
3930 END IF;
3931 v_check_params := v_check_params || v_temp_billing || '^';
3932 g.debug('v_check_params:'||v_check_params);
3933 ELSE
3934 v_billing_info_xml := NULL;
3935 o_billing_info := NULL;
3936 o_error_message := 'Multiple occurrences of '|| REPLACE(v_temp_billing,k_special_char_1, '') || '. Please check values for property "Billing Info Parameters" under interface 708';
3937 RAISE e_error;
3938 END IF;
3939 ELSE
3940 v_billing_info_xml := NULL;
3941 o_billing_info := NULL;
3942 o_error_message := 'CA Template value does not have expected format for "'|| REPLACE(v_temp_billing,k_special_char_1, '') || '". Please check values for property "Billing Info Parameters" under interface 708';
3943 RAISE e_error;
3944
3945 END IF;
3946
3947 g.debug('v_temp_billing:'||v_temp_billing);
3948 v_billing_prop_value := SUBSTR(v_billing_prop_value, length(v_temp_billing)+1);
3949 g.debug('New v_billing_prop_value:'||v_billing_prop_value);
3950 END IF;
3951
3952 END LOOP;
3953
3954 --get offer kind--
3955 BEGIN
3956 SELECT tl.table_description
3957 INTO v_offer_kind
3958 FROM table_line tl
3959 JOIN vod_offer_type vot ON (tl.table_reference=vot.type_kind)
3960 LEFT OUTER JOIN vod_offer_schedule vos ON (vot.vod_offer_type_id=vos.offer_type_id)
3961 WHERE vos.offer_id = i_offer_id;
3962
3963 EXCEPTION
3964 WHEN no_data_found THEN
3965 v_offer_kind := NULL;
3966 END;
3967 --get marketing info data--
3968 BEGIN
3969 SELECT tl.table_description, tl.table_code
3970 INTO v_content_code, v_content_attribute
3971 FROM table_line tl
3972 JOIN vod_offer_schedule vos ON (tl.table_code = vos.content_code)
3973 WHERE vos.offer_id = i_offer_id
3974 AND tl.table_id = k_ofrtcc_tl;
3975
3976 EXCEPTION
3977 WHEN no_data_found THEN
3978 v_content_code := NULL;
3979 v_content_attribute := NULL;
3980 END;
3981 BEGIN
3982 SELECT tl.table_description, tl.table_code
3983 INTO v_target_audience, v_target_attribute
3984 FROM table_line tl
3985 JOIN vod_offer_schedule vos ON (tl.table_code = vos.target_audience)
3986 WHERE vos.offer_id = i_offer_id
3987 AND tl.table_id = k_ofrtta_tl;
3988
3989 EXCEPTION
3990 WHEN no_data_found THEN
3991 v_target_audience := NULL;
3992 v_target_attribute := NULL;
3993 END;
3994 --create final XML--
3995 v_billing_info_xml := NULL;
3996
3997 SELECT XMLCONCAT(
3998 XMLELEMENT("trafficBillingInfo",
3999 XMLELEMENT("offerId",i_offer_id),
4000 XMLELEMENT("offerKind", v_offer_kind),
4001 CASE WHEN v_content_code IS NOT NULL OR v_target_audience IS NOT NULL THEN
4002 XMLELEMENT("marketingInfo",
4003 CASE WHEN v_content_code IS NOT NULL THEN
4004 XMLELEMENT("contentCode",
4005 XMLATTRIBUTES(v_content_attribute as "code"), v_content_code)
4006 ELSE
4007 NULL
4008 END,
4009 CASE WHEN v_target_audience IS NOT NULL THEN
4010 XMLELEMENT("targetAudience",
4011 XMLATTRIBUTES(v_target_attribute as "code"),v_target_audience)
4012 ELSE
4013 NULL
4014 END
4015 )
4016 ELSE
4017 NULL
4018 END,
4019 XMLELEMENT("parameters",v_ca_detail_xml)
4020 )
4021 )
4022
4023 INTO v_billing_info_xml
4024 FROM DUAL;
4025
4026 --output XML as a clob--
4027
4028 o_billing_info := '<![CDATA['||k_xml_version_encode || v_billing_info_xml.getClobVal()||']]>';
4029
4030
4031 ELSE
4032 o_billing_info := NULL;
4033 o_error_reported := k_true;
4034 o_error_message := 'No CA Template configured for property Billing Info Parameters. Please check interface 708.';
4035 END IF;
4036
4037 EXCEPTION
4038
4039 WHEN e_error THEN
4040 o_billing_info := NULL;
4041 o_error_reported := k_true;
4042 WHEN no_data_found THEN
4043 o_billing_info := NULL;
4044 o_error_reported := k_true;
4045 o_error_message := 'No CA Template attached for offer ' || i_offer_id;
4046
4047 WHEN OTHERS THEN
4048 o_billing_info := NULL;
4049 o_error_reported := k_true;
4050 o_error_message := 'Internal PL/SQL error ' || SQLERRM;
4051
4052
4053 END Get_Billing_Info;
4054
4055 -------------------------------------
4056 -- Procedure: Get_Lts_Data
4057 --------------------------------------
4058 PROCEDURE Get_Lts_Data (i_object_type IN table_line.table_code%TYPE,
4059 i_object_id IN NUMBER,
4060 o_lts_set_xml OUT XMLTYPE,
4061 o_error_reported OUT t.logical%TYPE) IS
4062
4063 v_error_reported NUMBER;
4064 c_error_response SYS_REFCURSOR;
4065 c_properties SYS_REFCURSOR;
4066
4067 v_lts_xml XMLTYPE;
4068 v_sort_string_xml XMLTYPE;
4069 c_lts_set SYS_REFCURSOR;
4070 r_lts_set rt_lts_set;
4071 vt_lts_set tt_lts_set:=tt_lts_set();
4072 vt_lts_set_copy tt_lts_set:=tt_lts_set();
4073 v_find_code NUMBER:=k_false;
4074 v_version_type version.version_type%TYPE;
4075 v_channel_code channel.channel_code%TYPE;
4076 v_find_channel_code NUMBER:=k_false;
4077
4078 BEGIN
4079 acquisitions_api.GetLtsSetDetails ( i_object_type => i_object_type,
4080 i_object_id => i_object_id,
4081 i_required_attrs => NULL,
4082 o_lts_set_details => c_lts_set,
4083 o_properties => c_properties,
4084 o_error_reported => v_error_reported,
4085 o_error_response => c_error_response);
4086 IF v_error_reported = k_true THEN
4087 o_error_reported := v_error_reported;
4088
4089 ELSE
4090
4091 LOOP
4092 FETCH c_lts_set INTO r_lts_set;
4093 EXIT WHEN c_lts_set%NOTFOUND;
4094 vt_lts_set_copy.extend();
4095 vt_lts_set_copy(vt_lts_set_copy.last):=r_lts_set;
4096 END LOOP;
4097
4098 SELECT v.version_type,vp.channel_code
4099 INTO v_version_type,v_channel_code
4100 FROM vod_offer_schedule_item vosi
4101 JOIN vod_item_schedule vis ON (vis.item_schedule_id = vosi.item_schedule_id)
4102 JOIN version v ON (v.version_id = vis.version_id)
4103 JOIN vod_platform vp ON vp.vod_platform_id=vis.platform_id
4104 WHERE vosi.offer_id = g_offer_id
4105 AND ROWNUM=1;
4106 FOR r_lts_code IN ( SELECT tl.table_code,tl.table_description
4107 FROM table_line tl
4108 WHERE tl.table_id=k_ltsttp_tl
4109 AND tl.secondary_code!=' '
4110 ORDER BY tl.secondary_code
4111 )
4112 LOOP
4113 EXIT WHEN v_find_code=k_true;
4114 FOR i in 1..vt_lts_set_copy.last
4115 LOOP
4116 IF vt_lts_set_copy(i).target_type_code=r_lts_code.table_code
4117 AND to_char(SYSDATE,k.datemask)
4118 >= (CASE vt_lts_set_copy(i).from_date
4119 WHEN '00000000' THEN '00010101'
4120 ELSE vt_lts_set_copy(i).from_date
4121 END)
4122 AND to_char(SYSDATE,k.datemask) <= (CASE vt_lts_set_copy(i).to_date
4123 WHEN '00000000' THEN '99990101'
4124 ELSE vt_lts_set_copy(i).to_date
4125 END) THEN
4126 IF vt_lts_set_copy(i).target_type_code=k_target_type_code_ver THEN
4127 IF vt_lts_set_copy(i).target_code=v_version_type THEN
4128 vt_lts_set.extend();
4129 vt_lts_set(vt_lts_set.last):=vt_lts_set_copy(i);
4130 END IF;
4131 ELSE IF vt_lts_set_copy(i).target_type_code=k_target_type_code_chg THEN
4132
4133 SELECT nvl(MAX(1),0)
4134 INTO v_find_channel_code
4135 FROM channel_group_detail c
4136 JOIN channel h ON c.channel_id = h.channel_id
4137 JOIN channel_group cg ON cg.channel_group_id=c.channel_group_id
4138 WHERE c.channel_group_id =
4139 ( SELECT cg.channel_group_id
4140 FROM channel_group cg
4141 WHERE cg.short_code=vt_lts_set_copy(i).target_code AND cg.channel_group_type=k_lts_channel_group_type
4142 )
4143 AND h.channel_code=v_channel_code;
4144 IF v_find_channel_code=k_true THEN
4145 vt_lts_set.extend();
4146 vt_lts_set(vt_lts_set.last):=vt_lts_set_copy(i);
4147 v_find_channel_code:=k_false;
4148 END IF;
4149 ELSE
4150 vt_lts_set.extend();
4151 vt_lts_set(vt_lts_set.last):=vt_lts_set_copy(i);
4152 END IF;
4153 END IF;
4154 END IF;
4155 END LOOP;
4156 IF vt_lts_set.count>0 THEN
4157 v_find_code:=k_true;
4158 END IF;
4159 END LOOP;
4160 IF vt_lts_set.count=0 THEN
4161 v_error_reported:=k_true;
4162 o_error_reported := v_error_reported;
4163 ELSE
4164
4165 FOR i in 1..vt_lts_set.last LOOP
4166 SELECT XMLCONCAT(v_lts_xml,
4167 XMLELEMENT("title",
4168 XMLATTRIBUTES(lower(vt_lts_set(i).language_code) as "lang"),
4169 vt_lts_set(i).title_name)
4170 )
4171 INTO v_lts_xml
4172 FROM dual;
4173 END LOOP;
4174
4175 FOR i in 1..vt_lts_set.last LOOP
4176 SELECT XMLCONCAT(v_lts_xml,
4177 XMLELEMENT("synopsis",
4178 XMLATTRIBUTES(lower(vt_lts_set(i).language_code) as "lang",
4179 k_str_type_med as "length"),
4180 trim(vt_lts_set(i).synopsis)),
4181 XMLELEMENT("synopsis",
4182 XMLATTRIBUTES(lower(vt_lts_set(i).language_code) as "lang",
4183 k_str_type_long as "length"),
4184 trim(vt_lts_set(i).long_description))
4185 )
4186 INTO v_lts_xml
4187 FROM dual;
4188 END LOOP;
4189
4190 IF i_object_type=k_vod_offer_ext THEN --introduced support for Marketing Message form Extended LTS only for Collection or Series Offers without leading season
4191 FOR i in 1..vt_lts_set.last LOOP
4192 SELECT XMLCONCAT(v_lts_xml,
4193 XMLELEMENT("marketingMessage",
4194 XMLATTRIBUTES(lower(vt_lts_set(i).language_code) as "lang"),
4195 vt_lts_set(i).marketing_message)
4196 )
4197 INTO v_lts_xml
4198 FROM dual;
4199 END LOOP;
4200 END IF;
4201
4202 SELECT XMLELEMENT("sortStringMode", g_sort_string)
4203 INTO v_sort_string_xml
4204 FROM dual;
4205
4206 IF i_object_type=k_show OR i_object_type=k_season OR i_object_type=k_vod_offer_ext THEN --introduced support for Extended LTS
4207 FOR i in 1..vt_lts_set.last LOOP
4208 IF vt_lts_set(i).language_code=k_eng THEN
4209 SELECT XMLCONCAT(v_sort_string_xml,
4210 XMLELEMENT("sortStringEx",
4211 XMLATTRIBUTES(lower(vt_lts_set(i).language_code) as "lang"),
4212 format_title(vt_lts_set(i).title_name))
4213 )
4214
4215 INTO v_sort_string_xml
4216 FROM dual;
4217 END IF;
4218 END LOOP;
4219
4220 ELSE
4221 FOR i in 1..vt_lts_set.last LOOP
4222 SELECT XMLCONCAT(v_sort_string_xml,
4223 XMLELEMENT("sortStringEx",
4224 XMLATTRIBUTES(lower(vt_lts_set(i).language_code) as "lang"),
4225 decode( vt_lts_set(i).language_code,
4226 k_eng, format_title(vt_lts_set(i).title_name),
4227 vt_lts_set(i).title_name)
4228 )
4229 )
4230 INTO v_sort_string_xml
4231 FROM dual;
4232 END LOOP;
4233 END IF;
4234
4235 SELECT XMLCONCAT(v_lts_xml,
4236 XMLELEMENT("sortString",v_sort_string_xml)
4237 )
4238 INTO v_lts_xml
4239 FROM dual;
4240
4241 o_lts_set_xml := v_lts_xml;
4242
4243 END IF;
4244 END IF;
4245
4246 EXCEPTION
4247 WHEN OTHERS THEN
4248 o_lts_set_xml:=NULL;
4249 o_error_reported:=k_true;
4250
4251 END Get_Lts_Data;
4252
4253 --------------------------------------------
4254 -- Function: Get_Purchase_Offering_Data
4255 --------------------------------------------
4256 FUNCTION Get_Purchase_Offering_Data (i_offer_id IN vod_offer_schedule.offer_id%TYPE) RETURN XMLTYPE IS
4257
4258 v_po_data_xml XMLTYPE;
4259 v_offer_xml XMLTYPE;
4260 v_pg_data_xml XMLTYPE;
4261 v_binding_xml XMLTYPE;
4262 v_ca_detail_xml XMLTYPE;
4263 v_epg_detail_xml XMLTYPE;
4264 v_pbility_xml XMLTYPE;
4265 v_gr_member_xml XMLTYPE;
4266 v_single_po_xml XMLTYPE;
4267 v_temp_clob CLOB;
4268 v_msg_blob BLOB;
4269 v_post_status NUMBER;
4270 v_url VARCHAR2(400);
4271
4272 v_all_uhe_offers tt_uhe_offer_tab;
4273 v_error_reported k.logical%TYPE;
4274 v_error_response t.max_varchar2%TYPE;
4275 v_locale_id VARCHAR2(50);
4276 v_billing_info CLOB;
4277
4278 v_prev_poid VARCHAR2(100):=' ';
4279 v_ca_index NUMBER;
4280
4281 v_offer_start VARCHAR2(25);
4282 v_offer_end VARCHAR2(25);
4283 v_version_copy_id version_copy.version_copy_id%TYPE;
4284 v_ca_prod_type VARCHAR2(50);
4285 v_timezone vod_platform.timezone_id%TYPE;
4286
4287 BEGIN
4288
4289 SELECT XMLELEMENT("id",format_uri('PurchaseOffering',i_offer_id))
4290 INTO v_po_data_xml
4291 FROM dual;
4292
4293 SELECT vp.timezone_id
4294 INTO v_timezone
4295 FROM vod_platform vp
4296 JOIN vod_offer_schedule vos
4297 ON vos.platform_id = vp.vod_platform_id
4298 WHERE vos.offer_id = g_offer_id AND rownum = 1;
4299
4300 break_offer_to_uhe(i_offer_id,
4301 v_all_uhe_offers,
4302 v_error_reported,
4303 v_error_response);
4304 IF v_error_reported != k_false THEN
4305 g_error_response:='Failed to break IBMS Offer to multiple UHE Purchase Offers.' ||v_error_response;
4306 RAISE e_business;--410365002
4307 END IF;
4308
4309 Get_Billing_Info (i_offer_id,
4310 v_billing_info,
4311 v_error_response,
4312 v_error_reported);
4313
4314 IF v_error_reported != k_false THEN
4315 g_error_response:=v_error_response;
4316 RAISE e_business;--411030002
4317 END IF;
4318
4319 FOR i IN 1..v_all_uhe_offers.count LOOP
4320
4321 IF v_all_uhe_offers(i).purchase_offer_id != v_prev_poid THEN
4322
4323 v_ca_detail_xml :=NULL;
4324 v_ca_index :=i;
4325
4326 WHILE v_all_uhe_offers(v_ca_index).purchase_offer_id = v_all_uhe_offers(i).purchase_offer_id LOOP
4327
4328 IF NOT gt_content_control_ca_set.EXISTS(v_all_uhe_offers(v_ca_index).ca_param_type_code) THEN
4329 IF v_all_uhe_offers(v_ca_index).ca_param_type_code= k_fed_param_type THEN
4330 SELECT XMLCONCAT(v_ca_detail_xml,
4331 XMLELEMENT("CAParameter",
4332 XMLELEMENT("parameterName",v_all_uhe_offers(v_ca_index).ca_param_description),
4333 XMLELEMENT("parameterValue", v_all_uhe_offers(v_ca_index).ca_param_value) --UTC Formatting is done in API
4334 )
4335 )
4336 INTO v_ca_detail_xml
4337 FROM dual;
4338 ELSE
4339 SELECT XMLCONCAT(v_ca_detail_xml,
4340 decode( v_all_uhe_offers(v_ca_index).ca_param_value,NULL,NULL,
4341 XMLELEMENT("CAParameter",
4342 XMLELEMENT("parameterName",v_all_uhe_offers(v_ca_index).ca_param_description),
4343 XMLELEMENT("parameterValue",v_all_uhe_offers(v_ca_index).ca_param_value)
4344 )
4345 )--408154001
4346 )
4347 INTO v_ca_detail_xml
4348 FROM dual;
4349 END IF;
4350 END IF;
4351
4352 v_ca_index:=v_ca_index+1;
4353 IF v_ca_index > v_all_uhe_offers.count THEN EXIT;
4354 END IF;
4355 END LOOP;
4356
4357
4358 SELECT XMLAGG(
4359 XMLELEMENT("name",
4360 XMLATTRIBUTES(lower(el.language_code) as "lang"),
4361 el.object_name)
4362 )
4363 INTO v_epg_detail_xml
4364 FROM object_epg_language el
4365 WHERE el.object_id = i_offer_id
4366 AND el.object_type = k_vod_offer;
4367 SELECT XMLCONCAT(v_epg_detail_xml,
4368 XMLAGG(
4369 XMLELEMENT("description",
4370 XMLATTRIBUTES(lower(el.language_code) as "lang"),
4371 nvl(TRIM(el.synopsis),trim(el.marketing_message)))
4372 )
4373 )
4374 INTO v_epg_detail_xml
4375 FROM object_epg_language el
4376 WHERE el.object_id = i_offer_id
4377 AND el.object_type = k_vod_offer;
4378
4379 BEGIN
4380 v_ca_prod_type := gt_ca_product_type_map(v_all_uhe_offers(i).product_type_code);
4381 EXCEPTION
4382 WHEN OTHERS THEN
4383 v_ca_prod_type := null;
4384 END;
4385
4386 IF TRIM(v_all_uhe_offers(i).business_rule_id) IS NULL THEN
4387 g_error_response := 'No business rule set for Purchase Offer '||v_all_uhe_offers(i).purchase_offer_id;
4388 RAISE e_business;
4389 END IF;
4390
4391 SELECT XMLCONCAT(
4392 XMLELEMENT("id", format_uri('PurchaseOffer',v_all_uhe_offers(i).purchase_offer_id)),
4393 XMLELEMENT("startDateTime",
4394 format_ora_date_utc(nvl(ch.timezone_id,0),
4395 TO_DATE(vos.start_date||vos.start_time,k.datemask || k.timemask))
4396 ),
4397 XMLELEMENT("endDateTime",
4398 format_ora_date_utc(nvl(ch.timezone_id,0),
4399 TO_DATE(vos.end_date||vos.end_time,k.datemask || k.timemask))
4400 ),
4401 XMLELEMENT("offerKey", v_all_uhe_offers(i).purchase_offer_id),
4402 XMLELEMENT("type", v_ca_prod_type),
4403 XMLELEMENT("lastBuyDateTime",
4404 format_ora_date_utc ( nvl(ch.timezone_id,0),
4405 TO_DATE(vos.expiry_date||vos.expiry_time,k.datemask || k.timemask))
4406 ),
4407 v_epg_detail_xml,
4408 XMLELEMENT("price",
4409 XMLELEMENT("startOffset",k_price_offset),
4410 XMLELEMENT("Price",
4411 XMLELEMENT("isDefault",k_true_text),
4412 XMLELEMENT("currencyId",get_price_currency(vos.currency_code)),
4413 XMLELEMENT("value",nvl(vos.offer_cost,0.00))
4414 )
4415 ),
4416 XMLELEMENT("caDetail",
4417 XMLELEMENT("businessRuleId",v_all_uhe_offers(i).business_rule_id),
4418 XMLELEMENT("Parameter",v_ca_detail_xml)
4419 ),
4420 decode(get_rental_duration(g_rental_un_ca_val),
4421 null,null,
4422 XMLELEMENT("rentalDuration",get_rental_duration(g_rental_un_ca_val))
4423 )
4424 )
4425 INTO v_offer_xml
4426 FROM vod_offer_schedule vos
4427 JOIN vod_platform vp ON (vos.platform_id = vp.vod_platform_id)
4428 LEFT OUTER JOIN channel ch ON (ch.channel_code = vp.channel_code)
4429 WHERE vos.offer_id = i_offer_id;
4430
4431 --Purchasability Data
4432 v_locale_id := gt_uhe_locale_set(to_char(g_platform_id));
4433
4434 SELECT XMLELEMENT("purchasability",
4435 XMLELEMENT("OfferPurchasability",
4436 XMLELEMENT("localeId",/*format_uri('LocaleScheme',*/v_locale_id/*)*/), --407076001
4437 XMLELEMENT("startDateTime",
4438 format_ora_date_utc(nvl(ch.timezone_id,0),
4439 TO_DATE(vos.start_date||vos.start_time,k.datemask || k.timemask))
4440 ),
4441 XMLELEMENT("endDateTime",
4442 format_ora_date_utc(nvl(ch.timezone_id,0),
4443 TO_DATE(vos.end_date||vos.end_time,k.datemask || k.timemask))
4444 )
4445 )
4446 )
4447 INTO v_pbility_xml
4448 FROM vod_offer_schedule vos
4449 JOIN vod_platform vp ON (vos.platform_id = vp.vod_platform_id)
4450 LEFT OUTER JOIN channel ch ON (ch.channel_code = vp.channel_code)
4451 WHERE vos.offer_id = i_offer_id;
4452 --Purchasability Data - End
4453
4454 SELECT vos.start_date||vos.start_time,
4455 vos.end_date||vos.end_time
4456 INTO v_offer_start,
4457 v_offer_end
4458 FROM vod_offer_schedule vos
4459 WHERE vos.offer_id = i_offer_id;
4460
4461 --Offer Binding
4462 SELECT XMLCONCAT(
4463 XMLELEMENT("id", format_uri('PurchaseGroup',v_all_uhe_offers(i).purchase_offer_id)),
4464 Get_Start_End_DateTime(g_offer_id)
4465 )
4466 INTO v_binding_xml
4467 FROM dual;
4468
4469 FOR r_items IN c_items (i_offer_id) LOOP
4470
4471 v_version_copy_id := get_version_copy_id (r_items.item_schedule_id);
4472
4473 SELECT XMLELEMENT("groupMembers",
4474 decode(vis.start_date||vis.start_time,
4475 v_offer_start,null,
4476 XMLELEMENT("startDateTime",
4477 format_ora_date_utc(nvl(ch.timezone_id,0),
4478 TO_DATE(vis.start_date||vis.start_time,k.datemask || k.timemask))
4479 )
4480 ),
4481 decode(vis.end_date||vis.end_time,
4482 v_offer_end,null,
4483 XMLELEMENT("endDateTime",
4484 format_ora_date_utc(nvl(ch.timezone_id,0),
4485 TO_DATE(vis.end_date||vis.end_time,k.datemask || k.timemask))
4486 )
4487 ),
4488 XMLELEMENT("contentInstanceId",
4489 DECODE(g_is_tstv_offer,
4490 k_false,format_uri('ContentInstanceMetadata',v_version_copy_id),
4491 k_true,format_uri('TstvContentInstanceMetadata', g_offer_id))
4492 ),--410525001
4493 XMLELEMENT("memberType",k_group_member_inst)
4494 )
4495 INTO v_gr_member_xml
4496 FROM vod_item_schedule vis
4497 JOIN vod_platform vp ON (vis.platform_id = vp.vod_platform_id)
4498 LEFT OUTER JOIN channel ch ON (ch.channel_code = vp.channel_code)
4499 WHERE vis.item_schedule_id = r_items.item_schedule_id;
4500
4501 SELECT XMLCONCAT(v_binding_xml, v_gr_member_xml)
4502 INTO v_binding_xml
4503 FROM dual;
4504
4505 END LOOP;
4506
4507 SELECT XMLCONCAT (v_binding_xml,
4508 XMLELEMENT("purchaseOffer",format_uri('PurchaseOffer',v_all_uhe_offers(i).purchase_offer_id))
4509 )
4510 INTO v_binding_xml
4511 FROM dual;
4512
4513 SELECT XMLCONCAT (v_pg_data_xml,
4514 XMLELEMENT("offerBinding",v_binding_xml)
4515 )
4516 INTO v_pg_data_xml
4517 FROM dual;
4518
4519 IF g_series = k_true OR g_collection = k_true THEN
4520 /*Season binding*/
4521 IF g_season_id IS NULL THEN
4522 SELECT XMLELEMENT("offerBinding",
4523 XMLELEMENT("id", format_uri('PurchaseGroup',v_all_uhe_offers(i).purchase_offer_id)||'_Collection'),
4524 Get_Start_End_DateTime(g_offer_id),
4525 XMLELEMENT("groupMembers",
4526 XMLELEMENT("contentInstanceId",format_uri('CollectionContentGroupMetadata',g_offer_id)),
4527 XMLELEMENT("memberType",k_group_member_grp)
4528 ),
4529 XMLELEMENT("purchaseOffer",format_uri('PurchaseOffer',v_all_uhe_offers(i).purchase_offer_id))
4530 )
4531 INTO v_binding_xml
4532 FROM dual;
4533 ELSE
4534 SELECT XMLELEMENT("offerBinding",
4535 XMLELEMENT("id", format_uri('PurchaseGroup',v_all_uhe_offers(i).purchase_offer_id)||'_Season'),
4536 Get_Start_End_DateTime(g_offer_id),
4537 XMLELEMENT("groupMembers",
4538 XMLELEMENT("contentInstanceId",format_uri('SeasonContentGroupMetadata',g_season_id)),
4539 XMLELEMENT("memberType",k_group_member_grp)
4540 ),
4541 XMLELEMENT("purchaseOffer",format_uri('PurchaseOffer',v_all_uhe_offers(i).purchase_offer_id))
4542 )
4543 INTO v_binding_xml
4544 FROM dual;
4545 END IF;
4546 SELECT XMLCONCAT (v_pg_data_xml,v_binding_xml)
4547 INTO v_pg_data_xml
4548 FROM dual;
4549
4550 /*Show binding*/
4551 IF g_show_id IS NOT NULL THEN
4552 SELECT XMLELEMENT("offerBinding",
4553 XMLELEMENT("id", format_uri('PurchaseGroup',v_all_uhe_offers(i).purchase_offer_id)||'_Show'),
4554 Get_Start_End_DateTime(g_offer_id),
4555 XMLELEMENT("groupMembers",
4556 XMLELEMENT("contentInstanceId",format_uri('ShowContentGroupMetadata',g_show_id)),
4557 XMLELEMENT("memberType",k_group_member_grp)
4558 ),
4559 XMLELEMENT("purchaseOffer",format_uri('PurchaseOffer',v_all_uhe_offers(i).purchase_offer_id))
4560 )
4561 INTO v_binding_xml
4562 FROM dual;
4563
4564 SELECT XMLCONCAT (v_pg_data_xml,v_binding_xml)
4565 INTO v_pg_data_xml
4566 FROM dual;
4567 END IF;
4568
4569 END IF;
4570 --Offer Binding - End
4571
4572 IF g_is_tstv_offer = k_false THEN
4573 SELECT XMLCONCAT (v_pbility_xml,
4574 XMLELEMENT("operatorSpecificData",
4575 XMLELEMENT("OperatorSpecificData",
4576 XMLELEMENT("namespace",'urn:nnds:oasm:metadata:billingRecord'),
4577 XMLELEMENT("data",v_billing_info)
4578 )
4579 )
4580 )
4581 INTO v_pbility_xml
4582 FROM dual;
4583 END IF;
4584
4585 SELECT XMLELEMENT ("offer",
4586 XMLCONCAT(v_offer_xml,v_pbility_xml)
4587 )
4588 INTO v_single_po_xml
4589 FROM dual;
4590
4591 SELECT XMLCONCAT(v_po_data_xml,v_single_po_xml)
4592 INTO v_po_data_xml
4593 FROM dual;
4594 v_prev_poid := v_all_uhe_offers(i).purchase_offer_id;
4595 END IF;
4596 END LOOP;
4597
4598 SELECT XMLCONCAT(v_po_data_xml, v_pg_data_xml)
4599 INTO v_po_data_xml
4600 FROM dual;
4601
4602 SELECT XMLELEMENT("PurchaseOffering",
4603 XMLATTRIBUTES (format_uri('PurchaseOffering',i_offer_id) as "resourceId",
4604 'PUT' as "action"),
4605 v_po_data_xml)
4606 INTO v_po_data_xml
4607 FROM dual;
4608
4609 v_url := g_base_url || '/catalogue/offer/purchaseOffering/' || format_uri('PurchaseOffering',i_offer_id);
4610 v_temp_clob:= v_po_data_xml.getclobval();
4611 v_temp_clob := k_xml_version_encode||k_space||'<PurchaseOfferingRequest xmlns="'|| g_service_namespace
4612 ||'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="'||g_service_namespace||' purchaseoffering.xsd">'
4613 || v_temp_clob || '</PurchaseOfferingRequest>';
4614
4615 Http_Post_UHE( i_url => v_url,
4616 i_object_type => k_purchase_offering,
4617 i_object_id => i_offer_id,
4618 i_message => v_temp_clob,
4619 i_io_file_id => g_io_file_id,
4620 o_status => v_post_status);
4621
4622
4623
4624
4625
4626
4627 RETURN v_po_data_xml;
4628
4629 END Get_Purchase_Offering_Data;
4630
4631 -------------------------------------
4632 -- Function: Get_Offer_Channel_Group_ID
4633 --------------------------------------
4634
4635 FUNCTION Get_Offer_Channel_Group_ID (i_offer_item_id IN vod_offer_schedule_item.item_schedule_id%TYPE)
4636 RETURN NUMBER
4637 IS
4638
4639 k_process_name CONSTANT VARCHAR2(63) := 'Get_Offer_Channel_Group_ID';
4640 v_channel_group_id channel_group.channel_group_id%TYPE;
4641 g_708_classif_channel_grp_type table_line.table_code%TYPE;
4642
4643 BEGIN
4644
4645 g_interface_id := iface.interface_id(k_interface_type);
4646 g.debug('Interface ID ='||g_interface_id);
4647 g_708_classif_channel_grp_type := table_line_util.table_code(ibms_prop.get_property_number(k_708_classif_ch_gr_ty_prop,g_interface_id));
4648 g.debug('Channel Group Type: '|| g_708_classif_channel_grp_type);
4649
4650 BEGIN
4651
4652 SELECT cgd.channel_group_id
4653 INTO v_channel_group_id
4654 FROM vod_offer_schedule_item vosi
4655 JOIN vod_offer_schedule vos
4656 ON vosi.offer_id = vos.offer_id
4657 JOIN vod_platform vp
4658 ON vp.vod_platform_id = vos.platform_id
4659 JOIN channel c
4660 ON c.channel_code = vp.channel_code
4661 JOIN channel_group_detail cgd
4662 ON cgd.channel_id = c.channel_id
4663 JOIN channel_group cg
4664 ON cg.channel_group_id = cgd.channel_group_id
4665 WHERE vosi.item_schedule_id = i_offer_item_id
4666 AND cg.channel_group_type = g_708_classif_channel_grp_type
4667 AND rownum = 1;
4668
4669 EXCEPTION
4670 WHEN no_data_found
4671 THEN
4672 v_channel_group_id := -1;
4673
4674 END;
4675
4676 RETURN v_channel_group_id;
4677
4678 END Get_Offer_Channel_Group_ID;
4679 ------------------------------------------------------------------------------------------------
4680 -- Function: Get_Classification_Sharing
4681 -- Usage: checks if "Classification Sharing" has any configuration and if it has, it retruns
4682 -- either a k_space or the status itself if input code is configured;
4683 -- if no congig is found, status configured in "Next Status on Export Success" is used.
4684 ------------------------------------------------------------------------------------------------
4685 FUNCTION Get_Classification_Sharing (i_code IN table_line.table_code%TYPE)
4686 RETURN table_line.table_code%TYPE
4687 IS
4688 BEGIN
4689 IF gt_classif_sharing.count >0 THEN
4690 IF gt_classif_sharing.EXISTS(i_code) THEN
4691 RETURN gt_classif_sharing(i_code);
4692 ELSE
4693 RETURN k_space;
4694 END IF;
4695 ELSE
4696 RETURN g_success_status;
4697 END IF;
4698
4699 END Get_Classification_Sharing;
4700 --------------------------------------------
4701 -- Function: Get_Leading_Season
4702 --------------------------------------------
4703 FUNCTION Get_Leading_Season (i_offer_id IN vod_offer_schedule.offer_id%TYPE) RETURN season.season_id%TYPE
4704 IS
4705 v_season_id season.season_id%TYPE;
4706 v_series_id series.series_id%TYPE;
4707 BEGIN
4708
4709 SELECT vos.series_id
4710 INTO v_series_id
4711 FROM vod_offer_schedule vos
4712 WHERE vos.offer_id = i_offer_id;
4713
4714 SELECT ss.season_id
4715 INTO v_season_id
4716 FROM season_series ss
4717 WHERE ss.series_id = v_series_id;
4718
4719 RETURN v_season_id;
4720 EXCEPTION
4721 WHEN NO_DATA_FOUND THEN
4722 RETURN NULL;
4723 END Get_Leading_Season;
4724
4725 --------------------------------------------
4726 -- Function: Get_Purchasable_Season_Data
4727 --------------------------------------------
4728 FUNCTION Get_Purchasable_Season_Data ( i_season_id IN season.season_id%TYPE,
4729 i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE) return XMLTYPE IS
4730 v_season_data_xml XMLTYPE;
4731 v_season_meta_xml XMLTYPE;
4732 v_pi_metadata_xml XMLTYPE;
4733 v_ii_metadata_xml XMLTYPE;
4734 v_ii_metadata_node XMLTYPE;
4735
4736 v_version_copy_id version_copy.version_copy_id%TYPE;
4737 r_season_media_assoc object_media_assoc_rec;
4738 vt_season_image_assoc tt_object_media_assoc:=tt_object_media_assoc();
4739 vt_season_preview_assoc tt_object_media_assoc:=tt_object_media_assoc();
4740 v_concat_lang VARCHAR2(2000);
4741 v_multimedia_id NUMBER;
4742 v_tape_type version_copy.tape_type%TYPE;
4743 v_tape_type_desc table_line.table_description%TYPE;
4744 v_delivery_type VARCHAR2(50);
4745 v_offer_chan_group_id channel_group.channel_group_id%TYPE;
4746 v_sysdate DATE;
4747 c_season_media_assoc SYS_REFCURSOR;
4748 v_error_reported NUMBER;
4749 c_error_response SYS_REFCURSOR;
4750 c_properties SYS_REFCURSOR;
4751 c_offer_classifications SYS_REFCURSOR;
4752
4753 r_offer_classification Offer_Classification_Rec;
4754 v_classifications tt_id_exists;
4755 v_series_id season_series.series_id%TYPE;
4756
4757 TYPE t_classif_term IS TABLE OF NUMBER(10);
4758 v_classif_term t_classif_term := t_classif_term();
4759 --------------------------------------------
4760 -- Function: Get_Season_Group_Metadata
4761 --------------------------------------------
4762 FUNCTION Get_Season_Group_Desc_Metadata (i_season_id IN season.season_id%TYPE) RETURN XMLTYPE IS
4763 v_sg_metadata_xml XMLTYPE;
4764 v_dm_data_xml XMLTYPE;
4765 v_sortstring_xml XMLTYPE;
4766 v_assoc_xml XMLTYPE;
4767 v_temp_xml XMLTYPE;
4768 v_classref_xml XMLTYPE;
4769
4770 v_error_reported NUMBER;
4771
4772 BEGIN
4773
4774 SELECT XMLCONCAT(
4775 XMLELEMENT("id",format_uri('SeasonContentGroupMetadata',i_season_id)),
4776 XMLELEMENT("key",i_season_id),
4777 XMLELEMENT("isRoot",k_false_text),
4778 XMLELEMENT("numOfItems",(select count(1) FROM vod_offer_schedule_item vosi WHERE vosi.offer_id = g_offer_id)),
4779 XMLELEMENT("groupType",/*g_show_group_type*/ k_series_group),
4780 XMLELEMENT("subGroupType",g_show_group_stype)
4781 )
4782 INTO v_sg_metadata_xml
4783 FROM dual;
4784
4785 --Start - descriptiveMetadata
4786 Get_Lts_Data (i_object_type => k_season,
4787 i_object_id => i_season_id,
4788 o_lts_set_xml => v_dm_data_xml,
4789 o_error_reported => v_error_reported);
4790
4791 IF v_error_reported = k_true THEN
4792
4793 SELECT XMLAGG(
4794 XMLELEMENT("title",
4795 XMLATTRIBUTES(lower(el.language_code) as "lang"),
4796 el.object_name)
4797 )
4798 INTO v_dm_data_xml
4799 FROM object_epg_language el
4800 WHERE el.object_id = i_season_id
4801 AND el.object_type = k_season;
4802
4803 SELECT XMLCONCAT(v_dm_data_xml,
4804 XMLAGG(
4805 XMLCONCAT (
4806 XMLELEMENT("synopsis",
4807 XMLATTRIBUTES(lower(el.language_code) as "lang",
4808 k_str_type_med as "length"),
4809 trim(el.synopsis)),
4810 XMLELEMENT("synopsis",
4811 XMLATTRIBUTES(lower(el.language_code) as "lang",
4812 k_str_type_long as "length"),
4813 trim(el.long_description))
4814
4815 )
4816 )
4817 )
4818 INTO v_dm_data_xml
4819 FROM object_epg_language el
4820 WHERE el.object_id = i_season_id
4821 AND el.object_type = k_season;
4822
4823 SELECT XMLAGG(
4824 XMLELEMENT("sortStringEx",
4825 XMLATTRIBUTES(lower(el.language_code) as "lang"),
4826 format_title(el.object_name)
4827 )
4828 )
4829 INTO v_sortstring_xml
4830 FROM object_epg_language el
4831 WHERE el.object_id = i_season_id
4832 AND el.object_type = k_season
4833 AND el.language_code = k_eng;
4834
4835 SELECT XMLCONCAT(v_dm_data_xml,
4836 XMLELEMENT("sortString",
4837 XMLELEMENT("sortStringMode",g_sort_string),
4838 v_sortstring_xml)
4839 )
4840 INTO v_dm_data_xml
4841 FROM dual;
4842 END IF;
4843
4844 v_offer_chan_group_id := Get_Offer_Channel_Group_ID(i_offer_item_id => i_offer_item_id);
4845 g.debug('v_offer_chan_group_id', v_offer_chan_group_id);
4846 v_sysdate := SYSDATE;
4847
4848 BEGIN
4849 SELECT ss.series_id
4850 INTO v_series_id
4851 FROM vod_offer_schedule vos
4852 JOIN season_series SS ON vos.series_id=ss.series_id
4853 WHERE vos.offer_id=g_offer_id;
4854 EXCEPTION
4855 WHEN no_data_found THEN
4856 SELECT ss.series_id
4857 INTO v_series_id
4858 FROM season_series ss
4859 WHERE ss.season_id = i_season_id
4860 AND ROWNUM = 1;
4861 END;
4862
4863 --classificationRef--
4864 v_classref_xml := NULL;
4865 FOR r_offer_id IN ( SELECT vosi.offer_id
4866 FROM season_series SS
4867 JOIN vod_offer_schedule vos ON (SS.series_id=vos.series_id AND
4868 (vos.end_date > TO_CHAR(v_sysdate, k_date_mask) OR (vos.end_date = TO_CHAR(v_sysdate, k_date_mask) AND
4869 vos.end_time > TO_CHAR(v_sysdate, k_time_mask))))
4870 JOIN vod_offer_schedule_item vosi ON vosi.offer_id=vos.offer_id
4871 JOIN vod_item_schedule vis ON vosi.item_schedule_id=vis.item_schedule_id
4872 JOIN offer_type ot ON (vos.offer_type_id = ot.offer_type_id)
4873 JOIN table_line vodotk ON (ot.container_type = vodotk.table_reference AND vodotk.table_id = k_vodotk_tl)
4874 JOIN table_line vodofr ON (vos.status = vodofr.table_reference AND vodofr.table_id = k_vodofr_tl)
4875 WHERE SS.series_id=v_series_id
4876 AND vodotk.table_description = k_series
4877 AND (vodofr.table_code = g_success_status OR vosi.offer_id = g_offer_id)
4878 AND vosi.item_schedule_id = i_offer_item_id--410533001, to take just the relevant Offer ClassificationTerms
4879 UNION
4880
4881 SELECT vosi.offer_id
4882 FROM season_series SS
4883 JOIN vod_offer_schedule vos ON (SS.series_id=vos.series_id AND
4884 (vos.end_date > TO_CHAR(v_sysdate, k_date_mask) OR (vos.end_date = TO_CHAR(v_sysdate, k_date_mask) AND
4885 vos.end_time > TO_CHAR(v_sysdate, k_time_mask))))
4886 JOIN vod_offer_schedule_item vosi ON vosi.offer_id=vos.offer_id
4887 JOIN vod_item_schedule vis ON vosi.item_schedule_id=vis.item_schedule_id
4888 JOIN offer_type ot ON (vos.offer_type_id = ot.offer_type_id)
4889 JOIN table_line vodotk ON (ot.container_type = vodotk.table_reference AND vodotk.table_id = k_vodotk_tl)
4890 JOIN table_line vodofr ON (vos.status = vodofr.table_reference AND vodofr.table_id = k_vodofr_tl)
4891 JOIN vod_platform vp ON (vp.vod_platform_id = vos.platform_id)
4892 JOIN channel c ON (c.channel_code = vp.channel_code)
4893 JOIN channel_group_detail cgd ON (cgd.channel_id = c.channel_id AND cgd.channel_group_id = v_offer_chan_group_id)
4894 WHERE SS.series_id=v_series_id
4895 AND vodotk.table_description = k_series
4896 AND vodofr.table_code = Get_Classification_Sharing(vodofr.table_code))
4897
4898 LOOP
4899 on_demand_api.GetOfferClassifications (i_offer_id => r_offer_id.offer_id,
4900 o_offer_classifications => c_offer_classifications,
4901 o_error_reported => v_error_reported,
4902 o_error_response => c_error_response,
4903 o_properties => c_properties);
4904 IF v_error_reported = k_false THEN
4905
4906 LOOP
4907 FETCH c_offer_classifications INTO r_offer_classification;
4908 EXIT WHEN c_offer_classifications%NOTFOUND;
4909 IF TRIM(r_offer_classification.effectivePeriodStartDate) IS NOT NULL THEN
4910 SELECT XMLCONCAT(v_classref_xml,
4911 XMLELEMENT("classificationRef",
4912 XMLATTRIBUTES(
4913 NVL(TRIM(r_offer_classification.presentationOrder),
4914 g_default_class) AS "order",
4915 format_uri('ClassificationTerm',r_offer_classification.contentId) AS "termRef"
4916 ),
4917 DECODE(TRIM(r_offer_classification.effectivePeriodStartDate),
4918 NULL,NULL,
4919 XMLELEMENT("startDateTime",format_ora_date_utc ( g_timezone_id,
4920 TO_DATE(r_offer_classification.effectivePeriodStartDate || r_offer_classification.effectivePeriodStartTime,
4921 k.datemask || k.timemask))
4922 )
4923 ),
4924 DECODE (TRIM(r_offer_classification.effectivePeriodFinishDate),
4925 NULL,NULL,
4926 XMLELEMENT("endDateTime",format_ora_date_utc ( g_timezone_id,
4927 TO_DATE(r_offer_classification.effectivePeriodFinishDate || r_offer_classification.effectivePeriodFinishTime,
4928 k.datemask || k.timemask))
4929 )
4930 )
4931 )
4932 )
4933 INTO v_classref_xml
4934 FROM dual;
4935
4936 ELSIF r_offer_classification.contentId NOT MEMBER OF v_classif_term THEN
4937 SELECT XMLCONCAT(v_classref_xml,
4938 XMLELEMENT("classificationRef",
4939 XMLATTRIBUTES(
4940 NVL(TRIM(r_offer_classification.presentationOrder),
4941 g_default_class) AS "order",
4942 format_uri('ClassificationTerm',r_offer_classification.contentId) AS "termRef"
4943 ),
4944 DECODE(TRIM(r_offer_classification.effectivePeriodStartDate),
4945 NULL,NULL,
4946 XMLELEMENT("startDateTime",format_ora_date_utc ( g_timezone_id,
4947 TO_DATE(r_offer_classification.effectivePeriodStartDate || r_offer_classification.effectivePeriodStartTime,
4948 k.datemask || k.timemask))
4949 )
4950 ),
4951 DECODE (TRIM(r_offer_classification.effectivePeriodFinishDate),
4952 NULL,NULL,
4953 XMLELEMENT("endDateTime",format_ora_date_utc ( g_timezone_id,
4954 TO_DATE(r_offer_classification.effectivePeriodFinishDate || r_offer_classification.effectivePeriodFinishTime,
4955 k.datemask || k.timemask))
4956 )
4957 )
4958 )
4959 )
4960 INTO v_classref_xml
4961 FROM dual;
4962 v_classif_term.EXTEND;
4963 v_classif_term(v_classif_term.last) := r_offer_classification.contentId;
4964 END IF;
4965
4966 END LOOP;
4967 END IF;
4968 END LOOP;
4969
4970 SELECT XMLCONCAT(v_dm_data_xml,v_classref_xml)
4971 INTO v_dm_data_xml
4972 FROM dual;
4973
4974 --407076001
4975 /*SELECT XMLCONCAT(v_dm_data_xml,
4976 decode(g.genre_id,
4977 null,null,
4978 XMLELEMENT("genre",format_urn('genre',nvl(get_genre_mapping(g.genre_id),g.descr)))),
4979 decode(sg.full_id,
4980 null,null,
4981 XMLELEMENT("genre",format_urn('genre',nvl(get_genre_mapping(sg.full_id),sg.sub_genre_descr))))
4982 )
4983 INTO v_dm_data_xml
4984 FROM season s
4985 LEFT OUTER JOIN genre_descr g ON (s.genre_id = g.genre_id and g.lang = k_eng)
4986 LEFT OUTER JOIN epg_genre_language_view sg ON (s.subgenre_id = sg.sub_genre_id and g.genre_id = sg.genre_id and sg.LANGUAGE_CODE = k_eng)
4987 WHERE s.season_id = i_season_id;*/
4988
4989 SELECT XMLCONCAT(v_dm_data_xml,
4990 decode(g.genre_id,
4991 null,null,
4992 XMLELEMENT("genre",g_genre_code_prefix|| g.genre_id || k_colon ||decode(sgd.sub_genre_id,
4993 null,null,
4994 sgd.sub_genre_id )))
4995 )
4996 INTO v_dm_data_xml
4997 FROM season se
4998 LEFT OUTER JOIN show s ON se.show_id = s.show_id
4999 LEFT OUTER JOIN genre_descr g ON (s.epg_genre_id = g.genre_id and g.lang = k_eng)
5000 LEFT OUTER JOIN sub_genre_descr sgd ON (s.epg_subgenre_id = sgd.sub_genre_id and sgd.lang = k_eng)
5001 WHERE se.season_id = i_season_id
5002 AND ROWNUM = 1;
5003
5004 /*Related Material*/
5005 FOR i in 1..vt_season_preview_assoc.count LOOP
5006 IF gt_related_usage.EXISTS(vt_season_preview_assoc(i).rolecode) THEN
5007 BEGIN
5008 SELECT XMLCONCAT(
5009 XMLELEMENT("contentInstanceRef",
5010 XMLELEMENT("value",format_uri('ContentInstanceMetadata',i_season_id||k_underscore||vt_season_preview_assoc(i).versionCopyId))
5011 ),
5012 XMLELEMENT("howRelated",/*format_urn('mediaType',*/ gt_usage_map(vt_season_preview_assoc(i).rolecode)/*)*/)
5013 )
5014 INTO v_temp_xml
5015 FROM dual;
5016
5017
5018 EXCEPTION
5019 WHEN OTHERS THEN
5020 SELECT 'No Usage mapping defined for '||table_description
5021 INTO g_error_response
5022 FROM table_line
5023 WHERE table_id = k_ttlusg_tl
5024 AND table_code = vt_season_preview_assoc(i).rolecode;
5025
5026 RAISE e_business;
5027 END;
5028
5029 SELECT XMLCONCAT(v_assoc_xml,
5030 XMLELEMENT("RelatedMaterial",v_temp_xml))
5031 INTO v_assoc_xml
5032 FROM dual;
5033 END IF;
5034
5035 END LOOP;
5036
5037 SELECT XMLCONCAT(v_dm_data_xml,
5038 XMLELEMENT("relatedMaterial",v_assoc_xml))
5039 INTO v_dm_data_xml
5040 FROM dual;
5041
5042 v_assoc_xml := NULL;
5043
5044 /*Presentation Media*/
5045 FOR r_usage IN (select table_code as usage
5046 from table_line
5047 where table_id = k_ttlusg_tl)
5048 LOOP
5049 IF gt_present_usage.EXISTS(r_usage.usage) THEN
5050
5051 v_temp_xml := null;
5052
5053 FOR i in 1..vt_season_image_assoc.count LOOP
5054 IF (vt_season_image_assoc(i).rolecode = r_usage.usage) THEN
5055
5056 FOR v_lang IN ( select l.language_code,
5057 l.language_id
5058 from language l)
5059 LOOP
5060 v_temp_xml := null;
5061
5062 IF (v_lang.language_code = nvl(vt_season_image_assoc(i).languagecode,v_lang.language_code) AND
5063 gt_support_epg_lang.EXISTS(v_lang.language_code)) THEN
5064
5065 SELECT XMLCONCAT(v_temp_xml,
5066 XMLELEMENT("contentInstanceRef",
5067 XMLELEMENT("value",format_uri('ContentInstanceMetadata',i_season_id||k_underscore||vt_season_image_assoc(i).versionCopyId
5068 || k_underscore || lower(v_lang.language_code)))
5069 )
5070 )
5071 INTO v_temp_xml
5072 FROM dual;
5073
5074 BEGIN
5075 SELECT XMLCONCAT(v_temp_xml,
5076 XMLELEMENT("mediaType",/*format_urn('mediaType',*/gt_usage_map(r_usage.usage)/*)*/)--407076001
5077 )
5078 INTO v_temp_xml
5079 FROM dual;
5080
5081 EXCEPTION
5082 WHEN OTHERS THEN
5083 SELECT 'No Usage mapping defined for '||table_description
5084 INTO g_error_response
5085 FROM table_line
5086 WHERE table_id = k_ttlusg_tl
5087 AND table_code = r_usage.usage;
5088 RAISE e_business;
5089 END;
5090
5091 SELECT XMLCONCAT(v_assoc_xml,
5092 XMLELEMENT("PresentationMedia",v_temp_xml))
5093 INTO v_assoc_xml
5094 FROM dual;
5095 END IF;
5096 END LOOP;
5097
5098 END IF;
5099 END LOOP;
5100 END IF;
5101
5102 END LOOP;
5103
5104 SELECT XMLCONCAT(v_dm_data_xml,
5105 XMLELEMENT("presentationMedia",v_assoc_xml),
5106 XMLELEMENT("credits",Get_Cast_Data(k_season,i_season_id)),
5107 XMLELEMENT("contentProviderRef",g_default_provider),
5108 decode(nvl(s.production_year,0),
5109 0,null,
5110 XMLELEMENT("yearOfRelease",format_date_time(to_date(s.production_year||k_year_start,k.datemask)))
5111 )
5112 )
5113 INTO v_dm_data_xml
5114 FROM season s
5115 WHERE s.season_id = i_season_id;
5116 --End - descriptiveMetadata
5117
5118 SELECT XMLCONCAT(v_sg_metadata_xml,
5119 XMLELEMENT("descriptiveMetadata",v_dm_data_xml),
5120 decode(se.show_id,
5121 null,null,
5122 decode(nvl(to_char(se.season_no),se.season_year),
5123 null,null,
5124 XMLELEMENT("memberOf",
5125 XMLELEMENT("order",nvl(to_char(se.season_no),se.season_year)),
5126 XMLELEMENT("contentGroupRef",format_uri('ShowContentGroupMetadata',se.show_id))
5127 )
5128 )
5129 )
5130 )
5131 INTO v_sg_metadata_xml
5132 FROM season se
5133 WHERE se.season_id = i_season_id;
5134
5135 v_temp_xml:=null;
5136 For r_locale in (select distinct to_char(vis.platform_id) as platform_id
5137 from vod_item_schedule vis
5138 join version v on (vis.version_id = v.version_id)
5139 join season_title_detail std on (v.title_id = std.title_id)
5140 join purchase p on (std.title_id = p.title_id and vis.purchase_id = p.purchase_id)
5141 join season se on (std.season_id = std.season_id and se.season_id = i_season_id))
5142
5143 LOOP
5144 IF gt_uhe_locale_set.EXISTS(r_locale.platform_id) THEN
5145
5146 SELECT XMLCONCAT(v_temp_xml ,
5147 XMLELEMENT("GroupAvailability",
5148 XMLELEMENT("localeId",/*format_uri('LocaleScheme',*/gt_uhe_locale_set(r_locale.platform_id)/*)*/),
5149 XMLELEMENT("startDateTime",k_start_of_times)
5150 )
5151 )
5152 INTO v_temp_xml
5153 FROM dual;
5154
5155 END IF;
5156 END LOOP;
5157
5158 SELECT XMLCONCAT(v_sg_metadata_xml,
5159 XMLELEMENT("groupAvailability",v_temp_xml),
5160 XMLELEMENT("otherIdentifiers",
5161 XMLELEMENT("OtherIdentifier",
5162 XMLELEMENT("identifier",g_default_provider||k_pound||i_season_id),
5163 XMLELEMENT("namespace",g_other_identifier)
5164 )
5165 )
5166 )
5167 INTO v_sg_metadata_xml
5168 FROM dual;
5169
5170 RETURN v_sg_metadata_xml;
5171
5172 END Get_Season_Group_Desc_Metadata;
5173
5174 BEGIN -- Main Section
5175
5176 v_version_copy_id := get_version_copy_id(i_offer_item_id);
5177 on_demand_schedule_util.getOnDemandAssocMediaByObjType(i_object_type => k_season,
5178 i_object_id => i_season_id,
5179 i_media_hierarchy => g_media_hierarchy,
5180 i_platform_id => g_platform_id,
5181 o_media_associations => c_season_media_assoc,
5182 o_error_reported => v_error_reported,
5183 o_error_response => c_error_response,
5184 o_properties => c_properties);
5185
5186 vt_season_preview_assoc.DELETE;
5187 vt_season_image_assoc.DELETE;
5188 LOOP
5189 FETCH c_season_media_assoc INTO r_season_media_assoc;
5190 EXIT WHEN c_season_media_assoc%NOTFOUND;
5191
5192 IF gt_related_usage.EXISTS(r_season_media_assoc.roleCode) THEN
5193 vt_season_preview_assoc.extend;
5194 vt_season_preview_assoc(vt_season_preview_assoc.last):=r_season_media_assoc;
5195 END IF;
5196
5197 IF gt_present_usage.EXISTS(r_season_media_assoc.roleCode) THEN
5198 vt_season_image_assoc.extend;
5199 vt_season_image_assoc(vt_season_image_assoc.last):=r_season_media_assoc;
5200 END IF;
5201 END LOOP;
5202 CLOSE c_season_media_assoc;
5203
5204
5205 v_season_meta_xml := Get_Season_Group_Desc_Metadata(i_season_id);
5206
5207 SELECT XMLCONCAT(
5208 XMLELEMENT("id",format_uri('PurchasableSeason',i_season_id)),
5209 XMLELEMENT("season",v_season_meta_xml)
5210 )
5211 INTO v_season_data_xml
5212 FROM dual;
5213
5214
5215 FOR i in 1..vt_season_preview_assoc.count LOOP
5216
5217 SELECT XMLCONCAT(v_pi_metadata_xml,
5218 XMLELEMENT("relatedMaterial",
5219 XMLELEMENT("id",format_uri('ContentInstanceMetadata', i_season_id || k_underscore || vc.version_copy_id)),
5220 XMLELEMENT("key",vc.version_copy_id),
5221 XMLELEMENT("instanceType",'PreEncoded'),
5222 XMLELEMENT("essenceMetadata",Get_Essense_Metadata(vc.version_copy_id, k_true)),
5223 XMLELEMENT("encryptedFile",
5224 XMLELEMENT("EncryptedFile",Get_Encrypted_File_Data(vc.version_copy_id,vt_season_preview_assoc(i).mediaitemid))
5225 ),
5226 XMLELEMENT("descriptiveMetadata",null)
5227 )
5228 )
5229 INTO v_pi_metadata_xml
5230 FROM version_copy vc
5231 WHERE vc.version_copy_id = vt_season_preview_assoc(i).versioncopyid;
5232
5233 END LOOP;
5234
5235 FOR r_lang_code IN (SELECT language_code FROM language) LOOP
5236 IF gt_support_epg_lang.exists(r_lang_code.language_code) THEN
5237 v_concat_lang := v_concat_lang || upper(r_lang_code.language_code) || k_comma;
5238 END IF;
5239 END LOOP;
5240
5241 FOR i IN 1..vt_season_image_assoc.count LOOP
5242
5243 SELECT nvl(max(m.multimedia_id),k_false)
5244 INTO v_multimedia_id
5245 FROM multimedia m
5246 WHERE m.media_item_id = vt_season_image_assoc(i).mediaitemid;
5247
5248 SELECT vc.tape_type,
5249 tl.table_description
5250 INTO v_tape_type,
5251 v_tape_type_desc
5252 FROM version_copy vc
5253 JOIN table_line tl on (vc.tape_type = tl.table_code and tl.table_id = k_tapetp_tl)
5254 WHERE version_copy_id = vt_season_image_assoc(i).versioncopyid;
5255
5256 IF gt_delivery_type.exists(v_tape_type) THEN
5257 v_delivery_type := gt_delivery_type(v_tape_type);
5258 ELSE
5259 g_error_response:='No UHE Mapping was set for Version Copy type '||v_tape_type_desc;
5260 RAISE e_error;
5261 END IF;
5262
5263
5264 SELECT XMLAGG(
5265 XMLELEMENT("presentationMedia",
5266 XMLELEMENT("id",format_uri('ContentInstanceMetadata',i_season_id||k_underscore||vt_season_image_assoc(i).versioncopyid||
5267 k_underscore||lower(l.language_code))),
5268 XMLELEMENT("key",vt_season_image_assoc(i).versioncopyid),
5269 XMLELEMENT("instanceType",'Image'),
5270 decode(m.format_type,
5271 null,null,
5272 XMLELEMENT("imageMimeType",get_mime_type(m.format_type))),
5273 XMLELEMENT("imageTextLang",lower(l.language_code)),
5274 decode(m.width,
5275 null,null,
5276 XMLELEMENT("imageWidth",m.width)),
5277 decode(m.height,
5278 null,null,
5279 XMLELEMENT("imageHeight",m.height)),
5280 XMLELEMENT("imageFile",
5281 decode (m.format_type,
5282 null,null,
5283 XMLELEMENT("fileFormat",format_uri_enum('fileFormat',m.format_type))),
5284 XMLELEMENT("fileAccess",
5285 XMLELEMENT("FileAccess",
5286 XMLELEMENT("accessUrl",
5287 get_delivery_uri( i_use_uri_rules => k_uri_asset_media_id,
5288 i_platform_id => g_platform_id,
5289 i_version_id => vt_season_image_assoc(i).versionid,
5290 i_version_copy_type => v_tape_type,
5291 i_house_media => decode(g_use_src_file_img,
5292 k_true,nvl(m.source_file_name,mi.house_media),
5293 mi.house_media),
5294 i_programme_name => t.programme_name,
5295 i_material_format => mi.format,
5296 i_usage_type_id => ttlusg_tl.table_line_isn,
5297 i_language_id => l.language_id)),
5298 XMLELEMENT("deliveryType",format_uri_enum('deliveryType',v_delivery_type))
5299 )
5300 )
5301 ),
5302 XMLELEMENT("descriptiveMetadata",null)
5303 )
5304 )
5305 INTO v_ii_metadata_node
5306 FROM media_item mi
5307 JOIN version v on (v.version_id = vt_season_image_assoc(i).versionid)
5308 JOIN title t on (v.title_id = t.title_id)
5309 JOIN table_line ttlusg_tl ON (ttlusg_tl.table_id = k_ttlusg_tl AND ttlusg_tl.table_code = vt_season_image_assoc(i).rolecode)
5310 LEFT OUTER JOIN multimedia m on (m.media_item_id = mi.media_item_id and m.multimedia_id = v_multimedia_id)
5311 LEFT OUTER JOIN language l ON (m.language_id = l.language_id OR (m.language_id is NULL and INSTR(v_concat_lang,upper(l.language_code)||k_comma) >0))
5312 WHERE mi.media_item_id = vt_season_image_assoc(i).mediaitemid;
5313
5314
5315 SELECT XMLCONCAT(v_ii_metadata_xml,v_ii_metadata_node)
5316 INTO v_ii_metadata_xml
5317 FROM dual;
5318
5319 END LOOP;
5320
5321 SELECT XMLELEMENT("PurchasableSeason",
5322 XMLATTRIBUTES (format_uri ('PurchasableSeason', i_season_id) as "resourceId",
5323 'PUT' as "action"),
5324 XMLCONCAT(v_season_data_xml,
5325 v_pi_metadata_xml,
5326 v_ii_metadata_xml
5327 )
5328 )
5329 INTO v_season_data_xml
5330 FROM dual;
5331
5332 RETURN v_season_data_xml;
5333 END Get_Purchasable_Season_Data;
5334
5335 --------------------------------------------
5336 -- Function: Get_Virtual_Purchasable_Season_Data
5337 -- Use: Used for Series Offers without leading Season or Collection Offers to create a PurchasableSeason object
5338 -- as a virtual/faked season holding the content metadata and associate content (images/poster) held against the IBMS Offer.
5339 -- It will be called only once per export.
5340 --------------------------------------------
5341 FUNCTION Get_Virtual_Purchasable_Season (i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE)
5342 RETURN XMLTYPE
5343 IS
5344 v_season_data_xml XMLTYPE;
5345 v_season_meta_xml XMLTYPE;
5346 v_pi_metadata_xml XMLTYPE;
5347 v_ii_metadata_xml XMLTYPE;
5348 v_ii_metadata_node XMLTYPE;
5349 v_concat_lang VARCHAR2(2000);
5350 v_delivery_type VARCHAR2(50);
5351 v_sysdate_str VARCHAR2(30);
5352 v_multimedia_id NUMBER;
5353 v_error_reported NUMBER;
5354 v_sysdate DATE;
5355 v_tape_type version_copy.tape_type%TYPE;
5356 v_tape_type_desc table_line.table_description%TYPE;
5357
5358
5359 r_offer_classification Offer_Classification_Rec;
5360
5361 c_error_response SYS_REFCURSOR;
5362 c_properties SYS_REFCURSOR;
5363 c_offer_classifications SYS_REFCURSOR;
5364 --------------------------------------------
5365 -- Function: Get_Vitrual_Season_Group_Desc
5366 --------------------------------------------
5367 FUNCTION Get_Virtual_Season_Group_Desc
5368 RETURN XMLTYPE
5369 IS
5370 v_sg_metadata_xml XMLTYPE;
5371 v_dm_data_xml XMLTYPE;
5372 v_sortstring_xml XMLTYPE;
5373 v_assoc_xml XMLTYPE;
5374 v_temp_xml XMLTYPE;
5375 v_classref_xml XMLTYPE;
5376
5377 v_error_reported NUMBER;
5378
5379 BEGIN
5380
5381 SELECT XMLCONCAT(
5382 XMLELEMENT("id",format_uri('CollectionContentGroupMetadata',g_offer_id)),
5383 XMLELEMENT("key",g_offer_id),
5384 XMLELEMENT("isRoot",k_false_text),
5385 XMLELEMENT("numOfItems",(select count(1) FROM vod_offer_schedule_item vosi WHERE vosi.offer_id = g_offer_id)),
5386 XMLELEMENT("groupType", k_series_group),
5387 XMLELEMENT("subGroupType",g_show_group_stype)
5388 )
5389 INTO v_sg_metadata_xml
5390 FROM dual;
5391
5392 --Start - descriptiveMetadata
5393 Get_Lts_Data (i_object_type => k_vod_offer_ext,
5394 i_object_id => g_offer_id,
5395 o_lts_set_xml => v_dm_data_xml,
5396 o_error_reported => v_error_reported);
5397
5398 IF v_error_reported = k_true THEN
5399
5400 SELECT XMLAGG(
5401 XMLELEMENT("title",
5402 XMLATTRIBUTES(lower(el.language_code) as "lang"),
5403 el.object_name)
5404 )
5405 INTO v_dm_data_xml
5406 FROM object_epg_language el
5407 WHERE el.object_id = g_offer_id
5408 AND el.object_type = k_vod_offer_ext;
5409
5410 SELECT XMLCONCAT(v_dm_data_xml,
5411 XMLAGG(
5412 XMLCONCAT (
5413 XMLELEMENT("synopsis",
5414 XMLATTRIBUTES(lower(el.language_code) as "lang",
5415 k_str_type_med as "length"),
5416 trim(el.synopsis)),
5417 XMLELEMENT("synopsis",
5418 XMLATTRIBUTES(lower(el.language_code) as "lang",
5419 k_str_type_long as "length"),
5420 trim(el.long_description))
5421
5422 )
5423 )
5424 )
5425 INTO v_dm_data_xml
5426 FROM object_epg_language el
5427 WHERE el.object_id = g_offer_id
5428 AND el.object_type = k_vod_offer_ext;
5429
5430 SELECT XMLCONCAT(v_dm_data_xml,
5431 XMLAGG(
5432 XMLELEMENT("marketingMessage",
5433 XMLATTRIBUTES(lower(el.language_code) as "lang"),
5434 el.marketing_message))
5435 )
5436 INTO v_dm_data_xml
5437 FROM object_epg_language el
5438 WHERE el.object_id = g_offer_id
5439 AND el.object_type = k_vod_offer_ext;
5440
5441 SELECT XMLAGG(
5442 XMLELEMENT("sortStringEx",
5443 XMLATTRIBUTES(lower(el.language_code) as "lang"),
5444 format_title(el.object_name)
5445 )
5446 )
5447 INTO v_sortstring_xml
5448 FROM object_epg_language el
5449 WHERE el.object_id = g_offer_id
5450 AND el.object_type = k_vod_offer_ext
5451 AND el.language_code = k_eng;
5452
5453 SELECT XMLCONCAT(v_dm_data_xml,
5454 XMLELEMENT("sortString",
5455 XMLELEMENT("sortStringMode",g_sort_string),
5456 v_sortstring_xml)
5457 )
5458 INTO v_dm_data_xml
5459 FROM dual;
5460 END IF;
5461
5462 v_sysdate := SYSDATE;
5463 v_sysdate_str := TO_CHAR(v_sysdate, k_date_mask);
5464 --classificationRef--
5465 v_classref_xml := NULL;
5466 FOR r_offer_id IN ( SELECT vos.offer_id
5467 FROM vod_offer_schedule vos
5468 JOIN vod_offer_schedule_item vosi ON vosi.offer_id=vos.offer_id
5469 JOIN vod_item_schedule vis ON vosi.item_schedule_id=vis.item_schedule_id
5470 JOIN offer_type ot ON (vos.offer_type_id = ot.offer_type_id)
5471 JOIN table_line vodotk ON (ot.container_type = vodotk.table_reference AND vodotk.table_id = k_vodotk_tl)
5472 JOIN table_line vodofr ON (vos.status = vodofr.table_reference AND vodofr.table_id = k_vodofr_tl)
5473 WHERE (vos.end_date > v_sysdate_str OR (vos.end_date = v_sysdate_str AND
5474 vos.end_time > TO_CHAR(v_sysdate, k_time_mask)))
5475 AND vodotk.table_description IN (k_series, k_coll_assets)
5476 AND (vodofr.table_code = g_success_status OR vosi.offer_id = g_offer_id)
5477 AND vosi.item_schedule_id = i_offer_item_id)
5478
5479 LOOP
5480 on_demand_api.GetOfferClassifications (i_offer_id => r_offer_id.offer_id,
5481 o_offer_classifications => c_offer_classifications,
5482 o_error_reported => v_error_reported,
5483 o_error_response => c_error_response,
5484 o_properties => c_properties);
5485 IF v_error_reported = k_false THEN
5486
5487 LOOP
5488 FETCH c_offer_classifications INTO r_offer_classification;
5489 EXIT WHEN c_offer_classifications%NOTFOUND;
5490
5491 SELECT XMLELEMENT("classificationRef",
5492 XMLATTRIBUTES(
5493 NVL(TRIM(r_offer_classification.presentationOrder),
5494 g_default_class) AS "order",
5495 format_uri('ClassificationTerm',r_offer_classification.contentId) AS "termRef"
5496 ),
5497 DECODE(TRIM(r_offer_classification.effectivePeriodStartDate),
5498 NULL,NULL,
5499 XMLELEMENT("startDateTime",format_ora_date_utc ( g_timezone_id,
5500 TO_DATE(r_offer_classification.effectivePeriodStartDate || r_offer_classification.effectivePeriodStartTime,
5501 k.datemask || k.timemask))
5502 )
5503 ),
5504 DECODE (TRIM(r_offer_classification.effectivePeriodFinishDate),
5505 NULL,NULL,
5506 XMLELEMENT("endDateTime",format_ora_date_utc ( g_timezone_id,
5507 TO_DATE(r_offer_classification.effectivePeriodFinishDate || r_offer_classification.effectivePeriodFinishTime,
5508 k.datemask || k.timemask))
5509 )
5510 )
5511 )
5512 INTO v_temp_xml
5513 FROM dual;
5514
5515
5516 SELECT XMLCONCAT(v_classref_xml, v_temp_xml)
5517 INTO v_classref_xml
5518 FROM dual;
5519
5520 END LOOP;
5521 END IF;
5522 END LOOP;
5523
5524 SELECT XMLCONCAT(v_dm_data_xml,v_classref_xml)
5525 INTO v_dm_data_xml
5526 FROM dual;
5527
5528 /*Related Material*/
5529 FOR i in 1..gt_media_assoc.count LOOP
5530 IF (gt_media_assoc(i).vod_sch_item_id = k_zero AND gt_related_usage.EXISTS(gt_media_assoc(i).role_code)) THEN
5531 BEGIN
5532 SELECT XMLCONCAT(
5533 XMLELEMENT("contentInstanceRef",
5534 XMLELEMENT("value",format_uri('ContentInstanceMetadata',g_offer_id||k_underscore||gt_media_assoc(i).versionCopyId))
5535 ),
5536 XMLELEMENT("howRelated",decode(gt_media_assoc(i).role_code,
5537 null,null,
5538 gt_usage_map(gt_media_assoc(i).role_code)))
5539 )
5540 INTO v_temp_xml
5541 FROM dual;
5542 EXCEPTION
5543 WHEN OTHERS
5544 THEN
5545 SELECT 'No Usage mapping defined for '||table_description
5546 INTO g_error_response
5547 FROM table_line
5548 WHERE table_id = k_ttlusg_tl
5549 AND table_code = gt_media_assoc(i).role_code;
5550
5551 RAISE e_business;
5552 END;
5553
5554 SELECT XMLCONCAT(v_assoc_xml,
5555 XMLELEMENT("RelatedMaterial",v_temp_xml))
5556 INTO v_assoc_xml
5557 FROM dual;
5558
5559 END IF;
5560
5561 END LOOP;
5562
5563 SELECT XMLCONCAT(v_dm_data_xml,
5564 XMLELEMENT("relatedMaterial",v_assoc_xml))
5565 INTO v_dm_data_xml
5566 FROM dual;
5567
5568 v_assoc_xml := null;
5569
5570
5571 /*Presentation Media*/
5572 FOR r_usage IN (select table_code as usage,
5573 table_description AS descr
5574 from table_line
5575 where table_id = k_ttlusg_tl)
5576 LOOP
5577 IF gt_present_usage.EXISTS(r_usage.usage) THEN
5578
5579 v_temp_xml := null;
5580 FOR i in 1..gt_media_assoc.count LOOP
5581 IF (gt_media_assoc(i).role_code = r_usage.usage AND gt_media_assoc(i).vod_sch_item_id = k_zero) THEN
5582
5583 FOR v_lang IN ( select l.language_code,
5584 l.language_id
5585 from language l)
5586 LOOP
5587 v_temp_xml := null;
5588
5589 IF (v_lang.language_code = nvl(gt_media_assoc(i).componentLanguageCode,v_lang.language_code) AND
5590 gt_support_epg_lang.EXISTS(v_lang.language_code)) THEN
5591 BEGIN
5592 SELECT XMLCONCAT(v_temp_xml,
5593 XMLELEMENT("contentInstanceRef",
5594 XMLELEMENT("value",format_uri('ContentInstanceMetadata',g_offer_id||k_underscore||gt_media_assoc(i).versionCopyId
5595 || k_underscore || lower(v_lang.language_code)))
5596 ),
5597
5598 XMLELEMENT("mediaType",gt_usage_map(r_usage.usage))
5599 )
5600 INTO v_temp_xml
5601 FROM dual;
5602
5603 EXCEPTION
5604 WHEN OTHERS
5605 THEN
5606 SELECT 'No Usage mapping defined for '||r_usage.descr
5607 INTO g_error_response
5608 FROM dual;
5609 RAISE e_business;
5610 END;
5611
5612 SELECT XMLCONCAT(v_assoc_xml,
5613 XMLELEMENT("PresentationMedia",v_temp_xml))
5614 INTO v_assoc_xml
5615 FROM dual;
5616 END IF;
5617 END LOOP;
5618
5619 END IF;
5620 END LOOP;
5621 END IF;
5622
5623 END LOOP;
5624
5625 SELECT XMLCONCAT(v_dm_data_xml,
5626 XMLELEMENT("presentationMedia",v_assoc_xml),
5627 XMLELEMENT("contentProviderRef",g_default_provider)
5628 )
5629
5630 INTO v_dm_data_xml
5631 FROM dual;
5632 --End - descriptiveMetadata
5633
5634 SELECT XMLCONCAT(v_sg_metadata_xml,
5635 XMLELEMENT("descriptiveMetadata",v_dm_data_xml)
5636 )
5637 INTO v_sg_metadata_xml
5638 FROM dual;
5639
5640 v_temp_xml:=null;
5641
5642 IF gt_uhe_locale_set.EXISTS(g_platform_id) THEN
5643
5644 SELECT XMLCONCAT(v_temp_xml ,
5645 XMLELEMENT("GroupAvailability",
5646 XMLELEMENT("localeId",gt_uhe_locale_set(g_platform_id)),
5647 XMLELEMENT("startDateTime",k_start_of_times)
5648 )
5649 )
5650 INTO v_temp_xml
5651 FROM dual;
5652
5653 END IF;
5654
5655
5656 SELECT XMLCONCAT(v_sg_metadata_xml,
5657 XMLELEMENT("groupAvailability",v_temp_xml),
5658 XMLELEMENT("otherIdentifiers",
5659 XMLELEMENT("OtherIdentifier",
5660 XMLELEMENT("identifier",g_default_provider||k_pound||'C'||g_offer_id),
5661 XMLELEMENT("namespace",g_other_identifier)
5662 )
5663 )
5664 )
5665 INTO v_sg_metadata_xml
5666 FROM dual;
5667
5668 RETURN v_sg_metadata_xml;
5669
5670 END Get_Virtual_Season_Group_Desc;
5671
5672 BEGIN -- Main Section
5673
5674 v_season_meta_xml := Get_Virtual_Season_Group_Desc;
5675
5676 SELECT XMLCONCAT(
5677 XMLELEMENT("id",format_uri('PurchasableCollection',g_offer_id)),
5678 XMLELEMENT("season",v_season_meta_xml)
5679 )
5680 INTO v_season_data_xml
5681 FROM dual;
5682
5683
5684 FOR i in 1..gt_media_assoc.count LOOP
5685 IF (gt_related_usage.EXISTS(gt_media_assoc(i).role_code) AND gt_media_assoc(i).vod_sch_item_id = k_zero) THEN
5686 SELECT XMLCONCAT(v_pi_metadata_xml,
5687 XMLELEMENT("relatedMaterial",
5688 XMLELEMENT("id",format_uri('ContentInstanceMetadata', g_offer_id || k_underscore || vc.version_copy_id)),
5689 XMLELEMENT("key",vc.version_copy_id),
5690 XMLELEMENT("instanceType",'PreEncoded'),
5691 XMLELEMENT("essenceMetadata",Get_Essense_Metadata(vc.version_copy_id, k_true)),
5692 XMLELEMENT("encryptedFile",
5693 XMLELEMENT("EncryptedFile",Get_Encrypted_File_Data(vc.version_copy_id,gt_media_assoc(i).media_item_id))
5694 ),
5695 XMLELEMENT("descriptiveMetadata",null)
5696 )
5697 )
5698 INTO v_pi_metadata_xml
5699 FROM version_copy vc
5700 WHERE vc.version_copy_id = gt_media_assoc(i).versionCopyId;
5701 END IF;
5702 END LOOP;
5703
5704 FOR r_lang_code IN (SELECT language_code FROM language) LOOP
5705 IF gt_support_epg_lang.exists(r_lang_code.language_code) THEN
5706 v_concat_lang := v_concat_lang || upper(r_lang_code.language_code) || k_comma;
5707 END IF;
5708 END LOOP;
5709
5710 FOR r_usage IN (select table_code as usage
5711 from table_line
5712 where table_id = k_ttlusg_tl)
5713 LOOP
5714 IF gt_present_usage.EXISTS(r_usage.usage) THEN
5715
5716 FOR i IN 1..gt_media_assoc.count
5717 LOOP
5718 IF (gt_media_assoc(i).role_code = r_usage.usage AND gt_media_assoc(i).vod_sch_item_id = k_zero) THEN
5719 SELECT nvl(max(m.multimedia_id),k_false)
5720 INTO v_multimedia_id
5721 FROM multimedia m
5722 WHERE m.media_item_id = gt_media_assoc(i).media_item_id;
5723
5724 SELECT vc.tape_type,
5725 tl.table_description
5726 INTO v_tape_type,
5727 v_tape_type_desc
5728 FROM version_copy vc
5729 JOIN table_line tl on (vc.tape_type = tl.table_code and tl.table_id = k_tapetp_tl)
5730 WHERE version_copy_id = gt_media_assoc(i).versionCopyId;
5731
5732 IF gt_delivery_type.exists(v_tape_type) THEN
5733 v_delivery_type := gt_delivery_type(v_tape_type);
5734 ELSE
5735 g_error_response:='No UHE Mapping was set for Version Copy type '||v_tape_type_desc;
5736 RAISE e_error;
5737 END IF;
5738
5739
5740 SELECT XMLAGG(
5741 XMLELEMENT("presentationMedia",
5742 XMLELEMENT("id",format_uri('ContentInstanceMetadata',g_offer_id||k_underscore||gt_media_assoc(i).versionCopyId||
5743 k_underscore||lower(l.language_code))),
5744 XMLELEMENT("key",gt_media_assoc(i).versionCopyId),
5745 XMLELEMENT("instanceType",'Image'),
5746 decode(m.format_type,
5747 null,null,
5748 XMLELEMENT("imageMimeType",get_mime_type(m.format_type))),
5749 XMLELEMENT("imageTextLang",lower(l.language_code)),
5750 decode(m.width,
5751 null,null,
5752 XMLELEMENT("imageWidth",m.width)),
5753 decode(m.height,
5754 null,null,
5755 XMLELEMENT("imageHeight",m.height)),
5756 XMLELEMENT("imageFile",
5757 decode (m.format_type,
5758 null,null,
5759 XMLELEMENT("fileFormat",format_uri_enum('fileFormat',m.format_type))),
5760 XMLELEMENT("fileAccess",
5761 XMLELEMENT("FileAccess",
5762 XMLELEMENT("accessUrl",
5763 get_delivery_uri( i_use_uri_rules => k_uri_asset_media_id,
5764 i_platform_id => g_platform_id,
5765 i_version_id => gt_media_assoc(i).versionId,
5766 i_version_copy_type => v_tape_type,
5767 i_house_media => decode(g_use_src_file_img,
5768 k_true,nvl(m.source_file_name,mi.house_media),
5769 mi.house_media),
5770 i_programme_name => t.programme_name,
5771 i_material_format => mi.format,
5772 i_usage_type_id => ttlusg_tl.table_line_isn,
5773 i_language_id => l.language_id)),
5774 XMLELEMENT("deliveryType",format_uri_enum('deliveryType',v_delivery_type))
5775 )
5776 )
5777 ),
5778 XMLELEMENT("descriptiveMetadata",null)
5779 )
5780 )
5781 INTO v_ii_metadata_node
5782 FROM media_item mi
5783 JOIN version v on (v.version_id = gt_media_assoc(i).versionid)
5784 JOIN title t on (v.title_id = t.title_id)
5785 JOIN table_line ttlusg_tl ON (ttlusg_tl.table_id = k_ttlusg_tl AND ttlusg_tl.table_code = gt_media_assoc(i).role_code)
5786 LEFT OUTER JOIN multimedia m on (m.media_item_id = mi.media_item_id and m.multimedia_id = v_multimedia_id)
5787 LEFT OUTER JOIN language l ON (m.language_id = l.language_id OR (m.language_id is NULL and INSTR(v_concat_lang,upper(l.language_code)||k_comma) >0))
5788 WHERE mi.media_item_id = gt_media_assoc(i).media_item_id;
5789
5790
5791 SELECT XMLCONCAT(v_ii_metadata_xml,v_ii_metadata_node)
5792 INTO v_ii_metadata_xml
5793 FROM dual;
5794 END IF;
5795 END LOOP;
5796 END IF;
5797 END LOOP;
5798 SELECT XMLELEMENT("PurchasableSeason",
5799 XMLATTRIBUTES (format_uri ('PurchasableCollection', g_offer_id) as "resourceId",
5800 'PUT' as "action"),
5801 XMLCONCAT(v_season_data_xml,
5802 v_pi_metadata_xml,
5803 v_ii_metadata_xml
5804 )
5805 )
5806 INTO v_season_data_xml
5807 FROM dual;
5808
5809 RETURN v_season_data_xml;
5810 END Get_Virtual_Purchasable_Season;
5811 --------------------------------------------
5812 -- Function: Get_Purchasable_Show_Data
5813 --------------------------------------------
5814 FUNCTION Get_Purchasable_Show_Data (i_show_id IN show.show_id%TYPE,
5815 i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE) return XMLTYPE IS
5816
5817 v_show_data_xml XMLTYPE;
5818 v_group_metadata_xml XMLTYPE;
5819 v_pi_metadata_xml XMLTYPE;
5820 v_ii_metadata_xml XMLTYPE;
5821 v_ii_metadata_node XMLTYPE;
5822
5823 v_version_copy_id version_copy.version_copy_id%TYPE;
5824 r_show_media_assoc object_media_assoc_rec;
5825 vt_show_image_assoc tt_object_media_assoc:=tt_object_media_assoc();
5826 vt_show_preview_assoc tt_object_media_assoc:=tt_object_media_assoc();
5827 v_concat_lang VARCHAR2(2000);
5828 v_multimedia_id NUMBER;
5829 v_tape_type version_copy.tape_type%TYPE;
5830 v_tape_type_desc table_line.table_description%TYPE;
5831 v_delivery_type VARCHAR2(50);
5832 v_service_id vod_platform.vod_platform_id%TYPE;
5833 v_content_id vod_classification_tree.content_id%TYPE;
5834 v_classif_node_id vod_classification_tree.classification_node_id%TYPE;
5835 v_node_content_id vod_classification_tree.content_id%TYPE;
5836 v_valid_service k.logical%TYPE;
5837
5838
5839 c_show_media_associations SYS_REFCURSOR;
5840 v_error_reported NUMBER;
5841 c_error_response SYS_REFCURSOR;
5842 c_properties SYS_REFCURSOR;
5843 c_show_classifications SYS_REFCURSOR;
5844 c_term_nodes SYS_REFCURSOR;
5845 c_parent_nodes SYS_REFCURSOR;
5846
5847
5848 TYPE t_classif_term IS TABLE OF NUMBER(10);
5849 v_classif_term t_classif_term := t_classif_term();
5850
5851
5852 TYPE class_nodes_tree_service_rec IS RECORD
5853 (
5854 classification_node_id vod_classification_tree.classification_node_id%TYPE,
5855 classification_id vod_classification_tree.classification_id%TYPE,
5856 parent_node_id vod_classification_tree.parent_classification_node_id%TYPE,
5857 classification_level_id vod_classification_tree.classification_level_id%TYPE,
5858 content_id vod_classification_tree.content_id%TYPE,
5859 node_order vod_classification_tree.node_order%TYPE,
5860 validitydatefrom vod_classification_tree.validity_date_from%TYPE,
5861 validitydateto vod_classification_tree.validity_date_to%TYPE,
5862 validitytimefrom vod_classification_tree.validity_time_from%TYPE,
5863 validitytimeto vod_classification_tree.validity_time_to%TYPE,
5864 classification_name vod_platform_classification.classification_name%TYPE,
5865 platform_id vod_platform_classification.platform_id%TYPE,
5866 glxtimestamp vod_platform_classification.glxtimestamp%TYPE,
5867 marked_as_deleted vod_platform_classification.marked_as_deleted%TYPE,
5868 effective_date vod_platform_classification.effective_date%TYPE,
5869 status vod_platform_classification.status%TYPE,
5870 effective_date_to vod_platform_classification.effective_date_to%TYPE,
5871 effective_start_time vod_platform_classification.effective_start_time%TYPE,
5872 effective_end_time vod_platform_classification.effective_end_time%TYPE
5873 );
5874
5875 r_class_nodes_tree_service_rec class_nodes_tree_service_rec;
5876
5877 TYPE t_class_nodes_tree_service_rec IS TABLE OF r_class_nodes_tree_service_rec%TYPE INDEX BY BINARY_INTEGER;
5878 tbl_class_nodes_tree_serv_rec t_class_nodes_tree_service_rec;
5879
5880
5881 TYPE classif_tree_node_rec IS RECORD(
5882 classification_node_id vod_classification_tree.classification_node_id%TYPE,
5883 classification_id vod_classification_tree.classification_id%TYPE,
5884 parent_node_id vod_classification_tree.parent_classification_node_id%TYPE,
5885 classification_level_id vod_classification_tree.classification_level_id%TYPE,
5886 content_id vod_classification_tree.content_id%TYPE,
5887 node_order vod_classification_tree.node_order%TYPE,
5888 validitydatefrom vod_classification_tree.validity_date_from%TYPE,
5889 validitydateto vod_classification_tree.validity_date_to%TYPE,
5890 validitytimefrom vod_classification_tree.validity_time_from%TYPE,
5891 validitytimeto vod_classification_tree.validity_time_to%TYPE
5892
5893 );
5894
5895 r_tree_node_rec classif_tree_node_rec;
5896 TYPE t_tree_node_rec IS TABLE OF r_tree_node_rec%TYPE INDEX BY BINARY_INTEGER;
5897 tbl_tree_node_rec t_tree_node_rec;
5898
5899 TYPE vod_classifications_rec IS RECORD
5900 (
5901 content_id VOD_PLATFORM_CONTENT.content_id%TYPE,
5902 platform_id VOD_PLATFORM_CONTENT.platform_id%TYPE,
5903 description VOD_PLATFORM_CONTENT.Description%TYPE,
5904 max_certification VOD_PLATFORM_CONTENT.Max_Certification%TYPE,
5905 marked_as_deleted VOD_PLATFORM_CONTENT.Marked_As_Deleted%TYPE,
5906 category_type VOD_PLATFORM_CONTENT.Category_Type%TYPE,
5907 name VOD_PLATFORM_CONTENT.Name%TYPE,
5908 term_id VOD_PLATFORM_CONTENT.term_id%TYPE,
5909 auto_classification VOD_PLATFORM_CONTENT.Auto_Classification%TYPE,
5910 multi_appear VOD_PLATFORM_CONTENT.multi_appear%TYPE,
5911 validity_dates_required VOD_PLATFORM_CONTENT.Validity_Dates_Required%TYPE,
5912 depth_min VOD_PLATFORM_CONTENT.depth_min%TYPE,
5913 depth_max VOD_PLATFORM_CONTENT.depth_max%TYPE,
5914 allow_offers VOD_PLATFORM_CONTENT.Allow_Offers%TYPE,
5915 allow_folders VOD_PLATFORM_CONTENT.Allow_Folders%TYPE,
5916 child_dates_mandatory VOD_PLATFORM_CONTENT.Child_Dates_Mandatory%TYPE,
5917 start_date_auto_based VOD_PLATFORM_CONTENT.Start_Date_Auto_Based%TYPE,
5918 end_date_auto_based VOD_PLATFORM_CONTENT.End_Date_Auto_Based%TYPE,
5919 child_duration_days VOD_PLATFORM_CONTENT.Child_Duration_Days%TYPE,
5920 active VOD_PLATFORM_CONTENT.active%TYPE,
5921 default_vld_follow_offer_dates VOD_PLATFORM_CONTENT.Default_Vld_Follow_Offer_Dates%TYPE,
5922 start_date_offset VOD_PLATFORM_CONTENT.Start_Date_Offset%TYPE,
5923 allow_vld_period_out_offer VOD_PLATFORM_CONTENT.Allow_Vld_Period_Out_Offer%TYPE
5924 );
5925
5926 r_show_classification vod_classifications_rec;
5927
5928
5929 TYPE t_show_classif_rec IS TABLE OF r_show_classification%TYPE INDEX BY BINARY_INTEGER;
5930 tbl_show_classif_rec t_show_classif_rec;
5931 --------------------------------------------
5932 -- Function: Get_Show_Group_Metadata
5933 --------------------------------------------
5934 FUNCTION Get_Show_Group_Metadata (i_show_id IN show.show_id%TYPE) return XMLTYPE IS
5935
5936 v_sg_metadata_xml XMLTYPE;
5937 v_dm_data_xml XMLTYPE;
5938 v_sortstring_xml XMLTYPE;
5939 v_assoc_xml XMLTYPE;
5940 v_temp_xml XMLTYPE;
5941 v_error_reported NUMBER;
5942
5943 BEGIN
5944
5945 SELECT XMLCONCAT(
5946 XMLELEMENT("id",format_uri('ShowContentGroupMetadata',i_show_id)),
5947 XMLELEMENT("key",i_show_id),
5948 XMLELEMENT("isRoot",k_true_text),
5949 XMLELEMENT("numOfItems",(select count(1) from season se where se.show_id = i_show_id)),
5950 XMLELEMENT("groupType",/*g_show_group_type*/ k_show_group),
5951 XMLELEMENT("subGroupType",g_show_group_stype)
5952 )
5953 INTO v_sg_metadata_xml
5954 FROM dual;
5955 Get_Lts_Data (i_object_type => k_show,
5956 i_object_id => i_show_id,
5957 o_lts_set_xml => v_dm_data_xml,
5958 o_error_reported => v_error_reported);
5959 IF v_error_reported = k_true THEN
5960
5961 SELECT XMLAGG(
5962 XMLELEMENT("title",
5963 XMLATTRIBUTES(lower(el.language_code) as "lang"),
5964 el.object_name)
5965 )
5966 INTO v_dm_data_xml
5967 FROM object_epg_language el
5968 WHERE el.object_id = i_show_id
5969 AND el.object_type = k_show;
5970
5971 SELECT XMLCONCAT(v_dm_data_xml,
5972 XMLAGG(
5973 XMLCONCAT (
5974 XMLELEMENT("synopsis",
5975 XMLATTRIBUTES(lower(el.language_code) as "lang",
5976 k_str_type_med as "length"),
5977 trim(el.synopsis)),
5978 XMLELEMENT("synopsis",
5979 XMLATTRIBUTES(lower(el.language_code) as "lang",
5980 k_str_type_long as "length"),
5981 trim(el.long_description))
5982 )
5983 )
5984 )
5985 INTO v_dm_data_xml
5986 FROM object_epg_language el
5987 WHERE el.object_id = i_show_id
5988 AND el.object_type = k_show;
5989
5990 SELECT XMLAGG(
5991 XMLELEMENT("sortStringEx",
5992 XMLATTRIBUTES(lower(el.language_code) as "lang"),
5993 format_title(el.object_name)
5994 )
5995 )
5996 INTO v_sortstring_xml
5997 FROM object_epg_language el
5998 WHERE el.object_id = i_show_id
5999 AND el.object_type = k_show
6000 AND el.language_code = k_eng;
6001
6002 SELECT XMLCONCAT( v_dm_data_xml,
6003 XMLELEMENT("sortString",
6004 XMLELEMENT("sortStringMode",g_sort_string),
6005 v_sortstring_xml)
6006 )
6007 INTO v_dm_data_xml
6008 FROM dual;
6009
6010 END IF;
6011
6012 --Classification Tree
6013 --407275004
6014
6015 SELECT DISTINCT to_char(vis.platform_id) as platform_id
6016 INTO v_service_id
6017 FROM vod_item_schedule vis
6018 join version v on (vis.version_id = v.version_id)
6019 join season_title_detail std on (v.title_id = std.title_id)
6020 join purchase p on (std.title_id = p.title_id and vis.purchase_id = p.purchase_id)
6021 join show s on (std.show_id = i_show_id and std.show_id = s.show_id)
6022 AND rownum = 1;
6023
6024 on_demand_api.getClassTermsByShow(i_show_id => i_show_id,
6025 i_service_id => v_service_id,
6026 o_nodes => c_show_classifications,
6027 o_error_reported => v_error_reported,
6028 o_error_response => c_error_response,
6029 o_properties => c_properties);
6030
6031
6032 IF v_error_reported = k_false THEN
6033 tbl_show_classif_rec.delete;
6034 LOOP
6035 FETCH c_show_classifications BULK COLLECT INTO tbl_show_classif_rec;
6036 EXIT WHEN c_show_classifications%NOTFOUND;
6037 END LOOP;
6038 CLOSE c_show_classifications;
6039 BEGIN
6040 FOR i IN tbl_show_classif_rec.first..tbl_show_classif_rec.LAST
6041 LOOP
6042 v_content_id := tbl_show_classif_rec(i).content_id;
6043 g.debug('Looping through Show Classification Terms');
6044 on_demand_api.getNodesForTermAndService(i_content_id => v_content_id,
6045 i_service_id => v_service_id,
6046 o_nodes => c_term_nodes,
6047 o_error_reported => v_error_reported,
6048 o_error_response => c_error_response,
6049 o_properties => c_properties);
6050
6051 service_validation(i_service_id => tbl_show_classif_rec(i).platform_id,
6052 o_validation_service => v_valid_service);
6053
6054 IF v_error_reported = k_false AND v_valid_service = k_true THEN
6055 --checking if there is no error and Classification Term is valid(is part of the Services configured as Filter By Service prop)
6056 tbl_class_nodes_tree_serv_rec.delete;
6057 LOOP
6058 FETCH c_term_nodes BULK COLLECT INTO tbl_class_nodes_tree_serv_rec;
6059 EXIT WHEN c_term_nodes%NOTFOUND;
6060 END LOOP;
6061 CLOSE c_term_nodes;
6062 BEGIN
6063
6064 FOR j IN tbl_class_nodes_tree_serv_rec.first..tbl_class_nodes_tree_serv_rec.LAST
6065 LOOP
6066
6067 g.debug('Looping through all the nodes in the trees that use current Classification Term');
6068 v_classif_node_id := tbl_class_nodes_tree_serv_rec(j).classification_node_id;
6069
6070 IF g_show_class_inter = k_true THEN
6071 --checking if we go to parent node
6072
6073 on_demand_api.getParentNode(i_node_id => v_classif_node_id,
6074 o_nodes => c_parent_nodes,
6075 o_error_reported => v_error_reported,
6076 o_error_response => c_error_response,
6077 o_properties => c_properties);
6078
6079 IF v_error_reported = k_false THEN
6080 tbl_tree_node_rec.delete;
6081 LOOP
6082 FETCH c_parent_nodes BULK COLLECT INTO tbl_tree_node_rec;
6083 EXIT WHEN c_parent_nodes%NOTFOUND;
6084 END LOOP;
6085 CLOSE c_parent_nodes;
6086 BEGIN
6087
6088 FOR k IN tbl_tree_node_rec.first..tbl_tree_node_rec.lAST
6089 LOOP
6090
6091 g.debug('Looping through all Parent Nodes');
6092
6093 v_node_content_id := tbl_tree_node_rec(k).content_id;
6094 --Checking if the Parent Classification Term Node is not a duplicate
6095 IF v_node_content_id NOT MEMBER OF v_classif_term
6096 THEN
6097
6098 SELECT XMLELEMENT("classificationRef",
6099 XMLATTRIBUTES(
6100 format_uri('classificationRef', v_node_content_id) AS "termRef"
6101 )
6102 )
6103 INTO v_temp_xml
6104 FROM dual;
6105
6106
6107 SELECT XMLCONCAT(v_dm_data_xml, v_temp_xml)
6108 INTO v_dm_data_xml
6109 FROM dual;
6110
6111
6112 v_classif_term.EXTEND;
6113 v_classif_term(v_classif_term.last) := v_node_content_id;
6114
6115 END IF;
6116 END LOOP;
6117 EXCEPTION WHEN ROWTYPE_MISMATCH THEN
6118 NULL;
6119 END;
6120 END IF;
6121
6122 --checking if the Classification Term Node is not a duplicate
6123 ELSIF g_show_class_inter = k_false AND tbl_class_nodes_tree_serv_rec(j).content_id NOT MEMBER OF v_classif_term
6124 THEN
6125
6126 v_node_content_id := tbl_class_nodes_tree_serv_rec(j).content_id;
6127
6128 SELECT XMLELEMENT("classificationRef",
6129 XMLATTRIBUTES(
6130 format_uri('classificationRef', v_node_content_id) AS "termRef"
6131 )
6132 )
6133 INTO v_temp_xml
6134 FROM dual;
6135
6136
6137 SELECT XMLCONCAT(v_dm_data_xml, v_temp_xml)
6138 INTO v_dm_data_xml
6139 FROM dual;
6140
6141
6142 v_classif_term.EXTEND;
6143 v_classif_term(v_classif_term.last) := v_node_content_id;
6144
6145
6146 END IF;
6147 END LOOP;
6148 EXCEPTION WHEN ROWTYPE_MISMATCH THEN
6149 NULL;
6150
6151 END;
6152
6153 END IF;
6154
6155 END LOOP;
6156 EXCEPTION WHEN ROWTYPE_MISMATCH THEN
6157
6158 NULL;
6159 END;
6160
6161 END IF;
6162 --407275004
6163
6164 SELECT XMLCONCAT(v_dm_data_xml,
6165 decode(g.genre_id,
6166 null,null,
6167 XMLELEMENT("genre",g_genre_code_prefix|| g.genre_id || k_colon ||decode(sgd.sub_genre_id,
6168 null,null,
6169 sgd.sub_genre_id )))
6170 )
6171 INTO v_dm_data_xml
6172 FROM show s
6173 LEFT OUTER JOIN genre_descr g ON (s.epg_genre_id = g.genre_id and g.lang = k_eng)
6174 LEFT OUTER JOIN sub_genre_descr sgd ON (s.epg_subgenre_id = sgd.sub_genre_id and sgd.lang = k_eng)
6175 WHERE s.show_id = i_show_id
6176 AND ROWNUM = 1;
6177
6178 /*Related Material*/
6179 FOR i in 1..vt_show_preview_assoc.count LOOP
6180 IF gt_related_usage.EXISTS(vt_show_preview_assoc(i).rolecode) THEN
6181 BEGIN
6182 SELECT XMLCONCAT(
6183 XMLELEMENT("contentInstanceRef",
6184 XMLELEMENT("value",format_uri('ContentInstanceMetadata',i_show_id||k_underscore||vt_show_preview_assoc(i).versionCopyId))
6185 ),
6186 XMLELEMENT("howRelated",/*format_urn('mediaType',*/gt_usage_map(vt_show_preview_assoc(i).rolecode)/*)*/)
6187 )
6188 INTO v_temp_xml
6189 FROM dual;
6190
6191 EXCEPTION
6192 WHEN OTHERS THEN
6193 SELECT 'No Usage mapping defined for '||table_description
6194 INTO g_error_response
6195 FROM table_line
6196 WHERE table_id = k_ttlusg_tl
6197 AND table_code = vt_show_preview_assoc(i).rolecode;
6198
6199 RAISE e_business;
6200 END;
6201
6202 SELECT XMLCONCAT(v_assoc_xml,
6203 XMLELEMENT("RelatedMaterial",v_temp_xml))
6204 INTO v_assoc_xml
6205 FROM dual;
6206 END IF;
6207 END LOOP;
6208
6209 SELECT XMLCONCAT(v_dm_data_xml,
6210 XMLELEMENT("relatedMaterial",v_assoc_xml))
6211 INTO v_dm_data_xml
6212 FROM dual;
6213
6214 v_assoc_xml := null;
6215
6216 /*Presentation Media*/
6217 FOR r_usage IN (select table_code as usage
6218 from table_line
6219 where table_id = k_ttlusg_tl)
6220 LOOP
6221 IF gt_present_usage.EXISTS(r_usage.usage) THEN
6222
6223 FOR i in 1..vt_show_image_assoc.count LOOP
6224 IF (vt_show_image_assoc(i).rolecode = r_usage.usage) THEN
6225
6226 FOR v_lang IN ( select l.language_code,
6227 l.language_id
6228 from language l)
6229 LOOP
6230 v_temp_xml := null;
6231
6232 IF (v_lang.language_code = nvl(vt_show_image_assoc(i).languagecode,v_lang.language_code) AND
6233 gt_support_epg_lang.EXISTS(v_lang.language_code)) THEN
6234
6235 SELECT XMLCONCAT(v_temp_xml,
6236 XMLELEMENT("contentInstanceRef",
6237 XMLELEMENT("value",format_uri('ContentInstanceMetadata',i_show_id||k_underscore||vt_show_image_assoc(i).versionCopyId
6238 || k_underscore || lower(v_lang.language_code)))
6239 )
6240 )
6241 INTO v_temp_xml
6242 FROM dual;
6243
6244 BEGIN
6245
6246 SELECT XMLCONCAT(v_temp_xml,
6247 XMLELEMENT("mediaType",/*format_urn('mediaType',*/gt_usage_map(r_usage.usage/*)*/))--407076001
6248 )
6249 INTO v_temp_xml
6250 FROM dual;
6251
6252 SELECT XMLCONCAT(v_assoc_xml,
6253 XMLELEMENT("PresentationMedia",v_temp_xml))
6254 INTO v_assoc_xml
6255 FROM dual;
6256
6257 EXCEPTION
6258
6259 WHEN OTHERS THEN
6260 SELECT 'No Usage mapping defined for '||table_description
6261 INTO g_error_response
6262 FROM table_line
6263 WHERE table_id = k_ttlusg_tl
6264 AND table_code = r_usage.usage;
6265
6266 RAISE e_business;
6267 END;
6268 END IF;
6269 END LOOP;
6270 END IF;
6271 END LOOP;
6272 END IF;
6273
6274 END LOOP;
6275
6276 SELECT XMLCONCAT(v_dm_data_xml,
6277 XMLELEMENT("presentationMedia",v_assoc_xml),
6278 XMLELEMENT("contentProviderRef",g_default_provider)
6279 )
6280 INTO v_dm_data_xml
6281 FROM dual;
6282
6283 SELECT XMLCONCAT(v_sg_metadata_xml,
6284 XMLELEMENT("descriptiveMetadata",v_dm_data_xml))
6285 INTO v_sg_metadata_xml
6286 FROM dual;
6287
6288
6289 v_temp_xml:=null;
6290 For r_locale in (select distinct to_char(vis.platform_id) as platform_id
6291 from vod_item_schedule vis
6292 join version v on (vis.version_id = v.version_id)
6293 join season_title_detail std on (v.title_id = std.title_id)
6294 join purchase p on (std.title_id = p.title_id and vis.purchase_id = p.purchase_id)
6295 join show s on (std.show_id = i_show_id and std.show_id = s.show_id))
6296
6297 LOOP
6298 IF gt_uhe_locale_set.EXISTS(r_locale.platform_id) THEN
6299
6300 SELECT XMLCONCAT(v_temp_xml ,
6301 XMLELEMENT("GroupAvailability",
6302 XMLELEMENT("localeId",/*format_uri('LocaleScheme',*/gt_uhe_locale_set(r_locale.platform_id)/*)*/),
6303 XMLELEMENT("startDateTime",k_start_of_times)
6304 )
6305 )
6306 INTO v_temp_xml
6307 FROM dual;
6308
6309 END IF;
6310 END LOOP;
6311
6312 SELECT XMLCONCAT(v_sg_metadata_xml,
6313 XMLELEMENT("groupAvailability",v_temp_xml),
6314 XMLELEMENT("otherIdentifiers",
6315 XMLELEMENT("OtherIdentifier",
6316 XMLELEMENT("identifier",g_default_provider||k_pound||i_show_id),
6317 XMLELEMENT("namespace",g_other_identifier)
6318 )
6319 )
6320 )
6321 INTO v_sg_metadata_xml
6322 FROM dual;
6323
6324 RETURN v_sg_metadata_xml;
6325
6326 END Get_Show_Group_Metadata;
6327
6328 BEGIN --Main Section
6329
6330 v_version_copy_id := get_version_copy_id(i_offer_item_id);
6331 on_demand_schedule_util.getOnDemandAssocMediaByObjType(i_object_type => k_show,
6332 i_object_id => i_show_id,
6333 i_media_hierarchy => g_media_hierarchy,
6334 i_platform_id => g_platform_id,
6335 o_media_associations => c_show_media_associations,
6336 o_error_reported => v_error_reported,
6337 o_error_response => c_error_response,
6338 o_properties => c_properties);
6339
6340 vt_show_preview_assoc.DELETE;
6341 vt_show_image_assoc.DELETE;
6342 LOOP
6343 FETCH c_show_media_associations INTO r_show_media_assoc;
6344 EXIT WHEN c_show_media_associations%NOTFOUND;
6345
6346 IF gt_related_usage.EXISTS(r_show_media_assoc.roleCode) THEN
6347 vt_show_preview_assoc.extend;
6348 vt_show_preview_assoc(vt_show_preview_assoc.last):=r_show_media_assoc;
6349 END IF;
6350
6351 IF gt_present_usage.EXISTS(r_show_media_assoc.roleCode) THEN
6352 vt_show_image_assoc.extend;
6353 vt_show_image_assoc(vt_show_image_assoc.last):=r_show_media_assoc;
6354 END IF;
6355 END LOOP;
6356 CLOSE c_show_media_associations;
6357
6358 v_group_metadata_xml := Get_Show_Group_Metadata(i_show_id);
6359
6360 FOR i in 1..vt_show_preview_assoc.count LOOP
6361
6362 SELECT XMLCONCAT(v_pi_metadata_xml,
6363 XMLELEMENT("relatedMaterial",
6364 XMLELEMENT("id",format_uri('ContentInstanceMetadata', i_show_id || k_underscore || vc.version_copy_id)),
6365 XMLELEMENT("key",vc.version_copy_id),
6366 XMLELEMENT("instanceType",'PreEncoded'),
6367 XMLELEMENT("essenceMetadata",Get_Essense_Metadata(vc.version_copy_id, k_true)),
6368 XMLELEMENT("encryptedFile",
6369 XMLELEMENT("EncryptedFile",Get_Encrypted_File_Data(vc.version_copy_id,vt_show_preview_assoc(i).mediaitemid))
6370 ),
6371 XMLELEMENT("descriptiveMetadata",null)
6372 )
6373 )
6374 INTO v_pi_metadata_xml
6375 FROM version_copy vc
6376 WHERE vc.version_copy_id = vt_show_preview_assoc(i).versioncopyid;
6377
6378 END LOOP;
6379
6380 FOR r_lang_code IN (SELECT language_code FROM language) LOOP
6381 IF gt_support_epg_lang.exists(r_lang_code.language_code) THEN
6382 v_concat_lang := v_concat_lang || upper(r_lang_code.language_code) || k_comma;
6383 END IF;
6384 END LOOP;
6385
6386 FOR i IN 1..vt_show_image_assoc.count LOOP
6387
6388 SELECT nvl(max(m.multimedia_id),k_false)
6389 INTO v_multimedia_id
6390 FROM multimedia m
6391 WHERE m.media_item_id = vt_show_image_assoc(i).mediaitemid;
6392
6393 SELECT vc.tape_type,
6394 tl.table_description
6395 INTO v_tape_type,
6396 v_tape_type_desc
6397 FROM version_copy vc
6398 JOIN table_line tl on (vc.tape_type = tl.table_code and tl.table_id = k_tapetp_tl)
6399 WHERE version_copy_id = vt_show_image_assoc(i).versioncopyid;
6400
6401 IF gt_delivery_type.exists(v_tape_type) THEN
6402 v_delivery_type := gt_delivery_type(v_tape_type);
6403 ELSE
6404 g_error_response := 'No UHE Mapping was set for Version Copy type '||v_tape_type_desc;
6405 RAISE e_error;
6406 END IF;
6407
6408
6409 SELECT XMLAGG(
6410 XMLELEMENT("presentationMedia",
6411 XMLELEMENT("id",format_uri('ContentInstanceMetadata',i_show_id||k_underscore||vt_show_image_assoc(i).versioncopyid||
6412 k_underscore||lower(l.language_code))),
6413 XMLELEMENT("key",vt_show_image_assoc(i).versioncopyid),
6414 XMLELEMENT("instanceType",'Image'),
6415 decode(m.format_type,
6416 null,null,
6417 XMLELEMENT("imageMimeType",get_mime_type(m.format_type))),
6418 XMLELEMENT("imageTextLang",lower(l.language_code)),
6419 decode(m.width,
6420 null,null,
6421 XMLELEMENT("imageWidth",m.width)),
6422 decode(m.height,
6423 null,null,
6424 XMLELEMENT("imageHeight",m.height)),
6425 XMLELEMENT("imageFile",
6426 decode (m.format_type,
6427 null,null,
6428 XMLELEMENT("fileFormat",format_uri_enum('fileFormat',m.format_type))),
6429 XMLELEMENT("fileAccess",
6430 XMLELEMENT("FileAccess",
6431 XMLELEMENT("accessUrl",
6432 get_delivery_uri( i_use_uri_rules => k_uri_asset_media_id,
6433 i_platform_id => g_platform_id,
6434 i_version_id => vt_show_image_assoc(i).versionid,
6435 i_version_copy_type => v_tape_type,
6436 i_house_media => decode(g_use_src_file_img,
6437 k_true,nvl(m.source_file_name,mi.house_media),
6438 mi.house_media),
6439 i_programme_name => t.programme_name,
6440 i_usage_type_id => ttlusg_tl.table_line_isn,
6441 i_material_format => mi.format,
6442 i_language_id => l.language_id)),
6443 XMLELEMENT("deliveryType",format_uri_enum('deliveryType',v_delivery_type))
6444 )
6445 )
6446 ),
6447 XMLELEMENT("descriptiveMetadata",null)
6448 )
6449 )
6450 INTO v_ii_metadata_node
6451 FROM media_item mi
6452 JOIN version v on (v.version_id = vt_show_image_assoc(i).versionid)
6453 JOIN title t on (v.title_id = t.title_id)
6454 JOIN table_line ttlusg_tl ON (ttlusg_tl.table_id = k_ttlusg_tl AND ttlusg_tl.table_code = vt_show_image_assoc(i).rolecode)
6455 LEFT OUTER JOIN multimedia m on (m.media_item_id = mi.media_item_id and m.multimedia_id = v_multimedia_id)
6456 LEFT OUTER JOIN language l ON (m.language_id = l.language_id OR (m.language_id is NULL and INSTR(v_concat_lang,upper(l.language_code)||k_comma) >0))
6457 WHERE mi.media_item_id = vt_show_image_assoc(i).mediaitemid;
6458
6459
6460 SELECT XMLCONCAT(v_ii_metadata_xml,v_ii_metadata_node)
6461 INTO v_ii_metadata_xml
6462 FROM dual;
6463
6464 END LOOP;
6465
6466 SELECT XMLELEMENT("PurchasableShow",
6467 XMLATTRIBUTES (format_uri ('PurchasableShow', i_show_id) as "resourceId",
6468 'PUT' as "action"),
6469 XMLELEMENT("id",format_uri('PurchasableShow',i_show_id)),
6470 XMLELEMENT("show",v_group_metadata_xml),
6471 v_pi_metadata_xml,
6472 v_ii_metadata_xml
6473 )
6474 INTO v_show_data_xml
6475 FROM dual;
6476
6477 RETURN v_show_data_xml;
6478 END Get_Purchasable_Show_Data;
6479
6480 --------------------------------------------
6481 -- Function: Get_Preview_Instance_Metadata
6482 --------------------------------------------
6483 FUNCTION Get_Image_Instance_Metadata (i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE) return XMLTYPE IS
6484
6485 v_ii_metadata_xml XMLTYPE;
6486 v_ii_metadata_node XMLTYPE;
6487 v_in_version_copy_id version_copy.version_copy_id%TYPE;
6488 v_concat_lang VARCHAR2(2000);
6489 v_multimedia_id NUMBER;
6490 v_tape_type version_copy.tape_type%TYPE;
6491 v_tape_type_desc table_line.table_description%TYPE;
6492 v_delivery_type VARCHAR2(50);
6493 v_error_reported VARCHAR2(50);
6494 v_version_id version.version_id%TYPE;
6495
6496 c_o_assoaciated_media SYS_REFCURSOR;
6497 c_o_error_response SYS_REFCURSOR;
6498 c_o_asoc_prop SYS_REFCURSOR;
6499
6500
6501 BEGIN
6502
6503 v_in_version_copy_id := get_version_copy_id (i_offer_item_id);
6504 v_concat_lang := '';
6505
6506 FOR r_lang_code IN (SELECT language_code FROM language) LOOP
6507 IF gt_support_epg_lang.exists(r_lang_code.language_code) THEN
6508 v_concat_lang := v_concat_lang || upper(r_lang_code.language_code) || k_comma;
6509 END IF;
6510 END LOOP;
6511
6512 FOR i IN 1..gt_media_assoc.count-1 LOOP
6513
6514 IF (gt_present_usage.EXISTS(gt_media_assoc(i).role_code) AND gt_media_assoc(i).vod_sch_item_id = i_offer_item_id)THEN
6515
6516 SELECT nvl(max(m.multimedia_id),k_false)
6517 INTO v_multimedia_id
6518 FROM multimedia m
6519 WHERE m.media_item_id = gt_media_assoc(i).media_item_id;
6520
6521 SELECT vc.tape_type,
6522 tl.table_description
6523 INTO v_tape_type,
6524 v_tape_type_desc
6525 FROM version_copy vc
6526 JOIN table_line tl on (vc.tape_type = tl.table_code and tl.table_id = k_tapetp_tl)
6527 WHERE version_copy_id = gt_media_assoc(i).versioncopyid;
6528
6529 IF gt_delivery_type.exists(v_tape_type) THEN
6530 v_delivery_type := gt_delivery_type(v_tape_type);
6531 ELSE
6532 g_error_response:='No UHE Mapping was set for Version Copy type '||v_tape_type_desc;
6533 RAISE e_error;
6534 END IF;
6535
6536 SELECT XMLAGG(
6537 XMLELEMENT("presentationMedia",
6538 decode( g_is_tstv_offer,
6539 k_false, XMLELEMENT("id",format_uri('ContentInstanceMetadata',v_in_version_copy_id||k_underscore||gt_media_assoc(i).versioncopyid||
6540 k_underscore||lower(l.language_code))),
6541 k_true, XMLELEMENT("id",format_uri('TstvContentInstanceMetadata', g_offer_id ||k_underscore||gt_media_assoc(i).versioncopyid||
6542 k_underscore||lower(l.language_code)))),
6543 XMLELEMENT("key",gt_media_assoc(i).versioncopyid),
6544 XMLELEMENT("instanceType",'Image'),
6545 decode(m.format_type,
6546 null,null,
6547 XMLELEMENT("imageMimeType",get_mime_type(m.format_type))),
6548 XMLELEMENT("imageTextLang",lower(l.language_code)),
6549 decode(m.width,
6550 null,null,
6551 XMLELEMENT("imageWidth",m.width)),
6552 decode(m.height,
6553 null,null,
6554 XMLELEMENT("imageHeight",m.height)),
6555 XMLELEMENT("imageFile",
6556 decode (m.format_type,
6557 null,null,
6558 XMLELEMENT("fileFormat",format_uri_enum('fileFormat',m.format_type))),
6559 XMLELEMENT("fileAccess",
6560 XMLELEMENT("FileAccess",
6561 XMLELEMENT("accessUrl",
6562 get_delivery_uri( i_use_uri_rules => k_uri_asset_media_id,
6563 i_platform_id => g_platform_id,
6564 i_version_id => gt_media_assoc(i).versionid,
6565 i_version_copy_type => v_tape_type,
6566 i_house_media => decode(g_use_src_file_img,
6567 k_true,nvl(m.source_file_name,mi.house_media),
6568 mi.house_media),
6569 i_programme_name => t.programme_name,
6570 i_material_format => mi.format,
6571 i_usage_type_id => ttlusg_tl.table_line_isn,
6572 i_language_id => l.language_id)),
6573 XMLELEMENT("deliveryType",format_uri_enum('deliveryType',v_delivery_type))
6574 )
6575 )
6576 ),
6577 XMLELEMENT("descriptiveMetadata",null)
6578 )
6579 )
6580 INTO v_ii_metadata_node
6581 FROM media_item mi
6582 JOIN version v on (v.version_id = gt_media_assoc(i).versionid)
6583 JOIN title t on (v.title_id = t.title_id)
6584 JOIN table_line ttlusg_tl ON (ttlusg_tl.table_id = k_ttlusg_tl AND ttlusg_tl.table_code = gt_media_assoc(i).role_code)
6585 LEFT OUTER JOIN multimedia m on (m.media_item_id = mi.media_item_id and m.multimedia_id = v_multimedia_id)
6586 LEFT OUTER JOIN language l ON (m.language_id = l.language_id OR (m.language_id is NULL and INSTR(v_concat_lang,upper(l.language_code)||k_comma) >0))
6587 WHERE mi.media_item_id = gt_media_assoc(i).media_item_id;
6588
6589 SELECT XMLCONCAT(v_ii_metadata_xml,v_ii_metadata_node)
6590 INTO v_ii_metadata_xml
6591 FROM dual;
6592
6593 END IF;
6594
6595 END LOOP;
6596
6597 --**413353001 PresentationMedia element for Export offer for channel logo associated content**--
6598 IF g_is_tstv_offer = k_true THEN
6599
6600 FOR i IN 1 .. gt_tstv_info.count
6601 LOOP
6602
6603 IF g_ch_logo_term_id_prop > 0 THEN
6604
6605 --store the value returned by the upper function in a variable. we will use this variable for GetClassTermAssociatedMedia
6606
6607 FOR i IN 1..gt_tbl_cls_associated_med_rec.count LOOP
6608
6609 IF gt_present_usage.EXISTS(gt_tbl_cls_associated_med_rec(i).usage_code)THEN
6610
6611 SELECT nvl(max(m.multimedia_id),k_false)
6612 INTO v_multimedia_id
6613 FROM multimedia m
6614 WHERE m.media_item_id = gt_tbl_cls_associated_med_rec(i).media_item_id;
6615
6616 SELECT vc.tape_type,
6617 tl.table_description
6618 INTO v_tape_type,
6619 v_tape_type_desc
6620 FROM version_copy vc
6621 JOIN table_line tl on (vc.tape_type = tl.table_code and tl.table_id = k_tapetp_tl)
6622 WHERE version_copy_id = gt_tbl_cls_associated_med_rec(i).version_copy_id;
6623
6624 SELECT v.version_id
6625 INTO v_version_id
6626 FROM version v
6627 JOIN version_copy vc
6628 ON vc.version_id = v.version_id
6629 WHERE vc.version_copy_id = gt_tbl_cls_associated_med_rec(i).version_copy_id;
6630
6631 IF gt_delivery_type.exists(v_tape_type) THEN
6632 v_delivery_type := gt_delivery_type(v_tape_type);
6633 ELSE
6634 g_error_response:='No UHE Mapping was set for Version Copy type '||v_tape_type_desc;
6635 RAISE e_error;
6636 END IF;
6637
6638 SELECT XMLAGG(
6639 XMLELEMENT("presentationMedia", XMLELEMENT("id",format_uri('TstvContentInstanceMetadata', g_offer_id ||k_underscore||gt_tbl_cls_associated_med_rec(i).version_copy_id||k_underscore||lower(l.language_code))),
6640 XMLELEMENT("key",gt_tbl_cls_associated_med_rec(i).version_copy_id),
6641 XMLELEMENT("instanceType",'Image'),
6642 decode(m.format_type,
6643 null,null,
6644 XMLELEMENT("imageMimeType",get_mime_type(m.format_type))),
6645 XMLELEMENT("imageTextLang",lower(l.language_code)),
6646 decode(m.width,
6647 null,null,
6648 XMLELEMENT("imageWidth",m.width)),
6649 decode(m.height,
6650 null,null,
6651 XMLELEMENT("imageHeight",m.height)),
6652 XMLELEMENT("imageFile",
6653 decode (m.format_type,
6654 null,null,
6655 XMLELEMENT("fileFormat",format_uri_enum('fileFormat',m.format_type))),
6656 XMLELEMENT("fileAccess",
6657 XMLELEMENT("FileAccess",
6658 XMLELEMENT("accessUrl",
6659 get_delivery_uri( i_use_uri_rules => k_uri_asset_media_id,
6660 i_platform_id => g_platform_id,
6661 i_version_id => gt_media_assoc(i).versionid,
6662 i_version_copy_type => v_tape_type,
6663 i_house_media => decode(g_use_src_file_img,
6664 k_true,nvl(m.source_file_name,mi.house_media),
6665 mi.house_media),
6666 i_programme_name => t.programme_name,
6667 i_material_format => mi.format,
6668 i_usage_type_id => ttlusg_tl.table_line_isn,
6669 i_language_id => l.language_id)),
6670 XMLELEMENT("deliveryType",format_uri_enum('deliveryType',v_delivery_type))
6671 )
6672 )
6673 ),
6674 XMLELEMENT("descriptiveMetadata",null)
6675 )
6676 )
6677 INTO v_ii_metadata_node
6678 FROM media_item mi
6679 JOIN version v on (v.version_id = v_version_id)
6680 JOIN title t on (v.title_id = t.title_id)
6681 JOIN table_line ttlusg_tl ON (ttlusg_tl.table_id = k_ttlusg_tl AND ttlusg_tl.table_code = gt_tbl_cls_associated_med_rec(i).usage_code)
6682 LEFT OUTER JOIN multimedia m on (m.media_item_id = mi.media_item_id and m.multimedia_id = v_multimedia_id)
6683 LEFT OUTER JOIN language l ON (m.language_id = l.language_id OR (m.language_id is NULL and INSTR(v_concat_lang,upper(l.language_code)||k_comma) >0))
6684 WHERE mi.media_item_id = gt_tbl_cls_associated_med_rec(i).media_item_id;
6685
6686 SELECT XMLCONCAT(v_ii_metadata_xml,v_ii_metadata_node)
6687 INTO v_ii_metadata_xml
6688 FROM dual;
6689
6690 END IF;
6691
6692 END LOOP;
6693
6694 END IF;
6695 END LOOP;
6696 END IF;
6697
6698 RETURN v_ii_metadata_xml;
6699 END Get_Image_Instance_Metadata;
6700 --------------------------------------------
6701 -- Function: Get_Preview_Instance_Metadata
6702 --------------------------------------------
6703 FUNCTION Get_Preview_Instance_Metadata (i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE) return XMLTYPE IS
6704
6705 v_pi_metadata XMLTYPE;
6706 v_in_version_copy_id version_copy.version_copy_id%TYPE;
6707
6708 BEGIN
6709
6710 v_in_version_copy_id := get_version_copy_id (i_offer_item_id);
6711
6712 FOR i in 1..gt_media_assoc.count-1 LOOP
6713
6714 IF (gt_related_usage.EXISTS(gt_media_assoc(i).role_code) AND gt_media_assoc(i).vod_sch_item_id = i_offer_item_id)THEN
6715
6716 SELECT XMLCONCAT(v_pi_metadata,
6717 XMLELEMENT("relatedMaterial",
6718 decode( g_is_tstv_offer,
6719 k_false, XMLELEMENT("id",format_uri('ContentInstanceMetadata', v_in_version_copy_id || k_underscore || vc.version_copy_id)),
6720 k_true, XMLELEMENT("id",format_uri ('TstvContentInstanceMetadata', g_offer_id || k_underscore || vc.version_copy_id))),
6721 XMLELEMENT("key",vc.version_copy_id),
6722 XMLELEMENT("instanceType",'PreEncoded'),
6723 XMLELEMENT("essenceMetadata",Get_Essense_Metadata(vc.version_copy_id, k_true)),
6724 XMLELEMENT("encryptedFile",
6725 XMLELEMENT("EncryptedFile",Get_Encrypted_File_Data(vc.version_copy_id,gt_media_assoc(i).media_item_id))
6726 ),
6727 XMLELEMENT("descriptiveMetadata",null)
6728 )
6729 )
6730 INTO v_pi_metadata
6731 FROM version_copy vc
6732 WHERE vc.version_copy_id = gt_media_assoc(i).versioncopyid;
6733
6734 END IF;
6735
6736 END LOOP;
6737
6738 RETURN v_pi_metadata;
6739
6740 END Get_Preview_Instance_Metadata;
6741 -------------------------------------
6742 -- Function: Get_Cast_Data
6743 --------------------------------------
6744 FUNCTION Get_Cast_Data (i_object_type in cast.object_type%TYPE,
6745 i_object_id in cast.object_id%TYPE) return XMLTYPE IS
6746
6747 v_cast_xml XMLTYPE;
6748 v_cast_member_xml XMLTYPE;
6749 v_cast_member_lang_xml XMLTYPE;
6750
6751
6752 BEGIN
6753
6754 FOR r_cast_rec in (SELECT DISTINCT
6755 tl.table_code AS role_code,
6756 tl.table_description AS role_desc,
6757 cm.cast_first_name,
6758 cm.cast_last_name,
6759 c.cast_order,
6760 c.cast_id
6761 FROM CAST c
6762 JOIN cast_member cm ON c.cast_id = cm.cast_id
6763 JOIN table_line tl ON (tl.table_code = c.cast_type AND tl.table_id = k_cast_tl)
6764 JOIN object_aka oa1 ON (oa1.object_type = k_cf
6765 AND oa1.object_id = cm.cast_id
6766 AND oa1.sub_object_type = k_fn)
6767 JOIN object_aka oa2 ON (oa2.object_type = k_cf
6768 AND oa2.object_id = cm.cast_id
6769 AND oa2.sub_object_type = k_ln
6770 AND oa2.language_id = oa1.language_id)
6771 JOIN LANGUAGE l ON l.language_id = oa2.language_id
6772 WHERE c.object_type = i_object_type
6773 AND c.object_id = i_object_id)
6774 LOOP
6775
6776 IF gt_cast_for_export.EXISTS(r_cast_rec.role_code) THEN
6777
6778 FOR r_cast_lang_rec in (SELECT l.language_code,
6779 oa1.aka AS cast_lang_specific_first_name,
6780 oa2.aka AS cast_lang_specific_last_name,
6781 l.iso_639_3_code AS langISO3Code,
6782 l_orig.iso_639_3_code AS langISO3Code_Original
6783 FROM cast_member cm
6784 JOIN object_aka oa_dummy ON (oa_dummy.object_type = 'CF'
6785 AND oa_dummy.object_id = cm.cast_id
6786 AND oa_dummy.sub_object_type = 'FN')
6787 /*Dummy is used to allow to check language mapping before extracting data*/
6788 JOIN object_aka oa1 ON (oa1.object_type = 'CF'
6789 AND oa1.object_id = cm.cast_id
6790 AND oa1.sub_object_type = 'FN'
6791 AND oa1.language_id = nc_yes_uhe_on_demand_export.get_mapped_language_id(oa_dummy.language_id))
6792 JOIN object_aka oa2 ON (oa2.object_type = 'CF'
6793 AND oa2.object_id = cm.cast_id
6794 AND oa2.sub_object_type = 'LN'
6795 AND oa2.language_id = oa1.language_id)
6796 JOIN language l ON l.language_id = oa2.language_id
6797 join language l_orig on l_orig.language_id = oa_dummy.language_id
6798 WHERE cm.cast_id = r_cast_rec.cast_id)
6799
6800 LOOP
6801 IF gt_support_epg_lang.EXISTS(r_cast_lang_rec.language_code) THEN
6802
6803
6804 SELECT XMLCONCAT(
6805 XMLELEMENT("orderNum",r_cast_rec.cast_order),
6806 XMLELEMENT("role", /*format_urn('role',*/gt_cast_mapping(r_cast_rec.role_code)/*)*/)--407076001
6807 )
6808 INTO v_cast_member_xml
6809 FROM dual;
6810
6811 SELECT XMLELEMENT("personName",
6812 XMLATTRIBUTES(lower(r_cast_lang_rec.langISO3Code_Original) as "lang"),
6813 XMLELEMENT("givenName",r_cast_lang_rec.cast_lang_specific_first_name),
6814 XMLELEMENT("familyName",r_cast_lang_rec.cast_lang_specific_last_name)
6815 )
6816 INTO v_cast_member_lang_xml
6817 FROM dual;
6818
6819 SELECT XMLELEMENT("ContentCredit",
6820 XMLCONCAT(v_cast_member_xml,v_cast_member_lang_xml)
6821 )
6822 INTO v_cast_member_xml
6823 FROM dual;
6824
6825 SELECT XMLCONCAT(v_cast_xml,v_cast_member_xml)
6826 INTO v_cast_xml
6827 FROM dual;
6828 END IF;
6829 END LOOP;
6830
6831 END IF;
6832
6833 END LOOP;
6834
6835 RETURN v_cast_xml;
6836
6837 END Get_Cast_Data;
6838
6839 -------------------------------------
6840 -- Function: Get_Descriptive_Metadata
6841 --------------------------------------
6842 FUNCTION Get_Descriptive_Metadata (i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE) return XMLTYPE IS
6843
6844 v_dm_data_xml XMLTYPE;
6845 v_sort_string_xml XMLTYPE;
6846 v_classref_xml XMLTYPE;
6847 v_temp_xml XMLTYPE;
6848 v_assoc_xml XMLTYPE;
6849
6850 c_offer_classifications SYS_REFCURSOR;
6851 v_error_reported NUMBER;
6852 c_error_response SYS_REFCURSOR;
6853 c_properties SYS_REFCURSOR;
6854 c_o_assoaciated_media SYS_REFCURSOR;
6855 c_o_error_response SYS_REFCURSOR;
6856 c_o_asoc_prop SYS_REFCURSOR;
6857
6858 v_version_copy_id version_copy.version_copy_id%TYPE;
6859 v_offer_chan_group_id channel_group.channel_group_id%TYPE;
6860 v_sysdate DATE;
6861 r_offer_classification Offer_Classification_Rec;
6862 v_title_id title.title_id%TYPE;
6863 v_classifications tt_id_exists;
6864
6865 TYPE t_classif_term IS TABLE OF NUMBER(10);
6866 v_classif_term t_classif_term := t_classif_term();
6867
6868 BEGIN
6869
6870 g.debug('Starting Get_Descriptive_Metadata...');
6871
6872 v_version_copy_id := get_version_copy_id (i_offer_item_id);
6873 g.debug('v_version_copy_id', v_version_copy_id);
6874 SELECT v.title_id
6875 INTO v_title_id
6876 FROM version v
6877 JOIN version_copy vc on v.version_id = vc.version_id
6878 WHERE vc.version_copy_id = v_version_copy_id;
6879
6880 v_offer_chan_group_id := Get_Offer_Channel_Group_ID(i_offer_item_id => i_offer_item_id);
6881 g.debug('v_offer_chan_group_id', v_offer_chan_group_id);
6882 v_sysdate := SYSDATE;
6883
6884 Get_Lts_Data (i_object_type => k_title,
6885 i_object_id => v_title_id,
6886 o_lts_set_xml => v_dm_data_xml,
6887 o_error_reported => v_error_reported);
6888
6889 IF v_error_reported = k_true THEN
6890
6891 SELECT XMLAGG(
6892 XMLELEMENT("title",
6893 XMLATTRIBUTES(lower(el.language_code) as "lang"),
6894 el.title_name)
6895 )
6896 INTO v_dm_data_xml
6897 FROM version_copy vc
6898 JOIN version v ON (vc.version_id = v.version_id)
6899 JOIN epg_language el ON (v.title_id = el.title_id)
6900 WHERE vc.version_copy_id = v_version_copy_id;
6901
6902
6903 SELECT XMLCONCAT(v_dm_data_xml,
6904 XMLAGG(
6905 XMLCONCAT (
6906 XMLELEMENT("synopsis",
6907 XMLATTRIBUTES(lower(el.language_code) as "lang",
6908 k_str_type_med as "length"),
6909 trim(el.synopsis)),
6910 XMLELEMENT("synopsis",
6911 XMLATTRIBUTES(lower(el.language_code) as "lang",
6912 k_str_type_long as "length"),
6913 trim(el.long_description))
6914 )
6915 )
6916 )
6917 INTO v_dm_data_xml
6918 FROM version_copy vc
6919 JOIN version v ON (vc.version_id = v.version_id)
6920 JOIN epg_language el ON (v.title_id = el.title_id)
6921 WHERE vc.version_copy_id = v_version_copy_id;
6922
6923 SELECT XMLELEMENT("sortStringMode", g_sort_string)
6924 INTO v_sort_string_xml
6925 FROM dual;
6926
6927 SELECT XMLAGG(
6928 XMLELEMENT("sortStringEx",
6929 XMLATTRIBUTES(lower(el.language_code) as "lang"),
6930 decode( el.language_code,
6931 k_eng, format_title(el.title_name),
6932 el.title_name)
6933 )
6934 )
6935 INTO v_temp_xml
6936 FROM version_copy vc
6937 JOIN version v ON (vc.version_id = v.version_id)
6938 JOIN epg_language el ON (v.title_id = el.title_id)
6939 WHERE vc.version_copy_id = v_version_copy_id;
6940
6941 SELECT XMLCONCAT(v_dm_data_xml,
6942 XMLELEMENT("sortString",
6943 XMLCONCAT(v_sort_string_xml,v_temp_xml)))
6944 INTO v_dm_data_xml
6945 FROM dual;
6946 END IF;
6947 v_classref_xml := NULL;
6948 FOR r_offer_id IN ( SELECT vosi.offer_id
6949 FROM version_copy vc
6950 JOIN vod_item_schedule vis ON (vc.version_id = vis.version_id)
6951 JOIN vod_offer_schedule_item vosi ON (vis.item_schedule_id = vosi.item_schedule_id)
6952 JOIN vod_offer_schedule vos ON (vosi.offer_id = vos.offer_id AND
6953 (vos.end_date > TO_CHAR(v_sysdate, k_date_mask) OR (vos.end_date = TO_CHAR(v_sysdate, k_date_mask) AND
6954 vos.end_time > TO_CHAR(v_sysdate, k_time_mask))))
6955 JOIN offer_type ot ON (vos.offer_type_id = ot.offer_type_id)
6956 JOIN table_line vodotk ON (ot.container_type = vodotk.table_reference AND vodotk.table_id = k_vodotk_tl)
6957 JOIN table_line vodofr ON (vos.status = vodofr.table_reference AND vodofr.table_id = k_vodofr_tl)
6958 WHERE vc.version_copy_id = v_version_copy_id
6959 AND vodotk.table_description = k_single_item
6960 AND (vodofr.table_code = g_success_status OR vosi.offer_id = g_offer_id)
6961 AND vosi.item_schedule_id = i_offer_item_id--410533001, to take just the relevant Offer ClassificationTerms
6962
6963 UNION
6964
6965 SELECT vosi.offer_id
6966 FROM version_copy vc
6967 JOIN vod_item_schedule vis ON (vc.version_id = vis.version_id)
6968 JOIN vod_offer_schedule_item vosi ON (vis.item_schedule_id = vosi.item_schedule_id)
6969 JOIN vod_offer_schedule vos ON (vosi.offer_id = vos.offer_id AND
6970 (vos.end_date > TO_CHAR(v_sysdate, k_date_mask) OR (vos.end_date = TO_CHAR(v_sysdate, k_date_mask) AND
6971 vos.end_time > TO_CHAR(v_sysdate, k_time_mask))))
6972 JOIN offer_type ot ON (vos.offer_type_id = ot.offer_type_id)
6973 JOIN table_line vodotk ON (ot.container_type = vodotk.table_reference AND vodotk.table_id = k_vodotk_tl)
6974 JOIN table_line vodofr ON (vos.status = vodofr.table_reference AND vodofr.table_id = k_vodofr_tl)
6975 JOIN vod_platform vp ON (vp.vod_platform_id = vos.platform_id)
6976 JOIN channel c ON (c.channel_code = vp.channel_code)
6977 JOIN channel_group_detail cgd ON (cgd.channel_id = c.channel_id AND cgd.channel_group_id = v_offer_chan_group_id)
6978 WHERE vc.version_copy_id = v_version_copy_id
6979 AND vodotk.table_description = k_single_item --410533001, will take the additional Classification-Terms from the Offers which are part of the same Service -> Channel -> Channel Group
6980 AND vodofr.table_code = Get_Classification_Sharing(vodofr.table_code)) --where the Service Channel (which is the Channel mapped to the On-Demand Service) belongs too
6981 LOOP
6982 g.debug('r_offer_id.offer_id=' || r_offer_id.offer_id);
6983 on_demand_api.GetOfferClassifications (i_offer_id => r_offer_id.offer_id,
6984 o_offer_classifications => c_offer_classifications,
6985 o_error_reported => v_error_reported,
6986 o_error_response => c_error_response,
6987 o_properties => c_properties);
6988 IF v_error_reported = k_false THEN
6989
6990 LOOP
6991 FETCH c_offer_classifications INTO r_offer_classification;
6992 EXIT WHEN c_offer_classifications%NOTFOUND;
6993 IF TRIM(r_offer_classification.effectivePeriodStartDate) IS NOT NULL
6994 THEN
6995 SELECT XMLCONCAT(v_classref_xml,
6996 XMLELEMENT("classificationRef",
6997 XMLATTRIBUTES(
6998 NVL(TRIM(r_offer_classification.presentationOrder),
6999 g_default_class) AS "order",
7000 format_uri('ClassificationTerm',r_offer_classification.contentId) AS "termRef"
7001 ),
7002 DECODE(TRIM(r_offer_classification.effectivePeriodStartDate),
7003 NULL,NULL,
7004 XMLELEMENT("startDateTime",format_ora_date_utc ( g_timezone_id,
7005 TO_DATE(r_offer_classification.effectivePeriodStartDate || r_offer_classification.effectivePeriodStartTime,
7006 k.datemask || k.timemask)
7007 )
7008 )
7009 ),
7010 DECODE (TRIM(r_offer_classification.effectivePeriodFinishDate),
7011 NULL,NULL,
7012 XMLELEMENT("endDateTime",format_ora_date_utc ( g_timezone_id,
7013 TO_DATE(r_offer_classification.effectivePeriodFinishDate || r_offer_classification.effectivePeriodFinishTime,
7014 k.datemask || k.timemask)
7015 )
7016 )
7017 )
7018 )
7019 )
7020 INTO v_classref_xml
7021 FROM dual;
7022
7023 ELSIF r_offer_classification.contentId NOT MEMBER OF v_classif_term THEN
7024 SELECT XMLCONCAT(v_classref_xml,
7025 XMLELEMENT("classificationRef",
7026 XMLATTRIBUTES(
7027 NVL(TRIM(r_offer_classification.presentationOrder),
7028 g_default_class) AS "order",
7029 format_uri('ClassificationTerm',r_offer_classification.contentId) AS "termRef"
7030 ),
7031 DECODE(TRIM(r_offer_classification.effectivePeriodStartDate),
7032 NULL,NULL,
7033 XMLELEMENT("startDateTime",format_ora_date_utc ( g_timezone_id,
7034 TO_DATE(r_offer_classification.effectivePeriodStartDate || r_offer_classification.effectivePeriodStartTime,
7035 k.datemask || k.timemask)
7036 )
7037 )
7038 ),
7039 DECODE (TRIM(r_offer_classification.effectivePeriodFinishDate),
7040 NULL,NULL,
7041 XMLELEMENT("endDateTime",format_ora_date_utc ( g_timezone_id,
7042 TO_DATE(r_offer_classification.effectivePeriodFinishDate || r_offer_classification.effectivePeriodFinishTime,
7043 k.datemask || k.timemask)
7044 )
7045 )
7046 )
7047 )
7048 )
7049 INTO v_classref_xml
7050 FROM dual;
7051 v_classif_term.EXTEND;
7052 v_classif_term(v_classif_term.last) := r_offer_classification.contentId;
7053
7054 END IF;
7055
7056 END LOOP;
7057 END IF;
7058 END LOOP;
7059
7060 SELECT XMLCONCAT(v_dm_data_xml, v_classref_xml)
7061 INTO v_dm_data_xml
7062 FROM dual;
7063 --407076001
7064 /*genre*/
7065 /*SELECT XMLCONCAT(
7066 decode(g.genre_id,
7067 null,null,
7068 XMLELEMENT("genre",format_urn('genre',nvl(get_genre_mapping(g.genre_id),g.descr)))),
7069 decode(sg.full_id,
7070 null,null,
7071 XMLELEMENT("genre",format_urn('genre',nvl(get_genre_mapping(sg.full_id),sg.sub_genre_descr))))
7072 )
7073 INTO v_temp_xml
7074 FROM version_copy vc
7075 JOIN version v ON (vc.version_id = v.version_id)
7076 JOIN title t ON (v.title_id = t.title_id)
7077 LEFT OUTER JOIN genre_descr g ON (t.epg_genre_id = g.genre_id and g.lang = k_eng)
7078 LEFT OUTER JOIN epg_genre_language_view sg ON ( t.epg_sub_genre_id = sg.sub_genre_id and g.genre_id = sg.genre_id and sg.language_code = k_eng)
7079 WHERE vc.version_copy_id = v_version_copy_id;*/
7080
7081
7082 SELECT XMLCONCAT(
7083 decode(g.genre_id,
7084 null,null,
7085 XMLELEMENT("genre",g_genre_code_prefix||g.genre_id || k_colon ||decode( sg.sub_genre_id,
7086 null,null,
7087 sg.sub_genre_id )))
7088 )
7089 INTO v_temp_xml
7090 FROM version_copy vc
7091 JOIN version v ON (vc.version_id = v.version_id)
7092 JOIN title t ON (v.title_id = t.title_id)
7093 LEFT OUTER JOIN genre_descr g ON (t.epg_genre_id = g.genre_id and g.lang = k_eng)
7094 LEFT OUTER JOIN sub_genre_descr sg ON (t.epg_sub_genre_id = sg.sub_genre_id and sg.lang = k_eng)
7095 WHERE vc.version_copy_id = v_version_copy_id
7096 AND ROWNUM = 1;
7097
7098 SELECT XMLCONCAT(v_dm_data_xml, v_temp_xml)
7099 INTO v_dm_data_xml
7100 FROM dual;
7101
7102 /*Related Material*/
7103 FOR i in 1..gt_media_assoc.count-1 LOOP
7104 IF (gt_related_usage.EXISTS(gt_media_assoc(i).role_code) AND
7105 gt_media_assoc(i).vod_sch_item_id = i_offer_item_id) THEN
7106 SELECT XMLCONCAT(
7107 XMLELEMENT("contentInstanceRef",
7108 decode( g_is_tstv_offer,
7109 k_false, XMLELEMENT("value",format_uri('ContentInstanceMetadata',v_version_copy_id||k_underscore||gt_media_assoc(i).versionCopyId)),
7110 k_true, XMLELEMENT("value",format_uri('TstvContentInstanceMetadata',g_offer_id||k_underscore||gt_media_assoc(i).versionCopyId)))
7111 ),
7112 XMLELEMENT("howRelated",/*format_urn('mediaType',*/decode(gt_media_assoc(i).role_code,
7113 null,null,
7114 gt_usage_map(gt_media_assoc(i).role_code)))/*)*/
7115 )
7116 INTO v_temp_xml
7117 FROM dual;
7118
7119 SELECT XMLCONCAT(v_assoc_xml,
7120 XMLELEMENT("RelatedMaterial",v_temp_xml))
7121 INTO v_assoc_xml
7122 FROM dual;
7123
7124 END IF;
7125
7126 END LOOP;
7127
7128 SELECT XMLCONCAT(v_dm_data_xml,
7129 XMLELEMENT("relatedMaterial",v_assoc_xml))
7130 INTO v_dm_data_xml
7131 FROM dual;
7132
7133 v_assoc_xml := null;
7134
7135 /*Presentation Media*/
7136 FOR i in 1..gt_media_assoc.count-1 LOOP
7137 IF (gt_present_usage.EXISTS(gt_media_assoc(i).role_code) AND
7138 gt_media_assoc(i).vod_sch_item_id = i_offer_item_id) THEN
7139
7140 FOR v_lang in (SELECT l.language_code
7141 FROM language l) LOOP
7142 v_temp_xml := null;
7143
7144 IF (v_lang.language_code = nvl(gt_media_assoc(i).componentlanguagecode,v_lang.language_code) AND
7145 gt_support_epg_lang.EXISTS(v_lang.language_code)) THEN
7146 BEGIN
7147 SELECT XMLCONCAT(
7148 XMLELEMENT("contentInstanceRef",
7149 decode( g_is_tstv_offer,
7150 k_false, XMLELEMENT("value",format_uri('ContentInstanceMetadata',v_version_copy_id||k_underscore||gt_media_assoc(i).versionCopyId||
7151 k_underscore ||lower(v_lang.language_code))),
7152 k_true, XMLELEMENT("value",format_uri('TstvContentInstanceMetadata',g_offer_id||k_underscore||gt_media_assoc(i).versionCopyId||
7153 k_underscore ||lower(v_lang.language_code))))
7154 ),
7155 XMLELEMENT("mediaType",/*format_urn('mediaType',*/gt_usage_map(gt_media_assoc(i).role_code)/*)*/)
7156 )
7157 INTO v_temp_xml
7158 FROM dual;
7159
7160 SELECT XMLCONCAT(v_assoc_xml,
7161 XMLELEMENT("PresentationMedia",v_temp_xml))
7162 INTO v_assoc_xml
7163 FROM dual;
7164
7165 EXCEPTION
7166 WHEN NO_DATA_FOUND THEN
7167 SELECT 'No Usage mapping defined for '||table_description
7168 INTO g_error_response
7169 FROM table_line
7170 WHERE table_id = k_ttlusg_tl
7171 AND table_code = gt_media_assoc(i).role_code;
7172
7173 RAISE e_business;
7174
7175 END;
7176 END IF;
7177 END LOOP;
7178 END IF;
7179
7180 END LOOP;
7181
7182 --**413353001 PresentationMedia element for Export offer for channel logo associated content**--
7183
7184 IF g_is_tstv_offer = k_true THEN
7185
7186 FOR i IN 1 .. gt_tstv_info.count
7187 LOOP
7188 g_ch_logo_term_id_prop := ibms_prop.get_property_number(i_property_code => k_708_ch_logo_term_id_prop,
7189 i_object_id => g_interface_id,
7190 i_level_1_id => gt_tstv_info(i).channel_id);
7191
7192 IF g_ch_logo_term_id_prop > 0 THEN
7193
7194 --store the value returned by the upper function in a variable. we will use this variable for GetClassTermAssociatedMedia
7195
7196
7197 on_demand_api.GetClassTermAssociatedMedia( i_content_id => g_ch_logo_term_id_prop,
7198 o_associated_media => c_o_assoaciated_media,
7199 o_error_reported => v_error_reported,
7200 o_error_response => c_o_error_response,
7201 o_properties => c_o_asoc_prop
7202 );
7203
7204 gt_tbl_cls_associated_med_rec.delete;
7205
7206 FETCH c_o_assoaciated_media BULK COLLECT INTO gt_tbl_cls_associated_med_rec;
7207 CLOSE c_o_assoaciated_media;
7208
7209 /*Presentation Media*/
7210 FOR i in 1..gt_tbl_cls_associated_med_rec.count LOOP
7211 IF gt_present_usage.EXISTS(gt_tbl_cls_associated_med_rec(i).usage_code) THEN
7212
7213 FOR v_lang in (SELECT l.language_code
7214 FROM language l) LOOP
7215 v_temp_xml := null;
7216
7217 IF (v_lang.language_code = nvl(gt_tbl_cls_associated_med_rec(i).iso_639_3_code,v_lang.language_code) AND
7218 gt_support_epg_lang.EXISTS(v_lang.language_code)) THEN
7219 BEGIN
7220 SELECT XMLCONCAT(
7221 XMLELEMENT("contentInstanceRef", XMLELEMENT("value",format_uri('TstvContentInstanceMetadata',g_offer_id||k_underscore||gt_tbl_cls_associated_med_rec(i).version_copy_id||
7222 k_underscore ||lower(v_lang.language_code)))
7223 ),
7224 XMLELEMENT("mediaType",/*format_urn('mediaType',*/gt_usage_map(gt_tbl_cls_associated_med_rec(i).usage_code)/*)*/)
7225 )
7226 INTO v_temp_xml
7227 FROM dual;
7228
7229 SELECT XMLCONCAT(v_assoc_xml,
7230 XMLELEMENT("PresentationMedia",v_temp_xml))
7231 INTO v_assoc_xml
7232 FROM dual;
7233
7234 EXCEPTION
7235 WHEN NO_DATA_FOUND THEN
7236 SELECT 'No Usage mapping defined for '||table_description
7237 INTO g_error_response
7238 FROM table_line
7239 WHERE table_id = k_ttlusg_tl
7240 AND table_code = gt_tbl_cls_associated_med_rec(i).usage_code;
7241
7242 RAISE e_business;
7243
7244 END;
7245 END IF;
7246 END LOOP;
7247 END IF;
7248 END LOOP;
7249
7250 END IF;
7251
7252 END LOOP;
7253
7254 END IF;
7255
7256
7257 SELECT XMLCONCAT(v_dm_data_xml,
7258 XMLELEMENT("presentationMedia",v_assoc_xml))
7259 INTO v_dm_data_xml
7260 FROM dual;
7261
7262 SELECT XMLCONCAT(
7263 XMLELEMENT("epgInfoBits", get_epg_info_bits(vp.channel_code,v_version_copy_id)),
7264 XMLELEMENT("duration",round(decode(version_total_duration(v.version_id),
7265 0,t.estimated_duration,
7266 version_total_duration(v.version_id))/k_seconds_in_minute)*k_seconds_in_minute*k_millisec_in_sec),
7267 XMLELEMENT("parentalGuidance",
7268 XMLELEMENT("ParentalGuidance",
7269 XMLELEMENT("parentalRating",/*format_urn('parentalRating',*/g_parental_rating|| vercer.numeric_1)/*)*/)),--407076001
7270 XMLELEMENT("credits",Get_Cast_Data(k_title,t.title_id)),
7271 XMLELEMENT("contentProviderRef",g_default_provider),
7272 decode(t.year_of_production,
7273 0,null,
7274 XMLELEMENT("yearOfRelease",format_date_time(to_date(t.year_of_production||k_year_start,k.datemask))))
7275 )
7276 INTO v_temp_xml
7277 FROM vod_item_schedule vis
7278 JOIN version v on vis.version_id = v.version_id
7279 JOIN title t on v.title_id = t.title_id
7280 JOIN vod_platform vp on vis.platform_id = vp.vod_platform_id
7281 LEFT OUTER JOIN table_line vercer on (v.certification_code = vercer.table_code and vercer.table_id = k_vercer_tl)
7282 WHERE vis.item_schedule_id = i_offer_item_id;
7283
7284 SELECT XMLCONCAT(v_dm_data_xml, v_temp_xml)
7285 INTO v_dm_data_xml
7286 FROM dual;
7287
7288 v_temp_xml:=null;
7289
7290 FOR r_country IN (SELECT oc.country_code
7291 from vod_item_schedule vis
7292 JOIN version v on vis.version_id = v.version_id
7293 JOIN origin_country oc on v.title_id = oc.object_id and oc.object_type = k_title
7294 where vis.item_schedule_id = i_offer_item_id)
7295 LOOP
7296
7297 SELECT XMLCONCAT(v_temp_xml,
7298 XMLELEMENT("value",r_country.country_code)
7299 )
7300 INTO v_temp_xml
7301 FROM dual;
7302
7303 END LOOP;
7304
7305 SELECT XMLCONCAT(v_dm_data_xml,
7306 XMLELEMENT("countryOfOrigin",v_temp_xml))
7307 INTO v_dm_data_xml
7308 FROM dual;
7309
7310 RETURN v_dm_data_xml;
7311
7312
7313 END Get_Descriptive_Metadata;
7314
7315 -------------------------------------
7316 -- Function: Get_File_Access_Data
7317 --------------------------------------
7318 FUNCTION Get_File_Access_Data (i_version_copy_id IN version_copy.version_copy_id%TYPE,
7319 i_media_item_id IN media_item.media_item_id%TYPE) return XMLTYPE IS
7320
7321 v_fa_xml XMLTYPE;
7322 v_fs_xml XMLTYPE;
7323 v_file_size NUMBER;
7324 v_tape_type version_copy.tape_type%TYPE;
7325 v_tape_type_desc table_line.table_description%TYPE;
7326 v_delivery_type VARCHAR2(50);
7327
7328 BEGIN
7329 IF g_send_calculated = k_true THEN
7330
7331 SELECT calc_asset_delivery_size ( v.version_id,
7332 vc.tape_type,
7333 mi.format,
7334 t.estimated_duration)
7335 INTO v_file_size
7336 FROM media_item mi,
7337 version_copy vc
7338 JOIN version v on (vc.version_id = v.version_id)
7339 JOIN title t on (v.title_id = t.title_id)
7340 WHERE vc.version_copy_id = i_version_copy_id
7341 AND mi.media_item_id = i_media_item_id;
7342
7343 IF nvl(v_file_size,0) > 0 THEN
7344 SELECT XMLELEMENT("fileSize",ROUND(v_file_size))
7345 INTO v_fs_xml
7346 FROM dual;
7347 END IF;
7348
7349
7350
7351 END IF;
7352
7353 SELECT vc.tape_type,
7354 tl.table_description
7355 INTO v_tape_type,
7356 v_tape_type_desc
7357 FROM version_copy vc
7358 JOIN table_line tl on (vc.tape_type = tl.table_code and tl.table_id = k_tapetp_tl)
7359 WHERE version_copy_id = i_version_copy_id;
7360
7361 IF gt_delivery_type.exists(v_tape_type) THEN
7362 v_delivery_type := gt_delivery_type(v_tape_type);
7363 ELSE
7364 g_error_response:='No UHE Mapping was set for Version Copy type '||v_tape_type_desc;
7365 RAISE e_error;
7366 END IF;
7367
7368 SELECT XMLCONCAT (
7369 XMLELEMENT("accessUrl",
7370 get_delivery_uri(i_use_uri_rules => k_uri_asset_delivery_id,
7371 i_platform_id => g_platform_id,
7372 i_version_id => v.version_id,
7373 i_version_copy_type => vc.tape_type,
7374 i_house_media => mi.house_media,
7375 i_programme_name => t.programme_name,
7376 i_material_format => mi.format)),
7377 XMLELEMENT("deliveryType",format_uri_enum('deliveryType',v_delivery_type))
7378 )
7379 INTO v_fa_xml
7380 FROM version_copy vc
7381 JOIN media_item mi on (i_media_item_id = mi.media_item_id)
7382 JOIN version v on (vc.version_id = v.version_id)
7383 JOIN title t on (v.title_id = t.title_id)
7384 WHERE vc.version_copy_id = i_version_copy_id;
7385
7386 SELECT XMLCONCAT(v_fs_xml,
7387 XMLELEMENT("fileAccess",
7388 XMLELEMENT("FileAccess",v_fa_xml)))
7389 INTO v_fa_xml
7390 FROM dual;
7391
7392 RETURN v_fa_xml;
7393
7394 END Get_File_Access_Data;
7395
7396 -------------------------------------
7397 -- Function: Get_Encrypted_File_Data
7398 --------------------------------------
7399 FUNCTION Get_Encrypted_File_Data (i_version_copy_id IN version_copy.version_copy_id%TYPE,
7400 i_media_item_id IN media_item.media_item_id%TYPE) return XMLTYPE IS
7401
7402 v_encfile_xml XMLTYPE;
7403 v_encfile_avail_xml XMLTYPE;
7404 v_media_item_no media_item.house_media%TYPE;
7405 v_tape_type version_copy.tape_type%TYPE;
7406 v_suffix varchar2(50);
7407
7408 BEGIN
7409
7410 SELECT mi.house_media,
7411 vc.tape_type
7412 INTO v_media_item_no,
7413 v_tape_type
7414 FROM media_item mi,
7415 version_copy vc
7416 WHERE mi.media_item_id = i_media_item_id
7417 AND vc.version_copy_id = i_version_copy_id;
7418
7419 v_suffix := get_mapped_physical_suffix (v_tape_type,null);
7420
7421 SELECT XMLCONCAT(
7422 XMLELEMENT("versionId",v_media_item_no),
7423 XMLELEMENT("physicalInstanceId",v_media_item_no || v_suffix),
7424 XMLELEMENT("fileAccess",Get_File_Access_Data (i_version_copy_id,i_media_item_id))
7425 )
7426 INTO v_encfile_xml
7427 FROM version_copy vc
7428 WHERE vc.version_copy_id = i_version_copy_id;
7429
7430 FOR v_locale IN ( SELECT to_char(vod_platform_id) as platform_id
7431 FROM vod_platform)
7432 LOOP
7433 IF gt_uhe_locale_set.EXISTS(v_locale.platform_id) THEN
7434 SELECT XMLCONCAT(v_encfile_avail_xml,
7435 XMLELEMENT("EncryptedFileAvailability",
7436 XMLELEMENT("localeId",gt_uhe_locale_set(v_locale.platform_id)),
7437 XMLELEMENT("startDateTime",k_start_of_times)
7438 )
7439 )
7440 INTO v_encfile_avail_xml
7441 FROM dual;
7442 END IF;
7443 END LOOP;
7444
7445 SELECT XMLCONCAT(v_encfile_xml,
7446 XMLELEMENT("encryptedFileAvailability",v_encfile_avail_xml)
7447 )
7448 INTO v_encfile_xml
7449 FROM dual;
7450
7451 RETURN v_encfile_xml;
7452
7453 END Get_Encrypted_File_Data;
7454
7455 ----------------------------------
7456 -- Function: Get_Essense_Metadata
7457 ----------------------------------
7458 FUNCTION Get_Essense_Metadata ( i_version_copy_id IN version_copy.version_copy_id%TYPE,
7459 i_ignore_ContParams IN k.logical%TYPE DEFAULT 0) return XMLTYPE IS
7460
7461 v_local_cursor SYS_REFCURSOR;
7462 v_essence_xml XMLTYPE;
7463 v_subtitles_xml XMLTYPE;
7464 v_cont_control_xml XMLTYPE;
7465
7466 v_audio_type VARCHAR2(50);
7467 v_audio_code version.audio%TYPE;
7468 v_version_name version.version_name%TYPE;
7469 v_audio_description table_line.table_description%TYPE;
7470 v_hard_of_hearing NUMBER(1);
7471 v_timezone vod_platform.timezone_id%TYPE;
7472 BEGIN
7473
7474 SELECT tl.table_code, tl.table_description, v.version_name
7475 INTO v_audio_code,
7476 v_audio_description,
7477 v_version_name
7478 FROM version_copy vc
7479 JOIN version v on (vc.version_id = v.version_id)
7480 LEFT OUTER JOIN table_line tl ON (vc.required_audio_type_id = tl.table_line_isn AND tl.table_id = k_audio_tl)
7481 WHERE version_copy_id = i_version_copy_id;
7482
7483 SELECT vp.timezone_id
7484 INTO v_timezone
7485 FROM vod_platform vp
7486 JOIN vod_offer_schedule vos
7487 ON vos.platform_id = vp.vod_platform_id
7488 WHERE vos.offer_id = g_offer_id AND rownum = 1;
7489 IF TRIM(v_audio_code) != k_space THEN
7490
7491 BEGIN
7492 v_audio_type := gt_audio_type_set(v_audio_code);
7493 EXCEPTION
7494 WHEN NO_DATA_FOUND THEN
7495 g_error_response := 'No UHE Mapping was set for Audio Type '||v_audio_description;
7496 RAISE e_error;
7497 END;
7498
7499 END IF;
7500
7501 Select nvl(max(k_true),0)
7502 INTO v_hard_of_hearing
7503 FROM component c
7504 WHERE c.version_copy_id = i_version_copy_id
7505 AND c.component_type_id = g_hard_of_hearing;
7506
7507 select XMLCONCAT(
7508 DECODE(v_audio_type,
7509 NULL,NULL,
7510 XMLELEMENT("soundType",format_uri_enum( 'soundType', v_audio_type))
7511 ),
7512 XMLELEMENT("cgms",format_uri_enum( 'cgmsType', nvl(g_copy_prot_ca_val,g_default_copy_prot))),
7513 XMLELEMENT("isWideScreen",decode(vertyp.numeric_1,
7514 1,k_true_text,
7515 3,k_true_text,
7516 k_false_text)),
7517 XMLELEMENT("isHighDefinition",decode(tl_cat.logical_1,
7518 k_true,k_true_text,
7519 k_false_text)),
7520 XMLELEMENT("isThreeDimensional",decode(tl_cat.logical_2,
7521 k_true,k_true_text,
7522 k_false_text)),
7523 XMLELEMENT("hardOfHearingAvailable",decode(v_hard_of_hearing,
7524 k_true,k_true_text,
7525 k_false_text))
7526 )
7527 INTO v_essence_xml
7528 FROM version_copy vc
7529 LEFT OUTER JOIN table_line vertyp ON (vc.required_aspect_ratio_id = vertyp.table_line_isn AND vertyp.table_id = k_vertyp_tl)
7530 LEFT OUTER JOIN table_line tl_res ON (tl_res.table_code = vc.resolution AND tl_res.table_id = k_resltn_tl)
7531 LEFT OUTER JOIN table_line tl_cat ON (tl_cat.table_code = tl_res.text_1 AND tl_cat.table_id = k_rescat_tl)
7532 WHERE version_copy_id = i_version_copy_id;
7533
7534
7535 FOR r_lang in ( SELECT l.language_code
7536 FROM component c
7537 JOIN language l on (c.language_id = l.language_id)
7538 WHERE c.version_copy_id = i_version_copy_id
7539 AND c.component_type_id = g_subtitle)
7540 LOOP
7541 SELECT XMLCONCAT(v_subtitles_xml,
7542 XMLELEMENT("value",lower(r_lang.language_code))
7543 )
7544 INTO v_subtitles_xml
7545 FROM dual;
7546 END LOOP;
7547
7548 SELECT XMLCONCAT( v_essence_xml,
7549 XMLELEMENT("subtitleLanguages",v_subtitles_xml)
7550 )
7551 INTO v_essence_xml
7552 FROM dual;
7553
7554 IF i_ignore_ContParams = k_false THEN
7555 FOR v_index in 1..gt_content_control_ca.count
7556 LOOP
7557 BEGIN
7558 SELECT XMLCONCAT(v_cont_control_xml,
7559 XMLELEMENT("CAParameter",
7560 XMLELEMENT("parameterName",gt_content_control_ca(v_index)."name"),
7561 XMLELEMENT("parameterValue",format_ora_date_utc(v_timezone, TO_DATE(gt_content_control_ca(v_index)."value", k_uhe_date_format)))
7562 )
7563 )
7564 INTO v_cont_control_xml
7565 FROM dual;
7566
7567 EXCEPTION
7568 WHEN OTHERS THEN
7569 SELECT XMLCONCAT(v_cont_control_xml,
7570 XMLELEMENT("CAParameter",
7571 XMLELEMENT("parameterName",gt_content_control_ca(v_index)."name"),
7572 XMLELEMENT("parameterValue",gt_content_control_ca(v_index)."value", k_uhe_date_format)
7573 )
7574 )
7575 INTO v_cont_control_xml
7576 FROM dual;
7577 END;
7578 END LOOP;
7579
7580 IF v_cont_control_xml IS NOT NULL THEN
7581 SELECT XMLCONCAT(v_essence_xml,
7582 XMLELEMENT("contentControlParams",v_cont_control_xml)
7583 )
7584 INTO v_essence_xml
7585 FROM dual;
7586 END IF;
7587 END IF;
7588
7589 RETURN v_essence_xml;
7590
7591 END Get_Essense_Metadata;
7592 -------------------------------------------
7593 -- Function: Get_Program_Instance_Metadata
7594 -------------------------------------------
7595 FUNCTION Get_Program_Instance_Metadata (i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE) return XMLTYPE IS
7596
7597 v_pi_metadata_xml XMLTYPE;
7598 v_inst_avail_xml XMLTYPE;
7599 v_catch_avail_xml XMLTYPE;
7600 v_restart_xml XMLTYPE;
7601 v_version_copy_id version_copy.version_copy_id%TYPE;
7602 v_media_item_id media_item.media_item_id%TYPE;
7603 v_uhe_service_id VARCHAR2(30);
7604 v_chan_service_id channel.si_service_key%TYPE;
7605 vt_used_locale vod_platform_tab;
7606
7607 BEGIN
7608
7609 v_version_copy_id := get_version_copy_id (i_offer_item_id);
7610 v_media_item_id := get_media_item_id (i_offer_item_id);
7611
7612 SELECT XMLCONCAT(
7613 decode( g_is_tstv_offer,
7614 k_false, XMLELEMENT("id",format_uri ('ContentInstanceMetadata', vc.version_copy_id)),
7615 k_true, XMLELEMENT("id",format_uri ('TstvContentInstanceMetadata', g_offer_id))),
7616 decode( g_is_tstv_offer,
7617 k_false, XMLELEMENT("key",vc.version_copy_id),
7618 k_true, XMLELEMENT("key",g_offer_id)),
7619 XMLELEMENT("contentRef",format_uri('ContentMetadata', vc.version_id)),
7620 XMLELEMENT("instanceType",'PreEncoded'),
7621 decode( g_is_tstv_offer,
7622 k_false, NULL,
7623 k_true, Get_Start_End_DateTime(g_offer_id)),
7624 XMLELEMENT("essenceMetadata",Get_Essense_Metadata(v_version_copy_id))
7625 )
7626 INTO v_pi_metadata_xml
7627 FROM version_copy vc
7628 WHERE vc.version_copy_id = v_version_copy_id;
7629
7630 vt_used_locale.DELETE;
7631 For r_locale in (select distinct to_char(vis.platform_id) as platform_id
7632 from vod_item_schedule vis
7633 join version_copy vc on (vc.version_id = vis.version_id)
7634 where vc.version_copy_id = v_version_copy_id)
7635
7636 LOOP
7637 IF gt_uhe_locale_set.EXISTS(r_locale.platform_id) THEN
7638
7639 IF NOT vt_used_locale.EXISTS (r_locale.platform_id) THEN
7640
7641 SELECT XMLCONCAT(v_inst_avail_xml ,
7642 XMLELEMENT("InstanceAvailability",
7643 XMLELEMENT("localeId",gt_uhe_locale_set(r_locale.platform_id)),
7644 XMLELEMENT("startDateTime",k_start_of_times)
7645 )
7646 )
7647 INTO v_inst_avail_xml
7648 FROM dual;
7649
7650 vt_used_locale(r_locale.platform_id):='1';
7651
7652 END IF;
7653
7654 END IF;
7655 END LOOP;
7656 FOR i IN 1 .. gt_tstv_info.count
7657 LOOP
7658 g.debug('[Get_Program_Instance_Metadata] current offer item is ',gt_tstv_info(i).offer_item);
7659 IF gt_tstv_info(i).offer_item = i_offer_item_id THEN -- obtain CatchupAvailability info
7660 v_uhe_service_id := ibms_prop.get_property_char(i_property_code => k_708_uhe_service_id_prop,
7661 i_object_id => g_interface_id,
7662 i_level_1_id => gt_tstv_info(i).channel_id);
7663 IF trim(v_uhe_service_id) IS NOT NULL THEN -- check if interface mapped value is not null
7664 g.debug('[Get_Program_Instance_Metadata] v_uhe_service_id is not null');
7665 IF g_tstv_type = g_tstv_catchup THEN
7666 SELECT XMLCONCAT(v_catch_avail_xml ,
7667 XMLELEMENT("CatchupAvailability",
7668 XMLELEMENT("serviceRef",v_uhe_service_id), --
7669 XMLELEMENT("nominalEventDateTime",gt_tstv_info(i).Utc_Date_Time) --TSTV convert to UTC format
7670 )
7671 )
7672 INTO v_catch_avail_xml
7673 FROM dual;
7674 ELSIF g_tstv_type = g_tstv_restart OR g_tstv_type = g_tstv_staprev THEN
7675 SELECT XMLCONCAT(v_restart_xml ,
7676 XMLELEMENT("RestartAvailability",
7677 XMLELEMENT("serviceRef",v_uhe_service_id), --
7678 XMLELEMENT("nominalEventDateTime",gt_tstv_info(i).Utc_Date_Time) --TSTV convert to UTC format
7679 )
7680 )
7681 INTO v_restart_xml
7682 FROM dual;
7683 END IF;
7684 ELSE
7685 -- if interface mapped value is null then take it from channel
7686 SELECT ch.si_service_key
7687 INTO v_chan_service_id
7688 FROM channel ch
7689 WHERE ch.channel_id = gt_tstv_info(i).channel_id;
7690
7691 g.debug('[Get_Program_Instance_Metadata] Service ID not mapped. v_chan_service_id=',v_chan_service_id);
7692 IF v_chan_service_id > 0 THEN
7693 IF g_tstv_type = g_tstv_catchup THEN
7694 SELECT XMLCONCAT(v_catch_avail_xml ,
7695 XMLELEMENT("CatchupAvailability",
7696 XMLELEMENT("serviceRef",v_chan_service_id), --
7697 XMLELEMENT("nominalEventDateTime",gt_tstv_info(i).Utc_Date_Time) --TSTV convert to UTC format
7698 )
7699 )
7700 INTO v_catch_avail_xml
7701 FROM dual;
7702 ELSIF g_tstv_type = g_tstv_restart OR g_tstv_type = g_tstv_staprev THEN
7703 SELECT XMLCONCAT(v_restart_xml ,
7704 XMLELEMENT("RestartAvailability",
7705 XMLELEMENT("serviceRef",v_chan_service_id), --
7706 XMLELEMENT("nominalEventDateTime",gt_tstv_info(i).Utc_Date_Time) --TSTV convert to UTC format
7707 )
7708 )
7709 INTO v_restart_xml
7710 FROM dual;
7711 END IF;
7712
7713 ELSE
7714 --if no values could be found, then crash inerface
7715 g.debug('[Get_Program_Instance_Metadata] service id and channel not properly configured ');
7716 g_error_response := 'Failed to populate element <serviceRef>';
7717 RAISE e_error;
7718 END IF;
7719 END IF;
7720 END IF;
7721 END LOOP;
7722
7723 SELECT XMLCONCAT(v_pi_metadata_xml,
7724 XMLELEMENT("availability",v_inst_avail_xml),
7725 CASE WHEN g_tstv_type = g_tstv_catchup THEN
7726 XMLELEMENT("catchupAvailability",v_catch_avail_xml)-- TSTV treb verificat daca avem TSTV Offer pt a crea elem asta
7727 ELSE
7728 NULL
7729 END,
7730 XMLELEMENT("encryptedFile",
7731 XMLELEMENT("EncryptedFile",Get_Encrypted_File_Data(v_version_copy_id,v_media_item_id))),
7732 XMLELEMENT("descriptiveMetadata",Get_Descriptive_Metadata(i_offer_item_id)),
7733 CASE WHEN g_tstv_type = g_tstv_restart OR g_tstv_type = g_tstv_staprev THEN
7734 XMLELEMENT("restartAvailability",v_restart_xml)-- TSTV treb verificat daca avem TSTV Offer pt a crea elem asta
7735 ELSE
7736 NULL
7737 END,
7738 decode (g_is_tstv_offer,
7739 k_false,XMLELEMENT("otherIdentifiers",
7740 XMLELEMENT("OtherIdentifier",
7741 XMLELEMENT("identifier",g_default_provider||k_pound||vc.version_id),
7742 XMLELEMENT("namespace",g_other_identifier)
7743 )),
7744 NULL)
7745 )
7746 INTO v_pi_metadata_xml
7747 FROM version_copy vc
7748 WHERE vc.version_copy_id = v_version_copy_id;
7749
7750 RETURN v_pi_metadata_xml;
7751
7752 END Get_Program_Instance_Metadata;
7753 ------------------------------------------
7754 -- Function: Get_Member_Of_Content_Group
7755 ------------------------------------------
7756 Function Get_Member_Of_Content_Group (i_season_id IN season.season_id%TYPE,
7757 i_episode_number IN title.us_episode_no%TYPE,
7758 i_collection IN k.logical%TYPE DEFAULT k.logical_false) RETURN XMLTYPE IS
7759
7760 v_contgroup_xml XMLTYPE;
7761
7762 BEGIN
7763
7764 IF nvl(i_season_id,0)*nvl(i_episode_number,0) >= 0 THEN
7765 SELECT XMLCONCAT(
7766 XMLELEMENT("order", i_episode_number),
7767 XMLELEMENT("contentGroupRef", decode(i_collection,
7768 k_false, format_uri('SeasonContentGroupMetadata',i_season_id),
7769 format_uri('CollectionContentGroupMetadata',i_season_id)))
7770 )
7771 INTO v_contgroup_xml
7772 FROM dual;
7773 ELSE
7774 RETURN NULL;
7775 END IF;
7776
7777 RETURN v_contgroup_xml;
7778
7779 END Get_Member_Of_Content_Group;
7780
7781 ----------------------------------
7782 -- Function: Get_Content_Metadata
7783 ----------------------------------
7784 FUNCTION Get_Content_Metadata (i_version_id IN version.version_id%TYPE,
7785 i_purchase_id IN purchase.purchase_id%TYPE,
7786 i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE) RETURN XMLTYPE IS
7787
7788 v_contmet_xml XMLTYPE;
7789 v_add_mem_xml XMLTYPE;
7790 v_season_id season.season_id%TYPE;
7791 v_leading_season vod_offer_schedule.series_id%TYPE:=NULL;
7792 v_service_valid NUMBER;
7793 v_member_of NUMBER;
7794 v_sysdate DATE;
7795 vt_season_used tt_id_exists;
7796 ------------------------------------------
7797 -- Function: Get_Collection_Cont_Metadata
7798 -- it will be called only for series or collection offers without leading season
7799 ------------------------------------------
7800 FUNCTION Get_Collection_Cont_Metadata ( i_version_id IN version.version_id%TYPE,
7801 i_purchase_id IN purchase.purchase_id%TYPE) RETURN XMLTYPE IS
7802 v_contmet_xml XMLTYPE;
7803 BEGIN
7804 SELECT XMLCONCAT(
7805 XMLELEMENT("id",format_uri ( 'ContentMetadata', v.version_id)),
7806 XMLELEMENT("type",'Selectable'),
7807 XMLELEMENT("key",v.version_id),
7808 XMLELEMENT("contentId",v.title_id),
7809 XMLELEMENT("providerRef",g_default_provider),
7810 XMLELEMENT("descriptiveMetadata",null),
7811 XMLELEMENT("memberOf",Get_Member_Of_Content_Group ( g_offer_id,p.episode_no, k_true))
7812 )
7813 INTO v_contmet_xml
7814 FROM version v
7815 JOIN title t ON v.title_id = t.title_id
7816 JOIN purchase p ON t.title_id = p.title_id
7817 WHERE v.version_id = i_version_id
7818 AND p.purchase_id = i_purchase_id;
7819
7820 RETURN v_contmet_xml;
7821 END Get_Collection_Cont_Metadata;
7822 BEGIN
7823
7824 v_leading_season := Get_Leading_Season (g_offer_id);
7825 IF (v_leading_season IS NULL) AND (g_series = k_true OR g_collection = k_true) THEN
7826 v_contmet_xml := Get_Collection_Cont_Metadata(i_version_id, i_purchase_id); --without a leading season, we call the subprogram
7827 ELSE
7828 SELECT XMLCONCAT(
7829 XMLELEMENT("id",format_uri ( 'ContentMetadata', v.version_id)),
7830 XMLELEMENT("type",'Selectable'),
7831 XMLELEMENT("key",v.version_id),
7832 XMLELEMENT("contentId",v.title_id),
7833 XMLELEMENT("providerRef",/*format_uri('providerRef',*/g_default_provider/*)*/),
7834 XMLELEMENT("descriptiveMetadata",null),
7835 CASE
7836 WHEN (g_series = k_false AND g_collection = k_false) THEN
7837 NULL
7838 ELSE
7839 decode (nvl(v_leading_season,st.season_id),
7840 NULL,NULL,
7841 XMLELEMENT("memberOf",Get_Member_Of_Content_Group ( nvl(v_leading_season,st.season_id),p.episode_no)))
7842 END),
7843 CASE
7844 WHEN (g_series = k_false AND g_collection = k_false) THEN
7845 NULL
7846 ELSE
7847 nvl(v_leading_season,st.season_id)
7848 END
7849 INTO v_contmet_xml,
7850 v_member_of
7851 FROM version v
7852 JOIN title t ON v.title_id = t.title_id
7853 JOIN purchase p ON t.title_id = p.title_id
7854 LEFT OUTER JOIN season_title_purchase st ON (t.title_id = st.title_id AND p.purchase_id = st.purchase_id)
7855 WHERE v.version_id = i_version_id
7856 AND p.purchase_id = i_purchase_id;
7857 END IF;
7858
7859 v_add_mem_xml := NULL;
7860 v_sysdate := SYSDATE;
7861 vt_season_used.delete;
7862
7863 IF v_member_of IS NOT NULL THEN
7864 vt_season_used(to_char(v_member_of)):=1;
7865 END IF;
7866 FOR r_offers IN (SELECT DISTINCT
7867 vosi.offer_id AS offer_id,
7868 Get_Leading_Season(vosi.offer_id) leading_season,
7869 p.episode_no AS episode_no,
7870 vis.platform_id AS service_id
7871 FROM version v
7872 JOIN vod_item_schedule vis ON (v.version_id = vis.version_id)
7873 JOIN vod_offer_schedule_item vosi ON (vis.item_schedule_id = vosi.item_schedule_id)
7874 JOIN vod_offer_schedule vos ON (vosi.offer_id = vos.offer_id) AND
7875 (vos.end_date > TO_CHAR(v_sysdate, k_date_mask) OR (vos.end_date = TO_CHAR(v_sysdate, k_date_mask) AND
7876 vos.end_time > TO_CHAR(v_sysdate, k_time_mask)))
7877 JOIN purchase p ON (vis.purchase_id = p.purchase_id)
7878 JOIN offer_type ot ON (vos.offer_type_id = ot.offer_type_id)
7879 JOIN table_line vodotk ON (ot.container_type = vodotk.table_reference AND vodotk.table_id = k_vodotk_tl)
7880 JOIN table_line vodofr ON (vos.status = vodofr.table_reference AND vodofr.table_id = k_vodofr_tl)
7881 WHERE v.version_id = i_version_id
7882 AND nvl(Get_Leading_Season(vosi.offer_id),vosi.offer_id) != nvl(v_leading_season,g_offer_id)
7883 AND vodotk.table_description IN (k_series, k_coll_assets)
7884 AND vodofr.table_code = g_success_status
7885 ) LOOP
7886
7887 service_validation (i_service_id => r_offers.service_id,
7888 o_validation_service => v_service_valid);
7889
7890 v_season_id := nvl(r_offers.leading_season,r_offers.offer_id);
7891 IF v_service_valid = 1 AND NOT(vt_season_used.EXISTS(to_char(v_season_id))) THEN
7892 SELECT XMLCONCAT(v_add_mem_xml,
7893 XMLELEMENT("memberOf",Get_Member_Of_Content_Group (v_season_id,r_offers.episode_no, decode(r_offers.leading_season,null,k_true,k_false)))
7894 )
7895 INTO v_add_mem_xml
7896 FROM dual;
7897 vt_season_used(to_char(v_season_id)):=1;
7898 END IF;
7899 END LOOP;
7900
7901 SELECT XMLCONCAT(v_contmet_xml,v_add_mem_xml)
7902 INTO v_contmet_xml
7903 FROM dual;
7904
7905 RETURN v_contmet_xml;
7906
7907 END Get_Content_Metadata;
7908
7909 ----------------------------------
7910 -- Function: Get_Purchasable_Title_Data
7911 ----------------------------------
7912 FUNCTION Get_Purchasable_Title_Data (i_offer_item_id IN vod_item_schedule.item_schedule_id%TYPE,
7913 i_purchase_id IN purchase.purchase_id%TYPE) return XMLTYPE IS
7914
7915 v_ptitle_data CLOB:='';
7916 v_ptitle_xml XMLTYPE;
7917
7918 v_title_id title.title_id%TYPE;
7919 v_version_copy_id version_copy.version_copy_id%TYPE;
7920
7921 BEGIN
7922
7923 v_version_copy_id := get_version_copy_id (i_offer_item_id);
7924
7925 SELECT XMLCONCAT(
7926 decode( g_is_tstv_offer,
7927 k_false, XMLELEMENT("id",format_uri ('PurchasableTitle', v_version_copy_id)),
7928 k_true, XMLELEMENT("id",format_uri ('TstvPurchasableTitle', g_offer_id))),
7929 XMLELEMENT("logicalTitle",Get_Content_Metadata(v.version_id,i_purchase_id, i_offer_item_id)),
7930 XMLELEMENT("title", Get_Program_Instance_Metadata(i_offer_item_id)),
7931 Get_Preview_Instance_Metadata(i_offer_item_id),
7932 Get_Image_Instance_Metadata(i_offer_item_id)
7933 )
7934 INTO v_ptitle_xml
7935 FROM version_copy vc
7936 JOIN version v on vc.version_id = v.version_id
7937 WHERE version_copy_id = v_version_copy_id;
7938
7939 SELECT XMLELEMENT("PurchasableTitle",
7940 XMLATTRIBUTES ( decode(g_is_tstv_offer,
7941 k_false, format_uri ('PurchasableTitle', v_version_copy_id),
7942 k_true, format_uri ('TstvPurchasableTitle', g_offer_id)) as "resourceId",
7943 'PUT' as "action"),
7944 v_ptitle_xml)
7945 INTO v_ptitle_xml
7946 FROM dual;
7947
7948 RETURN v_ptitle_xml;
7949
7950 EXCEPTION
7951 WHEN no_data_found THEN
7952 g_error_response := 'Failed to build PurchasableTitle XML element for Offer-Item '||i_offer_item_id;
7953 raise e_business;
7954
7955 END Get_Purchasable_Title_Data;
7956
7957 ----------------------------------
7958 -- Procedure: Get_Offer_Data
7959 -- Main entry point to Offer Export process, returns all data related to given offer
7960 ----------------------------------
7961 Procedure Get_Offer_Data (i_offer_id IN vod_offer_schedule.offer_id%TYPE,
7962 i_io_file_id IN io_file_log.file_id%TYPE,
7963 i_event_type IN table_line.table_reference%TYPE,
7964 i_change_type IN table_line.table_reference%TYPE,
7965 o_error_reported OUT NUMBER,
7966 o_error_message OUT VARCHAR2) IS
7967
7968 l_error_reported NUMBER;
7969 l_media_hierarchy VARCHAR2(300):='';
7970
7971 v_error_msg t.max_varchar2%TYPE := NULL;
7972 v_error_rep k.logical%TYPE := k_false;
7973 v_post_status NUMBER;
7974 v_title_id title.title_id%TYPE;
7975 v_season_id season.season_id%TYPE;
7976 v_leading_season vod_offer_schedule.series_id%TYPE;
7977 v_show_id show.show_id%TYPE;
7978 v_url VARCHAR2(200);
7979 v_title_xml XMLTYPE;
7980 v_season_xml XMLTYPE;
7981 v_show_xml XMLTYPE;
7982 v_xml_payload XMLTYPE;
7983 v_temp_clob CLOB;
7984 v_msg_blob BLOB;
7985 vo_titles_xml XMLTYPE;
7986 vo_shows_xml XMLTYPE;
7987 vo_seasons_xml XMLTYPE;
7988 vo_purchase_xml XMLTYPE;
7989 v_tstv_type VARCHAR2(15);
7990 vt_season_exists tt_id_exists;
7991 vt_show_exists tt_id_exists;
7992 v_slot_changed k.logical%TYPE;
7993 v_ssr9_released NUMBER := NULL;
7994 v_avail_as_catch_up_prop NUMBER := NULL;
7995 v_avail_as_start_over_prop NUMBER := NULL;
7996 v_avail_as_start_previ_prop NUMBER := NULL;
7997 vr_components_to_send rt_components_to_send;
7998
7999 v_error_response response_rec;
8000 c_tstv_info r_tstv_info;
8001 v_error_reported_dummy k.logical%TYPE;
8002 v_error_response_dummy SYS_REFCURSOR;
8003 v_error_code VARCHAR2(5);
8004 --Data cursors
8005 c_offer_record SYS_REFCURSOR;
8006 c_offer_periods SYS_REFCURSOR;
8007 c_offer_classifications SYS_REFCURSOR;
8008 c_offer_classifications2 SYS_REFCURSOR;
8009 c_offer_ca_parameters SYS_REFCURSOR;
8010 c_offer_items SYS_REFCURSOR;
8011 c_offer_item_periods SYS_REFCURSOR;
8012 c_offer_item_profiles SYS_REFCURSOR;
8013 c_brand_epg_descriptions SYS_REFCURSOR;
8014 c_media_assocations_list SYS_REFCURSOR;
8015 c_navigation_path SYS_REFCURSOR;
8016 c_catch_up_Details SYS_REFCURSOR;
8017 c_offer_properties SYS_REFCURSOR;
8018 c_offer_epg_data SYS_REFCURSOR;
8019 c_error_reported SYS_REFCURSOR;
8020 c_error_response SYS_REFCURSOR;
8021 c_properties SYS_REFCURSOR;
8022 c_tstv_metadata SYS_REFCURSOR;
8023
8024
8025 BEGIN
8026
8027 g_offer_id := i_offer_id;
8028 g_io_file_id := i_io_file_id;
8029 g_virtual_season := k_false;
8030 g_tstv_restart := NULL;
8031 g_tstv_catchup := NULL;
8032 g_tstv_staprev := NULL;
8033 g_error_response := NULL;
8034 get_settings;
8035 get_ca_values(i_offer_id);
8036 g_io_content_xml:=NULL;
8037 is_tstv_offer( i_offer_id => i_offer_id ,
8038 o_is_tstv => g_is_tstv_offer,
8039 o_tstv_type => v_tstv_type,
8040 o_results => c_tstv_metadata,
8041 o_error_rep => v_error_rep,
8042 o_err_msg => v_error_msg);
8043
8044 g.debug('Calling GETCOMPLEXOFFERDATA');
8045 ON_DEMAND_API.GETCOMPLEXOFFERDATA( i_offer_id => i_offer_id,
8046 i_media_hierarchy => g_media_hierarchy,--408925001
8047 i_required_attrs => null,
8048 o_offer_record => c_offer_record,
8049 o_offer_periods => c_offer_periods,
8050 o_offer_classifications => c_offer_classifications,
8051 o_offer_ca_parameters => c_offer_ca_parameters,
8052 o_offer_items => c_offer_items,
8053 o_offer_item_periods => c_offer_item_periods,
8054 o_offer_item_profiles => c_offer_item_profiles,
8055 o_brand_epg_descriptions => c_brand_epg_descriptions,
8056 o_media_assocations_list => c_media_assocations_list,
8057 o_navigation_path => c_navigation_path,
8058 o_catch_up_Details => c_catch_up_details,
8059 o_offer_properties => c_offer_properties,
8060 o_offer_epg_data => c_offer_epg_data,
8061 o_error_reported => l_error_reported,
8062 o_error_response => c_error_response,
8063 o_properties => c_properties);
8064
8065 IF c_offer_record%ISOPEN THEN CLOSE c_offer_record;
8066 END IF;
8067 IF c_brand_epg_descriptions%ISOPEN THEN CLOSE c_brand_epg_descriptions;
8068 END IF;
8069 IF c_catch_up_details%ISOPEN THEN CLOSE c_catch_up_details;
8070 END IF;
8071 IF c_navigation_path%ISOPEN THEN CLOSE c_navigation_path;
8072 END IF;
8073 IF c_offer_ca_parameters%ISOPEN THEN CLOSE c_offer_ca_parameters;
8074 END IF;
8075 IF c_offer_classifications%ISOPEN THEN CLOSE c_offer_classifications;
8076 END IF;
8077 IF c_offer_epg_data%ISOPEN THEN CLOSE c_offer_epg_data;
8078 END IF;
8079 IF c_offer_item_periods%ISOPEN THEN CLOSE c_offer_item_periods;
8080 END IF;
8081 IF c_offer_item_profiles%ISOPEN THEN CLOSE c_offer_item_profiles;
8082 END IF;
8083 IF c_offer_items%ISOPEN THEN CLOSE c_offer_items;
8084 END IF;
8085 IF c_offer_periods %ISOPEN THEN CLOSE c_offer_periods;
8086 END IF;
8087 IF c_offer_properties%ISOPEN THEN CLOSE c_offer_properties;
8088 END IF;
8089 IF c_properties%ISOPEN THEN CLOSE c_properties;
8090 END IF;
8091
8092 IF l_error_reported = k_false THEN
8093
8094 BEGIN
8095 LOOP
8096 gt_media_assoc.extend();
8097 FETCH c_media_assocations_list INTO gt_media_assoc(gt_media_assoc.count);
8098 EXIT WHEN c_media_assocations_list%NOTFOUND;
8099 END LOOP;
8100 EXCEPTION
8101 WHEN OTHERS THEN
8102 NULL;
8103 END;
8104
8105 IF c_media_assocations_list%ISOPEN THEN CLOSE c_media_assocations_list;
8106 END IF;
8107
8108 vt_season_exists.DELETE;
8109 vt_show_exists.DELETE;
8110 gt_offer_item_main_media.DELETE;
8111
8112 SELECT decode (vodotk.table_description,
8113 k_series,k_true,
8114 k_false),
8115 decode (vodotk.table_description,
8116 k_coll_assets,k_true,
8117 k_false)
8118 INTO g_series, g_collection
8119 FROM vod_offer_schedule vos
8120 JOIN offer_type ot ON (vos.offer_type_id = ot.offer_type_id)
8121 JOIN table_line vodotk ON (ot.container_type = vodotk.table_reference AND vodotk.table_id = k_vodotk_tl)
8122 WHERE vos.offer_id = i_offer_id;
8123
8124 init_components( i_event_type => i_event_type,
8125 i_change_type => i_change_type,
8126 io_components => vr_components_to_send);
8127
8128 FOR r_items IN c_items (i_offer_id)
8129 LOOP
8130
8131 g_platform_id := r_items.platform_id;
8132 BEGIN
8133 --Get The TimeZone ID
8134 SELECT nvl(ch.timezone_id,0) AS timezone_id
8135 INTO g_timezone_id
8136 FROM vod_platform vp
8137 LEFT OUTER JOIN channel ch ON (ch.channel_code = vp.channel_code)
8138 WHERE vp.vod_platform_id = g_platform_id;
8139 EXCEPTION
8140 WHEN NO_DATA_FOUND
8141 THEN
8142 g_timezone_id := 0;
8143 END;
8144 populate_offer_item_media(r_items.item_schedule_id, g_media_hierarchy);
8145 IF vr_components_to_send.purchasable_title = k_true THEN
8146 v_title_xml := Get_Purchasable_Title_Data(r_items.item_schedule_id, r_items.purchase_id);
8147
8148 IF v_title_xml IS NOT NULL THEN
8149 v_temp_clob := v_title_xml.getclobval();
8150 IF g_is_tstv_offer = k_false THEN
8151 v_url := g_base_url || '/catalogue/compoundContent/purchasableTitle/'
8152 || format_uri ('PurchasableTitle', to_char(get_version_copy_id (r_items.item_schedule_id)));
8153 ELSE
8154 v_url := g_base_url || '/catalogue/compoundContent/purchasableTitle/'
8155 || format_uri ('TstvPurchasableTitle', to_char(g_offer_id));
8156 END IF;
8157 v_temp_clob := k_xml_version_encode||k_space||'<PurchasableTitleRequest xmlns="'|| g_service_namespace
8158 ||'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="'||g_service_namespace||' purchasabletitle.xsd">'
8159 || v_temp_clob || '</PurchasableTitleRequest>';
8160 Http_Post_UHE( i_url =>v_url,
8161 i_object_type =>k_title,
8162 i_object_id => CASE g_is_tstv_offer
8163 WHEN k_false THEN get_version_copy_id (r_items.item_schedule_id)
8164 ELSE g_offer_id
8165 END,
8166 i_message =>v_temp_clob,
8167 i_io_file_id =>g_io_file_id,
8168 o_status =>v_post_status);
8169 SELECT XMLCONCAT(vo_titles_xml, v_title_xml)
8170 INTO vo_titles_xml
8171 FROM dual;
8172 END IF;
8173 END IF;
8174
8175 IF g_collection = k_true OR g_series = k_true THEN
8176 BEGIN
8177
8178 v_leading_season := Get_Leading_Season(g_offer_id);
8179
8180 IF (v_leading_season IS NOT NULL) AND (g_series = k_true OR g_collection = k_true) THEN
8181 v_season_id := v_leading_season;
8182 ELSIF (v_leading_season IS NULL) AND (g_series = k_true OR g_collection = k_true) THEN --413322 MC
8183 v_season_id := NULL;
8184 ELSE
8185
8186 SELECT st.season_id
8187 INTO v_season_id
8188 FROM version v
8189 JOIN title t ON v.title_id = t.title_id
8190 JOIN purchase p ON t.title_id = p.title_id
8191 LEFT OUTER JOIN season_title_purchase st ON (t.title_id = st.title_id AND
8192 p.purchase_id = st.purchase_id)
8193 WHERE p.purchase_id = r_items.purchase_id
8194 AND v.version_id = r_items.version_id;
8195 END IF;
8196
8197 SELECT nvl(max(show_id),0)
8198 INTO v_show_id
8199 FROM season se
8200 WHERE se.season_id = v_season_id;
8201
8202 EXCEPTION
8203 WHEN NO_DATA_FOUND THEN
8204 v_season_id := 0;
8205 v_show_id := 0;
8206 END;
8207
8208 IF vr_components_to_send.purchasable_season = k_true THEN
8209 IF NOT (vt_season_exists.EXISTS(to_char(v_season_id))) AND v_season_id > 0 THEN
8210
8211 IF g_series = k_true THEN
8212 g_season_id := v_season_id;
8213 END IF;
8214
8215 v_season_xml := Get_Purchasable_Season_Data(v_season_id,r_items.item_schedule_id);
8216 IF v_season_xml IS NOT NULL THEN
8217 v_temp_clob:= v_season_xml.getclobval();
8218 v_url := g_base_url || '/catalogue/compoundContent/purchasableSeason/' || format_uri('PurchasableSeason',to_char(v_season_id)) ;
8219 v_temp_clob := k_xml_version_encode||k_space||'<PurchasableSeasonRequest xmlns="'|| g_service_namespace
8220 ||'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="'||g_service_namespace||' purchasableseason.xsd">'
8221 || v_temp_clob || '</PurchasableSeasonRequest>';
8222 Http_Post_UHE( i_url => v_url,
8223 i_object_type => k_season,
8224 i_object_id => v_season_id,
8225 i_message => v_temp_clob,
8226 i_io_file_id => g_io_file_id,
8227 o_status => v_post_status);
8228
8229 SELECT XMLCONCAT(vo_seasons_xml,v_season_xml)
8230 INTO vo_seasons_xml
8231 FROM dual;
8232
8233 vt_season_exists (to_char(v_season_id)) := 1;
8234 END IF;
8235 -- 413322 MC below code supports collection offers or series offers without leading season. It will be called only once per export
8236 ELSIF (g_virtual_season = k_false) AND (v_leading_season IS NULL) AND (g_series = k_true OR g_collection = k_true)THEN
8237 v_season_xml := Get_Virtual_Purchasable_Season(r_items.item_schedule_id);
8238 g_virtual_season := k_true; -- Only one Virtual Season can be created. Next checks will not create another one.
8239 IF v_season_xml IS NOT NULL THEN
8240 v_temp_clob:= v_season_xml.getclobval();
8241 v_url := g_base_url || '/catalogue/compoundContent/purchasableSeason/' || format_uri('PurchasableCollection',to_char(g_offer_id)) ;
8242 v_temp_clob := k_xml_version_encode||k_space||'<PurchasableSeasonRequest xmlns="'|| g_service_namespace
8243 ||'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="'||g_service_namespace||' purchasableseason.xsd">'
8244 || v_temp_clob || '</PurchasableSeasonRequest>';
8245 Http_Post_UHE( i_url => v_url,
8246 i_object_type => k_season,
8247 i_object_id => g_offer_id,
8248 i_message => v_temp_clob,
8249 i_io_file_id => g_io_file_id,
8250 o_status => v_post_status);
8251
8252 SELECT XMLCONCAT(vo_seasons_xml,v_season_xml)
8253 INTO vo_seasons_xml
8254 FROM dual;
8255 END IF;
8256 END IF;
8257 END IF;
8258
8259 IF vr_components_to_send.purchasable_show = k_true THEN
8260 IF NOT (vt_show_exists.EXISTS(to_char(v_show_id))) AND v_show_id > 0 THEN
8261
8262 IF g_series = k_true THEN
8263 g_show_id := v_show_id;
8264 END IF;
8265
8266 v_show_xml := Get_Purchasable_Show_Data(v_show_id,r_items.item_schedule_id);
8267 IF v_show_xml IS NOT NULL THEN
8268 v_url := g_base_url || '/catalogue/compoundContent/purchasableShow/' || format_uri('PurchasableShow',to_char(v_show_id));
8269 v_temp_clob:= v_show_xml.getclobval();
8270 v_temp_clob := k_xml_version_encode||k_space||'<PurchasableShowRequest xmlns="'|| g_service_namespace
8271 ||'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="'||g_service_namespace||' purchasableshow.xsd">'
8272 || v_temp_clob || '</PurchasableShowRequest>';
8273 Http_Post_UHE( i_url => v_url,
8274 i_object_type => k_show,
8275 i_object_id => v_show_id,
8276 i_message => v_temp_clob,
8277 i_io_file_id => g_io_file_id,
8278 o_status => v_post_status);
8279
8280 SELECT XMLCONCAT(vo_shows_xml, v_show_xml)
8281 INTO vo_shows_xml
8282 FROM dual;
8283
8284 vt_show_exists (to_char(v_show_id)) := 1;
8285
8286 END IF;
8287
8288 END IF;
8289 END IF;
8290 END IF;
8291 END LOOP;
8292 ELSE
8293 FETCH c_error_response into v_error_response;
8294 CLOSE c_error_response;
8295 g_error_response := ('Error in GETCOMPLEXOFFERDATA: '||v_error_response.msg);
8296 RAISE e_business;
8297 END IF;
8298
8299 IF vr_components_to_send.purchase_offering = k_true THEN
8300 vo_purchase_xml:= Get_Purchase_Offering_Data (i_offer_id);
8301 END IF;
8302
8303 o_error_reported := k_false;
8304
8305 ON_DEMAND_API.SETOFFERSTATUS (i_offer_id => g_offer_id,
8306 i_target_status => g_success_status,
8307 i_wf_called => k_true,
8308 i_do_not_replicate_to_child => k_true,
8309 o_error_reported => v_error_reported_dummy,
8310 o_offer_error_code => v_error_code,
8311 o_error_response => v_error_response_dummy);
8312
8313 log_contentxml_to_io_log;
8314 FOR i IN 1 .. gt_tstv_info.count --set the planning slot properties to TRUE
8315 LOOP
8316 v_slot_changed := k_false;
8317 IF g_tstv_type = g_tstv_catchup THEN
8318 v_avail_as_catch_up_prop := ibms_prop.get_property_number(i_property_code => k_avail_as_catch_up_prop,
8319 i_object_id => gt_tstv_info(i).schedule_item_id);
8320 IF v_avail_as_catch_up_prop = k_zero THEN --check if property for slot is set to false
8321 ibms_prop.set_property(i_property_code => k_avail_as_catch_up_prop,
8322 i_object_id => gt_tstv_info(i).schedule_item_id,
8323 i_level_1_id => k_zero,
8324 i_level_2_id => k_zero,
8325 i_value => k_one);
8326 v_slot_changed := k_true;
8327 ELSE
8328 v_slot_changed:= k_false;
8329 END IF;
8330 ELSIF g_tstv_type = g_tstv_restart THEN
8331 v_avail_as_start_over_prop := ibms_prop.get_property_number(i_property_code => k_avail_as_start_over_prop,
8332 i_object_id => gt_tstv_info(i).schedule_item_id);
8333 v_avail_as_start_previ_prop := ibms_prop.get_property_number(i_property_code => k_avail_as_start_previ_prop,
8334 i_object_id => gt_tstv_info(i).schedule_item_id);
8335 IF v_avail_as_start_over_prop = k_zero THEN --check if property for slot is set to false
8336 ibms_prop.set_property(i_property_code => k_avail_as_start_over_prop,
8337 i_object_id => gt_tstv_info(i).schedule_item_id,
8338 i_level_1_id => k_zero,
8339 i_level_2_id => k_zero,
8340 i_value => k_one);
8341 v_slot_changed := k_true;
8342 ELSE
8343 v_slot_changed:= k_false;
8344 END IF;
8345 IF v_avail_as_start_previ_prop = k_zero THEN --check if property for slot is set to false
8346 ibms_prop.set_property(i_property_code => k_avail_as_start_previ_prop,
8347 i_object_id => gt_tstv_info(i).schedule_item_id,
8348 i_level_1_id => k_zero,
8349 i_level_2_id => k_zero,
8350 i_value => k_one);
8351 v_slot_changed := k_true;
8352 ELSE
8353 v_slot_changed:= k_false;
8354 END IF;
8355 ELSIF g_tstv_type = g_tstv_staprev THEN
8356 v_avail_as_start_previ_prop := ibms_prop.get_property_number(i_property_code=> k_avail_as_start_previ_prop,
8357 i_object_id => gt_tstv_info(i).schedule_item_id);
8358 IF v_avail_as_start_previ_prop = k_zero THEN --check if property for slot is set to false
8359 ibms_prop.set_property(i_property_code => k_avail_as_start_previ_prop,
8360 i_object_id => gt_tstv_info(i).schedule_item_id,
8361 i_level_1_id => k_zero,
8362 i_level_2_id => k_zero,
8363 i_value => k_one);
8364 v_slot_changed := k_true;
8365 ELSE
8366 v_slot_changed:= k_false;
8367 END IF;
8368 END IF;
8369 IF (gt_tstv_info(i).schedule_item_id IS NOT NULL) THEN
8370 v_ssr9_released := ssr9_xml.is_ssr9_released( NULL, NULL, gt_tstv_info(i).schedule_item_id, NULL, NULL );
8371 ELSE
8372 v_ssr9_released := k_false;
8373 END IF;
8374
8375 g.debug('SSR9 Released value is ', v_ssr9_released );
8376 IF v_ssr9_released > 0 AND v_slot_changed = k_true THEN --chech if schedule is posted to SSR9 and if a slot property has been changed
8377 g.debug('Calling audit handling API.');
8378
8379 ssr9_audit_handling(i_schedule_item_id => gt_tstv_info(i).schedule_item_id,
8380 o_error_response => v_error_msg,
8381 o_error_reported => v_error_rep);
8382 IF v_error_rep = k_true THEN
8383 g_error_response := v_error_msg;
8384 RAISE e_error;
8385 END IF;
8386 END IF;
8387 END LOOP;
8388
8389 EXCEPTION
8390 WHEN e_business THEN
8391
8392 ON_DEMAND_API.SETOFFERSTATUS (i_offer_id => g_offer_id,
8393 i_target_status => g_bizfail_status,
8394 i_wf_called => k_true,
8395 i_do_not_replicate_to_child => k_true,
8396 o_error_reported => v_error_reported_dummy,
8397 o_offer_error_code => v_error_code,
8398 o_error_response => v_error_response_dummy);
8399 o_error_reported := 1;
8400 o_error_message := g_error_response;
8401 log_element(i_io_file_id => i_io_file_id,
8402 i_record_type => k_error,
8403 i_message => g_error_response,
8404 i_error_type => 'FAIL');
8405 log_contentxml_to_io_log;
8406
8407 WHEN e_server_fail THEN
8408 o_error_reported := 1;
8409 o_error_message := g_error_response;
8410 log_contentxml_to_io_log;
8411 WHEN e_error THEN
8412 o_error_reported := 1;
8413 o_error_message := g_error_response;
8414 log_element(i_io_file_id => i_io_file_id,
8415 i_record_type => k_error,
8416 i_message => g_error_response,
8417 i_error_type => 'FAIL');
8418 log_contentxml_to_io_log;
8419
8420 WHEN OTHERS THEN
8421 o_error_reported := 1;
8422 o_error_message := 'Unexpected crash during data extraction. SQLCODE = '||SQLCODE || 'SQLERRM = '||SQLERRM;
8423 g_error_response := o_error_message;
8424 log_element(i_io_file_id => i_io_file_id,
8425 i_record_type => k_error,
8426 i_message => g_error_response,
8427 i_error_type => 'FAIL');
8428 log_contentxml_to_io_log;
8429
8430 END Get_Offer_Data;
8431
8432 /*--------------------------------------------------------------------------
8433 GET SETINGS PROCEDURE
8434 Used in order to retrive all the mappings from the interface 708
8435 ----------------------------------------------------------------------------*/
8436 PROCEDURE get_settings_tree_export
8437 IS
8438 v_check_property k.logical%TYPE;
8439 BEGIN
8440
8441 -- Get interface Id--
8442 g_interface_id := iface.interface_id(k_interface_type);
8443 v_check_property := k_false;
8444 tbl_prop_mapped.DELETE; --delete all values,we will repopulate them below.
8445
8446 --Presentation Media--
8447 FOR v_media_usg IN (SELECT ttlusg.table_line_isn AS UsgCode,
8448 ibms_prop.get_property_number(k_708_uhe_pres_related_prop,g_interface_id,ttlusg.table_line_isn) AS prop_maped
8449 FROM table_line ttlusg
8450 WHERE ttlusg.table_id = k_ttlusg_tl
8451 )
8452 LOOP
8453 IF v_media_usg.prop_maped > 0 THEN
8454 tbl_prop_mapped(RPAD(k_708_uhe_pres_related_prop,30,k_space)||LPAD(v_media_usg.usgcode,9,k_zero)) := v_media_usg.prop_maped;
8455 v_check_property := k_true;
8456 END IF;
8457 END LOOP;
8458 IF v_check_property = k_false THEN
8459 iface.set_client_info('Property Uhe Pres Related Media Usage is not set for interface:'|| k_interface_type, TRUE);
8460 v_check_property := k_false;
8461 RAISE e_property;
8462 END IF;
8463 --Src File For Associated Images--
8464 g_use_src_file_img := ibms_prop.get_property_number(k_708_use_src_file_for_prop,g_interface_id);
8465 --Pres Group Categories--
8466 FOR v_pres_grp IN (SELECT vocaty.table_line_isn AS PresCode,
8467 ibms_prop.get_property_number(k_708_pres_group_class_prop,g_interface_id,vocaty.table_line_isn) AS prop_maped
8468 FROM table_line vocaty
8469 WHERE vocaty.table_id = k_vocaty_tl
8470 )
8471 LOOP
8472 IF v_pres_grp.prop_maped > 0 THEN
8473 tbl_prop_mapped(RPAD(k_708_pres_group_class_prop,30,k_space)||LPAD(v_pres_grp.prescode,9,k_zero)) := v_pres_grp.prop_maped;
8474 END IF;
8475 END LOOP;
8476 --UHE Enum URI Prefix-- Oren removed URN (made Enum )
8477 g_urn_prefix := TRIM(ibms_prop.get_property_char(k_708_uhe_enum_uri_pre_prop,g_interface_id));
8478
8479 IF g_urn_prefix IS NULL THEN
8480 iface.set_client_info('Property UHE Enum URI Prefix is not set for interface:'|| k_interface_type, TRUE);
8481 RAISE e_property;
8482 END IF;
8483
8484 --UHE Resource URI Prefix--
8485 g_uri_prefix := TRIM(ibms_prop.get_property_char(k_708_uhe_resource_uri_prop,g_interface_id));
8486
8487
8488 IF g_uri_prefix IS NULL THEN
8489 iface.set_client_info('Property UHE Resource URI Prefix is not set for interface:'|| k_interface_type, TRUE);
8490 RAISE e_property;
8491 END IF;
8492
8493 --UHE Locale ID--
8494 FOR v_local_id IN (SELECT vp.vod_platform_id AS PlatformID,
8495 TRIM(ibms_prop.get_property_char(k_708_uhe_locale_id_prop,g_interface_id,vp.vod_platform_id)) AS prop_maped,
8496 TRIM(ibms_prop.get_property_char(k_708_root_clas_trm_id_prop,g_interface_id,vp.vod_platform_id)) AS serv_name,
8497 TRIM(ibms_prop.get_property_char(k_708_classtree_urid_prop,g_interface_id,vp.vod_platform_id))AS id_tree
8498 FROM vod_platform vp
8499 )
8500 LOOP
8501 IF v_local_id.prop_maped IS NOT NULL THEN
8502 tbl_prop_mapped(RPAD(k_708_uhe_locale_id_prop,30,k_space)||(LPAD(v_local_id.platformid,9,k_zero))) := v_local_id.prop_maped;
8503 v_check_property := k_true;
8504 END IF;
8505
8506 IF v_local_id.serv_name IS NOT NULL THEN
8507 tbl_prop_mapped(RPAD(k_708_root_clas_trm_id_prop,30,k_space)||(LPAD(v_local_id.platformid,9,k_zero))) := v_local_id.serv_name;
8508 v_check_property := k_true;
8509 END IF;
8510
8511 IF v_local_id.id_tree IS NOT NULL THEN
8512 tbl_prop_mapped(RPAD(k_708_classtree_urid_prop,30,k_space)||(LPAD(v_local_id.platformid,9,k_zero))) := v_local_id.id_tree;
8513 v_check_property := k_true;
8514 END IF;
8515 END LOOP;
8516 IF v_check_property = k_false THEN
8517 iface.set_client_info('Property UHE Locale ID OR Root Classification Term ID is not set for interface:'|| k_interface_type, TRUE);
8518 v_check_property := k_false;
8519 RAISE e_property;
8520 END IF;
8521 --Media Classification Key--
8522 FOR v_classif_key IN (SELECT ttlusg.table_line_isn AS ISN,
8523 TRIM(ibms_prop.get_property_char(k_708_media_classifica_prop,g_interface_id,ttlusg.table_line_isn)) AS prop_maped
8524 FROM table_line ttlusg
8525 WHERE ttlusg.table_id = k_ttlusg_tl
8526 )
8527 LOOP
8528 IF v_classif_key.prop_maped IS NOT NULL THEN
8529 tbl_prop_mapped(RPAD(k_708_media_classifica_prop,30,k_space)||LPAD(v_classif_key.ISN,9,k_zero)) := v_classif_key.prop_maped;
8530 v_check_property := k_true;
8531 END IF;
8532 END LOOP;
8533 IF v_check_property = k_false THEN
8534 iface.set_client_info('Property Media Classification Key is not set for interface:'|| k_interface_type, TRUE);
8535 v_check_property := k_false;
8536 RAISE e_property;
8537 END IF;
8538 --Default Category--
8539 g_default_category := TRIM(ibms_prop.get_property_char(k_708_default_category_prop,g_interface_id));
8540
8541
8542 --Classification Type--
8543 FOR v_classif_type IN (SELECT vocaty.table_line_isn AS ISN,
8544 TRIM(ibms_prop.get_property_char(k_708_classification_t_prop,g_interface_id,vocaty.table_line_isn)) AS prop_maped
8545 FROM table_line vocaty
8546 WHERE vocaty.table_id = k_vocaty_tl
8547 )
8548 LOOP
8549 IF v_classif_type.prop_maped IS NOT NULL THEN
8550 tbl_prop_mapped(RPAD(k_708_classification_t_prop,30,k_space)||LPAD(v_classif_type.isn,9,k_zero)) := v_classif_type.prop_maped;
8551 v_check_property := k_true;
8552 END IF;
8553 END LOOP;
8554 IF v_check_property = k_false THEN
8555 iface.set_client_info('Property Classification Type is not set for interface:'|| k_interface_type, TRUE);
8556 v_check_property := k_false;
8557 RAISE e_property;
8558 END IF;
8559 --UHE rest base URL--
8560 g_uhe_based_url := TRIM(ibms_prop.get_property_char(k_708_uhe_rest_base_ur_prop,g_interface_id));
8561
8562 IF g_uhe_based_url IS NULL THEN
8563 iface.set_client_info('Property UHE rest base UR is not set for interface:'|| k_interface_type, TRUE);
8564 RAISE e_property;
8565 END IF;
8566 --HTTP Timeout--
8567 g_http_timeout := TRIM(ibms_prop.get_property_char(k_708_http_timeout_prop,g_interface_id));
8568
8569 IF g_http_timeout IS NULL THEN
8570 iface.set_client_info('Property -HTTP Timeout is not set for interface:'|| k_interface_type, TRUE);
8571 RAISE e_property;
8572 END IF;
8573 --UHE Delivery Type--
8574 FOR v_uhe_delivery IN (SELECT tapetp.table_line_isn AS ISN,
8575 TRIM(ibms_prop.get_property_char(k_708_uhe_delivery_typ_prop,g_interface_id,tapetp.table_line_isn)) AS prop_maped
8576 FROM table_line tapetp
8577 WHERE tapetp.table_id = k_tapetp_tl
8578 )
8579 LOOP
8580 IF v_uhe_delivery.prop_maped IS NOT NULL THEN
8581 tbl_prop_mapped(RPAD(k_708_uhe_delivery_typ_prop,30,k_space)||LPAD(v_uhe_delivery.isn,9,k_zero)) := v_uhe_delivery.prop_maped;
8582 v_check_property := k_true;
8583 END IF;
8584 END LOOP;
8585 IF v_check_property = k_false THEN
8586 iface.set_client_info('Property UHE Delivery Type is not set for interface:'|| k_interface_type, TRUE);
8587 v_check_property := k_false;
8588 RAISE e_property;
8589 END IF;
8590 --UHE Classif Term Atributes--
8591 g_term_attribute := TRIM(ibms_prop.get_property_char(k_708_uhe_cls_trm_attr_prop,g_interface_id));
8592
8593 --Classif Term Default PG--
8594 g_default_parental := TRIM(ibms_prop.get_property_char(k_708_clas_trm_def_pg_prop,g_interface_id));
8595
8596 g_service_namespace := ibms_prop.get_property_char (k_708_uhe_service_name_prop,g_interface_id);
8597
8598 g_parental_raiting_uri := TRIM(ibms_prop.get_property_char(k_708_prrtg_uhe_cd_prf_prop,g_interface_id));
8599
8600 g_show_class_categ := table_line_util.table_code(i_table_line_isn => ibms_prop.get_property_number (k_708_show_class_categ_prop,g_interface_id));--407275004
8601
8602 g_show_class_inter := ibms_prop.get_property_number (k_708_show_class_inter_prop,g_interface_id);--407275004
8603
8604 BEGIN
8605 SELECT vercer.numeric_1
8606 INTO g_default_cert_code
8607 FROM table_line vercer
8608 WHERE vercer.table_line_isn = ibms_prop.get_property_number(k_708_default_certific_prop, g_interface_id);
8609 EXCEPTION
8610 WHEN NO_DATA_FOUND THEN
8611 g_default_cert_code := NULL;
8612 END;
8613 END get_settings_tree_export;
8614
8615 /*--------------------------------------------------------------------------
8616 GET INTERFACE MAPPED VALUE
8617 Used in order to return all the mapings retrived with get_setings
8618 ----------------------------------------------------------------------------*/
8619
8620 FUNCTION get_interface_mapped_value(
8621 i_key IN VARCHAR2,
8622 i_level_1_id IN property_value_view.level_1_id%TYPE
8623 )
8624 RETURN VARCHAR2
8625 IS
8626 v_key k.max_varchar2%TYPE;
8627 v_return property_value_view.value%TYPE;
8628 BEGIN
8629 v_key := RPAD(i_key, 30, k_space)||LPAD(NVL(i_level_1_id, k_false), 9, k_zero);
8630 v_return := tbl_prop_mapped(v_key);
8631 RETURN v_return;
8632 EXCEPTION
8633 WHEN NO_DATA_FOUND THEN
8634 RETURN NULL; --if key is missing in pl/sql table - oracle will send control to no data found
8635 END get_interface_mapped_value;
8636 /*---------------------------------------------------------------------------------
8637 IS NODE PARENT
8638 Used in order to check if a node is is also a parent
8639 -----------------------------------------------------------------------------------*/
8640 FUNCTION is_node_parent (i_node_id vod_classification_tree.classification_node_id%TYPE)
8641 RETURN k.logical%TYPE
8642 IS
8643 v_is_parent k.logical%TYPE;
8644 BEGIN
8645
8646 SELECT 1
8647 INTO v_is_parent
8648 FROM vod_classification_tree vct
8649 WHERE vct.parent_classification_node_id = i_node_id
8650 AND ROWNUM = 1;
8651
8652 RETURN v_is_parent;
8653 EXCEPTION
8654 WHEN NO_DATA_FOUND THEN
8655 v_is_parent := k_false;
8656 RETURN v_is_parent;
8657 END is_node_parent;
8658
8659 FUNCTION get_term_attribute ( i_prop_code IN property_template.property_code%TYPE,
8660 i_prop_name IN property_value.value%TYPE)
8661 RETURN xmltype
8662 IS
8663 v_term_attribute xmltype:=NULL;
8664 BEGIN
8665 SELECT xmlconcat(xmlelement("termAttribute",
8666 xmlelement("tag",i_prop_code),
8667 xmlelement("value", i_prop_name)
8668 ))
8669 INTO v_term_attribute
8670 FROM dual;
8671
8672 RETURN v_term_attribute;
8673
8674 END get_term_attribute;
8675 /*--------------------------------------------------------------------------
8676 UHE CLASSIFICATION TREE EXPORT
8677 This is the main procedur that will return the UHE xml format for export
8678 ----------------------------------------------------------------------------*/
8679
8680 PROCEDURE uhe_classification_tree_export(
8681 i_classification_id IN vod_platform_classification.classification_id%type,
8682 i_file_id IN io_file_log.file_id%TYPE,
8683 o_uhe_class_tree_export OUT CLOB,
8684 o_old_broad_ref OUT broadcaster_reference.broadcaster_reference%TYPE,
8685 o_new_broad_ref OUT broadcaster_reference.broadcaster_reference%TYPE,
8686 o_tree_external_id OUT property_value.value%TYPE,
8687 o_error_reported OUT NUMBER,
8688 o_error_response OUT SYS_REFCURSOR,
8689 o_properties OUT SYS_REFCURSOR
8690 )
8691 IS
8692 c_o_tree_nodes SYS_REFCURSOR;
8693 c_o_tree_header SYS_REFCURSOR;
8694 c_o_properties SYS_REFCURSOR;
8695 c_o_asoc_prop SYS_REFCURSOR;
8696 c_o_classification_term_data SYS_REFCURSOR;
8697 c_o_epg_data SYS_REFCURSOR;
8698 c_o_assoaciated_media SYS_REFCURSOR;
8699 c_interface_properties SYS_REFCURSOR;
8700 c_o_error_response SYS_REFCURSOR;
8701
8702 v_data_clob CLOB := null;
8703 v_dummy_xml XMLTYPE:=null;
8704 v_node_xml XMLTYPE:=NULL;
8705 v_root_node_xml XMLTYPE:=NULL;
8706 v_term_attribute XMLTYPE:=NULL;
8707 v_term_attribute_final xmltype:=NULL;
8708 v_child_root XMLTYPE:= NULL;
8709 v_root_temp XMLTYPE;
8710 v_term_root_node_xml XMLTYPE:=NULL;
8711 v_node_clob CLOB:=NULL;
8712 v_assoc_xml xmltype:=NULL;
8713 v_assoc_clob CLOB:=NULL;
8714 v_root_node_clob CLOB:=NULL;
8715 v_xml_domain xmltype:=NULL;
8716 v_domain_clob CLOB:=NULL;
8717 v_usage_isn table_line.table_line_isn%type:=null;
8718 v_delivery_type_isn table_line.table_line_isn%TYPE:=NULL;
8719 v_data CLOB:=NULL;
8720 v_pres_grp_prop k.logical%TYPE;
8721 v_id_link k.max_varchar2%TYPE;
8722 v_max_certif_prop k.max_varchar2%TYPE:=NULL;
8723 v_platform_name vod_platform.platform_name%TYPE;
8724 v_clssification_term vod_platform_content.term_id%TYPE;
8725 v_categ_term_type_isn table_line.table_line_isn%TYPE;
8726 v_is_parent k.logical%TYPE:=k_false;
8727 v_parent_id vod_classification_tree.parent_classification_node_id%TYPE := k_false;
8728 v_pres_media_xml xmltype;
8729 v_pres_final xmltype;
8730 v_category_code table_line.table_code%type;--411644001
8731 v_version_copy_id version_copy.version_copy_id%type;--411644001
8732
8733 TYPE classif_tree_node_rec IS RECORD(
8734 nodeid vod_classification_tree.classification_node_id%TYPE,
8735 classification_id vod_classification_tree.classification_id%TYPE,
8736 parentnodeid vod_classification_tree.parent_classification_node_id%TYPE,
8737 nodeorder vod_classification_tree.node_order%TYPE,
8738 contentid vod_classification_tree.content_id%TYPE,
8739 validitydatefrom vod_classification_tree.validity_date_from%TYPE,
8740 validitydateto vod_classification_tree.validity_date_to%TYPE,
8741 validitytimefrom vod_classification_tree.validity_time_from%TYPE,
8742 validitytimeto vod_classification_tree.validity_time_to%TYPE,
8743 termid vod_platform_content.term_id%TYPE
8744 );
8745
8746 r_tree_node_rec classif_tree_node_rec;
8747
8748 TYPE t_tree_node_rec IS TABLE OF r_tree_node_rec%TYPE INDEX BY BINARY_INTEGER;
8749 tbl_tree_node_rec t_tree_node_rec;
8750
8751 TYPE classif_tree_head_rec IS RECORD (
8752 classification_id vod_classification_tree.classification_id%TYPE,
8753 classification_name vod_platform_classification.classification_name%TYPE,
8754 platform_id vod_platform_classification.platform_id%TYPE,
8755 status vod_platform_classification.status%TYPE,
8756 effective_date vod_platform_classification.effective_date%TYPE,
8757 effective_start_time vod_platform_classification.effective_start_time%TYPE,
8758 effective_date_to vod_platform_classification.effective_date_to%TYPE,
8759 effective_end_time vod_platform_classification.effective_end_time%TYPE
8760
8761 );
8762 r_tree_head_rec classif_tree_head_rec;
8763
8764 TYPE classif_term_data_rec IS RECORD (
8765 classif_term_id vod_platform_content.term_id%TYPE,
8766 term_id vod_platform_content.term_id%TYPE,
8767 term_name vod_platform_content.name%TYPE,
8768 description vod_platform_content.description%TYPE,
8769 maxcertification table_line.table_code%TYPE,
8770 category_code table_line.table_code%TYPE,
8771 category_name table_line.table_description%TYPE,
8772 external_cassification_term property_value.value%TYPE,
8773 maxcertification_name table_line.table_description%TYPE
8774 );
8775 r_classif_term_data_rec classif_term_data_rec;
8776 --411644001
8777 TYPE t_classif_term_data IS TABLE OF r_classif_term_data_rec%TYPE INDEX BY BINARY_INTEGER;
8778 tbl_classif_term_data_rec t_classif_term_data;
8779 --411644001
8780 TYPE classif_term_epg_rec IS RECORD(
8781 lang_code object_epg_language.language_code%TYPE,
8782 iso_639_code language.Iso_639_Code%TYPE,
8783 iso_639_3_code language.Iso_639_3_Code%TYPE,
8784 object_name object_epg_language.object_name%TYPE,
8785 term_id vod_platform_content.term_id%TYPE,
8786 synopsis object_epg_language.synopsis%TYPE
8787 );
8788 r_classif_tem_epg_rec classif_term_epg_rec;
8789 --411644001
8790 TYPE t_classif_epg_rec IS TABLE OF r_classif_tem_epg_rec%TYPE INDEX BY BINARY_INTEGER;
8791 tbl_classif_epg_rec t_classif_epg_rec;
8792
8793 --411644001
8794 TYPE classif_term_data_prop IS RECORD (
8795 object_type k.max_varchar2%TYPE,
8796 content_id vod_platform_content.content_id%TYPE,
8797 property_name property_template.property_code%TYPE,
8798 property_display_name property_template.property_name%TYPE,
8799 property_val property_value.value%TYPE,
8800 language_code language.Language_Code%TYPE,
8801 prop_lang_value property_value_language.property_value%TYPE,
8802 iso_639_code language.Iso_639_Code%TYPE,
8803 iso_639_3_code language.Iso_639_3_Code%TYPE
8804 );
8805 r_classif_term_prop_rec classif_term_data_prop;
8806 BEGIN
8807
8808 g.debug('UHE Classification Tree Export Started');
8809 get_settings_tree_export; -- call to the function in order to get the lates changes
8810 BEGIN
8811 OPEN c_interface_properties FOR
8812 SELECT pt.property_code, pv.value
8813 FROM property_value pv
8814 JOIN property_template pt ON pt.template_id = pv.template_id
8815 WHERE pv.object_id = g_interface_id;
8816 o_properties := c_interface_properties;
8817 EXCEPTION
8818 WHEN NO_DATA_FOUND THEN
8819 o_properties := NULL;
8820 END;
8821
8822 on_demand_api.GetClassificationsTree(
8823 i_classification_id => i_classification_id,
8824 o_tree_header => c_o_tree_header,
8825 o_tree_nodes => c_o_tree_nodes,
8826 o_error_reported => o_error_reported,
8827 o_error_response => c_o_error_response,
8828 o_properties => c_o_properties
8829 );
8830 IF o_error_reported != k_true THEN
8831 BEGIN
8832 LOOP
8833 FETCH c_o_tree_header INTO r_tree_head_rec;
8834 EXIT WHEN c_o_tree_header%NOTFOUND;
8835 END LOOP;
8836 CLOSE c_o_properties;--411644001
8837 CLOSE c_o_error_response;--411644001
8838 EXCEPTION WHEN ROWTYPE_MISMATCH THEN
8839 NULL;
8840 END;
8841
8842 BEGIN
8843 SELECT vp.platform_name
8844 INTO v_platform_name
8845 FROM vod_platform vp
8846 WHERE vp.vod_platform_id = r_tree_head_rec.platform_id;
8847
8848 EXCEPTION
8849 WHEN NO_DATA_FOUND THEN
8850 v_platform_name := NULL;
8851 END;
8852 g.debug('Service Name', v_platform_name);
8853 --loop for o tree nodes--
8854 BEGIN
8855 tbl_tree_node_rec.DELETE;
8856 LOOP
8857 FETCH c_o_tree_nodes BULK COLLECT INTO tbl_tree_node_rec;
8858 EXIT WHEN c_o_tree_nodes%NOTFOUND;
8859 END LOOP;
8860 CLOSE c_o_tree_nodes;
8861 g.debug('Loop for Classification Tree Started');
8862 FOR i IN tbl_tree_node_rec.FIRST..tbl_tree_node_rec.LAST
8863 LOOP
8864 v_clssification_term := tbl_tree_node_rec(i).termid;
8865 on_demand_api.GetClassificationTermData(
8866 i_classification_term_id => tbl_tree_node_rec(i).termid,
8867 i_service_id => r_tree_head_rec.platform_id,
8868 o_classification_term_data => c_o_classification_term_data,
8869 o_error_reported => o_error_reported,
8870 o_error_response => c_o_error_response,
8871 o_properties => c_o_properties
8872 );
8873 IF o_error_reported != k_true THEN
8874 BEGIN
8875 CLOSE c_o_error_response;--411644001
8876 v_term_attribute_final := NULL;
8877 g.debug('Loop for Classification Term Properties');
8878 LOOP
8879 FETCH c_o_properties INTO r_classif_term_prop_rec;
8880 EXIT WHEN c_o_properties%NOTFOUND;
8881 IF INSTR(g_term_attribute,r_classif_term_prop_rec.property_display_name) > 0 THEN
8882 v_term_attribute := get_term_attribute(r_classif_term_prop_rec.property_name,r_classif_term_prop_rec.property_val);
8883
8884 SELECT xmlconcat(v_term_attribute_final,v_term_attribute)
8885 INTO
8886 v_term_attribute_final
8887 FROM dual;
8888 v_term_attribute_final := v_term_attribute_final;
8889 END IF;
8890 END LOOP;
8891 CLOSE c_o_properties;--411644001
8892 EXCEPTION WHEN ROWTYPE_MISMATCH THEN
8893 NULL;
8894 END;
8895 IF o_error_reported != k_true THEN
8896 BEGIN
8897 g.debug('Loop for Classification Term Started');
8898 tbl_classif_term_data_rec.delete;--411644001
8899 LOOP
8900 FETCH c_o_classification_term_data BULK COLLECT INTO tbl_classif_term_data_rec;
8901 EXIT WHEN c_o_classification_term_data%NOTFOUND;
8902 END LOOP;--411644001
8903 CLOSE c_o_classification_term_data;--411644001
8904 FOR j IN tbl_classif_term_data_rec.first..tbl_classif_term_data_rec.last
8905 LOOP
8906 --407275004
8907 IF (tbl_classif_term_data_rec(j).category_code != nvl(g_show_class_categ, k_space)
8908 OR (tbl_classif_term_data_rec(j).category_code = nvl(g_show_class_categ, k_space) AND g_show_class_inter = k_false))
8909 THEN
8910
8911 BEGIN
8912 SELECT vercer.numeric_1
8913 INTO v_max_certif_prop
8914 FROM table_line vercer
8915 WHERE vercer.table_id = k_vercer_tl AND vercer.table_code = tbl_classif_term_data_rec(j).maxcertification;
8916 EXCEPTION
8917 WHEN NO_DATA_FOUND THEN
8918 v_max_certif_prop := NULL;
8919 END;
8920 g.debug('Max Certification', v_max_certif_prop);
8921 BEGIN
8922 FOR v_prs_grp IN (SELECT vocaty.table_line_isn AS ISN
8923 FROM table_line vocaty
8924 WHERE vocaty.table_id = k_vocaty_tl
8925 AND vocaty.table_code = tbl_classif_term_data_rec(j).category_code
8926 )
8927 LOOP
8928 IF NVL(get_interface_mapped_value(k_708_pres_group_class_prop,v_prs_grp.isn),0)> 0 THEN
8929 v_pres_grp_prop := get_interface_mapped_value(k_708_pres_group_class_prop,v_prs_grp.isn);
8930 v_is_parent := is_node_parent(tbl_tree_node_rec(i).nodeid);
8931
8932 IF v_is_parent = k_true THEN
8933 v_parent_id := tbl_tree_node_rec(i).parentnodeid;
8934 END IF;
8935 END IF;
8936 v_pres_grp_prop := NVL(get_interface_mapped_value(k_708_pres_group_class_prop,v_prs_grp.isn),0);
8937 g.debug('Pres Group code: ',tbl_classif_term_data_rec(j).category_code ,'Pres Group interface Property: ',v_pres_grp_prop);
8938 END LOOP;
8939 EXCEPTION
8940 WHEN NO_DATA_FOUND THEN
8941 v_pres_grp_prop := NULL;
8942 END;
8943 IF tbl_tree_node_rec(i).parentnodeid = v_parent_id OR v_parent_id IS NULL THEN
8944 v_pres_grp_prop := k_true;
8945 v_parent_id := tbl_tree_node_rec(i).parentnodeid;
8946 END IF;
8947 IF v_pres_grp_prop!= k_true THEN
8948 on_demand_api.GetEpgForClassificationTerm(
8949 i_content_id => tbl_tree_node_rec(i).contentid,
8950 o_epg_data => c_o_epg_data,
8951 o_error_reported => o_error_reported,
8952 o_error_response => c_o_error_response,
8953 o_properties => c_o_asoc_prop
8954 );
8955 IF o_error_reported != k_true THEN
8956 CLOSE c_o_asoc_prop;
8957 CLOSE c_o_error_response;--411644001
8958 BEGIN
8959 g.debug('Lopp for EPG Classification Term Started');
8960 tbl_classif_epg_rec.DELETE;--411644001
8961 LOOP
8962 FETCH c_o_epg_data BULK COLLECT INTO tbl_classif_epg_rec;
8963 EXIT WHEN c_o_epg_data%NOTFOUND;
8964 END LOOP;--411644001
8965 CLOSE c_o_epg_data;
8966 FOR k in tbl_classif_epg_rec.first..tbl_classif_epg_rec.last
8967 LOOP
8968 IF tbl_classif_epg_rec(k).object_name != ' ' THEN
8969 SELECT
8970 xmlconcat(g_name_xml,
8971 xmlelement("name",
8972 xmlattributes(lower(tbl_classif_epg_rec(k).iso_639_3_code)AS "lang"), tbl_classif_epg_rec(k).object_name)
8973 )
8974 INTO g_name_xml
8975 FROM dual;
8976 tbl_classif_epg_rec(k).object_name := NULL;
8977 END IF;
8978
8979 IF tbl_classif_epg_rec(k).synopsis != ' ' THEN
8980 SELECT
8981 xmlconcat(g_definition_xml,
8982 xmlelement("definition",
8983 xmlattributes(lower(tbl_classif_epg_rec(k).iso_639_3_code) AS "lang"), trim(tbl_classif_epg_rec(k).synopsis))
8984 )
8985 INTO g_definition_xml
8986 FROM dual;
8987 tbl_classif_epg_rec(k).synopsis := NULL;
8988 END IF;
8989 END LOOP;
8990 EXCEPTION WHEN ROWTYPE_MISMATCH THEN
8991 NULL;
8992 END;
8993 ELSE
8994 RAISE e_exception;
8995 END IF;
8996 on_demand_api.GetClassTermAssociatedMedia(
8997 i_content_id => tbl_tree_node_rec(i).contentid,
8998 o_associated_media => c_o_assoaciated_media,
8999 o_error_reported => o_error_reported,
9000 o_error_response => c_o_error_response,
9001 o_properties => c_o_asoc_prop
9002 );
9003 IF o_error_reported != k_true THEN
9004 CLOSE c_o_asoc_prop;
9005 CLOSE c_o_error_response;--411644001
9006 BEGIN
9007 g.debug('Loop for Associated Media Started');
9008 gt_tbl_cls_associated_med_rec.delete;--411644001
9009 LOOP
9010 FETCH c_o_assoaciated_media BULK COLLECT INTO gt_tbl_cls_associated_med_rec;
9011 EXIT WHEN c_o_assoaciated_media%NOTFOUND;
9012 END LOOP;
9013 CLOSE c_o_assoaciated_media;
9014 IF gt_tbl_cls_associated_med_rec.count = 0 THEN
9015 iface.set_client_info('Failed to find Media-Item for Classification-Term ' ||tbl_classif_term_data_rec(j).term_name,TRUE);
9016 bss.error_handling_api.CreateSingleIoElement(
9017 i_io_file_id => i_file_id,
9018 i_object_type => 'MI',
9019 i_message => iface.get_client_info,
9020 i_validation_type => k.msg_warn
9021 );
9022 v_version_copy_id := NULL;
9023 ELSE
9024 FOR l IN gt_tbl_cls_associated_med_rec.first..gt_tbl_cls_associated_med_rec.last
9025 LOOP
9026 BEGIN
9027 SELECT ttlusg.table_line_isn
9028 INTO v_usage_isn
9029 FROM table_line ttlusg
9030 WHERE ttlusg.table_code = gt_tbl_cls_associated_med_rec(l).usage_code
9031 AND ttlusg.table_id = k_ttlusg_tl;
9032 EXCEPTION
9033 WHEN NO_DATA_FOUND THEN
9034 v_usage_isn := NULL;
9035 END;
9036 BEGIN
9037 SELECT tapetp.table_line_isn
9038 INTO v_delivery_type_isn
9039 FROM table_line tapetp
9040 JOIN version_copy vc ON vc.version_copy_id = gt_tbl_cls_associated_med_rec(l).version_copy_id
9041 WHERE tapetp.table_code = vc.tape_type
9042 AND tapetp.table_id = k_tapetp_tl;
9043 EXCEPTION
9044 WHEN NO_DATA_FOUND THEN
9045 v_delivery_type_isn := NULL;
9046 END;
9047 g.debug('Pres Media',get_interface_mapped_value(k_708_uhe_pres_related_prop,v_usage_isn));
9048 g.debug('Usage Code',gt_tbl_cls_associated_med_rec(l).usage_code );
9049 IF get_interface_mapped_value(k_708_uhe_pres_related_prop,v_usage_isn) > k_false THEN
9050 IF gt_tbl_cls_associated_med_rec(l).iso_639_3_code IS NULL THEN
9051 g.debug('Loop when no language defined for Presentation Media');
9052 FOR v_lang IN ( SELECT ibms_prop.get_property_number(k_708_support_epg_lang_prop, g_interface_id, l.language_id) AS prop_maped,
9053 l.language_id,
9054 l.iso_639_3_code
9055 FROM language l)
9056
9057 LOOP
9058 IF v_lang.prop_maped > 0 THEN
9059 v_assoc_xml := NULL;
9060 v_assoc_xml := get_associated_media_xml(
9061 i_version_copy_id => gt_tbl_cls_associated_med_rec(l).version_copy_id,
9062 i_file_format => gt_tbl_cls_associated_med_rec(l).file_format,
9063 i_width => gt_tbl_cls_associated_med_rec(l).width,
9064 i_hight => gt_tbl_cls_associated_med_rec(l).height,
9065 i_checksum => gt_tbl_cls_associated_med_rec(l).checksum,
9066 i_house_media => gt_tbl_cls_associated_med_rec(l).house_media,
9067 i_platform_id => r_tree_head_rec.platform_id ,
9068 i_usage_isn => v_usage_isn,
9069 i_delivery_type_isn => v_delivery_type_isn,
9070 i_language => v_lang.iso_639_3_code,
9071 i_source_file_name => gt_tbl_cls_associated_med_rec(l).source_file_name,
9072 i_content_id => tbl_tree_node_rec(i).contentid
9073 );
9074
9075 v_assoc_clob := v_assoc_clob || CHR(10) || v_assoc_xml.getClobVal();
9076 v_assoc_xml := NULL;
9077
9078 v_pres_media_xml := get_classif_term_pres_media(i_vrs_copy_id => gt_tbl_cls_associated_med_rec(l).version_copy_id,
9079 i_mediaType => v_usage_isn,
9080 i_language => v_lang.iso_639_3_code ,
9081 i_content_id => tbl_tree_node_rec(i).contentid);
9082
9083 SELECT XMLCONCAT(v_pres_final,v_pres_media_xml)
9084 INTO v_pres_final
9085 FROM dual;
9086 END IF;
9087 END LOOP;
9088 ELSE
9089
9090 v_assoc_xml := get_associated_media_xml(
9091 i_version_copy_id => gt_tbl_cls_associated_med_rec(l).version_copy_id,
9092 i_file_format => gt_tbl_cls_associated_med_rec(l).file_format,
9093 i_width => gt_tbl_cls_associated_med_rec(l).width,
9094 i_hight => gt_tbl_cls_associated_med_rec(l).height,
9095 i_checksum => gt_tbl_cls_associated_med_rec(l).checksum,
9096 i_house_media => gt_tbl_cls_associated_med_rec(l).house_media,
9097 i_platform_id => r_tree_head_rec.platform_id ,
9098 i_usage_isn => v_usage_isn,
9099 i_delivery_type_isn => v_delivery_type_isn,
9100 i_language => gt_tbl_cls_associated_med_rec(l).iso_639_3_code,
9101 i_source_file_name => gt_tbl_cls_associated_med_rec(l).source_file_name,
9102 i_content_id => tbl_tree_node_rec(i).contentid
9103 );
9104 v_assoc_clob := v_assoc_clob || CHR(10) || v_assoc_xml.getClobVal();
9105 v_assoc_xml := NULL;
9106
9107 v_pres_media_xml := get_classif_term_pres_media(i_vrs_copy_id => gt_tbl_cls_associated_med_rec(l).version_copy_id,
9108 i_mediaType => v_usage_isn,
9109 i_language => gt_tbl_cls_associated_med_rec(l).iso_639_3_code,
9110 i_content_id => tbl_tree_node_rec(i).contentid );
9111
9112 SELECT XMLCONCAT(v_pres_final,v_pres_media_xml)
9113 INTO v_pres_final
9114 FROM dual;
9115 END IF;
9116 END IF;
9117 END LOOP;
9118 END IF;--411644001
9119 EXCEPTION
9120 WHEN ROWTYPE_MISMATCH THEN
9121 NULL;
9122 END;
9123 END IF;
9124 ELSE
9125 NULL;
9126 END IF;
9127 END IF;
9128 END LOOP;
9129 --407275004
9130 EXCEPTION WHEN ROWTYPE_MISMATCH THEN
9131 NULL;
9132 END;
9133 ELSE
9134 RAISE e_exception;
9135 END IF;
9136 ELSE
9137 RAISE e_invalid_term;
9138 END IF;
9139
9140 IF v_pres_grp_prop != k_true THEN
9141 v_category_code := tbl_classif_term_data_rec(tbl_classif_term_data_rec.last).category_code;--411644001
9142 BEGIN
9143 SELECT vocaty.table_line_isn
9144 INTO v_categ_term_type_isn
9145 FROM table_line vocaty
9146 WHERE vocaty.table_id = k_vocaty_tl
9147 AND vocaty.table_code = v_category_code;--411644001
9148 EXCEPTION WHEN NO_DATA_FOUND THEN
9149 v_categ_term_type_isn := NULL;
9150 END;
9151 IF gt_tbl_cls_associated_med_rec.count > 0 THEN
9152 v_version_copy_id := gt_tbl_cls_associated_med_rec(gt_tbl_cls_associated_med_rec.last).version_copy_id;
9153 END IF;--411644001
9154 v_dummy_xml := get_classif_term_xml(
9155 i_node_id => tbl_tree_node_rec(i).contentid,
9156 i_term_attribute => v_term_attribute_final,
9157 i_category_type => v_categ_term_type_isn,
9158 i_vrs_copy_id => v_version_copy_id,
9159 i_max_certif => v_max_certif_prop,
9160 i_pres_media_xml => v_pres_final
9161 );
9162 v_pres_final := NULL;
9163 v_data_clob := v_data_clob || CHR(10) || v_dummy_xml.getClobVal();
9164 v_dummy_xml := NULL;
9165 v_child_root := child_root_node(i_classification_id,tbl_tree_node_rec(i).nodeid);
9166
9167 SELECT xmlconcat(v_root_temp,v_child_root)
9168 INTO v_root_temp
9169 FROM dual;
9170
9171 v_root_node_xml := get_root_node(
9172 i_classification_id => i_classification_id,
9173 i_parent_node_id => tbl_tree_node_rec(i).parentnodeid,
9174 i_child_root => v_root_temp,
9175 i_service_id => r_tree_head_rec.platform_id
9176 );
9177 v_root_node_clob := v_root_node_xml.getClobVal();
9178 v_node_xml := get_classif_nodes_xml(
9179 i_node_id => tbl_tree_node_rec(i).nodeid,
9180 i_classification_id => i_classification_id,
9181 i_content_id => tbl_tree_node_rec(i).contentid
9182 );
9183 v_node_clob := v_node_clob || v_node_xml.getClobVal();
9184 v_node_xml := NULL;
9185 ELSE
9186 NULL;
9187 END IF;
9188 END LOOP;
9189 EXCEPTION
9190 WHEN ROWTYPE_MISMATCH THEN
9191 NULL;
9192 END;
9193 IF c_o_properties%ISOPEN THEN
9194 CLOSE c_o_properties;
9195 END IF;
9196
9197 SELECT xmlelement("domainAvailability",
9198 xmlelement("localeId",TRIM(get_interface_mapped_value(k_708_uhe_locale_id_prop,r_tree_head_rec.platform_id))),
9199 xmlelement("startDateTime", to_utc_from_local(r_tree_head_rec.effective_date,r_tree_head_rec.effective_start_time)),
9200 CASE WHEN r_tree_head_rec.effective_date_to > k_min_date THEN
9201 xmlelement("endDateTime",to_utc_from_local(r_tree_head_rec.effective_date_to,r_tree_head_rec.effective_end_time))
9202 ELSE
9203 NULL
9204 END
9205 )
9206 INTO v_xml_domain
9207 FROM dual;
9208
9209 v_term_root_node_xml := get_classif_term_root_node_xml(r_tree_head_rec.platform_id,v_platform_name);
9210
9211 v_domain_clob := v_xml_domain.getClobVal();
9212 v_data := v_term_root_node_xml.getclobVal()||v_data_clob || CHR(10) ||v_root_node_clob || v_node_clob || CHR(10) || v_assoc_clob || v_domain_clob;
9213 v_id_link := get_interface_mapped_value(k_708_classtree_urid_prop,r_tree_head_rec.platform_id);
9214
9215 o_uhe_class_tree_export := k_xml_version_encode || CHR(10) || '<ClassificationTreeRequest xmlns="'||g_service_namespace||'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="'||g_service_namespace ||' classificationtree.xsd">'
9216 ||CHR(10) || '<ClassificationTree action="PUT" resourceId="'||v_id_link||'">' ||k_id||v_id_link ||k_id_end||v_data ||k_classTreeElementEnd|| k_classifTreeRequestEnd;
9217 o_tree_external_id := v_id_link;
9218
9219 o_old_broad_ref := bss.get_broadcaster_reference( i_object_id => i_classification_id,
9220 i_object_type => k_object_type,
9221 i_reference_usage =>k_reference_usage,
9222 i_broadcaster_reference_seq => k_false
9223 );
9224
9225
9226 o_new_broad_ref:=to_char(TO_DATE(to_utc_from_local(r_tree_head_rec.effective_date,r_tree_head_rec.effective_start_time),k_uhe_date_format),k_date_delete_format);
9227 ELSE
9228 RAISE e_exception;
9229 END IF;
9230 EXCEPTION
9231 WHEN e_exception THEN
9232 o_error_response := c_o_error_response;
9233 WHEN e_invalid_term THEN
9234 iface.set_io_action_message(
9235 i_file_id => i_file_id,
9236 i_message_type => k.msg_error,
9237 i_message_code => k_message_code,
9238 i_file_name => 'NA',
9239 i_channel_code => 'ALL',
9240 i_client_info => 'Export of Classification Tree for '||v_platform_name|| ' failed'
9241 );
9242 bss.error_handling_api.CreateSingleIoElement(
9243 i_io_file_id => i_file_id,
9244 i_object_type => 'ERROR',
9245 i_message => 'Classification Term ' || v_clssification_term || ' is marked as In-Active',
9246 i_validation_type => k.msg_error
9247 );
9248 o_error_reported := k_true;
9249 o_properties := NULL;
9250 o_error_response := NULL;
9251
9252 WHEN e_property THEN
9253 iface.set_io_action_message(
9254 i_file_id => i_file_id,
9255 i_message_type => k.msg_error,
9256 i_message_code => k_message_code,
9257 i_file_name => 'NA',
9258 i_channel_code => 'ALL',
9259 i_client_info => 'Property not set! Please See IO Elements for details!'
9260 );
9261
9262 bss.error_handling_api.CreateSingleIoElement(
9263 i_io_file_id => i_file_id,
9264 i_object_type => 'ERROR',
9265 i_message => iface.get_client_info,
9266 i_validation_type => k.msg_error
9267 );
9268
9269 o_error_reported := k_true;
9270 o_properties := NULL;
9271 o_error_response := NULL;
9272 WHEN OTHERS THEN
9273 iface.set_io_action_message(
9274 i_file_id => i_file_id,
9275 i_message_type => k.msg_error,
9276 i_message_code => k_message_code,
9277 i_file_name => 'NA',
9278 i_channel_code => 'ALL',
9279 i_client_info => 'Classification Tree Export Failed! Please see IO Elements for details'
9280 );
9281 bss.error_handling_api.CreateSingleIoElement(
9282 i_io_file_id => i_file_id,
9283 i_object_type => 'ERROR',
9284 i_message => 'An unexpected error occurred: ' || SQLERRM || SQLCODE,
9285 i_validation_type => k.msg_error
9286 );
9287 o_error_reported := k_true;
9288 o_properties:= NULL;
9289 o_error_response := NULL;
9290 END uhe_classification_tree_export;
9291 /*----------------------------------------------------------------------------------------------
9292 get_classif_term_root_node_xml FUNCTION
9293 Created in order to generate the Classification Term Elements
9294 -----------------------------------------------------------------------------------------------*/
9295
9296 FUNCTION get_classif_term_root_node_xml(i_service_id IN vod_platform.vod_platform_id%TYPE,
9297 i_service_name IN vod_platform.platform_name%TYPE
9298 )
9299 RETURN XMLTYPE
9300 IS
9301 term_root_xml xmltype;
9302 v_term_root_id k.max_varchar2%TYPE;
9303 BEGIN
9304 v_term_root_id := get_interface_mapped_value(k_708_root_clas_trm_id_prop,i_service_id);
9305 SELECT XMLELEMENT("classifTerm",
9306 XMLELEMENT("id",g_uri_prefix||k_classification_term||v_term_root_id),
9307 XMLELEMENT("type",k_label),
9308 XMLELEMENT("name",
9309 XMLATTRIBUTES(k_eng_atr AS "lang"),
9310 i_service_name||k_root
9311 ),
9312 XMLELEMENT("definition",
9313 XMLATTRIBUTES(k_eng_atr AS "lang"),
9314 i_service_name||k_root
9315 ),
9316 XMLELEMENT("parentalGuidance",
9317 xmlattributes(g_default_parental AS "termRef")
9318 ),
9319 XMLELEMENT("key",v_term_root_id)
9320 )
9321 INTO term_root_xml
9322 FROM dual;
9323
9324 RETURN term_root_xml;
9325 END get_classif_term_root_node_xml;
9326
9327 /*----------------------------------------------------------------------------------------------
9328 get_classif_term_pres_media FUNCTION
9329 Created in order to generate the Classification Term Presentation Media Elements
9330 -----------------------------------------------------------------------------------------------*/
9331 FUNCTION get_classif_term_pres_media (i_vrs_copy_id IN version_copy.version_copy_id%TYPE,
9332 i_mediaType IN table_line.table_line_isn%TYPE,
9333 i_language IN language.Iso_639_3_Code%TYPE,
9334 i_content_id IN vod_classification_tree.classification_node_id%TYPE
9335 )
9336 RETURN xmltype
9337 IS
9338 v_media_type k.max_varchar2%TYPE;
9339 v_pres_media_xml xmltype;
9340 BEGIN
9341 v_media_type := get_interface_mapped_value(k_708_media_classifica_prop,i_mediaType);
9342 SELECT XMLELEMENT("PresentationMedia",
9343 XMLELEMENT("contentInstanceRef",
9344 XMLELEMENT("value",g_uri_prefix ||k_image||i_content_id || k_underscore || i_vrs_copy_id || k_underscore || lower(i_language) )
9345 ),
9346 XMLELEMENT("mediaType",TRIM(v_media_type)
9347 )
9348 )
9349 INTO v_pres_media_xml
9350 FROM dual;
9351 RETURN v_pres_media_xml;
9352 END get_classif_term_pres_media;
9353 /*----------------------------------------------------------------------------------------------
9354 get_classif_term_xml FUNCTION
9355 Created in order to generate the Classification Term Elements
9356 -----------------------------------------------------------------------------------------------*/
9357 FUNCTION get_classif_term_xml (i_node_id IN vod_classification_tree.classification_node_id%TYPE,
9358 i_term_attribute IN xmltype,
9359 i_category_type IN vod_platform_content.category_type%TYPE DEFAULT NULL,
9360 i_vrs_copy_id IN version_copy.version_copy_id%TYPE,
9361 i_max_certif IN k.max_varchar2%TYPE DEFAULT NULL,
9362 i_pres_media_xml IN xmltype)
9363 RETURN xmltype
9364 IS
9365 r_xml xmltype;
9366 v_media_type k.max_varchar2%TYPE;
9367 v_clssif_term_type k.max_varchar2%TYPE:= NULL;
9368 v_parental_guidance table_line.numeric_1%TYPE;
9369 BEGIN
9370
9371 v_clssif_term_type := get_interface_mapped_value(k_708_classification_t_prop,i_category_type);
9372
9373 BEGIN
9374 SELECT vercer.numeric_1
9375 INTO v_parental_guidance
9376 FROM table_line vercer
9377 WHERE vercer.table_id = k_vercer_tl
9378 AND vercer.logical_1 = k_true ;
9379 EXCEPTION
9380 WHEN NO_DATA_FOUND THEN
9381 v_parental_guidance := NULL;
9382 END;
9383
9384 SELECT xmlagg(xmlelement("classifTerm",
9385 xmlelement("id",g_uri_prefix || k_classification_term ||i_node_id),
9386 xmlelement("type",nvl(v_clssif_term_type,g_default_category)),
9387 xmlconcat(g_name_xml,g_definition_xml),
9388 CASE WHEN i_max_certif IS NOT NULL THEN
9389 xmlelement("parentalGuidance",
9390 xmlattributes(g_parental_raiting_uri||i_max_certif AS "termRef"))
9391 WHEN g_default_cert_code IS NOT NULL THEN
9392 xmlelement("parentalGuidance",
9393 xmlattributes(g_parental_raiting_uri||g_default_cert_code AS "termRef"))
9394 WHEN v_parental_guidance IS NOT NULL THEN
9395 xmlelement("parentalGuidance",
9396 xmlattributes(g_parental_raiting_uri||v_parental_guidance AS "termRef"))
9397 ELSE
9398 NULL
9399 END,
9400 xmlconcat(i_term_attribute),
9401 CASE WHEN i_vrs_copy_id IS NOT NULL THEN
9402 XMLELEMENT("presentationMedia",
9403 XMLCONCAT(i_pres_media_xml)
9404 )
9405 ELSE
9406 NULL
9407 END CASE,
9408 xmlelement("key",i_node_id)
9409 )
9410 )
9411 INTO r_xml
9412 FROM dual;
9413
9414 g_name_xml := NULL;
9415 g_definition_xml := NULL;
9416
9417 RETURN r_xml;
9418
9419 END get_classif_term_xml;
9420 /*----------------------------------------------------------------------------------------------
9421 CHILD_NODE
9422 Created in order to generate the Child Nodes Elements
9423 -----------------------------------------------------------------------------------------------*/
9424 FUNCTION child_node (i_classification_id IN vod_classification_tree.classification_id%TYPE,
9425 i_node_id IN vod_classification_tree.classification_node_id%TYPE
9426 )
9427 RETURN xmltype
9428 IS
9429 xml xmltype;
9430 BEGIN
9431 SELECT xmlagg(xmlelement("childNode",
9432 xmlelement("childNodeRef",g_uri_prefix||k_classification_node||vct.classification_node_id),
9433 xmlelement("orderNum",vct.node_order)
9434 ))
9435 INTO xml
9436 FROM vod_classification_tree vct
9437 WHERE vct.classification_id = i_classification_id
9438 AND vct.parent_classification_node_id = i_node_id;
9439
9440 RETURN xml;
9441 END child_node;
9442 /*----------------------------------------------------------------------------------------------
9443 child_root_node
9444 Created in order to generate the Child Root Node Elements
9445 -----------------------------------------------------------------------------------------------*/
9446 FUNCTION child_root_node (i_classification_id IN vod_classification_tree.classification_id%TYPE,
9447 i_node_id IN vod_classification_tree.classification_node_id%TYPE)
9448 RETURN xmltype
9449 IS
9450 xml xmltype;
9451
9452 BEGIN
9453 SELECT xmlagg(xmlelement("childNode",
9454 xmlelement("childNodeRef",g_uri_prefix||k_classification_node||vct.classification_node_id),
9455 xmlelement("orderNum",vct.node_order)
9456 )
9457 )
9458 INTO xml
9459 FROM vod_classification_tree vct
9460 WHERE vct.classification_id = i_classification_id
9461 AND vct.parent_classification_node_id IS NULL
9462 AND vct.classification_node_id = i_node_id ;
9463
9464 RETURN xml;
9465 END;
9466 /*----------------------------------------------------------------------------------------------
9467 get_root_node
9468 Created in order to generate the Root Nodes Elements
9469 -----------------------------------------------------------------------------------------------*/
9470 FUNCTION get_root_node (i_classification_id IN vod_classification_tree.classification_node_id%TYPE,
9471 i_parent_node_id IN vod_classification_tree.parent_classification_node_id%TYPE,
9472 i_child_root IN xmltype,
9473 i_service_id IN vod_platform.vod_platform_id%TYPE
9474 )
9475 RETURN xmltype
9476 IS
9477 v_xml xmltype;
9478 v_root_term k.max_varchar2%TYPE;
9479 BEGIN
9480 v_root_term := get_interface_mapped_value(k_708_root_clas_trm_id_prop,i_service_id);
9481 SELECT
9482 XMLAGG(
9483 xmlelement("classifNode",
9484 xmlelement("id",g_uri_prefix||k_classif_root_node||i_classification_id),
9485 xmlelement("isRoot", 'true'),
9486 xmlelement("domain",i_classification_id),
9487 xmlelement("classifTermRef",g_uri_prefix||k_classification_term||v_root_term),
9488 xmlelement("childNodes",
9489 xmlconcat(i_child_root)
9490
9491 )
9492 )
9493 )
9494 INTO v_xml
9495 FROM dual;
9496
9497 RETURN v_xml;
9498 END;
9499 /*----------------------------------------------------------------------------------------------
9500 get_classif_nodes_xml
9501 Created in order to generate the Nodes Elements
9502 -----------------------------------------------------------------------------------------------*/
9503 FUNCTION get_classif_nodes_xml (i_node_id IN vod_classification_tree.classification_node_id%TYPE,
9504 i_classification_id IN vod_classification_tree.classification_id%TYPE,
9505 i_content_id IN vod_classification_tree.content_id%TYPE
9506 )
9507 RETURN xmltype
9508 IS
9509
9510 v_xml xmltype;
9511 BEGIN
9512 SELECT
9513 XMLAGG(xmlelement("classifNode",
9514 xmlelement("id",g_uri_prefix||k_classification_node||i_node_id),
9515 xmlelement("isRoot", 'false'),
9516 xmlelement("domain",i_classification_id),
9517 xmlelement("classifTermRef",g_uri_prefix||k_classification_term||i_content_id),
9518 xmlelement("childNodes",
9519 child_node(i_classification_id,i_node_id)
9520 )
9521 ))
9522 INTO v_xml
9523 FROM dual;
9524
9525 RETURN v_xml;
9526 END get_classif_nodes_xml;
9527 /*----------------------------------------------------------------------------------------------
9528 get_associated_media_xml
9529 Created in order to generate the PresentationMedia Elements
9530 -----------------------------------------------------------------------------------------------*/
9531 FUNCTION get_associated_media_xml(
9532 i_version_copy_id IN version_copy.version_copy_id%TYPE,
9533 i_file_format IN multimedia.format_type%TYPE,
9534 i_width IN multimedia.horizontal_resolution%TYPE,
9535 i_hight IN multimedia.vertical_resolution%TYPE,
9536 i_checksum IN multimedia.checksum%TYPE,
9537 i_house_media IN media_item.house_media%TYPE,
9538 i_platform_id IN vod_platform.vod_platform_id%TYPE,
9539 i_usage_isn IN table_line.table_line_isn%TYPE,
9540 i_delivery_type_isn IN table_line.table_line_isn%TYPE,
9541 i_language IN language.iso_639_3_code%TYPE,
9542 i_source_file_name IN multimedia.source_file_name%TYPE,
9543 i_content_id IN vod_classification_tree.classification_node_id%TYPE
9544 )
9545 RETURN xmltype
9546 IS
9547 xml xmltype;
9548 v_language_id language.language_id%TYPE;
9549 v_material_format_id vod_media_uri_rule.material_format_id%TYPE;
9550 BEGIN
9551 BEGIN
9552 SELECT l.language_id
9553 INTO v_language_id
9554 FROM LANGUAGE l
9555 WHERE l.iso_639_3_code = i_language;
9556 EXCEPTION WHEN no_data_found THEN
9557 v_language_id := 0;
9558 END;
9559
9560 BEGIN
9561 SELECT vmur.material_format_id
9562 INTO v_material_format_id
9563 FROM vod_media_uri_rule vmur
9564 WHERE vmur.type_id = 3
9565 AND vmur.language_id = v_language_id
9566 AND vmur.vod_platform_id = i_platform_id
9567 AND vmur.usage_type_id = i_usage_isn;
9568 EXCEPTION
9569 WHEN no_data_found THEN
9570 v_material_format_id := NULL;
9571 END;
9572
9573 SELECT
9574 xmlagg(xmlelement("presentationMedia",
9575 xmlelement("id",g_uri_prefix||k_image||i_content_id|| k_underscore || i_version_copy_id || k_underscore || lower(i_language) ),
9576 xmlelement("key",i_version_copy_id),
9577 xmlelement("instanceType", k_instantce_type),
9578 CASE WHEN i_file_format IS NOT NULL THEN
9579 xmlelement("imageMimeType", get_mime_type(i_file_format))
9580 ELSE
9581 NULL
9582 END CASE,
9583 CASE WHEN i_language IS NOT NULL THEN
9584 xmlelement("imageTextLang",lower(i_language))
9585 ELSE
9586 NULL
9587 END CASE,
9588 CASE WHEN i_width IS NOT NULL THEN
9589 xmlelement("imageWidth", i_width)
9590 ELSE
9591 NULL
9592 END CASE,
9593 CASE WHEN i_hight IS NOT NULL THEN
9594 xmlelement("imageHeight",i_hight)
9595 ELSE
9596 NULL
9597 END CASE,
9598 xmlelement("imageFile",
9599 CASE WHEN i_file_format IS NOT NULL THEN
9600 xmlelement("fileFormat",g_urn_prefix||k_file_format||i_file_format)
9601 ELSE
9602 NULL
9603 END CASE,
9604 xmlelement("fileAccess",
9605 xmlelement("FileAccess",
9606 CASE WHEN g_use_src_file_img = 0 THEN
9607 xmlelement("accessUrl", get_rule_media_uri(k_uri_asset_class_id,i_house_media,i_platform_id,v_language_id,i_usage_type_id => i_usage_isn))
9608 ELSE
9609 CASE WHEN i_source_file_name IS NOT NULL THEN
9610 xmlelement("accessUrl", get_rule_media_uri(k_uri_asset_class_id,i_source_file_name,i_platform_id,v_language_id,i_usage_type_id => i_usage_isn,i_material_format_id =>v_material_format_id))
9611 ELSE
9612 xmlelement("accessUrl", get_rule_media_uri(k_uri_asset_class_id,i_house_media,i_platform_id,v_language_id,i_usage_type_id => i_usage_isn,i_material_format_id =>v_material_format_id))
9613 END
9614 END CASE,
9615 xmlelement("deliveryType",g_urn_prefix ||k_delivery_type||get_interface_mapped_value(k_708_uhe_delivery_typ_prop,i_delivery_type_isn))
9616 )
9617 )
9618 ),
9619 xmlelement("descriptiveMetadata",NULL)
9620 ))
9621 INTO xml
9622 FROM dual;
9623 RETURN xml;
9624 END get_associated_media_xml;
9625 --------------------------------------------------------
9626 -- Function: to_utc_from_local: --
9627 -- transforms the local classif tree time to utc--
9628 -------------------------------------------------------
9629 FUNCTION to_utc_from_local (
9630 i_local_date IN timezone_offset.effective_date%TYPE,
9631 i_local_time IN timezone_offset.effective_time%TYPE
9632 )
9633 RETURN VARCHAR2
9634 IS
9635
9636 v_local_date_time timezone_offset_view.effective_date_time%TYPE;
9637 v_utc_date VARCHAR2(20);
9638 v_loc_utc_date timezone_offset.effective_date%TYPE;
9639 v_loc_utc_time timezone_offset.effective_time%TYPE;
9640 v_offset timezone_offset.offset_from_utc%TYPE;
9641 v_timezone_id timezone.timezone_id%TYPE;
9642 v_abreviation timezone_offset.offset_abbreviation%TYPE;
9643 BEGIN
9644
9645 SELECT tz.timezone_id
9646 INTO v_timezone_id
9647 FROM timezone tz
9648 WHERE tz.default_timezone = 1;
9649
9650 plan_timezones.get_timezone_offset (
9651 i_timezone_id => v_timezone_id,
9652 i_local_date => i_local_date,
9653 i_local_time => i_local_time,
9654 o_offset_from_utc => v_offset,
9655 o_offset_abbreviation => v_abreviation
9656 );
9657
9658 v_local_date_time := ibms_time.calender_time_to_ora_datetime (
9659 i_calender_date => i_local_date,
9660 i_calender_time => i_local_time
9661 );
9662
9663 v_loc_utc_date := i_local_date;
9664 v_loc_utc_time := i_local_time - v_offset;
9665
9666 IF v_loc_utc_time < k_day_start_time THEN
9667 -- Goes the previous day
9668 v_loc_utc_time := v_loc_utc_time + k_seconds_in_day;
9669 v_loc_utc_date := TO_CHAR(v_local_date_time - 1, k.datemask);
9670
9671 ELSIF v_loc_utc_time >= k_day_end_time THEN
9672 -- Goes in the next day
9673 v_loc_utc_time := v_loc_utc_time - k_seconds_in_day;
9674 v_loc_utc_date := TO_CHAR(v_local_date_time + 1, k.datemask);
9675
9676 END IF;
9677 v_utc_date := TO_CHAR(TO_DATE(v_loc_utc_date, k_date_format), k_date_dash)||k_t||tstr(v_loc_utc_time)||k_z;
9678 RETURN v_utc_date;
9679 EXCEPTION
9680 WHEN OTHERS THEN
9681 RETURN NULL;
9682
9683 END to_utc_from_local;
9684
9685
9686 -------------------------------------------------------
9687 -- Procedure: is_tstv_offer: --
9688 -- checks if the current Offer is of TSTV type --
9689 -------------------------------------------------------
9690 PROCEDURE is_tstv_offer(i_offer_id IN vod_offer_schedule_item.offer_id%TYPE,
9691 o_is_tstv OUT k.logical%TYPE,
9692 o_tstv_type OUT VARCHAR2,
9693 o_results OUT SYS_REFCURSOR,
9694 o_error_rep OUT k.logical%TYPE,
9695 o_err_msg OUT VARCHAR2)
9696
9697
9698 IS
9699 c_tstv_info r_tstv_info;
9700 k_process_name VARCHAR2(13):='is_tstv_offer';
9701 v_tstv_cat vod_offer_schedule.special_airing_category%TYPE := NULL;
9702 c_results SYS_REFCURSOR;
9703
9704 BEGIN
9705 o_is_tstv := k_false;
9706 g_is_tstv_offer := k_false;
9707 o_error_rep := k_false;
9708 o_tstv_type := NULL;
9709
9710 g_interface_id := iface.interface_id(k_interface_type);
9711 SELECT vos.special_airing_category
9712 INTO v_tstv_cat
9713 FROM vod_offer_schedule vos
9714 WHERE vos.offer_id = i_offer_id; -- getting offer's special_airing_category
9715
9716 g.debug('[is_tstv_offer] offer special airing category is ', v_tstv_cat);
9717 IF trim(g_tstv_restart) IS NULL THEN
9718 SELECT table_code
9719 INTO g_tstv_restart
9720 FROM table_line
9721 WHERE table_line_isn = ibms.ibms_prop.get_property_number (k_708_sp_air_cat_resta_prop, g_interface_id);
9722 END IF;
9723 IF trim(g_tstv_catchup) IS NULL THEN
9724 SELECT table_code
9725 INTO g_tstv_catchup
9726 FROM table_line
9727 WHERE table_line_isn = ibms.ibms_prop.get_property_number (k_708_sp_air_cat_catch_prop, g_interface_id);
9728 END IF;
9729 IF trim(g_tstv_staprev) IS NULL THEN
9730 SELECT table_code
9731 INTO g_tstv_staprev
9732 FROM table_line
9733 WHERE table_line_isn = ibms.ibms_prop.get_property_number (k_708_sp_air_cat_st_pr_prop, g_interface_id);
9734 END IF;
9735 BEGIN
9736 OPEN c_results FOR
9737 SELECT ch.channel_id,
9738 vosi.item_schedule_id,
9739 TO_CHAR(si.Utc_Date_Time, k_uhe_date_format) ,
9740 si.schedule_item_id,
9741 vos.special_airing_category
9742 FROM catchup_slot_offer_item_view vgi
9743 INNER JOIN vod_item_schedule vis ON on_demand_group_schedule_util.get_top_hierarchy_offer_itm_id(vis.item_schedule_id) = vgi.offer_item_id
9744 INNER JOIN vod_offer_schedule_item vosi ON vosi.item_schedule_id = vis.item_schedule_id
9745 INNER JOIN VOD_OFFER_SCHEDULE vos ON vos.offer_id = vosi.offer_id
9746 INNER JOIN schedule_item SI ON si.schedule_item_id = vgi.slot_id
9747 INNER JOIN channel ch ON ch.channel_code = si.Channel_Code
9748 LEFT OUTER JOIN object_epg_language oel ON oel.object_id = ch.channel_id AND oel.object_type = 'CH'
9749 WHERE vosi.offer_id = i_offer_id;
9750 IF gt_tstv_info IS NOT NULL THEN
9751 gt_tstv_info.delete;
9752 END IF;
9753 LOOP
9754 FETCH c_results INTO c_tstv_info;
9755 EXIT WHEN c_results%NOTFOUND;
9756 gt_tstv_info.extend();
9757 gt_tstv_info(gt_tstv_info.last).channel_id := c_tstv_info.channel_id;
9758 gt_tstv_info(gt_tstv_info.last).offer_item := c_tstv_info.offer_item;
9759 gt_tstv_info(gt_tstv_info.last).Utc_Date_Time := c_tstv_info.Utc_Date_Time;
9760 gt_tstv_info(gt_tstv_info.last).schedule_item_id := c_tstv_info.schedule_item_id;
9761 gt_tstv_info(gt_tstv_info.last).spec_air_cat := c_tstv_info.spec_air_cat;
9762 END LOOP;
9763 IF c_results%ROWCOUNT=0 THEN
9764 RAISE no_data_found;
9765 END IF;
9766 CLOSE c_results;
9767 FOR i IN 1 .. gt_tstv_info.count
9768 LOOP
9769 OPEN o_results FOR
9770 SELECT gt_tstv_info(i).channel_id AS CHANNEL_ID,
9771 gt_tstv_info(i).offer_item AS ITEM_SCHEDULE_ID,
9772 gt_tstv_info(i).Utc_Date_Time AS UTC_DATE_TIME,
9773 gt_tstv_info(i).schedule_item_id AS SCHEDULE_ITEM_ID,
9774 gt_tstv_info(i).spec_air_cat AS SPECIAL_AIRING_CATEGORY
9775 FROM dual;
9776
9777 END LOOP;
9778 -- check for special airing category
9779 IF v_tstv_cat = g_tstv_catchup THEN
9780 g_tstv_type := g_tstv_catchup;
9781 o_is_tstv := k_true;
9782 o_tstv_type := 'CATCHUP';
9783 g.debug('[is_tstv_offer] offer is linear linked and has right special airing category. offer is TSTV.');
9784 ELSIF v_tstv_cat = g_tstv_restart THEN
9785 g_tstv_type := g_tstv_restart;
9786 o_is_tstv := k_true;
9787 o_tstv_type := 'RESTART';
9788 g.debug('[is_tstv_offer] offer is linear linked and has right special airing category. offer is TSTV.');
9789 ELSIF v_tstv_cat = g_tstv_staprev THEN
9790 g_tstv_type := g_tstv_staprev;
9791 o_is_tstv := k_true;
9792 o_tstv_type := 'STARTPRE';
9793 g.debug('[is_tstv_offer] offer is linear linked and has right special airing category. offer is TSTV.');
9794 ELSE
9795 o_is_tstv := k_false;
9796 o_results := error_handling_api.GetEmptyRefCursor();
9797 g.debug('[is_tstv_offer] offer is linear linked but does not have proper special airing category. offer is not TSTV.');
9798 END IF;
9799
9800 EXCEPTION
9801 WHEN no_data_found THEN
9802 o_is_tstv := k_false;
9803 g_is_tstv_offer := k_false;
9804 o_results := error_handling_api.GetEmptyRefCursor();
9805 g.debug('[is_tstv_offer] offer is not linear linked.offer is not TSTV.');
9806 o_results := error_handling_api.GetEmptyRefCursor();
9807 WHEN OTHERS THEN
9808 IF (o_results%ISOPEN) THEN
9809 CLOSE o_results;
9810 END IF;
9811 o_error_rep := k_true;
9812 o_err_msg := 'Error raised during execution of '|| k_process_name||' for offer id '||i_offer_id || '. SQL exception: '||SQLERRM||k_eol|| SQLCODE;
9813 o_results := error_handling_api.GetEmptyRefCursor();
9814 END;
9815
9816 EXCEPTION
9817 WHEN no_data_found THEN
9818 o_is_tstv := k_false;
9819 g_is_tstv_offer := k_false;
9820 o_results := error_handling_api.GetEmptyRefCursor();
9821 g.debug('[is_tstv_offer] offer is not linear linked.offer is not TSTV.');
9822 o_results := error_handling_api.GetEmptyRefCursor();
9823 WHEN OTHERS THEN
9824 IF (o_results%ISOPEN) THEN
9825 CLOSE o_results;
9826 END IF;
9827 o_error_rep := k_true;
9828 o_err_msg := 'Error raised during execution of '|| k_process_name||' for offer id '||i_offer_id || '. SQL exception: '||SQLERRM||k_eol|| SQLCODE;
9829 o_results := error_handling_api.GetEmptyRefCursor();
9830 END is_tstv_offer;
9831 -------------------------------------------------------
9832 -- Procedure: ssr9_audit_handling --
9833 -- Handles raising the SSR9 audit records --
9834 -------------------------------------------------------
9835 PROCEDURE ssr9_audit_handling (i_schedule_item_id IN schedule_item.schedule_item_id%TYPE,
9836 o_error_response OUT t.max_varchar2%TYPE,
9837 o_error_reported OUT k.logical%TYPE)
9838 IS
9839 v_sqlcode t.max_varchar2%TYPE;
9840 v_sqlerrm t.max_varchar2%TYPE;
9841 BEGIN
9842
9843 g.debug('ssr9_audit_handling executing.');
9844 o_error_reported := k_false;
9845 o_error_response := NULL;
9846
9847 create_afs_update( p_audit_action_type => k_update_action,
9848 p_audit_item_type => k_ssr9_tstv,
9849 p_new_value => k_one,
9850 p_old_value => k_space,
9851 p_object_id => i_schedule_item_id );
9852 --since deletion is handled by the wf, this branch will always be called from wf.
9853
9854 EXCEPTION
9855 WHEN OTHERS THEN
9856 v_sqlcode := SQLCODE;
9857 v_sqlerrm := SQLERRM;
9858 o_error_response := 'ssr9_audit_handling process failed. Reason: ' || v_sqlcode || v_sqlerrm;
9859 o_error_reported := k_true;
9860 END ssr9_audit_handling;
9861
9862 PROCEDURE get_slot_id(i_offer_id IN NUMBER,
9863 o_slot_id OUT NUMBER,
9864 o_airing_category OUT VARCHAR2) IS
9865 BEGIN
9866 o_airing_category:=NULL;
9867 o_slot_id := 1;
9868
9869 SELECT nvl(si.schedule_item_id,1),
9870 vos.special_airing_category
9871 INTO o_slot_id,
9872 o_airing_category
9873 FROM catchup_slot_offer_item_view vgi
9874 INNER JOIN vod_item_schedule vis ON on_demand_group_schedule_util.get_top_hierarchy_offer_itm_id(vis.item_schedule_id) = vgi.offer_item_id
9875 INNER JOIN vod_offer_schedule_item vosi ON vosi.item_schedule_id = vis.item_schedule_id
9876 INNER JOIN VOD_OFFER_SCHEDULE vos ON vos.offer_id = vosi.offer_id
9877 INNER JOIN schedule_item SI ON si.schedule_item_id = vgi.slot_id
9878 WHERE vosi.offer_id = i_offer_id;
9879
9880 EXCEPTION
9881 WHEN OTHERS THEN
9882 o_airing_category:=NULL;
9883 o_slot_id := 1;
9884
9885 END get_slot_id;
9886
9887 PROCEDURE service_validation( i_service_id IN vod_platform.vod_platform_id%TYPE,
9888 o_validation_service OUT NUMBER) IS
9889
9890 BEGIN
9891 g_interface_id := iface.interface_id(k_interface_type);
9892 IF nvl(ibms_prop.get_property_number(k_708_filter_by_servic_prop, g_interface_id, i_service_id),0)>0 THEN
9893 o_validation_service:=1;
9894 ELSE
9895 o_validation_service:=0;
9896 END IF;
9897 END service_validation ;
9898END NC_YES_UHE_ON_DEMAND_EXPORT;
9899/