DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSM_SPLIT_PERC_PVT

Source


1 PACKAGE BODY WSM_SPLIT_PERC_PVT AS
2 /* $Header: WSMCOSPB.pls 115.3 2004/05/27 07:49:02 mprathap noship $ */
3 
4  /*---------------------------------------------------------------------------+
5  | Procedure to insert a row in the split percentages table for a given	      |
6  | (co-product,co product group, effective date, disable date) 		      |
7  +---------------------------------------------------------------------------*/
8 PROCEDURE insert_row(x_err_code 		OUT NOCOPY NUMBER,
9    	    	     x_err_msg                  OUT NOCOPY VARCHAR2,
10 		     p_co_product_id  		IN NUMBER,
11 		     p_co_product_group_id	IN NUMBER,
12 		     p_organization_id		IN NUMBER,
13 		     p_revision			IN VARCHAR2,
14 		     p_split			IN NUMBER,
15 		     p_primary_flag		IN VARCHAR2,
16 		     p_effectivity_date		IN DATE,
17 		     p_disable_date		IN DATE,
18 		     p_creation_date		IN DATE,
19 		     p_created_by 		IN NUMBER,
20 		     p_last_update_date		IN DATE,
21 		     p_last_updated_by 		IN NUMBER,
22 		     p_last_update_login	IN NUMBER     DEFAULT NULL,
23 		     p_attribute_category	IN VARCHAR2   DEFAULT NULL,
24 		     p_attribute1		IN VARCHAR2   DEFAULT NULL,
25 		     p_attribute2		IN VARCHAR2   DEFAULT NULL,
26 		     p_attribute3		IN VARCHAR2   DEFAULT NULL,
27 		     p_attribute4		IN VARCHAR2   DEFAULT NULL,
28 		     p_attribute5		IN VARCHAR2   DEFAULT NULL,
29 		     p_attribute6		IN VARCHAR2   DEFAULT NULL,
30 		     p_attribute7		IN VARCHAR2   DEFAULT NULL,
31 		     p_attribute8		IN VARCHAR2   DEFAULT NULL,
32 		     p_attribute9		IN VARCHAR2   DEFAULT NULL,
33 		     p_attribute10		IN VARCHAR2   DEFAULT NULL,
34 		     p_attribute11		IN VARCHAR2   DEFAULT NULL,
35 		     p_attribute12		IN VARCHAR2   DEFAULT NULL,
36 		     p_attribute13		IN VARCHAR2   DEFAULT NULL,
37 		     p_attribute14		IN VARCHAR2   DEFAULT NULL,
38 		     p_attribute15		IN VARCHAR2   DEFAULT NULL,
39 		     p_request_id               IN NUMBER     DEFAULT NULL,
40                      p_program_application_id   IN NUMBER     DEFAULT NULL,
41                      p_program_id               IN NUMBER     DEFAULT NULL,
42                      p_program_update_date      IN DATE       DEFAULT NULL
43 		     )  IS
44 
45 BEGIN
46 
47   x_err_code := 0;
48   x_err_msg  := NULL;
49 
50   insert into WSM_COPRODUCT_SPLIT_PERC
51   (
52 	CO_PRODUCT_GROUP_ID,
53 	CO_PRODUCT_ID,
54 	ORGANIZATION_ID,
55 	REVISION,
56 	SPLIT,
57 	PRIMARY_FLAG,
58 	EFFECTIVITY_DATE,
59 	DISABLE_DATE,
60 	CREATION_DATE,
61 	CREATED_BY,
62 	LAST_UPDATE_DATE,
63 	LAST_UPDATED_BY,
64 	LAST_UPDATE_LOGIN,
65 	ATTRIBUTE_CATEGORY,
66 	ATTRIBUTE1,
67 	ATTRIBUTE2,
68 	ATTRIBUTE3,
69 	ATTRIBUTE4,
70 	ATTRIBUTE5,
71 	ATTRIBUTE6,
72 	ATTRIBUTE7,
73 	ATTRIBUTE8,
74 	ATTRIBUTE9,
75 	ATTRIBUTE10,
76 	ATTRIBUTE11,
77 	ATTRIBUTE12,
78 	ATTRIBUTE13,
79 	ATTRIBUTE14,
80 	ATTRIBUTE15,
81 	REQUEST_ID,
82 	PROGRAM_APPLICATION_ID,
83 	PROGRAM_ID,
84 	PROGRAM_UPDATE_DATE
85    )
86    values
87    (
88 	p_co_product_group_id,
89 	p_co_product_id,
90 	p_organization_id,
91 	p_revision,
92 	p_split,
93 	p_primary_flag,
94         p_effectivity_date,
95 	p_disable_date,
96 	p_creation_date,
97 	p_created_by,
98 	p_last_update_date,
99 	p_last_updated_by ,
100 	p_last_update_login,
101 	p_attribute_category,
102 	p_attribute1,
103 	p_attribute2,
104 	p_attribute3,
105 	p_attribute4,
106 	p_attribute5,
107 	p_attribute6,
108 	p_attribute7,
109 	p_attribute8,
110 	p_attribute9,
111 	p_attribute10,
112 	p_attribute11,
113 	p_attribute12,
114 	p_attribute13,
115 	p_attribute14,
116 	p_attribute15,
117 	p_request_id,
118         p_program_application_id,
119         p_program_id,
120         p_program_update_date
121     );
122 
123 EXCEPTION
124     WHEN OTHERS THEN
125       x_err_code:= -1;
126       x_err_msg := 'WSM_SPLIT_PERC_PVT.insert_row :' || SQLCODE || '  :' || substr(SQLERRM,1,1000);
127       RETURN;
128 END insert_row;
129 
130  /*---------------------------------------------------------------------------+
131  | Procedure to update a row in the split percentages table 		      |
132  +---------------------------------------------------------------------------*/
133 
134 PROCEDURE update_row(x_err_code 		OUT NOCOPY NUMBER,
135 		     x_err_msg                  OUT NOCOPY VARCHAR2,
136 		     p_rowid                    IN VARCHAR2,
137 		     p_co_product_id  		IN NUMBER,
138 		     p_co_product_group_id	IN NUMBER,
139 		     p_organization_id		IN NUMBER,
140 		     p_revision			IN VARCHAR2,
141 		     p_split			IN NUMBER,
142 		     p_primary_flag		IN VARCHAR2,
143 		     p_effectivity_date		IN DATE,
144 		     p_disable_date		IN DATE,
145 		     p_creation_date		IN DATE,
146 		     p_created_by 		IN NUMBER,
147 		     p_last_update_date		IN DATE,
148 		     p_last_updated_by 		IN NUMBER,
149 		     p_last_update_login	IN NUMBER,
150 		     p_attribute_category	IN VARCHAR2,
151 		     p_attribute1		IN VARCHAR2,
152 		     p_attribute2		IN VARCHAR2,
153 		     p_attribute3		IN VARCHAR2,
154 		     p_attribute4		IN VARCHAR2,
155 		     p_attribute5		IN VARCHAR2,
156 		     p_attribute6		IN VARCHAR2,
157 		     p_attribute7		IN VARCHAR2,
158 		     p_attribute8		IN VARCHAR2,
159 		     p_attribute9		IN VARCHAR2,
160 		     p_attribute10		IN VARCHAR2,
161 		     p_attribute11		IN VARCHAR2,
162 		     p_attribute12		IN VARCHAR2,
163 		     p_attribute13		IN VARCHAR2,
164 		     p_attribute14		IN VARCHAR2,
165 		     p_attribute15		IN VARCHAR2,
166 		     p_request_id               IN NUMBER,
167                      p_program_application_id   IN NUMBER,
168                      p_program_id               IN NUMBER,
169                      p_program_update_date      IN DATE
170 		     )  IS
171 BEGIN
172 
173   x_err_code := 0;
174   x_err_msg  := NULL;
175 
176   UPDATE WSM_COPRODUCT_SPLIT_PERC
177   SET
178         CO_PRODUCT_GROUP_ID     =	p_co_product_group_id,
179         CO_PRODUCT_ID		=	p_co_product_id,
180 	ORGANIZATION_ID		=	p_organization_id,
181 	REVISION		=	p_revision,
182 	SPLIT			=	p_split,
183 	PRIMARY_FLAG		=	p_primary_flag,
184 	EFFECTIVITY_DATE	=	p_effectivity_date,
185 	DISABLE_DATE		=	p_disable_date,
186 	CREATION_DATE		=	p_creation_date,
187 	CREATED_BY		=	p_created_by,
188 	LAST_UPDATE_DATE	=	p_last_update_date,
189 	LAST_UPDATED_BY		=	p_last_updated_by,
190 	LAST_UPDATE_LOGIN	=	p_last_update_login,
191 	ATTRIBUTE_CATEGORY	=	p_attribute_category,
192 	ATTRIBUTE1		=	p_attribute1,
193 	ATTRIBUTE2		=	p_attribute2,
194 	ATTRIBUTE3		=	p_attribute3,
195 	ATTRIBUTE4		=	p_attribute4,
196 	ATTRIBUTE5		=	p_attribute5,
197 	ATTRIBUTE6		=	p_attribute6,
198 	ATTRIBUTE7		=	p_attribute7,
199 	ATTRIBUTE8		=	p_attribute8,
200 	ATTRIBUTE9		=	p_attribute9,
201 	ATTRIBUTE10		=	p_attribute10,
202 	ATTRIBUTE11		=	p_attribute11,
203 	ATTRIBUTE12		=	p_attribute12,
204 	ATTRIBUTE13		=	p_attribute13,
205 	ATTRIBUTE14		=	p_attribute14,
206 	ATTRIBUTE15		=	p_attribute15,
207 	REQUEST_ID		=	p_request_id,
208 	PROGRAM_APPLICATION_ID	=	p_program_application_id,
209 	PROGRAM_ID		=	p_program_id,
210 	PROGRAM_UPDATE_DATE	=	p_program_update_date
211    WHERE rowid = p_rowid;
212 
213 EXCEPTION
214   WHEN OTHERS THEN
215     x_err_code := -1;
216     x_err_msg  := 'WSM_SPLIT_PERC_PVT.update_row :' || SQLCODE || '  :' || substr(SQLERRM,1,1000);
217     RETURN;
218 
219 END update_row;
220 
221  /*---------------------------------------------------------------------------+
222  | Lock row procedure							      |
223  |									      |
224  +---------------------------------------------------------------------------*/
225 
226 PROCEDURE lock_row( x_err_code 		OUT NOCOPY NUMBER,
227 		     x_err_msg                  OUT NOCOPY VARCHAR2,
228 		     p_rowid                    IN VARCHAR2,
229 		     p_co_product_id  		IN NUMBER,
230 		     p_co_product_group_id	IN NUMBER,
231 		     p_organization_id		IN NUMBER,
232 		     p_revision			IN VARCHAR2,
233 		     p_split			IN NUMBER,
234 		     p_primary_flag		IN VARCHAR2,
235 		     p_effectivity_date		IN DATE,
236 		     p_disable_date		IN DATE,
237 		     p_attribute_category	IN VARCHAR2,
238 		     p_attribute1		IN VARCHAR2,
239 		     p_attribute2		IN VARCHAR2,
240 		     p_attribute3		IN VARCHAR2,
241 		     p_attribute4		IN VARCHAR2,
242 		     p_attribute5		IN VARCHAR2,
243 		     p_attribute6		IN VARCHAR2,
244 		     p_attribute7		IN VARCHAR2,
245 		     p_attribute8		IN VARCHAR2,
246 		     p_attribute9		IN VARCHAR2,
247 		     p_attribute10		IN VARCHAR2,
248 		     p_attribute11		IN VARCHAR2,
249 		     p_attribute12		IN VARCHAR2,
250 		     p_attribute13		IN VARCHAR2,
251 		     p_attribute14		IN VARCHAR2,
252 		     p_attribute15		IN VARCHAR2
253 		     ) IS
254 
255   CURSOR C IS
256         SELECT *
257         FROM   WSM_COPRODUCT_SPLIT_PERC
258         WHERE  rowid = p_rowid
259         FOR UPDATE of co_product_id NOWAIT;
260 
261   l_rec C%ROWTYPE;
262 
263 BEGIN
264 
265     x_err_code := 0;
266     x_err_msg  := NULL;
267 
268     OPEN C;
269     FETCH C INTO l_rec;
270 
271     IF (C%NOTFOUND) THEN
272 
273       CLOSE C;
274       FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_DELETED');
275       x_err_code := -1;
276       x_err_msg  := FND_MESSAGE.GET;
277       RETURN;
278 
279     END IF;
280     CLOSE C;
281 
282      IF  (    (l_rec.co_product_group_id    =  p_co_product_group_id)
283      	  AND (l_rec.co_product_id          =  p_co_product_id)
284 	  AND (l_rec.organization_id        =  p_organization_id)
285 	  AND (l_rec.primary_flag           =  p_primary_flag)
286 	  AND (l_rec.split	            =  p_split)
287 	  AND (l_rec.revision		    =  p_revision)
288 	  AND (   (l_rec.attribute_category =  p_Attribute_Category)
289                 OR (    (l_rec.attribute_category IS NULL)
290                     AND (p_Attribute_Category IS NULL)))
291            AND (   (l_rec.attribute1 =  p_Attribute1)
292                 OR (    (l_rec.attribute1 IS NULL)
293                     AND (p_Attribute1 IS NULL)))
294            AND (   (l_rec.attribute2 =  p_Attribute2)
295                 OR (    (l_rec.attribute2 IS NULL)
296                     AND (p_Attribute2 IS NULL)))
297            AND (   (l_rec.attribute3 =  p_Attribute3)
298                 OR (    (l_rec.attribute3 IS NULL)
299                     AND (p_Attribute3 IS NULL)))
300            AND (   (l_rec.attribute4 =  p_Attribute4)
301                 OR (    (l_rec.attribute4 IS NULL)
302                     AND (p_Attribute4 IS NULL)))
303            AND (   (l_rec.attribute5 =  p_Attribute5)
304                 OR (    (l_rec.attribute5 IS NULL)
305                     AND (p_Attribute5 IS NULL)))
306            AND (   (l_rec.attribute6 =  p_Attribute6)
307                 OR (    (l_rec.attribute6 IS NULL)
308                     AND (p_Attribute6 IS NULL)))
309            AND (   (l_rec.attribute7 =  p_Attribute7)
310                 OR (    (l_rec.attribute7 IS NULL)
311                     AND (p_Attribute7 IS NULL)))
312            AND (   (l_rec.attribute8 =  p_Attribute8)
313                 OR (    (l_rec.attribute8 IS NULL)
314                     AND (p_Attribute8 IS NULL)))
315            AND (   (l_rec.attribute9 =  p_Attribute9)
316                 OR (    (l_rec.attribute9 IS NULL)
317                     AND (p_Attribute9 IS NULL)))
318            AND (   (l_rec.attribute10 =  p_Attribute10)
319                 OR (    (l_rec.attribute10 IS NULL)
320                     AND (p_Attribute10 IS NULL)))
321            AND (   (l_rec.attribute11 =  p_Attribute11)
322                 OR (    (l_rec.attribute11 IS NULL)
326                     AND (p_Attribute12 IS NULL)))
323                     AND (p_Attribute11 IS NULL)))
324            AND (   (l_rec.attribute12 =  p_Attribute12)
325                 OR (    (l_rec.attribute12 IS NULL)
327            AND (   (l_rec.attribute13 =  p_Attribute13)
328                 OR (    (l_rec.attribute13 IS NULL)
329                     AND (p_Attribute13 IS NULL)))
330            AND (   (l_rec.attribute14 =  p_Attribute14)
331                 OR (    (l_rec.attribute14 IS NULL)
332                     AND (p_Attribute14 IS NULL)))
333            AND (   (l_rec.attribute15 =  p_Attribute15)
334                 OR (    (l_rec.attribute15 IS NULL)
335                     AND (p_Attribute15 IS NULL)))
336       ) THEN
337       RETURN;
338     ELSE
339       FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_DELETED');
340       x_err_code := -1;
341       x_err_msg  := FND_MESSAGE.GET;
342       RETURN;
343     END IF;
344 
345 EXCEPTION
346   WHEN OTHERS THEN
347     x_err_code := -1;
348     x_err_msg  := 'WSM_SPLIT_PERC_PVT.lock_row :' || SQLCODE || '  :' || substr(SQLERRM,1,1000);
349     RETURN;
350 END lock_row;
351 
352  /*---------------------------------------------------------------------------+
353  | Procedure to delete all the entries corresponding to a (co product id,     |
354  | co product group id) pair in  the split percentages table 		      |
355  +---------------------------------------------------------------------------*/
356 
357 PROCEDURE delete_row(   x_err_code		OUT NOCOPY NUMBER,
358    			x_err_msg		OUT NOCOPY VARCHAR2,
359    			p_co_product_id  	IN NUMBER,
360 		     	p_co_product_group_id	IN NUMBER,
361 			p_organization_id	IN NUMBER
362 			) IS
363 BEGIN
364 
365   x_err_code := 0;
366   x_err_msg  := NULL;
367 
368   DELETE FROM WSM_COPRODUCT_SPLIT_PERC
369   WHERE co_product_id       = p_co_product_id
370   AND   co_product_group_id = p_co_product_group_id
371   AND   organization_id     = p_organization_id;
372 
373 EXCEPTION
374   WHEN OTHERS THEN
375     x_err_code:= -1;
376     x_err_msg := 'WSM_SPLIT_PERC_PVT.delete_row :' || SQLCODE || '  :' || substr(SQLERRM,1,1000);
377     RETURN;
378 END delete_row;
379 
380  /*---------------------------------------------------------------------------+
381  | Procedure to delete all the records pertaining to a co product group id in |
382  | the split percentages table						      |
383  +---------------------------------------------------------------------------*/
384 PROCEDURE delete_all_range(x_err_code                OUT NOCOPY NUMBER,
385 			   x_err_msg	             OUT NOCOPY VARCHAR2,
386 			   p_organization_id   	     IN NUMBER,
387 			   p_co_product_group_id     IN NUMBER) IS
388 BEGIN
389 
390   x_err_code := 0;
391   x_err_msg  := NULL;
392 
393   DELETE FROM WSM_COPRODUCT_SPLIT_PERC
394   WHERE co_product_group_id = p_co_product_group_id
395   AND   organization_id     = p_organization_id;
396 
397 EXCEPTION
398   WHEN OTHERS THEN
399     x_err_code:= -1;
400     x_err_msg := 'WSM_SPLIT_PERC_PVT.delete_all_range :' || SQLCODE || '  :' || substr(SQLERRM,1,1000);
401     RETURN;
402 END delete_all_range;
403 
404 
405  /*---------------------------------------------------------------------------+
406  | Procedure to ensure that that no two ranges are overlapping in the time    |
407  | frame. Called immediately after inserting a new split eff. range           |
408  +---------------------------------------------------------------------------*/
409 PROCEDURE process_records ( l_co_product_gr_id  IN  NUMBER,
410          		    from_eff_dt         IN  DATE,
411 			    to_eff_dt           IN  DATE,
412 			    x_err_code          OUT NOCOPY NUMBER,
413 			    x_err_msg		OUT NOCOPY VARCHAR2) IS
414   h_eff_date DATE;    /*Effective date of the range in which from_eff_dt falls*/
415   h_disable_date DATE; /*Disable date of the range in which to_eff_dt falls*/
416   intersect_exists NUMBER := 0;
417   stmt_num NUMBER;
418 
419   /* for debug purposes..*/
420   l_debug  varchar2(200);
421 
422 BEGIN
423 
424      x_err_code := 0;
425      x_err_msg  := NULL;
426 
427      delete from wsm_coproduct_split_perc
428      where co_product_group_id = l_co_product_gr_id
429      and ( (effectivity_date >= from_eff_dt  and
430               ((disable_date is not null  and  disable_date < nvl(to_eff_dt,disable_date+1))
431               OR
432               ((disable_date is NULL) and (to_eff_dt is NULL) and effectivity_date > from_eff_dt))
433             )
434             OR
435             (effectivity_date > from_eff_dt and
436               (disable_date is not null and disable_date <= nvl(to_eff_dt,disable_date+1))
437             )
438           );
439 
440      /*Look for following 2 mutually exclusive possibilities:
441                1.New range entered is a sub set of existing effective range.
442                2.New range is intersecting 1/2 existing eff ranges.*/
443 
444 
445      stmt_num := 10;
446 
447      select max(effectivity_date)
448      into h_eff_date
449      from wsm_coproduct_split_perc
450      where co_product_group_id = l_co_product_gr_id
451      and  effectivity_date <= from_eff_dt
452      and  not ( effectivity_date = from_eff_dt
453                 and
454                 (
455                   (disable_date is null and to_eff_dt is null)
456                    or
457                    (disable_date=nvl(to_eff_dt,disable_date + 1))
458                 )
459               );
460 
461 
462      h_disable_date := null;
463      intersect_exists := 0;
464 
465      IF to_eff_dt IS NOT NULL THEN
466 
467         /*   D1------------------------> D10
471   	select min(disable_date)
468 	           D5------------------> D10  ( new record .. no overlap ) */
469 
470         stmt_num := 20;
472 	into h_disable_date
473 	from wsm_coproduct_split_perc
474 	where co_product_group_id = l_co_product_gr_id
475 	and   nvl(disable_date,to_eff_dt+1) >= to_eff_dt
476 	and   not (effectivity_date = from_eff_dt  and  nvl(disable_date,to_eff_dt+1) = to_eff_dt);
477 
478 
479 	--If  the following SQL selects a record, it is Possibility 1
480 	--  Existing range is D10 ---------  D30 -----------D40
481 	-- new range is            D15-- D25
482 
483      	BEGIN
484 
485 		/* if D10-------------> D20 ------> D22-----> D24 -----------> D25 --------------------> null
486 		                        D20 --------------------------------------------> D35  ( again no intersect)
487                        D15 ------------------------------------------> D25 ( again no intersect )
488                        D15 ---------------------------------------------------------------------> null ( NO INTERSECT )
489                                                                                 D35 --------------> NULL ( NO INTERSECT )
490 
491                                      D21 --------------------------------------------> D35 ( NO intersect )
492                                      D21 ----------------------> D27 ( NO INTERSECT )
493 
494                                                                                      D35 -------> D50 ( INTERSECT )
495                  D5 --------> D12 ( INTERSECT )
496                           */
497 
498 
499 		stmt_num := 30;
500 
501 		select 1
502 		into intersect_exists
503 		from wsm_coproduct_split_perc
504 		where co_product_group_id = l_co_product_gr_id
505 		and effectivity_date < from_eff_dt
506 		and effectivity_date <= h_eff_date
507 		and ((  (disable_date is not null )
508                 	and
509 			( disable_date = nvl(h_disable_date,disable_date+1) )
510 			)
511 			OR
512 			(
513 			disable_date is null and h_disable_date is null and to_eff_dt is  not null
514 			)
515 		);
516 
517 
518 	EXCEPTION
519 		when NO_DATA_FOUND then
520 			--Partial Intersection exists
521 			intersect_exists := 0;
522 		WHEN TOO_MANY_ROWS THEN
523 			intersect_exists := 1;
524 	END;
525 
526      END IF;
527 
528 
529      if intersect_exists = 1 then
530          -- Exists D1-D20. Insert D5-D10.
531 
532         IF h_eff_date <> from_eff_dt THEN
533 
534 		stmt_num := 40;
535 
536 		insert into wsm_coproduct_split_perc (
537 			co_product_group_id,
538 			co_product_id,
539 			ORGANIZATION_ID,
540 			CREATION_DATE,
541 			CREATED_BY     ,
542 			LAST_UPDATE_DATE,
543 			LAST_UPDATED_BY,
544 			LAST_UPDATE_LOGIN,
545 			REVISION,
546 			SPLIT  ,
547 			EFFECTIVITY_DATE,
548 			DISABLE_DATE,
549 			PRIMARY_FLAG)
550 		(select co_product_group_id,
551 			co_product_id,
552 			ORGANIZATION_ID,
553 			CREATION_DATE,
554 			CREATED_BY,
555 			LAST_UPDATE_DATE,
556 			LAST_UPDATED_BY,
557 			LAST_UPDATE_LOGIN,
558 			REVISION,
559 			SPLIT,
560 			h_eff_date,
561 			from_eff_dt,
562 			PRIMARY_FLAG
563 		from   wsm_coproduct_split_perc
564 		where  co_product_group_id = l_co_product_gr_id
565 		and    effectivity_date = h_eff_date
566 		and    ((disable_date IS NULL and h_disable_date IS NULL) OR (disable_date IS NOT NULL AND (disable_date = nvl(h_disable_date,disable_date+1)))));
567        	end if;
568 
569         if (nvl(h_disable_date,to_eff_dt+1) <> to_eff_dt) THEN
570 
571        		stmt_num := 50;
572 
573 		insert into wsm_coproduct_split_perc (
574 			co_product_group_id,
575 			co_product_id,
576 			ORGANIZATION_ID,
577 			CREATION_DATE,
578 			CREATED_BY     ,
579 			LAST_UPDATE_DATE,
580 			LAST_UPDATED_BY,
581 			LAST_UPDATE_LOGIN,
582 			REVISION,
583 			SPLIT  ,
584 			EFFECTIVITY_DATE,
585 			DISABLE_DATE,
586 			PRIMARY_FLAG)
587 		(select co_product_group_id,
588 			co_product_id,
589 			ORGANIZATION_ID,
590 			CREATION_DATE,
591 			CREATED_BY     ,
592 			LAST_UPDATE_DATE,
593 			LAST_UPDATED_BY,
594 			LAST_UPDATE_LOGIN,
595 			REVISION,
596 			SPLIT,
597 			to_eff_dt,
598 			h_disable_date,
599 			PRIMARY_FLAG
600 		from   wsm_coproduct_split_perc
601 		where  co_product_group_id = l_co_product_gr_id
602 		and    ((disable_date IS NULL and h_disable_date IS NULL) OR (disable_date IS NOT NULL AND (disable_date = nvl(h_disable_date,disable_date+1))))
603 		and    not(effectivity_date = from_eff_dt));
604 
605 
606 	end if;
607 
608 	stmt_num := 60;
609 
610 	delete from wsm_coproduct_split_perc
611 	where co_product_group_id = l_co_product_gr_id
612 	and effectivity_date = h_eff_date
613 	and ((disable_date IS NULL and h_disable_date IS NULL) OR (disable_date IS NOT NULL AND (disable_date = nvl(h_disable_date,disable_date+1))));
614 	--End of possibility 1.
615 
616 	return;
617 
618      end if;
619 
620      /* Now, need to update D15-D20 period as D16-D20*/
621      --Possibility 2
622      stmt_num := 70;
623 
624      IF to_eff_dt is not null THEN
625 
626      	update wsm_coproduct_split_perc
627 	set effectivity_date = to_eff_dt
628 	where co_product_group_id = l_co_product_gr_id
629 	and  ((disable_date IS NULL and h_disable_date IS NULL) OR (disable_date IS NOT NULL AND (disable_date = nvl(h_disable_date,disable_date+1))));
630 
631      end if;
632 
633 
634      /* Suppose we changed dates from D7-D16 instead of D5-D16, we need to
638 
635         update D5-D10 to D5-D7*/
636 
637      stmt_num := 80;
639      update wsm_coproduct_split_perc
640      set disable_date = from_eff_dt
641      where co_product_group_id = l_co_product_gr_id
642      and   effectivity_date = h_eff_date;
643 
644  EXCEPTION
645   WHEN OTHERS THEN
646     x_err_code := -1;
647     x_err_msg  := 'WSM_SPLIT_PERC_PVT .process_records : stmt : ' || stmt_num || '  ' || SQLCODE || '  :' || substr(SQLERRM,1,1000);
648     RETURN;
649 end process_records;
650 
651  /*---------------------------------------------------------------------------+
652  | Procdure to check if the update of comp. eff/ disable date will cause      |
653  | the deletion of any existent ranges					      |
654  +---------------------------------------------------------------------------*/
655 
656  /* This procedure is not used as comp. eff./diable date will not be related to the
657     co product eff/disable dates */
658 
659 FUNCTION validate_range (p_co_product_group_id  IN NUMBER,
660  			 p_organization_id      IN NUMBER,
661 			 p_effectivity_date     IN DATE,
662 			 p_disable_date	  IN DATE)  RETURN NUMBER IS
663 
664   l_retval  NUMBER:=0;
665   l_num     NUMBER:=0;
666 
667 BEGIN
668   -- Determine if any of the ranges have a lesser effectivity dates.
669 
670   BEGIN
671     select 1
672     into l_num
673     from WSM_COPRODUCT_SPLIT_PERC
674     where organization_id  =  p_organization_id
675     and   co_product_group_id = p_co_product_group_id
676     and   disable_date is not NULL
677     and   disable_date <= p_effectivity_date;
678 
679 
680     l_retval:=l_retval+1;
681   EXCEPTION
682     WHEN NO_DATA_FOUND THEN
683       null;
684     WHEN TOO_MANY_ROWS THEN
685       l_num := 1;
686       l_retval := l_retval + 1;
687   END;
688 
689   -- Determine if any of the ranges has a higher effectivity dates.
690 
691   BEGIN
692     IF p_disable_date is NOT NULL THEN
693     	select 1
694 	into l_num
695 	from WSM_COPRODUCT_SPLIT_PERC
696 	where organization_id  =  p_organization_id
697 	and   co_product_group_id = p_co_product_group_id
698 	and   effectivity_date >= p_disable_date;
699 
700        	l_retval:=l_retval+2;
701     END IF;
702 
703   EXCEPTION
704     WHEN NO_DATA_FOUND THEN
705       null;
706     WHEN TOO_MANY_ROWS THEN
707        l_num :=  1;
708        	l_retval:=l_retval+2;
709   END;
710 
711   RETURN l_retval;
712 END validate_range;
713 
714  /*---------------------------------------------------------------------------+
715  | Procdure to update/delete any existent ranges that would be affected by the|
716  | the update of comp. eff. date/ disable date  			      |
717  +---------------------------------------------------------------------------*/
718 
719  /* This procedure is not used as comp. eff./diable date will not be related to the
720     co product eff/disable dates */
721 
722 PROCEDURE update_split_range(x_err_code 		OUT NOCOPY NUMBER,
723 			     x_err_msg  		OUT NOCOPY VARCHAR2,
724 			     p_organization_id          IN NUMBER,
725 			     p_co_product_group_id      IN NUMBER,
726 			     p_effectivity_date		IN DATE,
727 			     p_disable_date		IN DATE,
728 			     p_update_range             IN NUMBER
729 			     ) IS
730 
731   l_num NUMBER:=0;
732 BEGIN
733 
734   -- Indicates that effe. date will result in some deletion
735   IF p_update_range IN (1,3) THEN
736   	-- delete any range which has the disable date less than or equal to the
737 	-- new effectivity date
738 	DELETE FROM WSM_COPRODUCT_SPLIT_PERC
739 	WHERE  organization_id = p_organization_id
740 	AND    co_product_group_id = p_co_product_group_id
741 	AND    disable_date is NOT NULL
742 	AND    disable_date <= p_effectivity_date;
743   END IF;
744 
745   -- Update the effect. date of the range that has the effec. date less than the
746   -- new effectivity date
747   UPDATE WSM_COPRODUCT_SPLIT_PERC
748   SET effectivity_date = p_effectivity_date
749   WHERE organization_id = p_organization_id
750   AND   co_product_group_id = p_co_product_group_id
751   AND   effectivity_date < p_effectivity_date;
752 
753   -- Indicates that some range has to be deleted due to the new disable date..
754   IF p_update_range IN (2,3) THEN
755   	-- delete any range which has the effective date greater than or equal
756 	-- to the new disable date..
757 	DELETE
758 	FROM WSM_COPRODUCT_SPLIT_PERC
759 	WHERE  organization_id = p_organization_id
760 	AND    co_product_group_id = p_co_product_group_id
761 	AND    effectivity_date >= NVL(p_disable_date,effectivity_date-1);
762 
763   END IF;
764 
765   BEGIN
766   	-- check if any NULL disable date exist..
767         l_num := 0;
768 
769 	select 1
770 	into l_num
771 	from WSM_COPRODUCT_SPLIT_PERC
772 	WHERE  organization_id = p_organization_id
773 	AND    co_product_group_id = p_co_product_group_id
774 	AND    disable_date IS NULL;
775 
776   EXCEPTION
777        	WHEN NO_DATA_FOUND THEN
778 		l_num := 0;
779 
780 	WHEN TOO_MANY_ROWS THEN
781 		l_num := 1;
782   END;
783 
784   IF l_num = 1 THEN
785 	-- disable date has been changed from NULL to a non-null value...
786 	-- so update all records with NULL disable date.
787 	IF p_disable_date IS NOT NULL THEN
788 		UPDATE WSM_COPRODUCT_SPLIT_PERC
789 		SET disable_date = p_disable_date
790 		WHERE  organization_id = p_organization_id
791 		AND    co_product_group_id = p_co_product_group_id
792 		AND    disable_date is NULL;
793 
794         END IF;
795   ELSIF l_num = 0 THEN
796 
800 	SET disable_date = p_disable_date
797 	-- No records exist with NULL disable date
798 
799 	UPDATE WSM_COPRODUCT_SPLIT_PERC
801 	WHERE  organization_id = p_organization_id
802 	AND    co_product_group_id = p_co_product_group_id
803 	AND    disable_date IN ( SELECT MAX(disable_date)
804 	 			 FROM WSM_COPRODUCT_SPLIT_PERC
805 				 WHERE  organization_id = p_organization_id
806 				 AND    co_product_group_id = p_co_product_group_id);
807   END IF;
808 
809 EXCEPTION
810   WHEN OTHERS THEN
811     x_err_code := -1;
812     x_err_msg  := 'WSM_SPLIT_PERC_PVT.update_split_range : ' || SQLCODE || substr(SQLERRM,1,1000);
813     RETURN;
814 END update_split_range;
815 
816  /*---------------------------------------------------------------------------+
817  | Procedure to insert a co-product in all ranges of a co-product group id    |
818  | with split perc 0% in case of sec. co-product and 100% in case of          |
819  | primary co-product							      |
820  +---------------------------------------------------------------------------*/
821 
822 PROCEDURE insert_co_product_range(x_err_code 		  OUT NOCOPY NUMBER,
823  				   x_err_msg		  OUT NOCOPY VARCHAR2,
824  				   p_co_product_group_id  IN NUMBER,
825 				   p_co_product_id	  IN NUMBER,
826 				   p_revision		  IN VARCHAR2,
827 				   p_split      	  IN NUMBER,
828 				   p_primary_flag 	  IN VARCHAR2,
829  			   	   p_organization_id      IN NUMBER,
830 				   p_effectivity_date     IN DATE,
831 				   p_disable_date	  IN DATE,
832 				   p_creation_date	  IN DATE,
833 				   p_created_by 	  IN NUMBER,
834 				   p_last_update_date	  IN DATE,
835 				   p_last_updated_by 	  IN NUMBER
836 				   ) IS
837   CURSOR range_cursor IS select distinct effectivity_date,disable_date
838 	 		 from WSM_COPRODUCT_SPLIT_PERC
839 			 where co_product_group_id= p_co_product_group_id;
840 
841   l_num 	   NUMBER:=0;
842 
843   l_err_code       NUMBER:=0;
844   l_err_msg        VARCHAR2(2000);
845 
846 
847 BEGIN
848   /*---------------------------------------------------------------+
849   | first check if any range exist for this co-product-group_id    |
850   +---------------------------------------------------------------*/
851 
852   BEGIN
853   	select 1
854 	into l_num
855 	from WSM_COPRODUCT_SPLIT_PERC
856 	WHERE co_product_group_id = p_co_product_group_id ;
857 
858   EXCEPTION
859         WHEN NO_DATA_FOUND THEN
860 	  l_num :=0;
861 	WHEN TOO_MANY_ROWS THEN
862 	  l_num := 1;
863   END;
864 
865   /* If the value of l_num = 0 then no records exist.. use the
866      value of p_effectivity_date and disable date passed... */
867 
868   IF (l_num=0) THEN
869     -- insert using the date data passed
870     WSM_SPLIT_PERC_PVT.insert_row(x_err_code 		 =>  l_err_code,
871 			        x_err_msg          	 =>  l_err_msg,
872 				p_co_product_id  	 =>  p_co_product_id,
873 		     		p_co_product_group_id    =>  p_co_product_group_id,
874 		    	        p_organization_id	 =>  p_organization_id,
875 		   	        p_revision	         =>  p_revision,
876 	   		        p_split			 =>  p_split,
877 		                p_primary_flag		 =>  p_primary_flag,
878 		                p_effectivity_date	 =>  p_effectivity_date,
879 		                p_disable_date		 =>  p_disable_date,
880 		                p_creation_date		 =>  p_creation_date,
881 		                p_created_by 		 =>  p_created_by,
882 		                p_last_update_date	 =>  p_last_update_date,
883 		                p_last_updated_by 	 =>  p_last_updated_by );
884     IF l_err_code <> 0 THEN
885    	  -- indicates that some error has occured....
886 	  x_err_code := l_err_code;
887 	  x_err_msg  := l_err_msg;
888 	  RETURN;
889     END IF;
890   ELSIF l_num=1 THEN
891      -- Indicates that the information resides in the db for this co-product...
892      -- so open the cursor and insert this data...
893      SAVEPOINT date_save;
894      FOR date_rec IN range_cursor LOOP
895         -- get the data and call the insert procedure....
896 	WSM_SPLIT_PERC_PVT.insert_row(x_err_code 	 =>  l_err_code,
897 			        x_err_msg          	 =>  l_err_msg,
898 				p_co_product_id  	 =>  p_co_product_id,
899 		     		p_co_product_group_id    =>  p_co_product_group_id,
900 		    	        p_organization_id	 =>  p_organization_id,
901 		   	        p_revision	         =>  p_revision,
902 	   		        p_split			 =>  p_split,
903 		                p_primary_flag		 =>  p_primary_flag,
904 		                p_effectivity_date	 =>  date_rec.effectivity_date,
905 		                p_disable_date		 =>  date_rec.disable_date,
906 		                p_creation_date		 =>  p_creation_date,
907 		                p_created_by 		 =>  p_created_by,
908 		                p_last_update_date	 =>  p_last_update_date,
909 		                p_last_updated_by 	 =>  p_last_updated_by );
910 	 IF l_err_code <> 0 THEN
911    	  	-- indicates that some error has occured....
912 		 ROLLBACK TO date_save;
913 	 	 x_err_code := l_err_code;
914 		 x_err_msg  := l_err_msg;
915 		 RETURN;
916 	 END IF;
917      END LOOP;
918      -- end of the cursor code...
919   END IF;
920 EXCEPTION
921   WHEN OTHERS THEN
922       x_err_code := -1;
923       x_err_msg  := 'WSM_SPLIT_PERC_PVT.insert_co_product_range : ' || SQLCODE || substr(SQLERRM,1,1000);
924       RETURN;
925 END insert_co_product_range;
926 
927 /*---------------------------------------------------------------------------+
928  | Procedure to check if there is atleast one co product of a co-prod group  |
929  | in the range passed that has a zero split percentage..	     	     |
930  +--------------------------------------------------------------------------*/
931 
932 FUNCTION check_split_perc_exists(x_err_code  	        OUT NOCOPY NUMBER,
936 				  p_effectivity_date    IN DATE,
933 				  x_err_msg   	        OUT NOCOPY VARCHAR2,
934 				  p_co_product_group_id IN NUMBER,
935 				  p_organization_id     IN NUMBER,
937 				  p_disable_date        IN DATE) RETURN BOOLEAN IS
938   l_num NUMBER:=0;
939   l_count NUMBER:=0;
940 BEGIN
941   x_err_code := 0;
942   x_err_msg := null;
943 
944   BEGIN
945 
946 	select 1
947 	into l_num
948 	from WSM_COPRODUCT_SPLIT_PERC
949 	where organization_id = p_organization_id
950 	and co_product_group_id = p_co_product_group_id
951 	and effectivity_date = p_effectivity_date
952 	and ((p_disable_date is NULL and disable_date is NULL) OR (p_disable_date = disable_date))
953 	and split = 0;
954 
955 	RETURN TRUE;
956 
957      EXCEPTION
958 
959 	WHEN NO_DATA_FOUND THEN
960 		RETURN FALSE;
961 
962 	WHEN TOO_MANY_ROWS THEN
963 	  	RETURN TRUE;
964  END;
965  EXCEPTION
966    WHEN OTHERS THEN
967       x_err_code := -1;
968       x_err_msg  := 'WSM_SPLIT_PERC_PVT.check_split_perc_exists : ' || SQLCODE || substr(SQLERRM,1,1000);
969       RETURN TRUE;
970 
971 END check_split_perc_exists;
972 
973  /*---------------------------------------------------------------------------+
974  | Procedure to check if there is atleast one range in wich the co product    |
975  | passed has a non-zero split percentage.. 				      |
976  +---------------------------------------------------------------------------*/
977 
978 FUNCTION check_split_perc_exists(x_err_code  	        OUT NOCOPY NUMBER,
979 				  x_err_msg   	        OUT NOCOPY VARCHAR2,
980 				  p_co_product_id       IN NUMBER,
981 				  p_co_product_group_id IN NUMBER,
982 				  p_organization_id     IN NUMBER ) RETURN BOOLEAN IS
983   l_num NUMBER:=0;
984   l_count NUMBER:=0;
985 BEGIN
986   x_err_code := 0;
987   x_err_msg := null;
988 
989   IF p_co_product_id IS NOT NULL THEN
990 
991     BEGIN
992     	/* one more check to be done here...
993 	   check if it is the only one left and it is the primary.. */
994 
995 	SELECT 1
996 	INTO l_num
997 	from WSM_COPRODUCT_SPLIT_PERC
998 	where organization_id = p_organization_id
999 	and co_product_group_id = p_co_product_group_id
1000 	and co_product_id <> p_co_product_id;
1001 
1002     EXCEPTION
1003         WHEN NO_DATA_FOUND THEN
1004 
1005 	 -- even though split may be more than 0..
1006 	 -- since this is the only co-product left can go ahead with the deletion.
1007 	  RETURN FALSE;
1008 
1009 	WHEN  TOO_MANY_ROWS THEN
1010 		NULL;
1011     END;
1012 
1013     BEGIN
1014 
1015 	SELECT 1
1016 	INTO l_num
1017 	from WSM_COPRODUCT_SPLIT_PERC
1018 	where organization_id = p_organization_id
1019 	and co_product_group_id = p_co_product_group_id
1020 	and co_product_id = p_co_product_id
1021 	and split > 0 ;
1022 
1023 	RETURN TRUE;
1024 
1025      EXCEPTION
1026 	WHEN NO_DATA_FOUND THEN
1027 		RETURN FALSE;
1028 
1029 	WHEN TOO_MANY_ROWS THEN
1030 	 	RETURN TRUE;
1031      END;
1032    ELSE
1033         -- Indicates that the check is for the full co-product-group-id
1034         --- selects the max. no. of ranges in which any co-product of the
1035 	-- given co_product_group_id has 0%
1036 /*Bug 3647337
1037 	select distinct max(count(*))
1038         into l_num
1039         from WSM_COPRODUCT_SPLIT_PERC
1040         where organization_id = p_organization_id
1041         and co_product_group_id = p_co_product_group_id
1042         and split = 0
1043 	group by co_product_id;
1044 */
1045 
1046 	-- selects the totla no. of ranges for a co_product_group_id
1047        /*3647337
1048 	select count(*)
1049 	into l_count
1050 	from WSM_COPRODUCT_SPLIT_DATES_V
1051 	where organization_id = p_organization_id
1052         and co_product_group_id = p_co_product_group_id;
1053        Bug 3647337*/
1054 
1055         --Following SQL is added for 3647337
1056 	select min(sum(split))
1057 	into l_num
1058 	from WSM_COPRODUCT_SPLIT_PERC
1059 	where organization_id = p_organization_id
1060         and co_product_group_id = p_co_product_group_id
1061         group by co_product_id;
1062 	-- If equal then atleast one co-product has 0% split in all the ranges..
1063 	--IF l_num=l_count THEN Bug 3647337
1064 	IF l_num=0 THEN --Bug 3647337
1065 	   -- Indicates that atleast one record exists with 0 in all the ranges.
1066 	   RETURN TRUE;
1067 	ELSE
1068 	  RETURN FALSE;
1069         END IF;
1070   END IF;
1071 
1072 EXCEPTION
1073    WHEN OTHERS THEN
1074       x_err_code := -1;
1075       x_err_msg  := 'WSM_SPLIT_PERC_PVT.check_split_perc_exists : ' || SQLCODE || substr(SQLERRM,1,1000);
1076       RETURN TRUE;
1077 
1078 END check_split_perc_exists;
1079 
1080  /*---------------------------------------------------------------------------+
1081  | Procedure to check if a co-product group id had got only one	split 	      |
1082  | effectivity range							      |
1083  +---------------------------------------------------------------------------*/
1084 
1085 FUNCTION check_unique_range(x_err_code  	        OUT NOCOPY NUMBER,
1086 		             x_err_msg   	        OUT NOCOPY VARCHAR2,
1087 			     p_co_product_group_id      IN NUMBER,
1088 			     p_organization_id          IN NUMBER )  RETURN BOOLEAN IS
1089 
1090   l_num NUMBER := 0;
1091 BEGIN
1092   x_err_code := 0;
1093   x_err_msg  := null;
1094 
1095   /*3647337
1096   SELECT count(*)
1097   INTO   l_num
1098   FROM   WSM_COPRODUCT_SPLIT_DATES_V
1099   where organization_id = p_organization_id
1100   and co_product_group_id = p_co_product_group_id;
1101   3647337*/
1102   --Following SQL is added for 3647337
1103   SELECT count(*)
1104   INTO   l_num
1105   FROM WSM_COPRODUCT_SPLIT_PERC
1106   where organization_id = p_organization_id
1107   and co_product_group_id = p_co_product_group_id
1108   group by EFFECTIVITY_DATE;
1109 
1110   IF l_num > 1 THEN
1111      RETURN TRUE;
1112   ELSE
1113      RETURN FALSE;
1114   END IF;
1115 EXCEPTION
1116    WHEN OTHERS THEN
1117       x_err_code := -1;
1118       x_err_msg  := 'WSM_SPLIT_PERC_PVT.check_unique_range : ' || SQLCODE || substr(SQLERRM,1,1000);
1119       RETURN TRUE;
1120 END check_unique_range;
1121 
1122  /*---------------------------------------------------------------------------+
1123  | Procedure to check if the new eff. range ( eff date/ disable date ) 	      |
1124  | will cause any existing ranges to be deleted				      |
1125  +---------------------------------------------------------------------------*/
1126 
1127 FUNCTION check_any_del_range ( p_co_product_group_id  IN NUMBER,
1128  			       p_organization_id      IN NUMBER,
1129 			       p_effectivity_date     IN DATE,
1130 			       p_disable_date	  IN DATE)  RETURN NUMBER IS
1131 
1132   l_retval  NUMBER:=0;
1133   l_num     NUMBER:=0;
1134 
1135 BEGIN
1136 
1137   -- Determine if any of the ranges has a higher effectivity dates.
1138   BEGIN
1139     IF p_disable_date IS NOT NULL THEN
1140 
1141 	/* This deals with situations like
1142           D10 ---------> D30--------------> NULL
1143 	  and the user is entering
1144 	  D5 -------------> D35
1145        */
1146 	SELECT 1
1147 	INTO l_num
1148         FROM WSM_COPRODUCT_SPLIT_PERC
1149         where organization_id  =  p_organization_id
1150         and   co_product_group_id = p_co_product_group_id
1151 	and   disable_date is NOT NULL
1152 	and   effectivity_date >= p_effectivity_date
1153 	and   disable_date<=p_disable_date;
1154 
1155 
1156     	l_retval:=1;
1157     ELSE
1158 
1159        /* This deals with situations like
1160           D10 ---------> D30
1161 	  and the user is entering
1162 	  D5 -------------> NULL
1163        */
1164 
1165        SELECT 1
1166        INTO l_num
1167        FROM WSM_COPRODUCT_SPLIT_PERC
1168        WHERE organization_id  =  p_organization_id
1169        and   co_product_group_id = p_co_product_group_id
1170        and   disable_date is NOT NULL
1171        and   effectivity_date >= p_effectivity_date;
1172 
1173        l_retval := 1;
1174 
1175     END IF;
1176 
1177   EXCEPTION
1178     WHEN NO_DATA_FOUND THEN
1179       null;
1180      WHEN TOO_MANY_ROWS THEN
1181        l_retval := 1;
1182   END;
1183 
1184   RETURN l_retval;
1185 END check_any_del_range;
1186 
1187 
1188  /*---------------------------------------------------------------------------+
1189  | Procedure to check if a range is preexisting			 	      |
1190  +---------------------------------------------------------------------------*/
1191 
1192 FUNCTION check_unique(x_err_code  	        OUT NOCOPY NUMBER,
1193 		      x_err_msg   	        OUT NOCOPY VARCHAR2,
1194 		      p_co_product_group_id      IN NUMBER,
1195 		      p_organization_id          IN NUMBER,
1196 		      p_effectivity_date 	 IN DATE,
1197 		      p_disable_date 		 IN DATE)  RETURN BOOLEAN IS
1198 
1199    l_num NUMBER := 0;
1200 
1201 BEGIN
1202   x_err_code := 0;
1203   x_err_msg  := null;
1204 
1205   BEGIN
1206   	IF p_disable_date is NULL THEN
1207 
1208 	     SELECT 1
1209 	     INTO  l_num
1210 	     FROM WSM_COPRODUCT_SPLIT_PERC
1211 	     WHERE organization_id  =  p_organization_id
1212 	     AND   co_product_group_id = p_co_product_group_id
1213 	     AND   effectivity_date = p_effectivity_date
1214 	     AND   disable_date IS NULL;
1215 
1216 	     RETURN FALSE;
1217 
1218 	ELSE
1219 
1220 	     SELECT 1
1221 	     INTO  l_num
1222 	     FROM WSM_COPRODUCT_SPLIT_PERC
1223 	     WHERE organization_id  =  p_organization_id
1224 	     AND   co_product_group_id = p_co_product_group_id
1225 	     AND   effectivity_date = p_effectivity_date
1226 	     AND   disable_date = p_disable_date;
1227 
1228 	     RETURN FALSE;
1229 
1230 	END IF;
1231 
1232  EXCEPTION
1233       WHEN TOO_MANY_ROWS THEN
1234       	   RETURN FALSE; /* when multiple co-products exist in def. */
1235 
1236       WHEN NO_DATA_FOUND THEN
1237       	   RETURN TRUE;
1238  END;
1239 
1240 EXCEPTION
1241    WHEN OTHERS THEN
1242       x_err_code := -1;
1243       x_err_msg  := 'WSM_SPLIT_PERC_PVT.check_unique : ' || SQLCODE || substr(SQLERRM,1,1000);
1244       RETURN TRUE;
1245 
1246 END check_unique;
1247 
1248 END WSM_SPLIT_PERC_PVT;