DBA Data[Home] [Help]

PACKAGE BODY: APPS.MSD_SPF_COLLECT_HISTORY_DATA

Source


1 PACKAGE BODY MSD_SPF_COLLECT_HISTORY_DATA AS
2 /* $Header: msdspfchdb.pls 120.49.12020000.6 2012/11/22 13:33:08 nallkuma ship $ */
3 
4    /*** DATA TYPES ***/
5 
6    TYPE REQ_REC			IS RECORD (
7    									request_id			NUMBER,
8    									description			VARCHAR2(100),
9    									is_complete			BOOLEAN,
10    									status				NUMBER);
11 
12    TYPE REQ_TABLE IS TABLE OF REQ_REC INDEX BY BINARY_INTEGER;
13 
14    /*** GLOBAL VARIABLES ***/
15       g_dblink						VARCHAR2(50)  	DEFAULT NULL;
16       g_collection_method   		NUMBER			DEFAULT NULL;
17       g_req_table					REQ_TABLE;
18 
19    /*** PRIVATE FUNCTIONS ***/
20 
21 
22    /*** PRIVATE PROCEDURES ***/
23 
24     /*
25      * This procedure given the series id, gets the
26      * data from the source instance and inserts into the
27      * sales staging table.
28      */
29     PROCEDURE COLLECT_SERIES_DATA (
30         errbuf              OUT NOCOPY VARCHAR2,
31         retcode             OUT NOCOPY VARCHAR2,
32         p_series_id			IN NUMBER,
33         p_dest_table		IN VARCHAR2,
34         p_sr_instance_id	IN NUMBER,
35         p_collection_method IN NUMBER,
36         p_from_date			IN DATE,
37         p_to_date			IN DATE,
38         p_sim_plan_name     IN VARCHAR2 DEFAULT '')
39     IS
40 
41         /*** CURSORS ***/
42         CURSOR c_get_series_info
43         IS
44         SELECT
45         series_name, identifier, stg_series_col_name, custom_view_name
46         FROM msd_dem_series
47         WHERE series_id = p_series_id AND series_type = 1;
48 
49         /*** LOCAL VARIABLES ***/
50         x_errbuf        VARCHAR2(200) := NULL;
51         x_errbuf1       VARCHAR2(200) := NULL;
52         x_retcode       VARCHAR2(100) := NULL;
53         x_retcode1      VARCHAR2(100) := NULL;
54 
55         x_large_sql	        VARCHAR2(32000) := NULL;
56         x_key_values        VARCHAR2(4000)	:= NULL;
57         x_is_custom         NUMBER          := NULL;
58 
59         l_series_name           varchar2(100)   := null;
60         l_identifier            varchar2(30)    := NULL;
61         l_stg_series_col_name   varchar2(100)   := NULL;
62         l_custom_view_name	    varchar2(100)   := NULL;
63 
64         x_dm_time_level         VARCHAR2(10)    := NULL;
65 
66         c_cdl_source_date_col   varchar2(100)   := null;
67         c_mmt_source_date_col   varchar2(100)   := null;
68         c_ssh_source_date_col   varchar2(100)   := null; -- bug#12675064
69 
70         x_cdl_time_clause       varchar2(200)   := null;
71         x_mmt_time_clause       varchar2(200)   := null;
72         x_ssh_time_clause       varchar2(200)   := null; -- bug#12675064
73 
74 
75     BEGIN
76 
77         msd_dem_common_utilities.log_debug ('Entering: MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SERIES_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
78 
79         OPEN  c_get_series_info;
80         FETCH c_get_series_info INTO l_series_name, l_identifier, l_stg_series_col_name, l_custom_view_name;
81         CLOSE c_get_series_info;
82 
83         IF (l_identifier IS NULL) THEN
84             retcode := -1;
85             errbuf  := 'Unable to get the query identifier.';
86             msd_dem_common_utilities.log_message ('Error(1): MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SERIES_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
87             msd_dem_common_utilities.log_message (errbuf);
88             RETURN;
89         END IF;
90 
91         msd_dem_common_utilities.log_debug ('Begin collection of data for - ' || l_series_name || ' - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
92 
93         -- key-value common for seeded/custom view
94         x_key_values := '$C_DEST_TABLE#' || p_dest_table;
95 
96         /* Check for custom view */
97         IF (l_custom_view_name IS NULL) THEN
98             x_is_custom := 0;
99 
100             x_dm_time_level := msd_dem_common_utilities.dm_time_level;
101             x_key_values := x_key_values || '$C_DEM_TIME_LEVEL#' || x_dm_time_level;
102 
103             -- date col from csf_debrief_lines
104             c_cdl_source_date_col := 'NVL(TRUNC(cdl.service_date,''dd''), to_date(''1000/01/01'', ''yyyy/mm/dd''))';
105             -- date col from mtl_material_transactions
106             c_mmt_source_date_col := 'NVL(TRUNC(mmt.transaction_date,''dd''), to_date(''1000/01/01'', ''yyyy/mm/dd''))';
107             -- date col for spare shipments  -- bug#12675064
108             c_ssh_source_date_col := 'TRUNC(oola.actual_shipment_date, ''dd'')';
109 
110             -- add filter for net change collection
111             IF (p_collection_method <> G_COLL_COMPLETE) THEN
112                 x_cdl_time_clause := ' AND ' || c_cdl_source_date_col ||' between' ||
113                                      ' to_date(''' || to_char(p_from_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') and to_date(''' || to_char(p_to_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') ';
114                 x_mmt_time_clause := ' AND ' || c_mmt_source_date_col ||' between' ||
115                                      ' to_date(''' || to_char(p_from_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') and to_date(''' || to_char(p_to_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') ';
116             END IF;
117 
118            -- bug#12675064
119            x_ssh_time_clause := ' AND ' || c_ssh_source_date_col ||' between' ||
120                                      ' to_date(''' || to_char(p_from_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') and to_date(''' || to_char(p_to_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') ';
121 
122             --constants for CMRO/Fleet collection
123             x_key_values := x_key_values || '$C_COLL_FROM_DATE#' || 'to_date(''' || to_char(p_from_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') ';
124             x_key_values := x_key_values || '$C_COLL_UNTIL_DATE#' || 'to_date(''' || to_char(p_to_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') ';
125             x_key_values := x_key_values || '$C_DEST_SYSDATE#' || 'to_date(''' || to_char(SYSDATE, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') ';
126             x_key_values := x_key_values || '$C_FORECAST_SIM_PLAN#' || '''' || p_sim_plan_name || '''';
127 
128             if( lower(x_dm_time_level) = 'day' ) then
129                 x_key_values := x_key_values || '$C_DEM_DEST_DATES#' || '' ||
130                                 '$C_CDL_DEST_DATE#' || c_cdl_source_date_col ||
131                                 '$C_MMT_DEST_DATE#' || c_mmt_source_date_col ||
132                                 '$C_CDL_TIME_CLAUSE#' || x_cdl_time_clause ||
133                                 '$C_MMT_TIME_CLAUSE#' || x_mmt_time_clause ||
134                                 '$C_SSH_DEST_DATE#' || c_ssh_source_date_col || -- bug#12675064
135                                 '$C_SSH_TIME_CLAUSE#' || x_ssh_time_clause ; -- bug#12675064
136             else
137                 x_key_values := x_key_values || '$C_DEM_DEST_DATES#' || ', msd_dem_dates inp ' ||
138                                 '$C_CDL_DEST_DATE#' || 'inp.start_date' ||
139                                 '$C_MMT_DEST_DATE#' || 'inp.start_date' ||
140                                 '$C_CDL_TIME_CLAUSE#' || x_cdl_time_clause || ' AND ' || c_cdl_source_date_col || ' between inp.start_date and inp.end_date ' ||
141                                 '$C_MMT_TIME_CLAUSE#' || x_mmt_time_clause || ' AND ' || c_mmt_source_date_col || ' between inp.start_date and inp.end_date ' ||
142                                 '$C_SSH_DEST_DATE#' || 'inp.datet' || -- bug#12675064, 13505442
143                                 '$C_SSH_TIME_CLAUSE#' || x_ssh_time_clause || ' AND ' || c_ssh_source_date_col || ' between inp.start_date and inp.end_date ' ; -- bug#12675064
144             end if;
145         ELSE
146             x_is_custom := 1;
147         END IF;
148 
149         /*  In case custom view is used for collection and net change collection method is specified
150          * its not possible for the custom view to filter out sales records for unwanted dates, as the existing view is used and not built dynamically.
151          * Adding a time clause to the merge query in this case to bring in data for the specified date range.
152          */
153         if( x_is_custom = 1 and p_collection_method <> G_COLL_COMPLETE) then
154             x_key_values := x_key_values || '$C_MERGE_TIME_CLAUSE#' || ' WHERE SDATE BETWEEN '
155                                  || 'to_date(''' || to_char(p_from_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') '
156                                  || ' AND '
157                                  || 'to_date(''' || to_char(p_to_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'') ';
158         else
159             x_key_values := x_key_values || '$C_MERGE_TIME_CLAUSE#' || '';
160         end if;
161 
162         x_key_values := x_key_values || '$';
163 
164         /* Get the query */
165         msd_dem_query_utilities.get_query2 (
166                 x_retcode1,
167                 x_large_sql,
168                 l_identifier,
169                 p_sr_instance_id,
170                 x_key_values,
171                 x_is_custom,
172                 l_custom_view_name);
173 
174         IF (   x_retcode1 = '-1' OR x_large_sql IS NULL) THEN
175             retcode := -1;
176             errbuf  := 'Unable to get the query.';
177             msd_dem_common_utilities.log_message ('Error(2): MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SERIES_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
178             msd_dem_common_utilities.log_message (errbuf);
179             RETURN;
180         END IF;
181 
182         x_large_sql := replace(x_large_sql, 'C_SR_INSTANCE_ID', p_sr_instance_id);
183         msd_dem_common_utilities.log_debug ('Query - ');
184         msd_dem_common_utilities.log_debug (x_large_sql);
185 
186         msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
187 
188         BEGIN
189             /* Insert history data into staging table */
190             EXECUTE IMMEDIATE x_large_sql;
191             COMMIT;
192         EXCEPTION
193         WHEN OTHERS THEN
194             retcode := -1 ;
195             errbuf  := substr(SQLERRM,1,150);
196             msd_dem_common_utilities.log_message ('Exception(1): MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SERIES_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
197             msd_dem_common_utilities.log_message (errbuf);
198             msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
199             RETURN;
200         END;
201 
202         msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
203         msd_dem_common_utilities.log_debug ('End collection of data for - ' || l_series_name || ' - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
204         msd_dem_common_utilities.log_debug ('Exiting: MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SERIES_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
205 
206     EXCEPTION
207     WHEN OTHERS THEN
208         retcode := -1 ;
209         errbuf  := substr(SQLERRM,1,150);
210         msd_dem_common_utilities.log_message ('Exception(3): MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SERIES_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
211         msd_dem_common_utilities.log_message (errbuf);
212         RETURN;
213 
214     END COLLECT_SERIES_DATA;
215 
216     /* This procedure will set purge option for selected series and date range in the purge data profiles */
217     PROCEDURE SET_PURGE_PROFILES(
218             errbuf          OUT NOCOPY  VARCHAR2,
219             retcode         OUT NOCOPY  VARCHAR2,
220             p_usage_data    IN  NUMBER,
221             p_install_base  IN  NUMBER,
222             p_shipment_data IN  NUMBER,
223             p_from_date     IN  DATE,
224             p_to_date       IN  DATE,
225 	    p_ff_load       IN  NUMBER
226     )
227     IS
228         x_profile_id    number;
229         x_sql           varchar2(500)   := null;
230         x_query_name    varchar2(200)   := null;
231         x_table_name    varchar2(30)    := null;
232         x_srs_ib_id     number;
233         x_srs_uh_id     number;
234         x_srs_sh_id     number;
235         x_lvl_org_id    number;
236         x_org_filter_id number;
237         x_from_date     date;
238         x_to_date       date;
239         x_errbuf1       varchar2(200)   := null;
240         x_retcode1      varchar2(100)   := null;
241     BEGIN
242         msd_dem_common_utilities.log_debug ('Entering: MSD_SPF_COLLECT_HISTORY_DATA.SET_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
243 
244 	x_sql := 'select datet from '|| g_schema ||'.inputs where datet >= :1 and rownum = 1 order by datet asc';
245         execute immediate x_sql into x_from_date using p_from_date;
246 
247         x_sql := 'select datet from '|| g_schema ||'.inputs where datet <= :1 and rownum = 1 order by datet desc';
248         execute immediate x_sql into x_to_date using p_to_date;
249 
250         if (x_from_date > x_to_date) then
251             x_to_date := x_from_date;
252         end if;
253 
254         msd_dem_common_utilities.log_message ('For the selected series, the old data will be purged from ''' || x_from_date ||''' to '''||x_to_date ||'''');
255         msd_dem_common_utilities.log_debug ('For the selected series, the old data will be purged from ''' || x_from_date ||''' to '''||x_to_date ||'''');
256 
257         -- reset purge install base history profile to no load, no purge
258         x_profile_id := to_number(msd_dem_common_utilities.get_app_id_text (
259                                     'MSD_DEM_DEMANTRA_OBJECT_ID',
260                                     'PROFILE_PURGE_IB_HISTORY',
261                                     1,
262                                     'id'));
263         x_sql := 'select query_name, table_name from '|| g_schema || '.transfer_query where id = ' || x_profile_id;
264         msd_dem_common_utilities.log_debug(x_sql);
265         execute immediate x_sql into x_query_name, x_table_name;
266         msd_dem_common_utilities.log_debug('Refreshing profile - ' || x_query_name);
267         msd_dem_common_utilities.REFRESH_PURGE_SERIES(x_errbuf1, x_retcode1, x_profile_id, g_schema);
268 
269         IF (x_retcode1 = -1) THEN
270             retcode := 1;
271             errbuf := 'Error refreshing profile - ' || x_query_name ||'. ';
272             msd_dem_common_utilities.log_debug('Error Refreshing profile -' || x_query_name || ' : ' || x_errbuf1);
273         END IF;
274 
275         IF (p_install_base = G_YES) THEN
276             --set series to Load-Override, Purge-All dates without new data within profile's date range
277             msd_dem_common_utilities.log_debug('Set purge for install base');
278             x_srs_ib_id := to_number(msd_dem_common_utilities.get_app_id_text (
279                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
280                                         'SERIES_SPF_INSTALL_BASE',
281                                         1,
282                                         'forecast_type_id'));
283             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_srs_ib_id||', 0, 2); end;';
284             msd_dem_common_utilities.log_debug(x_sql);
285             execute immediate x_sql;
286 
287             --set date range
288             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_FDATE('||x_profile_id||', '''|| x_from_date||''' , '''||x_to_date||'''); end;';
289             msd_dem_common_utilities.log_debug(x_sql);
290             execute immediate x_sql;
291 
292             --populate orgs in staging table
293             x_sql := 'insert into '|| g_schema ||'.'||x_table_name||'(sdate, level1)'||
294                      ' select '''||x_from_date||''',  teo.organization from '|| g_schema||'.t_ep_organization teo '||
295                      ' where teo.organization in ' ||
296 		       	     '  (SELECT  distinct organization_code FROM
297 			     MSD_DEM_APP_INSTANCE_ORGS)';
298             msd_dem_common_utilities.log_debug(x_sql);
299             execute immediate x_sql;
300 
301             --notify app server
302             x_sql := 'begin ' || g_schema|| '.API_NOTIFY_APS_INTEGRATION('||x_profile_id ||'); end;';
303          	msd_dem_common_utilities.log_debug(x_sql);
304             execute immediate x_sql;
305         END IF;
306 
307         -- reset purge spare history profile to no load, no purge
308         x_profile_id := to_number(msd_dem_common_utilities.get_app_id_text (
309                                     'MSD_DEM_DEMANTRA_OBJECT_ID',
310                                     'PROFILE_PURGE_SPARE_HISTORY',
311                                     1,
312                                     'id'));
313         x_sql := 'select query_name, table_name from '|| g_schema || '.transfer_query where id = ' || x_profile_id;
314         msd_dem_common_utilities.log_debug(x_sql);
315         execute immediate x_sql into x_query_name, x_table_name;
316         msd_dem_common_utilities.log_debug('Refreshing profile - ' || x_query_name);
317         msd_dem_common_utilities.REFRESH_PURGE_SERIES(x_errbuf1, x_retcode1, x_profile_id, g_schema);
318 
319         IF (x_retcode1 = -1) THEN
320             retcode := 1;
321             errbuf := errbuf || 'Error refreshing profile - ' || x_query_name ||'. ';
322             msd_dem_common_utilities.log_debug('Error Refreshing profile -' || x_query_name || ' : ' || x_errbuf1);
323         END IF;
324 
325         IF (p_usage_data = G_YES OR p_shipment_data = G_YES) THEN
326             IF (p_usage_data = G_YES) THEN
327                 --set series to Load-Override, Purge-All dates without new data within profile's date range
328                 msd_dem_common_utilities.log_debug('Set purge for usage history');
329                 x_srs_ib_id := to_number(msd_dem_common_utilities.get_app_id_text (
330                                             'MSD_DEM_DEMANTRA_OBJECT_ID',
331                                             'SERIES_SPF_USAGE_HIST',
332                                             1,
333                                             'forecast_type_id'));
334                 x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_srs_ib_id||', 0, 2); end;';
335                 msd_dem_common_utilities.log_debug(x_sql);
336                 execute immediate x_sql;
337             END IF;
338 
339             IF (p_shipment_data = G_YES) THEN
340                 --set series to Load-Override, Purge-All dates without new data within profile's date range
341                 msd_dem_common_utilities.log_debug('Set purge for shipment history');
342                 x_srs_ib_id := to_number(msd_dem_common_utilities.get_app_id_text (
343                                             'MSD_DEM_DEMANTRA_OBJECT_ID',
344                                             'SERIES_SPF_SHIPMENT_HIST',
345                                             1,
346                                             'forecast_type_id'));
347                 x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_srs_ib_id||', 0, 2); end;';
348                 msd_dem_common_utilities.log_debug(x_sql);
349                 execute immediate x_sql;
350             END IF;
351 
352             --set date range
353             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_FDATE('||x_profile_id||', '''|| x_from_date||''' , '''||x_to_date||'''); end;';
354             execute immediate x_sql;
355 
356             --populate base model(s) in staging table
357             x_sql := 'insert into '|| g_schema ||'.'||x_table_name||'(sdate, level1)'||
358                      ' select '''||x_from_date||''',  tesbm.t_ep_spf_base_model_code from '|| g_schema||'.t_ep_spf_base_model tesbm '||
359                      ' where tesbm.t_ep_spf_base_model_code in ' ||
360 		       	     '  (SELECT  distinct ebs_base_model_code FROM MSD_SPF_MODEL_ORGS)';
361             msd_dem_common_utilities.log_debug(x_sql);
362             execute immediate x_sql;
363 
364             --populate filters for org
365             x_lvl_org_id := to_number(msd_dem_common_utilities.get_app_id_text (
366                                             'MSD_DEM_DEMANTRA_OBJECT_ID',
367                                             'LEVEL_ORGANIZATION',
368                                             1,
369                                             'group_table_id'));
370             x_sql := 'select filter_id from ' || g_schema || '.transfer_query_filters ' ||
371                      ' where id = ' || x_profile_id || ' and level_id = ' || x_lvl_org_id || '';
372             msd_dem_common_utilities.log_debug(x_sql);
373             execute immediate x_sql into x_org_filter_id;
374 
375             x_sql := 'delete from ' || g_schema || '.transfer_query_filter_m where filter_id = ' || x_org_filter_id;
376             msd_dem_common_utilities.log_debug(x_sql);
377             execute immediate x_sql;
378 
379             x_sql := 'insert into '||g_schema|| '.transfer_query_filter_m (filter_id, member_id) ' ||
380                      ' select ' ||x_org_filter_id|| ', teo.t_ep_organization_ep_id from ' ||g_schema||'.t_ep_organization teo ' ||
381                      ' where teo.organization in ';
382 
383             --bug#10253936 - in case of usage flat file load include only those orgs from data collected in the filter
384             if p_ff_load = G_YES then
385                 x_sql := x_sql || ' (select distinct dm_org_code from MSD_SPF_ST_SPARE_USAGE)';
386             else
387                 x_sql := x_sql || ' (select distinct organization_code from MSD_DEM_APP_INSTANCE_ORGS)';
388             end if;
389 
390             msd_dem_common_utilities.log_debug(x_sql);
391             execute immediate x_sql;
392 
393             --notify app server
394             x_sql := 'begin ' || g_schema|| '.API_NOTIFY_APS_INTEGRATION('||x_profile_id ||'); end;';
395          	msd_dem_common_utilities.log_debug(x_sql);
396             execute immediate x_sql;
397         END IF;
398 
399         msd_dem_common_utilities.log_debug ('Exiting: MSD_SPF_COLLECT_HISTORY_DATA.SET_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
400     EXCEPTION WHEN OTHERS THEN
401         retcode := 1 ;
402         errbuf  := errbuf || substr(SQLERRM,1,150);
403         msd_dem_common_utilities.log_message ('Warning: MSD_SPF_COLLECT_HISTORY_DATA.SET_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
404         msd_dem_common_utilities.log_debug (errbuf);
405         msd_dem_common_utilities.log_debug ('Exiting: MSD_SPF_COLLECT_HISTORY_DATA.SET_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
406         RETURN;
407     END SET_PURGE_PROFILES;
408 
409    PROCEDURE CHECK_REQUESTS_COMPLETION (
410       			errbuf						OUT 	NOCOPY 	VARCHAR2,
411       			retcode						OUT 	NOCOPY 	VARCHAR2,
412                 p_num_requests				IN				NUMBER,
413       			p_run_time					IN				DATE,
414       			p_req_table					IN	OUT	NOCOPY	REQ_TABLE,
415       			p_check_interval			IN				NUMBER	 DEFAULT 60,
416       			p_time_out					IN				NUMBER	 DEFAULT 86400,
417                 p_db_link                   IN              VARCHAR2 DEFAULT '')
418 
419    IS
420 
421       var_sql					VARCHAR2(2000)			DEFAULT NULL;
422       var_num_complete			NUMBER					DEFAULT 0;
423       var_num_success			NUMBER					DEFAULT 0;
424       var_num_error				NUMBER					DEFAULT 0;
425       var_num_warning			NUMBER					DEFAULT 0;
426       var_phase_code			VARCHAR2(1)				DEFAULT NULL;
427       var_status_code			VARCHAR2(1)				DEFAULT NULL;
428       var_stat_message			VARCHAR2(50)			DEFAULT NULL;
429       var_start_date			NUMBER					DEFAULT NULL;
430       var_start_date_seconds 	NUMBER					DEFAULT NULL;
431       var_curr_time				DATE					DEFAULT NULL;
432       var_curr_date				NUMBER					DEFAULT NULL;
433       var_curr_date_seconds 	NUMBER					DEFAULT NULL;
434       var_elapsed_seconds		NUMBER					DEFAULT NULL;
435 
436    BEGIN
437 
438       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.check_requests_completion...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
439 
440       var_start_date := TO_NUMBER(TO_CHAR(p_run_time, 'J'));
441       var_start_date_seconds := TO_NUMBER(TO_CHAR(p_run_time, 'SSSSS'));
442 
443       var_sql := 'SELECT phase_code, status_code FROM fnd_concurrent_requests' || p_db_link || ' WHERE request_id = :req_id';
444 
445       /* Check the status of each request in a loop */
446          WHILE (var_num_complete <> p_num_requests)
447          LOOP
448 
449             FOR I IN p_req_table.FIRST..p_req_table.LAST
450             LOOP
451 
452                var_phase_code := NULL;
453                var_status_code := NULL;
454 
455                IF (p_req_table(I).is_complete)
456                THEN
457                   goto end_for_loop;
458                END IF;
459 
460                EXECUTE IMMEDIATE var_sql
461                   INTO var_phase_code, var_status_code
462                   USING p_req_table(I).request_id;
463 
464                IF (var_phase_code = 'C')
465                THEN
466 
467                   var_num_complete := var_num_complete + 1;
468                   p_req_table(I).is_complete := TRUE;
469 
470                   IF (var_status_code IN ('R', 'I', 'C'))                   -- Completed Normal
471                   THEN
472                      p_req_table(I).status := 0;
473                      var_num_success := var_num_success + 1;
474                      var_stat_message := 'normally.';
475                   ELSIF (var_status_code IN ('G'))                          -- Completed with Warnings
476                   THEN
477                      p_req_table(I).status := 1;
478                      var_num_warning := var_num_warning + 1;
479                      var_stat_message := 'with warnings.';
480                   ELSIF (var_status_code IN ('E'))                          -- Completed with errors
481                   THEN
482                      p_req_table(I).status := -1;
483                      var_num_error := var_num_error + 1;
484                      var_stat_message := 'with errors.';
485                   ELSE                                                      -- Anything else
486                      p_req_table(I).status := -5;
487                      var_stat_message := 'unknown status.';
488                   END IF;
489 
490                   msd_dem_common_utilities.log_message('Concurrent Request - ' || to_char(p_req_table(I).request_id) || ' completed ' || var_stat_message);
491 
492                END IF;
493 
494 	       <<end_for_loop>>
495                null;
496 
497             END LOOP;
498 
499             var_curr_time := systimestamp;
500             var_curr_date := TO_NUMBER(TO_CHAR(var_curr_time, 'J'));
501             var_curr_date_seconds := TO_NUMBER(TO_CHAR(var_curr_time, 'SSSSS'));
502             var_elapsed_seconds := (((var_curr_date - var_start_date) * 86400) + (var_curr_date_seconds - var_start_date_seconds));
503 
504             IF (var_elapsed_seconds >= p_time_out)
505             THEN
506 
507                retcode := -1;
508                errbuf := 'Timeout occured while waiting for requests to finish.';
509                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.check_requests_completion - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
510                msd_dem_common_utilities.log_message (errbuf);
511                RETURN;
512 
513             END IF;
514 
515          END LOOP;
516 
517          IF (var_num_warning > 0)
518          THEN
519             retcode := 1;
520             errbuf := 'Some requests completed with warnings';
521             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.check_requests_completion - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
522             msd_dem_common_utilities.log_message (errbuf);
523          END IF;
524 
525          IF (var_num_error > 0)
526          THEN
527             retcode := -1;
528             errbuf := 'Some requests completed with errors';
529             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.check_requests_completion - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
530             msd_dem_common_utilities.log_message (errbuf);
531          END IF;
532 
533          IF (var_num_complete <> (var_num_success + var_num_warning + var_num_error))
534          THEN
535             retcode := -1;
536             errbuf := 'Some requests completed with unknown status';
537             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.check_requests_completion - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
538             msd_dem_common_utilities.log_message (errbuf);
539          END IF;
540 
541       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.check_requests_completion...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
542 
543    EXCEPTION
544       WHEN OTHERS THEN
545          retcode := -1;
546          errbuf := substr(SQLERRM,1,150);
547          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.check_requests_completion - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
548          msd_dem_common_utilities.log_message (errbuf);
549          RETURN;
550 
551    END CHECK_REQUESTS_COMPLETION;
552 
553 
554    PROCEDURE LAUNCH_SPF_DATA_COLLECTION (
555       			errbuf						OUT NOCOPY 	VARCHAR2,
556       			retcode						OUT NOCOPY 	VARCHAR2,
557       			p_run_time					IN			DATE,
558       			p_sr_instance_id			IN         	NUMBER,
559       			p_collection_group      	IN         	VARCHAR2,
560       			p_collection_method     	IN         	NUMBER,
561       			p_date_range_type			IN	   		NUMBER,
562       			p_collection_window			IN	   		NUMBER,
563       			p_char_from_date			IN	   		VARCHAR2,
564       			p_char_to_date				IN	   		VARCHAR2,
565       			p_from_date					IN	   		DATE,
566       			p_to_date					IN	   		DATE,
567       			p_shipment_data				IN			NUMBER,
568       			p_usage_data				IN			NUMBER,
569       			p_install_base				IN			NUMBER,
570       			p_sales_forecast			IN			NUMBER,
571       			p_auto_run_download     	IN 	   		NUMBER,
572       			p_usage_flat_file			IN			NUMBER	 DEFAULT G_NO,
573       			p_file_separator			IN			VARCHAR2 DEFAULT NULL,
574       			p_control_file_path			IN			VARCHAR2 DEFAULT NULL,
575       			p_data_file_path			IN			VARCHAR2 DEFAULT NULL,
576       			p_data_file_name			IN			VARCHAR2 DEFAULT NULL,
577       			p_check_interval			IN			NUMBER	 DEFAULT 60,
578       			p_time_out					IN			NUMBER	 DEFAULT 86400,
579       			p_synchronous				IN			NUMBER	 DEFAULT G_NO,
580       			p_custom_usage_hist_view 	IN			VARCHAR2 DEFAULT NULL,
581       			p_custom_ibuc_hist_view		IN			VARCHAR2 DEFAULT NULL,
582       			p_custom_sales_fcst_view	IN			VARCHAR2 DEFAULT NULL,
583       			p_custom_download_workflow	IN			VARCHAR2 DEFAULT NULL )
584    IS
585 
586       var_errbuf				VARCHAR2(2000)	DEFAULT		NULL;
587       var_retcode				VARCHAR2(100)	DEFAULT		0;
588 
589       var_request_id			NUMBER			DEFAULT 	NULL;
590       var_request_num			NUMBER			DEFAULT     NULL;
591 
592       var_sql                   varchar2(300) := NULL;
593       var_usage_ff_start_date   date := NULL;
594       var_usage_ff_until_date   date := NULL;
595 
596       x_version NUMBER := NULL;
597       x_sql VARCHAR2(2000) := NULL;
598       x_dem_schema VARCHAR2(100) := fnd_profile.value('MSD_DEM_SCHEMA');
599 
600       -- Bug#12675064
601       x_profile_id              number  :=  null;
602       x_srs_id                  number  :=  null;
603       x_count                   number  :=  null;
604 
605 
606    BEGIN
607 
608       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.launch_spf_data_collection...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
609 
610       /* STAGE I - Push Setup Parameters *** BEGIN *** */
611       msd_dem_common_utilities.log_message('--------------------------------Stage I - Begin---------------------------------------');
612       var_request_num := 0;
613 
614          /* Launch Push Setup Parameters */
615          BEGIN
616             var_request_id := null;
617             var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMPSP', NULL, NULL, FALSE,
618                                                           p_sr_instance_id, p_collection_group, G_YES);
619          EXCEPTION
620             WHEN OTHERS THEN
621                retcode := -1;
622                errbuf := substr(SQLERRM,1,150);
623                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
624                msd_dem_common_utilities.log_message ('Error while submitting request for push setup parameters');
625                msd_dem_common_utilities.log_message (errbuf);
626                RETURN;
627          END;
628 
629          IF (g_req_table.COUNT <> 0)
630          THEN
631             g_req_table.DELETE;
632          END IF;
633 
634          var_request_num := var_request_num + 1;
635          g_req_table(var_request_num).REQUEST_ID := var_request_id;
636          g_req_table(var_request_num).DESCRIPTION := 'SPF Push Setup Parameters';
637          g_req_table(var_request_num).IS_COMPLETE := FALSE;
638          g_req_table(var_request_num).status := 1;
639 
640          COMMIT;
641 
642          msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
643          msd_dem_common_utilities.log_message ('');
644          msd_dem_common_utilities.log_message ('');
645 
646          /* Launch Flat File Loads */
647          IF (p_usage_data = G_YES AND p_usage_flat_file = G_YES)
648          THEN
649 
650             /* Usage */
651             BEGIN
652                var_request_id := null;
653                var_request_id := fnd_request.submit_request ('MSD', 'MSDSRPLD', NULL, NULL, FALSE,
654                                         p_sr_instance_id, 1440, p_file_separator, p_control_file_path, p_data_file_path, 3,
655                                         null, null, null, null, null, null, null, null, null, null, null, null,
656                                         null, null, null, null, null, null, null, null, null, null, null, null,
657                                         null, null, null, null, null, 1,    null, null, null, null, null, null,
658                                         null, p_data_file_name);
659             EXCEPTION
660                WHEN OTHERS THEN
661                   retcode := -1;
662                   errbuf := substr(SQLERRM,1,150);
663                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
664                   msd_dem_common_utilities.log_message ('Error while submitting request for Usage Flat File Load');
665                   msd_dem_common_utilities.log_message (errbuf);
666                   RETURN;
667             END;
668 
669             var_request_num := var_request_num + 1;
670             g_req_table(var_request_num).REQUEST_ID := var_request_id;
671             g_req_table(var_request_num).DESCRIPTION := 'SPF Usage Flat File Load';
672             g_req_table(var_request_num).IS_COMPLETE := FALSE;
673             g_req_table(var_request_num).status := 1;
674 
675             COMMIT;
676 
677             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
678             msd_dem_common_utilities.log_message ('');
679             msd_dem_common_utilities.log_message ('');
680 
681          END IF;
682 
683          /* Launch Shipment Flat File Load */ -- Bug#12675064
684          IF (p_shipment_data = G_YES AND p_usage_flat_file = G_YES) THEN
685              BEGIN
686                 var_request_id := null;
687                 var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMLD', NULL, NULL, FALSE,
688                                                               p_sr_instance_id, 1440, p_file_separator, p_control_file_path, p_data_file_path, 3, null,
689         													  null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
690         													  null, null, null, null, null, null, null, null, null, null, p_data_file_name, p_auto_run_download);
691              EXCEPTION
692                 WHEN OTHERS THEN
693                    retcode := -1;
694                    errbuf := substr(SQLERRM,1,150);
695                    msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
696                    msd_dem_common_utilities.log_message ('Error while submitting request for Shipment Flat File Load');
697                    msd_dem_common_utilities.log_message (errbuf);
698                    RETURN;
699              END;
700 
701              var_request_num := var_request_num + 1;
702              g_req_table(var_request_num).REQUEST_ID := var_request_id;
703              g_req_table(var_request_num).DESCRIPTION := 'SPF Shipment Flat File Load';
704              g_req_table(var_request_num).IS_COMPLETE := FALSE;
705              g_req_table(var_request_num).status := 1;
706 
707              COMMIT;
708 
709              msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
710              msd_dem_common_utilities.log_message ('');
711              msd_dem_common_utilities.log_message ('');
712          END IF;
713 
714 
715          check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, p_run_time, g_req_table, p_check_interval, p_time_out);
716          IF (var_retcode = -1)
717          THEN
718             retcode := -1;
719             errbuf := var_errbuf;
720             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
721             msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage I to complete.');
722             msd_dem_common_utilities.log_message (errbuf);
723             RETURN;
724          END IF;
725          IF (var_retcode = 1)
726          THEN
727             retcode := 1;
728             errbuf := var_errbuf;
729             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
730             msd_dem_common_utilities.log_message ('One or more requests in Stage I completed with warnings.');
731             msd_dem_common_utilities.log_message (errbuf);
732          END IF;
733 
734       msd_dem_common_utilities.log_message('--------------------------------Stage I - End-----------------------------------------');
735       msd_dem_common_utilities.log_message ('');
736       msd_dem_common_utilities.log_message ('');
737       /* STAGE I - Push Setup Parameters *** END *** */
738 
739 
740       /* STAGE II  *** BEGIN *** */
741       msd_dem_common_utilities.log_message('--------------------------------Stage II - Begin--------------------------------------');
742       var_request_num := 0;
743 
744       IF (g_req_table.COUNT <> 0)
745       THEN
746          g_req_table.DELETE;
747       END IF;
748 
749          /* Launch Load Consensus Forecast to SPF Concurrent Program */
750          IF (p_sales_forecast = G_YES)
751          THEN
752 
753             BEGIN
754                var_request_id := null;
755                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFLCF', NULL, NULL, FALSE, G_YES);
756             EXCEPTION
757                WHEN OTHERS THEN
758                   retcode := -1;
759                   errbuf := substr(SQLERRM,1,150);
760                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
761                   msd_dem_common_utilities.log_message ('Error while submitting request for loading consensus forecast to spf');
762                   msd_dem_common_utilities.log_message (errbuf);
763                   RETURN;
764             END;
765 
766             var_request_num := var_request_num + 1;
767             g_req_table(var_request_num).REQUEST_ID := var_request_id;
768             g_req_table(var_request_num).DESCRIPTION := 'SPF Load Consensus Forecast to SPF';
769             g_req_table(var_request_num).IS_COMPLETE := FALSE;
770             g_req_table(var_request_num).status := 1;
771 
772             COMMIT;
773 
774             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
775             msd_dem_common_utilities.log_message ('');
776             msd_dem_common_utilities.log_message ('');
777 
778          END IF;
779 
780          /* Launch Spare Shipment History Concurrent Program */
781          IF (p_shipment_data = G_YES AND p_usage_flat_file = G_NO)
782          THEN
783 
784             BEGIN
785                var_request_id := null;
786                -- Bug#12675064
787                /*var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMCHD', NULL, NULL, FALSE,
788                                                           p_sr_instance_id, p_collection_group, p_collection_method, null, p_date_range_type, p_collection_window, p_char_from_date, p_char_to_date,
789                                                           G_NO, G_NO, G_NO, G_NO, G_YES, G_NO, G_NO, G_NO, G_NO, G_YES, null, null, p_auto_run_download, G_YES);*/
790                 var_request_id := fnd_request.submit_request('MSD', 'MSDSPFCSSH', NULL, NULL, FALSE,
791                                                           p_sr_instance_id, p_collection_method, fnd_date.date_to_canonical(p_from_date), fnd_date.date_to_canonical(p_to_date));
792            EXCEPTION
793                WHEN OTHERS THEN
794                   retcode := -1;
795                   errbuf := substr(SQLERRM,1,150);
796                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
797                   msd_dem_common_utilities.log_message ('Error while submitting request for collecting shipment history');
798                   msd_dem_common_utilities.log_message (errbuf);
799                   RETURN;
800             END;
801 
802             var_request_num := var_request_num + 1;
803             g_req_table(var_request_num).REQUEST_ID := var_request_id;
804             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect Spare Shipment History';
805             g_req_table(var_request_num).IS_COMPLETE := FALSE;
806             g_req_table(var_request_num).status := 1;
807 
808             COMMIT;
809 
810             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
811             msd_dem_common_utilities.log_message ('');
812             msd_dem_common_utilities.log_message ('');
813 
814          END IF;
815 
816          /* Launch Collect Usage History Concurrent Program - ERP */
817          IF (p_usage_data = G_YES AND p_usage_flat_file = G_NO)
818          THEN
819 
820             /* Usage */
821             BEGIN
822                var_request_id := null;
823                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFCSUH', NULL, NULL, FALSE,
824                                                           p_sr_instance_id, p_collection_method, fnd_date.date_to_canonical(p_from_date), fnd_date.date_to_canonical(p_to_date), G_YES);
825             EXCEPTION
826                WHEN OTHERS THEN
827                   retcode := -1;
828                   errbuf := substr(SQLERRM,1,150);
829                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
830                   msd_dem_common_utilities.log_message ('Error while submitting request for collecting spare usage');
831                   msd_dem_common_utilities.log_message (errbuf);
832                   RETURN;
833             END;
834 
835             var_request_num := var_request_num + 1;
836             g_req_table(var_request_num).REQUEST_ID := var_request_id;
837             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect Spare Usage';
838             g_req_table(var_request_num).IS_COMPLETE := FALSE;
839             g_req_table(var_request_num).status := 1;
840 
841             COMMIT;
842 
843             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
844             msd_dem_common_utilities.log_message ('');
845             msd_dem_common_utilities.log_message ('');
846 
847          END IF;
848 
849          /* Launch Usage History Flat File - Pre Process */ -- Bug#12675064
850          IF ((p_usage_data = G_YES or p_shipment_data = G_YES) AND p_usage_flat_file = G_YES)
851          THEN
852             -- in case of shipment flat file load, move data from sales st to usage st table
853             IF (p_shipment_data = G_YES) THEN
854                 x_sql :=   'INSERT /*+ APPEND */ INTO ' || C_SPARE_USAGE_HISTORY_TABLE || ' NOLOGGING '
855                         || ' (USAGE_HIST_TYPE, EBS_BASE_MODEL_SR_PK, EBS_BASE_MODEL_CODE, DM_ITEM_SR_PK, DM_ITEM_CODE, '
856                         || '  DM_ORG_SR_PK, DM_ORG_CODE, USAGE_DATE, QUANTITY, '
857                         || '  LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE, CREATED_BY ) '
858                         || ' SELECT ''SHIPMENTS'', -23453, tsst.ebs_base_model_code, -23453, tsst.dm_item_code, -23453, tsst.dm_org_code, '
859                         || '  tsst.sales_date, tsst.ebs_ship_hist_ship_qty_sd, sysdate, -1, sysdate, -1 '
860                         || ' FROM ' || g_schema || '.t_src_sales_tmpl tsst ';
861                 msd_dem_common_utilities.log_debug ('Shipment Data move sql - ');
862                 msd_dem_common_utilities.log_debug (x_sql);
863 
864                 msd_dem_common_utilities.log_message ('Moving shipment data from T_SRC_SALES_TMPL to ' || C_SPARE_USAGE_HISTORY_TABLE);
865                 msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
866                 EXECUTE IMMEDIATE x_sql;
867                 x_count := SQL%ROWCOUNT;
868                 COMMIT;
869 
870                 msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
871                 msd_dem_common_utilities.log_message ('Rows Moved - ' || to_char(x_count));
872 
873                 /* Truncate the sales staging table */
874                 msd_dem_common_utilities.log_message ('Truncate sales staging table...');
875                 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || g_schema || '.T_SRC_SALES_TMPL';
876             END IF;
877 
878             /* Pre-Process data in msd_spf_st_spare_usage */
879             BEGIN
880                var_request_id := null;
881                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFUPP', NULL, NULL, FALSE, p_sr_instance_id);
882             EXCEPTION
883                WHEN OTHERS THEN
884                   retcode := -1;
885                   errbuf := substr(SQLERRM,1,150);
886                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
887                   msd_dem_common_utilities.log_message ('Error while submitting request for Usage History Pre Process');
888                   msd_dem_common_utilities.log_message (errbuf);
889                   RETURN;
890             END;
891 
892             var_request_num := var_request_num + 1;
893             g_req_table(var_request_num).REQUEST_ID := var_request_id;
894             g_req_table(var_request_num).DESCRIPTION := 'SPF Flat File History Pre Process ';
895             g_req_table(var_request_num).IS_COMPLETE := FALSE;
896             g_req_table(var_request_num).status := 1;
897 
898             COMMIT;
899 
900             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
901             msd_dem_common_utilities.log_message ('');
902             msd_dem_common_utilities.log_message ('');
903 
904          END IF;
905 
906          /* Launch Derive Supersession Chain Concurrent Program */
907          IF (p_usage_data = G_YES OR p_install_base = G_YES or p_shipment_data = G_YES) -- Bug#12675064
908          THEN
909 
910             /* Supersession Chain */
911             BEGIN
912                var_request_id := null;
913                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFDSC', NULL, NULL, FALSE, p_sr_instance_id);
914             EXCEPTION
915                WHEN OTHERS THEN
916                   retcode := -1;
917                   errbuf := substr(SQLERRM,1,150);
918                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
919                   msd_dem_common_utilities.log_message ('Error while submitting request for deriving supersession chain');
920                   msd_dem_common_utilities.log_message (errbuf);
921                   RETURN;
922             END;
923 
924             var_request_num := var_request_num + 1;
925             g_req_table(var_request_num).REQUEST_ID := var_request_id;
926             g_req_table(var_request_num).DESCRIPTION := 'SPF Derive Supersession Chain';
927             g_req_table(var_request_num).IS_COMPLETE := FALSE;
928             g_req_table(var_request_num).status := 1;
929 
930             COMMIT;
931 
932             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
933             msd_dem_common_utilities.log_message ('');
934             msd_dem_common_utilities.log_message ('');
935 
936          END IF;
937 
938          IF (var_request_num > 0)
939          THEN
940 
941             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, p_run_time, g_req_table, p_check_interval, p_time_out);
942             IF (var_retcode = -1)
943             THEN
944                retcode := -1;
945                errbuf := var_errbuf;
946                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
947                msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage II to complete.');
948                msd_dem_common_utilities.log_message (errbuf);
949                RETURN;
950             END IF;
951             IF (var_retcode = 1)
952             THEN
953                retcode := 1;
954                errbuf := var_errbuf;
955                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
956                msd_dem_common_utilities.log_message ('One or more requests in Stage II completed with warnings.');
957                msd_dem_common_utilities.log_message (errbuf);
958             END IF;
959 
960          END IF;
961 
962          /* Analyze Staging Table */ -- Bug#12675064
963         msd_dem_common_utilities.log_message ('Analyzing staging table ' || C_SPARE_USAGE_HISTORY_TABLE);
964         msd_dem_common_utilities.log_debug ('Begin Analyze staging table ' || C_SPARE_USAGE_HISTORY_TABLE || ' - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
965 
966         msd_dem_collect_history_data.analyze_table (
967             var_errbuf,
968             var_retcode,
969             C_SPARE_USAGE_HISTORY_TABLE);
970 
971         msd_dem_common_utilities.log_debug ('End Analyze staging table ' || C_SPARE_USAGE_HISTORY_TABLE || ' - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
972 
973         IF (var_retcode = 1) THEN
974             retcode := 1;
975             errbuf  := var_errbuf;
976             msd_dem_common_utilities.log_message ('Warning: MSD_SPF_COLLECT_HISTORY_DATA.LAUNCH_SPF_DATA_COLLECTION - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
977             msd_dem_common_utilities.log_message ('Error while analyzing staging table');
978         END IF;
979 
980       msd_dem_common_utilities.log_message('--------------------------------Stage II - End----------------------------------------');
981       msd_dem_common_utilities.log_message ('');
982       msd_dem_common_utilities.log_message ('');
983       /* STAGE II  *** END *** */
984 
985 
986       /* STAGE III  *** BEGIN *** */
987       msd_dem_common_utilities.log_message('--------------------------------Stage III - Begin-------------------------------------');
988       var_request_num := 0;
989 
990       IF (g_req_table.COUNT <> 0)
991       THEN
992          g_req_table.DELETE;
993       END IF;
994 
995       /* Launch Collect Install Base under Contracts Concurrent Program */
996          IF (p_install_base = G_YES)
997          THEN
998             BEGIN
999                var_request_id := null;
1000                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFCID', NULL, NULL, FALSE,
1001                                                           p_sr_instance_id, p_collection_method, fnd_date.date_to_canonical(p_from_date), fnd_date.date_to_canonical(p_to_date), p_custom_ibuc_hist_view);
1002             EXCEPTION
1003                WHEN OTHERS THEN
1004                   retcode := -1;
1005                   errbuf := substr(SQLERRM,1,150);
1006                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1007                   msd_dem_common_utilities.log_message ('Error while submitting request for collecting install base under contracts');
1008                   msd_dem_common_utilities.log_message (errbuf);
1009                   RETURN;
1010             END;
1011 
1012             var_request_num := var_request_num + 1;
1013             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1014             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect Install Base under Contracts';
1015             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1016             g_req_table(var_request_num).status := 1;
1017 
1018             COMMIT;
1019 
1020             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1021             msd_dem_common_utilities.log_message ('');
1022             msd_dem_common_utilities.log_message ('');
1023 
1024          END IF;
1025 
1026       /* Launch Derive Service BOM Concurrent Program */
1027          IF (p_usage_data = G_YES OR p_install_base = G_YES OR p_shipment_data = G_YES) -- Bug#12675064
1028          THEN
1029             BEGIN
1030                var_request_id := null;
1031                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFDSB', NULL, NULL, FALSE, p_sr_instance_id, p_install_base, fnd_date.date_to_canonical(p_from_date), fnd_date.date_to_canonical(p_to_date), p_custom_ibuc_hist_view);
1032             EXCEPTION
1033                WHEN OTHERS THEN
1034                   retcode := -1;
1035                   errbuf := substr(SQLERRM,1,150);
1036                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1037                   msd_dem_common_utilities.log_message ('Error while submitting request for derive service bom');
1038                   msd_dem_common_utilities.log_message (errbuf);
1039                   RETURN;
1040             END;
1041 
1042             var_request_num := var_request_num + 1;
1043             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1044             g_req_table(var_request_num).DESCRIPTION := 'SPF Derive Service BOM';
1045             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1046             g_req_table(var_request_num).status := 1;
1047 
1048             COMMIT;
1049 
1050             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1051             msd_dem_common_utilities.log_message ('');
1052             msd_dem_common_utilities.log_message ('');
1053 
1054          END IF;
1055 
1056          IF (var_request_num > 0)
1057          THEN
1058 
1059             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, p_run_time, g_req_table, p_check_interval, p_time_out);
1060             IF (var_retcode = -1)
1061             THEN
1062                retcode := -1;
1063                errbuf := var_errbuf;
1064                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1065                msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage III to complete.');
1066                msd_dem_common_utilities.log_message (errbuf);
1067                RETURN;
1068             END IF;
1069             IF (var_retcode = 1)
1070             THEN
1071                retcode := 1;
1072                errbuf := var_errbuf;
1073                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1074                msd_dem_common_utilities.log_message ('One or more requests in Stage III completed with warnings.');
1075                msd_dem_common_utilities.log_message (errbuf);
1076             END IF;
1077 
1078          END IF;
1079 
1080       msd_dem_common_utilities.log_message('--------------------------------Stage III - End---------------------------------------');
1081       msd_dem_common_utilities.log_message ('');
1082       msd_dem_common_utilities.log_message ('');
1083       /* STAGE III  *** END *** */
1084 
1085 
1086       /* STAGE IV  *** BEGIN *** */
1087       msd_dem_common_utilities.log_message('---------------------------------Stage IV - Begin-------------------------------------');
1088       var_request_num := 0;
1089 
1090       IF (g_req_table.COUNT <> 0)
1091       THEN
1092          g_req_table.DELETE;
1093       END IF;
1094 
1095       /* Submit requests to populate staging tables */
1096          IF (p_usage_data = G_YES OR p_install_base = G_YES OR p_shipment_data = G_YES) -- Bug#12675064
1097          THEN
1098 
1099             /* BIIO_SPF_BASE_MODEL */
1100             BEGIN
1101                var_request_id := null;
1102                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_BASE_MODEL', p_sr_instance_id);
1103             EXCEPTION
1104                WHEN OTHERS THEN
1105                   retcode := -1;
1106                   errbuf := substr(SQLERRM,1,150);
1107                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1108                   msd_dem_common_utilities.log_message ('Error while submitting request for populating BIIO_SPF_BASE_MODEL');
1109                   msd_dem_common_utilities.log_message (errbuf);
1110                   RETURN;
1111             END;
1112 
1113             var_request_num := var_request_num + 1;
1114             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1115             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate BIIO_SPF_BASE_MODEL';
1116             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1117             g_req_table(var_request_num).status := 1;
1118 
1119             COMMIT;
1120 
1121             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1122             msd_dem_common_utilities.log_message ('');
1123             msd_dem_common_utilities.log_message ('');
1124 
1125 
1126             /* BIIO_SPF_CHILD */
1127             BEGIN
1128                var_request_id := null;
1129                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_CHILD', p_sr_instance_id);
1130             EXCEPTION
1131                WHEN OTHERS THEN
1132                   retcode := -1;
1133                   errbuf := substr(SQLERRM,1,150);
1134                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1135                   msd_dem_common_utilities.log_message ('Error while submitting request for populating BIIO_SPF_CHILD');
1136                   msd_dem_common_utilities.log_message (errbuf);
1137                   RETURN;
1138             END;
1139 
1140             var_request_num := var_request_num + 1;
1141             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1142             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate BIIO_SPF_CHILD';
1143             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1144             g_req_table(var_request_num).status := 1;
1145 
1146             COMMIT;
1147 
1148             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1149             msd_dem_common_utilities.log_message ('');
1150             msd_dem_common_utilities.log_message ('');
1151 
1152 
1153             /* BIIO_SPF_LATEST_REVISION */
1154             BEGIN
1155                var_request_id := null;
1156                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_LATEST_REVISION', p_sr_instance_id);
1157             EXCEPTION
1158                WHEN OTHERS THEN
1159                   retcode := -1;
1160                   errbuf := substr(SQLERRM,1,150);
1161                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1162                   msd_dem_common_utilities.log_message ('Error while submitting request for populating BIIO_SPF_LATEST_REVISION');
1163                   msd_dem_common_utilities.log_message (errbuf);
1164                   RETURN;
1165             END;
1166 
1167             var_request_num := var_request_num + 1;
1168             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1169             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate BIIO_SPF_LATEST_REVISION';
1170             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1171             g_req_table(var_request_num).status := 1;
1172 
1173             COMMIT;
1174 
1175             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1176             msd_dem_common_utilities.log_message ('');
1177             msd_dem_common_utilities.log_message ('');
1178 
1179 
1180             /* BIIO_SPF_LEVEL */
1181             BEGIN
1182 	       var_request_id := null;
1183 
1184 	       /*Bug#12571298*/
1185                x_sql := 'select to_number(replace(version,''.'','''')) from ' || x_dem_schema || '.version_details' ;
1186                EXECUTE IMMEDIATE x_sql INTO x_version;
1187 
1188                IF (x_version = 731) THEN
1189                   var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_LEVEL', p_sr_instance_id);
1190                ELSE
1191                   var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_LEVEL_732', p_sr_instance_id);
1192                END IF;
1193 
1194             EXCEPTION
1195                WHEN OTHERS THEN
1196                   retcode := -1;
1197                   errbuf := substr(SQLERRM,1,150);
1198                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1199                   msd_dem_common_utilities.log_message ('Error while submitting request for populating BIIO_SPF_LEVEL');
1200                   msd_dem_common_utilities.log_message (errbuf);
1201                   RETURN;
1202             END;
1203 
1204             var_request_num := var_request_num + 1;
1205             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1206             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate BIIO_SPF_LEVEL';
1207             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1208             g_req_table(var_request_num).status := 1;
1209 
1210             COMMIT;
1211 
1212             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1213             msd_dem_common_utilities.log_message ('');
1214             msd_dem_common_utilities.log_message ('');
1215 
1216 
1217             /* T_SRC_SALES_TMPL */
1218             BEGIN
1219                var_request_id := null;
1220                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_SALES_TMPL', p_sr_instance_id);
1221             EXCEPTION
1222                WHEN OTHERS THEN
1223                   retcode := -1;
1224                   errbuf := substr(SQLERRM,1,150);
1225                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1226                   msd_dem_common_utilities.log_message ('Error while submitting request for populating T_SRC_SALES_TMPL');
1227                   msd_dem_common_utilities.log_message (errbuf);
1228                   RETURN;
1229             END;
1230 
1231             var_request_num := var_request_num + 1;
1232             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1233             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate T_SRC_SALES_TMPL';
1234             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1235             g_req_table(var_request_num).status := 1;
1236 
1237             COMMIT;
1238 
1239             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1240             msd_dem_common_utilities.log_message ('');
1241             msd_dem_common_utilities.log_message ('');
1242 
1243 
1244             /* BIIO_SPF_DATA */
1245             BEGIN
1246                var_request_id := null;
1247                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_DATA', p_sr_instance_id);
1248             EXCEPTION
1249                WHEN OTHERS THEN
1250                   retcode := -1;
1251                   errbuf := substr(SQLERRM,1,150);
1252                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1253                   msd_dem_common_utilities.log_message ('Error while submitting request for populating BIIO_SPF_DATA');
1254                   msd_dem_common_utilities.log_message (errbuf);
1255                   RETURN;
1256             END;
1257 
1258             var_request_num := var_request_num + 1;
1259             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1260             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate BIIO_SPF_DATA';
1261             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1262             g_req_table(var_request_num).status := 1;
1263 
1264             COMMIT;
1265 
1266             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1267             msd_dem_common_utilities.log_message ('');
1268             msd_dem_common_utilities.log_message ('');
1269 
1270          END IF;
1271 
1272 
1273          IF (var_request_num > 0)
1274          THEN
1275 
1276             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, p_run_time, g_req_table, p_check_interval, p_time_out);
1277             IF (var_retcode = -1)
1278             THEN
1279                retcode := -1;
1280                errbuf := var_errbuf;
1281                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1282                msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage IV to complete.');
1283                msd_dem_common_utilities.log_message (errbuf);
1284                RETURN;
1285             END IF;
1286             IF (var_retcode = 1)
1287             THEN
1288                retcode := 1;
1289                errbuf := var_errbuf;
1290                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1291                msd_dem_common_utilities.log_message ('One or more requests in Stage IV completed with warnings.');
1292                msd_dem_common_utilities.log_message (errbuf);
1293             END IF;
1294 
1295          END IF;
1296 
1297       msd_dem_common_utilities.log_message('---------------------------------Stage IV - End---------------------------------------');
1298       msd_dem_common_utilities.log_message ('');
1299       msd_dem_common_utilities.log_message ('');
1300       /* STAGE IV  *** END *** */
1301 
1302 
1303       /* STAGE V  *** BEGIN *** */
1304       msd_dem_common_utilities.log_message('----------------------------------Stage V - Begin-------------------------------------');
1305       var_request_num := 0;
1306 
1307       IF (g_req_table.COUNT <> 0)
1308       THEN
1309          g_req_table.DELETE;
1310       END IF;
1311 
1312       /* Submit requests to populate staging tables */
1313          IF (p_usage_data = G_YES OR p_install_base = G_YES OR p_shipment_data = G_YES) -- Bug#12675064
1314          THEN
1315 
1316             /* BIIO_SPF_POPULATION */
1317             BEGIN
1318                var_request_id := null;
1319                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_POPULATION', p_sr_instance_id);
1320             EXCEPTION
1321                WHEN OTHERS THEN
1322                   retcode := -1;
1323                   errbuf := substr(SQLERRM,1,150);
1324                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1325                   msd_dem_common_utilities.log_message ('Error while submitting request for populating BIIO_SPF_POPULATION');
1326                   msd_dem_common_utilities.log_message (errbuf);
1327                   RETURN;
1328             END;
1329 
1330             var_request_num := var_request_num + 1;
1331             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1332             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate BIIO_SPF_POPULATION';
1333             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1334             g_req_table(var_request_num).status := 1;
1335 
1336             COMMIT;
1337 
1338             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1339             msd_dem_common_utilities.log_message ('');
1340             msd_dem_common_utilities.log_message ('');
1341 
1342 
1343             /* T_SRC_ITEM_TMPL */
1344             BEGIN
1345                var_request_id := null;
1346                var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMCLT', NULL, NULL, FALSE, p_sr_instance_id, 2);
1347             EXCEPTION
1348                WHEN OTHERS THEN
1349                   retcode := -1;
1350                   errbuf := substr(SQLERRM,1,150);
1351                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1352                   msd_dem_common_utilities.log_message ('Error while submitting request for populating T_SRC_ITEM_TMPL');
1353                   msd_dem_common_utilities.log_message (errbuf);
1354                   RETURN;
1355             END;
1356 
1357             var_request_num := var_request_num + 1;
1358             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1359             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate T_SRC_ITEM_TMPL';
1360             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1361             g_req_table(var_request_num).status := 1;
1362 
1363             COMMIT;
1364 
1365             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1366             msd_dem_common_utilities.log_message ('');
1367             msd_dem_common_utilities.log_message ('');
1368 
1369 
1370             /* T_SRC_LOC_TMPL */
1371             BEGIN
1372                var_request_id := null;
1373                var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMCLT', NULL, NULL, FALSE, p_sr_instance_id, 1, -1, G_YES);
1374             EXCEPTION
1375                WHEN OTHERS THEN
1376                   retcode := -1;
1377                   errbuf := substr(SQLERRM,1,150);
1378                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1379                   msd_dem_common_utilities.log_message ('Error while submitting request for populating T_SRC_LOC_TMPL');
1380                   msd_dem_common_utilities.log_message (errbuf);
1381                   RETURN;
1382             END;
1383 
1384             var_request_num := var_request_num + 1;
1385             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1386             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate T_SRC_LOC_TMPL';
1387             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1388             g_req_table(var_request_num).status := 1;
1389 
1390             COMMIT;
1391 
1392             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1393             msd_dem_common_utilities.log_message ('');
1394             msd_dem_common_utilities.log_message ('');
1395 
1396          END IF;
1397 
1398          IF (var_request_num > 0)
1399          THEN
1400 
1401             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, p_run_time, g_req_table, p_check_interval, p_time_out);
1402             IF (var_retcode = -1)
1403             THEN
1404                retcode := -1;
1405                errbuf := var_errbuf;
1406                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1407                msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage V to complete.');
1408                msd_dem_common_utilities.log_message (errbuf);
1409                RETURN;
1410             END IF;
1411             IF (var_retcode = 1)
1412             THEN
1413                retcode := 1;
1414                errbuf := var_errbuf;
1415                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1416                msd_dem_common_utilities.log_message ('One or more requests in Stage V completed with warnings.');
1417                msd_dem_common_utilities.log_message (errbuf);
1418             END IF;
1419 
1420          END IF;
1421 
1422       msd_dem_common_utilities.log_message('----------------------------------Stage V - End---------------------------------------');
1423       msd_dem_common_utilities.log_message ('');
1424       msd_dem_common_utilities.log_message ('');
1425       /* STAGE V  *** END *** */
1426 
1427 
1428       /* STAGE VI  *** BEGIN *** */
1429       msd_dem_common_utilities.log_message('---------------------------------Stage VI - Begin-------------------------------------');
1430       var_request_num := 0;
1431 
1432       IF (g_req_table.COUNT <> 0)
1433       THEN
1434          g_req_table.DELETE;
1435       END IF;
1436 
1437         /* History data Re-alignment -> Setup purge profiles as required */
1438         var_retcode := 0;
1439         -- purge is done either for flat file load of usage or for ERP load (usage or install base selected)
1440         IF (p_usage_flat_file = G_YES AND (p_usage_data = G_YES OR p_shipment_data = G_YES)) THEN  -- Bug#12675064
1441             --get the date range from flat file data loaded to staging table
1442             var_sql := 'select min(sdate), max(sdate) from '||g_schema||'.biio_spf_data';
1443             execute immediate var_sql into var_usage_ff_start_date,var_usage_ff_until_date;
1444 
1445             IF (var_usage_ff_start_date IS NULL or var_usage_ff_until_date IS NULL) THEN
1446                 var_usage_ff_start_date := SYSDATE;
1447                 var_usage_ff_until_date := SYSDATE;
1448             END IF;
1449 
1450           --BUG#14166770
1451               SET_PURGE_PROFILES(var_errbuf, var_retcode, p_usage_data, p_install_base, p_shipment_data, var_usage_ff_start_date, var_usage_ff_until_date, G_YES);
1452        		--14166770 ends
1453 
1454         ELSIF (p_usage_data = G_YES OR p_install_base = G_YES OR p_shipment_data = G_YES) THEN -- Bug#12675064
1455             SET_PURGE_PROFILES(var_errbuf, var_retcode, p_usage_data, p_install_base, p_shipment_data, p_from_date, p_to_date,  G_NO);
1456 
1457         END IF;
1458 
1459         IF (var_retcode = 1) THEN
1460             retcode := 1;
1461             errbuf := var_errbuf;
1462         END IF;
1463 
1464         -- Bug#12675064
1465         -- Reset Load/Purge option for all series in IMPORT_SPF_DATA
1466         -- set (usage/shipment) series to 'No Load' and 'No Purge' if not selected
1467         IF (p_usage_data = G_YES OR p_shipment_data = G_YES) THEN
1468             begin
1469                 x_profile_id := to_number(msd_dem_common_utilities.get_app_id_text (
1470                                             'MSD_DEM_DEMANTRA_OBJECT_ID',
1471                                             'PROFILE_IMPORT_SPF_DATA',
1472                                             1,
1473                                             'id'));
1474                 msd_dem_common_utilities.log_debug('Refreshing profile - IMPORT_SPF_DATA');
1475                 msd_dem_common_utilities.REFRESH_PURGE_SERIES(var_errbuf, var_retcode, x_profile_id, g_schema);
1476 
1477                 IF (var_retcode = -1) THEN
1478                     retcode := 1;
1479                     errbuf := 'Error refreshing profile - IMPORT_SPF_DATA';
1480                     msd_dem_common_utilities.log_debug('Error Refreshing profile - IMPORT_SPF_DATA : ' || var_errbuf);
1481                 END IF;
1482 
1483                 IF (p_usage_data = G_YES) THEN
1484                     --set Usage series to Load-Override, Purge-No Purge
1485                     msd_dem_common_utilities.log_debug('Set Load-Override / Purge-No Purge for usage history series');
1486                     x_srs_id := to_number(msd_dem_common_utilities.get_app_id_text (
1487                                                 'MSD_DEM_DEMANTRA_OBJECT_ID',
1488                                                 'SERIES_SPF_USAGE_HIST',
1489                                                 1,
1490                                                 'forecast_type_id'));
1491                     x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_srs_id||', 0, 0); end;';
1492                     msd_dem_common_utilities.log_debug(x_sql);
1493                     execute immediate x_sql;
1494                 END IF;
1495 
1496                 IF (p_shipment_data = G_YES) THEN
1497                     --set Shipments series to Load-Override, Purge-No Purge
1498                     msd_dem_common_utilities.log_debug('Set Load-Override / Purge-No Purge for shipment history series');
1499                     x_srs_id := to_number(msd_dem_common_utilities.get_app_id_text (
1500                                                 'MSD_DEM_DEMANTRA_OBJECT_ID',
1501                                                 'SERIES_SPF_SHIPMENT_HIST',
1502                                                 1,
1503                                                 'forecast_type_id'));
1504                     x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_srs_id||', 0, 0); end;';
1505                     msd_dem_common_utilities.log_debug(x_sql);
1506                     execute immediate x_sql;
1507                 END IF;
1508 
1509                 x_sql := 'begin ' || g_schema|| '.API_NOTIFY_APS_INTEGRATION('||x_profile_id ||'); end;';
1510              	execute immediate x_sql;
1511 
1512             exception
1513             when others then
1514                 retcode := -1;
1515                 errbuf := substr(SQLERRM,1,150);
1516                 msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1517                 msd_dem_common_utilities.log_message ('Error when setting Load/Purge option for data profile');
1518                 msd_dem_common_utilities.log_message (errbuf);
1519                 RETURN;
1520             end;
1521         END IF;
1522 
1523          /* Launch the Download Workflow */
1524          IF (p_auto_run_download = G_YES)
1525          THEN
1526 
1527             BEGIN
1528 
1529                var_request_id := null;
1530                IF (p_usage_data = G_YES OR p_install_base = G_YES OR p_shipment_data = G_YES) -- Bug#12675064
1531                THEN
1532                   var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFLSD', NULL, NULL, FALSE, 'WF_SPF_FULL_DOWNLOAD', p_check_interval, p_time_out);
1533                ELSE
1534                   var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFLSD', NULL, NULL, FALSE, 'WF_SPF_GL_DATA_DOWNLOAD', p_check_interval, p_time_out);
1535                END IF;
1536 
1537 
1538             EXCEPTION
1539                WHEN OTHERS THEN
1540                   retcode := -1;
1541                   errbuf := substr(SQLERRM,1,150);
1542                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1543                   msd_dem_common_utilities.log_message ('Error while submitting request for launch download');
1544                   msd_dem_common_utilities.log_message (errbuf);
1545                   RETURN;
1546             END;
1547 
1548             var_request_num := var_request_num + 1;
1549             g_req_table(var_request_num).REQUEST_ID := var_request_id;
1550             g_req_table(var_request_num).DESCRIPTION := 'SPF Launch Download';
1551             g_req_table(var_request_num).IS_COMPLETE := FALSE;
1552             g_req_table(var_request_num).status := 1;
1553 
1554             COMMIT;
1555 
1556             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1557             msd_dem_common_utilities.log_message ('');
1558             msd_dem_common_utilities.log_message ('');
1559 
1560          END IF;
1561 
1562          IF (var_request_num > 0)
1563          THEN
1564 
1565             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, p_run_time, g_req_table, p_check_interval, p_time_out);
1566             IF (var_retcode = -1)
1567             THEN
1568                retcode := -1;
1569                errbuf := var_errbuf;
1570                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1571                msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage VI to complete.');
1572                msd_dem_common_utilities.log_message (errbuf);
1573                RETURN;
1574             END IF;
1575             IF (var_retcode = 1)
1576             THEN
1577                retcode := 1;
1578                errbuf := var_errbuf;
1579                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1580                msd_dem_common_utilities.log_message ('One or more requests in Stage VI completed with warnings.');
1581                msd_dem_common_utilities.log_message (errbuf);
1582             END IF;
1583 
1584          END IF;
1585 
1586       msd_dem_common_utilities.log_message('---------------------------------Stage VI - End---------------------------------------');
1587       msd_dem_common_utilities.log_message ('');
1588       msd_dem_common_utilities.log_message ('');
1589       /* STAGE VI  *** END *** */
1590 
1591 
1592       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.launch_spf_data_collection...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1593 
1594 
1595    EXCEPTION
1596       WHEN OTHERS THEN
1597          retcode := -1;
1598          errbuf := substr(SQLERRM,1,150);
1599          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_data_collection - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1600          msd_dem_common_utilities.log_message (errbuf);
1601          RETURN;
1602 
1603    END LAUNCH_SPF_DATA_COLLECTION;
1604 
1605 
1606 
1607 
1608    PROCEDURE LAUNCH_SPF_SHIPMENT_DATA_FF (
1609       			errbuf						OUT NOCOPY 	VARCHAR2,
1610       			retcode						OUT NOCOPY 	VARCHAR2,
1611       			p_run_time					IN			DATE,
1612       			p_sr_instance_id			IN         	NUMBER,
1613       			p_auto_run_download			IN			NUMBER,
1614       			p_file_separator			IN			VARCHAR2,
1615       			p_control_file_path			IN			VARCHAR2,
1616       			p_data_file_path			IN			VARCHAR2,
1617       			p_data_file_name			IN			VARCHAR2,
1618       			p_check_interval			IN			NUMBER	 DEFAULT 60,
1619       			p_time_out					IN			NUMBER	 DEFAULT 86400,
1620       			p_synchronous				IN			NUMBER	 DEFAULT G_NO )
1621    IS
1622 
1623       var_errbuf				VARCHAR2(2000)	DEFAULT		NULL;
1624       var_retcode				VARCHAR2(100)	DEFAULT		0;
1625       var_request_id			NUMBER			DEFAULT 	NULL;
1626       var_request_num			NUMBER			DEFAULT     NULL;
1627       var_req_table				REQ_TABLE;
1628 
1629       var_sql					VARCHAR2(2000)	DEFAULT		NULL;
1630       var_count					NUMBER			DEFAULT		NULL;
1631 
1632    BEGIN
1633 
1634       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.launch_spf_shipment_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1635 
1636       /* STAGE I - Load Shipment Flat File *** BEGIN *** */
1637       msd_dem_common_utilities.log_message('--------------------------------Stage I - Begin---------------------------------------');
1638       var_request_num := 0;
1639 
1640          /* Launch Flat File Loads */
1641          BEGIN
1642             var_request_id := null;
1643             var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMLD', NULL, NULL, FALSE,
1644                                                           p_sr_instance_id, 1440, p_file_separator, p_control_file_path, p_data_file_path, 3, null,
1645     													  null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
1646     													  null, null, null, null, null, null, null, null, null, null, p_data_file_name, p_auto_run_download);
1647          EXCEPTION
1648             WHEN OTHERS THEN
1649                retcode := -1;
1650                errbuf := substr(SQLERRM,1,150);
1651                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1652                msd_dem_common_utilities.log_message ('Error while submitting request for Flat File Loads');
1653                msd_dem_common_utilities.log_message (errbuf);
1654                RETURN;
1655          END;
1656 
1657          IF (var_req_table.COUNT <> 0)
1658          THEN
1659             var_req_table.DELETE;
1660          END IF;
1661 
1662          var_request_num := var_request_num + 1;
1663          var_req_table(var_request_num).REQUEST_ID := var_request_id;
1664          var_req_table(var_request_num).DESCRIPTION := 'SPF Flat File Loads';
1665          var_req_table(var_request_num).IS_COMPLETE := FALSE;
1666          var_req_table(var_request_num).status := 1;
1667 
1668          COMMIT;
1669 
1670          msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1671          msd_dem_common_utilities.log_message ('');
1672          msd_dem_common_utilities.log_message ('');
1673 
1674 
1675          /* Launch Push Setup Parameters */
1676          BEGIN
1677             var_request_id := null;
1678             var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMPSP', NULL, NULL, FALSE,
1679                                                           p_sr_instance_id, '-999', G_YES);
1680          EXCEPTION
1681             WHEN OTHERS THEN
1682                retcode := -1;
1683                errbuf := substr(SQLERRM,1,150);
1684                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1685                msd_dem_common_utilities.log_message ('Error while submitting request for push setup parameters');
1686                msd_dem_common_utilities.log_message (errbuf);
1687                RETURN;
1688          END;
1689 
1690          var_request_num := var_request_num + 1;
1691          var_req_table(var_request_num).REQUEST_ID := var_request_id;
1692          var_req_table(var_request_num).DESCRIPTION := 'SPF Push Setup Parameters';
1693          var_req_table(var_request_num).IS_COMPLETE := FALSE;
1694          var_req_table(var_request_num).status := 1;
1695 
1696          COMMIT;
1697 
1698          msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1699          msd_dem_common_utilities.log_message ('');
1700          msd_dem_common_utilities.log_message ('');
1701 
1702 
1703          check_requests_completion(var_errbuf, var_retcode, var_req_table.LAST, p_run_time, var_req_table, p_check_interval, p_time_out);
1704          IF (var_retcode = -1)
1705          THEN
1706             retcode := -1;
1707             errbuf := var_errbuf;
1708             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1709             msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage I to complete.');
1710             msd_dem_common_utilities.log_message (errbuf);
1711             RETURN;
1712          END IF;
1713          IF (var_retcode = 1)
1714          THEN
1715             retcode := 1;
1716             errbuf := var_errbuf;
1717             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1718             msd_dem_common_utilities.log_message ('One or more requests in Stage I completed with warnings.');
1719             msd_dem_common_utilities.log_message (errbuf);
1720          END IF;
1721 
1722       msd_dem_common_utilities.log_message('--------------------------------Stage I - End-----------------------------------------');
1723       msd_dem_common_utilities.log_message ('');
1724       msd_dem_common_utilities.log_message ('');
1725       /* STAGE I - Load Shipment Flat File *** END *** */
1726 
1727 
1728       /* STAGE II - Move Shipment Date *** BEGIN *** */
1729       msd_dem_common_utilities.log_message('--------------------------------Stage II - Begin--------------------------------------');
1730       /* Move Shipment Data from T_SRC_SALES_TMPL to BIIO_SPF_SPARES_HIST_DATA */
1731 
1732          var_sql := 'INSERT /*+ APPEND */ INTO ' || g_schema || '.BIIO_SPF_SPARES_HIST_DATA NOLOGGING '
1733                     || ' (SDATE, LEVEL1, LEVEL2, SPF_ACTUAL_QUANTITY_DEP) '
1734                     || ' SELECT mdd.datet, tsst.dm_item_code, tsst.dm_org_code, sum(tsst.ebs_ship_hist_ship_qty_sd) '
1735                     || ' FROM ' || g_schema || '.t_src_sales_tmpl tsst, '
1736                     || '    msd_dem_dates mdd '
1737                     || ' WHERE tsst.sales_date BETWEEN mdd.start_date AND mdd.end_date '
1738                     || ' GROUP BY tsst.dm_item_code, tsst.dm_org_code, mdd.datet';
1739          msd_dem_common_utilities.log_debug ('Shipment Data move sql - ');
1740          msd_dem_common_utilities.log_debug (var_sql);
1741 
1742          msd_dem_common_utilities.log_message ('Aggregating and moving shipment data from T_SRC_SALES_TMPL to BIIO_SPF_SPARES_HIST_DATA');
1743          msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1744          EXECUTE IMMEDIATE var_sql;
1745          var_count := SQL%ROWCOUNT;
1746          COMMIT;
1747 
1748          msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1749          msd_dem_common_utilities.log_message ('Rows Moved - ' || to_char(var_count));
1750 
1751       /* Truncate the sales staging table */
1752          msd_dem_common_utilities.log_message ('Truncate sales staging table...');
1753          EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || g_schema || '.T_SRC_SALES_TMPL';
1754 
1755       /* Analyze table BIIO_SPF_SPARES_HIST_DATA */
1756          msd_dem_common_utilities.log_message ('Analyzing table BIIO_SPF_SPARES_HIST_DATA...');
1757          msd_dem_collect_history_data.analyze_table (var_errbuf, var_retcode, g_schema || '.BIIO_SPF_SPARES_HIST_DATA');
1758          IF (var_retcode = -1)
1759          THEN
1760             retcode := -1;
1761             errbuf := var_errbuf;
1762             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1763             msd_dem_common_utilities.log_message ('Error in call to msd_dem_collect_history_data.analyze_table');
1764             RETURN;
1765          END IF;
1766 
1767       msd_dem_common_utilities.log_message('--------------------------------Stage II - End----------------------------------------');
1768       msd_dem_common_utilities.log_message ('');
1769       msd_dem_common_utilities.log_message ('');
1770       /* STAGE II - Move Shipment Date *** END *** */
1771 
1772 
1773       /* STAGE III - Launch Download *** BEGIN *** */
1774       msd_dem_common_utilities.log_message('--------------------------------Stage III - Begin-------------------------------------');
1775       var_request_num := 0;
1776 
1777       IF (var_req_table.COUNT <> 0)
1778       THEN
1779          var_req_table.DELETE;
1780       END IF;
1781 
1782          /* Launch the Download Workflow */
1783          IF (p_auto_run_download = G_YES)
1784          THEN
1785 
1786             BEGIN
1787 
1788                var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFLSD', NULL, NULL, FALSE, 'WF_SPF_GL_DATA_DOWNLOAD', p_check_interval, p_time_out);
1789 
1790             EXCEPTION
1791                WHEN OTHERS THEN
1792                   retcode := -1;
1793                   errbuf := substr(SQLERRM,1,150);
1794                   msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1795                   msd_dem_common_utilities.log_message ('Error while submitting request for launch download');
1796                   msd_dem_common_utilities.log_message (errbuf);
1797                   RETURN;
1798             END;
1799 
1800             var_request_num := var_request_num + 1;
1801             var_req_table(var_request_num).REQUEST_ID := var_request_id;
1802             var_req_table(var_request_num).DESCRIPTION := 'SPF Launch Download';
1803             var_req_table(var_request_num).IS_COMPLETE := FALSE;
1804             var_req_table(var_request_num).status := 1;
1805 
1806             COMMIT;
1807 
1808             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
1809             msd_dem_common_utilities.log_message ('');
1810             msd_dem_common_utilities.log_message ('');
1811 
1812          END IF;
1813 
1814          IF (var_request_num > 0)
1815          THEN
1816 
1817             check_requests_completion(var_errbuf, var_retcode, var_req_table.LAST, p_run_time, var_req_table, p_check_interval, p_time_out);
1818             IF (var_retcode = -1)
1819             THEN
1820                retcode := -1;
1821                errbuf := var_errbuf;
1822                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1823                msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage III to complete.');
1824                msd_dem_common_utilities.log_message (errbuf);
1825                RETURN;
1826             END IF;
1827             IF (var_retcode = 1)
1828             THEN
1829                retcode := 1;
1830                errbuf := var_errbuf;
1831                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1832                msd_dem_common_utilities.log_message ('One or more requests in Stage III completed with warnings.');
1833                msd_dem_common_utilities.log_message (errbuf);
1834             END IF;
1835 
1836          END IF;
1837 
1838       msd_dem_common_utilities.log_message('--------------------------------Stage III - End---------------------------------------');
1839       msd_dem_common_utilities.log_message ('');
1840       msd_dem_common_utilities.log_message ('');
1841       /* STAGE III - Launch Download  *** END *** */
1842 
1843       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.launch_spf_shipment_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1844 
1845    EXCEPTION
1846       WHEN OTHERS THEN
1847          retcode := -1;
1848          errbuf := substr(SQLERRM,1,150);
1849          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_spf_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1850          msd_dem_common_utilities.log_message (errbuf);
1851          RETURN;
1852 
1853    END LAUNCH_SPF_SHIPMENT_DATA_FF;
1854 
1855 
1856 
1857    /*** PUBLIC FUNCTIONS ***/
1858 
1859 
1860    /*** PUBLIC PROCEDURES ***/
1861 
1862 
1863    PROCEDURE COLLECT_SPF_DATA (
1864       			errbuf						OUT NOCOPY 	VARCHAR2,
1865       			retcode						OUT NOCOPY 	VARCHAR2,
1866       			p_sr_instance_id			IN         	NUMBER,
1867       			p_collection_group      	IN         	VARCHAR2,
1868       			p_collection_method     	IN         	NUMBER,
1869       			p_hidden_param1				IN	   		VARCHAR2,
1870       			p_date_range_type			IN	   		NUMBER,
1871       			p_collection_window			IN	   		NUMBER,
1872       			p_from_date					IN	   		VARCHAR2,
1873       			p_to_date					IN	   		VARCHAR2,
1874       			p_shipment_data				IN			NUMBER,
1875       			p_usage_data				IN			NUMBER,
1876       			p_install_base				IN			NUMBER,
1877       			p_sales_forecast			IN			NUMBER,
1878       			p_auto_run_download     	IN 	   		NUMBER,
1879       			p_check_interval			IN			NUMBER	 DEFAULT 60,
1880       			p_time_out					IN			NUMBER	 DEFAULT 86400,
1881       			p_synchronous				IN			NUMBER	 DEFAULT G_NO,
1882       			p_custom_usage_hist_view 	IN			VARCHAR2 DEFAULT NULL,
1883       			p_custom_ibuc_hist_view		IN			VARCHAR2 DEFAULT NULL,
1884       			p_custom_sales_fcst_view	IN			VARCHAR2 DEFAULT NULL,
1885       			p_custom_download_workflow	IN			VARCHAR2 DEFAULT NULL )
1886    IS
1887 
1888       var_runtime				DATE			DEFAULT 	systimestamp;
1889 
1890       var_errbuf				VARCHAR2(2000)	DEFAULT		NULL;
1891       var_retcode				VARCHAR2(100)	DEFAULT		0;
1892 
1893       var_instance_code			VARCHAR2(30)	DEFAULT		NULL;
1894       var_apps_ver				NUMBER			DEFAULT		NULL;
1895       var_dgmt					NUMBER			DEFAULT		NULL;
1896       var_instance_type			NUMBER			DEFAULT		NULL;
1897 
1898       var_from_date				DATE			DEFAULT		NULL;
1899       var_to_date				DATE			DEFAULT		NULL;
1900 
1901 
1902    BEGIN
1903 
1904       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.collect_spf_data...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1905 
1906       /* Log the input parameters to the log file */
1907       msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
1908 
1909       msd_dem_common_utilities.log_message('     ' || rpad('Source Instance ID', 30) || ' - ' || to_char(p_sr_instance_id));
1910       msd_dem_common_utilities.log_message('     ' || rpad('Collection Group', 30) || ' - ' || p_collection_group);
1911       msd_dem_common_utilities.log_message('     ' || rpad('Collection Method', 30) || ' - ' || to_char(p_collection_method));
1912       msd_dem_common_utilities.log_message('     ' || rpad('Date Range Type', 30) || ' - ' || to_char(p_date_range_type));
1913       msd_dem_common_utilities.log_message('     ' || rpad('Collection Window', 30) || ' - ' || to_char(p_collection_window));
1914       msd_dem_common_utilities.log_message('     ' || rpad('From Date', 30) || ' - ' || p_from_date);
1915       msd_dem_common_utilities.log_message('     ' || rpad('To Date', 30) || ' - ' || p_to_date);
1916       msd_dem_common_utilities.log_message('     ' || rpad('Shipment History', 30) || ' - ' || to_char(p_shipment_data));
1917       msd_dem_common_utilities.log_message('     ' || rpad('Usage History', 30) || ' - ' || to_char(p_usage_data));
1918       msd_dem_common_utilities.log_message('     ' || rpad('Install Base under Contracts', 30) || ' - ' || to_char(p_install_base));
1919       msd_dem_common_utilities.log_message('     ' || rpad('Sales Forecast', 30) || ' - ' || to_char(p_sales_forecast));
1920       msd_dem_common_utilities.log_message('     ' || rpad('Auto Run Download', 30) || ' - ' || to_char(p_auto_run_download));
1921 
1922       msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
1923       msd_dem_common_utilities.log_message ('');
1924       msd_dem_common_utilities.log_message ('');
1925 
1926       /* Log the optional input parameters to the output file */
1927       msd_dem_common_utilities.log_debug('----------------------------------Input Parameters - Begin------------------------------------------');
1928 
1929       msd_dem_common_utilities.log_debug('     ' || rpad('Check Interval', 30) || ' - ' || to_char(p_check_interval));
1930       msd_dem_common_utilities.log_debug('     ' || rpad('Time Out', 30) || ' - ' || p_time_out);
1931       msd_dem_common_utilities.log_debug('     ' || rpad('Synchronous', 30) || ' - ' || to_char(p_synchronous));
1932       msd_dem_common_utilities.log_debug('     ' || rpad('Custom Usage History', 30) || ' - ' || p_custom_usage_hist_view);
1933       msd_dem_common_utilities.log_debug('     ' || rpad('Custom Install Base under Contracts', 30) || ' - ' || p_custom_ibuc_hist_view);
1934       msd_dem_common_utilities.log_debug('     ' || rpad('Custom Sales Forecast', 30) || ' - ' || p_custom_sales_fcst_view);
1935       msd_dem_common_utilities.log_debug('     ' || rpad('Custom Download Workflow', 30) || ' - ' || p_custom_download_workflow);
1936 
1937       msd_dem_common_utilities.log_debug('-----------------------------------Input Parameters - End-------------------------------------------');
1938       msd_dem_common_utilities.log_debug ('');
1939       msd_dem_common_utilities.log_debug ('');
1940 
1941 
1942       var_retcode := 0;
1943 
1944       /* Validate Input Parameters */
1945       msd_dem_common_utilities.log_message('------------------------------Validate Input Parameters - Begin-------------------------------------');
1946 
1947       /* 1 - Only 12.1 Source and above are supported for collection */
1948       /* 2 - A Legacy Instance Type should be allowed only for Install Base under Contracts and Sales Forecast */
1949 
1950          /* Get Instance Info */
1951          msd_dem_common_utilities.get_instance_info (
1952          							var_errbuf,
1953          			                var_retcode,
1954          			                var_instance_code,
1955          			                var_apps_ver,
1956          			                var_dgmt,
1957          			                var_instance_type,
1958          			                p_sr_instance_id);
1959          IF (var_retcode = -1)
1960          THEN
1961             retcode := -1;
1962             errbuf := substr(SQLERRM,1,150);
1963             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1964             msd_dem_common_utilities.log_message ('Error in call to msd_dem_common_utilities.get_instance_info');
1965             msd_dem_common_utilities.log_message (errbuf);
1966             RETURN;
1967          END IF;
1968 
1969          IF (var_instance_type <> 3 AND var_apps_ver <5)
1970          THEN
1971             retcode := -1;
1972             errbuf := 'Source Version ' || to_char(var_apps_ver) || ' is not supported';
1973             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1974             msd_dem_common_utilities.log_message (errbuf);
1975             RETURN;
1976          END IF;
1977 
1978          IF (var_instance_type = 3 AND (p_shipment_data = G_YES OR p_usage_data = G_YES))
1979          THEN
1980             retcode := -1;
1981             errbuf := 'This program does not support legacy load for Shipment and Usage History. Please use the respective self service options.';
1982             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1983             msd_dem_common_utilities.log_message (errbuf);
1984             RETURN;
1985          END IF;
1986 
1987          /* Get Instance DB Link */
1988          msd_dem_common_utilities.get_dblink (
1989 									var_errbuf,
1990 									var_retcode,
1991 									p_sr_instance_id,
1992 									g_dblink);
1993          IF (var_retcode = -1)
1994          THEN
1995             retcode := -1;
1996             errbuf := substr(SQLERRM,1,150);
1997             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1998             msd_dem_common_utilities.log_message ('Error in call to msd_dem_common_utilities.get_dblink');
1999             msd_dem_common_utilities.log_message (errbuf);
2000             RETURN;
2001          END IF;
2002 
2003       /* 3 - Atleast One series should be selected for collection */
2004 
2005          IF (p_shipment_data = G_NO AND p_usage_data = G_NO AND p_install_base = G_NO AND p_sales_forecast = G_NO)
2006          THEN
2007             retcode := -1;
2008             errbuf := 'No series selected for collection. Please select atleast one series for collection.';
2009             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2010             msd_dem_common_utilities.log_message (errbuf);
2011             RETURN;
2012          END IF;
2013 
2014 
2015       /* 4 - Date Range Checks */
2016 
2017          /* For Complete Collections, the fields history collection window, from date and to date should not be specified. If specified, display error and exit */
2018          IF (p_collection_method = 1 AND (p_collection_window IS NOT NULL OR p_from_date IS NOT NULL OR p_to_date IS NOT NULL))
2019          THEN
2020             retcode := -1;
2021             errbuf := 'For Collection Method - Complete, the date range filters should not be specified. If you want to run collection for a specific date range please select Net-change mode';
2022             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2023             msd_dem_common_utilities.log_message (errbuf);
2024             RETURN;
2025          END IF;
2026 
2027          /* For Net change, for Rolling type, the field history collection window should be specified. If not specified, log error and exit */
2028          IF (p_collection_method = 2 AND p_date_range_type = 2 AND p_collection_window IS NULL)
2029          THEN
2030             retcode := -1;
2031             errbuf := 'For Collection Method - Net Change and Date Range Type - Rolling, the field History Collection Window in mandatory.';
2032             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2033             msd_dem_common_utilities.log_message (errbuf);
2034             RETURN;
2035          END IF;
2036 
2037          /* For Net change, for Absolute type, the fields from date and to date should be specified. If not specified, log error and exit */
2038          IF (p_collection_method = 2 AND p_date_range_type = 1 AND (p_from_date IS NULL OR p_to_date IS NULL))
2039          THEN
2040             retcode := -1;
2041             errbuf := 'For Collection Method - Net Change and Date Range Type - Absolute, the fields From Date and To Date are mandatory.';
2042             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2043             msd_dem_common_utilities.log_message (errbuf);
2044             RETURN;
2045          END IF;
2046 
2047          /* For Net change, for Rolling type, the fields from date and to date should not be specified. If specified, log error and exit */
2048          IF (p_collection_method = 2 AND p_date_range_type = 2 AND (p_from_date IS NOT NULL OR p_to_date IS NOT NULL))
2049          THEN
2050             retcode := -1;
2051             errbuf := 'For Collection Method - Net Change and Date Range Type - Rolling, the fields From Date and To Date should not be specified. Only the field History Collection Window should be specified';
2052             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2053             msd_dem_common_utilities.log_message (errbuf);
2054             RETURN;
2055          END IF;
2056 
2057          /* For Net change, for Absolute type, the field history collection window should not be specified. If specified, log error and exit */
2058          IF (p_collection_method = 2 AND p_date_range_type = 1 AND p_collection_window IS NOT NULL)
2059          THEN
2060             retcode := -1;
2061             errbuf := 'For Collection Method - Net Change and Date Range Type - Absolute, the field History Collection Window should not be specified. Only the fields From Date and To Date should be specified';
2062             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2063             msd_dem_common_utilities.log_message (errbuf);
2064             RETURN;
2065          END IF;
2066 
2067 
2068       /* 5 - Profile MSD_DEM Schema should be set */
2069 
2070          /* Profile MSD_DEM Schema should be set */
2071          IF (G_SCHEMA IS NULL)
2072          THEN
2073             retcode := -1;
2074             errbuf := 'Profile MSD_DEM Schema is not set.';
2075             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2076             msd_dem_common_utilities.log_message (errbuf);
2077             RETURN;
2078          END IF;
2079 
2080       msd_dem_common_utilities.log_message('-------------------------------Validate Input Parameters - End--------------------------------------');
2081       msd_dem_common_utilities.log_message ('');
2082       msd_dem_common_utilities.log_message ('');
2083 
2084 
2085       /* Get Date Range for Collection */
2086       msd_dem_common_utilities.log_message('--------------------------------Collection Date Range - Begin---------------------------------------');
2087 
2088          /* If Complete, default the from the to dates */
2089          IF (p_collection_method = 1)
2090          THEN
2091 
2092             var_from_date := to_date('01/01/1000', 'DD/MM/YYYY');
2093             var_to_date   := to_date('31/12/4000', 'DD/MM/YYYY');
2094 
2095          ELSE   /* Net Change */
2096 
2097             /* Absolute */
2098             IF (p_date_range_type = 1)
2099             THEN
2100 
2101                var_from_date := fnd_date.canonical_to_date (p_from_date);
2102                var_to_date   := fnd_date.canonical_to_date (p_to_date);
2103 
2104                /* For Net change, for Absolute type, the field from date should be less than or equal to date  If not, log error and exit */
2105                   IF (var_from_date > var_to_date)
2106                   THEN
2107                      retcode := -1;
2108                      errbuf := 'From Date should not be greater than To Date';
2109                      msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2110                      msd_dem_common_utilities.log_message (errbuf);
2111                      RETURN;
2112                   END IF;
2113 
2114             ELSE /* Rolling */
2115 
2116                /* For Net change, for Rolling type, the field history collection window should be greater than zero.If not, log error and exit */
2117                   IF (p_collection_window < 1)
2118                   THEN
2119                      retcode := -1;
2120                      errbuf := 'History Collection Window must be a positive number';
2121                      msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2122                      msd_dem_common_utilities.log_message (errbuf);
2123                      RETURN;
2124                   END IF;
2125 
2126                var_to_date   := trunc(sysdate);
2127                var_from_date := var_to_date - p_collection_window + 1;
2128 
2129             END IF;
2130          END IF;
2131 
2132       msd_dem_common_utilities.log_message('     ' || rpad('From Date (MM/DD/YYYY)', 30) || ' - ' || to_char(var_from_date, 'MM/DD/YYYY'));
2133       msd_dem_common_utilities.log_message('     ' || rpad('To Date (MM/DD/YYYY)', 30) || ' - ' || to_char(var_to_date, 'MM/DD/YYYY'));
2134 
2135       msd_dem_common_utilities.log_message('---------------------------------Collection Date Range - End----------------------------------------');
2136       msd_dem_common_utilities.log_message ('');
2137       msd_dem_common_utilities.log_message ('');
2138 
2139 
2140       /* Truncate all the staging tables */
2141          truncate_spf_staging(var_errbuf, var_retcode);
2142          IF (var_retcode = -1)
2143          THEN
2144             retcode := -1;
2145             errbuf := var_errbuf;
2146             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2147             msd_dem_common_utilities.log_message ('Error in call to truncate_spf_staging');
2148             RETURN;
2149          END IF;
2150 
2151       /* Call the main program to run the spf data collection in various stages */
2152          msd_dem_common_utilities.log_debug ('Calling msd_spf_collect_history_data.launch_spf_data_collection...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2153          launch_spf_data_collection (var_errbuf,
2154                                      var_retcode,
2155                                      var_runtime,
2156                                      p_sr_instance_id,
2157                                      p_collection_group,
2158                                      p_collection_method,
2159                                      p_date_range_type,
2160                                      p_collection_window,
2161                                      p_from_date,
2162                                      p_to_date,
2163                                      var_from_date,
2164                                      var_to_date,
2165                                      p_shipment_data,
2166                                      p_usage_data,
2167                                      p_install_base,
2168                                      p_sales_forecast,
2169                                      p_auto_run_download,
2170                                      G_NO,
2171                                      null,
2172                                      null,
2173                                      null,
2174                                      null,
2175                                      p_check_interval,
2176                                      p_time_out,
2177                                      p_synchronous,
2178                                      p_custom_usage_hist_view,
2179                                      p_custom_ibuc_hist_view,
2180                                      p_custom_sales_fcst_view,
2181                                      p_custom_download_workflow);
2182          IF (var_retcode = -1)
2183          THEN
2184             retcode := -1;
2185             errbuf := var_errbuf;
2186             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_spf_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2187             msd_dem_common_utilities.log_message ('Error in call to launch_spf_data_collection');
2188             RETURN;
2189          END IF;
2190 
2191       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.collect_spf_data...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2192 
2193    END  COLLECT_SPF_DATA;
2194 
2195 
2196 
2197 
2198    PROCEDURE LAUNCH_DOWNLOAD (
2199       			errbuf						OUT NOCOPY 	VARCHAR2,
2200       			retcode						OUT NOCOPY 	VARCHAR2,
2201       			p_workflow_lkup_code		IN			VARCHAR2,
2202       			p_auto_run_download			IN			NUMBER,
2203       			p_check_interval			IN			NUMBER	 DEFAULT 60,
2204       			p_time_out					IN			NUMBER	 DEFAULT 18000 )
2205    IS
2206 
2207       var_user_id						NUMBER			DEFAULT NULL;
2208       var_sql							VARCHAR2(1000)	DEFAULT NULL;
2209       var_user_name						VARCHAR2(100)	DEFAULT NULL;
2210       var_user_password					VARCHAR2(255)	DEFAULT NULL;
2211       var_url							VARCHAR2(1000)	DEFAULT NULL;
2212       var_ret_val						VARCHAR2(255)	DEFAULT NULL;
2213       var_wf_schema_name				VARCHAR2(255)	DEFAULT NULL;
2214 
2215    BEGIN
2216 
2217       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.launch_download...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2218 
2219       /* Log the input parameters to the log file */
2220       msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
2221 
2222       msd_dem_common_utilities.log_message('     ' || rpad('Workflow Lookup Code', 30) || ' - ' || p_workflow_lkup_code);
2223       msd_dem_common_utilities.log_message('     ' || rpad('Auto Run Download', 30) || ' - ' || to_char(p_auto_run_download));
2224 
2225       msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
2226       msd_dem_common_utilities.log_message ('');
2227       msd_dem_common_utilities.log_message ('');
2228 
2229       /* Log the optional input parameters to the output file */
2230       msd_dem_common_utilities.log_debug('----------------------------------Input Parameters - Begin------------------------------------------');
2231 
2232       msd_dem_common_utilities.log_debug('     ' || rpad('Check Interval', 30) || ' - ' || to_char(p_check_interval));
2233       msd_dem_common_utilities.log_debug('     ' || rpad('Time Out', 30) || ' - ' || p_time_out);
2234 
2235       msd_dem_common_utilities.log_debug('-----------------------------------Input Parameters - End-------------------------------------------');
2236       msd_dem_common_utilities.log_debug ('');
2237       msd_dem_common_utilities.log_debug ('');
2238 
2239       IF (p_auto_run_download = G_NO)
2240       THEN
2241          msd_dem_common_utilities.log_message('Auto Run Download is set to No. Exiting without launching the download workflow.');
2242          RETURN;
2243       END IF;
2244 
2245       /* Get the dm user id */
2246          var_user_id := to_number(msd_dem_common_utilities.get_app_id_text ('MSD_DEM_DEMANTRA_OBJECT_ID', 'COMP_DM', 1, 'user_id'));
2247          IF (var_user_id IS NULL)
2248          THEN
2249             retcode := -1;
2250             errbuf := 'Unable to get dm component user';
2251             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_download - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2252             msd_dem_common_utilities.log_message (errbuf);
2253             RETURN;
2254          ELSE
2255             msd_dem_common_utilities.log_debug('User Id - ' || to_char(var_user_id));
2256          END IF;
2257 
2258       /* Get the user name and password */
2259          var_sql := 'SELECT user_name, password FROM ' || g_schema || '.user_id WHERE user_id = ' || to_char(var_user_id);
2260 
2261          msd_dem_common_utilities.log_debug('User details query - ');
2262          msd_dem_common_utilities.log_debug(var_sql);
2263          EXECUTE IMMEDIATE var_sql INTO var_user_name, var_user_password;
2264 
2265          IF (var_user_name IS NULL or var_user_password IS NULL)
2266          THEN
2267             retcode := -1;
2268             errbuf := 'Unable to get user details';
2269             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_download - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2270             msd_dem_common_utilities.log_message (errbuf);
2271             RETURN;
2272          END IF;
2273 
2274       /* Get base Demantra URL */
2275          var_url := FND_PROFILE.VALUE('MSD_DEM_HOST_URL');
2276 
2277          IF (var_url IS NULL)
2278          THEN
2279             retcode := -1;
2280             errbuf := 'Unable to get host url';
2281             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_download - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2282             msd_dem_common_utilities.log_message (errbuf);
2283             RETURN;
2284          ELSE
2285             msd_dem_common_utilities.log_debug('Host URL - <' || var_url || '>');
2286          END IF;
2287 
2288       /* Get the workflow schema name */
2289          var_wf_schema_name := trim(msd_dem_common_utilities.get_app_id_text ('MSD_DEM_DEMANTRA_OBJECT_ID', p_workflow_lkup_code, 1, 'schema_name'));
2290 
2291          IF (var_wf_schema_name IS NULL)
2292          THEN
2293             retcode := -1;
2294             errbuf := 'Unable to get workflow schema name';
2295             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_download - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2296             msd_dem_common_utilities.log_message (errbuf);
2297             RETURN;
2298          END IF;
2299 
2300       /* Build the workflow server sql */
2301          var_sql := 'SELECT utl_http.request(''' || var_url || '/WorkflowServer?action=run_proc&user=' || var_user_name || '&password=' || var_user_password
2302                       || '&schema=' || replace(var_wf_schema_name, ' ', '%20') ||'&sync=no'') FROM dual';
2303          msd_dem_common_utilities.log_debug('Workflow Calling sql - ');
2304          msd_dem_common_utilities.log_debug(var_sql);
2305 
2306          msd_dem_common_utilities.log_message ('Launching download workflow - ' ||  var_wf_schema_name);
2307          BEGIN
2308 
2309             EXECUTE IMMEDIATE var_sql INTO var_ret_val;
2310 
2311             IF (to_number(var_ret_val) < 0)
2312             THEN
2313 
2314                retcode := -1;
2315                errbuf := var_ret_val;
2316                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_download - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2317                msd_dem_common_utilities.log_message ('Failed to launch download workflow');
2318                msd_dem_common_utilities.log_message (errbuf);
2319                RETURN;
2320 
2321             ELSE
2322 
2323                msd_dem_common_utilities.log_message('Launched workflow successfully.');
2324                msd_dem_common_utilities.log_message('Workflow Process Id - ' || to_number(var_ret_val));
2325                msd_dem_common_utilities.log_message('Please check the workflow process status from workflow manager.');
2326 
2327             END IF;
2328 
2329          EXCEPTION
2330             WHEN OTHERS THEN
2331                retcode := -1;
2332                errbuf := substr(SQLERRM,1,150);
2333                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_download - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2334                msd_dem_common_utilities.log_message ('Error while launching download workflow');
2335                msd_dem_common_utilities.log_message (errbuf);
2336                RETURN;
2337          END;
2338 
2339       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.launch_download...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2340 
2341    EXCEPTION
2342       WHEN OTHERS THEN
2343          retcode := -1;
2344          errbuf := substr(SQLERRM,1,150);
2345          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.launch_download - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2346          msd_dem_common_utilities.log_message (errbuf);
2347          RETURN;
2348 
2349    END  LAUNCH_DOWNLOAD;
2350 
2351 
2352     PROCEDURE TRUNCATE_SPF_CMRO_STAGING (
2353                 errbuf						OUT NOCOPY 	VARCHAR2,
2354       			retcode						OUT NOCOPY 	VARCHAR2 )
2355     IS
2356 
2357       var_retval				BOOLEAN			DEFAULT NULL;
2358       var_dummy1				VARCHAR2(50)	DEFAULT NULL;
2359       var_dummy2				VARCHAR2(50)	DEFAULT NULL;
2360       var_msd_schema_name		VARCHAR2(50)	DEFAULT NULL;
2361 
2362       var_table_name			VARCHAR2(100)	DEFAULT NULL;
2363       var_errbuf                VARCHAR2(1000)  DEFAULT NULL;
2364       var_retcode               VARCHAR2(10)    DEFAULT NULL;
2365 
2366     BEGIN
2367 
2368         msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.truncate_spf_cmro_staging...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2369 
2370         truncate_spf_staging(var_errbuf, var_retcode);
2371         IF (var_retcode = -1) THEN
2372             retcode := -1;
2373             errbuf := var_errbuf;
2374             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.truncate_spf_cmro_staging - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2375             msd_dem_common_utilities.log_message ('Error in call to truncate_spf_staging');
2376             RETURN;
2377         END IF;
2378 
2379         /* Get the MSD schema name */
2380         var_retval := fnd_installation.get_app_info ('MSD', var_dummy1, var_dummy2, var_msd_schema_name);
2381 
2382         msd_dem_common_utilities.log_debug('     ' || rpad('MSD Schema Name', 30) || ' - ' || var_msd_schema_name);
2383         msd_dem_common_utilities.log_debug('     ' || rpad('Demantra Schema Name', 30) || ' - ' || g_schema);
2384         msd_dem_common_utilities.log_debug ('');
2385         msd_dem_common_utilities.log_debug ('');
2386 
2387         msd_dem_common_utilities.log_message ('');
2388         msd_dem_common_utilities.log_message ('');
2389         msd_dem_common_utilities.log_message('Truncating MSD Staging Tables...');
2390 
2391         var_table_name := var_msd_schema_name || '.' || G_CMRO_WO_HIST_TABLE;
2392         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2393         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2394 
2395         var_table_name := var_msd_schema_name || '.' || G_CMRO_MTL_USG_TABLE;
2396         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2397         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2398 
2399         var_table_name := var_msd_schema_name || '.' || G_CMRO_RES_USG_TABLE;
2400         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2401         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2402 
2403         var_table_name := var_msd_schema_name || '.MSD_SPF_CMRO_BOM';
2404         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2405         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2406 
2407         msd_dem_common_utilities.log_debug ('');
2408         msd_dem_common_utilities.log_debug ('');
2409 
2410         msd_dem_common_utilities.log_message('Truncating Demantra Staging Tables...');
2411 
2412         var_table_name := g_schema || '.BIIO_SPF_CMRO_DATA';
2413         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2414         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2415 
2416         var_table_name := g_schema || '.BIIO_SPF_VISIT_TYPE';
2417         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2418         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2419 
2420         var_table_name := g_schema || '.BIIO_SPF_VISIT_STAGE_TYPE';
2421         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2422         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2423 
2424         --var_table_name := g_schema || '.BIIO_SPF_MAINT_TYPE';
2425         --msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2426         --EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2427 
2428         msd_dem_common_utilities.log_debug ('');
2429         msd_dem_common_utilities.log_debug ('');
2430 
2431         msd_dem_common_utilities.log_message('Truncating Demantra Staging ERR Tables...');
2432 
2433         var_table_name := g_schema || '.BIIO_SPF_CMRO_DATA_ERR';
2434         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2435         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2436 
2437         var_table_name := g_schema || '.BIIO_SPF_VISIT_TYPE_ERR';
2438         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2439         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2440 
2441         var_table_name := g_schema || '.BIIO_SPF_VISIT_STAGE_TYPE_ERR';
2442         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2443         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2444 
2445         --var_table_name := g_schema || '.BIIO_SPF_MAINT_TYPE_ERR';
2446         --msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2447         --EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2448 
2449         msd_dem_common_utilities.log_message ('');
2450         msd_dem_common_utilities.log_message ('');
2451         msd_dem_common_utilities.log_debug ('');
2452         msd_dem_common_utilities.log_debug ('');
2453 
2454         msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.truncate_spf_cmro_staging...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2455 
2456     EXCEPTION
2457     WHEN OTHERS THEN
2458         retcode := -1;
2459         errbuf := substr(SQLERRM,1,150);
2460         msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.truncate_spf_cmro_staging - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2461         msd_dem_common_utilities.log_message (errbuf);
2462         RETURN;
2463 
2464     END TRUNCATE_SPF_CMRO_STAGING;
2465 
2466 
2467    PROCEDURE TRUNCATE_SPF_STAGING (
2468                 errbuf						OUT NOCOPY 	VARCHAR2,
2469       			retcode						OUT NOCOPY 	VARCHAR2 )
2470    IS
2471 
2472       var_retval				BOOLEAN			DEFAULT NULL;
2473       var_dummy1				VARCHAR2(50)	DEFAULT NULL;
2474       var_dummy2				VARCHAR2(50)	DEFAULT NULL;
2475       var_msd_schema_name		VARCHAR2(50)	DEFAULT NULL;
2476 
2477       var_table_name			VARCHAR2(100)	DEFAULT NULL;
2478 
2479    BEGIN
2480 
2481       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.truncate_spf_staging...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2482 
2483       /* Get the MSD schema name */
2484       var_retval := fnd_installation.get_app_info ('MSD', var_dummy1, var_dummy2, var_msd_schema_name);
2485 
2486       msd_dem_common_utilities.log_debug('     ' || rpad('MSD Schema Name', 30) || ' - ' || var_msd_schema_name);
2487       msd_dem_common_utilities.log_debug('     ' || rpad('Demantra Schema Name', 30) || ' - ' || g_schema);
2488       msd_dem_common_utilities.log_debug ('');
2489       msd_dem_common_utilities.log_debug ('');
2490 
2491       msd_dem_common_utilities.log_message ('');
2492       msd_dem_common_utilities.log_message ('');
2493       msd_dem_common_utilities.log_message('Truncating MSD Staging Tables...');
2494 
2495       var_table_name := var_msd_schema_name || '.MSD_SPF_ST_SPARE_USAGE';
2496       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2497       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2498 
2499       var_table_name := var_msd_schema_name || '.MSD_SPF_ITEM_SUPERSESSION';
2500       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2501       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2502 
2503       var_table_name := var_msd_schema_name || '.MSD_SPF_MODEL_BOM_COMPONENTS';
2504       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2505       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2506 
2507       var_table_name := var_msd_schema_name || '.MSD_SPF_MODEL_ORGS';
2508       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2509       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2510 
2511       var_table_name := var_msd_schema_name || '.MSD_SPF_MFG_BOM_TEMP';
2512       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2513       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2514 
2515       msd_dem_common_utilities.log_debug ('');
2516       msd_dem_common_utilities.log_debug ('');
2517 
2518       msd_dem_common_utilities.log_message('Truncating Demantra Staging Tables...');
2519 
2520       var_table_name := g_schema || '.BIIO_SPF_DATA';
2521       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2522       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2523 
2524       var_table_name := g_schema || '.BIIO_SPF_SALES_FCST_DATA';
2525       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2526       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2527 
2528       var_table_name := g_schema || '.BIIO_SPF_SPARES_HIST_DATA';
2529       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2530       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2531 
2532       var_table_name := g_schema || '.BIIO_SPF_BASE_MODEL';
2533       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2534       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2535 
2536       var_table_name := g_schema || '.BIIO_SPF_CHILD';
2537       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2538       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2539 
2540       var_table_name := g_schema || '.BIIO_SPF_LATEST_REVISION';
2541       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2542       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2543 
2544       var_table_name := g_schema || '.BIIO_SPF_POPULATION';
2545       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2546       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2547 
2548       var_table_name := g_schema || '.BIIO_SPF_LEVEL';
2549       msd_dem_common_utilities.log_debug('Deleteing data from table ' || var_table_name);
2550       EXECUTE IMMEDIATE 'DELETE FROM ' || var_table_name;
2551 
2552       var_table_name := g_schema || '.BIIO_PURGE_IB_HISTORY';
2553       msd_dem_common_utilities.log_debug('Deleteing data from table ' || var_table_name);
2554       EXECUTE IMMEDIATE 'DELETE FROM ' || var_table_name;
2555 
2556       var_table_name := g_schema || '.BIIO_PURGE_SPARE_HISTORY';
2557       msd_dem_common_utilities.log_debug('Deleteing data from table ' || var_table_name);
2558       EXECUTE IMMEDIATE 'DELETE FROM ' || var_table_name;
2559 
2560       var_table_name := g_schema || '.T_SRC_SALES_TMPL';
2561       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2562       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2563 
2564       var_table_name := g_schema || '.T_SRC_LOC_TMPL';
2565       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2566       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2567 
2568       var_table_name := g_schema || '.T_SRC_ITEM_TMPL';
2569       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2570       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2571 
2572       msd_dem_common_utilities.log_debug ('');
2573       msd_dem_common_utilities.log_debug ('');
2574 
2575       msd_dem_common_utilities.log_message('Truncating Demantra Staging ERR Tables...');
2576 
2577       var_table_name := g_schema || '.BIIO_SPF_DATA_ERR';
2578       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2579       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2580 
2581       var_table_name := g_schema || '.BIIO_SPF_SALES_FCST_DATA_ERR';
2582       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2583       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2584 
2585       var_table_name := g_schema || '.BIIO_SPF_SPARES_HIST_DATA_ERR';
2586       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2587       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2588 
2589       var_table_name := g_schema || '.BIIO_SPF_BASE_MODEL_ERR';
2590       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2591       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2592 
2593       var_table_name := g_schema || '.BIIO_SPF_CHILD_ERR';
2594       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2595       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2596 
2597       var_table_name := g_schema || '.BIIO_SPF_LATEST_REVISION_ERR';
2598       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2599       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2600 
2601       var_table_name := g_schema || '.BIIO_SPF_POPULATION_ERR';
2602       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2603       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2604 
2605       var_table_name := g_schema || '.BIIO_SPF_LEVEL_ERR';
2606       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2607       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2608 
2609       var_table_name := g_schema || '.BIIO_PURGE_IB_HISTORY_ERR';
2610       msd_dem_common_utilities.log_debug('Deleteing data from table ' || var_table_name);
2611       EXECUTE IMMEDIATE 'DELETE FROM ' || var_table_name;
2612 
2613       var_table_name := g_schema || '.BIIO_PURGE_SPARE_HISTORY_ERR';
2614       msd_dem_common_utilities.log_debug('Deleteing data from table ' || var_table_name);
2615       EXECUTE IMMEDIATE 'DELETE FROM ' || var_table_name;
2616 
2617       var_table_name := g_schema || '.T_SRC_SALES_TMPL_ERR';
2618       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2619       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2620 
2621       var_table_name := g_schema || '.T_SRC_LOC_TMPL_ERR';
2622       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2623       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2624 
2625       var_table_name := g_schema || '.T_SRC_ITEM_TMPL_ERR';
2626       msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
2627       EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
2628 
2629       msd_dem_common_utilities.log_message ('');
2630       msd_dem_common_utilities.log_message ('');
2631       msd_dem_common_utilities.log_debug ('');
2632       msd_dem_common_utilities.log_debug ('');
2633 
2634       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.truncate_spf_staging...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2635 
2636    EXCEPTION
2637       WHEN OTHERS THEN
2638          retcode := -1;
2639          errbuf := substr(SQLERRM,1,150);
2640          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.truncate_spf_staging - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2641          msd_dem_common_utilities.log_message (errbuf);
2642          RETURN;
2643 
2644    END TRUNCATE_SPF_STAGING;
2645 
2646 
2647 
2648 
2649    PROCEDURE COLLECT_INSTALL_BASE_UC_DATA (
2650    				errbuf						OUT NOCOPY 	VARCHAR2,
2651       			retcode						OUT NOCOPY 	VARCHAR2,
2652       			p_sr_instance_id			IN         	NUMBER,
2653       			p_collection_method     	IN         	NUMBER,
2654       			p_from_date					IN	   		VARCHAR2,
2655       			p_to_date					IN	   		VARCHAR2,
2656       			p_custom_ibuc_hist_view		IN			VARCHAR2 DEFAULT NULL )
2657    IS
2658 
2659       var_errbuf				VARCHAR2(2000)	DEFAULT		NULL;
2660       var_retcode				VARCHAR2(100)	DEFAULT		0;
2661 
2662       var_series_name			VARCHAR2(250)	DEFAULT 	NULL;
2663       var_series_type			NUMBER			DEFAULT     NULL;
2664       var_identifier			VARCHAR2(30)	DEFAULT     NULL;
2665       var_custom_view_name		VARCHAR2(30)	DEFAULT     NULL;
2666       var_ps_view_name          VARCHAR2(30)	DEFAULT     NULL;
2667       var_is_custom				NUMBER(1)		DEFAULT     NULL;
2668 
2669       var_key_values	   		VARCHAR2(4000)	DEFAULT 	NULL;
2670       var_large_sql             VARCHAR2(32000) DEFAULT		NULL;
2671 
2672       var_from_date_dt			DATE			DEFAULT		NULL;
2673       var_to_date_dt			DATE			DEFAULT		NULL;
2674 
2675       CURSOR c_get_series_info (p_series_id		NUMBER)
2676       IS
2677          SELECT
2678             series_name,
2679             series_type,
2680             identifier,
2681             custom_view_name,
2682             ps_view_name
2683          FROM msd_dem_series
2684          WHERE series_id = p_series_id;
2685 
2686 
2687    BEGIN
2688 
2689       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.collect_install_base_uc_data...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2690 
2691       /* Log the input parameters to the log file */
2692       msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
2693 
2694       msd_dem_common_utilities.log_message('     ' || rpad('Source Instance ID', 30) || ' - ' || to_char(p_sr_instance_id));
2695       msd_dem_common_utilities.log_message('     ' || rpad('Collection Method', 30) || ' - ' || to_char(p_collection_method));
2696       msd_dem_common_utilities.log_message('     ' || rpad('From Date (MM/DD/YYYY)', 30) || ' - ' || p_from_date);
2697       msd_dem_common_utilities.log_message('     ' || rpad('To Date (MM/DD/YYYY)', 30) || ' - ' || p_to_date);
2698 
2699       msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
2700       msd_dem_common_utilities.log_message ('');
2701       msd_dem_common_utilities.log_message ('');
2702 
2703       /* Log the optional input parameters to the output file */
2704       msd_dem_common_utilities.log_debug('----------------------------------Input Parameters - Begin------------------------------------------');
2705 
2706       msd_dem_common_utilities.log_debug('     ' || rpad('Custom Install Base under Contracts', 30) || ' - ' || p_custom_ibuc_hist_view);
2707 
2708       msd_dem_common_utilities.log_debug('-----------------------------------Input Parameters - End-------------------------------------------');
2709       msd_dem_common_utilities.log_debug ('');
2710       msd_dem_common_utilities.log_debug ('');
2711 
2712 
2713       /* For a weekly or monthly Demantra schema, change the from date to start bucket date
2714          and to date to end bucket date */
2715       IF( lower(msd_dem_common_utilities.dm_time_level) <> 'day' AND p_collection_method <> 1)
2716       THEN
2717 
2718          /* Get bucket start date for start date */
2719          SELECT start_date
2720             INTO var_from_date_dt
2721             FROM msd_dem_dates
2722             WHERE fnd_date.canonical_to_date(p_from_date) BETWEEN start_date AND end_date;
2723 
2724          /* Get bucket end date for end date */
2725          SELECT end_date
2726             INTO var_to_date_dt
2727             FROM msd_dem_dates
2728             WHERE fnd_date.canonical_to_date(p_to_date) BETWEEN start_date AND end_date;
2729 
2730 
2731       ELSE /* Daily system or complete refresh - assign the same dates */
2732 
2733          var_from_date_dt := fnd_date.canonical_to_date(p_from_date);
2734          var_to_date_dt   := fnd_date.canonical_to_date(p_to_date);
2735 
2736       END IF;
2737 
2738       var_retcode := 0;
2739 
2740       /* Get the series info for Install Base under Contracts */
2741          OPEN c_get_series_info (G_INSTALL_BASE_UC_SERIES_ID);
2742          FETCH c_get_series_info INTO var_series_name,
2743                                       var_series_type,
2744                                       var_identifier,
2745                                       var_custom_view_name,
2746                                       var_ps_view_name;
2747          CLOSE c_get_series_info;
2748          IF (   var_series_name IS NULL
2749              OR var_series_type IS NULL
2750              OR var_identifier IS NULL
2751              OR var_ps_view_name IS NULL)
2752          THEN
2753             retcode := -1;
2754             errbuf := 'Unable to get series information for Install Base under Contracts from table msd_dem_series';
2755             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_install_base_uc_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2756             msd_dem_common_utilities.log_message (errbuf);
2757             RETURN;
2758          END IF;
2759 
2760           /* Check if custom view is specified for the series */
2761           IF (var_custom_view_name IS NULL)
2762           THEN
2763              var_is_custom := 0;
2764           ELSE
2765              var_is_custom := 1;
2766           END IF;
2767 
2768       /* Build key value pairs */
2769          IF (p_collection_method = 1)
2770          THEN
2771             var_key_values := '$C_TIME_CLAUSE#   $';
2772          ELSE
2773             var_key_values := '$C_TIME_CLAUSE#' || ' AND ibuc.sdate between to_date(''' || to_char(var_from_date_dt, 'MM/DD/YYYY') || ''', ''MM/DD/YYYY'') '
2774                                                                        || ' and to_date(''' || to_char(var_to_date_dt, 'MM/DD/YYYY') || ''', ''MM/DD/YYYY'') $';
2775          END IF;
2776 
2777          var_key_values := var_key_values || 'C_DEM_SCHEMA#' || g_schema
2778                                           || '$C_SR_INSTANCE_ID#' || to_char(p_sr_instance_id) || '$';
2779 
2780       /* Get the query */
2781          msd_dem_query_utilities.get_query3 (
2782          							var_retcode,
2783          							var_large_sql,
2784          							var_identifier,
2785          							null,
2786          							var_key_values,
2787          							var_is_custom,
2788          							var_custom_view_name,
2789          							var_series_type,
2790          							var_ps_view_name);
2791          IF (var_retcode = -1)
2792          THEN
2793             retcode := -1;
2794             errbuf := 'Error in call to msd_dem_query_utilities.get_query3';
2795             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_install_base_uc_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2796             msd_dem_common_utilities.log_message (errbuf);
2797             RETURN;
2798          END IF;
2799 
2800          msd_dem_common_utilities.log_debug ('Query - ');
2801          msd_dem_common_utilities.log_debug (var_large_sql);
2802 
2803       /* Execute the query */
2804          msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2805          BEGIN
2806             EXECUTE IMMEDIATE var_large_sql;
2807          EXCEPTION
2808             WHEN OTHERS THEN
2809                retcode := -1;
2810                errbuf := substr(SQLERRM,1,150);
2811                msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_install_base_uc_data - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2812                msd_dem_common_utilities.log_message ('Error while executing query');
2813                msd_dem_common_utilities.log_message (errbuf);
2814                RETURN;
2815          END;
2816          msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2817 
2818 
2819       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.collect_install_base_uc_data...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2820 
2821    EXCEPTION
2822       WHEN OTHERS THEN
2823          retcode := -1;
2824          errbuf := substr(SQLERRM,1,150);
2825          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_install_base_uc_data - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2826          msd_dem_common_utilities.log_message (errbuf);
2827          RETURN;
2828 
2829    END COLLECT_INSTALL_BASE_UC_DATA;
2830 
2831 
2832 
2833 
2834    PROCEDURE POPULATE_STAGING_TABLE (
2835    				errbuf						OUT NOCOPY 	VARCHAR2,
2836    				retcode						OUT NOCOPY 	VARCHAR2,
2837       			p_entity_name		IN		VARCHAR2,
2838       			p_sr_instance_id	IN		NUMBER,
2839                 p_key_value_pairs   IN      VARCHAR2 DEFAULT NULL )
2840    IS
2841       var_is_present						NUMBER			DEFAULT NULL;
2842       var_key_value_pairs					VARCHAR2(500)	DEFAULT NULL;
2843    BEGIN
2844 
2845       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.populate_staging_table...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2846 
2847       /* Log the input parameters to the log file */
2848       msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
2849 
2850       msd_dem_common_utilities.log_message('     ' || rpad('Entity Name', 30) || ' - ' || p_entity_name);
2851       msd_dem_common_utilities.log_message('     ' || rpad('Source Instance ID', 30) || ' - ' || to_char(p_sr_instance_id));
2852 
2853       msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
2854       msd_dem_common_utilities.log_message ('');
2855       msd_dem_common_utilities.log_message ('');
2856 
2857       /* Check that the given entity name is available in MSD_DEM_ENTITY_QUERIES */
2858          SELECT 1
2859             INTO var_is_present
2860             FROM msd_dem_entity_queries
2861             WHERE entity_name = p_entity_name;
2862 
2863       /* Pre-Process Begin */
2864 
2865       /* Pre-Process End */
2866 
2867       /* Execute the query */
2868          msd_dem_common_utilities.log_debug('Calling msd_dem_query_utilities.execute_query');
2869          msd_dem_query_utilities.execute_query (
2870          				errbuf,
2871          				retcode,
2872          				p_entity_name,
2873          				p_sr_instance_id,
2874          				p_key_value_pairs );
2875          IF (retcode = -1)
2876          THEN
2877             msd_dem_common_utilities.log_message ('Error(3) in msd_spf_collect_history_data.populate_staging_table - '
2878                                                    || 'Error in call to msd_dem_query_utilities.execute_query');
2879             msd_dem_common_utilities.log_message(errbuf);
2880             RETURN;
2881          ELSE
2882             msd_dem_common_utilities.log_message ('Query ' || p_entity_name || ' executed successfully.');
2883          END IF;
2884 
2885 
2886       /* Post-Process Begin */
2887 
2888       /* Post-Process End */
2889 
2890       retcode := 0;
2891       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.populate_staging_table...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2892 
2893    EXCEPTION
2894       WHEN OTHERS THEN
2895          retcode := -1;
2896          errbuf := substr(SQLERRM,1,150);
2897          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.populate_staging_table - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
2898          msd_dem_common_utilities.log_message (errbuf);
2899          RETURN;
2900 
2901    END POPULATE_STAGING_TABLE;
2902 
2903 
2904     PROCEDURE DERIVE_SPARE_SUPERSESSIONS (
2905         errbuf OUT NOCOPY VARCHAR2,
2906         retcode OUT NOCOPY VARCHAR2,
2907         p_sr_instance_id IN NUMBER
2908     ) IS
2909     x_category_set_id number := null;
2910     x_spf_master_org    number := null; -- Bug#12675064
2911     x_sql varchar2(2000) := null;
2912     x_run_seq number := null;
2913     type rctype is ref cursor; -- Bug#12675064
2914     rctvar rctype;
2915     x_item  varchar2(240) := null;
2916     BEGIN
2917         msd_dem_common_utilities.log_message('Begin - MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SPARE_SUPERSESSIONS');
2918 
2919         -- Bug#12675064
2920         x_category_set_id := MSC_UTIL.GET_SERVICE_ITEMS_CATSET_ID;
2921         x_sql := 'select to_number(parameter_value) from msd_dem_setup_parameters ' ||
2922                  ' where parameter_name like ''MSD_SPF_MASTER_ORG''';
2923         execute immediate x_sql into x_spf_master_org;
2924         msd_dem_common_utilities.log_debug(x_sql);
2925 
2926         if x_category_set_id is null then
2927             raise_application_error(-20001, 'Profile ''MSC: Category Set for Serviceable Items'' not set. Cannot proceed with derivation of supersession chains.');
2928         elsif x_spf_master_org is null then -- Bug#12675064
2929             raise_application_error(-20003, 'Profile ''MSD_SPF: Organization containing generic BOM for Service Parts Forecasting'' not set. Cannot proceed with derivation of supersession chains.');
2930         end if;
2931 
2932         /* truncate MSD_SPF_ITEM_SUPERSESSION table */
2933         msd_dem_common_utilities.log_message('Clearing MSD_SPF_ITEM_SUPERSESSION table');
2934         msd_dem_common_utilities.log_debug('Clearing MSD_SPF_ITEM_SUPERSESSION table');
2935 
2936         x_sql := 'delete from MSD_SPF_ITEM_SUPERSESSION';
2937         execute immediate x_sql;
2938         msd_dem_common_utilities.log_debug(x_sql);
2939 
2940         /* check for invalid supersession relations */ -- Bug#12434828
2941         msd_dem_common_utilities.log_message('Checking for invalid supersession relations');
2942         x_sql := 'select mi.item_name ' ||
2943                  '  from msc_item_substitutes mis, msc_items mi ' ||
2944                  '  where mis.plan_id = -1 and mis.sr_instance_id = ' || p_sr_instance_id ||
2945                  '  and mis.relationship_type = 8 ' ||
2946                  '  and exists (select 1 from msc_item_categories mic where mic.organization_id = ' || x_spf_master_org ||
2947                  '              and mic.sr_instance_id = ' || p_sr_instance_id || ' and mic.inventory_item_id = mis.higher_item_id and mic.category_set_id = ' || x_category_set_id || ' ) ' ||
2948                  '  and exists (select 1 from msc_item_categories mic where mic.organization_id = ' || x_spf_master_org ||
2949                  '              and mic.sr_instance_id = ' || p_sr_instance_id || ' and mic.inventory_item_id = mis.lower_item_id and mic.category_set_id = ' || x_category_set_id || ' ) ' ||
2950                  '  and mi.inventory_item_id = mis.lower_item_id group by mi.item_name having count(*) > 1';
2951 
2952         open rctvar for x_sql;
2953         loop
2954             fetch rctvar into x_item;
2955             EXIT WHEN rctvar%NOTFOUND;
2956             msd_dem_common_utilities.log_message(x_item);
2957         end loop;
2958 
2959         if (rctvar%ROWCOUNT > 0) then
2960             msd_dem_common_utilities.log_message(rctvar%ROWCOUNT || ' item(s) have invalid supersession relations. Each of the items listed above is superseeded by more than one spare revision.');
2961             raise_application_error(-20001, 'Invalid supersession relations found');
2962         end if;
2963         close rctvar;
2964 
2965         /* derive the supersession chain backwards */
2966         msd_dem_common_utilities.log_message('Deriving Supersession chains');
2967         msd_dem_common_utilities.log_debug('Start - Derivation - ' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') );
2968 
2969         /* get the spare rev at end of each chain */
2970         x_run_seq := 1;
2971         x_sql := 'INSERT INTO MSD_SPF_ITEM_SUPERSESSION (sequence_id, chain_id, inventory_item_id, superseeded_item_id, effective_date, disable_date, latest_rev) ' ||
2972                  ' (select ' || x_run_seq || ', rownum, higher_item_id, lower_item_id, effective_date, disable_date, higher_item_id ' ||
2973                  '  from msc_item_substitutes mis '||
2974                  '  where sr_instance_id = ' || p_sr_instance_id ||
2975                  '  and plan_id = -1 and relationship_type = 8 ' ||
2976                  '  and not exists (select 1 from msc_item_substitutes misx where misx.sr_instance_id = mis.sr_instance_id and misx.lower_item_id = mis.higher_item_id and misx.plan_id = -1 and misx.relationship_type = 8)' ||
2977                  '  and exists (select 1 from msc_item_categories mic where mic.organization_id = ' || x_spf_master_org || ' and mic.sr_instance_id = ' || p_sr_instance_id || -- Bug#12675064
2978                                     ' and mic.inventory_item_id = mis.higher_item_id and mic.category_set_id = ' || x_category_set_id || ' ))' ; -- Bug#12675064
2979         execute immediate x_sql;
2980 
2981         msd_dem_common_utilities.log_debug(x_sql);
2982         msd_dem_common_utilities.log_debug(SQL%ROWCOUNT || ' chains detected');
2983 
2984         /* Loop over and derive each chain backwards */
2985         loop
2986             x_run_seq := x_run_seq + 1;
2987             x_sql := 'INSERT INTO MSD_SPF_ITEM_SUPERSESSION (sequence_id, chain_id, inventory_item_id, superseeded_item_id, effective_date, disable_date, latest_rev) ' ||
2988                     ' (select ' || x_run_seq || ', sc.chain_id, mis.higher_item_id, mis.lower_item_id, mis.effective_date, ' ||
2989                     ' nvl(mis.disable_date, case when mis.effective_date < sc.effective_date then (sc.effective_date - 1) else mis.effective_date end), sc.latest_rev ' ||
2990                     '  from msd_spf_item_supersession sc, msc_item_substitutes mis '||
2991                     '  where sc.sequence_id = '|| (x_run_seq - 1) ||
2992                     '  and mis.sr_instance_id = ' || p_sr_instance_id ||
2993                     '  and mis.plan_id = -1 and mis.relationship_type = 8 ' ||
2994                     '  and sc.superseeded_item_id = mis.higher_item_id ' ||
2995                     '  and exists (select 1 from msc_item_categories mic where mic.organization_id = ' || x_spf_master_org || ' and mic.sr_instance_id = ' || p_sr_instance_id || -- Bug#12675064
2996                                       ' and mic.inventory_item_id = mis.higher_item_id and mic.category_set_id = ' || x_category_set_id || ' ))'; -- Bug#12675064
2997             execute immediate x_sql;
2998 
2999             msd_dem_common_utilities.log_debug(x_sql);
3000 
3001             exit when SQL%ROWCOUNT <= 0;
3002         end loop;
3003 
3004         /* Above loop will not get the spare at start of chain, populate it here */
3005         x_sql := 'INSERT INTO MSD_SPF_ITEM_SUPERSESSION (chain_id, sequence_id, inventory_item_id, disable_date, latest_rev) ' ||
3006                  ' (select sc.chain_id, sc.sequence_id + 1, sc.superseeded_item_id, sc.effective_date - 1, sc.latest_rev ' ||
3007                     '  from msd_spf_item_supersession sc, '||
3008                     '  (select chain_id, max(sequence_id) max_seq from MSD_SPF_ITEM_SUPERSESSION group by chain_id) scg' ||
3009                     '  where sc.chain_id = scg.chain_id' ||
3010                     '  and sc.sequence_id = scg.max_seq' ||
3011                     '  and exists (select 1 from msc_item_categories mic where mic.organization_id = ' || x_spf_master_org || ' and mic.sr_instance_id = ' || p_sr_instance_id ||  -- Bug#12675064
3012                                     ' and mic.inventory_item_id = sc.superseeded_item_id and mic.category_set_id = ' || x_category_set_id || ' ))'; -- Bug#12675064
3013         execute immediate x_sql;
3014         msd_dem_common_utilities.log_debug(x_sql);
3015 
3016         /* Update sr_item_pk values */
3017         msd_dem_common_utilities.log_debug('Update sr_item_pk values');
3018         x_sql := 'UPDATE MSD_SPF_ITEM_SUPERSESSION mdsis '||
3019                  '   set mdsis.sr_inventory_item_id = (' ||
3020                  '      select sr_inventory_item_id from msc_item_id_lid ' ||
3021                  '      where inventory_item_id = mdsis.inventory_item_id ' ||
3022                  '      and sr_instance_id = ' || p_sr_instance_id || ' ) ';
3023         execute immediate x_sql;
3024         msd_dem_common_utilities.log_debug(x_sql);
3025 
3026         msd_dem_common_utilities.log_message('Determining revisions active in future');
3027         msd_dem_common_utilities.log_debug('Determining revisions active in future');
3028         /* Update active in future flag for all eligible records - use this flag for all spare revs which are to go into demantra */
3029         /* - flag is 'Yes' for spares at end of chain or having effective date range in future */
3030         /* - also set this for spares already in demantra in case the latest revision has changed and needs to be updated in demantra also */
3031         x_sql := 'UPDATE MSD_SPF_ITEM_SUPERSESSION msis'||
3032                  '   set msis.active_in_future = 1 ' ||
3033                  -- effectivity end date is in future or is not specified for last spare revision
3034                  '   where (msis.disable_date is not null and msis.disable_date > sysdate) '||
3035                  '   or (msis.disable_date is null and msis.sequence_id = 1) '||
3036                  '   or exists (select 1 ' ||
3037                  '              from ' || g_schema || '.t_ep_spf tes, ' || g_schema || '.t_ep_spf_latest_rev teslr, msc_items mi ' ||
3038                  '              where tes.t_ep_spf_code like ''' || p_sr_instance_id || '::%-'' || msis.sr_inventory_item_id ' ||
3039                  '              and teslr.t_ep_spf_latest_rev_id = tes.t_ep_spf_latest_rev_id ' ||
3040                  '              and mi.inventory_item_id = msis.latest_rev ' ||
3041                  '              and mi.item_name <> teslr.t_ep_spf_latest_rev_code ) ';
3042         execute immediate x_sql;
3043         msd_dem_common_utilities.log_debug(x_sql);
3044 
3045         commit;
3046         msd_dem_common_utilities.log_message('Derivation of Supersession chains complete');
3047         msd_dem_common_utilities.log_debug('End - Derivation - ' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') );
3048 
3049         retcode := 0;
3050         msd_dem_common_utilities.log_message('End - MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SPARE_SUPERSESSIONS');
3051     EXCEPTION
3052     WHEN OTHERS THEN
3053         retcode := -1;
3054         errbuf := substr(sqlerrm, 1, 200);
3055         msd_dem_common_utilities.log_message('Error in MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SPARE_SUPERSESSIONS - ' || errbuf);
3056         msd_dem_common_utilities.log_debug('Error in MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SPARE_SUPERSESSIONS (' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') || ') - ' || errbuf );
3057     END DERIVE_SPARE_SUPERSESSIONS;
3058 
3059     PROCEDURE LOAD_DM_FORECAST_FOR_SPF (
3060         errbuf OUT NOCOPY VARCHAR2,
3061         retcode OUT NOCOPY VARCHAR2,
3062         p_load_sales_fcst IN NUMBER
3063     )
3064     IS
3065     x_dem_url varchar2(500) := null;
3066     x_wf_status varchar2(200) := null;
3067     x_user_id number;
3068     x_user_name varchar2(50);
3069     x_password varchar2(80);
3070     x_schema_name varchar2(255);
3071     x_schema_id number;
3072     x_sql varchar2(1100) := null;
3073     x_sales_fcst_stg varchar2(100) := null;
3074 
3075     BEGIN
3076         msd_dem_common_utilities.log_message('Begin - MSD_SPF_COLLECT_HISTORY_DATA.LOAD_DM_FORECAST_FOR_SPF');
3077 
3078         /* check if Sales Forecast download is selected */
3079         if( p_load_sales_fcst = G_NO ) then
3080             msd_dem_common_utilities.log_message('Load Sales Forecast not selected. Exiting.');
3081             msd_dem_common_utilities.log_debug('Load Sales Forecast not selected. Exiting.');
3082         else
3083             x_dem_url := fnd_profile.value('MSD_DEM_HOST_URL');
3084 
3085             /* check if demantra schema and host url are set */
3086             if( g_schema is null ) then
3087                 raise_application_error(-20002, 'Demantra schema not set');
3088             elsif ( x_dem_url is null ) then
3089                 raise_application_error(-20003, 'Demantra server host URL not set');
3090             end if;
3091 
3092             /* get user_id of DM component owner */
3093             x_user_id := to_number(msd_dem_common_utilities.get_app_id_text ('MSD_DEM_DEMANTRA_OBJECT_ID',
3094                                                                                     'COMP_DM',
3095                                                                                     1,
3096                                                                                     'user_id'));
3097             if x_user_id is null then
3098                 raise_application_error(-20004, 'Demand Management component not found');
3099             end if;
3100 
3101             begin
3102                 x_sql := 'select user_name, password from ' || g_schema ||'.user_id where user_id = ' || x_user_id;
3103                 msd_dem_common_utilities.log_debug(x_sql);
3104                 execute immediate x_sql into x_user_name, x_password;
3105             exception when others then
3106                 msd_dem_common_utilities.log_debug(substr(sqlerrm, 1, 200));
3107                 raise_application_error(-20005, 'Error querying for details of user - ' || x_user_id);
3108             end;
3109 
3110             /* get the name of export consensus workflow */
3111             x_schema_name := msd_dem_common_utilities.get_app_id_text ('MSD_DEM_DEMANTRA_OBJECT_ID',
3112                                                                            'WF_EXPORT_CNS_FCST_SPF',
3113                                                                            1,
3114                                                                            'schema_name');
3115             x_schema_name := trim(x_schema_name);
3116             x_sql := 'select utl_http.request(''' || x_dem_url || '/WorkflowServer?action=run_proc&user='||x_user_name||'&password='||x_password||'&schema='|| replace(x_schema_name, ' ', '%20') ||'&sync=yes'') from dual';
3117 
3118             msd_dem_common_utilities.log_message('Launching export workflow - ' || x_schema_name);
3119             msd_dem_common_utilities.log_debug('Launching export workflow - ' || x_schema_name);
3120             msd_dem_common_utilities.log_debug(x_sql);
3121 
3122             begin
3123                 /* launch workflow in synchronous mode */
3124                 execute immediate x_sql into x_wf_status;
3125             exception when others then
3126                 msd_dem_common_utilities.log_debug(substr(sqlerrm, 1, 200));
3127                 raise_application_error(-20006, 'Error launching workflow - ' || x_schema_name);
3128             end;
3129 
3130             msd_dem_common_utilities.log_message('Result of workflow launch - ' || x_wf_status);
3131             msd_dem_common_utilities.log_debug('Result of workflow launch - ' || x_wf_status);
3132 
3133             /* check for success of workflow */
3134             if( instr(upper(x_wf_status), 'SUCCESS') <= 0 ) then
3135                 msd_dem_common_utilities.log_message('Workflow run was not successfull, please check demantra server logs. Not populating staging table.');
3136                 raise_application_error(-20007, 'Workflow run not successfull');
3137             else
3138                 msd_dem_common_utilities.log_message('Workflow run successfull');
3139 
3140                 /* truncate and load load sales forecast into staging table */
3141                 x_sales_fcst_stg := g_schema ||'.BIIO_SPF_SALES_FCST_DATA';
3142                 msd_dem_common_utilities.log_message('Deleting data from staging table - ' || x_sales_fcst_stg);
3143                 x_sql := 'truncate table ' || x_sales_fcst_stg;
3144                 msd_dem_common_utilities.log_debug(x_sql);
3145                 execute immediate x_sql;
3146 
3147                 msd_dem_common_utilities.log_debug('Loading staging table - Start - ' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS'));
3148                 begin
3149                     x_sql := 'INSERT INTO ' || x_sales_fcst_stg ||
3150                              '(LEVEL1, SPF_CONSENSUS_FORE_IN, SDATE)' ||
3151                              '(SELECT LEVEL1, FCST_CONSENSUS, SDATE' ||
3152                              ' FROM '|| g_schema || '.BIEO_DM_SPF_FCST_V)';
3153 
3154                     msd_dem_common_utilities.log_debug(x_sql);
3155                     execute immediate x_sql;
3156                 exception when others then
3157                     msd_dem_common_utilities.log_debug(substr(sqlerrm, 1, 200));
3158                     raise_application_error(-20008, 'Error loading staging table - ' || x_sales_fcst_stg);
3159                 end;
3160 
3161                 commit;
3162                 msd_dem_common_utilities.log_message('Loading staging table - Done');
3163                 msd_dem_common_utilities.log_debug('Loading staging table - End - ' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS'));
3164                 msd_dem_common_utilities.log_debug('Inserted ' || SQL%ROWCOUNT || ' rows into staging table.');
3165             end if;
3166         end if;
3167 
3168         retcode := 0;
3169         msd_dem_common_utilities.log_message('End - MSD_SPF_COLLECT_HISTORY_DATA.LOAD_DM_FORECAST_FOR_SPF');
3170     EXCEPTION
3171     WHEN OTHERS THEN
3172         retcode := -1;
3173         errbuf := substr(sqlerrm, 1, 200);
3174         msd_dem_common_utilities.log_message('Error in MSD_SPF_COLLECT_HISTORY_DATA.LOAD_DM_FORECAST_FOR_SPF - ' || errbuf);
3175         msd_dem_common_utilities.log_debug('Error in MSD_SPF_COLLECT_HISTORY_DATA.LOAD_DM_FORECAST_FOR_SPF (' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') || ') - ' || errbuf );
3176     END LOAD_DM_FORECAST_FOR_SPF;
3177 
3178     PROCEDURE COLLECT_SPARE_USAGE_HISTORY (
3179         errbuf              OUT NOCOPY VARCHAR2,
3180         retcode             OUT NOCOPY VARCHAR2,
3181         p_sr_instance_id    IN NUMBER,
3182         p_collection_method IN NUMBER,
3183         p_from_date         IN VARCHAR2,
3184         p_to_date           IN VARCHAR2,
3185         p_spare_usg_hist    IN NUMBER
3186     )
3187     IS
3188         x_sql		    VARCHAR2(1000)  := NULL;
3189         x_errbuf        VARCHAR2(200)   := NULL;
3190         x_retcode       VARCHAR2(100)   := NULL;
3191         x_dest_table    VARCHAR2(100)   := NULL;
3192         x_from_date     DATE            := NULL;
3193         x_to_date       DATE            := NULL;
3194 
3195     BEGIN
3196         msd_dem_common_utilities.log_debug ('Entering: MSD_SPF_COLLECT_DATA.COLLECT_SPARE_USAGE_HISTORY - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3197 
3198         retcode := 0;
3199 
3200         /* check if Sales Forecast download is selected */
3201         if( p_spare_usg_hist = G_NO ) then
3202             msd_dem_common_utilities.log_message('Load Spare Usage History not selected. Exiting.');
3203             msd_dem_common_utilities.log_debug('Load Spare Usage History not selected. Exiting.');
3204         else
3205             /* Table to collect spare usage history initially */
3206             x_dest_table := C_SPARE_USAGE_HISTORY_TABLE;
3207 
3208             x_from_date := fnd_date.canonical_to_date(p_from_date);
3209             x_to_date   := fnd_date.canonical_to_date(p_to_date);
3210 
3211             msd_dem_common_utilities.log_message (' Collect Spare History Data - Actions');
3212             msd_dem_common_utilities.log_message ('------------------------------------');
3213             msd_dem_common_utilities.log_message (' ');
3214 
3215             msd_dem_common_utilities.log_message ('Collection Method - ' || case when p_collection_method = G_COLL_COMPLETE then 'Complete Refresh' else 'Net Change' end);
3216             msd_dem_common_utilities.log_message ('Date From (DD/MM/RRRR) - ' || to_char(x_from_date, 'DD/MM/RRRR'));
3217             msd_dem_common_utilities.log_message ('Date To (DD/MM/RRRR)   - ' || to_char(x_to_date, 'DD/MM/RRRR'));
3218 
3219             -- Bug#12675064  commented
3220             /* msd_dem_common_utilities.log_debug ('Begin delete from staging table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3221 
3222             -- Truncate the sales staging table - always
3223             msd_dem_common_utilities.log_message ('Deleting data from staging table - ' || x_dest_table);
3224             x_sql := 'DELETE FROM ' || x_dest_table;
3225             EXECUTE IMMEDIATE x_sql;
3226             msd_dem_common_utilities.log_debug ('End delete from sales staging table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3227             */
3228 
3229             /* Collect Spare Usage History series */
3230             msd_dem_common_utilities.log_debug ('Begin collect Spare Usage History - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3231             collect_series_data (
3232                     x_errbuf,
3233                     x_retcode,
3234                     C_SPARE_USAGE_HISTORY,
3235                     x_dest_table,
3236                     p_sr_instance_id,
3237                     p_collection_method,
3238                     x_from_date,
3239                     x_to_date
3240                     );
3241 
3242             IF (x_retcode = -1) THEN
3243                 retcode := -1;
3244                 errbuf  := x_errbuf;
3245                 msd_dem_common_utilities.log_message ('Error(11): MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_USAGE_HISTORY - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3246                 msd_dem_common_utilities.log_message ('Error while collecting Spare Usage History');
3247                 RETURN;
3248             END IF;
3249 
3250             msd_dem_common_utilities.log_debug ('End collect Spare Usage History - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3251 
3252             -- Bug#12675064 commented
3253             /* anything for NPI ?? */
3254 
3255             /* Analyze Sales Staging Table */ -- doing this at end of stage 2
3256             /*msd_dem_common_utilities.log_debug ('Begin Analyze sales staging table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3257 
3258             msd_dem_collect_history_data.analyze_table (
3259                 x_errbuf,
3260                 x_retcode,
3261                 x_dest_table);
3262 
3263             msd_dem_common_utilities.log_debug ('End Analyze sales staging table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3264 
3265             IF (x_retcode = 1) THEN
3266                 retcode := 1;
3267                 errbuf  := x_errbuf;
3268                 msd_dem_common_utilities.log_message ('Warning(7): MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_USAGE_HISTORY - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3269                 msd_dem_common_utilities.log_message ('Error while analyzing staging table');
3270             END IF;*/
3271 
3272         END IF;
3273 
3274         msd_dem_common_utilities.log_debug ('Exiting: MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_USAGE_HISTORY - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3275     EXCEPTION
3276     WHEN OTHERS THEN
3277         retcode := -1;
3278         errbuf := substr(sqlerrm, 1, 200);
3279         msd_dem_common_utilities.log_message('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_USAGE_HISTORY - ' || errbuf);
3280         msd_dem_common_utilities.log_debug('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_USAGE_HISTORY (' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') || ') - ' || errbuf );
3281     END COLLECT_SPARE_USAGE_HISTORY;
3282 
3283     -- Bug#12675064
3284     PROCEDURE COLLECT_SPARE_SHIPMENT_HISTORY (
3285         errbuf              OUT NOCOPY VARCHAR2,
3286         retcode             OUT NOCOPY VARCHAR2,
3287         p_sr_instance_id    IN NUMBER,
3288         p_collection_method IN NUMBER,
3289         p_from_date         IN VARCHAR2,
3290         p_to_date           IN VARCHAR2
3291     )
3292     IS
3293         x_sql		    VARCHAR2(1000)  := NULL;
3294         x_errbuf        VARCHAR2(200)   := NULL;
3295         x_retcode       VARCHAR2(100)   := NULL;
3296         x_dest_table    VARCHAR2(100)   := NULL;
3297         x_from_date     DATE            := NULL;
3298         x_to_date       DATE            := NULL;
3299 
3300     BEGIN
3301         msd_dem_common_utilities.log_debug ('Entering: MSD_SPF_COLLECT_DATA.COLLECT_SPARE_SHIPMENT_HISTORY - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3302 
3303         retcode := 0;
3304 
3305         /* Table to collect spare usage history initially */
3306         x_dest_table := C_SPARE_USAGE_HISTORY_TABLE;
3307 
3308         x_from_date := fnd_date.canonical_to_date(p_from_date);
3309         x_to_date   := fnd_date.canonical_to_date(p_to_date);
3310 
3311         msd_dem_common_utilities.log_message (' Collect Spare Shipment History - Actions');
3312         msd_dem_common_utilities.log_message ('------------------------------------------');
3313         msd_dem_common_utilities.log_message (' ');
3314 
3315         msd_dem_common_utilities.log_message ('Collection Method - ' || case when p_collection_method = G_COLL_COMPLETE then 'Complete Refresh' else 'Net Change' end);
3316         msd_dem_common_utilities.log_message ('Date From (DD/MM/RRRR) - ' || to_char(x_from_date, 'DD/MM/RRRR'));
3317         msd_dem_common_utilities.log_message ('Date To (DD/MM/RRRR)   - ' || to_char(x_to_date, 'DD/MM/RRRR'));
3318 
3319         --msd_dem_common_utilities.log_debug ('Begin delete from staging table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3320 
3321         /* Truncate the sales staging table - always */
3322         /*msd_dem_common_utilities.log_message ('Deleting data from staging table - ' || x_dest_table);
3323         x_sql := 'DELETE FROM ' || x_dest_table;
3324         EXECUTE IMMEDIATE x_sql;
3325         msd_dem_common_utilities.log_debug ('End delete from sales staging table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));*/
3326 
3327         /* Collect Spare Usage History series */
3328         msd_dem_common_utilities.log_debug ('Begin collect Spare Shipment History - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3329         collect_series_data (
3330                 x_errbuf,
3331                 x_retcode,
3332                 C_SPARE_SHIPMENT_HISTORY,
3333                 x_dest_table,
3334                 p_sr_instance_id,
3335                 p_collection_method,
3336                 x_from_date,
3337                 x_to_date
3338                 );
3339 
3340         IF (x_retcode = -1) THEN
3341             retcode := -1;
3342             errbuf  := x_errbuf;
3343             msd_dem_common_utilities.log_message ('Error(1): MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_SHIPMENT_HISTORY - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3344             msd_dem_common_utilities.log_message ('Error while collecting Spare Shipment History');
3345             RETURN;
3346         END IF;
3347 
3348         msd_dem_common_utilities.log_debug ('End collect Spare Shipment History - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3349 
3350         msd_dem_common_utilities.log_debug ('Exiting: MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_SHIPMENT_HISTORY - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3351     EXCEPTION
3352     WHEN OTHERS THEN
3353         retcode := -1;
3354         errbuf := substr(sqlerrm, 1, 200);
3355         msd_dem_common_utilities.log_message('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_SHIPMENT_HISTORY - ' || errbuf);
3356         msd_dem_common_utilities.log_debug('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SPARE_SHIPMENT_HISTORY (' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') || ') - ' || errbuf );
3357     END COLLECT_SPARE_SHIPMENT_HISTORY;
3358 
3359     PROCEDURE DERIVE_SERVICE_BOM (
3360         errbuf OUT NOCOPY VARCHAR2,
3361         retcode OUT NOCOPY VARCHAR2,
3362         p_sr_instance_id IN NUMBER,
3363         p_install_base   IN NUMBER,
3364         p_from_date      IN VARCHAR2 DEFAULT NULL,
3365         p_to_date        IN VARCHAR2 DEFAULT NULL,
3366         p_custom_ibuc_hist_view IN VARCHAR2 DEFAULT NULL,
3367 	p_eng_profile_app_id    IN VARCHAR2 DEFAULT 'ENGINE_PROFILE:141', --engine profile from which forecast lead param is to be used -- Bug#12911203
3368         p_preserve_dem_dates    IN NUMBER default G_YES,    --preserve the population from and to dates for existing spf members in demantra
3369                                                             --if yes, the dates will be preserved even if they are out of the allowed (spf_history_periods, lead) date range
3370                                                             --this is to minimize deletion of combinations in demantra to improve performance of level profile load -- Bug#12675064
3371         p_check_interval IN NUMBER DEFAULT 60,
3372         p_time_out       IN NUMBER DEFAULT 86400
3373     )
3374     IS
3375 
3376     x_category_set_id   number := null;
3377     x_spf_master_org    number := null;
3378     x_sql               varchar2(4000) := null;
3379     x_run_seq           number := null;
3380     x_pval              varchar2(100) := null;
3381     x_dm_time_level     varchar2(6) := null;
3382     x_max_sales_date    date    := null;
3383     x_history_cap       date    := null;
3384     x_forecast_cap      date    := null;
3385     x_key_values        VARCHAR2(200)	:= NULL;
3386     x_lvl_org_id        number  := null;
3387     x_from_date         date    := null;
3388     x_to_date           date    := null;
3389     x_eng_params_table  varchar2(100)   := NULL; -- Bug#12911203
3390     var_request_id      number := null;
3391     var_runtime         DATE            DEFAULT systimestamp;
3392     var_errbuf          VARCHAR2(2000)  DEFAULT NULL;
3393     var_retcode         VARCHAR2(100)   DEFAULT 0;
3394 
3395     l_req_table         REQ_TABLE;
3396 
3397     BEGIN
3398         msd_dem_common_utilities.log_message('Begin - MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SERVICE_BOM');
3399 
3400         x_category_set_id := MSC_UTIL.GET_SERVICE_ITEMS_CATSET_ID;
3401         x_sql := 'select to_number(parameter_value) from msd_dem_setup_parameters ' ||
3402                  ' where parameter_name like ''MSD_SPF_MASTER_ORG''';
3403         execute immediate x_sql into x_spf_master_org;
3404         msd_dem_common_utilities.log_debug(x_sql);
3405 
3406         if g_schema is null then
3407             raise_application_error(-20001, 'Demantra Schema not set. Cannot proceed with derivation of supersession chains.');
3408         elsif x_category_set_id is null then
3409             raise_application_error(-20002, 'Profile ''MSC: Category Set for Serviceable Items'' not set. Cannot proceed with derivation of supersession chains.');
3410         elsif x_spf_master_org is null then
3411             raise_application_error(-20003, 'Profile ''MSD_SPF: Organization containing generic BOM for Service Parts Forecasting'' not set. Cannot proceed with derivation of supersession chains.');
3412         end if;
3413 
3414         -- get demantra time level
3415         x_dm_time_level := lower(msd_dem_common_utilities.dm_time_level);
3416 
3417         x_from_date := fnd_date.canonical_to_date(p_from_date);
3418         x_to_date   := fnd_date.canonical_to_date(p_to_date);
3419 
3420         -- get max_sales_date
3421         x_sql := 'select trunc(max(max_date), ''dd'') from ( '||
3422                  ' select max(sdate) max_date from ' || nvl(p_custom_ibuc_hist_view, 'MSD_SPF_INSTALL_BASE_UC_V') ||
3423                  ' where 1 = ' || p_install_base ||
3424                  case when (p_install_base = G_YES and x_to_date is not null)
3425                  then ' and sdate <=  to_date(''' || to_char(x_to_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'')'
3426                  else '' end ||
3427                  ' union ' ||
3428                  ' select max(usage_date) max_date from MSD_SPF_ST_SPARE_USAGE '||
3429                  ' union ' ||
3430                  ' select to_date(' || g_schema || '.get_max_date, param.pval) max_date from ' ||
3431                  g_schema || '.db_params param where param.pname = ''nls_date_format'' )';
3432         msd_dem_common_utilities.log_debug(x_sql);
3433         execute immediate x_sql into x_max_sales_date;
3434         msd_dem_common_utilities.log_debug('Max Sales Date - ' || x_max_sales_date);
3435 
3436         -- get history cap
3437         x_sql := 'select pval from ' || g_schema || '.sys_params where lower(pname) = ''spf_history_periods''';
3438         execute immediate x_sql into x_pval;
3439         if x_dm_time_level = 'day' then
3440             x_history_cap := x_max_sales_date - to_number(x_pval);
3441         elsif x_dm_time_level = 'week' then
3442             x_history_cap := x_max_sales_date - 7*to_number(x_pval);
3443         elsif x_dm_time_level = 'month' then
3444             x_history_cap := add_months(x_max_sales_date, -to_number(x_pval));
3445         end if;
3446 
3447         msd_dem_common_utilities.log_debug('History Cap - ' || x_history_cap);
3448 
3449         -- get future cap  -- Bug#12911203
3450         BEGIN
3451             x_sql := 'select init_params_table_name from ' || g_schema || '.engine_profiles where application_id = ''' || p_eng_profile_app_id || '''';
3452             execute immediate x_sql into x_eng_params_table;
3453             x_sql := 'select value_float from ' || g_schema || '.' || x_eng_params_table || ' where lower(pname) = ''lead''';
3454             execute immediate x_sql into x_pval;
3455         EXCEPTION
3456         WHEN OTHERS THEN
3457             msd_dem_common_utilities.log_debug('Exception when reading forecast lead param from engine profile - ' || p_eng_profile_app_id);
3458             msd_dem_common_utilities.log_debug('Using forecast lead param from Base profile');
3459             msd_dem_common_utilities.log_message('Using forecast lead param from Base profile');
3460             x_sql := 'select value_float from ' || g_schema || '.init_params_0 where lower(pname) = ''lead''';
3461             execute immediate x_sql into x_pval;
3462         END;
3463 
3464         if x_dm_time_level = 'day' then
3465             x_forecast_cap := x_max_sales_date + to_number(x_pval);
3466         elsif x_dm_time_level = 'week' then
3467             x_forecast_cap := x_max_sales_date + 7*to_number(x_pval);
3468         elsif x_dm_time_level = 'month' then
3469             x_forecast_cap := add_months(x_max_sales_date, to_number(x_pval));
3470         end if;
3471 
3472         msd_dem_common_utilities.log_debug('Forecast Cap - ' || x_forecast_cap);
3473 
3474 
3475         /* Populate MSD_SPF_MODEL_BOM_COMPONENTS, MSD_SPF_MODEL_ORGS */
3476 
3477         -- The following will run in parallel
3478         -- 1. Populate MSD_SPF_MODEL_BOM_COMPONENTS based on usage history and item supersession (Historic FG-Spare-Dates)
3479         -- 2. Populate MSD_SPF_MODEL_ORGS based on usage history, IB and t_ep_spf tables (Item, Org population and effectivity dates)
3480 
3481         -- parallel step#1
3482         BEGIN
3483             var_request_id := null;
3484             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_MODEL_BOM_COMPONENTS', p_sr_instance_id);
3485         EXCEPTION
3486         WHEN OTHERS THEN
3487             retcode := -1;
3488             errbuf := substr(SQLERRM,1,150);
3489             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SERVICE_BOM - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3490             msd_dem_common_utilities.log_message ('Error while submitting request for populating MSD_SPF_MODEL_BOM_COMPONENTS');
3491             msd_dem_common_utilities.log_message (errbuf);
3492             RETURN;
3493         END;
3494 
3495         l_req_table(1).REQUEST_ID := var_request_id;
3496         l_req_table(1).DESCRIPTION := 'SPF Populate MSD_SPF_MODEL_BOM_COMPONENTS';
3497         l_req_table(1).IS_COMPLETE := FALSE;
3498         l_req_table(1).status := 1;
3499 
3500         COMMIT;
3501 
3502         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
3503         msd_dem_common_utilities.log_message ('');
3504         msd_dem_common_utilities.log_message ('');
3505 
3506         -- parallel step#2
3507         x_key_values := '$C_COLLECT_INSTALL_BASE#' || p_install_base ||
3508                         '$C_IBUC_VIEW_NAME#' || nvl(p_custom_ibuc_hist_view, 'MSD_SPF_INSTALL_BASE_UC_V') ||
3509                         '$C_IBUC_DATE_CLAUSE#';
3510         if (p_install_base = G_YES and x_from_date is not null and x_to_date is not null) then
3511             x_key_values := x_key_values || ' and sdate between ' ||
3512                             'to_date(''' || to_char(x_from_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'')' ||
3513                             ' and ' ||
3514                             'to_date(''' || to_char(x_to_date, 'DD/MM/RRRR') || ''', ''DD/MM/RRRR'')' ;
3515         end if;
3516         x_key_values := x_key_values || '$';
3517 
3518         BEGIN
3519             var_request_id := null;
3520             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE, 'EQ_SPF_MODEL_ORGS', p_sr_instance_id, x_key_values);
3521         EXCEPTION
3522         WHEN OTHERS THEN
3523             retcode := -1;
3524             errbuf := substr(SQLERRM,1,150);
3525             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SERVICE_BOM - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3526             msd_dem_common_utilities.log_message ('Error while submitting request for populating MSD_SPF_MODEL_ORGS');
3527             msd_dem_common_utilities.log_message (errbuf);
3528             RETURN;
3529         END;
3530 
3531         l_req_table(2).REQUEST_ID := var_request_id;
3532         l_req_table(2).DESCRIPTION := 'SPF Populate MSD_SPF_MODEL_ORGS';
3533         l_req_table(2).IS_COMPLETE := FALSE;
3534         l_req_table(2).status := 1;
3535 
3536         COMMIT;
3537 
3538         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
3539         msd_dem_common_utilities.log_message ('');
3540         msd_dem_common_utilities.log_message ('');
3541 
3542         -- wait for request completion
3543         check_requests_completion(var_errbuf, var_retcode, l_req_table.LAST, var_runtime, l_req_table, p_check_interval, p_time_out);
3544         IF (var_retcode = -1)
3545         THEN
3546             retcode := -1;
3547             errbuf := var_errbuf;
3548             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SERVICE_BOM - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3549             msd_dem_common_utilities.log_message ('Error while waiting for requests to complete.');
3550             msd_dem_common_utilities.log_message (errbuf);
3551             RETURN;
3552         END IF;
3553 
3554         -- analyze table MSD_SPF_MODEL_BOM_COMPONENTS
3555         msd_dem_common_utilities.log_debug ('Begin Analyze MSD_SPF_MODEL_BOM_COMPONENTS table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3556 
3557         msd_dem_collect_history_data.analyze_table (
3558             var_errbuf,
3559             var_retcode,
3560             'MSD_SPF_MODEL_BOM_COMPONENTS');
3561 
3562         msd_dem_common_utilities.log_debug ('End Analyze sales staging table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3563 
3564         IF (var_retcode = 1) THEN
3565             retcode := 1;
3566             errbuf  := var_errbuf;
3567             msd_dem_common_utilities.log_message ('Warning: MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SERVICE_BOM - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3568             msd_dem_common_utilities.log_message ('Error while analyzing MSD_SPF_MODEL_BOM_COMPONENTS table');
3569         END IF;
3570 
3571         /* Populate MSD_SPF_MFG_BOM_TEMP with data from MFG BOM for products from MSD_SPF_MODEL_ORGS (FG-Latest Spare-Dates) */
3572         -- populate records for base model-base model into msd_spf_mfg_bom_temp table
3573         x_run_seq := 1;
3574         x_sql := 'INSERT into MSD_SPF_MFG_BOM_TEMP ' ||
3575                  ' (EBS_BASE_MODEL_SR_PK, DM_ITEM_SR_PK, EFFECTIVE_DATE, DISABLE_DATE, RETAIN_RECORD, SEQUENCE_ID) '||
3576                  ' (select ebs_base_model_sr_pk, ebs_base_model_sr_pk, :1, :2, 1, ' || x_run_seq ||
3577                  '  from (select distinct ebs_base_model_sr_pk from msd_spf_model_orgs) )';
3578         execute immediate x_sql using x_history_cap, x_forecast_cap;
3579 
3580         msd_dem_common_utilities.log_debug(x_sql);
3581         msd_dem_common_utilities.log_debug(SQL%ROWCOUNT || ' records inserted (FG-FG-dates)');
3582 
3583         /* Loop over and derive bom */
3584         loop
3585             x_run_seq := x_run_seq + 1;
3586             -- Bug#12434821
3587             x_sql := 'INSERT into MSD_SPF_MFG_BOM_TEMP ' ||
3588                      ' (EBS_BASE_MODEL_SR_PK, DM_ITEM_SR_PK, EFFECTIVE_DATE, DISABLE_DATE, RETAIN_RECORD, SEQUENCE_ID) ' ||
3589                      ' (select tbom.ebs_base_model_sr_pk base, msis.sr_inventory_item_id spare, mbc.effectivity_date, ' ||
3590                      '  mbc.disable_date, 0 retain_record, ' || x_run_seq || ' sequence_id ' ||
3591                      '  from msd_spf_mfg_bom_temp tbom, msc_system_items msib, msc_boms mb, msc_bom_components mbc, msc_system_items msis ' ||
3592                      '  where tbom.sequence_id = ' || (x_run_seq - 1) ||
3593                      '  and msib.plan_id = -1 and msib.sr_instance_id = ' || p_sr_instance_id ||
3594                      '  and msib.organization_id = ' || x_spf_master_org || ' and msib.sr_inventory_item_id = tbom.dm_item_sr_pk ' ||
3595                      '  and mb.plan_id = -1 and mb.organization_id = ' || x_spf_master_org || ' and mb.sr_instance_id = ' || p_sr_instance_id ||
3596                      '  and mb.assembly_item_id = msib.inventory_item_id and mbc.plan_id = -1 and mbc.sr_instance_id = mb.sr_instance_id ' ||
3597                      '  and mbc.bill_sequence_id = mb.bill_sequence_id and msis.plan_id = -1 and msis.sr_instance_id = mbc.sr_instance_id ' ||
3598                      '  and msis.organization_id  = mbc.organization_id and mbc.inventory_item_id = msis.inventory_item_id) ';
3599 
3600             execute immediate x_sql;
3601 
3602             msd_dem_common_utilities.log_debug(x_sql);
3603 
3604             exit when SQL%ROWCOUNT <= 0;
3605         end loop;
3606 
3607        -- remove records for non serviceable spares in msd_spf_mfg_bom_temp -- Bug#12675064
3608         x_sql := 'DELETE from MSD_SPF_MFG_BOM_TEMP tbom where retain_record <> 1 ' ||
3609                  ' and not exists (select 1 from msc_system_items msi, msc_item_categories mic  ' ||
3610                  ' where msi.plan_id = -1 and ' || ' msi.sr_instance_id = '|| p_sr_instance_id ||
3611                  ' and msi.organization_id = ' || x_spf_master_org || ' and msi.sr_inventory_item_id = dm_item_sr_pk ' ||
3612                  ' and mic.organization_id = msi.organization_id and mic.sr_instance_id = msi.sr_instance_id and msi.inventory_item_id = mic.inventory_item_id ' ||
3613                  ' and mic.category_set_id = ' || x_category_set_id || ')';
3614         msd_dem_common_utilities.log_debug(x_sql);
3615         execute immediate x_sql;
3616 
3617         /* Populate MSD_SPF_MODEL_BOM_COMPONENTS based on MFG BOM and item supersession */
3618         /* (FG-Spare-Dates) - all spares from bom, all eligible spares from item supersession chains */
3619         x_sql := 'MERGE into MSD_SPF_MODEL_BOM_COMPONENTS a ' ||
3620                  ' using ( ' ||
3621                  ' select ' || p_sr_instance_id || ' sr_instance_id, ebs_base_model_sr_pk, dm_item_sr_pk, ' ||
3622                  ' trunc(min(effective_date), ''dd'') effective_date, ' ||
3623                  ' trunc(max(disable_date), ''dd'') disable_date, ' ||
3624                  ' min(chain_id) chain_id, min(latest_rev) latest_rev '||
3625                  ' from ( '||
3626                  ' select tbom.ebs_base_model_sr_pk, tbom.dm_item_sr_pk, ' ||
3627                  ' least(nvl(msis.effective_date, tbom.effective_date), tbom.effective_date) effective_date, ' ||
3628                  ' greatest(msis.disable_date, nvl(tbom.disable_date, msis.disable_date)) disable_date, ' ||
3629                  ' msis.chain_id, msis.latest_rev '||
3630                  ' from msd_spf_mfg_bom_temp tbom, msd_spf_item_supersession msis '||
3631                  ' where tbom.dm_item_sr_pk = msis.sr_inventory_item_id(+) ' ||
3632                  ' union all ' ||
3633                  ' select tbom.ebs_base_model_sr_pk, mdsisx.sr_inventory_item_id dm_item_sr_pk, ' ||
3634                  ' mdsisx.effective_date, mdsisx.disable_date, mdsisx.chain_id, mdsisx.latest_rev ' ||
3635                  ' from MSD_SPF_MFG_BOM_TEMP tbom, msd_spf_item_supersession mdsis, msd_spf_item_supersession mdsisx '||
3636                  ' where tbom.dm_item_sr_pk = mdsis.sr_inventory_item_id and mdsis.chain_id = mdsisx.chain_id '||
3637                  ' and mdsisx.active_in_future = 1) ' ||
3638                  ' group by ebs_base_model_sr_pk, dm_item_sr_pk ) b ' ||
3639                  ' on ( ' ||
3640                  ' a.sr_instance_id = b.sr_instance_id ' ||
3641                  ' and a.ebs_base_model_sr_pk = b.ebs_base_model_sr_pk ' ||
3642                  ' and a.dm_item_sr_pk = b.dm_item_sr_pk ) ' ||
3643                  ' when not matched then ' ||
3644                  ' insert (SR_INSTANCE_ID,EBS_BASE_MODEL_SR_PK,DM_ITEM_SR_PK,LATEST_REV,CHAIN_ID,EFFECTIVE_DATE,DISABLE_DATE) ' ||
3645                  ' values (b.SR_INSTANCE_ID,b.EBS_BASE_MODEL_SR_PK,b.DM_ITEM_SR_PK,b.LATEST_REV,b.CHAIN_ID,b.EFFECTIVE_DATE,b.DISABLE_DATE) ' ||
3646                  ' when matched then ' ||
3647                  ' update set ' ||
3648                  ' effective_date = least(a.effective_date, nvl(b.effective_date, a.effective_date)), ' ||
3649                  ' disable_date = greatest(a.disable_date, nvl(b.disable_date, a.disable_date))' ;
3650 
3651         msd_dem_common_utilities.log_debug(x_sql);
3652         execute immediate x_sql;
3653         msd_dem_common_utilities.log_debug(SQL%ROWCOUNT || ' - rows merged');
3654 
3655         IF ( p_preserve_dem_dates <> G_YES ) then  -- Bug#12675064
3656           -- update msd_spf_model_bom_components to expand date range based on from and until dates of SPF GL members in demantra
3657           -- ** exclude base model and current latest spare rev in demantra **
3658           -- ** this handles case where a new latest spare rev is introduced **
3659           -- ** date range for current latest spare rev has to be changed based on source dates from supersession, during subsequent collection **
3660           x_sql := 'MERGE into MSD_SPF_MODEL_BOM_COMPONENTS a ' ||
3661                    ' using ( ' ||
3662                    '  select msbc.sr_instance_id, msbc.ebs_base_model_sr_pk, msbc.dm_item_sr_pk, ' ||
3663                    '      least(nvl(msbc.effective_date, tesd.from_date), tesd.from_date) from_date, ' ||
3664                    '      case when (tesd.until_date > :1 and msbc.disable_date > :2) then msbc.disable_date ' ||
3665                    '      else greatest(nvl(msbc.disable_date, tesd.until_date), tesd.until_date)  ' ||
3666                    '      end until_date ' ||     --bug#10124698, preserve only past dates in demantra (wrt max_sales_date)
3667                    '      from msd_spf_model_bom_components msbc, '||g_schema|| '.t_ep_spf tes, ' ||g_schema|| '.t_ep_spf_child tesc, ' ||g_schema|| '.t_ep_spf_latest_rev teslr, ' ||g_schema|| '.t_ep_spf_dates tesd ' ||
3668                    '      where msbc.ebs_base_model_sr_pk <> msbc.dm_item_sr_pk ' ||
3669                    '      and tes.t_ep_spf_code = msbc.sr_instance_id || ''::'' || msbc.ebs_base_model_sr_pk || ''-'' || msbc.dm_item_sr_pk ' ||
3670                    '      and (( msbc.latest_rev is null '||
3671                    '             and tesc.t_ep_spf_child_id = tes.t_ep_spf_child_id ' ||
3672                    '             and teslr.t_ep_spf_latest_rev_id = tes.t_ep_spf_latest_rev_id ' ||
3673                    '             and tesc.t_ep_spf_child_code = teslr.t_ep_spf_latest_rev_code)' ||
3674                    '           or (tesc.t_ep_spf_child_id = tes.t_ep_spf_child_id ' ||
3675                    '               and teslr.t_ep_spf_latest_rev_id = tes.t_ep_spf_latest_rev_id ' ||
3676                    '               and tesc.t_ep_spf_child_code <> teslr.t_ep_spf_latest_rev_code) ) ' ||
3677                    '      and tes.t_ep_spf_id = tesd.t_ep_spf_id ' ||
3678                    '      and tesd.from_date <= :3 ' ||       --bug#10124698, preserve only past dates in demantra (wrt max_sales_date)
3679                    '      and (nvl(msbc.effective_date, tesd.from_date) > tesd.from_date or nvl(msbc.disable_date, tesd.until_date) < tesd.until_date ) ) b '||
3680                    ' on ( ' ||
3681                    '  a.sr_instance_id = b.sr_instance_id ' ||
3682                    '  and a.ebs_base_model_sr_pk = b.ebs_base_model_sr_pk ' ||
3683                    '  and a.dm_item_sr_pk = b.dm_item_sr_pk ) ' ||
3684                    ' when matched then ' ||
3685                    ' update set ' ||
3686                    '  a.effective_date = b.from_date, ' ||
3687                    '  a.disable_date = b.until_date ';
3688           msd_dem_common_utilities.log_debug(x_sql);
3689           execute immediate x_sql using x_max_sales_date, x_max_sales_date, x_max_sales_date;
3690           msd_dem_common_utilities.log_debug(SQL%ROWCOUNT || ' - rows merged');
3691         END IF;
3692 
3693         -- set disable date to null in case of spare does not have latest revision / is itself latest revision
3694         x_sql := 'UPDATE MSD_SPF_MODEL_BOM_COMPONENTS mbc ' ||
3695                  ' SET ' ||
3696                  ' mbc.disable_date = null ' ||
3697                  ' where mbc.latest_rev is null ' ||
3698                  '    or mbc.latest_rev = (select inventory_item_id from msc_item_id_lid miil ' ||
3699                  '                         where miil.sr_instance_id = mbc.sr_instance_id ' ||
3700                  '                         and miil.sr_inventory_item_id = mbc.dm_item_sr_pk) ';
3701         msd_dem_common_utilities.log_debug(x_sql);
3702         execute immediate x_sql;
3703 
3704         -- adjust date range to the history and forecast cap and make sure there are no null dates
3705         x_sql := 'UPDATE MSD_SPF_MODEL_BOM_COMPONENTS ' ||
3706                  ' SET ' ||
3707                  ' effective_date = greatest(nvl(effective_date, :1), :2), ' ||
3708                  ' disable_date = least(nvl(disable_date, :3), :4) ' ||
3709                  ' where nvl(effective_date, :5) < :6 or nvl(disable_date, :7) > :8 ';
3710         msd_dem_common_utilities.log_debug(x_sql);
3711         execute immediate x_sql using x_history_cap, x_history_cap, x_forecast_cap, x_forecast_cap, x_history_cap-1, x_history_cap, x_forecast_cap+1, x_forecast_cap;
3712 
3713         IF (p_preserve_dem_dates = G_YES) THEN -- Bug#12675064
3714             -- update msd_spf_model_bom_components to expand date range based on from and until dates of SPF GL members in demantra
3715             -- ** exclude base model and current latest spare rev in demantra **
3716             -- ** this handles case where a new latest spare rev is introduced **
3717             -- ** date range for current latest spare rev has to be changed based on source dates from supersession, during subsequent collection **
3718             x_sql := 'MERGE into MSD_SPF_MODEL_BOM_COMPONENTS a ' ||
3719                      ' using ( ' ||
3720                      '  select msbc.sr_instance_id, msbc.ebs_base_model_sr_pk, msbc.dm_item_sr_pk, ' ||
3721                      '      least(nvl(msbc.effective_date, tesd.from_date), tesd.from_date) from_date, ' ||
3722                      '      case when (tesc.t_ep_spf_child_code = teslr.t_ep_spf_latest_rev_code) then msbc.disable_date ' ||
3723                      '      when (tesd.until_date > :1 and msbc.disable_date > :2) then msbc.disable_date ' ||
3724                      '      else greatest(nvl(msbc.disable_date, tesd.until_date), tesd.until_date)  ' ||
3725                      '      end until_date ' ||     --bug#10124698, preserve only past dates in demantra (wrt max_sales_date)
3726                      '      from msd_spf_model_bom_components msbc, '||g_schema|| '.t_ep_spf tes, ' ||g_schema|| '.t_ep_spf_child tesc, ' ||g_schema|| '.t_ep_spf_latest_rev teslr, ' ||g_schema|| '.t_ep_spf_dates tesd ' ||
3727                      '      where tes.t_ep_spf_code = msbc.sr_instance_id || ''::'' || msbc.ebs_base_model_sr_pk || ''-'' || msbc.dm_item_sr_pk ' ||
3728                      '      and tesc.t_ep_spf_child_id = tes.t_ep_spf_child_id ' ||
3729                      '      and teslr.t_ep_spf_latest_rev_id = tes.t_ep_spf_latest_rev_id ' ||
3730                      '      and tes.t_ep_spf_id = tesd.t_ep_spf_id ' ||
3731                      '      and tesd.from_date <= :3 ' ||       --bug#10124698, preserve only past dates in demantra (wrt max_sales_date)
3732                      '      and (nvl(msbc.effective_date, tesd.from_date) > tesd.from_date or nvl(msbc.disable_date, tesd.until_date) < tesd.until_date ) ) b '||
3733                      ' on ( ' ||
3734                      '  a.sr_instance_id = b.sr_instance_id ' ||
3735                      '  and a.ebs_base_model_sr_pk = b.ebs_base_model_sr_pk ' ||
3736                      '  and a.dm_item_sr_pk = b.dm_item_sr_pk ) ' ||
3737                      ' when matched then ' ||
3738                      ' update set ' ||
3739                      '  a.effective_date = b.from_date, ' ||
3740                      '  a.disable_date = b.until_date ';
3741             msd_dem_common_utilities.log_debug(x_sql);
3742             execute immediate x_sql using x_max_sales_date, x_max_sales_date, x_max_sales_date;
3743             msd_dem_common_utilities.log_debug(SQL%ROWCOUNT || ' - rows merged');
3744         END IF;
3745 
3746         IF x_dm_time_level <> 'day' THEN
3747             -- adjust all future (from and to) dates
3748             -- from date is moved to start of bucket, to date will be moved to end of previous bucket to avoid overlap (2 spare revs active in same bucket)
3749             msd_dem_common_utilities.log_debug('Adjusting from and until dates in future');
3750 
3751             x_sql := 'UPDATE ' ||
3752                      ' msd_spf_model_bom_components '||
3753                      ' set effective_date = ( '||
3754                      '      select inp.start_date from msd_dem_dates inp '||
3755                      '      where effective_date between inp.start_date and inp.end_date) ' ||
3756                      ' where effective_date > :1 ';
3757             msd_dem_common_utilities.log_debug(x_sql);
3758             execute immediate x_sql using x_max_sales_date;
3759 
3760             x_sql := 'UPDATE ' ||
3761                      ' msd_spf_model_bom_components '||
3762                      ' set disable_date = nvl( '||
3763                      '     (select greatest(inp.start_date-1,effective_date) from msd_dem_dates inp '||
3764                      '      where disable_date between inp.start_date and inp.end_date-1), ' ||
3765                      '     disable_date) '||
3766                      ' where disable_date > :1 ';
3767             msd_dem_common_utilities.log_debug(x_sql);
3768             execute immediate x_sql using x_max_sales_date;
3769 
3770         END IF;
3771 
3772         -- existing org population in demantra should be preserved
3773         x_lvl_org_id := to_number(msd_dem_common_utilities.get_app_id_text (
3774                                             'MSD_DEM_DEMANTRA_OBJECT_ID',
3775                                             'LEVEL_ORGANIZATION',
3776                                             1,
3777                                             'group_table_id'));
3778 
3779         x_sql := 'MERGE INTO MSD_SPF_MODEL_ORGS a using ' ||
3780                  ' (select msmo.ebs_base_model_code ebs_base_model_code, msmo.ebs_base_model_sr_pk, '||
3781                  '  teo.organization dm_org_code, mtp.sr_tp_id dm_org_sr_pk ' ||
3782                  '  from (select distinct ebs_base_model_code, ebs_base_model_sr_pk from msd_spf_model_orgs) msmo, ' ||
3783                  '  ' || g_schema || '.t_ep_spf_base_model tesbm, ' || g_schema || '.t_ep_spf tes, ' ||
3784                  '  ' || g_schema || '.t_ep_spf_levels tesl, ' || g_schema || '.t_ep_spf_members tesm, ' ||
3785                  '  ' || g_schema || '.t_ep_organization teo, ' || g_schema || '.t_ep_spf_demand_type tesdt, '||
3786                  '  msc_trading_partners mtp ' ||
3787                  '  where tesbm.t_ep_spf_base_model_code = msmo.ebs_base_model_code ' ||
3788                  '  and tes.t_ep_spf_base_model_id = tesbm.t_ep_spf_base_model_id ' ||
3789                  '  and tesdt.t_ep_spf_demand_type_code = ''SPF-BM'' ' ||
3790                  '  and tes.t_ep_spf_demand_type_id = tesdt.t_ep_spf_demand_type_id ' ||
3791                  '  and tesl.t_ep_spf_id = tes.t_ep_spf_id and tesl.level_id = ' || x_lvl_org_id ||
3792                  '  and tesm.filter_id = tesl.filter_id ' ||
3793                  '  and tesm.member_id = teo.t_ep_organization_ep_id ' ||
3794                  '  and mtp.sr_instance_id = ' || p_sr_instance_id ||
3795                  '  and mtp.organization_code = teo.organization ' ||
3796                  '  and mtp.partner_type = 3 ) b ' || -- Bug#12675064
3797                  ' on ' ||
3798                  ' ( a.ebs_base_model_sr_pk = b.ebs_base_model_sr_pk ' ||
3799                  '   and a.ebs_base_model_code = b.ebs_base_model_code ' ||
3800                  '   and a.dm_org_sr_pk = b.dm_org_sr_pk and a.dm_org_code = b.dm_org_code) ' ||
3801                  ' when not matched then ' ||
3802                  ' insert (ebs_base_model_sr_pk, ebs_base_model_code, dm_org_sr_pk, dm_org_code) ' ||
3803                  ' values (b.ebs_base_model_sr_pk, b.ebs_base_model_code, b.dm_org_sr_pk, b.dm_org_code)';
3804         msd_dem_common_utilities.log_debug(x_sql);
3805         execute immediate x_sql;
3806         msd_dem_common_utilities.log_debug(SQL%ROWCOUNT || ' - rows merged');
3807 
3808         commit;
3809 
3810     EXCEPTION
3811     WHEN OTHERS THEN
3812         retcode := -1;
3813         errbuf := substr(sqlerrm, 1, 200);
3814         msd_dem_common_utilities.log_message('Error in MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SERVICE_BOM - ' || errbuf);
3815         msd_dem_common_utilities.log_debug('Error in MSD_SPF_COLLECT_HISTORY_DATA.DERIVE_SERVICE_BOM (' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') || ') - ' || errbuf );
3816     END DERIVE_SERVICE_BOM;
3817 
3818 
3819 
3820 
3821    PROCEDURE COLLECT_SHIPMENT_DATA_FF (
3822       			errbuf						OUT NOCOPY 	VARCHAR2,
3823       			retcode						OUT NOCOPY 	VARCHAR2,
3824       			p_sr_instance_id			IN			NUMBER,
3825       			p_auto_run_download			IN			NUMBER,
3826       			p_file_separator			IN			VARCHAR2,
3827       			p_control_file_path			IN			VARCHAR2,
3828       			p_data_file_path			IN			VARCHAR2,
3829       			p_data_file_name			IN			VARCHAR2,
3830       			p_check_interval			IN			NUMBER	 DEFAULT 60,
3831       			p_time_out					IN			NUMBER	 DEFAULT 86400,
3832       			p_synchronous				IN			NUMBER	 DEFAULT G_NO )
3833    IS
3834 
3835       var_runtime				DATE			DEFAULT 	systimestamp;
3836 
3837       var_errbuf				VARCHAR2(2000)	DEFAULT		NULL;
3838       var_retcode				VARCHAR2(100)	DEFAULT		0;
3839 
3840    BEGIN
3841 
3842       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.collect_shipment_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3843 
3844       /* Log the input parameters to the log file */
3845       msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
3846 
3847       msd_dem_common_utilities.log_message('     ' || rpad('Source Instance ID', 30) || ' - ' || to_char(p_sr_instance_id));
3848       msd_dem_common_utilities.log_message('     ' || rpad('Auto Run Download', 30) || ' - ' || to_char(p_auto_run_download));
3849       msd_dem_common_utilities.log_message('     ' || rpad('File Separator', 30) || ' - ' || p_file_separator);
3850       msd_dem_common_utilities.log_message('     ' || rpad('Control File Path', 30) || ' - ' || p_control_file_path);
3851       msd_dem_common_utilities.log_message('     ' || rpad('Data File Path', 30) || ' - ' || p_data_file_path);
3852       msd_dem_common_utilities.log_message('     ' || rpad('Data File Name', 30) || ' - ' || p_data_file_name);
3853 
3854       msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
3855       msd_dem_common_utilities.log_message ('');
3856       msd_dem_common_utilities.log_message ('');
3857 
3858       /* Log the optional input parameters to the output file */
3859       msd_dem_common_utilities.log_debug('----------------------------------Input Parameters - Begin------------------------------------------');
3860 
3861       msd_dem_common_utilities.log_debug('     ' || rpad('Check Interval', 30) || ' - ' || to_char(p_check_interval));
3862       msd_dem_common_utilities.log_debug('     ' || rpad('Time Out', 30) || ' - ' || p_time_out);
3863       msd_dem_common_utilities.log_debug('     ' || rpad('Synchronous', 30) || ' - ' || to_char(p_synchronous));
3864 
3865       msd_dem_common_utilities.log_debug('-----------------------------------Input Parameters - End-------------------------------------------');
3866       msd_dem_common_utilities.log_debug ('');
3867       msd_dem_common_utilities.log_debug ('');
3868 
3869 
3870       var_retcode := 0;
3871 
3872 
3873       /* Truncate all the staging tables */
3874          truncate_spf_staging(var_errbuf, var_retcode);
3875          IF (var_retcode = -1)
3876          THEN
3877             retcode := -1;
3878             errbuf := var_errbuf;
3879             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3880             msd_dem_common_utilities.log_message ('Error in call to truncate_spf_staging');
3881             RETURN;
3882          END IF;
3883 
3884 
3885       /* Call the main program to run the spf shipment data collection in various stages */ -- Bug#12675064
3886          /*msd_dem_common_utilities.log_debug ('Calling msd_spf_collect_history_data.launch_spf_shipment_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3887          launch_spf_shipment_data_ff (var_errbuf,
3888                                      var_retcode,
3889                                      var_runtime,
3890                                      p_sr_instance_id,
3891                                      p_auto_run_download,
3892                                      p_file_separator,
3893                                      p_control_file_path,
3894                                      p_data_file_path,
3895                                      p_data_file_name,
3896                                      p_check_interval,
3897                                      p_time_out,
3898                                      p_synchronous);*/
3899 
3900            ---- Bug#12675064
3901             msd_dem_common_utilities.log_debug ('Calling msd_spf_collect_history_data.launch_spf_data_collection...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3902             launch_spf_data_collection (var_errbuf,
3903                                      var_retcode,
3904                                      var_runtime,
3905                                      p_sr_instance_id,
3906                                      '-999',
3907                                      null,
3908                                      null,
3909                                      null,
3910                                      null,
3911                                      null,
3912                                      null,
3913                                      null,
3914                                      G_YES,
3915                                      G_NO,
3916                                      G_NO,
3917                                      G_NO,
3918                                      p_auto_run_download,
3919                                      G_YES,
3920                                      p_file_separator,
3921                                      p_control_file_path,
3922                                      p_data_file_path,
3923                                      p_data_file_name,
3924                                      p_check_interval,
3925                                      p_time_out,
3926                                      p_synchronous);
3927 
3928          IF (var_retcode = -1)
3929          THEN
3930             retcode := -1;
3931             errbuf := var_errbuf;
3932             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_shipment_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3933             msd_dem_common_utilities.log_message ('Error in call to launch_spf_shipment_data_ff');
3934             RETURN;
3935          END IF;
3936          IF (var_retcode = 1)
3937          THEN
3938             retcode := 1;
3939             errbuf := var_errbuf;
3940             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_shipment_data_ff - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3941             msd_dem_common_utilities.log_message ('Warning in call to launch_spf_shipment_data_ff');
3942             RETURN;
3943          END IF;
3944 
3945       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.collect_shipment_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3946 
3947    EXCEPTION
3948       WHEN OTHERS THEN
3949          retcode := -1;
3950          errbuf := substr(SQLERRM,1,150);
3951          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_shipment_data_ff - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3952          msd_dem_common_utilities.log_message (errbuf);
3953          RETURN;
3954 
3955    END COLLECT_SHIPMENT_DATA_FF;
3956 
3957 
3958 
3959 
3960    PROCEDURE COLLECT_USAGE_DATA_FF (
3961       			errbuf						OUT NOCOPY 	VARCHAR2,
3962       			retcode						OUT NOCOPY 	VARCHAR2,
3963       			p_sr_instance_id			IN			NUMBER,
3964       			p_file_separator			IN			VARCHAR2,
3965       			p_control_file_path			IN			VARCHAR2,
3966       			p_data_file_path			IN			VARCHAR2,
3967       			p_data_file_name			IN			VARCHAR2,
3968       			p_auto_run_download			IN			NUMBER,
3969       			p_check_interval			IN			NUMBER	 DEFAULT 60,
3970       			p_time_out					IN			NUMBER	 DEFAULT 86400,
3971       			p_synchronous				IN			NUMBER	 DEFAULT G_NO )
3972    IS
3973 
3974       var_runtime				DATE			DEFAULT 	systimestamp;
3975 
3976       var_errbuf				VARCHAR2(2000)	DEFAULT		NULL;
3977       var_retcode				VARCHAR2(100)	DEFAULT		0;
3978 
3979    BEGIN
3980 
3981       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.collect_usage_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
3982 
3983       /* Log the input parameters to the log file */
3984       msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
3985 
3986       msd_dem_common_utilities.log_message('     ' || rpad('Source Instance ID', 30) || ' - ' || to_char(p_sr_instance_id));
3987       msd_dem_common_utilities.log_message('     ' || rpad('File Separator', 30) || ' - ' || p_file_separator);
3988       msd_dem_common_utilities.log_message('     ' || rpad('Control File Path', 30) || ' - ' || p_control_file_path);
3989       msd_dem_common_utilities.log_message('     ' || rpad('Data File Path', 30) || ' - ' || p_data_file_path);
3990       msd_dem_common_utilities.log_message('     ' || rpad('Data File Name', 30) || ' - ' || p_data_file_name);
3991       msd_dem_common_utilities.log_message('     ' || rpad('Auto Run Download', 30) || ' - ' || to_char(p_auto_run_download));
3992 
3993       msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
3994       msd_dem_common_utilities.log_message ('');
3995       msd_dem_common_utilities.log_message ('');
3996 
3997       /* Log the optional input parameters to the output file */
3998       msd_dem_common_utilities.log_debug('----------------------------------Input Parameters - Begin------------------------------------------');
3999 
4000       msd_dem_common_utilities.log_debug('     ' || rpad('Check Interval', 30) || ' - ' || to_char(p_check_interval));
4001       msd_dem_common_utilities.log_debug('     ' || rpad('Time Out', 30) || ' - ' || p_time_out);
4002       msd_dem_common_utilities.log_debug('     ' || rpad('Synchronous', 30) || ' - ' || to_char(p_synchronous));
4003 
4004       msd_dem_common_utilities.log_debug('-----------------------------------Input Parameters - End-------------------------------------------');
4005       msd_dem_common_utilities.log_debug ('');
4006       msd_dem_common_utilities.log_debug ('');
4007 
4008 
4009       var_retcode := 0;
4010 
4011 
4012       /* Truncate all the staging tables */
4013          truncate_spf_staging(var_errbuf, var_retcode);
4014          IF (var_retcode = -1)
4015          THEN
4016             retcode := -1;
4017             errbuf := var_errbuf;
4018             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_usage_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4019             msd_dem_common_utilities.log_message ('Error in call to truncate_spf_staging');
4020             RETURN;
4021          END IF;
4022 
4023       /* Call the main program to run the spf data collection in various stages */
4024          msd_dem_common_utilities.log_debug ('Calling msd_spf_collect_history_data.collect_usage_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4025          launch_spf_data_collection (var_errbuf,
4026                                      var_retcode,
4027                                      var_runtime,
4028                                      p_sr_instance_id,
4029                                      '-999',
4030                                      null,
4031                                      null,
4032                                      null,
4033                                      null,
4034                                      null,
4035                                      null,
4036                                      null,
4037                                      G_NO,
4038                                      G_YES,
4039                                      G_NO,
4040                                      G_NO,
4041                                      p_auto_run_download,
4042                                      G_YES,
4043                                      p_file_separator,
4044                                      p_control_file_path,
4045                                      p_data_file_path,
4046                                      p_data_file_name,
4047                                      p_check_interval,
4048                                      p_time_out,
4049                                      p_synchronous);
4050          IF (var_retcode = -1)
4051          THEN
4052             retcode := -1;
4053             errbuf := var_errbuf;
4054             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_usage_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4055             msd_dem_common_utilities.log_message ('Error in call to launch_spf_data_collection');
4056             RETURN;
4057          END IF;
4058          IF (var_retcode = 1)
4059          THEN
4060             retcode := 1;
4061             errbuf := var_errbuf;
4062             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_usage_data_ff - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4063             msd_dem_common_utilities.log_message ('Warning in call to launch_spf_data_collection');
4064          END IF;
4065 
4066       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.collect_usage_data_ff...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4067 
4068    EXCEPTION
4069       WHEN OTHERS THEN
4070          retcode := -1;
4071          errbuf := substr(SQLERRM,1,150);
4072          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_usage_data_ff - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4073          msd_dem_common_utilities.log_message (errbuf);
4074          RETURN;
4075 
4076    END COLLECT_USAGE_DATA_FF;
4077 
4078 
4079    PROCEDURE USAGE_DATA_PRE_PROCESS (
4080       			errbuf						OUT NOCOPY 	VARCHAR2,
4081       			retcode						OUT NOCOPY 	VARCHAR2,
4082       			p_sr_instance_id			IN			NUMBER )
4083    IS
4084 
4085       var_total_rows					NUMBER				DEFAULT 	NULL;
4086       var_row_count						NUMBER				DEFAULT		NULL;
4087       var_good_rows						NUMBER				DEFAULT		NULL;
4088       var_bad_rows						NUMBER				DEFAULT		NULL;
4089       var_spf_master_org				NUMBER				DEFAULT		NULL; -- Bug#12675064
4090 
4091       x_category_set_id     number := null;
4092 
4093       CURSOR c_get_bad_rows
4094       IS
4095          SELECT ebs_base_model_code, dm_item_code, dm_org_code, usage_date, error_text
4096             FROM msd_spf_st_spare_usage
4097             WHERE  process_flag = -1
4098                AND rownum < 10000;
4099 
4100    BEGIN
4101 
4102       msd_dem_common_utilities.log_debug ('Entering msd_spf_collect_history_data.usage_data_pre_process...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4103 
4104       /* Log the input parameters to the log file */
4105       msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
4106 
4107       msd_dem_common_utilities.log_message('     ' || rpad('Source Instance ID', 30) || ' - ' || to_char(p_sr_instance_id));
4108 
4109       msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
4110       msd_dem_common_utilities.log_message ('');
4111       msd_dem_common_utilities.log_message ('');
4112 
4113       /* Get the SPF Master Organization for SPF Base Model validation */ -- Bug#12675064
4114       SELECT to_number(parameter_value)
4115          INTO var_spf_master_org
4116          FROM msd_dem_setup_parameters
4117          WHERE parameter_name = 'MSD_SPF_MASTER_ORG';
4118 
4119       IF (var_spf_master_org IS NULL)
4120       THEN
4121 
4122          retcode := -1;
4123          errbuf := 'Unable to find SPF Master Organization. Hence exiting with error.';
4124          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.usage_data_pre_process - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4125          msd_dem_common_utilities.log_message (errbuf);
4126          RETURN;
4127 
4128       END IF;
4129 
4130       /* Get Total Rows in the table */
4131          msd_dem_common_utilities.log_debug('Total Count Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4132          SELECT count(1) INTO var_total_rows FROM msd_spf_st_spare_usage;
4133          msd_dem_common_utilities.log_debug('Total Count Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4134          IF (var_total_rows = 0)
4135          THEN
4136             retcode := -1;
4137             errbuf := 'No rows found in msd_spf_st_spare_usage';
4138             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.collect_usage_data_ff - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4139             msd_dem_common_utilities.log_message (errbuf);
4140             RETURN;
4141          ELSE
4142             msd_dem_common_utilities.log_message('Total rows in msd_spf_st_spare_usage - ' || to_char(var_total_rows));
4143             msd_dem_common_utilities.log_message ('');
4144             msd_dem_common_utilities.log_message ('');
4145          END IF;
4146 
4147       /* Process Organizations */
4148       msd_dem_common_utilities.log_message('----------------------------Process Organization Members - Begin------------------------------------');
4149       var_row_count := 0;
4150 
4151          msd_dem_common_utilities.log_message ('Update Source Organization Id...');
4152          msd_dem_common_utilities.log_debug('Update DM_ORG_SR_PK Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4153          UPDATE msd_spf_st_spare_usage su
4154             SET dm_org_sr_pk = NVL((SELECT sr_tp_id FROM msc_trading_partners mtp
4155                                        WHERE  mtp.sr_instance_id = p_sr_instance_id
4156                                           AND mtp.partner_type = 3
4157                                           AND mtp.organization_code = su.dm_org_code), su.dm_org_sr_pk);
4158          var_row_count := SQL%ROWCOUNT;
4159          msd_dem_common_utilities.log_debug('Update DM_ORG_SR_PK Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4160          msd_dem_common_utilities.log_message ('Rows updated - ' || to_char(var_row_count));
4161 
4162 
4163       msd_dem_common_utilities.log_message('-----------------------------Process Organization Members - End-------------------------------------');
4164       msd_dem_common_utilities.log_message ('');
4165       msd_dem_common_utilities.log_message ('');
4166 
4167       /* Process Service Parts */
4168       msd_dem_common_utilities.log_message('-----------------------------Process Service Parts Members - Begin----------------------------------');
4169       var_row_count := 0;
4170 
4171          msd_dem_common_utilities.log_message ('Update Source Inventory Item Id for Service Parts...');
4172          msd_dem_common_utilities.log_debug('Update DM_ITEM_SR_PK Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4173          UPDATE msd_spf_st_spare_usage su
4174             SET dm_item_sr_pk = NVL((SELECT sr_inventory_item_id FROM msc_system_items msi
4175                                        WHERE  msi.plan_id = -1
4176                                           AND msi.sr_instance_id = p_sr_instance_id
4177                                           AND msi.organization_id = su.dm_org_sr_pk
4178                                           AND msi.item_name = su.dm_item_code), su.dm_item_sr_pk)
4179             WHERE dm_org_sr_pk > 0;
4180          var_row_count := SQL%ROWCOUNT;
4181          msd_dem_common_utilities.log_debug('Update DM_ITEM_SR_PK Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4182          msd_dem_common_utilities.log_message ('Rows updated - ' || to_char(var_row_count));
4183 
4184 
4185       msd_dem_common_utilities.log_message('------------------------------Process Service Parts Members - End-----------------------------------');
4186       msd_dem_common_utilities.log_message ('');
4187       msd_dem_common_utilities.log_message ('');
4188 
4189       /* Process Finished Goods */
4190       msd_dem_common_utilities.log_message('-----------------------------Process Finished Goods Members - Begin---------------------------------');
4191       var_row_count := 0;
4192 
4193          msd_dem_common_utilities.log_message ('Update Source Inventory Item Id for Finished Goods...');
4194          msd_dem_common_utilities.log_debug('Update EBS_BASE_MODEL_SR_PK Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4195          UPDATE msd_spf_st_spare_usage su
4196             SET ebs_base_model_sr_pk = NVL((SELECT sr_inventory_item_id FROM msc_system_items msi
4197                                        WHERE  msi.plan_id = -1
4198                                           AND msi.sr_instance_id = p_sr_instance_id
4199                                           AND msi.organization_id = var_spf_master_org -- Bug#12675064
4200                                           AND msi.item_name = su.ebs_base_model_code), su.ebs_base_model_sr_pk)
4201             WHERE dm_org_sr_pk > 0;
4202          var_row_count := SQL%ROWCOUNT;
4203          msd_dem_common_utilities.log_debug('Update EBS_BASE_MODEL_SR_PK Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4204          msd_dem_common_utilities.log_message ('Rows updated - ' || to_char(var_row_count));
4205 
4206 
4207       msd_dem_common_utilities.log_message('------------------------------Process Finished Goods Members - End----------------------------------');
4208       msd_dem_common_utilities.log_message ('');
4209       msd_dem_common_utilities.log_message ('');
4210 
4211       /* Update Process Flag and Error Text for bad rows */
4212       msd_dem_common_utilities.log_message('------------------------------------Check Invalid Rows - Begin--------------------------------------');
4213       var_bad_rows := 0;
4214 
4215          msd_dem_common_utilities.log_message ('Checking for invalid rows ...');
4216          msd_dem_common_utilities.log_debug('Update Bad Rows Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4217          UPDATE msd_spf_st_spare_usage
4218             SET process_flag = -1,
4219                 error_text = 'Unable to find key(s) for - '
4220                              || decode (ebs_base_model_sr_pk, -23453, ' EBS_BASE_MODEL_CODE = ' || ebs_base_model_code, '')
4221                              || decode (dm_item_sr_pk, -23453, ' DM_ITEM_CODE = ' || dm_item_code, '')
4222                              || decode (dm_org_sr_pk, -23453, ' DM_ORG_CODE = ' || dm_org_code, '')
4223             WHERE ebs_base_model_sr_pk < 0
4224                OR dm_item_sr_pk < 0
4225                OR dm_org_sr_pk < 0;
4226          var_bad_rows := SQL%ROWCOUNT;
4227 
4228          msd_dem_common_utilities.log_debug('Update Bad Rows Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4229 
4230         msd_dem_common_utilities.log_message ('Checking for invalid spares ...');
4231 
4232         x_category_set_id := MSC_UTIL.GET_SERVICE_ITEMS_CATSET_ID;
4233         if x_category_set_id is null then
4234             raise_application_error(-20001, 'Profile ''MSC: Category Set for Serviceable Items'' not set. Cannot proceed with validation of spares.');
4235         end if;
4236 
4237         msd_dem_common_utilities.log_debug('Update Bad Rows Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4238         UPDATE msd_spf_st_spare_usage su
4239             SET process_flag = -1,
4240                 error_text = 'Spare not assigned to Spare Cat Set ' || x_category_set_id || ', for - '
4241                             || ' DM_ITEM_CODE = ' || dm_item_code || ''
4242         WHERE (process_flag is null or process_flag <> -1)
4243         and not exists (select 1 from msc_system_items msi, msc_item_categories mic  -- Bug#12675064
4244                 where msi.sr_inventory_item_id = su.dm_item_sr_pk and msi.plan_id = -1 and
4245                 msi.sr_instance_id = p_sr_instance_id and msi.organization_id = su.dm_org_sr_pk
4246                 and mic.organization_id = var_spf_master_org -- Bug#12675064
4247                 and mic.sr_instance_id = msi.sr_instance_id
4248                 and mic.inventory_item_id = msi.inventory_item_id  -- Bug#12675064
4249                 and mic.category_set_id = x_category_set_id );
4250         var_bad_rows := var_bad_rows + SQL%ROWCOUNT;
4251 
4252         msd_dem_common_utilities.log_debug('Update Bad Rows Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4253 
4254          IF (var_bad_rows > 0)
4255          THEN
4256 
4257             msd_dem_common_utilities.log_message ('Total Invalid Rows - ' || to_char (var_bad_rows));
4258             msd_dem_common_utilities.log_message ('');
4259             msd_dem_common_utilities.log_message ('');
4260 
4261             msd_dem_common_utilities.log_message ('Following rows are invalid and will be deleted from the table - ');
4262             msd_dem_common_utilities.log_message ('');
4263             msd_dem_common_utilities.log_message ('');
4264 
4265             msd_dem_common_utilities.log_message('--------------------------------------------------------------------------------'
4266                                                  || '--------------------------------------------------------------------------------'
4267                                                  || '------------------');
4268             msd_dem_common_utilities.log_message (rpad('EBS BASE MODEL CODE', 25) || ' ' || rpad('DM ITEM CODE', 25) || ' ' || rpad('DM ORG CODE', 12) || ' ' || rpad('USAGE DATE', 12) || ' ' || rpad('Error Text', 100));
4269             msd_dem_common_utilities.log_message('--------------------------------------------------------------------------------'
4270                                                  || '--------------------------------------------------------------------------------'
4271                                                  || '------------------');
4272 
4273             FOR c_rec IN c_get_bad_rows
4274             LOOP
4275                msd_dem_common_utilities.log_message(rpad(c_rec.ebs_base_model_code, 25) || ' '
4276                                                     || rpad(c_rec.dm_item_code, 25) || ' '
4277                                                     || rpad(c_rec.dm_org_code, 12) || ' '
4278                                                     || rpad(to_char(c_rec.usage_date, 'DD/MM/YYYY'), 12) || ' '
4279                                                     || rpad(c_rec.error_text, 100));
4280             END LOOP;
4281 
4282             msd_dem_common_utilities.log_message('--------------------------------------------------------------------------------'
4283                                                  || '--------------------------------------------------------------------------------'
4284                                                  || '------------------');
4285             msd_dem_common_utilities.log_message ('');
4286             msd_dem_common_utilities.log_message ('');
4287 
4288             msd_dem_common_utilities.log_message ('Deleting Invalid Rows...');
4289             var_row_count := 0;
4290 
4291             msd_dem_common_utilities.log_debug('Delete Bad Rows Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4292             DELETE FROM msd_spf_st_spare_usage WHERE process_flag = -1;
4293             var_row_count := SQL%ROWCOUNT;
4294             msd_dem_common_utilities.log_debug('Delete Bad Rows Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4295 
4296             msd_dem_common_utilities.log_message('Rows Deleted - ' || to_char(var_row_count));
4297 
4298          ELSE
4299             msd_dem_common_utilities.log_message ('No invalid rows found.');
4300          END IF;
4301 
4302       msd_dem_common_utilities.log_message('-------------------------------------Check Invalid Rows - End---------------------------------------');
4303       msd_dem_common_utilities.log_message ('');
4304       msd_dem_common_utilities.log_message ('');
4305 
4306       COMMIT;
4307 
4308       IF (var_bad_rows = var_total_rows)
4309       THEN
4310 
4311          retcode := -1;
4312          errbuf := 'All the rows are invalid. Hence exiting with error.';
4313          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.usage_data_pre_process - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4314 
4315       ELSE
4316 
4317          var_good_rows := var_total_rows - var_bad_rows;
4318          msd_dem_common_utilities.log_message ('Total valid rows - ' || to_char(var_good_rows));
4319 
4320          IF (var_bad_rows > 0)
4321          THEN
4322 
4323             msd_dem_common_utilities.log_message('Total invalid rows - ' || to_char(var_bad_rows));
4324             msd_dem_common_utilities.log_message ('');
4325             msd_dem_common_utilities.log_message ('');
4326             msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.usage_data_pre_process - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4327             msd_dem_common_utilities.log_message ('Invalid rows found in usage history flat file load.');
4328             retcode := 1;
4329             errbuf := 'Invalid rows found in usage history flat file load.';
4330 
4331          END IF;
4332 
4333       END IF;
4334 
4335       /* Aggregate Data to Demantra Base Time Level */
4336       msd_dem_common_utilities.log_message('---------------------------Aggregating Data to Base Time Level - Begin------------------------------');
4337       var_row_count := null;
4338 
4339          msd_dem_common_utilities.log_debug('Update Rows Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4340          UPDATE msd_spf_st_spare_usage
4341             SET process_flag = 0;
4342          msd_dem_common_utilities.log_debug('Update Rows Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4343          COMMIT;
4344 
4345          msd_dem_common_utilities.log_debug('Aggregate and Insert Rows Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4346          INSERT /*+ APPEND */ INTO MSD_SPF_ST_SPARE_USAGE NOLOGGING
4347             (USAGE_HIST_TYPE, EBS_BASE_MODEL_CODE, DM_ITEM_CODE, DM_ORG_CODE, USAGE_DATE, QUANTITY, -- Bug#12675064
4348              EBS_BASE_MODEL_SR_PK, DM_ITEM_SR_PK, DM_ORG_SR_PK,
4349              LAST_UPDATE_LOGIN, LAST_UPDATE_DATE, CREATION_DATE, LAST_UPDATED_BY, CREATED_BY)
4350          SELECT su.usage_hist_type, su.ebs_base_model_code, su.dm_item_code, su.dm_org_code, mdd.datet, sum(su.quantity), -- Bug#12675064
4351              su.ebs_base_model_sr_pk, su.dm_item_sr_pk, su.dm_org_sr_pk,
4352              FND_GLOBAL.LOGIN_ID, systimestamp, systimestamp, FND_GLOBAL.USER_ID, FND_GLOBAL.USER_ID
4353          FROM
4354             msd_spf_st_spare_usage su,
4355             msd_dem_dates mdd
4356          WHERE
4357             su.usage_date BETWEEN mdd.start_date AND mdd.end_date
4358          GROUP BY su.usage_hist_type, su.ebs_base_model_sr_pk, su.dm_item_sr_pk, su.dm_org_sr_pk, mdd.datet, -- Bug#12675064
4359                   su.ebs_base_model_code, su.dm_item_code, su.dm_org_code;
4360          var_row_count := SQL%ROWCOUNT;
4361          msd_dem_common_utilities.log_debug('Aggregate and Insert End Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4362          msd_dem_common_utilities.log_message('Rows (at base time level) Inserted - ' || to_char(var_row_count));
4363 
4364          COMMIT;
4365 
4366          msd_dem_common_utilities.log_debug('Daily Rows Delete Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4367          var_row_count := null;
4368 
4369          DELETE FROM msd_spf_st_spare_usage
4370             WHERE process_flag =0;
4371          var_row_count := SQL%ROWCOUNT;
4372          msd_dem_common_utilities.log_debug('Daily Rows Delete Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4373          msd_dem_common_utilities.log_message('Rows (at day level) Deleted - ' || to_char(var_row_count));
4374 
4375          COMMIT;
4376 
4377       msd_dem_common_utilities.log_message('----------------------------Aggregating Data to Base Time Level - End-------------------------------');
4378       msd_dem_common_utilities.log_message ('');
4379       msd_dem_common_utilities.log_message ('');
4380 
4381 
4382       msd_dem_common_utilities.log_debug ('Exiting msd_spf_collect_history_data.usage_data_pre_process...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4383 
4384    EXCEPTION
4385       WHEN OTHERS THEN
4386          retcode := -1;
4387          errbuf := substr(SQLERRM,1,150);
4388          msd_dem_common_utilities.log_message ('msd_spf_collect_history_data.usage_data_pre_process - EXCEPTION ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4389          msd_dem_common_utilities.log_message (errbuf);
4390          RETURN;
4391 
4392    END USAGE_DATA_PRE_PROCESS;
4393     /* Procedure for collect series data request */
4394     PROCEDURE COLLECT_SERIES_DATA_REQ (
4395         errbuf              OUT NOCOPY VARCHAR2,
4396         retcode             OUT NOCOPY VARCHAR2,
4397         p_series_id			IN NUMBER,
4398         p_dest_table		IN VARCHAR2,
4399         p_sr_instance_id	IN NUMBER,
4400         p_collection_method IN NUMBER,
4401         p_from_date			IN VARCHAR2,
4402         p_to_date			IN VARCHAR2,
4403         p_sim_plan_name     IN VARCHAR2 DEFAULT '')
4404     IS
4405         x_errbuf        VARCHAR2(200)   := NULL;
4406         x_retcode       VARCHAR2(100)   := NULL;
4407     BEGIN
4408         collect_series_data(x_errbuf, x_retcode,
4409                             p_series_id,
4410                             p_dest_table,
4411                             p_sr_instance_id,
4412                             p_collection_method,
4413                             fnd_date.canonical_to_date(p_from_date),
4414                             fnd_date.canonical_to_date(p_to_date),
4415                             p_sim_plan_name
4416                            );
4417 
4418         IF (x_retcode = -1) THEN
4419             retcode := -1;
4420             errbuf  := x_errbuf;
4421             msd_dem_common_utilities.log_message ('Error: MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_SERIES_DATA_REQ - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4422             msd_dem_common_utilities.log_message ('Error in call to COLLECT_SERIES_DATA');
4423             RETURN;
4424         END IF;
4425     END COLLECT_SERIES_DATA_REQ;
4426 
4427     /*
4428      * Set purge profiles for CMRO/Fleet/EAM collections
4429      */
4430     PROCEDURE SET_CMROEAM_PURGE_PROFILES(
4431             errbuf          OUT NOCOPY  VARCHAR2,
4432             retcode         OUT NOCOPY  VARCHAR2,
4433             p_product       IN  VARCHAR2,
4434             p_from_date     IN  DATE,
4435             p_to_date       IN  DATE
4436     )
4437     IS
4438         x_profile_id    number;
4439         x_sql           varchar2(500)   := null;
4440         x_query_name    varchar2(200)   := null;
4441         x_table_name    varchar2(30)    := null;
4442         x_series_id     number;
4443         x_lvl_org_id    number;
4444         x_org_filter_id number;
4445         x_from_date     date;
4446         x_to_date       date;
4447         x_errbuf1       varchar2(200)   := null;
4448         x_retcode1      varchar2(100)   := null;
4449     BEGIN
4450         msd_dem_common_utilities.log_debug ('Entering: MSD_SPF_COLLECT_HISTORY_DATA.SET_CMROEAM_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4451 
4452         x_sql := 'select datet from '|| g_schema ||'.inputs where datet >= :1 and rownum = 1 order by datet asc';
4453         execute immediate x_sql into x_from_date using p_from_date;
4454 
4455         x_sql := 'select datet from '|| g_schema ||'.inputs where datet <= :1 and rownum = 1 order by datet desc';
4456         execute immediate x_sql into x_to_date using p_to_date;
4457 
4458         if (x_from_date > x_to_date) then
4459             x_to_date := x_from_date;
4460         end if;
4461 
4462         msd_dem_common_utilities.log_message ('For the selected series, the old data will be purged from ''' || x_from_date ||''' to '''||x_to_date ||'''');
4463         msd_dem_common_utilities.log_debug ('For the selected series, the old data will be purged from ''' || x_from_date ||''' to '''||x_to_date ||'''');
4464 
4465         -- reset Purge Asset Group History profile to no load, no purge
4466         x_profile_id := to_number(msd_dem_common_utilities.get_app_id_text (
4467                                     'MSD_DEM_DEMANTRA_OBJECT_ID',
4468                                     'PROFILE_PURGE_AG_HISTORY',
4469                                     1,
4470                                     'id'));
4471         x_sql := 'select query_name, table_name from '|| g_schema || '.transfer_query where id = ' || x_profile_id;
4472         msd_dem_common_utilities.log_debug(x_sql);
4473         execute immediate x_sql into x_query_name, x_table_name;
4474         msd_dem_common_utilities.log_debug('Refreshing profile - ' || x_query_name);
4475         msd_dem_common_utilities.REFRESH_PURGE_SERIES(x_errbuf1, x_retcode1, x_profile_id, g_schema);
4476 
4477         IF (x_retcode1 = -1) THEN
4478             retcode := 1;
4479             errbuf := 'Error refreshing profile - ' || x_query_name ||'. ';
4480             msd_dem_common_utilities.log_debug('Error Refreshing profile -' || x_query_name || ' : ' || x_errbuf1);
4481         END IF;
4482 
4483         IF (p_product = 'CMRO') THEN
4484             --set series to Load-Override, Purge-All dates without new data within profile's date range
4485             --'Sales' series in 'Purge Asset Group History'
4486             msd_dem_common_utilities.log_debug('Set purge for Sales series');
4487             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4488                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4489                                         'SERIES_SALES',
4490                                         1,
4491                                         'forecast_type_id'));
4492             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4493             msd_dem_common_utilities.log_debug(x_sql);
4494             execute immediate x_sql;
4495 
4496             --set date range
4497             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_FDATE('||x_profile_id||', '''|| x_from_date||''' , '''||x_to_date||'''); end;';
4498             msd_dem_common_utilities.log_debug(x_sql);
4499             execute immediate x_sql;
4500 
4501             --populate Asset Group members in staging table
4502             x_sql := 'insert into '|| g_schema ||'.'||x_table_name||'(sdate, level1)'||
4503                      ' select '''||x_from_date||''',  teag.asset_group from '|| g_schema||'.t_ep_asset_group teag '||
4504                      ' where teag.asset_group in ' ||
4505 		       	     '  (SELECT  distinct asset_group FROM MSD_SPF_CMRO_BOM)';
4506             msd_dem_common_utilities.log_debug(x_sql);
4507             execute immediate x_sql;
4508 
4509             --notify app server
4510             x_sql := 'begin ' || g_schema|| '.API_NOTIFY_APS_INTEGRATION('||x_profile_id ||'); end;';
4511          	msd_dem_common_utilities.log_debug(x_sql);
4512             execute immediate x_sql;
4513         ELSIF (p_product = 'FLEET') THEN
4514             --set series to Load-Override, Purge-All dates without new data within profile's date range
4515             --'Fleet Size', 'Fleet Flight Hours', 'Fleet Number of Flights' series in 'Purge Asset Group History'
4516             msd_dem_common_utilities.log_debug('Set purge for Fleet Size series');
4517             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4518                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4519                                         'SERIES_FLEET_SIZE',
4520                                         1,
4521                                         'forecast_type_id'));
4522             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4523             msd_dem_common_utilities.log_debug(x_sql);
4524             execute immediate x_sql;
4525 
4526             msd_dem_common_utilities.log_debug('Set purge for Fleet Flight Hours series');
4527             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4528                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4529                                         'SERIES_FLEET_FLIGHT_HOURS',
4530                                         1,
4531                                         'forecast_type_id'));
4532             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4533             msd_dem_common_utilities.log_debug(x_sql);
4534             execute immediate x_sql;
4535 
4536             msd_dem_common_utilities.log_debug('Set purge for Fleet Number of Flights series');
4537             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4538                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4539                                         'SERIES_FLEET_NUMBER_FLIGHTS',
4540                                         1,
4541                                         'forecast_type_id'));
4542             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4543             msd_dem_common_utilities.log_debug(x_sql);
4544             execute immediate x_sql;
4545 
4546             --set date range
4547             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_FDATE('||x_profile_id||', '''|| x_from_date||''' , '''||x_to_date||'''); end;';
4548             msd_dem_common_utilities.log_debug(x_sql);
4549             execute immediate x_sql;
4550 
4551             --populate Asset Group members in staging table
4552             x_sql := 'insert into '|| g_schema ||'.'||x_table_name||'(sdate, level1)'||
4553                      ' select '''||x_from_date||''',  teag.asset_group from '|| g_schema||'.t_ep_asset_group teag '||
4554                      ' where teag.asset_group in ' ||
4555 		       	     '  (SELECT  distinct level1 FROM ' || G_FLEET_DATA_DEST_TABLE || ')';
4556             msd_dem_common_utilities.log_debug(x_sql);
4557             execute immediate x_sql;
4558 
4559             --notify app server
4560             x_sql := 'begin ' || g_schema|| '.API_NOTIFY_APS_INTEGRATION('||x_profile_id ||'); end;';
4561          	msd_dem_common_utilities.log_debug(x_sql);
4562             execute immediate x_sql;
4563         END IF;
4564 
4565         -- reset Purge Spare History Data profile to no load, no purge
4566         x_profile_id := to_number(msd_dem_common_utilities.get_app_id_text (
4567                                     'MSD_DEM_DEMANTRA_OBJECT_ID',
4568                                     'PROFILE_PURGE_SPARE_HISTORY',
4569                                     1,
4570                                     'id'));
4571         x_sql := 'select query_name, table_name from '|| g_schema || '.transfer_query where id = ' || x_profile_id;
4572         msd_dem_common_utilities.log_debug(x_sql);
4573         execute immediate x_sql into x_query_name, x_table_name;
4574         msd_dem_common_utilities.log_debug('Refreshing profile - ' || x_query_name);
4575         msd_dem_common_utilities.REFRESH_PURGE_SERIES(x_errbuf1, x_retcode1, x_profile_id, g_schema);
4576 
4577         IF (x_retcode1 = -1) THEN
4578             retcode := 1;
4579             errbuf := errbuf || 'Error refreshing profile - ' || x_query_name ||'. ';
4580             msd_dem_common_utilities.log_debug('Error Refreshing profile -' || x_query_name || ' : ' || x_errbuf1);
4581         END IF;
4582 
4583         IF (p_product = 'CMRO') THEN
4584             --set series to Load-Override, Purge-All dates without new data within profile's date range
4585             --'SPF Item Usage', 'SPF Work Order History' in 'Purge Spare history Data'
4586             msd_dem_common_utilities.log_debug('Set purge for usage history');
4587             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4588                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4589                                         'SERIES_SPF_USAGE_HIST',
4590                                         1,
4591                                         'forecast_type_id'));
4592             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4593             msd_dem_common_utilities.log_debug(x_sql);
4594             execute immediate x_sql;
4595 
4596             msd_dem_common_utilities.log_debug('Set purge for usage history');
4597             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4598                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4599                                         'SERIES_SPF_WORK_ORDER_HISTORY',
4600                                         1,
4601                                         'forecast_type_id'));
4602             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4603             msd_dem_common_utilities.log_debug(x_sql);
4604             execute immediate x_sql;
4605 
4606             --set date range
4607             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_FDATE('||x_profile_id||', '''|| x_from_date||''' , '''||x_to_date||'''); end;';
4608             execute immediate x_sql;
4609 
4610             --populate base model(s) in staging table
4611             x_sql := 'insert into '|| g_schema ||'.'||x_table_name||'(sdate, level1)'||
4612                      ' select '''||x_from_date||''',  tesbm.t_ep_spf_base_model_code from '|| g_schema||'.t_ep_spf_base_model tesbm '||
4613                      ' where tesbm.t_ep_spf_base_model_code in ' ||
4614 		       	     '  (SELECT  distinct base_model_code FROM MSD_SPF_CMRO_BOM)';
4615             msd_dem_common_utilities.log_debug(x_sql);
4616             execute immediate x_sql;
4617 
4618             --populate filters for org
4619             x_lvl_org_id := to_number(msd_dem_common_utilities.get_app_id_text (
4620                                             'MSD_DEM_DEMANTRA_OBJECT_ID',
4621                                             'LEVEL_ORGANIZATION',
4622                                             1,
4623                                             'group_table_id'));
4624             x_sql := 'select filter_id from ' || g_schema || '.transfer_query_filters ' ||
4625                      ' where id = ' || x_profile_id || ' and level_id = ' || x_lvl_org_id || '';
4626             msd_dem_common_utilities.log_debug(x_sql);
4627             execute immediate x_sql into x_org_filter_id;
4628 
4629             x_sql := 'delete from ' || g_schema || '.transfer_query_filter_m where filter_id = ' || x_org_filter_id;
4630             msd_dem_common_utilities.log_debug(x_sql);
4631             execute immediate x_sql;
4632 
4633             x_sql := 'insert into '||g_schema|| '.transfer_query_filter_m (filter_id, member_id) ' ||
4634                      ' select ' ||x_org_filter_id|| ', teo.t_ep_organization_ep_id from ' ||g_schema||'.t_ep_organization teo ' ||
4635                      ' where teo.organization in ' ||
4636                      ' (select distinct organization_code from MSD_SPF_CMRO_BOM)';
4637             msd_dem_common_utilities.log_debug(x_sql);
4638             execute immediate x_sql;
4639 
4640             --notify app server
4641             x_sql := 'begin ' || g_schema|| '.API_NOTIFY_APS_INTEGRATION('||x_profile_id ||'); end;';
4642          	msd_dem_common_utilities.log_debug(x_sql);
4643             execute immediate x_sql;
4644         END IF;
4645 
4646         -- reset Purge SPF Fleet Data profile to no load, no purge
4647         x_profile_id := to_number(msd_dem_common_utilities.get_app_id_text (
4648                                     'MSD_DEM_DEMANTRA_OBJECT_ID',
4649                                     'PROFILE_PURGE_SPF_FLEET_DATA',
4650                                     1,
4651                                     'id'));
4652         x_sql := 'select query_name, table_name from '|| g_schema || '.transfer_query where id = ' || x_profile_id;
4653         msd_dem_common_utilities.log_debug(x_sql);
4654         execute immediate x_sql into x_query_name, x_table_name;
4655         msd_dem_common_utilities.log_debug('Refreshing profile - ' || x_query_name);
4656         msd_dem_common_utilities.REFRESH_PURGE_SERIES(x_errbuf1, x_retcode1, x_profile_id, g_schema);
4657 
4658         IF (x_retcode1 = -1) THEN
4659             retcode := 1;
4660             errbuf := errbuf || 'Error refreshing profile - ' || x_query_name ||'. ';
4661             msd_dem_common_utilities.log_debug('Error Refreshing profile -' || x_query_name || ' : ' || x_errbuf1);
4662         END IF;
4663 
4664         IF (p_product = 'FLEET') THEN
4665             --set series to Load-Override, Purge-All dates without new data within profile's date range
4666             --'SPF Fleet Size', 'SPF Fleet Flight Hours', 'SPF Fleet Number of Flights' series in 'Purge SPF Fleet Data'
4667             msd_dem_common_utilities.log_debug('Set purge for SPF Fleet Size series');
4668             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4669                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4670                                         'SERIES_SPF_FLEET_SIZE',
4671                                         1,
4672                                         'forecast_type_id'));
4673             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4674             msd_dem_common_utilities.log_debug(x_sql);
4675             execute immediate x_sql;
4676 
4677             msd_dem_common_utilities.log_debug('Set purge for SPF Fleet Flight Hours series');
4678             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4679                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4680                                         'SERIES_SPF_FLEET_FLIGHT_HOURS',
4681                                         1,
4682                                         'forecast_type_id'));
4683             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4684             msd_dem_common_utilities.log_debug(x_sql);
4685             execute immediate x_sql;
4686 
4687             msd_dem_common_utilities.log_debug('Set purge for SPF Fleet Number of Flights series');
4688             x_series_id := to_number(msd_dem_common_utilities.get_app_id_text (
4689                                         'MSD_DEM_DEMANTRA_OBJECT_ID',
4690                                         'SERIES_SPF_FLEET_NUM_FLIGHTS',
4691                                         1,
4692                                         'forecast_type_id'));
4693             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_ATTR('||x_profile_id||', '|| x_series_id||', 0, 2); end;';
4694             msd_dem_common_utilities.log_debug(x_sql);
4695             execute immediate x_sql;
4696 
4697             --set date range
4698             x_sql := 'begin ' || g_schema|| '.API_MODIFY_INTEG_SERIES_FDATE('||x_profile_id||', '''|| x_from_date||''' , '''||x_to_date||'''); end;';
4699             msd_dem_common_utilities.log_debug(x_sql);
4700             execute immediate x_sql;
4701 
4702             --populate Asset Group members in staging table
4703             x_sql := 'insert into '|| g_schema ||'.'||x_table_name||'(sdate, level1)'||
4704                      ' select '''||x_from_date||''',  teag.asset_group from '|| g_schema||'.t_ep_asset_group teag '||
4705                      ' where teag.asset_group in ' ||
4706 		       	     '  (SELECT  distinct level1 FROM ' || G_FLEET_DATA_DEST_TABLE || ')';
4707             msd_dem_common_utilities.log_debug(x_sql);
4708             execute immediate x_sql;
4709 
4710             --notify app server
4711             x_sql := 'begin ' || g_schema|| '.API_NOTIFY_APS_INTEGRATION('||x_profile_id ||'); end;';
4712          	msd_dem_common_utilities.log_debug(x_sql);
4713             execute immediate x_sql;
4714         END IF;
4715 
4716         msd_dem_common_utilities.log_debug ('Exiting: MSD_SPF_COLLECT_HISTORY_DATA.SET_CMROEAM_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4717     EXCEPTION WHEN OTHERS THEN
4718         retcode := 1 ;
4719         errbuf  := errbuf || substr(SQLERRM,1,150);
4720         msd_dem_common_utilities.log_message ('Warning: MSD_SPF_COLLECT_HISTORY_DATA.SET_CMROEAM_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4721         msd_dem_common_utilities.log_debug (errbuf);
4722         msd_dem_common_utilities.log_debug ('Exiting: MSD_SPF_COLLECT_HISTORY_DATA.SET_CMROEAM_PURGE_PROFILES - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4723         RETURN;
4724     END SET_CMROEAM_PURGE_PROFILES;
4725 
4726 
4727     PROCEDURE COLLECT_CMRO_DATA (
4728         errbuf                      OUT NOCOPY  VARCHAR2,
4729         retcode                     OUT NOCOPY  VARCHAR2,
4730         p_sr_instance_id            IN          NUMBER,
4731         p_collection_group      	IN         	VARCHAR2,
4732         p_collection_method     	IN         	NUMBER,
4733         p_hidden_param				IN	   		VARCHAR2,
4734         p_date_range_type			IN	   		NUMBER,
4735         p_collection_window			IN	   		NUMBER,
4736         p_from_date					IN	   		VARCHAR2,
4737         p_to_date					IN	   		VARCHAR2,
4738         p_auto_run_download     	IN 	   		NUMBER,
4739         p_synchronous			    IN          NUMBER	 DEFAULT G_NO,
4740         p_check_interval		    IN		    NUMBER	 DEFAULT 60,
4741         p_time_out                  IN		    NUMBER	 DEFAULT 1440
4742     )
4743     IS
4744         x_errbuf        VARCHAR2(200)   := NULL;
4745         x_retcode       VARCHAR2(100)   := NULL;
4746         x_from_date     DATE            := NULL;
4747         x_to_date       DATE            := NULL;
4748         x_src_dblink    VARCHAR2(50)    := NULL;
4749         x_dest_dblink   VARCHAR2(50)    := NULL;
4750         x_sql           varchar2(1000)  := NULL;
4751         x_params        varchar2(500)   := null;
4752         x_dm_time_level     varchar2(6) := null;
4753         x_max_sales_date    date    := null;
4754         x_history_cap       date    := null;
4755         x_forecast_cap      date    := null;
4756         x_pval              varchar2(100) := null;
4757 
4758         var_request_id  NUMBER  DEFAULT     NULL;
4759         var_request_num NUMBER  DEFAULT     NULL;
4760 
4761         var_param_value         varchar2(240)   := null;
4762         var_key_value_pairs     VARCHAR2(500)   DEFAULT NULL;
4763     BEGIN
4764         msd_dem_common_utilities.log_debug ('Entering MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4765 
4766         --validate parameters
4767         msd_dem_common_utilities.ui_params_validation(x_errbuf, x_retcode,
4768                                                       x_from_date, x_to_date,
4769                                                       p_sr_instance_id,
4770                                                       p_collection_group,
4771                                                       p_collection_method,
4772                                                       null,
4773                                                       p_date_range_type,
4774                                                       p_collection_window,
4775                                                       p_from_date,
4776                                                       p_to_date,
4777                                                       'CMRO'
4778                                                       );
4779 
4780         IF (x_retcode = -1) THEN
4781             retcode := -1;
4782             errbuf  := x_errbuf;
4783             msd_dem_common_utilities.log_message ('Error: MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4784             msd_dem_common_utilities.log_message ('Error validating params for COLLECT_CMRO_DATA');
4785             RETURN;
4786         END IF;
4787 
4788         /* Get Instance source DB Link */
4789         msd_dem_common_utilities.get_dblink (
4790                                 x_errbuf,
4791                                 x_retcode,
4792                                 p_sr_instance_id,
4793                                 x_src_dblink);
4794         IF (x_retcode = -1) THEN
4795             retcode := -1;
4796             errbuf := substr(SQLERRM,1,150);
4797             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4798             msd_dem_common_utilities.log_message ('Error in call to MSD_DEM_COMMON_UTILITIES.GET_DBLINK');
4799             msd_dem_common_utilities.log_message (errbuf);
4800             RETURN;
4801         END IF;
4802 
4803         /* Get Instance destination DB Link */
4804         msd_dem_common_utilities.get_dest_dblink (
4805                                 x_errbuf,
4806                                 x_retcode,
4807                                 p_sr_instance_id,
4808                                 x_dest_dblink);
4809         IF (x_retcode = -1) THEN
4810             retcode := -1;
4811             errbuf := substr(SQLERRM,1,150);
4812             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4813             msd_dem_common_utilities.log_message ('Error in call to MSD_DEM_COMMON_UTILITIES.GET_DEST_DBLINK');
4814             msd_dem_common_utilities.log_message (errbuf);
4815             RETURN;
4816         END IF;
4817 
4818         /* Truncate all the staging tables */
4819         truncate_spf_cmro_staging(x_errbuf, x_retcode);
4820         IF (x_retcode = -1) THEN
4821             retcode := -1;
4822             errbuf := x_errbuf;
4823             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4824             msd_dem_common_utilities.log_message ('Error in call to TRUNCATE_SPF_CMRO_STAGING');
4825             RETURN;
4826         END IF;
4827 
4828         /* STAGE I  *** BEGIN *** */
4829         msd_dem_common_utilities.log_message ('---------------------------------Stage I - Begin-------------------------------------');
4830         var_request_num := 0;
4831 
4832         IF (g_req_table.COUNT <> 0)
4833         THEN
4834             g_req_table.DELETE;
4835         END IF;
4836 
4837         msd_dem_common_utilities.log_message ('');
4838         msd_dem_common_utilities.log_message ('Launching source data collection request');
4839 
4840         --launch collection request on source
4841         BEGIN
4842 
4843             var_request_id := null;
4844             x_sql := 'begin ' ||
4845                      'msd_dem_common_utilities.launch_remote_request' || x_src_dblink ||
4846                      '  (:1, :2, :3, :4, :5, :6, :7);' ||
4847                      'end;';
4848             msd_dem_common_utilities.log_debug('SQL for request launch : ');
4849             msd_dem_common_utilities.log_debug(x_sql);
4850 
4851             x_params := ' ''MSD'', ''MSDSPFEAMCMRO'', NULL, NULL, FALSE, ' ||
4852                         ' ' || p_sr_instance_id || ', ''' || p_collection_group || ''', ' ||
4853                         ' ''' || fnd_date.date_to_canonical(x_from_date) || ''', ' ||
4854                         ' ''' || fnd_date.date_to_canonical(x_to_date) || ''', ' ||
4855                         ' ''' || x_dest_dblink || ''', ' ||
4856                         ' ''CMRO'' ';
4857             execute immediate x_sql using out x_errbuf, out x_retcode,
4858                                           in fnd_global.user_name, in fnd_global.resp_name, in fnd_global.application_name,
4859                                           in x_params,
4860                                           out var_request_id;
4861 
4862             IF (x_retcode = -1) THEN
4863                 retcode := -1;
4864                 errbuf := x_errbuf;
4865                 msd_dem_common_utilities.log_message ('ERROR(1) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4866                 msd_dem_common_utilities.log_message (errbuf);
4867                 RETURN;
4868             END IF;
4869         EXCEPTION
4870             WHEN OTHERS THEN
4871                 retcode := -1;
4872                 errbuf := substr(SQLERRM,1,200);
4873                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4874                 msd_dem_common_utilities.log_message ('Error while submitting collection request on source');
4875                 msd_dem_common_utilities.log_message (errbuf);
4876                 RETURN;
4877         END;
4878 
4879         var_request_num := var_request_num + 1;
4880         g_req_table(var_request_num).REQUEST_ID := var_request_id;
4881         g_req_table(var_request_num).DESCRIPTION := 'SPF CMRO Collect Source Data';
4882         g_req_table(var_request_num).IS_COMPLETE := FALSE;
4883         g_req_table(var_request_num).status := 1;
4884 
4885         COMMIT;
4886 
4887         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
4888         msd_dem_common_utilities.log_message ('');
4889         msd_dem_common_utilities.log_message ('');
4890 
4891         IF (var_request_num > 0) THEN
4892 
4893             check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, x_src_dblink);
4894             IF (x_retcode = -1) THEN
4895                 retcode := -1;
4896                 errbuf := x_errbuf;
4897                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4898                 msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage I to complete.');
4899                 msd_dem_common_utilities.log_message (errbuf);
4900                 RETURN;
4901             END IF;
4902 
4903             IF (x_retcode = 1) THEN
4904                 retcode := 1;
4905                 errbuf := x_errbuf;
4906                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4907                 msd_dem_common_utilities.log_message ('One or more requests in Stage I completed with warnings.');
4908                 msd_dem_common_utilities.log_message (errbuf);
4909             END IF;
4910 
4911         END IF;
4912 
4913         msd_dem_common_utilities.log_message ('---------------------------------Stage I - End---------------------------------------');
4914         msd_dem_common_utilities.log_message ('');
4915         msd_dem_common_utilities.log_message ('');
4916         /* STAGE I  *** END *** */
4917 
4918         /* STAGE II  *** BEGIN *** */
4919         msd_dem_common_utilities.log_message ('---------------------------------Stage II - Begin-------------------------------------');
4920 
4921         /* Step1: Populate CMRO BOM, CMRO data staging, Sales staging, Item staging tables */
4922         /* Step2: Populate CMRO level staging, Loc staging tables */
4923         /* Step3: Population for SPF CMRO members, Cap population from date (all members - existing and new) */
4924         /* Step4: Set purge profiles */
4925 
4926         /* Begin Step1: Populate CMRO BOM, CMRO data staging, Sales staging, Item staging tables */
4927         msd_dem_common_utilities.log_message ('');
4928         msd_dem_common_utilities.log_message ('Step1: Populate CMRO BOM, CMRO data staging, Sales staging, Item staging tables');
4929 
4930         var_request_num := 0;
4931         IF (g_req_table.COUNT <> 0) THEN
4932             g_req_table.DELETE;
4933         END IF;
4934 
4935         msd_dem_common_utilities.log_message ('');
4936         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_BOM');
4937         BEGIN
4938             var_request_id := null;
4939             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
4940                                                             'EQ_SPF_CMRO_BOM',
4941                                                             p_sr_instance_id);
4942         EXCEPTION
4943             WHEN OTHERS THEN
4944                 retcode := -1;
4945                 errbuf := substr(SQLERRM,1,150);
4946                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4947                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_BOM');
4948                 msd_dem_common_utilities.log_message (errbuf);
4949                 RETURN;
4950         END;
4951 
4952         var_request_num := var_request_num + 1;
4953         g_req_table(var_request_num).REQUEST_ID := var_request_id;
4954         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_BOM';
4955         g_req_table(var_request_num).IS_COMPLETE := FALSE;
4956         g_req_table(var_request_num).status := 1;
4957 
4958         COMMIT;
4959 
4960         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
4961         msd_dem_common_utilities.log_message ('');
4962 
4963         msd_dem_common_utilities.log_message ('');
4964         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_SALES_TMPL');
4965         BEGIN
4966             var_request_id := null;
4967             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
4968                                                             'EQ_SPF_CMRO_SALES_TMPL',
4969                                                             p_sr_instance_id);
4970         EXCEPTION
4971             WHEN OTHERS THEN
4972                 retcode := -1;
4973                 errbuf := substr(SQLERRM,1,150);
4974                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
4975                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_SALES_TMPL');
4976                 msd_dem_common_utilities.log_message (errbuf);
4977                 RETURN;
4978         END;
4979 
4980         var_request_num := var_request_num + 1;
4981         g_req_table(var_request_num).REQUEST_ID := var_request_id;
4982         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_SALES_TMPL';
4983         g_req_table(var_request_num).IS_COMPLETE := FALSE;
4984         g_req_table(var_request_num).status := 1;
4985 
4986         COMMIT;
4987 
4988         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
4989         msd_dem_common_utilities.log_message ('');
4990 
4991         msd_dem_common_utilities.log_message ('');
4992         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_DATA');
4993         BEGIN
4994             var_request_id := null;
4995             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
4996                                                             'EQ_SPF_CMRO_DATA',
4997                                                             p_sr_instance_id);
4998         EXCEPTION
4999             WHEN OTHERS THEN
5000                 retcode := -1;
5001                 errbuf := substr(SQLERRM,1,150);
5002                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5003                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_DATA');
5004                 msd_dem_common_utilities.log_message (errbuf);
5005                 RETURN;
5006         END;
5007 
5008         var_request_num := var_request_num + 1;
5009         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5010         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_DATA';
5011         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5012         g_req_table(var_request_num).status := 1;
5013 
5014         COMMIT;
5015 
5016         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5017         msd_dem_common_utilities.log_message ('');
5018 
5019         msd_dem_common_utilities.log_message ('');
5020         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_ITEM_TMPL');
5021         BEGIN
5022             x_sql := 'select parameter_value from msd_dem_setup_parameters where parameter_name = ''MSD_DEM_MASTER_ORG''';
5023             execute immediate x_sql into var_param_value;
5024             var_key_value_pairs := '$C_MASTER_ORG_STRING#' || var_param_value ;
5025 
5026             x_sql := 'select parameter_value from msd_dem_setup_parameters where parameter_name = ''MSD_DEM_CATEGORY_SET_NAME''';
5027             execute immediate x_sql into var_param_value;
5028             var_key_value_pairs := var_key_value_pairs || '$C_CATEGORY_STRING#' || var_param_value;
5029 
5030 		-- BUG#14694463  kkhatri
5031             var_key_value_pairs := var_key_value_pairs || '$C_MATERIAL#' || CS_DEM_MATERIAL;
5032             var_key_value_pairs := var_key_value_pairs || '$C_RESOURCE#' || CS_DEM_RESOURCE || '$';
5033 
5034             var_request_id := null;
5035             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5036                                                             'EQ_SPF_CMRO_ITEM_TMPL',
5037                                                             p_sr_instance_id,
5038                                                             var_key_value_pairs);
5039         EXCEPTION
5040             WHEN OTHERS THEN
5041                 retcode := -1;
5042                 errbuf := substr(SQLERRM,1,150);
5043                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5044                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_ITEM_TMPL');
5045                 msd_dem_common_utilities.log_message (errbuf);
5046                 RETURN;
5047         END;
5048 
5049         var_request_num := var_request_num + 1;
5050         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5051         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_ITEM_TMPL';
5052         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5053         g_req_table(var_request_num).status := 1;
5054 
5055         COMMIT;
5056 
5057         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5058         msd_dem_common_utilities.log_message ('');
5059         msd_dem_common_utilities.log_message ('');
5060 
5061         IF (var_request_num > 0) THEN
5062 
5063             check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out);
5064             IF (x_retcode = -1) THEN
5065                 retcode := -1;
5066                 errbuf := x_errbuf;
5067                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5068                 msd_dem_common_utilities.log_message ('Error while waiting for requests for Step1 of Stage II to complete.');
5069                 msd_dem_common_utilities.log_message (errbuf);
5070                 RETURN;
5071             END IF;
5072 
5073             IF (x_retcode = 1) THEN
5074                 retcode := 1;
5075                 errbuf := x_errbuf;
5076                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5077                 msd_dem_common_utilities.log_message ('One or more requests in Step1 of Stage II completed with warnings.');
5078                 msd_dem_common_utilities.log_message (errbuf);
5079             END IF;
5080 
5081         END IF;
5082         /* End   Step1: Populate CMRO BOM, CMRO data staging, Sales staging, Item staging tables */
5083 
5084         /* Begin Step2: Populate CMRO level staging, Loc staging tables */
5085         msd_dem_common_utilities.log_message ('');
5086         msd_dem_common_utilities.log_message ('Begin Step2: Populate SPF level staging, Loc staging tables');
5087 
5088         var_request_num := 0;
5089         IF (g_req_table.COUNT <> 0) THEN
5090             g_req_table.DELETE;
5091         END IF;
5092 
5093         msd_dem_common_utilities.log_message ('');
5094         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_BASE_MODEL');
5095         BEGIN
5096             var_request_id := null;
5097             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5098                                                             'EQ_SPF_CMRO_BASE_MODEL',
5099                                                             p_sr_instance_id);
5100         EXCEPTION
5101             WHEN OTHERS THEN
5102                 retcode := -1;
5103                 errbuf := substr(SQLERRM,1,150);
5104                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5105                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_BASE_MODEL');
5106                 msd_dem_common_utilities.log_message (errbuf);
5107                 RETURN;
5108         END;
5109 
5110         var_request_num := var_request_num + 1;
5111         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5112         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_BASE_MODEL';
5113         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5114         g_req_table(var_request_num).status := 1;
5115 
5116         COMMIT;
5117 
5118         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5119         msd_dem_common_utilities.log_message ('');
5120 
5121         msd_dem_common_utilities.log_message ('');
5122         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_CHILD');
5123         BEGIN
5124             var_request_id := null;
5125             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5126                                                             'EQ_SPF_CMRO_CHILD',
5127                                                             p_sr_instance_id);
5128         EXCEPTION
5129             WHEN OTHERS THEN
5130                 retcode := -1;
5131                 errbuf := substr(SQLERRM,1,150);
5132                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5133                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_CHILD');
5134                 msd_dem_common_utilities.log_message (errbuf);
5135                 RETURN;
5136         END;
5137 
5138         var_request_num := var_request_num + 1;
5139         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5140         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_CHILD';
5141         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5142         g_req_table(var_request_num).status := 1;
5143 
5144         COMMIT;
5145 
5146         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5147         msd_dem_common_utilities.log_message ('');
5148 
5149         msd_dem_common_utilities.log_message ('');
5150         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_VISIT_TYPE');
5151         BEGIN
5152             var_request_id := null;
5153             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5154                                                             'EQ_SPF_CMRO_VISIT_TYPE',
5155                                                             p_sr_instance_id);
5156         EXCEPTION
5157             WHEN OTHERS THEN
5158                 retcode := -1;
5159                 errbuf := substr(SQLERRM,1,150);
5160                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5161                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_VISIT_TYPE');
5162                 msd_dem_common_utilities.log_message (errbuf);
5163                 RETURN;
5164         END;
5165 
5166         var_request_num := var_request_num + 1;
5167         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5168         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_VISIT_TYPE';
5169         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5170         g_req_table(var_request_num).status := 1;
5171 
5172         COMMIT;
5173 
5174         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5175         msd_dem_common_utilities.log_message ('');
5176 
5177         msd_dem_common_utilities.log_message ('');
5178         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_VISIT_STAGE_TYPE');
5179         BEGIN
5180             var_request_id := null;
5181             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5182                                                             'EQ_SPF_CMRO_VISIT_STAGE_TYPE',
5183                                                             p_sr_instance_id);
5184         EXCEPTION
5185             WHEN OTHERS THEN
5186                 retcode := -1;
5187                 errbuf := substr(SQLERRM,1,150);
5188                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5189                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_VISIT_STAGE_TYPE');
5190                 msd_dem_common_utilities.log_message (errbuf);
5191                 RETURN;
5192         END;
5193 
5194         var_request_num := var_request_num + 1;
5195         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5196         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_VISIT_STAGE_TYPE';
5197         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5198         g_req_table(var_request_num).status := 1;
5199 
5200         COMMIT;
5201 
5202         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5203         msd_dem_common_utilities.log_message ('');
5204 
5205         /*msd_dem_common_utilities.log_message ('');
5206         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_MAINTENANCE_TYPE');
5207         BEGIN
5208             var_request_id := null;
5209             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5210                                                             'EQ_SPF_CMRO_MAINTENANCE_TYPE',
5211                                                             p_sr_instance_id);
5212         EXCEPTION
5213             WHEN OTHERS THEN
5214                 retcode := -1;
5215                 errbuf := substr(SQLERRM,1,150);
5216                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5217                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_MAINTENANCE_TYPE');
5218                 msd_dem_common_utilities.log_message (errbuf);
5219                 RETURN;
5220         END;
5221 
5222         var_request_num := var_request_num + 1;
5223         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5224         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_MAINTENANCE_TYPE';
5225         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5226         g_req_table(var_request_num).status := 1;
5227 
5228         COMMIT;
5229 
5230         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5231         msd_dem_common_utilities.log_message ('');*/
5232 
5233         msd_dem_common_utilities.log_message ('');
5234         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_LEVEL');
5235         BEGIN
5236             var_request_id := null;
5237             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5238                                                             'EQ_SPF_CMRO_LEVEL',
5239                                                             p_sr_instance_id);
5240         EXCEPTION
5241             WHEN OTHERS THEN
5242                 retcode := -1;
5243                 errbuf := substr(SQLERRM,1,150);
5244                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5245                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_LEVEL');
5246                 msd_dem_common_utilities.log_message (errbuf);
5247                 RETURN;
5248         END;
5249 
5250         var_request_num := var_request_num + 1;
5251         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5252         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_LEVEL';
5253         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5254         g_req_table(var_request_num).status := 1;
5255 
5256         COMMIT;
5257 
5258         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5259         msd_dem_common_utilities.log_message ('');
5260 
5261         msd_dem_common_utilities.log_message ('');
5262         msd_dem_common_utilities.log_message ('Launching request for Collect Level Types - Location');
5263         BEGIN
5264             var_request_id := null;
5265             var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMCLT', NULL, NULL, FALSE,
5266                                                             p_sr_instance_id, 1);
5267         EXCEPTION
5268             WHEN OTHERS THEN
5269                 retcode := -1;
5270                 errbuf := substr(SQLERRM,1,150);
5271                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5272                 msd_dem_common_utilities.log_message ('Error while submitting request for for Collect Level Types - Location');
5273                 msd_dem_common_utilities.log_message (errbuf);
5274                 RETURN;
5275         END;
5276 
5277         var_request_num := var_request_num + 1;
5278         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5279         g_req_table(var_request_num).DESCRIPTION := 'SPF Collect Level Types - Location';
5280         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5281         g_req_table(var_request_num).status := 1;
5282 
5283         COMMIT;
5284 
5285         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5286         msd_dem_common_utilities.log_message ('');
5287         msd_dem_common_utilities.log_message ('');
5288 
5289         IF (var_request_num > 0) THEN
5290 
5291             check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out);
5292             IF (x_retcode = -1) THEN
5293                 retcode := -1;
5294                 errbuf := x_errbuf;
5295                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5296                 msd_dem_common_utilities.log_message ('Error while waiting for requests for Step2 of Stage II to complete.');
5297                 msd_dem_common_utilities.log_message (errbuf);
5298                 RETURN;
5299             END IF;
5300 
5301             IF (x_retcode = 1) THEN
5302                 retcode := 1;
5303                 errbuf := x_errbuf;
5304                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5305                 msd_dem_common_utilities.log_message ('One or more requests in Step2 of Stage II completed with warnings.');
5306                 msd_dem_common_utilities.log_message (errbuf);
5307             END IF;
5308 
5309         END IF;
5310         /* End   Step2: Populate CMRO level staging, Loc staging tables */
5311 
5312         /* Begin Step3: Population for SPF CMRO members, Cap population from date (all members - existing and new) */
5313         msd_dem_common_utilities.log_message ('');
5314         msd_dem_common_utilities.log_message ('Begin Step3: Population for SPF CMRO members, Cap population from date (all members - existing and new)');
5315 
5316         -- get demantra time level
5317         x_dm_time_level := lower(msd_dem_common_utilities.dm_time_level);
5318 
5319         -- get max_sales_date
5320         x_sql := 'select trunc(max(max_date), ''dd'') from ( '||
5321                  ' select max(sdate) max_date from ' || g_schema || '.BIIO_SPF_CMRO_DATA '||
5322                  ' union ' ||
5323                  ' select to_date(' || g_schema || '.get_max_date, param.pval) max_date from ' ||
5324                  g_schema || '.db_params param where param.pname = ''nls_date_format'' )';
5325         msd_dem_common_utilities.log_debug(x_sql);
5326         execute immediate x_sql into x_max_sales_date;
5327         msd_dem_common_utilities.log_debug('Max Sales Date - ' || x_max_sales_date);
5328 
5329         -- get history cap
5330         x_sql := 'select pval from ' || g_schema || '.sys_params where lower(pname) = ''spf_history_periods''';
5331         execute immediate x_sql into x_pval;
5332 
5333         if x_dm_time_level = 'day' then
5334             x_history_cap := x_max_sales_date - to_number(x_pval);
5335         elsif x_dm_time_level = 'week' then
5336             x_history_cap := x_max_sales_date - 7*to_number(x_pval);
5337         elsif x_dm_time_level = 'month' then
5338             x_history_cap := add_months(x_max_sales_date, -to_number(x_pval));
5339         end if;
5340         msd_dem_common_utilities.log_debug('History Cap - ' || x_history_cap);
5341 
5342         -- get future cap
5343         x_sql := 'select value_float from ' || g_schema || '.init_params_0 where lower(pname) = ''lead''';
5344         execute immediate x_sql into x_pval;
5345         if x_dm_time_level = 'day' then
5346             x_forecast_cap := x_max_sales_date + to_number(x_pval);
5347         elsif x_dm_time_level = 'week' then
5348             x_forecast_cap := x_max_sales_date + 7*to_number(x_pval);
5349         elsif x_dm_time_level = 'month' then
5350             x_forecast_cap := add_months(x_max_sales_date, to_number(x_pval));
5351         end if;
5352         msd_dem_common_utilities.log_debug('Forecast Cap - ' || x_forecast_cap);
5353 
5354         var_request_num := 0;
5355         IF (g_req_table.COUNT <> 0) THEN
5356             g_req_table.DELETE;
5357         END IF;
5358 
5359         msd_dem_common_utilities.log_message ('');
5360         msd_dem_common_utilities.log_message ('Launching request for populating EQ_SPF_CMRO_POPULATION');
5361         BEGIN
5362             var_key_value_pairs := '$C_POP_UNTIL_DATE#to_date(''' || to_char(x_forecast_cap, 'DD-MON-RRRR') || ''', ''DD-MON-RRRR'')$';
5363             var_request_id := null;
5364             var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,
5365                                                             'EQ_SPF_CMRO_POPULATION',
5366                                                             p_sr_instance_id,
5367                                                             var_key_value_pairs);
5368         EXCEPTION
5369             WHEN OTHERS THEN
5370                 retcode := -1;
5371                 errbuf := substr(SQLERRM,1,150);
5372                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5373                 msd_dem_common_utilities.log_message ('Error while submitting request for populating EQ_SPF_CMRO_POPULATION');
5374                 msd_dem_common_utilities.log_message (errbuf);
5375                 RETURN;
5376         END;
5377 
5378         var_request_num := var_request_num + 1;
5379         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5380         g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_CMRO_POPULATION';
5381         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5382         g_req_table(var_request_num).status := 1;
5383 
5384         COMMIT;
5385 
5386         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5387         msd_dem_common_utilities.log_message ('');
5388         msd_dem_common_utilities.log_message ('');
5389 
5390         IF (var_request_num > 0) THEN
5391 
5392             check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out);
5393             IF (x_retcode = -1) THEN
5394                 retcode := -1;
5395                 errbuf := x_errbuf;
5396                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5397                 msd_dem_common_utilities.log_message ('Error while waiting for requests for Step3 of Stage II to complete.');
5398                 msd_dem_common_utilities.log_message (errbuf);
5399                 RETURN;
5400             END IF;
5401 
5402             IF (x_retcode = 1) THEN
5403                 retcode := 1;
5404                 errbuf := x_errbuf;
5405                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5406                 msd_dem_common_utilities.log_message ('One or more requests in Step3 of Stage II completed with warnings.');
5407                 msd_dem_common_utilities.log_message (errbuf);
5408             END IF;
5409 
5410         END IF;
5411 
5412         msd_dem_common_utilities.log_debug(' ');
5413 
5414         x_sql := 'UPDATE ' || g_schema || '.BIIO_SPF_POPULATION ' ||
5415                  '  SET FROM_DATE = :1' ||
5416                  '  WHERE FROM_DATE < :2';
5417         msd_dem_common_utilities.log_debug(x_sql);
5418         execute immediate x_sql using x_history_cap, x_history_cap;
5419 
5420         /* End   Step3: Population for SPF CMRO members, Cap population from date (all members - existing and new) */
5421 
5422         /* Begin    Step4: Set purge profiles */
5423         set_cmroeam_purge_profiles(x_errbuf, x_retcode, 'CMRO', x_from_date, x_to_date);
5424         IF (x_retcode = -1) THEN
5425             retcode := -1;
5426             errbuf := x_errbuf;
5427             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5428             msd_dem_common_utilities.log_message ('Error when setting purge profiles.');
5429             msd_dem_common_utilities.log_message (errbuf);
5430             RETURN;
5431         END IF;
5432 
5433         IF (x_retcode = 1) THEN
5434             retcode := 1;
5435             errbuf := x_errbuf;
5436             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5437             msd_dem_common_utilities.log_message ('Warning when setting purge profiles.');
5438             msd_dem_common_utilities.log_message (errbuf);
5439         END IF;
5440         /* End    Step4: Set purge profiles */
5441 
5442         msd_dem_common_utilities.log_message ('---------------------------------Stage II - End---------------------------------------');
5443         msd_dem_common_utilities.log_message ('');
5444         msd_dem_common_utilities.log_message ('');
5445         /* STAGE II  *** END *** */
5446 
5447         /* STAGE III  *** BEGIN *** */
5448         msd_dem_common_utilities.log_message ('---------------------------------Stage III - Begin-------------------------------------');
5449         var_request_num := 0;
5450 
5451         IF (g_req_table.COUNT <> 0)
5452         THEN
5453             g_req_table.DELETE;
5454         END IF;
5455 
5456         IF (p_auto_run_download = G_YES) then
5457             BEGIN
5458 
5459                 var_request_id := null;
5460                 var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMLDW', NULL, NULL, FALSE,
5461                                                                 'WF_SPF_IMPORT_CMRO_DATA',
5462                                                                 p_synchronous, p_check_interval, p_time_out);
5463 
5464             EXCEPTION
5465                 WHEN OTHERS THEN
5466                     retcode := -1;
5467                     errbuf := substr(SQLERRM,1,150);
5468                     msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5469                     msd_dem_common_utilities.log_message ('Error while submitting request for launch download');
5470                     msd_dem_common_utilities.log_message (errbuf);
5471                     RETURN;
5472             END;
5473 
5474             var_request_num := var_request_num + 1;
5475             g_req_table(var_request_num).REQUEST_ID := var_request_id;
5476             g_req_table(var_request_num).DESCRIPTION := 'SPF CMRO Launch Download';
5477             g_req_table(var_request_num).IS_COMPLETE := FALSE;
5478             g_req_table(var_request_num).status := 1;
5479 
5480             COMMIT;
5481 
5482             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5483             msd_dem_common_utilities.log_message ('');
5484             msd_dem_common_utilities.log_message ('');
5485         END IF;
5486 
5487         IF (var_request_num > 0) THEN
5488 
5489             check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out);
5490             IF (x_retcode = -1) THEN
5491                 retcode := -1;
5492                 errbuf := x_errbuf;
5493                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5494                 msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage III to complete.');
5495                 msd_dem_common_utilities.log_message (errbuf);
5496                 RETURN;
5497             END IF;
5498 
5499             IF (x_retcode = 1) THEN
5500                 retcode := 1;
5501                 errbuf := x_errbuf;
5502                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5503                 msd_dem_common_utilities.log_message ('One or more requests in Stage III completed with warnings.');
5504                 msd_dem_common_utilities.log_message (errbuf);
5505             END IF;
5506 
5507         END IF;
5508 
5509         msd_dem_common_utilities.log_message ('---------------------------------Stage III - End---------------------------------------');
5510         msd_dem_common_utilities.log_message ('');
5511         msd_dem_common_utilities.log_message ('');
5512         /* STAGE III  *** END *** */
5513 
5514         msd_dem_common_utilities.log_debug ('Exiting MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5515     EXCEPTION
5516     WHEN OTHERS THEN
5517         retcode := -1;
5518         errbuf := substr(sqlerrm, 1, 200);
5519         msd_dem_common_utilities.log_message('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ' || errbuf);
5520         msd_dem_common_utilities.log_debug('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA (' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') || ') - ' || errbuf );
5521     END COLLECT_CMRO_DATA;
5522 
5523 
5524     PROCEDURE COLLECT_FLEET_DATA (
5525         errbuf                      OUT NOCOPY  VARCHAR2,
5526         retcode                     OUT NOCOPY  VARCHAR2,
5527         p_sr_instance_id            IN          NUMBER,
5528         p_collection_group      	IN         	VARCHAR2,
5529         p_collection_method     	IN         	NUMBER,
5530         p_hidden_param				IN	   		VARCHAR2,
5531         p_date_range_type			IN	   		NUMBER,
5532         p_hist_collection_window    IN	   		NUMBER,
5533         p_sim_plan_name             IN          VARCHAR2,
5534         p_fcst_collection_window    IN	   		NUMBER,
5535         p_from_date					IN	   		VARCHAR2,
5536         p_to_date					IN	   		VARCHAR2,
5537         p_auto_run_download     	IN 	   		NUMBER,
5538         p_synchronous			    IN          NUMBER	 DEFAULT G_NO,
5539         p_check_interval		    IN		    NUMBER	 DEFAULT 60,
5540         p_time_out                  IN		    NUMBER	 DEFAULT 1440
5541     )
5542     IS
5543         x_errbuf        VARCHAR2(200)   := NULL;
5544         x_retcode       VARCHAR2(100)   := NULL;
5545         x_from_date     DATE            := NULL;
5546         x_to_date       DATE            := NULL;
5547         x_src_dblink    VARCHAR2(50)    := NULL;
5548         x_dest_dblink   VARCHAR2(50)    := NULL;
5549         x_sql           varchar2(1000)  := NULL;
5550         x_params        varchar2(500)   := null;
5551 
5552         var_table_name  varchar2(61)    := NULL;
5553         var_request_id  NUMBER  DEFAULT     NULL;
5554         var_request_num NUMBER  DEFAULT     NULL;
5555     BEGIN
5556         msd_dem_common_utilities.log_debug ('Entering MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5557 
5558         --validate parameters
5559         msd_dem_common_utilities.ui_params_validation(x_errbuf, x_retcode,
5560                                                       x_from_date, x_to_date,
5561                                                       p_sr_instance_id,
5562                                                       p_collection_group,
5563                                                       p_collection_method,
5564                                                       null,
5565                                                       p_date_range_type,
5566                                                       p_hist_collection_window,
5567                                                       p_from_date,
5568                                                       p_to_date,
5569                                                       'FLEET',
5570                                                       p_fcst_collection_window
5571                                                       );
5572 
5573         IF (x_retcode = -1) THEN
5574             retcode := -1;
5575             errbuf  := x_errbuf;
5576             msd_dem_common_utilities.log_message ('Error: MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5577             msd_dem_common_utilities.log_message ('Error validating params for COLLECT_FLEET_DATA');
5578             RETURN;
5579         END IF;
5580 
5581         /* Get Instance source DB Link */
5582         msd_dem_common_utilities.get_dblink (
5583                                 x_errbuf,
5584                                 x_retcode,
5585                                 p_sr_instance_id,
5586                                 x_src_dblink);
5587         IF (x_retcode = -1) THEN
5588             retcode := -1;
5589             errbuf := substr(SQLERRM,1,150);
5590             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5591             msd_dem_common_utilities.log_message ('Error in call to MSD_DEM_COMMON_UTILITIES.GET_DBLINK');
5592             msd_dem_common_utilities.log_message (errbuf);
5593             RETURN;
5594         END IF;
5595 
5596         /* Get Instance destination DB Link */
5597         msd_dem_common_utilities.get_dest_dblink (
5598                                 x_errbuf,
5599                                 x_retcode,
5600                                 p_sr_instance_id,
5601                                 x_dest_dblink);
5602         IF (x_retcode = -1) THEN
5603             retcode := -1;
5604             errbuf := substr(SQLERRM,1,150);
5605             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5606             msd_dem_common_utilities.log_message ('Error in call to MSD_DEM_COMMON_UTILITIES.GET_DEST_DBLINK');
5607             msd_dem_common_utilities.log_message (errbuf);
5608             RETURN;
5609         END IF;
5610 
5611         /* Truncate fleet data staging table */
5612         msd_dem_common_utilities.log_debug ('');
5613 
5614         var_table_name := G_FLEET_DATA_DEST_TABLE;
5615         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
5616         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
5617 
5618         var_table_name := G_FLEET_DATA_DEST_TABLE || '_ERR';
5619         msd_dem_common_utilities.log_debug('Truncating table ' || var_table_name);
5620         EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || var_table_name;
5621 
5622         msd_dem_common_utilities.log_debug ('');
5623 
5624         /* STAGE I  *** BEGIN *** */
5625         msd_dem_common_utilities.log_message ('---------------------------------Stage I - Begin-------------------------------------');
5626         var_request_num := 0;
5627 
5628         IF (g_req_table.COUNT <> 0)
5629         THEN
5630             g_req_table.DELETE;
5631         END IF;
5632 
5633         IF (x_to_date > sysdate and p_sim_plan_name is null) THEN
5634             x_retcode := 1;
5635             msd_dem_common_utilities.log_message ('Simulation Plan for Forecast not specified, Projected Fleet data will not be loaded');
5636             msd_dem_common_utilities.log_message ('');
5637         END IF;
5638 
5639         msd_dem_common_utilities.log_message ('');
5640         msd_dem_common_utilities.log_message ('Launching source data collection request');
5641 
5642         --launch collection request on source
5643         BEGIN
5644 
5645             var_request_id := null;
5646             x_sql := 'begin ' ||
5647                      'msd_dem_common_utilities.launch_remote_request' || x_src_dblink ||
5648                      '  (:1, :2, :3, :4, :5, :6, :7);' ||
5649                      'end;';
5650             msd_dem_common_utilities.log_debug('SQL for request launch : ');
5651             msd_dem_common_utilities.log_debug(x_sql);
5652 
5653             x_params := ' ''MSD'', ''MSDSPFEAMCMRO'', NULL, NULL, FALSE, ' ||
5654                         ' ' || p_sr_instance_id || ', ''' || p_collection_group || ''', ' ||
5655                         ' ''' || fnd_date.date_to_canonical(x_from_date) || ''', ' ||
5656                         ' ''' || fnd_date.date_to_canonical(x_to_date) || ''', ' ||
5657                         ' ''' || x_dest_dblink || ''', ' ||
5658                         ' ''FLEET'', ' || '''' || p_sim_plan_name || ''' ';
5659             execute immediate x_sql using out x_errbuf, out x_retcode,
5660                                           in fnd_global.user_name, in fnd_global.resp_name, in fnd_global.application_name,
5661                                           in x_params,
5662                                           out var_request_id;
5663 
5664             IF (x_retcode = -1) THEN
5665                 retcode := -1;
5666                 errbuf := x_errbuf;
5667                 msd_dem_common_utilities.log_message ('ERROR(1) - msd_spf_collect_history_data.COLLECT_FLEET_DATA - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5668                 msd_dem_common_utilities.log_message (errbuf);
5669                 RETURN;
5670             END IF;
5671         EXCEPTION
5672             WHEN OTHERS THEN
5673                 retcode := -1;
5674                 errbuf := substr(SQLERRM,1,200);
5675                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5676                 msd_dem_common_utilities.log_message ('Error while submitting collection request on source');
5677                 msd_dem_common_utilities.log_message (errbuf);
5678                 RETURN;
5679         END;
5680 
5681         var_request_num := var_request_num + 1;
5682         g_req_table(var_request_num).REQUEST_ID := var_request_id;
5683         g_req_table(var_request_num).DESCRIPTION := 'SPF CMRO Fleet Collect Source Data';
5684         g_req_table(var_request_num).IS_COMPLETE := FALSE;
5685         g_req_table(var_request_num).status := 1;
5686 
5687         COMMIT;
5688 
5689         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5690         msd_dem_common_utilities.log_message ('');
5691         msd_dem_common_utilities.log_message ('');
5692 
5693         IF (var_request_num > 0) THEN
5694 
5695             check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, x_src_dblink);
5696             IF (x_retcode = -1) THEN
5697                 retcode := -1;
5698                 errbuf := x_errbuf;
5699                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5700                 msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage I to complete.');
5701                 msd_dem_common_utilities.log_message (errbuf);
5702                 RETURN;
5703             END IF;
5704 
5705             IF (x_retcode = 1) THEN
5706                 retcode := 1;
5707                 errbuf := x_errbuf;
5708                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5709                 msd_dem_common_utilities.log_message ('One or more requests in Stage I completed with warnings.');
5710                 msd_dem_common_utilities.log_message (errbuf);
5711             END IF;
5712 
5713         END IF;
5714 
5715         /* Begin : Set purge profiles */
5716         set_cmroeam_purge_profiles(x_errbuf, x_retcode, 'FLEET', x_from_date, x_to_date);
5717         IF (x_retcode = -1) THEN
5718             retcode := -1;
5719             errbuf := x_errbuf;
5720             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5721             msd_dem_common_utilities.log_message ('Error when setting purge profiles.');
5722             msd_dem_common_utilities.log_message (errbuf);
5723             RETURN;
5724         END IF;
5725 
5726         IF (x_retcode = 1) THEN
5727             retcode := 1;
5728             errbuf := x_errbuf;
5729             msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_CMRO_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5730             msd_dem_common_utilities.log_message ('Warning when setting purge profiles.');
5731             msd_dem_common_utilities.log_message (errbuf);
5732         END IF;
5733         /* End : Set purge profiles */
5734 
5735         IF p_sim_plan_name is not null THEN
5736             --update demantra system parameter 'CMRO_Fleet_Simulation_Plan'
5737             msd_dem_common_utilities.log_message ('Updating Demantra system parameter ''CMRO_Fleet_Simulation_Plan'' to ''' || p_sim_plan_name || '''');
5738             x_sql := 'UPDATE ' || g_schema || '.sys_params ' ||
5739                      ' set pval = ''' || p_sim_plan_name || '''' ||
5740                      ' where pname = ''CMRO_Fleet_Simulation_Plan'' ';
5741             msd_dem_common_utilities.log_debug (x_sql);
5742             execute immediate x_sql;
5743             commit;
5744         END IF;
5745 
5746         msd_dem_common_utilities.log_message ('---------------------------------Stage I - End---------------------------------------');
5747         msd_dem_common_utilities.log_message ('');
5748         msd_dem_common_utilities.log_message ('');
5749         /* STAGE I  *** END *** */
5750 
5751         /* STAGE II  *** BEGIN *** */
5752         msd_dem_common_utilities.log_message ('---------------------------------Stage II - Begin-------------------------------------');
5753         var_request_num := 0;
5754 
5755         IF (g_req_table.COUNT <> 0)
5756         THEN
5757             g_req_table.DELETE;
5758         END IF;
5759 
5760         IF (p_auto_run_download = G_YES) then
5761             BEGIN
5762 
5763                 var_request_id := null;
5764                 var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMLDW', NULL, NULL, FALSE,
5765                                                                 'WF_SPF_IMPORT_CMRO_FLEET_DATA',
5766                                                                 p_synchronous, p_check_interval, p_time_out);
5767 
5768             EXCEPTION
5769                 WHEN OTHERS THEN
5770                     retcode := -1;
5771                     errbuf := substr(SQLERRM,1,150);
5772                     msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5773                     msd_dem_common_utilities.log_message ('Error while submitting request for launch download');
5774                     msd_dem_common_utilities.log_message (errbuf);
5775                     RETURN;
5776             END;
5777 
5778             var_request_num := var_request_num + 1;
5779             g_req_table(var_request_num).REQUEST_ID := var_request_id;
5780             g_req_table(var_request_num).DESCRIPTION := 'SPF CMRO Fleet Launch Download';
5781             g_req_table(var_request_num).IS_COMPLETE := FALSE;
5782             g_req_table(var_request_num).status := 1;
5783 
5784             COMMIT;
5785 
5786             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
5787             msd_dem_common_utilities.log_message ('');
5788             msd_dem_common_utilities.log_message ('');
5789         END IF;
5790 
5791         IF (var_request_num > 0) THEN
5792 
5793             check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out);
5794             IF (x_retcode = -1) THEN
5795                 retcode := -1;
5796                 errbuf := x_errbuf;
5797                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ERROR ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5798                 msd_dem_common_utilities.log_message ('Error while waiting for requests for Stage II to complete.');
5799                 msd_dem_common_utilities.log_message (errbuf);
5800                 RETURN;
5801             END IF;
5802 
5803             IF (x_retcode = 1) THEN
5804                 retcode := 1;
5805                 errbuf := x_errbuf;
5806                 msd_dem_common_utilities.log_message ('MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - WARNING ...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5807                 msd_dem_common_utilities.log_message ('One or more requests in Stage II completed with warnings.');
5808                 msd_dem_common_utilities.log_message (errbuf);
5809             END IF;
5810 
5811         END IF;
5812 
5813         msd_dem_common_utilities.log_message ('---------------------------------Stage II - End---------------------------------------');
5814         msd_dem_common_utilities.log_message ('');
5815         msd_dem_common_utilities.log_message ('');
5816         /* STAGE II  *** END *** */
5817 
5818         msd_dem_common_utilities.log_debug ('Exiting MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5819     EXCEPTION
5820     WHEN OTHERS THEN
5821         retcode := -1;
5822         errbuf := substr(sqlerrm, 1, 200);
5823         msd_dem_common_utilities.log_message('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA - ' || errbuf);
5824         msd_dem_common_utilities.log_debug('Error in MSD_SPF_COLLECT_HISTORY_DATA.COLLECT_FLEET_DATA (' || TO_CHAR(systimestamp, 'DD-MON-RRRR HH24:MI:SS') || ') - ' || errbuf );
5825     END COLLECT_FLEET_DATA;
5826 
5827 
5828 /*
5829 * This procedure collects eAM data(resc/mtrls).
5830 * Performs the following.
5831 * 1. Get DB links
5832 * 2. Truncate staging tables (sales/item/loc_tmpl)
5833 * 3. Collects eAM data(resc/mtrls) usage by submitting CP on source.
5834 * 4. Loads t_src_item_tmpl table by submitting MSDSPFPST conc program
5835 * 5. Loads t_src_loc_tmpl table by submitting MSDDEMCLT conc program.
5836 * 6. Submit MSDDEMLDW conc prg to run the workflow
5837 *
5838 * ------------ PARAMETERS LIST ----------------
5839 * p_sr_instance_id		       : Instance Id
5840 * p_collection_group       	 : Organization Group
5841 * p_collection_method     	 : Complete or Net Change
5842 * p_date_range_type		       : Absolute or Rolling
5843 * p_collection_window		     : Noof Days in the past for collecting data
5844 * p_from_date		             : Start date for collecting data
5845 * p_to_date		               : End date for collecting data
5846 * p_auto_run_download        : Whether to run/launch the demantra workflow or not
5847 * p_synchronous				       : Whether CP to in sync with demantra workflow or not
5848 * p_check_interval		       : Check the status of the workflow for every (in seconds)
5849 * p_time_out					       : Stop the status check of the workflow after (in minutes)
5850 * ---------------------------------------------
5851 *
5852 */
5853 
5854       PROCEDURE Collect_eAM_Data (
5855                 errbuf	               OUT NOCOPY	VARCHAR2     ,
5856                 retcode	               OUT NOCOPY	VARCHAR2     ,
5857                 p_sr_instance_id	     IN	NUMBER               ,
5858                 p_collection_group	   IN	VARCHAR2             ,
5859                 p_collection_method	   IN	NUMBER               ,
5860                 p_hidden_param1	       IN	VARCHAR2             ,
5861                 p_date_range_type	     IN	NUMBER               ,
5862                 p_collection_window	   IN	NUMBER               ,
5863                 p_from_date	           IN	VARCHAR2             ,
5864                 p_to_date	             IN	VARCHAR2             ,
5865                 p_auto_run_download	   IN	NUMBER               ,
5866                 p_synchronous	         IN	NUMBER DEFAULT G_NO  ,
5867                 p_check_interval	     IN	NUMBER DEFAULT 60    ,
5868                 p_time_out	           IN	NUMBER DEFAULT 1440  )
5869 
5870       IS
5871             x_errbuf		VARCHAR2(200)	:= NULL ;
5872             x_retcode	  VARCHAR2(100)	:= NULL ;
5873             x_from_date	DATE          := NULL ;
5874             x_to_date   DATE          := NULL ;
5875             x_params            VARCHAR2(500)   := NULL;
5876             x_key_values        VARCHAR2(500)   := NULL;
5877             x_category_set_id   NUMBER          := NULL;
5878             x_master_org_id     NUMBER          := NULL;
5879             x_sql               VARCHAR2(1000)  := NULL;
5880             sql_request         VARCHAR2(1000)  := NULL;
5881 
5882             var_request_id			NUMBER			:= 	NULL;
5883             var_request_num			NUMBER			:= 0 ;
5884             var_errbuf          VARCHAR2(200)	:= NULL ;
5885             var_retcode	        VARCHAR2(100)	:= NULL ;
5886 
5887             var_D2S_dblink    VARCHAR2(200)	:= NULL ;
5888             var_S2D_dblink    VARCHAR2(200)	:= NULL ;
5889 
5890 
5891       BEGIN
5892 
5893           msd_dem_common_utilities.log_debug ('Entering: msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5894 
5895          /* Log the input parameters to the ouput file */
5896           msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
5897 
5898           msd_dem_common_utilities.log_message('     ' || rpad('Instance Id', 30) || ' - ' || to_char(p_sr_instance_id));
5899           msd_dem_common_utilities.log_message('     ' || rpad('From Date', 30) || ' - ' || to_char(p_from_date));
5900           msd_dem_common_utilities.log_message('     ' || rpad('To Date', 30) || ' - ' || to_char(p_to_date));
5901           msd_dem_common_utilities.log_message('     ' || rpad('Auto Run', 30) || ' - ' || to_char(p_auto_run_download));
5902 
5903           msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
5904           msd_dem_common_utilities.log_message ('');
5905           msd_dem_common_utilities.log_message ('');
5906 
5907          /* Call UI_params_validation procedure */
5908           msd_dem_common_utilities.UI_params_validation(
5909                                               x_errbuf                   ,
5910                                               x_retcode                  ,
5911                                               x_from_date			           ,
5912                                         			x_to_date			             ,
5913                                               p_sr_instance_id           ,
5914                                               p_collection_group       	 ,
5915                                         			p_collection_method     	 ,
5916                                         			p_hidden_param1			       ,
5917                                         			p_date_range_type		       ,
5918                                         			p_collection_window		     ,
5919                                         			p_from_date	               ,
5920                                         			p_to_date 		             ,
5921                                         			NULL                       ,
5922                                         			NULL                        );
5923 
5924          IF (x_retcode = -1)
5925          THEN
5926              retcode := -1;
5927              errbuf  := x_errbuf;
5928              msd_dem_common_utilities.log_message ('Error(1): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5929              msd_dem_common_utilities.log_message ('Error while validating UI parameters.');
5930              RETURN;
5931          END IF;
5932 
5933          msd_dem_common_utilities.log_message('     ' || rpad('From Date', 30) || ' - ' || to_char(x_from_date));
5934          msd_dem_common_utilities.log_message('     ' || rpad('To Date', 30) || ' - ' || to_char(x_to_date));
5935          msd_dem_common_utilities.log_message(' ');
5936 
5937          /*------- START - Get Desination to Source DBlink -------*/
5938              msd_dem_common_utilities.get_dblink (
5939   									var_errbuf,
5940   									var_retcode,
5941   									p_sr_instance_id,
5942   									var_D2S_dblink);
5943 
5944   					 IF (var_retcode = -1)
5945              THEN
5946                 retcode := -1;
5947                 errbuf := substr(SQLERRM,1,150);
5948                 msd_dem_common_utilities.log_message ('ERROR(2) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5949                 msd_dem_common_utilities.log_message ('Error in call to msd_dem_common_utilities.get_dblink');
5950                 msd_dem_common_utilities.log_message (errbuf);
5951                 RETURN;
5952              END IF;
5953 
5954             msd_dem_common_utilities.log_debug ('Desination to Source DBlink is - '|| var_D2S_dblink );
5955          /*------- END - Get Desination to Source DBlink -------*/
5956 
5957           /*------- START - Get Source to Desination DBlink -------*/
5958              msd_dem_common_utilities.get_dest_dblink (
5959   									var_errbuf,
5960   									var_retcode,
5961   									p_sr_instance_id,
5962   									var_S2D_dblink);
5963 
5964   					 IF (var_retcode = -1)
5965              THEN
5966                 retcode := -1;
5967                 errbuf := substr(SQLERRM,1,150);
5968                 msd_dem_common_utilities.log_message ('ERROR(3) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
5969                 msd_dem_common_utilities.log_message ('Error in call to msd_dem_common_utilities.get_dest_dblink');
5970                 msd_dem_common_utilities.log_message (errbuf);
5971                 RETURN;
5972              END IF;
5973 
5974             msd_dem_common_utilities.log_debug ('Source to Desination DBlink is - '|| var_S2D_dblink );
5975          /*------- END - Get Source to Desination DBlink -------*/
5976 
5977 
5978          /*------- START - Truncate staging tables -------*/
5979             msd_dem_common_utilities.log_debug ('Truncating staging tables...');
5980             x_sql := 'TRUNCATE TABLE ' || g_schema || '.T_SRC_SALES_TMPL' ;
5981             EXECUTE IMMEDIATE x_sql;
5982             msd_dem_common_utilities.log_debug (x_sql);
5983             x_sql := 'TRUNCATE TABLE ' || g_schema || '.T_SRC_ITEM_TMPL' ;
5984             EXECUTE IMMEDIATE x_sql;
5985             msd_dem_common_utilities.log_debug (x_sql);
5986             x_sql := 'TRUNCATE TABLE ' || g_schema || '.T_SRC_LOC_TMPL' ;
5987 	    EXECUTE IMMEDIATE x_sql;
5988             msd_dem_common_utilities.log_debug (x_sql);
5989             x_sql := 'TRUNCATE TABLE ' || g_schema || '.T_SRC_SALES_TMPL_ERR' ;
5990             EXECUTE IMMEDIATE x_sql;
5991             msd_dem_common_utilities.log_debug (x_sql);
5992             x_sql := 'TRUNCATE TABLE ' || g_schema || '.T_SRC_ITEM_TMPL_ERR' ;
5993             EXECUTE IMMEDIATE x_sql;
5994             msd_dem_common_utilities.log_debug (x_sql);
5995             x_sql := 'TRUNCATE TABLE ' || g_schema || '.T_SRC_LOC_TMPL_ERR' ;
5996             EXECUTE IMMEDIATE x_sql;
5997             msd_dem_common_utilities.log_debug (x_sql);
5998          /*------- END - Truncate staging tables -------*/
5999 
6000 
6001         /*------- START - Submit "Collect EAM/CMRO Source data" conc program on source -------*/
6002             msd_dem_common_utilities.log_message('Submitting "Collect EAM/CMRO Source data" conc program on source.');
6003             msd_dem_common_utilities.log_message(' ');
6004 
6005             BEGIN
6006 
6007             sql_request :=  'BEGIN ' ||
6008                             'msd_dem_common_utilities.launch_remote_request' || var_D2S_dblink ||
6009                             '  (:1, :2, :3, :4, :5, :6, :7);' ||
6010                             'END;';
6011 
6012             x_params := ' ''MSD'', ''MSDSPFEAMCMRO'', NULL, NULL, FALSE, '
6013                         ||         p_sr_instance_id   || ','
6014                         || '''' || p_collection_group || ''','
6015                         || '''' || fnd_date.date_to_canonical(x_from_date)        || ''','
6016                         || '''' || fnd_date.date_to_canonical(x_to_date)          || ''','
6017                         || '''' || var_S2D_dblink     || ''','
6018                         		    || ' ''EAM'' ' ;
6019 
6020             EXECUTE IMMEDIATE sql_request USING OUT var_errbuf, OUT var_retcode,
6021                                           IN fnd_global.user_name, IN fnd_global.resp_name, IN fnd_global.application_name,
6022                                           IN x_params,
6023                                           OUT var_request_id;
6024 
6025             IF (var_retcode = -1) THEN
6026                 retcode := -1;
6027                 errbuf := var_errbuf;
6028                 msd_dem_common_utilities.log_message ('ERROR(4) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6029                 msd_dem_common_utilities.log_message (errbuf);
6030                 RETURN;
6031             END IF;
6032 
6033             EXCEPTION
6034                WHEN OTHERS THEN
6035                   retcode := -1;
6036                   errbuf := substr(SQLERRM,1,150);
6037                   msd_dem_common_utilities.log_message ('Error(5): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6038                   msd_dem_common_utilities.log_message ('Error while submitting request MSDSPFEAMCMRO on source');
6039                   msd_dem_common_utilities.log_message (errbuf);
6040                   RETURN;
6041             END;
6042 
6043             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id) || ' on source. ');
6044             msd_dem_common_utilities.log_message ('');
6045             msd_dem_common_utilities.log_message ('');
6046 
6047             var_request_num := var_request_num + 1;
6048             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6049             g_req_table(var_request_num).DESCRIPTION := 'SPF eAM Collect Source Data';
6050             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6051             g_req_table(var_request_num).status := 1;
6052 
6053             COMMIT;
6054 
6055             /*----- Check whether the requests(on source) are completed or not -----*/
6056             IF (var_request_num > 0) THEN
6057 
6058                 check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, var_D2S_dblink);
6059                 IF (x_retcode = -1) THEN
6060                     retcode := -1;
6061                     errbuf := x_errbuf;
6062                     msd_dem_common_utilities.log_message ('Error(6): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6063                     msd_dem_common_utilities.log_message ('Error while waiting for request submitted on source.');
6064                     msd_dem_common_utilities.log_message (errbuf);
6065                     RETURN;
6066                 END IF;
6067 
6068                 IF (x_retcode = 1) THEN
6069                     retcode := 1;
6070                     errbuf := x_errbuf;
6071                     msd_dem_common_utilities.log_message ('WARNING(1): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6072                     msd_dem_common_utilities.log_message ('Request submitted on source completed with warnings.');
6073                     msd_dem_common_utilities.log_message (errbuf);
6074                 END IF;
6075 
6076             END IF;
6077 
6078             /*------- END - Submit "Collect EAM/CMRO Source data" conc program on source -------*/
6079 
6080             var_request_num := 0;
6081             IF (g_req_table.COUNT <> 0) THEN g_req_table.DELETE; END IF;
6082 
6083              /*------- START - Submit "SPF Populate Staging Tables" conc program to load T_SRC_ITEM_TMPL -------*/
6084             msd_dem_common_utilities.log_message ('Submitting  "MSDSPFPST" request for populating T_SRC_ITEM_TMPL');
6085 
6086             x_sql := 'select PARAMETER_VALUE from MSD_DEM_SETUP_PARAMETERS where PARAMETER_NAME = ''MSD_DEM_CATEGORY_SET_NAME''';
6087             EXECUTE IMMEDIATE x_sql INTO x_category_set_id ;
6088             x_key_values := '$C_CATEGORY_STRING#' || x_category_set_id;
6089 		-- BUG#14694463  kkhatri
6090             x_key_values := x_key_values || '$C_MATERIAL#' || CS_DEM_MATERIAL;
6091             x_key_values := x_key_values || '$C_RESOURCE#' || CS_DEM_RESOURCE || '$';
6092 
6093             x_sql := 'select PARAMETER_VALUE from MSD_DEM_SETUP_PARAMETERS where PARAMETER_NAME = ''MSD_DEM_MASTER_ORG''';
6094             EXECUTE IMMEDIATE x_sql INTO x_master_org_id ;
6095             x_key_values := x_key_values || 'C_ORG_STRING#' || x_master_org_id || '$' ;
6096 
6097 
6098             BEGIN
6099                 var_request_id := null;
6100                 var_request_id := fnd_request.submit_request ('MSD', 'MSDSPFPST', NULL, NULL, FALSE,'EQ_SPF_EAM_ITEM_TMPL', p_sr_instance_id, x_key_values);
6101             EXCEPTION
6102                 WHEN OTHERS THEN
6103                     retcode := -1;
6104                     errbuf := substr(SQLERRM,1,150);
6105                     msd_dem_common_utilities.log_message ('Error(7): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6106                     msd_dem_common_utilities.log_message ('Error while submitting request for populating T_SRC_ITEM_TMPL');
6107                     msd_dem_common_utilities.log_message (errbuf);
6108                     RETURN;
6109             END;
6110 
6111             var_request_num := var_request_num + 1;
6112             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6113             g_req_table(var_request_num).DESCRIPTION := 'SPF Populate EQ_SPF_EAM_ITEM_TMPL';
6114             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6115             g_req_table(var_request_num).status := 1;
6116 
6117             COMMIT;
6118 
6119             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
6120             msd_dem_common_utilities.log_message ('');
6121             msd_dem_common_utilities.log_message ('');
6122              /*------- END - Submit "SPF Populate Staging Tables" conc program to load T_SRC_ITEM_TMPL -------*/
6123 
6124 
6125             /*------- START - Submit "Collect Level Types" conc program to load T_SRC_LOC_TMPL -------*/
6126             msd_dem_common_utilities.log_message ('Submitting  "MSDDEMCLT" request for populating T_SRC_LOC_TMPL');
6127             BEGIN
6128                var_request_id := null;
6129                var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMCLT', NULL, NULL, FALSE, p_sr_instance_id, 1, -1, G_YES);
6130             EXCEPTION
6131                WHEN OTHERS THEN
6132                   retcode := -1;
6133                   errbuf := substr(SQLERRM,1,150);
6134                   msd_dem_common_utilities.log_message ('Error(8): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6135                   msd_dem_common_utilities.log_message ('Error while submitting request for populating T_SRC_LOC_TMPL');
6136                   msd_dem_common_utilities.log_message (errbuf);
6137                   RETURN;
6138             END;
6139 
6140             var_request_num := var_request_num + 1;
6141             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6142             g_req_table(var_request_num).DESCRIPTION := 'SPF eAM Populate T_SRC_LOC_TMPL';
6143             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6144             g_req_table(var_request_num).status := 1;
6145 
6146             COMMIT;
6147 
6148             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
6149             msd_dem_common_utilities.log_message ('');
6150             msd_dem_common_utilities.log_message ('');
6151             /*------- END - Submit "Collect Level Types" conc program to load T_SRC_LOC_TMPL *-------/
6152 
6153 
6154             /*----- Check whether the requests are completed or not -----*/
6155             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, NULL);
6156 
6157             IF (var_retcode = -1) THEN
6158                 retcode := -1;
6159                 errbuf := var_errbuf;
6160                 msd_dem_common_utilities.log_message ('ERROR(9) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6161                 msd_dem_common_utilities.log_message ('Error while waiting for requests to complete.');
6162                 msd_dem_common_utilities.log_message (errbuf);
6163                 RETURN;
6164             END IF;
6165 
6166             IF (var_retcode = 1) THEN
6167                 retcode := 1;
6168                 errbuf := var_errbuf;
6169                 msd_dem_common_utilities.log_message ('WARNING(2) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6170                 msd_dem_common_utilities.log_message ('One or more requests completed with warnings.');
6171                 msd_dem_common_utilities.log_message (errbuf);
6172             END IF;
6173 
6174 
6175 
6176             var_request_num := 0;
6177             IF (g_req_table.COUNT <> 0) THEN g_req_table.DELETE; END IF;
6178 
6179 
6180             /*------- START - Submit "Launch Demantra Workflow" concurrent program -------*/
6181             IF (p_auto_run_download = G_YES)
6182             THEN
6183 
6184              BEGIN
6185                 var_request_id := null;
6186                 var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMLDW', NULL, NULL, FALSE,
6187                                                               'WF_EBS_FULL_DOWNLOAD',
6188                                                               p_synchronous, p_check_interval, p_time_out);
6189 
6190                 msd_dem_common_utilities.log_message ('Request Id for "Launch Demantra Workflow" concurrent program - ' || var_request_id);
6191 
6192              EXCEPTION
6193                 WHEN OTHERS THEN
6194                    retcode := -1;
6195                    errbuf := substr(SQLERRM,1,150);
6196                    msd_dem_common_utilities.log_message ('Error(10): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6197                    msd_dem_common_utilities.log_message ('Error while submitting request for "Launch Demantra Workflow" concurrent program.');
6198                    msd_dem_common_utilities.log_message (errbuf);
6199                    msd_dem_common_utilities.log_message (' ');
6200                    RETURN;
6201              END;
6202 
6203             /*----- Check whether the requests are completed or not -----*/
6204               IF (var_request_num > 0) THEN
6205 
6206               check_requests_completion(x_errbuf, x_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out);
6207               IF (x_retcode = -1) THEN
6208                   retcode := -1;
6209                   errbuf := x_errbuf;
6210                   msd_dem_common_utilities.log_message ('Error(11): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6211                   msd_dem_common_utilities.log_message ('Error while waiting for requests to complete.');
6212                   msd_dem_common_utilities.log_message (errbuf);
6213                   RETURN;
6214               END IF;
6215 
6216               IF (x_retcode = 1) THEN
6217                   retcode := 1;
6218                   errbuf := x_errbuf;
6219                   msd_dem_common_utilities.log_message ('WARNING(3) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6220                   msd_dem_common_utilities.log_message ('One or more requests completed with warnings.');
6221                   msd_dem_common_utilities.log_message (errbuf);
6222               END IF;
6223 
6224               END IF;
6225           END IF;
6226           /*------- END - Submit "Launch Demantra Workflow" concurrent program -------*/
6227 
6228 
6229       EXCEPTION
6230       WHEN OTHERS THEN
6231         errbuf  := substr(SQLERRM,1,150);
6232         retcode := -1 ;
6233         msd_dem_common_utilities.log_message ('Exception: msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6234   	    msd_dem_common_utilities.log_message (errbuf);
6235   	    msd_dem_common_utilities.log_message (' ');
6236 
6237       END Collect_eAM_Data ;
6238 /*
6239 * This procedure will be collecting historical data of non-maintenance products
6240 * This pocedure is wrapper on the top of the msd_dem_collect_history_data.collect_history_data procedure.
6241 * Actions performed
6242 * 1. Submit "Push Setup Parameters" conc progam
6243 * 2. Call msd_dem_collect_history_data.collect_history_data procedure
6244 * 3. Update columns in t_src_sales_tmpl table
6245 * 4. Submit "Collect Level Types" conc program for items
6246 * 5. Submit "Collect Level Types" conc program for locations
6247 * 6. Check requests status
6248 * 7. Update columns in t_src_item_tmpl table
6249 * 8. Submit "Launch Demantra Workflow" concurrent program
6250 *
6251 * ------------ PARAMETERS LIST ----------------
6252 * p_hist_series     	: Name of the history series to be collected
6253 * p_auto_run_download : Whether to run/launch the demantra workflow or not
6254 * p_synchronous				: Whether CP to in sync with demantra workflow or not
6255 * p_check_interval		: Check the status of the workflow for every (in seconds)
6256 * p_time_out					: Stop the status check of the workflow after (in minutes)
6257 * --------------------------------------------
6258 */
6259 
6260 
6261       PROCEDURE collect_nmp_hist_data (
6262       			errbuf				            OUT NOCOPY VARCHAR2,
6263       			retcode				            OUT NOCOPY VARCHAR2,
6264       			p_sr_instance_id		      IN    NUMBER,
6265       			p_collection_group      	IN    VARCHAR2,
6266       			p_collection_method     	IN    NUMBER,
6267       			p_hidden_param1			      IN	  VARCHAR2,
6268       			p_date_range_type		      IN	  NUMBER,
6269       			p_collection_window		    IN	  NUMBER,
6270       			p_from_date			          IN	  VARCHAR2,
6271       			p_to_date			            IN	  VARCHAR2,
6272       			p_hist_series			        IN	  VARCHAR2,
6273       			p_auto_run_download     	IN 	  NUMBER   ,
6274             p_synchronous				      IN		NUMBER	 DEFAULT G_NO,
6275             p_check_interval		      IN		NUMBER	 DEFAULT 60,
6276       			p_time_out					      IN		NUMBER	 DEFAULT 1440)
6277       IS
6278 
6279             x_errbuf		VARCHAR2(200)	:= NULL;
6280             x_retcode	  VARCHAR2(100)	:= NULL;
6281             x_from_date	DATE ;
6282             x_to_date   DATE ;
6283             x_hist_series	VARCHAR2(100) := NULL;
6284             x_hist_col 	VARCHAR2(100) := NULL;
6285             x_stg_table  VARCHAR2(100)   := msd_dem_common_utilities.get_lookup_value('MSD_DEM_DM_STAGING_TABLES','SALES_STAGING_TABLE');
6286             x_item_stg_table  VARCHAR2(100)   := msd_dem_common_utilities.get_lookup_value('MSD_DEM_DM_STAGING_TABLES','ITEM_STAGING_TABLE');
6287             l_sql       VARCHAR2(2000)	:= NULL;
6288 
6289 
6290             p_bh_bi_bd			NUMBER := 2 ;
6291             p_bh_bi_rd			NUMBER := 2 ;
6292             p_bh_ri_bd			NUMBER := 2 ;
6293             p_bh_ri_rd			NUMBER := 2 ;
6294             p_sh_si_sd			NUMBER := 2 ;
6295             p_sh_si_rd			NUMBER := 2 ;
6296             p_sh_ri_sd			NUMBER := 2 ;
6297             p_sh_ri_rd			NUMBER := 2 ;
6298 
6299             var_request_id			NUMBER			:= 	NULL;
6300             var_request_num			NUMBER			:= 0 ;
6301             var_errbuf          VARCHAR2(200)	:= NULL ;
6302             var_retcode	        VARCHAR2(100)	:= NULL ;
6303 
6304       BEGIN
6305 
6306          msd_dem_common_utilities.log_debug ('Entering: msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6307 
6308          /* Log the input parameters to the ouput file */
6309           msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
6310 
6311           msd_dem_common_utilities.log_message('     ' || rpad('Instance Id', 30) || ' - ' || to_char(p_sr_instance_id));
6312           msd_dem_common_utilities.log_message('     ' || rpad('From Date', 30) || ' - ' || to_char(p_from_date));
6313           msd_dem_common_utilities.log_message('     ' || rpad('To Date', 30) || ' - ' || to_char(p_to_date));
6314           msd_dem_common_utilities.log_message('     ' || rpad('Auto Run', 30) || ' - ' || to_char(p_auto_run_download));
6315           msd_dem_common_utilities.log_message('     ' || rpad('History Series', 30) || ' - ' || to_char(nvl(p_hist_series,'No Value')));
6316 
6317           msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
6318           msd_dem_common_utilities.log_message ('');
6319           msd_dem_common_utilities.log_message ('');
6320 
6321 
6322          /* START - Validating which History Series has been provided */
6323 
6324               x_hist_series := UPPER(trim(p_hist_series));
6325 
6326               IF    (x_hist_series = 'BH_BI_BD') THEN p_bh_bi_bd	:= 1 ; x_hist_col := 'EBS_BOOK_HIST_BOOK_QTY_BD' ;
6327               ELSIF (x_hist_series = 'BH_BI_RD') THEN p_bh_bi_rd	:= 1 ; x_hist_col := 'EBS_BOOK_HIST_BOOK_QTY_RD' ;
6328               ELSIF (x_hist_series = 'BH_RI_BD') THEN p_bh_ri_bd	:= 1 ; x_hist_col := 'EBS_BOOK_HIST_REQ_QTY_BD' ;
6329               ELSIF (x_hist_series = 'BH_RI_RD') THEN p_bh_ri_rd	:= 1 ; x_hist_col := 'EBS_BOOK_HIST_REQ_QTY_RD' ;
6330               ELSIF (x_hist_series = 'SH_SI_SD') THEN p_sh_si_sd	:= 1 ; x_hist_col := 'EBS_SHIP_HIST_SHIP_QTY_SD' ;
6331               ELSIF (x_hist_series = 'SH_SI_RD') THEN p_sh_si_rd	:= 1 ; x_hist_col := 'EBS_SHIP_HIST_SHIP_QTY_RD' ;
6332               ELSIF (x_hist_series = 'SH_RI_SD') THEN p_sh_ri_sd	:= 1 ; x_hist_col := 'ACTUAL_QTY' ;
6333               ELSIF (x_hist_series = 'SH_RI_RD') THEN p_sh_ri_rd	:= 1 ; x_hist_col := 'EBS_SHIP_HIST_REQ_QTY_RD' ;
6334               ELSE
6335                   retcode := -1;
6336                   errbuf  := 'INVALID history series. Please provide correct history series.' ;
6337                   msd_dem_common_utilities.log_message ('Error(1): msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6338                   msd_dem_common_utilities.log_message ('Error while validating history series.');
6339                   msd_dem_common_utilities.log_message (' ');
6340                   msd_dem_common_utilities.log_message ('Value for history series must be among the following:-');
6341                   msd_dem_common_utilities.log_message ('BH_BI_BD / BH_BI_RD / BH_RI_BD / BH_RI_RD / SH_SI_SD / SH_SI_RD / SH_RI_SD / SH_RI_RD ');
6342                   msd_dem_common_utilities.log_message (' ');
6343                   RETURN;
6344 
6345               END IF;
6346           /* END - Validating which History Series has been provided */
6347 
6348           /*----- START - Submit Push Setup Parameters conc progam -----*/
6349             msd_dem_common_utilities.log_debug (' ');
6350             msd_dem_common_utilities.log_debug ('Submiting Push Setup Parameters conc progam.');
6351             msd_dem_common_utilities.log_debug (' ');
6352 
6353              BEGIN
6354                 var_request_id := null;
6355                 var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMPSP', NULL, NULL, FALSE,
6356                                                               p_sr_instance_id, p_collection_group, G_NO );
6357              EXCEPTION
6358                 WHEN OTHERS THEN
6359                    retcode := -1;
6360                    errbuf := substr(SQLERRM,1,150);
6361                    msd_dem_common_utilities.log_message ('ERROR(2) - msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6362                    msd_dem_common_utilities.log_message ('Error while submitting request for push setup parameters');
6363                    msd_dem_common_utilities.log_message (errbuf);
6364                    RETURN;
6365              END;
6366 
6367              var_request_num := 0 ;
6368              IF (g_req_table.COUNT <> 0) THEN g_req_table.DELETE; END IF;
6369 
6370              var_request_num := var_request_num + 1;
6371              g_req_table(var_request_num).REQUEST_ID := var_request_id;
6372              g_req_table(var_request_num).DESCRIPTION := 'SPF Push Setup Parameters';
6373              g_req_table(var_request_num).IS_COMPLETE := FALSE;
6374              g_req_table(var_request_num).status := 1;
6375 
6376              COMMIT;
6377 
6378              msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
6379              msd_dem_common_utilities.log_message ('');
6380              msd_dem_common_utilities.log_message ('');
6381 
6382             /*----- Check whether the requests are completed or not -----*/
6383             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, NULL);
6384             IF (var_retcode = -1) THEN
6385                 retcode := -1;
6386                 errbuf := var_errbuf;
6387                 msd_dem_common_utilities.log_message ('ERROR(3) - msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6388                 msd_dem_common_utilities.log_message (errbuf);
6389                 RETURN;
6390             END IF;
6391 
6392             IF (var_retcode = 1) THEN
6393                 retcode := 1;
6394                 errbuf := var_errbuf;
6395                 msd_dem_common_utilities.log_message ('WARNING(1) - msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6396                 msd_dem_common_utilities.log_message (errbuf);
6397             END IF;
6398 
6399         /*----- END - Submit Push Setup Parameters conc progam -----*/
6400 
6401 
6402          /*------- START - call collect_history_data procedure -------*/
6403 
6404             msd_dem_common_utilities.log_debug (' ');
6405             msd_dem_common_utilities.log_debug ('Calling msd_dem_collect_history_data.collect_history_data procedure.');
6406             msd_dem_common_utilities.log_debug (' ');
6407 
6408             msd_dem_collect_history_data.collect_history_data (
6409                                               x_errbuf			      ,
6410                                         			x_retcode		        ,
6411                                         			p_sr_instance_id		,
6412                                         			p_collection_group  ,
6413                                         			p_collection_method ,
6414                                         			p_hidden_param1			,
6415                                         			p_date_range_type		,
6416                                         			p_collection_window	,
6417                                         			p_from_date		    	,
6418                                         			p_to_date			      ,
6419                                         			p_bh_bi_bd			    ,
6420                                         			p_bh_bi_rd			    ,
6421                                         			p_bh_ri_bd			    ,
6422                                         			p_bh_ri_rd			    ,
6423                                         			p_sh_si_sd			    ,
6424                                         			p_sh_si_rd			    ,
6425                                         			p_sh_ri_sd			    ,
6426                                         			p_sh_ri_rd			    ,
6427                                         			2                   ,
6428                                         			1                   ,
6429                                         			NULL                ,
6430 								1			,
6431 								NULL			,
6432                                         			NULL                ,
6433                                         			2                   ,
6434                                         			2                   );
6435 
6436          IF (x_retcode = -1)
6437          THEN
6438              retcode := -1;
6439              errbuf  := x_errbuf;
6440              msd_dem_common_utilities.log_message ('Error(4): msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6441              msd_dem_common_utilities.log_message ('Error while calling collect_history_data.');
6442              msd_dem_common_utilities.log_message (' ');
6443              RETURN;
6444          END IF;
6445         /*------- END - call collect_history_data procedure -------*/
6446 
6447         /*------- START - updates to t_src_sales_tmpl table -------*/
6448 
6449           l_sql := 'UPDATE ' || x_stg_table || ' SET ' || 'ACTUAL_QTY = ' || x_hist_col || ', '
6450                                                        || 'DM_SITE_CODE =  0, EBS_SITE_SR_PK = -777, '
6451                                                        || 'EBS_DEMAND_CLASS_CODE = 0, EBS_DEMAND_CLASS_SR_PK = -777, '
6452                                                        || 'EBS_SALES_CHANNEL_CODE = 0, EBS_SALES_CHANNEL_SR_PK = -777 ';
6453           EXECUTE IMMEDIATE l_sql ;
6454           COMMIT;
6455           msd_dem_common_utilities.log_message ('Updating ACTUAL_QTY, DM_SITE_CODE,EBS_DEMAND_CLASS_CODE,EBS_SALES_CHANNEL_CODE,EBS_SITE_SR_PK,EBS_SALES_CHANNEL_SR_PK,EBS_DEMAND_CLASS_SR_PK columns in T_SRC_SALES_TMPL table.');
6456           msd_dem_common_utilities.log_debug (' ');
6457           msd_dem_common_utilities.log_debug ('Update stmt - ' || l_sql);
6458           msd_dem_common_utilities.log_debug (' ');
6459 
6460           msd_dem_common_utilities.log_message ('Updating DM_ITEM_CODE column in T_SRC_SALES_TMPL table.');
6461           msd_dem_query_utilities.execute_query ( errbuf, retcode, 'EQ_SALES_TMPL_ITEM', p_sr_instance_id, null);
6462 
6463         /*------- END - updates to t_src_sales_tmpl table -------*/
6464 
6465 
6466        /*------- START - Submit "Collect Level Types" conc program to load T_SRC_ITEM_TMPL -------*/
6467             msd_dem_common_utilities.log_debug (' ');
6468             msd_dem_common_utilities.log_debug ('Submiting Collect Level Types conc progam for items.');
6469             msd_dem_common_utilities.log_debug (' ');
6470             BEGIN
6471                var_request_id := null;
6472                var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMCLT', NULL, NULL, FALSE, p_sr_instance_id, 2);
6473             EXCEPTION
6474                WHEN OTHERS THEN
6475                   retcode := -1;
6476                   errbuf := substr(SQLERRM,1,150);
6477                   msd_dem_common_utilities.log_message ('Error(5): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6478                   msd_dem_common_utilities.log_message ('Error while submitting request for populating T_SRC_ITEM_TMPL');
6479                   msd_dem_common_utilities.log_message (errbuf);
6480                   RETURN;
6481             END;
6482 
6483             var_request_num := 0 ;
6484             IF (g_req_table.COUNT <> 0) THEN g_req_table.DELETE; END IF;
6485 
6486             var_request_num := var_request_num + 1;
6487             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6488             g_req_table(var_request_num).DESCRIPTION := 'SPF eAM Populate T_SRC_ITEM_TMPL';
6489             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6490             g_req_table(var_request_num).status := 1;
6491 
6492             COMMIT;
6493 
6494             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
6495             msd_dem_common_utilities.log_message ('');
6496             msd_dem_common_utilities.log_message ('');
6497             /*------- END - Submit "Collect Level Types" conc program to load T_SRC_ITEM_TMPL -------*/
6498 
6499 
6500             /*------- START - Submit "Collect Level Types" conc program to load T_SRC_LOC_TMPL -------*/
6501             msd_dem_common_utilities.log_debug (' ');
6502             msd_dem_common_utilities.log_debug ('Submiting Collect Level Types conc progam for locations.');
6503             msd_dem_common_utilities.log_debug (' ');
6504             BEGIN
6505                var_request_id := null;
6506                var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMCLT', NULL, NULL, FALSE, p_sr_instance_id, 1, -1, G_YES);
6507             EXCEPTION
6508                WHEN OTHERS THEN
6509                   retcode := -1;
6510                   errbuf := substr(SQLERRM,1,150);
6511                   msd_dem_common_utilities.log_message ('Error(6): msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6512                   msd_dem_common_utilities.log_message ('Error while submitting request for populating T_SRC_LOC_TMPL');
6513                   msd_dem_common_utilities.log_message (errbuf);
6514                   RETURN;
6515             END;
6516 
6517             var_request_num := var_request_num + 1;
6518             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6519             g_req_table(var_request_num).DESCRIPTION := 'SPF eAM Populate T_SRC_LOC_TMPL';
6520             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6521             g_req_table(var_request_num).status := 1;
6522 
6523             COMMIT;
6524 
6525             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
6526             msd_dem_common_utilities.log_message ('');
6527             msd_dem_common_utilities.log_message ('');
6528             /*------- END - Submit "Collect Level Types" conc program to load T_SRC_LOC_TMPL *-------/
6529 
6530             /*----- Check whether the requests are completed or not -----*/
6531             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, NULL);
6532 
6533             IF (var_retcode = -1) THEN
6534                 retcode := -1;
6535                 errbuf := var_errbuf;
6536                 msd_dem_common_utilities.log_message ('ERROR(7) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6537                 msd_dem_common_utilities.log_message (errbuf);
6538                 RETURN;
6539             END IF;
6540 
6541             IF (var_retcode = 1) THEN
6542                 retcode := 1;
6543                 errbuf := var_errbuf;
6544                 msd_dem_common_utilities.log_message ('WARNING(2) - msd_spf_collect_history_data.Collect_eAM_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6545                 msd_dem_common_utilities.log_message (errbuf);
6546             END IF;
6547 
6548             /*------- START - updates to t_src_item_tmpl table -------*/
6549 
6550             l_sql := 'UPDATE ' || x_item_stg_table || ' SET'
6551                                || ' master_item_code = dm_item_code,'
6552                                || ' master_item_desc = dm_item_desc,'
6553                                || ' t_ep_I_ATT_10 =  ''' ||CS_DEM_PRODUCT || '''' ; --bug#14694463  kkhatri
6554             EXECUTE IMMEDIATE l_sql ;
6555             COMMIT;
6556             msd_dem_common_utilities.log_message ('Updating MASTER_ITEM_CODE,MASTER_ITEM_DESC,T_EP_I_ATT_10 columns in T_SRC_ITEM_TMPL table.');
6557             msd_dem_common_utilities.log_debug (' ');
6558             msd_dem_common_utilities.log_debug ('Update stmt 3 - ' || l_sql);
6559             msd_dem_common_utilities.log_debug (' ');
6560 
6561           /*------- END - updates to t_src_item_tmpl table -------*/
6562 
6563          /* START - Submit "Launch Demantra Workflow" concurrent program */
6564           IF (p_auto_run_download = G_YES)
6565           THEN
6566 
6567            BEGIN
6568               var_request_id := null;
6569               var_request_id := fnd_request.submit_request ('MSD', 'MSDDEMLDW', NULL, NULL, FALSE,
6570                                                             'WF_EBS_FULL_DOWNLOAD',
6571                                                             p_synchronous, p_check_interval, p_time_out);
6572 
6573               msd_dem_common_utilities.log_message ('Request Id for "Launch Demantra Workflow" concurrent program - ' || var_request_id);
6574 
6575            EXCEPTION
6576               WHEN OTHERS THEN
6577                  retcode := -1;
6578                  errbuf := substr(SQLERRM,1,150);
6579                  msd_dem_common_utilities.log_message ('Error(8): msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6580                  msd_dem_common_utilities.log_message ('Error while submitting request for "Launch Demantra Workflow" concurrent program.');
6581                  msd_dem_common_utilities.log_message (errbuf);
6582                  msd_dem_common_utilities.log_message (' ');
6583                  RETURN;
6584            END;
6585           END IF;
6586           /* END - Submit "Launch Demantra Workflow" concurrent program */
6587 
6588       EXCEPTION
6589       WHEN OTHERS THEN
6590         errbuf  := substr(SQLERRM,1,150);
6591         retcode := -1 ;
6592         msd_dem_common_utilities.log_message ('Exception: msd_spf_collect_history_data.collect_nmp_hist_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6593   	    msd_dem_common_utilities.log_message (errbuf);
6594   	    msd_dem_common_utilities.log_message (' ');
6595 
6596       END collect_nmp_hist_data ;
6597 
6598 
6599 /*
6600 *
6601 * This procedure is invoked when "Collect Source Data - eAM_cMRO" conc program
6602 * is submitted. This runs on the source instance.
6603 * This procedures performs the following.
6604 * 1. Submit Push Setup Parameters conc progam on destination
6605 * 2. Collect data regarding eAM
6606 *    - collect material usage, resource usage series by submitting MSDSPFCLSRS conc prg
6607 *    - check_requests_completion
6608 * 3. Collect data regarding cMRO
6609 *    - collect workorder history , material usage, resource usage series
6610 *      by submitting MSDSPFCLSRS conc prg
6611 *    - check_requests_completion
6612 * 4. Collect data regarding Fleet
6613 *
6614 * ------------ PARAMETERS LIST ----------------
6615 * p_sr_instance_id		       : Instance Id
6616 * p_collection_group       	 : Organization Group
6617 * p_from_date		             : Start date for collecting data
6618 * p_to_date		               : End date for collecting data
6619 * p_dest_dblink              : Source to destination dblink
6620 * p_collect_product 	       : Name of the product for which the collection is done
6621 *                              (EAM/CMRO/FLEET)
6622 *
6623 */
6624     Procedure Collect_Source_Data (
6625               errbuf	            OUT NOCOPY	VARCHAR2 ,
6626               retcode	            OUT NOCOPY	VARCHAR2 ,
6627               p_sr_instance_id	    IN	NUMBER           ,
6628               p_collection_group	IN	VARCHAR2         ,
6629               p_from_date	        IN	VARCHAR2         ,
6630               p_to_date	            IN	VARCHAR2         ,
6631               p_dest_dblink         IN  VARCHAR2         ,
6632               p_collect_product	    IN	VARCHAR2         ,
6633               p_sim_plan_name       IN VARCHAR2 DEFAULT '',
6634               p_check_interval		IN	NUMBER	 DEFAULT 60,
6635               p_time_out            IN	NUMBER	 DEFAULT 1440)
6636     IS
6637         var_errbuf          VARCHAR2(1000)  := NULL;
6638         var_retcode         VARCHAR2(10)	  := NULL;
6639         var_request_id		  NUMBER			    := NULL;
6640         var_request_num		  NUMBER			    := 0;
6641         sql_request         VARCHAR2(1000)  := NULL;
6642         x_params            varchar2(500)   := NULL;
6643         x_stg_table         varchar2(100)   := null;
6644         x_dest_dem_schema   varchar2(100)   := null;
6645         x_sql               varchar2(200)   := null;
6646 
6647     BEGIN
6648 
6649         msd_dem_common_utilities.log_debug ('Entering: msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6650 
6651         /* Log the input parameters to the log file */
6652         msd_dem_common_utilities.log_message('----------------------------------Input Parameters - Begin------------------------------------------');
6653 
6654         msd_dem_common_utilities.log_message('     ' || rpad('Instance Id', 30) || ' - ' || to_char(p_sr_instance_id));
6655         msd_dem_common_utilities.log_message('     ' || rpad('From Date', 30) || ' - ' || to_char(p_from_date));
6656         msd_dem_common_utilities.log_message('     ' || rpad('To Date', 30) || ' - ' || to_char(p_to_date));
6657         msd_dem_common_utilities.log_message('     ' || rpad('Source to Destination DBLINK', 30) || ' - ' || p_dest_dblink);
6658         msd_dem_common_utilities.log_message('     ' || rpad('Product', 30) || ' - ' || p_collect_product);
6659 
6660         msd_dem_common_utilities.log_message('-----------------------------------Input Parameters - End-------------------------------------------');
6661         msd_dem_common_utilities.log_message ('');
6662         msd_dem_common_utilities.log_message ('');
6663 
6664         var_request_num := 0;
6665         IF (g_req_table.COUNT <> 0)  THEN
6666             g_req_table.DELETE;
6667         END IF;
6668 
6669         /*----- START - Submit Push Setup Parameters conc progam on destination -----*/
6670         BEGIN
6671             sql_request :=  'BEGIN ' ||
6672                             'msd_dem_common_utilities.launch_remote_request' || p_dest_dblink ||
6673                             '  (:1, :2, :3, :4, :5, :6, :7);' ||
6674                             'END;';
6675 
6676             msd_dem_common_utilities.log_debug ('Submiting Push Setup Parameters conc progam on destination.');
6677 
6678             x_params := ' ''MSD'', ''MSDDEMPSP'', NULL, NULL, FALSE, ' ||
6679                         ' ' || p_sr_instance_id || ', ''' || p_collection_group || ''' ' ;
6680             EXECUTE IMMEDIATE sql_request USING OUT var_errbuf, OUT var_retcode,
6681                                           IN fnd_global.user_name, IN fnd_global.resp_name, IN fnd_global.application_name,
6682                                           IN x_params,
6683                                           OUT var_request_id;
6684 
6685             IF (var_retcode = -1) THEN
6686                 retcode := -1;
6687                 errbuf := var_errbuf;
6688                 msd_dem_common_utilities.log_message ('ERROR(1) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6689                 msd_dem_common_utilities.log_message (errbuf);
6690                 RETURN;
6691             END IF;
6692         EXCEPTION
6693         WHEN OTHERS THEN
6694             retcode := -1;
6695             errbuf := substr(SQLERRM,1,150);
6696             msd_dem_common_utilities.log_message ('ERROR(2) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6697             msd_dem_common_utilities.log_message ('Error while submitting request for push setup parameters.');
6698             msd_dem_common_utilities.log_message (errbuf);
6699             RETURN;
6700         END;
6701 
6702         var_request_num := var_request_num + 1;
6703         g_req_table(var_request_num).REQUEST_ID := var_request_id;
6704         g_req_table(var_request_num).DESCRIPTION := 'SPF Push Setup Parameters';
6705         g_req_table(var_request_num).IS_COMPLETE := FALSE;
6706         g_req_table(var_request_num).status := 1;
6707 
6708         COMMIT;
6709 
6710         msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id) || ' on destination.');
6711         msd_dem_common_utilities.log_message ('');
6712         msd_dem_common_utilities.log_message ('');
6713 
6714 
6715         check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, p_dest_dblink);
6716         IF (var_retcode = -1) THEN
6717             retcode := -1;
6718             errbuf := var_errbuf;
6719             msd_dem_common_utilities.log_message ('ERROR(3) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6720             msd_dem_common_utilities.log_message (errbuf);
6721             RETURN;
6722         END IF;
6723 
6724         IF (var_retcode = 1) THEN
6725             retcode := 1;
6726             errbuf := var_errbuf;
6727             msd_dem_common_utilities.log_message ('WARNING(1) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6728             msd_dem_common_utilities.log_message (errbuf);
6729         END IF;
6730 
6731         /*----- END - Submit Push Setup Parameters conc progam on destination -----*/
6732 
6733         x_sql   :=  'select parameter_value from msd_dem_setup_parameters where parameter_name like ''MSD_DEM_SCHEMA''';
6734         execute immediate x_sql into x_dest_dem_schema;
6735 
6736         /*----- Perform the following to collect data regarding eAM -----*/
6737         IF (p_collect_product = 'EAM')  THEN
6738 
6739           var_request_num := 0;
6740           IF (g_req_table.COUNT <> 0)  THEN g_req_table.DELETE; END IF;
6741 
6742             /*----- START - Submit series data collection progams on destination -----*/
6743 
6744             x_stg_table := msd_dem_common_utilities.get_lookup_value('MSD_DEM_DM_STAGING_TABLES','SALES_STAGING_TABLE');
6745             x_stg_table := x_dest_dem_schema || '.' || substr(x_stg_table, instr(x_stg_table, '.')+1);
6746 
6747             /*---- for eAM Materials Usage series -----*/
6748             BEGIN
6749                 sql_request :=  'BEGIN ' ||
6750                                 'msd_dem_common_utilities.launch_remote_request' || p_dest_dblink ||
6751                                 '  (:1, :2, :3, :4, :5, :6, :7);' ||
6752                                 'END;';
6753 
6754                 msd_dem_common_utilities.log_debug ('Submiting Collect SPF Series Data conc progam on destination for eAM Materials Usage series.');
6755                 x_params := ' ''MSD'', ''MSDSPFCLSRS'', NULL, NULL, FALSE, ' ||
6756                             ' ' || G_EAM_MTL_USG_SERIES_ID || ', ''' || x_stg_table || ''', ' ||
6757                             ' ' || p_sr_instance_id || ', 0, ' ||
6758                             ' ''' || p_from_date || ''', ''' || p_to_date || ''' ';
6759                 EXECUTE IMMEDIATE sql_request USING OUT var_errbuf, OUT var_retcode,
6760                                               IN fnd_global.user_name, IN fnd_global.resp_name, IN fnd_global.application_name,
6761                                               IN x_params,
6762                                               OUT var_request_id ;
6763 
6764                 IF (var_retcode = -1) THEN
6765                     retcode := -1;
6766                     errbuf := var_errbuf;
6767                     msd_dem_common_utilities.log_message ('ERROR(4) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6768                     msd_dem_common_utilities.log_message (errbuf);
6769                     RETURN;
6770                 END IF;
6771             EXCEPTION
6772             WHEN OTHERS THEN
6773                 retcode := -1;
6774                 errbuf := substr(SQLERRM,1,150);
6775                 msd_dem_common_utilities.log_message ('ERROR(5) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6776                 msd_dem_common_utilities.log_message ('Error while submitting request for collecting eAM Materials Usage.');
6777                 msd_dem_common_utilities.log_message (errbuf);
6778                 RETURN;
6779             END;
6780 
6781             var_request_num := var_request_num + 1;
6782             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6783             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect eAM Materials Usage';
6784             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6785             g_req_table(var_request_num).status := 1;
6786 
6787             COMMIT;
6788 
6789             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id) || ' on destination.');
6790             msd_dem_common_utilities.log_message ('');
6791             msd_dem_common_utilities.log_message ('');
6792 
6793            /*---- for eAM Resource Usage series -----*/
6794             BEGIN
6795                 sql_request :=  'BEGIN ' ||
6796                                 'msd_dem_common_utilities.launch_remote_request' || p_dest_dblink ||
6797                                 '  (:1, :2, :3, :4, :5, :6, :7);' ||
6798                                 'END;';
6799 
6800                 msd_dem_common_utilities.log_debug ('Submiting Collect SPF Series Data conc progam on destination for eAM Resource Usage series.');
6801 
6802                 x_params := ' ''MSD'', ''MSDSPFCLSRS'', NULL, NULL, FALSE, ' ||
6803                             ' ' || G_EAM_RES_USG_SERIES_ID || ', ''' || x_stg_table || ''', ' ||
6804                             ' ' || p_sr_instance_id || ', 0, ' ||
6805                             ' ''' || p_from_date || ''', ''' || p_to_date || ''' ';
6806                 EXECUTE IMMEDIATE sql_request USING OUT var_errbuf, OUT var_retcode,
6807                                               IN fnd_global.user_name, IN fnd_global.resp_name, IN fnd_global.application_name,
6808                                               IN x_params,
6809                                               OUT var_request_id;
6810 
6811                 IF (var_retcode = -1) THEN
6812                     retcode := -1;
6813                     errbuf := var_errbuf;
6814                     msd_dem_common_utilities.log_message ('ERROR(4) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6815                     msd_dem_common_utilities.log_message (errbuf);
6816                     RETURN;
6817                 END IF;
6818             EXCEPTION
6819             WHEN OTHERS THEN
6820                 retcode := -1;
6821                 errbuf := substr(SQLERRM,1,150);
6822                 msd_dem_common_utilities.log_message ('ERROR(5) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6823                 msd_dem_common_utilities.log_message ('Error while submitting request for collecting eAM Resource Usage');
6824                 msd_dem_common_utilities.log_message (errbuf);
6825                 RETURN;
6826             END;
6827 
6828             var_request_num := var_request_num + 1;
6829             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6830             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect eAM Resource Usage';
6831             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6832             g_req_table(var_request_num).status := 1;
6833 
6834             COMMIT;
6835 
6836             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id) || ' on destination.');
6837             msd_dem_common_utilities.log_message ('');
6838             msd_dem_common_utilities.log_message ('');
6839 
6840 			      /*----- Check whether the requests are completed or not -----*/
6841             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, p_dest_dblink);
6842 
6843             IF (var_retcode = -1) THEN
6844                 retcode := -1;
6845                 errbuf := var_errbuf;
6846                 msd_dem_common_utilities.log_message ('ERROR(6) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6847                 msd_dem_common_utilities.log_message (errbuf);
6848                 RETURN;
6849             END IF;
6850 
6851             IF (var_retcode = 1) THEN
6852                 retcode := 1;
6853                 errbuf := var_errbuf;
6854                 msd_dem_common_utilities.log_message ('WARNING(2) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6855                 msd_dem_common_utilities.log_message (errbuf);
6856              END IF;
6857 
6858             /*----- END - Submit series data collection progams on destination -----*/
6859 
6860 
6861         /*----- Perform the following to collect data regarding cMRO -----*/
6862         ELSIF (p_collect_product = 'CMRO')  THEN
6863 
6864             var_request_num := 0;
6865             IF (g_req_table.COUNT <> 0)  THEN
6866                 g_req_table.DELETE;
6867             END IF;
6868 
6869             /*----- START - Submit series data collection progams on destination -----*/
6870             /*---- for cMRO workorder history series -----*/
6871             BEGIN
6872                 sql_request :=  'begin ' ||
6873                                 'msd_dem_common_utilities.launch_remote_request' || p_dest_dblink ||
6874                                 '  (:1, :2, :3, :4, :5, :6, :7);' ||
6875                                 'end;';
6876 
6877                 msd_dem_common_utilities.log_debug ('Submiting Collect SPF Series Data conc progam on destination for cMRO workorder history series.');
6878 
6879                 x_params := ' ''MSD'', ''MSDSPFCLSRS'', NULL, NULL, FALSE, ' ||
6880                             ' ' || G_CMRO_WO_HIST_SERIES_ID || ', ''' || G_CMRO_WO_HIST_TABLE || ''', ' ||
6881                             ' ' || p_sr_instance_id || ', 0, ' ||
6882                             ' ''' || p_from_date || ''', ''' || p_to_date || ''' ';
6883                 execute immediate sql_request using out var_errbuf, out var_retcode,
6884                                               in fnd_global.user_name, in fnd_global.resp_name, in fnd_global.application_name,
6885                                               in x_params,
6886                                               out var_request_id;
6887 
6888                 IF (var_retcode = -1) THEN
6889                     retcode := -1;
6890                     errbuf := var_errbuf;
6891                     msd_dem_common_utilities.log_message ('ERROR(7) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6892                     msd_dem_common_utilities.log_message (errbuf);
6893                     RETURN;
6894                 END IF;
6895             EXCEPTION
6896             WHEN OTHERS THEN
6897                 retcode := -1;
6898                 errbuf := substr(SQLERRM,1,150);
6899                 msd_dem_common_utilities.log_message ('ERROR(8) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6900                 msd_dem_common_utilities.log_message ('Error while submitting request for collecting workorder history');
6901                 msd_dem_common_utilities.log_message (errbuf);
6902                 RETURN;
6903             END;
6904 
6905             var_request_num := var_request_num + 1;
6906             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6907             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect CMRO Workorder history';
6908             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6909             g_req_table(var_request_num).status := 1;
6910 
6911             COMMIT;
6912 
6913             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
6914             msd_dem_common_utilities.log_message ('');
6915             msd_dem_common_utilities.log_message ('');
6916 
6917             /*---- for cMRO material usage series -----*/
6918             BEGIN
6919                 sql_request :=  'begin ' ||
6920                                 'msd_dem_common_utilities.launch_remote_request' || p_dest_dblink ||
6921                                 '  (:1, :2, :3, :4, :5, :6, :7);' ||
6922                                 'end;';
6923 
6924                 msd_dem_common_utilities.log_debug ('Submiting Collect SPF Series Data conc progam on destination for cMRO material usage series.');
6925 
6926                 x_params := ' ''MSD'', ''MSDSPFCLSRS'', NULL, NULL, FALSE, ' ||
6927                             ' ' || G_CMRO_MTL_USG_SERIES_ID || ', ''' || G_CMRO_MTL_USG_TABLE || ''', ' ||
6928                             ' ' || p_sr_instance_id || ', 0, ' ||
6929                             ' ''' || p_from_date || ''', ''' || p_to_date || ''' ';
6930                 execute immediate sql_request using out var_errbuf, out var_retcode,
6931                                               in fnd_global.user_name, in fnd_global.resp_name, in fnd_global.application_name,
6932                                               in x_params,
6933                                               out var_request_id;
6934 
6935                 IF (var_retcode = -1) THEN
6936                     retcode := -1;
6937                     errbuf := var_errbuf;
6938                     msd_dem_common_utilities.log_message ('ERROR(9) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6939                     msd_dem_common_utilities.log_message (errbuf);
6940                     RETURN;
6941                 END IF;
6942             EXCEPTION
6943             WHEN OTHERS THEN
6944                 retcode := -1;
6945                 errbuf := substr(SQLERRM,1,150);
6946                 msd_dem_common_utilities.log_message ('ERROR(10) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6947                 msd_dem_common_utilities.log_message ('Error while submitting request for collecting material usage history');
6948                 msd_dem_common_utilities.log_message (errbuf);
6949                 RETURN;
6950             END;
6951 
6952             var_request_num := var_request_num + 1;
6953             g_req_table(var_request_num).REQUEST_ID := var_request_id;
6954             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect CMRO Material Usage history';
6955             g_req_table(var_request_num).IS_COMPLETE := FALSE;
6956             g_req_table(var_request_num).status := 1;
6957 
6958             COMMIT;
6959 
6960             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
6961             msd_dem_common_utilities.log_message ('');
6962             msd_dem_common_utilities.log_message ('');
6963 
6964             /*---- for cMRO resource usage series -----*/
6965             BEGIN
6966                 sql_request :=  'begin ' ||
6967                                 'msd_dem_common_utilities.launch_remote_request' || p_dest_dblink ||
6968                                 '  (:1, :2, :3, :4, :5, :6, :7);' ||
6969                                 'end;';
6970 
6971                 msd_dem_common_utilities.log_debug ('Submiting Collect SPF Series Data conc progam on destination for cMRO resource usage series.');
6972 
6973                 x_params := ' ''MSD'', ''MSDSPFCLSRS'', NULL, NULL, FALSE, ' ||
6974                             ' ' || G_CMRO_RES_USG_SERIES_ID || ', ''' || G_CMRO_RES_USG_TABLE || ''', ' ||
6975                             ' ' || p_sr_instance_id || ', 0, ' ||
6976                             ' ''' || p_from_date || ''', ''' || p_to_date || ''' ';
6977                 execute immediate sql_request using out var_errbuf, out var_retcode,
6978                                               in fnd_global.user_name, in fnd_global.resp_name, in fnd_global.application_name,
6979                                               in x_params,
6980                                               out var_request_id;
6981 
6982                 IF (var_retcode = -1) THEN
6983                     retcode := -1;
6984                     errbuf := var_errbuf;
6985                     msd_dem_common_utilities.log_message ('ERROR(11) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6986                     msd_dem_common_utilities.log_message (errbuf);
6987                     RETURN;
6988                 END IF;
6989             EXCEPTION
6990             WHEN OTHERS THEN
6991                 retcode := -1;
6992                 errbuf := substr(SQLERRM,1,150);
6993                 msd_dem_common_utilities.log_message ('ERROR(12) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
6994                 msd_dem_common_utilities.log_message ('Error while submitting request for collecting Resource Usage history');
6995                 msd_dem_common_utilities.log_message (errbuf);
6996                 RETURN;
6997             END;
6998 
6999             var_request_num := var_request_num + 1;
7000             g_req_table(var_request_num).REQUEST_ID := var_request_id;
7001             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect CMRO Resource Usage history';
7002             g_req_table(var_request_num).IS_COMPLETE := FALSE;
7003             g_req_table(var_request_num).status := 1;
7004 
7005             COMMIT;
7006 
7007             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
7008             msd_dem_common_utilities.log_message ('');
7009             msd_dem_common_utilities.log_message ('');
7010 
7011             /*----- Check whether requests ar completed or not -----*/
7012             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, p_dest_dblink);
7013 
7014             IF (var_retcode = -1) THEN
7015                 retcode := -1;
7016                 errbuf := var_errbuf;
7017                 msd_dem_common_utilities.log_message ('ERROR(13) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7018                 msd_dem_common_utilities.log_message (errbuf);
7019                 RETURN;
7020             END IF;
7021 
7022             IF (var_retcode = 1) THEN
7023                 retcode := 1;
7024                 errbuf := var_errbuf;
7025                 msd_dem_common_utilities.log_message ('WARNING(3) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7026                 msd_dem_common_utilities.log_message (errbuf);
7027              END IF;
7028 
7029             /*----- END - Submit series data collection progams on destination -----*/
7030 
7031           /*----- Perform the following to collect data regarding Fleet -----*/
7032           ELSIF (p_collect_product = 'FLEET')  THEN
7033                 var_request_num := 0;
7034                 IF (g_req_table.COUNT <> 0)  THEN
7035                     g_req_table.DELETE;
7036                 END IF;
7037 
7038             /*----- START - Submit series data collection progams on destination -----*/
7039             /*---- for cMRO fleet data -----*/
7040             BEGIN
7041                 sql_request :=  'begin ' ||
7042                                 'msd_dem_common_utilities.launch_remote_request' || p_dest_dblink ||
7043                                 '  (:1, :2, :3, :4, :5, :6, :7);' ||
7044                                 'end;';
7045 
7046                 msd_dem_common_utilities.log_debug ('Submiting Collect SPF Series Data conc progam on destination for cMRO fleet data');
7047 
7048                 x_stg_table := x_dest_dem_schema || '.' || substr(G_FLEET_DATA_DEST_TABLE, instr(G_FLEET_DATA_DEST_TABLE, '.')+1);
7049 
7050                 x_params := ' ''MSD'', ''MSDSPFCLSRS'', NULL, NULL, FALSE, ' ||
7051                             ' ' || G_FLEET_DATA_SERIES_ID || ', ''' || x_stg_table || ''', ' ||
7052                             ' ' || p_sr_instance_id || ', 0, ' ||
7053                             ' ''' || p_from_date || ''', ''' || p_to_date || ''', ' ||
7054                             ' ''' || p_sim_plan_name || ''' ';
7055                 execute immediate sql_request using out var_errbuf, out var_retcode,
7056                                               in fnd_global.user_name, in fnd_global.resp_name, in fnd_global.application_name,
7057                                               in x_params,
7058                                               out var_request_id;
7059 
7060                 IF (var_retcode = -1) THEN
7061                     retcode := -1;
7062                     errbuf := var_errbuf;
7063                     msd_dem_common_utilities.log_message ('ERROR(14) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7064                     msd_dem_common_utilities.log_message (errbuf);
7065                     RETURN;
7066                 END IF;
7067             EXCEPTION
7068             WHEN OTHERS THEN
7069                 retcode := -1;
7070                 errbuf := substr(SQLERRM,1,150);
7071                 msd_dem_common_utilities.log_message ('ERROR(15) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7072                 msd_dem_common_utilities.log_message ('Error while submitting request for collecting workorder history');
7073                 msd_dem_common_utilities.log_message (errbuf);
7074                 RETURN;
7075             END;
7076 
7077             var_request_num := var_request_num + 1;
7078             g_req_table(var_request_num).REQUEST_ID := var_request_id;
7079             g_req_table(var_request_num).DESCRIPTION := 'SPF Collect CMRO Fleet Data';
7080             g_req_table(var_request_num).IS_COMPLETE := FALSE;
7081             g_req_table(var_request_num).status := 1;
7082 
7083             COMMIT;
7084 
7085             msd_dem_common_utilities.log_message ('Submitted concurrent request - ' || to_char(var_request_id));
7086             msd_dem_common_utilities.log_message ('');
7087             msd_dem_common_utilities.log_message ('');
7088 
7089             /*----- Check whether requests ar completed or not -----*/
7090             check_requests_completion(var_errbuf, var_retcode, g_req_table.LAST, systimestamp, g_req_table, p_check_interval, p_time_out, p_dest_dblink);
7091 
7092             IF (var_retcode = -1) THEN
7093                 retcode := -1;
7094                 errbuf := var_errbuf;
7095                 msd_dem_common_utilities.log_message ('ERROR(16) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7096                 msd_dem_common_utilities.log_message (errbuf);
7097                 RETURN;
7098             END IF;
7099 
7100             IF (var_retcode = 1) THEN
7101                 retcode := 1;
7102                 errbuf := var_errbuf;
7103                 msd_dem_common_utilities.log_message ('WARNING(4) - msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7104                 msd_dem_common_utilities.log_message (errbuf);
7105              END IF;
7106 
7107             /*----- END - Submit series data collection progams on destination -----*/
7108 
7109         END IF;
7110 
7111         msd_dem_common_utilities.log_debug ('Exiting: msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7112 
7113     EXCEPTION
7114     WHEN OTHERS THEN
7115         errbuf  := substr(SQLERRM,1,150);
7116         retcode := -1 ;
7117         msd_dem_common_utilities.log_message ('Exception: msd_spf_collect_history_data.Collect_Source_Data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7118   	    msd_dem_common_utilities.log_message (errbuf);
7119   	    msd_dem_common_utilities.log_message (' ');
7120 
7121     END Collect_Source_Data ;
7122 
7123     /*
7124      * This procedure deletes all data from SPF GL Tables. This should only be run by
7125      * an admin user. The user must make sure that the Demantra AS is down before running
7126      * the procedure.
7127      * The procedure is used when the SPF related profile options have been changed which
7128      * result in changes to the bom structure brought into Demantra.
7129      */
7130     PROCEDURE PURGE_SPF_GL_DATA (
7131                 errbuf      OUT NOCOPY 	VARCHAR2,
7132                 retcode     OUT NOCOPY 	VARCHAR2)
7133     IS
7134         x_schema    VARCHAR2(100) := NULL;
7135         x_sql       VARCHAR2(500) := NULL;
7136     BEGIN
7137 
7138         msd_dem_common_utilities.log_debug ('Entering: msd_spf_collect_history_data.purge_spf_gl_data  - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7139 
7140         x_schema := fnd_profile.value('MSD_DEM_SCHEMA');
7141 
7142         /*Deleting records from T_EP_SPF table */
7143         msd_dem_common_utilities.log_message('Deleting data from T_EP_SPF');
7144         x_sql := 'DELETE FROM ' || x_schema || '.t_ep_spf WHERE t_ep_spf_id <> 0 ';
7145         msd_dem_common_utilities.log_debug ('The SQL is - ' || x_sql);
7146         msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7147         EXECUTE IMMEDIATE x_sql;
7148         COMMIT;
7149         msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7150 
7151         /*Deleting records from T_EP_SPF_BASE_MODEL table */
7152         msd_dem_common_utilities.log_message('Deleting data from T_EP_SPF_BASE_MODEL');
7153         x_sql := 'DELETE FROM ' || x_schema || '.t_ep_spf_base_model WHERE t_ep_spf_base_model_id <> 0 ';
7154         msd_dem_common_utilities.log_debug ('The SQL is - ' || x_sql);
7155         msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7156         EXECUTE IMMEDIATE x_sql;
7157         COMMIT;
7158         msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7159 
7160         /*Deleting records from T_EP_SPF_CHILD table */
7161         msd_dem_common_utilities.log_message('Deleting data from T_EP_SPF_CHILD');
7162         x_sql := 'DELETE FROM ' || x_schema || '.t_ep_spf_child WHERE t_ep_spf_child_id <> 0 ';
7163         msd_dem_common_utilities.log_debug ('The SQL is - ' || x_sql);
7164         msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7165         EXECUTE IMMEDIATE x_sql;
7166         COMMIT;
7167         msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7168 
7169         /*Deleting records from T_EP_SPF_LATEST_REV table */
7170         msd_dem_common_utilities.log_message('Deleting data from T_EP_SPF_LATEST_REV');
7171         x_sql := 'DELETE FROM ' || x_schema || '.t_ep_spf_latest_rev WHERE t_ep_spf_latest_rev_id <> 0 ';
7172         msd_dem_common_utilities.log_debug ('The SQL is - ' || x_sql);
7173         msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7174         EXECUTE IMMEDIATE x_sql;
7175         COMMIT;
7176         msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7177 
7178         /*Deleting records from T_EP_SPF_VISIT_TYPE table */
7179         msd_dem_common_utilities.log_message('Deleting data from T_EP_SPF_VISIT_TYPE');
7180         x_sql := 'DELETE FROM ' || x_schema || '.t_ep_spf_visit_type WHERE t_ep_spf_visit_type_id <> 0 ';
7181         msd_dem_common_utilities.log_debug ('The SQL is - ' || x_sql);
7182         msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7183         EXECUTE IMMEDIATE x_sql;
7184         COMMIT;
7185         msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7186 
7187         /*Deleting records from T_EP_SPF_VISIT_STAGE_TYPE table */
7188         msd_dem_common_utilities.log_message('Deleting data from T_EP_SPF_VISIT_STAGE_TYPE');
7189         x_sql := 'DELETE FROM ' || x_schema || '.t_ep_spf_visit_stage_type WHERE t_ep_spf_visit_stage_type_id <> 0 ';
7190         msd_dem_common_utilities.log_debug ('The SQL is - ' || x_sql);
7191         msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7192         EXECUTE IMMEDIATE x_sql;
7193         COMMIT;
7194         msd_dem_common_utilities.log_debug ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7195 
7196         msd_dem_common_utilities.log_message('SPF GL Data deleted successfully');
7197         msd_dem_common_utilities.log_message('Please bounce the demantra server');
7198         msd_dem_common_utilities.log_debug ('Exiting: msd_spf_collect_history_data.purge_spf_gl_data  - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7199         retcode := 0;
7200 
7201     EXCEPTION
7202     WHEN OTHERS THEN
7203         errbuf := substr(SQLERRM,1,200);
7204         retcode := -1;
7205 
7206         msd_dem_common_utilities.log_message ('Exception(1): msd_spf_collect_history_data.purge_spf_gl_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
7207         msd_dem_common_utilities.log_message (errbuf);
7208     RETURN;
7209 
7210     END PURGE_SPF_GL_DATA;
7211 
7212 
7213 END MSD_SPF_COLLECT_HISTORY_DATA;