DBA Data[Home] [Help]

PACKAGE BODY: APPS.CZ_RULES_SEQ

Source


1 PACKAGE BODY CZ_RULES_SEQ AS
2 /*	$Header: czrseqb.pls 115.26 2004/06/07 16:02:13 rheramba ship $		*/
3 
4 GLOBAL_RUN_ID INTEGER:=0;
5 EPOCH_BEGIN   DATE:=CZ_UTILS.EPOCH_BEGIN_;
6 EPOCH_END     DATE:=CZ_UTILS.EPOCH_END_;
7 NULL_VALUE    CONSTANT INTEGER:=-1;
8 
9 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
10 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
11 
12 PROCEDURE LOG_REPORT
13 (p_caller        IN VARCHAR2,
14  p_error_message IN VARCHAR2) IS
15 
16    l_return BOOLEAN;
17 
18 BEGIN
19    l_return := cz_utils.log_report(Msg        => p_error_message,
20                                    Urgency    => 1,
21                                    ByCaller   => p_caller,
22                                    StatusCode => 11276,
23                                    RunId      => GLOBAL_RUN_ID);
24 END;
25 
26 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
27 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
28 
29 PROCEDURE FND_REPORT
30 (p_message_name IN VARCHAR2,
31  p_token        IN VARCHAR2,
32  p_value        IN VARCHAR2) IS
33     l_message_text VARCHAR2(32000);
34 BEGIN
35   IF p_token IS NULL THEN
36      l_message_text := CZ_UTILS.GET_TEXT(p_message_name);
37   ELSE
38      l_message_text := CZ_UTILS.GET_TEXT(p_message_name,p_token,p_value);
39   END IF;
40   LOG_REPORT('CZ_RULES_SEQ',l_message_text);
41 END FND_REPORT;
42 
43 PROCEDURE FND_REPORT
44 (p_message_name  IN VARCHAR2,
45  p_token1        IN VARCHAR2,
46  p_value1        IN VARCHAR2,
47  p_token2        IN VARCHAR2,
48  p_value2        IN VARCHAR2) IS
49     l_message_text VARCHAR2(32000);
50 BEGIN
51   IF p_token1 IS NULL THEN
52      l_message_text := CZ_UTILS.GET_TEXT(p_message_name);
53   ELSIF p_token2 IS NULL THEN
54      l_message_text := CZ_UTILS.GET_TEXT(p_message_name,p_token1,p_value1);
55   ELSE
56      l_message_text := CZ_UTILS.GET_TEXT(p_message_name,p_token1,p_value1,p_token2,p_value2);
57   END IF;
58   LOG_REPORT('CZ_RULES_SEQ',l_message_text);
59 END FND_REPORT;
60 
61 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
62 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
63 
64 PROCEDURE Initialize(x_err OUT NOCOPY NUMBER) IS
65 BEGIN
66   x_err:=0;
67   SELECT CZ_XFR_RUN_INFOS_S.NEXTVAL INTO GLOBAL_RUN_ID FROM dual;
68 END Initialize;
69 
70 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
71 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
72 
73 PROCEDURE get_Dates
74 (p_eff_set_id     IN  INTEGER,
75  p_out_from_date  OUT NOCOPY DATE,
76  p_out_until_date OUT NOCOPY DATE) IS
77 
78 BEGIN
79 SELECT effective_from,effective_until INTO p_out_from_date,p_out_until_date
80 FROM CZ_EFFECTIVITY_SETS WHERE effectivity_set_id=p_eff_set_id;
81 
82 EXCEPTION
83 WHEN NO_DATA_FOUND THEN
84      NULL;
85 END;
86 
87 PROCEDURE set_Dates
88 (p_rule_id        IN  INTEGER,
89  p_from_date      IN  DATE,
90  p_until_date     IN  DATE,
91  p_eff_set_id     IN  INTEGER DEFAULT NULL,
92  p_seq_nbr        IN  INTEGER DEFAULT NULL) IS
93 
94 BEGIN
95 
96   UPDATE CZ_RULES
97      SET effective_from=NVL(p_from_date,effective_from),
98          effective_until=NVL(p_until_date,effective_until),
99          effectivity_set_id=DECODE(p_eff_set_id,NULL_VALUE,NULL,NULL,effectivity_set_id,p_eff_set_id),
100          seq_nbr=NVL(p_seq_nbr,seq_nbr)
101   WHERE rule_id=p_rule_id AND deleted_flag=NO_FLAG;
102 
103 END;
104 
105 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
106 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
107 
108 PROCEDURE get_LCR
109 (p_model_id           IN  INTEGER,
110  p_rule_sequence_id   IN  INTEGER,
111  p_rule_id            IN  INTEGER,
112  p_out_left_rule_id   OUT NOCOPY INTEGER,
113  p_out_right_rule_id  OUT NOCOPY INTEGER,
114  p_seq                IN OUT NOCOPY INTEGER,
115  p_out_left_seq       OUT NOCOPY INTEGER,
116  p_out_right_seq      OUT NOCOPY INTEGER,
117  p_out_eff_from       OUT NOCOPY DATE,
118  p_out_eff_to         OUT NOCOPY DATE,
119  p_out_left_eff_from  OUT NOCOPY DATE,
120  p_out_left_eff_to    OUT NOCOPY DATE,
121  p_out_right_eff_from OUT NOCOPY DATE,
122  p_out_right_eff_to   OUT NOCOPY DATE,
123  p_out_left_set_id    OUT NOCOPY INTEGER,
124  p_out_right_set_id   OUT NOCOPY INTEGER,
125  p_out_set_id         OUT NOCOPY INTEGER) IS
126 
127 var_curr_rule_id  INTEGER;
128 var_curr_nbr_seq  INTEGER;
129 var_set_id        INTEGER;
130 var_eff_from      DATE;
131 var_eff_to        DATE;
132 
133 BEGIN
134 
135 IF p_seq IS NULL THEN
136    SELECT seq_nbr INTO p_seq FROM CZ_RULES
137    WHERE rule_id=p_rule_id;
138 END IF;
139 
140 p_out_left_seq:=NULL_VALUE;
141 p_out_right_seq:=NULL_VALUE;
142 p_out_left_set_id:=NULL_VALUE;
143 p_out_right_set_id:=NULL_VALUE;
144 p_out_set_id:=NULL_VALUE;
145 p_out_left_rule_id:=NULL_VALUE;
146 p_out_right_rule_id:=NULL_VALUE;
147 p_out_eff_from:=NULL;
148 p_out_eff_to:=NULL;
149 p_out_left_eff_from:=NULL;
150 p_out_left_eff_to:=NULL;
151 p_out_right_eff_from:=NULL;
152 p_out_right_eff_to:=NULL;
153 
154 
155 FOR i IN(SELECT a.rule_folder_id,a.rule_id,a.seq_nbr,p_seq as main_seq,
156                 DECODE(a.seq_nbr,p_seq,'C',p_seq-1,'L',p_seq+1,'R','N') as where_in_seq,
157                 NVL(a.effectivity_set_id,NULL_VALUE) as effectivity_set_id,
158                 DECODE(a.effectivity_set_id,NULL,a.effective_from,NULL_VALUE,a.effective_from,b.effective_from) as effective_from,
159                 DECODE(a.effectivity_set_id,NULL,a.effective_until,NULL_VALUE,a.effective_until,b.effective_until) as effective_until
160          FROM CZ_RULES a,CZ_EFFECTIVITY_SETS b
161          WHERE a.rule_folder_id=p_rule_sequence_id
162          AND a.seq_nbr BETWEEN (p_seq-1) AND (p_seq+1)
163          AND a.deleted_flag='0'
164          AND b.effectivity_set_id(+)=a.effectivity_set_id
165          AND b.deleted_flag(+)='0')
166 LOOP
167 
168     IF i.where_in_seq='C' THEN
169        p_out_eff_from:=i.effective_from;
170        p_out_eff_to:=i.effective_until;
171        p_out_set_id:=i.effectivity_set_id;
172     END IF;
173 
174     IF i.where_in_seq='L' THEN
175        p_out_left_seq:=i.seq_nbr;
176        p_out_left_rule_id:=i.rule_id;
177        p_out_left_eff_from:=i.effective_from;
178        p_out_left_eff_to:=i.effective_until;
179        p_out_left_set_id:=i.effectivity_set_id;
180     END IF;
181 
182     IF i.where_in_seq='R' THEN
183        p_out_right_seq:=i.seq_nbr;
184        p_out_right_rule_id:=i.rule_id;
185        p_out_right_eff_from:=i.effective_from;
186        p_out_right_eff_to:=i.effective_until;
187        p_out_right_set_id:=i.effectivity_set_id;
188     END IF;
189 
190 END LOOP;
191 
192 EXCEPTION
193 WHEN NO_DATA_FOUND THEN
194      NULL;
195 END;
196 
197 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
198 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
199 
200 PROCEDURE get_NEWLCR
201 (p_model_id           IN  INTEGER,
202  p_rule_sequence_id   IN  INTEGER,
203  p_seq_nbr            IN  INTEGER,
204  p_out_left_rule_id   OUT NOCOPY INTEGER,
205  p_out_left_eff_from  OUT NOCOPY DATE,
206  p_out_left_eff_to    OUT NOCOPY DATE,
207  p_out_left_set_id    OUT NOCOPY INTEGER,
208  p_out_right_rule_id  OUT NOCOPY INTEGER,
209  p_out_right_eff_from OUT NOCOPY DATE,
210  p_out_right_eff_to   OUT NOCOPY DATE,
211  p_out_right_set_id   OUT NOCOPY INTEGER) IS
212 
213 var_curr_rule_id  INTEGER;
214 var_curr_nbr_seq  INTEGER;
215 var_set_id        INTEGER;
216 var_eff_from      DATE;
217 var_eff_to        DATE;
218 
219 BEGIN
220 
221 p_out_left_rule_id:=NULL;
222 p_out_left_eff_from:=NULL;
223 p_out_left_eff_to:=NULL;
224 p_out_left_set_id:=NULL;
225 
226 p_out_right_rule_id:=NULL;
227 p_out_right_eff_from:=NULL;
228 p_out_right_eff_to:=NULL;
229 p_out_right_set_id:=NULL;
230 
231 BEGIN
232 SELECT effective_from,effective_until,effectivity_set_id,rule_id INTO
233        p_out_left_eff_from,p_out_left_eff_to,p_out_left_set_id,p_out_left_rule_id
234 FROM CZ_RULES WHERE devl_project_id=p_model_id AND rule_folder_id=p_rule_sequence_id
235 AND seq_nbr=p_seq_nbr;
236 
237 IF p_out_left_set_id IS NOT NULL THEN
238    SELECT effective_from,effective_until INTO
239           p_out_left_eff_from,p_out_left_eff_to
240    FROM CZ_EFFECTIVITY_SETS WHERE effectivity_set_id=p_out_left_set_id;
241 END IF;
242 
243 EXCEPTION
244 WHEN NO_DATA_FOUND THEN
245      /* *** Left Border case *** */
246     NULL;
247 END;
248 
249 BEGIN
250 SELECT effective_from,effective_until,effectivity_set_id,rule_id INTO
251        p_out_right_eff_from,p_out_right_eff_to,p_out_right_set_id,p_out_right_rule_id
252 FROM CZ_RULES WHERE devl_project_id=p_model_id AND rule_folder_id=p_rule_sequence_id
253 AND seq_nbr=p_seq_nbr+1;
254 
255 IF p_out_right_set_id IS NOT NULL THEN
256    SELECT effective_from,effective_until INTO
257           p_out_right_eff_from,p_out_right_eff_to
258    FROM CZ_EFFECTIVITY_SETS WHERE effectivity_set_id=p_out_right_set_id;
259 END IF;
260 
261 EXCEPTION
262 WHEN NO_DATA_FOUND THEN
263      /* *** Right Border case *** */
264     NULL;
265 END;
266 
267 END;
268 
269 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
270 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
271 
272 PROCEDURE 	RemoveFromSequence
273 (p_rule_sequence_id 	IN    INTEGER,	              --ID of the rule sequence
274 p_model_id		      IN    INTEGER,	              --ID of the model
275 p_rule_id               IN    INTEGER,	              --ID of the rule which was removed
276 p_out_err               OUT NOCOPY   INTEGER ,	              --err flag
277 deleted_flag		IN    VARCHAR2 -- DEFAULT '0'      -- flag if the rule was logically deleted
278 ) IS
279 var_curr_rule_id   INTEGER;
280 var_curr_seq       INTEGER;
281 var_left_seq       INTEGER;
282 var_right_seq      INTEGER;
283 var_next_rule_id   INTEGER;
284 var_prev_rule_id   INTEGER;
285 var_left_rule_id   INTEGER;
286 var_right_rule_id  INTEGER;
287 var_left_set_id    INTEGER;
288 var_right_set_id   INTEGER;
289 var_set_id         INTEGER;
290 var_eff_from       DATE;
291 var_eff_to         DATE;
292 var_left_eff_from  DATE;
293 var_left_eff_to    DATE;
294 var_right_eff_from DATE;
295 var_right_eff_to   DATE;
296 
297 DO_NOTHING         EXCEPTION;
298 
299 BEGIN
300 
301 p_out_err:=0;
302 
303 SELECT CZ_XFR_RUN_INFOS_S.NEXTVAL INTO GLOBAL_RUN_ID FROM dual;
304 
305 get_LCR
306 (p_model_id,p_rule_sequence_id,p_rule_id,
307  var_left_rule_id,var_right_rule_id,
308  var_curr_seq,var_left_seq,var_right_seq,
309  var_eff_from,var_eff_to,
310  var_left_eff_from,var_left_eff_to,
311  var_right_eff_from,var_right_eff_to,
312  var_left_set_id,var_right_set_id,var_set_id);
313 
314 BEGIN
315 
316 IF (var_eff_from=EPOCH_END AND var_eff_to=EPOCH_BEGIN) OR
317     var_left_rule_id IS NULL THEN
318     RAISE DO_NOTHING;
319 END IF;
320 
321 /* *** handle the case with fisrt rule separately *** */
322 IF var_curr_seq=1 THEN
323    set_Dates(var_right_rule_id,var_eff_from,var_right_eff_to,NULL_VALUE);
324 ELSE
325    set_Dates(var_left_rule_id,var_left_eff_from,var_eff_to,NULL_VALUE);
326 END IF;
327 
328 EXCEPTION
329 WHEN DO_NOTHING THEN
330      NULL;
331 END;
332 
333 /* *** shift all successors to the left side *** */
334 
335 UPDATE CZ_RULES
336 SET seq_nbr=seq_nbr-1
337 WHERE  devl_project_id=p_model_id AND seq_nbr>var_curr_seq AND
338 rule_folder_id=p_rule_sequence_id AND deleted_flag=NO_FLAG;
339 
340 
341 /* *** delete current rule from sequence *** */
342 
343 UPDATE CZ_RULES
344 SET seq_nbr=NULL_VALUE,
345     rule_folder_id=NULL_VALUE
346 WHERE  rule_id=p_rule_id AND deleted_flag=NO_FLAG;
347 
348 EXCEPTION
349 WHEN NO_DATA_FOUND THEN
350     p_out_err:=GLOBAL_RUN_ID;
351     LOG_REPORT('CZ_RULES_SEQ.RemoveFromSequence','rule_id='||TO_CHAR(p_rule_id)||' : '||SQLERRM);
352 WHEN OTHERS THEN
353     p_out_err:=GLOBAL_RUN_ID;
354     LOG_REPORT('CZ_RULES_SEQ.RemoveFromSequence','rule_id='||TO_CHAR(p_rule_id)||' : '||SQLERRM);
355 END;
356 
357 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
358 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
359 
360 PROCEDURE 	MoveInSequence
361 (p_rule_sequence_id IN	INTEGER,	              -- ID of the rule sequence
362 p_model_id		      IN	INTEGER,	              -- ID of the model
363 p_rule_id	      	  IN	INTEGER,	              -- ID of the rule which is moved within the sequence
364 p_new_sequence		  IN	INTEGER,	              -- New sequence number of the moved rule
365 p_out_err           OUT NOCOPY INTEGER	        -- err flag
366 ) IS
367 
368   var_curr_seq           INTEGER;
369   var_left_seq           INTEGER;
370   var_right_seq          INTEGER;
371   var_left_rule_id       INTEGER;
372   var_right_rule_id      INTEGER;
373   var_left_set_id        INTEGER;
374   var_right_set_id       INTEGER;
375   var_set_id             INTEGER;
376   var_eff_from           DATE;
377   var_eff_to             DATE;
378   var_left_eff_from      DATE;
379   var_left_eff_to        DATE;
380   var_right_eff_from     DATE;
381   var_right_eff_to       DATE;
382   var_target_left_rule_id    NUMBER;
383   var_target_left_eff_from   DATE;
384   var_target_left_eff_to     DATE;
385   var_target_left_set_id     NUMBER;
386   var_target_right_rule_id   NUMBER;
390 
387   var_target_right_eff_from  DATE;
388   var_target_right_eff_to    DATE;
389   var_target_right_set_id    NUMBER;
391 BEGIN
392 
393   Initialize(p_out_err);
394 
395   get_LCR
396    (p_model_id,p_rule_sequence_id,p_rule_id,
397     var_left_rule_id,var_right_rule_id,
398     var_curr_seq,var_left_seq,var_right_seq,
399     var_eff_from,var_eff_to,
400     var_left_eff_from,var_left_eff_to,
401     var_right_eff_from,var_right_eff_to,
402     var_left_set_id,var_right_set_id,var_set_id);
403 
404   /** assume that we are moving Rn to the place of Rm
405    *  ... Rn-1 Rn Rn+1 ... Rm-1 Rm Rm+1
406    *
407    *
408    */
409   IF p_new_sequence > var_curr_seq THEN
410     --
411     -- Rn-1 does not exist
412     --
413     IF var_left_rule_id=NULL_VALUE THEN
414        IF var_eff_from < var_eff_to THEN
415          IF var_eff_to=EPOCH_END AND var_right_eff_to=EPOCH_BEGIN THEN
416            set_Dates(var_right_rule_id,var_eff_from,var_eff_to,NULL_VALUE);
417          ELSE
418            IF var_right_eff_to=EPOCH_BEGIN THEN
419              set_Dates(var_right_rule_id,var_eff_from,var_eff_to,NULL_VALUE);
420            ELSE
421              set_Dates(var_right_rule_id,var_eff_from,var_right_eff_to,NULL_VALUE);
422            END IF;
423          END IF;
424        ELSE
425          --
426          -- if var_eff_from=var_eff_to ( and => = var_right_eff_from )
427          -- then we don't need to set dates for the right rule
428          --
429          NULL;
430        END IF;
431 
432     ELSE -- Rn-1 exists
433 
434        IF var_eff_from < var_eff_to THEN
435          set_Dates(var_left_rule_id,var_left_eff_from,var_eff_to,NULL_VALUE);
436        ELSE
437          --
438          -- if var_eff_from=var_eff_to ( and => = var_right_eff_from )
439          -- then we don't need to set dates for the right rule
440          --
441          NULL;
442        END IF;
443 
444     END IF; -- end of IF var_left_rule_id=NULL_VALUE THEN
445 
446     --
447     -- get dates of Rm-1, Rm and Rm+1
448     --
449     get_NEWLCR(p_model_id,p_rule_sequence_id,p_new_sequence,
450                var_target_left_rule_id,var_target_left_eff_from,var_target_left_eff_to,
451                var_target_left_set_id,var_target_right_rule_id,var_target_right_eff_from,
452                var_target_right_eff_to,var_target_right_set_id);
453 
454     IF var_target_left_eff_to IN(EPOCH_END,EPOCH_BEGIN) THEN
455       IF var_eff_from=EPOCH_END AND var_eff_to=EPOCH_BEGIN THEN
456         set_Dates(p_rule_id,EPOCH_END,EPOCH_BEGIN,NULL_VALUE);
457       ELSE
458         set_Dates(p_rule_id,EPOCH_END,EPOCH_BEGIN,NULL);
459       END IF;
460     ELSE
461       set_Dates(p_rule_id,var_target_left_eff_to,var_target_left_eff_to,NULL_VALUE);
462     END IF;
463 
464     UPDATE CZ_RULES
465        SET seq_nbr=seq_nbr-1
466      WHERE rule_folder_id=p_rule_sequence_id AND
467            seq_nbr > var_curr_seq AND
468            seq_nbr <= p_new_sequence AND
469            deleted_flag=NO_FLAG;
470 
471     UPDATE CZ_RULES
472        SET seq_nbr=p_new_sequence
473      WHERE rule_id=p_rule_id;
474 
475   END IF;
476 
477   /** assume that we are moving Rn to the place of Rm
478    *  ... Rm-1 Rm Rm+1 ... Rn-1 Rn Rn+1
479    *
480    *
481    */
482   IF p_new_sequence < var_curr_seq THEN
483     --
484     -- Rn+1 does not exist
485     --
486     IF var_right_rule_id=NULL_VALUE OR var_right_eff_from=EPOCH_END THEN
487        IF var_eff_from < var_eff_to THEN
488          set_Dates(var_left_rule_id,var_left_eff_from,var_eff_to,NULL_VALUE);
489        ELSE
490          --
491          -- if var_eff_from=var_eff_to ( and => = var_right_eff_from )
492          -- then we don't need to set dates for the right rule
493          --
494          NULL;
495        END IF;
496 
497     ELSE -- Rn+1 exists
498 
499        IF var_eff_from < var_eff_to THEN
500          set_Dates(var_right_rule_id,var_eff_from,var_right_eff_to,NULL_VALUE);
501        ELSE
502          --
503          -- if var_eff_from=var_eff_to ( and => = var_right_eff_from )
504          -- then we don't need to set dates for the right rule
505          --
506          NULL;
507        END IF;
508 
509     END IF; -- end of IF var_left_rule_id=NULL_VALUE THEN
510 
511     --
512     -- get dates of Rm-1, Rm and Rm+1
513     --
514     get_NEWLCR(p_model_id,p_rule_sequence_id,p_new_sequence,
515                var_target_left_rule_id,var_target_left_eff_from,var_target_left_eff_to,
516                var_target_left_set_id,var_target_right_rule_id,var_target_right_eff_from,
517                var_target_right_eff_to,var_target_right_set_id);
518 
519     IF var_target_left_eff_to IN(EPOCH_END,EPOCH_BEGIN) THEN
520       IF var_eff_from=EPOCH_END AND var_eff_to=EPOCH_BEGIN THEN
521         IF var_target_left_eff_from IN(EPOCH_END) THEN
522           set_Dates(p_rule_id,EPOCH_END,EPOCH_BEGIN,NULL_VALUE);
523         ELSIF var_target_left_eff_from IN(EPOCH_BEGIN) AND var_target_left_eff_to=EPOCH_END THEN
524           set_Dates(p_rule_id,EPOCH_BEGIN,EPOCH_END,NULL);
525         ELSE
526           set_Dates(p_rule_id,var_target_left_eff_from,var_target_left_eff_from,NULL);
527         END IF;
531            set_Dates(p_rule_id,EPOCH_END,EPOCH_BEGIN,NULL);
528 
529       ELSE
530         IF var_target_left_eff_from IN(EPOCH_END) THEN
532         ELSIF var_target_left_eff_from IN(EPOCH_BEGIN) AND var_target_left_eff_to=EPOCH_END THEN
533           set_Dates(p_rule_id,EPOCH_BEGIN,EPOCH_END,NULL);
534         ELSE
535           set_Dates(p_rule_id,var_target_left_eff_from,var_target_left_eff_from,NULL);
536         END IF;
537 
538       END IF;
539     ELSE
540       IF var_target_left_eff_from=EPOCH_BEGIN THEN
541         set_Dates(p_rule_id,var_target_left_eff_from,var_target_left_eff_to,NULL_VALUE);
542         set_Dates(var_target_left_rule_id,var_target_left_eff_to,var_target_left_eff_to,NULL_VALUE);
543       ELSE
544         set_Dates(p_rule_id,var_target_left_eff_from,var_target_left_eff_from,NULL_VALUE);
545       END IF;
546     END IF;
547 
548     UPDATE CZ_RULES
549        SET seq_nbr=seq_nbr+1
550      WHERE rule_folder_id=p_rule_sequence_id AND
551            seq_nbr < var_curr_seq AND
552            seq_nbr >= p_new_sequence AND
553            deleted_flag=NO_FLAG;
554 
555     UPDATE CZ_RULES
556        SET seq_nbr=p_new_sequence
557      WHERE rule_id=p_rule_id;
558 
559   END IF;
560 
561 EXCEPTION
562   WHEN NO_DATA_FOUND THEN
563       p_out_err:=GLOBAL_RUN_ID;
564       LOG_REPORT('CZ_RULES_SEQ.MoveInSequence','rule_id='||TO_CHAR(p_rule_id)||' : '||SQLERRM);
565   WHEN OTHERS THEN
566       p_out_err:=GLOBAL_RUN_ID;
567       LOG_REPORT('CZ_RULES_SEQ.MoveInSequence','rule_id='||TO_CHAR(p_rule_id)||' : '||SQLERRM);
568 END;
569 
570 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
571 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
572 
573 PROCEDURE 	ChangeEffectivity
574 (p_rule_sequence_id 	IN	INTEGER,	              --ID of the rule sequence
575  p_model_id	      	IN	INTEGER,	              --ID of the model
576  p_rule_id	      	IN	INTEGER,	              --ID of the rule whose effectivity changed
577  p_out_err	       	  OUT NOCOPY INTEGER,	              --err flag
578  p_eff_start_date		IN	DATE DEFAULT NULL,	  --New start date
579  p_eff_end_date		IN	DATE DEFAULT NULL,	  --New end date
580  p_eff_set_id		IN	INTEGER -- DEFAULT -1        --New effectivity set ID
581 ) IS
582 
583 var_curr_rule_id   INTEGER;
584 var_curr_seq       INTEGER;
585 var_new_curr_seq   INTEGER;
586 var_left_seq       INTEGER;
587 var_right_seq      INTEGER;
588 var_next_rule_id   INTEGER;
589 var_prev_rule_id   INTEGER;
590 var_left_rule_id   INTEGER;
591 var_right_rule_id  INTEGER;
592 var_new_rule_id    INTEGER;
593 var_left_set_id    INTEGER;
594 var_right_set_id   INTEGER;
595 var_set_id         INTEGER;
596 var_from_date      DATE;
597 var_until_date     DATE;
598 var_eff_from       DATE;
599 var_eff_to         DATE;
600 var_left_eff_from  DATE;
601 var_left_eff_to    DATE;
602 var_right_eff_from DATE;
603 var_right_eff_to   DATE;
604 
605 END_OPERATION      EXCEPTION;
606 
607 BEGIN
608 
609 p_out_err:=0;
610 
611 SELECT CZ_XFR_RUN_INFOS_S.NEXTVAL INTO GLOBAL_RUN_ID FROM dual;
612 
613 get_LCR
614 (p_model_id,p_rule_sequence_id,p_rule_id,
615  var_left_rule_id,var_right_rule_id,
616  var_curr_seq,var_left_seq,var_right_seq,
617  var_eff_from,var_eff_to,
618  var_left_eff_from,var_left_eff_to,
619  var_right_eff_from,var_right_eff_to,
620  var_left_set_id,var_right_set_id,var_set_id);
621 
622 IF p_eff_start_date=EPOCH_END AND p_eff_end_date=EPOCH_BEGIN THEN
623 
624    IF (var_left_eff_from=EPOCH_END AND var_left_eff_to=EPOCH_BEGIN)
625       OR var_left_eff_to=EPOCH_END THEN
626       set_Dates(p_rule_id,NULL,NULL,p_eff_set_id);
627       RAISE END_OPERATION;
628    END IF;
629 
630    IF var_eff_from=EPOCH_END AND var_eff_to=EPOCH_BEGIN THEN
631       set_Dates(p_rule_id,NULL,NULL,p_eff_set_id);
632       RAISE END_OPERATION;
633    END IF;
634 
635    set_Dates(var_left_rule_id,var_left_eff_from,var_eff_to,NULL_VALUE);
636    set_Dates(p_rule_id,EPOCH_END,EPOCH_BEGIN,p_eff_set_id);
637    RAISE END_OPERATION;
638 
639 END IF;
640 
641 IF var_left_rule_id IS NULL THEN
642    IF p_eff_end_date=var_right_eff_from THEN
643       NULL;
644    ELSE
645       set_Dates(var_right_rule_id,p_eff_end_date,var_right_eff_to,NULL_VALUE);
646    END IF;
647    set_Dates(p_rule_id,p_eff_start_date,p_eff_end_date,p_eff_set_id);
648    RAISE END_OPERATION;
649 END IF;
650 
651 IF var_right_rule_id IS NULL THEN
652    IF p_eff_start_date=var_left_eff_to THEN
653       NULL;
654    ELSE
655       set_Dates(var_left_rule_id,var_left_eff_from,p_eff_start_date,NULL_VALUE);
656    END IF;
657    set_Dates(p_rule_id,p_eff_start_date,p_eff_end_date,p_eff_set_id);
658    RAISE END_OPERATION;
659 END IF;
660 
661 IF var_eff_from=EPOCH_END AND var_eff_to=EPOCH_BEGIN THEN
662    IF p_eff_start_date=var_left_eff_to THEN
663       set_Dates(var_left_rule_id,var_left_eff_from,p_eff_start_date);
664    ELSE
665       set_Dates(var_left_rule_id,var_left_eff_from,p_eff_start_date,NULL_VALUE);
666    END IF;
667    set_Dates(p_rule_id,p_eff_start_date,p_eff_end_date,p_eff_set_id);
671 IF p_eff_start_date=var_left_eff_to THEN
668    RAISE END_OPERATION;
669 END IF;
670 
672    set_Dates(var_left_rule_id,var_left_eff_from,p_eff_start_date);
673 ELSE
674    set_Dates(var_left_rule_id,var_left_eff_from,p_eff_start_date,NULL_VALUE);
675 END IF;
676 
677 IF var_right_eff_from=EPOCH_END AND var_right_eff_to=EPOCH_BEGIN THEN
678    NULL;
679 ELSE
680    IF p_eff_end_date=var_right_eff_from THEN
681       set_Dates(var_right_rule_id,p_eff_end_date,var_right_eff_to);
682    ELSE
683       set_Dates(var_right_rule_id,p_eff_end_date,var_right_eff_to,NULL_VALUE);
684    END IF;
685 END IF;
686 
687 set_Dates(p_rule_id,p_eff_start_date,p_eff_end_date,p_eff_set_id);
688 
689 EXCEPTION
690 WHEN END_OPERATION THEN
691      NULL;
692 WHEN NO_DATA_FOUND THEN
693     p_out_err:=1;
694     LOG_REPORT('CZ_RULES_SEQ.ChangeEffectivity','rule_id='||TO_CHAR(p_rule_id)||' : '||SQLERRM);
695 WHEN OTHERS THEN
696     p_out_err:=2;
697     LOG_REPORT('CZ_RULES_SEQ.ChangeEffectivity','rule_id='||TO_CHAR(p_rule_id)||' : '||SQLERRM);
698 END;
699 
700 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
701 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
702 
703 PROCEDURE 	PropagateEffectivitySetChange
704 (p_effectivity_set_id   IN 	INTEGER,                  --ID of the effectivity set
705  p_new_start_date       IN	DATE,                     --new start date
706  p_new_end_date         IN	DATE,		              --new end date
707  p_out_err                OUT NOCOPY INTEGER                   --Err flag
708 ) IS
709 
710 var_start_date     DATE;
711 var_end_date       DATE;
712 
713 var_curr_rule_id   INTEGER;
714 var_curr_seq       INTEGER;
715 var_left_seq       INTEGER;
716 var_right_seq      INTEGER;
717 var_next_rule_id   INTEGER;
718 var_prev_rule_id   INTEGER;
719 var_left_rule_id   INTEGER;
720 var_right_rule_id  INTEGER;
721 var_new_rule_id    INTEGER;
722 var_left_set_id    INTEGER;
723 var_right_set_id   INTEGER;
724 var_set_id         INTEGER;
725 var_name           CZ_RULES.name%TYPE;
726 var_eff_name       CZ_EFFECTIVITY_SETS.name%TYPE;
727 var_rule_name      CZ_RULES.name%TYPE;
728 
729 var_eff_from       DATE;
730 var_eff_to         DATE;
731 var_left_eff_from  DATE;
732 var_left_eff_to    DATE;
733 var_right_eff_from DATE;
734 var_right_eff_to   DATE;
735 
736 LEFT_OVERLAP       EXCEPTION;
737 RIGHT_OVERLAP      EXCEPTION;
738 
739 BEGIN
740 
741 FND_MSG_PUB.initialize;
742 p_out_err:=0;
743 
744 SELECT CZ_XFR_RUN_INFOS_S.NEXTVAL INTO GLOBAL_RUN_ID FROM dual;
745 
746 UPDATE CZ_EFFECTIVITY_SETS
747 SET effective_from=p_new_start_date,
748     effective_until=p_new_end_date
749 WHERE effectivity_set_id=p_effectivity_set_id RETURNING name INTO var_eff_name;
750 
751 FOR k IN ( SELECT a.* FROM CZ_RULES a, CZ_RULE_FOLDERS b
752            WHERE a.rule_folder_id = b.rule_folder_id
753            AND b.folder_type=1 AND b.deleted_flag=NO_FLAG
754            AND a.effectivity_set_id=p_effectivity_set_id
755            AND a.deleted_flag=NO_FLAG)
756 LOOP
757 
758       var_curr_seq:=k.seq_nbr;
759 
760       get_LCR
761       (k.devl_project_id,k.rule_folder_id,k.rule_id,
762        var_left_rule_id,var_right_rule_id,
763        var_curr_seq,var_left_seq,var_right_seq,
764        var_eff_from,var_eff_to,var_left_eff_from,var_left_eff_to,
765        var_right_eff_from,var_right_eff_to,
766        var_left_set_id,var_right_set_id,var_set_id);
767 
768       IF p_new_start_date<var_left_eff_from THEN
769          var_rule_name:=k.name;
770          RAISE LEFT_OVERLAP;
771       END IF;
772 
773       IF p_new_end_date>var_right_eff_to
774          AND var_right_eff_to<>CZ_UTILS.EPOCH_BEGIN_ THEN
775          RAISE RIGHT_OVERLAP;
776       END IF;
777 
778       IF (var_left_set_id<>NULL_VALUE AND var_left_set_id IS NOT NULL) AND
779          (var_left_eff_from=CZ_UTILS.EPOCH_END_ AND var_left_eff_to=CZ_UTILS.EPOCH_BEGIN_) THEN
780 
781           NULL;
782       ELSE
783           set_Dates(var_left_rule_id,var_left_eff_from,p_new_start_date,NULL_VALUE);
784       END IF;
785 
786 
787       IF (var_right_set_id<>NULL_VALUE  AND var_right_set_id IS NOT NULL) AND
788          (var_right_eff_from=CZ_UTILS.EPOCH_END_ AND var_right_eff_to=CZ_UTILS.EPOCH_BEGIN_)  THEN
789           NULL;
790       ELSE
791           set_Dates(var_right_rule_id,p_new_end_date,var_right_eff_to,NULL_VALUE);
792       END IF;
793 
794 END LOOP;
795 
796 EXCEPTION
797 WHEN LEFT_OVERLAP THEN
798     p_out_err:=GLOBAL_RUN_ID;
799     SELECT name INTO var_name FROM CZ_RULES WHERE rule_id=var_left_rule_id;
800     IF var_left_eff_from=EPOCH_END AND var_left_eff_to=EPOCH_BEGIN THEN
801        FND_REPORT('CZ_UNABLE_TO_ACTIVATE_RULE','RULENAME',var_name);
802     ELSE
803        FND_REPORT('CZ_EFF_SET_PREV_OVERLAP','EFFNAME',var_eff_name,'RULENAME',var_name);
804     END IF;
805 WHEN RIGHT_OVERLAP THEN
806     p_out_err:=GLOBAL_RUN_ID;
807     SELECT name INTO var_name FROM CZ_RULES WHERE rule_id=var_right_rule_id;
808     FND_REPORT('CZ_EFF_SET_NEXT_OVERLAP','EFFNAME',var_eff_name,'RULENAME',var_name);
812     LOG_REPORT('CZ_RULES_SEQ','effectivity "'||var_eff_name||'" : '||SQLERRM);
809 WHEN NO_DATA_FOUND THEN
810     p_out_err:=GLOBAL_RUN_ID;
811     SELECT name INTO var_name FROM CZ_RULES WHERE rule_id=var_right_rule_id;
813 WHEN OTHERS THEN
814     p_out_err:=GLOBAL_RUN_ID;
815     LOG_REPORT('CZ_RULES_SEQ','effectivity "'||var_eff_name||'" : '||SQLERRM);
816 END;
817 
818 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
819 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
820 
821 END;