1 PACKAGE BODY ZPB_SOLVE AS
2 /* $Header: zpbsolve.plb 120.14 2007/12/05 12:51:14 mbhat ship $ */
3
4 /*****************************************************************
5 * PROPAGATE INPUT SELECTIONS *
6 * *
7 * *
8 * *
9 ****************************************************************/
10 PROCEDURE propagateInput(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
11 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE)
12
13 IS
14 fromSource NUMBER;
15 ipRec ZPB_SOLVE_INPUT_SELECTIONS%ROWTYPE;
16 isSetSrcPropFlag boolean := FALSE;
17
18 CURSOR c1 IS
19 SELECT * FROM ZPB_SOLVE_INPUT_SELECTIONS
20 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
21 BEGIN
22 SELECT SOURCE_TYPE INTO fromSource
23 FROM ZPB_SOLVE_MEMBER_DEFS
24 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
25
26 IF(fromSource <> CALCULATED_SOURCE AND fromSource <> AGGREGATED_SOURCE) THEN
27 FOR i IN propagateList.FIRST..propagateList.LAST
28 LOOP
29 IF(propagateSourceType(i) = WS_INPUT_SOURCE OR propagateSourceType(i) = INIT_WS_INPUT_SOURCE OR
30 (propagateSourceType(i) = LOADED_SOURCE AND fromSource = LOADED_SOURCE))THEN
31 isSetSrcPropFlag := TRUE;
32 --delete all i/p selections if target's source type is =INPUT
33 -- For CASES:C1-a,C1-b,C2-b
34 DELETE FROM ZPB_SOLVE_INPUT_SELECTIONS
35 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i);
36 --insert
37 ELSE
38 isSetSrcPropFlag := TRUE;
39 DELETE ZPB_SOLVE_INPUT_SELECTIONS
40 where member = propagateList(i)
41 and analysis_cycle_id = p_ac_id
42 and dimension in ( select dimension from zpb_solve_input_selections
43 where member = p_from_member
44 and analysis_cycle_id = p_ac_id);
45
46 END IF;
47 INSERT INTO ZPB_SOLVE_INPUT_SELECTIONS
48 (ANALYSIS_CYCLE_ID,
49 MEMBER,
50 MEMBER_ORDER,
51 DIMENSION,
52 HIERARCHY,
53 SELECTION_NAME,
54 SELECTION_PATH,
55 PROPAGATED_FLAG,
56 CREATED_BY,
57 CREATION_DATE,
58 LAST_UPDATED_BY,
59 LAST_UPDATE_DATE,
60 LAST_UPDATE_LOGIN)
61 SELECT ANALYSIS_CYCLE_ID,
62 propagateList(i),
63 propagateOrder(i),
64 DIMENSION,
65 HIERARCHY,
66 SELECTION_NAME,
67 SELECTION_PATH,
68 'Y',
69 fnd_global.USER_ID,
70 SYSDATE,
71 fnd_global.USER_ID,
72 SYSDATE,
73 fnd_global.LOGIN_ID
74 FROM ZPB_SOLVE_INPUT_SELECTIONS
75 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
76
77 END LOOP;
78 END IF;
79
80 --Update PROPAGATED_FLAG of source member.
81 IF isSetSrcPropFlag = TRUE THEN
82
83 UPDATE ZPB_SOLVE_INPUT_SELECTIONS
84 SET PROPAGATED_FLAG ='Y'
85 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
86 END IF;
87
88 EXCEPTION
89 WHEN OTHERS THEN
90 IF c1%ISOPEN THEN
91 CLOSE c1;
92 END IF;
93 ROLLBACK;
94
95 END propagateInput;
96
97
98
99
100 /****************************************************************
101 * COPY DIMENSION HANDLING INFO *
102 * *
103 * *
104 *****************************************************************/
105 PROCEDURE copyDimHandlingInfo(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
106 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE,
107 p_to_index IN INTEGER,
108 p_dimensionality_flag IN VARCHAR2 DEFAULT 'NO')
109 IS
110
111 dimRec ZPB_LINE_DIMENSIONALITY%ROWTYPE;
112
113 CURSOR c1 IS
114 SELECT * FROM ZPB_LINE_DIMENSIONALITY
115 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
116 BEGIN
117 --Update PROPAGATED_FLAG of source member.
118 UPDATE ZPB_LINE_DIMENSIONALITY
119 SET PROPAGATED_FLAG ='Y'
120 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
121 --Copy dim handling info.
122 FOR dimRec IN c1
123 LOOP
124 IF p_dimensionality_flag = 'RECREATE' THEN
125
126 DELETE FROM ZPB_LINE_DIMENSIONALITY
127 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(p_to_index);
128
129 INSERT INTO ZPB_LINE_DIMENSIONALITY
130 (ANALYSIS_CYCLE_ID,
131 MEMBER,
132 MEMBER_ORDER,
133 DIMENSION,
134 SUM_MEMBERS_NUMBER,
135 SUM_MEMBERS_FLAG ,
136 EXCLUDE_FROM_SOLVE_FLAG,
137 FORCE_INPUT_FLAG,
138 SUM_SELECTION_NAME,
139 SUM_SELECTION_PATH,
140 PROPAGATED_FLAG,
141 CREATED_BY,
142 CREATION_DATE,
143 LAST_UPDATED_BY,
144 LAST_UPDATE_DATE,
145 LAST_UPDATE_LOGIN)
146 SELECT
147 ANALYSIS_CYCLE_ID,
148 propagateList(p_to_index),
149 propagateOrder(p_to_index),
150 DIMENSION,
151 SUM_MEMBERS_NUMBER,
152 SUM_MEMBERS_FLAG ,
153 EXCLUDE_FROM_SOLVE_FLAG,
154 FORCE_INPUT_FLAG,
155 SUM_SELECTION_NAME,
156 SUM_SELECTION_PATH,
157 'Y',
158 fnd_global.USER_ID,
159 SYSDATE,
160 fnd_global.USER_ID,
161 SYSDATE,
162 fnd_global.LOGIN_ID
163 FROM ZPB_LINE_DIMENSIONALITY
164 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
165
166 ELSE
167 UPDATE ZPB_LINE_DIMENSIONALITY
168 SET SUM_MEMBERS_NUMBER = dimRec.SUM_MEMBERS_NUMBER,
169 SUM_MEMBERS_FLAG = dimRec.SUM_MEMBERS_FLAG,
170 EXCLUDE_FROM_SOLVE_FLAG = dimRec.EXCLUDE_FROM_SOLVE_FLAG,
171 FORCE_INPUT_FLAG = dimRec.FORCE_INPUT_FLAG,
172 SUM_SELECTION_NAME = dimRec.SUM_SELECTION_NAME,
173 SUM_SELECTION_PATH = dimRec.SUM_SELECTION_PATH,
174 PROPAGATED_FLAG = 'Y',
175 LAST_UPDATED_BY = fnd_global.USER_ID,
176 LAST_UPDATE_DATE = SYSDATE,
177 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
178 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(p_to_index) AND
179 DIMENSION =dimRec.DIMENSION;
180 END IF;
181 END LOOP;
182
183 EXCEPTION
184 WHEN OTHERS THEN
185 IF c1%ISOPEN THEN
186 CLOSE c1;
187 END IF;
188 ROLLBACK;
189
190 END copyDimHandlingInfo;
191
192
193 /****************************************************************
194 * COPY INPUT SELECTIONS *
195 * *
196 * *
197 *****************************************************************/
198
199 PROCEDURE copyInputSelections(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
200 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE,
201 p_to_index IN INTEGER,
202 p_dimensionality_flag IN VARCHAR2 DEFAULT 'NO')
203 IS
204 ipRec ZPB_SOLVE_INPUT_SELECTIONS%ROWTYPE;
205 CURSOR c1 IS
206
207
208 SELECT * FROM ZPB_SOLVE_INPUT_SELECTIONS
209 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
210 BEGIN
211 --Update PROPAGATED_FLAG of source member.
212 UPDATE ZPB_SOLVE_INPUT_SELECTIONS
213 SET PROPAGATED_FLAG ='Y'
214 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
215
216 IF p_dimensionality_flag = 'RECREATE' THEN
217
218 DELETE FROM ZPB_SOLVE_INPUT_SELECTIONS
219 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(p_to_index);
220
221
222 INSERT INTO ZPB_SOLVE_INPUT_SELECTIONS
223 (ANALYSIS_CYCLE_ID,
224 MEMBER,
225 MEMBER_ORDER,
226 DIMENSION,
227 HIERARCHY,
228 SELECTION_NAME,
229 SELECTION_PATH,
230 PROPAGATED_FLAG,
231 CREATED_BY,
232 CREATION_DATE,
233 LAST_UPDATED_BY,
234 LAST_UPDATE_DATE,
235 LAST_UPDATE_LOGIN)
236 SELECT
237 ANALYSIS_CYCLE_ID,
238 propagateList(p_to_index),
239 propagateOrder(p_to_index),
240 DIMENSION,
241 HIERARCHY,
242 SELECTION_NAME,
243 SELECTION_PATH,
244 'Y',
245 fnd_global.USER_ID,
246 SYSDATE,
247 fnd_global.USER_ID,
248 SYSDATE,
249 fnd_global.LOGIN_ID
250 FROM ZPB_SOLVE_INPUT_SELECTIONS
251 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
252 ELSE
253 FOR ipRec IN c1 LOOP
254 UPDATE ZPB_SOLVE_INPUT_SELECTIONS
255 SET
256 SELECTION_NAME = ipRec.SELECTION_NAME,
257 SELECTION_PATH = ipRec.SELECTION_PATH,
258 PROPAGATED_FLAG = 'Y',
259 LAST_UPDATED_BY = fnd_global.USER_ID,
260 LAST_UPDATE_DATE = SYSDATE,
261 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
262 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(p_to_index) AND
263 DIMENSION =ipRec.DIMENSION AND HIERARCHY = ipRec.HIERARCHY;
264 END LOOP;
265 END IF;
266
267 EXCEPTION
268 WHEN OTHERS THEN
269 IF c1%ISOPEN THEN
270 CLOSE c1;
271 END IF;
272 ROLLBACK;
273
274
275
276 END copyInputSelections;
277
278
279 PROCEDURE copyOutputSelections(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
280 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE,
281 p_to_index IN INTEGER,
282 p_dimensionality_flag IN VARCHAR2)
283 IS
284 opRec ZPB_SOLVE_OUTPUT_SELECTIONS%ROWTYPE;
285 CURSOR c1 IS
286 SELECT * FROM ZPB_SOLVE_OUTPUT_SELECTIONS
287 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
288 BEGIN
289 --Update PROPAGATED_FLAG of source member.
290 UPDATE ZPB_SOLVE_OUTPUT_SELECTIONS
291 SET PROPAGATED_FLAG ='Y'
292 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
293
294 IF p_dimensionality_flag = 'RECREATE' THEN
295
296 DELETE FROM ZPB_SOLVE_OUTPUT_SELECTIONS
297 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(p_to_index);
298
299
300 INSERT INTO ZPB_SOLVE_OUTPUT_SELECTIONS
301 (ANALYSIS_CYCLE_ID,
302 MEMBER,
303 MEMBER_ORDER,
304 DIMENSION,
305 HIERARCHY,
306 SELECTION_NAME,
307 SELECTION_PATH,
308 PROPAGATED_FLAG,
309 MATCH_INPUT_FLAG,
310 CREATED_BY,
311 CREATION_DATE,
312 LAST_UPDATED_BY,
313 LAST_UPDATE_DATE,
314 LAST_UPDATE_LOGIN)
315 SELECT
316 ANALYSIS_CYCLE_ID,
317 propagateList(p_to_index),
318 propagateOrder(p_to_index),
319 DIMENSION,
320 HIERARCHY,
321 SELECTION_NAME,
322 SELECTION_PATH,
323 'Y',
324 MATCH_INPUT_FLAG,
325 fnd_global.USER_ID,
326 SYSDATE,
327 fnd_global.USER_ID,
328 SYSDATE,
329 fnd_global.LOGIN_ID
330 FROM ZPB_SOLVE_OUTPUT_SELECTIONS
331 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
332 ELSIF p_dimensionality_flag = 'COPY' THEN
333 FOR opRec IN c1 LOOP
334 UPDATE ZPB_SOLVE_OUTPUT_SELECTIONS
335 SET
336 SELECTION_NAME = opRec.SELECTION_NAME,
337 SELECTION_PATH = opRec.SELECTION_PATH,
338 PROPAGATED_FLAG = 'Y',
339 LAST_UPDATED_BY = fnd_global.USER_ID,
340 LAST_UPDATE_DATE = SYSDATE,
341 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
342 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(p_to_index) AND
343 DIMENSION =opRec.DIMENSION AND HIERARCHY = opRec.HIERARCHY;
344 END LOOP;
345 END IF;
346
347 EXCEPTION
348 WHEN OTHERS THEN
349 IF c1%ISOPEN THEN
350 CLOSE c1;
351 END IF;
352 ROLLBACK;
353
354
355 END copyOutputSelections;
356
357
358 PROCEDURE removeCalcObjectInfo(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
359 p_to_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE)
360 IS
361 BEGIN
362 UPDATE ZPB_SOLVE_MEMBER_DEFS
363 SET CALCSTEP_PATH = NULL,
364 CALC_TYPE = NULL,
365 CALC_DESCRIPTION = NULL,
366 CALC_PARAMETERS = NULL,
367 MODEL_EQUATION = NULL,
368 LAST_UPDATED_BY = fnd_global.USER_ID,
369 LAST_UPDATE_DATE = SYSDATE,
370 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
371 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_to_member;
372 END removeCalcObjectInfo;
373
374 PROCEDURE deleteInializedInputSettings(p_ac_id IN ZPB_DATA_INITIALIZATION_DEFS.ANALYSIS_CYCLE_ID%TYPE,
375 p_to_member IN ZPB_DATA_INITIALIZATION_DEFS.MEMBER%TYPE)
376 IS
377 BEGIN
378 DELETE ZPB_DATA_INITIALIZATION_DEFS
379 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_to_member;
380
381
382 DELETE ZPB_COPY_DIM_MEMBERS
383 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND LINE_MEMBER_ID = p_to_member;
384 END deleteInializedInputSettings;
385
386
387 PROCEDURE copyInializedInputSettings(p_ac_id IN ZPB_DATA_INITIALIZATION_DEFS.ANALYSIS_CYCLE_ID%TYPE,
388 p_from_member IN ZPB_DATA_INITIALIZATION_DEFS.MEMBER%TYPE,
389 p_to_member IN ZPB_DATA_INITIALIZATION_DEFS.MEMBER%TYPE)
390 IS
391
392 l_source_query_name ZPB_DATA_INITIALIZATION_DEFS.SOURCE_QUERY_NAME%TYPE;
393 l_target_query_name ZPB_DATA_INITIALIZATION_DEFS.TARGET_QUERY_NAME%TYPE;
394
395 CURSOR src_trg_qry_names_cur(p_ac_id IN ZPB_DATA_INITIALIZATION_DEFS.ANALYSIS_CYCLE_ID%TYPE,
396 p_from_member IN ZPB_DATA_INITIALIZATION_DEFS.MEMBER%TYPE) IS
397 SELECT SOURCE_QUERY_NAME,TARGET_QUERY_NAME
398 FROM ZPB_DATA_INITIALIZATION_DEFS
399 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
400
401 BEGIN
402 /* Bug#5092815, Commented for because we copy the initialize settings
403 from source line item.
404 OPEN src_trg_qry_names_cur(p_ac_id,p_from_member);
405 FETCH src_trg_qry_names_cur INTO l_source_query_name,l_target_query_name;
406 CLOSE src_trg_qry_names_cur;
407
408 IF(l_source_query_name is NOT NULL) THEN
409 l_source_query_name := 'CD_SOURCE_'||p_to_member;
410 END IF;
411
412 IF(l_target_query_name is NOT NULL) THEN
413 l_target_query_name := 'CD_TARGET_'||p_to_member;
414 END IF;
415 */
416
417 --INSERT into ZPB_DATA_INITIALIZATION_DEFS table.
418 INSERT INTO ZPB_DATA_INITIALIZATION_DEFS
419 (ANALYSIS_CYCLE_ID,
420 MEMBER,
421 SOURCE_VIEW,
422 LAG_TIME_PERIODS,
423 LAG_TIME_LEVEL,
424 CHANGE_NUMBER,
425 PERCENTAGE_FLAG,
426 QUERY_PATH,
427 SOURCE_QUERY_NAME,
428 TARGET_QUERY_NAME,
429 CREATED_BY,
430 CREATION_DATE,
431 LAST_UPDATED_BY,
432 LAST_UPDATE_DATE,
433 LAST_UPDATE_LOGIN,
434 PROPAGATED_FLAG)
435 SELECT ANALYSIS_CYCLE_ID,
436 p_to_member,
437 SOURCE_VIEW,
438 LAG_TIME_PERIODS,
439 LAG_TIME_LEVEL,
440 CHANGE_NUMBER,
441 PERCENTAGE_FLAG,
442 QUERY_PATH,
443 source_query_name,
444 target_query_name,
445 fnd_global.USER_ID,
446 SYSDATE,
447 fnd_global.USER_ID,
448 SYSDATE,
449 fnd_global.LOGIN_ID,
450 PROPAGATED_FLAG
451 FROM ZPB_DATA_INITIALIZATION_DEFS
452 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
453
454 INSERT INTO zpb_copy_dim_members
455 (DIM,
456 ANALYSIS_CYCLE_ID,
457 SOURCE_NUM_MEMBERS,
458 TARGET_NUM_MEMBERS,
459 CREATED_BY,
460 CREATION_DATE,
461 LAST_UPDATED_BY,
462 LAST_UPDATE_DATE,
463 LAST_UPDATE_LOGIN,
464 SAME_SELECTION,
465 LINE_MEMBER_ID)
466 SELECT DIM,
467 ANALYSIS_CYCLE_ID,
468 SOURCE_NUM_MEMBERS,
469 TARGET_NUM_MEMBERS,
470 fnd_global.USER_ID,
471 SYSDATE,
472 fnd_global.USER_ID,
473 SYSDATE,
474 fnd_global.LOGIN_ID,
475 SAME_SELECTION,
476 p_to_member
477 FROM zpb_copy_dim_members
478 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND LINE_MEMBER_ID = p_from_member;
479
480 END copyInializedInputSettings;
481
482
483
484 /***********************************************************************
485 * CHECK MATCH_INPUT_FLAG *
486 * If ZPB_SOLVE_OUTPUT_SELECTIONS.MATCH_INPUT_FLAG = 'Y' for *
487 * Loaded,i/p or worksheet i/p line member *
488 * then before changing the source type to calc or hier total *
489 * copy the input selection to output selection and set *
490 * MATCH_INPUT_FLAG to 'N' *
491 ***********************************************************************/
492
493 PROCEDURE checkMatchInputToOutputFlag(p_ac_id IN ZPB_SOLVE_OUTPUT_SELECTIONS.ANALYSIS_CYCLE_ID%TYPE,
494 p_from_member IN ZPB_SOLVE_OUTPUT_SELECTIONS.MEMBER%TYPE)
495 IS
496 l_selectionPath ZPB_SOLVE_INPUT_SELECTIONS.SELECTION_PATH%TYPE;
497 l_selectionName ZPB_SOLVE_INPUT_SELECTIONS.SELECTION_NAME%TYPE;
498
499 CURSOR c1 IS
500 SELECT MEMBER_ORDER,DIMENSION,HIERARCHY,
501 SELECTION_PATH,SELECTION_NAME,MATCH_INPUT_FLAG
502 FROM ZPB_SOLVE_OUTPUT_SELECTIONS
503 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member
504 FOR UPDATE;
505
506 CURSOR c2(p_ac_id ZPB_SOLVE_INPUT_SELECTIONS.ANALYSIS_CYCLE_ID%TYPE,
507 p_from_member ZPB_SOLVE_INPUT_SELECTIONS.MEMBER%TYPE,
508 p_member_order ZPB_SOLVE_INPUT_SELECTIONS.MEMBER_ORDER%TYPE,
509 p_dimension ZPB_SOLVE_INPUT_SELECTIONS.DIMENSION%TYPE,
510 p_hierarchy ZPB_SOLVE_INPUT_SELECTIONS.HIERARCHY%TYPE)IS
511 SELECT SELECTION_PATH,SELECTION_NAME
512 FROM ZPB_SOLVE_INPUT_SELECTIONS
513 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member AND
514 MEMBER_ORDER = p_member_order AND DIMENSION = p_dimension AND
515 HIERARCHY = p_hierarchy;
516 BEGIN
517 FOR opRec IN c1 LOOP
518 IF opRec.MATCH_INPUT_FLAG = 'Y' THEN
519
520 OPEN c2(p_ac_id,p_from_member,opRec.MEMBER_ORDER,opRec.DIMENSION,opRec.HIERARCHY);
521 FETCH c2 INTO l_selectionPath,l_selectionName;
522 CLOSE c2;
523
524 UPDATE ZPB_SOLVE_OUTPUT_SELECTIONS
525 SET SELECTION_PATH = l_selectionPath,
526 SELECTION_NAME = l_selectionName,
527 MATCH_INPUT_FLAG = 'N'
528 WHERE CURRENT OF c1;
529
530 END IF;
531 END LOOP;
532
533 EXCEPTION
534 WHEN OTHERS THEN
535 IF c1%ISOPEN THEN
536 CLOSE c1;
537 END IF;
538 IF c2%ISOPEN THEN
539 CLOSE c2;
540 END IF;
541 ROLLBACK;
542 END;
543
544
545
546
547 /****************************************************************
548 * PROPAGATE SOURCE TYPE&(DIM INFO or I/P SELECTIONS *
549 * *
550 * *
551 *****************************************************************/
552 PROCEDURE propagateCalc(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
553 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE,
554 p_prop_dimhandling IN INTEGER,
555 p_prop_input IN INTEGER,
556 p_prop_output IN INTEGER)
557
558
559 IS
560 fromSource ZPB_SOLVE_MEMBER_DEFS.SOURCE_TYPE%TYPE;
561 updateSolve BOOLEAN;
562 l_calcDesc ZPB_SOLVE_MEMBER_DEFS.CALC_DESCRIPTION%TYPE;
563 l_calcType ZPB_SOLVE_MEMBER_DEFS.CALC_TYPE%TYPE;
564 l_calcParams ZPB_SOLVE_MEMBER_DEFS.CALC_PARAMETERS%TYPE;
565 l_modelEquation ZPB_SOLVE_MEMBER_DEFS.MODEL_EQUATION%TYPE;
566 BEGIN
567 SELECT SOURCE_TYPE INTO fromSource
568 FROM ZPB_SOLVE_MEMBER_DEFS
569 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
570
571 --Check whether Source Type of Target Member needs updation
572 --Bug#5092815, changed into bulk operation
573 FORALL i IN propagateList.FIRST..propagateList.LAST
574 UPDATE ZPB_SOLVE_MEMBER_DEFS
575 SET SOURCE_TYPE = fromSource,
576 LAST_UPDATED_BY = fnd_global.USER_ID,
577 LAST_UPDATE_DATE = SYSDATE,
578 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
579 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i);
580
581 --Bug#5092815, mark the source line as propagated, so that
582 --the same settings can be copied to target line
583 IF fromsource=INIT_WS_INPUT_SOURCE THEN
584
585 UPDATE ZPB_DATA_INITIALIZATION_DEFS
586 SET propagated_flag='Y'
587 WHERE ANALYSIS_CYCLE_ID=p_ac_id
588 AND MEMBER=p_from_member;
589
590 END IF;
591
592 FOR i IN propagateList.FIRST..propagateList.LAST
593 LOOP
594 UPDATE ZPB_SOLVE_MEMBER_DEFS
595 SET
596 SOURCE_TYPE = fromSource,
597 LAST_UPDATED_BY = fnd_global.USER_ID,
598 LAST_UPDATE_DATE = SYSDATE,
599 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
600 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i);
601 END LOOP;
602
603 FOR i IN propagateList.FIRST..propagateList.LAST
604 LOOP
605
606 IF fromSource = LOADED_SOURCE THEN
607 --For CASE:D1-a,D1-b,D1-c
608 IF p_prop_dimhandling = iTrueValue THEN
609 copyDimHandlingInfo(p_ac_id,p_from_member,i,'RECREATE');
610 END IF;
611 IF p_prop_input = iTrueValue THEN
612 copyInputSelections(p_ac_id,p_from_member,i,'RECREATE');
613 END IF;
614
615 --Patch B
616 IF p_prop_output = iTrueValue THEN
617 copyOutputSelections(p_ac_id,p_from_member,i,'RECREATE');
618
619 ELSE -- delete the o/p selections for non hier dims
620 deleteOutputSelections(p_ac_id,i);
621 END IF;
622
623
624
625 --Remove intialized settings if the source member's source type is INIT_WS_INPUT_SOURCE
626 IF propagateSourceType(i) = INIT_WS_INPUT_SOURCE THEN
627 deleteInializedInputSettings(p_ac_id,propagateList(i));
628 END IF;
629 --Remove CalcStep Obj info if the source member's source type is CALCULATED_SOURCE
630
631 IF propagateSourceType(i) = CALCULATED_SOURCE THEN
632 removeCalcObjectInfo(p_ac_id,propagateList(i));
633 END IF;
634 ELSIF fromSource = WS_INPUT_SOURCE THEN
635 IF propagateSourceType(i) = LOADED_SOURCE THEN
636 DELETE ZPB_LINE_DIMENSIONALITY WHERE
637 ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER=propagateList(i);
638 END IF;
639 IF p_prop_input = iTrueValue THEN
640 copyInputSelections(p_ac_id,p_from_member,i,'RECREATE');
641 END IF;
642
643 --Patch B
644
645 IF p_prop_output = iTrueValue THEN
646 copyOutputSelections(p_ac_id,p_from_member,i,'RECREATE');
647
648 ELSE -- delete the o/p selections for non hier dims
649 deleteOutputSelections(p_ac_id,i);
650 END IF;
651
652
653 --Remove intialized settings if the source member's source type is INIT_WS_INPUT_SOURCE
654 IF propagateSourceType(i) = INIT_WS_INPUT_SOURCE THEN
655
656 deleteInializedInputSettings(p_ac_id,propagateList(i));
657 END IF;
658 --Remove CalcStep Obj info if the source member's source type is CALCULATED_SOURCE
659 IF propagateSourceType(i) = CALCULATED_SOURCE THEN
660 removeCalcObjectInfo(p_ac_id,propagateList(i));
661 END IF;
662
663 ELSIF fromSource = INIT_WS_INPUT_SOURCE THEN
664 IF propagateSourceType(i) = LOADED_SOURCE THEN
665 DELETE ZPB_LINE_DIMENSIONALITY WHERE
666 ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER=propagateList(i);
667 END IF;
668 IF p_prop_input = iTrueValue THEN
669 copyInputSelections(p_ac_id,p_from_member,i,'RECREATE');
670 END IF;
671 IF propagateSourceType(i) = INIT_WS_INPUT_SOURCE THEN
672 deleteInializedInputSettings(p_ac_id,propagateList(i));
673 END IF;
674
675 --Patch B
676 IF p_prop_output = iTrueValue THEN
677 copyOutputSelections(p_ac_id,p_from_member,i,'RECREATE');
678
679 ELSE -- delete the o/p selections for non hier dims
680 deleteOutputSelections(p_ac_id,i);
681 END IF;
682
683 --Remove CalcStep Obj info if the source member's source type is CALCULATED_SOURCE
684 IF propagateSourceType(i) = CALCULATED_SOURCE THEN
685 removeCalcObjectInfo(p_ac_id,propagateList(i));
686 END IF;
687 --For all source types of source member copy the initilized input settings from source member.
688 copyInializedInputSettings(p_ac_id,p_from_member,propagateList(i));
689
690 ELSIF(fromSource = CALCULATED_SOURCE OR fromSource = AGGREGATED_SOURCE )THEN
691
692 IF(propagateSourceType(i) = LOADED_SOURCE) THEN
693 --For CASES:A3-a
694 checkMatchInputToOutputFlag(p_ac_id,propagateList(i));
695
696 DELETE ZPB_LINE_DIMENSIONALITY WHERE
697 ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER=propagateList(i);
698
699 DELETE ZPB_SOLVE_INPUT_SELECTIONS WHERE
700 ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER=propagateList(i);
701
702 ELSIF(propagateSourceType(i) = WS_INPUT_SOURCE) THEN
703 --For CASES:A3-b
704 checkMatchInputToOutputFlag(p_ac_id,propagateList(i));
705
706 DELETE ZPB_SOLVE_INPUT_SELECTIONS WHERE
707 ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER=propagateList(i);
708
709 ELSIF(propagateSourceType(i) = INIT_WS_INPUT_SOURCE) THEN
710 --For CASES:A3-b
711 checkMatchInputToOutputFlag(p_ac_id,propagateList(i));
712
713 DELETE ZPB_SOLVE_INPUT_SELECTIONS WHERE
714 ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER=propagateList(i);
715
716 deleteInializedInputSettings(p_ac_id,propagateList(i));
717 ELSIF(propagateSourceType(i) = CALCULATED_SOURCE AND fromSource = AGGREGATED_SOURCE )THEN
718 removeCalcObjectInfo(p_ac_id,propagateList(i));
719 END IF;
720
721 --Patch B
722 IF p_prop_output = iTrueValue THEN
723 copyOutputSelections(p_ac_id,p_from_member,i,'RECREATE');
724 ELSIF fromSource = AGGREGATED_SOURCE THEN -- delete the o/p selections for non hier dims
725 deleteOutputSelections(p_ac_id,i);
726 /*IF propagateSourceType(i) <> CALCULATED_SOURCE THEN
727 copyOutputSelections(p_ac_id,p_from_member,i,'COPY');
728 ELSIF propagateSourceType(i) = CALCULATED_SOURCE THEN
729 copyOutputSelections(p_ac_id,p_from_member,i,'RECREATE');
730 END IF;*/
731 END IF;
732
733 --Copy Calc related columns
734 IF(fromSource = CALCULATED_SOURCE) THEN
735
736 SELECT CALC_DESCRIPTION,CALC_TYPE,CALC_PARAMETERS,MODEL_EQUATION
737 INTO l_calcDesc,l_calcType,l_calcParams,l_modelEquation
738
739 FROM ZPB_SOLVE_MEMBER_DEFS
740 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
741
742 UPDATE ZPB_SOLVE_MEMBER_DEFS
743 SET CALCSTEP_PATH = propagateList(i),
744 CALC_TYPE = l_calcType,
745 CALC_DESCRIPTION = l_calcDesc,
746 CALC_PARAMETERS = l_calcParams,
747 MODEL_EQUATION = l_modelEquation,
748 LAST_UPDATED_BY = fnd_global.USER_ID,
749 LAST_UPDATE_DATE = SYSDATE,
750 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
751 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i);
752
753 END IF;
754
755 END IF;
756 END LOOP;
757 END propagateCalc;
758
759 /****************************************************************
760 * PROPAGATE ALLOCATIONS *
761 * *
762 * *
763 *****************************************************************/
764
765 PROCEDURE propagateAlloc(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
766
767 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE)
768
769 IS
770 BEGIN
771 --delete existing rows
772 FORALL i IN propagateList.FIRST..propagateList.LAST
773 DELETE FROM ZPB_SOLVE_ALLOCATION_DEFS
774 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i);
775 --add new rows
776 FORALL i IN propagateList.FIRST..propagateList.LAST
777 INSERT INTO ZPB_SOLVE_ALLOCATION_DEFS
778 (ANALYSIS_CYCLE_ID,
779 MEMBER,
780 MEMBER_ORDER,
781 RULE_NAME,
782 METHOD,
783 EVALUATION_OPTION,
784 ROUND_DECIMALS,
785 ROUND_ENABLED,
786 BASIS,
787 QUALIFIER,
788 CREATED_BY,
789 CREATION_DATE,
790 LAST_UPDATED_BY,
791 LAST_UPDATE_DATE,
792 LAST_UPDATE_LOGIN)
793 SELECT ANALYSIS_CYCLE_ID, propagateList(i), propagateOrder(i), RULE_NAME,
794 METHOD, EVALUATION_OPTION, ROUND_DECIMALS, ROUND_ENABLED,
795 BASIS, QUALIFIER, fnd_global.USER_ID, SYSDATE,
796
797 fnd_global.USER_ID, SYSDATE, fnd_global.LOGIN_ID
798 FROM ZPB_SOLVE_ALLOCATION_DEFS
799 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
800 END propagateAlloc;
801
802
803 /****************************************************************
804 * PROPAGATE OUTPUT SELECTIONS *
805 * *
806 * *
807 *****************************************************************/
808
809 PROCEDURE propagateOutput(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
810 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE)
811
812 IS
813 opRec ZPB_SOLVE_OUTPUT_SELECTIONS%ROWTYPE;
814
815 CURSOR c1 IS
816 SELECT * FROM ZPB_SOLVE_OUTPUT_SELECTIONS
817 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
818
819 fromSource ZPB_SOLVE_MEMBER_DEFS.SOURCE_TYPE%TYPE;
820 BEGIN
821 SELECT SOURCE_TYPE INTO fromSource
822 FROM ZPB_SOLVE_MEMBER_DEFS
823 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
824
825 --For all cases update PROPAGATED_FLAG of source member.
826 UPDATE ZPB_SOLVE_OUTPUT_SELECTIONS
827 SET PROPAGATED_FLAG ='Y'
828 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
829
830 FOR i IN propagateList.FIRST..propagateList.LAST LOOP
831
832 --IF propagateList(i) = CALCULATED_SOURCE OR propagateList(i) = AGGREGATED_SOURCE THEN
833 IF propagateSourceType(i) = CALCULATED_SOURCE THEN
834 IF fromSource = CALCULATED_SOURCE THEN
835 DELETE ZPB_SOLVE_OUTPUT_SELECTIONS
836 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i);
837 ELSE
838 DELETE ZPB_SOLVE_OUTPUT_SELECTIONS
839 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i) AND
840 HIERARCHY <> 'NONE' ;
841 END IF ;
842 FOR opRec IN c1 LOOP
843 INSERT INTO ZPB_SOLVE_OUTPUT_SELECTIONS
844 (ANALYSIS_CYCLE_ID,
845 MEMBER,
846 MEMBER_ORDER,
847 DIMENSION,
848 HIERARCHY,
849 SELECTION_NAME,
850 SELECTION_PATH,
851 PROPAGATED_FLAG,
852 MATCH_INPUT_FLAG,
853 CREATED_BY,
854 CREATION_DATE,
855 LAST_UPDATED_BY,
856 LAST_UPDATE_DATE,
857 LAST_UPDATE_LOGIN)
858 VALUES(opRec.ANALYSIS_CYCLE_ID,
859 propagateList(i),
860 propagateOrder(i),
861 opRec.DIMENSION,
862 opRec.HIERARCHY,
863 opRec.SELECTION_NAME,
864 opRec.SELECTION_PATH,
865 'Y',
866 opRec.MATCH_INPUT_FLAG,
867 fnd_global.USER_ID,
868 SYSDATE,
869 fnd_global.USER_ID,
870 SYSDATE,
871 fnd_global.LOGIN_ID);
872 END LOOP;
873
874
875
876 -- ELSIF ( fromSource = CALCULATED_SOURCE OR fromSource = AGGREGATED_SOURCE ) AND
877 -- (propagateList(i) <> CALCULATED_SOURCE AND propagateList(i) <> AGGREGATED_SOURCE)THEN
878 ELSIF fromSource = CALCULATED_SOURCE AND propagateSourceType(i) <> CALCULATED_SOURCE THEN
879
880 FOR opRec IN c1 LOOP
881 DELETE ZPB_SOLVE_OUTPUT_SELECTIONS
882 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND
883 DIMENSION in (select dimension from ZPB_SOLVE_OUTPUT_SELECTIONS
884 where member = opRec.member
885 and dimension = opRec.dimension
886 and analysis_cycle_id = p_ac_id)
887 and member = propagateList(i);
888 END LOOP;
889 FOR opRec IN c1 LOOP
890 if opRec.hierarchy <> 'NONE' then
891 INSERT INTO ZPB_SOLVE_OUTPUT_SELECTIONS
892 (ANALYSIS_CYCLE_ID,
893 MEMBER,
894 MEMBER_ORDER,
895 DIMENSION,
896 HIERARCHY,
897 SELECTION_NAME,
898 SELECTION_PATH,
899 PROPAGATED_FLAG,
900 MATCH_INPUT_FLAG,
901 CREATED_BY,
902 CREATION_DATE,
903 LAST_UPDATED_BY,
904 LAST_UPDATE_DATE,
905 LAST_UPDATE_LOGIN)
906 VALUES(opRec.ANALYSIS_CYCLE_ID,
907 propagateList(i),
908 propagateOrder(i),
909 opRec.DIMENSION,
910 opRec.HIERARCHY,
911 opRec.SELECTION_NAME,
912 opRec.SELECTION_PATH,
913 'Y',
914 opRec.MATCH_INPUT_FLAG,
915 fnd_global.USER_ID,
916 SYSDATE,
917 fnd_global.USER_ID,
918 SYSDATE,
919 fnd_global.LOGIN_ID);
920 end if;
921 END LOOP;
922
923
924
925 ELSE
926 DELETE ZPB_SOLVE_OUTPUT_SELECTIONS
927 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND
928 MEMBER = propagateList(i) ;
929
930 FOR opRec IN c1 LOOP
931 INSERT INTO ZPB_SOLVE_OUTPUT_SELECTIONS
932 (ANALYSIS_CYCLE_ID,
933 MEMBER,
934 MEMBER_ORDER,
935 DIMENSION,
936 HIERARCHY,
937 SELECTION_NAME,
938 SELECTION_PATH,
939 PROPAGATED_FLAG,
940 MATCH_INPUT_FLAG,
941 CREATED_BY,
942 CREATION_DATE,
943 LAST_UPDATED_BY,
944 LAST_UPDATE_DATE,
945 LAST_UPDATE_LOGIN)
946 VALUES(opRec.ANALYSIS_CYCLE_ID,
947 propagateList(i),
948 propagateOrder(i),
949 opRec.DIMENSION,
950 opRec.HIERARCHY,
951 opRec.SELECTION_NAME,
952 opRec.SELECTION_PATH,
953 'Y',
954 opRec.MATCH_INPUT_FLAG,
955 fnd_global.USER_ID,
956 SYSDATE,
957 fnd_global.USER_ID,
958 SYSDATE,
959 fnd_global.LOGIN_ID);
960 END LOOP;
961
962 End if;
963
964
965 END LOOP;
966
967
968 EXCEPTION
969 WHEN OTHERS THEN
970 IF c1%ISOPEN THEN
971 CLOSE c1;
972 END IF;
973 ROLLBACK;
974 END propagateOutput;
975
976 /****************************************************************
977 * PROPAGATE DIMENSION INFO *
978 * *
979 * *
980
981 *****************************************************************/
982
983 PROCEDURE propagateDimhandling(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
984 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE)
985 IS
986 fromSource NUMBER;
987 dimRec ZPB_LINE_DIMENSIONALITY%ROWTYPE;
988 isSetSrcPropFlag boolean := FALSE;
989 CURSOR c1 IS
990 SELECT * FROM ZPB_LINE_DIMENSIONALITY
991 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
992 BEGIN
993 SELECT SOURCE_TYPE INTO fromSource
994
995 FROM ZPB_SOLVE_MEMBER_DEFS
996 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
997
998 IF fromSource = LOADED_SOURCE THEN
999 FOR i IN propagateList.FIRST..propagateList.LAST
1000 LOOP
1001 IF propagateSourceType(i) = LOADED_SOURCE THEN
1002 isSetSrcPropFlag := TRUE;
1003
1004 DELETE ZPB_LINE_DIMENSIONALITY
1005 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(i);
1006 --For CASE: B1-a
1007 FOR dimRec IN c1 LOOP
1008
1009 INSERT INTO ZPB_LINE_DIMENSIONALITY
1010 (ANALYSIS_CYCLE_ID,
1011 MEMBER,
1012 MEMBER_ORDER,
1013 DIMENSION,
1014 SUM_MEMBERS_NUMBER,
1015 SUM_MEMBERS_FLAG ,
1016 EXCLUDE_FROM_SOLVE_FLAG,
1017 FORCE_INPUT_FLAG,
1018 SUM_SELECTION_NAME,
1019 SUM_SELECTION_PATH,
1020 PROPAGATED_FLAG,
1021 CREATED_BY,
1022 CREATION_DATE,
1023 LAST_UPDATED_BY,
1024 LAST_UPDATE_DATE,
1025 LAST_UPDATE_LOGIN)
1026 VALUES (dimRec.ANALYSIS_CYCLE_ID,
1027 propagateList(i),
1028 propagateOrder(i),
1029 dimRec.DIMENSION,
1030 dimRec.SUM_MEMBERS_NUMBER,
1031 dimRec.SUM_MEMBERS_FLAG ,
1032 dimRec.EXCLUDE_FROM_SOLVE_FLAG,
1033 dimRec.FORCE_INPUT_FLAG,
1034 dimRec.SUM_SELECTION_NAME,
1035 dimRec.SUM_SELECTION_PATH,
1036 'Y',
1037 fnd_global.USER_ID,
1038 SYSDATE,
1039 fnd_global.USER_ID,
1040 SYSDATE,
1041 fnd_global.LOGIN_ID);
1042 END LOOP;
1043 END IF;
1044 END LOOP;
1045 END IF;
1046 --Update PROPAGATED_FLAG of source member.
1047 IF isSetSrcPropFlag = TRUE THEN
1048
1049 UPDATE ZPB_LINE_DIMENSIONALITY
1050 SET PROPAGATED_FLAG ='Y'
1051 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
1052 END IF;
1053
1054 EXCEPTION
1055 WHEN OTHERS THEN
1056 IF c1%ISOPEN THEN
1057 CLOSE c1;
1058 END IF;
1059 ROLLBACK;
1060 END propagateDimhandling;
1061
1062
1063
1064 /****************************************************************
1065 * PROPAGATE SETTINGS *
1066 * *
1067 * *
1068 * *
1069 ****************************************************************/
1070
1071 PROCEDURE propagateSolve (
1072 p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
1073 p_from_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE,
1074 p_view_dim_name IN VARCHAR2,
1075 p_view_member_column IN VARCHAR2,
1076 p_view_short_lbl_column IN VARCHAR2,
1077 p_prop_calc IN INTEGER, -- source flag
1078 p_prop_alloc IN INTEGER,
1079 p_prop_input IN INTEGER,
1080 p_prop_output IN INTEGER, -- o/p flag
1081 p_prop_dimhandling IN INTEGER)
1082 IS
1083 tableselect varchar(5000);
1084 fromSource NUMBER;
1085
1086 c4 ref_cursor;
1087 BEGIN
1088 --get all the members that have the propagate flag set
1089
1090 tableselect := 'Select member, member_order, memberlookup.';
1091 tableselect := tableselect || p_view_short_lbl_column || ' as MemberName,';
1092 tableselect := tableselect || ' SOURCE_TYPE';
1093 tableselect := tableselect || ' FROM ZPB_SOLVE_MEMBER_DEFS defs, ';
1094 tableselect := tableselect || p_view_dim_name || ' memberlookup';
1095 tableselect := tableselect || ' WHERE defs.ANALYSIS_CYCLE_ID = ' || p_ac_id;
1096 tableselect := tableselect || ' AND defs.PROPAGATE_TARGET = ' || iTrueValue;
1097 tableselect := tableselect || ' AND defs.member = memberlookup.' || p_view_member_column;
1098
1099 OPEN c4 FOR tableSelect;
1100 Fetch c4 BULK COLLECT into propagateList, propagateOrder, propagateName, propagateSourceType;
1101
1102 SELECT SOURCE_TYPE INTO fromSource
1103
1104 FROM ZPB_SOLVE_MEMBER_DEFS
1105 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = p_from_member;
1106
1107 if p_prop_calc = iTrueValue THEN
1108 propagateCalc(p_ac_id, p_from_member,p_prop_dimhandling,p_prop_input,p_prop_output);
1109 END IF;
1110 if p_prop_alloc = iTrueValue THEN
1111 propagateAlloc(p_ac_id, p_from_member);
1112 END IF;
1113 if p_prop_input = iTrueValue and p_prop_calc = iFalseValue THEN
1114 propagateInput(p_ac_id, p_from_member);
1115 END IF;
1116 if p_prop_output = iTrueValue and p_prop_calc = iFalseValue THEN
1117 propagateOutput(p_ac_id, p_from_member);
1118 END IF;
1119 if p_prop_dimhandling = iTrueValue and p_prop_calc = iFalseValue THEN
1120 propagateDimhandling(p_ac_id, p_from_member);
1121 END IF;
1122 --reset propagate flag
1123 UPDATE ZPB_SOLVE_MEMBER_DEFS
1124 SET PROPAGATE_TARGET = iFalseValue,
1125 LAST_UPDATED_BY = fnd_global.USER_ID,
1126 LAST_UPDATE_DATE = SYSDATE,
1127 LAST_UPDATE_LOGIN = fnd_global.LOGIN_ID
1128 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND PROPAGATE_TARGET = iTrueValue;
1129 END propagateSolve;
1130
1131
1132
1133 FUNCTION getDimSettingMeaning(p_lookup_code IN FND_LOOKUP_VALUES_VL.LOOKUP_CODE%TYPE)
1134 RETURN VARCHAR2 IS
1135 ret_meaning FND_LOOKUP_VALUES_VL.MEANING%TYPE;
1136 BEGIN
1137 SELECT MEANING||',' INTO ret_meaning
1138 FROM FND_LOOKUP_VALUES_VL
1139 WHERE LOOKUP_TYPE = 'ZPB_SOLVE_DIMENSIONLIST_SELECT' AND LOOKUP_CODE = p_lookup_code;
1140 RETURN ret_meaning;
1141 END getDimSettingMeaning;
1142
1143 PROCEDURE updateCleanup(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
1144 p_line_member IN ZPB_SOLVE_MEMBER_DEFS.MEMBER%TYPE,
1145 p_src_type IN ZPB_SOLVE_MEMBER_DEFS.SOURCE_TYPE%TYPE)
1146 IS
1147
1148 BEGIN
1149 IF p_src_type <> LOADED_SOURCE THEN
1150 delete from zpb_line_dimensionality where analysis_cycle_id = p_ac_id and member = p_line_member;
1151 END IF;
1152 IF p_src_type = CALCULATED_SOURCE OR p_src_type = AGGREGATED_SOURCE THEN
1153 delete from zpb_solve_input_selections where analysis_cycle_id = p_ac_id and member = p_line_member;
1154 update ZPB_SOLVE_OUTPUT_SELECTIONS
1155 set MATCH_INPUT_FLAG = 'N'
1156 where analysis_cycle_id = p_ac_id and member = p_line_member;
1157 END IF;
1158 IF p_src_type <> CALCULATED_SOURCE THEN
1159 delete from zpb_solve_output_selections where analysis_cycle_id = p_ac_id and member = p_line_member
1160 AND hierarchy = 'NONE';
1161 END IF;
1162 IF p_src_type <> INIT_WS_INPUT_SOURCE THEN
1163 -- for bug 5001437
1164 delete from zpb_status_sql
1165 where query_path in (select query_path||'/'||target_query_name
1166 from zpb_data_initialization_defs
1167 where analysis_cycle_id = p_ac_id
1168 and member = p_line_member);
1169
1170 delete from zpb_status_sql
1171 where query_path in (select query_path||'/'||source_query_name
1172 from zpb_data_initialization_defs
1173 where analysis_cycle_id = p_ac_id
1174 and member = p_line_member);
1175
1176 delete from ZPB_DATA_INITIALIZATION_DEFS where analysis_cycle_id = p_ac_id and member = p_line_member;
1177 delete from ZPB_COPY_DIM_MEMBERS where analysis_cycle_id = p_ac_id and line_member_id = p_line_member;
1178 END IF;
1179 IF p_src_type <> CALCULATED_SOURCE then
1180 removeCalcObjectInfo(p_ac_id,p_line_member);
1181 END IF;
1182 END updateCleanup;
1183
1184
1185 PROCEDURE deleteOutputSelections(p_ac_id IN ZPB_SOLVE_MEMBER_DEFS.ANALYSIS_CYCLE_ID%TYPE,
1186 p_targetIndex IN INTEGER )
1187 IS
1188 BEGIN
1189 DELETE ZPB_SOLVE_OUTPUT_SELECTIONS
1190 WHERE ANALYSIS_CYCLE_ID = p_ac_id AND MEMBER = propagateList(p_targetIndex)
1191 AND HIERARCHY = 'NONE';
1192
1193 END deleteOutputSelections;
1194
1195 PROCEDURE insertDefaultOutput(p_ac_id IN ZPB_SOLVE_OUTPUT_SELECTIONS.ANALYSIS_CYCLE_ID%TYPE,
1196 p_line_member IN ZPB_SOLVE_OUTPUT_SELECTIONS.MEMBER%TYPE,
1197 p_memberOrder IN ZPB_SOLVE_OUTPUT_SELECTIONS.MEMBER_ORDER%TYPE,
1198 p_dimension IN ZPB_SOLVE_OUTPUT_SELECTIONS.DIMENSION%TYPE)
1199 IS
1200 BEGIN
1201 INSERT INTO ZPB_SOLVE_OUTPUT_SELECTIONS
1202 (ANALYSIS_CYCLE_ID,
1203 MEMBER,
1204 MEMBER_ORDER,
1205 DIMENSION,
1206 HIERARCHY,
1207 SELECTION_NAME,
1208 MATCH_INPUT_FLAG,
1209 PROPAGATED_FLAG,
1210 CREATED_BY,
1211 CREATION_DATE,
1212 LAST_UPDATED_BY,
1213 LAST_UPDATE_DATE,
1214 LAST_UPDATE_LOGIN)
1215 VALUES (p_ac_id,
1216 p_line_member,
1217 p_memberOrder,
1218 p_dimension,
1219 'NONE',
1220 'DEFAULT',
1221 'N',
1222 'N',
1223 fnd_global.USER_ID,
1224 SYSDATE,
1225 fnd_global.USER_ID,
1226 SYSDATE,
1227 fnd_global.LOGIN_ID);
1228
1229
1230 END insertDefaultOutput;
1231
1232 --
1233 -- Looks for removed hierarchies in zpb_solve_in/output_selections
1234 -- and removes them, and defaults to other hiers if necessary (4705541)
1235 --
1236 PROCEDURE initialize_solve_selections
1237 (p_ac_id IN zpb_analysis_cycles.analysis_cycle_id%TYPE) is
1238 l_count number;
1239 l_ba_id number;
1240 l_shadow number;
1241 l_new_hier ZPB_SOLVE_INPUT_SELECTIONS.HIERARCHY%type;
1242 l_dimension ZPB_SOLVE_INPUT_SELECTIONS.DIMENSION%type;
1243
1244 cursor input_hiers is
1245 select distinct hierarchy, dimension
1246 from zpb_solve_input_selections
1247 where analysis_cycle_id = p_ac_id
1248 and hierarchy <> 'NONE'
1249 MINUS
1250 select distinct a.epb_id, b.aw_name
1251 from zpb_hierarchies a,
1252 zpb_dimensions b,
1253 zpb_hier_scope c
1254 where a.dimension_id = b.dimension_id
1255 and b.bus_area_id = l_ba_id
1256 and b.is_data_dim = 'YES'
1257 and a.hierarchy_id = c.hierarchy_id
1258 and c.user_id = l_shadow;
1259
1260 cursor output_hiers is
1261 select distinct hierarchy, dimension
1262 from zpb_solve_output_selections
1263 where analysis_cycle_id = p_ac_id
1264 and hierarchy <> 'NONE'
1265 MINUS
1266 select distinct a.EPB_ID, b.aw_name
1267 from zpb_hierarchies a,
1268 zpb_dimensions b,
1269 zpb_hier_scope c
1270 where a.dimension_id = b.dimension_id
1271 and b.bus_area_id = l_ba_id
1272 and b.is_data_dim = 'YES'
1273 and a.hierarchy_id = c.hierarchy_id
1274 and c.user_id = l_shadow;
1275 begin
1276 l_ba_id := sys_context('ZPB_CONTEXT', 'business_area_id');
1277 l_shadow := sys_context('ZPB_CONTEXT', 'shadow_id');
1278 for each in input_hiers loop
1279 --
1280 -- First check how many hiers are left, if none, we need to reset to NONE
1281 --
1282 select count(*)
1283 into l_count
1284 from zpb_dimensions a,
1285 zpb_hierarchies b,
1286 zpb_hier_scope c
1287 where a.aw_name = each.dimension
1288 and a.bus_area_id = l_ba_id
1289 and a.dimension_id = b.dimension_id
1290 and b.epb_id <> 'NULL_GID'
1291 and b.hierarchy_id = c.hierarchy_id
1292 and c.user_id = l_shadow;
1293
1294 if (l_count > 0) then
1295 --
1296 -- First delete any selections where there is another selection
1297 -- on another hierarchy already
1298 --
1299 delete from zpb_solve_input_selections
1300 where analysis_cycle_id = p_ac_id
1301 and dimension = each.dimension
1302 and hierarchy = each.hierarchy
1303 and member in
1304 (select member
1305 from zpb_solve_input_selections
1306 where analysis_cycle_id = p_ac_id
1307 and dimension = each.dimension
1308 and hierarchy <> each.hierarchy);
1309
1310 --
1311 -- Now update the rest to be the default on another hierarchy
1312 -- First find what that other hierarchy will be
1313 --
1314 begin
1315 select a.DEFAULT_HIER
1316 into l_new_hier
1317 from zpb_dimensions a,
1318 zpb_hierarchies b,
1319 zpb_hier_scope c
1320 where a.aw_name = each.dimension
1321 and a.bus_area_id = l_ba_id
1322 and a.dimension_id = b.dimension_id
1323 and b.epb_id = a.default_hier
1324 and b.hierarchy_id = c.hierarchy_id
1325 and c.user_id = l_shadow;
1326 exception
1327 when no_data_found then
1328 --
1329 -- User doesnt have access to the default hier, so pick the
1330 -- first one
1331 --
1332 select min(b.epb_id)
1333 into l_new_hier
1334 from zpb_dimensions a,
1335 zpb_hierarchies b,
1336 zpb_hier_scope c
1337 where a.aw_name = each.dimension
1338 and a.bus_area_id = l_ba_id
1339 and a.dimension_id = b.dimension_id
1340 and b.hierarchy_id = c.hierarchy_id
1341 and c.user_id = l_shadow;
1342 end;
1343 update zpb_solve_input_selections
1344 set selection_name = 'DEFAULT',
1345 selection_path = null,
1346 hierarchy = l_new_hier,
1347 last_update_date = sysdate,
1348 last_updated_by = FND_GLOBAL.USER_ID,
1349 last_update_login = FND_GLOBAL.LOGIN_ID
1350 where analysis_cycle_id = p_ac_id
1351 and dimension = each.dimension
1352 and hierarchy = each.hierarchy;
1353 else
1354 --
1355 -- The case when there are no hierarchies left on the dimension.
1356 -- First delete any input selections where we have already set the
1357 -- HIERARCHY to NONE... case when mutliple hiers have been removed
1358 --
1359 delete from zpb_solve_input_selections
1360 where analysis_cycle_id = p_ac_id
1361 and dimension = each.dimension
1362 and hierarchy = each.hierarchy
1363 and member in
1364 (select member
1365 from zpb_solve_input_selections
1366 where analysis_cycle_id = p_ac_id
1367 and dimension = each.dimension
1368 and hierarchy = 'NONE');
1369
1370 --
1371 -- Now update the rest to be set to NONE
1372 --
1373 update zpb_solve_input_selections
1374 set hierarchy = 'NONE',
1375 selection_path = null,
1376 selection_name = 'DEFAULT',
1377 last_update_date = sysdate,
1378 last_updated_by = FND_GLOBAL.USER_ID,
1379 last_update_login = FND_GLOBAL.LOGIN_ID
1380 where analysis_cycle_id = p_ac_id
1381 and dimension = each.dimension
1382 and hierarchy = each.hierarchy;
1383 end if;
1384 end loop;
1385
1386 for each in output_hiers loop
1387 --
1388 -- First check how many hiers are left, if none, we need to reset to NONE
1389 --
1390 select count(*)
1391 into l_count
1392 from zpb_dimensions a,
1393 zpb_hierarchies b,
1394 zpb_hier_scope c
1395 where a.aw_name = each.dimension
1396 and a.bus_area_id = l_ba_id
1397 and a.dimension_id = b.dimension_id
1398 and b.epb_id <> 'NULL_GID'
1399 and b.hierarchy_id = c.hierarchy_id
1400 and c.user_id = l_shadow;
1401
1402 if (l_count > 0) then
1403 --
1404 -- First delete any selections where there is another selection
1405 -- on another hierarchy already
1406 --
1407 delete from zpb_solve_output_selections
1408 where analysis_cycle_id = p_ac_id
1409 and dimension = each.dimension
1410 and hierarchy = each.hierarchy
1411 and member in
1412 (select member
1413 from zpb_solve_output_selections
1414 where analysis_cycle_id = p_ac_id
1415 and dimension = each.dimension
1416 and hierarchy <> each.hierarchy);
1417
1418 --
1419 -- Now update the rest to be the default on another hierarchy
1420 -- First find what that other hierarchy will be
1421 --
1422 begin
1423 select a.DEFAULT_HIER
1424 into l_new_hier
1425 from zpb_dimensions a,
1426 zpb_hierarchies b,
1427 zpb_hier_scope c
1428 where a.aw_name = each.dimension
1429 and a.bus_area_id = l_ba_id
1430 and a.dimension_id = b.dimension_id
1431 and b.epb_id = a.default_hier
1432 and b.hierarchy_id = c.hierarchy_id
1433 and c.user_id = l_shadow;
1434 exception
1435 when no_data_found then
1436 --
1437 -- User doesnt have access to the default hier, so pick the
1438 -- first one
1439 --
1440 select min(b.epb_id)
1441 into l_new_hier
1442 from zpb_dimensions a,
1443 zpb_hierarchies b,
1444 zpb_hier_scope c
1445 where a.aw_name = each.dimension
1446 and a.bus_area_id = l_ba_id
1447 and a.dimension_id = b.dimension_id
1448 and b.hierarchy_id = c.hierarchy_id
1449 and c.user_id = l_shadow;
1450 end;
1451 update zpb_solve_output_selections
1452 set selection_name = 'DEFAULT',
1453 selection_path = null,
1454 hierarchy = l_new_hier,
1455 last_update_date = sysdate,
1456 last_updated_by = FND_GLOBAL.USER_ID,
1457 last_update_login = FND_GLOBAL.LOGIN_ID
1458 where analysis_cycle_id = p_ac_id
1459 and dimension = each.dimension
1460 and hierarchy = each.hierarchy;
1461 else
1462 --
1463 -- The case when there are no hierarchies left on the dimension.
1464 -- First delete any output selections where we have already set the
1465 -- HIERARCHY to NONE... case when mutliple hiers have been removed
1466 --
1467 delete from zpb_solve_output_selections
1468 where analysis_cycle_id = p_ac_id
1469 and dimension = each.dimension
1470 and hierarchy = each.hierarchy
1471 and member in
1472 (select member
1473 from zpb_solve_output_selections
1474 where analysis_cycle_id = p_ac_id
1475 and dimension = each.dimension
1476 and hierarchy = 'NONE');
1477
1478 --
1479 -- Now update the rest to be set to NONE
1480 --
1481 update zpb_solve_output_selections
1482 set hierarchy = 'NONE',
1483 selection_path = null,
1484 selection_name = 'DEFAULT',
1485 last_update_date = sysdate,
1486 last_updated_by = FND_GLOBAL.USER_ID,
1487 last_update_login = FND_GLOBAL.LOGIN_ID
1488 where analysis_cycle_id = p_ac_id
1489 and dimension = each.dimension
1490 and hierarchy = each.hierarchy;
1491 end if;
1492 end loop;
1493
1494 end initialize_solve_selections;
1495
1496 /*=========================================================================+
1497 | PROCEDURE RUN_SOLVE
1498 |
1499 | DESCRIPTION
1500 | Runs Solve in shared
1501 |
1502 |
1503 |
1504 +=========================================================================*/
1505 procedure RUN_SOLVE (errbuf out nocopy varchar2,
1506 retcode out nocopy varchar2,
1507 p_business_area_id in number,
1508 p_instance_id in number)
1509 IS
1510
1511 attached varchar2(1) := 'N';
1512 l_dbname varchar2(150);
1513 l_count number;
1514 l_userid number := fnd_global.USER_ID;
1515 l_taskid number;
1516
1517
1518 BEGIN
1519 retcode := '0';
1520
1521 --Log
1522 FND_FILE.put_line(FND_FILE.LOG,'p_business_area_id=' ||p_business_area_id );
1523 FND_FILE.put_line(FND_FILE.LOG,'p_instance_id=' ||p_instance_id);
1524
1525 -- Get the task id to pass on to the solve program
1526 SELECT task_id INTO l_taskid
1527 FROM zpb_analysis_cycle_tasks
1528 WHERE sequence =
1529 ( SELECT max(sequence)
1530 FROM zpb_analysis_cycle_tasks
1531 WHERE analysis_cycle_id = p_instance_id
1532 AND status_code IN ('COMPLETE')
1533 ) + 1
1534 AND analysis_cycle_id = p_instance_id;
1535
1536 -- Log
1537 FND_FILE.put_line(FND_FILE.LOG,'l_taskid=' ||l_taskid);
1538
1539
1540 -- Test run of solve
1541 ZPB_AW.INITIALIZE_FOR_AC (p_api_version => 1.0,
1542 p_init_msg_list => FND_API.G_TRUE,
1543 x_return_status => retcode,
1544 x_msg_count => l_count,
1545 x_msg_data => errbuf,
1546 p_analysis_cycle_id => p_instance_id,
1547 p_shared_rw => FND_API.G_TRUE);
1548 attached := 'Y';
1549
1550 l_dbname := ZPB_AW.GET_SCHEMA || '.' || ZPB_AW.GET_SHARED_AW;
1551 ZPB_AW.EXECUTE('APPS_USER_ID = ''' || TO_CHAR(l_userid) || '''');
1552
1553 -- intializes the pv_status variable
1554 ZPB_ERROR_HANDLER.INIT_CONC_REQ_STATUS;
1555 ZPB_AW.EXECUTE('call SV.RUN.SOLVE(''' || l_dbname || ''', ''' || TO_CHAR(p_instance_id) || ''', ''' || TO_CHAR(l_taskid) || ''')');
1556 -- retcode is an OUT parameter conc program standard - 0=success, 1=warning or 2=error.
1557 retcode := ZPB_ERROR_HANDLER.GET_CONC_REQ_STATUS;
1558
1559 -- update
1560 --ZPB_AW.EXECUTE('upd');
1561 ZPB_AW.EXECUTE('pa.commit');
1562
1563 commit;
1564
1565 ZPB_AW.DETACH_ALL;
1566 attached := 'N';
1567
1568 --log solve OK
1569 FND_FILE.put_line(FND_FILE.LOG,'Solve ok');
1570 return;
1571
1572 exception
1573 when no_data_found then
1574 -- There are no active tasks
1575 retcode :='2';
1576
1577 if attached = 'Y' then
1578 ZPB_AW.DETACH_ALL;
1579 end if;
1580
1581 FND_FILE.put_line(FND_FILE.LOG, 'Solve not ok');
1582 errbuf := 'No task found';
1583
1584
1585 when others then
1586 retcode :='2';
1587
1588 if attached = 'Y' then
1589 ZPB_AW.DETACH_ALL;
1590 end if;
1591
1592 --log solve not OK
1593 FND_FILE.put_line(FND_FILE.LOG, 'Solve not ok');
1594 errbuf:=substr(sqlerrm, 1, 255);
1595
1596 end run_solve;
1597
1598 END zpb_solve;