DBA Data[Home] [Help]

PACKAGE BODY: APPS.XTR_COMMON_FUNCTIONS

Source


1 PACKAGE BODY XTR_COMMON_FUNCTIONS as
2 /* $Header: xtrfuncb.pls 120.3 2006/08/23 05:32:47 kbabu noship $ */
3 
4 --------------------------------------
5 -- declaration of public procedures and functions
6 --------------------------------------
7 
8 /**
9  * FUNCTION DEAL_STATUS_CHECK
10  *
11  * DESCRIPTION
12  * This function returns True if the statis of the Deal is Current.
13  *
14  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
15  *
16  * ARGUMENTS
17  *   IN:
18  *	p_deal_number			Deal Number of the Deal for which
19  *					Status is to be determined.
20  *   IN/OUT:
21  *
22  *   OUT:
23  *	True if Deal Status is Current. False for all other statuses.
24  *
25  * NOTES
26  *	Originally from DEAL_STATUS_CHECK in XTRUTIL.pld
27  *
28  * MODIFICATION HISTORY
29  *
30  *   14-JUN-2005    Rajesh Jose        	o Created.
31  *
32  */
33 
34 FUNCTION DEAL_STATUS_CHECK(
35 		p_deal_number IN XTR_DEALS.DEAL_NO%TYPE) RETURN BOOLEAN IS
36 
37  CURSOR	chk_status is
38  SELECT	1
39  FROM	xtr_deals_v
40  WHERE	deal_no     = p_deal_number
41  AND	status_code = 'CURRENT';
42 
43  l_dummy        number(1);
44 
45 BEGIN
46   OPEN	chk_status;
47   FETCH	chk_status
48   INTO	l_dummy;
49 
50   IF 	chk_status%FOUND THEN
51 	CLOSE chk_status;
52         RETURN (TRUE);
53   ELSE
54 	CLOSE chk_status;
55         RETURN (false);
56   END IF;
57 
58 END;
59 
60 /**
61  * FUNCTION INTEREST_OVERRIDE_CHECK
62  *
63  * DESCRIPTION
64  * Determines whether the user has the authority to override interest.
65  *
66  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
67  *
68  * ARGUMENTS
69  *   IN:
70  *   IN/OUT:
71  *   OUT:
72  *	TRUE if the user has the authority to override interest. Else False.
73  *
74  * NOTES
75  *	Originally from INTEREST_OVERRIDE_CHECK in XTRUTIL.pld
76  *
77  * MODIFICATION HISTORY
78  *
79  *   14-JUL-2005    Rajesh Jose        	o Created.
80  */
81 
82 FUNCTION INTEREST_OVERRIDE_CHECK return BOOLEAN IS
83 
84  l_allow_override VARCHAR2(1);
85 BEGIN
86  SELECT	allow_override
87  INTO	l_allow_override
88  FROM	Xtr_Dealer_Codes
89  WHERE	user_id = fnd_global.user_id;
90 
91  IF l_allow_override = 'Y' THEN
92 	RETURN(TRUE);
93  ELSE
94 	RETURN(FALSE);
95  END IF;
96 EXCEPTION
97  WHEN OTHERS THEN
98 	RETURN (FALSE);
99 END INTEREST_OVERRIDE_CHECK;
100 
101 /**
102  * FUNCTION    INTEREST_CHECK_COVER
103  *
104  * DESCRIPTION
105  *     Cover Function which calls the following functions
106  *		Settled_Interest_Check
107  *		Interest_Reval_Check
108  *		Interest_Accrual_Check
109  *		Interest_Jrnls_Check
110  *		Interest_Recon_Check
111  *		Settled_Int_Tax_Check
112  *
113  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
114  *
115  * ARGUMENTS
116  *   IN:
117  *	p_deal_type		Deal Type of the Deal
118  *	p_deal_number		Deal Number
119  *	p_transaction_number	Transaction Number
120  *	p_date			Date
121  *	p_maturity_date		Maturity Date of the Deal
122  *      p_check_intset_record   Flag to indicate whether the check should be
123  *                              done for INTSET records only.
124  *   IN/OUT:
125  *   OUT:
126  *	Returns False if any of the functions return False. Else returns True.
127  *
128  * NOTES
129  *	Originally from INTEREST_CHECK_COVER in XTRUTIL.pld
130  *
131  * MODIFICATION HISTORY
132  *
133  *   14-JUL-2005    Rajesh Jose        	o Created.
134  */
135 
136 FUNCTION INTEREST_CHECK_COVER(
137 	p_deal_type		IN	XTR_DEALS.DEAL_TYPE%TYPE,
138 	p_deal_number		IN	XTR_DEALS.DEAL_NO%TYPE,
139 	p_transaction_number	IN	XTR_DEALS.TRANSACTION_NO%TYPE
140 						DEFAULT NULL,
141 	p_date			IN	DATE	DEFAULT NULL,
142 	p_maturity_date		IN	DATE	DEFAULT NULL,
143 	p_check_intset_record	IN	VARCHAR2 DEFAULT 'N') RETURN BOOLEAN IS
144 
145 BEGIN
146 
147 	IF NOT XTR_COMMON_FUNCTIONS.SETTLED_INTEREST_CHECK(
148 			p_deal_type, p_deal_number,
149 			p_transaction_number, p_date, p_maturity_date,
150 			p_check_intset_record) THEN
151                 RETURN FALSE;
152         END IF;
153 
154         IF (NOT XTR_COMMON_FUNCTIONS.INTEREST_REVALUED_CHECK(
155 			p_deal_type, p_deal_number,
156 			p_transaction_number, p_date)) THEN
157                 RETURN FALSE;
158         END IF;
159 
160         IF (NOT XTR_COMMON_FUNCTIONS.INTEREST_ACCRUAL_CHECK(
161 			p_deal_type, p_deal_number,
162 			p_transaction_number, p_date)) THEN
163                 RETURN FALSE;
164         END IF;
165         IF (NOT XTR_COMMON_FUNCTIONS.INTEREST_JOURNAL_CHECK(
166 			p_deal_type, p_deal_number,
167 			p_transaction_number, p_date,
168 			p_check_intset_record)) THEN
169                 RETURN FALSE;
170         END IF;
171 
172         IF (NOT XTR_COMMON_FUNCTIONS.INTEREST_RECONCILED_CHECK(
173 			p_deal_type, p_deal_number,
174 			p_transaction_number, p_date)) THEN
175                 RETURN FALSE;
176         END IF;
177 
178         IF NOT XTR_COMMON_FUNCTIONS.SETTLED_INTEREST_TAX_CHECK(
179 			p_deal_type, p_deal_number,
180 			p_transaction_number, p_date, p_maturity_date) THEN
181                 RETURN FALSE;
182         END IF;
183 
184         RETURN TRUE;
185 
186 EXCEPTION
187  WHEN OTHERS THEN
188     RETURN( FALSE );
189 
190 END INTEREST_CHECK_COVER;
191 
192 /**
193  * FUNCTION SETTLED_INTEREST_CHECK
194  *
195  * DESCRIPTION
196  *	This function checks whether the input transaction has been settled.
197  *
198  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
199  *
200  * ARGUMENTS
201  *   IN:
202  *	p_deal_type		Deal Type of the Deal
203  *	p_deal_number		Deal Number
204  *	p_transaction_number	Transaction Number
205  *	p_date			Date
206  *	p_maturity_date		Maturity Date of the Deal
207  *      p_check_intset_record   Flag to indicate whether the check should be
208  *                              done for INTSET records only.
209  *   IN/OUT:
210  *   OUT:
211  *	Returns False if the transactions has been settled. Else returns True.
212  *
213  * NOTES
214  *	Originally from SETTLED_INTEREST_CHECK in XTRUTIL.pld
215  *
216  * MODIFICATION HISTORY
217  *
218  *   14-JUL-2005    Rajesh Jose        	o Created.
219  */
220 
221 FUNCTION SETTLED_INTEREST_CHECK(
222 	p_deal_type		IN	XTR_DEALS.DEAL_TYPE%TYPE,
223 	p_deal_number		IN	XTR_DEALS.DEAL_NO%TYPE,
224 	p_transaction_number	IN	XTR_DEALS.TRANSACTION_NO%TYPE
225 						DEFAULT NULL,
226 	p_date			IN	DATE	DEFAULT NULL,
227 	p_maturity_date		IN	DATE	DEFAULT NULL,
228 	p_check_intset_record	IN	VARCHAR2 DEFAULT 'N') RETURN BOOLEAN IS
229 
230  CURSOR	chk_settle_onc IS
231  SELECT 1
232  FROM  	xtr_deal_date_amounts dda
233  WHERE 	dda.deal_number = nvl(p_deal_number,dda.deal_number)
234  AND   	dda.transaction_number =
235 		nvl(p_transaction_number, dda.transaction_number)
236  AND   	settle='Y';
237 
238 CURSOR	chk_settle_onc_interest IS
239  SELECT 1
240  FROM  	xtr_deal_date_amounts dda
241  WHERE 	dda.deal_number = nvl(p_deal_number,dda.deal_number)
242  AND   	dda.transaction_number =
243 		nvl(p_transaction_number, dda.transaction_number)
244  AND   	settle='Y'
245  AND    actual_settlement_date > p_date --bug 5444438
246  AND	dda.amount_type = 'INTSET';
247 
248  CURSOR chk_settle_others(l_date date) IS
249  SELECT 1
250  FROM  xtr_deal_date_amounts dda
251  WHERE dda.deal_number = nvl(p_deal_number,dda.deal_number)
252  AND   settle='Y'
253  AND   amount_date > nvl(l_date,amount_date -1);
254 
255  l_dummy       number;
256  l_date        date;
257 
258 BEGIN
259 
260  IF p_deal_type in ('ONC') THEN
261 	IF p_check_intset_record = 'Y' THEN
262    		OPEN 	chk_settle_onc_interest;
263    		FETCH 	chk_settle_onc_interest
264 		INTO	l_dummy;
265 
266    		IF chk_settle_onc_interest%NOTFOUND THEN
267         		CLOSE chk_settle_onc_interest;
268 			RETURN TRUE;
269    		ELSE
270         		CLOSE chk_settle_onc_interest;
271         		RETURN FALSE;
272    		END IF;
273 	ELSE
274    		OPEN 	chk_settle_onc;
275    		FETCH 	chk_settle_onc
276 		INTO	l_dummy;
277 
278    		IF chk_settle_onc%NOTFOUND THEN
279         		CLOSE chk_settle_onc;
280 			RETURN TRUE;
281    		ELSE
282         		CLOSE chk_settle_onc;
283         		RETURN FALSE;
284    		END IF;
285 	END IF;
286  ELSE	/* Other deal type */
287 	IF p_deal_type='IRS' THEN
288         	l_date := p_maturity_date -1;
289    	ELSIF p_deal_type='BOND' THEN
290         	l_date := p_date -1;
291    	ELSE
292         	l_date := p_date;
293 	END IF;
294 
295 	OPEN 	chk_settle_others(l_date);
296 	FETCH	chk_settle_others
297 	INTO	l_dummy;
298 
299    	IF chk_settle_others%NOTFOUND THEN
300         	CLOSE chk_settle_others;
301 		RETURN TRUE;
302    	ELSE
303         	CLOSE chk_settle_others;
304         	RETURN FALSE;
305    	END IF;
306 END IF;
307 
308 EXCEPTION
309 WHEN OTHERS THEN
310 	RETURN FALSE;
311 END SETTLED_INTEREST_CHECK;
312 
313 /**
314  * FUNCTION INTEREST_REVALUED_CHECK
315  *
316  * DESCRIPTION
317  *	This function checks whether the input transaction has been revalued.
318  *
319  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
320  *
321  * ARGUMENTS
322  *   IN:
323  *	p_deal_type		Deal Type of the Deal
324  *	p_deal_number		Deal Number
325  *	p_transaction_number	Transaction Number
326  *	p_date			Date
327  *   IN/OUT:
328  *   OUT:
329  *	Returns False if the transaction has been revalued. Else returns True.
330  *
331  * NOTES
332  *	Originally from INTEREST_REVAL_CHECK in XTRUTIL.pld
333  *
334  * MODIFICATION HISTORY
335  *
336  *   14-JUL-2005    Rajesh Jose        	o Created.
337  */
338 
339 FUNCTION INTEREST_REVALUED_CHECK(
340 	p_deal_type		IN	XTR_DEALS.DEAL_TYPE%TYPE,
341 	p_deal_number		IN	XTR_DEALS.DEAL_NO%TYPE,
342 	p_transaction_number	IN	XTR_DEALS.TRANSACTION_NO%TYPE
343 						DEFAULT NULL,
344 	p_date			IN	DATE	DEFAULT NULL) RETURN BOOLEAN IS
345 
346  CURSOR chk_reval_tmm_irs(l_date date) IS
347  SELECT	max(period_end)
348  FROM	xtr_batches b,xtr_batch_events e,xtr_revaluation_details r
349  WHERE 	r.deal_no    = p_deal_number
350  AND 	r.batch_id   = b.batch_id
351  AND	b.batch_id   = e.batch_id
352  AND	e.event_code = 'REVAL'
353  AND 	period_to > nvl(l_date, period_to -1);
354 
355  CURSOR chk_reval_others IS
356  SELECT ('Y')
357  FROM	xtr_batches b,xtr_batch_events e,xtr_revaluation_details r
358  WHERE 	r.deal_no    = nvl(p_deal_number, r.deal_no)
359  AND 	r.batch_id   = b.batch_id
360  AND	b.batch_id   = e.batch_id
361  AND	e.event_code = 'REVAL'
362  AND	r.transaction_no =nvl(p_transaction_number,r.transaction_no);
363 
364  l_dummy       	VARCHAR2(1);
365  l_max  	DATE;
366  l_date		DATE;
367 
368 BEGIN
369 
370  IF p_deal_type in ('TMM','IRS') THEN
371    	IF (p_deal_type='IRS' AND p_date is not null) THEN
372 		l_date := p_date -1;
373    	ELSE
374 		l_date := p_date;
375    	END IF;
376 
377  	OPEN 	chk_reval_tmm_irs(l_date);
378 	FETCH	chk_reval_tmm_irs
379 	INTO	l_max;
380 
381 	IF l_max is null THEN
382 		CLOSE chk_reval_tmm_irs;
383         	RETURN TRUE;
384 	ELSE
385         	CLOSE chk_reval_tmm_irs;
386 		RETURN (FALSE);
387 	END IF;
388  ELSIF 	p_deal_type='BOND' THEN
389         	RETURN(TRUE);
390  ELSE
391   	OPEN 	chk_reval_others;
392   	FETCH	chk_reval_others
393 	INTO	l_dummy;
394 
395   	IF chk_reval_others%NOTFOUND THEN
396         	CLOSE chk_reval_others;
397         	RETURN (TRUE);
398   	ELSE
399         	CLOSE chk_reval_others;
400         	RETURN (FALSE);
401   	END IF;
402  END IF;
403 
404 EXCEPTION
405   	WHEN OTHERS THEN
406     		RETURN (FALSE);
407 END INTEREST_REVALUED_CHECK;
408 
409 /**
410  * FUNCTION INTEREST_ACCRUAL_CHECK
411  *
412  * DESCRIPTION
413  *	This function checks whether accruals have been passed for
414  *	the input transaction.
415  *
416  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
417  *
418  * ARGUMENTS
419  *   IN:
420  *	p_deal_type		Deal Type of the Deal
421  *	p_deal_number		Deal Number
422  *	p_transaction_number	Transaction Number
426  *	Returns False if the transaction has been accrued. Else returns True.
423  *	p_date			Date
424  *   IN/OUT:
425  *   OUT:
427  *
428  * NOTES
429  *	Originally from INTEREST_ACCRUAL_CHECK in XTRUTIL.pld
430  *
431  * MODIFICATION HISTORY
432  *
433  *   14-JUL-2005    Rajesh Jose        	o Created.
434  */
435 
436 FUNCTION INTEREST_ACCRUAL_CHECK(
437 	p_deal_type		IN	XTR_DEALS.DEAL_TYPE%TYPE,
438 	p_deal_number		IN	XTR_DEALS.DEAL_NO%TYPE,
439 	p_transaction_number	IN	XTR_DEALS.TRANSACTION_NO%TYPE
440 						DEFAULT NULL,
441 	p_date			IN	DATE	DEFAULT NULL) RETURN BOOLEAN IS
442 
443  l_accrual_check NUMBER;
444  l_period_end 	 DATE;
445 BEGIN
446  IF p_deal_type in ('TMM','IRS') AND p_date is not null THEN
447 	SELECT	max(period_to)
448    	INTO	l_period_end
449 	FROM	xtr_accrls_amort
450 	WHERE	deal_no=p_deal_number
451 	AND	period_to > p_date;
452 
453 	IF l_period_end IS NOT NULL THEN
454 		RETURN(FALSE);
455 	ELSE
456 		RETURN(TRUE);
457 	END IF;
458 
459  ELSE
460 	SELECT	count(deal_no)
461 	INTO	l_accrual_check
462 	FROM	Xtr_Accrls_Amort
463 	WHERE	deal_no = nvl(p_deal_number,deal_no)
464 	AND	Trans_no = nvl(p_transaction_number,Trans_no);
465 
466 	IF l_accrual_check = 0 THEN
467 		RETURN(TRUE);
468 	ELSE
469 		RETURN(FALSE);
470 	END IF;
471  END IF;
472 
473 EXCEPTION
474 	WHEN OTHERS THEN
475 		RETURN (FALSE);
476 
477 END INTEREST_ACCRUAL_CHECK;
478 
479 /**
480  * FUNCTION INTEREST_JOURNAL_CHECK
481  *
482  * DESCRIPTION
483  *	This function checks whether journals have been passed for
484  *	the input transaction.
485  *
486  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
487  *
488  * ARGUMENTS
489  *   IN:
490  *	p_deal_type		Deal Type of the Deal
491  *	p_deal_number		Deal Number
492  *	p_transaction_number	Transaction Number
493  *	p_date			Date
494  *   IN/OUT:
495  *   OUT:
496  *	Returns False if the transaction has been accrued. Else returns True.
497  *
498  * NOTES
499  *	Originally from INTEREST_JRNLS_CHECK in XTRUTIL.pld
500  *
501  * MODIFICATION HISTORY
502  *
503  *   14-JUL-2005    Rajesh Jose        	o Created.
504  */
505 
506 FUNCTION INTEREST_JOURNAL_CHECK(
507 	p_deal_type		IN	XTR_DEALS.DEAL_TYPE%TYPE,
508 	p_deal_number		IN	XTR_DEALS.DEAL_NO%TYPE,
509 	p_transaction_number	IN	XTR_DEALS.TRANSACTION_NO%TYPE
510 						DEFAULT NULL,
511 	p_date			IN	DATE	DEFAULT NULL,
512 	p_check_intset_record	IN	VARCHAR2 DEFAULT 'N') RETURN BOOLEAN IS
513 
514  CURSOR chk_jrnls IS
515  SELECT ('Y')
516  FROM	xtr_journals
517  WHERE	deal_number =nvl(p_deal_number, deal_number)
518  AND	transaction_number =nvl(p_transaction_number,transaction_number);
519 
520  CURSOR chk_jrnls_for_intset IS
521  SELECT ('Y')
522  FROM	xtr_journals
523  WHERE	deal_number =nvl(p_deal_number, deal_number)
524  AND	transaction_number =nvl(p_transaction_number,transaction_number)
525  AND	amount_type = 'INTSET'
526  AND    journal_date > p_date; -- for bug 5444438
527 
528  l_dummy       	varchar2(1);
529  l_intset_date  date;
530 BEGIN
531 
532  IF p_deal_type in ('TMM','IRS') AND p_date is not null THEN
533 	SELECT	max(journal_date)
534 	INTO	l_intset_date
535 	FROM	xtr_journals
536 	WHERE	deal_number = p_deal_number
537 	AND	amount_type = 'INTSET';
538 
539 	IF p_date < l_intset_date THEN
540 		RETURN FALSE;
541 	ELSE
542 		RETURN TRUE;
543 	END IF;
544  ELSE
545 	IF (p_deal_type = 'ONC' and p_check_intset_record = 'Y') THEN
546 		OPEN 	chk_jrnls_for_intset;
547 		FETCH	chk_jrnls_for_intset
548 		INTO	l_dummy;
549 
550 		IF chk_jrnls_for_intset%NOTFOUND THEN
551 			CLOSE chk_jrnls_for_intset;
552 			RETURN TRUE;
553 		ELSE
554 			CLOSE chk_jrnls_for_intset;
555 			RETURN FALSE;
556 		END IF;
557 	ELSE
558 		OPEN 	chk_jrnls;
559 		FETCH	chk_jrnls
560 		INTO	l_dummy;
561 
562 		IF chk_jrnls%NOTFOUND THEN
563 			CLOSE chk_jrnls;
564 			RETURN TRUE;
565 		ELSE
566 			CLOSE chk_jrnls;
567 			RETURN FALSE;
568 		END IF;
569 	END IF;
570  END IF;
571 
572 EXCEPTION
573 	WHEN OTHERS THEN
574 		RETURN(FALSE);
575 
576 END INTEREST_JOURNAL_CHECK;
577 
578 /**
579  * FUNCTION INTEREST_RECONCILED_CHECK
580  *
581  * DESCRIPTION
582  *	This function checks whether the transaction has been reconciled.
583  *
584  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
585  *
586  * ARGUMENTS
587  *   IN:
588  *	p_deal_type		Deal Type of the Deal
589  *	p_deal_number		Deal Number
590  *	p_transaction_number	Transaction Number
591  *	p_date			Date
592  *   IN/OUT:
593  *   OUT:
594  *	Returns False if the transaction has been reconciled. Else returns True.
595  *
596  * NOTES
597  *	Originally from INTEREST_RECON_CHECK in XTRUTIL.pld
598  *
599  * MODIFICATION HISTORY
600  *
601  *   14-JUL-2005    Rajesh Jose        	o Created.
602  */
603 
604 FUNCTION INTEREST_RECONCILED_CHECK(
605 	p_deal_type		IN	XTR_DEALS.DEAL_TYPE%TYPE,
606 	p_deal_number		IN	XTR_DEALS.DEAL_NO%TYPE,
607 	p_transaction_number	IN	XTR_DEALS.TRANSACTION_NO%TYPE
608 						DEFAULT NULL,
609 	p_date			IN	DATE	DEFAULT NULL) RETURN BOOLEAN IS
610 
611 CURSOR chk_recon IS
612 	SELECT	1
613 	FROM	XTR_DEAL_DATE_AMOUNTS_V
614 	WHERE	deal_number = nvl(p_deal_number, deal_number)
618 
615 	AND	transaction_number=nvl(p_transaction_number, transaction_number)
616 	AND	reconciled_pass_code is not null
617 	AND	reconciled_reference is not null;
619 l_dummy       number;
620 
621 BEGIN
622 
623  OPEN 	chk_recon;
624  FETCH 	chk_recon
625  INTO	l_dummy;
626 
627  IF chk_recon%NOTFOUND THEN
628 	CLOSE chk_recon;
629 	RETURN(TRUE);
630  ELSE
631 	CLOSE chk_recon;
632 	RETURN(FALSE);
633  END IF;
634 
635 EXCEPTION
636 	WHEN OTHERS THEN
637 		RETURN(FALSE);
638 END INTEREST_RECONCILED_CHECK;
639 
640 
641 /**
642  * FUNCTION SETTLED_INTEREST_TAX_CHECK
643  *
644  * DESCRIPTION
645  *	This function checks whether the tax exposure transaction for Bond
646  *	Deals has been settled.
647  *
648  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
649  *
650  * ARGUMENTS
651  *   IN:
652  *	p_deal_type		Deal Type of the Deal
653  *	p_deal_number		Deal Number
654  *	p_transaction_number	Transaction Number
655  *	p_date			Date
656  *	p_maturity_date		Maturity Date of the Deal
657  *   IN/OUT:
658  *   OUT:
659  *	Returns False if the tax exposure transaction has been settled.
660  *	Else returns True.
661  *
662  * NOTES
663  *	Originally from SETTLED_INT_TAX_CHECK in XTRUTIL.pld
664  *
665  * MODIFICATION HISTORY
666  *
667  *   14-JUL-2005    Rajesh Jose        	o Created.
668  */
669 
670 FUNCTION SETTLED_INTEREST_TAX_CHECK(
671 	p_deal_type		IN	XTR_DEALS.DEAL_TYPE%TYPE,
672 	p_deal_number		IN	XTR_DEALS.DEAL_NO%TYPE,
673 	p_transaction_number	IN	XTR_DEALS.TRANSACTION_NO%TYPE
674 						DEFAULT NULL,
675 	p_date			IN	DATE	DEFAULT NULL,
676 	p_maturity_date		IN	DATE	DEFAULT NULL) RETURN BOOLEAN IS
677 
678  v_trans_no 	NUMBER;
679  l_dummy       	NUMBER;
680  l_date        	DATE;
681 
682 CURSOR	get_later_trans IS
683  SELECT	transaction_number
684  FROM	xtr_rollover_transactions
685  WHERE	deal_number = p_deal_number
686  AND	maturity_date > l_date
687  AND	tax_amount IS NOT NULL;
688 
689 CURSOR 	chk_tax_settle is
690  SELECT 1
691  FROM	xtr_deal_date_amounts dda, xtr_rollover_transactions rt
692  WHERE	rt.deal_number=p_deal_number
693  AND	rt.transaction_number=v_trans_no
694  AND	dda.settle='Y'
695  AND	dda.deal_number=0
696  AND	dda.deal_type='EXP'
697  AND	((rt.tax_settled_reference IS NOT NULL
698  AND	dda.transaction_number=rt.tax_settled_reference)
699  OR	(rt.principal_tax_settled_ref is not null
700  AND	dda.transaction_number=rt.principal_tax_settled_ref));
701 
702 BEGIN
703  IF p_deal_type in ('BOND') THEN
704 	l_date := p_date-1;
705 	OPEN get_later_trans;
706 	LOOP
707 		FETCH	get_later_trans
708 		INTO	v_trans_no;
709 		EXIT WHEN get_later_trans%NOTFOUND;
710 		OPEN	chk_tax_settle;
711 		FETCH	chk_tax_settle
712 		INTO	l_dummy;
713 		IF chk_tax_settle%FOUND then
714 			CLOSE chk_tax_settle;
715 			RETURN FALSE;
716 		END IF;
717 		CLOSE chk_tax_settle;
718 	END LOOP;
719 	CLOSE get_later_trans;
720 	RETURN TRUE;
721 
722  ELSE /* Other deal type */
723 
724 	RETURN TRUE;
725 
726  END IF;
727 EXCEPTION
728 	WHEN OTHERS THEN
729 		RETURN (FALSE);
730 END SETTLED_INTEREST_TAX_CHECK;
731 
732 END XTR_COMMON_FUNCTIONS;
733