[Home] [Help]
PACKAGE BODY: APPS.OKL_SEEDED_FUNCTIONS_PVT
Source
1 PACKAGE BODY Okl_Seeded_Functions_Pvt AS
2 /* $Header: OKLRSFFB.pls 120.125.12010000.7 2009/01/12 23:24:25 apaul ship $ */
3
4 G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5 G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6 G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7
8 -- mvasudev, 10/10/2003
9 ----------------------------------------------------------------------------
10 -- Global Constants
11 ----------------------------------------------------------------------------
12 G_FINAL_DATE CONSTANT DATE := TO_DATE('1','j') + 5300000;
13
14 ----------------------------------------------------------------------------
15 -- Procedures and Functions
16 ----------------------------------------------------------------------------
17
18 ---------------------------------------------------------------------------
19 -- Start of Comments
20 -- FUNCTION: INS_MONTHLY_PREMIUM
21 -- DESC : It returns monthly insurance premium
22 -- IN : p_contract_id ,p_contract_line_id
23 -- OUT : Monthly Premium
24 -- Created By: Dalip Khandel (dkhandel)
25 -- Version: 1.0
26 -- End of Commnets
27 ----------------------------------------------------------------------------------------------------
28
29 FUNCTION INS_MONTHLY_PREMIUM(
30 p_contract_id IN NUMBER
31 ,p_contract_line_id IN NUMBER
32 ) RETURN NUMBER
33 IS
34 l_amount NUMBER := 0;
35 ls_payment_freq VARCHAR2(30) ;
36 l_monthly_premium NUMBER := 0;
37 l_freq_factor NUMBER := 0;
38 date_to DATE ;
39 date_from DATE ;
40
41 CURSOR c_monthly_premium (p_contract_id NUMBER,p_contract_line_id NUMBER )
42 IS
43 SELECT PREMIUM , IPF_CODE, DATE_TO , DATE_FROM
44 FROM OKL_INS_POLICIES_B IPYB
45 WHERE IPYB.kle_id = p_contract_line_id
46 AND IPYB.khr_id = p_contract_id ;
47
48 BEGIN
49
50 OPEN c_monthly_premium (p_contract_id,p_contract_line_id );
51 FETCH c_monthly_premium INTO l_amount, ls_payment_freq, date_to, date_from;
52 IF(c_monthly_premium%NOTFOUND) THEN
53 Okc_Api.set_message(G_APP_NAME, G_INVALID_CONTRACT_LINE,
54 G_COL_NAME_TOKEN,p_contract_line_id);
55 -- x_return_status := OKC_API.G_RET_STS_ERROR ;
56 CLOSE c_monthly_premium ;
57 RAISE OKC_API.G_EXCEPTION_ERROR;
58 END IF ;
59 CLOSE c_monthly_premium;
60
61 IF(ls_payment_freq = 'MONTHLY') THEN
62 l_freq_factor := 1;
63 ELSIF(ls_payment_freq = 'BI_MONTHLY') THEN
64 l_freq_factor := 1/2;
65 ELSIF(ls_payment_freq = 'HALF_YEARLY') THEN
66 l_freq_factor := 6; --- ETC.
67 ELSIF(ls_payment_freq = 'QUARTERLY') THEN
68 l_freq_factor := 3;
69 ELSIF(ls_payment_freq = 'YEARLY') THEN
70 l_freq_factor := 12;
71 ELSIF(ls_payment_freq = 'LUMP_SUM') THEN
72 -- Bug# 4056484 PAGARG removing rounding
73 l_freq_factor := MONTHS_BETWEEN( date_to,date_from);
74 END IF;
75 l_monthly_premium := l_amount / l_freq_factor ;
76 RETURN l_monthly_premium;
77 EXCEPTION
78 WHEN OTHERS THEN
79 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
80 p_msg_name => 'OKL_UNEXPECTED_ERROR',
81 p_token1 => 'OKL_SQLCODE',
82 p_token1_value => SQLCODE,
83 p_token2 => 'OKL_SQLERRM',
84 p_token2_value => SQLERRM);
85 RETURN NULL;
86
87 END;
88
89 ----------------------------------------------------------------------------------------------------
90
91
92 ---------------------------------------------------------------------------
93 -- Start of Comments
94 -- FUNCTION: INS_REFUNDABLE_MONTHS
95 -- DESC : It returns number of months to be refunded
96 -- IN : p_contract_id ,p_contract_line_id
97 -- OUT : Number of months
98 -- Created By: Dalip Khandel (dkhandel)
99 -- Version: 1.0
100 -- End of Commnets
101 ----------------------------------------------------------------------------------------------------
102
103 FUNCTION INS_REFUNDABLE_MONTHS(
104 p_contract_id IN NUMBER
105 -- ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
106 ,p_contract_line_id IN NUMBER
107 )
108 RETURN NUMBER
109 IS
110
111
112 CURSOR c_total_amount_paid (p_sty_id NUMBER)
113 IS
114 SELECT COUNT(*)
115 FROM okl_strm_elements STRE, OKL_STREAMS STR
116 WHERE STR.ID = STRE.STM_ID
117 AND STR.STY_ID = p_sty_id
118 AND STRE.DATE_BILLED IS NOT NULL
119 AND STR.KHR_ID = p_contract_id
120 AND STR.KLE_ID = p_contract_line_id;
121
122 CURSOR C_OKL_STRM_TYPE_REC_V IS
123 SELECT ID
124 FROM OKL_STRM_TYPE_TL
125 WHERE NAME = 'INSURANCE RECEIVABLE'
126 AND LANGUAGE = 'US';
127
128 CURSOR c_monthly_premium (p_contract_id NUMBER,p_contract_line_id NUMBER )
129 IS
130 SELECT IPF_CODE, DATE_TO , DATE_FROM --, CANCELLATION_DATE --++Effective DatedTermination ++---
131 FROM OKL_INS_POLICIES_B IPYB
132 WHERE IPYB.kle_id = p_contract_line_id
133 AND IPYB.khr_id = p_contract_id ;
134
135
136 ls_payment_freq OKL_INS_POLICIES_B.IPF_CODE%TYPE;
137 date_to OKL_INS_POLICIES_B.DATE_TO%TYPE ;
138 date_from OKL_INS_POLICIES_B.DATE_FROM%TYPE ;
139 cancel_date OKL_INS_POLICIES_B.CANCELLATION_DATE%TYPE;
140 l_stm_type_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
141
142
143 l_profile_value NUMBER := 0;
144 l_months_to_refund NUMBER := 0;
145
146 l_no_of_rec NUMBER := 0;
147 l_freq_factor NUMBER;
148 l_total_num_months_paid NUMBER;
149 l_total_consumed_months NUMBER;
150 l_unconsumed_months NUMBER;
151 l_cancellation_date DATE; ---++ Ins Effective Dated Term Changes ++----
152 l_cancellation_reason VARCHAR2(30);---++ Ins Effective Dated Term Changes ++----
153 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
154
155 BEGIN
156 -- ********************************************
157 -- Extract Insurance Cancellation Date from global variables
158 -- ********************************************
159 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(1)
160 AND okl_execute_formula_pub.g_additional_parameters(1).name = ' CANCELLATION DATE'
161 AND okl_execute_formula_pub.g_additional_parameters(1).value IS NOT NULL
162 THEN
163 l_cancellation_date := TO_DATE
164 (okl_execute_formula_pub.g_additional_parameters(1).value, 'MM/DD/YYYY');
165 END IF;
166 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(2)
167 AND okl_execute_formula_pub.g_additional_parameters(2).name = ' CANCELLATION REASON'
168 AND okl_execute_formula_pub.g_additional_parameters(2).value IS NOT NULL
169 THEN
170 l_cancellation_reason := TO_char
171 (okl_execute_formula_pub.g_additional_parameters(2).value);
172 END IF;
173 ---++ Ins Effective Dated Term Changes End ++----
174
175 -- GET profile value
176 l_profile_value := fnd_profile.value('OKLINMAXTERMFORINS');
177
178 IF(( l_profile_value = NULL) OR (l_profile_value = OKC_API.G_MISS_NUM )) THEN
179 l_unconsumed_months := 0 ;
180 END IF;
181
182 /*OPEN C_OKL_STRM_TYPE_REC_V ;
183 FETCH C_OKL_STRM_TYPE_REC_V INTO l_stm_type_id;
184 IF(C_OKL_STRM_TYPE_REC_V%NOTFOUND) THEN
185 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
186 G_COL_NAME_TOKEN,'Billing');
187 CLOSE C_OKL_STRM_TYPE_REC_V ;
188 RAISE OKC_API.G_EXCEPTION_ERROR;
189 END IF ;
190 CLOSE C_OKL_STRM_TYPE_REC_V;*/
191 -- cursor fetch replaced with the streams util call, change
192 -- done for user defined streams impacts, bug 3924300
193 -- begin changes for bug 3924300
194
195 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
196 'INSURANCE_RECEIVABLE',
197 l_return_status,
198 l_stm_type_id);
199 IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
200 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
201 ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
202 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_STREAM_TYPE', G_PURPOSE_TOKEN,'INSURANCE_RECEIVABLE'); -- bug 4024785
203 RAISE OKC_API.G_EXCEPTION_ERROR;
204 END IF;
205 -- end changes for bug 3924300
206
207
208 OPEN c_total_amount_paid(l_stm_type_id) ;
209 FETCH c_total_amount_paid INTO l_no_of_rec;
210 IF(c_total_amount_paid%NOTFOUND) THEN
211 l_no_of_rec := 0;
212 END IF ;
213 CLOSE c_total_amount_paid;
214
215
216 OPEN c_monthly_premium (p_contract_id,p_contract_line_id );
217 FETCH c_monthly_premium INTO ls_payment_freq, date_to, date_from;--, cancel_date;--++ Effective Dated TErmination ++--
218 IF(c_monthly_premium%NOTFOUND) THEN
219 Okc_Api.set_message(G_APP_NAME, G_INVALID_CONTRACT_LINE,
220 G_COL_NAME_TOKEN,p_contract_line_id);
221 -- x_return_status := OKC_API.G_RET_STS_ERROR ;
222 CLOSE c_monthly_premium ;
223 RAISE OKC_API.G_EXCEPTION_ERROR;
224 END IF ;
225 CLOSE c_monthly_premium;
226
227 ---++ Ins Effective Dated Term Changes Start ++----
228 IF(( l_cancellation_date IS NULL) OR (l_cancellation_date = OKC_API.G_MISS_DATE )) THEN
229 cancel_date := SYSDATE ;
230 ELSE
231 cancel_date := l_cancellation_date;
232 END IF;
233 ---++ Ins Effective Dated Term Changes End ++----
234
235 IF(ls_payment_freq = 'MONTHLY') THEN
236 l_freq_factor := 1;
237 ELSIF(ls_payment_freq = 'BI_MONTHLY') THEN
238 l_freq_factor := 1/2;
239 ELSIF(ls_payment_freq = 'HALF_YEARLY') THEN
240 l_freq_factor := 6; --- ETC.
241 ELSIF(ls_payment_freq = 'QUARTERLY') THEN
242 l_freq_factor := 3;
243 ELSIF(ls_payment_freq = 'YEARLY') THEN
244 l_freq_factor := 12;
245 ELSIF(ls_payment_freq = 'LUMP_SUM') THEN
246 --Bug# 4056484 PAGARG removing rounding
247 l_freq_factor := MONTHS_BETWEEN( date_to,date_from);
248 END IF;
249
250 l_total_num_months_paid := l_freq_factor * l_no_of_rec;
251 IF(( l_total_num_months_paid IS NULL) OR (l_total_num_months_paid = OKC_API.G_MISS_NUM )) THEN
252 l_total_num_months_paid := 0 ;
253 END IF;
254 --- ++++ Eff Dated Term Qte Changes +++++ ----------
255 IF cancel_date < date_from THEN
256 --** If Eff date of Termination is earlier than Policy start date then
257 --** calculate consumed months as insurance start to SYSDATE
258 IF date_from < SYSDATE THEN
259 l_total_consumed_months := MONTHS_BETWEEN(SYSDATE ,date_from);
260 ELSIF date_from > SYSDATE THEN
261 l_total_consumed_months := 0;
262 ELSE
263 -- Bug# 4056484 PAGARG removing rounding
264 l_total_consumed_months := MONTHS_BETWEEN( cancel_date,date_from);
265 END IF;
266 ELSE
267 -- Bug# 4056484 PAGARG removing rounding
268 l_total_consumed_months := MONTHS_BETWEEN( cancel_date,date_from);
269 END IF;
270 --- ++++ Eff Dated Term Qte Changes +++++ ----------
271
272 IF(( l_total_consumed_months IS NULL) OR (l_total_consumed_months = OKC_API.G_MISS_NUM )) THEN
273 l_total_consumed_months := 0 ;
274 END IF;
275
276 l_unconsumed_months := l_total_num_months_paid - l_total_consumed_months ;
277 IF(( l_unconsumed_months IS NULL) OR (l_unconsumed_months = OKC_API.G_MISS_NUM )) THEN
278 l_unconsumed_months := 0 ;
279 END IF;
280
281 IF (l_unconsumed_months > l_profile_value) AND
282 (l_cancellation_reason = 'CANCELED_BY_CUSTOMER') THEN --Eff Dated Term Changes ++---
283 RETURN l_profile_value;
284 ELSE
285 RETURN l_unconsumed_months;
286 END IF;
287
288 EXCEPTION
289 WHEN OTHERS THEN
290 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
291 p_msg_name => 'OKL_UNEXPECTED_ERROR',
292 p_token1 => 'OKL_SQLCODE',
293 p_token1_value => SQLCODE,
294 p_token2 => 'OKL_SQLERRM',
295 p_token2_value => SQLERRM);
296 RETURN NULL;
297
298 END;
299
300 ------------------------------------------------------------------------------
301 -- Start of Comments
302 -- Created By: sechawla 6651621
303 -- Function Name: line_taxable_basis
304 -- Description: Returns taxable basis amount for a transaction line.
305 -- For header level Booking, Rebook and Sales Quote transactions,
306 -- 0 amount is returned. For line level transactions, the default
307 -- taxable basis amount is returned. Default taxable basis amount
308 -- is passed to this function from okl_process_sales_tax_pvt, by
309 -- populating default_taxable_basis additional parameter. This function
310 -- extracts the amount from this parameter and returns it back.
311 -- Parameters: IN: p_khr_id, p_kle_id
312 -- additional parameters stored in g_additional_parameters
313 -- OUT: amount
314 -- Version: 1.0
315 -- History : 03-Jan-07 sechawla 6651621 - Created
316 -- End of Commnets
317 ------------------------------------------------------------------------------
318
319 FUNCTION line_taxable_basis (
320 p_khr_id IN NUMBER,
321 p_kle_id IN NUMBER)
322 RETURN NUMBER IS
323
324 l_source_trx_name VARCHAR2(150);
325 l_line_name VARCHAR2(150);
326 l_line_taxable_basis NUMBER;
327 BEGIN
328
329 -- Validate additional parameters availability
330 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
331 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
332 LOOP
333 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'SOURCE_TRX_NAME'
334 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
335 l_source_trx_name := okl_execute_formula_pub.g_additional_parameters(I).value;
336 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'LINE_NAME'
337 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
338 l_line_name :=okl_execute_formula_pub.g_additional_parameters(I).value;
339 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'DEFAULT_TAXABLE_BASIS'
340 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
341 l_line_taxable_basis := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
342 END IF;
343 END LOOP;
344 ELSE
345 -- Additional parameters are needed to evaluate taxable basis override formula LINE_TAXABLE_BASIS.
346 OKL_API.set_message(p_app_name => 'OKL',
347 p_msg_name => 'OKL_TX_NO_TBO_PARAMS');
348 RAISE Okl_Api.G_EXCEPTION_ERROR;
349
350 END IF;
351
352 IF l_source_trx_name IS NULL THEN
353 OKL_API.set_message( p_app_name => 'OKC',
354 p_msg_name => G_REQUIRED_VALUE,
355 p_token1 => G_COL_NAME_TOKEN,
356 p_token1_value => 'SOURCE_TRX_NAME');
357
358 RAISE Okl_Api.G_EXCEPTION_ERROR;
359 END IF;
360
361 IF l_line_taxable_basis IS NULL THEN
362 OKL_API.set_message( p_app_name => 'OKC',
363 p_msg_name => G_REQUIRED_VALUE,
364 p_token1 => G_COL_NAME_TOKEN,
365 p_token1_value => 'DEFAULT_TAXABLE_BASIS');
366
367 RAISE Okl_Api.G_EXCEPTION_ERROR;
368 END IF;
369
370 IF l_source_trx_name IN ('Booking','Rebook','Sales Quote') AND l_line_name IS NULL THEN
371 --Contract Header or Sales Quote Header level tax call
372 RETURN 0;
373 ELSE
374 RETURN l_line_taxable_basis;
375 END IF;
376
377 EXCEPTION
378
379 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
380 RETURN NULL;
381
382 WHEN OTHERS THEN
383
384 OKL_API.SET_MESSAGE (
385 p_app_name => OKL_API.G_APP_NAME,
386 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
387 p_token1 => 'SQLCODE',
388 p_token1_value => SQLCODE,
389 p_token2 => 'SQLERRM',
390 p_token2_value => SQLERRM);
391
392 RETURN NULL;
393
394 END line_taxable_basis;
395
396 ----------------------------------------------------------------------------------------------------
397
398 -- Start of Comments
399 -- Created By: Santhosh Siruvole (ssiruvol)
400 -- Function Name contract_sumofrents
401 -- Description: returns the sum of amount on stream type - Rent.
402 -- Dependencies:
403 -- Parameters: contract id.
404 -- Version: 1.0
405 -- End of Commnets
406
407 ----------------------------------------------------------------------------------------------------
408 FUNCTION contract_sum_of_rents(
409 p_chr_id IN NUMBER,
410 p_line_id IN NUMBER) RETURN NUMBER IS
411
412 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_SUM_OF_RENTS';
413 l_api_version CONSTANT NUMBER := 1;
414 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
415 x_msg_count NUMBER;
416 x_msg_data VARCHAR2(256);
417
418 l_rents NUMBER := 0;
419
420 CURSOR l_line_rents_csr (chrId NUMBER ) IS
421 SELECT NVL(str.link_hist_stream_id,-1) link_hist_stream_id,
422 NVL(SUM(sele.amount),0) amount
423 FROM okl_strm_elements sele,
424 okl_streams str,
425 --okl_strm_type_tl sty,
426 okl_strm_type_v sty,
427 okl_K_lines_full_v kle,
428 okc_statuses_b sts
429 WHERE sele.stm_id = str.id
430 AND str.sty_id = sty.id
431 --AND UPPER(sty.name) = 'RENT'
432 AND sty.stream_type_purpose = 'RENT'
433 --AND sty.LANGUAGE = 'US'
434 AND str.say_code = 'CURR'
435 AND str.active_yn = 'Y'
436 AND NVL( str.purpose_code, 'XXXX' ) = 'XXXX'
437 AND str.khr_id = chrId
438 AND str.kle_id = kle.id
439 AND kle.chr_id = chrId
440 AND kle.sts_code = sts.code
441 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
442 GROUP BY str.link_hist_stream_id;
443
444 CURSOR l_line_rents_adj_csr (p_stm_id NUMBER) IS
445 SELECT NVL(SUM(sele.amount),0) amount
446 FROM okl_strm_elements sele
447 WHERE stm_id = p_stm_id
448 AND date_billed IS NOT NULL;
449
450 CURSOR l_chr_rents_csr (chrId NUMBER ) IS
451 SELECT NVL(SUM(sele.amount),0) amount
452 FROM okl_strm_elements sele,
453 okl_streams str,
454 --okl_strm_type_tl sty
455 okl_strm_type_v sty
456 WHERE sele.stm_id = str.id
457 AND str.sty_id = sty.id
458 --AND UPPER(sty.name) = 'RENT'
459 AND sty.stream_type_purpose = 'RENT'
460 --AND sty.LANGUAGE = 'US'
461 AND str.say_code = 'CURR'
462 AND str.active_yn = 'Y'
463 AND NVL( str.purpose_code, 'XXXX' ) = 'XXXX'
464 AND str.khr_id = chrId
465 AND NVL(str.kle_id, -1) = -1;
466
467 l_chr_rents_rec l_chr_rents_csr%ROWTYPE;
468 l_line_rents_amount NUMBER;
469 l_rent_adj_amount NUMBER;
470
471 BEGIN
472
473 IF ( p_chr_id IS NULL ) THEN
474 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
475 END IF;
476
477 l_line_rents_amount := 0;
478 FOR l_line_rents_rec IN l_line_rents_csr (p_chr_id)
479 LOOP
480 l_line_rents_amount := NVL(l_line_rents_amount,0) + l_line_rents_rec.amount;
481
482 IF (l_line_rents_rec.link_hist_stream_id <> -1) THEN
483 l_rent_adj_amount := 0;
484 OPEN l_line_rents_adj_csr (l_line_rents_rec.link_hist_stream_id);
485 FETCH l_line_rents_adj_csr INTO l_rent_adj_amount;
486 CLOSE l_line_rents_adj_csr;
487
488 l_line_rents_amount := l_line_rents_amount - NVL(l_rent_adj_amount,0);
489 END IF;
490 END LOOP;
491
492 /*
493 OPEN l_chr_rents_csr( p_chr_id );
494 FETCH l_chr_rents_csr INTO l_chr_rents_rec;
495 CLOSE l_chr_rents_csr;
496 */
497
498 l_rents := l_line_rents_amount;
499
500 RETURN l_rents;
501
502
503 EXCEPTION
504 WHEN OTHERS THEN
505 Okl_Api.SET_MESSAGE(
506 p_app_name => G_APP_NAME,
507 p_msg_name => G_UNEXPECTED_ERROR,
508 p_token1 => G_SQLCODE_TOKEN,
509 p_token1_value => SQLCODE,
510 p_token2 => G_SQLERRM_TOKEN,
511 p_token2_value => SQLERRM);
512 RETURN NULL;
513
514 END contract_sum_of_rents;
515
516 ----------------------------------------------------------------------------------------------------
517
518 -- Start of Comments
519 -- Created By: Santhosh Siruvole (ssiruvol)
520 -- Function Name contract_income
521 -- Description: returns sum of all incomes of financial asset lines of a contract
522 -- Dependencies:
523 -- Parameters: contract id.
524 -- Version: 1.0
525 -- End of Commnets
526
527 ----------------------------------------------------------------------------------------------------
528 FUNCTION contract_income(
529 p_chr_id IN NUMBER,
530 p_line_id IN NUMBER) RETURN NUMBER IS
531
532 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_INCOME';
533 l_api_version CONSTANT NUMBER := 1;
534 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
535 x_msg_count NUMBER;
536 x_msg_data VARCHAR2(256);
537
538 l_income NUMBER := 0;
539
540 BEGIN
541
542 IF ( p_chr_id IS NULL ) THEN
543 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
544 END IF;
545 --
546 -- Note: User defined stream: This stream type has been identified as
547 -- "Not being used" and hence not modified with its purpose
548 --
549 SELECT NVL(SUM(sele.amount),0) INTO l_income
550 FROM okl_strm_elements sele,
551 okl_streams str,
552 okl_strm_type_v sty,
553 okl_K_lines_full_v kle,
554 okc_statuses_b sts
555 WHERE sele.stm_id = str.id
556 AND str.sty_id = sty.id
557 AND UPPER(sty.name) = 'UNEARNED INCOME'
558 AND str.khr_id = p_chr_id
559 AND kle.sts_code = sts.code
560 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
561
562 RETURN l_income;
563
564
565 EXCEPTION
566
567 WHEN OTHERS THEN
568 Okl_Api.SET_MESSAGE(
569 p_app_name => G_APP_NAME,
570 p_msg_name => G_UNEXPECTED_ERROR,
571 p_token1 => G_SQLCODE_TOKEN,
572 p_token1_value => SQLCODE,
573 p_token2 => G_SQLERRM_TOKEN,
574 p_token2_value => SQLERRM);
575 RETURN NULL;
576
577
578 END contract_income;
579
580 --Bug# 3638568 : Function modifieed to conditionally include TERMINATED lines if called from pricing
581 ----------------------------------------------------------------------------------------------------
582
583 -- Start of Comments
584 -- Created By: Santhosh Siruvole (ssiruvol)
585 -- Function Name line_residualvalue
586 -- Description: returns the residual_value of the a financial asset line.
587 -- Dependencies:
588 -- Parameters: contract id and line id
589 -- Version: 1.0
590 -- SECHAWLA 05-MAY-04 3578894 : Modified to accomodate additional parameters for Reporting product
591 -- SECHAWLA 02-FEB-05 4141411 : Added unexpected error exception handling block
592 -- PRASJAIN Bug 6030917 : Added Proration Logic
593 -- End of Commnets
594
595 ----------------------------------------------------------------------------------------------------
596 FUNCTION line_residual_value(
597 p_chr_id IN NUMBER,
598 p_line_id IN NUMBER) RETURN NUMBER IS
599
600 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_LINE_RESIDUAL_VALUE';
601 l_api_version CONSTANT NUMBER := 1;
602 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
603 x_msg_count NUMBER;
604 x_msg_data VARCHAR2(256);
605
606 l_residual_value NUMBER := 0.0;
607 l_oec NUMBER := 0.0;
608
609 CURSOR residual_csr( chrId NUMBER, lineId NUMBER ) IS
610 SELECT NVL(kle.residual_value,0) Value,
611 NVL(kle.residual_percentage,0) Percent
612 FROM OKC_LINE_STYLES_B LS,
613 okl_K_lines_full_v kle,
614 okc_statuses_b sts
615 WHERE LS.ID = KLE.LSE_ID
616 AND LS.LTY_CODE ='FREE_FORM1'
617 AND KLE.ID = lineId
618 AND KLE.DNZ_CHR_ID = chrId
619 AND kle.sts_code = sts.code
620 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
621
622 CURSOR residual_csr_incl_terminated( chrId NUMBER, lineId NUMBER ) IS
623 SELECT NVL(kle.residual_value,0) Value,
624 NVL(kle.residual_percentage,0) Percent
625 FROM OKC_LINE_STYLES_B LS,
626 okl_K_lines_full_v kle,
627 okc_statuses_b sts
628 WHERE LS.ID = KLE.LSE_ID
629 AND LS.LTY_CODE ='FREE_FORM1'
630 AND KLE.ID = lineId
631 AND KLE.DNZ_CHR_ID = chrId
632 AND kle.sts_code = sts.code
633 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
634
635 residual_rec residual_csr%ROWTYPE;
636 --SECHAWLA 05-MAY-04 3578894 : new declarations
637 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
638 l_trx_date DATE;
639 l_k_end_date DATE;
640
641 -- get the K end date
642 CURSOR l_contract_csr(cp_chr_id IN NUMBER) IS
643 SELECT END_DATE
644 FROM okc_k_headers_b
645 WHERE id = cp_chr_id;
646
647 l_discount_incl_terminated BOOLEAN := FALSE;
648 l_proration_factor NUMBER;
649
650 BEGIN
651
652 IF ( ( p_chr_id IS NULL ) OR ( p_line_id IS NULL ) ) THEN
653 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
654
655 END IF;
656
657 -- SECHAWLA 05-MAY-04 3578894 : check the additional parameter for rep product
658 --Validate additional parameters availability
659 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
660 FOR I IN
661 Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.FIRST..Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.LAST LOOP
662 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
663 AND Okl_Execute_Formula_Pub.g_additional_parameters(I).value IS NOT NULL THEN
664 l_rep_prod_streams_yn := Okl_Execute_Formula_Pub.g_additional_parameters(I).value;
665 ELSIF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
666 AND Okl_Execute_Formula_Pub.g_additional_parameters(I).value IS NOT NULL THEN
667 l_trx_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
668
669 -- Start : Bug 6030917 : prasjain
670 --added for getting the proration factor for partial unit termination
671 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'proration_factor'
672 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
673 l_proration_factor := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
674 -- End : Bug 6030917 : prasjain
675
676 END IF;
677 END LOOP;
678 ELSE
679 l_rep_prod_streams_yn := 'N';
680 END IF;
681
682 IF l_rep_prod_streams_yn = 'Y' THEN
683 IF l_trx_date IS NULL THEN
684 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
685 Okl_Api.Set_Message(p_app_name => g_app_name,
686 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
687 RAISE Okl_Api.G_EXCEPTION_ERROR;
688 END IF;
689 END IF;
690
691 IF l_rep_prod_streams_yn = 'Y' THEN
692 OPEN l_contract_csr(p_chr_id);
693 FETCH l_contract_csr INTO l_k_end_date;
694 CLOSE l_contract_csr;
695
696 IF l_k_end_date <= l_trx_date THEN
697 RETURN 0;
698 END IF;
699 END IF;
700
701 ----------
702
703 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
704 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
705 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
706
707 -- rmunjulu 4042892
708 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
709 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
710 LOOP
711 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
712 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
713 l_discount_incl_terminated := TRUE;
714 END IF;
715 END LOOP;
716 END IF;
717 -- rmunjulu 4042892
718 IF l_discount_incl_terminated THEN
719 OPEN residual_csr_incl_terminated( p_chr_id, p_line_id );
720 FETCH residual_csr_incl_terminated INTO residual_rec;
721 IF( residual_csr_incl_terminated%NOTFOUND ) THEN
722 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
723 END IF;
724 CLOSE residual_csr_incl_terminated;
725 ELSE
726 OPEN residual_csr( p_chr_id, p_line_id );
727 FETCH residual_csr INTO residual_rec;
728 IF( residual_csr%NOTFOUND ) THEN
729 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
730 END IF;
731 CLOSE residual_csr;
732 END IF;
733
734 IF ( residual_rec.Value <> 0 ) THEN
735 l_residual_value := residual_rec.Value;
736 ELSE
737 l_oec := line_oec( p_chr_id, p_line_id );
738 IF ( l_oec IS NULL ) THEN
739 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
740 END IF;
741 l_residual_value := residual_rec.Percent * l_oec / 100.00;
742 END IF;
743
744 -- Start : Bug 6030917 : prasjain
745 IF nvl(l_proration_factor,1) <> 1 THEN
746 l_residual_value := l_residual_value * l_proration_factor;
747 END IF;
748 -- End : Bug 6030917 : prasjain
749
750 RETURN l_residual_value;
751
752 EXCEPTION
753 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
754 IF residual_csr%ISOPEN THEN
755 CLOSE residual_csr;
756 END IF;
757
758 IF l_contract_csr%ISOPEN THEN
759 CLOSE l_contract_csr;
760 END IF;
761
762 RETURN NULL;
763 -- SECHAWLA 02-FEB-05 4141411 : Added unexpected error exception handling block
764 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
765 IF residual_csr%ISOPEN THEN
766 CLOSE residual_csr;
767 END IF;
768
769 IF l_contract_csr%ISOPEN THEN
770 CLOSE l_contract_csr;
771 END IF;
772
773 RETURN NULL;
774 WHEN OTHERS THEN
775 IF residual_csr%ISOPEN THEN
776 CLOSE residual_csr;
777 END IF;
778
779 IF l_contract_csr%ISOPEN THEN
780 CLOSE l_contract_csr;
781 END IF;
782
783 Okl_Api.SET_MESSAGE(
784 p_app_name => G_APP_NAME,
785 p_msg_name => G_UNEXPECTED_ERROR,
786 p_token1 => G_SQLCODE_TOKEN,
787 p_token1_value => SQLCODE,
788 p_token2 => G_SQLERRM_TOKEN,
789 p_token2_value => SQLERRM);
790 RETURN NULL;
791
792
793 END line_residual_value;
794
795 ----------------------------------------------------------------------------------------------------
796
797 -- Start of Comments
798 -- Created By: Santhosh Siruvole (ssiruvol)
799 -- Function Name contract_residualvalue
800 -- Description: returns the sum of residual_value of all financial asset lines of a contract.
801 -- Dependencies:
802 -- Parameters: contract id.
803 -- Version: 1.0
804 -- End of Commnets
805
806 ----------------------------------------------------------------------------------------------------
807 FUNCTION contract_residual_value(
808 p_chr_id IN NUMBER,
809 p_line_id IN NUMBER) RETURN NUMBER IS
810
811 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_RESIDUAL_VALUE';
812 l_api_version CONSTANT NUMBER := 1;
813 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
814 x_msg_count NUMBER;
815 x_msg_data VARCHAR2(256);
816
817 l_residual_value NUMBER := 0.0;
818 l_lne_res_value NUMBER := 0.0;
819
820 CURSOR lines_csr( chrId NUMBER ) IS
821 SELECT kle.id lineId
822 FROM OKC_LINE_STYLES_B LS,
823 okl_K_lines_full_v kle,
824 okc_statuses_b sts
825 WHERE LS.ID = KLE.LSE_ID
826 AND LS.LTY_CODE ='FREE_FORM1'
827 AND KLE.DNZ_CHR_ID = chrId
828 AND kle.sts_code = sts.code
829 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
830
831 line_rec lines_csr%ROWTYPE;
832
833 BEGIN
834
835 IF ( p_chr_id IS NULL ) THEN
836 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
837 END IF;
838
839 FOR line_rec IN lines_csr( p_chr_id )
840 LOOP
841 IF( lines_csr%NOTFOUND ) THEN
842 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
843 END IF;
844 l_lne_res_value := line_residual_value( p_chr_id, line_rec.lineId );
845 IF ( l_lne_res_value IS NULL ) THEN
846 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
847 END IF;
848 l_residual_value := l_residual_value + l_lne_res_value;
849 END LOOP;
850
851 RETURN l_residual_value;
852
853 EXCEPTION
854
855 WHEN OTHERS THEN
856 Okl_Api.SET_MESSAGE(
857 p_app_name => G_APP_NAME,
858 p_msg_name => G_UNEXPECTED_ERROR,
859 p_token1 => G_SQLCODE_TOKEN,
860 p_token1_value => SQLCODE,
861 p_token2 => G_SQLERRM_TOKEN,
862 p_token2_value => SQLERRM);
863 RETURN NULL;
864
865 END contract_residual_value;
866
867
868 ----------------------------------------------------------------------------------------------------
869
870 -- Start of Comments
871 -- Created By: Santhosh Siruvole (ssiruvol)
872 -- Function Name contract_oec
873 -- Description: returns the OEC of a contract.
874 -- Dependencies:
875 -- Parameters: contract id.
876 -- Version: 1.0
877 -- End of Commnets
878
879 ----------------------------------------------------------------------------------------------------
880 FUNCTION contract_oec(
881 p_chr_id IN NUMBER,
882 p_line_id IN NUMBER) RETURN NUMBER IS
883
884 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_OEC';
885 l_api_version CONSTANT NUMBER := 1;
886 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
887 x_msg_count NUMBER;
888 x_msg_data VARCHAR2(256);
889
890 BEGIN
891 IF ( p_line_id IS NULL ) THEN
892 RETURN line_oec( p_chr_id, NULL);
893 ELSE
894 RETURN line_oec( p_chr_id, p_line_id);
895 END IF;
896 END;
897
898 --Bug# 3638568 : This formula modified to conditionally include terminated lines
899 -----------------------------------------------------------------------------------
900 -- Start of Commnets
901 -- Badrinath Kuchibholta
902
903 -- Procedure Name : FUNCTION_oec_calc
904 -- Description : FUNCTION_oec_calc
905 -- Business Rules :
906 -- Parameters :
907 -- Version : 1.0
908 -- End of Commnets
909
910 FUNCTION line_oec(p_dnz_chr_id IN OKC_K_LINES_V.DNZ_CHR_ID%TYPE,
911 --p_cle_id IN OKC_K_LINES_V.CLE_ID%TYPE DEFAULT Okl_Api.G_MISS_NUM)
912 p_cle_id IN OKC_K_LINES_V.CLE_ID%TYPE )
913 RETURN NUMBER IS
914 G_APP_NAME CONSTANT VARCHAR2(3) := Okl_Api.G_APP_NAME;
915 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
916 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKL_UNEXPECTED_ERROR';
917 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := Okl_Api.G_COL_NAME_TOKEN;
918 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLerrm';
919 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLcode';
920 G_REQUIRED_VALUE CONSTANT VARCHAR2(200) := 'OKL_REQUIRED_VALUE';
921 G_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
922 G_LINE_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_LINE_RECORD';
923 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_CRITERIA';
924 G_EXCEPTION_HALT_VALIDATION EXCEPTION;
925 G_EXCEPTION_STOP_VALIDATION EXCEPTION;
926 G_FIN_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FREE_FORM1';
927 G_MODEL_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'ITEM';
928 G_ADDON_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'ADD_ITEM';
929 G_LEASE_SCS_CODE OKC_K_HEADERS_V.SCS_CODE%TYPE := 'LEASE';
930 G_LOAN_SCS_CODE OKC_K_HEADERS_V.SCS_CODE%TYPE := 'LOAN';
931 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
932 l_api_name CONSTANT VARCHAR2(30) := 'FUNCTION_OEC_CALC';
933 ln_contract_oec OKL_K_LINES_V.OEC%TYPE := 0;
934 lv_lty_code OKC_LINE_STYLES_V.LTY_CODE%TYPE;
935 ln_model_line_oec OKL_K_LINES_V.OEC%TYPE := 0;
936 ln_addon_line_oec OKL_K_LINES_V.OEC%TYPE := 0;
937 ln_total_line_oec OKL_K_LINES_V.OEC%TYPE := 0;
938 l_capred_incl_terminated BOOLEAN := FALSE;
939 -- Cursor to get the lty_code
940 CURSOR get_lty_code(p_cle_id IN OKC_K_LINES_V.ID%TYPE) IS
941 SELECT lse.lty_code
942 FROM okc_k_lines_b cle,
943 okc_line_styles_b lse
944 WHERE cle.id = p_cle_id
945 AND cle.lse_id = lse.id;
946 -- Cursor to sum up oec for contract
947 CURSOR c_contract_oec_calc(p_dnz_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
948 SELECT SUM(kle.oec) oec
949 FROM OKL_K_LINES_V kle,
950 OKC_K_LINES_V cle,
951 OKC_K_HEADERS_V CHR
952 WHERE CHR.id = p_dnz_chr_id
953 AND CHR.id = cle.dnz_chr_id
954 AND cle.sts_code NOT IN ( 'ABANDONED', 'TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
955 AND cle.id = kle.id;
956
957 CURSOR c_contract_oec_calc_incl_term(p_dnz_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
958 SELECT SUM(kle.oec) oec
959 FROM OKL_K_LINES_V kle,
960 OKC_K_LINES_V cle,
961 OKC_K_HEADERS_V CHR
962 WHERE CHR.id = p_dnz_chr_id
963 AND CHR.id = cle.dnz_chr_id
964 AND cle.sts_code NOT IN ( 'ABANDONED', 'EXPIRED', 'CANCELLED', 'HOLD')
965 AND cle.id = kle.id;
966 -- Cursor to sum up oec for given model line
967 CURSOR c_model_oec_calc(p_top_cle_id OKC_K_LINES_V.CLE_ID%TYPE,
968 p_dnz_chr_id OKC_K_LINES_V.DNZ_CHR_ID%TYPE) IS
969 SELECT SUM(cle.price_unit * cim.number_of_items) oec
970 FROM okc_subclass_top_line stl,
971 okc_line_styles_b lse2,
972 okc_line_styles_b lse1,
973 okc_k_items_v cim,
974 okc_k_lines_v cle
975 WHERE cle.cle_id = p_top_cle_id
976 AND cle.dnz_chr_id = p_dnz_chr_id
977 AND cle.id = cim.cle_id
978 AND cle.dnz_chr_id = cim.dnz_chr_id
979 AND cle.lse_id = lse1.id
980 AND lse1.lty_code = G_MODEL_LINE_LTY_CODE
981 AND lse1.lse_parent_id = lse2.id
982 AND lse2.lty_code = G_FIN_LINE_LTY_CODE
983 AND lse2.id = stl.lse_id
984 AND stl.scs_code IN (G_LEASE_SCS_CODE,G_LOAN_SCS_CODE);
985 -- Cursor to sum up oec of addon line for a given top line
986 CURSOR c_addon_oec_calc(p_top_cle_id OKC_K_LINES_V.CLE_ID%TYPE,
987 p_dnz_chr_id OKC_K_LINES_V.DNZ_CHR_ID%TYPE) IS
988 SELECT SUM(cle.price_unit* cim.number_of_items) oec
989 FROM okc_subclass_top_line stl,
990 okc_line_styles_b lse3,
991 okc_line_styles_b lse2,
992 okc_line_styles_b lse1,
993 okc_k_items_v cim,
994 okc_k_lines_b cle
995 WHERE cle.dnz_chr_id = p_dnz_chr_id
996 AND cle.dnz_chr_id = cim.dnz_chr_id
997 AND cle.id = cim.cle_id
998 AND cle.lse_id = lse1.id
999 AND lse1.lty_code = G_ADDON_LINE_LTY_CODE
1000 AND lse1.lse_parent_id = lse2.id
1001 AND lse2.lty_code = G_MODEL_LINE_LTY_CODE
1002 AND lse2.lse_parent_id = lse3.id
1003 AND lse3.lty_code = G_FIN_LINE_LTY_CODE
1004 AND lse3.id = stl.lse_id
1005 AND stl.scs_code IN (G_LEASE_SCS_CODE,G_LOAN_SCS_CODE)
1006 --AND cle.cle_id IN (SELECT cle.id
1007 AND exists (SELECT 1 --cle.id
1008 FROM okc_subclass_top_line stlx,
1009 okc_line_styles_b lse2x,
1010 okc_line_styles_b lse1x,
1011 okc_k_lines_b clex
1012 WHERE clex.cle_id = p_top_cle_id
1013 AND clex.dnz_chr_id = p_dnz_chr_id
1014
1015 AND clex.lse_id = lse1x.id
1016 AND lse1x.lty_code = G_MODEL_LINE_LTY_CODE
1017 AND lse1x.lse_parent_id = lse2x.id
1018 AND lse2x.lty_code = G_FIN_LINE_LTY_CODE
1019 AND lse2x.id = stlx.lse_id
1020 AND stlx.scs_code IN (G_LEASE_SCS_CODE,G_LOAN_SCS_CODE)
1021 AND clex.id = cle.cle_id);
1022
1023 --Bug 4631549
1024 --cursor to find if this is a re-lease contract
1025 Cursor l_chrb_csr (p_chr_id in number) is
1026 SELECT chrb.orig_system_source_code
1027 FROM okc_k_headers_b chrb
1028 where chrb.id = p_chr_id;
1029
1030 l_chrb_rec l_chrb_csr%ROWTYPE;
1031
1032 --cursor to get expected asset value for contract
1033 cursor l_chr_expcost_trmn_csr(p_chr_id in number) is
1034 SELECT SUM(kle.expected_asset_cost) expected_asset_cost
1035 FROM OKL_K_LINES kle,
1036 OKC_K_LINES_B cleb
1037 WHERE kle.id = cleb.id
1038 AND cleb.dnz_chr_id = p_chr_id
1039 AND cleb.lse_id = 33
1040 AND cleb.sts_code NOT IN ( 'ABANDONED', 'EXPIRED', 'CANCELLED', 'HOLD');
1041
1042 cursor l_chr_expcost_csr(p_chr_id in number) is
1043 SELECT SUM(kle.expected_asset_cost) expected_asset_cost
1044 FROM OKL_K_LINES kle,
1045 OKC_K_LINES_B cleb
1046 WHERE kle.id = cleb.id
1047 AND cleb.dnz_chr_id = p_chr_id
1048 AND cleb.lse_id = 33
1049 AND cleb.sts_code NOT IN ( 'ABANDONED', 'TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1050
1051
1052 --cursor to get expected asset value for asset
1053 cursor l_cle_expcost_csr (p_cle_id in number) is
1054 Select nvl(kle.expected_asset_cost,0) expected_asset_cost
1055 from okl_k_lines kle
1056 where kle.id = p_cle_id;
1057
1058
1059 ----------------------------------------------------------------------------------------------------
1060 -- Start of Commnets
1061 -- Badrinath Kuchibholta
1062 -- Procedure Name : validate_dnz_chr_id
1063 -- Description : validation with OKC_K_LINES_V
1064 -- Business Rules :
1065 -- Parameters :
1066 -- Version : 1.0
1067 -- End of Commnets
1068
1069 PROCEDURE validate_dnz_chr_id(p_dnz_chr_id IN OKC_K_LINES_V.DNZ_CHR_ID%TYPE,
1070 x_return_status OUT NOCOPY VARCHAR2) IS
1071 ln_dummy NUMBER := 0;
1072 CURSOR c_dnz_chr_id_validate(p_dnz_chr_id OKC_K_LINES_V.DNZ_CHR_ID%TYPE) IS
1073 SELECT 1
1074 --FROM DUAL
1075 --WHERE EXISTS (SELECT 1
1076 FROM OKC_K_HEADERS_B CHR
1077 WHERE CHR.id = p_dnz_chr_id; --);
1078 BEGIN
1079 -- initialize return status
1080 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1081 -- data is required
1082 IF (p_dnz_chr_id = Okl_Api.G_MISS_NUM) OR
1083 (p_dnz_chr_id IS NULL) THEN
1084 -- store SQL error message on message stack
1085 Okl_Api.set_message(p_app_name => G_APP_NAME,
1086 p_msg_name => G_REQUIRED_VALUE,
1087 p_token1 => G_COL_NAME_TOKEN,
1088 p_token1_value => 'P_DNZ_CHR_ID');
1089 -- halt validation as it is a required field
1090 RAISE G_EXCEPTION_STOP_VALIDATION;
1091 END IF;
1092 -- Enforce Foreign Key
1093 -- since we are creating a asset line
1094 -- we assume the cle_id will not null
1095 -- as the same is not top line and it will be sub line
1096 OPEN c_dnz_chr_id_validate(p_dnz_chr_id);
1097 IF c_dnz_chr_id_validate%NOTFOUND THEN
1098 Okl_Api.set_message(p_app_name => G_APP_NAME,
1099 p_msg_name => G_NO_MATCHING_RECORD,
1100 p_token1 => G_COL_NAME_TOKEN,
1101 p_token1_value => 'P_DNZ_CHR_ID');
1102 -- halt validation as it has no parent record
1103 RAISE G_EXCEPTION_HALT_VALIDATION;
1104 END IF;
1105 FETCH c_dnz_chr_id_validate INTO ln_dummy;
1106 CLOSE c_dnz_chr_id_validate;
1107 IF (ln_dummy = 0) THEN
1108 Okl_Api.set_message(p_app_name => G_APP_NAME,
1109 p_msg_name => G_NO_MATCHING_RECORD,
1110 p_token1 => G_COL_NAME_TOKEN,
1111 p_token1_value => 'P_DNZ_CHR_ID');
1112 -- halt validation as it has no parent record
1113 RAISE G_EXCEPTION_HALT_VALIDATION;
1114 END IF;
1115 EXCEPTION
1116 WHEN G_EXCEPTION_STOP_VALIDATION THEN
1117 -- We are here since the field is required
1118 -- Notify Error
1119 x_return_status := Okl_Api.G_RET_STS_ERROR;
1120 WHEN G_EXCEPTION_HALT_VALIDATION THEN
1121 -- If the cursor is open then it has to be closed
1122 IF c_dnz_chr_id_validate%ISOPEN THEN
1123 CLOSE c_dnz_chr_id_validate;
1124 END IF;
1125 x_return_status := Okl_Api.G_RET_STS_ERROR;
1126 WHEN OTHERS THEN
1127 -- store SQL error message on message stack
1128 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
1129 p_msg_name => G_UNEXPECTED_ERROR,
1130 p_token1 => G_SQLCODE_TOKEN,
1131 p_token1_value => SQLCODE,
1132 p_token2 => G_SQLERRM_TOKEN,
1133 p_token2_value => SQLERRM);
1134 -- If the cursor is open then it has to be closed
1135 IF c_dnz_chr_id_validate%ISOPEN THEN
1136 CLOSE c_dnz_chr_id_validate;
1137 END IF;
1138 -- notify caller of an error as UNEXPETED error
1139 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1140 END validate_dnz_chr_id;
1141 ----------------------------------------------------------------------------------------------------
1142 BEGIN
1143 -- We need to validate the dnz_chr_id first
1144 -- We are taking care of the validating p_cle_id via cursor we use for calculations of oec
1145 validate_dnz_chr_id(p_dnz_chr_id => p_dnz_chr_id,
1146 x_return_status => l_return_status);
1147 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1148 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1149 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1150 RAISE Okl_Api.G_EXCEPTION_ERROR;
1151 END IF;
1152
1153 --Bug# 4631549
1154 --Find out if re-lease contract
1155 open l_chrb_csr(p_chr_id => p_dnz_chr_id);
1156 fetch l_chrb_csr into l_chrb_rec;
1157 close l_chrb_csr;
1158 --Bug# 4631549
1159
1160 --Check whether terminated lines should be included
1161 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1162 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1163 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1164 --l_capred_incl_terminated := TRUE;
1165 --END IF;
1166
1167 -- rmunjulu 4042892
1168 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1169 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1170 LOOP
1171 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1172 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1173 l_capred_incl_terminated := TRUE;
1174 END IF;
1175 END LOOP;
1176 END IF;
1177
1178 -- Now we start calculations of the OEC
1179 IF (p_dnz_chr_id IS NOT NULL OR
1180 p_dnz_chr_id <> Okl_Api.G_MISS_NUM) AND
1181 (p_cle_id IS NULL OR
1182 p_cle_id = Okl_Api.G_MISS_NUM) THEN
1183 -- To get the OEC of the contract
1184
1185 --Bug# 4631549 :
1186 If nvl(l_chrb_rec.orig_system_source_code,okl_api.g_miss_char) = 'OKL_RELEASE' Then
1187 If l_capred_incl_terminated = TRUE Then
1188 OPEN l_chr_expcost_trmn_csr (p_chr_id => p_dnz_chr_id);
1189 FETCH l_chr_expcost_trmn_csr into ln_contract_oec;
1190 If l_chr_expcost_trmn_csr%NOTFOUND then
1191 Okl_Api.set_message(p_app_name => G_APP_NAME,
1192 p_msg_name => G_NO_MATCHING_RECORD,
1193 p_token1 => G_COL_NAME_TOKEN,
1194 p_token1_value => 'p_dnz_chr_id');
1195 RAISE Okl_Api.G_EXCEPTION_ERROR;
1196 End If;
1197 Close l_chr_expcost_trmn_csr;
1198 Else
1199 OPEN l_chr_expcost_csr (p_chr_id => p_dnz_chr_id);
1200 FETCH l_chr_expcost_csr into ln_contract_oec;
1201 If l_chr_expcost_csr%NOTFOUND then
1202 Okl_Api.set_message(p_app_name => G_APP_NAME,
1203 p_msg_name => G_NO_MATCHING_RECORD,
1204 p_token1 => G_COL_NAME_TOKEN,
1205 p_token1_value => 'p_dnz_chr_id');
1206 RAISE Okl_Api.G_EXCEPTION_ERROR;
1207 End If;
1208 Close l_chr_expcost_csr;
1209 End If;
1210 Else
1211 --End Bug 4631549
1212 IF l_capred_incl_terminated = TRUE THEN
1213 OPEN c_contract_oec_calc_incl_term(p_dnz_chr_id => p_dnz_chr_id);
1214 IF c_contract_oec_calc_incl_term%NOTFOUND THEN
1215 Okl_Api.set_message(p_app_name => G_APP_NAME,
1216 p_msg_name => G_NO_MATCHING_RECORD,
1217 p_token1 => G_COL_NAME_TOKEN,
1218 p_token1_value => 'p_dnz_chr_id');
1219 RAISE Okl_Api.G_EXCEPTION_ERROR;
1220 END IF;
1221 FETCH c_contract_oec_calc_incl_term INTO ln_contract_oec;
1222 CLOSE c_contract_oec_calc_incl_term;
1223 ELSE
1224 OPEN c_contract_oec_calc(p_dnz_chr_id => p_dnz_chr_id);
1225 IF c_contract_oec_calc%NOTFOUND THEN
1226 Okl_Api.set_message(p_app_name => G_APP_NAME,
1227 p_msg_name => G_NO_MATCHING_RECORD,
1228 p_token1 => G_COL_NAME_TOKEN,
1229 p_token1_value => 'p_dnz_chr_id');
1230 RAISE Okl_Api.G_EXCEPTION_ERROR;
1231 END IF;
1232 FETCH c_contract_oec_calc INTO ln_contract_oec;
1233 CLOSE c_contract_oec_calc;
1234 END IF;
1235 End If; -- Bug# 4631549
1236 -- Final Total Contract OEC
1237 ln_contract_oec := NVL(ln_contract_oec,0);
1238 RETURN(ln_contract_oec);
1239 ELSIF (p_dnz_chr_id IS NOT NULL OR
1240 p_dnz_chr_id <> Okl_Api.G_MISS_NUM) AND
1241 (p_cle_id IS NOT NULL OR
1242 p_cle_id <> Okl_Api.G_MISS_NUM) THEN
1243 -- To get the Line Style Code
1244 OPEN get_lty_code(p_cle_id => p_cle_id);
1245 IF get_lty_code%NOTFOUND THEN
1246 Okl_Api.set_message(p_app_name => G_APP_NAME,
1247 p_msg_name => G_NO_MATCHING_RECORD,
1248 p_token1 => G_COL_NAME_TOKEN,
1249 p_token1_value => 'Financial Asset Line');
1250 RAISE Okl_Api.G_EXCEPTION_ERROR;
1251 END IF;
1252 FETCH get_lty_code INTO lv_lty_code;
1253 CLOSE get_lty_code;
1254 IF lv_lty_code = G_FIN_LINE_LTY_CODE THEN
1255 --Bug# 4631549
1256 If l_chrb_rec.orig_system_source_code = 'OKL_RELEASE' then
1257 Open l_cle_expcost_csr (p_cle_id => p_cle_id);
1258 Fetch l_cle_expcost_csr into ln_total_line_oec;
1259 If l_cle_expcost_csr%NOTFOUND Then
1260 Okl_Api.set_message(p_app_name => G_APP_NAME,
1261 p_msg_name => G_NO_MATCHING_RECORD,
1262 p_token1 => G_COL_NAME_TOKEN,
1263 p_token1_value => 'Financial Asset Line');
1264 RAISE Okl_Api.G_EXCEPTION_ERROR;
1265 End If;
1266 Close l_cle_expcost_csr;
1267 ln_total_line_oec := nvl(ln_total_line_oec,0);
1268 Else --Bug# 4631549 end
1269 -- To get the OEC of the model Line
1270 OPEN c_model_oec_calc(p_top_cle_id => p_cle_id,
1271 p_dnz_chr_id => p_dnz_chr_id);
1272 IF c_model_oec_calc%NOTFOUND THEN
1273 Okl_Api.set_message(p_app_name => G_APP_NAME,
1274 p_msg_name => G_NO_MATCHING_RECORD,
1275 p_token1 => G_COL_NAME_TOKEN,
1276 p_token1_value => 'Model Line');
1277 RAISE Okl_Api.G_EXCEPTION_ERROR;
1278 END IF;
1279 FETCH c_model_oec_calc INTO ln_model_line_oec;
1280 CLOSE c_model_oec_calc;
1281 -- To get the OEC of the Addon line
1282 -- DJANASWA change begin 11/12/08
1283 /* OPEN c_addon_oec_calc(p_top_cle_id => p_cle_id,
1284 p_dnz_chr_id => p_dnz_chr_id);
1285 FETCH c_addon_oec_calc INTO ln_addon_line_oec;
1286 CLOSE c_addon_oec_calc;
1287 */
1288 ln_addon_line_oec := Okl_Seeded_Functions_Pvt.total_asset_addon_cost(
1289 p_contract_id => p_dnz_chr_id, p_contract_line_id => p_cle_id);
1290 -- DJANASWA change end 11/12/08
1291
1292 ln_total_line_oec := NVL(ln_model_line_oec,0) + NVL(ln_addon_line_oec,0);
1293 End If; --Bug# 4631549
1294 ELSE
1295 Okl_Api.set_message(p_app_name => G_APP_NAME,
1296 p_msg_name => G_LINE_RECORD);
1297 RAISE Okl_Api.G_EXCEPTION_ERROR;
1298 END IF;
1299 RETURN(ln_total_line_oec);
1300 ELSE
1301 Okl_Api.set_message(p_app_name => G_APP_NAME,
1302 p_msg_name => G_INVALID_CRITERIA);
1303 RAISE Okl_Api.G_EXCEPTION_ERROR;
1304 END IF;
1305 EXCEPTION
1306 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1307 -- If the cursor is open then it has to be closed
1308 IF get_lty_code%ISOPEN THEN
1309 CLOSE get_lty_code;
1310 END IF;
1311 IF c_contract_oec_calc%ISOPEN THEN
1312 CLOSE c_contract_oec_calc;
1313 END IF;
1314 IF c_contract_oec_calc_incl_term%ISOPEN THEN
1315 CLOSE c_contract_oec_calc_incl_term;
1316 END IF;
1317 IF c_model_oec_calc%ISOPEN THEN
1318 CLOSE c_model_oec_calc;
1319 END IF;
1320 IF c_addon_oec_calc%ISOPEN THEN
1321 CLOSE c_addon_oec_calc;
1322 END IF;
1323 RETURN(0);
1324 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1325 -- If the cursor is open then it has to be closed
1326 IF get_lty_code%ISOPEN THEN
1327 CLOSE get_lty_code;
1328 END IF;
1329 IF c_contract_oec_calc%ISOPEN THEN
1330 CLOSE c_contract_oec_calc;
1331 END IF;
1332 IF c_contract_oec_calc_incl_term%ISOPEN THEN
1333 CLOSE c_contract_oec_calc_incl_term;
1334 END IF;
1335 IF c_model_oec_calc%ISOPEN THEN
1336 CLOSE c_model_oec_calc;
1337 END IF;
1338 IF c_addon_oec_calc%ISOPEN THEN
1339 CLOSE c_addon_oec_calc;
1340 END IF;
1341 RETURN(0);
1342 WHEN OTHERS THEN
1343
1344 -- If the cursor is open then it has to be closed
1345 IF get_lty_code%ISOPEN THEN
1346 CLOSE get_lty_code;
1347 END IF;
1348 IF c_contract_oec_calc%ISOPEN THEN
1349 CLOSE c_contract_oec_calc;
1350 END IF;
1351 IF c_contract_oec_calc_incl_term%ISOPEN THEN
1352 CLOSE c_contract_oec_calc_incl_term;
1353 END IF;
1354 IF c_model_oec_calc%ISOPEN THEN
1355 CLOSE c_model_oec_calc;
1356 END IF;
1357 IF c_addon_oec_calc%ISOPEN THEN
1358 CLOSE c_addon_oec_calc;
1359 END IF;
1360 RETURN(0);
1361 END line_oec;
1362
1363 --Bug# 3638568 : This formula modified to conditionally include terminated lines
1364 ----------------------------------------------------------------------------------------------------
1365
1366 -- Start of Comments
1367 -- Created By: Santhosh Siruvole (ssiruvol)
1368 -- Function Name contract_tradein
1369 -- Description: returns the sum of tradein values of all financial asset lines of a contract.
1370 -- Dependencies:
1371 -- Parameters: contract id.
1372 -- Version: 1.0
1373 -- End of Commnets
1374
1375 ----------------------------------------------------------------------------------------------------
1376 FUNCTION contract_tradein(
1377 p_chr_id IN NUMBER,
1378 p_line_id IN NUMBER) RETURN NUMBER IS
1379
1380 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_TRADEIN_VALUE';
1381 l_api_version CONSTANT NUMBER := 1;
1382 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1383 x_msg_count NUMBER;
1384 x_msg_data VARCHAR2(256);
1385
1386 l_tradeIn_value NUMBER := 0;
1387
1388 l_discount_incl_terminated BOOLEAN := FALSE;
1389
1390 BEGIN
1391
1392 IF ( p_chr_id IS NULL ) THEN
1393 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1394 END IF;
1395
1396 -- rmunjulu 4042892
1397 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1398 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1399 LOOP
1400 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1401 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1402 l_discount_incl_terminated := TRUE;
1403 END IF;
1404 END LOOP;
1405 END IF;
1406
1407 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
1408 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1409 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1410 -- rmunjulu 4042892
1411 IF l_discount_incl_terminated THEN
1412 SELECT NVL(SUM(kle.tradein_amount),0) INTO l_tradeIn_value
1413 FROM OKC_LINE_STYLES_B LS,
1414 okl_K_lines_full_v kle,
1415 okc_statuses_b sts
1416 WHERE LS.ID = KLE.LSE_ID
1417 AND LS.LTY_CODE ='FREE_FORM1'
1418 AND KLE.dnz_chr_iD = p_chr_id
1419 AND kle.sts_code = sts.code
1420 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1421 ELSE
1422 SELECT NVL(SUM(kle.tradein_amount),0) INTO l_tradeIn_value
1423 FROM OKC_LINE_STYLES_B LS,
1424 okl_K_lines_full_v kle,
1425 okc_statuses_b sts
1426 WHERE LS.ID = KLE.LSE_ID
1427 AND LS.LTY_CODE ='FREE_FORM1'
1428 AND KLE.dnz_chr_iD = p_chr_id
1429 AND kle.sts_code = sts.code
1430 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1431 END IF;
1432
1433 RETURN l_tradeIn_value;
1434
1435
1436 EXCEPTION
1437
1438 WHEN OTHERS THEN
1439 Okl_Api.SET_MESSAGE(
1440 p_app_name => G_APP_NAME,
1441 p_msg_name => G_UNEXPECTED_ERROR,
1442 p_token1 => G_SQLCODE_TOKEN,
1443 p_token1_value => SQLCODE,
1444 p_token2 => G_SQLERRM_TOKEN,
1445 p_token2_value => SQLERRM);
1446 RETURN NULL;
1447
1448
1449 END contract_tradein;
1450
1451 --Bug# 3638568 : This function modified to conditionally include terminated lines if called from pricing
1452 ----------------------------------------------------------------------------------------------------
1453
1454 -- Start of Comments
1455 -- Created By: Santhosh Siruvole (ssiruvol)
1456 -- Function Name line_tradein
1457 -- Description: returns the tradein of a financial asset line.
1458 -- Dependencies:
1459 -- Parameters: contract id and line id.
1460 -- Version: 1.0
1461 -- End of Commnets
1462
1463 ----------------------------------------------------------------------------------------------------
1464 FUNCTION line_tradein(
1465 p_chr_id IN NUMBER,
1466 p_line_id IN NUMBER) RETURN NUMBER IS
1467
1468 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_LINE_TRADEIN_VALUE';
1469 l_api_version CONSTANT NUMBER := 1;
1470 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1471 x_msg_count NUMBER;
1472 x_msg_data VARCHAR2(256);
1473
1474 l_tradeIn_value NUMBER := 0.0;
1475
1476 CURSOR trdinval_csr( chrID NUMBER, lineID NUMBER) IS
1477 SELECT NVL(kle.tradein_amount,0.0) amnt,
1478 kle.dnz_chr_id chrId,
1479 kle.id lneId
1480 FROM OKC_LINE_STYLES_B LS,
1481 okl_K_lines_full_v kle,
1482 okc_statuses_b sts
1483 WHERE LS.ID = kLE.LSE_ID
1484 AND LS.LTY_CODE ='FREE_FORM1'
1485 AND kLE.dnz_chr_id = chrID
1486 AND kLE.ID = lineID
1487 AND kle.sts_code = sts.code
1488 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1489
1490 CURSOR trdinval_csr_incl_terminated( chrID NUMBER, lineID NUMBER) IS
1491 SELECT NVL(kle.tradein_amount,0.0) amnt,
1492 kle.dnz_chr_id chrId,
1493 kle.id lneId
1494 FROM OKC_LINE_STYLES_B LS,
1495 okl_K_lines_full_v kle,
1496 okc_statuses_b sts
1497 WHERE LS.ID = kLE.LSE_ID
1498 AND LS.LTY_CODE ='FREE_FORM1'
1499 AND kLE.dnz_chr_id = chrID
1500 AND kLE.ID = lineID
1501 AND kle.sts_code = sts.code
1502 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1503
1504 l_trdinval_rec trdinval_csr%ROWTYPE;
1505
1506 l_discount_incl_terminated BOOLEAN := FALSE;
1507
1508 BEGIN
1509
1510 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL))THEN
1511 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1512 END IF;
1513
1514 -- rmunjulu 4042892
1515 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1516 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1517 LOOP
1518 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1519 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1520 l_discount_incl_terminated := TRUE;
1521 END IF;
1522 END LOOP;
1523 END IF;
1524
1525 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
1526 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1527 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1528
1529 IF l_discount_incl_terminated THEN
1530 OPEN trdinval_csr_incl_terminated ( p_chr_id, p_line_id );
1531 FETCH trdinval_csr_incl_terminated INTO l_trdinval_rec;
1532 IF( trdinval_csr_incl_terminated%NOTFOUND ) THEN
1533 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1534 END IF;
1535 CLOSE trdinval_csr_incl_terminated;
1536 ELSE
1537 OPEN trdinval_csr ( p_chr_id, p_line_id );
1538 FETCH trdinval_csr INTO l_trdinval_rec;
1539 IF( trdinval_csr%NOTFOUND ) THEN
1540 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1541 END IF;
1542 CLOSE trdinval_csr;
1543 END IF;
1544
1545 l_tradeIn_value := l_trdinval_rec.amnt;
1546 RETURN l_tradeIn_value;
1547
1548
1549 EXCEPTION
1550 WHEN OTHERS THEN
1551 IF trdinval_csr_incl_terminated%ISOPEN THEN
1552 CLOSE trdinval_csr_incl_terminated;
1553 END IF;
1554 IF trdinval_csr%ISOPEN THEN
1555 CLOSE trdinval_csr;
1556 END IF;
1557 Okl_Api.SET_MESSAGE(
1558 p_app_name => G_APP_NAME,
1559 p_msg_name => G_UNEXPECTED_ERROR,
1560 p_token1 => G_SQLCODE_TOKEN,
1561 p_token1_value => SQLCODE,
1562 p_token2 => G_SQLERRM_TOKEN,
1563 p_token2_value => SQLERRM);
1564 RETURN NULL;
1565
1566 END line_tradein;
1567
1568 --Bug# 3638568 : This function modified to conditionally include terminated lines if called from pricing
1569 ----------------------------------------------------------------------------------------------------
1570
1571 -- Start of Comments
1572 -- Created By: Santhosh Siruvole (ssiruvol)
1573 -- Function Name contract_capreduction
1574 -- Description: returns the sum of capital reduction of financial asset lines of a contract.
1575 -- Dependencies:
1576 -- Parameters: contract id.
1577 -- Version: 1.0
1578 -- End of Commnets
1579
1580 ----------------------------------------------------------------------------------------------------
1581 FUNCTION contract_capital_reduction(
1582 p_chr_id IN NUMBER,
1583 p_line_id IN NUMBER) RETURN NUMBER IS
1584
1585 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_CONTRACT_CAPITAL_REDUCTION_VALUE';
1586 l_api_version CONSTANT NUMBER := 1;
1587 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1588 x_msg_count NUMBER;
1589 x_msg_data VARCHAR2(256);
1590
1591 l_capred_value NUMBER := 0;
1592
1593 CURSOR l_lines_csr( chrId NUMBER ) IS
1594 SELECT kle.id
1595 FROM okc_line_styles_b ls,
1596 okl_K_lines_full_v kle,
1597 okc_statuses_b sts
1598 WHERE ls.id = kle.lse_id
1599 AND ls.lty_code = 'FREE_FORM1'
1600 AND kle.dnz_chr_id = chrId
1601 AND kle.sts_code = sts.code
1602 -- start: cklee: okl.h Sales Quote IA Authoring
1603 AND kle.CAPITALIZE_DOWN_PAYMENT_YN = 'Y'
1604 -- end: cklee: okl.h Sales Quote IA Authoring
1605 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1606
1607
1608 CURSOR l_lines_csr_incl_terminated( chrId NUMBER ) IS
1609 SELECT kle.id
1610 FROM okc_line_styles_b ls,
1611 okl_K_lines_full_v kle,
1612 okc_statuses_b sts
1613 WHERE ls.id = kle.lse_id
1614 AND ls.lty_code = 'FREE_FORM1'
1615 AND kle.dnz_chr_id = chrId
1616 AND kle.sts_code = sts.code
1617 -- start: cklee: okl.h Sales Quote IA Authoring
1618 AND kle.CAPITALIZE_DOWN_PAYMENT_YN = 'Y'
1619 -- end: cklee: okl.h Sales Quote IA Authoring
1620 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1621
1622
1623 l_lines_rec l_lines_csr%ROWTYPE;
1624
1625 l_discount_incl_terminated BOOLEAN := FALSE;
1626 BEGIN
1627
1628 IF ( p_chr_id IS NULL ) THEN
1629 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1630 END IF;
1631
1632 -- rmunjulu 4042892
1633 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1634 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1635 LOOP
1636 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1637 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1638 l_discount_incl_terminated := TRUE;
1639 END IF;
1640 END LOOP;
1641 END IF;
1642
1643 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
1644 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1645 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1646 IF l_discount_incl_terminated THEN
1647 FOR l_lines_rec IN l_lines_csr_incl_terminated ( p_chr_id )
1648 LOOP
1649
1650 l_capred_value := l_capred_value + line_capital_reduction(p_chr_id, l_lines_rec.id);
1651
1652 END LOOP;
1653 ELSE
1654 FOR l_lines_rec IN l_lines_csr ( p_chr_id )
1655 LOOP
1656
1657 l_capred_value := l_capred_value + line_capital_reduction(p_chr_id, l_lines_rec.id);
1658
1659 END LOOP;
1660 END IF;
1661
1662 RETURN l_capred_value;
1663
1664
1665 EXCEPTION
1666
1667 WHEN OTHERS THEN
1668 IF l_lines_csr_incl_terminated%ISOPEN THEN
1669 CLOSE l_lines_csr_incl_terminated;
1670 END IF;
1671 IF l_lines_csr%ISOPEN THEN
1672 CLOSE l_lines_csr;
1673 END IF;
1674 Okl_Api.SET_MESSAGE(
1675 p_app_name => G_APP_NAME,
1676 p_msg_name => G_UNEXPECTED_ERROR,
1677 p_token1 => G_SQLCODE_TOKEN,
1678 p_token1_value => SQLCODE,
1679 p_token2 => G_SQLERRM_TOKEN,
1680 p_token2_value => SQLERRM);
1681 RETURN NULL;
1682
1683 END contract_capital_reduction;
1684
1685 --Bug# 3638568 : This function modified to conditionally include TERMINATED lines if called from pricing
1686 ----------------------------------------------------------------------------------------------------
1687
1688 -- Start of Comments
1689 -- Created By: Santhosh Siruvole (ssiruvol)
1690 -- Function Name line_capreduction
1691 -- Description: returns the capital reduction of a financial asset line.
1692 -- Dependencies:
1693 -- Parameters: contract id and line id
1694 -- Version: 1.0
1695 -- End of Commnets
1696
1697 ----------------------------------------------------------------------------------------------------
1698 FUNCTION line_capital_reduction(
1699 p_chr_id IN NUMBER,
1700 p_line_id IN NUMBER) RETURN NUMBER IS
1701
1702
1703 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_CAPITAL_REDUCTION_VALUE';
1704 l_api_version CONSTANT NUMBER := 1;
1705 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1706 x_msg_count NUMBER;
1707 x_msg_data VARCHAR2(256);
1708
1709 l_capred_value NUMBER := 0;
1710 l_capred_percent NUMBER := 0;
1711 l_capred_incl_terminated BOOLEAN := FALSE;
1712 l_caplitalize_flag varchar2(3);
1713
1714 -- start: cklee: okl.h Sales Quote IA Authoring
1715 CURSOR l_lines_csr(p_chr_id number,
1716 p_line_id number)
1717 IS
1718 SELECT NVL(kle.capital_reduction,0) capital_reduction,
1719 NVL(kle.capital_reduction_percent,0) capital_reduction_percent,
1720 NVL(kle.CAPITALIZE_DOWN_PAYMENT_YN, 'N') CAPITALIZE_DOWN_PAYMENT_YN,
1721 sts.ste_code
1722 FROM OKC_LINE_STYLES_B LS,
1723 okl_K_lines_full_v kle,
1724 okc_statuses_b sts
1725 WHERE LS.ID = KLE.LSE_ID
1726 AND LS.LTY_CODE ='FREE_FORM1'
1727 AND KLE.dnz_chr_id = p_chr_id
1728 AND KLE.ID = p_line_id
1729 AND kle.sts_code = sts.code
1730 ;
1731 -- end: cklee: okl.h Sales Quote IA Authoring
1732
1733 BEGIN
1734
1735 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL))THEN
1736 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1737 END IF;
1738
1739 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
1740 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1741 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1742 --l_capred_incl_terminated := TRUE;
1743 --END IF;
1744
1745 -- rmunjulu 4042892
1746 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1747 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1748 LOOP
1749 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1750 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1751 l_capred_incl_terminated := TRUE;
1752 END IF;
1753 END LOOP;
1754 END IF;
1755
1756 IF l_capred_incl_terminated = TRUE THEN
1757
1758 -- start: cklee: okl.h Sales Quote IA Authoring
1759 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
1760 IF this_row.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD') AND
1761 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
1762 l_capred_value := this_row.capital_reduction;
1763 END IF;
1764 END LOOP;
1765 /* SELECT NVL(kle.capital_reduction,0) INTO l_capred_value
1766 FROM OKC_LINE_STYLES_B LS,
1767 okl_K_lines_full_v kle,
1768 okc_statuses_b sts
1769 WHERE LS.ID = KLE.LSE_ID
1770 AND LS.LTY_CODE ='FREE_FORM1'
1771 AND KLE.dnz_chr_id = p_chr_id
1772 AND KLE.ID = p_line_id
1773 AND kle.sts_code = sts.code
1774 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1775 */
1776 -- end: cklee: okl.h Sales Quote IA Authoring
1777 ELSE
1778 -- start: cklee: okl.h Sales Quote IA Authoring
1779 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
1780 IF this_row.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD') AND
1781 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
1782 l_capred_value := this_row.capital_reduction;
1783 END IF;
1784 END LOOP;
1785
1786 /* SELECT NVL(kle.capital_reduction,0) INTO l_capred_value
1787 FROM OKC_LINE_STYLES_B LS,
1788 okl_K_lines_full_v kle,
1789 okc_statuses_b sts
1790 WHERE LS.ID = KLE.LSE_ID
1791 AND LS.LTY_CODE ='FREE_FORM1'
1792 AND KLE.dnz_chr_id = p_chr_id
1793 AND KLE.ID = p_line_id
1794 AND kle.sts_code = sts.code
1795 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1796 */
1797 END IF;
1798
1799 -- end: cklee: okl.h Sales Quote IA Authoring
1800 IF( l_capred_value = 0) THEN
1801 IF l_capred_incl_terminated = TRUE THEN
1802 -- start: cklee: okl.h Sales Quote IA Authoring
1803 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
1804 IF this_row.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD') AND
1805 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
1806 l_capred_percent := this_row.capital_reduction_percent;
1807 END IF;
1808 END LOOP;
1809
1810 /* SELECT NVL(kle.capital_reduction_percent,0) INTO l_capred_percent
1811 FROM OKC_LINE_STYLES_B LS,
1812 okl_K_lines_full_v kle,
1813 okc_statuses_b sts
1814 WHERE LS.ID = KLE.LSE_ID
1815 AND LS.LTY_CODE ='FREE_FORM1'
1816 AND KLE.dnz_chr_id = p_chr_id
1817 AND KLE.ID = p_line_id
1818 AND kle.sts_code = sts.code
1819 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1820 */
1821 -- end: cklee: okl.h Sales Quote IA Authoring
1822 ELSE
1823 -- start: cklee: okl.h Sales Quote IA Authoring
1824 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
1825 IF this_row.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD') AND
1826 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
1827 l_capred_percent := this_row.capital_reduction_percent;
1828 END IF;
1829 END LOOP;
1830
1831 /* SELECT NVL(kle.capital_reduction_percent,0) INTO l_capred_percent
1832 FROM OKC_LINE_STYLES_B LS,
1833 okl_K_lines_full_v kle,
1834 okc_statuses_b sts
1835 WHERE LS.ID = KLE.LSE_ID
1836 AND LS.LTY_CODE ='FREE_FORM1'
1837 AND KLE.dnz_chr_id = p_chr_id
1838 AND KLE.ID = p_line_id
1839 AND kle.sts_code = sts.code
1840 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1841 */
1842 -- end: cklee: okl.h Sales Quote IA Authoring
1843 END IF;
1844
1845 IF( l_capred_percent <> 0) THEN
1846 l_capred_value := line_oec( p_chr_id, p_line_id ) * l_capred_percent / 100.00;
1847 END IF;
1848
1849 END IF;
1850
1851 RETURN l_capred_value;
1852
1853
1854 EXCEPTION
1855
1856 WHEN OTHERS THEN
1857 Okl_Api.SET_MESSAGE(
1858 p_app_name => G_APP_NAME,
1859 p_msg_name => G_UNEXPECTED_ERROR,
1860 p_token1 => G_SQLCODE_TOKEN,
1861 p_token1_value => SQLCODE,
1862 p_token2 => G_SQLERRM_TOKEN,
1863 p_token2_value => SQLERRM);
1864
1865 RETURN NULL;
1866
1867 END line_capital_reduction;
1868
1869 --Bug# 3638568 : This function modified to conditionally include TERMINATED lines if called from pricing
1870 ----------------------------------------------------------------------------------------------------
1871
1872 -- Start of Comments
1873 -- Created By: Santhosh Siruvole (ssiruvol)
1874 -- Function Name line_feescapitalized
1875 -- Description: returns the capitalized fees of a financial asset line.
1876 -- Dependencies:
1877 -- Parameters: contract id and line id
1878 -- Version: 1.0
1879 -- End of Commnets
1880
1881 ----------------------------------------------------------------------------------------------------
1882 FUNCTION line_fees_capitalized(
1883 p_chr_id IN NUMBER,
1884 p_line_id IN NUMBER) RETURN NUMBER IS
1885
1886 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_FEES_CAPITAL_AMOUNT_VALUE';
1887 l_api_version CONSTANT NUMBER := 1;
1888 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1889 x_msg_count NUMBER;
1890 x_msg_data VARCHAR2(256);
1891
1892 l_fees_value NUMBER := 0;
1893
1894 CURSOR l_fee_csr( kleId NUMBER) IS
1895 SELECT NVL(SUM(kle_cov.capital_amount),0) CapAmountLines
1896 FROM OKC_LINE_STYLES_B LSEB,
1897 OKC_K_ITEMS CIM,
1898 OKL_K_LINES KLE_COV,
1899 OKC_K_LINES_B CLEB_COV,
1900 OKC_STATUSES_B STSB
1901 WHERE LSEB.ID = CLEB_COV.LSE_ID
1902 AND LSEB.lty_code = 'LINK_FEE_ASSET'
1903 AND CIM.jtot_object1_code = 'OKX_COVASST'
1904 AND CLEB_COV.id = CIM.cle_id
1905 AND KLE_COV.id = CLEB_COV.ID
1906 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
1907 AND cim.object1_id1 = to_char(kleId)
1908 AND CLEB_COV.sts_code = STSB.code
1909 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1910
1911 CURSOR l_fee_csr_incl_terminated( kleId NUMBER) IS
1912 SELECT NVL(SUM(kle_cov.capital_amount),0) CapAmountLines
1913 FROM OKC_LINE_STYLES_B LSEB,
1914 OKC_K_ITEMS CIM,
1915 OKL_K_LINES KLE_COV,
1916 OKC_K_LINES_B CLEB_COV,
1917 OKC_STATUSES_B STSB
1918 WHERE LSEB.ID = CLEB_COV.LSE_ID
1919 AND LSEB.lty_code = 'LINK_FEE_ASSET'
1920 AND CIM.jtot_object1_code = 'OKX_COVASST'
1921 AND CLEB_COV.id = CIM.cle_id
1922 AND KLE_COV.id = CLEB_COV.ID
1923 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
1924 AND cim.object1_id1 = to_char(kleId)
1925 AND CLEB_COV.sts_code = STSB.code
1926 AND STSB.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1927
1928 --Bug# 5150150 -- start
1929 CURSOR l_sys_source_code_csr (p_chr_id NUMBER) IS
1930 SELECT ID,ORIG_SYSTEM_SOURCE_CODE
1931 FROM OKC_K_HEADERS_B
1932 WHERE ID = p_chr_id;
1933
1934 l_chr_id okc_k_headers_b.id%type;
1935 l_orig_systm_source_code okc_k_headers_b.orig_system_source_code%type;
1936 --Bug# 5150150 -- end
1937 l_feeline_rec l_fee_csr%ROWTYPE;
1938 l_discount_incl_terminated BOOLEAN := FALSE;
1939
1940 BEGIN
1941
1942 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL)) THEN
1943 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1944 END IF;
1945
1946 --Bug# 5150150 -- start
1947 OPEN l_sys_source_code_csr ( p_chr_id );
1948 FETCH l_sys_source_code_csr INTO l_chr_id, l_orig_systm_source_code;
1949 CLOSE l_sys_source_code_csr;
1950
1951 if ((l_orig_systm_source_code is not null) and (l_orig_systm_source_code = 'OKL_RELEASE')) then
1952 l_fees_value := 0.0;
1953 else
1954 --Bug# 5150150 -- end
1955 -- rmunjulu 4042892
1956 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1957 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1958 LOOP
1959 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1960 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1961 l_discount_incl_terminated := TRUE;
1962 END IF;
1963 END LOOP;
1964 END IF;
1965
1966 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
1967 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1968 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1969 IF l_discount_incl_terminated THEN
1970 OPEN l_fee_csr_incl_terminated ( p_line_id );
1971 FETCH l_fee_csr_incl_terminated INTO l_feeline_rec;
1972 IF( l_fee_csr_incl_terminated%NOTFOUND ) THEN
1973 l_fees_value := 0.0;
1974 END IF;
1975 CLOSE l_fee_csr_incl_terminated;
1976 ELSE
1977 OPEN l_fee_csr( p_line_id );
1978 FETCH l_fee_csr INTO l_feeline_rec;
1979 IF( l_fee_csr%NOTFOUND ) THEN
1980 l_fees_value := 0.0;
1981 END IF;
1982 CLOSE l_fee_csr;
1983 END IF;
1984
1985 l_fees_value := l_feeline_rec.CapAmountLines;
1986
1987 end if;
1988 RETURN l_fees_value;
1989
1990
1991 EXCEPTION
1992
1993 WHEN OTHERS THEN
1994 IF l_fee_csr_incl_terminated%ISOPEN THEN
1995 CLOSE l_fee_csr_incl_terminated;
1996 END IF;
1997 IF l_fee_csr%ISOPEN THEN
1998 CLOSE l_fee_csr;
1999 END IF;
2000
2001 Okl_Api.SET_MESSAGE(
2002 p_app_name => G_APP_NAME,
2003 p_msg_name => G_UNEXPECTED_ERROR,
2004 p_token1 => G_SQLCODE_TOKEN,
2005 p_token1_value => SQLCODE,
2006 p_token2 => G_SQLERRM_TOKEN,
2007 p_token2_value => SQLERRM);
2008 RETURN NULL;
2009
2010 END line_fees_capitalized;
2011
2012 --Bug# 3638568 : This function modified to conditionally include TERMINATED lines if called from pricing
2013 ----------------------------------------------------------------------------------------------------
2014
2015 -- Start of Comments
2016 -- Created By: Santhosh Siruvole (ssiruvol)
2017 -- Function Name contract_feescapitalized
2018 -- Description: returns the sum of capitalized fees of all financial asset lines of a contract.
2019 -- Dependencies:
2020 -- Parameters: contract id.
2021 -- Version: 1.0
2022 -- End of Commnets
2023
2024 ----------------------------------------------------------------------------------------------------
2025 FUNCTION contract_fees_capitalized(
2026 p_chr_id IN NUMBER,
2027 p_line_id IN NUMBER) RETURN NUMBER IS
2028
2029 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_FEES_CAPITAL_AMOUNT_VALUE';
2030 l_api_version CONSTANT NUMBER := 1;
2031 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2032 x_msg_count NUMBER;
2033 x_msg_data VARCHAR2(256);
2034
2035
2036 CURSOR l_lines_csr( chrId NUMBER ) IS
2037 SELECT kle.id
2038 FROM okc_line_styles_b ls,
2039 okl_K_lines_full_v kle,
2040 okc_statuses_b sts
2041 WHERE ls.id = kle.lse_id
2042 AND ls.lty_code = 'FREE_FORM1'
2043 AND kle.dnz_chr_id = chrId
2044 AND kle.sts_code = sts.code
2045 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2046
2047 CURSOR l_lines_csr_incl_terminated( chrId NUMBER ) IS
2048 SELECT kle.id
2049 FROM okc_line_styles_b ls,
2050 okl_K_lines_full_v kle,
2051 okc_statuses_b sts
2052 WHERE ls.id = kle.lse_id
2053 AND ls.lty_code = 'FREE_FORM1'
2054 AND kle.dnz_chr_id = chrId
2055 AND kle.sts_code = sts.code
2056 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
2057
2058
2059
2060 l_lines_rec l_lines_csr%ROWTYPE;
2061
2062 l_fees_value NUMBER := 0;
2063
2064 l_discount_incl_terminated BOOLEAN := FALSE;
2065
2066 BEGIN
2067
2068 IF ( p_chr_id IS NULL ) THEN
2069 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2070 END IF;
2071
2072 -- rmunjulu 4042892
2073 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
2074 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
2075 LOOP
2076 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
2077 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
2078 l_discount_incl_terminated := TRUE;
2079 END IF;
2080 END LOOP;
2081 END IF;
2082
2083 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
2084 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
2085 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
2086 IF l_discount_incl_terminated THEN
2087 FOR l_lines_rec IN l_lines_csr_incl_terminated ( p_chr_id )
2088 LOOP
2089
2090 l_fees_value := l_fees_value + line_fees_capitalized(p_chr_id, l_lines_rec.id);
2091
2092 END LOOP;
2093 ELSE
2094 FOR l_lines_rec IN l_lines_csr ( p_chr_id )
2095 LOOP
2096
2097 l_fees_value := l_fees_value + line_fees_capitalized(p_chr_id, l_lines_rec.id);
2098
2099 END LOOP;
2100 END IF;
2101
2102 RETURN l_fees_value;
2103
2104
2105 EXCEPTION
2106
2107 WHEN OTHERS THEN
2108 IF l_lines_csr_incl_terminated%ISOPEN THEN
2109 CLOSE l_lines_csr_incl_terminated;
2110 END IF;
2111 IF l_lines_csr%ISOPEN THEN
2112 CLOSE l_lines_csr;
2113 END IF;
2114 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
2115 p_msg_name => G_UNEXPECTED_ERROR,
2116 p_token1 => G_SQLCODE_TOKEN,
2117 p_token1_value => SQLCODE,
2118 p_token2 => G_SQLERRM_TOKEN,
2119 p_token2_value => SQLERRM);
2120 RETURN NULL;
2121
2122 END contract_fees_capitalized;
2123
2124 ----------------------------------------------------------------------------------------------------
2125
2126 -- Start of Comments
2127 -- Created By: Santhosh Siruvole (ssiruvol)
2128 -- Function Name line_servicecapitalized
2129 -- Description: returns the capitalized service fees of a financial asset line.
2130 -- Dependencies:
2131 -- Parameters: contract id and line id
2132 -- Version: 1.0
2133 -- End of Commnets
2134
2135 ----------------------------------------------------------------------------------------------------
2136 FUNCTION line_service_capitalized(
2137 p_chr_id IN NUMBER,
2138 p_line_id IN NUMBER) RETURN NUMBER IS
2139
2140 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_SVC_CAP_AMNT_VALUE';
2141 l_api_version CONSTANT NUMBER := 1;
2142 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2143 x_msg_count NUMBER;
2144 x_msg_data VARCHAR2(256);
2145
2146 l_srvcs_value NUMBER := 0;
2147
2148
2149 CURSOR l_srvcline_csr ( kleId NUMBER ) IS
2150 SELECT NVL(SUM(kle.capital_amount),0) CapAmountSubLines
2151 FROM OKC_LINE_STYLES_B LS,
2152 okc_k_items cim,
2153 okl_K_lines_full_v kle,
2154 okc_statuses_b sts
2155 WHERE LS.ID = KLE.LSE_ID
2156 AND ls.lty_code = 'LINK_SERV_ASSET'
2157 AND cim.jtot_object1_code = 'OKX_COVASST'
2158 AND kle.id = cim.cle_id
2159 AND cim.object1_id1 = to_char(kleId)
2160 AND kle.sts_code = sts.code
2161 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2162
2163 CURSOR srvc_strm_type_csr ( kleid NUMBER ) IS
2164 SELECT sty.capitalize_yn,
2165 sty.name
2166 FROM okl_strm_type_v sty,
2167 okc_k_items cim,
2168 okc_line_styles_b ls,
2169 okl_K_lines_full_v kle,
2170 okc_statuses_b sts
2171 WHERE cim.cle_id = kle.id
2172 AND ls.id = kle.lse_id
2173 AND ls.lty_code = 'SOLD_SERVICE'
2174 AND cim.object1_id1 = sty.id
2175 AND cim.object1_id2 = '#'
2176 AND kle.id = kleid
2177 AND kle.sts_code = sts.code
2178 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2179
2180
2181 l_srvcline_rec l_srvcline_csr%ROWTYPE;
2182 l_srvcstrm_rec srvc_strm_type_csr%ROWTYPE;
2183
2184 BEGIN
2185
2186 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL))THEN
2187 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2188 END IF;
2189
2190 OPEN srvc_strm_type_csr( p_line_id );
2191 FETCH srvc_strm_type_csr INTO l_srvcstrm_rec;
2192 IF( srvc_strm_type_csr%NOTFOUND ) THEN
2193 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2194 END IF;
2195 CLOSE srvc_strm_type_csr;
2196
2197 IF( UPPER(l_srvcstrm_rec.capitalize_YN) = 'N' ) THEN
2198 RETURN 0.0;
2199 END IF;
2200
2201 OPEN l_srvcline_csr( p_line_id );
2202 FETCH l_srvcline_csr INTO l_srvcline_rec;
2203 IF( l_srvcline_csr%NOTFOUND ) THEN
2204 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2205 END IF;
2206 CLOSE l_srvcline_csr;
2207
2208 l_srvcs_value := l_srvcline_rec.CapAmountSubLines;
2209
2210 RETURN l_srvcs_value;
2211
2212
2213 EXCEPTION
2214
2215 WHEN OTHERS THEN
2216 Okl_Api.SET_MESSAGE(
2217 p_app_name => G_APP_NAME,
2218 p_msg_name => G_UNEXPECTED_ERROR,
2219 p_token1 => G_SQLCODE_TOKEN,
2220 p_token1_value => SQLCODE,
2221 p_token2 => G_SQLERRM_TOKEN,
2222 p_token2_value => SQLERRM);
2223 RETURN NULL;
2224
2225
2226 END line_service_capitalized;
2227
2228 ------------------------------------------------------------------------------
2229 -- Start of comments
2230 --
2231 -- Procedure Name : contract_total_adjustments
2232 -- Description : Sum of all approved requests for specfiic contract where type = prefunding
2233 -- and amount is negative
2234 -- Business Rules :
2235 -- Parameters :IN: p_contract_id, OUT: amount
2236 -- Version : 1.0
2237 -- History : 20-MAY-02 [email protected] -- Created
2238 --
2239 -- End of comments
2240 ------------------------------------------------------------------------------
2241 FUNCTION contract_total_adjustments(
2242 p_contract_id IN NUMBER
2243 ,p_contract_line_id IN NUMBER
2244 ) RETURN NUMBER
2245 IS
2246 l_amount NUMBER := 0;
2247 -- sjalasut, modified the cursor to have khr_id referred from okl_txl_ap_inv_lns_all_b
2248 -- changes made as part of OKLR12B project.
2249 --start:| 21-Sep-07 cklee Bug: 6438934 |
2250 /*
2251 CURSOR C (p_contract_id NUMBER)
2252 IS
2253 SELECT NVL(SUM(A.amount),0)
2254 FROM okl_trx_ap_invoices_b A
2255 ,okl_txl_ap_inv_lns_all_b B
2256 WHERE A.id = B.tap_id
2257 AND B.khr_id = p_contract_id
2258 AND A.funding_type_code = 'PREFUNDING'
2259 AND A.trx_status_code IN ('APPROVED', 'PROCESSED')
2260 AND A.amount < 0;
2261 */
2262 --end:| 21-Sep-07 cklee Bug: 6438934 |
2263
2264 BEGIN
2265
2266 --start:| 21-Sep-07 cklee Bug: 6438934 |
2267 /*
2268 OPEN C (p_contract_id);
2269 FETCH C INTO l_amount;
2270 CLOSE C;
2271 */
2272 l_amount := okl_funding_pvt.get_chr_funded_adjs(p_contract_id);
2273 --end:| 21-Sep-07 cklee Bug: 6438934 |
2274
2275 RETURN l_amount;
2276 EXCEPTION
2277 WHEN OTHERS THEN
2278 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2279 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2280 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2281 p_token1 => 'OKL_SQLCODE',
2282 p_token1_value => SQLCODE,
2283 p_token2 => 'OKL_SQLERRM',
2284 p_token2_value => SQLERRM);
2285 RETURN NULL;
2286
2287 END;
2288
2289 ------------------------------------------------------------------------------
2290 -- Start of comments
2291 --
2292 -- Procedure Name : contract_amount_prefunded
2293 -- Description : Sum of all approved requests for specfiic contract where type = prefunding
2294 -- Business Rules :
2295 -- Parameters :IN: p_contract_id, OUT: amount
2296 -- Version : 1.0
2297 -- History :13-JAN-02 [email protected] -- Created
2298 -- 22-Jan-07 sjalasut modified cursor c to have khr_id referred
2299 -- from okl_txl_Ap_inv_lns_all_b
2300 --
2301 -- End of comments
2302 ------------------------------------------------------------------------------
2303 FUNCTION contract_amount_prefunded(
2304 p_contract_id IN NUMBER
2305 ,p_contract_line_id IN NUMBER
2306 ) RETURN NUMBER
2307 IS
2308 l_amount NUMBER := 0;
2309
2310 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
2311 -- changes made as part of OKLR12B disbursements project
2312 --start:| 21-Sep-07 cklee Bug: 6438934 |
2313 /*
2314 CURSOR C (p_contract_id NUMBER)
2315 IS
2316 SELECT NVL(SUM(A.amount),0)
2317 FROM okl_trx_ap_invoices_b A
2318 ,okl_Txl_ap_inv_lns_all_b B
2319 WHERE A.id = B.tap_id
2320 AND B.khr_id = p_contract_id
2321 AND A.funding_type_code = 'PREFUNDING'
2322 AND A.trx_status_code IN ('APPROVED', 'PROCESSED')
2323 AND A.amount > 0;
2324 */
2325 --end:| 21-Sep-07 cklee Bug: 6438934 |
2326
2327 BEGIN
2328
2329 --start:| 21-Sep-07 cklee Bug: 6438934 |
2330 /*
2331 OPEN C (p_contract_id);
2332 FETCH C INTO l_amount;
2333 CLOSE C;*/
2334 l_amount := okl_funding_pvt.get_amount_prefunded(p_contract_id);
2335 --end:| 21-Sep-07 cklee Bug: 6438934 |
2336
2337 RETURN l_amount;
2338 EXCEPTION
2339 WHEN OTHERS THEN
2340 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2341 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2342 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2343 p_token1 => 'OKL_SQLCODE',
2344 p_token1_value => SQLCODE,
2345 p_token2 => 'OKL_SQLERRM',
2346 p_token2_value => SQLERRM);
2347 RETURN NULL;
2348
2349 END;
2350 ------------------------------------------------------------------------------
2351 -- Start of comments
2352 --
2353 -- Procedure Name : contract_total_funded
2354 -- Description : Sum of all approved requests for specific contract
2355 -- Business Rules :
2356 -- Parameters :IN: p_contract_id, OUT: amount
2357 -- Version : 1.0
2358 -- History :13-JAN-02 [email protected] -- Created
2359 -- 22-Jan-07 sjalasut modified cursor c to have khr_id referred
2360 -- from okl_txl_Ap_inv_lns_all_b
2361 --
2362 -- End of comments
2363 ------------------------------------------------------------------------------
2364 FUNCTION contract_total_funded(
2365 p_contract_id IN NUMBER
2366 ,p_contract_line_id IN NUMBER
2367 ) RETURN NUMBER
2368 IS
2369 l_amount NUMBER := 0;
2370
2371 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
2372 -- changes made as part of OKLR12B disbursements project
2373 --start:| 21-Sep-07 cklee Bug: 6438934 |
2374 /*
2375 CURSOR C (p_contract_id NUMBER)
2376 IS
2377 SELECT NVL(SUM(A.amount),0)
2378 FROM okl_trx_ap_invoices_b A
2379 ,okl_txl_ap_inv_lns_all_b B
2380 WHERE A.id = B.TAP_ID
2381 AND A.khr_id = p_contract_id
2382 AND A.funding_type_code NOT IN ('SUPPLIER_RETENTION', 'MANUAL_DISB')
2383 AND A.trx_status_code IN ('APPROVED', 'PROCESSED');
2384 */
2385 --end:| 21-Sep-07 cklee Bug: 6438934 |
2386
2387 BEGIN
2388
2389 --start:| 21-Sep-07 cklee Bug: 6438934 |
2390 /* OPEN C (p_contract_id);
2391 FETCH C INTO l_amount;
2392 CLOSE C;*/
2393 l_amount := okl_funding_pvt.get_total_funded(p_contract_id);
2394 --end:| 21-Sep-07 cklee Bug: 6438934 |
2395
2396 RETURN l_amount;
2397 EXCEPTION
2398 WHEN OTHERS THEN
2399 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2400 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2401 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2402 p_token1 => 'OKL_SQLCODE',
2403 p_token1_value => SQLCODE,
2404 p_token2 => 'OKL_SQLERRM',
2405 p_token2_value => SQLERRM);
2406 RETURN NULL;
2407
2408 END;
2409 ------------------------------------------------------------------------------
2410 -- Start of comments
2411 --
2412 -- Procedure Name : contract_total_debits
2413 -- Description : Sum of all approved requests for specific contract where amount is negative (A/P debits)
2414 -- Business Rules :
2415 -- Parameters :IN: p_contract_id, OUT: amount
2416 -- Version : 1.0
2417 -- History :13-JAN-02 [email protected] -- Created
2418 -- 22-Jan-07 sjalasut modified cursor c to have khr_id referred
2419 -- from okl_txl_Ap_inv_lns_all_b
2420 --
2421 -- End of comments
2422 ------------------------------------------------------------------------------
2423 FUNCTION contract_total_debits(
2424 p_contract_id IN NUMBER
2425 ,p_contract_line_id IN NUMBER
2426 ) RETURN NUMBER
2427 IS
2428 l_amount NUMBER := 0;
2429
2430 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
2431 -- changes made as part of OKLR12B disbursements project
2432 --start:| 21-Sep-07 cklee Bug: 6438934 |
2433 /*
2434 CURSOR C (p_contract_id NUMBER)
2435 IS
2436 SELECT NVL(SUM(B.amount),0)
2437 FROM okl_trx_ap_invoices_b A,
2438 okl_txl_ap_inv_lns_all_b B
2439 WHERE A.id = B.tap_id
2440 AND B.khr_id = p_contract_id
2441 AND A.trx_status_code IN ('APPROVED', 'PROCESSED')
2442 AND A.funding_type_code = 'SUPPLIER_RETENTION';
2443 */
2444 --end:| 21-Sep-07 cklee Bug: 6438934 |
2445 BEGIN
2446
2447 --start:| 21-Sep-07 cklee Bug: 6438934 |
2448 /*
2449 OPEN C (p_contract_id);
2450 FETCH C INTO l_amount;
2451 CLOSE C;*/
2452 l_amount := okl_funding_pvt.get_total_retention(p_contract_id);
2453 --end:| 21-Sep-07 cklee Bug: 6438934 |
2454
2455 RETURN l_amount;
2456
2457 EXCEPTION
2458 WHEN OTHERS THEN
2459 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2460 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2461 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2462 p_token1 => 'OKL_SQLCODE',
2463 p_token1_value => SQLCODE,
2464 p_token2 => 'OKL_SQLERRM',
2465 p_token2_value => SQLERRM);
2466 RETURN NULL;
2467
2468 END;
2469 -----------------------------------------------------------------------
2470 -- Start of comments
2471 --
2472 -- Procedure Name : creditline_total_limit
2473 -- Description : Sum of all credit limit (contract line) for specfiic
2474 -- contract entity scs_code = 'CREDITLINE_CONTRACT'
2475 -- Business Rules :
2476 -- Parameters :IN: p_contract_id, OUT: amount
2477 -- Version : 1.0
2478 -- History :13-JAN-02 [email protected] -- Created
2479 --
2480 -- End of comments
2481 ------------------------------------------------------------------------------
2482 FUNCTION creditline_total_limit(
2483 p_contract_id IN NUMBER
2484 ,p_contract_line_id IN NUMBER
2485 ) RETURN NUMBER
2486 IS
2487 l_amount NUMBER := 0;
2488 l_amount_add NUMBER := 0;
2489 l_amount_new NUMBER := 0;
2490 l_amount_reduce NUMBER := 0;
2491
2492 BEGIN
2493
2494 l_amount_add := NVL(creditline_total_addition(p_contract_id),0);
2495 l_amount_new := NVL(creditline_total_new_limit(p_contract_id),0);
2496 l_amount_reduce := NVL(creditline_total_reduction(p_contract_id),0);
2497
2498 l_amount := l_amount_new + l_amount_add - l_amount_reduce;
2499
2500 RETURN l_amount;
2501 EXCEPTION
2502 WHEN OTHERS THEN
2503 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2504 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2505 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2506 p_token1 => 'OKL_SQLCODE',
2507 p_token1_value => SQLCODE,
2508 p_token2 => 'OKL_SQLERRM',
2509 p_token2_value => SQLERRM);
2510 RETURN NULL;
2511
2512 END;
2513 ------------------------------------------------------------------------------
2514 -- Start of comments
2515 --
2516 -- Procedure Name : creditline_total_remaining
2517 -- Description : Sum of all credit limit (contract line) for specfiic contract
2518 -- scs_code = 'CREDITLINE_CONTRACT' and substract from Funding total
2519 -- Business Rules :
2520 -- Parameters :IN: p_contract_id, OUT: amount
2521 -- Version : 1.0
2522 -- History :13-JAN-02 [email protected] -- Created
2523 --
2524 -- End of comments
2525 ------------------------------------------------------------------------------
2526 FUNCTION creditline_total_remaining(
2527 p_contract_id IN NUMBER
2528 ,p_contract_line_id IN NUMBER
2529 ) RETURN NUMBER
2530 IS
2531 l_amount NUMBER := 0;
2532 -- l_amount_funded NUMBER := 0;
2533 -- l_amount_limit NUMBER := 0;
2534 -- l_amount_remain NUMBER := 0;
2535
2536 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
2537 l_api_version NUMBER := 1.0;
2538 x_msg_count NUMBER;
2539 x_msg_data VARCHAR2(4000);
2540 l_init_msg_list VARCHAR2(10) := OKL_API.G_FALSE;
2541
2542 x_value NUMBER := 0;
2543
2544 BEGIN
2545
2546 /*
2547 --l_amount_funded := nvl(creditline_total_funded(p_contract_id),0);
2548 l_amount_limit := NVL(creditline_total_limit(p_contract_id),0);
2549
2550 -- l_amount_remain := OKL_PAY_INVOICES_DISB_PVT.credit_check
2551 l_amount_remain := OKL_BPD_CREDIT_CHECK_PVT.credit_check -- cklee 08/28/03
2552 (p_api_version => l_api_version
2553 ,p_init_msg_list => l_init_msg_list
2554 ,x_return_status => x_return_status
2555 ,x_msg_count => x_msg_count
2556 ,x_msg_data => x_msg_data
2557 ,p_creditline_id => p_contract_id
2558 ,p_credit_max => l_amount_limit);
2559
2560 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2561 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2562 l_amount_remain := 0;
2563 ELSIF (x_return_Status = OKL_API.G_RET_STS_ERROR) THEN
2564 --RAISE OKL_API.G_EXCEPTION_ERROR;
2565 l_amount_remain := 0;
2566 END IF;
2567
2568 l_amount := l_amount_remain;
2569
2570 */
2571
2572 --------------------------------------------------
2573 -- Credit limt Remaining check
2574 --------------------------------------------------
2575 OKL_EXECUTE_FORMULA_PUB.EXECUTE(
2576 p_api_version => l_api_version,
2577 p_init_msg_list => l_init_msg_list,
2578 x_return_status => x_return_status,
2579 x_msg_count => x_msg_count,
2580 x_msg_data => x_msg_data,
2581 p_formula_name => 'CREDIT_CHECK',
2582 p_contract_id => p_contract_id,
2583 x_value => x_value);
2584
2585 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2586 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2587 x_value := 0;
2588 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2589 --RAISE OKL_API.G_EXCEPTION_ERROR;
2590 x_value := 0;
2591 END IF;
2592
2593 l_amount := x_value;
2594
2595 RETURN l_amount;
2596 EXCEPTION
2597 WHEN OTHERS THEN
2598 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2599 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2600 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2601 p_token1 => 'OKL_SQLCODE',
2602 p_token1_value => SQLCODE,
2603 p_token2 => 'OKL_SQLERRM',
2604 p_token2_value => SQLERRM);
2605 RETURN NULL;
2606
2607 END;
2608 ------------------------------------------------------------------------------
2609 -- Start of comments
2610 --
2611 -- Procedure Name : creditline_total_new_limit
2612 -- Description : Sum of all credit new limit (contract line) for specfiic contract
2613 -- scs_code = 'CREDITLINE_CONTRACT'
2614 -- Business Rules :
2615 -- Parameters :IN: p_contract_id, OUT: amount
2616 -- Version : 1.0
2617 -- History :13-JAN-02 [email protected] -- Created
2618 --
2619 -- End of comments
2620 ------------------------------------------------------------------------------
2621 FUNCTION creditline_total_new_limit(
2622 p_contract_id IN NUMBER
2623 --,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
2624 ,p_contract_line_id IN NUMBER
2625 ) RETURN NUMBER
2626 IS
2627 l_amount NUMBER := 0;
2628
2629 CURSOR C (p_contract_id NUMBER)
2630 IS
2631 SELECT NVL(SUM(A.amount),0)
2632 FROM OKL_K_LINES_FULL_V A
2633 WHERE A.dnz_chr_id = p_contract_id
2634 AND A.credit_nature = 'NEW'
2635 AND NVL(TRUNC(A.start_date),TRUNC(SYSDATE)) <= TRUNC(SYSDATE) -- fixed trunc issues
2636 ;
2637
2638 BEGIN
2639
2640 OPEN C (p_contract_id);
2641 FETCH C INTO l_amount;
2642 CLOSE C;
2643
2644 RETURN l_amount;
2645 EXCEPTION
2646 WHEN OTHERS THEN
2647 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2648 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2649 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2650 p_token1 => 'OKL_SQLCODE',
2651 p_token1_value => SQLCODE,
2652 p_token2 => 'OKL_SQLERRM',
2653 p_token2_value => SQLERRM);
2654 RETURN NULL;
2655
2656 END;
2657 ------------------------------------------------------------------------------
2658 -- Start of comments
2659 --
2660 -- Procedure Name : creditline_total_addition
2661 -- Description : Sum of all credit addition (contract line) for specfiic contract
2662 -- scs_code = 'CREDITLINE_CONTRACT'
2663 -- Business Rules :
2664 -- Parameters :IN: p_contract_id, OUT: amount
2665 -- Version : 1.0
2666 -- History :13-JAN-02 [email protected] -- Created
2667 --
2668 -- End of comments
2669 ------------------------------------------------------------------------------
2670 FUNCTION creditline_total_addition(
2671 p_contract_id IN NUMBER
2672 --,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
2673 ,p_contract_line_id IN NUMBER
2674 ) RETURN NUMBER
2675 IS
2676 l_amount NUMBER := 0;
2677
2678 CURSOR C (p_contract_id NUMBER)
2679 IS
2680 SELECT NVL(SUM(A.amount),0)
2681 FROM OKL_K_LINES_FULL_V A
2682 WHERE A.dnz_chr_id = p_contract_id
2683 AND A.credit_nature = 'ADD'
2684 AND NVL(TRUNC(A.start_date),TRUNC(SYSDATE)) <= TRUNC(SYSDATE) -- fixed trunc issues
2685 ;
2686
2687 BEGIN
2688
2689 OPEN C (p_contract_id);
2690 FETCH C INTO l_amount;
2691 CLOSE C;
2692
2693 RETURN l_amount;
2694 EXCEPTION
2695 WHEN OTHERS THEN
2696 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2697 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2698 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2699 p_token1 => 'OKL_SQLCODE',
2700 p_token1_value => SQLCODE,
2701 p_token2 => 'OKL_SQLERRM',
2702 p_token2_value => SQLERRM);
2703 RETURN NULL;
2704
2705 END;
2706 ------------------------------------------------------------------------------
2707 -- Start of comments
2708 --
2709 -- Procedure Name : creditline_total_reduction
2710 -- Description : Sum of all credit addition (contract line) for specfiic contract
2711 -- scs_code = 'CREDITLINE_CONTRACT'
2712 -- Business Rules :
2713 -- Parameters :IN: p_contract_id, OUT: amount
2714 -- Version : 1.0
2715 -- History :13-JAN-02 [email protected] -- Created
2716 --
2717 -- End of comments
2718 ------------------------------------------------------------------------------
2719 FUNCTION creditline_total_reduction(
2720 p_contract_id IN NUMBER
2721 --,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
2722 ,p_contract_line_id IN NUMBER
2723 ) RETURN NUMBER
2724 IS
2725 l_amount NUMBER := 0;
2726
2727 CURSOR C (p_contract_id NUMBER)
2728 IS
2729 SELECT NVL(SUM(A.amount),0)
2730 FROM OKL_K_LINES_FULL_V A
2731 WHERE A.dnz_chr_id = p_contract_id
2732 AND A.credit_nature = 'REDUCE'
2733 AND NVL(TRUNC(A.start_date),TRUNC(SYSDATE)) <= TRUNC(SYSDATE) -- fixed trunc issues
2734 ;
2735
2736 BEGIN
2737
2738 OPEN C (p_contract_id);
2739 FETCH C INTO l_amount;
2740 CLOSE C;
2741
2742 RETURN l_amount;
2743 EXCEPTION
2744 WHEN OTHERS THEN
2745 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2746 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2747 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2748 p_token1 => 'OKL_SQLCODE',
2749 p_token1_value => SQLCODE,
2750 p_token2 => 'OKL_SQLERRM',
2751 p_token2_value => SQLERRM);
2752 RETURN NULL;
2753
2754 END;
2755
2756 /*FUNCTION line_capitalcost(
2757 p_chr_id IN NUMBER,
2758 p_line_id IN NUMBER,
2759 p_capred IN NUMBER,
2760 p_capred_per IN NUMBER,
2761 p_trd_amnt IN NUMBER) RETURN NUMBER IS
2762
2763 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_CAP_AMNT_VALUE';
2764 l_api_version CONSTANT NUMBER := 1;
2765 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2766 x_msg_count NUMBER;
2767 x_msg_data VARCHAR2(256);
2768
2769 l_capamnt_value NUMBER := 0;
2770 l_oec_value NUMBER := 0;
2771 l_oec NUMBER;
2772 l_tradeIn NUMBER;
2773 l_capred NUMBER;
2774 l_feecap NUMBER;
2775 l_servc NUMBER;
2776
2777
2778 BEGIN
2779
2780 IF ( ( p_chr_id IS NULL ) OR ( p_line_id IS NULL ) ) THEN
2781 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2782 END IF;
2783
2784 l_oec_value := line_oec( p_chr_id, p_line_id);
2785 IF ( l_oec_value IS NULL ) THEN
2786 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2787 END IF;
2788
2789 l_capred := p_capred;
2790 IF(( p_capred IS NULL ) OR ( p_capred = 0)) THEN
2791 IF (( p_capred_per IS NULL) OR ( p_capred_per = 0)) THEN
2792 l_capred := 0.0;
2793 ELSE
2794 l_capred := ( l_oec_value * p_capred_per ) / 100.00;
2795 END IF;
2796 END IF;
2797
2798 IF (p_trd_amnt IS NULL) THEN
2799 l_tradeIn := 0.0;
2800 ELSE
2801 l_tradeIn := p_trd_amnt;
2802 END IF;
2803
2804 l_capamnt_value := l_oec_value - l_capred - l_tradeIn;
2805
2806 RETURN l_capamnt_value;
2807
2808 EXCEPTION
2809 WHEN OTHERS THEN
2810 Okl_Api.SET_MESSAGE(
2811 p_app_name => G_APP_NAME,
2812 p_msg_name => G_UNEXPECTED_ERROR,
2813 p_token1 => G_SQLCODE_TOKEN,
2814 p_token1_value => SQLCODE,
2815 p_token2 => G_SQLERRM_TOKEN,
2816 p_token2_value => SQLERRM);
2817 RETURN NULL;
2818
2819
2820 END line_capitalcost;
2821
2822 */
2823
2824 ----------------------------------------------------------------------------------------------------
2825
2826 -- Start of Comments
2827 -- Created By : Shri Iyer
2828 -- Function Name : CONTRACT_DAYS_TO_ACCRUE
2829 -- Description : This function returns the number of days to accrue
2830 -- Dependencies : None
2831 -- Parameters : contract id, contract line id
2832 -- Version : 1.0
2833 -- End of Commnets
2834
2835 ----------------------------------------------------------------------------------------------------
2836
2837 FUNCTION CONTRACT_DAYS_TO_ACCRUE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
2838
2839 l_days_to_accrue NUMBER;
2840 l_last_int_calc_date DATE;
2841 l_period_end_date DATE;
2842 l_period_start_date DATE;
2843 l_days_in_month VARCHAR2(100);
2844 l_contract_number VARCHAR2(2000);
2845 l_days_in_year VARCHAR2(100);
2846 l_advance_arrears VARCHAR2(1);
2847 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2848
2849 -- Fetch contract days in a month
2850 CURSOR days_in_month IS
2851 SELECT days_in_a_month_code
2852 FROM OKL_K_RATE_PARAMS
2853 WHERE khr_id = p_khr_id
2854 AND parameter_type_code = 'ACTUAL'
2855 AND effective_to_date IS NULL;
2856
2857 -- cursor to get the contract number
2858 CURSOR contract_num_csr IS
2859 SELECT contract_number
2860 FROM OKC_K_HEADERS_B
2861 WHERE id = p_khr_id;
2862
2863 -- Fetch contract days in a year
2864 CURSOR days_in_year IS
2865 SELECT days_in_a_year_code
2866 FROM OKL_K_RATE_PARAMS
2867 WHERE khr_id = p_khr_id
2868 AND parameter_type_code = 'ACTUAL'
2869 AND effective_to_date IS NULL;
2870
2871 CURSOR adv_arr_csr IS
2872 SELECT
2873 rulb2.RULE_INFORMATION10 arrears_yn
2874 FROM okc_k_lines_b cleb,
2875 okc_rule_groups_b rgpb,
2876 okc_rules_b rulb,
2877 okc_rules_b rulb2,
2878 okl_strm_type_b styb
2879 WHERE rgpb.chr_id IS NULL
2880 AND rgpb.dnz_chr_id = cleb.dnz_chr_id
2881 AND rgpb.cle_id = cleb.id
2882 AND cleb.dnz_chr_id = p_khr_id
2883 AND rgpb.rgd_code = 'LALEVL'
2884 AND rulb.rgp_id = rgpb.id
2885 AND rulb.rule_information_category = 'LASLH'
2886 AND TO_CHAR(styb.id) = rulb.object1_id1
2887 AND rulb2.object2_id1 = TO_CHAR(rulb.id)
2888 AND rulb2.rgp_id = rgpb.id
2889 AND rulb2.rule_information_category = 'LASLL';
2890
2891 BEGIN
2892 --Validate additional parameters availability
2893 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
2894 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
2895 LOOP
2896 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_last_int_calc_date' THEN
2897 l_last_int_calc_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
2898 ELSIF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_period_end_date' THEN
2899 l_period_end_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
2900 END IF;
2901 END LOOP;
2902 ELSE
2903 Okl_Api.Set_Message(p_app_name => g_app_name,
2904 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
2905 RAISE Okl_Api.G_EXCEPTION_ERROR;
2906 END IF;
2907
2908 -- Validate parameters
2909 IF l_period_end_date IS NULL THEN
2910 Okl_Api.Set_Message(p_app_name => g_app_name,
2911 p_msg_name => 'OKL_AGN_FE_PERD_END_DATE');
2912 RAISE Okl_Api.G_EXCEPTION_ERROR;
2913 END IF;
2914
2915 IF l_last_int_calc_date IS NULL THEN
2916 Okl_Api.Set_Message(p_app_name => g_app_name,
2917 p_msg_name => 'OKL_AGN_FE_INT_CALC_DATE');
2918 RAISE Okl_Api.G_EXCEPTION_ERROR;
2919 END IF;
2920
2921 --Bug 5081876. Adding a day to last int calc date.
2922 --Bug 5162929. Undoing changes made for bug 5081876. One day is being added in accrual program
2923 --l_last_int_calc_date := l_last_int_calc_date + 1;
2924
2925 --Bug 5046184. ***Additional Code START***
2926 FOR y in contract_num_csr
2927 LOOP
2928 l_contract_number := y.contract_number;
2929 END LOOP;
2930
2931 IF l_contract_number IS NULL THEN
2932 Okl_Api.set_message(p_app_name => g_app_name,
2933 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
2934 RAISE OKL_API.G_EXCEPTION_ERROR;
2935 END IF;
2936
2937 FOR x IN days_in_month
2938 LOOP
2939 l_days_in_month := x.days_in_a_month_code;
2940 END LOOP;
2941
2942 IF l_days_in_month IS NULL THEN
2943 Okl_Api.Set_Message(p_app_name => g_app_name,
2944 p_msg_name => 'OKL_AGN_FE_DAYSIN_MTH',
2945 p_token1 => 'CONTRACT_NUMBER',
2946 p_token1_value => l_contract_number);
2947 RAISE Okl_Api.G_EXCEPTION_ERROR;
2948 END IF;
2949
2950 FOR z IN days_in_year
2951 LOOP
2952 l_days_in_year := z.days_in_a_year_code;
2953 END LOOP;
2954
2955 IF l_days_in_year IS NULL THEN
2956 Okl_Api.Set_Message(p_app_name => g_app_name,
2957 p_msg_name => 'OKL_AGN_FE_DAYSIN_YR',
2958 p_token1 => 'CONTRACT_NUMBER',
2959 p_token1_value => l_contract_number);
2960 RAISE Okl_Api.G_EXCEPTION_ERROR;
2961 END IF;
2962
2963 FOR i in adv_arr_csr
2964 LOOP
2965 l_advance_arrears := NVL(i.arrears_yn, 'N');
2966 END LOOP;
2967
2968 l_days_to_accrue := okl_pricing_utils_pvt.get_day_count
2969 (l_days_in_month,
2970 l_days_in_year,
2971 l_last_int_calc_date,
2972 l_period_end_date,
2973 l_advance_arrears,
2974 l_return_status);
2975
2976 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2977 Okl_Api.set_message(p_app_name => g_app_name,
2978 p_msg_name => 'OKL_GET_DAY_CNT_ERROR');
2979
2980 RAISE OKL_API.G_EXCEPTION_ERROR;
2981 END IF;
2982 --Bug 5046184. ***Additional Code START***
2983
2984 --Bug 5046184. Commenting below calculation
2985 --l_days_to_accrue := l_period_end_date - l_last_int_calc_date;
2986
2987 RETURN l_days_to_accrue;
2988
2989 EXCEPTION
2990 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
2991 RETURN NULL;
2992
2993 WHEN OTHERS THEN
2994 Okl_Api.SET_MESSAGE(
2995 p_app_name => G_APP_NAME,
2996 p_msg_name => G_UNEXPECTED_ERROR,
2997 p_token1 => G_SQLCODE_TOKEN,
2998 p_token1_value => SQLCODE,
2999 p_token2 => G_SQLERRM_TOKEN,
3000 p_token2_value => SQLERRM);
3001 RETURN NULL;
3002
3003 END CONTRACT_DAYS_TO_ACCRUE;
3004
3005 ----------------------------------------------------------------------------------------------------
3006
3007 -- Start of Comments
3008 -- Created By : Shri Iyer
3009 -- Function Name : CONTRACT_DAYS_IN_YEAR
3010 -- Description : This function returns the number of days in a year
3011 -- Dependencies : None
3012 -- Parameters : contract id, contract line id
3013 -- Version : 1.0
3014 -- End of Commnets
3015
3016 ----------------------------------------------------------------------------------------------------
3017
3018 FUNCTION CONTRACT_DAYS_IN_YEAR(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3019 l_days NUMBER;
3020 l_lookup_code VARCHAR2(2000);
3021 l_accrual_date DATE;
3022 l_year NUMBER;
3023 l_contract_number VARCHAR2(2000);
3024
3025 -- cursor to get the contract number
3026 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3027 SELECT contract_number
3028 FROM OKC_K_HEADERS_B
3029 WHERE id = p_ctr_id;
3030
3031 -- BUG 4730646. Changing cursor.
3032 -- CURSOR lookup_csr(p_ctr_id NUMBER) IS
3033 -- SELECT rule_information1
3034 -- FROM okc_rules_b okc
3035 -- WHERE okc.dnz_chr_id = p_ctr_id
3036 -- AND okc.rule_information_category = 'LAICLC';
3037
3038 -- Fetch contract days in a year
3039 CURSOR lookup_csr(p_ctr_id NUMBER) IS
3040 SELECT days_in_a_year_code
3041 FROM OKL_K_RATE_PARAMS
3042 WHERE khr_id = p_ctr_id
3043 AND parameter_type_code = 'ACTUAL'
3044 AND effective_to_date IS NULL;
3045
3046 BEGIN
3047 OPEN contract_num_csr(p_khr_id);
3048 FETCH contract_num_csr INTO l_contract_number;
3049 IF contract_num_csr%NOTFOUND THEN
3050 CLOSE contract_num_csr;
3051 Okl_Api.set_message(p_app_name => g_app_name,
3052 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3053 RAISE OKL_API.G_EXCEPTION_ERROR;
3054 END IF;
3055 CLOSE contract_num_csr;
3056
3057 OPEN lookup_csr(p_khr_id);
3058 FETCH lookup_csr INTO l_lookup_code;
3059 CLOSE lookup_csr;
3060
3061 IF l_lookup_code IS NULL THEN
3062 Okl_Api.Set_Message(p_app_name => g_app_name,
3063 p_msg_name => 'OKL_AGN_FE_DAYSIN_YR',
3064 p_token1 => 'CONTRACT_NUMBER',
3065 p_token1_value => l_contract_number);
3066 RAISE Okl_Api.G_EXCEPTION_ERROR;
3067 END IF;
3068
3069 IF l_lookup_code = 'ACTUAL' THEN
3070 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3071 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3072 LOOP
3073 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
3074 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3075 END IF;
3076 END LOOP;
3077 ELSE
3078 Okl_Api.Set_Message(p_app_name => g_app_name,
3079
3080
3081 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3082 RAISE Okl_Api.G_EXCEPTION_ERROR;
3083 END IF;
3084
3085 IF l_accrual_date IS NULL THEN
3086 Okl_Api.Set_Message(p_app_name => g_app_name,
3087 p_msg_name => 'OKL_AGN_FE_ACCRUAL_DATE');
3088 RAISE Okl_Api.G_EXCEPTION_ERROR;
3089 END IF;
3090
3091
3092 l_year := TO_NUMBER(TO_CHAR(l_accrual_date, 'RRRR'));
3093
3094 IF MOD(l_year,4) = 0 THEN
3095 l_days := 366;
3096 ELSE
3097 l_days := 365;
3098 END IF;
3099 ELSE
3100 l_days := TO_NUMBER(l_lookup_code);
3101 END IF;
3102
3103 RETURN l_days;
3104
3105 EXCEPTION
3106 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3107 RETURN NULL;
3108
3109 WHEN OTHERS THEN
3110 IF lookup_csr%ISOPEN THEN
3111 CLOSE lookup_csr;
3112 END IF;
3113 Okl_Api.SET_MESSAGE(
3114 p_app_name => G_APP_NAME,
3115 p_msg_name => G_UNEXPECTED_ERROR,
3116 p_token1 => G_SQLCODE_TOKEN,
3117 p_token1_value => SQLCODE,
3118 p_token2 => G_SQLERRM_TOKEN,
3119 p_token2_value => SQLERRM);
3120 RETURN NULL;
3121
3122 END CONTRACT_DAYS_IN_YEAR;
3123
3124 ----------------------------------------------------------------------------------------------------
3125
3126 -- Start of Comments
3127 -- Created By : Shri Iyer
3128 -- Function Name : CONTRACT_INTEREST_RATE
3129 -- Description : This function returns the rate of interest on the given date or closest to that date
3130 -- Dependencies : None
3131 -- Parameters : contract id, contract line id
3132 -- Version : 1.0
3133 -- End of Commnets
3134
3135 ----------------------------------------------------------------------------------------------------
3136
3137 FUNCTION CONTRACT_INTEREST_RATE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3138 l_accrual_date DATE;
3139 l_interest_rate NUMBER;
3140 l_adder_rate NUMBER;
3141 l_total_rate NUMBER;
3142 l_contract_number VARCHAR2(2000);
3143
3144 -- cursor to get the contract number
3145 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3146 SELECT contract_number
3147 FROM OKC_K_HEADERS_B
3148 WHERE id = p_ctr_id;
3149
3150
3151 -- Bug 4737551. Commenting below cursor and writing new select statement. SGIYER.
3152 -- CURSOR interest_rate_csr(p_ctr_id NUMBER, p_accrual_date DATE) IS
3153 -- SELECT idv.value
3154 -- FROM OKC_RULES_B rule,
3155 -- OKL_INDEX_VALUES idv,
3156 -- OKL_INDICES idx
3157 -- WHERE rule.rule_information_category = 'LAIVAR'
3158 -- AND rule.dnz_chr_id = p_ctr_id
3159 -- AND TO_NUMBER(rule.rule_information2) = idx.id
3160 -- AND idx.ID = idv.idx_id
3161 -- AND idv.datetime_valid = (SELECT MAX(idv.datetime_valid)
3162 -- FROM OKL_INDEX_VALUES idv ,
3163 -- OKL_INDICES idx,
3164 -- OKC_RULES_B rules
3165 -- WHERE rules.rule_information_category = 'LAIVAR'
3166 -- AND rules.dnz_chr_id = p_ctr_id
3167 -- AND rules.rule_information2 = idx.id
3168 -- AND idx.id = idv.idx_id
3169 -- AND idv.datetime_valid <= p_accrual_date);
3170
3171 -- cursor to get interest rate
3172 CURSOR interest_rate_csr(p_ctr_id NUMBER, p_accrual_date DATE) IS
3173 SELECT idv.value
3174 FROM OKL_K_RATE_PARAMS okl,
3175 OKL_INDEX_VALUES idv,
3176 OKL_INDICES idx
3177 WHERE okl.khr_id = p_ctr_id
3178 AND okl.parameter_type_code = 'ACTUAL'
3179 AND okl.effective_to_date IS NULL
3180 AND okl.interest_index_id = idx.id
3181 AND idx.ID = idv.idx_id
3182 AND idv.datetime_valid = (SELECT MAX(idv.datetime_valid)
3183 FROM OKL_INDEX_VALUES idv ,
3184 OKL_INDICES idx,
3185 OKL_K_RATE_PARAMS rate
3186 WHERE rate.khr_id = p_ctr_id
3187 AND rate.parameter_type_code = 'ACTUAL'
3188 AND rate.effective_to_date IS NULL
3189 AND rate.interest_index_id = idx.id
3190 AND idx.id = idv.idx_id
3191 AND idv.datetime_valid <= p_accrual_date);
3192
3193 -- Bug# 2920174
3194 -- cursor to get adder rate
3195 -- Bug 4737551. Commenting below cursor and writing new select statement. SGIYER.
3196 -- CURSOR adder_rate_csr(p_ctr_id NUMBER) IS
3197 -- SELECT TO_NUMBER(rule_information4)
3198 -- FROM OKC_RULES_B
3199 -- WHERE rule_information_category = 'LAIVAR'
3200 -- AND dnz_chr_id = p_ctr_id;
3201
3202 -- cursor to get adder rate
3203 -- Bug 4737551.
3204 CURSOR adder_rate_csr(p_ctr_id NUMBER) IS
3205 SELECT adder_rate
3206 FROM OKL_K_RATE_PARAMS
3207 WHERE khr_id = p_ctr_id
3208 AND parameter_type_code = 'ACTUAL'
3209 AND effective_to_date IS NULL;
3210
3211 BEGIN
3212
3213 OPEN contract_num_csr(p_khr_id);
3214 FETCH contract_num_csr INTO l_contract_number;
3215 IF contract_num_csr%NOTFOUND THEN
3216 CLOSE contract_num_csr;
3217 Okl_Api.set_message(p_app_name => g_app_name,
3218 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3219 RAISE OKL_API.G_EXCEPTION_ERROR;
3220 END IF;
3221 CLOSE contract_num_csr;
3222
3223 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3224 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3225 LOOP
3226 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
3227 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3228 END IF;
3229 END LOOP;
3230 ELSE
3231 Okl_Api.Set_Message(p_app_name => g_app_name,
3232 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3233 RAISE Okl_Api.G_EXCEPTION_ERROR;
3234 END IF;
3235
3236 IF l_accrual_date IS NULL THEN
3237 Okl_Api.Set_Message(p_app_name => g_app_name,
3238 p_msg_name => 'OKL_AGN_FE_ACCRUAL_DATE');
3239 RAISE Okl_Api.G_EXCEPTION_ERROR;
3240 END IF;
3241
3242 OPEN interest_rate_csr(p_khr_id, l_accrual_date);
3243 FETCH interest_rate_csr INTO l_interest_rate;
3244 IF interest_rate_csr %NOTFOUND THEN
3245 Okl_Api.Set_Message(p_app_name => g_app_name,
3246 p_msg_name => 'OKL_AGN_FE_INT_RATE',
3247 p_token1 => 'CONTRACT_NUMBER',
3248 p_token1_value => l_contract_number);
3249 CLOSE interest_rate_csr;
3250 RAISE Okl_Api.G_EXCEPTION_ERROR;
3251 END IF;
3252 CLOSE interest_rate_csr;
3253
3254 OPEN adder_rate_csr(p_khr_id);
3255 FETCH adder_rate_csr INTO l_adder_rate;
3256 IF adder_rate_csr %NOTFOUND THEN
3257 Okl_Api.Set_Message(p_app_name => g_app_name,
3258 p_msg_name => 'OKL_AGN_FE_ADDER_RATE',
3259 p_token1 => 'CONTRACT_NUMBER',
3260 p_token1_value => l_contract_number);
3261 CLOSE interest_rate_csr;
3262 RAISE Okl_Api.G_EXCEPTION_ERROR;
3263 END IF;
3264 CLOSE adder_rate_csr;
3265
3266 -- Bug# 2920174
3267 -- get adder rate, add to interest rate and return total.
3268 l_total_rate := (l_interest_rate + l_adder_rate)/100;
3269
3270 RETURN l_total_rate;
3271
3272 EXCEPTION
3273 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3274 RETURN NULL;
3275
3276 WHEN OTHERS THEN
3277 IF interest_rate_csr%ISOPEN THEN
3278 CLOSE interest_rate_csr;
3279 END IF;
3280
3281 IF adder_rate_csr%ISOPEN THEN
3282 CLOSE adder_rate_csr;
3283 END IF;
3284
3285 IF contract_num_csr%ISOPEN THEN
3286 CLOSE contract_num_csr;
3287 END IF;
3288
3289 Okl_Api.SET_MESSAGE(
3290 p_app_name => G_APP_NAME,
3291 p_msg_name => G_UNEXPECTED_ERROR,
3292 p_token1 => G_SQLCODE_TOKEN,
3293 p_token1_value => SQLCODE,
3294 p_token2 => G_SQLERRM_TOKEN,
3295 p_token2_value => SQLERRM);
3296 RETURN NULL;
3297
3298 END CONTRACT_INTEREST_RATE;
3299
3300 ----------------------------------------------------------------------------------------------------
3301
3302 -- Start of Comments
3303 -- Created By : Shri Iyer
3304 -- Function Name : CONTRACT_PRINCIPAL_BALANCE
3305 -- Description : This function returns the principal balance for a contract as of that date
3306 -- Dependencies : None
3307 -- Parameters : contract id, contract line id
3308 -- Version : 1.0
3309 -- End of Commnets
3310
3311 ----------------------------------------------------------------------------------------------------
3312
3313 FUNCTION CONTRACT_PRINCIPAL_BALANCE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3314
3315 l_period_start_date DATE;
3316 l_period_end_date DATE;
3317 l_principal_bal NUMBER;
3318 l_contract_number VARCHAR2(2000);
3319 l_last_int_calc_date DATE;
3320 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3321 l_kle_id NUMBER;
3322 -- Bug 5055714.
3323 -- l_prin_bal_id NUMBER;
3324
3325 -- cursor to get the contract number
3326 CURSOR contract_num_csr IS
3327 SELECT contract_number
3328 FROM OKC_K_HEADERS_B
3329 WHERE id = p_khr_id;
3330
3331 -- Bug 5055714. Commenting below derivation. Using utility provided instead.
3332 -- CURSOR principal_bal_csr(p_ctr_id NUMBER, p_start_date DATE, p_end_date DATE, p_prin_bal_id NUMBER) IS
3333 -- SELECT SUM(ste.amount)
3334 -- FROM OKL_STRM_TYPE_B sty,
3335 -- OKL_STREAMS stm,
3336 -- OKL_STRM_ELEMENTS ste
3337 -- WHERE stm.khr_id = p_ctr_id
3338 -- AND stm.active_yn = 'Y'
3339 -- AND stm.say_code = 'CURR'
3340 -- AND sty.id = p_prin_bal_id
3341 -- AND stm.sty_id = sty.id
3342 -- AND ste.stm_id = stm.id
3343 -- AND ste.stream_element_date BETWEEN p_start_date AND p_end_date;
3344
3345 -- cursor for retrieveing earlier principal balance amount if principal balance
3346 -- for given period is not found
3347 -- CURSOR prior_prin_bal_csr(p_ctr_id NUMBER, p_start_date DATE, p_prin_bal_id NUMBER) IS
3348 -- SELECT SUM(ste.amount)
3349 -- FROM OKL_STRM_TYPE_B sty,
3350 -- OKL_STREAMS stm,
3351 -- OKL_STRM_ELEMENTS ste
3352 -- WHERE stm.khr_id = p_ctr_id
3353 -- AND stm.active_yn = 'Y'
3354 -- AND stm.say_code = 'CURR'
3355 -- AND sty.id = p_prin_bal_id
3356 -- AND stm.sty_id = sty.id
3357 -- AND ste.stm_id = stm.id
3358 -- AND ste.stream_element_date = (SELECT MAX(stream_element_date)
3359 -- FROM OKL_STRM_TYPE_B sty,
3360 -- OKL_STREAMS stm,
3361 -- OKL_STRM_ELEMENTS ste
3362 -- WHERE stm.khr_id = p_ctr_id
3363 -- AND stm.active_yn = 'Y'
3364 -- AND stm.say_code = 'CURR'
3365 -- AND sty.id = p_prin_bal_id
3366 -- AND stm.sty_id = sty.id
3367 -- AND ste.stm_id = stm.id
3368 -- AND stream_element_date < p_start_date);
3369
3370 BEGIN
3371
3372 FOR i IN contract_num_csr
3373 LOOP
3374 l_contract_number := i.contract_number;
3375 END LOOP;
3376
3377 IF l_contract_number IS NULL THEN
3378 Okl_Api.set_message(p_app_name => g_app_name,
3379 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3380 RAISE OKL_API.G_EXCEPTION_ERROR;
3381 END IF;
3382
3383 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3384 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3385 LOOP
3386 -- Bug 5055714. Commenting below. Need Last int calc date
3387 -- IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_period_start_date' THEN
3388 -- l_period_start_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3389 -- ELSIF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_period_end_date' THEN
3390 -- l_period_end_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3391 -- END IF;
3392 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_last_int_calc_date' THEN
3393 l_last_int_calc_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3394 END IF;
3395 END LOOP;
3396 ELSE
3397 Okl_Api.Set_Message(p_app_name => g_app_name,
3398 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3399 RAISE Okl_Api.G_EXCEPTION_ERROR;
3400 END IF;
3401
3402 IF l_last_int_calc_date IS NULL THEN
3403 Okl_Api.Set_Message(p_app_name => g_app_name,
3404 p_msg_name => 'OKL_AGN_FE_INT_CALC_DATE');
3405 RAISE Okl_Api.G_EXCEPTION_ERROR;
3406 END IF;
3407
3408 -- Bug 5055714.No validation needed.
3409 -- IF l_period_end_date IS NULL THEN
3410 -- Okl_Api.Set_Message(p_app_name => g_app_name,
3411 -- p_msg_name => 'OKL_AGN_FE_PERD_END_DATE');
3412 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3413 -- END IF;
3414 --
3415 -- IF l_period_start_date IS NULL THEN
3416 -- Okl_Api.Set_Message(p_app_name => g_app_name,
3417 -- p_msg_name => 'OKL_AGN_FE_PERD_START_DATE');
3418 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3419 -- END IF;
3420
3421 -- SGIYER
3422 -- UDS Impact
3423 -- Bug 5055714.
3424 -- OKL_STREAMS_UTIL.get_dependent_stream_type(
3425 -- p_khr_id => p_khr_id,
3426 -- p_primary_sty_purpose => 'RENT',
3427 -- p_dependent_sty_purpose => 'PRINCIPAL_BALANCE',
3428 -- x_return_status => l_return_status,
3429 -- x_dependent_sty_id => l_prin_bal_id);
3430 --
3431 -- IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3432 -- Okl_Api.set_message(p_app_name => g_app_name,
3433 -- p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
3434 -- p_token1 => 'STREAM_NAME',
3435 -- p_token1_value => 'PRINCIPAL BALANCE');
3436 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3437 -- END IF;
3438
3439 -- Bug 5055714. Commenting below derivation. Using utility provided instead.
3440 -- OPEN principal_bal_csr (p_khr_id, l_period_start_date, l_period_end_date, l_prin_bal_id);
3441 -- FETCH principal_bal_csr INTO l_principal_bal;
3442 -- CLOSE principal_bal_csr;
3443
3444 -- Bug 5060624. Passing l_kle_id which is null and not okl_api.g_miss_num
3445 l_principal_bal := OKL_VARIABLE_INT_UTIL_PVT.get_principal_bal(
3446 x_return_status => l_return_status,
3447 p_khr_id => p_khr_id,
3448 p_kle_id => l_kle_id,
3449 p_date => l_last_int_calc_date);
3450
3451 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3452 Okl_Api.Set_Message(p_app_name => g_app_name,
3453 p_msg_name => 'OKL_AGN_VAR_PB_ERROR');
3454 END IF;
3455
3456 IF l_principal_bal IS NULL THEN
3457 Okl_Api.Set_Message(p_app_name => g_app_name,
3458 p_msg_name => 'OKL_AGN_FE_PRIN_BAL',
3459 p_token1 => 'CONTRACT_NUMBER',
3460 p_token1_value => l_contract_number);
3461 RAISE Okl_Api.G_EXCEPTION_ERROR;
3462 END IF;
3463
3464 -- Bug#2920344. Commenting error message.
3465 -- If principal balance for period range not found then retrieve
3466 -- principal balance for available prior period. MMITTAL.
3467 --Okl_Api.Set_Message(p_app_name => g_app_name,
3468 -- p_msg_name => 'OKL_AGN_FE_PRIN_BAL',
3469 -- p_token1 => 'CONTRACT_NUMBER',
3470 -- p_token1_value => l_contract_number);
3471 --CLOSE principal_bal_csr;
3472 --RAISE Okl_Api.G_EXCEPTION_ERROR;
3473
3474 -- If principal balance not found for date range, get prior principal balance.
3475 -- As per MMITTAL.
3476 -- OPEN prior_prin_bal_csr(p_khr_id, l_period_start_date,l_prin_bal_id);
3477 -- FETCH prior_prin_bal_csr INTO l_principal_bal;
3478 -- CLOSE prior_prin_bal_csr;
3479 -- IF l_principal_bal IS NULL THEN
3480 -- Okl_Api.Set_Message(p_app_name => g_app_name,
3481 -- p_msg_name => 'OKL_AGN_FE_PRIN_BAL',
3482 -- p_token1 => 'CONTRACT_NUMBER',
3483 -- p_token1_value => l_contract_number);
3484 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3485 -- END IF;
3486 -- END IF;
3487
3488 RETURN l_principal_bal;
3489
3490 EXCEPTION
3491 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3492 RETURN NULL;
3493
3494 WHEN OTHERS THEN
3495 Okl_Api.SET_MESSAGE(
3496 p_app_name => G_APP_NAME,
3497 p_msg_name => G_UNEXPECTED_ERROR,
3498 p_token1 => G_SQLCODE_TOKEN,
3499 p_token1_value => SQLCODE,
3500 p_token2 => G_SQLERRM_TOKEN,
3501 p_token2_value => SQLERRM);
3502 RETURN NULL;
3503 END CONTRACT_PRINCIPAL_BALANCE;
3504
3505 ----------------------------------------------------------------------------------------------------
3506
3507 -- Start of Comments
3508 -- Created By : Shri Iyer
3509 -- Function Name : CONTRACT_UNBILLED_RECEIVABLES
3510 -- Description : This function returns the unbilled receivables balance for a contract as of a given date
3511 -- Dependencies : None
3512 -- Parameters : contract id, contract line id
3513 -- Version : 1.0
3514 -- End of Commnets
3515
3516 ----------------------------------------------------------------------------------------------------
3517
3518 FUNCTION CONTRACT_UNBILLED_RECEIVABLES(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3519 l_rent_strm_bal NUMBER := 0;
3520 l_contract_number VARCHAR2(2000);
3521 l_provision_date DATE;
3522 l_sty_id NUMBER;
3523 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3524
3525 -- cursor to get the contract number
3526 -- 02-Oct-2003. SGIYER. Added condition ste.stream_element_date >= p_date
3527 -- on product management's instructions.
3528 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3529 SELECT contract_number
3530 FROM OKL_K_HEADERS_FULL_V
3531 WHERE id = p_ctr_id;
3532
3533 -- SGIYER
3534 -- modifying cursor for user defind streams project
3535 CURSOR get_unb_rec_csr(p_ctr_id NUMBER, p_date DATE, p_sty_id NUMBER) IS
3536 SELECT SUM(ste.amount)
3537 FROM OKL_STREAMS stm,
3538 OKL_STRM_ELEMENTS ste,
3539 OKL_STRM_TYPE_B sty
3540 WHERE stm.khr_id = p_ctr_id
3541 AND stm.sty_id = sty.id
3542 AND sty.id = p_sty_id
3543 AND stm.active_yn = 'Y'
3544 AND stm.say_code ='CURR'
3545 AND ste.stm_id = stm.id
3546 AND ste.stream_element_date >= p_date
3547 AND ste.date_billed IS NULL;
3548
3549 BEGIN
3550 OPEN contract_num_csr(p_khr_id);
3551 FETCH contract_num_csr INTO l_contract_number;
3552 CLOSE contract_num_csr;
3553
3554 IF l_contract_number IS NULL THEN
3555 Okl_Api.set_message(p_app_name => g_app_name,
3556 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3557 RAISE OKL_API.G_EXCEPTION_ERROR;
3558 END IF;
3559
3560 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3561 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3562 LOOP
3563 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_provision_date' THEN
3564 l_provision_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3565 END IF;
3566 END LOOP;
3567 ELSE
3568 Okl_Api.Set_Message(p_app_name => g_app_name,
3569 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3570 RAISE Okl_Api.G_EXCEPTION_ERROR;
3571 END IF;
3572
3573 IF l_provision_date IS NULL THEN
3574 Okl_Api.Set_Message(p_app_name => g_app_name,
3575 p_msg_name => 'OKL_GLP_PROV_DATE_ERROR');
3576 RAISE Okl_Api.G_EXCEPTION_ERROR;
3577 END IF;
3578
3579 -- SGIYER
3580 -- UDS Impact
3581 OKL_STREAMS_UTIL.get_primary_stream_type(
3582 p_khr_id => p_khr_id,
3583 p_primary_sty_purpose => 'RENT',
3584 x_return_status => l_return_status,
3585 x_primary_sty_id => l_sty_id);
3586
3587 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
3588 Okl_Api.set_message(p_app_name => g_app_name,
3589 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
3590 p_token1 => 'STREAM_NAME',
3591 p_token1_value => 'RENT');
3592 RAISE Okl_Api.G_EXCEPTION_ERROR;
3593 END IF;
3594
3595 OPEN get_unb_rec_csr(p_khr_id, l_provision_date, l_sty_id);
3596 FETCH get_unb_rec_csr INTO l_rent_strm_bal;
3597 CLOSE get_unb_rec_csr;
3598
3599 -- Bug 2969989. Return zero explicitly if nothing found.
3600 IF l_rent_strm_bal IS NULL THEN
3601 l_rent_strm_bal := 0;
3602 END IF;
3603 RETURN l_rent_strm_bal;
3604
3605 EXCEPTION
3606 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3607 RETURN NULL;
3608
3609 WHEN OTHERS THEN
3610 IF get_unb_rec_csr%ISOPEN THEN
3611 CLOSE get_unb_rec_csr;
3612 END IF;
3613 IF contract_num_csr%ISOPEN THEN
3614 CLOSE contract_num_csr;
3615 END IF;
3616 Okl_Api.SET_MESSAGE(
3617 p_app_name => G_APP_NAME,
3618 p_msg_name => G_UNEXPECTED_ERROR,
3619 p_token1 => G_SQLCODE_TOKEN,
3620 p_token1_value => SQLCODE,
3621 p_token2 => G_SQLERRM_TOKEN,
3622 p_token2_value => SQLERRM);
3623 RETURN NULL;
3624 END CONTRACT_UNBILLED_RECEIVABLES;
3625
3626 ----------------------------------------------------------------------------------------------------
3627
3628 -- Start of Comments
3629 -- Created By : Shri Iyer
3630 -- Function Name : CONTRACT_UNEARNED_REVENUE
3631 -- Description : This function returns the unearned income for a contract as of a given date
3632 -- Dependencies : None
3633 -- Parameters : contract id, contract line id
3634 -- Version : 1.0
3635 -- End of Commnets
3636
3637 ----------------------------------------------------------------------------------------------------
3638
3639 FUNCTION CONTRACT_UNEARNED_REVENUE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3640 l_income_strm_bal NUMBER := 0;
3641 l_contract_number VARCHAR2(2000);
3642 l_provision_date DATE;
3643 l_rent_sty_id NUMBER;
3644 l_lease_inc_sty_id NUMBER;
3645 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3646
3647 -- cursor to get the contract number
3648 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3649 SELECT contract_number
3650 FROM OKL_K_HEADERS_FULL_V
3651 WHERE id = p_ctr_id;
3652
3653 -- changing stream type name from INCOME to PRE TAX INCOME as suggested by PM. BUG# 2671223
3654 -- correcting name. Its hould be PRE-TAX INCOME (with hyphen)
3655 -- Bug 2969989. Pre-Tax amount is negative by default. So taking absolute value.
3656 -- Bug 3126427. Removing absolute function.
3657 -- 02-Oct-2003. SGIYER. Added condition ste.stream_element_date >= p_date
3658 -- on product management's instructions.
3659 -- SGIYER. User defined streams project changes.09/22/04
3660 CURSOR get_unearn_rev_csr (p_ctr_id NUMBER, p_date DATE, p_rent_sty_id NUMBER, p_lease_inc_sty_id NUMBER) IS
3661 SELECT SUM(ste.amount)
3662 FROM OKL_STREAMS stm,
3663 OKL_STRM_ELEMENTS ste,
3664 OKL_STRM_TYPE_B sty
3665 WHERE stm.khr_id = p_ctr_id
3666 AND stm.sty_id = sty.id
3667 AND sty.id = p_lease_inc_sty_id
3668 AND stm.active_yn = 'Y'
3669 AND stm.say_code = 'CURR'
3670 AND ste.stm_id = stm.id
3671 AND ste.stream_element_date >=
3672 (SELECT TRUNC(MIN(ste.stream_element_date),'MM')
3673 FROM OKL_STREAMS stm,
3674 OKL_STRM_ELEMENTS ste,
3675 OKL_STRM_TYPE_B sty
3676 WHERE stm.khr_id = p_ctr_id
3677 AND stm.sty_id = sty.id
3678 AND sty.id = l_rent_sty_id
3679 AND stm.active_yn = 'Y'
3680 AND ste.stm_id = stm.id
3681 AND ste.stream_element_date >= p_date
3682 AND ste.date_billed IS NULL)
3683 AND ste.stream_element_date <=
3684 (SELECT LAST_DAY(MAX(ste.stream_element_date))
3685 FROM OKL_STREAMS stm,
3686 OKL_STRM_ELEMENTS ste,
3687 OKL_STRM_TYPE_B sty
3688 WHERE stm.khr_id = p_ctr_id
3689 AND stm.sty_id = sty.id
3690 AND sty.id = l_rent_sty_id
3691 AND stm.active_yn = 'Y'
3692 AND ste.stm_id = stm.id
3693 AND ste.stream_element_date >= p_date
3694 AND ste.date_billed IS NULL);
3695
3696 BEGIN
3697 OPEN contract_num_csr(p_khr_id);
3698 FETCH contract_num_csr INTO l_contract_number;
3699 CLOSE contract_num_csr;
3700 IF l_contract_number IS NULL THEN
3701 Okl_Api.set_message(p_app_name => g_app_name,
3702 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3703 RAISE OKL_API.G_EXCEPTION_ERROR;
3704 END IF;
3705
3706 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3707 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3708 LOOP
3709 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_provision_date' THEN
3710 l_provision_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3711 END IF;
3712 END LOOP;
3713 ELSE
3714 Okl_Api.Set_Message(p_app_name => g_app_name,
3715 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3716 RAISE Okl_Api.G_EXCEPTION_ERROR;
3717 END IF;
3718
3719 IF l_provision_date IS NULL THEN
3720 Okl_Api.Set_Message(p_app_name => g_app_name,
3721 p_msg_name => 'OKL_GLP_PROV_DATE_ERROR');
3722 RAISE Okl_Api.G_EXCEPTION_ERROR;
3723 END IF;
3724
3725 -- SGIYER
3726 -- UDS Impact
3727 OKL_STREAMS_UTIL.get_primary_stream_type(
3728 p_khr_id => p_khr_id,
3729 p_primary_sty_purpose => 'RENT',
3730 x_return_status => l_return_status,
3731 x_primary_sty_id => l_rent_sty_id);
3732 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
3733 Okl_Api.set_message(p_app_name => g_app_name,
3734 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
3735 p_token1 => 'STREAM_NAME',
3736 p_token1_value => 'RENT');
3737 RAISE Okl_Api.G_EXCEPTION_ERROR;
3738 END IF;
3739
3740 -- SGIYER
3741 -- UDS Impact
3742 OKL_STREAMS_UTIL.get_dependent_stream_type(
3743 p_khr_id => p_khr_id,
3744 p_primary_sty_purpose => 'RENT',
3745 p_dependent_sty_purpose => 'LEASE_INCOME',
3746 x_return_status => l_return_status,
3747 x_dependent_sty_id => l_lease_inc_sty_id);
3748 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3749 -- store SQL error message on message stack for caller and entry in log file
3750 Okl_Api.set_message(p_app_name => g_app_name,
3751 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
3752 p_token1 => 'STREAM_NAME',
3753 p_token1_value => 'LEASE INCOME');
3754 RAISE Okl_Api.G_EXCEPTION_ERROR;
3755 END IF;
3756
3757 OPEN get_unearn_rev_csr (p_khr_id, l_provision_date, l_rent_sty_id, l_lease_inc_sty_id);
3758 FETCH get_unearn_rev_csr INTO l_income_strm_bal;
3759 CLOSE get_unearn_rev_csr;
3760
3761 -- Bug 2969989. Return zero explicitly if nothing found.
3762 IF l_income_strm_bal IS NULL THEN
3763 l_income_strm_bal := 0;
3764 END IF;
3765
3766 RETURN l_income_strm_bal;
3767
3768 EXCEPTION
3769 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3770 RETURN NULL;
3771
3772 WHEN OTHERS THEN
3773 IF get_unearn_rev_csr%ISOPEN THEN
3774 CLOSE get_unearn_rev_csr;
3775 END IF;
3776 IF contract_num_csr%ISOPEN THEN
3777 CLOSE contract_num_csr;
3778 END IF;
3779 Okl_Api.SET_MESSAGE(
3780 p_app_name => G_APP_NAME,
3781 p_msg_name => G_UNEXPECTED_ERROR,
3782 p_token1 => G_SQLCODE_TOKEN,
3783 p_token1_value => SQLCODE,
3784 p_token2 => G_SQLERRM_TOKEN,
3785 p_token2_value => SQLERRM);
3786 RETURN NULL;
3787 END CONTRACT_UNEARNED_REVENUE;
3788
3789 ----------------------------------------------------------------------------------------------------
3790
3791 -- Start of Comments
3792 -- Created By : Shri Iyer
3793 -- Function Name : CONTRACT_UNGUARANTEED_RESIDUAL
3794 -- Description : This function returns the unguaranteed residual for a contract
3795 -- Dependencies : None
3796 -- Parameters : contract id, contract line id
3797 -- Version : 1.0
3798 -- End of Commnets
3799
3800 ----------------------------------------------------------------------------------------------------
3801
3802 FUNCTION CONTRACT_UNGUARANTEED_RESIDUAL(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3803 l_unguaranteed_residual NUMBER := 0;
3804 l_contract_number VARCHAR2(2000);
3805
3806 -- cursor to get the contract number
3807 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3808 SELECT contract_number
3809 FROM OKL_K_HEADERS_FULL_V
3810 WHERE id = p_ctr_id;
3811
3812 CURSOR get_ung_res_csr(p_ctr_id NUMBER) IS
3813 SELECT SUM(NVL(RESIDUAL_VALUE,0)) - SUM(NVL(RESIDUAL_GRNTY_AMOUNT, 0))
3814 FROM OKL_K_LINES_FULL_V
3815 WHERE DNZ_CHR_ID = p_ctr_id;
3816
3817 BEGIN
3818 OPEN contract_num_csr(p_khr_id);
3819 FETCH contract_num_csr INTO l_contract_number;
3820 IF contract_num_csr%NOTFOUND THEN
3821 CLOSE contract_num_csr;
3822 Okl_Api.set_message(p_app_name => g_app_name,
3823 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3824 RAISE OKL_API.G_EXCEPTION_ERROR;
3825 END IF;
3826 CLOSE contract_num_csr;
3827
3828 OPEN get_ung_res_csr(p_khr_id);
3829 FETCH get_ung_res_csr INTO l_unguaranteed_residual;
3830 IF get_ung_res_csr%NOTFOUND THEN
3831 Okl_Api.Set_Message(p_app_name => g_app_name,
3832 p_msg_name => 'OKL_LPV_FE_UNG_RES',
3833 p_token1 => 'CONTRACT_NUMBER',
3834 p_token1_value => l_contract_number);
3835 CLOSE get_ung_res_csr;
3836 RAISE OKL_API.G_EXCEPTION_ERROR;
3837 END IF;
3838 CLOSE get_ung_res_csr;
3839
3840 -- Bug 2969989. Return zero explicitly if nothing found.
3841 IF l_unguaranteed_residual IS NULL THEN
3842 l_unguaranteed_residual := 0;
3843 END IF;
3844
3845 RETURN l_unguaranteed_residual;
3846
3847 EXCEPTION
3848 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3849 RETURN NULL;
3850
3851 WHEN OTHERS THEN
3852 Okl_Api.SET_MESSAGE(
3853 p_app_name => G_APP_NAME,
3854 p_msg_name => G_UNEXPECTED_ERROR,
3855 p_token1 => G_SQLCODE_TOKEN,
3856 p_token1_value => SQLCODE,
3857 p_token2 => G_SQLERRM_TOKEN,
3858 p_token2_value => SQLERRM);
3859 RETURN NULL;
3860 END CONTRACT_UNGUARANTEED_RESIDUAL;
3861
3862 ----------------------------------------------------------------------------------------------------
3863
3864 -- Start of Comments
3865 -- Created By : Shri Iyer
3866 -- Function Name : CONTRACT_UNACCRUED_SUBSIDY
3867 -- Description : This function returns the unaccrued portion of the subsidy streams for a
3868 -- given contract on a particular date
3869 -- Dependencies : None
3870 -- Parameters : contract id, contract line id
3871 -- Version : 1.0
3872 -- End of Commnets
3873
3874 ----------------------------------------------------------------------------------------------------
3875
3876 FUNCTION CONTRACT_UNACCRUED_SUBSIDY(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3877 l_unaccrued_subsidy NUMBER := 0;
3878 l_contract_number VARCHAR2(2000);
3879 l_provision_date DATE;
3880 l_subsidy_inc_id NUMBER;
3881 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3882
3883 -- cursor to get the contract number
3884 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3885 SELECT contract_number
3886 FROM OKL_K_HEADERS_FULL_V
3887 WHERE id = p_ctr_id;
3888
3889 -- cursor to get unaccrued subsidy for a contract
3890 CURSOR unaccrued_subsidy_csr(p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE, p_date DATE, p_subsidy_inc_id NUMBER) IS
3891 SELECT SUM(ste.amount)
3892 FROM OKL_STRM_ELEMENTS ste,
3893 OKL_STRM_TYPE_B sty,
3894 OKL_STREAMS stm
3895 WHERE stm.khr_id = p_ctr_id
3896 AND stm.sty_id = sty.id
3897 AND sty.id = p_subsidy_inc_id
3898 AND stm.active_yn = 'Y'
3899 AND stm.say_code = 'CURR'
3900 AND stm.id = ste.stm_id
3901 AND ste.accrued_yn IS NULL
3902 AND ste.stream_element_date <= p_date;
3903
3904
3905 BEGIN
3906
3907 OPEN contract_num_csr(p_khr_id);
3908 FETCH contract_num_csr INTO l_contract_number;
3909 CLOSE contract_num_csr;
3910
3911 IF l_contract_number IS NULL THEN
3912 Okl_Api.set_message(p_app_name => g_app_name,
3913 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3914 RAISE OKL_API.G_EXCEPTION_ERROR;
3915 END IF;
3916
3917 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3918 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3919 LOOP
3920 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_provision_date' THEN
3921 l_provision_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3922 END IF;
3923 END LOOP;
3924 ELSE
3925 Okl_Api.Set_Message(p_app_name => g_app_name,
3926 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3927 RAISE Okl_Api.G_EXCEPTION_ERROR;
3928 END IF;
3929
3930 IF l_provision_date IS NULL THEN
3931 Okl_Api.Set_Message(p_app_name => g_app_name,
3932 p_msg_name => 'OKL_GLP_PROV_DATE_ERROR');
3933 RAISE Okl_Api.G_EXCEPTION_ERROR;
3934 END IF;
3935
3936 -- Bug 4053623.
3937 -- Modifying error handling.
3938 OKL_STREAMS_UTIL.get_dependent_stream_type(
3939 p_khr_id => p_khr_id,
3940 p_primary_sty_purpose => 'SUBSIDY',
3941 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
3942 x_return_status => l_return_status,
3943 x_dependent_sty_id => l_subsidy_inc_id);
3944 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3945 IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
3946 -- subsidy income stream not defined for the contract
3947 l_unaccrued_subsidy := 0;
3948 RETURN l_unaccrued_subsidy;
3949 ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3950 -- store SQL error message on message stack for caller and entry in log file
3951 Okl_Api.set_message(p_app_name => g_app_name,
3952 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
3953 p_token1 => 'STREAM_NAME',
3954 p_token1_value => 'SUBSIDY INCOME');
3955 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3956 END IF;
3957 END IF;
3958
3959 IF l_subsidy_inc_id IS NOT NULL THEN
3960 OPEN unaccrued_subsidy_csr (p_khr_id, l_provision_date, l_subsidy_inc_id);
3961 FETCH unaccrued_subsidy_csr INTO l_unaccrued_subsidy;
3962 CLOSE unaccrued_subsidy_csr;
3963 END IF;
3964 IF l_unaccrued_subsidy IS NULL THEN
3965 l_unaccrued_subsidy := 0;
3966 END IF;
3967
3968 RETURN l_unaccrued_subsidy;
3969
3970 EXCEPTION
3971 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3972 RETURN NULL;
3973
3974 WHEN OTHERS THEN
3975 IF unaccrued_subsidy_csr%ISOPEN THEN
3976 CLOSE unaccrued_subsidy_csr;
3977 END IF;
3978 IF contract_num_csr%ISOPEN THEN
3979 CLOSE contract_num_csr;
3980 END IF;
3981 Okl_Api.SET_MESSAGE(
3982 p_app_name => G_APP_NAME,
3983 p_msg_name => G_UNEXPECTED_ERROR,
3984 p_token1 => G_SQLCODE_TOKEN,
3985 p_token1_value => SQLCODE,
3986 p_token2 => G_SQLERRM_TOKEN,
3987 p_token2_value => SQLERRM);
3988 RETURN NULL;
3989 END CONTRACT_UNACCRUED_SUBSIDY;
3990
3991 FUNCTION CONTRACT_TOTAL_ACTUAL_INT(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3992
3993 l_accrual_date DATE;
3994 l_total_actual_int NUMBER;
3995 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3996
3997 BEGIN
3998
3999
4000 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4001 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4002 LOOP
4003 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
4004 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
4005 END IF;
4006 END LOOP;
4007 ELSE
4008 Okl_Api.Set_Message(p_app_name => g_app_name,
4009 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
4010 RAISE Okl_Api.G_EXCEPTION_ERROR;
4011 END IF;
4012
4013 IF l_accrual_date IS NULL THEN
4014 Okl_Api.Set_Message(p_app_name => g_app_name,
4015 p_msg_name => 'OKL_AGN_DATE_ERROR');
4016 RAISE Okl_Api.G_EXCEPTION_ERROR;
4017 END IF;
4018
4019 l_total_actual_int := OKL_VARIABLE_INT_UTIL_PVT.get_interest_due(
4020 x_return_status => l_return_status,
4021 p_khr_id => p_khr_id,
4022 p_to_date => l_accrual_date);
4023
4024 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4025 -- store SQL error message on message stack for caller and entry in log file
4026 Okl_Api.set_message(p_app_name => g_app_name,
4027 p_msg_name => 'OKL_AGN_VAR_INT_UTIL_ERROR',
4028 p_token1 => 'ERROR_STATUS',
4029 p_token1_value => l_return_status);
4030 RAISE Okl_Api.G_EXCEPTION_ERROR;
4031 ELSE
4032 IF (l_total_actual_int IS NULL) OR (l_total_actual_int = 0) THEN
4033 Okl_Api.Set_Message(p_app_name => g_app_name,
4034 p_msg_name => 'OKL_AGN_TOT_VAR_INT_ERROR');
4035 RAISE OKL_API.G_EXCEPTION_ERROR;
4036 END IF;
4037 END IF;
4038
4039 RETURN l_total_actual_int;
4040
4041 EXCEPTION
4042 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4043 RETURN NULL;
4044
4045 WHEN OTHERS THEN
4046 Okl_Api.SET_MESSAGE(
4047 p_app_name => G_APP_NAME,
4048 p_msg_name => G_UNEXPECTED_ERROR,
4049 p_token1 => G_SQLCODE_TOKEN,
4050 p_token1_value => SQLCODE,
4051 p_token2 => G_SQLERRM_TOKEN,
4052 p_token2_value => SQLERRM);
4053 RETURN NULL;
4054
4055 END CONTRACT_TOTAL_ACTUAL_INT;
4056
4057 ----------------------------------------------------------------------------------------------------
4058
4059 -- Start of Comments
4060 -- Created By : Shri Iyer
4061 -- Function Name : CONTRACT_TOTAL_ACCRUED_INT
4062 -- Description : This function returns the total accrued amount for a
4063 -- given contract on a particular date
4064 -- Dependencies : None
4065 -- Parameters : contract id, contract line id
4066 -- Version : 1.0
4067 -- End of Commnets
4068
4069 ----------------------------------------------------------------------------------------------------
4070
4071 FUNCTION CONTRACT_TOTAL_ACCRUED_INT(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
4072 l_total_accrued NUMBER := 0;
4073 l_contract_number VARCHAR2(2000);
4074 l_accrual_date DATE;
4075 l_sty_id NUMBER;
4076 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4077
4078 -- cursor to get the contract number
4079 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
4080 SELECT contract_number
4081 FROM OKL_K_HEADERS_FULL_V
4082 WHERE id = p_ctr_id;
4083
4084 -- cursor to get unaccrued subsidy for a contract
4085 CURSOR total_accrued_csr(p_ctr_id NUMBER, p_date DATE, p_sty_id NUMBER) IS
4086 SELECT SUM(trx.amount)
4087 FROM OKL_TRX_CONTRACTS trx,
4088 OKL_TRX_TYPES_V try,
4089 OKL_TXL_CNTRCT_LNS txl
4090 WHERE trx.khr_id = p_ctr_id
4091 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
4092 AND trx.tsu_code ='PROCESSED'
4093 AND trx.try_id = try.id
4094 AND trx.representation_type = 'PRIMARY' -- MGAAP OTHER 7263041
4095 AND try.name = 'Accrual'
4096 AND trx.date_transaction_occurred <= p_date
4097 AND trx.id = txl.tcn_id
4098 AND txl.sty_id = p_sty_id;
4099
4100 BEGIN
4101
4102 OPEN contract_num_csr(p_khr_id);
4103 FETCH contract_num_csr INTO l_contract_number;
4104 CLOSE contract_num_csr;
4105
4106 IF l_contract_number IS NULL THEN
4107 Okl_Api.set_message(p_app_name => g_app_name,
4108 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
4109 RAISE OKL_API.G_EXCEPTION_ERROR;
4110 END IF;
4111
4112 OKL_STREAMS_UTIL.get_dependent_stream_type(
4113 p_khr_id => p_khr_id,
4114 p_primary_sty_purpose => 'RENT',
4115 p_dependent_sty_purpose => 'ACTUAL_INCOME_ACCRUAL',
4116 x_return_status => l_return_status,
4117 x_dependent_sty_id => l_sty_id);
4118
4119 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4120 -- store SQL error message on message stack for caller and entry in log file
4121 Okl_Api.set_message(p_app_name => g_app_name,
4122 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
4123 p_token1 => 'STREAM_NAME',
4124 p_token1_value => 'Actual Income Accrual');
4125 RAISE Okl_Api.G_EXCEPTION_ERROR;
4126 END IF;
4127
4128 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4129 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4130 LOOP
4131 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
4132 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
4133 END IF;
4134 END LOOP;
4135 ELSE
4136 Okl_Api.Set_Message(p_app_name => g_app_name,
4137 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
4138 RAISE Okl_Api.G_EXCEPTION_ERROR;
4139 END IF;
4140
4141 IF l_accrual_date IS NULL THEN
4142 Okl_Api.Set_Message(p_app_name => g_app_name,
4143 p_msg_name => 'OKL_AGN_DATE_ERROR');
4144 RAISE Okl_Api.G_EXCEPTION_ERROR;
4145 END IF;
4146
4147 OPEN total_accrued_csr(p_khr_id, l_accrual_date, l_sty_id);
4148 FETCH total_accrued_csr INTO l_total_accrued;
4149 CLOSE total_accrued_csr;
4150
4151 IF l_total_accrued IS NULL THEN
4152 l_total_accrued := 0;
4153 END IF;
4154
4155 RETURN l_total_accrued;
4156
4157 EXCEPTION
4158 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4159 RETURN NULL;
4160
4161 WHEN OTHERS THEN
4162 IF total_accrued_csr%ISOPEN THEN
4163 CLOSE total_accrued_csr;
4164 END IF;
4165 Okl_Api.SET_MESSAGE(
4166 p_app_name => G_APP_NAME,
4167 p_msg_name => G_UNEXPECTED_ERROR,
4168 p_token1 => G_SQLCODE_TOKEN,
4169 p_token1_value => SQLCODE,
4170 p_token2 => G_SQLERRM_TOKEN,
4171 p_token2_value => SQLERRM);
4172 RETURN NULL;
4173 END CONTRACT_TOTAL_ACCRUED_INT;
4174
4175 ------------------------------------------------------------------------------
4176 -- Start of Comments
4177 -- Created By: [email protected] - 20-FEB-2002
4178 -- Function Name: contract_estimate_tax
4179 -- Description: Estimate tax using ARP-CRM integration routines
4180 -- Dependencies: OKL building blocks AMTX and AMUV,
4181 -- Parameters: IN: p_contract_id, p_contract_line_id,
4182 -- taxable_amount (stored in g_additional_parameters(1))
4183 -- OUT: amount
4184 -- History : RMUNJULU 3394507 Get the loc_id for location_id and pass to Tax engine
4185 -- : RMUNJULU 3394507 Performance fix, changed cursor to query fron base tables
4186 -- instead of _uv
4187 -- : RMUNJULU 3394507 added code
4188 -- to reset the arp_tax.tax_info_rec before it is called
4189 -- Also added code to set the location_id based on bill_to_site
4190 -- for contract level quote line tax calculation
4191 -- : GKADARKA 3569441 Added union in cursor l_item_loc_csr
4192 -- : rmunjulu 3682465 Changed to get and set the bill_to_postal_code
4193 -- Version: 1.0
4194 -- End of Commnets
4195 ------------------------------------------------------------------------------
4196
4197 FUNCTION contract_estimate_tax (
4198 p_contract_id IN NUMBER,
4199 p_contract_line_id IN NUMBER)
4200 RETURN NUMBER IS
4201
4202 -- Get location of all Installed Base items
4203 -- linked to the Financial Asset Line
4204 -- RMUNJULU 3394507 Changed the cursor to get the loc_id (location ccid) for
4205 -- org_id and location_id
4206 -- RMUNJULU 3394507 Performance fix, query from base tables instead of
4207 -- from _uv
4208 /*
4209 CURSOR l_item_loc_csr (cp_fin_asset_cle_id NUMBER) IS
4210 SELECT DISTINCT LOA.loc_id location_id, LOC.postal_code -- 3682465
4211 FROM OKC_K_LINES_B KLE_FA,
4212 OKC_LINE_STYLES_B LSE_FA,
4213 OKC_K_LINES_B KLE_IL,
4214 OKC_LINE_STYLES_B LSE_IL,
4215 OKC_K_LINES_B KLE_IB,
4216 OKC_LINE_STYLES_B LSE_IB,
4217 OKC_K_ITEMS ITE,
4218 CSI_ITEM_INSTANCES CII,
4219 HZ_PARTY_SITES PSI,
4220 HZ_LOCATIONS LOC,
4221 -- HZ_PARTIES PAR,
4222 HZ_PARTY_SITE_USES PSU,
4223 HZ_LOC_ASSIGNMENTS LOA
4224 WHERE kle_fa.id = cp_fin_asset_cle_id
4225 AND lse_fa.id = kle_fa.lse_id
4226 AND lse_fa.lty_code = 'FREE_FORM1'
4227 AND kle_il.cle_id = kle_fa.id
4228 AND lse_il.id = kle_il.lse_id
4229 AND lse_il.lty_code = 'FREE_FORM2'
4230 AND kle_ib.cle_id = kle_il.id
4231 AND lse_ib.id = kle_ib.lse_id
4232 AND lse_ib.lty_code = 'INST_ITEM'
4233 AND ite.cle_id = kle_ib.id
4234 AND ite.jtot_object1_code = 'OKX_IB_ITEM'
4235 AND cii.instance_id = ite.object1_id1
4236 AND cii.install_location_type_code = 'HZ_PARTY_SITES'
4237 AND psi.party_site_id = cii.install_location_id
4238 AND loc.location_id = psi.location_id
4239 -- AND par.party_id = psi.party_id
4240 AND psu.party_site_id = psi.party_site_id
4241 AND psu.site_use_type = 'INSTALL_AT'
4242 AND loc.location_id = loa.location_id
4243 UNION
4244 SELECT DISTINCT LOA.loc_id location_id, LOC.postal_code -- 3682465
4245 FROM OKC_K_LINES_B KLE_FA,
4246 OKC_LINE_STYLES_B LSE_FA,
4247 OKC_K_LINES_B KLE_IL,
4248 OKC_LINE_STYLES_B LSE_IL,
4249 OKC_K_LINES_B KLE_IB,
4250 OKC_LINE_STYLES_B LSE_IB,
4251 OKC_K_ITEMS ITE,
4252 CSI_ITEM_INSTANCES CII,
4253 --HZ_PARTY_SITES PSI,
4254 HZ_LOCATIONS LOC,
4255 --HZ_PARTIES PAR,
4256 --HZ_PARTY_SITE_USES PSU,
4257 HZ_LOC_ASSIGNMENTS LOA
4258 WHERE kle_fa.id = cp_fin_asset_cle_id
4259 AND lse_fa.id = kle_fa.lse_id
4260 AND lse_fa.lty_code = 'FREE_FORM1'
4261 AND kle_il.cle_id = kle_fa.id
4262 AND lse_il.id = kle_il.lse_id
4263 AND lse_il.lty_code = 'FREE_FORM2'
4264 AND kle_ib.cle_id = kle_il.id
4265 AND lse_ib.id = kle_ib.lse_id
4266 AND lse_ib.lty_code = 'INST_ITEM'
4267 AND ite.cle_id = kle_ib.id
4268 AND ite.jtot_object1_code = 'OKX_IB_ITEM'
4269 AND cii.instance_id = ite.object1_id1
4270 AND cii.install_location_type_code = 'HZ_LOCATIONS'
4271 AND loc.location_id = cii.install_location_id
4272 --AND loc.location_id = psi.location_id
4273 --AND par.party_id = psi.party_id
4274 --AND psu.party_site_id = psi.party_site_id
4275 --AND psu.site_use_type = 'INSTALL_AT'
4276 AND loc.location_id = loa.location_id
4277 AND EXISTS (SELECT 1
4278 FROM HZ_PARTY_SITES psi,
4279 HZ_PARTY_SITE_USES psu
4280 WHERE psi.location_id = loc.location_id
4281 AND psu.party_site_id = psi.party_site_id
4282 AND psu.site_use_type = 'INSTALL_AT');
4283
4284 -- RMUNJULU 3394507 Added cursor to get the location for the LESSEE bill to
4285 -- Get the location_id (location_ccid) for the customer bill_to
4286 CURSOR item_loc_csr ( p_bill_to_site_use_id IN NUMBER, p_cust_acct_id IN NUMBER) IS
4287 SELECT loc_assign.loc_id location_id, LOC.postal_code -- 3682465
4288 FROM HZ_PARTY_SITES party_site,
4289 HZ_LOC_ASSIGNMENTS loc_assign,
4290 HZ_LOCATIONS loc,
4291 HZ_CUST_ACCT_SITES_ALL acct_site,
4292 HZ_PARTIES party,
4293 HZ_CUST_ACCOUNTS cust_acct,
4294 HZ_CUST_SITE_USES cust_site_uses
4295 WHERE acct_site.party_site_id = party_site.party_site_id
4296 AND loc.location_id = party_site.location_id
4297 AND loc.location_id = loc_assign.location_id
4298 AND acct_site.cust_acct_site_id = cust_site_uses.cust_acct_site_id
4299 AND party.party_id = cust_acct.party_id
4300 AND cust_site_uses.site_use_id = p_bill_to_site_use_id
4301 AND cust_acct.cust_account_id = p_cust_acct_id;
4302
4303 -- Get line name to use in the error messages
4304 CURSOR l_cle_csr (cp_cle_id NUMBER) IS
4305 SELECT l.name
4306 FROM okc_k_lines_v l
4307 WHERE l.id = cp_cle_id;
4308
4309 -- Get header number to use in error messages
4310 CURSOR l_chr_csr (cp_chr_id NUMBER) IS
4311 SELECT h.contract_number
4312 FROM okc_k_headers_v h
4313 WHERE h.id = cp_chr_id;
4314
4315 l_result_amount NUMBER := 0;
4316 l_no_taxable_amount EXCEPTION;
4317 l_no_sys_params EXCEPTION;
4318 l_tax_tbl ARP_TAX.om_tax_out_tab_type;
4319 l_bill_to_rec okx_cust_site_uses_v%ROWTYPE;
4320 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4321 l_overall_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4322 l_object_name VARCHAR2(200);
4323 l_token VARCHAR2(30);
4324
4325 -- Variables to pass to taxation API
4326 l_taxable_amount NUMBER := NULL;
4327 l_org_id NUMBER := NULL;
4328 l_sob_id NUMBER := NULL;
4329 l_currency VARCHAR2(15) := NULL;
4330 l_precision NUMBER := NULL;
4331 l_min_acc_unit NUMBER := NULL;
4332 l_cust_site_use_id NUMBER := NULL;
4333 l_cust_account_id NUMBER := NULL;
4334 l_location_id NUMBER := NULL;
4335
4336 -- RMUNJULU 3394507 Declared variable for tax_info_rec_type which will be used
4337 -- to reset the global variable
4338 l_tax_rec arp_tax.tax_info_rec_type;
4339 l_postal_code HZ_LOCATIONS.postal_code%TYPE; -- 3682465
4340 */
4341 BEGIN
4342
4343 -- ***********************************
4344 -- Get Object to use in error messages
4345 -- ***********************************
4346 /*
4347 IF p_contract_line_id IS NOT NULL THEN
4348 OPEN l_cle_csr (p_contract_line_id);
4349 FETCH l_cle_csr INTO l_object_name;
4350 CLOSE l_cle_csr;
4351 l_token := 'contract_line_id';
4352 ELSE
4353 OPEN l_chr_csr (p_contract_id);
4354 FETCH l_chr_csr INTO l_object_name;
4355 CLOSE l_chr_csr;
4356 l_token := 'contract_id';
4357 END IF;
4358
4359 IF l_object_name IS NULL THEN
4360 l_overall_status := OKL_API.G_RET_STS_ERROR;
4361 OKC_API.SET_MESSAGE (
4362 p_app_name => OKC_API.G_APP_NAME,
4363 p_msg_name => OKC_API.G_INVALID_VALUE,
4364 p_token1 => OKC_API.G_COL_NAME_TOKEN,
4365 p_token1_value => l_token);
4366 END IF;
4367
4368 -- ********************************************
4369 -- Extract Taxable Amount from global variables
4370 -- ********************************************
4371
4372 BEGIN
4373
4374 IF okl_execute_formula_pub.g_additional_parameters(1).name
4375 = 'TAXABLE AMOUNT'
4376 AND okl_execute_formula_pub.g_additional_parameters(1).value
4377 IS NOT NULL
4378 THEN
4379 l_taxable_amount := TO_NUMBER
4380 (okl_execute_formula_pub.g_additional_parameters(1).value);
4381 ELSE
4382 RAISE l_no_taxable_amount;
4383 END IF;
4384
4385 IF NVL (l_taxable_amount, 0) = 0 THEN
4386 RAISE l_no_taxable_amount;
4387 END IF;
4388
4389 EXCEPTION
4390 WHEN OTHERS THEN
4391 l_overall_status := OKL_API.G_RET_STS_ERROR;
4392 OKL_API.SET_MESSAGE (
4393 p_app_name => OKL_API.G_APP_NAME,
4394 p_msg_name => 'OKL_AM_TAX_NO_TAXABLE_AMOUNT',
4395 p_token1 => 'OBJECT',
4396 p_token1_value => l_object_name);
4397 END;
4398
4399 -- **************************************************
4400 -- Get all generic parameters required by taxation API
4401 -- **************************************************
4402
4403 BEGIN
4404
4405 l_org_id := okl_am_util_pvt.get_chr_org_id (p_contract_id);
4406 l_sob_id := okc_currency_api.get_ou_sob (l_org_id);
4407 l_currency := okc_currency_api.get_sob_currency (l_sob_id);
4408 okl_am_util_pvt.get_currency_info
4409 (l_currency, l_precision, l_min_acc_unit);
4410
4411 IF l_sob_id IS NULL OR l_precision IS NULL THEN
4412 RAISE l_no_sys_params;
4413 END IF;
4414
4415 EXCEPTION
4416 WHEN OTHERS THEN
4417 l_overall_status := OKL_API.G_RET_STS_ERROR;
4418 OKL_API.SET_MESSAGE (
4419 p_app_name => OKL_API.G_APP_NAME,
4420 p_msg_name => 'OKL_AM_TAX_NO_PARAMS',
4421 p_token1 => 'OBJECT',
4422 p_token1_value => l_object_name);
4423 END;
4424
4425 -- *****************************************************
4426 -- Get line specific parameters required by taxation API
4427 -- *****************************************************
4428
4429 IF (p_contract_line_id IS NOT NULL)
4430 AND (l_object_name IS NOT NULL) THEN
4431
4432 OPEN l_item_loc_csr (p_contract_line_id);
4433
4434 LOOP
4435 FETCH l_item_loc_csr INTO l_location_id, l_postal_code; -- 3682465
4436 EXIT WHEN l_item_loc_csr%NOTFOUND
4437 OR l_item_loc_csr%ROWCOUNT > 1;
4438 END LOOP;
4439
4440 IF l_item_loc_csr%ROWCOUNT <> 1
4441 OR l_location_id IS NULL THEN
4442 l_overall_status := OKL_API.G_RET_STS_ERROR;
4443 OKL_API.SET_MESSAGE (
4444 p_app_name => OKL_API.G_APP_NAME,
4445 p_msg_name => 'OKL_AM_TAX_NO_LOCATION',
4446 p_token1 => 'OBJECT',
4447 p_token1_value => l_object_name);
4448 END IF;
4449
4450 CLOSE l_item_loc_csr;
4451
4452 -- *********************************************************
4453 -- Get contract specific parameters required by taxation API
4454 -- *********************************************************
4455
4456 ELSIF (p_contract_line_id IS NULL) THEN
4457
4458 okl_am_util_pvt.get_bill_to_address (
4459 p_contract_id => p_contract_id,
4460 p_message_yn => FALSE,
4461 x_bill_to_address_rec => l_bill_to_rec,
4462 x_return_status => l_return_status);
4463
4464 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
4465 l_cust_site_use_id := l_bill_to_rec.id1;
4466 l_cust_account_id := l_bill_to_rec.cust_account_id;
4467 END IF;
4468
4469 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
4470 OR l_cust_site_use_id IS NULL
4471 OR l_cust_account_id IS NULL THEN
4472 l_overall_status := OKL_API.G_RET_STS_ERROR;
4473 OKL_API.SET_MESSAGE (
4474 p_app_name => OKL_API.G_APP_NAME,
4475 p_msg_name => 'OKL_AM_TAX_NO_BILL_TO',
4476 p_token1 => 'OBJECT',
4477 p_token1_value => l_object_name);
4478 END IF;
4479
4480 END IF;
4481
4482 -- *****************
4483 -- Call taxation API
4484 -- *****************
4485
4486 -- RMUNJULU 3394507 Reset the GLOBAL tax_info_rec rec type with empty rec type
4487 arp_tax.tax_info_rec := l_tax_rec;
4488
4489 -- Calculate tax for positive amounts
4490 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS
4491 AND l_taxable_amount > 0 THEN
4492
4493 arp_tax.tax_info_rec.trx_date := SYSDATE;
4494 arp_tax.tax_info_rec.extended_amount := l_taxable_amount;
4495 arp_tax.tax_info_rec.trx_currency_code := l_currency;
4496 arp_tax.tax_info_rec.PRECISION := l_precision;
4497 arp_tax.tax_info_rec.minimum_accountable_unit := l_min_acc_unit;
4498
4499 IF p_contract_line_id IS NOT NULL THEN
4500
4501 arp_tax.tax_info_rec.bill_to_location_id := l_location_id;
4502
4503 arp_tax.tax_info_rec.bill_to_postal_code := l_postal_code; -- 3682465
4504
4505 ELSE
4506 arp_tax.tax_info_rec.bill_to_site_use_id := l_cust_site_use_id;
4507 arp_tax.tax_info_rec.bill_to_cust_id := l_cust_account_id;
4508
4509 -- RMUNJULU 3394507 Found that Tax engine also needs the location_id
4510 -- for the bill to location, added code to get and set that value
4511 -- get the location for the LESSEE bill to
4512 OPEN item_loc_csr ( l_cust_site_use_id, l_cust_account_id);
4513 FETCH item_loc_csr INTO l_location_id, l_postal_code; -- 3682465
4514 CLOSE item_loc_csr;
4515
4516 -- raise message if site location not found
4517 IF l_location_id IS NULL THEN
4518 OKL_API.SET_MESSAGE (
4519 p_app_name => OKL_API.G_APP_NAME,
4520 p_msg_name => 'OKL_AM_TAX_NO_LOCATION',
4521 p_token1 => 'OBJECT',
4522 p_token1_value => l_object_name);
4523 END IF;
4524
4525 -- set the tax_info_rec with location id
4526 arp_tax.tax_info_rec.bill_to_location_id := l_location_id;
4527
4528 arp_tax.tax_info_rec.bill_to_postal_code := l_postal_code; -- 3682465
4529
4530 END IF;
4531
4532 BEGIN
4533 arp_tax_crm_integration_pkg.summary
4534 (p_set_of_books_id => l_sob_id
4535 ,x_crm_tax_out_tbl => l_tax_tbl
4536 ,p_new_tax_amount => l_result_amount);
4537 EXCEPTION
4538 WHEN OTHERS THEN
4539 l_overall_status := OKL_API.G_RET_STS_ERROR;
4540 OKL_API.SET_MESSAGE (
4541 p_app_name => OKL_API.G_APP_NAME,
4542 p_msg_name => 'OKL_AM_TAX_ARP_FAILED',
4543 p_token1 => 'OBJECT',
4544 p_token1_value => l_object_name);
4545 END;
4546
4547 END IF;
4548
4549 RETURN NVL (l_result_amount, 0);
4550 */
4551 return 0;
4552 EXCEPTION
4553 WHEN OTHERS THEN
4554 /*
4555 -- Close open cursors
4556
4557 IF l_item_loc_csr%ISOPEN THEN
4558 CLOSE l_item_loc_csr;
4559 END IF;
4560
4561 IF l_cle_csr%ISOPEN THEN
4562 CLOSE l_cle_csr;
4563 END IF;
4564
4565 IF l_chr_csr%ISOPEN THEN
4566 CLOSE l_chr_csr;
4567 END IF;
4568
4569 -- RMUNJULU 3394507 close cursor if open
4570 IF item_loc_csr%ISOPEN THEN
4571 CLOSE item_loc_csr;
4572 END IF;
4573
4574 -- store SQL error message on message stack for caller
4575
4576 OKL_API.SET_MESSAGE (
4577 p_app_name => OKL_API.G_APP_NAME,
4578 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
4579 p_token1 => 'SQLCODE',
4580 p_token1_value => SQLCODE,
4581 p_token2 => 'SQLERRM',
4582 p_token2_value => SQLERRM);
4583 */
4584 RETURN NULL;
4585
4586 END contract_estimate_tax;
4587
4588
4589 ------------------------------------------------------------------------------
4590 -- Start of Comments
4591 -- Created By: [email protected] - 20-FEB-2002
4592 -- Function Name: line_estimate_tax
4593 -- Description: Estimate tax using ARP-CRM integration routines
4594 -- Dependencies: OKL building blocks AMTX and AMUV,
4595 -- Parameters: IN: p_contract_id, p_contract_line_id,
4596 -- taxable_amount (stored in g_additional_parameters(1))
4597 -- OUT: amount
4598 -- Version: 1.0
4599 -- End of Commnets
4600 ------------------------------------------------------------------------------
4601
4602 FUNCTION line_estimate_tax (
4603 p_contract_id IN NUMBER,
4604 p_contract_line_id IN NUMBER)
4605 RETURN NUMBER IS
4606 BEGIN
4607 -- To avoid code repetition, both header
4608 -- and line are handled in one routine
4609 RETURN (contract_estimate_tax (p_contract_id, p_contract_line_id));
4610 END line_estimate_tax;
4611
4612
4613 ------------------------------------------------------------------------------
4614 -- Start of Comments
4615 -- Created By: [email protected] - 20-FEB-2002
4616 -- Function Name: line_estimated_property_tax
4617 -- Description: Estimate property tax based on previous records
4618 -- Dependencies: OKL building blocks AMTX and AMUV,
4619 -- Parameters: IN: p_contract_id, p_contract_line_id,
4620 -- OUT: amount
4621 -- Version: 1.0
4622 -- History: 21-MAR-2002 RDRAGUIL - Cursor based on Billing TRXs
4623 -- 05 Nov 2004 PAGARG Bug# 3925492
4624 -- Modified the procedure to call BPD API for formula value.
4625 -- End of Commnets
4626 ------------------------------------------------------------------------------
4627
4628 FUNCTION line_estimated_property_tax (
4629 p_contract_id IN NUMBER,
4630 p_contract_line_id IN NUMBER)
4631 RETURN NUMBER IS
4632
4633 l_result_amount NUMBER;
4634
4635 --Bug# 3925492: pagarg +++ Estd. Prop Tax +++++++ Start ++++++++++
4636 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
4637 SELECT trunc(qte.date_effective_from) date_effective_from
4638 FROM okl_trx_quotes_b qte
4639 WHERE qte.id = p_quote_id;
4640
4641 l_quote_id NUMBER;
4642 l_quote_date_eff DATE;
4643 l_sysdate DATE;
4644 l_api_version NUMBER;
4645 l_init_msg_list VARCHAR2(1);
4646 l_return_status VARCHAR2(1);
4647 l_msg_count NUMBER;
4648 l_msg_data VARCHAR2(2000);
4649 l_input_tbl OKL_BPD_TERMINATION_ADJ_PVT.input_tbl_type;
4650 lx_baj_tbl OKL_BPD_TERMINATION_ADJ_PVT.baj_tbl_type;
4651 l_tbl_cnt NUMBER;
4652 BEGIN
4653 l_api_version := '1.0';
4654 l_init_msg_list := OKL_API.G_FALSE;
4655 l_result_amount := 0;
4656
4657 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4658 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4659 LOOP
4660 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
4661 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
4662 END IF;
4663 END LOOP;
4664 END IF;
4665
4666 IF l_quote_id IS NOT NULL
4667 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
4668 OPEN get_quote_date_csr (l_quote_id);
4669 FETCH get_quote_date_csr INTO l_quote_date_eff;
4670 CLOSE get_quote_date_csr;
4671 END IF;
4672
4673 SELECT SYSDATE INTO l_sysdate FROM DUAL;
4674
4675 IF l_quote_date_eff IS NULL
4676 OR l_quote_date_eff = OKL_API.G_MISS_DATE
4677 THEN
4678 l_quote_date_eff := l_sysdate;
4679 END IF;
4680
4681 l_input_tbl(0).khr_id := p_contract_id;
4682 l_input_tbl(0).kle_id := p_contract_line_id;
4683 l_input_tbl(0).term_date_from := l_quote_date_eff;
4684
4685 OKL_BPD_TERMINATION_ADJ_PVT.get_unbilled_prop_tax(
4686 p_api_version => l_api_version,
4687 p_init_msg_list => l_init_msg_list,
4688 p_input_tbl => l_input_tbl,
4689 x_baj_tbl => lx_baj_tbl,
4690 x_return_status => l_return_status,
4691 x_msg_count => l_msg_count,
4692 x_msg_data => l_msg_data);
4693
4694 IF lx_baj_tbl.COUNT > 0
4695 THEN
4696 FOR l_tbl_cnt IN lx_baj_tbl.FIRST..lx_baj_tbl.LAST
4697 LOOP
4698 l_result_amount := l_result_amount + lx_baj_tbl(l_tbl_cnt).amount;
4699 END LOOP;
4700 END IF;
4701 --Bug# 3925492: pagarg +++ Estd. Prop Tax +++++++ End ++++++++++
4702
4703 RETURN NVL (l_result_amount, 0);
4704 EXCEPTION
4705 WHEN OTHERS THEN
4706 -- store SQL error message on message stack for caller
4707 OKL_API.SET_MESSAGE (
4708 p_app_name => OKL_API.G_APP_NAME,
4709 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
4710 p_token1 => 'SQLCODE',
4711 p_token1_value => SQLCODE,
4712 p_token2 => 'SQLERRM',
4713 p_token2_value => SQLERRM);
4714
4715 RETURN NULL;
4716 END line_estimated_property_tax;
4717
4718 ------------------------------------------------------------------------------
4719 -- Start of Comments
4720 -- Created By: [email protected] - 20-FEB-2002
4721 -- Function Name: contract_remaining_sec_dep
4722 -- Description: If security deposit disposition is allowed to be included
4723 -- into a quote, return original security deposit amount
4724 -- minus any credit memos against security deposit invoices
4725 -- Dependencies: OKL building blocks AMTX and AMUV,
4726 -- Parameters: IN: p_contract_id
4727 -- OUT: amount
4728 -- Version: 1.0
4729 -- End of Commnets
4730 ------------------------------------------------------------------------------
4731
4732 FUNCTION contract_remaining_sec_dep (
4733 p_contract_id IN NUMBER,
4734 p_contract_line_id IN NUMBER)
4735 RETURN NUMBER IS
4736
4737 l_sdd_tbl okl_am_invoices_pvt.sdd_tbl_type;
4738 l_tld_tbl okl_am_invoices_pvt.tld_tbl_type;
4739 l_total_amount NUMBER;
4740
4741 BEGIN
4742
4743 okl_am_invoices_pvt.contract_remaining_sec_dep (
4744 p_contract_id => p_contract_id,
4745 p_contract_line_id => p_contract_line_id,
4746 x_sdd_tbl => l_sdd_tbl,
4747 x_tld_tbl => l_tld_tbl,
4748 x_total_amount => l_total_amount);
4749
4750 RETURN NVL (l_total_amount, 0);
4751
4752 EXCEPTION
4753
4754 WHEN OTHERS THEN
4755
4756 -- store SQL error message on message stack for caller
4757
4758 OKL_API.SET_MESSAGE (
4759 p_app_name => OKL_API.G_APP_NAME,
4760 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
4761 p_token1 => 'SQLCODE',
4762 p_token1_value => SQLCODE,
4763 p_token2 => 'SQLERRM',
4764 p_token2_value => SQLERRM);
4765
4766 RETURN NULL;
4767
4768 END contract_remaining_sec_dep;
4769
4770
4771 ------------------------------------------------------------------------------
4772 -- Start of Comments
4773 -- Created By: [email protected] - 10-JUL-2002
4774 -- Function Name: line_unbilled_streams
4775 -- Description: Calculate unbilled streams
4776 -- Dependencies: OKL building blocks AMTX and AMUV,
4777 -- Parameters: IN: p_contract_id, p_contract_line_id,
4778 -- stream_type_id (stored in g_additional_parameters(1))
4779 -- OUT: amount
4780 -- Version: 1.0
4781 -- History SECHAWLA 04-MAR-03 : Restrict the calculation of unbilled
4782 -- receivables to only billable streams
4783 -- End of Commnets
4784 ------------------------------------------------------------------------------
4785
4786 FUNCTION line_unbilled_streams (
4787 p_contract_id IN NUMBER,
4788 p_contract_line_id IN NUMBER)
4789 RETURN NUMBER IS
4790
4791 -- Get Unbilled Streams
4792 CURSOR l_unbill_stream_csr (
4793 cp_contract_id NUMBER,
4794 cp_contract_line_id NUMBER,
4795 cp_stream_type_id NUMBER) IS
4796 SELECT SUM (NVL (ste.amount, 0)) amount_due
4797 FROM okl_streams stm,
4798 okl_strm_type_b sty, -- SECHAWLA 04-MAR-03 Added this table to get the billable_yn flag
4799 okl_strm_elements ste
4800 WHERE stm.khr_id = cp_contract_id
4801 AND stm.kle_id = cp_contract_line_id
4802 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
4803 AND stm.active_yn = 'Y'
4804 AND stm.say_code = 'CURR'
4805 AND ste.stm_id = stm.id
4806 AND ste.date_billed IS NULL
4807 AND NVL (ste.amount, 0) <> 0
4808 -- SECHAWLA 04-MAR-03 Added the following 3 conditions to restrict the unbilled receivables calculation to only
4809 -- billable streams
4810 AND sty.id = stm.sty_id
4811 AND sty.billable_yn = 'Y';
4812 -- AND sty.capitalize_yn = 'N'
4813
4814 l_result_amount NUMBER := 0;
4815 l_stream_type_id NUMBER;
4816
4817 BEGIN
4818
4819 -- ********************************************
4820 -- Extract Stream Type Id from global variables
4821 -- ********************************************
4822
4823 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(1)
4824 AND okl_execute_formula_pub.g_additional_parameters(1).name = 'STREAM TYPE'
4825 AND okl_execute_formula_pub.g_additional_parameters(1).value IS NOT NULL
4826 THEN
4827 l_stream_type_id := TO_NUMBER
4828 (okl_execute_formula_pub.g_additional_parameters(1).value);
4829 ELSE
4830 l_stream_type_id := NULL;
4831 END IF;
4832
4833 -- ****************
4834 -- Calculate result
4835 -- ****************
4836
4837 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id, l_stream_type_id);
4838 FETCH l_unbill_stream_csr INTO l_result_amount;
4839 CLOSE l_unbill_stream_csr;
4840
4841 RETURN NVL (l_result_amount, 0);
4842
4843 EXCEPTION
4844
4845 WHEN OTHERS THEN
4846
4847 -- Close open cursors
4848
4849 IF l_unbill_stream_csr%ISOPEN THEN
4850 CLOSE l_unbill_stream_csr;
4851 END IF;
4852
4853
4854 -- store SQL error message on message stack for caller
4855
4856 OKL_API.SET_MESSAGE (
4857 p_app_name => OKL_API.G_APP_NAME,
4858 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
4859 p_token1 => 'SQLCODE',
4860 p_token1_value => SQLCODE,
4861 p_token2 => 'SQLERRM',
4862 p_token2_value => SQLERRM);
4863
4864 RETURN NULL;
4865
4866 END line_unbilled_streams;
4867
4868
4869 ------------------------------------------------------------------------------
4870 -- Start of Comments
4871 -- Created By: [email protected] - 24-APR-2002
4872 -- Function Name: line_unbilled_rent
4873 -- Description: Returns the unbilled rent amount for a given contract line
4874 -- Dependencies: OKL building blocks AMTX and AMUV
4875 -- Parameters: IN: p_contract_id, p_line_id
4876 -- stream_type_id (stored in g_additional_parameters(1))
4877 -- OUT: amount
4878 -- Version: 1.0
4879 -- History : SECHAWLA 05-MAY-04 3578894 : Modified to evaluate reporting streams
4880 -- based upon additional parameters
4881 -- : 31-Dec-2004 PAGARG Bug# 4097591
4882 -- : UDS impact to obtain stream type id
4883 -- End of Commnets
4884 ------------------------------------------------------------------------------
4885
4886 FUNCTION line_unbilled_rent (
4887 p_contract_id IN NUMBER,
4888 p_contract_line_id IN NUMBER)
4889 RETURN NUMBER IS
4890
4891 --SECHAWLA 05-MAY-04 3578894 : new declarations
4892 -- Get Unbilled Streams (moved from line_unbilled_streams)
4893 CURSOR l_unbill_stream_csr (
4894 cp_contract_id NUMBER,
4895 cp_contract_line_id NUMBER,
4896 cp_stream_type_id NUMBER) IS
4897 SELECT SUM (NVL (ste.amount, 0)) amount_due
4898 FROM okl_streams stm,
4899 okl_strm_type_b sty, -- SECHAWLA 04-MAR-03 Added this table to get the billable_yn flag
4900 okl_strm_elements ste
4901 WHERE stm.khr_id = cp_contract_id
4902 AND stm.kle_id = cp_contract_line_id
4903 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
4904 AND stm.active_yn = 'Y'
4905 AND stm.say_code = 'CURR'
4906 AND ste.stm_id = stm.id
4907 AND ste.date_billed IS NULL
4908 AND NVL (ste.amount, 0) <> 0
4909 -- SECHAWLA 04-MAR-03 Added the following 3 conditions to restrict the unbilled receivables calculation to only
4910 -- billable streams
4911 AND sty.id = stm.sty_id
4912 AND sty.billable_yn = 'Y';
4913 -- AND sty.capitalize_yn = 'N'
4914
4915 -- Get Unbilled Streams for Reporting product
4916 CURSOR l_unbill_reporting_stream_csr (
4917 cp_contract_id NUMBER,
4918 cp_contract_line_id NUMBER,
4919 cp_stream_type_id NUMBER,
4920 cp_trx_date DATE) IS
4921 SELECT SUM (NVL (ste.amount, 0)) amount_due
4922 FROM okl_streams stm,
4923 okl_strm_type_b sty,
4924 okl_strm_elements ste
4925 WHERE stm.khr_id = cp_contract_id
4926 AND stm.kle_id = cp_contract_line_id
4927 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
4928 AND stm.active_yn = 'N' -- reporting strems are inactive
4929 AND stm.say_code = 'CURR' -- reporting streams are current
4930 AND ste.stm_id = stm.id
4931 AND ste.date_billed IS NULL -- reporting streams never get billed
4932 AND NVL (ste.amount, 0) <> 0
4933 AND sty.id = stm.sty_id
4934 AND sty.billable_yn = 'Y' -- reporting streams are billable
4935 -- AND sty.capitalize_yn = 'N'
4936 AND stm.purpose_code = 'REPORT'
4937 AND ste.STREAM_ELEMENT_DATE > cp_trx_date;
4938
4939 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
4940 l_trx_date DATE;
4941
4942 ---SECHAWLA 05-MAY-04 3578894 : end new declarations
4943
4944 l_result_amount NUMBER := 0;
4945 l_stream_type_id NUMBER;
4946 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
4947 BEGIN
4948 --PAGARG 31-Dec-2004 Bug# 4097591 Start
4949 --UDS impact. Obtain stream type id and pass it to cursor
4950
4951 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
4952 'RENT',
4953 l_return_status,
4954 l_stream_type_id);
4955
4956 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
4957 THEN
4958 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4959 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
4960 THEN
4961 RAISE OKL_API.G_EXCEPTION_ERROR;
4962 END IF;
4963 --PAGARG 31-Dec-2004 Bug# 4097591 End
4964
4965 /* SECHAWLA 05-MAY-04 3578894
4966 okl_execute_formula_pub.g_additional_parameters(1).name := 'STREAM TYPE';
4967 okl_execute_formula_pub.g_additional_parameters(1).value := l_stream_type_id;
4968
4969 l_result_amount := line_unbilled_streams (p_contract_id, p_contract_line_id);
4970
4971 RETURN NVL (l_result_amount, 0);
4972 */
4973
4974 --Validate additional parameters availability
4975 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
4976 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
4977 LOOP
4978 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
4979 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
4980 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
4981 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
4982 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
4983 l_trx_date := TO_DATE(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
4984 END IF;
4985 END LOOP;
4986 ELSE
4987 l_rep_prod_streams_yn := 'N';
4988
4989 END IF;
4990
4991 IF l_rep_prod_streams_yn = 'Y' THEN
4992 IF l_trx_date IS NULL THEN
4993 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
4994 Okl_Api.Set_Message(p_app_name => g_app_name,
4995 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
4996 RAISE Okl_Api.G_EXCEPTION_ERROR;
4997 END IF;
4998 END IF;
4999
5000
5001 -- ****************
5002 -- Calculate result
5003 -- ****************
5004
5005 IF l_rep_prod_streams_yn = 'Y' THEN
5006 OPEN l_unbill_reporting_stream_csr(p_contract_id, p_contract_line_id, l_stream_type_id,l_trx_date );
5007 FETCH l_unbill_reporting_stream_csr INTO l_result_amount;
5008 CLOSE l_unbill_reporting_stream_csr;
5009 ELSE
5010
5011 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id, l_stream_type_id);
5012 FETCH l_unbill_stream_csr INTO l_result_amount;
5013 CLOSE l_unbill_stream_csr;
5014 END IF;
5015
5016 RETURN NVL (l_result_amount, 0);
5017
5018
5019 EXCEPTION
5020 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
5021 -- Close open cursors
5022 IF l_unbill_stream_csr%ISOPEN THEN
5023 CLOSE l_unbill_stream_csr;
5024 END IF;
5025
5026 IF l_unbill_reporting_stream_csr%ISOPEN THEN
5027 CLOSE l_unbill_reporting_stream_csr;
5028 END IF;
5029
5030 RETURN NULL;
5031
5032 WHEN OTHERS THEN
5033 -- Close open cursors
5034 IF l_unbill_stream_csr%ISOPEN THEN
5035 CLOSE l_unbill_stream_csr;
5036 END IF;
5037
5038 IF l_unbill_reporting_stream_csr%ISOPEN THEN
5039 CLOSE l_unbill_reporting_stream_csr;
5040 END IF;
5041 -- store SQL error message on message stack for caller
5042 OKL_API.SET_MESSAGE (
5043 p_app_name => OKL_API.G_APP_NAME,
5044 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5045 p_token1 => 'SQLCODE',
5046 p_token1_value => SQLCODE,
5047 p_token2 => 'SQLERRM',
5048 p_token2_value => SQLERRM);
5049
5050 RETURN NULL;
5051
5052 END line_unbilled_rent;
5053
5054
5055 -- Start of comments
5056 --
5057 -- Procedure Name : get_reporting_product
5058 -- Description : This procedure checks if there is a reporting product attached to the contract and returns
5059 -- the deal type of the reporting product and MG reporting book
5060 -- Business Rules :
5061 -- Parameters : p_contract_id - Contract ID
5062 -- Version : 1.0
5063 -- History : sechawla 12-Dec-07 - 6671849 Created
5064 -- End of comments
5065
5066 PROCEDURE get_reporting_product(p_api_version IN NUMBER,
5067 p_init_msg_list IN VARCHAR2,
5068 x_return_status OUT NOCOPY VARCHAR2,
5069 x_msg_count OUT NOCOPY NUMBER,
5070 x_msg_data OUT NOCOPY VARCHAR2,
5071 p_contract_id IN NUMBER,
5072 x_rep_product_id OUT NOCOPY VARCHAR2) IS
5073
5074
5075 -- Get the financial product of the contract
5076 CURSOR l_get_fin_product(cp_khr_id IN NUMBER) IS
5077 SELECT a.start_date, a.contract_number, b.pdt_id
5078 FROM okc_k_headers_b a, okl_k_headers b
5079 WHERE a.id = b.id
5080 AND a.id = cp_khr_id;
5081
5082 SUBTYPE pdtv_rec_type IS OKL_SETUPPRODUCTS_PUB.pdtv_rec_type;
5083 SUBTYPE pdt_parameters_rec_type IS OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
5084
5085 l_fin_product_id NUMBER;
5086 l_start_date DATE;
5087 lp_pdtv_rec pdtv_rec_type;
5088 lp_empty_pdtv_rec pdtv_rec_type;
5089 lx_no_data_found BOOLEAN;
5090 lx_pdt_parameter_rec pdt_parameters_rec_type ;
5091 l_contract_number VARCHAR2(120);
5092
5093 --mg_error EXCEPTION;
5094 l_reporting_product OKL_PRODUCTS_V.NAME%TYPE;
5095 l_reporting_product_id NUMBER;
5096
5097
5098
5099 BEGIN
5100 -- get the financial product of the contract
5101 OPEN l_get_fin_product(p_contract_id);
5102 FETCH l_get_fin_product INTO l_start_date, l_contract_number, l_fin_product_id;
5103 CLOSE l_get_fin_product;
5104
5105 lp_pdtv_rec.id := l_fin_product_id;
5106
5107 -- check if the fin product has a reporting product
5108 OKL_SETUPPRODUCTS_PUB.Getpdt_parameters( p_api_version => p_api_version,
5109 p_init_msg_list => OKC_API.G_FALSE,
5110 x_return_status => x_return_status,
5111 x_no_data_found => lx_no_data_found,
5112 x_msg_count => x_msg_count,
5113 x_msg_data => x_msg_data,
5114 p_pdtv_rec => lp_pdtv_rec,
5115 p_product_date => l_start_date,
5116 p_pdt_parameter_rec => lx_pdt_parameter_rec);
5117
5118 IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5119 -- Error getting financial product parameters for contract CONTRACT_NUMBER.
5120 OKC_API.set_message( p_app_name => 'OKL',
5121 p_msg_name => 'OKL_AM_FIN_PROD_PARAM_ERR',
5122 p_token1 => 'CONTRACT_NUMBER',
5123 p_token1_value => l_contract_number);
5124
5125 ELSE
5126
5127 l_reporting_product := lx_pdt_parameter_rec.reporting_product;
5128 l_reporting_product_id := lx_pdt_parameter_rec.reporting_pdt_id;
5129
5130 IF l_reporting_product IS NOT NULL AND l_reporting_product <> OKC_API.G_MISS_CHAR THEN
5131 -- Contract has a reporting product
5132 x_rep_product_id := l_reporting_product_id;
5133 END IF;
5134 END IF;
5135 EXCEPTION
5136 --WHEN mg_error THEN
5137 -- IF l_get_fin_product%ISOPEN THEN
5138 -- CLOSE l_get_fin_product;
5139 -- END IF;
5140 -- x_return_status := OKL_API.G_RET_STS_ERROR;
5141 WHEN OTHERS THEN
5142 IF l_get_fin_product%ISOPEN THEN
5143 CLOSE l_get_fin_product;
5144 END IF;
5145 OKL_API.set_message(p_app_name => 'OKC',
5146 p_msg_name => g_unexpected_error,
5147 p_token1 => g_sqlcode_token,
5148 p_token1_value => sqlcode,
5149 p_token2 => g_sqlerrm_token,
5150 p_token2_value => sqlerrm);
5151 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5152 END get_reporting_product;
5153
5154
5155 ------------------------------------------------------------------------------
5156 -- Start of Comments
5157 -- Created By: [email protected] - 24-APR-2002
5158 -- Function Name: line_unearned_income
5159 -- Description: Returns the unearned income amount for a given contract line
5160 -- Dependencies: OKL building blocks AMTX and AMUV
5161 -- Parameters: IN: p_contract_id, p_line_id
5162 -- stream_type_id (stored in g_additional_parameters(1))
5163 -- OUT: amount
5164 -- Version: 1.0
5165 -- SECHAWLA 05-MAY-04 3578894 : Modified to accomodate additional parameters for reporting product
5166 -- : 31-Dec-2004 PAGARG Bug# 4097591
5167 -- : UDS impact to obtain stream type id
5168 -- sechawla 05-dec-07 6671849 : Modified the dependent stream type check
5169 -- End of Commnets
5170 ------------------------------------------------------------------------------
5171 FUNCTION line_unearned_income (
5172 p_contract_id IN NUMBER,
5173 p_contract_line_id IN NUMBER)
5174 RETURN NUMBER IS
5175
5176 l_unearned_income NUMBER := 0;
5177 --Code changed by rvaduri for bug 3536862
5178 --This code will return the Pre-tax income at line level
5179 -- and will return values only contracts booked using ISG.
5180 --PAGARG 31-Dec-2004 Bug# 4097591
5181 --Instead of using stream name, join the sty id passed to cursor
5182 CURSOR line_csr (c_contract_line_id NUMBER, p_sty_id NUMBER) IS
5183 SELECT NVL(SUM(sel.amount),0)
5184 FROM okl_strm_elements sel,
5185 okl_streams stm,
5186 okl_strm_type_v sty
5187 WHERE sty.id = p_sty_id
5188 AND stm.sty_id = sty.id
5189 AND stm.say_code = 'CURR'
5190 AND stm.active_yn = 'Y'
5191 AND stm.purpose_code IS NULL
5192 AND stm.kle_id = c_contract_line_id
5193 AND sel.stm_id = stm.id;
5194
5195 --SECHAWLA 05-MAY-04 3578894 : new declarations
5196 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
5197 l_trx_date DATE;
5198
5199 -- SECHAWLA 05-MAY-04 3578894 : Created this cursor to evaluat ereporting streams based upon additional parameters
5200 --PAGARG 31-Dec-2004 Bug# 4097591
5201 --Instead of using stream name, join the sty id passed to cursor
5202 CURSOR line_reporting_csr (c_contract_line_id IN NUMBER, cp_trx_date IN DATE, p_sty_id NUMBER) IS
5203 SELECT NVL(SUM(sel.amount),0)
5204 FROM okl_strm_elements sel,
5205 okl_streams stm,
5206 okl_strm_type_v sty
5207 WHERE sty.id = p_sty_id
5208 AND stm.sty_id = sty.id
5209 AND stm.say_code = 'CURR' -- reporting streams are current
5210 AND stm.active_yn = 'N' -- reporting strems are inactive
5211 AND stm.purpose_code IS NULL
5212 AND sel.date_billed IS NULL -- reporting streams never get billed
5213 --AND sty.billable_yn = 'N' -- PRE-TAX streams are not billable
5214 AND stm.kle_id = c_contract_line_id
5215 AND sel.stm_id = stm.id
5216 AND stm.purpose_code = 'REPORT'
5217 AND sel.STREAM_ELEMENT_DATE > cp_trx_date;
5218
5219 l_stream_type_id NUMBER;
5220 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
5221
5222 -- sechawla 05-dec-07 6057301 - Added
5223 lx_rep_product_id OKL_PRODUCTS_V.ID%TYPE;
5224 l_api_version NUMBER := 1;
5225 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
5226 l_msg_count NUMBER;
5227 l_msg_data VARCHAR2(100);
5228 BEGIN
5229 -- SECHAWLA 05-MAY-04 3578894 : Validate additional parameters availability
5230 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
5231 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
5232 LOOP
5233 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
5234 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
5235 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
5236 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
5237 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
5238 l_trx_date := TO_DATE(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
5239 END IF;
5240 END LOOP;
5241 ELSE
5242
5243 l_rep_prod_streams_yn := 'N';
5244
5245 END IF;
5246
5247 -- sechawla 05-dec-07 6671849 : START
5248 IF l_rep_prod_streams_yn = 'Y' THEN
5249
5250 get_reporting_product(
5251 p_api_version => l_api_version,
5252 p_init_msg_list => OKC_API.G_FALSE,
5253 x_return_status => l_return_status,
5254 x_msg_count => l_msg_count,
5255 x_msg_data => l_msg_data,
5256 p_contract_id => p_contract_id,
5257 x_rep_product_id => lx_rep_product_id);
5258
5259
5260 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
5261 p_product_id => lx_rep_product_id,
5262 p_primary_sty_purpose => 'RENT',
5263 p_dependent_sty_purpose => 'LEASE_INCOME',
5264 x_return_status => l_return_status,
5265 x_dependent_sty_id => l_stream_type_id);
5266 ELSE
5267 -- sechawla 05-dec-07 6671849 : END
5268
5269 --PAGARG 31-Dec-2004 Bug# 4097591 Start
5270 --UDS impact. Obtain stream type id and pass it to cursor
5271 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
5272 p_primary_sty_purpose => 'RENT',
5273 p_dependent_sty_purpose => 'LEASE_INCOME',
5274 x_return_status => l_return_status,
5275 x_dependent_sty_id => l_stream_type_id);
5276
5277 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5278 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5279 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5280 RAISE OKL_API.G_EXCEPTION_ERROR;
5281 END IF;
5282 --PAGARG 31-Dec-2004 Bug# 4097591 End
5283
5284 END IF; -- sechawla 05-dec-07 6671849 : added
5285
5286 IF l_rep_prod_streams_yn = 'Y' THEN
5287 IF l_trx_date IS NULL THEN
5288 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
5289 Okl_Api.Set_Message(p_app_name => g_app_name,
5290 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
5291 RAISE Okl_Api.G_EXCEPTION_ERROR;
5292 END IF;
5293 END IF;
5294
5295 --SECHAWLA 05-MAY-04 3578894 : check if streams required for reporting product
5296 IF l_rep_prod_streams_yn = 'Y' THEN
5297 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
5298 OPEN line_reporting_csr(p_contract_line_id, l_trx_date, l_stream_type_id);
5299 FETCH line_reporting_csr INTO l_unearned_income;
5300 CLOSE line_reporting_csr;
5301 ELSE
5302 -- SECHAWLA 05-MAY-04 3578894 : end new code
5303 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
5304 OPEN line_csr(p_contract_line_id, l_stream_type_id);
5305 FETCH line_csr INTO l_unearned_income;
5306 CLOSE line_csr;
5307 END IF;
5308
5309 --Code commented by rvaduri.
5310 /*
5311 OPEN l_str_type_csr ('UNEARNED INCOME');
5312 FETCH l_str_type_csr INTO l_stream_type_id;
5313 CLOSE l_str_type_csr;
5314
5315 okl_execute_formula_pub.g_additional_parameters(1).name := 'STREAM TYPE';
5316 okl_execute_formula_pub.g_additional_parameters(1).value := l_stream_type_id;
5317
5318 l_result_amount := line_unbilled_streams (p_contract_id, p_contract_line_id);
5319
5320 RETURN NVL (l_result_amount, 0);
5321 */
5322 RETURN NVL(l_unearned_income,0);
5323
5324 EXCEPTION
5325 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
5326 IF line_csr%ISOPEN THEN
5327 CLOSE line_csr;
5328 END IF;
5329
5330 IF line_reporting_csr%ISOPEN THEN
5331 CLOSE line_reporting_csr;
5332 END IF;
5333
5334 RETURN NULL;
5335
5336 WHEN OTHERS THEN
5337
5338 -- Close open cursors
5339
5340 IF line_csr%ISOPEN THEN
5341 CLOSE line_csr;
5342 END IF;
5343
5344 IF line_reporting_csr%ISOPEN THEN
5345 CLOSE line_reporting_csr;
5346 END IF;
5347
5348 -- store SQL error message on message stack for caller
5349
5350 OKL_API.SET_MESSAGE (
5351 p_app_name => OKL_API.G_APP_NAME,
5352 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5353 p_token1 => 'SQLCODE',
5354 p_token1_value => SQLCODE,
5355 p_token2 => 'SQLERRM',
5356 p_token2_value => SQLERRM);
5357
5358 RETURN NULL;
5359
5360 END line_unearned_income;
5361
5362
5363 ------------------------------------------------------------------------------
5364 -- Start of Comments
5365 -- Created By: [email protected] - 24-APR-2002
5366 -- Function Name: line_calculate_fmv
5367 -- Description: Returns the fair market value for a given contract line
5368 -- using an hook to an external system.
5369 -- Just a shell for now
5370 -- Dependencies:
5371 -- Parameters: IN: p_contract_id, p_line_id
5372 -- OUT: amount
5373 -- Version: 1.0
5374 -- End of Commnets
5375 ------------------------------------------------------------------------------
5376
5377 FUNCTION line_calculate_fmv (
5378 p_contract_id IN NUMBER,
5379 p_contract_line_id IN NUMBER)
5380 RETURN NUMBER IS
5381 BEGIN
5382 RETURN 0;
5383 END line_calculate_fmv;
5384
5385 ------------------------------------------------------------------------------
5386 -- Start of Comments
5387 -- Created By: [email protected] - 24-APR-2002
5388 -- Function Name: line_calculate_residual_value
5389 -- Description: Returns the residual value for a given contract line
5390 -- using an hook to an external system.
5391 -- Just a shell for now
5392 -- Dependencies:
5393 -- Parameters: IN: p_contract_id, p_line_id
5394 -- OUT: amount
5395 -- Version: 1.0
5396 -- End of Commnets
5397 ------------------------------------------------------------------------------
5398
5399 FUNCTION line_calculate_residual_value (
5400 p_contract_id IN NUMBER,
5401 p_contract_line_id IN NUMBER)
5402 RETURN NUMBER IS
5403 BEGIN
5404 RETURN 0;
5405 END line_calculate_residual_value;
5406
5407 ---------------------------------------------
5408 -- CS Functions
5409 ---------------------------------------------
5410
5411 ----------------------------------------------------------------------------------------------------
5412
5413 -- Start of Comments
5414 -- Created By: Ranu Srivastava (rsrivast)
5415 -- Function Name contract_security_deposit
5416 -- Description: returns the security deposit for given contract
5417 -- Dependencies:
5418 -- Parameters: contract id,contract line id
5419 -- Version: 1.0
5420 -- End of Commnets
5421
5422 ----------------------------------------------------------------------------------------------------
5423
5424 FUNCTION contract_security_deposit( p_contract_id IN NUMBER
5425 ,p_contract_line_id IN NUMBER) RETURN NUMBER
5426 IS
5427 l_security_deposit NUMBER := 0;
5428
5429 -- select changed to filter streams based on purpose instead of on type
5430 -- enhancement done for user defined streams impacts, bug 3924303
5431
5432 CURSOR C (p_contract_id NUMBER)
5433 IS
5434 SELECT NVL(SUM(sele.amount),0)
5435 FROM okl_strm_elements sele,
5436 okl_streams str,
5437 okl_strm_type_v sty
5438 WHERE sele.stm_id = str.id
5439 AND str.sty_id = sty.id
5440 AND UPPER(sty.stream_type_purpose) = 'SECURITY_DEPOSIT'
5441 AND str.say_code = 'CURR'
5442 --multigaap changes
5443 AND STR.ACTIVE_YN = 'Y'
5444 AND STR.PURPOSE_CODE IS NULL
5445 --end multigaap changes
5446 AND str.khr_id = p_contract_id;
5447
5448 BEGIN
5449
5450 OPEN C (p_contract_id);
5451 FETCH C INTO l_security_deposit;
5452 CLOSE C;
5453
5454 RETURN l_security_deposit;
5455 EXCEPTION
5456 WHEN OTHERS THEN
5457 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
5458 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5459 p_msg_name => 'OKL_UNEXPECTED_ERROR',
5460 p_token1 => 'OKL_SQLCODE',
5461 p_token1_value => SQLCODE,
5462 p_token2 => 'OKL_SQLERRM',
5463 p_token2_value => SQLERRM);
5464 RETURN NULL;
5465
5466 END;
5467
5468 ----------------------------------------------------------------------------------------------------
5469
5470 -- Start of Comments
5471 -- Created By: Ranu Srivastava (rsrivast)
5472 -- Function Name contract_residual_amount
5473 -- Description: returns the residual value for given contract
5474 -- Dependencies:
5475 -- Parameters: contract id,contract line id
5476 -- Version: 1.0
5477 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract residual amount for line
5478 -- 27-Oct-04 PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
5479 -- End of Commnets
5480 ----------------------------------------------------------------------------------------------------
5481
5482 FUNCTION contract_residual_amount( p_contract_id IN NUMBER
5483 ,p_contract_line_id IN NUMBER) RETURN NUMBER
5484 IS
5485 l_residual_value NUMBER := 0;
5486
5487 CURSOR C (p_contract_id NUMBER)
5488
5489 IS
5490 SELECT NVL(SUM(RESIDUAL_VALUE),0)
5491 FROM okl_k_lines_full_v
5492 WHERE dnz_chr_id= p_contract_id
5493 AND sts_code <> 'TERMINATED';
5494
5495 --Commented this code by rvaduri for bug 3487920
5496 /*
5497 SELECT NVL(SUM(cs.amount),0)
5498 FROM okl_streams_v asv,okl_strm_type_v bs,
5499 okl_strm_elements_v cs,
5500 okl_streams str,
5501 okl_strm_type_v sty
5502 WHERE cs.stm_id = asv.id AND bs.id = asv.sty_id
5503 AND str.sty_id = sty.id
5504 AND UPPER(sty.name) = 'RESIDUAL VALUE'
5505 AND str.say_code = 'CURR'
5506 --multigaap changes
5507 AND STR.ACTIVE_YN = 'Y'
5508 AND STR.PURPOSE_CODE is NULL --end multigaap changes AND
5509 cs.stream_element_date >= SYSDATE AND
5510 asv.khr_id = p_contract_id; */
5511
5512 CURSOR line(p_contract_line_id NUMBER)
5513 IS
5514 SELECT NVL(RESIDUAL_VALUE,0)
5515 FROM okl_k_lines
5516 WHERE id = p_contract_line_id;
5517
5518
5519 BEGIN
5520 IF p_contract_line_id IS NOT NULL
5521 AND p_contract_line_id <> OKL_API.G_MISS_NUM THEN -- PAGARG bug#3974997 -- check for G_MISS when checking for NULL
5522 OPEN line (p_contract_line_id);
5523 FETCH line INTO l_residual_value;
5524 CLOSE line;
5525 ELSE
5526 OPEN C (p_contract_id);
5527 FETCH C INTO l_residual_value;
5528 CLOSE C;
5529 END IF;
5530 RETURN l_residual_value;
5531 EXCEPTION
5532 WHEN OTHERS THEN
5533 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
5534 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5535 p_msg_name => 'OKL_UNEXPECTED_ERROR',
5536 p_token1 => 'OKL_SQLCODE',
5537 p_token1_value => SQLCODE,
5538 p_token2 => 'OKL_SQLERRM',
5539 p_token2_value => SQLERRM);
5540 RETURN NULL;
5541
5542 END;
5543
5544 ----------------------------------------------------------------------------------------------------
5545
5546 -- Start of Comments
5547 -- Created By: Ranu Srivastava (rsrivast)
5548 -- Function Name contract_Rent_amount
5549 -- Description: returns the rent amount for given contract
5550 -- Dependencies:
5551 -- Parameters: contract id,contract line id
5552 -- Version: 1.0
5553 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract rent amount for line
5554 -- 27-Oct-04 PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
5555 -- 04-dec-08 sechawla : Updated curosr 'line', to query for stream type purpsoe instead of stream type,
5556 -- added p_contract_id parameter to cursor 'line'
5557 -- End of Commnets
5558 ----------------------------------------------------------------------------------------------------
5559
5560 FUNCTION contract_rent_amount( p_contract_id IN NUMBER
5561 ,p_contract_line_id IN NUMBER) RETURN NUMBER
5562 IS
5563 l_rent_amount NUMBER := 0;
5564
5565 --Get all the future unbilled receivables for the contract.
5566
5567 -- select changed to filter streams based on purpose instead of on name
5568 -- enhancement done for user defined streams impacts, bug 3924303
5569
5570 CURSOR C (p_contract_id NUMBER)
5571 IS
5572 SELECT NVL(SUM(sele.amount),0)
5573 FROM okl_strm_elements sele,
5574 okl_streams str,
5575 okl_strm_type_v sty
5576 WHERE sele.stm_id = str.id
5577 AND str.sty_id = sty.id
5578 AND UPPER(sty.stream_type_purpose) = 'RENT'
5579 AND str.say_code = 'CURR'
5580 AND STR.ACTIVE_YN = 'Y'
5581 AND STR.PURPOSE_CODE IS NULL
5582 AND SELE.DATE_BILLED IS NULL
5583 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
5584 AND str.khr_id = p_contract_id;
5585
5586
5587 --Get all the future unbilled receivables for the line.
5588 CURSOR line (p_contract_id NUMBER, p_contract_line_id NUMBER) IS --sechawla 04-dec-08 : added p_contract_id
5589 SELECT NVL(SUM(sele.amount),0)
5590 FROM okl_strm_elements sele,
5591 okl_streams str,
5592 okl_strm_type_v sty
5593 WHERE sele.stm_id = str.id
5594 AND str.sty_id = sty.id
5595 --AND UPPER(sty.name) = 'RENT' --sechawla 04-dec-08 : remoevd
5596 AND UPPER(sty.stream_type_purpose) = 'RENT' --sechawla 04-dec-08 : added
5597 AND str.say_code = 'CURR'
5598 AND STR.ACTIVE_YN = 'Y'
5599 AND STR.PURPOSE_CODE IS NULL
5600 AND SELE.DATE_BILLED IS NULL
5601 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
5602 AND str.khr_id = p_contract_id --sechawla 04-dec-08 : added
5603 AND str.kle_id = p_contract_line_id;
5604 BEGIN
5605 IF p_contract_line_id IS NOT NULL
5606 AND p_contract_line_id <> OKL_API.G_MISS_NUM THEN -- PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
5607 OPEN line (p_contract_id, p_contract_line_id); --sechawla 04-dec-08 : added p_contract_id
5608 FETCH line INTO l_rent_amount;
5609 CLOSE line;
5610 ELSE
5611 OPEN C (p_contract_id);
5612 FETCH C INTO l_rent_amount;
5613 CLOSE C;
5614 END IF;
5615 RETURN l_rent_amount;
5616 EXCEPTION
5617 WHEN OTHERS THEN
5618 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
5619 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5620 p_msg_name => 'OKL_UNEXPECTED_ERROR',
5621 p_token1 => 'OKL_SQLCODE',
5622 p_token1_value => SQLCODE,
5623 p_token2 => 'OKL_SQLERRM',
5624 p_token2_value => SQLERRM);
5625 RETURN NULL;
5626
5627 END;
5628
5629 ----------------------------------------------------------------------------------------------------
5630
5631 -- Start of Comments
5632 -- Created By: Ranu Srivastava (rsrivast)
5633 -- Function Name contract_unearned_income
5634 -- Description: returns the security deposit for given contract
5635 -- Dependencies:
5636 -- Parameters: contract id,contract line id
5637 -- Version: 1.0
5638 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract unearned income for line
5639 -- 27-Oct-04 PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
5640 -- End of Commnets
5641 ----------------------------------------------------------------------------------------------------
5642
5643 FUNCTION contract_unearned_income( p_contract_id IN NUMBER
5644 ,p_contract_line_id IN NUMBER) RETURN NUMBER
5645 IS
5646 l_unearned_income NUMBER := 0;
5647
5648 -- select changed to filter streams based on purpose 'LEASE_INCOME' instead of on type
5649 -- 'PRE-TAX INCOME', changes done for user defined streams impacts, bug 3924303
5650
5651 CURSOR C (p_contract_id NUMBER)
5652 IS
5653 SELECT NVL(SUM(sele.amount),0)
5654 FROM okl_strm_elements sele,
5655 --okl_streams str, MGAAP 7263041
5656 okl_streams_rep_v str,
5657 okl_strm_type_v sty
5658 WHERE sele.stm_id = str.id
5659 AND str.sty_id = sty.id
5660 AND UPPER(sty.stream_type_purpose) = 'LEASE_INCOME'
5661 AND str.say_code = 'CURR'
5662 AND STR.ACTIVE_YN = 'Y'
5663 AND (STR.PURPOSE_CODE IS NULL OR STR.PURPOSE_CODE='REPORT')
5664 AND (sele.accrued_yn IS NULL OR sele.accrued_yn = 'N')
5665 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
5666 AND str.khr_id = p_contract_id;
5667
5668 --Commented by rvaduri for bug 3536862
5669 /*
5670 SELECT NVL(SUM(sele.amount),0)
5671 FROM okl_strm_elements sele,
5672 okl_streams str,
5673 okl_strm_type_v sty
5674 WHERE sele.stm_id = str.id
5675 AND str.sty_id = sty.id
5676 AND UPPER(sty.name) = 'UNEARNED INCOME'
5677 AND str.say_code = 'CURR'
5678 --multigaap changes
5679 AND STR.ACTIVE_YN = 'Y'
5680 AND STR.PURPOSE_CODE IS NULL
5681 --end multigaap changes
5682 AND str.khr_id = p_contract_id;
5683 */
5684
5685 CURSOR line (p_contract_line_id NUMBER) IS
5686 SELECT NVL(SUM(sele.amount),0)
5687 FROM okl_strm_elements sele,
5688 --okl_streams str, MGAAP 7263041
5689 okl_streams_rep_v str,
5690 okl_strm_type_v sty
5691 WHERE sele.stm_id = str.id
5692 AND str.sty_id = sty.id
5693 AND UPPER(sty.name) = 'PRE-TAX INCOME'
5694 AND str.say_code = 'CURR'
5695 AND STR.ACTIVE_YN = 'Y'
5696 AND STR.PURPOSE_CODE IS NULL
5697 AND (sele.accrued_yn IS NULL OR sele.accrued_yn = 'N')
5698 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
5699 AND str.kle_id = p_contract_line_id;
5700 --Commented by rvaduri for bug 3536862
5701 /*
5702 *
5703 SELECT NVL(SUM(sel.amount),0)
5704 FROM okl_strm_elements sel,
5705 okl_streams stm,
5706 okl_strm_type_v sty
5707 WHERE sty.name = 'PRE-TAX INCOME'
5708 AND stm.sty_id = sty.id
5709 AND stm.say_code = 'CURR'
5710 AND stm.active_yn = 'Y'
5711 AND stm.kle_id = p_contract_line_id
5712 AND sel.stm_id = stm.id
5713 AND sel.stream_element_date > SYSDATE;
5714 */
5715
5716 BEGIN
5717 IF p_contract_line_id IS NOT NULL
5718 AND p_contract_line_id <> OKL_API.G_MISS_NUM THEN -- PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
5719 OPEN line (p_contract_line_id);
5720 FETCH line INTO l_unearned_income;
5721 CLOSE line;
5722 ELSE
5723 OPEN C (p_contract_id);
5724 FETCH C INTO l_unearned_income;
5725 CLOSE C;
5726 END IF;
5727 RETURN l_unearned_income;
5728 EXCEPTION
5729 WHEN OTHERS THEN
5730 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
5731 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5732 p_msg_name => 'OKL_UNEXPECTED_ERROR',
5733 p_token1 => 'OKL_SQLCODE',
5734 p_token1_value => SQLCODE,
5735 p_token2 => 'OKL_SQLERRM',
5736 p_token2_value => SQLERRM);
5737 RETURN NULL;
5738
5739 END;
5740
5741 ----------------------------------------------------------------------------------------------------
5742
5743 -- Start of Comments
5744 -- Created By: Ranu Srivastava (rsrivast)
5745 -- Function Name contract_depriciation_amount
5746 -- Description: returns the depriciation amount for given contract
5747 -- Dependencies:
5748 -- Parameters: contract id,contract line id
5749 -- Version: 1.0
5750 -- End of Commnets
5751
5752 ----------------------------------------------------------------------------------------------------
5753
5754 FUNCTION contract_depriciation_amount( p_contract_id IN NUMBER
5755 ,p_contract_line_id IN NUMBER) RETURN NUMBER
5756 IS
5757 /** NOTE: This Function is exactly the same as contract_acc_depreciation,
5758 * since the existing function code was wrong. Changed the code in pls
5759 * instead of changing the formula to use a different operand due to
5760 * operational issues of following up for getting the new operand seeded
5761 * Done for bug 3646679 */
5762
5763
5764 l_unearned_income NUMBER := 0;
5765 l_depreciation NUMBER := 0;
5766 l_depn_contract NUMBER := 0;
5767 l_converted_amount NUMBER := 0;
5768 p_return_status VARCHAR2(1);
5769 p_contract_start_date DATE;
5770 p_contract_currency okl_k_headers_full_v.currency_code%TYPE;
5771 p_currency_conversion_type okl_k_headers_full_v.currency_conversion_type%TYPE;
5772 p_currency_conversion_rate okl_k_headers_full_v.currency_conversion_rate%TYPE;
5773 p_currency_conversion_date okl_k_headers_full_v.currency_conversion_date%TYPE;
5774
5775 --Cursor to get the parent line id for a contract
5776 CURSOR parent_line_id_csr (p_contract_id NUMBER)
5777 IS
5778 SELECT line.id parent_line_id
5779 FROM okc_k_lines_b line
5780 ,okc_line_styles_v lse
5781 WHERE line.lse_id=lse.id
5782 AND lse.lty_code= 'FREE_FORM1'
5783 AND line.sts_code <> 'ABANDONED'
5784 AND dnz_chr_id = p_contract_id;
5785
5786
5787 -- line asset id and corporate book from FA
5788 CURSOR asset_details_csr(p_contract_line_id NUMBER)
5789 IS
5790 SELECT CORPORATE_BOOK, ASSET_ID
5791 FROM OKX_ASSET_LINES_V
5792 WHERE OKX_ASSET_LINES_V.PARENT_LINE_ID = p_contract_line_id;
5793
5794 -- total depreciation for the corporate book from FA
5795 CURSOR deprn_details_csr(p_asset_id NUMBER, p_corporate_book_code VARCHAR2)
5796 IS
5797 SELECT NVL(SUM(deprn_amount), 0) deprn_amount
5798 FROM OKX_AST_DPRTNS_V
5799 WHERE Asset_id = p_asset_id
5800 AND book_type_code = p_corporate_book_code
5801 AND status = 'A'
5802 AND NVL(start_date_active,SYSDATE) <= SYSDATE
5803 AND NVL(end_date_active,SYSDATE + 1) > SYSDATE;
5804
5805
5806 -- contract start date
5807 CURSOR contract_start_date_csr(p_khr_id NUMBER)
5808 IS
5809 SELECT start_date FROM okc_k_headers_b
5810 WHERE id = p_khr_id;
5811
5812 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
5813
5814 BEGIN
5815
5816 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
5817
5818 -- calculate asset line level depreciation
5819 IF(p_contract_line_id IS NOT NULL) THEN
5820 FOR p_asset_details_csr IN asset_details_csr(p_contract_line_id)
5821 LOOP
5822 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
5823 p_asset_details_csr.CORPORATE_BOOK)
5824 LOOP
5825 l_depreciation := p_deprn_details_csr.deprn_amount;
5826 END LOOP;
5827
5828 END LOOP;
5829
5830
5831 -- convert amount into contract currency
5832 OPEN contract_start_date_csr(p_contract_id);
5833 FETCH contract_start_date_csr INTO p_contract_start_date;
5834 CLOSE contract_start_date_csr;
5835
5836 okl_accounting_util.convert_to_contract_currency(
5837 p_khr_id => p_contract_id,
5838 p_from_currency => NULL,
5839 p_transaction_date => p_contract_start_date,
5840 p_amount => l_depreciation,
5841 x_return_status => p_return_status,
5842 x_contract_currency => p_contract_currency,
5843 x_currency_conversion_type => p_currency_conversion_type,
5844 x_currency_conversion_rate => p_currency_conversion_rate,
5845 x_currency_conversion_date => p_currency_conversion_date,
5846 x_converted_amount => l_converted_amount);
5847
5848 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5849 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5850 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
5851 RAISE Okl_Api.G_EXCEPTION_ERROR;
5852 END IF;
5853
5854 RETURN l_converted_amount;
5855
5856 ELSE
5857 FOR p_parent_line_id_csr IN parent_line_id_csr(p_contract_id) LOOP
5858 --Get the Parent_line_id based on the contract id
5859 FOR p_asset_details_csr IN asset_details_csr(p_parent_line_id_csr.parent_line_id)
5860 LOOP
5861 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
5862 p_asset_details_csr.CORPORATE_BOOK)
5863 LOOP
5864 --Depreciation Amount from FA
5865 l_depreciation := p_deprn_details_csr.deprn_amount;
5866 END LOOP;
5867 END LOOP;
5868 l_depn_contract := l_depn_contract + l_depreciation;
5869 END LOOP;
5870 -- convert amount into contract currency
5871 OPEN contract_start_date_csr(p_contract_id);
5872 FETCH contract_start_date_csr INTO p_contract_start_date;
5873 CLOSE contract_start_date_csr;
5874
5875 okl_accounting_util.convert_to_contract_currency(
5876 p_khr_id => p_contract_id,
5877 p_from_currency => NULL,
5878 p_transaction_date => p_contract_start_date,
5879 p_amount => l_depn_contract,
5880 x_return_status => p_return_status,
5881 x_contract_currency => p_contract_currency,
5882 x_currency_conversion_type => p_currency_conversion_type,
5883 x_currency_conversion_rate => p_currency_conversion_rate,
5884 x_currency_conversion_date => p_currency_conversion_date,
5885 x_converted_amount => l_converted_amount);
5886
5887 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5888 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5889 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
5890 RAISE Okl_Api.G_EXCEPTION_ERROR;
5891 END IF;
5892 RETURN l_converted_amount;
5893
5894 END IF;
5895
5896 EXCEPTION
5897 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
5898 RETURN 0;
5899
5900 WHEN OTHERS THEN
5901 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5902 p_msg_name => 'OKL_UNEXPECTED_ERROR',
5903 p_token1 => 'OKL_SQLCODE',
5904 p_token1_value => SQLCODE,
5905 p_token2 => 'OKL_SQLERRM',
5906 p_token2_value => SQLERRM);
5907 RETURN 0;
5908
5909 END contract_depriciation_amount;
5910
5911 ----------------------------------------------------------------------------------------------------
5912
5913 -- Start of Comments
5914 -- Created By: Ranu Srivastava (rsrivast)
5915 -- Function Name contract_principal_amount
5916 -- Description: returns the Principal amount for given contract
5917 -- Dependencies:
5918 -- Parameters: contract id,contract line id
5919 -- Version: 1.0
5920 -- End of Commnets
5921
5922 ----------------------------------------------------------------------------------------------------
5923
5924 FUNCTION contract_principal_amount( p_contract_id IN NUMBER
5925
5926 ,p_contract_line_id IN NUMBER) RETURN NUMBER
5927 IS
5928 l_amount NUMBER := 0;
5929
5930 /*
5931 CURSOR c (p_contract_id NUMBER)
5932 IS
5933 SELECT NVL(cs.amount,0)
5934 FROM okl_streams_v asv,okl_strm_type_v bs,
5935 okl_strm_elements_v cs,
5936 okl_streams str,
5937 okl_strm_type_v sty,
5938 okc_k_headers_v okh
5939 WHERE cs.stm_id = asv.id AND bs.id = asv.sty_id
5940 AND str.sty_id = sty.id
5941 AND UPPER(sty.name) = 'PRINCIPAL BALANCE'
5942 AND str.say_code = 'CURR'
5943 --multigaap changes
5944 AND STR.ACTIVE_YN = 'Y'
5945 AND STR.PURPOSE_CODE is NULL
5946 --end multigaap changes
5947 AND cs.stream_element_date >= SYSDATE
5948 AND cs.stream_element_date BETWEEN okh.start_date AND okh.end_date
5949 AND asv.khr_id = okh.id
5950 AND asv.khr_id = p_contract_id;
5951 */
5952 -- query changed to filter streams based on purpose instead of on type
5953 -- changes done for user defined streams impacts, bug 3924303
5954
5955 CURSOR C (p_contract_id NUMBER)
5956 IS
5957 --It should be sum because we have to get the Principal balance on
5958 -- all the assets for the contract
5959 SELECT NVL(SUM(sel.amount),0)
5960 FROM okl_strm_elements sel,
5961 okl_streams stm,
5962 okl_strm_type_v sty
5963 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
5964 AND stm.sty_id = sty.id
5965 AND stm.say_code = 'CURR'
5966 AND stm.active_yn = 'Y'
5967 AND stm.purpose_code IS NULL
5968 AND stm.khr_id = p_contract_id
5969 AND sel.stm_id = stm.id
5970 AND sel.stream_element_date =
5971 ( SELECT NVL(MAX(sel.stream_element_date), SYSDATE)
5972 FROM okl_strm_elements sel,okl_streams stm,
5973 okl_strm_type_v sty
5974 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
5975 AND stm.sty_id = sty.id
5976 AND stm.say_code = 'CURR'
5977 AND stm.active_yn = 'Y'
5978 AND stm.purpose_code IS NULL
5979 AND stm.khr_id = p_contract_id
5980 AND sel.stm_id = stm.id
5981 AND sel.stream_element_date <= SYSDATE);
5982 BEGIN
5983
5984 OPEN C (p_contract_id);
5985 FETCH C INTO l_amount;
5986 CLOSE C;
5987
5988 RETURN l_amount;
5989 EXCEPTION
5990 WHEN OTHERS THEN
5991 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
5992 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
5993 p_msg_name => 'OKL_UNEXPECTED_ERROR',
5994 p_token1 => 'OKL_SQLCODE',
5995 p_token1_value => SQLCODE,
5996 p_token2 => 'OKL_SQLERRM',
5997 p_token2_value => SQLERRM);
5998 RETURN NULL;
5999
6000 END;
6001
6002 --rkraya added
6003 ----------------------------------------------------------------------------------------------------
6004
6005 -- Start of Comments
6006 -- Created By: Reeshma Kuttiyat (rkuttiya/rkraya)
6007 -- Function Name: Unpaid Invoices
6008 -- Description: Function returns the sum of unpaid invoices for the asset line
6009 -- Dependencies:
6010 -- Parameters: contract id,contract line id
6011 -- Version: 1.0
6012 -- End of Commnets
6013
6014 ----------------------------------------------------------------------------------------------------
6015
6016 FUNCTION unpaid_invoices( p_contract_id IN NUMBER
6017 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6018 IS
6019 l_unpaid_inv NUMBER := 0;
6020 CURSOR c_unpaid_inv(p_contract_line_id IN NUMBER) IS
6021 SELECT SUM(APS.AMOUNT_DUE_REMAINING)
6022 FROM
6023 AR_PAYMENT_SCHEDULES_ALL APS,
6024 /*
6025 16-Aug-2007, ankushar Bug# 5499193
6026 start changes, modified the cursor to replace reference to okl_cnsld_ar_strms_b
6027 */
6028 okl_bpd_tld_ar_lines_v LSM,
6029 -- OKC_K_HEADERS_B CHR, commenting unused table, ankushar Bug# 5499193
6030 /* 16-Aug-2007 ankushar end changes */
6031 OKC_K_LINES_B CLE,
6032 OKC_LINE_STYLES_B LSE
6033 WHERE
6034 LSM.KLE_ID = p_contract_line_id
6035 AND LSM.CUSTOMER_TRX_ID = APS.CUSTOMER_TRX_ID
6036 AND APS.STATUS = 'OP'
6037 AND APS.CLASS IN ('INV')
6038 AND LSM.KLE_ID = CLE.CLE_ID
6039 AND CLE.LSE_ID = LSE.ID
6040 AND LSE.LTY_CODE = 'FIXED_ASSET';
6041
6042 BEGIN
6043
6044 OPEN c_unpaid_inv (p_contract_line_id);
6045 FETCH c_unpaid_inv INTO l_unpaid_inv;
6046 CLOSE c_unpaid_inv;
6047
6048 RETURN l_unpaid_inv;
6049 EXCEPTION
6050 WHEN OTHERS THEN
6051 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6052 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6053 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6054 p_token1 => 'OKL_SQLCODE',
6055 p_token1_value => SQLCODE,
6056 p_token2 => 'OKL_SQLERRM',
6057 p_token2_value => SQLERRM);
6058 RETURN NULL;
6059
6060 END;
6061
6062 ----------------------------------------------------------------------------------------------------
6063
6064 -- Start of Comments
6065 -- Created By: Reeshma Kuttiyat (rkuttiya/rkraya)
6066 -- Function Name: Unapplied Credit Memos
6067 -- Description: Function returns the sum of unapplied credit memos for the asset line
6068 -- Dependencies:
6069 -- Parameters: contract id,contract line id
6070 -- Version: 1.0
6071 -- End of Commnets
6072
6073 ----------------------------------------------------------------------------------------------------
6074
6075 FUNCTION unapplied_credit_memos( p_contract_id IN NUMBER
6076 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6077 IS
6078
6079 l_unapplied_credit NUMBER :=0;
6080 CURSOR c_unapplied_credit(p_contract_line_id IN NUMBER) IS
6081 SELECT SUM(APS.AMOUNT_DUE_REMAINING)
6082 FROM
6083 AR_PAYMENT_SCHEDULES_ALL APS,
6084 /*
6085 16-Aug-2007, ankushar Bug# 5499193
6086 start changes, modified the cursor to replace reference to okl_cnsld_ar_strms_b
6087 */
6088 okl_bpd_tld_ar_lines_v LSM,
6089 -- OKC_K_HEADERS_B CHR, commenting unused table, ankushar Bug# 5499193
6090 /* 16-Aug-2007 ankushar end changes */
6091 OKC_K_LINES_B CLE,
6092 OKC_LINE_STYLES_B LSE
6093 WHERE
6094 LSM.KLE_ID = p_contract_line_id
6095 AND LSM.CUSTOMER_TRX_ID = APS.CUSTOMER_TRX_ID
6096 AND APS.STATUS = 'OP'
6097 AND APS.CLASS IN ('CM')
6098 AND LSM.KLE_ID = CLE.CLE_ID
6099 AND CLE.LSE_ID = LSE.ID
6100 AND LSE.LTY_CODE = 'FIXED_ASSET';
6101
6102 BEGIN
6103
6104 OPEN c_unapplied_credit(p_contract_line_id);
6105 FETCH c_unapplied_credit INTO l_unapplied_credit;
6106 CLOSE c_unapplied_credit;
6107
6108 l_unapplied_credit := 0 - l_unapplied_credit;
6109
6110 RETURN l_unapplied_credit;
6111 EXCEPTION
6112 WHEN OTHERS THEN
6113 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6114 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6115 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6116 p_token1 => 'OKL_SQLCODE',
6117 p_token1_value => SQLCODE,
6118 p_token2 => 'OKL_SQLERRM',
6119 p_token2_value => SQLERRM);
6120 RETURN NULL;
6121
6122 END;
6123
6124
6125 ----------------------------------------------------------------------------------------------------
6126
6127 -- Start of Comments
6128 -- Created By: Ravikumar Vaduri
6129 -- Function Name contract_prin_balance
6130 -- Description: returns the Principal balance for given contract
6131 -- Dependencies:
6132 -- Parameters: contract id,contract line id
6133 -- the parameter Contract line id is not used for anything.
6134 -- Version: 1.0
6135 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract principal balance for line
6136 -- 01-Dec-04 rmunjulu Modified to get quote id and from that the quote eff from date and use that
6137 -- End of Commnets
6138
6139 ----------------------------------------------------------------------------------------------------
6140 FUNCTION contract_prin_balance( p_contract_id IN NUMBER
6141 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6142
6143 IS
6144 -- select changed to filter streams based on purpose instead of on type
6145 -- enhancement done for user defined streams impacts, bug 3924303
6146
6147 CURSOR C (p_contract_id NUMBER, p_date DATE) -- rmunjulu EDAT
6148 IS
6149 --It should be sum because we have to get the Principal balance on
6150 -- all the assets for the contract
6151 SELECT NVL(SUM(sel.amount),0)
6152 FROM okl_strm_elements sel,
6153 okl_streams stm,
6154 okl_strm_type_v sty
6155 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6156 AND stm.sty_id = sty.id
6157 AND stm.say_code = 'CURR'
6158 AND stm.active_yn = 'Y'
6159 AND stm.purpose_code IS NULL
6160 AND stm.khr_id = p_contract_id
6161 AND sel.stm_id = stm.id
6162 AND sel.stream_element_date =
6163 ( SELECT NVL(MAX(sel.stream_element_date), SYSDATE)
6164 FROM okl_strm_elements sel,okl_streams stm,
6165 okl_strm_type_v sty
6166 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6167 AND stm.sty_id = sty.id
6168 AND stm.say_code = 'CURR'
6169 AND stm.active_yn = 'Y'
6170 AND stm.purpose_code IS NULL
6171 AND stm.khr_id = p_contract_id
6172 AND sel.stm_id = stm.id
6173 AND sel.stream_element_date <= p_date); -- rmunjulu EDAT
6174
6175 -- select changed to filter streams based on purpose instead of on type
6176 -- enhancement done for user defined streams impacts, bug 3924303
6177
6178 CURSOR line (p_contract_line_id NUMBER, p_date DATE) IS
6179 SELECT NVL(sel.amount,0)
6180 FROM okl_strm_elements sel,
6181 okl_streams stm,
6182 okl_strm_type_v sty
6183 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6184 AND stm.sty_id = sty.id
6185 AND stm.say_code = 'CURR'
6186 AND stm.active_yn = 'Y'
6187 AND stm.purpose_code IS NULL
6188 AND stm.kle_id = p_contract_line_id
6189 AND sel.stm_id = stm.id
6190 AND sel.stream_element_date =
6191 ( SELECT NVL(MAX(sel.stream_element_date), SYSDATE)
6192 FROM okl_strm_elements sel,okl_streams stm,
6193 okl_strm_type_v sty
6194 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6195 AND stm.sty_id = sty.id
6196 AND stm.say_code = 'CURR'
6197 AND stm.active_yn = 'Y'
6198 AND stm.kle_id = p_contract_line_id
6199 AND stm.purpose_code IS NULL
6200 AND sel.stm_id = stm.id
6201 AND sel.stream_element_date <= p_date); -- rmunjulu EDAT
6202
6203 l_principal_balance NUMBER;
6204
6205 -- rmunjulu EDAT
6206 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
6207 SELECT trunc(qte.date_effective_from) date_effective_from
6208 FROM okl_trx_quotes_b qte
6209 WHERE qte.id = p_quote_id;
6210
6211 -- rmunjulu EDAT
6212 l_quote_id NUMBER;
6213 l_quote_date DATE;
6214 l_sysdate DATE;
6215
6216 BEGIN
6217
6218 -- rmunjulu EDAT Get additional parameter if found
6219 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
6220 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
6221 LOOP
6222 -- rmunjulu EDAT -- get quote id
6223 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_id' THEN
6224 l_quote_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
6225 END IF;
6226 END LOOP;
6227 END IF;
6228
6229 -- rmunjulu EDAT
6230 SELECT SYSDATE INTO l_sysdate FROM dual;
6231
6232 -- rmunjulu EDAT -- get eff date for quote
6233 IF l_quote_id IS NOT NULL
6234 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
6235
6236 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
6237 l_quote_date := get_quote_date_rec.date_effective_from;
6238 END LOOP;
6239
6240 END IF;
6241
6242 -- rmunjulu EDAT Default the l_quote_date to sysdate if quote id not found
6243 IF l_quote_date IS NULL
6244 OR l_quote_date = OKL_API.G_MISS_DATE THEN
6245 l_quote_date := l_sysdate;
6246 END IF;
6247
6248 IF p_contract_line_id IS NOT NULL THEN
6249 OPEN line (p_contract_line_id, l_quote_date); -- rmunjulu EDAT
6250 FETCH line INTO l_principal_balance;
6251 CLOSE line;
6252 ELSE
6253
6254 OPEN C(p_contract_id, l_quote_date); -- rmunjulu EDAT
6255 FETCH C INTO l_principal_balance;
6256 CLOSE C;
6257
6258 END IF;
6259
6260 RETURN l_principal_balance;
6261 END contract_prin_balance;
6262
6263 ----------------------------------------------------------------------------------------------------
6264
6265 -- Start of Comments
6266 -- Created By: Sridhar Moduga
6267 -- Function Name get_asset_subsidy_amount
6268 -- Description: returns the asset subsidy amount for given contract
6269 -- Dependencies:
6270 -- Parameters: contract id,accounting method
6271 --
6272 -- Version: 1.0
6273 --
6274 -- End of Comments
6275
6276 ----------------------------------------------------------------------------------------------------
6277 FUNCTION get_asset_subsidy_amount(
6278 p_contract_id IN NUMBER,
6279 p_accounting_method IN VARCHAR2)
6280 RETURN NUMBER IS
6281
6282 lx_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
6283 l_api_name CONSTANT VARCHAR2(30) := 'GET_ASSET_SUBSIDY';
6284 l_api_version CONSTANT NUMBER := 1.0;
6285 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
6286 lx_msg_count NUMBER := OKL_API.G_MISS_NUM;
6287 lx_msg_data VARCHAR2(2000);
6288
6289 x_subsidy_amount NUMBER;
6290
6291 l_asset_subsidy_amount NUMBER;
6292
6293 --cursor to fetch all the subsidies attached to financial asset
6294 --smoduga modified to set 0 when sub_kle.amount is null
6295 -- passing accounting method as input parameter
6296 CURSOR l_sub_csr(c_contract_id IN NUMBER,c_accounting_method IN VARCHAR2) IS
6297 SELECT NVL(SUM(NVL(sub_kle.subsidy_override_amount, sub_kle.amount)),0)
6298 FROM okl_subsidies_b subb,
6299 okl_k_lines sub_kle,
6300 okc_k_lines_b sub_cle,
6301 okc_line_styles_b sub_lse
6302 WHERE subb.id = sub_kle.subsidy_id
6303 AND subb.accounting_method_code = NVL(UPPER(c_accounting_method),subb.accounting_method_code)
6304 AND sub_kle.id = sub_cle.id
6305 AND sub_cle.lse_id = sub_lse.id
6306 AND sub_lse.lty_code = 'SUBSIDY'
6307 AND sub_cle.sts_code <> 'ABANDONED'
6308 AND sub_cle.dnz_chr_id = c_contract_id
6309 AND subb.customer_visible_yn = 'Y'
6310 ;
6311
6312 -- START: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6313 l_accounting_method okl_subsidies_b.accounting_method_code%TYPE;
6314 -- END: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6315 l_subsidy_cle_id NUMBER;
6316 BEGIN
6317
6318 l_asset_subsidy_amount := 0;
6319 -- START: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6320 IF(p_accounting_method = OKL_API.G_MISS_NUM OR p_accounting_method = OKL_API.G_MISS_CHAR) THEN
6321 l_accounting_method := NULL;
6322 END IF;
6323 -- END: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6324 --------------------------------------------------------------
6325 --get all the subsidies associated to asset and get amount
6326 --------------------------------------------------------------
6327 --smoduga added accountingmethod as in parameter
6328 -- OPEN l_sub_csr(p_contract_id , p_accounting_method);
6329 -- START: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6330 OPEN l_sub_csr(p_contract_id , l_accounting_method);
6331 -- END: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6332 LOOP
6333 FETCH l_sub_csr INTO l_asset_subsidy_amount;
6334 EXIT WHEN l_sub_csr%NOTFOUND;
6335 END LOOP;
6336 CLOSE l_sub_csr;
6337
6338 x_subsidy_amount := l_asset_subsidy_amount;
6339
6340 RETURN x_subsidy_amount;
6341
6342 EXCEPTION
6343 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6344 lx_return_status := OKL_API.HANDLE_EXCEPTIONS(
6345 l_api_name,
6346 G_PKG_NAME,
6347 'OKL_API.G_RET_STS_ERROR',
6348 lx_msg_count,
6349 lx_msg_data,
6350 '_PVT');
6351 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6352 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6353 l_api_name,
6354 G_PKG_NAME,
6355 'OKL_API.G_RET_STS_UNEXP_ERROR',
6356 lx_msg_count,
6357 lx_msg_data,
6358 '_PVT');
6359 WHEN OTHERS THEN
6360 IF l_sub_csr%ISOPEN THEN
6361 CLOSE l_sub_csr;
6362 END IF;
6363 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6364 l_api_name,
6365 G_PKG_NAME,
6366 'OTHERS',
6367 lx_msg_count,
6368 lx_msg_data,
6369 '_PVT');
6370
6371 END get_asset_subsidy_amount;
6372
6373
6374 ----------------------------------------------------------------------------------------------------
6375
6376 -- Start of Comments
6377 -- Created By: Ravikumar Vaduri
6378 -- Function Name contract_acc_depreciation
6379 -- Description: returns the acc depreciation for a contract from FA
6380 -- this function is used in calculation of NET INVESTMENT for
6381 -- OP LEASE
6382 -- Dependencies:
6383 -- Parameters: contract id,contract line id
6384 -- Version: 1.0
6385 -- 17-MAR-04 rvaduri Created the Function
6386 -- End of Commnets
6387
6388 ----------------------------------------------------------------------------------------------------
6389
6390 FUNCTION contract_acc_depreciation( p_contract_id IN NUMBER
6391 ,p_contract_line_id IN NUMBER)
6392 RETURN NUMBER IS
6393
6394 l_unearned_income NUMBER := 0;
6395 l_depreciation NUMBER := 0;
6396 l_depn_contract NUMBER := 0;
6397 l_converted_amount NUMBER := 0;
6398 p_return_status VARCHAR2(1);
6399 p_contract_start_date DATE;
6400 p_contract_currency okl_k_headers_full_v.currency_code%TYPE;
6401 p_currency_conversion_type okl_k_headers_full_v.currency_conversion_type%TYPE;
6402 p_currency_conversion_rate okl_k_headers_full_v.currency_conversion_rate%TYPE;
6403 p_currency_conversion_date okl_k_headers_full_v.currency_conversion_date%TYPE;
6404
6405 --Cursor to get the parent line id for a contract
6406 CURSOR parent_line_id_csr (p_contract_id NUMBER)
6407 IS
6408 SELECT line.id parent_line_id
6409 FROM okc_k_lines_b line
6410 ,okc_line_styles_v lse
6411 WHERE line.lse_id=lse.id
6412 AND lse.lty_code= 'FREE_FORM1'
6413 AND line.sts_code <> 'ABANDONED'
6414 AND dnz_chr_id = p_contract_id;
6415
6416
6417 -- line asset id and corporate book from FA
6418 CURSOR asset_details_csr(p_contract_line_id NUMBER)
6419 IS
6420 SELECT CORPORATE_BOOK, ASSET_ID
6421 FROM OKX_ASSET_LINES_V
6422 WHERE OKX_ASSET_LINES_V.PARENT_LINE_ID = p_contract_line_id;
6423
6424 -- total depreciation for the corporate book from FA
6425 CURSOR deprn_details_csr(p_asset_id NUMBER, p_corporate_book_code VARCHAR2)
6426 IS
6427 SELECT NVL(SUM(deprn_amount), 0) deprn_amount
6428 FROM OKX_AST_DPRTNS_V
6429 WHERE Asset_id = p_asset_id
6430 AND book_type_code = p_corporate_book_code
6431 AND status = 'A'
6432 AND NVL(start_date_active,SYSDATE) <= SYSDATE
6433 AND NVL(end_date_active,SYSDATE + 1) > SYSDATE;
6434
6435
6436 -- contract start date
6437 CURSOR contract_start_date_csr(p_khr_id NUMBER)
6438 IS
6439 SELECT start_date FROM okc_k_headers_b
6440 WHERE id = p_khr_id;
6441
6442 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
6443 BEGIN
6444
6445 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
6446 -- calculate asset line level depreciation
6447 IF(p_contract_line_id IS NOT NULL) THEN
6448 FOR p_asset_details_csr IN asset_details_csr(p_contract_line_id)
6449 LOOP
6450 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
6451 p_asset_details_csr.CORPORATE_BOOK)
6452 LOOP
6453 l_depreciation := p_deprn_details_csr.deprn_amount;
6454 END LOOP;
6455
6456 END LOOP;
6457
6458
6459 -- convert amount into contract currency
6460 OPEN contract_start_date_csr(p_contract_id);
6461 FETCH contract_start_date_csr INTO p_contract_start_date;
6462 CLOSE contract_start_date_csr;
6463
6464 okl_accounting_util.convert_to_contract_currency(
6465 p_khr_id => p_contract_id,
6466 p_from_currency => NULL,
6467 p_transaction_date => p_contract_start_date,
6468 p_amount => l_depreciation,
6469 x_return_status => p_return_status,
6470 x_contract_currency => p_contract_currency,
6471 x_currency_conversion_type => p_currency_conversion_type,
6472 x_currency_conversion_rate => p_currency_conversion_rate,
6473 x_currency_conversion_date => p_currency_conversion_date,
6474 x_converted_amount => l_converted_amount);
6475
6476 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6477 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6478 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6479 RAISE Okl_Api.G_EXCEPTION_ERROR;
6480 END IF;
6481
6482 RETURN l_converted_amount;
6483
6484 ELSE
6485 FOR p_parent_line_id_csr IN parent_line_id_csr(p_contract_id) LOOP
6486 --Get the Parent_line_id based on the contract id
6487 FOR p_asset_details_csr IN asset_details_csr(p_parent_line_id_csr.parent_line_id)
6488 LOOP
6489 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
6490 p_asset_details_csr.CORPORATE_BOOK)
6491 LOOP
6492 --Depreciation Amount from FA
6493 l_depreciation := p_deprn_details_csr.deprn_amount;
6494 END LOOP;
6495 END LOOP;
6496 l_depn_contract := l_depn_contract + l_depreciation;
6497 END LOOP;
6498 -- convert amount into contract currency
6499 OPEN contract_start_date_csr(p_contract_id);
6500 FETCH contract_start_date_csr INTO p_contract_start_date;
6501 CLOSE contract_start_date_csr;
6502
6503 --rkuttiya modified for bug#4367682 changed l_depreciation to l_depn_contract
6504 okl_accounting_util.convert_to_contract_currency(
6505 p_khr_id => p_contract_id,
6506 p_from_currency => NULL,
6507 p_transaction_date => p_contract_start_date,
6508 p_amount => l_depn_contract,
6509 x_return_status => p_return_status,
6510 x_contract_currency => p_contract_currency,
6511 x_currency_conversion_type => p_currency_conversion_type,
6512 x_currency_conversion_rate => p_currency_conversion_rate,
6513 x_currency_conversion_date => p_currency_conversion_date,
6514 x_converted_amount => l_converted_amount);
6515
6516 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6517 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6518 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6519 RAISE Okl_Api.G_EXCEPTION_ERROR;
6520 END IF;
6521 RETURN l_converted_amount;
6522
6523 END IF;
6524
6525 EXCEPTION
6526 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6527 RETURN 0;
6528
6529 WHEN OTHERS THEN
6530 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6531 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6532 p_token1 => 'OKL_SQLCODE',
6533 p_token1_value => SQLCODE,
6534 p_token2 => 'OKL_SQLERRM',
6535 p_token2_value => SQLERRM);
6536 RETURN 0;
6537
6538 END contract_acc_depreciation;
6539
6540 ----------------------------------------------------------------------------------------------------
6541
6542 -- Start of Comments
6543 -- Created By: Ravikumar Vaduri
6544 -- Function Name pv_of_unbilled_rents
6545 -- Description: returns the Present value of Unbilled Rent for a contract
6546 -- this function is used in calculation of NET INVESTMENT for
6547 -- DF LEASE
6548 -- Dependencies:
6549 -- Parameters: contract id,contract line id
6550 -- Version: 1.0
6551 -- 17-MAR-04 rvaduri Created the Function
6552 -- End of Commnets
6553
6554 ----------------------------------------------------------------------------------------------------
6555
6556 FUNCTION pv_of_unbilled_rents(
6557 p_contract_id IN NUMBER
6558 ,p_contract_line_id IN NUMBER) RETURN NUMBER IS
6559
6560 l_api_name CONSTANT VARCHAR2(30) := 'PV_OF_UNBILLED_RENTS';
6561 l_api_version CONSTANT NUMBER := 1;
6562 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6563 x_msg_count NUMBER;
6564 x_msg_data VARCHAR2(256);
6565 l_cash_flow_tbl OKL_STREAM_GENERATOR_PVT.cash_flow_tbl;
6566 i NUMBER := 0;
6567 l_total_rent NUMBER := 0;
6568 l_rent NUMBER := 0;
6569 l_rate NUMBER := 0;
6570 x_pv_amount NUMBER := 0;
6571 l_due_date DATE;
6572 l_currency VARCHAR2(30);
6573 l_kle_id NUMBER := 0;
6574 l_slh_id NUMBER := 0;
6575 l_freq VARCHAR2(10);
6576
6577 -- select changed to filter streams based on purpose instead of on type
6578 -- enhancement done for user defined streams impacts, bug 3924303
6579
6580 CURSOR contract_unbilled_rent_csr(c_contract_id NUMBER)
6581 IS
6582 SELECT sel.amount rent
6583 ,sel.stream_element_date due_date
6584 ,stm.kle_id
6585 FROM okl_strm_elements sel,
6586 okl_streams stm,
6587 okl_strm_type_v sty
6588 WHERE sty.stream_type_purpose = 'RENT'
6589 AND stm.sty_id = sty.id
6590 AND stm.say_code = 'CURR'
6591 AND stm.active_yn = 'Y'
6592 AND stm.purpose_code IS NULL
6593 AND stm.khr_id = c_contract_id
6594 AND sel.stm_id = stm.id
6595 AND sel.date_billed IS NULL;
6596
6597
6598 -- select changed to filter streams based on purpose instead of on type
6599 -- enhancement done for user defined streams impacts, bug 3924303
6600
6601 CURSOR line_unbilled_rent_csr(c_contract_line_id NUMBER)
6602 IS
6603 SELECT sel.amount rent
6604 ,sel.stream_element_date due_date
6605 FROM okl_strm_elements sel,
6606 okl_streams stm,
6607 okl_strm_type_v sty
6608 WHERE sty.stream_type_purpose = 'RENT'
6609 AND stm.sty_id = sty.id
6610 AND stm.say_code = 'CURR'
6611 AND stm.active_yn = 'Y'
6612 AND stm.purpose_code IS NULL
6613 AND stm.kle_id = c_contract_line_id
6614 AND sel.stm_id = stm.id
6615 AND sel.date_billed IS NULL;
6616
6617
6618
6619 CURSOR c_get_rent_slh_id(c_line_id NUMBER,c_khr_id NUMBER)
6620 IS
6621 SELECT rl.id
6622 FROM okc_rule_groups_v rg,
6623 okc_rules_v rl
6624 WHERE rl.rgp_id = rg.id
6625 AND rl.dnz_chr_id = rg.dnz_chr_id
6626 AND rg.cle_id = c_line_id
6627 AND rg.rgd_code = 'LALEVL'
6628 AND rl.rule_information_category = 'LASLH'
6629 AND rl.dnz_chr_id = c_khr_id
6630 AND rl.object1_id1=(SELECT id FROM okl_strm_type_b WHERE code='RENT');
6631
6632 CURSOR c_get_freq(c_line_id NUMBER,c_khr_id NUMBER,c_rent_slh_id NUMBER)
6633 IS
6634 SELECT rl.object1_id1 frequency
6635 FROM okc_rule_groups_v rg,
6636 okc_rules_v rl
6637 WHERE rl.rgp_id = rg.id
6638 AND rl.dnz_chr_id = rg.dnz_chr_id
6639 AND rg.cle_id = c_line_id
6640 AND rg.rgd_code = 'LALEVL'
6641 AND rl.rule_information_category = 'LASLL'
6642 AND rl.dnz_chr_id = c_khr_id
6643 AND rl.object2_id1=c_rent_slh_id
6644 AND ROWNUM = 1;
6645
6646
6647 CURSOR contract_rate_csr (c_contract_id NUMBER)
6648 IS
6649 SELECT implicit_interest_rate
6650 FROM okl_k_headers
6651 WHERE id=c_contract_id;
6652
6653
6654 CURSOR k_curr_code (c_contract_id NUMBER)
6655 IS
6656 SELECT currency_code
6657 FROM okc_k_headers_b
6658 WHERE id=c_contract_id;
6659
6660
6661
6662 BEGIN
6663
6664 --Get the contract currency Code.
6665 OPEN k_curr_code(p_contract_id);
6666 FETCH k_curr_code INTO l_currency;
6667 CLOSE k_curr_code;
6668
6669 --Get the Interest Rate on the contract.
6670 OPEN contract_rate_csr(p_contract_id);
6671 FETCH contract_rate_csr INTO l_rate;
6672 CLOSE contract_rate_csr;
6673
6674 IF l_rate IS NULL THEN
6675 Okl_Api.set_message(p_app_name => G_APP_NAME,
6676 p_msg_name => G_REQUIRED_VALUE,
6677 p_token1 => G_COL_NAME_TOKEN,
6678 p_token1_value => 'RATE');
6679
6680 RAISE OKC_API.G_EXCEPTION_ERROR;
6681 END IF;
6682
6683 IF p_contract_line_id IS NOT NULL THEN
6684
6685 FOR cur_rec IN line_unbilled_rent_csr(p_contract_line_id) LOOP
6686 l_due_date := cur_rec.due_date;
6687 l_rent := cur_rec.rent;
6688
6689 IF l_due_date < SYSDATE THEN
6690 --The Due date is in the past, i.e no billing has been run
6691 --so the present value of the rent is the actual value
6692 --that is present in the streams table.
6693 l_total_rent := l_total_rent + l_rent;
6694 ELSE
6695 i := i + 1;
6696 --The Due date is in the future, so we have to calculate the
6697 --present value of the rent.
6698 OPEN c_get_rent_slh_id(p_contract_line_id,p_contract_id);
6699 FETCH c_get_rent_slh_id INTO l_slh_id;
6700 CLOSE c_get_rent_slh_id;
6701
6702
6703 OPEN c_get_freq(p_contract_line_id,p_contract_id,l_slh_id);
6704 FETCH c_get_freq INTO l_freq;
6705 CLOSE c_get_freq;
6706
6707
6708
6709 --Populate the pl/sql table for the calculation of PV of rent.
6710
6711 l_cash_flow_tbl(i).cf_date := l_due_date;
6712 l_cash_flow_tbl(i).cf_amount := l_rent;
6713 l_cash_flow_tbl(i).cf_frequency := l_freq;
6714 END IF;
6715 END LOOP;
6716 --Call the API that does the PV calculation.
6717
6718 IF l_cash_flow_tbl.COUNT > 0 THEN
6719 OKL_STREAM_GENERATOR_PVT.get_present_value(
6720 p_api_version => l_api_version,
6721 p_init_msg_list => OKL_API.G_TRUE,
6722 p_cash_flow_tbl => l_cash_flow_tbl,
6723 p_rate => l_rate,
6724 p_pv_date => SYSDATE,
6725 x_pv_amount => x_pv_amount,
6726 x_return_status => x_return_status,
6727 x_msg_count => x_msg_count,
6728 x_msg_data => x_msg_data);
6729
6730 IF (x_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
6731 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
6732 ELSIF (x_return_status = okl_api.G_RET_STS_ERROR) THEN
6733 RAISE okl_api.G_EXCEPTION_ERROR;
6734 END IF;
6735 END IF;
6736
6737 l_total_rent := l_total_rent + NVL(x_pv_amount,0);
6738
6739 ELSE
6740
6741 FOR cur_rec IN contract_unbilled_rent_csr(p_contract_id) LOOP
6742
6743 l_due_date := cur_rec.due_date;
6744 l_rent := cur_rec.rent;
6745 l_kle_id := cur_rec.kle_id;
6746 IF l_due_date < SYSDATE THEN
6747 --The Due date is in the past, i.e no billing has been run
6748 --so the present value of the rent is the actual value
6749 --that is present in the streams table.
6750 l_total_rent := l_total_rent + l_rent;
6751 ELSE
6752 i := i + 1;
6753 --The Due date is in the future, so we have to calculate the
6754 --present value of the rent.
6755 OPEN c_get_rent_slh_id(l_kle_id,p_contract_id);
6756 FETCH c_get_rent_slh_id INTO l_slh_id;
6757 CLOSE c_get_rent_slh_id;
6758
6759
6760 OPEN c_get_freq(l_kle_id,p_contract_id,l_slh_id);
6761 FETCH c_get_freq INTO l_freq;
6762 CLOSE c_get_freq;
6763
6764
6765 --Populate the pl/sql table for the calculation of PV of rent.
6766 l_cash_flow_tbl(i).cf_date := l_due_date;
6767 l_cash_flow_tbl(i).cf_amount := l_rent;
6768 l_cash_flow_tbl(i).cf_frequency := l_freq;
6769 END IF;
6770 END LOOP;
6771 --Call the API that does the PV calculation.
6772 IF l_cash_flow_tbl.COUNT > 0 THEN
6773 OKL_STREAM_GENERATOR_PVT.get_present_value(
6774 p_api_version => l_api_version,
6775 p_init_msg_list => OKL_API.G_TRUE,
6776 p_cash_flow_tbl => l_cash_flow_tbl,
6777 p_rate => l_rate,
6778 p_pv_date => SYSDATE,
6779 x_pv_amount => x_pv_amount,
6780 x_return_status => x_return_status,
6781 x_msg_count => x_msg_count,
6782 x_msg_data => x_msg_data);
6783
6784 IF (x_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
6785 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
6786 ELSIF (x_return_status = okl_api.G_RET_STS_ERROR) THEN
6787 RAISE okl_api.G_EXCEPTION_ERROR;
6788 END IF;
6789 END IF;
6790 l_total_rent := l_total_rent + NVL(x_pv_amount,0);
6791 END IF;
6792
6793 --Round the amount before returning it.
6794 RETURN OKL_ACCOUNTING_UTIL.round_amount(l_total_rent,l_currency);
6795
6796
6797 EXCEPTION
6798 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6799 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6800 l_api_name,
6801 G_PKG_NAME,
6802 'OKL_API.G_RET_STS_ERROR',
6803 x_msg_count,
6804 x_msg_data,
6805 '_PVT');
6806 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6807 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6808 l_api_name,
6809 G_PKG_NAME,
6810 'OKL_API.G_RET_STS_UNEXP_ERROR',
6811 x_msg_count,
6812 x_msg_data,
6813 '_PVT');
6814 WHEN OTHERS THEN
6815 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6816 l_api_name,
6817 G_PKG_NAME,
6818 'OTHERS',
6819 x_msg_count,
6820 x_msg_data,
6821 '_PVT');
6822 END pv_of_unbilled_rents;
6823
6824
6825 ---------------------------------------------
6826 -- End CS Functions
6827 ---------------------------------------------
6828
6829 -----------------------------------------------------------------------
6830 -- Functions By pdevaraj -start
6831 -----------------------------------------------------------------------
6832 -----------------------------------------------------------------------
6833 -- Start of Comments
6834 -- Created By: Punitharaj Devaraju (pdevaraj)
6835 -- Function Name: contract_net_investment
6836 -- Description: Get net investment for a contract.
6837 -- Dependencies: OKL_SEEDED_FUNCTIONS_PVT.contract_residual_value
6838 -- OKL_SEEDED_FUNCTIONS_PVT.contract_sum_of_rents
6839 -- OKL_SEEDED_FUNCTIONS_PVT.contract_income
6840 -- Parameters: contract id.
6841 -- Version: 1.0
6842 -- End of Commnets
6843 -----------------------------------------------------------------------
6844
6845 FUNCTION contract_net_investment
6846 (
6847 p_chr_id IN NUMBER
6848 ,p_line_id IN NUMBER
6849 )
6850 RETURN NUMBER IS
6851 l_api_version NUMBER;
6852 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6853 l_msg_count NUMBER;
6854 l_msg_data VARCHAR2(2000);
6855 l_rent NUMBER := 0;
6856 l_residual NUMBER := 0;
6857 l_income NUMBER := 0;
6858 l_net_investment NUMBER := 0;
6859
6860 BEGIN
6861
6862 -- Get Residual Value
6863 l_residual := Okl_Seeded_Functions_Pvt.contract_residual_value(p_chr_id => p_chr_id, p_line_id => NULL);
6864
6865 -- Get Rent
6866 l_rent := Okl_Seeded_Functions_Pvt.contract_sum_of_rents(p_chr_id, NULL);
6867
6868 -- Get Rent
6869 l_income := Okl_Seeded_Functions_Pvt.contract_income(p_chr_id, NULL);
6870
6871 -- Calculate Net Investment
6872 l_net_investment := l_rent + l_residual - l_income;
6873
6874 RETURN l_net_investment;
6875 EXCEPTION
6876 WHEN OTHERS THEN
6877 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
6878 ,p_msg_name => G_UNEXPECTED_ERROR
6879 ,p_token1 => G_SQLCODE_TOKEN
6880 ,p_token1_value => SQLCODE
6881 ,p_token2 => G_SQLERRM_TOKEN
6882 ,p_token2_value => SQLERRM);
6883
6884 RETURN NULL;
6885 END contract_net_investment;
6886
6887 -----------------------------------------------------------------------
6888 -- Start of Comments
6889 -- Created By: Punitharaj Devaraju (pdevaraj)
6890 -- Function Name: contract_cures_in_possession
6891 -- Description: Get cures in possession a contract.
6892 -- Dependencies:
6893 -- Parameters: contract id.
6894 -- Version: 1.0
6895 -- End of Commnets
6896 -----------------------------------------------------------------------
6897 FUNCTION contract_cures_in_possession
6898 (
6899 p_chr_id IN NUMBER
6900 )
6901 RETURN NUMBER IS
6902 -- Cursor to get Cures in Possession
6903 CURSOR cures_in_possession_csr(p_chr_id IN NUMBER) IS
6904 SELECT NVL(SUM(amount),0)
6905 FROM OKL_CURE_PAYMENT_LINES
6906 WHERE chr_id = p_chr_id
6907 AND status = 'CURES_IN_POSSESSION'
6908 AND cured_flag = 'Y';
6909
6910 l_cures_in_possession NUMBER := 0;
6911
6912 BEGIN
6913
6914 OPEN cures_in_possession_csr(p_chr_id);
6915 FETCH cures_in_possession_csr INTO l_cures_in_possession;
6916 CLOSE cures_in_possession_csr;
6917
6918 RETURN l_cures_in_possession;
6919
6920 EXCEPTION
6921 WHEN OTHERS THEN
6922 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
6923 ,p_msg_name => G_UNEXPECTED_ERROR
6924 ,p_token1 => G_SQLCODE_TOKEN
6925 ,p_token1_value => SQLCODE
6926 ,p_token2 => G_SQLERRM_TOKEN
6927
6928 ,p_token2_value => SQLERRM);
6929 RETURN NULL;
6930
6931 END contract_cures_in_possession;
6932
6933 -----------------------------------------------------------------------
6934 -- Start of Comments
6935 -- Created By: Punitharaj Devaraju (pdevaraj)
6936 -- Function Name: contract_outstanding_amount
6937 -- Description: Get contract outstanding amount.
6938 -- Dependencies:
6939 -- Parameters: contract id, contract line id.
6940 -- Version: 1.0
6941 -- End of Commnets
6942 -----------------------------------------------------------------------
6943 FUNCTION contract_outstanding_amount
6944 (
6945 p_chr_id IN NUMBER,
6946 p_line_id IN NUMBER
6947 )
6948
6949 RETURN NUMBER IS
6950 -- Cursor for outstanding amount
6951 -- Bug 5897792
6952 /*CURSOR outstanding_amount_csr (p_chr_id IN NUMBER) IS
6953 SELECT NVL(SUM(amount_due_remaining), 0)
6954 FROM okl_bpd_leasing_payment_trx_v
6955 WHERE contract_id = p_chr_id;*/
6956
6957 CURSOR outstanding_amount_csr (p_chr_id IN NUMBER) IS
6958 SELECT NVL(SUM(amount_due_remaining), 0)
6959 FROM okl_bpd_ar_inv_lines_v
6960 WHERE contract_id = p_chr_id;
6961
6962
6963 l_outstanding_amount NUMBER := 0;
6964
6965 BEGIN
6966
6967 OPEN outstanding_amount_csr (p_chr_id);
6968 FETCH outstanding_amount_csr INTO l_outstanding_amount;
6969 CLOSE outstanding_amount_csr;
6970
6971 RETURN l_outstanding_amount;
6972
6973 EXCEPTION
6974 WHEN OTHERS THEN
6975 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
6976 ,p_msg_name => G_UNEXPECTED_ERROR
6977 ,p_token1 => G_SQLCODE_TOKEN
6978 ,p_token1_value => SQLCODE
6979 ,p_token2 => G_SQLERRM_TOKEN
6980 ,p_token2_value => SQLERRM);
6981 RETURN NULL;
6982
6983 END contract_outstanding_amount;
6984
6985 -----------------------------------------------------------------------
6986 -- Start of Comments
6987 -- Created By: Punitharaj Devaraju (pdevaraj)
6988 -- Function Name: contract_full_cure
6989 -- Description: Get full cure amount for a contract.
6990 -- Dependencies: OKL_SEEDED_FUNCTIONS_PVT.contract_rent_amount
6991 -- OKL_SEEDED_FUNCTIONS_PVT.contract_outstanding_amount
6992 -- OKL_SEEDED_FUNCTIONS_PVT.contract_cures_in_possession
6993 -- Parameters: contract id.
6994 -- Version: 1.0
6995 -- End of Commnets
6996 -----------------------------------------------------------------------
6997 FUNCTION contract_full_cure
6998 (
6999 p_chr_id IN NUMBER
7000 )
7001 RETURN NUMBER IS
7002 l_api_version NUMBER;
7003 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7004 l_msg_count NUMBER;
7005 l_msg_data VARCHAR2(2000);
7006 l_current_rent NUMBER;
7007 l_cures_in_possession NUMBER := 0;
7008 l_outstanding_amount NUMBER := 0;
7009 l_full_cure NUMBER := 0;
7010
7011 BEGIN
7012
7013 -- Get Current Rent
7014 l_current_rent := Okl_Seeded_Functions_Pvt.contract_rent_amount(p_chr_id, NULL);
7015
7016 -- Get Cures in Possession
7017 l_cures_in_possession := Okl_Seeded_Functions_Pvt.contract_cures_in_possession
7018 (p_chr_id);
7019
7020 l_outstanding_amount := Okl_Seeded_Functions_Pvt.contract_outstanding_amount
7021 ( p_chr_id
7022 ,NULL );
7023
7024 l_full_cure := l_outstanding_amount -
7025 l_current_rent -
7026 l_cures_in_possession;
7027
7028 RETURN l_full_cure;
7029
7030 EXCEPTION
7031 WHEN OTHERS THEN
7032 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7033 ,p_msg_name => G_UNEXPECTED_ERROR
7034 ,p_token1 => G_SQLCODE_TOKEN
7035 ,p_token1_value => SQLCODE
7036 ,p_token2 => G_SQLERRM_TOKEN
7037 ,p_token2_value => SQLERRM);
7038 RETURN NULL;
7039 END contract_full_cure;
7040
7041 -----------------------------------------------------------------------
7042 -- Start of Comments
7043 -- Created By: Punitharaj Devaraju (pdevaraj)
7044 -- Function Name: contract_interest_cure
7045 -- Description: Get interest cure amount for a contract.
7046 -- Dependencies: okl_contract_info.get_rule_value
7047 -- okl_contract_info_pvt.get_days_past_due
7048 -- Parameters: contract id.
7049 -- Version: 1.0
7050 -- End of Commnets
7051 -----------------------------------------------------------------------
7052 FUNCTION contract_interest_cure
7053 (
7054 p_chr_id IN NUMBER
7055 )
7056 RETURN NUMBER IS
7057 l_api_version NUMBER;
7058 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7059 l_msg_count NUMBER;
7060 l_msg_data VARCHAR2(2000);
7061 l_contract_rate NUMBER := 0.0;
7062 l_net_investment NUMBER := 0;
7063 l_interest_cure NUMBER := 0;
7064 l_current_date DATE := TRUNC(SYSDATE);
7065 l_days_past_due NUMBER := 0;
7066 l_last_due_date DATE;
7067 l_months_requiring_cure NUMBER := 0;
7068 l_value VARCHAR2(200);
7069 l_id1 VARCHAR2(40);
7070 l_id2 VARCHAR2(200);
7071
7072
7073 BEGIN
7074
7075 -- Get Net Investment
7076 l_net_investment := Okl_Seeded_Functions_Pvt.contract_net_investment
7077 (p_chr_id, NULL);
7078
7079 -- Get Contract rate from rule
7080 l_return_status := okl_contract_info.get_rule_value
7081 (
7082 p_contract_id => p_chr_id
7083 ,p_rule_group_code => 'COCURP'
7084 ,p_rule_code => 'COCURE'
7085 ,p_segment_number => 7
7086 ,x_id1 => l_id1
7087 ,x_id2 => l_id2
7088 ,x_value => l_value
7089 );
7090
7091 IF (l_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
7092 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
7093 ELSIF (l_return_status = okl_api.G_RET_STS_ERROR) THEN
7094 RAISE okl_api.G_EXCEPTION_ERROR;
7095 END IF;
7096
7097 l_contract_rate := ROUND(TO_NUMBER(l_value)/100, 3);
7098
7099 l_return_status := okl_contract_info.get_days_past_due
7100 ( p_chr_id
7101 ,l_days_past_due );
7102
7103 IF (l_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
7104 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
7105 ELSIF (l_return_status = okl_api.G_RET_STS_ERROR) THEN
7106 RAISE okl_api.G_EXCEPTION_ERROR;
7107 END IF;
7108
7109 -- Get the furthest due date from current date
7110 -- when customer stopped paying
7111 l_last_due_date := l_current_date - l_days_past_due;
7112 l_months_requiring_cure :=
7113 FLOOR(MONTHS_BETWEEN(l_current_date,l_last_due_date));
7114
7115 l_interest_cure := (( l_net_investment * l_contract_rate )/12) *
7116 l_months_requiring_cure;
7117
7118 RETURN l_interest_cure;
7119
7120 EXCEPTION
7121 WHEN OTHERS THEN
7122 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7123 ,p_msg_name => G_UNEXPECTED_ERROR
7124 ,p_token1 => G_SQLCODE_TOKEN
7125 ,p_token1_value => SQLCODE
7126 ,p_token2 => G_SQLERRM_TOKEN
7127 ,p_token2_value => SQLERRM);
7128 RETURN NULL;
7129
7130 END contract_interest_cure;
7131
7132 ---------------------------------------------------------------------------
7133 -- FUNCTION get_unrefunded_cures
7134 ---------------------------------------------------------------------------
7135 FUNCTION get_unrefunded_cures(
7136 p_contract_id IN NUMBER,
7137 x_unrefunded_cures OUT NOCOPY NUMBER)
7138 RETURN VARCHAR2
7139 IS
7140
7141 -- Get unrefunded cures for a contract
7142 /*CURSOR unrefunded_cures_csr(p_contract_id NUMBER) IS
7143 SELECT SUM(amount)
7144 FROM OKL_cure_payment_lines_v
7145 WHERE chr_id = p_contract_id
7146 AND status = 'CURES_IN_POSSESSION'; */
7147
7148 l_unrefunded_cures NUMBER := 0;
7149 l_api_version NUMBER;
7150 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7151 l_msg_count NUMBER;
7152 l_msg_data VARCHAR2(2000);
7153
7154 BEGIN
7155
7156 --OPEN unrefunded_cures_csr(p_contract_id);
7157 --FETCH unrefunded_cures_csr INTO l_unrefunded_cures;
7158 --CLOSE unrefunded_cures_csr;
7159
7160 x_unrefunded_cures := l_unrefunded_cures;
7161
7162 RETURN l_return_status;
7163 EXCEPTION
7164 WHEN OTHERS THEN
7165 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7166 ,p_msg_name => G_UNEXPECTED_ERROR
7167 ,p_token1 => G_SQLCODE_TOKEN
7168 ,p_token1_value => SQLCODE
7169 ,p_token2 => G_SQLERRM_TOKEN
7170 ,p_token2_value => SQLERRM);
7171 l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7172 RETURN(l_return_status);
7173
7174 END get_unrefunded_cures;
7175
7176 ---------------------------------------------------------------------------
7177 -- FUNCTION get_unrefunded_cures
7178 ---------------------------------------------------------------------------
7179 FUNCTION get_cured_status (p_contract_number IN NUMBER)
7180 RETURN VARCHAR2 IS
7181 CURSOR c_cured (p_chr_id NUMBER) IS
7182 SELECT 'Y'
7183 FROM OKL_CURE_PAYMENT_LINES
7184 WHERE EXISTS (SELECT 1
7185 FROM OKL_CURE_PAYMENT_LINES
7186 WHERE status = 'CURES_IN_POSSESSION'
7187 AND cured_flag = 'Y'
7188 AND chr_id = p_chr_id);
7189 ls_cured_flag VARCHAR2(1) := 'N';
7190 BEGIN
7191 OPEN c_cured(p_contract_number );
7192 FETCH c_cured INTO ls_cured_flag;
7193 IF(c_cured%NOTFOUND) THEN
7194 ls_cured_flag := 'N' ;
7195 CLOSE c_cured ;
7196 RETURN(ls_cured_flag);
7197 END IF ;
7198 CLOSE c_cured;
7199 RETURN(ls_cured_flag);
7200 END get_cured_status;
7201
7202 -----------------------------------------------------------------------
7203 -- Functions By pdevaraj -end
7204 -----------------------------------------------------------------------
7205
7206 ----------------------------------------------------------------------------------------------------
7207
7208 -- Start of Comments
7209 -- Created By: Santhosh Siruvole (ssiruvol)
7210 -- Function Name investor_account_amount
7211 -- Description: returns the investor account amount for the syndication.
7212 -- Dependencies:
7213 -- Parameters: contract id.
7214 -- Version: 1.0
7215 -- End of Commnets
7216
7217 ----------------------------------------------------------------------------------------------------
7218 FUNCTION investor_account_amount(
7219 p_chr_id IN NUMBER,
7220 p_line_id IN NUMBER) RETURN NUMBER IS
7221
7222 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_SUM_OF_RENTS';
7223 l_api_version CONSTANT NUMBER := 1;
7224 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7225 x_msg_count NUMBER;
7226 x_msg_data VARCHAR2(256);
7227
7228 l_inv_accnt_amnt NUMBER := 0;
7229 l_cap_amnt NUMBER := 0;
7230 l_pcnt_inv NUMBER := 0;
7231 l_stake_amnt NUMBER := 0;
7232
7233 CURSOR l_hdrrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
7234 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
7235 chrId NUMBER) IS
7236 SELECT crl.object1_id1,
7237 crl.RULE_INFORMATION1,
7238 crl.RULE_INFORMATION2,
7239 crl.RULE_INFORMATION3,
7240 crl.RULE_INFORMATION4,
7241 crl.RULE_INFORMATION5,
7242 crl.RULE_INFORMATION6,
7243 crl.RULE_INFORMATION10,
7244 crl.RULE_INFORMATION11
7245 FROM OKC_RULE_GROUPS_B crg,
7246 OKC_RULES_B crl
7247 WHERE crl.rgp_id = crg.id
7248 AND crg.RGD_CODE = rgcode
7249 AND crl.RULE_INFORMATION_CATEGORY = rlcat
7250 AND crg.dnz_chr_id = chrId;
7251
7252 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
7253
7254 BEGIN
7255
7256 IF ( p_chr_id IS NULL ) THEN
7257 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7258 END IF;
7259
7260 l_cap_amnt := contract_oec( p_chr_id, NULL)
7261 - contract_tradein( p_chr_id, NULL)
7262 - contract_capital_reduction( p_chr_id, NULL)
7263 + contract_fees_capitalized( p_chr_id, NULL);
7264
7265 OPEN l_hdrrl_csr( 'LASYND', 'LASYST',p_chr_id );
7266 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
7267 CLOSE l_hdrrl_csr;
7268
7269 l_stake_amnt := TO_NUMBER(NVL( l_hdrrl_rec.RULE_INFORMATION1, 0.0));
7270 l_pcnt_inv := TO_NUMBER(NVL( l_hdrrl_rec.RULE_INFORMATION2, 0.0)) / 100.00;
7271 l_inv_accnt_amnt := l_stake_amnt - l_cap_amnt * l_pcnt_inv;
7272
7273 RETURN l_inv_accnt_amnt;
7274
7275 EXCEPTION
7276 WHEN OTHERS THEN
7277 Okl_Api.SET_MESSAGE(
7278 p_app_name => G_APP_NAME,
7279 p_msg_name => G_UNEXPECTED_ERROR,
7280 p_token1 => G_SQLCODE_TOKEN,
7281 p_token1_value => SQLCODE,
7282 p_token2 => G_SQLERRM_TOKEN,
7283 p_token2_value => SQLERRM);
7284 RETURN NULL;
7285
7286 END investor_account_amount;
7287
7288
7289 ----------------------------------------------------------------------------------------------------
7290
7291 -- Start of Comments
7292 -- Created By: Santhosh Siruvole (ssiruvol)
7293 -- Function Name contract_capitalized_interest
7294 -- Description: returns the total capitalized interest for the contract.
7295 -- Dependencies:
7296 -- Parameters: contract id.
7297 -- Version: 1.0
7298 -- End of Commnets
7299
7300 ----------------------------------------------------------------------------------------------------
7301 FUNCTION contract_capitalized_interest(
7302 p_chr_id IN NUMBER,
7303 p_line_id IN NUMBER) RETURN NUMBER IS
7304
7305 l_api_name CONSTANT VARCHAR2(256) := 'RETURN_CONTRACT_CAPITALIZED_INTEREST';
7306 l_api_version CONSTANT NUMBER := 1;
7307 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7308 x_msg_count NUMBER;
7309 x_msg_data VARCHAR2(256);
7310
7311 l_capz_int NUMBER := 0.0;
7312
7313 CURSOR capz_csr( chrId NUMBER ) IS
7314 SELECT NVL( SUM(kle.capitalized_interest), 0.0)
7315 FROM OKC_LINE_STYLES_B LS,
7316 OKL_K_LINES_FULL_V KLE,
7317 okc_statuses_b sts
7318 WHERE LS.ID = KLE.LSE_ID
7319 AND LS.LTY_CODE ='FREE_FORM1'
7320 AND KLE.DNZ_CHR_ID = chrId
7321 -- start: cklee 05/18/2004 fixed for bug#3625609
7322 AND KLE.sts_code = sts.code
7323 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
7324 -- end: cklee 05/18/2004 fixed for bug#3625609
7325
7326 BEGIN
7327
7328 IF ( p_chr_id IS NULL ) THEN
7329 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7330 END IF;
7331
7332 OPEN capz_csr( p_chr_id );
7333 FETCH capz_csr INTO l_capz_int;
7334 CLOSE capz_csr;
7335
7336 RETURN l_capz_int;
7337
7338 EXCEPTION
7339
7340 WHEN OTHERS THEN
7341 Okl_Api.SET_MESSAGE(
7342 p_app_name => G_APP_NAME,
7343 p_msg_name => G_UNEXPECTED_ERROR,
7344 p_token1 => G_SQLCODE_TOKEN,
7345 p_token1_value => SQLCODE,
7346 p_token2 => G_SQLERRM_TOKEN,
7347 p_token2_value => SQLERRM);
7348 RETURN NULL;
7349
7350 END contract_capitalized_interest;
7351
7352 ----------------------------------------------------------------------------------------------------
7353
7354 -- Start of Comments
7355 -- Created By: Santhosh Siruvole (ssiruvol)
7356 -- Function Name line_capitalized_interest
7357 -- Description: returns the total capitalized interest for the contract.
7358 -- Dependencies:
7359 -- Parameters: contract id.
7360 -- Version: 1.0
7361 -- End of Commnets
7362
7363 ----------------------------------------------------------------------------------------------------
7364 FUNCTION line_capitalized_interest(
7365 p_chr_id IN NUMBER,
7366 p_line_id IN NUMBER) RETURN NUMBER IS
7367
7368 l_api_name CONSTANT VARCHAR2(256) := 'RETURN_CONTRACT_CAPITALIZED_INTEREST';
7369 l_api_version CONSTANT NUMBER := 1;
7370 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7371 x_msg_count NUMBER;
7372 x_msg_data VARCHAR2(256);
7373
7374 l_capz_int NUMBER := 0.0;
7375
7376 CURSOR capz_csr( chrId NUMBER, kleId NUMBER ) IS
7377 SELECT NVL( kle.capitalized_interest, 0.0)
7378 FROM OKC_LINE_STYLES_B LS,
7379 OKL_K_LINES_FULL_V KLE
7380 WHERE LS.ID = KLE.LSE_ID
7381 AND LS.LTY_CODE ='FREE_FORM1'
7382 AND KLE.DNZ_CHR_ID = chrId
7383 AND KLE.id = kleId;
7384
7385 BEGIN
7386
7387 IF (( p_chr_id IS NULL ) OR ( p_line_id IS NULL ) ) THEN
7388 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7389 END IF;
7390
7391 OPEN capz_csr( p_chr_id, p_line_id );
7392 FETCH capz_csr INTO l_capz_int;
7393 CLOSE capz_csr;
7394
7395 RETURN l_capz_int;
7396
7397 EXCEPTION
7398
7399 WHEN OTHERS THEN
7400 Okl_Api.SET_MESSAGE(
7401 p_app_name => G_APP_NAME,
7402 p_msg_name => G_UNEXPECTED_ERROR,
7403 p_token1 => G_SQLCODE_TOKEN,
7404 p_token1_value => SQLCODE,
7405 p_token2 => G_SQLERRM_TOKEN,
7406 p_token2_value => SQLERRM);
7407 RETURN NULL;
7408
7409 END line_capitalized_interest;
7410
7411 ---------------------------------------------
7412 -- Functions for Securitization
7413 -- mvasudev, 04/02/2003
7414 ---------------------------------------------
7415
7416 FUNCTION ASSET_UNDISBURSED_STREAMS(p_dnz_chr_id IN NUMBER -- Lease Contract ID
7417 ,p_kle_id IN NUMBER -- Lease Contract-Asset ID
7418 )
7419 RETURN NUMBER
7420 IS
7421 CURSOR l_okl_inv_payment_event_csr(p_khr_id IN NUMBER)
7422 IS
7423 SELECT rulb.rule_information2 payment_event
7424 FROM okc_rules_b rulb
7425 ,okc_rule_groups_b rgpb
7426 WHERE rgpb.dnz_chr_id = p_khr_id
7427 AND rgpb.chr_id = p_khr_id
7428 AND rgpb.rgd_code = 'LASEIR'
7429 AND rgpb.id = rulb.rgp_id
7430 AND rulb.rule_information_category = 'LASEIR';
7431
7432 CURSOR l_okl_unbilled_streams_csr(p_dnz_chr_id IN NUMBER
7433 ,p_kle_id IN NUMBER
7434 ,p_sty_id IN NUMBER)
7435 IS
7436 SELECT NVL(SUM(selb.amount),0) total_amount
7437 FROM okl_strm_elements selb
7438 ,okl_streams stmb
7439 ,okl_pool_contents pocb
7440 ,okl_strm_type_v styv --ankushar --Bug 6594724
7441 ,okc_k_headers_b chrb --ankushar --Bug 6594724
7442 WHERE stmb.khr_id = p_dnz_chr_id
7443 AND stmb.kle_id = p_kle_id
7444 AND stmb.sty_id = p_sty_id
7445 AND selb.stm_id = stmb.id
7446 AND stmb.active_yn = 'Y'
7447 AND stmb.say_code = 'CURR'
7448 AND selb.date_billed IS NULL
7449 AND pocb.kle_id = p_kle_id
7450 AND pocb.sty_id = p_sty_id
7451 -- mvasudev, 03/30/2004
7452 AND pocb.status_Code = 'ACTIVE'
7453 /*
7454 ankushar --Bug 6594724: Unable to terminate Investor Agreement with Residual Streams
7455 Start changes
7456 */
7457 AND stmb.sty_id = styv.id
7458 AND pocb.khr_id = chrb.id
7459 AND(selb.stream_element_date > SYSDATE
7460 OR
7461 (styv.stream_type_subclass = 'RESIDUAL'
7462 and chrb.STS_CODE IN ('TERMINATED','EXPIRED')
7463 )
7464 )
7465 /* ankushar Bug 6594724
7466 End Changes
7467 */
7468 -- end, mvasudev, 03/30/2004
7469 AND (selb.stream_element_date BETWEEN pocb.streams_from_date
7470 AND NVL(pocb.streams_to_date,G_FINAL_DATE)
7471 );
7472
7473 CURSOR l_okl_unreceived_streams_csr(p_dnz_chr_id IN NUMBER
7474 ,p_kle_id IN NUMBER
7475 ,p_sty_id IN NUMBER)
7476 IS
7477 SELECT NVL(SUM(amount_due_original - amount_due_remaining),0) total_amount
7478 FROM okl_bpd_leasing_payment_trx_v
7479 WHERE contract_id = p_dnz_chr_id
7480 AND contract_line_id = p_kle_id
7481 AND stream_type_id = p_sty_id
7482 AND amount_due_original <> amount_due_remaining;
7483
7484 CURSOR l_okl_unbilled_strms_pndg_csr(p_dnz_chr_id IN NUMBER
7485 ,p_kle_id IN NUMBER
7486 ,p_sty_id IN NUMBER)
7487 IS
7488 SELECT NVL(SUM(selb.amount),0) total_amount
7489 FROM okl_strm_elements selb
7490 ,okl_streams stmb
7491 ,okl_pool_contents pocb
7492 WHERE stmb.khr_id = p_dnz_chr_id
7493 AND stmb.kle_id = p_kle_id
7494 AND stmb.sty_id = p_sty_id
7495 AND selb.stm_id = stmb.id
7496 AND stmb.active_yn = 'Y'
7497 AND stmb.say_code = 'CURR'
7498 AND selb.date_billed IS NULL
7499 AND pocb.kle_id = p_kle_id
7500 AND pocb.sty_id = p_sty_id
7501 AND pocb.status_code = 'PENDING'
7502 AND selb.stream_element_date > SYSDATE
7503 AND (selb.stream_element_date BETWEEN pocb.streams_from_date
7504 AND NVL(pocb.streams_to_date,G_FINAL_DATE) );
7505
7506 l_total_amount NUMBER := 0;
7507 l_khr_id NUMBER;
7508 l_sty_id NUMBER;
7509 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
7510
7511 BEGIN
7512
7513 --Validate additional parameters availability
7514 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
7515 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
7516 LOOP
7517 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_khr_id' THEN
7518 l_khr_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
7519 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_sty_id' THEN
7520 l_sty_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
7521 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
7522 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
7523 END IF;
7524 END LOOP;
7525 ELSE
7526 Okl_Api.Set_Message(p_app_name => G_APP_NAME,
7527 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
7528 RAISE OKL_API.G_EXCEPTION_ERROR;
7529 END IF;
7530
7531 FOR l_okl_inv_payment_event_rec IN l_okl_inv_payment_event_csr(l_khr_id)
7532 LOOP
7533 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7534 FOR l_okl_unbilled_strms_pndg_rec IN l_okl_unbilled_strms_pndg_csr(p_dnz_chr_id,p_kle_id,l_sty_id)
7535 LOOP
7536 l_total_amount := l_total_amount + l_okl_unbilled_strms_pndg_rec.total_amount;
7537 END LOOP; -- unbilled streams for pending pool contents
7538 ELSE
7539 FOR l_okl_unbilled_streams_rec IN l_okl_unbilled_streams_csr(p_dnz_chr_id,p_kle_id,l_sty_id)
7540 LOOP
7541 l_total_amount := l_total_amount + l_okl_unbilled_streams_rec.total_amount;
7542 END LOOP; -- unbilled streams
7543 END IF;
7544
7545 IF l_okl_inv_payment_event_rec.payment_event = 'RECEIPT' THEN
7546 FOR l_okl_unreceived_streams_rec IN l_okl_unreceived_streams_csr(p_dnz_chr_id,p_kle_id,l_sty_id)
7547 LOOP
7548 l_total_amount := l_total_amount + l_okl_unreceived_streams_rec.total_amount;
7549 END LOOP; -- unreceived streams
7550 END IF;
7551
7552 END LOOP; -- payment basis
7553
7554 RETURN l_total_amount;
7555
7556 EXCEPTION
7557 WHEN OTHERS THEN
7558 IF l_okl_inv_payment_event_csr%ISOPEN THEN
7559 CLOSE l_okl_inv_payment_event_csr;
7560 END IF;
7561 IF l_okl_unbilled_streams_csr%ISOPEN THEN
7562 CLOSE l_okl_unbilled_streams_csr;
7563 END IF;
7564 IF l_okl_unreceived_streams_csr%ISOPEN THEN
7565 CLOSE l_okl_unreceived_streams_csr;
7566 END IF;
7567 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
7568 p_msg_name => G_UNEXPECTED_ERROR,
7569 p_token1 => G_SQLCODE_TOKEN,
7570 p_token1_value => SQLCODE,
7571 p_token2 => G_SQLERRM_TOKEN,
7572 p_token2_value => SQLERRM);
7573 RETURN NULL;
7574 END ASSET_UNDISBURSED_STREAMS;
7575
7576 -- mvasudev, 10/14/2003
7577 FUNCTION INVESTORS_PV_AMOUNT(p_chr_id IN NUMBER -- Investor Agreement ID
7578 ,p_line_id IN NUMBER)
7579 RETURN NUMBER
7580 IS
7581 -- mvasudev, 09/29/2004, Bug#3909240
7582 CURSOR l_okl_pv_amounts_csr(p_sty_purpose IN VARCHAR2)
7583 IS
7584 SELECT NVL(SUM(selb.amount),0) total_amount
7585 FROM okl_strm_elements selb
7586 ,okl_streams stmb
7587 ,okl_strm_type_v styv
7588 ,okl_pool_contents pocb
7589 WHERE stmb.source_id = p_chr_id
7590 AND styv.stream_type_purpose = p_sty_purpose
7591 AND stmb.sty_id = styv.id
7592 AND selb.stm_id = stmb.id
7593 AND stmb.active_yn = 'Y'
7594 AND stmb.say_code = 'CURR'
7595 AND pocb.status_code <> 'PENDING'
7596 AND pocb.khr_id = stmb.khr_id
7597 AND pocb.kle_id = stmb.kle_id;
7598
7599 CURSOR l_okl_pv_amounts_pending_csr(p_sty_purpose IN VARCHAR2)
7600 IS
7601 SELECT NVL(SUM(selb.amount),0) total_amount
7602 FROM okl_strm_elements selb
7603 ,okl_streams stmb
7604 ,okl_strm_type_v styv
7605 ,okl_pool_contents pocb
7606 WHERE stmb.source_id = p_chr_id
7607 AND styv.stream_type_purpose = p_sty_purpose
7608 AND stmb.sty_id = styv.id
7609 AND selb.stm_id = stmb.id
7610 AND stmb.active_yn = 'Y'
7611 AND stmb.say_code = 'CURR'
7612 AND pocb.status_code = 'PENDING'
7613 AND pocb.khr_id = stmb.khr_id
7614 AND pocb.kle_id = stmb.kle_id;
7615
7616 /* fmiao , 09/6/2005 , Bug#4561645
7617 cursor change for stream_type_subclass filtering
7618 */
7619 CURSOR l_okl_percent_stake_csr(p_sty_subclass IN VARCHAR2)
7620 IS
7621 SELECT DISTINCT kleb.percent_stake,clet.id
7622 FROM okl_k_lines kleb,
7623 okc_k_lines_b clet,
7624 okc_k_lines_b cles
7625 WHERE kleb.id = cles.id
7626 AND cles.cle_id = clet.id
7627 AND clet.dnz_chr_id = p_chr_id
7628 --AND kleb.sty_id = styb.id
7629 AND kleb.stream_type_subclass = p_sty_subclass;
7630
7631 l_total_amount NUMBER := 0;
7632 l_total_percent NUMBER := 0;
7633 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
7634
7635 BEGIN
7636
7637 l_total_percent := 0;
7638
7639 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
7640 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
7641 LOOP
7642 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
7643 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
7644 END IF;
7645 END LOOP;
7646 END IF;
7647
7648 /* fmiao , 09/6/2005 , Bug#4561645
7649 change the stream_type_purpose PV_RENT_SECURITIZED and PV_RV_SECURITIZED
7650 */
7651 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7652 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_RENT_SECURITIZED')
7653 LOOP
7654 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
7655 LOOP
7656 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7657 END LOOP;
7658 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7659 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
7660 END IF;
7661 END LOOP; -- PV_RENT_SECURITIZED
7662 ELSE
7663 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_RENT_SECURITIZED')
7664 LOOP
7665 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
7666 LOOP
7667 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7668 END LOOP;
7669 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7670 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
7671 END IF;
7672 END LOOP; -- PV_RENT_SECURITIZED
7673 END IF;
7674 l_total_percent := 0;
7675
7676 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7677 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_RV_SECURITIZED')
7678 LOOP
7679 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
7680 LOOP
7681 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7682 END LOOP;
7683 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7684 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
7685 END IF;
7686 END LOOP; -- PV_RV_SECURITIZED
7687 ELSE
7688 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_RV_SECURITIZED')
7689 LOOP
7690 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
7691 LOOP
7692 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7693 END LOOP;
7694 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7695 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
7696 END IF;
7697 END LOOP; -- PV_RV_SECURITIZED
7698 END IF;
7699 --Bug # 6740000 ssdeshpa Added for Addition of Loan Contract into the Pool
7700 --Calculate the PV Amount for Principal Sec of Loan Contracts
7701 l_total_percent := 0;
7702 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7703 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_PRINCIPAL_SECURITIZED')
7704 LOOP
7705 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
7706 LOOP
7707 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7708 END LOOP;
7709 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7710 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
7711 END IF;
7712 END LOOP; -- PV_PRINCIPAL_SECURITIZED
7713 ELSE
7714 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_PRINCIPAL_SECURITIZED')
7715 LOOP
7716 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
7717 LOOP
7718 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7719 END LOOP;
7720 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7721 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
7722 END IF;
7723 END LOOP; -- PV_PRINCIPAL_SECURITIZED
7724 END IF;
7725 --Calculate the PV Amount for Interest Sec of Loan Contracts
7726 l_total_percent := 0;
7727 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7728 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_INTEREST_SECURITIZED')
7729 LOOP
7730 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
7731 LOOP
7732 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7733 END LOOP;
7734 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7735 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
7736 END IF;
7737 END LOOP; -- PV_INTEREST_SECURITIZED
7738 ELSE
7739 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_INTEREST_SECURITIZED')
7740 LOOP
7741 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
7742 LOOP
7743 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7744 END LOOP;
7745 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7746 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
7747 END IF;
7748 END LOOP; -- PV_INTEREST_SECURITIZED
7749 END IF;
7750 --Calculate the PV Value for Unscheduled Principal Paydown(PPD) Payment
7751 l_total_percent := 0;
7752 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7753 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_UNSCHEDULED_PMT_SECURITIZED')
7754 LOOP
7755 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
7756 LOOP
7757 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7758 END LOOP;
7759 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7760 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
7761 END IF;
7762 END LOOP; -- PV_UNSCHEDULED_PMT_SECURITIZED
7763 ELSE
7764 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_UNSCHEDULED_PMT_SECURITIZED')
7765 LOOP
7766 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
7767 LOOP
7768 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
7769 END LOOP;
7770 IF (l_total_percent >0 AND l_total_percent <=100) THEN
7771 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
7772 END IF;
7773 END LOOP; -- PV_UNSCHEDULED_PMT_SECURITIZED
7774 END IF;
7775 --Bug # 6740000 ssdeshpa Added for Addition of Loan Contract into the Pool
7776
7777 RETURN l_total_amount;
7778
7779 EXCEPTION
7780 WHEN OTHERS THEN
7781 IF l_okl_pv_amounts_csr%ISOPEN THEN
7782 CLOSE l_okl_pv_amounts_csr;
7783 END IF;
7784 IF l_okl_pv_amounts_pending_csr%ISOPEN THEN
7785 CLOSE l_okl_pv_amounts_pending_csr;
7786 END IF;
7787 IF l_okl_percent_stake_csr%ISOPEN THEN
7788 CLOSE l_okl_percent_stake_csr;
7789 END IF;
7790
7791 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
7792 p_msg_name => G_UNEXPECTED_ERROR,
7793 p_token1 => G_SQLCODE_TOKEN,
7794 p_token1_value => SQLCODE,
7795 p_token2 => G_SQLERRM_TOKEN,
7796 p_token2_value => SQLERRM);
7797 RETURN NULL;
7798 END INVESTORS_PV_AMOUNT;
7799
7800
7801 ---------------------------------------------
7802 -- END,Functions for Securitization
7803 -- mvasudev, 04/02/2003
7804 ---------------------------------------------
7805
7806 -- 06/02/03 cklee start
7807 ----------------------------------------------------------------------------------
7808 -- Start of comments
7809 --
7810 -- Procedure Name : investor_rent_accural_amout
7811 -- Description : get total rent accural amount by associated agreement's pool contracts
7812 -- Business Rules :
7813 -- Parameters :
7814 -- Created By : chenkuang.lee
7815 -- last modified by: ssdeshpa
7816 -- Version : 2.0 modified to use Accrual Adjustment streams instead of Accrual streams
7817 -- : 3.0 modified for Addition of Loan Contract into the Pool
7818 -- End of comments
7819 ----------------------------------------------------------------------------------
7820 FUNCTION investor_rent_accural_amout(
7821 p_contract_id IN okc_k_headers_b.id%TYPE
7822 ,p_contract_line_id IN NUMBER
7823 ) RETURN NUMBER
7824 IS
7825
7826 l_rent_accrual NUMBER;
7827
7828 -- mvasudev, 09/29/2004, Bug#3909240
7829 CURSOR c_rent_accrual(p_contract_id okc_k_headers_b.id%TYPE) IS
7830 SELECT NVL(SUM(SELB.AMOUNT),0)
7831 FROM
7832 OKL_STREAMS STMB,
7833 OKL_STRM_ELEMENTS SELB,
7834 OKL_STRM_TYPE_V STYV
7835 WHERE STMB.ID = SELB.STM_ID
7836 AND STMB.STY_ID = STYV.ID
7837 AND STYV.STREAM_TYPE_PURPOSE IN ('INVESTOR_PRETAX_INCOME','INVESTOR_RENTAL_ACCRUAL','INVESTOR_INTEREST_INCOME')
7838 AND STMB.SAY_CODE = 'CURR'
7839 AND STMB.ACTIVE_YN = 'Y'
7840 AND EXISTS (SELECT 1
7841 FROM OKL_POOL_CONTENTS POC,
7842 OKL_POOLS POL,
7843 OKL_STRM_TYPE_V STYS
7844 WHERE POC.POL_ID = POL.ID
7845 AND POC.KHR_ID = STMB.KHR_ID
7846 AND POL.KHR_ID = P_CONTRACT_ID
7847 AND POC.STY_ID = STYS.ID
7848 AND STYS.STREAM_TYPE_SUBCLASS IN ('RENT','LOAN_PAYMENT') --Bug # 6740000 ssdeshpa--For Loan Contracts Addition into the Pool
7849 AND POC.status_code <> Okl_Pool_Pvt.G_POC_STS_PENDING --Added by VARANGAN -Pool Contents Impact(Bug#6658065)
7850 );
7851
7852 CURSOR c_rent_accrual_pending(p_contract_id okc_k_headers_b.id%TYPE) IS
7853 SELECT NVL(SUM(SELB.AMOUNT),0)
7854 FROM
7855 OKL_STREAMS STMB,
7856 OKL_STRM_ELEMENTS SELB,
7857 OKL_STRM_TYPE_V STYV
7858 WHERE STMB.ID = SELB.STM_ID
7859 AND STMB.STY_ID = STYV.ID
7860 AND STYV.STREAM_TYPE_PURPOSE IN ('INVESTOR_PRETAX_INCOME','INVESTOR_RENTAL_ACCRUAL','INVESTOR_INTEREST_INCOME')
7861 AND STMB.SAY_CODE = 'CURR'
7862 AND STMB.ACTIVE_YN = 'Y'
7863 AND EXISTS (SELECT 1 FROM OKL_POOL_CONTENTS POC,
7864 OKL_POOLS POL,
7865 OKL_STRM_TYPE_V STYS
7866 WHERE POC.POL_ID = POL.ID
7867 AND POC.KHR_ID = STMB.KHR_ID
7868 AND POL.KHR_ID = P_CONTRACT_ID
7869 AND POC.STY_ID = STYS.ID
7870 AND STYS.STREAM_TYPE_SUBCLASS IN ('RENT','LOAN_PAYMENT') --Bug # 6740000 ssdeshpa--For Loan Contracts Addition into the Pool
7871 AND POC.status_code = Okl_Pool_Pvt.G_POC_STS_PENDING);
7872
7873 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
7874
7875 BEGIN
7876 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
7877 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
7878 LOOP
7879 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
7880 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
7881 END IF;
7882 END LOOP;
7883 END IF;
7884
7885 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7886 OPEN c_rent_accrual_pending (p_contract_id);
7887 FETCH c_rent_accrual_pending INTO l_rent_accrual;
7888 CLOSE c_rent_accrual_pending;
7889 ELSE
7890 OPEN c_rent_accrual (p_contract_id);
7891 FETCH c_rent_accrual INTO l_rent_accrual;
7892 CLOSE c_rent_accrual;
7893 END IF;
7894
7895 RETURN l_rent_accrual;
7896
7897 EXCEPTION
7898 WHEN OTHERS THEN
7899 --Bug # 6740000 ssdeshpa added Start
7900 IF c_rent_accrual_pending%ISOPEN THEN
7901 CLOSE c_rent_accrual_pending;
7902 END IF;
7903 IF c_rent_accrual%ISOPEN THEN
7904 CLOSE c_rent_accrual;
7905 END IF;
7906 --Bug # 6740000 ssdeshpa added End
7907 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
7908 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
7909 p_msg_name => 'OKL_UNEXPECTED_ERROR',
7910 p_token1 => 'OKL_SQLCODE',
7911 p_token1_value => SQLCODE,
7912 p_token2 => 'OKL_SQLERRM',
7913 p_token2_value => SQLERRM);
7914 RETURN NULL;
7915
7916 END investor_rent_accural_amout;
7917
7918 ----------------------------------------------------------------------------------
7919 -- Start of comments
7920 --
7921 -- Procedure Name : investor_user_amount_stake
7922 -- Description : get total investor stake by associated agreement from user enter amount
7923 -- Business Rules :
7924 -- Parameters :
7925 -- Created By : chenkuang.lee
7926 -- Version : 1.0
7927 -- End of comments
7928 ----------------------------------------------------------------------------------
7929 FUNCTION investor_user_amount_stake(
7930 p_contract_id IN okc_k_headers_b.id%TYPE
7931 ,p_contract_line_id IN NUMBER
7932 ) RETURN NUMBER
7933 IS
7934 l_amount NUMBER;
7935
7936 CURSOR c_amt_stake(p_contract_id okc_k_headers_b.id%TYPE) IS
7937 SELECT
7938 NVL(SUM(NVL(KLEB.AMOUNT,0)),0)
7939 FROM
7940 OKL_K_LINES KLEB,
7941 OKC_K_LINES_B CLEB,
7942 OKC_LINE_STYLES_B LSEB
7943 WHERE
7944 CLEB.ID = KLEB.ID AND
7945 CLEB.LSE_ID = LSEB.ID AND
7946 LSEB.LTY_CODE = 'INVESTMENT' AND
7947 CLEB.DNZ_CHR_ID = p_contract_id;
7948 -- akjain 01-28-2004
7949 -- modified the cursor to simplify the query, removed join with OKX_PARTY
7950
7951 CURSOR c_add_amt_stake(p_contract_id okc_k_headers_b.id%TYPE) IS
7952 SELECT
7953 NVL(SUM(NVL(KLEB.AMOUNT_STAKE,0)),0)
7954 FROM
7955 OKL_K_LINES KLEB,
7956 OKC_K_LINES_B CLEB,
7957 OKC_LINE_STYLES_B LSEB
7958 WHERE
7959 CLEB.ID = KLEB.ID AND
7960 CLEB.LSE_ID = LSEB.ID AND
7961 LSEB.LTY_CODE = 'INVESTMENT' AND
7962 CLEB.DNZ_CHR_ID = p_contract_id;
7963
7964 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
7965
7966 BEGIN
7967
7968 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
7969 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
7970 LOOP
7971 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
7972 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
7973 END IF;
7974 END LOOP;
7975 END IF;
7976
7977 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
7978 OPEN c_add_amt_stake (p_contract_id);
7979 FETCH c_add_amt_stake INTO l_amount;
7980 CLOSE c_add_amt_stake;
7981 ELSE
7982 OPEN c_amt_stake (p_contract_id);
7983 FETCH c_amt_stake INTO l_amount;
7984 CLOSE c_amt_stake;
7985 END IF;
7986
7987 RETURN l_amount;
7988
7989 EXCEPTION
7990 WHEN OTHERS THEN
7991 --Bug # 6740000 ssdeshpa added Start
7992 IF c_add_amt_stake%ISOPEN THEN
7993 CLOSE c_add_amt_stake;
7994 END IF;
7995 --Bug # 6740000 ssdeshpa added End
7996 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
7997 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
7998 p_msg_name => 'OKL_UNEXPECTED_ERROR',
7999 p_token1 => 'OKL_SQLCODE',
8000 p_token1_value => SQLCODE,
8001 p_token2 => 'OKL_SQLERRM',
8002 p_token2_value => SQLERRM);
8003 RETURN NULL;
8004
8005 END investor_user_amount_stake;
8006
8007 ----------------------------------------------------------------------------------
8008 -- Start of comments
8009 --
8010 -- Procedure Name : investor_stream_amount
8011 -- Description : get total investor stream amount by associated agreement's pool contents
8012 -- Business Rules :
8013 -- Parameters : p_contract_id
8014 -- Created By : chenkuang.lee
8015 -- last modified by: ssdeshpa
8016 -- Version : 2.0
8017 -- comments : modified for the subclass changes 01-28-2004
8018 -- returns : Total securitized streams amount * revenue share percent
8019 -- Version : 3.0
8020 -- comments : Bug # 6740000 modified for the Addition of Loan Contracts into the Pool changes
8021 -- End of comments
8022 ----------------------------------------------------------------------------------
8023 FUNCTION investor_stream_amount(
8024 p_contract_id IN okc_k_headers_b.id%TYPE
8025 ,p_contract_line_id IN NUMBER
8026 ) RETURN NUMBER
8027 IS
8028
8029 x_value NUMBER;
8030 l_pol_id okl_pools.id%TYPE;
8031 l_percent_stake NUMBER;
8032 G_FINAL_DATE CONSTANT DATE := TO_DATE('1','j') + 5300000;
8033
8034
8035 CURSOR l_khr_csr(p_khr_id okc_k_headers_b.id%TYPE) IS
8036 SELECT polb.id
8037 FROM okl_pools polb
8038 WHERE polb.khr_id = p_khr_id;
8039
8040 -- get revenue share by subclass
8041 CURSOR l_okl_percent_stake_csr(p_sty_subclass IN VARCHAR2)
8042 IS
8043 SELECT DISTINCT kleb.percent_stake,clet.id
8044 FROM okl_k_lines kleb,
8045 okc_k_lines_b clet,
8046 okc_k_lines_b cles
8047 WHERE kleb.id = cles.id
8048 AND cles.cle_id = clet.id
8049 AND clet.dnz_chr_id = p_contract_id
8050 AND kleb.stream_type_subclass = p_sty_subclass;
8051
8052 -- get pool streams amount by subclass
8053 CURSOR l_streams_amount_csr (p_pol_id NUMBER, p_stm_sub_class VARCHAR2)
8054 IS
8055 SELECT
8056 NVL(SUM(NVL(selb.AMOUNT,0)),0) AMOUNT
8057 FROM
8058 okl_strm_type_v styv,
8059 okl_streams stmb,
8060 okl_strm_elements selb,
8061 okl_pool_contents pocb
8062 WHERE styv.stream_type_subclass = p_stm_sub_class
8063 AND styv.id = stmb.sty_id
8064 AND stmb.id = selb.stm_id
8065 AND pocb.pol_id = p_pol_id
8066 AND stmb.ID = pocb.STM_ID
8067 AND stmb.say_code = 'CURR'
8068 AND stmb.active_yn = 'Y'
8069 AND selb.STREAM_ELEMENT_DATE
8070 BETWEEN pocb.STREAMS_FROM_DATE AND NVL(pocb.STREAMS_TO_DATE, G_FINAL_DATE)
8071 AND pocb.status_code <> Okl_Pool_Pvt.G_POC_STS_PENDING ; --Added by VARANGAN -Pool Contents Impact(Bug#6658065)
8072
8073 -- get pool streams amount by subclass
8074 CURSOR l_streams_amount_pending_csr (p_pol_id NUMBER, p_stm_sub_class VARCHAR2)
8075 IS
8076 SELECT
8077 NVL(SUM(NVL(selb.AMOUNT,0)),0) AMOUNT
8078 FROM
8079 okl_strm_type_v styv,
8080 okl_streams stmb,
8081 okl_strm_elements selb,
8082 okl_pool_contents pocb
8083 WHERE styv.stream_type_subclass = p_stm_sub_class
8084 AND styv.id = stmb.sty_id
8085 AND stmb.id = selb.stm_id
8086 AND pocb.pol_id = p_pol_id
8087 AND stmb.ID = pocb.STM_ID
8088 AND stmb.say_code = 'CURR'
8089 AND stmb.active_yn = 'Y'
8090 AND selb.STREAM_ELEMENT_DATE
8091 BETWEEN pocb.STREAMS_FROM_DATE AND NVL(pocb.STREAMS_TO_DATE, G_FINAL_DATE)
8092 AND pocb.status_code = Okl_Pool_Pvt.G_POC_STS_PENDING ;
8093
8094 l_total_percent NUMBER := 0;
8095 l_total_sec_amount NUMBER := 0;
8096 l_per_subclass_amount NUMBER := 0;
8097 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
8098
8099 BEGIN
8100
8101 FOR l_khr_csr_rec IN l_khr_csr(p_contract_id)
8102 LOOP
8103 l_pol_id := l_khr_csr_rec.id;
8104 END LOOP;
8105
8106 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
8107 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
8108 LOOP
8109 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
8110 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8111 END IF;
8112 END LOOP;
8113 END IF;
8114
8115 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8116 FOR l_streams_amount_pending_rec IN l_streams_amount_pending_csr(l_pol_id, 'RENT')
8117 LOOP
8118 l_per_subclass_amount := l_streams_amount_pending_rec.amount;
8119 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
8120 LOOP
8121 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8122 END LOOP;
8123 END LOOP;
8124 ELSE
8125 FOR l_streams_amount_csr_rec IN l_streams_amount_csr(l_pol_id, 'RENT')
8126 LOOP
8127 l_per_subclass_amount := l_streams_amount_csr_rec.amount;
8128 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
8129 LOOP
8130 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8131 END LOOP;
8132 END LOOP;
8133 END IF;
8134 l_total_sec_amount := (l_total_percent/100) * l_per_subclass_amount;
8135 l_total_percent := 0;
8136 l_per_subclass_amount := 0;
8137
8138 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8139 FOR l_streams_amount_pending_rec IN l_streams_amount_pending_csr(l_pol_id, 'RESIDUAL')
8140 LOOP
8141 l_per_subclass_amount := l_streams_amount_pending_rec.amount;
8142 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
8143 LOOP
8144 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8145 END LOOP;
8146 END LOOP;
8147 ELSE
8148 FOR l_streams_amount_csr_rec IN l_streams_amount_csr(l_pol_id, 'RESIDUAL')
8149 LOOP
8150 l_per_subclass_amount := l_streams_amount_csr_rec.amount;
8151 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
8152 LOOP
8153 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8154 END LOOP;
8155 END LOOP;
8156 END IF;
8157 --Bug # 6740000 Changes for Adding the Loan Contracts Into Pool
8158 l_total_sec_amount := l_total_sec_amount + ((l_total_percent/100) * l_per_subclass_amount);
8159 l_total_percent := 0;
8160 l_per_subclass_amount := 0;
8161
8162 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8163 FOR l_streams_amount_pending_rec IN l_streams_amount_pending_csr(l_pol_id, 'LOAN_PAYMENT')
8164 LOOP
8165 l_per_subclass_amount := l_streams_amount_pending_rec.amount;
8166 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8167 LOOP
8168 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8169 END LOOP;
8170 END LOOP;
8171 ELSE
8172 FOR l_streams_amount_csr_rec IN l_streams_amount_csr(l_pol_id, 'LOAN_PAYMENT')
8173 LOOP
8174 l_per_subclass_amount := l_streams_amount_csr_rec.amount;
8175 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8176 LOOP
8177 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8178 END LOOP;
8179 END LOOP;
8180 END IF;
8181 l_total_sec_amount := l_total_sec_amount + ((l_total_percent/100) * l_per_subclass_amount);
8182 --Bug # 6740000 Changes for Adding the Loan Contracts Into Pool End
8183 x_value := l_total_sec_amount;
8184
8185 RETURN x_value;
8186
8187 EXCEPTION
8188 WHEN OTHERS THEN
8189 --Bug # 6740000 ssdeshpa added Start
8190 IF l_khr_csr%ISOPEN THEN
8191 CLOSE l_khr_csr;
8192 END IF;
8193 IF l_okl_percent_stake_csr%ISOPEN THEN
8194 CLOSE l_okl_percent_stake_csr;
8195 END IF;
8196 IF l_streams_amount_csr%ISOPEN THEN
8197 CLOSE l_streams_amount_csr;
8198 END IF;
8199 IF l_streams_amount_pending_csr%ISOPEN THEN
8200 CLOSE l_streams_amount_pending_csr;
8201 END IF;
8202 --Bug # 6740000 ssdeshpa added End
8203 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
8204 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8205 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8206 p_token1 => 'OKL_SQLCODE',
8207 p_token1_value => SQLCODE,
8208 p_token2 => 'OKL_SQLERRM',
8209 p_token2_value => SQLERRM);
8210 RETURN NULL;
8211
8212 END investor_stream_amount;
8213
8214
8215 ----------------------------------------------------------------------------------
8216 -- Start of comments
8217 --
8218 -- Procedure Name : fee_idc_amount
8219 -- Description : gets the sum of fee idc amount for a given contract
8220 -- Business Rules :
8221 -- Parameters :
8222 -- Created By : smereddy
8223 -- Version : 1.0
8224 -- End of comments
8225 ----------------------------------------------------------------------------------
8226 FUNCTION fee_idc_amount(
8227 p_dnz_chr_id IN NUMBER
8228 ,p_kle_id IN NUMBER
8229 ) RETURN NUMBER
8230 IS
8231
8232 l_sum_idc_amt NUMBER;
8233
8234 -- smereddy 06/17/03 calculates sum of fee idc
8235 CURSOR sum_idc_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
8236 SELECT
8237 NVL(SUM(NVL(KLEB.initial_direct_cost,0)),0)
8238 FROM
8239 OKL_K_LINES KLEB,
8240 OKC_K_LINES_B CLEB,
8241 OKC_LINE_STYLES_B LSEB
8242 WHERE
8243 KLEB.ID = CLEB.ID AND
8244 CLEB.LSE_ID = LSEB.ID AND
8245 LSEB.LTY_CODE = 'FEE' AND
8246 KLEB.FEE_TYPE IN ('EXPENSE','MISCELLANEOUS') AND
8247 CLEB.CHR_ID = l_dnz_chr_id AND
8248 CLEB.STS_CODE IN ('APPROVED', 'COMPLETE');
8249 -- added COMPLETE to resolve bug # 3152093
8250
8251 BEGIN
8252
8253 OPEN sum_idc_csr (p_dnz_chr_id);
8254 FETCH sum_idc_csr INTO l_sum_idc_amt;
8255 CLOSE sum_idc_csr;
8256
8257 RETURN l_sum_idc_amt;
8258
8259 EXCEPTION
8260 WHEN OTHERS THEN
8261 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
8262 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8263 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8264 p_token1 => 'OKL_SQLCODE',
8265 p_token1_value => SQLCODE,
8266 p_token2 => 'OKL_SQLERRM',
8267 p_token2_value => SQLERRM);
8268 RETURN NULL;
8269
8270 END fee_idc_amount;
8271
8272
8273 -- 09/05/03 jsanju start
8274 --for cure calculation
8275
8276 FUNCTION contract_delinquent_amt (
8277 p_contract_id IN okc_k_headers_b.id%TYPE
8278 ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
8279 ) RETURN NUMBER IS
8280
8281 -- ASHIM CHANGE - START
8282
8283 /*
8284 CURSOR c_amount_past_due(p_contract_id IN NUMBER,
8285 p_grace_days IN NUMBER) IS
8286 SELECT SUM(NVL(aps.amount_due_remaining, 0)) past_due_amount
8287 FROM okl_cnsld_ar_strms_b ocas
8288 ,ar_payment_schedules aps
8289 , okl_strm_type_v sm
8290 WHERE ocas.khr_id = p_contract_id
8291 AND ocas.receivables_invoice_id = aps.customer_trx_id
8292 AND aps.class ='INV'
8293 AND (aps.due_date + p_grace_days) < SYSDATE
8294 AND NVL(aps.amount_due_remaining, 0) > 0
8295 AND sm.id = ocas.STY_ID
8296 AND sm.name <> 'CURE';*/
8297
8298 CURSOR c_amount_past_due(p_contract_id IN NUMBER,
8299 p_grace_days IN NUMBER) IS
8300 SELECT SUM(NVL(aps.amount_due_remaining, 0)) past_due_amount
8301 FROM okl_bpd_tld_ar_lines_v ocas
8302 ,ar_payment_schedules aps
8303 , okl_strm_type_v sm
8304 WHERE ocas.khr_id = p_contract_id
8305 AND ocas.customer_trx_id = aps.customer_trx_id
8306 AND aps.class ='INV'
8307 AND (aps.due_date + p_grace_days) < SYSDATE
8308 AND NVL(aps.amount_due_remaining, 0) > 0
8309 AND sm.id = ocas.STY_ID
8310 AND sm.name <> 'CURE';
8311
8312 -- ASHIM CHANGE - END
8313
8314 l_contract_number okc_k_headers_b.contract_number%TYPE;
8315 l_rule_name VARCHAR2(200);
8316 l_rule_value VARCHAR2(2000);
8317 l_return_Status VARCHAR2(1):=FND_Api.G_RET_STS_SUCCESS;
8318 l_id1 VARCHAR2(40);
8319 l_id2 VARCHAR2(200);
8320 l_days_allowed NUMBER :=0;
8321 l_program_id okl_k_headers.khr_id%TYPE;
8322 l_delinquent_amount NUMBER :=0;
8323
8324
8325 BEGIN
8326 IF (G_DEBUG_ENABLED = 'Y') THEN
8327 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
8328 END IF;
8329
8330 SELECT khr_id INTO l_program_id
8331 FROM okl_k_headers
8332 WHERE id=p_contract_id;
8333
8334
8335 l_return_status := okl_contract_info.get_rule_value(
8336 p_contract_id => l_program_id
8337 ,p_rule_group_code => 'COCURP'
8338 ,p_rule_code => 'COCURE'
8339 ,p_segment_number => 3
8340 ,x_id1 => l_id1
8341 ,x_id2 => l_id2
8342 ,x_value => l_rule_value);
8343
8344 l_days_allowed :=NVL(l_rule_value,0);
8345
8346
8347
8348 -- Get Past Due Amount with maximium days allowed
8349 OPEN c_amount_past_due (p_contract_id,l_days_allowed);
8350 FETCH c_amount_past_due INTO l_delinquent_amount;
8351 CLOSE c_amount_past_due;
8352 RETURN l_delinquent_amount;
8353
8354 EXCEPTION
8355 WHEN OTHERS THEN
8356
8357 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
8358 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, ' in contract_delinquent_amt'||SQLERRM);
8359 END IF;
8360 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8361 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8362 p_token1 => 'OKL_SQLCODE',
8363 p_token1_value => SQLCODE,
8364 p_token2 => 'OKL_SQLERRM',
8365 p_token2_value => SQLERRM);
8366 RETURN l_delinquent_amount;
8367
8368 END contract_delinquent_amt;
8369
8370 FUNCTION cumulative_vendor_invoice_amt (
8371 p_contract_id IN okc_k_headers_b.id%TYPE
8372 ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
8373 ) RETURN NUMBER IS
8374
8375 CURSOR c_vendor_invoice_amt (p_contract_id IN NUMBER) IS
8376 SELECT NVL(SUM(negotiated_amount),0)
8377 FROM okl_cure_amounts
8378 WHERE chr_id =p_contract_id
8379 AND status ='CURESINPROGRESS';
8380
8381 l_vendor_invoice_amt NUMBER;
8382
8383 BEGIN
8384 OPEN c_vendor_invoice_amt(p_contract_id);
8385 FETCH c_vendor_invoice_amt INTO l_vendor_invoice_amt;
8386 CLOSE c_vendor_invoice_amt;
8387
8388 RETURN l_vendor_invoice_amt;
8389
8390 END cumulative_vendor_invoice_amt;
8391
8392
8393 FUNCTION contract_short_fund_amt (
8394 p_contract_id IN okc_k_headers_b.id%TYPE
8395 ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
8396 ) RETURN NUMBER IS
8397
8398 CURSOR c_get_short_fund_amt (p_contract_id IN NUMBER) IS
8399 SELECT NVL(SUM(short_fund_amount),0)
8400 FROM okl_cure_amounts
8401 WHERE chr_id =p_contract_id
8402 AND status ='CURESINPROGRESS';
8403
8404 l_short_fund_amt NUMBER;
8405
8406 BEGIN
8407 OPEN c_get_short_fund_amt(p_contract_id);
8408 FETCH c_get_short_fund_amt INTO l_short_fund_amt;
8409 CLOSE c_get_short_fund_amt;
8410
8411 RETURN l_short_fund_amt;
8412
8413 END contract_short_fund_amt;
8414
8415 -- 09/05/03 jsanju end
8416
8417 ------------------------------------------
8418 --Bug# 3143522 avsingh : 11.5.10 Subsidies
8419 ------------------------------------------
8420 --Bug# 3638568 : Modified function to conditionally include terminated lines if called from pricing
8421 --------------------------------------------------------------------------------
8422 --start of comments
8423 --Name : line_discount
8424 --Purpose : To calculate total discount on a financial asset line
8425 --Parameters : IN - p_chr_id contract header id
8426 -- - p_line id financial asset line id
8427 -- Return : Total line discount
8428 -- History : 16-SEP-2003 avsingh Creation
8429 --end of comments
8430 --------------------------------------------------------------------------------
8431 FUNCTION line_discount(
8432 p_chr_id IN NUMBER,
8433 p_line_id IN NUMBER) RETURN NUMBER IS
8434
8435 l_api_version NUMBER DEFAULT 1.0;
8436 l_return_status VARCHAR2(1) DEFAULT Okl_Api.G_RET_STS_SUCCESS;
8437 l_msg_count NUMBER;
8438 l_msg_data VARCHAR2(2000);
8439
8440 l_line_discount NUMBER;
8441 l_discount NUMBER;
8442 l_discount_incl_terminated BOOLEAN := FALSE;
8443
8444 --cursor to get line_sts
8445 CURSOR l_line_sts_csr (p_cle_id IN NUMBER) IS
8446 SELECT stsb.ste_code
8447 FROM okc_statuses_b stsb,
8448 okc_k_lines_b cleb
8449 WHERE stsb.code = cleb.sts_code
8450 AND cleb.id = p_cle_id;
8451
8452 l_line_sts_rec l_line_sts_csr%ROWTYPE;
8453
8454 --cursor to get financial asset lines on a contract (without terminated lines)
8455 CURSOR l_cleb_csr (p_chr_id IN NUMBER) IS
8456 SELECT cleb.id
8457 FROM okc_k_lines_b cleb,
8458 okc_statuses_b stsb,
8459 okc_line_styles_b lseb
8460 WHERE cleb.chr_id = p_chr_id
8461 AND cleb.lse_id = lseb.id
8462 AND lseb.lty_code = 'FREE_FORM1'
8463 AND cleb.sts_code = stsb.code
8464 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED');
8465
8466 --cursor to get financial asset lines on a contract (with terminated lines)
8467 CURSOR l_cleb_termn_csr (p_chr_id IN NUMBER) IS
8468 SELECT cleb.id
8469 FROM okc_k_lines_b cleb,
8470 okc_statuses_b stsb,
8471 okc_line_styles_b lseb
8472 WHERE cleb.chr_id = p_chr_id
8473 AND cleb.lse_id = lseb.id
8474 AND lseb.lty_code = 'FREE_FORM1'
8475 AND cleb.sts_code = stsb.code
8476 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED');
8477
8478 l_cle_id okc_k_lines_b.ID%TYPE;
8479
8480
8481 BEGIN
8482
8483 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
8484 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
8485 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
8486 -- l_discount_incl_terminated := TRUE;
8487 --END IF;
8488
8489 -- rmunjulu 4042892
8490 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
8491 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
8492 LOOP
8493 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
8494 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
8495 l_discount_incl_terminated := TRUE;
8496 END IF;
8497 END LOOP;
8498 END IF;
8499
8500 IF p_line_id IS NOT NULL THEN
8501 --Get the line status
8502 OPEN l_line_sts_csr(p_cle_id => p_line_id);
8503 FETCH l_line_sts_csr INTO l_line_sts_rec;
8504 CLOSE l_line_sts_csr;
8505
8506 IF l_line_sts_rec.ste_code IS NULL THEN
8507 l_line_discount := 0;
8508 ELSIF (l_line_sts_rec.ste_code IN ('HOLD','EXPIRED','CANCELLED'))
8509 OR (l_line_sts_rec.ste_code = 'TERMINATED' AND
8510 NOT (l_discount_incl_terminated)) THEN
8511 l_line_discount := 0;
8512 ELSIF (l_line_sts_rec.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED''CANCELLED'))
8513 OR (l_line_sts_rec.ste_code = 'TERMINATED' AND
8514 (l_discount_incl_terminated)) THEN
8515
8516 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
8517 (p_api_version => l_api_version,
8518 p_init_msg_list => Okl_Api.G_FALSE,
8519 x_msg_data => l_msg_data,
8520 x_msg_count => l_msg_count,
8521 x_return_status => l_return_status,
8522 p_asset_cle_id => p_line_id,
8523 p_accounting_method => 'NET',
8524 x_subsidy_amount => l_line_discount);
8525 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
8526 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8527 END IF;
8528 END IF;
8529
8530 ELSIF (p_line_id IS NULL) AND (p_chr_id IS NOT NULL) THEN
8531 l_line_discount := 0;
8532 IF (l_discount_incl_terminated) THEN
8533 OPEN l_cleb_termn_csr(p_chr_id => p_chr_id);
8534 LOOP
8535 FETCH l_cleb_termn_csr INTO l_cle_id;
8536 EXIT WHEN l_cleb_termn_csr%NOTFOUND;
8537 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
8538 (p_api_version => l_api_version,
8539 p_init_msg_list => Okl_Api.G_FALSE,
8540 x_msg_data => l_msg_data,
8541 x_msg_count => l_msg_count,
8542 x_return_status => l_return_status,
8543 p_asset_cle_id => l_cle_id,
8544 p_accounting_method => 'NET',
8545 x_subsidy_amount => l_discount);
8546 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
8547 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8548 END IF;
8549 l_line_discount := l_line_discount + l_discount;
8550 END LOOP;
8551 CLOSE l_cleb_termn_csr;
8552 ELSIF NOT (l_discount_incl_terminated) THEN
8553 OPEN l_cleb_csr(p_chr_id => p_chr_id);
8554 LOOP
8555 FETCH l_cleb_csr INTO l_cle_id;
8556 EXIT WHEN l_cleb_csr%NOTFOUND;
8557 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
8558 (p_api_version => l_api_version,
8559 p_init_msg_list => Okl_Api.G_FALSE,
8560 x_msg_data => l_msg_data,
8561 x_msg_count => l_msg_count,
8562 x_return_status => l_return_status,
8563 p_asset_cle_id => l_cle_id,
8564 p_accounting_method => 'NET',
8565 x_subsidy_amount => l_discount);
8566 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
8567 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8568 END IF;
8569 l_line_discount := l_line_discount + l_discount;
8570 END LOOP;
8571 CLOSE l_cleb_csr;
8572 END IF;
8573 ELSIF (p_line_id IS NULL) AND (p_chr_id IS NULL) THEN
8574 RAISE Okl_Api.G_EXCEPTION_ERROR;
8575 END IF;
8576 RETURN (l_line_discount);
8577
8578 EXCEPTION
8579 WHEN OTHERS THEN
8580 IF l_cleb_csr%ISOPEN THEN
8581 CLOSE l_cleb_csr;
8582 END IF;
8583 IF l_cleb_termn_csr%ISOPEN THEN
8584 CLOSE l_cleb_termn_csr;
8585 END IF;
8586 IF l_line_sts_csr%ISOPEN THEN
8587 CLOSE l_line_sts_csr;
8588 END IF;
8589 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
8590 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8591 p_token1 => 'OKL_SQLCODE',
8592 p_token1_value => SQLCODE,
8593 p_token2 => 'OKL_SQLERRM',
8594 p_token2_value => SQLERRM);
8595 RETURN NULL;
8596 END line_discount;
8597 --------------------------------------------------------------------------------
8598 --start of comments
8599 --Name : contract_discount
8600 --Purpose : To calculate total discount on a contract
8601 --Parameters : IN - p_chr_id contract header id
8602 -- - p_line id financial asset line id
8603 -- Return : Total contract discount
8604 -- History : 16-SEP-2003 avsingh Creation
8605 --end of comments
8606 --------------------------------------------------------------------------------
8607 FUNCTION contract_discount(
8608 p_chr_id IN NUMBER,
8609 p_line_id IN NUMBER) RETURN NUMBER IS
8610
8611 l_api_version NUMBER DEFAULT 1.0;
8612 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
8613 l_msg_count NUMBER;
8614 l_msg_data VARCHAR2(2000);
8615
8616 l_contract_discount NUMBER;
8617 BEGIN
8618 IF (p_line_id IS NOT NULL) OR (p_chr_id IS NOT NULL) THEN
8619 l_contract_discount := line_discount(p_chr_id,p_line_id);
8620 ELSIF (p_line_id IS NULL) AND (p_chr_id IS NULL) THEN
8621 RAISE OKL_API.G_EXCEPTION_ERROR;
8622 END IF;
8623 RETURN (l_contract_discount);
8624 EXCEPTION
8625 WHEN OTHERS THEN
8626 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8627 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8628 p_token1 => 'OKL_SQLCODE',
8629 p_token1_value => SQLCODE,
8630 p_token2 => 'OKL_SQLERRM',
8631 p_token2_value => SQLERRM);
8632 RETURN NULL;
8633 END contract_discount;
8634 ----------------------------------------------
8635 --End Bug# 3143522 avsingh : 11.5.10 Subsidies
8636 ----------------------------------------------
8637 -----------------------------------------------------------------------
8638 --Start Bug# 3036581 : avsingh new formula CONTRACT_AMORTIZED_EXPENSES
8639 -----------------------------------------------------------------------
8640 ----------------------------------------------------------------------------------------------------
8641
8642 -- Start of Comments
8643 -- Created By: avsingh
8644 -- Function Name contract_amortized_expenses
8645 -- Description: returns the sum of amount on stream type - Amortized Expense.
8646 -- Dependencies:
8647 -- Parameters: contract id.
8648 -- Version: 1.0
8649 -- End of Commnets
8650
8651 ----------------------------------------------------------------------------------------------------
8652 FUNCTION contract_amortized_expenses(
8653 p_chr_id IN NUMBER,
8654 p_line_id IN NUMBER) RETURN NUMBER IS
8655
8656 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_AMORTIZED_EXPENSES';
8657 l_api_version CONSTANT NUMBER := 1;
8658 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
8659 x_msg_count NUMBER;
8660 x_msg_data VARCHAR2(2000);
8661
8662 l_amortized_expenses NUMBER := 0;
8663
8664 ---------------------------------------------------
8665 --cursor to get sum of line level amortized expenses
8666 ---------------------------------------------------
8667 CURSOR l_line_amortexp_csr (chrId NUMBER ) IS
8668 SELECT NVL(SUM(sele.amount),0) amount
8669 FROM okl_strm_elements sele,
8670 okl_streams str,
8671 --okl_strm_type_tl sty,
8672 okl_strm_type_v sty,
8673 okl_K_lines_full_v kle,
8674 okc_statuses_b sts
8675 WHERE sele.stm_id = str.id
8676 AND str.sty_id = sty.id
8677 --AND UPPER(sty.name) = 'AMORTIZED EXPENSE'
8678 AND sty.stream_type_purpose = 'AMORTIZED_FEE_EXPENSE'
8679 --AND sty.LANGUAGE = 'US'
8680 AND str.say_code = 'CURR'
8681 AND str.active_yn = 'Y'
8682 AND NVL( str.purpose_code, 'XXXX' ) <> 'REPORT'
8683 AND str.khr_id = chrId
8684 AND NVL(str.kle_id,-9999) = kle.id
8685 AND kle.dnz_chr_id = chrId
8686 AND kle.sts_code = sts.code
8687 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
8688
8689 l_line_amortexp_rec l_line_amortexp_csr%ROWTYPE;
8690
8691 -----------------------------------------------------
8692 --Cursor to get sum of contract level amortized expenses
8693 -----------------------------------------------------
8694 CURSOR l_chr_amortexp_csr (chrId NUMBER) IS
8695 SELECT NVL(SUM(sele.amount),0) amount
8696 FROM okl_strm_elements sele,
8697 okl_streams str,
8698 --okl_strm_type_tl sty
8699 okl_strm_type_v sty
8700 WHERE sele.stm_id = str.id
8701 AND str.sty_id = sty.id
8702 --AND UPPER(sty.name) = 'AMORTIZED EXPENSE'
8703 AND sty.stream_type_purpose = 'AMORTIZED_FEE_EXPENSE'
8704 --AND sty.LANGUAGE = 'US'
8705 AND str.say_code = 'CURR'
8706 AND str.active_yn = 'Y'
8707 AND NVL( str.purpose_code, 'XXXX' ) <> 'REPORT'
8708 AND str.khr_id = chrId
8709 AND NVL(str.kle_id, -9999) = -9999;
8710
8711 l_chr_amortexp_rec l_chr_amortexp_csr%ROWTYPE;
8712
8713 BEGIN
8714
8715 IF ( NVL(p_chr_id,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM ) THEN
8716 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8717 END IF;
8718
8719 OPEN l_line_amortexp_csr( p_chr_id );
8720 FETCH l_line_amortexp_csr INTO l_line_amortexp_rec;
8721 CLOSE l_line_amortexp_csr;
8722
8723 OPEN l_chr_amortexp_csr( p_chr_id );
8724 FETCH l_chr_amortexp_csr INTO l_chr_amortexp_rec;
8725 CLOSE l_chr_amortexp_csr;
8726
8727 l_amortized_expenses := l_line_amortexp_rec.amount + l_chr_amortexp_rec.amount;
8728
8729 RETURN l_amortized_expenses;
8730
8731
8732 EXCEPTION
8733 WHEN OTHERS THEN
8734 Okl_Api.SET_MESSAGE(
8735 p_app_name => G_APP_NAME,
8736 p_msg_name => G_UNEXPECTED_ERROR,
8737 p_token1 => G_SQLCODE_TOKEN,
8738 p_token1_value => SQLCODE,
8739 p_token2 => G_SQLERRM_TOKEN,
8740 p_token2_value => SQLERRM);
8741 RETURN NULL;
8742
8743 END contract_amortized_expenses;
8744 -------------------------------------------------
8745 --End Bug# 3036581 avsingh : 11.5.10
8746 -------------------------------------------------
8747
8748 -------------------------------------------------
8749 --Bug# 3143522 mdokal : 11.5.10 AM Securitization
8750 -------------------------------------------------
8751
8752 ------------------------------------------------------------------------------
8753 -- Start of Comments
8754 -- Created By: Manjit Dokal - 18-JUL-2003
8755 -- Function Name: investor_rent_factor
8756 -- Description: Calculate Investor Rent Factor
8757 -- Dependencies: OKL building blocks AMTX and AMUV,
8758 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
8759 -- OUT: amount
8760 -- History rmunjulu EDAT Changed to get unbilled streams after
8761 -- quote eff date and ALL undisbursed amount
8762 -- : PAGARG Bug# 4012614 User Defined Streams impact
8763 -- : 06-Dec-2004 PAGARG Bug# 3948473
8764 -- : obtain investor agreement id from additional parameters and
8765 -- : and use it to get stream id for INVESTOR_RENT_DISB_BASIS
8766 -- : 07-Jan-2004 PAGARG Bug# 3948473. Removed the billable_yn
8767 -- : accrual_yn joins from undisbursed investor rent streams cursor
8768 -- : gboomina bug 4775555 Modified to get FUTURE BILLS (billed and not billed from term date onwards)
8769 -- and FUTURE DISBURSEMENTS (disbursed and not disbursed from term date onwards)
8770
8771 -- Version: 1.0
8772 -- End of Commnets
8773 ------------------------------------------------------------------------------
8774
8775 FUNCTION investor_rent_factor (
8776 p_contract_id IN NUMBER,
8777 p_contract_line_id IN NUMBER)
8778 RETURN NUMBER IS
8779
8780 --Bug# 4012614 PAGARG modified the cursor for User Defined Streams Impact
8781 -- Get Unbilled Streams
8782 -- rmunjulu EDAT unbilled after quote eff from date
8783 CURSOR l_unbill_stream_csr (
8784 cp_contract_id NUMBER,
8785 cp_contract_line_id NUMBER,
8786 cp_date DATE,
8787 cp_sty_id NUMBER) IS
8788 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
8789 FROM okl_streams stm,
8790 okl_strm_type_b sty,
8791 okl_strm_elements ste
8792 ,okl_pool_contents pocb
8793 WHERE stm.khr_id = cp_contract_id
8794 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
8795 AND stm.active_yn = 'Y'
8796 AND stm.say_code = 'CURR'
8797 AND ste.stm_id = stm.id
8798 AND NVL (ste.amount, 0) <> 0
8799 AND sty.id = stm.sty_id
8800 AND sty.id = cp_sty_id
8801 AND sty.billable_yn = 'Y'
8802 AND ste.stream_element_date > cp_date -- rmunjulu EDAT
8803 AND pocb.status_Code <> 'PENDING'
8804 AND pocb.khr_id = stm.khr_id
8805 AND pocb.kle_id = stm.kle_id
8806 AND pocb.sty_id = stm.sty_id;
8807
8808 --Bug# 4012614 PAGARG modified the cursor for User Defined Streams Impact
8809 -- Get Undisbursed Investor Rent Streams
8810 CURSOR l_undisb_rent_stream_csr (
8811 cp_contract_id NUMBER,
8812 cp_contract_line_id NUMBER,
8813 cp_sty_id NUMBER,
8814 cp_date DATE) IS --gboomina bug 4775555
8815 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
8816 FROM okl_streams stm,
8817 okl_strm_type_b sty,
8818 okl_strm_elements ste
8819 ,okl_pool_contents pocb
8820 WHERE stm.khr_id = cp_contract_id
8821 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
8822 AND stm.active_yn = 'Y'
8823 AND stm.say_code= 'CURR'
8824 AND ste.stm_id = stm.id
8825 AND NVL (ste.amount, 0) <> 0
8826 AND sty.id = stm.sty_id
8827 AND sty.id = cp_sty_id
8828 AND ste.stream_element_date > cp_date -- gboomina bug 4775555 -- check for disbs after termination
8829 AND pocb.status_Code <> 'PENDING'
8830 AND pocb.khr_id = stm.khr_id
8831 AND pocb.kle_id = stm.kle_id
8832 AND pocb.sty_id = stm.sty_id;
8833
8834 CURSOR l_unbill_stream_pending_csr (
8835 cp_contract_id NUMBER,
8836 cp_contract_line_id NUMBER,
8837 cp_date DATE,
8838 cp_sty_id NUMBER) IS
8839 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
8840 FROM okl_streams stm,
8841 okl_strm_type_b sty,
8842 okl_strm_elements ste
8843 ,okl_pool_contents pocb
8844 WHERE stm.khr_id = cp_contract_id
8845 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
8846 AND stm.active_yn = 'Y'
8847 AND stm.say_code = 'CURR'
8848 AND ste.stm_id = stm.id
8849 AND NVL (ste.amount, 0) <> 0
8850 AND sty.id = stm.sty_id
8851 AND sty.id = cp_sty_id
8852 AND sty.billable_yn = 'Y'
8853 AND ste.stream_element_date > cp_date
8854 AND pocb.status_Code = 'PENDING'
8855 AND pocb.khr_id = stm.khr_id
8856 AND pocb.kle_id = stm.kle_id
8857 AND pocb.sty_id = stm.sty_id;
8858
8859 -- Get Undisbursed Investor Rent Streams
8860 CURSOR l_undisb_rent_strm_pndg_csr (
8861 cp_contract_id NUMBER,
8862 cp_contract_line_id NUMBER,
8863 cp_sty_id NUMBER,
8864 cp_date DATE) IS
8865 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
8866 FROM okl_streams stm,
8867 okl_strm_type_b sty,
8868 okl_strm_elements ste
8869 ,okl_pool_contents pocb
8870 WHERE stm.khr_id = cp_contract_id
8871 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
8872 AND stm.active_yn = 'Y'
8873 AND stm.say_code = 'CURR'
8874 AND ste.stm_id = stm.id
8875 AND NVL (ste.amount, 0) <> 0
8876 AND sty.id = stm.sty_id
8877 AND sty.id = cp_sty_id
8878 AND ste.stream_element_date > cp_date
8879 AND pocb.status_Code = 'PENDING'
8880 AND pocb.khr_id = stm.khr_id
8881 AND pocb.kle_id = stm.kle_id
8882 AND pocb.sty_id = stm.sty_id;
8883
8884
8885 l_unbill_rent_amount NUMBER := 0;
8886 l_undisb_rent_amount NUMBER := 0;
8887 l_result_amount NUMBER := 0;
8888 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
8889
8890 -- rmunjulu EDAT
8891 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
8892 SELECT trunc(qte.date_effective_from) date_effective_from
8893 FROM okl_trx_quotes_b qte
8894 WHERE qte.id = p_quote_id;
8895
8896 -- rmunjulu EDAT
8897 l_quote_id NUMBER;
8898 l_quote_date DATE;
8899 l_sysdate DATE;
8900 l_sty_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
8901 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
8902 --06-Dec-2004 PAGARG Bug# 3948473 variable to store investor agreement id
8903 l_inv_agr_id NUMBER;
8904 BEGIN
8905 -- ****************
8906 -- Calculate result
8907 -- ****************
8908 -- rmunjulu EDAT
8909 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
8910 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
8911 LOOP
8912 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
8913 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
8914 --06-Dec-2004 PAGARG Bug# 3948473 obtain investor agreement id
8915 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'inv_agr_id' THEN
8916 l_inv_agr_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
8917 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
8918 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8919 END IF;
8920 END LOOP;
8921 END IF;
8922
8923 -- rmunjulu EDAT
8924 select sysdate into l_sysdate from dual;
8925
8926 -- rmunjulu EDAT
8927 IF l_quote_id IS NOT NULL
8928 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
8929
8930 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
8931 l_quote_date := get_quote_date_rec.date_effective_from;
8932 END LOOP;
8933 END IF;
8934
8935 -- rmunjulu EDAT
8936 IF l_quote_date IS NULL
8937 OR l_quote_date = OKL_API.G_MISS_DATE THEN
8938 l_quote_date := l_sysdate;
8939 END IF;
8940
8941 --PAGARG 19-Nov-2004 Bug# 4012614
8942 --UDS impact. Obtain stream type id and pass it to cursor
8943 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
8944 'RENT',
8945 l_return_status,
8946 l_sty_id);
8947
8948 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
8949 THEN
8950 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8951 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
8952 THEN
8953 RAISE OKL_API.G_EXCEPTION_ERROR;
8954 END IF;
8955
8956 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8957 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
8958 FETCH l_unbill_stream_pending_csr INTO l_unbill_rent_amount;
8959 CLOSE l_unbill_stream_pending_csr;
8960 ELSE
8961 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
8962 FETCH l_unbill_stream_csr INTO l_unbill_rent_amount;
8963 CLOSE l_unbill_stream_csr;
8964 END IF;
8965
8966 --06-Dec-2004 PAGARG Bug# 3948473 Pass investor agreement id to obtain stream id
8967 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
8968 'INVESTOR_RENT_DISB_BASIS',
8969 l_return_status,
8970 l_sty_id);
8971
8972 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
8973 THEN
8974 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8975 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
8976 THEN
8977 RAISE OKL_API.G_EXCEPTION_ERROR;
8978 END IF;
8979
8980 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8981 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
8982 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_rent_amount;
8983 CLOSE l_undisb_rent_strm_pndg_csr;
8984 ELSE
8985 OPEN l_undisb_rent_stream_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date); -- gboomina bug 4775555 pass term date
8986 FETCH l_undisb_rent_stream_csr INTO l_undisb_rent_amount;
8987 CLOSE l_undisb_rent_stream_csr;
8988 END IF;
8989
8990 -- this condition is included to prevent 'ORA-01476: divisor is equal to zero' error
8991 -- need to seed a new message
8992 IF l_unbill_rent_amount = 0 THEN
8993 l_result_amount := 0;
8994 ELSE
8995 l_result_amount := l_undisb_rent_amount/l_unbill_rent_amount;
8996 END IF;
8997
8998 RETURN l_result_amount;
8999
9000 EXCEPTION
9001
9002 WHEN OTHERS THEN
9003
9004 -- Close open cursors
9005 IF l_unbill_stream_csr%ISOPEN THEN
9006 CLOSE l_unbill_stream_csr;
9007 END IF;
9008 IF l_undisb_rent_stream_csr%ISOPEN THEN
9009 CLOSE l_undisb_rent_stream_csr;
9010 END IF;
9011 IF l_unbill_stream_pending_csr%ISOPEN THEN
9012 CLOSE l_unbill_stream_pending_csr;
9013 END IF;
9014 IF l_undisb_rent_strm_pndg_csr%ISOPEN THEN
9015 CLOSE l_undisb_rent_strm_pndg_csr;
9016 END IF;
9017 -- store SQL error message on message stack for caller
9018 OKL_API.SET_MESSAGE (
9019 p_app_name => OKL_API.G_APP_NAME,
9020 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
9021 p_token1 => 'SQLCODE',
9022 p_token1_value => SQLCODE,
9023 p_token2 => 'SQLERRM',
9024 p_token2_value => SQLERRM);
9025
9026 RETURN NULL;
9027
9028 END investor_rent_factor;
9029
9030
9031 ------------------------------------------------------------------------------
9032 -- Start of Comments
9033 -- Created By: Manjit Dokal - 18-JUL-2003
9034 -- Function Name: investor_rv_factor
9035 -- Description: Calculate Investor Residual Value Factor
9036 -- Dependencies: OKL building blocks AMTX and AMUV,
9037 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
9038 -- OUT: amount
9039 -- History rmunjulu EDAT Changed to get all residual streams amount
9040 -- : PAGARG 19-Nov-2004 Bug# 4012614
9041 -- : Fetching the l_unbill_stream_csr value into correct variable
9042 -- : UDS impact and modified to use correct stream type purpose
9043 -- Version: 1.0
9044 -- End of Commnets
9045 ------------------------------------------------------------------------------
9046
9047 FUNCTION investor_rv_factor (
9048 p_contract_id IN NUMBER,
9049 p_contract_line_id IN NUMBER)
9050 RETURN NUMBER IS
9051
9052 --Bug# 4012614 PAGARG modified the cursor for User Defined Streams Impact
9053 -- Get Residual Streams
9054 -- Get Residual Streams
9055 CURSOR l_unbill_stream_csr (
9056 cp_contract_id NUMBER,
9057 cp_contract_line_id NUMBER,
9058 cp_sty_id NUMBER) IS
9059 SELECT NVL(SUM (NVL (ste.amount, 0)), 0) amount_due
9060 FROM okl_streams stm,
9061 okl_strm_type_b sty,
9062 okl_strm_elements ste,
9063 okl_pool_contents pocb
9064 WHERE stm.khr_id = cp_contract_id
9065 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9066 AND stm.active_yn = 'Y'
9067 AND stm.say_code = 'CURR'
9068 AND ste.stm_id = stm.id
9069 AND ste.date_billed IS NULL
9070 AND NVL (ste.amount, 0) <> 0
9071 AND sty.id = stm.sty_id
9072 AND sty.id = cp_sty_id
9073 AND sty.billable_yn = 'N'
9074 AND pocb.status_Code <> 'PENDING'
9075 AND pocb.khr_id = stm.khr_id
9076 AND pocb.kle_id = stm.kle_id
9077 AND pocb.sty_id = stm.sty_id;
9078
9079 -- Get Residual Streams
9080 CURSOR l_unbill_stream_pending_csr (
9081 cp_contract_id NUMBER,
9082 cp_contract_line_id NUMBER,
9083 cp_sty_id NUMBER) IS
9084 SELECT NVL(SUM (NVL (ste.amount, 0)), 0) amount_due
9085 FROM okl_streams stm,
9086 okl_strm_type_b sty,
9087 okl_strm_elements ste,
9088 okl_pool_contents pocb
9089 WHERE stm.khr_id = cp_contract_id
9090 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9091 AND stm.active_yn = 'Y'
9092 AND stm.say_code = 'CURR'
9093 AND ste.stm_id = stm.id
9094 AND ste.date_billed IS NULL
9095 AND NVL (ste.amount, 0) <> 0
9096 AND sty.id = stm.sty_id
9097 AND sty.id = cp_sty_id
9098 AND sty.billable_yn = 'N'
9099 AND pocb.status_Code = 'PENDING'
9100 AND pocb.khr_id = stm.khr_id
9101 AND pocb.kle_id = stm.kle_id
9102 AND pocb.sty_id = stm.sty_id;
9103
9104 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
9105 l_residual_amount NUMBER := 0;
9106 l_result_amount NUMBER := 0;
9107 l_sty_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
9108 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
9109
9110 BEGIN
9111 -- ****************
9112 -- Calculate result
9113 -- ****************
9114 --PAGARG 19-Nov-2004 Bug# 4012614
9115 --UDS impact. Obtain stream type id and pass it to cursor
9116 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
9117 'RESIDUAL_VALUE',
9118 l_return_status,
9119 l_sty_id);
9120
9121 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9122 THEN
9123 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9124 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9125 THEN
9126 RAISE OKL_API.G_EXCEPTION_ERROR;
9127 END IF;
9128
9129 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
9130 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
9131 LOOP
9132 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
9133 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
9134 END IF;
9135 END LOOP;
9136 END IF;
9137
9138 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9139 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id, l_sty_id);
9140 FETCH l_unbill_stream_pending_csr INTO l_residual_amount;
9141 CLOSE l_unbill_stream_pending_csr;
9142 ELSE
9143 --PAGARG 19-Nov-2004 Bug# 4012614
9144 --Fetch cursor value into correct variable l_residual_amount
9145 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id, l_sty_id);
9146 FETCH l_unbill_stream_csr INTO l_residual_amount;
9147 CLOSE l_unbill_stream_csr;
9148 END IF;
9149
9150 -- this condition is included to prevent 'ORA-01476: divisor is equal to zero' error
9151 -- need to seed a new message
9152 IF l_residual_amount = 0 THEN
9153 l_result_amount := 0;
9154 ELSE
9155 l_result_amount := l_residual_amount/l_residual_amount;
9156 END IF;
9157
9158 RETURN l_result_amount;
9159
9160 EXCEPTION
9161
9162 WHEN OTHERS THEN
9163
9164 -- Close open cursors
9165
9166 IF l_unbill_stream_csr%ISOPEN THEN
9167 CLOSE l_unbill_stream_csr;
9168 END IF;
9169 IF l_unbill_stream_pending_csr%ISOPEN THEN
9170 CLOSE l_unbill_stream_pending_csr;
9171 END IF;
9172
9173 -- store SQL error message on message stack for caller
9174
9175 OKL_API.SET_MESSAGE (
9176 p_app_name => OKL_API.G_APP_NAME,
9177 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
9178 p_token1 => 'SQLCODE',
9179 p_token1_value => SQLCODE,
9180 p_token2 => 'SQLERRM',
9181 p_token2_value => SQLERRM);
9182
9183 RETURN NULL;
9184
9185 END investor_rv_factor;
9186
9187
9188 ------------------------------------------------------------------------------
9189 -- Start of Comments
9190 -- Created By: Sushil Deshpande
9191 -- Function Name: investor_loan_factor
9192 -- Description: Calculate Investor Loan Factor
9193 -- Dependencies: OKL building blocks AMTX and AMUV,
9194 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
9195 -- OUT: amount
9196 -- History
9197 -- Version: 1.0
9198 -- End of Commnets
9199 ------------------------------------------------------------------------------
9200
9201 FUNCTION investor_loan_factor (
9202 p_contract_id IN NUMBER,
9203 p_contract_line_id IN NUMBER)
9204 RETURN NUMBER IS
9205
9206 CURSOR l_unbill_stream_csr (cp_contract_id NUMBER,
9207 cp_contract_line_id NUMBER,
9208 cp_date DATE,
9209 cp_sty_id NUMBER) IS
9210 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
9211 FROM okl_streams stm,
9212 okl_strm_type_b sty,
9213 okl_strm_elements ste
9214 ,okl_pool_contents pocb
9215 WHERE stm.khr_id = cp_contract_id
9216 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9217 AND stm.active_yn = 'Y'
9218 AND stm.say_code = 'CURR'
9219 AND ste.stm_id = stm.id
9220 AND NVL (ste.amount, 0) <> 0
9221 AND sty.id = stm.sty_id
9222 AND sty.id = cp_sty_id
9223 AND sty.billable_yn = 'Y'
9224 AND ste.stream_element_date > cp_date -- rmunjulu EDAT
9225 AND pocb.status_Code <> 'PENDING'
9226 AND pocb.khr_id = stm.khr_id
9227 AND pocb.kle_id = stm.kle_id
9228 AND pocb.sty_id = stm.sty_id;
9229
9230 -- Get Undisbursed Investor Rent Streams
9231 CURSOR l_undisb_rent_stream_csr (cp_contract_id NUMBER,
9232 cp_contract_line_id NUMBER,
9233 cp_sty_id NUMBER,
9234 cp_date DATE) IS --gboomina bug 4775555
9235 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
9236 FROM okl_streams stm,
9237 okl_strm_type_b sty,
9238 okl_strm_elements ste
9239 ,okl_pool_contents pocb
9240 WHERE stm.khr_id = cp_contract_id
9241 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9242 AND stm.active_yn = 'Y'
9243 AND stm.say_code= 'CURR'
9244 AND ste.stm_id = stm.id
9245 AND NVL (ste.amount, 0) <> 0
9246 AND sty.id = stm.sty_id
9247 AND sty.id = cp_sty_id
9248 AND ste.stream_element_date > cp_date -- gboomina bug 4775555 -- check for disbs after termination
9249 AND pocb.status_Code <> 'PENDING'
9250 AND pocb.khr_id = stm.khr_id
9251 AND pocb.kle_id = stm.kle_id
9252 AND pocb.sty_id = stm.sty_id;
9253
9254 CURSOR l_unbill_stream_pending_csr (cp_contract_id NUMBER,
9255 cp_contract_line_id NUMBER,
9256 cp_date DATE,
9257 cp_sty_id NUMBER) IS
9258 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
9259 FROM okl_streams stm,
9260 okl_strm_type_b sty,
9261 okl_strm_elements ste,
9262 okl_pool_contents pocb
9263 WHERE stm.khr_id = cp_contract_id
9264 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9265 AND stm.active_yn = 'Y'
9266 AND stm.say_code = 'CURR'
9267 AND ste.stm_id = stm.id
9268 AND NVL (ste.amount, 0) <> 0
9269 AND sty.id = stm.sty_id
9270 AND sty.id = cp_sty_id
9271 AND sty.billable_yn = 'Y'
9272 AND ste.stream_element_date > cp_date
9273 AND pocb.status_Code = 'PENDING'
9274 AND pocb.khr_id = stm.khr_id
9275 AND pocb.kle_id = stm.kle_id
9276 AND pocb.sty_id = stm.sty_id;
9277
9278 -- Get Undisbursed Investor Rent Streams
9279 CURSOR l_undisb_rent_strm_pndg_csr (cp_contract_id NUMBER,
9280 cp_contract_line_id NUMBER,
9281 cp_sty_id NUMBER,
9282 cp_date DATE) IS
9283 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
9284 FROM okl_streams stm,
9285 okl_strm_type_b sty,
9286 okl_strm_elements ste,
9287 okl_pool_contents pocb
9288 WHERE stm.khr_id = cp_contract_id
9289 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9290 AND stm.active_yn = 'Y'
9291 AND stm.say_code = 'CURR'
9292 AND ste.stm_id = stm.id
9293 AND NVL (ste.amount, 0) <> 0
9294 AND sty.id = stm.sty_id
9295 AND sty.id = cp_sty_id
9296 AND ste.stream_element_date > cp_date
9297 AND pocb.status_Code = 'PENDING'
9298 AND pocb.khr_id = stm.khr_id
9299 AND pocb.kle_id = stm.kle_id
9300 AND pocb.sty_id = stm.sty_id;
9301
9302
9303 l_unbill_principal_amount NUMBER := 0;
9304 l_unbill_interest_amount NUMBER := 0;
9305 l_unbill_ppd_amount NUMBER := 0;
9306 l_unbill_loan_amount NUMBER := 0;
9307 l_undisb_principal_amount NUMBER := 0;
9308 l_undisb_interest_amount NUMBER := 0;
9309 l_undisb_ppd_amount NUMBER := 0;
9310 l_undisb_loan_amount NUMBER := 0;
9311 l_result_amount NUMBER := 0;
9312 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
9313
9314 -- rmunjulu EDAT
9315 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
9316 SELECT trunc(qte.date_effective_from) date_effective_from
9317 FROM okl_trx_quotes_b qte
9318 WHERE qte.id = p_quote_id;
9319
9320 -- rmunjulu EDAT
9321 l_quote_id NUMBER;
9322 l_quote_date DATE;
9323 l_sysdate DATE;
9324 l_sty_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
9325 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
9326 --06-Dec-2004 PAGARG Bug# 3948473 variable to store investor agreement id
9327 l_inv_agr_id NUMBER;
9328 BEGIN
9329 -- ****************
9330 -- Calculate result
9331 -- ****************
9332 -- rmunjulu EDAT
9333 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
9334 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
9335 LOOP
9336 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
9337 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
9338 --06-Dec-2004 PAGARG Bug# 3948473 obtain investor agreement id
9339 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'inv_agr_id' THEN
9340 l_inv_agr_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
9341 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
9342 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
9343 END IF;
9344 END LOOP;
9345 END IF;
9346
9347 -- rmunjulu EDAT
9348 select sysdate into l_sysdate from dual;
9349
9350 -- rmunjulu EDAT
9351 IF l_quote_id IS NOT NULL
9352 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
9353
9354 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
9355 l_quote_date := get_quote_date_rec.date_effective_from;
9356 END LOOP;
9357 END IF;
9358
9359 -- rmunjulu EDAT
9360 IF l_quote_date IS NULL
9361 OR l_quote_date = OKL_API.G_MISS_DATE THEN
9362 l_quote_date := l_sysdate;
9363 END IF;
9364
9365 --PAGARG 19-Nov-2004 Bug# 4012614
9366 --UDS impact. Obtain stream type id and pass it to cursor
9367 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
9368 'PRINCIPAL_PAYMENT',
9369 l_return_status,
9370 l_sty_id);
9371
9372 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9373 THEN
9374 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9375 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9376 THEN
9377 RAISE OKL_API.G_EXCEPTION_ERROR;
9378 END IF;
9379
9380 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9381 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9382 FETCH l_unbill_stream_pending_csr INTO l_unbill_principal_amount;
9383 CLOSE l_unbill_stream_pending_csr;
9384 ELSE
9385 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9386 FETCH l_unbill_stream_csr INTO l_unbill_principal_amount;
9387 CLOSE l_unbill_stream_csr;
9388 END IF;
9389
9390 --PAGARG 19-Nov-2004 Bug# 4012614
9391 --UDS impact. Obtain stream type id and pass it to cursor
9392 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
9393 'INTEREST_PAYMENT',
9394 l_return_status,
9395 l_sty_id);
9396
9397 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9398 THEN
9399 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9400 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9401 THEN
9402 RAISE OKL_API.G_EXCEPTION_ERROR;
9403 END IF;
9404
9405 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9406 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9407 FETCH l_unbill_stream_pending_csr INTO l_unbill_interest_amount;
9408 CLOSE l_unbill_stream_pending_csr;
9409 ELSE
9410 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9411 FETCH l_unbill_stream_csr INTO l_unbill_interest_amount;
9412 CLOSE l_unbill_stream_csr;
9413 END IF;
9414
9415 --PAGARG 19-Nov-2004 Bug# 4012614
9416 --UDS impact. Obtain stream type id and pass it to cursor
9417 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
9418 'UNSCHEDULED_PRINCIPAL_PAYMENT',
9419 l_return_status,
9420 l_sty_id);
9421
9422 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9423 THEN
9424 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9425 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9426 THEN
9427 RAISE OKL_API.G_EXCEPTION_ERROR;
9428 END IF;
9429
9430 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9431 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9432 FETCH l_unbill_stream_pending_csr INTO l_unbill_ppd_amount;
9433 CLOSE l_unbill_stream_pending_csr;
9434 ELSE
9435 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9436 FETCH l_unbill_stream_csr INTO l_unbill_ppd_amount;
9437 CLOSE l_unbill_stream_csr;
9438 END IF;
9439
9440 --Calculate Total Unbilled Interest Amount
9441 l_unbill_loan_amount := l_unbill_principal_amount+l_unbill_interest_amount+l_unbill_ppd_amount;
9442
9443 --06-Dec-2004 PAGARG Bug# 3948473 Pass investor agreement id to obtain stream id
9444 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
9445 'INVESTOR_PRINCIPAL_DISB_BASIS',
9446 l_return_status,
9447 l_sty_id);
9448
9449 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9450 THEN
9451 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9452 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9453 THEN
9454 RAISE OKL_API.G_EXCEPTION_ERROR;
9455 END IF;
9456
9457 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9458 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
9459 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_principal_amount;
9460 CLOSE l_undisb_rent_strm_pndg_csr;
9461 ELSE
9462 OPEN l_undisb_rent_stream_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date); -- gboomina bug 4775555 pass term date
9463 FETCH l_undisb_rent_stream_csr INTO l_undisb_principal_amount;
9464 CLOSE l_undisb_rent_stream_csr;
9465 END IF;
9466
9467 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
9468 'INVESTOR_INTEREST_DISB_BASIS',
9469 l_return_status,
9470 l_sty_id);
9471
9472 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9473 THEN
9474 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9475 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9476 THEN
9477 RAISE OKL_API.G_EXCEPTION_ERROR;
9478 END IF;
9479
9480 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9481 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
9482 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_interest_amount;
9483 CLOSE l_undisb_rent_strm_pndg_csr;
9484 ELSE
9485 OPEN l_undisb_rent_stream_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date); -- gboomina bug 4775555 pass term date
9486 FETCH l_undisb_rent_stream_csr INTO l_undisb_interest_amount;
9487 CLOSE l_undisb_rent_stream_csr;
9488 END IF;
9489
9490 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
9491 'INVESTOR_PPD_DISB_BASIS',
9492 l_return_status,
9493 l_sty_id);
9494
9495 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9496 THEN
9497 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9498 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9499 THEN
9500 RAISE OKL_API.G_EXCEPTION_ERROR;
9501 END IF;
9502
9503 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9504 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
9505 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_ppd_amount;
9506 CLOSE l_undisb_rent_strm_pndg_csr;
9507 ELSE
9508 OPEN l_undisb_rent_stream_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date); -- gboomina bug 4775555 pass term date
9509 FETCH l_undisb_rent_stream_csr INTO l_undisb_ppd_amount;
9510 CLOSE l_undisb_rent_stream_csr;
9511 END IF;
9512
9513 l_undisb_loan_amount := l_undisb_principal_amount + l_undisb_interest_amount+l_undisb_ppd_amount;
9514
9515 -- this condition is included to prevent 'ORA-01476: divisor is equal to zero' error
9516 -- need to seed a new message
9517 IF l_unbill_loan_amount = 0 THEN
9518 l_result_amount := 0;
9519 ELSE
9520 l_result_amount := l_undisb_loan_amount/l_unbill_loan_amount;
9521 END IF;
9522
9523 RETURN l_result_amount;
9524
9525 EXCEPTION
9526
9527 WHEN OTHERS THEN
9528 -- Close open cursors
9529 IF l_unbill_stream_csr%ISOPEN THEN
9530 CLOSE l_unbill_stream_csr;
9531 END IF;
9532 IF l_undisb_rent_stream_csr%ISOPEN THEN
9533 CLOSE l_undisb_rent_stream_csr;
9534 END IF;
9535 IF l_unbill_stream_pending_csr%ISOPEN THEN
9536 CLOSE l_unbill_stream_pending_csr;
9537 END IF;
9538 IF l_undisb_rent_strm_pndg_csr%ISOPEN THEN
9539 CLOSE l_undisb_rent_strm_pndg_csr;
9540 END IF;
9541 -- store SQL error message on message stack for caller
9542
9543 OKL_API.SET_MESSAGE (
9544 p_app_name => OKL_API.G_APP_NAME,
9545 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
9546 p_token1 => 'SQLCODE',
9547 p_token1_value => SQLCODE,
9548 p_token2 => 'SQLERRM',
9549 p_token2_value => SQLERRM);
9550
9551 RETURN NULL;
9552
9553 END investor_loan_factor;
9554
9555
9556 -----------------------------------------------------
9557 --End Bug# 3143522 mdokal : 11.5.10 AM Securitization
9558 -----------------------------------------------------
9559
9560
9561 ------------------------------------------------------------------------------
9562 -- Start of Comments
9563 -- Created By: Reeshma Kuttiyat - 15-SEP-2003
9564 -- Function Name: Net_Gain_Loss
9565 -- Description: Returns the Net Gain Loss for a Termination Quote
9566 -- Dependencies:
9567 -- Parameters: IN: p_contract_id, p_contract_line_id ,p_additional_paams(quote_id)
9568 -- OUT: amount
9569 -- rmunjulu 3842101 changed for proper calculation
9570 -- rmunjulu 3900814
9571 -- Version: 1.0
9572 -- End of Commnets
9573 ------------------------------------------------------------------------------
9574
9575 FUNCTION NET_GAIN_LOSS_QUOTE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
9576
9577 --Cusor to obtain the asset line id
9578 CURSOR c_quote_asset_line(p_quote_id IN NUMBER) IS
9579 SELECT kle_id
9580 FROM OKL_TXL_QUOTE_LINES_B
9581 WHERE QTE_ID = p_quote_id
9582 AND QLT_CODE = 'AMCFIA';
9583
9584 --Cusor to obtain the quote net investment
9585 CURSOR c_quote_net_invst_csr(p_quote_id IN NUMBER) IS
9586 SELECT asset_value net_investment
9587 FROM OKL_TRX_QUOTES_V qte
9588 WHERE qte.id = p_quote_id;
9589
9590 --Cursor to obtain the total quote amount , excluding the billed quote lines
9591 CURSOR c_total_qt_amt(p_quote_id IN NUMBER) IS
9592 SELECT SUM(amount)
9593 FROM OKL_TXL_QUOTE_LINES_B
9594 WHERE qte_id = p_quote_id
9595 AND qlt_code NOT IN ('AMCFIA','AMCTAX', 'AMYOUB', 'AMCSDD'); -- rmunjulu 3842101 Added security deposit
9596
9597 l_quote_id NUMBER;
9598 l_net_gain_loss NUMBER;
9599 l_total_qte_amt NUMBER;
9600 l_total_invest NUMBER := 0;
9601 l_line_asset_invest NUMBER := 0 ;
9602 l_return_status VARCHAR2(1);
9603 l_unbilled_rent NUMBER;
9604 l_residual_value NUMBER;
9605 l_unearned_income NUMBER;
9606
9607 BEGIN
9608
9609 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
9610 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
9611 LOOP
9612 -- Start : PRASJAIN : Bug 6472724
9613 -- IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
9614 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
9615 -- End : PRASJAIN : Bug 6472724
9616 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
9617 END IF;
9618 END LOOP;
9619 END IF;
9620
9621 /* rmunjulu 3842101 get net investment from quote
9622 -- get the line asset investment by calling the formula engine
9623 FOR l_line IN c_quote_asset_line(l_quote_id)
9624 LOOP
9625
9626 l_unbilled_rent := line_unbilled_rent(p_khr_id,l_line.kle_id);
9627 l_residual_value := line_residual_value(p_khr_id,l_line.kle_id);
9628 l_unearned_income := line_unearned_income(p_khr_id,l_line.kle_id);
9629
9630 l_line_asset_invest := l_unbilled_rent + l_residual_value -l_unearned_income;
9631
9632 l_total_invest := l_total_invest + l_line_asset_invest;
9633
9634 END LOOP;
9635 */
9636 --get the total quote amount excluding billed quote lines
9637 OPEN c_total_qt_amt(l_quote_id);
9638 FETCH c_total_qt_amt INTO l_total_qte_amt;
9639 IF c_total_qt_amt%NOTFOUND THEN
9640 OKC_API.set_message( p_app_name => 'OKC',
9641 p_msg_name => G_INVALID_VALUE,
9642 p_token1 => G_COL_NAME_TOKEN,
9643 p_token1_value => 'KLE_ID');
9644 l_total_qte_amt := 0;
9645 END IF;
9646 CLOSE c_total_qt_amt;
9647
9648 -- rmunjulu 3842101 added this code to get net investment from quote
9649 OPEN c_quote_net_invst_csr(l_quote_id);
9650 FETCH c_quote_net_invst_csr INTO l_total_invest;
9651 CLOSE c_quote_net_invst_csr;
9652
9653 -- Net Gain/Loss = Total Quote Amount - Net Investment for quoted assets
9654 -- rmunjulu 3842101 added nvls or else values are being set with null and does not get calculated
9655 l_net_gain_loss := NVL(l_total_qte_amt,0) - NVL(l_total_invest,0);
9656
9657 RETURN l_net_gain_loss;
9658 EXCEPTION
9659 WHEN OTHERS THEN
9660 -- Close open cursors
9661
9662 IF c_total_qt_amt%ISOPEN THEN
9663 CLOSE c_total_qt_amt;
9664 END IF;
9665
9666 -- store SQL error message on message stack for caller
9667
9668 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
9669 p_msg_name => 'OKL_UNEXPECTED_ERROR',
9670 p_token1 => 'OKL_SQLCODE',
9671 p_token1_value => SQLCODE,
9672 p_token2 => 'OKL_SQLERRM',
9673 p_token2_value => SQLERRM);
9674 RETURN NULL;
9675 END NET_GAIN_LOSS_QUOTE;
9676
9677
9678 --end rkuttiya
9679
9680 ------------------------------------------------------------------------------
9681 -- Start of Comments
9682 -- Created By: Manjit Dokal - 22-Oct-2003
9683 -- Function Name: contract_fee_amount
9684 -- Description: Calculate Financed Fee during termination
9685 -- Dependencies: OKL building blocks AMTX and AMUV,
9686 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
9687 -- p_operand (required additional parameter)
9688 -- OUT: amount
9689 -- History : 29-Aug-04 PAGARG Bug #3921591: Consider link fee assets
9690 -- while calculating amount. Include link fee assets also
9691 -- for both full and partial termination
9692 -- p_contract_line_id is used to obtain asset id
9693 -- : rmunjulu EDAT Made changes so that only unbilled fees from
9694 -- quote eff date onwards is calculated
9695 -- Version: 1.0
9696 -- End of Commnets
9697 ------------------------------------------------------------------------------
9698 FUNCTION contract_fee_amount (
9699 p_contract_id IN NUMBER,
9700 p_contract_line_id IN NUMBER)
9701 RETURN NUMBER IS
9702
9703 CURSOR l_unbilled_fee_streams_csr (
9704 cp_chr_id NUMBER,
9705 cp_fee_type VARCHAR2,
9706 cp_date DATE ) IS -- rmunjulu EDAT
9707 SELECT SUM(ste.amount) amount
9708 FROM okl_streams stm,
9709 okl_strm_type_b sty,
9710 okc_k_lines_b kle,
9711 okc_statuses_b kls,
9712 okc_line_styles_b lse,
9713 okl_strm_elements ste,
9714 okl_k_lines cle
9715 WHERE stm.khr_id = cp_chr_id
9716 AND stm.active_yn = 'Y'
9717 AND stm.say_code = 'CURR'
9718 AND ste.stm_id = stm.id
9719 AND sty.id = stm.sty_id
9720 AND sty.billable_yn = 'Y'
9721 AND kle.id = stm.kle_id
9722 AND kls.code = kle.sts_code
9723 AND kls.ste_code = 'ACTIVE'
9724 AND lse.id = kle.lse_id
9725 AND kle.id = cle.id
9726 AND lse.lty_code = 'FEE'
9727 AND ste.date_billed IS NULL -- rmunjulu EDAT
9728 AND trunc(ste.stream_element_date) > trunc(cp_date) -- rmunjulu EDAT
9729 AND cle.fee_type = cp_fee_type;
9730
9731 --Bug #3921591: pagarg +++ Rollover +++++++ Start ++++++++++
9732 -- Following cursor finds the total payments with all the assets associated
9733 -- to the given fee type for the given contract. This cursor will be used in
9734 -- case of full termination along with the above cursor.
9735 CURSOR l_unbilled_feeassets_strms_csr(
9736 cp_chr_id NUMBER,
9737 cp_fee_type VARCHAR2,
9738 cp_date DATE ) IS -- rmunjulu EDAT
9739 SELECT SUM(ste.amount) amount
9740 FROM okl_streams stm
9741 ,okl_strm_type_b sty
9742 ,okc_k_lines_b kle
9743 ,okc_statuses_b kls
9744 ,okc_line_styles_b lse
9745 ,okl_strm_elements ste
9746 ,okl_k_lines cle
9747 ,okc_k_lines_b cles
9748 WHERE stm.khr_id = cp_chr_id
9749 AND stm.active_yn = 'Y'
9750 AND stm.say_code = 'CURR'
9751 AND ste.stm_id = stm.id
9752 AND sty.id = stm.sty_id
9753 AND sty.billable_yn = 'Y'
9754 AND cles.id = stm.kle_id
9755 AND cles.cle_id = kle.id
9756 AND kls.code = kle.sts_code
9757 AND kls.ste_code = 'ACTIVE'
9758 AND lse.id = cles.lse_id
9759 AND kle.id = cle.id
9760 AND lse.lty_code = 'LINK_FEE_ASSET'
9761 AND ste.date_billed IS NULL -- rmunjulu EDAT
9762 AND trunc(ste.stream_element_date) > trunc(cp_date) -- rmunjulu EDAT
9763 AND cle.fee_type = cp_fee_type;
9764
9765 -- Following cursor obtains the total payments of a given asset associated
9766 -- to the given fee of the given contract. This will used in case of partial
9767 -- termination when we are processing formula for each link fee asset.
9768 CURSOR l_unbilled_feeasset_strms_csr(
9769 cp_chr_id NUMBER,
9770 cp_fee_type VARCHAR2,
9771 cp_asset_id NUMBER,
9772 cp_date DATE ) IS -- rmunjulu EDAT
9773 SELECT SUM(ste.amount) amount
9774 FROM okl_streams stm
9775 ,okl_strm_type_b sty
9776 ,okc_k_lines_b kle
9777 ,okc_statuses_b kls
9778 ,okc_line_styles_b lse
9779 ,okl_strm_elements ste
9780 ,okl_k_lines cle
9781 ,okc_k_lines_b cles
9782 ,okc_k_items cim
9783 WHERE stm.khr_id = cp_chr_id
9784 AND stm.active_yn = 'Y'
9785 AND stm.say_code = 'CURR'
9786 AND ste.stm_id = stm.id
9787 AND sty.id = stm.sty_id
9788 AND sty.billable_yn = 'Y'
9789 AND cles.id = stm.kle_id
9790 AND lse.id = cles.lse_id
9791 AND lse.lty_code = 'LINK_FEE_ASSET'
9792 AND cles.cle_id = kle.id
9793 AND kls.code = kle.sts_code
9794 AND kls.ste_code = 'ACTIVE'
9795 AND kle.id = cle.id
9796 AND cle.fee_type = cp_fee_type
9797 AND cim.object1_id1 = cp_asset_id
9798 AND ste.date_billed IS NULL -- rmunjulu EDAT
9799 AND trunc(ste.stream_element_date) > trunc(cp_date) -- rmunjulu EDAT
9800 AND cim.cle_id = cles.id;
9801 --Bug #3921591: pagarg +++ Rollover +++++++ End ++++++++++
9802 --mdokal assign fee type names to variables
9803 l_amafee CONSTANT VARCHAR2(30) := 'ABSORBED';
9804 l_amefee CONSTANT VARCHAR2(30) := 'EXPENSE';
9805 l_amffee CONSTANT VARCHAR2(30) := 'FINANCED';
9806 l_amgfee CONSTANT VARCHAR2(30) := 'GENERAL';
9807 l_amifee CONSTANT VARCHAR2(30) := 'INCOME';
9808 l_ammfee CONSTANT VARCHAR2(30) := 'MISCELLANEOUS';
9809 l_ampfee CONSTANT VARCHAR2(30) := 'PASSTHROUGH';
9810 l_amsfee CONSTANT VARCHAR2(30) := 'SECDEPOSIT';
9811 --Bug #3921591: pagarg +++ Rollover +++
9812 -- Constant for Rollover Fee
9813 l_amrfee CONSTANT VARCHAR2(30) := 'ROLLOVER';
9814
9815 l_operand VARCHAR2(30);
9816 l_fee_type VARCHAR2(50);
9817 l_unbilled_fee_amount NUMBER := 0;
9818 --Bug #3921591: pagarg +++ Rollover +++
9819 -- Variable to store fee asset amount
9820 l_unbilled_fee_assets_amt NUMBER := 0;
9821
9822 -- rmunjulu EDAT
9823 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
9824 SELECT trunc(qte.date_effective_from) date_effective_from
9825 FROM okl_trx_quotes_b qte
9826 WHERE qte.id = p_quote_id;
9827
9828 -- rmunjulu EDAT
9829 l_quote_id NUMBER;
9830 l_quote_date DATE;
9831 l_sysdate DATE;
9832 BEGIN
9833
9834 --Validate additional parameters availability
9835 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
9836 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
9837 LOOP
9838 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_operand' THEN
9839 l_operand := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
9840 END IF;
9841
9842 -- rmunjulu EDAT -- get quote id
9843 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_id' THEN
9844 l_quote_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
9845 END IF;
9846 END LOOP;
9847 ELSE
9848 Okl_Api.Set_Message(p_app_name => G_APP_NAME,
9849 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
9850 RAISE OKL_API.G_EXCEPTION_ERROR;
9851 END IF;
9852
9853 -- Determine the fee type passed
9854
9855 IF l_operand = 'AMAFEE' THEN
9856 l_fee_type := l_amafee;
9857 ELSIF l_operand = 'AMEFEE' THEN
9858 l_fee_type := l_amefee;
9859 ELSIF l_operand = 'AMFFEE' THEN
9860 l_fee_type := l_amffee;
9861 ELSIF l_operand = 'AMGFEE' THEN
9862 l_fee_type := l_amgfee;
9863 ELSIF l_operand = 'AMIFEE' THEN
9864 l_fee_type := l_amifee;
9865 ELSIF l_operand = 'AMMFEE' THEN
9866 l_fee_type := l_ammfee;
9867 ELSIF l_operand = 'AMPFEE' THEN
9868 l_fee_type := l_ampfee;
9869 ELSIF l_operand = 'AMSFEE' THEN
9870 l_fee_type := l_amsfee;
9871 --Bug #3921591: pagarg +++ Rollover +++
9872 -- Set the fee type based on operand value for Rollover
9873 ELSIF l_operand = 'AMRFEE' THEN
9874 l_fee_type := l_amrfee;
9875 END IF;
9876
9877 -- rmunjulu EDAT
9878 select sysdate into l_sysdate from dual;
9879
9880 -- rmunjulu EDAT
9881 IF l_quote_id IS NOT NULL
9882 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
9883
9884 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
9885 l_quote_date := get_quote_date_rec.date_effective_from;
9886 END LOOP;
9887 END IF;
9888
9889 -- rmunjulu EDAT
9890 IF l_quote_date IS NULL
9891 OR l_quote_date = OKL_API.G_MISS_DATE THEN
9892 l_quote_date := l_sysdate;
9893 END IF;
9894 -- ****************
9895 -- Calculate result
9896 -- ****************
9897 OPEN l_unbilled_fee_streams_csr (p_contract_id, l_fee_type, l_quote_date); -- rmunjulu EDAT
9898 FETCH l_unbilled_fee_streams_csr INTO l_unbilled_fee_amount;
9899 CLOSE l_unbilled_fee_streams_csr;
9900 --Bug #3921591: pagarg +++ Rollover +++++++ Start ++++++++++
9901 -- Find the sum of all the asset level streams for a given fee if asset id is null
9902 -- else if asset id is not null then sum all the asset level streams for that asset
9903 -- for the given fee.
9904 -- p_contract_line_id stores the asset id
9905 IF p_contract_line_id is NULL or p_contract_line_id = OKL_API.G_MISS_NUM THEN
9906 -- Find the total payments of all the assets associated to the given
9907 -- fee type of given contract.
9908 OPEN l_unbilled_feeassets_strms_csr (p_contract_id, l_fee_type, l_quote_date); -- rmunjulu EDAT
9909 FETCH l_unbilled_feeassets_strms_csr INTO l_unbilled_fee_assets_amt;
9910 CLOSE l_unbilled_feeassets_strms_csr;
9911 l_unbilled_fee_amount := NVL(l_unbilled_fee_amount, 0) + NVL(l_unbilled_fee_assets_amt, 0);
9912 ELSIF p_contract_line_id is NOT NULL THEN
9913 -- Find the total payments of given asset associated to the given
9914 -- fee type of given contract.
9915 OPEN l_unbilled_feeasset_strms_csr (p_contract_id, l_fee_type, p_contract_line_id, l_quote_date); -- rmunjulu EDAT
9916 FETCH l_unbilled_feeasset_strms_csr INTO l_unbilled_fee_assets_amt;
9917 CLOSE l_unbilled_feeasset_strms_csr;
9918 l_unbilled_fee_amount := NVL(l_unbilled_fee_assets_amt, 0);
9919
9920 END IF;
9921 --Bug #3921591: pagarg +++ Rollover +++++++ End ++++++++++
9922
9923 RETURN l_unbilled_fee_amount;
9924
9925 EXCEPTION
9926 WHEN OTHERS THEN
9927 -- Close open cursors
9928 IF l_unbilled_fee_streams_csr%ISOPEN THEN
9929 CLOSE l_unbilled_fee_streams_csr;
9930 END IF;
9931 -- store SQL error message on message stack for caller
9932 OKL_API.SET_MESSAGE (
9933 p_app_name => OKL_API.G_APP_NAME,
9934 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
9935 p_token1 => 'SQLCODE',
9936 p_token1_value => SQLCODE,
9937 p_token2 => 'SQLERRM',
9938 p_token2_value => SQLERRM);
9939 RETURN NULL;
9940 END contract_fee_amount;
9941 -----------------------------------------------------
9942 --End Bug# 3061765 mdokal : 11.5.10 AM Financed Fees
9943 -----------------------------------------------------
9944
9945 -- Bug# 3316994 start : 12-Jan-2004 cklee
9946 ------------------------------------------------------------------------------
9947 -- Start of Comments
9948 -- Created By: 13-Jan-2004 cklee
9949 -- Function Name: subsidy_amount
9950 -- Description: demo subsidy amount formula function
9951 -- Dependencies:
9952 -- Parameters: IN: p_contract_id, p_contract_line_id (FREE_FORM1)
9953 -- OUT: amount
9954 -- Version: 1.0
9955 -- End of Commnets
9956 ------------------------------------------------------------------------------
9957 FUNCTION SUBSIDY_AMOUNT(
9958 p_contract_id IN NUMBER
9959 ,p_contract_line_id IN NUMBER
9960 ) RETURN NUMBER
9961 IS
9962
9963 l_amount NUMBER;
9964
9965 /* case not available
9966 CURSOR c_subsidy_amount(p_cle_id okc_k_lines_b.id%TYPE) IS
9967 select (case
9968 when ROUND(MONTHS_BETWEEN(chr.end_date, cle.start_date)) <= 12 then NVL(kle.oec,0) * .2
9969 else NVL(kle.oec,0) * .1
9970 end) subsidy_amount
9971 from okc_k_lines_b cle,
9972 okl_k_lines kle,
9973 okc_k_headers_b chr
9974 where chr.id = cle.dnz_chr_id
9975 and kle.id = cle.id
9976 and cle.id = p_cle_id -- FREE_FORM1 (FIN)
9977 ;
9978 */
9979 CURSOR c_subsidy_amount(p_cle_id okc_k_lines_b.id%TYPE) IS
9980 SELECT ROUND(MONTHS_BETWEEN(CHR.end_date, cle.start_date)) months,
9981 NVL(kle.oec,0) oec
9982 FROM okc_k_lines_b cle,
9983 okl_k_lines kle,
9984 okc_k_headers_b CHR
9985 WHERE CHR.id = cle.dnz_chr_id
9986 AND kle.id = cle.id
9987 AND cle.id = p_cle_id -- FREE_FORM1 (FIN)
9988 ;
9989
9990 r_subsidy_amount c_subsidy_amount%ROWTYPE;
9991
9992
9993 BEGIN
9994
9995 OPEN c_subsidy_amount (p_contract_line_id);
9996 FETCH c_subsidy_amount INTO r_subsidy_amount;
9997 CLOSE c_subsidy_amount;
9998
9999 -- Bug 3487167
10000 IF r_subsidy_amount.months <= 12 THEN
10001 l_amount := r_subsidy_amount.oec * .02;
10002 ELSE
10003 l_amount := r_subsidy_amount.oec * .01;
10004 END IF;
10005
10006 RETURN l_amount;
10007
10008 EXCEPTION
10009 WHEN OTHERS THEN
10010 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10011 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10012 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10013 p_token1 => 'OKL_SQLCODE',
10014 p_token1_value => SQLCODE,
10015 p_token2 => 'OKL_SQLERRM',
10016 p_token2_value => SQLERRM);
10017 RETURN NULL;
10018
10019 END SUBSIDY_AMOUNT;
10020
10021 ------------------------------------------------------------------------------
10022 -- Start of Comments
10023 -- Created By: 13-Jan-2004 cklee
10024 -- Function Name: refund_subsidy
10025 -- Description: refund subsidy amount if asset terminated
10026 -- Dependencies:
10027 -- Parameters: IN: p_contract_id, p_contract_line_id (FREE_FORM1)
10028 -- OUT: amount
10029 -- Version: 1.0
10030 -- End of Commnets
10031 ------------------------------------------------------------------------------
10032 FUNCTION REFUND_SUBSIDY(
10033 p_contract_id IN NUMBER
10034 ,p_contract_line_id IN NUMBER
10035 ) RETURN NUMBER
10036 IS
10037
10038 l_amount NUMBER := 0;
10039 l_tot_amount NUMBER := 0;
10040 l_return_status VARCHAR2(1);
10041
10042 CURSOR c_subsidy_lines(p_cle_id okc_k_lines_b.id%TYPE) IS
10043 SELECT sub.accounting_method_code,
10044 top_cle.date_terminated,
10045 --TO_NUMBER(sgn.value) sty_id
10046 sub_kle.sty_id sty_id, /* Bug 6353756 */
10047 top_cle.dnz_chr_id chr_id
10048 FROM --okl_sgn_translations sgn,
10049 okl_subsidies_b sub,
10050 okl_k_lines sub_kle,
10051 okc_k_lines_b sub_cle,
10052 okc_k_lines_b top_cle
10053 WHERE --sgn.jtot_object1_code = 'OKL_STRMTYP'
10054 --AND sgn.object1_id1 = TO_CHAR(sub_kle.sty_id) AND
10055 sub.id = sub_kle.subsidy_id
10056 AND sub_cle.cle_id = top_cle.id
10057 AND sub_kle.id = sub_cle.id
10058 AND sub_cle.cle_id = p_cle_id -- FREE_FORM1
10059 ;
10060
10061 CURSOR c_refund_subsidy(p_cle_id okc_k_lines_b.id%TYPE,
10062 p_date_terminated okc_k_lines_b.date_terminated%TYPE,
10063 p_sty_id okl_strm_type_b.id%TYPE) IS
10064 SELECT NVL(SUM(selb.amount),0)
10065 FROM
10066 okl_streams stmb,
10067 okl_strm_elements selb
10068 WHERE stmb.id = selb.stm_id
10069 AND stmb.say_code = 'CURR'
10070 AND stmb.active_yn = 'Y'
10071 AND selb.date_billed IS NULL
10072 AND TRUNC(selb.stream_element_date) > TRUNC(p_date_terminated)
10073 AND stmb.kle_id = p_cle_id -- FREE_FORM1
10074 AND stmb.sty_id = p_sty_id
10075 ;
10076
10077 r_subsidy_line c_subsidy_lines%ROWTYPE;
10078 l_dependent_sty_id OKL_STRM_TYPE_B.ID%TYPE; -- Bug 6353756
10079
10080 BEGIN
10081
10082 FOR r_subsidy_line IN c_subsidy_lines(p_contract_line_id) LOOP
10083
10084 -- CASE r_subsidy_line.accounting_method_code
10085
10086 -- WHEN 'NET' THEN
10087 IF r_subsidy_line.accounting_method_code = 'NET' THEN
10088
10089 l_tot_amount := l_tot_amount + 0; -- through funding
10090
10091 -- WHEN 'AMORTIZE' THEN
10092 ELSIF r_subsidy_line.accounting_method_code = 'AMORTIZE' THEN
10093
10094 IF (r_subsidy_line.date_terminated IS NOT NULL) THEN
10095
10096 /* Bug 6353756 Get dependent stream type from r_subsidy_line.sty_id */
10097 okl_streams_util.get_dependent_stream_type(
10098 p_khr_id => r_subsidy_line.chr_id,
10099 p_primary_sty_id => r_subsidy_line.sty_id,
10100 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
10101 x_return_status => l_return_status,
10102 x_dependent_sty_id => l_dependent_sty_id);
10103 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10104 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10105 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
10106 RAISE OKL_API.G_EXCEPTION_ERROR;
10107 END IF;
10108
10109 OPEN c_refund_subsidy(p_contract_line_id,
10110 r_subsidy_line.date_terminated,
10111 --r_subsidy_line.sty_id);
10112 l_dependent_sty_id); -- Bug 6353756
10113 FETCH c_refund_subsidy INTO l_amount;
10114 CLOSE c_refund_subsidy;
10115 l_tot_amount := l_tot_amount + l_amount;
10116
10117 ELSE
10118 l_tot_amount := NULL; -- error
10119 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10120 p_msg_name => 'OKL_DATE_TERMINATED_REQUIRED');
10121
10122 RAISE OKC_API.G_EXCEPTION_ERROR;
10123 END IF;
10124
10125 ELSE -- error
10126 l_tot_amount := NULL;
10127 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10128 p_msg_name => 'OKL_INVALID_ACCT_METHOD_CODE',
10129 p_token2 => 'COL_NAME',
10130 p_token2_value => r_subsidy_line.accounting_method_code);
10131
10132 RAISE OKC_API.G_EXCEPTION_ERROR;
10133 -- END CASE;
10134 END IF;
10135
10136 END LOOP;
10137
10138 RETURN l_tot_amount;
10139
10140 EXCEPTION
10141 WHEN OTHERS THEN
10142 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10143 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10144 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10145 p_token1 => 'OKL_SQLCODE',
10146 p_token1_value => SQLCODE,
10147 p_token2 => 'OKL_SQLERRM',
10148 p_token2_value => SQLERRM);
10149 RETURN NULL;
10150
10151 END REFUND_SUBSIDY;
10152
10153 -- Bug# 3316994 end: 12-Jan-2004 cklee
10154
10155 -- Fix Bug 3417313, dedey 01/29/2004
10156 ----------------------------------------------------------------------------------------------------
10157
10158 -- Start of Comments
10159 -- Created By: dedey
10160 -- Function Name: contract_pretaxinc_book
10161 -- Description: Returns sum of all incomes of financial asset lines of a contract
10162 -- Dependencies:
10163 -- Parameters: contract id, line id
10164 -- Version: 1.0
10165 -- End of Commnets
10166
10167 ----------------------------------------------------------------------------------------------------
10168 FUNCTION contract_pretaxinc_book(
10169 p_chr_id IN NUMBER
10170 ,p_kle_id IN NUMBER
10171 )
10172 RETURN NUMBER IS
10173
10174 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_PRETAXINC_BOOK';
10175 l_api_version CONSTANT NUMBER := 1;
10176 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
10177 x_msg_count NUMBER;
10178 x_msg_data VARCHAR2(256);
10179
10180 l_income NUMBER := 0;
10181
10182 CURSOR l_line_income_csr (p_chr_id NUMBER) IS
10183 SELECT NVL(str.link_hist_stream_id,-1) link_hist_stream_id,
10184 NVL(SUM(sele.amount),0) amount
10185 FROM okl_strm_elements sele,
10186 --okl_streams str, MGAAP 7263041
10187 okl_streams_rep_v str,
10188 okl_strm_type_v sty,
10189 okc_k_headers_b CHR,
10190 okc_statuses_b sts
10191 WHERE sele.stm_id = str.id
10192 AND str.sty_id = sty.id
10193 --AND UPPER(sty.name) = 'PRE-TAX INCOME'
10194 AND sty.stream_type_purpose = 'LEASE_INCOME'
10195 AND (NVL(str.purpose_code,'XXXX') = 'XXXX' OR
10196 NVL(str.purpose_code,'XXXX') = 'REPORT')
10197 AND str.say_code = 'CURR'
10198 AND str.active_yn = 'Y'
10199 AND CHR.id = p_chr_id
10200 AND CHR.sts_code = sts.code
10201 AND CHR.id = str.khr_id
10202 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
10203 GROUP BY str.link_hist_stream_id;
10204
10205 CURSOR l_line_income_adj_csr (p_stm_id NUMBER) IS
10206 SELECT NVL(SUM(sele.amount),0) amount
10207 FROM okl_strm_elements sele
10208 WHERE stm_id = p_stm_id
10209 AND NVL(accrued_yn,'N') = 'Y';
10210
10211 l_line_income_amount NUMBER;
10212 l_income_adj_amount NUMBER;
10213
10214 BEGIN
10215
10216 IF ( p_chr_id IS NULL ) THEN
10217 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
10218 END IF;
10219
10220 l_line_income_amount := 0;
10221 FOR l_line_income_rec IN l_line_income_csr (p_chr_id)
10222 LOOP
10223 l_line_income_amount := NVL(l_line_income_amount,0) + l_line_income_rec.amount;
10224
10225 IF (l_line_income_rec.link_hist_stream_id <> -1) THEN
10226 l_income_adj_amount := 0;
10227 OPEN l_line_income_adj_csr (l_line_income_rec.link_hist_stream_id);
10228 FETCH l_line_income_adj_csr INTO l_income_adj_amount;
10229 CLOSE l_line_income_adj_csr;
10230
10231 l_line_income_amount := l_line_income_amount - NVL(l_income_adj_amount,0);
10232 END IF;
10233 END LOOP;
10234
10235 l_income := l_line_income_amount;
10236
10237 RETURN l_income;
10238
10239
10240 EXCEPTION
10241
10242 WHEN OTHERS THEN
10243 Okl_Api.SET_MESSAGE(
10244 p_app_name => G_APP_NAME,
10245 p_msg_name => G_UNEXPECTED_ERROR,
10246 p_token1 => G_SQLCODE_TOKEN,
10247 p_token1_value => SQLCODE,
10248 p_token2 => G_SQLERRM_TOKEN,
10249 p_token2_value => SQLERRM);
10250 RETURN NULL;
10251
10252
10253 END contract_pretaxinc_book;
10254
10255 ----------------------------------------------------------------------------------------------------
10256
10257 -- Start of Comments
10258 -- Created By: arun.jain
10259 -- Function Name: CONTRACT_FINANCED_FEE
10260 -- Description: Returns the sum of Financed fee lines amount of a contract
10261 -- Dependencies:
10262 -- Parameters: contract id, line id
10263 -- Version: 1.0
10264 -- End of Commnets
10265
10266 ----------------------------------------------------------------------------------------------------
10267 FUNCTION CONTRACT_FINANCED_FEE(
10268 p_dnz_chr_id IN NUMBER
10269 ,p_kle_id IN NUMBER
10270 ) RETURN NUMBER
10271 IS
10272
10273 l_sum_financed_fee_amt NUMBER;
10274
10275 CURSOR sum_fin_fee_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
10276 SELECT
10277 NVL(SUM(NVL(KLEB.amount,0)),0)
10278 FROM
10279 OKL_K_LINES KLEB,
10280 OKC_K_LINES_B CLEB,
10281 OKC_LINE_STYLES_B LSEB,
10282 okc_statuses_b sts
10283 WHERE
10284 KLEB.ID = CLEB.ID AND
10285 CLEB.LSE_ID = LSEB.ID AND
10286 LSEB.LTY_CODE = 'FEE' AND
10287 KLEB.FEE_TYPE IN ('FINANCED') AND
10288 CLEB.DNZ_CHR_ID = l_dnz_chr_id AND
10289 CLEB.sts_code = sts.code AND
10290 sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
10291
10292 BEGIN
10293
10294 OPEN sum_fin_fee_csr (p_dnz_chr_id);
10295 FETCH sum_fin_fee_csr INTO l_sum_financed_fee_amt;
10296 CLOSE sum_fin_fee_csr;
10297
10298 RETURN l_sum_financed_fee_amt;
10299
10300 EXCEPTION
10301 WHEN OTHERS THEN
10302 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10303 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10304 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10305 p_token1 => 'OKL_SQLCODE',
10306 p_token1_value => SQLCODE,
10307 p_token2 => 'OKL_SQLERRM',
10308 p_token2_value => SQLERRM);
10309 RETURN NULL;
10310
10311 END CONTRACT_FINANCED_FEE;
10312
10313
10314 ----------------------------------------------------------------------------------------------------
10315
10316 -- Start of Comments
10317 -- Created By: arun.jain
10318 -- Function Name: CONTRACT_ABSORBED_FEE
10319 -- Description: Returns the sum of Absorbed fee lines amount of a contract
10320 -- Dependencies:
10321 -- Parameters: contract id, line id
10322 -- Version: 1.0
10323 -- End of Commnets
10324
10325 ----------------------------------------------------------------------------------------------------
10326 FUNCTION CONTRACT_ABSORBED_FEE(
10327 p_dnz_chr_id IN NUMBER
10328 ,p_kle_id IN NUMBER
10329 ) RETURN NUMBER
10330 IS
10331
10332 l_sum_absorbed_fee_amt NUMBER;
10333
10334 CURSOR sum_abs_fee_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
10335 SELECT
10336 NVL(SUM(NVL(KLEB.amount,0)),0)
10337 FROM
10338 OKL_K_LINES KLEB,
10339 OKC_K_LINES_B CLEB,
10340 OKC_LINE_STYLES_B LSEB,
10341 okc_statuses_b sts
10342 WHERE
10343 KLEB.ID = CLEB.ID AND
10344 CLEB.LSE_ID = LSEB.ID AND
10345 LSEB.LTY_CODE = 'FEE' AND
10346 KLEB.FEE_TYPE IN ('ABSORBED') AND
10347 CLEB.DNZ_CHR_ID = l_dnz_chr_id AND
10348 CLEB.sts_code = sts.code AND
10349 sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
10350
10351 BEGIN
10352
10353 OPEN sum_abs_fee_csr (p_dnz_chr_id);
10354 FETCH sum_abs_fee_csr INTO l_sum_absorbed_fee_amt;
10355 CLOSE sum_abs_fee_csr;
10356
10357 RETURN l_sum_absorbed_fee_amt;
10358
10359 EXCEPTION
10360 WHEN OTHERS THEN
10361 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10362 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10363 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10364 p_token1 => 'OKL_SQLCODE',
10365 p_token1_value => SQLCODE,
10366 p_token2 => 'OKL_SQLERRM',
10367 p_token2_value => SQLERRM);
10368 RETURN NULL;
10369
10370 END CONTRACT_ABSORBED_FEE;
10371
10372 ------------------------------------------------------------------------------
10373 -- Start of comments
10374 --
10375 -- Procedure Name : credit_check
10376 -- Description : Caculate total credit remaining
10377 --
10378 -- Business Rules :
10379 -- Parameters :IN: p_contract_id, OUT: amount
10380 -- Version : 1.0
10381 -- History :27-Aug-04 [email protected] -- Created
10382 --
10383 -- End of comments
10384 ------------------------------------------------------------------------------
10385 --START: 14-Feb-06 cklee Fixed bug#5017158 |
10386 /*| 14-Feb-06 cklee Fixed bug#5017158 |
10387 FUNCTION credit_check(
10388 p_contract_id IN NUMBER -- credit line contract id
10389 ,p_contract_line_id IN NUMBER
10390 ) RETURN NUMBER
10391 IS
10392
10393 CURSOR c_disb_tot IS
10394 SELECT TAP.AMOUNT,
10395 TAP.KHR_ID
10396 FROM OKL_TRX_AP_INVOICES_B TAP
10397 WHERE TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
10398 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
10399 -- start: cklee - okl.h ER 05/25/2005
10400 AND NOT EXISTS (SELECT 1
10401 FROM OKC_K_HEADERS_B KHR
10402 WHERE KHR.ID = TAP.KHR_ID
10403 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
10404 -- end: cklee - okl.h ER 05/25/2005
10405 ;
10406
10407 -- STRAT: cklee - bug#4655437 10/06/2005
10408 CURSOR c_principal_payments_tot IS
10409 SELECT TAR.AMOUNT,
10410 TAR.KHR_ID
10411 FROM okl_cnsld_ar_strms_b TAR
10412 WHERE TAR.receivables_invoice_id <> -99999
10413 AND exists (SELECT STY.ID
10414 FROM okl_strm_type_b STY
10415 WHERE STY.STREAM_TYPE_PURPOSE = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
10416 AND STY.ID = TAR.STY_ID);
10417
10418 l_payment_tot NUMBER := 0;
10419 -- END: cklee - bug#4655437 10/06/2005
10420
10421
10422 l_amount_limit NUMBER := 0;
10423 l_credit_remain NUMBER := 0;
10424 l_disbursement_tot NUMBER := 0;
10425
10426 l_amount NUMBER := 0;
10427 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
10428 l_api_version NUMBER := 1.0;
10429 x_msg_count NUMBER;
10430 x_msg_data VARCHAR2(4000);
10431 l_init_msg_list VARCHAR2(10) := OKL_API.G_FALSE;
10432
10433 BEGIN
10434
10435 FOR r_ast IN c_disb_tot LOOP
10436
10437 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(r_ast.KHR_ID) = p_contract_id) THEN
10438 l_disbursement_tot := l_disbursement_tot + NVL(r_ast.AMOUNT,0);
10439 END IF;
10440
10441 END LOOP;
10442
10443 -- START: cklee - bug#4655437 10/06/2005
10444 FOR r_pst IN c_principal_payments_tot LOOP
10445
10446 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(r_pst.KHR_ID) = p_contract_id) THEN
10447 l_payment_tot := l_payment_tot + NVL(r_pst.AMOUNT,0);
10448 END IF;
10449
10450 END LOOP;
10451 -- END: cklee - bug#4655437 10/06/2005
10452
10453 l_credit_remain := NVL(creditline_total_limit(p_contract_id),0) - l_disbursement_tot
10454 -- START: cklee - bug#4655437 10/06/2005
10455 + l_payment_tot;
10456 -- END: cklee - bug#4655437 10/06/2005
10457
10458 RETURN l_credit_remain;
10459
10460 EXCEPTION
10461 WHEN OTHERS THEN
10462 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10463 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10464 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10465 p_token1 => 'OKL_SQLCODE',
10466 p_token1_value => SQLCODE,
10467 p_token2 => 'OKL_SQLERRM',
10468 p_token2_value => SQLERRM);
10469 RETURN NULL;
10470
10471 END;
10472 */
10473 FUNCTION credit_check(
10474 p_contract_id IN NUMBER -- credit line contract id
10475 ,p_contract_line_id IN NUMBER
10476 ) RETURN NUMBER
10477 IS
10478
10479 -- sjalasut, modified the cursor to have khr_id referred from okl_txl_ap_inv_lns_all_b
10480 -- changes made as part of OKLR12B disbursements project.
10481 -- cklee : 09/21/2007 restored the khr_id back to okl_trx_ap_invs_all_b
10482 -- reason: 1. line.khr_id will be always = header.khr_id
10483 -- 2. the modified code will multiply the header amount if mutliple lines found
10484
10485 CURSOR c_disb_tot(p_credit_id number) IS
10486 SELECT NVL(SUM(TAP.AMOUNT),0)
10487 FROM OKL_TRX_AP_INVOICES_B TAP,
10488 -- okl_txl_ap_inv_lns_all_b tpl,
10489 (
10490 select gov.dnz_chr_id chr_id,
10491 crd.ID credit_id
10492 from OKC_K_HEADERS_B crd,
10493 okc_Governances gov
10494 where crd.id = gov.chr_id_referred
10495 and crd.sts_code = 'ACTIVE'
10496 and crd.scs_code = 'CREDITLINE_CONTRACT'
10497 union
10498 select mla_g.dnz_chr_id chr_id,
10499 crd.ID credit_id
10500 from OKC_K_HEADERS_B crd,
10501 okc_Governances gov,
10502 OKC_K_HEADERS_B mla,
10503 okc_Governances mla_g
10504 where crd.id = gov.chr_id_referred
10505 and crd.sts_code = 'ACTIVE'
10506 and crd.scs_code = 'CREDITLINE_CONTRACT'
10507 and gov.dnz_chr_id = mla.id
10508 and mla.id = mla_g.chr_id_referred
10509 and mla.scs_code = 'MASTER_LEASE'
10510 ) ccg
10511 --WHERE TAP.id = TPL.tap_id
10512 where ccg.chr_id = Tap.KHR_ID
10513 AND ccg.credit_id = p_credit_id
10514 AND TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
10515 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
10516 AND NOT EXISTS (SELECT 1
10517 FROM OKC_K_HEADERS_B KHR
10518 WHERE KHR.ID = tap.KHR_ID
10519 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
10520 ;
10521
10522 /* ankushar, modified the cursor to replace reference to okl_cnsld_ar_strms_b
10523 OKL R12B billing changes
10524 */
10525 CURSOR c_principal_payments_tot(p_credit_id number) IS
10526 SELECT NVL(SUM(ARL.AMOUNT),0)
10527 FROM okl_bpd_ar_inv_lines_v ARL,
10528 (
10529 select gov.dnz_chr_id chr_id,
10530 crd.ID credit_id
10531 from OKC_K_HEADERS_B crd,
10532 okc_Governances gov
10533 where crd.id = gov.chr_id_referred
10534 and crd.sts_code = 'ACTIVE'
10535 and crd.scs_code = 'CREDITLINE_CONTRACT'
10536 union
10537 select mla_g.dnz_chr_id chr_id,
10538 crd.ID credit_id
10539 from OKC_K_HEADERS_B crd,
10540 okc_Governances gov,
10541 OKC_K_HEADERS_B mla,
10542 okc_Governances mla_g
10543 where crd.id = gov.chr_id_referred
10544 and crd.sts_code = 'ACTIVE'
10545 and crd.scs_code = 'CREDITLINE_CONTRACT'
10546 and gov.dnz_chr_id = mla.id
10547 and mla.id = mla_g.chr_id_referred
10548 and mla.scs_code = 'MASTER_LEASE'
10549 ) ccg
10550 WHERE ccg.chr_id = ARL.CONTRACT_ID
10551 AND ccg.credit_id = p_credit_id
10552 AND ARL.receivables_invoice_id <> -99999
10553 AND ARL.interface_line_context = 'OKL_CONTRACTS'
10554 AND exists (SELECT STY.ID
10555 FROM okl_strm_type_b STY
10556 WHERE STY.STREAM_TYPE_PURPOSE = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
10557 AND STY.ID = ARL.STY_ID);
10558
10559 l_payment_tot NUMBER := 0;
10560 l_credit_remain NUMBER := 0;
10561 l_disbursement_tot NUMBER := 0;
10562
10563 BEGIN
10564
10565 open c_disb_tot(p_contract_id);
10566 fetch c_disb_tot into l_disbursement_tot;
10567 close c_disb_tot;
10568
10569 open c_principal_payments_tot(p_contract_id);
10570 fetch c_principal_payments_tot into l_payment_tot;
10571 close c_principal_payments_tot;
10572
10573 l_credit_remain := NVL(creditline_total_limit(p_contract_id),0) - l_disbursement_tot + l_payment_tot;
10574
10575 RETURN l_credit_remain;
10576
10577 EXCEPTION
10578 WHEN OTHERS THEN
10579 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10580 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10581 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10582 p_token1 => 'OKL_SQLCODE',
10583 p_token1_value => SQLCODE,
10584 p_token2 => 'OKL_SQLERRM',
10585 p_token2_value => SQLERRM);
10586 RETURN NULL;
10587
10588 END;
10589 --END:| 14-Feb-06 cklee Fixed bug#5017158 |
10590
10591 --------------------------------------------------------------------------------
10592
10593 -- STRAT: cklee - bug#4655437 10/06/2005
10594 ------------------------------------------------------------------------------
10595 -- Start of comments
10596 --
10597 -- Procedure Name : tot_credit_funding_pmt
10598 -- Description : Caculate total credit funding payments
10599 --
10600 -- Business Rules :
10601 -- Parameters :IN: p_contract_id, OUT: amount
10602 -- Version : 1.0
10603 -- History :07-Oct-05 [email protected] -- Created
10604 --
10605 -- End of comments
10606 ------------------------------------------------------------------------------
10607 FUNCTION tot_credit_funding_pmt(
10608 p_contract_id IN NUMBER -- credit line contract id
10609 ,p_contract_line_id IN NUMBER
10610 ) RETURN NUMBER
10611 IS
10612 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
10613 -- changes made as part of OKLR12B disbursements project
10614 /*
10615 CURSOR c_disb_tot IS
10616 SELECT TAP.AMOUNT,
10617 TPL.KHR_ID
10618 FROM OKL_TRX_AP_INVOICES_B TAP
10619 ,OKL_TXL_AP_INV_LNS_ALL_B TPL
10620 WHERE TAP.ID = TPL.TAP_ID
10621 AND TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
10622 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
10623 -- start: cklee - okl.h ER 05/25/2005
10624 AND NOT EXISTS (SELECT 1
10625 FROM OKC_K_HEADERS_B KHR
10626 WHERE KHR.ID = TPL.KHR_ID
10627 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
10628 -- end: cklee - okl.h ER 05/25/2005
10629 ;
10630 */
10631 -- cklee : 09/20/2007 change khr_id refer back to okl_trx_ap_invs_all_b instead
10632 -- reason: 1. The modified code will return duplicated header amount
10633 -- 2. line.khr_id will be always = header.khr_id
10634
10635 CURSOR c_disb_tot IS
10636 SELECT TAP.AMOUNT,
10637 TAP.KHR_ID
10638 FROM OKL_TRX_AP_INVOICES_B TAP
10639 where TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
10640 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
10641 -- start: cklee - okl.h ER 05/25/2005
10642 AND NOT EXISTS (SELECT 1
10643 FROM OKC_K_HEADERS_B KHR
10644 WHERE KHR.ID = tap.KHR_ID
10645 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
10646 ;
10647 -- end: cklee - okl.h ER 05/25/2005
10648
10649 l_amount_limit NUMBER := 0;
10650 l_credit_remain NUMBER := 0;
10651 l_disbursement_tot NUMBER := 0;
10652
10653 l_amount NUMBER := 0;
10654 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
10655 l_api_version NUMBER := 1.0;
10656 x_msg_count NUMBER;
10657 x_msg_data VARCHAR2(4000);
10658 l_init_msg_list VARCHAR2(10) := OKL_API.G_FALSE;
10659
10660 BEGIN
10661
10662 FOR r_ast IN c_disb_tot LOOP
10663
10664 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(r_ast.KHR_ID) = p_contract_id) THEN
10665 l_disbursement_tot := l_disbursement_tot + NVL(r_ast.AMOUNT,0);
10666 END IF;
10667
10668 END LOOP;
10669
10670 RETURN l_disbursement_tot;
10671
10672 EXCEPTION
10673 WHEN OTHERS THEN
10674 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10675 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10676 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10677 p_token1 => 'OKL_SQLCODE',
10678 p_token1_value => SQLCODE,
10679 p_token2 => 'OKL_SQLERRM',
10680 p_token2_value => SQLERRM);
10681 RETURN NULL;
10682
10683 END;
10684
10685 ------------------------------------------------------------------------------
10686 -- Start of comments
10687 --
10688 -- Procedure Name : tot_credit_principal_pmt
10689 -- Description : Caculate total credit principal payments
10690 --
10691 -- Business Rules :
10692 -- Parameters :IN: p_contract_id, OUT: amount
10693 -- Version : 1.0
10694 -- History :07-Oct-05 [email protected] -- Created
10695 --
10696 -- End of comments
10697 ------------------------------------------------------------------------------
10698 FUNCTION tot_credit_principal_pmt(
10699 p_contract_id IN NUMBER -- credit line contract id
10700 ,p_contract_line_id IN NUMBER
10701 ) RETURN NUMBER
10702 IS
10703
10704 /* ankushar 09-Feb-2007 OKL R12B Billing enhancement
10705 Replaced reference of okl_cnsld_ar_strms_b with Billing Util API call
10706 start changes
10707 */
10708 --Initialize standard API parameters
10709 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
10710 x_msg_count NUMBER;
10711 x_msg_data VARCHAR2(256);
10712
10713 -- Intialize contract_invoice_tbl variable
10714 x_contract_invoice_tbl OKL_BILLING_UTIL_PVT.contract_invoice_tbl;
10715 /* ankushar end changes */
10716
10717 l_payment_tot NUMBER := 0;
10718 i NUMBER;
10719
10720
10721 BEGIN
10722
10723 -- Call to the Billing Util API replacing reference to okl_cnsld_ar_strms_b
10724 OKL_BILLING_UTIL_PVT.INVOICE_AMOUNT_FOR_STREAM(
10725 p_api_version => 1.0
10726 ,p_init_msg_list => OKL_API.G_FALSE
10727 ,x_return_status => x_return_status
10728 ,x_msg_count => x_msg_count
10729 ,x_msg_data => x_msg_data
10730 ,p_stream_purpose => 'UNSCHEDULED_PRINCIPAL_PAYMENT'
10731 ,x_contract_invoice_tbl => x_contract_invoice_tbl);
10732
10733 --rkuttiya added for bug 6313562
10734 IF x_contract_invoice_tbl.count > 0 THEN
10735 i := x_contract_invoice_tbl.FIRST;
10736 LOOP
10737 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(x_contract_invoice_tbl(i).KHR_ID) = p_contract_id) THEN
10738 l_payment_tot := l_payment_tot + NVL(x_contract_invoice_tbl(i).AMOUNT, 0);
10739 END IF;
10740 EXIT WHEN i = x_contract_invoice_tbl.LAST;
10741 i := x_contract_invoice_tbl.NEXT(i);
10742 END LOOP;
10743 END IF;
10744
10745 /* ankushar end changes */
10746 RETURN l_payment_tot;
10747
10748 EXCEPTION
10749 WHEN OTHERS THEN
10750 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10751 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10752 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10753 p_token1 => 'OKL_SQLCODE',
10754 p_token1_value => SQLCODE,
10755 p_token2 => 'OKL_SQLERRM',
10756 p_token2_value => SQLERRM);
10757 RETURN NULL;
10758
10759 END;
10760 --------------------------------------------------------------------------------
10761 -- END: cklee - bug#4655437 10/06/2005
10762
10763
10764 --Bug# 3872534: start
10765 --------------------------------------------------------------------------------
10766
10767 -- Start of Comments
10768 -- Created By: Rekha Pillay (rpillay)
10769 -- Function Name: line_asset_cost
10770 -- Description: Returns the current cost of an asset in its Corporate Book
10771 -- from Oracle Assets
10772 -- Dependencies:
10773 -- Parameters: contract id, line id
10774 -- Version: 1.0
10775 -- End of Comments
10776
10777 --------------------------------------------------------------------------------
10778 FUNCTION line_asset_cost(
10779 p_contract_id IN NUMBER
10780 ,p_contract_line_id IN NUMBER
10781 )
10782 RETURN NUMBER IS
10783
10784 l_api_name CONSTANT VARCHAR2(30) := 'LINE_ASSET_COST';
10785 l_api_version CONSTANT NUMBER := 1;
10786 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
10787 x_msg_count NUMBER;
10788 x_msg_data VARCHAR2(256);
10789
10790 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
10791 l_asset_fin_rec FA_API_TYPES.asset_fin_rec_type;
10792
10793 l_converted_amount NUMBER;
10794 l_contract_start_date DATE;
10795 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
10796 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
10797 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
10798 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
10799
10800 -- Bug# 4061058:
10801 -- Changes to ensure that the query works for Release Asset
10802 -- and Release Contract
10803 CURSOR l_asset_csr(p_chr_id IN NUMBER
10804 ,p_cle_id IN NUMBER
10805 ,p_book_class IN VARCHAR2
10806 ,p_book_type_code IN VARCHAR2) IS
10807 SELECT fab.asset_id,
10808 fab.book_type_code
10809 FROM okc_k_lines_v fin_ast_cle,
10810 okc_statuses_b stsb,
10811 fa_additions fad,
10812 fa_book_controls fbc,
10813 fa_books fab
10814 WHERE fin_ast_cle.id = p_cle_id
10815 AND fin_ast_cle.dnz_chr_id = p_chr_id
10816 AND fin_ast_cle.chr_id = p_chr_id
10817 AND fin_ast_cle.sts_code = stsb.code
10818 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED')
10819 AND fad.asset_number = fin_ast_cle.name
10820 AND fab.asset_id = fad.asset_id
10821 AND fab.book_type_code = fbc.book_type_code
10822 AND fab.transaction_header_id_out IS NULL
10823 --AND fbc.book_class = 'CORPORATE'
10824 AND fbc.book_class = p_book_class
10825 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
10826
10827 l_asset_rec l_asset_csr%ROWTYPE;
10828
10829 -- Bug# 4061058:
10830 -- Changes to ensure that the query works for Release Asset
10831 -- and Release Contract
10832 CURSOR l_asset_csr_incl_terminated
10833 (p_chr_id IN NUMBER
10834 ,p_cle_id IN NUMBER
10835 ,p_book_class IN VARCHAR2
10836 ,p_book_type_code IN VARCHAR2) IS
10837 SELECT fab.asset_id,
10838 fab.book_type_code
10839 FROM okc_k_lines_v fin_ast_cle,
10840 okc_statuses_b stsb,
10841 fa_additions fad,
10842 fa_book_controls fbc,
10843 fa_books fab
10844 WHERE fin_ast_cle.id = p_cle_id
10845 AND fin_ast_cle.dnz_chr_id = p_chr_id
10846 AND fin_ast_cle.chr_id = p_chr_id
10847 AND fin_ast_cle.sts_code = stsb.code
10848 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED')
10849 AND fad.asset_number = fin_ast_cle.name
10850 AND fab.asset_id = fad.asset_id
10851 AND fab.book_type_code = fbc.book_type_code
10852 AND fab.transaction_header_id_out IS NULL
10853 --AND fbc.book_class = 'CORPORATE'
10854 AND fbc.book_class = p_book_class
10855 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
10856
10857 CURSOR contract_start_date_csr(p_chr_id NUMBER) IS
10858 SELECT start_date
10859 FROM okc_k_headers_b
10860 WHERE id = p_chr_id;
10861
10862 l_discount_incl_terminated BOOLEAN := FALSE;
10863 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
10864 l_book_class FA_BOOK_CONTROLS.BOOK_CLASS%TYPE;
10865 l_book_type_code FA_BOOK_CONTROLS.BOOK_TYPE_CODE%TYPE;
10866 BEGIN
10867
10868 IF (( p_contract_id IS NULL ) OR ( p_contract_line_id IS NULL )) THEN
10869 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
10870 END IF;
10871
10872 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
10873 l_book_type_code := NULL;
10874 IF (l_streams_repo_policy = 'PRIMARY') THEN
10875 l_book_class := 'CORPORATE';
10876 ELSE
10877 l_book_class := 'TAX';
10878 l_book_type_code := OKL_ACCOUNTING_UTIL.get_fa_reporting_book(
10879 p_kle_id => p_contract_line_id);
10880 END IF;
10881 -- rmunjulu 4042892
10882 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
10883 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
10884 LOOP
10885 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
10886 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
10887 l_discount_incl_terminated := TRUE;
10888 END IF;
10889 END LOOP;
10890 END IF;
10891
10892
10893 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
10894 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
10895 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
10896
10897 IF l_discount_incl_terminated THEN
10898 OPEN l_asset_csr_incl_terminated(p_chr_id => p_contract_id,
10899 p_cle_id => p_contract_line_id,
10900 p_book_class => l_book_class,
10901 p_book_type_code => l_book_type_code);
10902 FETCH l_asset_csr_incl_terminated INTO l_asset_rec;
10903 IF( l_asset_csr_incl_terminated%NOTFOUND ) THEN
10904 CLOSE l_asset_csr_incl_terminated;
10905 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
10906 END IF;
10907 CLOSE l_asset_csr_incl_terminated;
10908 ELSE
10909 OPEN l_asset_csr(p_chr_id => p_contract_id,
10910 p_cle_id => p_contract_line_id,
10911 p_book_class => l_book_class,
10912 p_book_type_code => l_book_type_code);
10913 FETCH l_asset_csr INTO l_asset_rec;
10914 IF( l_asset_csr%NOTFOUND ) THEN
10915 CLOSE l_asset_csr;
10916 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
10917 END IF;
10918 CLOSE l_asset_csr;
10919 END IF;
10920
10921 l_asset_hdr_rec.asset_id := l_asset_rec.asset_id;
10922 l_asset_hdr_rec.book_type_code := l_asset_rec.book_type_code;
10923
10924 IF NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) THEN
10925 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
10926 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
10927 );
10928 RAISE OKL_API.G_EXCEPTION_ERROR;
10929 END IF;
10930
10931 -- To fetch Asset Current Cost
10932 IF NOT FA_UTIL_PVT.get_asset_fin_rec
10933 (p_asset_hdr_rec => l_asset_hdr_rec,
10934 px_asset_fin_rec => l_asset_fin_rec,
10935 p_transaction_header_id => NULL,
10936 p_mrc_sob_type_code => 'P'
10937 ) THEN
10938
10939 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
10940 p_msg_name => 'OKL_LLA_FA_ASSET_FIN_REC_ERROR'
10941 );
10942 RAISE OKL_API.G_EXCEPTION_ERROR;
10943 END IF;
10944
10945 -- convert amount into contract currency
10946 OPEN contract_start_date_csr(p_chr_id => p_contract_id);
10947 FETCH contract_start_date_csr INTO l_contract_start_date;
10948 CLOSE contract_start_date_csr;
10949
10950 l_converted_amount := 0;
10951 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
10952 p_khr_id => p_contract_id,
10953 p_from_currency => NULL,
10954 p_transaction_date => l_contract_start_date,
10955 p_amount => l_asset_fin_rec.cost,
10956 x_return_status => x_return_status,
10957 x_contract_currency => l_contract_currency,
10958 x_currency_conversion_type => l_currency_conversion_type,
10959 x_currency_conversion_rate => l_currency_conversion_rate,
10960 x_currency_conversion_date => l_currency_conversion_date,
10961 x_converted_amount => l_converted_amount);
10962
10963 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
10964 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
10965 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
10966 RAISE Okl_Api.G_EXCEPTION_ERROR;
10967 END IF;
10968
10969 RETURN l_converted_amount;
10970
10971 EXCEPTION
10972
10973 WHEN OKL_API.G_EXCEPTION_ERROR THEN
10974 RETURN NULL;
10975
10976 WHEN OTHERS THEN
10977 Okl_Api.SET_MESSAGE(
10978 p_app_name => G_APP_NAME,
10979 p_msg_name => G_UNEXPECTED_ERROR,
10980 p_token1 => G_SQLCODE_TOKEN,
10981 p_token1_value => SQLCODE,
10982 p_token2 => G_SQLERRM_TOKEN,
10983 p_token2_value => SQLERRM);
10984 RETURN NULL;
10985
10986 END line_asset_cost;
10987
10988 --------------------------------------------------------------------------------
10989
10990 -- Start of Comments
10991 -- Created By: Rekha Pillay (rpillay)
10992 -- Function Name: line_accumulated_deprn
10993 -- Description: Returns the accumulated depreciation on an asset in
10994 -- its Corporate Book from Oracle Assets
10995 -- Dependencies:
10996 -- Parameters: contract id, line id
10997 -- Version: 1.0
10998 -- End of Comments
10999
11000 --------------------------------------------------------------------------------
11001 FUNCTION line_accumulated_deprn(
11002 p_contract_id IN NUMBER
11003 ,p_contract_line_id IN NUMBER
11004 )
11005 RETURN NUMBER IS
11006
11007 l_api_name CONSTANT VARCHAR2(30) := 'LINE_ACCUMULATED_DEPRN';
11008 l_api_version CONSTANT NUMBER := 1;
11009 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11010 x_msg_count NUMBER;
11011 x_msg_data VARCHAR2(256);
11012
11013 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
11014 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
11015
11016 l_converted_amount NUMBER;
11017 l_contract_start_date DATE;
11018 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
11019 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
11020 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
11021 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
11022
11023 -- Bug# 4061058:
11024 -- Changes to ensure that the query works for Release Asset
11025 -- and Release Contract
11026 CURSOR l_asset_csr(p_chr_id IN NUMBER
11027 ,p_cle_id IN NUMBER
11028 ,p_book_class IN VARCHAR2
11029 ,p_book_type_code IN VARCHAR2) IS
11030 SELECT fab.asset_id,
11031 fab.book_type_code
11032 FROM okc_k_lines_v fin_ast_cle,
11033 okc_statuses_b stsb,
11034 fa_additions fad,
11035 fa_book_controls fbc,
11036 fa_books fab
11037 WHERE fin_ast_cle.id = p_cle_id
11038 AND fin_ast_cle.dnz_chr_id = p_chr_id
11039 AND fin_ast_cle.chr_id = p_chr_id
11040 AND fin_ast_cle.sts_code = stsb.code
11041 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED')
11042 AND fad.asset_number = fin_ast_cle.name
11043 AND fab.asset_id = fad.asset_id
11044 AND fab.book_type_code = fbc.book_type_code
11045 AND fab.transaction_header_id_out IS NULL
11046 --AND fbc.book_class = 'CORPORATE';
11047 AND fbc.book_class = p_book_class
11048 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
11049
11050 l_asset_rec l_asset_csr%ROWTYPE;
11051
11052 -- Bug# 4061058:
11053 -- Changes to ensure that the query works for Release Asset
11054 -- and Release Contract
11055 CURSOR l_asset_csr_incl_terminated
11056 (p_chr_id IN NUMBER
11057 ,p_cle_id IN NUMBER
11058 ,p_book_class IN VARCHAR2
11059 ,p_book_type_code IN VARCHAR2) IS
11060 SELECT fab.asset_id,
11061 fab.book_type_code
11062 FROM okc_k_lines_v fin_ast_cle,
11063 okc_statuses_b stsb,
11064 fa_additions fad,
11065 fa_book_controls fbc,
11066 fa_books fab
11067 WHERE fin_ast_cle.id = p_cle_id
11068 AND fin_ast_cle.dnz_chr_id = p_chr_id
11069 AND fin_ast_cle.chr_id = p_chr_id
11070 AND fin_ast_cle.sts_code = stsb.code
11071 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED')
11072 AND fad.asset_number = fin_ast_cle.name
11073 AND fab.asset_id = fad.asset_id
11074 AND fab.book_type_code = fbc.book_type_code
11075 AND fab.transaction_header_id_out IS NULL
11076 --AND fbc.book_class = 'CORPORATE';
11077 AND fbc.book_class = p_book_class
11078 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
11079
11080 CURSOR contract_start_date_csr(p_chr_id NUMBER) IS
11081 SELECT start_date
11082 FROM okc_k_headers_b
11083 WHERE id = p_chr_id;
11084
11085 l_discount_incl_terminated BOOLEAN := FALSE;
11086 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
11087 l_book_class FA_BOOK_CONTROLS.BOOK_CLASS%TYPE;
11088 l_book_type_code FA_BOOK_CONTROLS.BOOK_TYPE_CODE%TYPE;
11089
11090 BEGIN
11091
11092 IF (( p_contract_id IS NULL ) OR ( p_contract_line_id IS NULL )) THEN
11093 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11094 END IF;
11095
11096 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
11097 l_book_type_code := NULL;
11098 IF (l_streams_repo_policy = 'PRIMARY') THEN
11099 l_book_class := 'CORPORATE';
11100 ELSE
11101 l_book_class := 'TAX';
11102 l_book_type_code := OKL_ACCOUNTING_UTIL.get_fa_reporting_book(
11103 p_kle_id => p_contract_line_id);
11104 END IF;
11105 -- rmunjulu 4042892
11106 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
11107 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
11108 LOOP
11109 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
11110 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
11111 l_discount_incl_terminated := TRUE;
11112 END IF;
11113 END LOOP;
11114 END IF;
11115
11116 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
11117 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
11118 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
11119
11120 IF l_discount_incl_terminated THEN
11121 OPEN l_asset_csr_incl_terminated(p_chr_id => p_contract_id,
11122 p_cle_id => p_contract_line_id,
11123 p_book_class => l_book_class,
11124 p_book_type_code => l_book_type_code);
11125 FETCH l_asset_csr_incl_terminated INTO l_asset_rec;
11126 IF( l_asset_csr_incl_terminated%NOTFOUND ) THEN
11127 CLOSE l_asset_csr_incl_terminated;
11128 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11129 END IF;
11130 CLOSE l_asset_csr_incl_terminated;
11131 ELSE
11132 OPEN l_asset_csr(p_chr_id => p_contract_id,
11133 p_cle_id => p_contract_line_id,
11134 p_book_class => l_book_class,
11135 p_book_type_code => l_book_type_code);
11136 FETCH l_asset_csr INTO l_asset_rec;
11137 IF( l_asset_csr%NOTFOUND ) THEN
11138 CLOSE l_asset_csr;
11139 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11140 END IF;
11141 CLOSE l_asset_csr;
11142 END IF;
11143
11144 l_asset_hdr_rec.asset_id := l_asset_rec.asset_id;
11145 l_asset_hdr_rec.book_type_code := l_asset_rec.book_type_code;
11146
11147 IF NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) THEN
11148 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
11149 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
11150 );
11151 RAISE OKL_API.G_EXCEPTION_ERROR;
11152 END IF;
11153
11154 -- To fetch Depreciation Reserve
11155 IF NOT FA_UTIL_PVT.get_asset_deprn_rec
11156 (p_asset_hdr_rec => l_asset_hdr_rec ,
11157 px_asset_deprn_rec => l_asset_deprn_rec,
11158 p_period_counter => NULL,
11159 p_mrc_sob_type_code => 'P'
11160 ) THEN
11161 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
11162 p_msg_name => 'OKL_LLA_FA_DEPRN_REC_ERROR'
11163 );
11164 RAISE OKL_API.G_EXCEPTION_ERROR;
11165 END IF;
11166
11167 -- convert amount into contract currency
11168 OPEN contract_start_date_csr(p_chr_id => p_contract_id);
11169 FETCH contract_start_date_csr INTO l_contract_start_date;
11170 CLOSE contract_start_date_csr;
11171
11172 l_converted_amount := 0;
11173 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
11174 p_khr_id => p_contract_id,
11175 p_from_currency => NULL,
11176 p_transaction_date => l_contract_start_date,
11177 p_amount => l_asset_deprn_rec.deprn_reserve,
11178 x_return_status => x_return_status,
11179 x_contract_currency => l_contract_currency,
11180 x_currency_conversion_type => l_currency_conversion_type,
11181 x_currency_conversion_rate => l_currency_conversion_rate,
11182 x_currency_conversion_date => l_currency_conversion_date,
11183 x_converted_amount => l_converted_amount);
11184
11185 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
11186 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
11187 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
11188 RAISE Okl_Api.G_EXCEPTION_ERROR;
11189 END IF;
11190
11191 RETURN l_converted_amount;
11192
11193 EXCEPTION
11194
11195 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11196 RETURN NULL;
11197
11198 WHEN OTHERS THEN
11199 Okl_Api.SET_MESSAGE(
11200 p_app_name => G_APP_NAME,
11201 p_msg_name => G_UNEXPECTED_ERROR,
11202 p_token1 => G_SQLCODE_TOKEN,
11203 p_token1_value => SQLCODE,
11204 p_token2 => G_SQLERRM_TOKEN,
11205 p_token2_value => SQLERRM);
11206 RETURN NULL;
11207
11208 END line_accumulated_deprn;
11209
11210 --------------------------------------------------------------------------------
11211
11212 -- Start of Comments
11213 -- Created By: Rekha Pillay (rpillay)
11214 -- Function Name: contract_asset_cost
11215 -- Description: Returns the sum of current cost of all assets
11216 -- in the contract from Oracle Assets
11217 -- Dependencies:
11218 -- Parameters: contract id, line id
11219 -- Version: 1.0
11220 -- End of Comments
11221
11222 --------------------------------------------------------------------------------
11223 FUNCTION contract_asset_cost(
11224 p_contract_id IN NUMBER
11225 ,p_contract_line_id IN NUMBER
11226 )
11227 RETURN NUMBER IS
11228
11229 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_ASSET_COST';
11230 l_api_version CONSTANT NUMBER := 1;
11231 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11232 x_msg_count NUMBER;
11233 x_msg_data VARCHAR2(256);
11234
11235 CURSOR l_finast_csr(p_chr_id IN NUMBER) IS
11236 SELECT fin_cle.id
11237 FROM okc_k_lines_b fin_cle,
11238 okc_line_styles_b lse,
11239 okc_statuses_b stsb
11240 WHERE fin_cle.dnz_chr_id = p_chr_id
11241 AND fin_cle.chr_id = p_chr_id
11242 AND fin_cle.lse_id = lse.id
11243 AND lse.lty_code = 'FREE_FORM1'
11244 AND fin_cle.sts_code = stsb.code
11245 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED');
11246
11247 CURSOR l_finast_csr_incl_terminated(p_chr_id IN NUMBER) IS
11248 SELECT fin_cle.id
11249 FROM okc_k_lines_b fin_cle,
11250 okc_line_styles_b lse,
11251 okc_statuses_b stsb
11252 WHERE fin_cle.dnz_chr_id = p_chr_id
11253 AND fin_cle.chr_id = p_chr_id
11254 AND fin_cle.lse_id = lse.id
11255 AND lse.lty_code = 'FREE_FORM1'
11256 AND fin_cle.sts_code = stsb.code
11257 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED');
11258
11259 l_sum_asset_cost NUMBER;
11260 l_asset_cost NUMBER;
11261
11262 l_discount_incl_terminated BOOLEAN := FALSE;
11263
11264 BEGIN
11265
11266 IF ( p_contract_id IS NULL ) THEN
11267 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11268 END IF;
11269
11270 l_sum_asset_cost := 0;
11271
11272 -- rmunjulu 4042892
11273 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
11274 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
11275 LOOP
11276 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
11277 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
11278 l_discount_incl_terminated := TRUE;
11279 END IF;
11280 END LOOP;
11281 END IF;
11282
11283
11284 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
11285 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
11286 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
11287
11288 IF l_discount_incl_terminated THEN
11289 FOR l_finast_rec IN l_finast_csr_incl_terminated(p_chr_id => p_contract_id) LOOP
11290 l_asset_cost := line_asset_cost(p_contract_id,l_finast_rec.id);
11291 IF (l_asset_cost IS NULL) THEN
11292 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11293 END IF;
11294 l_sum_asset_cost := l_sum_asset_cost + l_asset_cost;
11295 END LOOP;
11296
11297 ELSE
11298
11299 FOR l_finast_rec IN l_finast_csr(p_chr_id => p_contract_id) LOOP
11300 l_asset_cost := line_asset_cost(p_contract_id,l_finast_rec.id);
11301 IF (l_asset_cost IS NULL) THEN
11302 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11303 END IF;
11304 l_sum_asset_cost := l_sum_asset_cost + l_asset_cost;
11305 END LOOP;
11306
11307 END IF;
11308
11309 RETURN l_sum_asset_cost;
11310
11311 EXCEPTION
11312
11313 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11314 RETURN NULL;
11315
11316 WHEN OTHERS THEN
11317 Okl_Api.SET_MESSAGE(
11318 p_app_name => G_APP_NAME,
11319 p_msg_name => G_UNEXPECTED_ERROR,
11320 p_token1 => G_SQLCODE_TOKEN,
11321 p_token1_value => SQLCODE,
11322 p_token2 => G_SQLERRM_TOKEN,
11323 p_token2_value => SQLERRM);
11324 RETURN NULL;
11325
11326 END contract_asset_cost;
11327
11328 --------------------------------------------------------------------------------
11329
11330 -- Start of Comments
11331 -- Created By: Rekha Pillay (rpillay)
11332 -- Function Name: contract_accumulated_deprn
11333 -- Description: Returns the sum of accumulated depreciation
11334 -- for all assets in the contract from Oracle Assets
11335 -- Dependencies:
11336 -- Parameters: contract id, line id
11337 -- Version: 1.0
11338 -- End of Comments
11339
11340 --------------------------------------------------------------------------------
11341 FUNCTION contract_accumulated_deprn(
11342 p_contract_id IN NUMBER
11343 ,p_contract_line_id IN NUMBER
11344 )
11345 RETURN NUMBER IS
11346
11347 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_ACCUMULATED_DEPRN';
11348 l_api_version CONSTANT NUMBER := 1;
11349 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11350 x_msg_count NUMBER;
11351 x_msg_data VARCHAR2(256);
11352
11353 CURSOR l_finast_csr(p_chr_id IN NUMBER) IS
11354 SELECT fin_cle.id
11355 FROM okc_k_lines_b fin_cle,
11356 okc_line_styles_b lse,
11357 okc_statuses_b stsb
11358 WHERE fin_cle.dnz_chr_id = p_chr_id
11359 AND fin_cle.chr_id = p_chr_id
11360 AND fin_cle.lse_id = lse.id
11361 AND lse.lty_code = 'FREE_FORM1'
11362 AND fin_cle.sts_code = stsb.code
11363 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED');
11364
11365 CURSOR l_finast_csr_incl_terminated(p_chr_id IN NUMBER) IS
11366 SELECT fin_cle.id
11367 FROM okc_k_lines_b fin_cle,
11368 okc_line_styles_b lse,
11369 okc_statuses_b stsb
11370 WHERE fin_cle.dnz_chr_id = p_chr_id
11371 AND fin_cle.chr_id = p_chr_id
11372 AND fin_cle.lse_id = lse.id
11373 AND lse.lty_code = 'FREE_FORM1'
11374 AND fin_cle.sts_code = stsb.code
11375 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED');
11376
11377 l_sum_accumulated_deprn NUMBER;
11378 l_accumulated_deprn NUMBER;
11379
11380 l_discount_incl_terminated BOOLEAN := FALSE;
11381
11382 BEGIN
11383
11384 IF ( p_contract_id IS NULL ) THEN
11385 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11386 END IF;
11387
11388 l_sum_accumulated_deprn := 0;
11389
11390 -- rmunjulu 4042892
11391 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
11392 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
11393 LOOP
11394 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
11395 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
11396 l_discount_incl_terminated := TRUE;
11397 END IF;
11398 END LOOP;
11399 END IF;
11400
11401
11402 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
11403 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
11404 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
11405
11406 IF l_discount_incl_terminated THEN
11407 FOR l_finast_rec IN l_finast_csr_incl_terminated(p_chr_id => p_contract_id) LOOP
11408 l_accumulated_deprn := line_accumulated_deprn(p_contract_id,l_finast_rec.id);
11409 IF (l_accumulated_deprn IS NULL) THEN
11410 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11411 END IF;
11412 l_sum_accumulated_deprn := l_sum_accumulated_deprn + l_accumulated_deprn;
11413 END LOOP;
11414
11415 ELSE
11416
11417 FOR l_finast_rec IN l_finast_csr(p_chr_id => p_contract_id) LOOP
11418 l_accumulated_deprn := line_accumulated_deprn(p_contract_id,l_finast_rec.id);
11419 IF (l_accumulated_deprn IS NULL) THEN
11420 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11421 END IF;
11422 l_sum_accumulated_deprn := l_sum_accumulated_deprn + l_accumulated_deprn;
11423 END LOOP;
11424
11425 END IF;
11426
11427 RETURN l_sum_accumulated_deprn;
11428
11429 EXCEPTION
11430
11431 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11432 RETURN NULL;
11433
11434 WHEN OTHERS THEN
11435 Okl_Api.SET_MESSAGE(
11436 p_app_name => G_APP_NAME,
11437 p_msg_name => G_UNEXPECTED_ERROR,
11438 p_token1 => G_SQLCODE_TOKEN,
11439 p_token1_value => SQLCODE,
11440 p_token2 => G_SQLERRM_TOKEN,
11441 p_token2_value => SQLERRM);
11442 RETURN NULL;
11443
11444 END contract_accumulated_deprn;
11445
11446 --Bug# 3872534: end
11447
11448 --------------------------------------------------------------------------------
11449
11450 -- Start of Comments
11451 -- Created By: avsingh
11452 -- Function Name: contract_financed_amount
11453 -- Description: Returns the contract financed amount for
11454 -- booking page
11455 -- Dependencies:
11456 -- Parameters: contract id, line id
11457 -- Version: 1.0
11458 -- End of Comments
11459
11460 --------------------------------------------------------------------------------
11461 FUNCTION contract_financed_amount(
11462 p_contract_id IN NUMBER
11463 ,p_contract_line_id IN NUMBER
11464 )
11465 RETURN NUMBER IS
11466
11467 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_CAPITAL_AMOUNT';
11468 l_api_version CONSTANT NUMBER := 1;
11469 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11470 x_msg_count NUMBER;
11471 x_msg_data VARCHAR2(256);
11472
11473 --cursor to find total capital amount
11474 CURSOR l_cap_amnt_csr( ChrId NUMBER) IS
11475 SELECT NVL(SUM(kle.capital_amount),0)
11476 --bug# 4899328
11477 --+ NVL(SUM(kle.capitalized_interest),0) CapAmountLines
11478 FROM OKC_LINE_STYLES_B LSEB,
11479 OKL_K_LINES KLE,
11480 OKC_K_LINES_B CLEB,
11481 OKC_STATUSES_B STSB
11482 WHERE LSEB.ID = CLEB.LSE_ID
11483 AND LSEB.lty_code = 'FREE_FORM1'
11484 AND KLE.id = CLEB.ID
11485 AND CLEB.CHR_ID = ChrId
11486 AND CLEB.DNZ_CHR_ID = ChrId
11487 AND CLEB.sts_code = STSB.code
11488 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
11489
11490 -- fixed bug 4134296
11491 -- cursor to find total Rollover Fee Amount for a Contract
11492 CURSOR l_rollover_fee_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
11493 SELECT
11494 NVL(SUM(NVL(KLEB.amount,0)),0) ROLLOVER_AMOUNT
11495 FROM
11496 OKL_K_LINES KLEB,
11497 OKC_K_LINES_B CLEB,
11498 OKC_LINE_STYLES_B LSEB,
11499 OKC_STATUSES_B STS
11500 WHERE
11501 KLEB.ID = CLEB.ID AND
11502 CLEB.LSE_ID = LSEB.ID AND
11503 LSEB.LTY_CODE = 'FEE' AND
11504 KLEB.FEE_TYPE = 'ROLLOVER' AND
11505 CLEB.DNZ_CHR_ID = l_dnz_chr_id AND
11506 CLEB.STS_CODE = STS.CODE AND
11507 STS.STE_CODE NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
11508
11509
11510 l_rollover_fee_amount NUMBER;
11511
11512 l_capital_amount NUMBER;
11513
11514 l_financed_fee NUMBER;
11515
11516 l_contract_financed_amount NUMBER;
11517
11518
11519 BEGIN
11520
11521 IF ( p_contract_id IS NULL ) THEN
11522 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11523 END IF;
11524
11525 l_capital_amount := 0;
11526 l_financed_fee := 0;
11527 l_contract_financed_amount := 0;
11528 l_rollover_fee_amount := 0;
11529
11530 OPEN l_cap_amnt_csr(ChrId => p_contract_id);
11531 FETCH l_cap_amnt_csr INTO l_capital_amount;
11532 IF l_cap_amnt_csr%NOTFOUND THEN
11533 NULL;
11534 END IF;
11535 CLOSE l_cap_amnt_csr;
11536
11537 FOR l_rollover_fee in l_rollover_fee_csr(p_contract_id)
11538 LOOP
11539
11540 l_rollover_fee_amount := l_rollover_fee.rollover_amount;
11541
11542 END LOOP;
11543
11544
11545 l_financed_fee := contract_financed_fee(p_contract_id, NULL);
11546 l_contract_financed_amount := l_capital_amount + l_financed_fee + l_rollover_fee_amount;
11547
11548 RETURN l_contract_financed_amount;
11549
11550 EXCEPTION
11551
11552 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11553 RETURN NULL;
11554
11555 WHEN OTHERS THEN
11556 Okl_Api.SET_MESSAGE(
11557 p_app_name => G_APP_NAME,
11558 p_msg_name => G_UNEXPECTED_ERROR,
11559 p_token1 => G_SQLCODE_TOKEN,
11560 p_token1_value => SQLCODE,
11561 p_token2 => G_SQLERRM_TOKEN,
11562 p_token2_value => SQLERRM);
11563 RETURN NULL;
11564 END contract_financed_amount;
11565
11566 --start:cklee
11567 --------------------------------------------------------------------------------
11568
11569 -- Start of Comments
11570 -- Created By: cklee
11571 -- Function Name: rollover fee
11572 -- Description: Returns the credit line total rollover fee
11573 --
11574 -- Dependencies:
11575 -- Parameters: contract id, line id
11576 -- Version: 1.0
11577 -- End of Comments
11578
11579 --------------------------------------------------------------------------------
11580 FUNCTION rollover_fee(
11581 p_contract_id IN NUMBER
11582 ,p_contract_line_id IN NUMBER
11583 )
11584 RETURN NUMBER IS
11585
11586 l_api_name CONSTANT VARCHAR2(30) := 'ROLLOVER_FEE';
11587 l_api_version CONSTANT NUMBER := 1;
11588 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11589 x_msg_count NUMBER;
11590 x_msg_data VARCHAR2(256);
11591
11592 --cursor to find...
11593 Cursor l_csr( ChrId NUMBER) IS
11594 SELECT NVL(chr.TOT_CL_TRANSFER_AMT,0)
11595 FROM OKL_K_HEADERS chr
11596 WHERE chr.ID = ChrId;
11597
11598 l_amount number := 0;
11599
11600 BEGIN
11601
11602 open l_csr(ChrId => p_contract_id);
11603 fetch l_csr into l_amount;
11604 close l_csr;
11605
11606 RETURN l_amount;
11607
11608 EXCEPTION
11609
11610 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11611 RETURN NULL;
11612
11613 WHEN OTHERS THEN
11614 Okl_Api.SET_MESSAGE(
11615 p_app_name => G_APP_NAME,
11616 p_msg_name => G_UNEXPECTED_ERROR,
11617 p_token1 => G_SQLCODE_TOKEN,
11618 p_token1_value => SQLCODE,
11619 p_token2 => G_SQLERRM_TOKEN,
11620 p_token2_value => SQLERRM);
11621 RETURN NULL;
11622 END rollover_fee;
11623
11624 --------------------------------------------------------------------------------
11625
11626 -- Start of Comments
11627 -- Created By: cklee
11628 -- Function Name: tot_net_transfers
11629 -- Description: Returns the credit line total net transfers (T and A)
11630 --
11631 -- Dependencies:
11632 -- Parameters: contract id, line id
11633 -- Version: 1.0
11634 -- End of Comments
11635
11636 --------------------------------------------------------------------------------
11637 FUNCTION tot_net_transfers(
11638 p_contract_id IN NUMBER
11639 ,p_contract_line_id IN NUMBER
11640 )
11641 RETURN NUMBER IS
11642
11643 l_api_name CONSTANT VARCHAR2(30) := 'TOT_NET_TRANSFERS';
11644 l_api_version CONSTANT NUMBER := 1;
11645 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11646 x_msg_count NUMBER;
11647 x_msg_data VARCHAR2(256);
11648
11649 --cursor to find...
11650 Cursor l_csr( ChrId NUMBER) IS
11651 SELECT NVL(chr.TOT_CL_NET_TRANSFER_AMT,0)
11652 FROM OKL_K_HEADERS chr
11653 WHERE chr.ID = ChrId;
11654
11655 l_amount number := 0;
11656
11657 BEGIN
11658
11659 open l_csr(ChrId => p_contract_id);
11660 fetch l_csr into l_amount;
11661 close l_csr;
11662
11663 RETURN l_amount;
11664
11665 EXCEPTION
11666
11667 WHEN OKL_API.G_EXCEPTION_ERROR THEN
11668 RETURN NULL;
11669
11670 WHEN OTHERS THEN
11671 Okl_Api.SET_MESSAGE(
11672 p_app_name => G_APP_NAME,
11673 p_msg_name => G_UNEXPECTED_ERROR,
11674 p_token1 => G_SQLCODE_TOKEN,
11675 p_token1_value => SQLCODE,
11676 p_token2 => G_SQLERRM_TOKEN,
11677 p_token2_value => SQLERRM);
11678 RETURN NULL;
11679 END tot_net_transfers;
11680 --end:cklee
11681
11682
11683 ------------------------------------------------------------------------------
11684 -- Start of Comments
11685 -- Created By: rmunjulu 3816891
11686 -- Function Name: line_future_rent
11687 -- Description: Returns the future rent amount for a given contract line
11688 -- Dependencies: OKL building blocks AMTX and AMUV
11689 -- Parameters: IN: p_contract_id, p_line_id
11690 -- stream_type_id (stored in g_additional_parameters(1))
11691 -- OUT: amount
11692 -- Version: 1.0
11693 -- History : 31-Dec-2004 PAGARG Bug# 4097591
11694 -- : UDS impact to obtain stream type id
11695 -- : 15-Oct-07 prasjain Bug 6030917
11696 -- : Added proration logic
11697 -- End of Commnets
11698 ------------------------------------------------------------------------------
11699
11700 FUNCTION line_future_rent (
11701 p_contract_id IN NUMBER,
11702 p_contract_line_id IN NUMBER)
11703 RETURN NUMBER IS
11704
11705 -- Get future Streams
11706 -- Guru added trx_date
11707
11708 CURSOR l_future_stream_csr (
11709 cp_contract_id NUMBER,
11710 cp_contract_line_id NUMBER,
11711 cp_stream_type_id NUMBER,
11712 cp_trx_date DATE) IS
11713 SELECT SUM (NVL (ste.amount, 0)) amount_due
11714 --FROM okl_streams stm,
11715 FROM okl_streams_rep_v stm,
11716 okl_strm_type_b sty,
11717 okl_strm_elements ste
11718 WHERE stm.khr_id = cp_contract_id
11719 AND stm.kle_id = cp_contract_line_id
11720 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
11721 AND stm.active_yn = 'Y'
11722 AND stm.say_code = 'CURR'
11723 AND ste.stm_id = stm.id
11724 AND NVL (ste.amount, 0) <> 0
11725 -- Added the following 3 conditions to restrict the unbilled receivables calculation to only
11726 -- billable streams
11727 AND sty.id = stm.sty_id
11728 AND sty.billable_yn = 'Y'
11729 AND ste.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
11730
11731 -- Get future Streams for Reporting product
11732 CURSOR l_future_reporting_stream_csr (
11733 cp_contract_id NUMBER,
11734 cp_contract_line_id NUMBER,
11735 cp_stream_type_id NUMBER,
11736 cp_trx_date DATE) IS
11737 SELECT SUM (NVL (ste.amount, 0)) amount_due
11738 FROM okl_streams stm,
11739 okl_strm_type_b sty, -- Added this table to get the billable_yn flag
11740 okl_strm_elements ste
11741 WHERE stm.khr_id = cp_contract_id
11742 AND stm.kle_id = cp_contract_line_id
11743 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
11744 AND stm.active_yn = 'N' -- reporting strems are inactive
11745 AND stm.say_code = 'CURR' -- reporting streams are current
11746 AND ste.stm_id = stm.id
11747 --AND ste.date_billed IS NULL -- reporting streams never get billed
11748 AND NVL (ste.amount, 0) <> 0
11749 AND sty.id = stm.sty_id
11750 AND sty.billable_yn = 'Y' -- reporting streams are billable
11751 AND stm.purpose_code = 'REPORT'
11752 AND ste.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
11753
11754 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
11755 l_trx_date DATE;
11756
11757 l_result_amount NUMBER := 0;
11758 l_stream_type_id NUMBER;
11759
11760 -- rmunjulu
11761 l_quote_eff_date DATE;
11762 l_term_date DATE;
11763 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
11764
11765 -- Start : Bug 6030917 : prasjain
11766 --new cursor introduced for prorating and rounding the stream element amount
11767 --incase of partial unit termination
11768 CURSOR stream_element_csr (
11769 cp_contract_id NUMBER,
11770 cp_contract_line_id NUMBER,
11771 cp_stream_type_id NUMBER,
11772 cp_trx_date DATE) IS
11773 SELECT nvl(ste.amount, 0) amount
11774 FROM okl_streams stm,
11775 okl_strm_type_b sty,
11776 okl_strm_elements ste
11777 WHERE stm.khr_id = cp_contract_id
11778 AND stm.kle_id = cp_contract_line_id
11779 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
11780 AND stm.active_yn = 'Y'
11781 AND stm.say_code = 'CURR'
11782 AND ste.stm_id = stm.id
11783 AND NVL (ste.amount, 0) <> 0
11784 AND sty.id = stm.sty_id
11785 AND sty.billable_yn = 'Y'
11786 AND ste.stream_element_date > nvl(cp_trx_date,sysdate);
11787
11788 stream_element_rec stream_element_csr%ROWTYPE;
11789 --currency code cursor added to derive currency code for the particular line
11790 --which will be used for rounding amount
11791 CURSOR currency_code_csr (p_kle_id NUMBER ) IS
11792 SELECT currency_code
11793 FROM okc_k_lines_b
11794 WHERE id = p_kle_id;
11795 --declaring proration factor , currency code and rounding rule variables
11796 l_proration_factor NUMBER;
11797 l_currency_code okc_k_lines_b.currency_code%TYPE;
11798 l_parent_strm_amt NUMBER;
11799 l_parent_strm_rounded_amt NUMBER;
11800 l_parent_strm_rounded_tot_amt NUMBER;
11801 --declaring other local variables
11802 i NUMBER;
11803 l_api_version NUMBER := 1;
11804 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
11805 l_msg_count NUMBER;
11806 l_msg_data VARCHAR2(100);
11807 -- End : Bug 6030917 : prasjain
11808
11809 BEGIN
11810 --PAGARG 31-Dec-2004 Bug# 4097591 Start
11811 --UDS impact. Obtain stream type id and pass it to cursor
11812
11813 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
11814 'RENT',
11815 l_return_status,
11816 l_stream_type_id);
11817
11818 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
11819 THEN
11820 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11821 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
11822 THEN
11823 RAISE OKL_API.G_EXCEPTION_ERROR;
11824 END IF;
11825 --PAGARG 31-Dec-2004 Bug# 4097591 End
11826
11827 -- ********************************************
11828 -- Extract Stream Type Id from global variables
11829 -- ********************************************
11830
11831 --Validate additional parameters availability
11832 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
11833 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
11834 LOOP
11835 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
11836 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
11837 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
11838 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
11839 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
11840 l_trx_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
11841 -- rmunjulu -- this formula is called for amortization which will pass quote eff date
11842 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_effective_from_date'
11843 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
11844 l_quote_eff_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
11845
11846 -- Start : Bug 6030917 : prasjain
11847 --added for getting the proration factor for partial unit termination
11848 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'proration_factor'
11849 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
11850 l_proration_factor := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
11851 -- End : Bug 6030917 : prasjain
11852
11853 END IF;
11854 END LOOP;
11855 ELSE
11856 l_rep_prod_streams_yn := 'N';
11857
11858 END IF;
11859
11860 IF l_rep_prod_streams_yn = 'Y' THEN
11861 IF l_trx_date IS NULL THEN
11862 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
11863 Okl_Api.Set_Message(p_app_name => g_app_name,
11864 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
11865 RAISE Okl_Api.G_EXCEPTION_ERROR;
11866 END IF;
11867 END IF;
11868
11869 -- rmunjulu
11870 IF l_quote_eff_date IS NULL THEN
11871 l_term_date := SYSDATE;
11872 ELSE
11873 l_term_date := l_quote_eff_date;
11874 END IF;
11875 -- ****************
11876 -- Calculate result
11877 -- ****************
11878
11879 IF l_rep_prod_streams_yn = 'Y' THEN -- MGAAP 7263041
11880 --OPEN l_future_reporting_stream_csr(p_contract_id, p_contract_line_id, l_stream_type_id,l_trx_date );
11881 OPEN l_future_stream_csr(p_contract_id, p_contract_line_id, l_stream_type_id,l_trx_date );
11882 FETCH l_future_stream_csr INTO l_result_amount;
11883 CLOSE l_future_stream_csr;
11884 ELSE
11885 -- Guru added trx_date here
11886 -- Start : Bug 6030917 : prasjain
11887 --added for prorating incase of partial unit termination
11888 IF nvl(l_proration_factor,1) = 1 THEN
11889
11890 OPEN l_future_stream_csr (p_contract_id, p_contract_line_id, l_stream_type_id,l_term_date); -- rmunjulu changed to quote eff date
11891 FETCH l_future_stream_csr INTO l_result_amount;
11892 CLOSE l_future_stream_csr;
11893 ELSE
11894 --get curerncy code for the line
11895 OPEN currency_code_csr(p_contract_line_id);
11896 FETCH currency_code_csr INTO l_currency_code ;
11897 CLOSE currency_code_csr;
11898 --initializing l_parent_strm_rounded_tot_amt variable with 0
11899 l_parent_strm_rounded_tot_amt := 0;
11900
11901 FOR stream_element_rec IN stream_element_csr(p_contract_id,
11902 p_contract_line_id,
11903 l_stream_type_id,
11904 l_term_date)
11905 LOOP
11906 --prorate the amount, to derive the parent stream amount
11907 l_parent_strm_amt := stream_element_rec.amount * l_proration_factor;
11908 --round amount with streams option for paren stream element amounts
11909 okl_accounting_util.round_amount(
11910 p_api_version => l_api_version,
11911 p_init_msg_list => l_init_msg_list,
11912 x_return_status => l_return_status,
11913 x_msg_count => l_msg_count,
11914 x_msg_data => l_msg_data,
11915 p_amount => l_parent_strm_amt,
11916 p_currency_code => l_currency_code,
11917 p_round_option => 'STM',
11918 x_rounded_amount => l_parent_strm_rounded_amt
11919 );
11920 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
11921 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11922 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
11923 RAISE OKL_API.G_EXCEPTION_ERROR;
11924 END IF;
11925 -- calculate the parent stream rounded total
11926 l_parent_strm_rounded_tot_amt := l_parent_strm_rounded_tot_amt
11927 + l_parent_strm_rounded_amt;
11928
11929 END LOOP;
11930 l_result_amount := l_parent_strm_rounded_tot_amt;
11931 END IF;
11932 -- End : Bug 6030917 : prasjain
11933 END IF;
11934
11935 RETURN NVL (l_result_amount, 0);
11936
11937 EXCEPTION
11938 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
11939 -- Close open cursors
11940 IF l_future_stream_csr%ISOPEN THEN
11941 CLOSE l_future_stream_csr;
11942 END IF;
11943
11944 IF l_future_reporting_stream_csr%ISOPEN THEN
11945 CLOSE l_future_reporting_stream_csr;
11946 END IF;
11947
11948 -- Start : Bug 6030917 : prasjain
11949 IF currency_code_csr%ISOPEN THEN
11950 CLOSE currency_code_csr;
11951 END IF;
11952 IF stream_element_csr%ISOPEN THEN
11953 CLOSE stream_element_csr;
11954 END IF;
11955 -- End : Bug 6030917 : prasjain
11956
11957 RETURN NULL;
11958
11959 WHEN OTHERS THEN
11960 -- Close open cursors
11961 IF l_future_stream_csr%ISOPEN THEN
11962 CLOSE l_future_stream_csr;
11963 END IF;
11964
11965 IF l_future_reporting_stream_csr%ISOPEN THEN
11966 CLOSE l_future_reporting_stream_csr;
11967 END IF;
11968
11969 -- Start : Bug 6030917 : prasjain
11970 IF currency_code_csr%ISOPEN THEN
11971 CLOSE currency_code_csr;
11972 END IF;
11973 IF stream_element_csr%ISOPEN THEN
11974 CLOSE stream_element_csr;
11975 END IF;
11976 -- End : Bug 6030917 : prasjain
11977
11978 -- store SQL error message on message stack for caller
11979 OKL_API.SET_MESSAGE (
11980 p_app_name => OKL_API.G_APP_NAME,
11981 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
11982 p_token1 => 'SQLCODE',
11983 p_token1_value => SQLCODE,
11984 p_token2 => 'SQLERRM',
11985 p_token2_value => SQLERRM);
11986
11987 RETURN NULL;
11988
11989 END line_future_rent;
11990
11991 ------------------------------------------------------------------------------
11992 -- Start of Comments
11993 -- Created By: rmunjulu 3816891
11994 -- Function Name: line_future_income
11995 -- Description: Returns the future income amount for a given contract line
11996 -- Dependencies: OKL building blocks AMTX and AMUV
11997 -- Parameters: IN: p_contract_id, p_line_id
11998 -- stream_type_id (stored in g_additional_parameters(1))
11999 -- OUT: amount
12000 -- Version: 1.0
12001 -- History : 31-Dec-2004 PAGARG Bug# 4097591
12002 -- : UDS impact to obtain stream type id
12003 -- : 11-May-2006 gboomina Bug 5215019
12004 -- : check CHK_ACCRUAL_PREVIOUS_MNTH_YN
12005 -- : 15-Oct-07 prasjain Bug 6030917
12006 -- : Added proration logic
12007 -- : sechawla 05-dec-07 6671849 : Modified the dependent stream type check
12008 -- End of Commnets
12009 ------------------------------------------------------------------------------
12010
12011 FUNCTION line_future_income (
12012 p_contract_id IN NUMBER,
12013 p_contract_line_id IN NUMBER)
12014 RETURN NUMBER IS
12015
12016 l_unearned_income NUMBER := 0;
12017 -- 26-Aug-2004 Guru declared the following variables for bug 3849355
12018 l_term_date DATE;
12019 l_period_name VARCHAR2(30);
12020 l_start_date DATE;
12021 l_end_date DATE;
12022
12023 --Code changed by rvaduri for bug 3487920
12024 --This code will return the Pre-tax income at line level
12025 -- and will return values only contracts booked using ISG.
12026 -- Guru Added trx date
12027 --PAGARG 31-Dec-2004 Bug# 4097591
12028 --Instead of using stream name, join the sty id passed to cursor
12029 CURSOR line_csr (c_contract_line_id NUMBER,
12030 cp_trx_date DATE,
12031 p_sty_id NUMBER) IS
12032 SELECT NVL(SUM(sel.amount),0)
12033 FROM okl_strm_elements sel,
12034 --okl_streams stm, MGAAP 7263041
12035 okl_streams_rep_v stm,
12036 okl_strm_type_v sty
12037 WHERE sty.id = p_sty_id
12038 AND stm.sty_id = sty.id
12039 AND stm.say_code = 'CURR'
12040 AND stm.active_yn = 'Y'
12041 AND (stm.purpose_code IS NULL OR stm.purpose_code='REPORT')
12042 AND stm.kle_id = c_contract_line_id
12043 AND sel.stm_id = stm.id
12044 -- guru Added
12045 AND sel.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
12046
12047 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
12048 l_trx_date DATE;
12049
12050 -- Created this cursor to evaluat ereporting streams based upon additional parameters
12051 --PAGARG 31-Dec-2004 Bug# 4097591
12052 --Instead of using stream name, join the sty id passed to cursor
12053 CURSOR line_reporting_csr (c_contract_line_id IN NUMBER, cp_trx_date IN DATE, p_sty_id NUMBER) IS
12054 SELECT NVL(SUM(sel.amount),0)
12055 FROM okl_strm_elements sel,
12056 --okl_streams stm, MGAAP 7263041
12057 okl_streams_rep_v stm,
12058 okl_strm_type_v sty
12059 WHERE sty.id = p_sty_id
12060 AND stm.sty_id = sty.id
12061 AND stm.say_code = 'CURR' -- reporting streams are current
12062 AND stm.active_yn = 'N' -- reporting strems are inactive
12063 AND stm.purpose_code IS NULL
12064 -- AND sel.date_billed IS NULL -- reporting streams never get billed
12065 --AND sty.billable_yn = 'N' -- PRE-TAX streams are not billable
12066 AND stm.kle_id = c_contract_line_id
12067 AND sel.stm_id = stm.id
12068 AND stm.purpose_code = 'REPORT'
12069 AND sel.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
12070
12071 -- gboomina Bug 5215019 - Start
12072 CURSOR check_accrual_previous_csr IS
12073 SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
12074 FROM OKL_SYSTEM_PARAMS;
12075
12076 l_accrual_previous_mnth_yn VARCHAR2(3);
12077 l_accrual_adjst_date DATE;
12078 -- gboomina Bug 5215019 - End
12079
12080 -- rmunjulu
12081 l_quote_eff_date DATE;
12082 l_stream_type_id NUMBER;
12083 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
12084
12085 l_debug_unearned_income NUMBER := 0;
12086 -- Start : Bug 6030917 : prasjain
12087 --new cursor introduced for prorating and rounding the stream element amount
12088 --incase of partial unit termination
12089 CURSOR stream_element_csr (c_contract_line_id NUMBER,
12090 cp_trx_date DATE,
12091 p_sty_id NUMBER) IS
12092 SELECT NVL(sel.amount,0) amount
12093 FROM okl_strm_elements sel,
12094 --okl_streams stm, MGAAP 7263041
12095 okl_streams_rep_v stm,
12096 okl_strm_type_v sty
12097 WHERE sty.id = p_sty_id
12098 AND stm.sty_id = sty.id
12099 AND stm.say_code = 'CURR'
12100 AND stm.active_yn = 'Y'
12101 AND (stm.purpose_code IS NULL OR stm.purpose_code='REPORT')
12102 AND stm.kle_id = c_contract_line_id
12103 AND sel.stm_id = stm.id
12104 AND sel.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate);
12105 stream_element_rec stream_element_csr%ROWTYPE;
12106 --currency code cursor added to derive currency code for the particular line
12107 --which will be used for rounding amount
12108 CURSOR currency_code_csr (p_kle_id NUMBER ) IS
12109 SELECT currency_code
12110 FROM okc_k_lines_b
12111 WHERE id = p_kle_id;
12112 --declaring proration factor , currency code and rounding rule variables
12113 l_proration_factor NUMBER;
12114 l_currency_code okc_k_lines_b.currency_code%TYPE;
12115 l_parent_strm_amt NUMBER;
12116 l_parent_strm_rounded_amt NUMBER;
12117 l_parent_strm_rounded_tot_amt NUMBER;
12118 --declaring other local variables
12119 l_api_version NUMBER := 1;
12120 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
12121 l_msg_count NUMBER;
12122 l_msg_data VARCHAR2(100);
12123 -- End : Bug 6030917 : prasjain
12124
12125 lx_rep_product_id OKL_PRODUCTS_V.ID%TYPE;
12126
12127 BEGIN
12128
12129 -- Validate additional parameters availability
12130 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
12131 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
12132 LOOP
12133 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
12134 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12135 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
12136 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
12137 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12138 l_trx_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
12139 -- rmunjulu -- this formula is called for amortization which will pass quote eff date
12140 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_effective_from_date'
12141 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12142 l_quote_eff_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
12143
12144 -- Start : Bug 6030917 : prasjain
12145 --added for getting the proration factor for partial unit termination
12146 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'proration_factor'
12147 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12148 l_proration_factor := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
12149 -- End : Bug 6030917 : prasjain
12150
12151 END IF;
12152 END LOOP;
12153 ELSE
12154
12155 l_rep_prod_streams_yn := 'N';
12156
12157 END IF;
12158
12159 -- sechawla 05-dec-07 6671849 -- START
12160 IF l_rep_prod_streams_yn = 'Y' THEN
12161
12162 get_reporting_product(
12163 p_api_version => l_api_version,
12164 p_init_msg_list => OKC_API.G_FALSE,
12165 x_return_status => l_return_status,
12166 x_msg_count => l_msg_count,
12167 x_msg_data => l_msg_data,
12168 p_contract_id => p_contract_id,
12169 x_rep_product_id => lx_rep_product_id);
12170
12171 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
12172 p_product_id => lx_rep_product_id,
12173 p_primary_sty_purpose => 'RENT',
12174 p_dependent_sty_purpose => 'LEASE_INCOME',
12175 x_return_status => l_return_status,
12176 x_dependent_sty_id => l_stream_type_id);
12177 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
12178 THEN
12179 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12180 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
12181 THEN
12182 RAISE OKL_API.G_EXCEPTION_ERROR;
12183 END IF;
12184 ELSE
12185 -- sechawla 05-dec-07 6671849 -- START
12186 --PAGARG 31-Dec-2004 Bug# 4097591 Start
12187 --UDS impact. Obtain stream type id and pass it to cursor
12188 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
12189 p_primary_sty_purpose => 'RENT',
12190 p_dependent_sty_purpose => 'LEASE_INCOME',
12191 x_return_status => l_return_status,
12192 x_dependent_sty_id => l_stream_type_id);
12193
12194 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12195 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12196 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
12197 RAISE OKL_API.G_EXCEPTION_ERROR;
12198 END IF;
12199 --PAGARG 31-Dec-2004 Bug# 4097591 End
12200
12201 END IF; -- sechawla 05-dec-07 6671849 -- added
12202
12203 IF l_rep_prod_streams_yn = 'Y' THEN
12204 IF l_trx_date IS NULL THEN
12205 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
12206 Okl_Api.Set_Message(p_app_name => g_app_name,
12207 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
12208 RAISE Okl_Api.G_EXCEPTION_ERROR;
12209 END IF;
12210 END IF;
12211
12212 -- 26-Aug-2004 3849355 Guru added the following code to get current accural period end date
12213
12214 /* -- rmunjulu
12215 IF l_trx_date IS NULL THEN
12216 l_term_date := SYSDATE;
12217 ELSE
12218 l_term_date := l_trx_date;
12219
12220 END IF;
12221 */
12222
12223 -- rmunjulu
12224 IF l_quote_eff_date IS NULL THEN
12225 l_term_date := SYSDATE;
12226 ELSE
12227 l_term_date := l_quote_eff_date;
12228 END IF;
12229
12230 -- gboomina Bug 5215019 - Start
12231 -- Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup check accruals
12232 -- till quote eff date OR previous month last date
12233 OPEN check_accrual_previous_csr;
12234 FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
12235 CLOSE check_accrual_previous_csr;
12236
12237 IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
12238 l_accrual_adjst_date := l_term_date;
12239 ELSE
12240 l_accrual_adjst_date := LAST_DAY(TRUNC(l_term_date, 'MONTH')-1);
12241 END IF;
12242
12243 okl_accounting_util.get_period_info(l_accrual_adjst_date,l_period_name, l_start_date,l_end_date);
12244 -- gboomina Bug 5215019 - End
12245
12246 --check if streams required for reporting product
12247 IF l_rep_prod_streams_yn = 'Y' THEN
12248 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; --MGAAP 7263041
12249 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
12250 --OPEN line_reporting_csr(p_contract_line_id, l_end_date, l_stream_type_id); -- now passing l_end_date 26-Aug-2004 3849355
12251 OPEN line_csr(p_contract_line_id, l_end_date, l_stream_type_id); -- now passing l_end_date 26-Aug-2004 3849355
12252 FETCH line_csr INTO l_unearned_income;
12253 CLOSE line_csr;
12254 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
12255 ELSE
12256 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
12257 -- Start : Bug 6030917 : prasjain
12258 --added for prorating incase of partial unit termination
12259
12260 IF nvl(l_proration_factor,1) = 1 THEN
12261 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
12262 OPEN line_csr(p_contract_line_id,l_end_date, l_stream_type_id); -- now passing l_end_date 26-Aug-2004 3849355
12263 FETCH line_csr INTO l_unearned_income;
12264 CLOSE line_csr;
12265 ELSE
12266 --get curerncy code for the line
12267 OPEN currency_code_csr(p_contract_line_id);
12268 FETCH currency_code_csr INTO l_currency_code ;
12269 CLOSE currency_code_csr;
12270 --initializing l_parent_strm_rounded_tot_amt variable with 0
12271 l_parent_strm_rounded_tot_amt := 0;
12272
12273 FOR stream_element_rec IN stream_element_csr(p_contract_line_id, l_end_date, l_stream_type_id)
12274 LOOP
12275 --prorate the amount, to derive the parent stream amount
12276 l_parent_strm_amt := stream_element_rec.amount * l_proration_factor;
12277 --round amount with streams option for paren stream element amounts
12278 okl_accounting_util.round_amount(
12279 p_api_version => l_api_version,
12280 p_init_msg_list => l_init_msg_list,
12281 x_return_status => l_return_status,
12282 x_msg_count => l_msg_count,
12283 x_msg_data => l_msg_data,
12284 p_amount => l_parent_strm_amt,
12285 p_currency_code => l_currency_code,
12286 p_round_option => 'STM',
12287 x_rounded_amount => l_parent_strm_rounded_amt
12288 );
12289 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12290 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12291 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
12292 RAISE OKL_API.G_EXCEPTION_ERROR;
12293 END IF;
12294
12295 -- calculate the parent stream rounded total
12296 l_parent_strm_rounded_tot_amt := l_parent_strm_rounded_tot_amt
12297 + l_parent_strm_rounded_amt;
12298
12299 END LOOP;
12300 l_unearned_income := l_parent_strm_rounded_tot_amt;
12301 END IF;
12302 -- End : Bug 6030917 : prasjain
12303 END IF;
12304
12305
12306 RETURN NVL(l_unearned_income,0);
12307
12308 EXCEPTION
12309
12310 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
12311 IF line_csr%ISOPEN THEN
12312 CLOSE line_csr;
12313 END IF;
12314
12315 IF line_reporting_csr%ISOPEN THEN
12316 CLOSE line_reporting_csr;
12317 END IF;
12318
12319 -- Start : Bug 6030917 : prasjain
12320 IF currency_code_csr%ISOPEN THEN
12321 CLOSE currency_code_csr;
12322 END IF;
12323 IF stream_element_csr%ISOPEN THEN
12324 CLOSE stream_element_csr;
12325 END IF;
12326 -- End : Bug 6030917 : prasjain
12327
12328 RETURN NULL;
12329
12330 WHEN OTHERS THEN
12331
12332 -- Close open cursors
12333
12334 IF line_csr%ISOPEN THEN
12335 CLOSE line_csr;
12336 END IF;
12337
12338 IF line_reporting_csr%ISOPEN THEN
12339 CLOSE line_reporting_csr;
12340 END IF;
12341
12342 -- Start : Bug 6030917 : prasjain
12343 IF currency_code_csr%ISOPEN THEN
12344 CLOSE currency_code_csr;
12345 END IF;
12346 IF stream_element_csr%ISOPEN THEN
12347 CLOSE stream_element_csr;
12348 END IF;
12349 -- End : Bug 6030917 : prasjain
12350
12351 -- store SQL error message on message stack for caller
12352
12353 OKL_API.SET_MESSAGE (
12354 p_app_name => OKL_API.G_APP_NAME,
12355 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
12356 p_token1 => 'SQLCODE',
12357 p_token1_value => SQLCODE,
12358 p_token2 => 'SQLERRM',
12359 p_token2_value => SQLERRM);
12360
12361 RETURN null;
12362
12363 END line_future_income;
12364
12365 -- Start of Comments
12366 -- Function Name: Asset_Residual
12367 -- Description: Returns the Residual value for an asset
12368 -- Dependencies:
12369 -- Parameters: IN: p_contract_id, p_contract_line_id ,p_additional_paams(quote_id, kle_id)
12370 -- OUT: amount
12371 -- rmunjulu 3816891 created
12372 -- Version: 1.0
12373 -- End of Commnets
12374 ------------------------------------------------------------------------------
12375
12376 FUNCTION asset_residual(
12377 p_khr_id IN NUMBER,
12378 p_kle_id IN NUMBER)
12379 RETURN NUMBER IS
12380
12381 Expected_error EXCEPTION;
12382
12383 -- get the quote type
12384 CURSOR get_qte_type_csr (p_quote_id IN NUMBER) IS
12385 SELECT qte.qtp_code qtp_code
12386 FROM okl_trx_quotes_v qte
12387 WHERE qte.id = p_quote_id;
12388
12389 -- get asset niv from quote lines
12390 CURSOR get_asset_niv_csr (p_kle_id IN NUMBER, p_quote_id IN NUMBER) IS
12391 SELECT nvl(tql.asset_value,0) residual_value
12392 FROM okl_txl_quote_lines_v tql
12393 WHERE tql.qte_id = p_quote_id
12394 AND tql.qlt_code = 'AMCFIA'
12395 AND tql.kle_id = p_kle_id;
12396
12397 -- get deprn cost from off-lease trn (SECHAWLA)
12398 CURSOR get_deprn_cost_csr (p_kle_id IN NUMBER) IS
12399 SELECT depreciation_cost, ID
12400 FROM okl_txl_assets_b
12401 WHERE kle_id = p_kle_id
12402 AND tal_type = 'AML'
12403 AND ROWNUM < 2;
12404
12405 l_quote_id NUMBER;
12406 l_asset_residual NUMBER;
12407 l_quote_type VARCHAR2(300);
12408 l_residual NUMBER;
12409 l_corp_book_cost NUMBER;
12410
12411 BEGIN
12412
12413 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
12414 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
12415 LOOP
12416 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
12417 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
12418 END IF;
12419 END LOOP;
12420 END IF;
12421
12422 IF l_quote_id IS NULL
12423 OR l_quote_id = OKL_API.G_MISS_NUM
12424 OR p_khr_id IS NULL
12425 OR p_khr_id = OKL_API.G_MISS_NUM
12426 OR p_kle_id IS NULL
12427 OR p_kle_id = OKL_API.G_MISS_NUM THEN
12428
12429 RAISE Expected_error;
12430 END IF;
12431
12432 -- get the quote type
12433 OPEN get_qte_type_csr(l_quote_id);
12434 FETCH get_qte_type_csr INTO l_quote_type;
12435 CLOSE get_qte_type_csr;
12436
12437 IF l_quote_type IN ( 'TER_MAN_PURCHASE',
12438 'TER_PURCHASE',
12439 'TER_RECOURSE',
12440 'TER_ROLL_PURCHASE') THEN
12441
12442 -- Get the asset NIV from the quoted quote line
12443 FOR get_asset_niv_rec IN get_asset_niv_csr (p_kle_id,l_quote_id ) LOOP
12444
12445 l_asset_residual := get_asset_niv_rec.residual_value;
12446 END LOOP;
12447
12448 ELSE -- termination without purchase
12449
12450 -- Get the Off-lease trn value
12451 FOR get_deprn_cost_rec IN get_deprn_cost_csr (p_kle_id ) LOOP
12452
12453 l_asset_residual := get_deprn_cost_rec.depreciation_cost;
12454 END LOOP;
12455 END IF;
12456
12457 IF l_asset_residual IS NULL THEN
12458
12459 l_asset_residual := 0;
12460 END IF;
12461
12462 RETURN l_asset_residual;
12463
12464 EXCEPTION
12465
12466 WHEN Expected_error THEN
12467
12468 RETURN 0;
12469 WHEN OTHERS THEN
12470 -- store SQL error message on message stack for caller
12471 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
12472 p_msg_name => 'OKL_UNEXPECTED_ERROR',
12473 p_token1 => 'OKL_SQLCODE',
12474 p_token1_value => SQLCODE,
12475 p_token2 => 'OKL_SQLERRM',
12476 p_token2_value => SQLERRM);
12477 RETURN NULL;
12478 END asset_residual;
12479
12480 -- rfedane 4058562
12481 FUNCTION principal_balance_fee_line (p_contract_id IN NUMBER,
12482 p_contract_line_id IN NUMBER) RETURN NUMBER IS
12483
12484 l_fee_payment_id NUMBER;
12485 l_quote_eff_date DATE;
12486 l_date DATE;
12487 l_prin_bal_id NUMBER;
12488 l_balance NUMBER;
12489 l_return_status VARCHAR2(1);
12490 l_prog_name VARCHAR2(61) := 'OKL_SEEDED_FUNCTIONS_PVT.principal_balance_fee_line';
12491
12492 CURSOR c_balance (p_sty_id NUMBER, p_date DATE) IS
12493 SELECT
12494 sel.amount
12495 FROM
12496 okl_strm_elements sel,
12497 okl_streams stm
12498 WHERE
12499 stm.sty_id = p_sty_id
12500 AND stm.khr_id = p_contract_id
12501 AND stm.kle_id = p_contract_line_id
12502 AND sel.stream_element_date <= p_date
12503 AND stm.say_code = 'CURR'
12504 AND stm.id = sel.stm_id
12505 ORDER BY sel.stream_element_date DESC;
12506
12507 BEGIN
12508
12509 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
12510 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST LOOP
12511
12512 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.EXISTS(i) THEN
12513
12514 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_effective_from_date'
12515 AND okl_execute_formula_pub.g_additional_parameters(i).value IS NOT NULL THEN
12516 l_quote_eff_date := okl_execute_formula_pub.g_additional_parameters(i).value;
12517 END IF;
12518
12519 END IF;
12520 END LOOP;
12521 END IF;
12522
12523 IF l_quote_eff_date IS NOT NULL THEN
12524 l_date := l_quote_eff_date;
12525 ELSE
12526 l_date := TRUNC(SYSDATE);
12527 END IF;
12528
12529 SELECT TO_NUMBER(laslh.object1_id1)
12530 INTO l_fee_payment_id
12531 FROM okc_rule_groups_b lalevl,
12532 okc_rules_b laslh
12533 WHERE lalevl.cle_id = p_contract_line_id
12534 AND lalevl.rgd_code = 'LALEVL'
12535 AND lalevl.id = laslh.rgp_id
12536 AND laslh.rule_information_category = 'LASLH';
12537
12538 OKL_STREAMS_UTIL.get_dependent_stream_type(
12539 p_khr_id => p_contract_id,
12540 p_primary_sty_id => l_fee_payment_id,
12541 p_dependent_sty_purpose => 'PRINCIPAL_BALANCE',
12542 x_return_status => l_return_status,
12543 x_dependent_sty_id => l_prin_bal_id);
12544
12545 OPEN c_balance (p_sty_id => l_prin_bal_id, p_date => l_date);
12546 FETCH c_balance INTO l_balance;
12547 CLOSE c_balance;
12548
12549 RETURN l_balance;
12550
12551 EXCEPTION
12552
12553 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12554 RAISE;
12555
12556 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
12557 RAISE;
12558
12559 WHEN OTHERS THEN
12560
12561 OKL_API.SET_MESSAGE (p_app_name => 'OKL',
12562 p_msg_name => 'OKL_DB_ERROR',
12563 p_token1 => 'PROG_NAME',
12564 p_token1_value => l_prog_name,
12565 p_token2 => 'SQLCODE',
12566 p_token2_value => sqlcode,
12567 p_token3 => 'SQLERRM',
12568 p_token3_value => sqlerrm);
12569
12570 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12571
12572 END principal_balance_fee_line;
12573
12574
12575 -- rfedane 4058562
12576 FUNCTION principal_balance_financed (p_contract_id IN NUMBER,
12577 p_contract_line_id IN NUMBER) RETURN NUMBER IS
12578
12579 CURSOR c_fin_fees IS
12580 SELECT cle.id
12581 FROM
12582 okc_k_lines_b cle,
12583 okl_k_lines kle,
12584 okc_k_headers_b chr
12585 WHERE
12586 chr.id = p_contract_id
12587 AND cle.chr_id = chr.id
12588 AND cle.sts_code = chr.sts_code
12589 AND cle.id = kle.id
12590 AND kle.fee_type = 'FINANCED';
12591
12592 l_total_balance NUMBER := 0;
12593 l_prog_name VARCHAR2(61) := 'OKL_SEEDED_FUNCTIONS_PVT.principal_balance_financed';
12594
12595 BEGIN
12596
12597 FOR l_fin_fee IN c_fin_fees LOOP
12598
12599 l_total_balance := l_total_balance + NVL(principal_balance_fee_line(p_contract_id => p_contract_id, p_contract_line_id => l_fin_fee.id), 0);
12600
12601 END LOOP;
12602
12603 RETURN l_total_balance;
12604
12605 EXCEPTION
12606
12607 WHEN OTHERS THEN
12608
12609 OKL_API.SET_MESSAGE (p_app_name => 'OKL',
12610 p_msg_name => 'OKL_DB_ERROR',
12611 p_token1 => 'PROG_NAME',
12612 p_token1_value => l_prog_name,
12613 p_token2 => 'SQLCODE',
12614 p_token2_value => sqlcode,
12615 p_token3 => 'SQLERRM',
12616 p_token3_value => sqlerrm);
12617
12618 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12619
12620 END principal_balance_financed;
12621
12622
12623 -- rfedane 4058562
12624 FUNCTION principal_balance_rollover (p_contract_id IN NUMBER,
12625 p_contract_line_id IN NUMBER) RETURN NUMBER IS
12626
12627 CURSOR c_fin_fees IS
12628 SELECT cle.id
12629 FROM
12630 okc_k_lines_b cle,
12631 okl_k_lines kle,
12632 okc_k_headers_b chr
12633 WHERE
12634 chr.id = p_contract_id
12635 AND cle.chr_id = chr.id
12636 AND cle.sts_code = chr.sts_code
12637 AND cle.id = kle.id
12638 AND kle.fee_type = 'ROLLOVER';
12639
12640 l_total_balance NUMBER := 0;
12641 l_prog_name VARCHAR2(61) := 'OKL_SEEDED_FUNCTIONS_PVT.principal_balance_rollover';
12642
12643 BEGIN
12644
12645 FOR l_fin_fee IN c_fin_fees LOOP
12646
12647 l_total_balance := l_total_balance + NVL(principal_balance_fee_line(p_contract_id => p_contract_id, p_contract_line_id => l_fin_fee.id), 0);
12648
12649 END LOOP;
12650
12651 RETURN l_total_balance;
12652
12653 EXCEPTION
12654
12655 WHEN OTHERS THEN
12656
12657 OKL_API.SET_MESSAGE (p_app_name => 'OKL',
12658 p_msg_name => 'OKL_DB_ERROR',
12659 p_token1 => 'PROG_NAME',
12660 p_token1_value => l_prog_name,
12661 p_token2 => 'SQLCODE',
12662 p_token2_value => sqlcode,
12663 p_token3 => 'SQLERRM',
12664 p_token3_value => sqlerrm);
12665
12666 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12667
12668 END principal_balance_rollover;
12669
12670 -- rmunjulu 4299668 Added -- modified to call line_accumulated_deprn
12671 FUNCTION asset_net_book_value(
12672 p_khr_id IN NUMBER,
12673 p_kle_id IN NUMBER)
12674 RETURN NUMBER IS
12675
12676 Expected_error EXCEPTION;
12677
12678 l_quote_id NUMBER;
12679 l_nbv NUMBER;
12680
12681 CURSOR get_quote_date_csr (p_qte_id IN NUMBER) IS
12682 SELECT qte.date_effective_from
12683 FROM okl_trx_quotes_b qte
12684 WHERE qte.id = p_qte_id;
12685
12686 l_quote_eff_date DATE;
12687
12688 CURSOR get_asset_cost_csr (p_kle_id IN NUMBER) IS
12689 SELECT nvl(fab.cost,0) current_cost
12690 FROM fa_books fab,
12691 fa_book_controls fbc,
12692 okc_k_items_v itm,
12693 okc_k_lines_b kle,
12694 okc_line_styles_v lse
12695 WHERE fbc.book_class = 'CORPORATE'
12696 AND fab.book_type_code = fbc.book_type_code
12697 AND fab.asset_id = itm.object1_id1
12698 AND itm.cle_id = kle.id
12699 AND kle.cle_id = p_kle_id
12700 AND kle.lse_id = lse.id
12701 AND lse.lty_code = 'FIXED_ASSET'
12702 AND fab.transaction_header_id_out IS NULL;
12703
12704 l_asset_deprn NUMBER;
12705 l_current_cost NUMBER;
12706 l_asset_net_book_value NUMBER;
12707
12708 BEGIN
12709
12710 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
12711 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
12712 LOOP
12713 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
12714 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
12715 END IF;
12716 END LOOP;
12717 END IF;
12718
12719 IF p_khr_id IS NULL
12720 OR p_khr_id = OKL_API.G_MISS_NUM
12721 OR p_kle_id IS NULL
12722 OR p_kle_id = OKL_API.G_MISS_NUM THEN
12723
12724 RAISE Expected_error;
12725 END IF;
12726
12727 IF l_quote_id IS NOT NULL
12728 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
12729
12730 OPEN get_quote_date_csr (l_quote_id);
12731 FETCH get_quote_date_csr INTO l_quote_eff_date;
12732 CLOSE get_quote_date_csr;
12733
12734 ELSE
12735
12736 l_quote_eff_date := sysdate;
12737
12738 END IF;
12739
12740 l_asset_deprn := line_accumulated_deprn(
12741 p_contract_id => p_khr_id,
12742 p_contract_line_id => p_kle_id);
12743
12744
12745 --OPEN get_asset_cost_csr (p_kle_id); -- rmunjulu modified
12746 --FETCH get_asset_cost_csr INTO l_current_cost;
12747 --CLOSE get_asset_cost_csr;
12748
12749 -- Update to mainline only -- gets converted current cost amount
12750 l_current_cost := line_asset_cost(
12751 p_contract_id => p_khr_id,
12752 p_contract_line_id => p_kle_id);
12753
12754 l_asset_net_book_value := l_current_cost - l_asset_deprn;
12755
12756 RETURN l_asset_net_book_value;
12757
12758 EXCEPTION
12759
12760 WHEN Expected_error THEN
12761
12762 IF get_quote_date_csr%ISOPEN THEN
12763 CLOSE get_quote_date_csr;
12764 END IF;
12765 IF get_asset_cost_csr%ISOPEN THEN
12766 CLOSE get_asset_cost_csr;
12767 END IF;
12768 RETURN Null;
12769 WHEN OTHERS THEN
12770 IF get_quote_date_csr%ISOPEN THEN
12771 CLOSE get_quote_date_csr;
12772 END IF;
12773 IF get_asset_cost_csr%ISOPEN THEN
12774 CLOSE get_asset_cost_csr;
12775 END IF;
12776 -- store SQL error message on message stack for caller
12777 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
12778 p_msg_name => 'OKL_UNEXPECTED_ERROR',
12779 p_token1 => 'OKL_SQLCODE',
12780 p_token1_value => SQLCODE,
12781 p_token2 => 'OKL_SQLERRM',
12782 p_token2_value => SQLERRM);
12783 RETURN NULL;
12784 END asset_net_book_value;
12785 -- varangan Added for Bug#5036582 start
12786 ----------------------------------------------------------------------------------------------------
12787 -- Start of Comments
12788 -- Created By: Vaijayanthi Ranganathan (varangan)
12789 -- Function Name: Contract Unpaid Invoices
12790 -- Description: Returns the sum of all unpaid invoices for leases/loans,
12791 -- including taxes, with due date prior to current system date
12792 -- Dependencies:
12793 -- Parameters: contract id,contract line id
12794 -- Version: 1.0
12795 -- End of Commnets
12796 ----------------------------------------------------------------------------------------------------
12797
12798 FUNCTION contract_unpaid_invoices(
12799 p_contract_id IN NUMBER,
12800 p_contract_line_id IN NUMBER)
12801 RETURN NUMBER IS
12802 --dkagrawa changed the follwong cursor for billing impact
12803 --changed query for Bug#6826370
12804 CURSOR cr_unpaid_invoices(c_contract_id IN NUMBER) IS
12805 SELECT nvl(sum(amount_remaining),0)
12806 FROM okl_cs_bpd_inv_dtl_v
12807 WHERE chr_id = c_contract_id
12808 AND due_date <= SYSDATE;
12809
12810 l_unpaid_invoices NUMBER;
12811
12812 BEGIN
12813 OPEN cr_unpaid_invoices (p_contract_id);
12814 FETCH cr_unpaid_invoices INTO l_unpaid_invoices;
12815 CLOSE cr_unpaid_invoices;
12816
12817 RETURN l_unpaid_invoices;
12818 EXCEPTION
12819 WHEN OTHERS THEN
12820 IF cr_unpaid_invoices%ISOPEN THEN
12821 CLOSE cr_unpaid_invoices;
12822 END IF;
12823 -- store SQL error message on message stack for caller
12824 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
12825 p_msg_name => 'OKL_UNEXPECTED_ERROR',
12826 p_token1 => 'OKL_SQLCODE',
12827 p_token1_value => SQLCODE,
12828 p_token2 => 'OKL_SQLERRM',
12829 p_token2_value => SQLERRM);
12830 RETURN NULL;
12831 END contract_unpaid_invoices;
12832
12833 ----------------------------------------------------------------------------------------------------
12834 -- Start of Comments
12835 -- Created By: Vaijayanthi Ranganathan (varangan)
12836 -- Function Name: Contract Unbilled Streams amount
12837 -- Description: Returns the sum of all Unbilled Streams for leases/loans,
12838 -- including taxes, with due date prior to current system date
12839 -- Dependencies:
12840 -- Parameters: contract id,contract line id
12841 -- Version: 1.0
12842 -- End of Commnets
12843 ----------------------------------------------------------------------------------------------------
12844 FUNCTION contract_unbilled_streams(
12845 p_contract_id IN NUMBER,
12846 p_contract_line_id IN NUMBER)
12847 RETURN NUMBER IS
12848
12849 CURSOR cr_unbilled_streams(c_contract_id IN NUMBER) IS
12850 SELECT NVL(sum(sel.amount),0)
12851 FROM okl_strm_elements sel,
12852 okl_streams stm,
12853 okl_strm_type_b sty
12854 WHERE stm.say_code = 'CURR'
12855 AND stm.active_yn = 'Y'
12856 AND stm.purpose_code is NULL
12857 AND stm.khr_id = c_contract_id
12858 AND sty.id = stm.sty_id
12859 AND sty.billable_yn = 'Y'
12860 AND sel.stm_id = stm.id
12861 AND date_billed is null
12862 AND stream_element_date <= SYSDATE;
12863
12864 l_unbilled_streams NUMBER;
12865
12866 BEGIN
12867 OPEN cr_unbilled_streams (p_contract_id);
12868 FETCH cr_unbilled_streams INTO l_unbilled_streams;
12869 CLOSE cr_unbilled_streams;
12870
12871 RETURN l_unbilled_streams;
12872 EXCEPTION
12873 WHEN OTHERS THEN
12874 IF cr_unbilled_streams%ISOPEN THEN
12875 CLOSE cr_unbilled_streams;
12876 END IF;
12877 -- store SQL error message on message stack for caller
12878 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
12879 p_msg_name => 'OKL_UNEXPECTED_ERROR',
12880 p_token1 => 'OKL_SQLCODE',
12881 p_token1_value => SQLCODE,
12882 p_token2 => 'OKL_SQLERRM',
12883 p_token2_value => SQLERRM);
12884 RETURN NULL;
12885 END contract_unbilled_streams;
12886 -- varangan Bug#5036582 end
12887
12888
12889 -- rmunjulu VENDOR_RESIDUAL_SHARE PROJECT
12890 FUNCTION vendor_residual_share_amount(
12891 p_khr_id IN NUMBER,
12892 p_kle_id IN NUMBER)
12893 RETURN NUMBER IS
12894
12895 CURSOR get_asset_residual_csr (p_kle_id IN NUMBER) IS
12896 SELECT nvl(KLE.residual_value,0) residual_value
12897 FROM OKL_K_LINES KLE
12898 WHERE KLE.id = p_kle_id;
12899
12900 CURSOR get_asset_sales_proceeds_csr (p_retirement_id IN NUMBER) IS
12901 SELECT nvl(RET.proceeds_of_sale,0) sales_proceeds
12902 FROM --OKX_ASSET_LINES_V OAL,
12903 FA_RETIREMENTS RET
12904 WHERE RET.RETIREMENT_ID = p_retirement_id;
12905 --WHERE OAL.parent_line_id = p_kle_id
12906 --AND OAL.corporate_book IS NOT NULL
12907 --AND OAL.asset_id = FAR.asset_id
12908 --AND OAL.corporate_book = FAR.book_type_code;
12909
12910 EXPECTED_ERROR EXCEPTION;
12911
12912 l_sales_proceeds NUMBER;
12913 l_share_percent NUMBER;
12914 l_residual_value NUMBER;
12915 l_share_amount NUMBER;
12916 l_currency_code VARCHAR2(15);
12917 l_contract_currency_code VARCHAR2(15);
12918 l_currency_conversion_type VARCHAR2(30);
12919 l_currency_conversion_rate NUMBER;
12920 l_currency_conversion_date DATE;
12921 l_converted_sales_proceeds NUMBER;
12922 l_return_status VARCHAR2(3);
12923 l_retirement_id NUMBER;
12924
12925 BEGIN
12926
12927 IF p_khr_id IS NULL
12928 OR p_khr_id = OKL_API.G_MISS_NUM
12929 OR p_kle_id IS NULL
12930 OR p_kle_id = OKL_API.G_MISS_NUM THEN
12931
12932 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
12933 p_msg_name => 'OKL_INVALID_VALUE',
12934 p_token1 => 'COL_NAME',
12935 p_token1_value => 'P_KHR_ID OR P_KLE_ID');
12936
12937 RAISE EXPECTED_ERROR;
12938 END IF;
12939
12940 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
12941 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
12942 LOOP
12943 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'retirement_id' THEN
12944 l_retirement_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
12945 END IF;
12946 END LOOP;
12947 END IF;
12948
12949 IF l_retirement_id IS NULL
12950 OR l_retirement_id = OKL_API.G_MISS_NUM THEN
12951
12952 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
12953 p_msg_name => 'OKL_INVALID_VALUE',
12954 p_token1 => 'COL_NAME',
12955 p_token1_value => 'retirement_id');
12956
12957 RAISE EXPECTED_ERROR;
12958 END IF;
12959
12960 l_sales_proceeds := 0;
12961 l_residual_value := 0;
12962 l_share_percent := 0;
12963 l_share_amount := 0;
12964
12965 OPEN get_asset_residual_csr (p_kle_id);
12966 FETCH get_asset_residual_csr INTO l_residual_value;
12967 CLOSE get_asset_residual_csr;
12968
12969 -- get sales proceeds for the retirement id
12970 OPEN get_asset_sales_proceeds_csr (l_retirement_id);
12971 FETCH get_asset_sales_proceeds_csr INTO l_sales_proceeds;
12972 CLOSE get_asset_sales_proceeds_csr;
12973
12974 -- Get the contract currency code
12975 l_currency_code := OKL_AM_UTIL_PVT.get_chr_currency(p_khr_id);
12976
12977 -- Convert sales_proceeds from functional_currency to contract_currency
12978 OKL_ACCOUNTING_UTIL.convert_to_contract_currency(
12979 p_khr_id => p_khr_id,
12980 p_from_currency => l_currency_code,
12981 p_transaction_date => sysdate,
12982 p_amount => l_sales_proceeds,
12983 x_return_status => l_return_status,
12984 x_contract_currency => l_contract_currency_code,
12985 x_currency_conversion_type => l_currency_conversion_type,
12986 x_currency_conversion_rate => l_currency_conversion_rate,
12987 x_currency_conversion_date => l_currency_conversion_date,
12988 x_converted_amount => l_converted_sales_proceeds);
12989
12990 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
12991 RAISE EXPECTED_ERROR;
12992 END IF;
12993
12994 l_share_amount := nvl(l_converted_sales_proceeds,0) - nvl(l_residual_value,0);
12995
12996 RETURN l_share_amount; -- has no share percent included, percent will be applied later
12997
12998 EXCEPTION
12999
13000 WHEN EXPECTED_ERROR THEN
13001
13002 IF get_asset_residual_csr%ISOPEN THEN
13003 CLOSE get_asset_residual_csr;
13004 END IF;
13005
13006 IF get_asset_sales_proceeds_csr%ISOPEN THEN
13007 CLOSE get_asset_sales_proceeds_csr;
13008 END IF;
13009
13010 RETURN NULL;
13011
13012 WHEN OTHERS THEN
13013
13014 IF get_asset_residual_csr%ISOPEN THEN
13015 CLOSE get_asset_residual_csr;
13016 END IF;
13017
13018 IF get_asset_sales_proceeds_csr%ISOPEN THEN
13019 CLOSE get_asset_sales_proceeds_csr;
13020 END IF;
13021
13022 -- store SQL error message on message stack for caller
13023 Okl_Api.Set_Message(p_app_name => OKL_API.G_APP_NAME,
13024 p_msg_name => 'OKL_UNEXPECTED_ERROR',
13025 p_token1 => 'OKL_SQLCODE',
13026 p_token1_value => SQLCODE,
13027 p_token2 => 'OKL_SQLERRM',
13028 p_token2_value => SQLERRM);
13029 RETURN NULL;
13030 END vendor_residual_share_amount;
13031
13032 -- rmunjulu LOANS_ENHANCEMENTS PROJECT
13033 FUNCTION loan_asset_prin_bal(
13034 p_khr_id IN NUMBER,
13035 p_kle_id IN NUMBER)
13036 RETURN NUMBER IS
13037
13038 CURSOR get_quote_date_csr (p_qte_id IN NUMBER) IS
13039 SELECT qte.date_effective_from
13040 FROM okl_trx_quotes_b qte
13041 WHERE qte.id = p_qte_id;
13042
13043 EXPECTED_ERROR EXCEPTION;
13044
13045 l_return_status VARCHAR2(3);
13046 l_quote_id NUMBER;
13047 l_quote_eff_from DATE;
13048 l_prin_bal NUMBER;
13049
13050 BEGIN
13051
13052 IF p_khr_id IS NULL
13053 OR p_khr_id = OKL_API.G_MISS_NUM
13054 OR p_kle_id IS NULL
13055 OR p_kle_id = OKL_API.G_MISS_NUM THEN
13056
13057 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
13058 p_msg_name => 'OKL_INVALID_VALUE',
13059 p_token1 => 'COL_NAME',
13060 p_token1_value => 'P_KHR_ID OR P_KLE_ID');
13061
13062 RAISE EXPECTED_ERROR;
13063 END IF;
13064
13065 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
13066 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
13067 LOOP
13068 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
13069 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
13070 END IF;
13071 END LOOP;
13072 END IF;
13073
13074 IF l_quote_id IS NULL THEN
13075
13076 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
13077 p_msg_name => 'OKL_INVALID_VALUE',
13078 p_token1 => 'COL_NAME',
13079 p_token1_value => 'quote_id');
13080
13081 RAISE EXPECTED_ERROR;
13082 END IF;
13083
13084 OPEN get_quote_date_csr (l_quote_id);
13085 FETCH get_quote_date_csr INTO l_quote_eff_from;
13086 CLOSE get_quote_date_csr;
13087
13088
13089 -- call util to get actual principal balance
13090 l_prin_bal := OKL_VARIABLE_INT_UTIL_PVT.get_principal_bal(
13091 x_return_status => l_return_status,
13092 p_khr_id => p_khr_id,
13093 p_kle_id => p_kle_id,
13094 p_date => l_quote_eff_from);
13095
13096 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
13097 RAISE EXPECTED_ERROR;
13098 END IF;
13099
13100
13101 RETURN l_prin_bal;
13102
13103 EXCEPTION
13104
13105 WHEN EXPECTED_ERROR THEN
13106
13107 IF get_quote_date_csr%ISOPEN THEN
13108 CLOSE get_quote_date_csr;
13109 END IF;
13110
13111 RETURN NULL;
13112
13113 WHEN OTHERS THEN
13114
13115 IF get_quote_date_csr%ISOPEN THEN
13116 CLOSE get_quote_date_csr;
13117 END IF;
13118
13119 -- store SQL error message on message stack for caller
13120 Okl_Api.Set_Message(p_app_name => OKL_API.G_APP_NAME,
13121 p_msg_name => 'OKL_UNEXPECTED_ERROR',
13122 p_token1 => 'OKL_SQLCODE',
13123 p_token1_value => SQLCODE,
13124 p_token2 => 'OKL_SQLERRM',
13125 p_token2_value => SQLERRM);
13126 RETURN NULL;
13127 END loan_asset_prin_bal;
13128
13129 -- rmunjulu LOANS_ENHANCEMENTS PROJECT
13130 --SECHAWLA 30-NOV-05 4753429 : Modified to return perdiem amount for only LOANS/REVOLVING-LOANS
13131 --SECHAWLA 03-JAN-06 4920149 : Treat interest rate returned by the API OKL_VARIABLE_INT_UTIL_PVT
13132 -- as a percentage
13133 FUNCTION quote_perdiem_amount(
13134 p_khr_id IN NUMBER,
13135 p_kle_id IN NUMBER)
13136 RETURN NUMBER IS
13137
13138
13139
13140 CURSOR get_tot_outstanding_bal_csr (p_qte_id IN NUMBER) IS
13141 SELECT sum(TQL.asset_value) outstanding_bal
13142 FROM OKL_TXL_QUOTE_LINES_B TQL
13143 WHERE TQL.qte_id = p_qte_id
13144 AND TQL.qlt_code = 'AMCFIA';
13145
13146 CURSOR get_quote_date_csr (p_qte_id IN NUMBER) IS
13147 SELECT qte.date_effective_from
13148 FROM okl_trx_quotes_b qte
13149 WHERE qte.id = p_qte_id;
13150
13151 CURSOR get_base_interest_rate_csr (p_khr_id IN NUMBER) IS
13152 SELECT base_rate
13153 FROM okl_k_rate_params_v
13154 WHERE khr_id = p_khr_id;
13155
13156 --SECHAWLA 30-NOV-05 4753429 : New declarations begin
13157 CURSOR l_dealtype_csr (cp_khr_id IN NUMBER) IS
13158 SELECT deal_type
13159 FROM OKL_K_HEADERS
13160 WHERE id = cp_khr_id;
13161
13162 l_deal_type VARCHAR2(30);
13163 --SECHAWLA 30-NOV-05 4753429 : New declarations end
13164
13165 EXPECTED_ERROR EXCEPTION;
13166
13167 l_outstanding_bal NUMBER;
13168 l_return_status VARCHAR2(3);
13169 l_quote_id NUMBER;
13170 l_quote_eff_from DATE;
13171 l_interest_rate NUMBER;
13172 l_quote_perdiem NUMBER;
13173
13174 IsLeapYear BOOLEAN;
13175 iYear NUMBER;
13176
13177 l_days_in_year NUMBER;
13178 --gboomina Bug#4703521 27-Oct-05 start
13179 lx_days_in_month OKL_K_RATE_PARAMS.days_in_a_month_code%type; --gboomina Bug#4703521 27-Oct-05 - changed VARCHAR2(5) to OKL_K_RATE_PARAMS.days_in_a_month_code%type
13180 lx_days_in_year OKL_K_RATE_PARAMS.days_in_a_month_code%type; --gboomina Bug#4703521 27-Oct-05 - changed VARCHAR2(5) to OKL_K_RATE_PARAMS.days_in_a_month_code%type
13181 --gboomina Bug#4703521 27-Oct-05 end
13182 lx_return_status VARCHAR2(3);
13183
13184
13185
13186 BEGIN
13187
13188 --SECHAWLA 30-NOV-05 4753429 : begin
13189
13190 l_quote_perdiem := 0;
13191
13192 OPEN l_dealtype_csr(p_khr_id);
13193 FETCH l_dealtype_csr INTO l_deal_type;
13194 CLOSE l_dealtype_csr;
13195
13196 IF l_deal_type LIKE 'LOAN%' THEN
13197 --SECHAWLA 30-NOV-05 4753429 : end
13198
13199 l_outstanding_bal := 0;
13200
13201
13202
13203 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
13204 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
13205 LOOP
13206 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
13207 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
13208 END IF;
13209 END LOOP;
13210 END IF;
13211
13212 IF l_quote_id IS NULL THEN
13213
13214 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
13215 p_msg_name => 'OKL_INVALID_VALUE',
13216 p_token1 => 'COL_NAME',
13217 p_token1_value => 'QUOTE_ID');
13218
13219 RAISE EXPECTED_ERROR;
13220 END IF;
13221
13222 OPEN get_tot_outstanding_bal_csr (l_quote_id);
13223 FETCH get_tot_outstanding_bal_csr INTO l_outstanding_bal;
13224 CLOSE get_tot_outstanding_bal_csr;
13225
13226 OPEN get_quote_date_csr (l_quote_id);
13227 FETCH get_quote_date_csr INTO l_quote_eff_from;
13228 CLOSE get_quote_date_csr;
13229
13230 -- get effective interest rate
13231 l_interest_rate := OKL_VARIABLE_INT_UTIL_PVT.get_effective_int_rate(
13232 x_return_status => l_return_status,
13233 p_khr_id => p_khr_id,
13234 p_effective_date => l_quote_eff_from);
13235
13236 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
13237 RAISE EXPECTED_ERROR;
13238 END IF;
13239
13240 -- use utility for getting the days (from SGT or Contract)
13241 OKL_PRICING_UTILS_PVT.get_day_convention(
13242 p_id => p_khr_id, -- ID of the contract/quote
13243 p_source => 'ESG', -- 'ESG'/'ISG' are acceptable values
13244 x_days_in_month => lx_days_in_month,
13245 x_days_in_year => lx_days_in_year,
13246 x_return_status => lx_return_status);
13247
13248 IF lx_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
13249 RAISE EXPECTED_ERROR;
13250 END IF;
13251
13252 IF lx_days_in_year = 'ACTUAL' THEN
13253
13254 -- get year of termination
13255 iYear := to_number(substr(to_char(trunc(l_quote_eff_from),'YYYY/DD/MON'),1,4));
13256
13257 -- check if leap year
13258 If (iYear Mod 4 = 0) And
13259 ((iYear Mod 100 <> 0) Or (iYear Mod 400 = 0)) Then
13260 IsLeapYear := True;
13261 Else
13262 IsLeapYear := False;
13263 End If;
13264
13265 IF IsLeapYear THEN
13266 l_days_in_year := 366;
13267 ELSE
13268 l_days_in_year := 365;
13269 END IF;
13270
13271 ELSE
13272 l_days_in_year := to_number(lx_days_in_year);
13273 END IF;
13274
13275 IF l_days_in_year IS NULL OR l_days_in_year = 0 THEN
13276 l_days_in_year := 365;
13277 END IF;
13278
13279 --l_quote_perdiem := nvl(l_outstanding_bal,0) * nvl(l_interest_rate,0) /l_days_in_year;
13280 -- SECHAWLA 03-JAN-06 4920149 l_interest_rate is a percentage
13281 l_quote_perdiem := nvl(l_outstanding_bal,0) * nvl((l_interest_rate/100),0) /l_days_in_year;
13282 END IF; --SECHAWLA 30-NOV-05 4753429
13283
13284 RETURN l_quote_perdiem;
13285
13286 EXCEPTION
13287
13288 WHEN EXPECTED_ERROR THEN
13289
13290 IF get_tot_outstanding_bal_csr%ISOPEN THEN
13291 CLOSE get_tot_outstanding_bal_csr;
13292 END IF;
13293
13294 IF get_quote_date_csr%ISOPEN THEN
13295 CLOSE get_quote_date_csr;
13296 END IF;
13297
13298 --SECHAWLA 30-NOV-05 4753429 : Added
13299 IF l_dealtype_csr%ISOPEN THEN
13300 CLOSE l_dealtype_csr;
13301 END IF;
13302
13303 RETURN NULL;
13304
13305 WHEN OTHERS THEN
13306
13307 IF get_tot_outstanding_bal_csr%ISOPEN THEN
13308 CLOSE get_tot_outstanding_bal_csr;
13309 END IF;
13310
13311 IF get_quote_date_csr%ISOPEN THEN
13312 CLOSE get_quote_date_csr;
13313 END IF;
13314
13315 --SECHAWLA 30-NOV-05 4753429 : Added
13316 IF l_dealtype_csr%ISOPEN THEN
13317 CLOSE l_dealtype_csr;
13318 END IF;
13319
13320 -- store SQL error message on message stack for caller
13321 Okl_Api.Set_Message(p_app_name => OKL_API.G_APP_NAME,
13322 p_msg_name => 'OKL_UNEXPECTED_ERROR',
13323 p_token1 => 'OKL_SQLCODE',
13324 p_token1_value => SQLCODE,
13325 p_token2 => 'OKL_SQLERRM',
13326 p_token2_value => SQLERRM);
13327 RETURN NULL;
13328 END quote_perdiem_amount;
13329
13330 -- sjalasut, Rebook Change Control Enhancement START
13331
13332 -- function that returns the sum of unbilled RENT for all active assets on the rebook copy of the contract
13333 FUNCTION cont_rbk_unbilled_receivables(p_contract_id okc_k_headers_b.id%TYPE
13334 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
13335
13336 -- get all unbilled receivables for all ACTIVE assets
13337 CURSOR cle_rents_csr(cp_contract_id okc_k_headers_b.id%TYPE) IS
13338 SELECT NVL(SUM(sele.amount),0)
13339 FROM okl_strm_elements sele
13340 ,okl_streams str
13341 ,okl_strm_type_v sty
13342 ,okc_k_lines_v line
13343 ,okc_statuses_b sts
13344 ,okc_line_styles_b style
13345 WHERE sele.stm_id = str.id
13346 AND str.sty_id = sty.id
13347 AND sty.stream_type_purpose = 'RENT'
13348 AND str.say_code = 'CURR'
13349 AND str.active_yn = 'Y'
13350 AND str.purpose_code IS NULL
13351 AND sele.date_billed IS NULL
13352 AND line.chr_id = str.khr_id
13353 AND line.id = str.kle_id
13354 AND line.lse_id = style.id
13355 AND style.lty_code = 'FREE_FORM1'
13356 AND line.sts_code = sts.code
13357 AND sts.ste_code = 'ACTIVE'
13358 AND str.khr_id = cp_contract_id;
13359 lv_rent_assets NUMBER;
13360
13361 lv_unbilled_recv NUMBER;
13362 BEGIN
13363 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
13364 -- initialize
13365 lv_unbilled_recv := 0;
13366 lv_rent_assets := 0;
13367
13368 -- ASSET level RENTS
13369 OPEN cle_rents_csr(cp_contract_id => p_contract_id); FETCH cle_rents_csr INTO lv_rent_assets;
13370 CLOSE cle_rents_csr;
13371
13372 lv_unbilled_recv := lv_rent_assets;
13373 END IF;
13374 RETURN lv_unbilled_recv;
13375 EXCEPTION
13376 WHEN OTHERS THEN
13377 IF(cle_rents_csr%ISOPEN)THEN
13378 CLOSE cle_rents_csr;
13379 END IF;
13380 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
13381 ,p_msg_name => G_UNEXPECTED_ERROR
13382 ,p_token1 => G_SQLCODE_TOKEN
13383 ,p_token1_value => SQLCODE
13384 ,p_token2 => G_SQLERRM_TOKEN
13385 ,p_token2_value => SQLERRM);
13386 RETURN NULL;
13387 END cont_rbk_unbilled_receivables;
13388
13389 -- function that returns the sum of pre-tax income that was not accrued for all active assets on the rebook copy of the contract
13390 FUNCTION cont_rbk_unearned_income(p_contract_id okc_k_headers_b.id%TYPE
13391 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
13392
13393 CURSOR c_pre_tax_csr(cp_contract_id okc_k_headers_b.id%TYPE) IS
13394 SELECT NVL(SUM(sele.amount),0)
13395 FROM okl_strm_elements sele
13396 --,okl_streams str MGAAP 7263041
13397 ,okl_streams_rep_v str
13398 ,okl_strm_type_v sty
13399 ,okc_k_lines_b line
13400 ,okc_line_styles_b style
13401 ,okc_statuses_b sts
13402 WHERE sele.stm_id = str.id
13403 AND str.sty_id = sty.id
13404 AND UPPER(sty.stream_type_purpose) = 'LEASE_INCOME' -- pre-tax income has steam type purpose as lease_income
13405 AND str.say_code = 'CURR'
13406 AND STR.ACTIVE_YN = 'Y'
13407 AND (STR.PURPOSE_CODE IS NULL OR STR.PURPOSE_CODE='REPORT')
13408 AND nvl(sele.accrued_yn,'N') = 'N'
13409 AND str.kle_id = line.id
13410 AND line.lse_id = style.id
13411 AND style.lty_code = 'FREE_FORM1'
13412 AND line.sts_code = sts.code
13413 AND sts.ste_code = 'ACTIVE'
13414 AND line.chr_id = cp_contract_id;
13415 lv_pre_tax_income NUMBER;
13416 BEGIN
13417 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
13418 lv_pre_tax_income := 0;
13419 OPEN c_pre_tax_csr(cp_contract_id => p_contract_id); FETCH c_pre_tax_csr INTO lv_pre_tax_income;
13420 CLOSE c_pre_tax_csr;
13421 END IF;
13422 RETURN lv_pre_tax_income;
13423 EXCEPTION
13424 WHEN OTHERS THEN
13425 IF(c_pre_tax_csr%ISOPEN)THEN
13426 CLOSE c_pre_tax_csr;
13427 END IF;
13428 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
13429 ,p_msg_name => G_UNEXPECTED_ERROR
13430 ,p_token1 => G_SQLCODE_TOKEN
13431 ,p_token1_value => SQLCODE
13432 ,p_token2 => G_SQLERRM_TOKEN
13433 ,p_token2_value => SQLERRM);
13434 RETURN NULL;
13435 END cont_rbk_unearned_income;
13436
13437 -- returns sum of rent not billed for all terminated assets
13438 -- do not send p_contract_line_id as okl_api.g_miss_num
13439 FUNCTION cont_tmt_unbilled_receivables(p_contract_id okc_k_headers_b.id%TYPE
13440 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
13441 -- get all unbilled receivables for all TERMINATED assets
13442 CURSOR cle_rents_csr(cp_contract_id okc_k_headers_b.id%TYPE
13443 ,cp_contract_line_id okc_k_lines_b.id%TYPE) IS
13444 SELECT NVL(SUM(sele.amount),0)
13445 FROM okl_strm_elements sele
13446 ,okl_streams str
13447 ,okl_strm_type_v sty
13448 ,okc_k_lines_v line
13449 -- ,okc_statuses_b sts
13450 ,okc_line_styles_b style
13451 WHERE sele.stm_id = str.id
13452 AND str.sty_id = sty.id
13453 AND sty.stream_type_purpose = 'RENT'
13454 AND str.say_code = 'CURR'
13455 AND str.active_yn = 'Y'
13456 AND str.purpose_code IS NULL
13457 AND sele.date_billed IS NULL
13458 AND line.chr_id = str.khr_id
13459 AND line.id = str.kle_id
13460 AND line.lse_id = style.id
13461 AND style.lty_code = 'FREE_FORM1'
13462 -- AND line.sts_code = sts.code
13463 -- AND sts.ste_code = 'TERMINATED'
13464 AND str.khr_id = cp_contract_id
13465 AND line.id = NVL(cp_contract_line_id, line.id);
13466 lv_rent_assets NUMBER;
13467
13468 lv_unbilled_recv NUMBER;
13469 BEGIN
13470 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
13471 -- initialize
13472 lv_unbilled_recv := 0;
13473 lv_rent_assets := 0;
13474
13475 -- ASSET level RENTS
13476 OPEN cle_rents_csr(cp_contract_id => p_contract_id, cp_contract_line_id => p_contract_line_id); FETCH cle_rents_csr INTO lv_rent_assets;
13477 CLOSE cle_rents_csr;
13478
13479 lv_unbilled_recv := lv_rent_assets;
13480 END IF;
13481 RETURN lv_unbilled_recv;
13482 EXCEPTION
13483 WHEN OTHERS THEN
13484 IF(cle_rents_csr%ISOPEN)THEN
13485 CLOSE cle_rents_csr;
13486 END IF;
13487 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
13488 ,p_msg_name => G_UNEXPECTED_ERROR
13489 ,p_token1 => G_SQLCODE_TOKEN
13490 ,p_token1_value => SQLCODE
13491 ,p_token2 => G_SQLERRM_TOKEN
13492 ,p_token2_value => SQLERRM);
13493 RETURN NULL;
13494 END cont_tmt_unbilled_receivables;
13495
13496 -- returns sum of pre tax income not accrued for all terminated assets
13497 -- do not send p_contract_line_id as okl_api.g_miss_num
13498 FUNCTION cont_tmt_unearned_income(p_contract_id okc_k_headers_b.id%TYPE
13499 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
13500 CURSOR c_pre_tax_csr(cp_contract_id okc_k_headers_b.id%TYPE ,cp_contract_line_id okc_k_lines_b.id%TYPE) IS
13501 SELECT NVL(SUM(sele.amount),0)
13502 FROM okl_strm_elements sele
13503 --,okl_streams str MGAAP 7263041
13504 ,okl_streams_rep_v str
13505 ,okl_strm_type_v sty
13506 ,okc_k_lines_b line
13507 ,okc_line_styles_b style
13508 -- ,okc_statuses_b sts
13509 WHERE sele.stm_id = str.id
13510 AND str.sty_id = sty.id
13511 AND UPPER(sty.stream_type_purpose) = 'LEASE_INCOME' -- pre-tax income has steam type purpose as lease_income
13512 AND str.say_code = 'CURR'
13513 AND STR.ACTIVE_YN = 'Y'
13514 AND (STR.PURPOSE_CODE IS NULL OR STR.PURPOSE_CODE='REPORT')
13515 AND nvl(sele.accrued_yn,'N') = 'N'
13516 AND str.kle_id = line.id
13517 AND line.lse_id = style.id
13518 AND style.lty_code = 'FREE_FORM1'
13519 -- AND line.sts_code = sts.code
13520 -- AND sts.ste_code = 'TERMINATED'
13521 AND line.chr_id = cp_contract_id
13522 AND line.id = NVL(cp_contract_line_id, line.id);
13523 lv_pre_tax_income NUMBER;
13524 BEGIN
13525 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
13526 lv_pre_tax_income := 0;
13527 OPEN c_pre_tax_csr(cp_contract_id => p_contract_id, cp_contract_line_id => p_contract_line_id); FETCH c_pre_tax_csr INTO lv_pre_tax_income;
13528 CLOSE c_pre_tax_csr;
13529 END IF;
13530 RETURN lv_pre_tax_income;
13531 EXCEPTION
13532 WHEN OTHERS THEN
13533 IF(c_pre_tax_csr%ISOPEN)THEN
13534 CLOSE c_pre_tax_csr;
13535 END IF;
13536 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
13537 ,p_msg_name => G_UNEXPECTED_ERROR
13538 ,p_token1 => G_SQLCODE_TOKEN
13539 ,p_token1_value => SQLCODE
13540 ,p_token2 => G_SQLERRM_TOKEN
13541 ,p_token2_value => SQLERRM);
13542 RETURN NULL;
13543 END cont_tmt_unearned_income;
13544
13545 -- sjalasut, Rebook Change Control Enhancement END
13546
13547 -- Begin - varangan-Bug#5009351
13548 ----------------------------------------------------------------------------------------------------
13549 -- Start of Comments
13550 -- Created By: Vaijayanthi (varangan)
13551 -- Function Name: contract_next_payment_amount
13552 -- Description: Returns the sum of all billable stream elements,
13553 -- excluding taxes, which fall on the next payment date
13554 -- Dependencies:
13555 -- Parameters: contract id,contract line id
13556 -- Version: 1.0
13557 -- End of Commnets
13558 ----------------------------------------------------------------------------------------------------
13559 FUNCTION contract_next_payment_amount(
13560 p_contract_id IN NUMBER,
13561 p_contract_line_id IN NUMBER)
13562 RETURN NUMBER IS
13563
13564 CURSOR cr_next_payment_date(c_contract_id IN NUMBER) IS
13565 SELECT MIN(sel.stream_element_date)
13566 FROM okl_strm_elements sel,
13567 okl_streams stm,
13568 okl_strm_type_v sty
13569 WHERE stm.sty_id = sty.id
13570 AND stm.say_code = 'CURR'
13571 AND stm.active_yn = 'Y'
13572 AND sty.billable_yn = 'Y'
13573 AND sty.code NOT LIKE '%TAX%'
13574 AND stm.purpose_code is NULL
13575 AND stm.khr_id = c_contract_id
13576 AND sel.stm_id = stm.id
13577 AND sel.stream_element_date > sysdate;
13578
13579 CURSOR cr_next_payment_amt(c_contract_id IN NUMBER,
13580 c_next_due_date IN DATE) IS
13581 SELECT NVL(sum(sel.amount),0)
13582 FROM okl_strm_elements sel,
13583 okl_streams stm,
13584 okl_strm_type_v sty
13585 WHERE stm.sty_id = sty.id
13586 AND stm.say_code = 'CURR'
13587 AND stm.active_yn = 'Y'
13588 AND sty.billable_yn = 'Y'
13589 AND sty.code NOT LIKE '%TAX%'
13590 AND stm.purpose_code is NULL
13591 AND stm.khr_id = c_contract_id
13592 AND sel.stm_id = stm.id
13593 AND sel.stream_element_date = c_next_due_date;
13594
13595 l_next_payment_date DATE;
13596 l_next_payment_amt NUMBER;
13597 BEGIN
13598 OPEN cr_next_payment_date(p_contract_id);
13599 FETCH cr_next_payment_date INTO l_next_payment_date;
13600 CLOSE cr_next_payment_date;
13601
13602 OPEN cr_next_payment_amt(p_contract_id,l_next_payment_date);
13603 FETCH cr_next_payment_amt INTO l_next_payment_amt;
13604 CLOSE cr_next_payment_amt;
13605 RETURN l_next_payment_amt;
13606
13607 EXCEPTION
13608 WHEN OTHERS THEN
13609 IF cr_next_payment_date%ISOPEN THEN
13610 CLOSE cr_next_payment_date;
13611 END IF;
13612 IF cr_next_payment_amt%ISOPEN THEN
13613 CLOSE cr_next_payment_amt;
13614 END IF;
13615 -- store SQL error message on message stack for caller
13616 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
13617 p_msg_name => 'OKL_UNEXPECTED_ERROR',
13618 p_token1 => 'OKL_SQLCODE',
13619 p_token1_value => SQLCODE,
13620 p_token2 => 'OKL_SQLERRM',
13621 p_token2_value => SQLERRM);
13622 RETURN NULL;
13623 END contract_next_payment_amount;
13624 -- End - varangan-Bug#5009351
13625
13626 -- Added by rravikir -- Bug 5055835
13627
13628 -- ############################################################
13629 -- FUNCTION get_leaseapp_id
13630 -- This function fetches the Lease Application Info
13631 -- associated to the Contract
13632 -- ############################################################
13633 FUNCTION get_leaseapp_id(p_contract_id IN NUMBER)
13634 RETURN NUMBER IS
13635
13636 CURSOR c_get_lease_app IS
13637 SELECT orig_system_id1
13638 FROM okc_k_headers_b
13639 WHERE id = p_contract_id
13640 AND orig_system_source_code = 'OKL_LEASE_APP';
13641
13642 ln_lease_app_id NUMBER;
13643 BEGIN
13644 OPEN c_get_lease_app;
13645 FETCH c_get_lease_app INTO ln_lease_app_id;
13646 CLOSE c_get_lease_app;
13647
13648 RETURN ln_lease_app_id;
13649 EXCEPTION
13650 WHEN OTHERS THEN
13651 IF c_get_lease_app%ISOPEN THEN
13652 CLOSE c_get_lease_app;
13653 END IF;
13654 RETURN NULL;
13655 END get_leaseapp_id;
13656
13657 -- ######################################################################
13658 -- FUNCTION check_contract_fin_amount
13659 -- This function checks for total financed amount on contract is
13660 -- equal to or less than the total amount approved on a Lease Application
13661 -- ######################################################################
13662 FUNCTION check_contract_fin_amount(p_contract_id IN NUMBER,
13663 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
13664 RETURN VARCHAR2 IS
13665
13666 ln_contract_financed_amount NUMBER;
13667 ln_leaseapp_financed_amount NUMBER;
13668 ln_lease_app_id NUMBER;
13669 ln_quote_id NUMBER;
13670
13671 CURSOR c_get_primary_quote(p_leaseapp_id IN NUMBER) IS
13672 SELECT id
13673 FROM okl_lease_quotes_b
13674 WHERE parent_object_id = p_leaseapp_id
13675 AND parent_object_code = 'LEASEAPP'
13676 AND primary_quote = 'Y';
13677
13678 BEGIN
13679 ln_contract_financed_amount := contract_financed_amount(p_contract_id => p_contract_id,
13680 p_contract_line_id => null);
13681
13682 -- Get Lease Application Info
13683 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
13684
13685 IF (ln_lease_app_id IS NOT NULL) THEN
13686 OPEN c_get_primary_quote(p_leaseapp_id => ln_lease_app_id);
13687 FETCH c_get_primary_quote INTO ln_quote_id;
13688 CLOSE c_get_primary_quote;
13689 END IF;
13690
13691 IF (ln_quote_id IS NOT NULL) THEN
13692 ln_leaseapp_financed_amount := okl_lease_app_pvt.get_financed_amount(p_lease_qte_id => ln_quote_id);
13693 END IF;
13694
13695 IF (ln_contract_financed_amount IS NOT NULL AND ln_leaseapp_financed_amount IS NOT NULL) THEN
13696 IF ln_contract_financed_amount <= ln_leaseapp_financed_amount THEN
13697 RETURN 'P';
13698 ELSE
13699 RETURN 'F';
13700 END IF;
13701 ELSE
13702 RETURN NULL;
13703 END IF;
13704
13705 EXCEPTION
13706 WHEN OTHERS THEN
13707 IF c_get_primary_quote%ISOPEN THEN
13708 CLOSE c_get_primary_quote;
13709 END IF;
13710 RETURN NULL;
13711 END check_contract_fin_amount;
13712
13713 -- ######################################################################
13714 -- FUNCTION check_fund_amount
13715 -- This function checks for total amount funded on a contract is
13716 -- equal to or less than the total amount approved on a Lease Application
13717 -- ######################################################################
13718 FUNCTION check_fund_amount(p_contract_id IN NUMBER,
13719 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
13720 RETURN VARCHAR2 IS
13721
13722 ln_contract_funded_amount NUMBER;
13723 ln_leaseapp_financed_amount NUMBER;
13724 ln_lease_app_id NUMBER;
13725 ln_quote_id NUMBER;
13726 ln_fund_amount NUMBER := 0;
13727
13728 CURSOR c_get_primary_quote(p_leaseapp_id IN NUMBER) IS
13729 SELECT id
13730 FROM okl_lease_quotes_b
13731 WHERE parent_object_id = p_leaseapp_id
13732 AND parent_object_code = 'LEASEAPP'
13733 AND primary_quote = 'Y';
13734
13735 CURSOR c_get_fund_amount(p_contract_line_id IN NUMBER) IS
13736 SELECT nvl(amount, 0)
13737 FROM okl_trx_ap_invoices_b
13738 WHERE id = p_contract_line_id;
13739 --AND trx_status_code = 'ENTERED'
13740 --AND FUNDING_TYPE_CODE IN ('PREFUNDING', 'ASSET', 'EXPENSE');
13741
13742 BEGIN
13743 ln_contract_funded_amount := okl_funding_pvt.get_total_funded(p_contract_id => p_contract_id);
13744
13745 IF (p_contract_line_id IS NOT NULL AND p_contract_line_id <> OKL_API.G_MISS_NUM) THEN
13746 OPEN c_get_fund_amount(p_contract_line_id => p_contract_line_id);
13747 FETCH c_get_fund_amount INTO ln_fund_amount;
13748 CLOSE c_get_fund_amount;
13749 END IF;
13750
13751 ln_contract_funded_amount := ln_contract_funded_amount + ln_fund_amount;
13752
13753 -- Get Lease Application Info
13754 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
13755
13756 IF (ln_lease_app_id IS NOT NULL) THEN
13757 OPEN c_get_primary_quote(p_leaseapp_id => ln_lease_app_id);
13758 FETCH c_get_primary_quote INTO ln_quote_id;
13759 CLOSE c_get_primary_quote;
13760 END IF;
13761
13762 IF (ln_quote_id IS NOT NULL) THEN
13763 ln_leaseapp_financed_amount := okl_lease_app_pvt.get_financed_amount(p_lease_qte_id => ln_quote_id);
13764 END IF;
13765
13766 IF (ln_contract_funded_amount IS NOT NULL AND ln_leaseapp_financed_amount IS NOT NULL) THEN
13767 IF ln_contract_funded_amount <= ln_leaseapp_financed_amount THEN
13768 RETURN 'P';
13769 ELSE
13770 RETURN 'F';
13771 END IF;
13772 ELSE
13773 RETURN NULL;
13774 END IF;
13775
13776 EXCEPTION
13777 WHEN OTHERS THEN
13778 IF c_get_primary_quote%ISOPEN THEN
13779 CLOSE c_get_primary_quote;
13780 END IF;
13781 RETURN NULL;
13782 END check_fund_amount;
13783
13784 -- ######################################################################
13785 -- FUNCTION check_party_custacct_match
13786 -- This function checks for Party and Customer Account on Lease Application
13787 -- and Contract are same
13788 -- ######################################################################
13789 FUNCTION check_party_custacct_match(p_contract_id IN NUMBER,
13790 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
13791 RETURN VARCHAR2 IS
13792
13793 ln_lease_app_id NUMBER;
13794 ln_k_party_id NUMBER;
13795 ln_k_cust_acct_id NUMBER;
13796 ln_lap_party_id NUMBER;
13797 ln_lap_cust_acct_id NUMBER;
13798
13799 CURSOR c_k_get_party_custacct_info IS
13800 SELECT kp.object1_id1, okc.cust_acct_id
13801 FROM okc_k_party_roles_b kp, okc_k_headers_b okc
13802 WHERE kp.dnz_chr_id = p_contract_id
13803 AND kp.rle_code = 'LESSEE'
13804 AND kp.dnz_chr_id = okc.id;
13805
13806 CURSOR c_lap_get_party_custacct_info(p_lease_app_id IN NUMBER) IS
13807 SELECT prospect_id, cust_acct_id
13808 FROM okl_lease_applications_b
13809 WHERE id = p_lease_app_id;
13810 BEGIN
13811
13812 -- Get Lease Application Info
13813 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
13814
13815 OPEN c_k_get_party_custacct_info;
13816 FETCH c_k_get_party_custacct_info INTO ln_k_party_id, ln_k_cust_acct_id;
13817 CLOSE c_k_get_party_custacct_info;
13818
13819 OPEN c_lap_get_party_custacct_info(p_lease_app_id => ln_lease_app_id) ;
13820 FETCH c_lap_get_party_custacct_info INTO ln_lap_party_id, ln_lap_cust_acct_id;
13821 CLOSE c_lap_get_party_custacct_info;
13822
13823 IF (ln_k_party_id = ln_lap_party_id AND ln_k_cust_acct_id = ln_lap_cust_acct_id) THEN
13824 RETURN 'P';
13825 ELSE
13826 RETURN 'F';
13827 END IF;
13828
13829 EXCEPTION
13830 WHEN OTHERS THEN
13831 IF c_k_get_party_custacct_info%ISOPEN THEN
13832 CLOSE c_k_get_party_custacct_info;
13833 END IF;
13834 IF c_lap_get_party_custacct_info%ISOPEN THEN
13835 CLOSE c_lap_get_party_custacct_info;
13836 END IF;
13837 RETURN NULL;
13838 END check_party_custacct_match;
13839
13840 -- ######################################################################
13841 -- FUNCTION check_vendor_prog_match
13842 -- This function checks for Vendor Program on Lease Application and
13843 -- Contract are same
13844 -- ######################################################################
13845 FUNCTION check_vendor_prog_match(p_contract_id IN NUMBER,
13846 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
13847 RETURN VARCHAR2 IS
13848
13849 CURSOR c_k_vendor_prog_info IS
13850 SELECT khr_id
13851 FROM okl_k_headers
13852 WHERE id = p_contract_id;
13853
13854 CURSOR c_lap_vendor_prog_info(p_lease_app_id IN NUMBER) IS
13855 SELECT program_agreement_id
13856 FROM okl_lease_applications_b
13857 WHERE id = p_lease_app_id;
13858
13859 ln_k_prog_id NUMBER;
13860 ln_lap_prog_id NUMBER;
13861 ln_lease_app_id NUMBER;
13862 BEGIN
13863
13864 -- Get Lease Application Info
13865 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
13866
13867 OPEN c_k_vendor_prog_info;
13868 FETCH c_k_vendor_prog_info INTO ln_k_prog_id;
13869 CLOSE c_k_vendor_prog_info;
13870
13871 OPEN c_lap_vendor_prog_info(p_lease_app_id => ln_lease_app_id);
13872 FETCH c_lap_vendor_prog_info INTO ln_lap_prog_id;
13873 CLOSE c_lap_vendor_prog_info;
13874
13875 IF (ln_k_prog_id IS NULL AND ln_lap_prog_id IS NULL) THEN
13876 RETURN 'P';
13877 ELSIF (ln_k_prog_id = ln_lap_prog_id) THEN
13878 RETURN 'P';
13879 ELSE
13880 RETURN 'F';
13881 END IF;
13882
13883 EXCEPTION
13884 WHEN OTHERS THEN
13885 IF c_k_vendor_prog_info%ISOPEN THEN
13886 CLOSE c_k_vendor_prog_info;
13887 END IF;
13888 IF c_lap_vendor_prog_info%ISOPEN THEN
13889 CLOSE c_lap_vendor_prog_info;
13890 END IF;
13891 RETURN NULL;
13892 END check_vendor_prog_match;
13893
13894 -- ######################################################################
13895 -- FUNCTION check_booking_date
13896 -- This function checks for Activation date of contract is within the
13897 -- effective dates of Lease Application
13898 -- ######################################################################
13899 FUNCTION check_booking_date(p_contract_id IN NUMBER,
13900 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
13901 RETURN VARCHAR2 IS
13902
13903 CURSOR c_k_booking_date IS
13904 SELECT date_transaction_occurred
13905 FROM okl_trx_contracts
13906 WHERE khr_id = p_contract_id
13907 AND representation_type = 'PRIMARY'; -- MGAAP OTHER 7263041
13908
13909 ld_k_booking_date DATE;
13910 ld_lap_app_exp_date DATE;
13911 ln_lease_app_id NUMBER;
13912 BEGIN
13913
13914 -- Get Lease Application Info
13915 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
13916
13917 OPEN c_k_booking_date;
13918 FETCH c_k_booking_date INTO ld_k_booking_date;
13919 CLOSE c_k_booking_date;
13920
13921 ld_lap_app_exp_date := okl_lease_app_pvt.get_approval_exp_date(p_lease_app_id => ln_lease_app_id);
13922
13923 IF (ld_k_booking_date IS NULL) THEN
13924 ld_k_booking_date := SYSDATE;
13925 END IF;
13926
13927 IF (ld_lap_app_exp_date IS NOT NULL) THEN
13928 IF (ld_k_booking_date <= ld_lap_app_exp_date ) THEN
13929 RETURN 'P';
13930 ELSE
13931 RETURN 'F';
13932 END IF;
13933 ELSE
13934 RETURN 'P';
13935 END IF;
13936
13937 EXCEPTION
13938 WHEN OTHERS THEN
13939 IF c_k_booking_date%ISOPEN THEN
13940 CLOSE c_k_booking_date;
13941 END IF;
13942 RETURN NULL;
13943 END check_booking_date;
13944
13945 -- ######################################################################
13946 -- FUNCTION check_funding_date
13947 -- This function checks for Funding date of Funding request is within the
13948 -- effective dates of Lease Application
13949 -- ######################################################################
13950 FUNCTION check_funding_date(p_contract_id IN NUMBER,
13951 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
13952 RETURN VARCHAR2 IS
13953
13954 -- sjalasut, modified the cursor to have p_contract_id mapped to okl_txl_ap_inv_lns_all_b
13955 -- changes made as part of OKLR12B disbursements project.
13956 CURSOR c_k_funding_date IS
13957 SELECT a.date_invoiced
13958 FROM okl_trx_ap_invoices_b a
13959 -- ,okl_txl_ap_inv_lns_all_b b --cklee 09/21/07
13960 -- WHERE a.id = b.tap_id
13961 where a.khr_id = p_contract_id;
13962
13963 ld_k_funded_date DATE;
13964 ld_lap_app_exp_date DATE;
13965 ln_lease_app_id NUMBER;
13966 BEGIN
13967 -- Get Lease Application Info
13968 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
13969
13970 OPEN c_k_funding_date;
13971 FETCH c_k_funding_date INTO ld_k_funded_date;
13972 CLOSE c_k_funding_date;
13973
13974 ld_lap_app_exp_date := okl_lease_app_pvt.get_approval_exp_date(p_lease_app_id => ln_lease_app_id);
13975
13976 IF (ld_lap_app_exp_date IS NOT NULL) THEN
13977 IF (ld_k_funded_date <= ld_lap_app_exp_date ) THEN
13978 RETURN 'P';
13979 ELSE
13980 RETURN 'F';
13981 END IF;
13982 ELSE
13983 RETURN 'P';
13984 END IF;
13985
13986 EXCEPTION
13987 WHEN OTHERS THEN
13988 IF c_k_funding_date%ISOPEN THEN
13989 CLOSE c_k_funding_date;
13990 END IF;
13991 RETURN NULL;
13992 END check_funding_date;
13993 -- rravikir End -- Bug 5055835
13994
13995 -- ######################################################################
13996 -- FUNCTION asset_accu_deprn_reserve
13997 -- Returns fixed asset accumulated depreciation reserve for a financial asset
13998 -- line.
13999 -- ######################################################################
14000 FUNCTION asset_accu_deprn_reserve(
14001 p_contract_id IN NUMBER
14002 ,p_contract_line_id IN NUMBER
14003 )
14004 RETURN NUMBER IS
14005
14006 l_api_name CONSTANT VARCHAR2(30) := 'ASSET_ACCU_DEPRN_RESERVE';
14007 l_api_version CONSTANT NUMBER := 1;
14008 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
14009 x_msg_count NUMBER;
14010 x_msg_data VARCHAR2(256);
14011
14012 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
14013 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
14014
14015 l_converted_amount NUMBER;
14016 l_contract_start_date DATE;
14017 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
14018 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
14019 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
14020 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
14021
14022 CURSOR l_asset_csr(p_chr_id IN NUMBER
14023 ,p_cle_id IN NUMBER
14024 ,p_book_class IN VARCHAR2 -- 7626121
14025 ,p_book_type_code IN VARCHAR2) IS
14026 SELECT fab.asset_id,
14027 fab.book_type_code
14028 FROM okc_k_lines_v fin_ast_cle,
14029 okc_statuses_b stsb,
14030 fa_additions fad,
14031 fa_book_controls fbc,
14032 fa_books fab
14033 WHERE fin_ast_cle.id = p_cle_id
14034 AND fin_ast_cle.dnz_chr_id = p_chr_id
14035 AND fin_ast_cle.chr_id = p_chr_id
14036 AND fin_ast_cle.sts_code = stsb.code
14037 AND stsb.ste_code NOT IN ('HOLD','CANCELLED')
14038 AND fad.asset_number = fin_ast_cle.name
14039 AND fab.asset_id = fad.asset_id
14040 AND fab.book_type_code = fbc.book_type_code
14041 AND fab.transaction_header_id_out IS NULL
14042 --AND fbc.book_class = 'CORPORATE';
14043 AND fbc.book_class = p_book_class
14044 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
14045
14046
14047 l_asset_rec l_asset_csr%ROWTYPE;
14048
14049
14050 CURSOR contract_start_date_csr(p_chr_id NUMBER) IS
14051 SELECT start_date
14052 FROM okc_k_headers_b
14053 WHERE id = p_chr_id;
14054
14055 l_streams_repo_policy VARCHAR2(80); -- 7626121
14056 l_book_class FA_BOOK_CONTROLS.BOOK_CLASS%TYPE := null;
14057 l_book_type_code FA_BOOK_CONTROLS.BOOK_TYPE_CODE%TYPE := null;
14058
14059
14060 BEGIN
14061
14062 IF (( p_contract_id IS NULL ) OR ( p_contract_line_id IS NULL )) THEN
14063 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
14064 END IF;
14065
14066 -- 7626121
14067 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
14068 l_book_type_code := NULL;
14069 IF (l_streams_repo_policy = 'PRIMARY') THEN
14070 l_book_class := 'CORPORATE';
14071 ELSE
14072 l_book_class := 'TAX';
14073 l_book_type_code := OKL_ACCOUNTING_UTIL.get_fa_reporting_book(
14074 p_kle_id => p_contract_line_id);
14075 END IF;
14076
14077 OPEN l_asset_csr(p_chr_id => p_contract_id,
14078 p_cle_id => p_contract_line_id,
14079 p_book_class => l_book_class, -- 7626121
14080 p_book_type_code => l_book_type_code);
14081 FETCH l_asset_csr INTO l_asset_rec;
14082 IF( l_asset_csr%NOTFOUND ) THEN
14083
14084 CLOSE l_asset_csr;
14085 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
14086 END IF;
14087 CLOSE l_asset_csr;
14088
14089 l_asset_hdr_rec.asset_id := l_asset_rec.asset_id;
14090 l_asset_hdr_rec.book_type_code := l_asset_rec.book_type_code;
14091
14092 IF NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) THEN
14093 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
14094 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
14095 );
14096 RAISE OKL_API.G_EXCEPTION_ERROR;
14097 END IF;
14098
14099
14100 -- To fetch Depreciation Reserve
14101 IF NOT FA_UTIL_PVT.get_asset_deprn_rec
14102 (p_asset_hdr_rec => l_asset_hdr_rec ,
14103 px_asset_deprn_rec => l_asset_deprn_rec,
14104 p_period_counter => NULL,
14105 p_mrc_sob_type_code => 'P'
14106 ) THEN
14107 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
14108 p_msg_name => 'OKL_LLA_FA_DEPRN_REC_ERROR'
14109 );
14110 RAISE OKL_API.G_EXCEPTION_ERROR;
14111 END IF;
14112
14113
14114
14115 -- convert amount into contract currency
14116 OPEN contract_start_date_csr(p_chr_id => p_contract_id);
14117 FETCH contract_start_date_csr INTO l_contract_start_date;
14118 CLOSE contract_start_date_csr;
14119
14120 l_converted_amount := 0;
14121 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
14122 p_khr_id => p_contract_id,
14123 p_from_currency => NULL,
14124 p_transaction_date => l_contract_start_date,
14125 p_amount => l_asset_deprn_rec.deprn_reserve,
14126 x_return_status => x_return_status,
14127 x_contract_currency => l_contract_currency,
14128 x_currency_conversion_type => l_currency_conversion_type,
14129 x_currency_conversion_rate => l_currency_conversion_rate,
14130 x_currency_conversion_date => l_currency_conversion_date,
14131 x_converted_amount => l_converted_amount);
14132
14133
14134 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
14135 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
14136 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
14137 RAISE Okl_Api.G_EXCEPTION_ERROR;
14138 END IF;
14139
14140 RETURN l_converted_amount;
14141
14142 EXCEPTION
14143
14144 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14145 RETURN NULL;
14146
14147 WHEN OTHERS THEN
14148 Okl_Api.SET_MESSAGE(
14149 p_app_name => G_APP_NAME,
14150 p_msg_name => G_UNEXPECTED_ERROR,
14151 p_token1 => G_SQLCODE_TOKEN,
14152 p_token1_value => SQLCODE,
14153 p_token2 => G_SQLERRM_TOKEN,
14154 p_token2_value => SQLERRM);
14155 RETURN NULL;
14156
14157 END asset_accu_deprn_reserve;
14158
14159 -- Added by mansrini for ER Bug#6011738
14160 -- ---------------------------------------------------------------
14161 -- FUNCTION : lease_quote_financed_amount
14162 --
14163 -- DESC : Returns Financed Amount for an asset on a sales
14164 -- quote which is calculated as ->
14165 -- Asset Cost + Add-ons + Capitalized Fees
14166 -- - Capitalized Down Payments - Trade Ins.
14167 --
14168 -- PARAMETERS : Passed NONE, requires ASSET_ID to be passed as
14169 -- additional parameter from okl_execute_formula_pub
14170 -- which is the asset on quote for which to calculate
14171 -- financed amount.
14172 -- ---------------------------------------------------------------
14173 FUNCTION lease_quote_financed_amount
14174 RETURN NUMBER IS
14175 --cursor to get asset cost
14176 CURSOR c_asset_cost (p_asset_id IN NUMBER) IS
14177 SELECT (ASSETCOMP.NUMBER_OF_UNITS * ASSETCOMP.UNIT_COST) AST_COST
14178 FROM OKL_ASSET_COMPONENTS_B ASSETCOMP
14179 WHERE ASSETCOMP.PRIMARY_COMPONENT = 'YES'
14180 AND ASSETCOMP.ASSET_ID = p_asset_id;
14181
14182 --cursor to get asset Add-On amount
14183 CURSOR c_addOn_cost (p_asset_id IN NUMBER) IS
14184 SELECT sum(ASSETCOMP.NUMBER_OF_UNITS * ASSETCOMP.UNIT_COST) ADDON_AMNT
14185 FROM OKL_ASSET_COMPONENTS_B ASSETCOMP
14186 WHERE ASSETCOMP.PRIMARY_COMPONENT = 'NO'
14187 AND ASSETCOMP.ASSET_ID = p_asset_id;
14188
14189 -- cursor to get capitalized fee amount for the asset
14190 CURSOR c_cap_fee_amnt (p_asset_id IN NUMBER) IS
14191 SELECT SUM(amount) capitalized_fee_amount
14192 FROM okl_line_relationships_v lre
14193 WHERE source_line_type = 'ASSET'
14194 AND related_line_type = 'CAPITALIZED'
14195 AND source_line_id = p_asset_id;
14196
14197 --cursor to get capitalized down payment for the asset
14198 CURSOR c_cap_down_pmnt (p_asset_id IN NUMBER) IS
14199 SELECT sum(adj.value) cap_down_payment
14200 FROM okl_assets_b ast, okl_cost_adjustments_b adj
14201 WHERE ast.parent_object_code = 'LEASEQUOTE'
14202 AND adj.parent_object_id = ast.id
14203 AND adj.ADJUSTMENT_SOURCE_TYPE = 'DOWN_PAYMENT'
14204 AND adj.PROCESSING_TYPE = 'CAPITALIZE'
14205 AND ast.id = p_asset_id;
14206
14207 --cursor to get trade-in amount for the asset
14208 CURSOR c_tradein_amnt (p_asset_id IN NUMBER) IS
14209 SELECT sum(adj.value) tradeIn_amount
14210 FROM okl_assets_b ast, okl_cost_adjustments_b adj
14211 WHERE ast.parent_object_code = 'LEASEQUOTE'
14212 AND adj.parent_object_id = ast.id
14213 AND adj.adjustment_source_type = 'TRADEIN'
14214 AND ast.id = p_asset_id;
14215
14216 l_asset_id NUMBER;
14217
14218 l_financed_amount NUMBER;
14219 l_asset_cost NUMBER;
14220 l_add_on_amnt NUMBER;
14221 l_cap_fee_amnt NUMBER;
14222 l_cap_down_pmnt NUMBER;
14223 l_trade_in_amnt NUMBER;
14224
14225 BEGIN
14226
14227 -- get asset id passed as additional parameters
14228 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(1)
14229 AND okl_execute_formula_pub.g_additional_parameters(1).name =
14230 'ASSET_ID'
14231 AND okl_execute_formula_pub.g_additional_parameters(1).value IS NOT
14232 NULL
14233 THEN
14234 l_asset_id :=
14235 to_number(okl_execute_formula_pub.g_additional_parameters(1).value);
14236 END IF;
14237
14238 IF (l_asset_id IS NULL) THEN
14239 RAISE OKL_API.G_EXCEPTION_ERROR;
14240 END IF;
14241
14242 -- get asset cost
14243 l_asset_cost := 0;
14244 OPEN c_asset_cost(l_asset_id);
14245 FETCH c_asset_cost INTO l_asset_cost;
14246 IF( c_asset_cost%NOTFOUND ) THEN
14247 CLOSE c_asset_cost;
14248 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
14249 END IF;
14250 CLOSE c_asset_cost;
14251
14252 -- get add-on amount
14253 OPEN c_addOn_cost(l_asset_id);
14254 FETCH c_addOn_cost INTO l_add_on_amnt;
14255 CLOSE c_addOn_cost;
14256 IF l_add_on_amnt is null then
14257 l_add_on_amnt := 0;
14258 END IF;
14259
14260 -- get capitalized fee amount
14261 OPEN c_cap_fee_amnt(l_asset_id);
14262 FETCH c_cap_fee_amnt INTO l_cap_fee_amnt;
14263 CLOSE c_cap_fee_amnt;
14264 IF l_cap_fee_amnt is null then
14265 l_cap_fee_amnt := 0;
14266 END IF;
14267
14268 -- get capitalized down payment amount
14269 OPEN c_cap_down_pmnt(l_asset_id);
14270 FETCH c_cap_down_pmnt INTO l_cap_down_pmnt;
14271 CLOSE c_cap_down_pmnt;
14272 IF l_cap_down_pmnt is null then
14273 l_cap_down_pmnt := 0;
14274 END IF;
14275
14276 -- get trade-in amount
14277 OPEN c_tradein_amnt(l_asset_id);
14278 FETCH c_tradein_amnt INTO l_trade_in_amnt;
14279 CLOSE c_tradein_amnt;
14280 IF l_trade_in_amnt is null then
14281 l_trade_in_amnt := 0;
14282 END IF;
14283
14284 l_financed_amount := l_asset_cost + l_add_on_amnt + l_cap_fee_amnt -
14285 l_cap_down_pmnt - l_trade_in_amnt;
14286
14287 RETURN l_financed_amount;
14288 EXCEPTION
14289 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14290 IF c_asset_cost%ISOPEN THEN
14291 CLOSE c_asset_cost;
14292 END IF;
14293 IF c_addOn_cost%ISOPEN THEN
14294 CLOSE c_addOn_cost;
14295 END IF;
14296 IF c_cap_fee_amnt%ISOPEN THEN
14297 CLOSE c_cap_fee_amnt;
14298 END IF;
14299 IF c_cap_down_pmnt%ISOPEN THEN
14300 CLOSE c_cap_down_pmnt;
14301 END IF;
14302 IF c_tradein_amnt%ISOPEN THEN
14303 CLOSE c_tradein_amnt;
14304 END IF;
14305 RETURN NULL;
14306 WHEN OTHERS THEN
14307 Okl_Api.SET_MESSAGE(
14308 p_app_name => G_APP_NAME,
14309 p_msg_name => G_UNEXPECTED_ERROR,
14310 p_token1 => G_SQLCODE_TOKEN,
14311 p_token1_value => SQLCODE,
14312 p_token2 => G_SQLERRM_TOKEN,
14313 p_token2_value => SQLERRM);
14314 IF c_asset_cost%ISOPEN THEN
14315 CLOSE c_asset_cost;
14316 END IF;
14317 IF c_addOn_cost%ISOPEN THEN
14318 CLOSE c_addOn_cost;
14319 END IF;
14320 IF c_cap_fee_amnt%ISOPEN THEN
14321 CLOSE c_cap_fee_amnt;
14322 END IF;
14323 IF c_cap_down_pmnt%ISOPEN THEN
14324 CLOSE c_cap_down_pmnt;
14325 END IF;
14326 IF c_tradein_amnt%ISOPEN THEN
14327 CLOSE c_tradein_amnt;
14328 END IF;
14329 RETURN NULL;
14330 END lease_quote_financed_amount;
14331 -- End by mansrini for ER Bug#6011738
14332
14333 -- Start : Added by mansrini for ER Bug#6011738
14334 -- -----------------------------------------------------------------------
14335 -- FUNCTION : line_financed_amount
14336 --
14337 -- DESC : Returns Financed Amount for an asset line of a contract
14338 -- which is calculated as
14339 -- Financed Amount = Asset Cost
14340 -- + Add-On to the asset
14341 -- + Capitalized Fee associated to the asset
14342 -- - Capitalized Down Payment for the asset
14343 -- - Trade-In Amount associated to the asset
14344 --
14345 -- PARAMETERS : IN p_contract_id, p_contract_line_id
14346 -- -----------------------------------------------------------------------
14347 FUNCTION line_financed_amount(p_contract_id IN NUMBER
14348 ,p_contract_line_id IN NUMBER)
14349 RETURN NUMBER IS
14350 G_APP_NAME CONSTANT VARCHAR2(3) :=
14351 OKL_API.G_APP_NAME;
14352 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
14353 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) :=
14354 OKL_API.G_COL_NAME_TOKEN;
14355 G_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) :=
14356 'OKL_LLA_NO_MATCHING_RECORD';
14357 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLERRM';
14358 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLCODE';
14359 G_LINE_RECORD CONSTANT VARCHAR2(200) :=
14360 'OKL_LLA_LINE_RECORD';
14361 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) :=
14362 'OKL_LLA_INVALID_CRITERIA';
14363 l_return_status VARCHAR2(3) :=
14364 OKL_API.G_RET_STS_SUCCESS;
14365
14366 l_lty_code OKC_LINE_STYLES_V.LTY_CODE%TYPE;
14367 l_financed_amount NUMBER;
14368 l_asset_cost NUMBER;
14369 l_addon NUMBER;
14370 l_cap_fee NUMBER;
14371 l_trade_in NUMBER;
14372 l_cap_down_pmnt NUMBER;
14373 l_cap_down_pct NUMBER;
14374 l_cap_down_pmnt_yn VARCHAR2(3);
14375
14376 -- Cursor to get the lty_code
14377 CURSOR get_lty_code(p_line_id NUMBER) IS
14378 SELECT lse.lty_code
14379 FROM okc_k_lines_b cle,
14380 okc_line_styles_b lse
14381 WHERE cle.id = p_line_id
14382 AND cle.lse_id = lse.id;
14383
14384 -- Cursor to sum up asset cost for given Asset line
14385 CURSOR c_asset_cost(p_line_id NUMBER,
14386 p_dnz_chr_id NUMBER) IS
14387 SELECT SUM(cle.price_unit * cim.number_of_items) asset_cost
14388 FROM okc_subclass_top_line stl,
14389 okc_line_styles_b lse2,
14390 okc_line_styles_b lse1,
14391 okc_k_items_v cim,
14392 okc_k_lines_v cle
14393 WHERE cle.cle_id = p_line_id
14394 AND cle.dnz_chr_id = p_dnz_chr_id
14395 AND cle.id = cim.cle_id
14396 AND cle.dnz_chr_id = cim.dnz_chr_id
14397 AND cle.lse_id = lse1.id
14398 AND lse1.lty_code = 'ITEM'
14399 AND lse1.lse_parent_id = lse2.id
14400 AND lse2.lty_code = 'FREE_FORM1'
14401 AND lse2.id = stl.lse_id
14402 AND stl.scs_code IN ('LEASE','LOAN');
14403
14404 -- Cursor to sum up addon amount for a given line
14405 CURSOR c_addon(p_line_id NUMBER,
14406 p_dnz_chr_id NUMBER) IS
14407 SELECT SUM(cle.price_unit* cim.number_of_items) add_on
14408 FROM okc_subclass_top_line stl,
14409 okc_line_styles_b lse3,
14410 okc_line_styles_b lse2,
14411 okc_line_styles_b lse1,
14412 okc_k_items_v cim,
14413 okc_k_lines_b cle
14414 WHERE cle.dnz_chr_id = p_dnz_chr_id
14415 AND cle.dnz_chr_id = cim.dnz_chr_id
14416 AND cle.id = cim.cle_id
14417 AND cle.lse_id = lse1.id
14418 AND lse1.lty_code = 'ADD_ITEM'
14419 AND lse1.lse_parent_id = lse2.id
14420 AND lse2.lty_code = 'ITEM'
14421 AND lse2.lse_parent_id = lse3.id
14422 AND lse3.lty_code = 'FREE_FORM1'
14423 AND lse3.id = stl.lse_id
14424 AND stl.scs_code IN ('LEASE','LOAN')
14425 AND exists (SELECT 1
14426 FROM okc_subclass_top_line stlx,
14427 okc_line_styles_b lse2x,
14428 okc_line_styles_b lse1x,
14429 okc_k_lines_b clex
14430 WHERE clex.cle_id = p_line_id
14431 AND clex.dnz_chr_id = p_dnz_chr_id
14432 AND clex.lse_id = lse1x.id
14433 AND lse1x.lty_code = 'ITEM'
14434 AND lse1x.lse_parent_id = lse2x.id
14435 AND lse2x.lty_code = 'FREE_FORM1'
14436 AND lse2x.id = stlx.lse_id
14437 AND stlx.scs_code IN ('LEASE','LOAN')
14438 AND clex.id = cle.cle_id);
14439
14440 --Cursor for Capitalized Fee
14441 CURSOR c_cap_fee(p_line_id VARCHAR2,
14442 p_dnz_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
14443 SELECT SUM(kle_cov.capital_amount) Cap_fee
14444 FROM okc_line_styles_b lseb,
14445 okc_k_items cim,
14446 okl_k_lines kle_cov,
14447 okc_k_lines_b cleb_cov,
14448 okc_statuses_b stsb
14449 WHERE lseb.id = cleb_cov.lse_id
14450 AND lseb.lty_code = 'LINK_FEE_ASSET'
14451 AND cim.jtot_object1_code = 'OKX_COVASST'
14452 AND cleb_cov.id = cim.cle_id
14453 AND kle_cov.id = cleb_cov.id
14454 AND cleb_cov.dnz_chr_id = cim.dnz_chr_id
14455 AND cleb_cov.dnz_chr_id = p_dnz_chr_id
14456 AND cim.object1_id1 = p_line_id
14457 AND cleb_cov.sts_code = stsb.code
14458 AND stsb.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED',
14459 'HOLD');
14460
14461 --Cursor for Trade-in Amount and Capital Down Payment
14462 CURSOR c_asset_adjust(p_line_id NUMBER,
14463 p_dnz_chr_id NUMBER) IS
14464 SELECT NVL(kle.capital_reduction,0) capital_reduction,
14465 NVL(kle.tradein_amount,0) tradein_amount,
14466 NVL(kle.capital_reduction_percent,0) capital_reduction_percent,
14467 kle.capitalize_down_payment_yn capitalize_down_payment_yn
14468 FROM okc_line_styles_b ls,
14469 okl_k_lines_full_v kle,
14470 okc_statuses_b sts
14471 WHERE kle.dnz_chr_id = p_dnz_chr_id
14472 AND kle.id = p_line_id
14473 AND ls.id = kle.lse_id
14474 AND ls.lty_code ='FREE_FORM1'
14475 AND kle.sts_code = sts.code
14476 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED',
14477 'HOLD');
14478
14479 BEGIN
14480 -- To get the Line Style Code
14481 OPEN get_lty_code(p_line_id => p_contract_line_id);
14482 IF get_lty_code%NOTFOUND THEN
14483 OKL_API.set_message(p_app_name => G_APP_NAME,
14484 p_msg_name => G_NO_MATCHING_RECORD,
14485 p_token1 => G_COL_NAME_TOKEN,
14486 p_token1_value => 'Financial Asset Line');
14487 RAISE OKL_API.G_EXCEPTION_ERROR;
14488 END IF;
14489 FETCH get_lty_code INTO l_lty_code;
14490 CLOSE get_lty_code;
14491
14492 IF l_lty_code = 'FREE_FORM1' THEN
14493 -- To get the asset cost
14494 OPEN c_asset_cost(p_line_id => p_contract_line_id,
14495 p_dnz_chr_id => p_contract_id);
14496 IF c_asset_cost%NOTFOUND THEN
14497 OKL_API.set_message(p_app_name => G_APP_NAME,
14498 p_msg_name => G_NO_MATCHING_RECORD,
14499 p_token1 => G_COL_NAME_TOKEN,
14500 p_token1_value => 'Model Line');
14501 RAISE OKL_API.G_EXCEPTION_ERROR;
14502 END IF;
14503 FETCH c_asset_cost INTO l_asset_cost;
14504 CLOSE c_asset_cost;
14505
14506 -- To get the Addon
14507 -- DJANASWA change begin 11/12/08
14508
14509 /* OPEN c_addon(p_line_id => p_contract_line_id,
14510 p_dnz_chr_id => p_contract_id);
14511 FETCH c_addon INTO l_addon;
14512 CLOSE c_addon;
14513 */
14514 l_addon := Okl_Seeded_Functions_Pvt.total_asset_addon_cost(
14515 p_contract_id => p_contract_id, p_contract_line_id => p_contract_line_id);
14516
14517 -- DJANASWA change end 11/12/08
14518
14519 l_addon := NVL(l_addon,0);
14520
14521 -- To get the Capitalized Fee
14522 OPEN c_cap_fee(p_line_id => TO_CHAR(p_contract_line_id),
14523 p_dnz_chr_id => p_contract_id);
14524 FETCH c_cap_fee INTO l_cap_fee;
14525 CLOSE c_cap_fee;
14526 l_cap_fee := NVL(l_cap_fee,0);
14527
14528 -- To get the Trade-in and Capitalized Down Payment
14529 OPEN c_asset_adjust(p_line_id => p_contract_line_id,
14530 p_dnz_chr_id => p_contract_id);
14531 FETCH c_asset_adjust INTO
14532 l_cap_down_pmnt,l_trade_in,l_cap_down_pct,l_cap_down_pmnt_yn;
14533 CLOSE c_asset_adjust;
14534 l_trade_in := NVL(l_trade_in,0);
14535 l_cap_down_pmnt := NVL(l_cap_down_pmnt,0);
14536 l_cap_down_pct := NVL(l_cap_down_pct,0);
14537 l_cap_down_pmnt_yn := NVL(l_cap_down_pmnt_yn,'N');
14538
14539 IF l_cap_down_pct<>0 THEN
14540 l_cap_down_pmnt := (l_asset_cost + l_addon) *
14541 l_cap_down_pct/100;
14542 END IF;
14543
14544 --Calculation of Financed Amount
14545 --on the basis of Capitalized Down Payment Flag
14546 IF l_cap_down_pmnt_yn = 'N' THEN
14547 l_financed_amount := l_asset_cost + l_addon + l_cap_fee -
14548 l_trade_in;
14549 ELSE
14550 l_financed_amount := l_asset_cost + l_addon + l_cap_fee -
14551 l_cap_down_pmnt - l_trade_in;
14552 END IF;
14553
14554 ELSE
14555 OKL_API.set_message(p_app_name => G_APP_NAME,
14556 p_msg_name => G_LINE_RECORD);
14557 RAISE OKL_API.G_EXCEPTION_ERROR;
14558 END IF;
14559 RETURN l_financed_amount;
14560 EXCEPTION
14561 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14562 -- If the cursor is open then it has to be closed
14563 IF get_lty_code%ISOPEN THEN
14564 CLOSE get_lty_code;
14565 END IF;
14566 IF c_asset_cost%ISOPEN THEN
14567 CLOSE c_asset_cost;
14568 END IF;
14569 IF c_addon%ISOPEN THEN
14570 CLOSE c_addon;
14571 END IF;
14572 IF c_cap_fee%ISOPEN THEN
14573 CLOSE c_cap_fee;
14574 END IF;
14575 IF c_asset_adjust%ISOPEN THEN
14576 CLOSE c_asset_adjust;
14577 END IF;
14578 RETURN NULL;
14579 WHEN OTHERS THEN
14580 -- If the cursor is open then it has to be closed
14581 IF get_lty_code%ISOPEN THEN
14582 CLOSE get_lty_code;
14583 END IF;
14584 IF c_asset_cost%ISOPEN THEN
14585 CLOSE c_asset_cost;
14586 END IF;
14587 IF c_addon%ISOPEN THEN
14588 CLOSE c_addon;
14589 END IF;
14590 IF c_cap_fee%ISOPEN THEN
14591 CLOSE c_cap_fee;
14592 END IF;
14593 IF c_asset_adjust%ISOPEN THEN
14594 CLOSE c_asset_adjust;
14595 END IF;
14596 RETURN NULL;
14597 END line_financed_amount;
14598
14599 -- --------------------------------------------------------------------
14600 -- FUNCTION : front_end_financed_amount
14601 --
14602 -- DESC : Returns Financed Amount for a financial asset line
14603 -- depending upon the parameters passed
14604 --
14605 -- If p_contract_id and p_contract_line_id are NULL,
14606 -- it implies that the function is called from LEASE
14607 -- QUOTE process and the financed amount is calculated
14608 -- using the function lease_quote_financed_amount().
14609 --
14610 -- And if p_contract_id and p_contract_line_id are not
14611 -- NULL, then it implies that the function is called
14612 -- from AUTHORING process and the financed amount is then
14613 -- calculated using the function line_financed_amount().
14614 --
14615 -- PARAMETERS : IN p_contract_id, p_contract_line_id
14616 -- --------------------------------------------------------------------
14617 FUNCTION front_end_financed_amount( p_contract_id IN NUMBER
14618 ,p_contract_line_id IN NUMBER)
14619 RETURN NUMBER IS
14620 G_APP_NAME CONSTANT VARCHAR2(3) :=
14621 OKL_API.G_APP_NAME;
14622 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
14623 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLERRM';
14624 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLCODE';
14625 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) :=
14626 'OKL_LLA_INVALID_CRITERIA';
14627 l_api_name CONSTANT VARCHAR2(30) :=
14628 'FRONT_END_FINANCED_AMOUNT';
14629
14630 l_financed_amt NUMBER := 0;
14631
14632 BEGIN
14633 -- Call from LEASE QUOTE
14634 IF p_contract_id IS NULL AND p_contract_line_id IS NULL THEN
14635 l_financed_amt := lease_quote_financed_amount;
14636
14637 -- Call from AUTHORING
14638 ELSIF (p_contract_id IS NOT NULL OR
14639 p_contract_id <> Okl_Api.G_MISS_NUM) AND
14640 (p_contract_line_id IS NOT NULL OR
14641 p_contract_line_id <> Okl_Api.G_MISS_NUM) THEN
14642 l_financed_amt := line_financed_amount(p_contract_id => p_contract_id,
14643 p_contract_line_id =>
14644 p_contract_line_id);
14645
14646 ELSE
14647 RAISE OKL_API.G_EXCEPTION_ERROR;
14648 END IF;
14649
14650 RETURN l_financed_amt;
14651
14652 EXCEPTION
14653 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14654 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
14655 p_msg_name => G_INVALID_CRITERIA);
14656 RETURN NULL;
14657 WHEN OTHERS THEN
14658 OKL_API.SET_MESSAGE(
14659 p_app_name => G_APP_NAME,
14660 p_msg_name => G_UNEXPECTED_ERROR,
14661 p_token1 => G_SQLCODE_TOKEN,
14662 p_token1_value => SQLCODE,
14663 p_token2 => G_SQLERRM_TOKEN,
14664 p_token2_value => SQLERRM);
14665 RETURN NULL;
14666 END front_end_financed_amount;
14667 --End by mansrini for Bug#6011738
14668
14669
14670 -- --------------------------------------------------------------------
14671 -- FUNCTION : total_asset_addon_cost
14672 --
14673 -- DESC : Returns total asset addon cost.
14674 --
14675 -- PARAMETERS : IN p_contract_id, p_contract_line_id
14676 -- Added by Durga Janaswamy
14677 -- --------------------------------------------------------------------
14678 FUNCTION total_asset_addon_cost ( p_contract_id IN NUMBER
14679 ,p_contract_line_id IN NUMBER)
14680 RETURN NUMBER IS
14681 G_APP_NAME CONSTANT VARCHAR2(3) := OKL_API.G_APP_NAME;
14682 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
14683 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLERRM';
14684 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLCODE';
14685 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_CRITERIA';
14686 l_api_name CONSTANT VARCHAR2(30) := 'TOTAL_ASSET_ADDON_COST';
14687
14688 l_addon_cost NUMBER := 0;
14689
14690 CURSOR c_addon_cost_csr (p_contract_id IN NUMBER,
14691 p_contract_line_id IN NUMBER) IS
14692 SELECT SUM(cle.price_unit* cim.number_of_items) add_on_cost
14693 FROM okc_subclass_top_line stl,
14694 okc_line_styles_b lse3,
14695 okc_line_styles_b lse2,
14696 okc_line_styles_b lse1,
14697 okc_k_items_v cim,
14698 okc_k_lines_b cle
14699 WHERE cle.dnz_chr_id = p_contract_id
14700 AND cle.dnz_chr_id = cim.dnz_chr_id
14701 AND cle.id = cim.cle_id
14702 AND cle.lse_id = lse1.id
14703 AND lse1.lty_code = 'ADD_ITEM' -- G_ADDON_LINE_LTY_CODE
14704 AND lse1.lse_parent_id = lse2.id
14705 AND lse2.lty_code = 'ITEM' -- G_MODEL_LINE_LTY_CODE
14706 AND lse2.lse_parent_id = lse3.id
14707 AND lse3.lty_code = 'FREE_FORM1' -- G_FIN_LINE_LTY_CODE
14708 AND lse3.id = stl.lse_id
14709 AND stl.scs_code IN ('LEASE','LOAN')
14710 AND exists (SELECT 1
14711 FROM okc_subclass_top_line stlx,
14712 okc_line_styles_b lse2x,
14713 okc_line_styles_b lse1x,
14714 okc_k_lines_b clex
14715 WHERE clex.cle_id = p_contract_line_id -- lse_id = 33>
14716 AND clex.dnz_chr_id = p_contract_id
14717 AND clex.lse_id = lse1x.id
14718 AND lse1x.lty_code = 'ITEM' -- G_MODEL_LINE_LTY_CODE
14719 AND lse1x.lse_parent_id = lse2x.id
14720 AND lse2x.lty_code = 'FREE_FORM1' -- G_FIN_LINE_LTY_CODE
14721 AND lse2x.id = stlx.lse_id
14722 AND stlx.scs_code IN ('LEASE','LOAN')
14723 AND clex.id = cle.cle_id);
14724
14725
14726 BEGIN
14727
14728 IF (p_contract_id IS NOT NULL OR
14729 p_contract_id <> Okl_Api.G_MISS_NUM) AND
14730 (p_contract_line_id IS NOT NULL OR
14731 p_contract_line_id <> Okl_Api.G_MISS_NUM) THEN
14732
14733 OPEN c_addon_cost_csr ( p_contract_id => p_contract_id,
14734 p_contract_line_id => p_contract_line_id);
14735
14736 IF c_addon_cost_csr%NOTFOUND THEN
14737 NULL;
14738 END IF;
14739
14740 FETCH c_addon_cost_csr INTO l_addon_cost;
14741 CLOSE c_addon_cost_csr;
14742 END IF;
14743
14744 l_addon_cost := NVL(l_addon_cost,0);
14745
14746 RETURN(l_addon_cost);
14747
14748
14749 EXCEPTION
14750 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14751 IF c_addon_cost_csr%ISOPEN THEN
14752 CLOSE c_addon_cost_csr;
14753 END IF;
14754
14755 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
14756 p_msg_name => G_INVALID_CRITERIA);
14757 RETURN NULL;
14758
14759
14760 WHEN OTHERS THEN
14761 --sechawla 18-nov-08 : close cursor
14762 IF c_addon_cost_csr%ISOPEN THEN
14763 CLOSE c_addon_cost_csr;
14764 END IF;
14765 OKL_API.SET_MESSAGE(
14766 p_app_name => G_APP_NAME,
14767 p_msg_name => G_UNEXPECTED_ERROR,
14768 p_token1 => G_SQLCODE_TOKEN,
14769 p_token1_value => SQLCODE,
14770 p_token2 => G_SQLERRM_TOKEN,
14771 p_token2_value => SQLERRM);
14772 RETURN NULL;
14773 END TOTAL_ASSET_ADDON_COST;
14774
14775
14776 ----------------------------------------------------------------------------------------------------
14777
14778 -- Start of Comments
14779 -- Created By: Durga Janaswamy
14780 -- Function Name get_line_subsidy_amount
14781 -- Description: returns the asset line subsidy amount for given contract
14782 -- Dependencies:
14783 -- Parameters: contract id,contract line id, accounting method
14784 --
14785 -- Version: 1.0
14786 --
14787 -- End of Comments
14788
14789 ----------------------------------------------------------------------------------------------------
14790 FUNCTION get_line_subsidy_amount(
14791 p_contract_id IN NUMBER,
14792 p_fin_asset_line_id IN NUMBER,
14793 p_accounting_method IN VARCHAR2)
14794 RETURN NUMBER IS
14795
14796 lx_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
14797 l_api_name CONSTANT VARCHAR2(30) := 'GET_LINE_ASSET_SUBSIDY';
14798 l_api_version CONSTANT NUMBER := 1.0;
14799 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
14800 lx_msg_count NUMBER := OKL_API.G_MISS_NUM;
14801 lx_msg_data VARCHAR2(2000);
14802
14803 x_subsidy_amount NUMBER;
14804
14805 l_asset_line_subsidy_amount NUMBER;
14806
14807 --cursor to fetch all the subsidies attached to financial asset
14808 -- passing accounting method as input parameter
14809 CURSOR l_sub_csr(p_contract_id IN NUMBER,
14810 p_fin_asset_line_id IN NUMBER,
14811 p_accounting_method IN VARCHAR2) IS
14812 SELECT NVL(SUM(sub_kle.amount),0)
14813 FROM okl_subsidies_b subb,
14814 okl_k_lines sub_kle,
14815 okc_k_lines_b sub_cle,
14816 okc_line_styles_b sub_lse
14817 WHERE subb.id = sub_kle.subsidy_id
14818 AND subb.accounting_method_code = NVL(UPPER(p_accounting_method),subb.accounting_method_code)
14819 AND sub_kle.id = sub_cle.id
14820 AND sub_cle.lse_id = sub_lse.id
14821 AND sub_lse.lty_code = 'SUBSIDY'
14822 AND sub_cle.sts_code <> 'ABANDONED'
14823 AND sub_cle.dnz_chr_id = p_contract_id
14824 AND sub_cle.cle_id = p_fin_asset_line_id
14825 AND subb.customer_visible_yn = 'Y'
14826 ;
14827
14828 l_accounting_method okl_subsidies_b.accounting_method_code%TYPE;
14829 l_subsidy_cle_id NUMBER;
14830
14831 BEGIN
14832
14833 l_asset_line_subsidy_amount := 0;
14834
14835 x_subsidy_amount := 0;
14836
14837
14838 IF(p_accounting_method IS NULL OR p_accounting_method = OKL_API.G_MISS_CHAR) THEN
14839 l_accounting_method := NULL;
14840 ELSE
14841 l_accounting_method := p_accounting_method;
14842 END IF;
14843
14844 --------------------------------------------------------------
14845 --get all the subsidies associated to asset and get amount
14846 --------------------------------------------------------------
14847 OPEN l_sub_csr(p_contract_id , p_fin_asset_line_id, l_accounting_method);
14848 --LOOP --sechawla 18-nov
14849 FETCH l_sub_csr INTO l_asset_line_subsidy_amount;
14850 -- EXIT WHEN l_sub_csr%NOTFOUND;
14851 -- END LOOP;
14852 CLOSE l_sub_csr;
14853
14854 x_subsidy_amount := NVL(l_asset_line_subsidy_amount,0);
14855
14856 RETURN x_subsidy_amount;
14857
14858 EXCEPTION
14859 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14860 IF l_sub_csr%ISOPEN THEN
14861 CLOSE l_sub_csr;
14862 END IF;
14863 lx_return_status := OKL_API.HANDLE_EXCEPTIONS(
14864 l_api_name,
14865 G_PKG_NAME,
14866 'OKL_API.G_RET_STS_ERROR',
14867 lx_msg_count,
14868 lx_msg_data,
14869 '_PVT');
14870 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14871 IF l_sub_csr%ISOPEN THEN
14872 CLOSE l_sub_csr;
14873 END IF;
14874 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14875 l_api_name,
14876 G_PKG_NAME,
14877 'OKL_API.G_RET_STS_UNEXP_ERROR',
14878 lx_msg_count,
14879 lx_msg_data,
14880 '_PVT');
14881 WHEN OTHERS THEN
14882 IF l_sub_csr%ISOPEN THEN
14883 CLOSE l_sub_csr;
14884 END IF;
14885 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14886 l_api_name,
14887 G_PKG_NAME,
14888 'OTHERS',
14889 lx_msg_count,
14890 lx_msg_data,
14891 '_PVT');
14892
14893 END get_line_subsidy_amount;
14894
14895
14896 ----------------------------------------------------------------------------------------------------
14897
14898 -- Start of Comments
14899 -- Created By: Durga Janaswamy
14900 -- Function Name get_line_subsidy_ovrd_amount
14901 -- Description: returns the asset line subsidy amount for given contract
14902 -- Dependencies:
14903 -- Parameters: contract id,contract line id, accounting method
14904 --
14905 -- Version: 1.0
14906 --
14907 -- End of Comments
14908
14909 ----------------------------------------------------------------------------------------------------
14910 FUNCTION get_line_subsidy_ovrd_amount(
14911 p_contract_id IN NUMBER,
14912 p_fin_asset_line_id IN NUMBER,
14913 p_accounting_method IN VARCHAR2)
14914 RETURN NUMBER IS
14915
14916 lx_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
14917 l_api_name CONSTANT VARCHAR2(30) := 'GET_LINE_ASSET_SUBSIDY_OVRD';
14918 l_api_version CONSTANT NUMBER := 1.0;
14919 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
14920 lx_msg_count NUMBER := OKL_API.G_MISS_NUM;
14921 lx_msg_data VARCHAR2(2000);
14922
14923 x_subsidy_amount NUMBER;
14924
14925 l_asset_line_subs_ovrd_amn NUMBER;
14926
14927 --cursor to fetch all the subsidies attached to financial asset
14928 -- passing accounting method as input parameter
14929 CURSOR l_sub_csr(p_contract_id IN NUMBER,
14930 p_fin_asset_line_id IN NUMBER,
14931 p_accounting_method IN VARCHAR2) IS
14932 SELECT NVL(SUM(sub_kle.subsidy_override_amount),0)
14933 FROM okl_subsidies_b subb,
14934 okl_k_lines sub_kle,
14935 okc_k_lines_b sub_cle,
14936 okc_line_styles_b sub_lse
14937 WHERE subb.id = sub_kle.subsidy_id
14938 AND subb.accounting_method_code = NVL(UPPER(p_accounting_method),subb.accounting_method_code)
14939 AND sub_kle.id = sub_cle.id
14940 AND sub_cle.lse_id = sub_lse.id
14941 AND sub_lse.lty_code = 'SUBSIDY'
14942 AND sub_cle.sts_code <> 'ABANDONED'
14943 AND sub_cle.dnz_chr_id = p_contract_id
14944 AND sub_cle.cle_id = p_fin_asset_line_id
14945 AND subb.customer_visible_yn = 'Y'
14946 ;
14947
14948 l_accounting_method okl_subsidies_b.accounting_method_code%TYPE;
14949 l_subsidy_cle_id NUMBER;
14950
14951 BEGIN
14952
14953 l_asset_line_subs_ovrd_amn := 0;
14954
14955 x_subsidy_amount := 0;
14956
14957 IF(p_accounting_method IS NULL OR p_accounting_method = OKL_API.G_MISS_CHAR) THEN
14958 l_accounting_method := NULL;
14959 ELSE
14960 l_accounting_method := p_accounting_method;
14961 END IF;
14962
14963 --------------------------------------------------------------
14964 --get all the subsidies associated to asset and get amount
14965 --------------------------------------------------------------
14966 OPEN l_sub_csr(p_contract_id , p_fin_asset_line_id, l_accounting_method);
14967 --LOOP --sechawla 18-nov-08
14968 FETCH l_sub_csr INTO l_asset_line_subs_ovrd_amn;
14969 -- EXIT WHEN l_sub_csr%NOTFOUND;
14970 --END LOOP;
14971 CLOSE l_sub_csr;
14972
14973 x_subsidy_amount := NVL(l_asset_line_subs_ovrd_amn,0);
14974
14975 RETURN x_subsidy_amount;
14976
14977 EXCEPTION
14978 WHEN OKL_API.G_EXCEPTION_ERROR THEN
14979 IF l_sub_csr%ISOPEN THEN
14980 CLOSE l_sub_csr;
14981 END IF;
14982 lx_return_status := OKL_API.HANDLE_EXCEPTIONS(
14983 l_api_name,
14984 G_PKG_NAME,
14985 'OKL_API.G_RET_STS_ERROR',
14986 lx_msg_count,
14987 lx_msg_data,
14988 '_PVT');
14989 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
14990 IF l_sub_csr%ISOPEN THEN
14991 CLOSE l_sub_csr;
14992 END IF;
14993 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
14994 l_api_name,
14995 G_PKG_NAME,
14996 'OKL_API.G_RET_STS_UNEXP_ERROR',
14997 lx_msg_count,
14998 lx_msg_data,
14999 '_PVT');
15000 WHEN OTHERS THEN
15001 IF l_sub_csr%ISOPEN THEN
15002 CLOSE l_sub_csr;
15003 END IF;
15004 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
15005 l_api_name,
15006 G_PKG_NAME,
15007 'OTHERS',
15008 lx_msg_count,
15009 lx_msg_data,
15010 '_PVT');
15011
15012 END get_line_subsidy_ovrd_amount;
15013
15014
15015 ----------------------------------------------------------------------------------------------------
15016
15017 -- Start of Comments
15018 -- Created By: Seema Chawla
15019 -- Function Name Total_Asset_Financed_Fee_Amt
15020 -- Description: Returns total financed fee amount associated to an asset line
15021 -- Dependencies:
15022 -- Parameters: contract id and line id
15023 -- Version: 1.0
15024 -- End of Commnets
15025
15026 ----------------------------------------------------------------------------------------------------
15027 FUNCTION Total_Asset_Financed_Fee_Amt(
15028 p_chr_id IN NUMBER,
15029 p_line_id IN NUMBER) RETURN NUMBER IS
15030
15031 l_api_version CONSTANT NUMBER := 1;
15032 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
15033 x_msg_count NUMBER;
15034 x_msg_data VARCHAR2(256);
15035
15036 l_Asset_Fin_fees_amt NUMBER := 0;
15037
15038 CURSOR l_fee_csr( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
15039 SELECT sum(kle_cov.amount) asset_fin_fee_amt
15040 FROM OKC_LINE_STYLES_B LSEB,
15041 OKC_K_ITEMS CIM,
15042 OKL_K_LINES KLE_COV,
15043 okl_k_lines fee_line,
15044 OKC_K_LINES_B CLEB_COV,
15045 OKC_STATUSES_B STSB
15046 WHERE LSEB.ID = CLEB_COV.LSE_ID
15047 AND LSEB.lty_code = 'LINK_FEE_ASSET'
15048 AND CIM.jtot_object1_code = 'OKX_COVASST'
15049 AND CLEB_COV.id = CIM.cle_id
15050 AND KLE_COV.id = CLEB_COV.ID
15051 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
15052 AND CLEB_COV.dnz_chr_id = c_chr_id
15053 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
15054 AND CLEB_COV.sts_code = STSB.code
15055 and CLEB_COV.cle_id = fee_line.id
15056 and fee_line.fee_type = 'FINANCED'
15057 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
15058
15059
15060 CURSOR l_fee_csr_incl_terminated( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
15061 SELECT sum(kle_cov.amount) asset_fin_fee_amt
15062 FROM OKC_LINE_STYLES_B LSEB,
15063 OKC_K_ITEMS CIM,
15064 OKL_K_LINES KLE_COV,
15065 okl_k_lines fee_line,
15066 OKC_K_LINES_B CLEB_COV,
15067 OKC_STATUSES_B STSB
15068 WHERE LSEB.ID = CLEB_COV.LSE_ID
15069 AND LSEB.lty_code = 'LINK_FEE_ASSET'
15070 AND CIM.jtot_object1_code = 'OKX_COVASST'
15071 AND CLEB_COV.id = CIM.cle_id
15072 AND KLE_COV.id = CLEB_COV.ID
15073 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
15074 AND CLEB_COV.dnz_chr_id = c_chr_id
15075 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
15076 AND CLEB_COV.sts_code = STSB.code
15077 and CLEB_COV.cle_id = fee_line.id
15078 and fee_line.fee_type = 'FINANCED'
15079 AND STSB.ste_code NOT IN ( 'EXPIRED', 'CANCELLED', 'HOLD');
15080
15081
15082
15083 l_discount_incl_terminated BOOLEAN := FALSE;
15084
15085 BEGIN
15086
15087 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL)) THEN
15088 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
15089 END IF;
15090
15091
15092 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
15093 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
15094 LOOP
15095 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
15096 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
15097 l_discount_incl_terminated := TRUE;
15098 END IF;
15099 END LOOP;
15100 END IF;
15101
15102
15103 IF l_discount_incl_terminated THEN
15104 OPEN l_fee_csr_incl_terminated (p_chr_id, p_line_id );
15105 FETCH l_fee_csr_incl_terminated INTO l_Asset_Fin_fees_amt;
15106 CLOSE l_fee_csr_incl_terminated;
15107 ELSE
15108 OPEN l_fee_csr( p_chr_id, p_line_id );
15109 FETCH l_fee_csr INTO l_Asset_Fin_fees_amt;
15110 CLOSE l_fee_csr;
15111 END IF;
15112
15113 l_Asset_Fin_fees_amt := nvl(l_Asset_Fin_fees_amt,0);
15114
15115 RETURN l_Asset_Fin_fees_amt;
15116
15117 EXCEPTION
15118
15119 WHEN OTHERS THEN
15120 IF l_fee_csr_incl_terminated%ISOPEN THEN
15121 CLOSE l_fee_csr_incl_terminated;
15122 END IF;
15123 IF l_fee_csr%ISOPEN THEN
15124 CLOSE l_fee_csr;
15125 END IF;
15126
15127 Okl_Api.SET_MESSAGE(
15128 p_app_name => G_APP_NAME,
15129 p_msg_name => G_UNEXPECTED_ERROR,
15130 p_token1 => G_SQLCODE_TOKEN,
15131 p_token1_value => SQLCODE,
15132 p_token2 => G_SQLERRM_TOKEN,
15133 p_token2_value => SQLERRM);
15134 RETURN NULL;
15135
15136 END Total_Asset_Financed_Fee_Amt;
15137
15138
15139 ----------------------------------------------------------------------------------------------------
15140
15141 -- Start of Comments
15142 -- Created By: Seema Chawla
15143 -- Function Name Total_Asset_Rollover_Fee_Amt
15144 -- Description: Returns total Rollover fee amount associated to an asset line
15145 -- Dependencies:
15146 -- Parameters: contract id and line id
15147 -- Version: 1.0
15148 -- End of Commnets
15149
15150 ----------------------------------------------------------------------------------------------------
15151 FUNCTION Total_Asset_Rollover_Fee_Amt(
15152 p_chr_id IN NUMBER,
15153 p_line_id IN NUMBER) RETURN NUMBER IS
15154
15155 l_api_version CONSTANT NUMBER := 1;
15156 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
15157 x_msg_count NUMBER;
15158 x_msg_data VARCHAR2(256);
15159
15160 l_Asset_Roll_fees_amt NUMBER := 0;
15161
15162 CURSOR l_fee_csr( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
15163 SELECT sum(kle_cov.amount) asset_roll_fee_amt
15164 FROM OKC_LINE_STYLES_B LSEB,
15165 OKC_K_ITEMS CIM,
15166 OKL_K_LINES KLE_COV,
15167 okl_k_lines fee_line,
15168 OKC_K_LINES_B CLEB_COV,
15169 OKC_STATUSES_B STSB
15170 WHERE LSEB.ID = CLEB_COV.LSE_ID
15171 AND LSEB.lty_code = 'LINK_FEE_ASSET'
15172 AND CIM.jtot_object1_code = 'OKX_COVASST'
15173 AND CLEB_COV.id = CIM.cle_id
15174 AND KLE_COV.id = CLEB_COV.ID
15175 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
15176 AND CLEB_COV.dnz_chr_id = c_chr_id
15177 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
15178 AND CLEB_COV.sts_code = STSB.code
15179 and CLEB_COV.cle_id = fee_line.id
15180 and fee_line.fee_type = 'ROLLOVER'
15181 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
15182
15183
15184 CURSOR l_fee_csr_incl_terminated( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
15185 SELECT sum(kle_cov.amount) asset_roll_fee_amt
15186 FROM OKC_LINE_STYLES_B LSEB,
15187 OKC_K_ITEMS CIM,
15188 OKL_K_LINES KLE_COV,
15189 okl_k_lines fee_line,
15190 OKC_K_LINES_B CLEB_COV,
15191 OKC_STATUSES_B STSB
15192 WHERE LSEB.ID = CLEB_COV.LSE_ID
15193 AND LSEB.lty_code = 'LINK_FEE_ASSET'
15194 AND CIM.jtot_object1_code = 'OKX_COVASST'
15195 AND CLEB_COV.id = CIM.cle_id
15196 AND KLE_COV.id = CLEB_COV.ID
15197 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
15198 AND CLEB_COV.dnz_chr_id = c_chr_id
15199 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
15200 AND CLEB_COV.sts_code = STSB.code
15201 and CLEB_COV.cle_id = fee_line.id
15202 and fee_line.fee_type = 'ROLLOVER'
15203 AND STSB.ste_code NOT IN ( 'EXPIRED', 'CANCELLED', 'HOLD');
15204
15205
15206
15207 l_discount_incl_terminated BOOLEAN := FALSE;
15208
15209 BEGIN
15210
15211 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL)) THEN
15212 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
15213 END IF;
15214
15215
15216 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
15217 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
15218 LOOP
15219 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
15220 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
15221 l_discount_incl_terminated := TRUE;
15222 END IF;
15223 END LOOP;
15224 END IF;
15225
15226
15227 IF l_discount_incl_terminated THEN
15228 OPEN l_fee_csr_incl_terminated (p_chr_id, p_line_id );
15229 FETCH l_fee_csr_incl_terminated INTO l_Asset_roll_fees_amt;
15230 CLOSE l_fee_csr_incl_terminated;
15231 ELSE
15232 OPEN l_fee_csr( p_chr_id, p_line_id );
15233 FETCH l_fee_csr INTO l_Asset_roll_fees_amt;
15234 CLOSE l_fee_csr;
15235 END IF;
15236
15237 l_Asset_roll_fees_amt := nvl(l_Asset_roll_fees_amt,0);
15238
15239 RETURN l_Asset_roll_fees_amt;
15240
15241 EXCEPTION
15242
15243 WHEN OTHERS THEN
15244 IF l_fee_csr_incl_terminated%ISOPEN THEN
15245 CLOSE l_fee_csr_incl_terminated;
15246 END IF;
15247 IF l_fee_csr%ISOPEN THEN
15248 CLOSE l_fee_csr;
15249 END IF;
15250
15251 Okl_Api.SET_MESSAGE(
15252 p_app_name => G_APP_NAME,
15253 p_msg_name => G_UNEXPECTED_ERROR,
15254 p_token1 => G_SQLCODE_TOKEN,
15255 p_token1_value => SQLCODE,
15256 p_token2 => G_SQLERRM_TOKEN,
15257 p_token2_value => SQLERRM);
15258 RETURN NULL;
15259
15260 END Total_Asset_Rollover_Fee_Amt;
15261
15262
15263 END Okl_Seeded_Functions_Pvt;