[Home] [Help]
PACKAGE BODY: APPS.MSD_SRP_PROCESS_STREAM_DATA
Source
1 PACKAGE BODY msd_srp_process_stream_data AS -- body
2 /* $Header: MSDSRPPPB.pls 120.6.12010000.2 2008/09/08 11:26:52 vrepaka ship $*/
3
4 null_char constant VARCHAR2(6) := '-23453';
5
6 g_error constant NUMBER := 2;
7 g_warning constant NUMBER := 1;
8
9 v_sql_stmt pls_integer;
10 v_debug boolean := nvl(fnd_profile.VALUE('MRP_DEBUG'), 'N') = 'Y';
11
12 PROCEDURE log_message(p_error_text IN VARCHAR2) IS
13 BEGIN
14
15 IF fnd_global.conc_request_id > 0 THEN
16 fnd_file.PUT_LINE(fnd_file.LOG, p_error_text);
17 END IF;
18
19 EXCEPTION
20 WHEN others THEN
21 RETURN;
22 END log_message;
23
24 PROCEDURE launch(errbuf OUT nocopy VARCHAR2, retcode OUT nocopy NUMBER, p_instance_id IN NUMBER, p_stream_id IN NUMBER) IS
25
26 CURSOR get_dm_schema IS
27 SELECT owner
28 FROM dba_objects
29 WHERE owner = owner
30 AND object_type = 'TABLE'
31 AND object_name = 'MDP_MATRIX'
32 ORDER BY created DESC;
33
34 CURSOR check_srp_plan IS
35 SELECT demand_plan_id
36 FROM msd_demand_plans
37 WHERE demand_plan_id = 5555555;
38
39 CURSOR get_scn_id IS
40 SELECT scenario_id
41 FROM msd_dp_scenarios
42 WHERE scenario_name LIKE
43 (SELECT DISTINCT(scenario_name)
44 FROM msd_dp_scenario_entries
45 WHERE scenario_id = -23453)
46 ;
47
48 CURSOR get_scn_name IS
49 SELECT DISTINCT(scenario_name)
50 FROM msd_dp_scenario_entries
51 WHERE scenario_id = -23453;
52
53 CURSOR get_count_err_records(l_scenario_id NUMBER) IS
54 SELECT COUNT(*)
55 FROM msd_dp_scenario_entries
56 WHERE demand_plan_id = 5555555
57 AND scenario_id = l_scenario_id;
58
59 CURSOR get_err_records IS
60 SELECT * from MSC_ITEM_FAILURE_RATES
61 where process_flag = 'E';
62
63 msd_schema_name VARCHAR2(100);
64 msc_schema_name VARCHAR2(100);
65 l_scenario_name VARCHAR2(100);
66 l_entity_name VARCHAR2(100);
67 lv_sql_stmt VARCHAR2(4000);
68 lv_sql_stmt1 VARCHAR2(4000);
69 lv_sql_stmt2 VARCHAR2(4000);
70 lv_sql_stmt3 VARCHAR2(4000);
71 lv_sql_stmt4 VARCHAR2(4000);
72 lv_sql_stmt5 VARCHAR2(4000);
73 lv_sql_stmt6 VARCHAR2(4000);
74 lv_error_text VARCHAR2(1000);
75 lv_dummy1 VARCHAR2(32);
76 lv_dummy2 VARCHAR2(32);
77
78 bind_var VARCHAR2(20);
79
80 l_scenario_id NUMBER;
81 l_demand_plan_id NUMBER;
82 l_err_count NUMBER;
83
84 lv_retval boolean;
85
86 failure_rate_id get_err_records % rowtype;
87
88 BEGIN
89
90 log_message('***************** Entered in the procedure - LAUNCH **********');
91
92 OPEN get_dm_schema;
93 FETCH get_dm_schema
94 INTO msd_schema_name;
95 CLOSE get_dm_schema;
96
97 IF msd_schema_name IS NOT NULL THEN
98
99 IF(p_stream_id < 6) THEN
100 lv_retval := fnd_installation.get_app_info('MSD', lv_dummy1, lv_dummy2, msd_schema_name);
101 END IF;
102
103 ELSE
104 lv_retval := fnd_installation.get_app_info('MSD', lv_dummy1, lv_dummy2, msd_schema_name);
105 END IF;
106
107 lv_retval := fnd_installation.get_app_info('MSC', lv_dummy1, lv_dummy2, msc_schema_name);
108
109 --LOG_MESSAGE('Fetched the schema name from profile MSD_DEM_SCHEMA as '||msd_schema_name);
110
111 IF p_stream_id = 1 THEN
112
113 l_entity_name := 'InstallBaseHistory';
114 v_sql_stmt := 01;
115 lv_sql_stmt := ' UPDATE ' || msd_schema_name || '.MSD_DEM_INS_BASE_HISTORY t1'
116 || ' SET t1.level1_sr_pk = ( SELECT t2.sr_inventory_item_id '
117 || ' FROM msc_system_items t2 '
118 || ' WHERE t2.sr_instance_id = :p_instance_id '
119 || ' AND t2.item_name = t1.level1 '
120 || ' AND rownum = 1) ';
121
122 END IF;
123
124 IF p_stream_id = 2 THEN
125
126 l_entity_name := 'Field Service Usage History';
127 v_sql_stmt := 02;
128 lv_sql_stmt := ' UPDATE ' || msd_schema_name
129 || '.MSD_DEM_FLD_SER_USG_HISTORY t1'
130 || ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
131 || ' FROM msc_system_items t2 '
132 || ' WHERE t2.sr_instance_id = :p_instance_id '
133 || ' AND t2.item_name = t1.level1 '
134 || ' AND rownum = 1) ' ;
135
136 lv_sql_stmt1 := ' UPDATE ' || msd_schema_name
137 || '.MSD_DEM_FLD_SER_USG_HISTORY t1'
138 || ' SET t1.level2_sr_pk = ( SELECT t2.region_id '
139 || ' FROM msc_regions t2 '
140 || ' where t2.sr_instance_id = :p_instance_id '
141 || ' AND t2.zone = t1.level2 '
142 || ' AND t2.zone_usage = 1)' ;
143
144 END IF;
145
146 IF p_stream_id = 3 THEN
147
148 l_entity_name := 'Depot Repair Usage History';
149 v_sql_stmt := 03;
150 lv_sql_stmt := ' UPDATE '
151 || msd_schema_name
152 || '.MSD_DEM_DPT_REP_USG_HISTORY t1'
153 || ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
154 || ' FROM msc_system_items t2 '
155 || ' WHERE t2.sr_instance_id = :p_instance_id '
156 || ' AND t2.item_name = t1.level1) ';
157
158 lv_sql_stmt1 := ' UPDATE '
159 || msd_schema_name
160 || '.MSD_DEM_DPT_REP_USG_HISTORY t1'
161 || ' SET t1.level2_sr_pk = ( SELECT t2.sr_tp_id '
162 || ' FROM msc_trading_partners t2 '
163 || ' where t2.sr_instance_id = :p_instance_id '
164 || ' AND t2.organization_code = t1.level2) ';
165
166 END IF;
167
168 IF p_stream_id = 4 THEN
169
170 l_entity_name := 'Service Part Return History';
171 v_sql_stmt := 04;
172 lv_sql_stmt := ' UPDATE '
173 || msd_schema_name
174 || '.MSD_DEM_SRP_RETURN_HISTORY t1'
175 || ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
176 || ' FROM msc_system_items t2 '
177 || ' WHERE t2.sr_instance_id = :p_instance_id '
178 || ' AND t2.item_name = t1.level1 '
179 || ' AND rownum = 1) ';
180
181 lv_sql_stmt1 := ' UPDATE '
182 || msd_schema_name || '.MSD_DEM_SRP_RETURN_HISTORY t1'
183 || ' SET t1.level2_sr_pk = ( SELECT t2.region_id '
184 || ' FROM msc_regions t2 '
185 || ' where t2.sr_instance_id = :p_instance_id '
186 || ' AND t2.zone = t1.level2 '
187 || ' AND t2.zone_usage = 1)';
188
189 END IF;
190
191 IF p_stream_id = 5 THEN
192
193 l_entity_name := 'Failure Rates';
194 v_sql_stmt := 05;
195
196 lv_sql_stmt := 'UPDATE ' || msc_schema_name
197 || '.MSC_ITEM_FAILURE_RATES t1'
198 || ' SET t1.using_assembly_id = nvl((select distinct(t2.inventory_item_id)'
199 || ' FROM msc_system_items t2 '
200 || ' where t2.sr_instance_id = :p_instance_id '
201 || ' and t2.item_name = t1.using_assembly_name),-55555) ';
202
203 lv_sql_stmt1 := 'UPDATE ' || msc_schema_name
204 || '.MSC_ITEM_FAILURE_RATES t1'
205 || ' SET t1.inventory_item_id = nvl((select distinct(t2.inventory_item_id) '
206 || ' FROM msc_system_items t2 '
207 || ' where t2.sr_instance_id = :p_instance_id '
208 || ' and t2.item_name = t1.item_name),-55555) ';
209
210 lv_sql_stmt2 := ' UPDATE ' || msc_schema_name
211 || '.MSC_ITEM_FAILURE_RATES '
212 || ' SET FAILURE_RATE = 1'
213 || ' where failure_rate > 1'
214 || ' and process_flag = ''N'' ';
215
216 lv_sql_stmt3 := ' UPDATE ' || msc_schema_name
217 || '.MSC_ITEM_FAILURE_RATES '
218 || ' SET FAILURE_RATE = 0'
219 || ' where failure_rate < 0'
220 || ' and process_flag = ''N'' ';
221
222 lv_sql_stmt4 := ' UPDATE ' || msc_schema_name
223 || '.MSC_ITEM_FAILURE_RATES '
224 || ' SET PROCESS_FLAG = ''P'''
225 || ' where PROCESS_FLAG = ''N''';
226
227 lv_sql_stmt5 := ' UPDATE ' || msc_schema_name
228 || '.MSC_ITEM_FAILURE_RATES '
229 || ' SET PROCESS_FLAG = ''E'''
230 || ' where PROCESS_FLAG = ''N'''
231 || ' and (USING_ASSEMBLY_ID = -55555 or INVENTORY_ITEM_ID = -55555) ';
232
233 lv_sql_stmt6 := 'DELETE FROM ' || msc_schema_name
234 || '.MSC_ITEM_FAILURE_RATES '
235 || 'WHERE PROCESS_FLAG = ''E''';
236
237 END IF;
238
239 IF p_stream_id = 6 THEN
240
241 l_entity_name := 'Product Return History';
242 v_sql_stmt := 06;
243 --lv_sql_stmt := ' UPDATE ' || msd_schema_name
244 --|| '.MSD_DEM_RETURN_HISTORY t1'
245 -- || ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
246 --|| ' FROM msc_system_items t2 '
247 -- || ' WHERE t2.sr_instance_id = :p_instance_id '
248 -- || ' AND t2.item_name = t1.level1) ';
249
250 END IF;
251
252 IF p_stream_id = 7 THEN
253
254 l_entity_name := 'Forecast Data';
255 v_sql_stmt := 07;
256
257 OPEN check_srp_plan;
258 FETCH check_srp_plan
259 INTO l_demand_plan_id;
260 CLOSE check_srp_plan;
261
262 OPEN get_scn_id;
263 FETCH get_scn_id
264 INTO l_scenario_id;
265 CLOSE get_scn_id;
266
267 IF l_demand_plan_id IS NULL THEN
268
269 INSERT
270 INTO msd_demand_plans(demand_plan_id, organization_id, demand_plan_name, last_update_date, last_updated_by, creation_date, created_by, sr_instance_id, use_org_specific_bom_flag)
271 VALUES(5555555, -23453, 'SRP DUMMY PLAN', trunc(sysdate), fnd_global.user_id, trunc(sysdate), fnd_global.user_id, -23453, 'N');
272
273 END IF;
274
275 IF l_scenario_id IS NOT NULL THEN
276
277 OPEN get_scn_name;
278 FETCH get_scn_name
279 INTO l_scenario_name;
280 CLOSE get_scn_name;
281
282 lv_sql_stmt := 'DELETE FROM MSD_DP_SCENARIO_ENTRIES WHERE demand_plan_id = 5555555 and scenario_id = :l_scenario_id';
283 EXECUTE IMMEDIATE lv_sql_stmt USING l_scenario_id;
284
285 UPDATE MSD_DP_SCENARIO_ENTRIES SET SCENARIO_ID = l_scenario_id where scenario_name = l_scenario_name
286 and demand_plan_id = 5555555 and scenario_id = -23453;
287
288 END IF;
289
290 IF l_scenario_id IS NULL THEN
291 bind_var := ':l_scenario_name,';
292
293 OPEN get_scn_name;
294 FETCH get_scn_name
295 INTO l_scenario_name;
296 CLOSE get_scn_name;
297 lv_sql_stmt := 'INSERT INTO MSD_DP_SCENARIOS(demand_plan_id,scenario_id,scenario_name, '
298 || 'last_update_date,last_updated_by,creation_date,created_by)'
299 || 'values(5555555,MSD_DP_SCENARIOS_S.nextval,' || bind_var
300 || 'trunc(sysdate),fnd_global.user_id,trunc(sysdate),fnd_global.user_id)';
301 EXECUTE IMMEDIATE lv_sql_stmt USING l_scenario_name;
302
303 INSERT INTO MSD_DP_SCENARIO_OUTPUT_LEVELS(demand_plan_id,scenario_id,level_id,last_update_date,last_updated_by,creation_date,created_by)
304 values(5555555,MSD_DP_SCENARIOS_S.CURRVAL,1,trunc(sysdate),fnd_global.user_id,trunc(sysdate),fnd_global.user_id);
305
306 OPEN get_scn_id;
307 FETCH get_scn_id
308 INTO l_scenario_id;
309 CLOSE get_scn_id;
310
311 lv_sql_stmt1 := 'UPDATE MSD_DP_SCENARIO_ENTRIES SET SCENARIO_ID = MSD_DP_SCENARIOS_S.CURRVAL' || ' WHERE SCENARIO_NAME = :l_scenario_name ';
312 log_message(lv_sql_stmt1);
313 EXECUTE IMMEDIATE lv_sql_stmt1 USING l_scenario_name;
314 END IF;
315
316 COMMIT;
317
318 lv_sql_stmt2 := 'DELETE FROM MSD_DP_SCN_ENTRIES_DENORM ' || 'WHERE SCENARIO_ID = :l_scenario_id ' || 'AND DEMAND_PLAN_ID = 5555555';
319
320 EXECUTE IMMEDIATE lv_sql_stmt2 USING l_scenario_id;
321
322 INSERT
323 INTO msd_dp_scn_entries_denorm(demand_plan_id, scenario_id, demand_id, sr_inventory_item_id, sr_organization_id, start_time, end_time, quantity, creation_date, created_by)
324 (SELECT mdse.demand_plan_id,
325 mdse.scenario_id,
326 mdse.entry_id,
327 msi.sr_inventory_item_id,
328 mtp.sr_tp_id,
329 mdse.time_lvl_val_from,
330 mdse.time_lvl_val_to,
331 mdse.total_quantity,
332 mdse.creation_date,
333 mdse.created_by
334 FROM msd_dp_scenario_entries mdse,
335 msc_trading_partners mtp,
336 msc_system_items msi
337 WHERE mdse.demand_plan_id = 5555555
338 AND mdse.scenario_id = l_scenario_id
339 AND mdse.organization_lvl_val = mtp.organization_code
340 AND mdse.product_lvl_val = msi.item_name
341 AND mtp.sr_instance_id = p_instance_id
342 AND mtp.partner_type = 3
343 AND mtp.sr_tp_id = msi.organization_id
344 AND msi.sr_instance_id = p_instance_id
345 AND msi.plan_id = -1)
346 ;
347
348 DELETE FROM msd_dp_scenario_entries mdse
349 WHERE mdse.scenario_id = l_scenario_id
350 AND mdse.organization_lvl_val IN
351 (SELECT organization_code
352 FROM msc_trading_partners
353 WHERE sr_instance_id = p_instance_id
354 AND partner_type = 3
355 AND organization_code LIKE mdse.organization_lvl_val
356 AND rownum = 1)
357 AND mdse.product_lvl_val IN
358 (SELECT item_name
359 FROM msc_system_items
360 WHERE sr_instance_id = p_instance_id
361 AND item_name LIKE mdse.product_lvl_val
362 AND rownum = 1)
363 ;
364
365 OPEN get_count_err_records(l_scenario_id);
366 FETCH get_count_err_records
367 INTO l_err_count;
368 CLOSE get_count_err_records;
369
370 IF l_err_count > 0 THEN
371 log_message('Records with demand_plan_id 5555555 and scenario_id '|| l_scenario_id ||' in table MSD_DP_SCENARIO_ENTRIES errored out.');
372 retcode := g_error;
373
374 END IF;
375
376 COMMIT;
377
378 END IF;
379
380 IF v_debug THEN
381 log_message(lv_sql_stmt);
382
383 IF lv_sql_stmt1 IS NOT NULL THEN
384 log_message(lv_sql_stmt1);
385 END IF;
386
387 IF lv_sql_stmt2 IS NOT NULL THEN
388 log_message(lv_sql_stmt2);
389 END IF;
390
391 END IF;
392
393 BEGIN
394
395 IF lv_sql_stmt IS NOT NULL
396 AND p_stream_id < 7 THEN
397 EXECUTE IMMEDIATE lv_sql_stmt USING p_instance_id;
398 END IF;
399
400 IF lv_sql_stmt1 IS NOT NULL
401 AND p_stream_id < 7 THEN
402 EXECUTE IMMEDIATE lv_sql_stmt1 USING p_instance_id;
403 END IF;
404
405 IF lv_sql_stmt2 IS NOT NULL
406 AND p_stream_id < 7 THEN
407 EXECUTE IMMEDIATE lv_sql_stmt2;
408 END IF;
409
410 IF lv_sql_stmt3 IS NOT NULL
411 AND p_stream_id < 7 THEN
412 EXECUTE IMMEDIATE lv_sql_stmt3;
413 END IF;
414
415 IF lv_sql_stmt5 IS NOT NULL
416 AND p_stream_id < 7 THEN
417 EXECUTE IMMEDIATE lv_sql_stmt5;
418
419 LOG_MESSAGE('The following records errored out during validation : ');
420
421 FOR failure_rate_id in get_err_records
422 LOOP
423 LOG_MESSAGE(failure_rate_id.FAILURE_RATE || '~' ||
424 failure_rate_id.COLLECTED_FLAG || '~' ||
425 failure_rate_id.RETIREMENT_RATE || '~' ||
426 failure_rate_id.ITEM_NAME || '~' ||
427 failure_rate_id.USING_ASSEMBLY_NAME
428 );
429 retcode := g_error;
430 EXIT WHEN get_err_records % NOTFOUND;
431 END LOOP;
432 END IF;
433
434 IF lv_sql_stmt4 IS NOT NULL
435 AND p_stream_id < 7 THEN
436 EXECUTE IMMEDIATE lv_sql_stmt4;
437 END IF;
438
439 IF lv_sql_stmt6 IS NOT NULL
440 AND p_stream_id < 7 THEN
441 EXECUTE IMMEDIATE lv_sql_stmt6;
442 END IF;
443
444 EXCEPTION
445 WHEN others THEN
446 log_message('Error generating Source Keys');
447
448 lv_error_text := SUBSTR('MSD_SRP_PROCESS_STREAM_DATA.LAUNCH ' || '(' || v_sql_stmt || ')' || sqlerrm, 1, 240);
449 log_message(lv_error_text);
450
451 errbuf := lv_error_text;
452 retcode := g_error;
453 END;
454 --Final commit
455 COMMIT;
456
457 log_message('***************** Exiting from the procedure - LAUNCH **********');
458
459 END launch;
460
461 END msd_srp_process_stream_data;
462