[Home] [Help]
PACKAGE BODY: APPS.MSD_DEM_CTO
Source
1 PACKAGE BODY MSD_DEM_CTO AS
2 /* $Header: msddemctob.pls 120.18 2012/02/22 07:15:32 nallkuma noship $ */
3
4
5 /*** PUBLIC PROCEDURES ***
6 *
7 * POPULATE_STAGING_TABLE
8 * COLLECT_MODEL_BOM_COMPONENTS
9 * PURGE_CTO_GL_DATA
10 *
11 *** PUBLIC PROCEDURES ***/
12
13
14 /*
15 * Given the entity name, this procedure runs the query for the entity name.
16 * Usually this procedure will be used to populate the Demantra CTO staging tables.
17 */
18 PROCEDURE POPULATE_STAGING_TABLE (
19 errbuf OUT NOCOPY VARCHAR2,
20 retcode OUT NOCOPY VARCHAR2,
21 p_entity_name IN VARCHAR2,
22 p_sr_instance_id IN NUMBER,
23 p_for_cto IN NUMBER DEFAULT 1)
24 IS
25 x_include_dependent_demand NUMBER := NULL;
26 x_is_present NUMBER := NULL;
27
28 x_dem_schema VARCHAR2(100) := NULL;
29 BEGIN
30
31 msd_dem_common_utilities.log_debug ('Entering: msd_dem_cto.populate_staging_table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
32
33 /* Log the parameters */
34 msd_dem_common_utilities.log_debug (' Entity Name - ' || p_entity_name);
35 msd_dem_common_utilities.log_debug (' Instance ID - ' || to_char(p_sr_instance_id));
36 msd_dem_common_utilities.log_debug (' For CTO - ' || to_char(p_for_cto));
37
38 msd_dem_common_utilities.log_debug('Verify the Entity Name is available in MSD_DEM_ENTITY_QUERIES');
39 SELECT 1
40 INTO x_is_present
41 FROM MSD_DEM_ENTITY_QUERIES
42 WHERE entity_name = p_entity_name;
43
44
45 msd_dem_common_utilities.log_debug('Get the Demantra Schema Name');
46 x_dem_schema := fnd_profile.value('MSD_DEM_SCHEMA');
47 IF (x_dem_schema IS NULL)
48 THEN
49 msd_dem_common_utilities.log_message ('Error(1) in msd_dem_cto.populate_staging_table - '
50 || 'Unable to get value for Profile MSD_DEM: Schema');
51 retcode := -1;
52 RETURN;
53 END IF;
54
55
56 IF (p_for_cto = 1)
57 THEN
58
59 /* If the query is exclusively meant for CTO, then the query should be run only if
60 the profile MSD_DEM: Include Dependent Demand is set to Yes */
61 x_include_dependent_demand := fnd_profile.value ('MSD_DEM_INCLUDE_DEPENDENT_DEMAND');
62
63 IF (x_include_dependent_demand = 2) /* Profile is set to No */
64 THEN
65 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
66 || 'Profile MSD_DEM: Include Dependent Demand is set to No. '
67 || 'Hence no action taken. Exiting Normally.');
68 retcode := 0;
69 RETURN;
70 ELSIF (x_include_dependent_demand IS NULL)
71 THEN
72 msd_dem_common_utilities.log_message ('Error(2) in msd_dem_cto.populate_staging_table - '
73 || 'Unable to get value for Profile MSD_DEM: Include Dependent Demand');
74 retcode := -1;
75 RETURN;
76 END IF;
77
78
79 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
80 || ' Pre-Process - Start ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
81
82 IF (p_entity_name = 'EQ_BIIO_CTO_DATA')
83 THEN
84
85 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
86 || 'Truncating table BIIO_CTO_DATA_ERR ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
87 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_DATA_ERR';
88
89 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
90 || 'Truncating table BIIO_CTO_DATA ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
91 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_DATA';
92
93 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
94 || 'Truncating table BIIO_CTO_BASE_MODEL_ERR ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
95 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_BASE_MODEL_ERR';
96
97 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
98 || 'Truncating table BIIO_CTO_BASE_MODEL ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
99 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_BASE_MODEL';
100
101 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
102 || 'Truncating table BIIO_CTO_POPULATION_ERR ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
103 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_POPULATION_ERR';
104
105 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
106 || 'Truncating table BIIO_CTO_POPULATION ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
107 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_POPULATION';
108
109 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
110 || 'Truncating table BIIO_CTO_LEVEL_ERR ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
111 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_LEVEL_ERR';
112
113 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
114 || 'Deleting all data from BIIO_CTO_LEVEL ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
115 EXECUTE IMMEDIATE 'DELETE FROM ' || x_dem_schema || '.BIIO_CTO_LEVEL';
116
117 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
118 || 'Truncating table BIIO_CTO_CHILD_ERR ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
119 EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || x_dem_schema || '.BIIO_CTO_CHILD_ERR';
120
121 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
122 || 'Deleting all data from BIIO_CTO_CHILD ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
123 EXECUTE IMMEDIATE 'DELETE FROM ' || x_dem_schema || '.BIIO_CTO_CHILD';
124 COMMIT;
125
126 ELSIF (p_entity_name = 'EQ_SALES_TMPL_ITEM_OPTIONS')
127 THEN
128
129 msd_dem_common_utilities.log_message ('Skipping EQ_SALES_TMPL_ITEM_OPTIONS as a separate concurrent request set.');
130 msd_dem_common_utilities.log_message ('EQ_SALES_TMPL_ITEM_OPTIONS will be a pre-process to EQ_BIIO_CTO_DATA_EPP');
131
132 retcode := 0;
133 RETURN;
134
135 ELSIF (p_entity_name = 'EQ_BIIO_CTO_DATA_EPP')
136 THEN
137
138 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
139 || 'Running populate staging tables for EQ_SALES_TMPL_ITEM_OPTIONS first.' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
140
141 msd_dem_common_utilities.log_debug ('Start EQ_SALES_TMPL_ITEM_OPTIONS - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
142
143 msd_dem_query_utilities.execute_query (
144 errbuf,
145 retcode,
146 'EQ_SALES_TMPL_ITEM_OPTIONS',
147 p_sr_instance_id,
148 null);
149
150 msd_dem_common_utilities.log_debug ('End EQ_SALES_TMPL_ITEM_OPTIONS - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
151
152 IF (retcode = -1)
153 THEN
154 msd_dem_common_utilities.log_message ('Error(4) in msd_dem_cto.populate_staging_table - '
155 || 'Error in call to msd_dem_query_utilities.execute_query');
156 msd_dem_common_utilities.log_message(errbuf);
157 RETURN;
158 ELSE
159 msd_dem_common_utilities.log_message ('Query EQ_SALES_TMPL_ITEM_OPTIONS executed successfully.');
160 END IF;
161
162 ELSE
163 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
164 || 'No Pre-Process Required.');
165 END IF;
166
167 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
168 || ' Pre-Process - End ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
169
170
171 msd_dem_common_utilities.log_debug('Calling msd_dem_query_utilities.execute_query');
172 msd_dem_query_utilities.execute_query (
173 errbuf,
174 retcode,
175 p_entity_name,
176 p_sr_instance_id,
177 NULL );
178 IF (retcode = -1)
179 THEN
180 msd_dem_common_utilities.log_message ('Error(3) in msd_dem_cto.populate_staging_table - '
181 || 'Error in call to msd_dem_query_utilities.execute_query');
182 msd_dem_common_utilities.log_message(errbuf);
183 RETURN;
184 ELSE
185 msd_dem_common_utilities.log_message ('Query ' || p_entity_name || ' executed successfully.');
186 END IF;
187
188 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
189 || ' Post-Process - Start ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
190
191 IF (p_entity_name = 'EQ_BIIO_CTO_DATA')
192 THEN
193
194 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
195 || 'Deleting Dependent Demand History from T_SRC_SALES_TMPL ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
196 EXECUTE IMMEDIATE 'DELETE FROM ' || x_dem_schema || '.T_SRC_SALES_TMPL'
197 || ' WHERE ebs_base_model_sr_pk IS NOT NULL '
198 || ' AND to_char(ebs_base_model_sr_pk) <> component_code ';
199 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
200 || to_char(SQL%ROWCOUNT) || ' rows deleted from T_SRC_SALES_TMPL');
201 COMMIT;
202
203 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
204 || 'Updating item code and site code in T_SRC_SALES_TMPL ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
205 msd_dem_query_utilities.execute_query (
206 errbuf,
207 retcode,
208 'EQ_SALES_TMPL_ITEM',
209 p_sr_instance_id,
210 null);
211
212 IF (msd_dem_common_utilities.is_use_new_site_format = 0)
213 THEN
214
215 msd_dem_common_utilities.log_message ('Update the site codes to descriptive format');
216
217 msd_dem_common_utilities.log_debug ('Start Updating Site codes - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
218 msd_dem_update_level_codes.update_code(errbuf ,
219 retcode,
220 p_sr_instance_id,
221 'SITE',
222 msd_dem_common_utilities.get_lookup_value ('MSD_DEM_DM_STAGING_TABLES', 'SALES_STAGING_TABLE'),
223 'DM_SITE_CODE',
224 'EBS_SITE_SR_PK');
225 msd_dem_common_utilities.log_debug ('End Updating Site codes - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
226
227 END IF;
228
229 ELSIF (p_entity_name = 'EQ_BIIO_CTO_DATA_EPP')
230 THEN
231
232 IF (msd_dem_common_utilities.is_use_new_site_format = 0)
233 THEN
234
235 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
236 || 'Updating site codes to descriptive format in BIIO_CTO_DATA ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
237
238 msd_dem_common_utilities.log_debug ('Start Updating Site codes - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
239 msd_dem_update_level_codes.convert_site_code(
240 errbuf,
241 retcode,
242 p_sr_instance_id,
243 'SITE',
244 x_dem_schema || '.BIIO_CTO_DATA',
245 'LEVEL5',
246 1);
247 msd_dem_common_utilities.log_debug ('End Updating Site codes - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
248
249 END IF;
250
251 ELSE
252 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
253 || 'No Post-Process Required.');
254 END IF;
255
256 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
257 || ' Post-Process - End ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
258
259 ELSE
260
261 /* If the query is exclusively meant for NON-CTO, then the query should be run only if
262 the profile MSD_DEM: Include Dependent Demand is set to No */
263 x_include_dependent_demand := fnd_profile.value ('MSD_DEM_INCLUDE_DEPENDENT_DEMAND');
264
265 IF (x_include_dependent_demand = 1) /* Profile is set to Yes */
266 THEN
267 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
268 || 'Profile MSD_DEM: Include Dependent Demand is set to Yes. '
269 || 'Hence no action taken. Exiting Normally.');
270 retcode := 0;
271 RETURN;
272 ELSIF (x_include_dependent_demand IS NULL)
273 THEN
274 msd_dem_common_utilities.log_message ('Error(4) in msd_dem_cto.populate_staging_table - '
275 || 'Unable to get value for Profile MSD_DEM: Include Dependent Demand');
276 retcode := -1;
277 RETURN;
278 END IF;
279
280 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
281 || ' Pre-Process - Start ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
282
283 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
284 || ' Pre-Process - End ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
285
286
287 msd_dem_common_utilities.log_debug('Calling msd_dem_query_utilities.execute_query');
288 msd_dem_query_utilities.execute_query (
289 errbuf,
290 retcode,
291 p_entity_name,
292 p_sr_instance_id,
293 NULL );
294 IF (retcode = -1)
295 THEN
296 msd_dem_common_utilities.log_message ('Error(5) in msd_dem_cto.populate_staging_table - '
297 || 'Error in call to msd_dem_query_utilities.execute_query');
298 msd_dem_common_utilities.log_message(errbuf);
299 RETURN;
300 ELSE
301 msd_dem_common_utilities.log_message ('Query ' || p_entity_name || ' executed successfully.');
302 END IF;
303
304 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
305 || ' Post-Process - Start ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
306
307 IF ( p_entity_name = 'EQ_SALES_TMPL_ITEM'
308 AND msd_dem_common_utilities.is_use_new_site_format = 0)
309 THEN
310
311 msd_dem_common_utilities.log_message ('Update the site codes to descriptive format');
312
313 msd_dem_common_utilities.log_debug ('Start Updating Site codes - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
314 msd_dem_update_level_codes.update_code(errbuf ,
315 retcode,
316 p_sr_instance_id,
317 'SITE',
318 msd_dem_common_utilities.get_lookup_value ('MSD_DEM_DM_STAGING_TABLES', 'SALES_STAGING_TABLE'),
319 'DM_SITE_CODE',
320 'EBS_SITE_SR_PK');
321 msd_dem_common_utilities.log_debug ('End Updating Site codes - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
322
323 END IF;
324
325 msd_dem_common_utilities.log_message ('In msd_dem_cto.populate_staging_table - '
326 || ' Post-Process - End ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
327
328 END IF;
329
330 msd_dem_common_utilities.log_debug ('Exiting: msd_dem_cto.populate_staging_table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
331
332 retcode := 0;
333
334 EXCEPTION
335 WHEN OTHERS THEN
336 errbuf := substr(SQLERRM,1,150);
337 retcode := -1;
338
339 msd_dem_common_utilities.log_message ('Exception(1): msd_dem_cto.populate_staging_table - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
340 msd_dem_common_utilities.log_message (errbuf);
341 RETURN;
342
343 END POPULATE_STAGING_TABLE;
344
345
346
347
348 /*
349 * This procedure populates the table msd_dem_model_bom_components for the base models
350 * available in the sales staging table.
351 */
352 PROCEDURE COLLECT_MODEL_BOM_COMPONENTS (
353 errbuf OUT NOCOPY VARCHAR2,
354 retcode OUT NOCOPY VARCHAR2,
355 p_sr_instance_id IN NUMBER,
356 p_flat_file_load IN NUMBER DEFAULT 2 )
357 IS
358
359 x_is_local NUMBER := to_number(fnd_profile.value('MSD_DEM_EXPLODE_DEMAND_METHOD'));
360 x_cpp NUMBER := to_number(fnd_profile.value('MSD_DEM_PLANNING_PERCENTAGE'));
361 x_dem_schema VARCHAR2(100) := fnd_profile.value('MSD_DEM_SCHEMA');
362 x_curr_user VARCHAR2(100) := NULL;
363 x_is_seq_present NUMBER := NULL;
364 x_validation_org_id NUMBER := NULL;
365 x_sql VARCHAR2(32000) := NULL;
366 x_sql1 VARCHAR2(4000) := NULL;
367 x_sql2 VARCHAR2(4000) := NULL;
368 x_sql3 VARCHAR2(1000) := NULL;
369 x_least_eff_date date := msd_dem_common_utilities.get_cto_effective_date(null, 1);
370
371 x_iterator NUMBER := 1;
372 x_num_rows NUMBER := 0;
373 x_total_num_rows NUMBER := 0;
374
375 x_dm_time_level varchar2(10):= null;
376 x_add_days number := 0;
377
378 BEGIN
379
380 msd_dem_common_utilities.log_debug ('Entering: msd_dem_cto.collect_model_bom_components - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
381
382 /* Log the parameters */
383 msd_dem_common_utilities.log_debug (' Instance ID - ' || to_char(p_sr_instance_id));
384
385 /* The procedure should only execute if profile MSD_DEM: Include Dependent Demand is set to yes. */
386 IF (fnd_profile.value('MSD_DEM_INCLUDE_DEPENDENT_DEMAND') = 2)
387 THEN
388 msd_dem_common_utilities.log_message ('In msd_dem_cto.collect_model_bom_components - '
389 || 'Profile MSD_DEM: Include Dependent Demand is set to No. '
390 || 'Hence no action taken. Exiting Normally.');
391 retcode := 0;
392 RETURN;
393 END IF;
394
395 msd_dem_common_utilities.log_message ('Use Organization Specific BOM - ' || to_char(x_is_local));
396
397 SELECT USER INTO x_curr_user FROM DUAL;
398 msd_dem_common_utilities.log_message ('Current User - ' || x_curr_user);
399
400 msd_dem_common_utilities.log_debug ('Truncate table MSD_DEM_MODEL_BOM_COMPONENTS');
401 msd_dem_query_utilities.truncate_table (
402 errbuf,
403 retcode,
404 'MSD_DEM_MODEL_BOM_COMPONENTS',
405 2,
406 1);
407 IF (retcode = -1)
408 THEN
409 msd_dem_common_utilities.log_message ('Error(1) in msd_dem_cto.collect_model_bom_components - '
410 || 'Error in call to msd_dem_query_utilities.truncate_table');
411 msd_dem_common_utilities.log_message(errbuf);
412 RETURN;
413 END IF;
414
415 msd_dem_common_utilities.log_debug ('Inserting base models in T_SRC_SALES_TMPL to MSD_DEM_MODEL_BOM_COMPONENTS');
416 x_sql := 'INSERT /*+ APPEND NOLOGGING */ INTO MSD_DEM_MODEL_BOM_COMPONENTS '
417 || ' ( ID, SR_INSTANCE_ID, SR_ORGANIZATION_ID, BASE_MODEL_ID, PARENT_ITEM_ID, COMPONENT_ITEM_ID, IS_BASE_MODEL, OPTIONAL_FLAG, '
418 || ' CREATION_DATE, CREATED_BY, LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN, COMPONENT_CODE, PARENT_COMPONENT_CODE ';
419
420 IF (x_cpp = 2)
421 THEN
422 x_sql := x_sql || ' , IS_IN, EFFECTIVITY_DATE_S, DISABLE_DATE_S, PLNG_PCT_EXISTING_S, PLANNING_FACTOR_S, '
423 || ' OPTIONAL_FLAG_S, COMPONENT_CODE_S, PARENT_ITEM_ID_S ';
424 END IF;
425
426
427 /* If flat file load, then populate the column component_code_legacy with concatenated item names */
428 IF (p_flat_file_load = 1)
429 THEN
430 x_sql := x_sql || ' , COMPONENT_CODE_LEGACY ';
431 END IF;
432
433 x_sql := x_sql || ' ) SELECT '
434 || to_char(x_iterator) || ' , '
435 || to_char(p_sr_instance_id) || ' , '
436 || ' iv.ebs_org_sr_pk, '
437 || ' msi.inventory_item_id, '
438 || ' msi.inventory_item_id, '
439 || ' msi.inventory_item_id, '
440 || ' 1, '
441 || ' 2, '
442 || 'sysdate, '
443 || to_char(fnd_global.user_id) || ' , '
444 || 'sysdate, '
445 || to_char(fnd_global.user_id) || ' , '
446 || to_char(fnd_global.login_id) || ' , '
447 || ' msi.sr_inventory_item_id ' || ' , '
448 || ' msi.inventory_item_id ';
449
450 IF (x_cpp = 2)
451 THEN
452 x_sql := x_sql || ' , 1, null, null, null, null, 2, msi.sr_inventory_item_id, msi.inventory_item_id ';
453 END IF;
454
455 /* If flat file load, then populate the column component_code_legacy with concatenated item names */
456 IF (p_flat_file_load = 1)
457 THEN
458 x_sql := x_sql || ' , msi.item_name ';
459 END IF;
460
461 x_sql := x_sql || ' FROM (SELECT tsst.ebs_org_sr_pk, tsst.ebs_item_sr_pk '
462 || ' FROM ' || x_dem_schema || '.T_SRC_SALES_TMPL tsst '
463 || ' WHERE tsst.ebs_base_model_sr_pk IS NOT NULL ';
464
465 IF (p_flat_file_load <> 1)
466 THEN
467 x_sql := x_sql || ' AND to_char(tsst.ebs_base_model_sr_pk) = tsst.component_code ';
468 ELSE
469 x_sql := x_sql || ' AND tsst.dm_item_code = tsst.component_code_legacy ';
470 END IF;
471
472 x_sql := x_sql || ' GROUP BY tsst.ebs_org_sr_pk, tsst.ebs_item_sr_pk ) iv, '
473 || ' msc_system_items msi '
474 || ' WHERE msi.sr_instance_id = ' || to_char(p_sr_instance_id)
475 || ' AND msi.sr_inventory_item_id = iv.ebs_item_sr_pk '
476 || ' AND msi.organization_id = iv.ebs_org_sr_pk '
477 || ' AND msi.plan_id = -1 '
478 || ' UNION '
479 || ' SELECT '
480 || to_char(x_iterator) || ' , '
481 || to_char(p_sr_instance_id) || ' , '
482 || ' msi.organization_id, '
483 || ' msi.inventory_item_id, '
484 || ' msi.inventory_item_id, '
485 || ' msi.inventory_item_id, '
486 || ' 1, '
487 || ' 2, '
488 || 'sysdate, '
489 || to_char(fnd_global.user_id) || ' , '
490 || 'sysdate, '
491 || to_char(fnd_global.user_id) || ' , '
492 || to_char(fnd_global.login_id) || ' , '
493 || ' msi.sr_inventory_item_id ' || ' , '
494 || ' msi.inventory_item_id ';
495
496 IF (x_cpp = 2)
497 THEN
498 x_sql := x_sql || ' , 1, null, null, null, null, 2, msi.sr_inventory_item_id, msi.inventory_item_id ';
499 END IF;
500
501 /* If flat file load, then populate the column component_code_legacy with concatenated item names */
502 IF (p_flat_file_load = 1)
503 THEN
504 x_sql := x_sql || ' , msi.item_name ';
505 END IF;
506
507 x_sql := x_sql || ' FROM ' || x_dem_schema || '.t_ep_cto tec, '
508 || ' ' || x_dem_schema || '.t_ep_cto_base_model tecbm, '
509 || ' msc_system_items msi '
510 || ' WHERE tec.t_ep_cto_demand_type_id = 1 '
511 || ' AND tecbm.t_ep_cto_base_model_id = tec.t_ep_cto_base_model_id '
512 || ' AND msi.plan_id = -1 '
513 || ' AND msi.sr_instance_id = ' || to_char(p_sr_instance_id)
514 || ' AND msi.item_name = tecbm.t_ep_cto_base_model_code '
515 || ' AND tec.t_ep_cto_code = ''' || to_char(p_sr_instance_id) || ''' || ''::'' || msi.organization_id '
516 || ' || ''::'' || msi.sr_inventory_item_id ';
517
518 msd_dem_common_utilities.log_debug ('The query is - ');
519 msd_dem_common_utilities.log_debug (x_sql);
520
521 msd_dem_common_utilities.log_debug ('Iterator Value is - ' || to_char(x_iterator));
522 msd_dem_common_utilities.log_debug ('Total Number of rows is - ' || to_char(x_total_num_rows));
523
524 msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
525 EXECUTE IMMEDIATE x_sql;
526 x_total_num_rows := x_total_num_rows + SQL%ROWCOUNT;
527 msd_dem_common_utilities.log_debug ('Number of rows inserted - ' || to_char(x_total_num_rows));
528 msd_dem_common_utilities.log_debug ('Total Number of rows is - ' || to_char(x_total_num_rows));
529 COMMIT;
530 msd_dem_common_utilities.log_debug ('Query End Time Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
531
532
533 msd_dem_common_utilities.log_debug ('Build Query to populate the parent child recursively');
534 x_sql := NULL;
535 x_sql := 'INSERT /*+ APPEND NOLOGGING */ INTO MSD_DEM_MODEL_BOM_COMPONENTS '
536 || ' ( ID, SR_INSTANCE_ID, SR_ORGANIZATION_ID, BASE_MODEL_ID, TOP_ATO_MODEL_ID, PARENT_ITEM_ID, COMPONENT_ITEM_ID, IS_BASE_MODEL, '
537 || ' EFFECTIVITY_DATE, DISABLE_DATE, PLANNING_FACTOR, PLNG_PCT_EXISTING, OPTIONAL_FLAG, '
538 || ' CREATION_DATE, CREATED_BY, LAST_UPDATE_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN, COMPONENT_CODE, PARENT_COMPONENT_CODE ';
539
540 IF (x_cpp = 2)
541 THEN
542 x_sql := x_sql || ' , IS_IN, EFFECTIVITY_DATE_S, DISABLE_DATE_S, PLNG_PCT_EXISTING_S, PLANNING_FACTOR_S, '
543 || ' OPTIONAL_FLAG_S, COMPONENT_CODE_S, PARENT_ITEM_ID_S ';
544 END IF;
545
546 /* If flat file load, then populate the column component_code_legacy with concatenated item names */
547 IF (p_flat_file_load = 1)
548 THEN
549 x_sql := x_sql || ' , COMPONENT_CODE_LEGACY ';
550 END IF;
551
552 x_sql := x_sql || ') SELECT :bvar1, SR_INSTANCE_ID, SR_ORGANIZATION_ID, BASE_MODEL_ID, min(TOP_ATO_MODEL_ID), PARENT_ITEM_ID, COMPONENT_ITEM_ID, '
553 || 'min(IS_BASE_MODEL), min(EFFECTIVITY_DATE), max(DISABLE_DATE), min(PLANNING_FACTOR), min(PLNG_PCT_EXISTING), min(OPTIONAL_FLAG), '
554 || 'sysdate CREATION_DATE, '
555 || to_char(fnd_global.user_id) || ' CREATED_BY, '
556 || 'sysdate LAST_UPDATE_DATE, '
557 || to_char(fnd_global.user_id) || ' LAST_UPDATED_BY, '
558 || to_char(fnd_global.login_id) || ' LAST_UPDATE_LOGIN, '
559 || ' COMPONENT_CODE, PARENT_COMPONENT_CODE ';
560
561 if(x_cpp = 2) then
562 x_sql := x_sql || ', min(IS_IN), min(EFFECTIVITY_DATE_S), max(DISABLE_DATE_S), min(PLNG_PCT_EXISTING_S), min(PLANNING_FACTOR_S), min(OPTIONAL_FLAG_S), '
563 || 'COMPONENT_CODE_S, PARENT_ITEM_ID_S ';
564 end if;
565
566 if(p_flat_file_load = 1) then
567 x_sql := x_sql || ', COMPONENT_CODE_LEGACY ';
568 end if;
569
570 x_sql := x_sql || ' FROM ( SELECT '
571 --|| ' :bvar1, '
572 || ' mbc.sr_instance_id, '
573 || ' dem.sr_organization_id, '
574 || ' dem.base_model_id, '
575 -- Bug#13716090
576 || ' decode (mbc.using_assembly_id, '
577 || ' dem.component_item_id, nvl(dem.top_ato_model_id, '
578 || ' case '
579 || ' when pitem.mrp_planning_code <> 6 '
580 || ' and pitem.bom_item_type = 1 '
581 || ' then dem.component_item_id '
582 || ' else to_number(null) '
583 || ' end '
584 || ' ) '
585 || ' ) top_ato_model_id, '
586 || ' mbc.using_assembly_id parent_item_id, '
587 || ' mbc.inventory_item_id component_item_id, '
588 || ' decode (citem.bom_item_type, '
589 || ' 4, '
590 || ' decode(citem.pick_components_flag, '
591 || ' ''Y'', '
592 || ' 2, '
593 || ' 3), '
594 || ' 2) is_base_model, '
595 || ' mbc.effectivity_date, '
596 || ' decode (dem.disable_date, null, mbc.disable_date, '
597 || ' decode(mbc.disable_date, null, dem.disable_date, least(dem.disable_date, mbc.disable_date))) disable_date, '
598 || ' mbc.planning_factor, '
599 || ' decode(mbc.usage_quantity/decode(mbc.usage_quantity, '
600 || ' null,1, '
601 || ' 0,1, '
602 || ' abs(mbc.usage_quantity)), '
603 || ' 1, '
604 || ' (mbc.usage_quantity * mbc.Component_Yield_Factor), '
605 || ' (mbc.usage_quantity / mbc.Component_Yield_Factor)) '
606 || ' * msd_dem_common_utilities.uom_conv(citem.sr_instance_id,citem.uom_code,citem.inventory_item_id) plng_pct_existing, '
607 || ' mbc.optional_component optional_flag, '
608 || ' dem.component_code || ''-'' || citem.sr_inventory_item_id component_code ';
609
610 IF (x_cpp = 2)
611 THEN
612 x_sql := x_sql || ' , decode (dem.is_base_model, 1, dem.parent_component_code, decode (dem.is_in, 1, dem.parent_component_code || ''-'' || dem.component_item_id, dem.parent_component_code)) parent_component_code ';
613 ELSE
614 x_sql := x_sql || ' , decode (dem.is_base_model, 1, dem.parent_component_code, dem.parent_component_code || ''-'' || dem.component_item_id) parent_component_code ';
615 END IF;
616
617 IF (x_cpp = 2)
618 THEN
619 x_sql := x_sql || ' , decode (citem.bom_item_type, 2, 2, 1) is_in '
620 || ' , mbc.effectivity_date effectivity_date_s'
621 || ' , decode (dem.disable_date_s, null, mbc.disable_date, '
622 || ' decode(mbc.disable_date, null, dem.disable_date_s, least(dem.disable_date_s, mbc.disable_date))) disable_date_s'
623 || ' , decode (pitem.bom_item_type, 2, dem.plng_pct_existing_s, 1) * decode(mbc.usage_quantity/decode(mbc.usage_quantity, '
624 || ' null,1, '
625 || ' 0,1, '
626 || ' abs(mbc.usage_quantity)), '
627 || ' 1, '
628 || ' (mbc.usage_quantity * mbc.Component_Yield_Factor), '
629 || ' (mbc.usage_quantity / mbc.Component_Yield_Factor)) '
630 || ' * msd_dem_common_utilities.uom_conv(citem.sr_instance_id,citem.uom_code,citem.inventory_item_id) plng_pct_existing_s '
631 || ' , decode (pitem.bom_item_type, 2,dem.planning_factor_s /100, 1) * mbc.planning_factor planning_factor_s '
632 || ' , decode (mbc.optional_component * dem.optional_flag_s, 4, 2, 1) optional_flag_s '
633 || ' , dem.component_code_s || decode (citem.bom_item_type, 2, '''', ''-'' || citem.sr_inventory_item_id) component_code_s '
634 || ' , decode (pitem.bom_item_type, 2, dem.parent_item_id_s, pitem.inventory_item_id) parent_item_id_s ';
635 END IF;
636
637 /* If flat file load, then populate the column component_code_legacy with concatenated item names */
638 IF (p_flat_file_load = 1)
639 THEN
640 IF (x_cpp = 2)
641 THEN
642 x_sql := x_sql || ' , dem.component_code_legacy || decode (citem.bom_item_type, 2, '''', ''-'' || citem.item_name) component_code_legacy ';
643 ELSE
644 x_sql := x_sql || ' , dem.component_code_legacy || ''-'' || citem.item_name component_code_legacy ';
645 END IF;
646 END IF;
647
648
649 x_sql := x_sql || ' FROM msd_dem_model_bom_components dem, '
650 || ' msc_boms mb, '
651 || ' msc_bom_components mbc, '
652 || ' msc_system_items pitem, '
653 || ' msc_system_items citem '
654 || ' WHERE dem.id = :bvar2 '
655 || ' AND mb.plan_id = -1 ';
656
657 IF (x_is_local = 1)
658 THEN
659 x_sql := x_sql || ' AND mb.organization_id = dem.sr_organization_id ';
660 ELSE
661 msd_dem_common_utilities.log_debug ('Get the validation org id for the instance');
662 SELECT validation_org_id INTO x_validation_org_id
663 FROM msc_apps_instances
664 WHERE instance_id = p_sr_instance_id;
665
666 IF (x_validation_org_id IS NULL)
667 THEN
668 retcode := -1;
669 msd_dem_common_utilities.log_message ('Error(2): msd_dem_cto.collect_model_bom_components - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
670 msd_dem_common_utilities.log_message ('Validation Org Id is Null.');
671 RETURN;
672 END IF;
673
674 x_sql := x_sql || ' AND mb.organization_id = ' || to_char(x_validation_org_id);
675
676 END IF;
677
678 x_sql := x_sql || ' AND mb.sr_instance_id = ' || to_char(p_sr_instance_id)
679 || ' AND mb.assembly_item_id = dem.component_item_id '
680 || ' AND mb.alternate_bom_designator IS NULL '
681 || ' AND mbc.plan_id = mb.plan_id '
682 || ' AND mbc.sr_instance_id = mb.sr_instance_id '
683 || ' AND mbc.bill_sequence_id = mb.bill_sequence_id '
684 || ' AND mbc.using_assembly_id = mb.assembly_item_id '
685 || ' AND nvl(mbc.disable_date, sysdate + 1 ) > :bvar3 '
686 --|| ' AND nvl(mbc.effectivity_date, sysdate - 1 ) <= sysdate '
687 || ' AND pitem.plan_id = mbc.plan_id '
688 || ' AND pitem.sr_instance_id = mbc.sr_instance_id '
689 || ' AND pitem.organization_id = mbc.organization_id '
690 || ' AND pitem.inventory_item_id = mbc.using_assembly_id '
691 || ' AND (pitem.mrp_planning_code <> 6 '
692 || ' OR (pitem.mrp_planning_code = 6 '
693 || ' AND pitem.pick_components_flag = ''Y'')) '
694 || ' AND (pitem.ato_forecast_control <> 3 '
695 || ' OR (' || to_char(x_cpp) || ' = 3 '
696 || ' AND pitem.bom_item_type = 2)) '
697 || ' AND (pitem.bom_item_type <> 4 '
698 || ' OR (pitem.bom_item_type = 4 '
699 || ' AND pitem.pick_components_flag = ''Y'')) '
700 || ' AND citem.plan_id = mbc.plan_id '
701 || ' AND citem.sr_instance_id = mbc.sr_instance_id '
702 || ' AND citem.organization_id = mbc.organization_id '
703 || ' AND citem.inventory_item_id = mbc.inventory_item_id '
704 || ' AND (citem.mrp_planning_code <> 6 '
705 || ' OR (citem.mrp_planning_code = 6 '
706 || ' AND citem.pick_components_flag = ''Y'')) '
707 || ' AND (citem.ato_forecast_control = 2 '
708 || ' OR (' || to_char(x_cpp) || ' = 3 '
709 || ' AND (citem.bom_item_type = 2 '
710 || ' OR mbc.optional_component = 1))) ) ';
711
712
713 x_sql := x_sql || ' GROUP BY SR_INSTANCE_ID, SR_ORGANIZATION_ID, BASE_MODEL_ID, PARENT_ITEM_ID, COMPONENT_ITEM_ID, '
714 || ' COMPONENT_CODE, PARENT_COMPONENT_CODE ';
715
716 if(x_cpp = 2) then
717 x_sql := x_sql || ', COMPONENT_CODE_S, PARENT_ITEM_ID_S ';
718 end if;
719
720 if(p_flat_file_load = 1) then
721 x_sql := x_sql || ', COMPONENT_CODE_LEGACY ';
722 end if;
723
724 msd_dem_common_utilities.log_debug('The Query is - ');
725 msd_dem_common_utilities.log_debug(x_sql);
726
727 msd_dem_common_utilities.log_debug ('Build Query to mark duplication Option Class as Option');
728 x_sql1 := 'UPDATE MSD_DEM_MODEL_BOM_COMPONENTS a'
729 || ' SET is_base_model = 3 '
730 || ' WHERE EXISTS ( SELECT 1 FROM MSD_DEM_MODEL_BOM_COMPONENTS b '
731 || ' WHERE b.id < :bvar1 '
732 || ' AND b.sr_instance_id = a.sr_instance_id '
733 || ' AND b.sr_organization_id = a.sr_organization_id '
734 || ' AND b.base_model_id = a.base_model_id '
735 || ' AND b.component_item_id = a.component_item_id ) '
736 || ' AND a.id = :bvar2 ';
737
738 msd_dem_common_utilities.log_debug('The Query is - ');
739 msd_dem_common_utilities.log_debug(x_sql1);
740
741 msd_dem_common_utilities.log_debug ('Build Query to delete duplicate Option Class-Option');
742 x_sql2 := 'DELETE FROM MSD_DEM_MODEL_BOM_COMPONENTS a'
743 || ' WHERE EXISTS ( SELECT 1 FROM MSD_DEM_MODEL_BOM_COMPONENTS b '
744 || ' WHERE b.id < :bvar1 '
745 || ' AND b.sr_instance_id = a.sr_instance_id '
746 || ' AND b.sr_organization_id = a.sr_organization_id '
747 || ' AND b.base_model_id = a.base_model_id '
748 || ' AND b.parent_item_id = a.parent_item_id '
749 || ' AND b.component_item_id = a.component_item_id ) '
750 || ' AND a.id = :bvar2 ';
751
752 msd_dem_common_utilities.log_debug('The Query is - ');
753 msd_dem_common_utilities.log_debug(x_sql2);
754
755 msd_dem_common_utilities.log_debug ('Entering Loop');
756 LOOP
757
758 x_iterator := x_iterator + 1;
759
760 msd_dem_common_utilities.log_debug ('Iterator Value is - ' || to_char(x_iterator));
761
762 msd_dem_common_utilities.log_debug('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
763 EXECUTE IMMEDIATE x_sql USING x_iterator, x_iterator - 1, x_least_eff_date;
764 x_num_rows := SQL%ROWCOUNT;
765 msd_dem_common_utilities.log_debug ('Number of rows inserted - ' || to_char(x_num_rows));
766 x_total_num_rows := x_total_num_rows + x_num_rows;
767 msd_dem_common_utilities.log_debug ('Total Number of rows is - ' || to_char(x_total_num_rows));
768 COMMIT;
769 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
770
771 IF (x_num_rows = 0)
772 THEN
773 COMMIT;
774 msd_dem_common_utilities.log_debug ('Exiting Loop - as reached the bottom of the tree');
775 EXIT;
776 END IF;
777
778 /*
779 msd_dem_common_utilities.log_debug('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
780 EXECUTE IMMEDIATE x_sql2 USING x_iterator, x_iterator;
781 x_num_rows := SQL%ROWCOUNT;
782 msd_dem_common_utilities.log_debug ('Number of rows deleted - ' || to_char(x_num_rows));
783 COMMIT;
784 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
785
786 msd_dem_common_utilities.log_debug('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
787 EXECUTE IMMEDIATE x_sql1 USING x_iterator, x_iterator;
788 x_num_rows := SQL%ROWCOUNT;
789 msd_dem_common_utilities.log_debug ('Number of rows updated - ' || to_char(x_num_rows));
790 COMMIT;
791 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
792 */
793
794 msd_dem_common_utilities.log_debug(' ');
795
796 IF (x_iterator = 500)
797 THEN
798 COMMIT;
799 msd_dem_common_utilities.log_debug ('Exiting Loop - as reached max iterator');
800 EXIT;
801 END IF;
802
803 END LOOP;
804
805 x_sql1 := null;
806
807 /* For ERP Collection with profile option Yes, for Consume & Derive Options only */
808 IF (p_flat_file_load = 2 AND x_cpp = 2)
809 THEN
810
811 /* Update the component_code column in t_src_sales_tmpl with component_code_s */
812 x_sql1 := 'UPDATE ' || x_dem_schema || '.T_SRC_SALES_TMPL tsst '
813 || ' SET component_code = (SELECT component_code_s FROM msd_dem_model_bom_components mbc '
814 || ' WHERE mbc.component_code = tsst.component_code AND rownum < 2 ) ';
815
816 END IF;
817
818 /* For Flat File Collection with profile option Yes, for Consume & Derive Options only */
819 IF (p_flat_file_load = 1 AND x_cpp = 2)
820 THEN
821
822 /* Update the component_code column in t_src_sales_tmpl with component_code_s */
823 x_sql1 := 'UPDATE ' || x_dem_schema || '.T_SRC_SALES_TMPL tsst '
824 || ' SET component_code = (SELECT component_code_s FROM msd_dem_model_bom_components mbc '
825 || ' WHERE mbc.component_code_legacy = tsst.component_code_legacy AND rownum < 2 ) ';
826
827 END IF;
828
829 /* For Flat File Collection with profile option not set to Yes, for Consume & Derive Options only */
830 IF (p_flat_file_load = 1 AND x_cpp <> 2)
831 THEN
832
833 /* Update the component_code column in t_src_sales_tmpl with component_code_s */
834 x_sql1 := 'UPDATE ' || x_dem_schema || '.T_SRC_SALES_TMPL tsst '
835 || ' SET component_code = (SELECT component_code FROM msd_dem_model_bom_components mbc '
836 || ' WHERE mbc.component_code_legacy = tsst.component_code_legacy AND rownum < 2 ) ';
837
838 END IF;
839
840 x_num_rows := 0;
841 IF (x_sql1 IS NOT NULL)
842 THEN
843
844 msd_dem_common_utilities.log_debug('Updating component_code in T_SRC_SALES_TMPL');
845 msd_dem_common_utilities.log_debug('The Query is - ');
846 msd_dem_common_utilities.log_debug(x_sql1);
847 msd_dem_common_utilities.log_debug('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
848 EXECUTE IMMEDIATE x_sql1;
849 x_num_rows := SQL%ROWCOUNT;
850 msd_dem_common_utilities.log_debug ('Number of rows updated - ' || to_char(x_num_rows));
851 COMMIT;
852 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
853
854 END IF;
855
856 IF (p_flat_file_load = 1 ) THEN
857
858 /* Move all INVALID dependent demand records into t_src_sales_tmpl_err */ -- Bug#10374484
859 x_sql3 := 'Insert into ' || x_dem_schema || '.T_SRC_SALES_TMPL_ERR (select tsst.*, 6, sysdate, ''INVALID dependent demand record. NOT a VALID item under the BOM.'' from '
860 || x_dem_schema || '.T_SRC_SALES_TMPL tsst where tsst.component_code is null and tsst.component_code_legacy is not null) ' ;
861
862 msd_dem_common_utilities.log_debug('Inserting INVALID dependent demand records into T_SRC_SALES_TMPL_ERR');
863 msd_dem_common_utilities.log_debug('The Query is - ');
864 msd_dem_common_utilities.log_debug(x_sql3);
865 msd_dem_common_utilities.log_debug('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
866 EXECUTE IMMEDIATE x_sql3;
867 x_num_rows := SQL%ROWCOUNT;
868 msd_dem_common_utilities.log_debug ('Number of rows inserted - ' || to_char(x_num_rows));
869 COMMIT;
870 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
871
872
873 /* Delete all INVALID dependent demand records from t_src_sales_tmpl */ -- Bug#10374484
874 x_sql3 := 'Delete from ' || x_dem_schema || '.T_SRC_SALES_TMPL where component_code is null and component_code_legacy is not null' ;
875
876 msd_dem_common_utilities.log_debug('Deleting INVALID dependent demand records from T_SRC_SALES_TMPL');
877 msd_dem_common_utilities.log_debug('The Query is - ');
878 msd_dem_common_utilities.log_debug(x_sql3);
879 msd_dem_common_utilities.log_debug('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
880 EXECUTE IMMEDIATE x_sql3;
881 x_num_rows := SQL%ROWCOUNT;
882 msd_dem_common_utilities.log_debug ('Number of rows inserted - ' || to_char(x_num_rows));
883 COMMIT;
884 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
885
886 END IF;
887
888 /* CTO Performance Fix - Store the Model Bom Components Information in a table */
889
890 /* Truncate the table MSD_DEM_CTO_BOM */
891 msd_dem_common_utilities.log_debug ('Truncate table MSD_DEM_CTO_BOM...' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
892 msd_dem_query_utilities.truncate_table (errbuf, retcode, 'MSD_DEM_CTO_BOM', 2);
893 IF (retcode = -1)
894 THEN
895
896 retcode := -1;
897 errbuf := substr(SQLERRM,1,150);
898 msd_dem_common_utilities.log_message ('Error(3): msd_dem_cto.collect_model_bom_components - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
899 msd_dem_common_utilities.log_message ('Error in call to msd_dem_query_utilities.truncate_table for truncating MSD_DEM_CTO_BOM');
900 RETURN;
901
902 END IF;
903
904 -- Bug#12315455
905 -- In a weekly system, effective to date should be different for collection runs on different days of the bucket
906 x_dm_time_level := lower(msd_dem_common_utilities.dm_time_level);
907 IF x_dm_time_level = 'week' THEN
908 x_add_days := to_number(to_char(sysdate, 'D')) - 1;
909 END IF;
910
911
912 /* Populate the final bom table */
913 msd_dem_common_utilities.log_debug ('Populating table MSD_DEM_CTO_BOM');
914 msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
915 x_num_rows := 0;
916
917 -- Bug#13716090 added new columns top_ato_model_id, ato_forecast_control
918 INSERT /*+ APPEND NOLOGGING */ INTO MSD_DEM_CTO_BOM
919 (CTO_CODE, CTO_CHILD_CODE, CTO_PARENT_CODE, BASE_MODEL_CODE, PARENT_ITEM_CODE, OPTION_CODE, ORG_CODE,
920 EFFECTIVITY_DATE, DISABLE_DATE, PLNG_PCT_EXISTING, CTO_TYPE,
921 BASE_MODEL_ID, TOP_ATO_MODEL_ID, PARENT_ITEM_ID, OPTION_ID,
922 BASE_MODEL_SR_ID, PARENT_ITEM_SR_ID, OPTION_SR_ID,
923 COMPONENT_QTY, OPTIONAL_FLAG, ATO_FORECAST_CONTROL,
924 CTO_START_DATE, CTO_END_DATE)
925 SELECT
926 CTO_CODE, CTO_CHILD_CODE, CTO_PARENT_CODE, BASE_MODEL_CODE, PARENT_ITEM_CODE, OPTION_CODE, ORG_CODE,
927 EFFECTIVITY_DATE, DISABLE_DATE, PLNG_PCT_EXISTING, CTO_TYPE,
928 BASE_MODEL_ID, TOP_ATO_MODEL_ID, PARENT_ITEM_ID, OPTION_ID,
929 BASE_MODEL_SR_ID, PARENT_ITEM_SR_ID, OPTION_SR_ID,
930 COMPONENT_QTY, OPTIONAL_FLAG, ATO_FORECAST_CONTROL,
931 msd_dem_common_utilities.get_cto_effective_date(effectivity_date, 1) CTO_START_DATE,
932 msd_dem_common_utilities.get_cto_effective_date(disable_date, 2) + x_add_days CTO_END_DATE
933 FROM msd_dem_model_bom_components_v;
934
935 x_num_rows := SQL%ROWCOUNT;
936 msd_dem_common_utilities.log_debug ('Number of rows inserted - ' || to_char(x_num_rows));
937 COMMIT;
938 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
939
940 -- Bug#12315455
941 -- Retain population from date for members already in demantra
942 x_sql := 'MERGE into MSD_DEM_CTO_BOM a ' ||
943 ' using ( ' ||
944 ' select mdcb.cto_code, tecd.from_date ' ||
945 ' from MSD_DEM_CTO_BOM mdcb, '||x_dem_schema|| '.t_ep_cto tec, ' ||x_dem_schema|| '.t_ep_cto_dates tecd ' ||
946 ' where tec.t_ep_cto_code = mdcb.cto_code ' ||
947 ' and tecd.t_ep_cto_id = tec.t_ep_cto_id ' ||
948 ' and tecd.from_date < mdcb.cto_start_date ) b '||
949 ' on ( ' ||
950 ' a.cto_code = b.cto_code ) ' ||
951 ' when matched then ' ||
952 ' update set ' ||
953 ' a.cto_start_date = b.from_date';
954 msd_dem_common_utilities.log_debug ('Updating MSD_DEM_CTO_BOM to retain effective from date for members in demantra');
955 msd_dem_common_utilities.log_debug (x_sql);
956 msd_dem_common_utilities.log_debug ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
957 x_num_rows := 0;
958 execute immediate x_sql;
959 x_num_rows := SQL%ROWCOUNT;
960 msd_dem_common_utilities.log_debug ('Number of rows merged - ' || to_char(x_num_rows));
961 COMMIT;
962 msd_dem_common_utilities.log_debug('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
963
964 /* Analyze the table MSD_DEM_CTO_BOM */
965 msd_dem_common_utilities.log_debug ('Analyzing table MSD_DEM_CTO_BOM');
966 msd_dem_collect_history_data.analyze_table (errbuf, retcode, 'MSD_DEM_CTO_BOM');
967
968 msd_dem_common_utilities.log_debug ('Exiting: msd_dem_cto.collect_model_bom_components - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
969
970 retcode := 0;
971
972 EXCEPTION
973 WHEN OTHERS THEN
974 errbuf := substr(SQLERRM,1,150);
975 retcode := -1;
976
977 msd_dem_common_utilities.log_message ('Exception(1): msd_dem_cto.collect_model_bom_components - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
978 msd_dem_common_utilities.log_message (errbuf);
979 RETURN;
980
981 END COLLECT_MODEL_BOM_COMPONENTS;
982
983
984
985
986 /*
987 * This procedure deletes all data from CTO GL Tables. This should only be run by
988 * an admin user. The user must make sure that the Demantra AS is down before running
989 * the procedure.
990 * The procedure is used when the CTO related profile options have been changed which
991 * result in changes to the bom structure brought into Demantra.
992 *
993 * Parameters -
994 * p_complete_refresh - If 1, then all data from CTO GL tables are deleted
995 * - If 2, do nothing.
996 */
997 PROCEDURE PURGE_CTO_GL_DATA (
998 errbuf OUT NOCOPY VARCHAR2,
999 retcode OUT NOCOPY VARCHAR2,
1000 p_complete_refresh IN NUMBER )
1001 IS
1002
1003 x_schema VARCHAR2(100) := NULL;
1004 x_sql VARCHAR2(500) := NULL;
1005
1006 BEGIN
1007
1008 msd_dem_common_utilities.log_debug ('Entering: msd_dem_query_utilities.purge_cto_gl_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1009
1010 /* Log the parameters */
1011 msd_dem_common_utilities.log_message ('Table to be deleted - T_EP_CTO');
1012 msd_dem_common_utilities.log_message ('Table to be deleted - T_EP_CTO_BASE_MODEL');
1013 msd_dem_common_utilities.log_message ('Table to be deleted - T_EP_CTO_CHILD');
1014 msd_dem_common_utilities.log_message ('Complete Refresh - ' || to_number(p_complete_refresh));
1015
1016 IF (p_complete_refresh = 1)
1017 THEN
1018
1019 x_schema := fnd_profile.value('MSD_DEM_SCHEMA');
1020
1021 /*Deleting records from T_EP_CTO table */
1022 x_sql := 'DELETE FROM ' || x_schema || '.' || 'T_EP_CTO' || ' WHERE t_ep_cto_id <> 0 ';
1023 msd_dem_common_utilities.log_message ('The SQL is - ' || x_sql);
1024
1025 msd_dem_common_utilities.log_message ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1026 EXECUTE IMMEDIATE x_sql;
1027 COMMIT;
1028 msd_dem_common_utilities.log_message ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1029
1030
1031 /*Deleting records from T_EP_CTO_BASE_MODEL table */
1032 x_sql := 'DELETE FROM ' || x_schema || '.' || 'T_EP_CTO_BASE_MODEL' || ' WHERE t_ep_cto_base_model_id <> 0 ';
1033 msd_dem_common_utilities.log_message ('The SQL is - ' || x_sql);
1034
1035 msd_dem_common_utilities.log_message ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1036 EXECUTE IMMEDIATE x_sql;
1037 COMMIT;
1038 msd_dem_common_utilities.log_message ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1039
1040
1041 /*Deleting records from T_EP_CTO_CHILD table */
1042 x_sql := 'DELETE FROM ' || x_schema || '.' || 'T_EP_CTO_CHILD' || ' WHERE t_ep_cto_child_id <> 0 ';
1043 msd_dem_common_utilities.log_message ('The SQL is - ' || x_sql);
1044
1045 msd_dem_common_utilities.log_message ('Query Start Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1046 EXECUTE IMMEDIATE x_sql;
1047 COMMIT;
1048 msd_dem_common_utilities.log_message ('Query End Time - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1049
1050 msd_dem_common_utilities.log_message ('CTO Data deleted successfully.');
1051
1052 ELSE
1053 msd_dem_common_utilities.log_message ('Complete Refresh is not set to 1. Hence exiting normally without deleting.');
1054 END IF;
1055
1056 msd_dem_common_utilities.log_debug ('Exiting: msd_dem_cto.purge_cto_gl_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1057
1058 retcode := 0;
1059
1060 EXCEPTION
1061 WHEN OTHERS THEN
1062 errbuf := substr(SQLERRM,1,150);
1063 retcode := -1;
1064
1065 msd_dem_common_utilities.log_message ('Exception(1): msd_dem_cto.purge_cto_gl_data - ' || TO_CHAR(systimestamp, 'DD-MON-YYYY HH24:MI:SS'));
1066 msd_dem_common_utilities.log_message (errbuf);
1067 RETURN;
1068
1069 END PURGE_CTO_GL_DATA;
1070
1071
1072
1073 END MSD_DEM_CTO;