[Home] [Help]
PACKAGE BODY: APPS.OKL_SEEDED_FUNCTIONS_PVT
Source
1 PACKAGE BODY Okl_Seeded_Functions_Pvt AS
2 /* $Header: OKLRSFFB.pls 120.141.12020000.9 2013/03/20 12:11:23 racheruv 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 -- Procedures and Functions
15 ----------------------------------------------------------------------------
16
17 ---------------------------------------------------------------------------
18 -- Start of Comments
19 -- FUNCTION: INS_MONTHLY_PREMIUM
20 -- DESC : It returns monthly insurance premium
21 -- IN : p_contract_id ,p_contract_line_id
22 -- OUT : Monthly Premium
23 -- Created By: Dalip Khandel (dkhandel)
24 -- Version: 1.0
25 -- End of Commnets
26 ----------------------------------------------------------------------------------------------------
27
28 FUNCTION INS_MONTHLY_PREMIUM(
29 p_contract_id IN NUMBER
30 ,p_contract_line_id IN NUMBER
31 ) RETURN NUMBER
32 IS
33 l_amount NUMBER := 0;
34 ls_payment_freq VARCHAR2(30) ;
35 l_monthly_premium NUMBER := 0;
36 l_freq_factor NUMBER := 0;
37 date_to DATE ;
38 date_from DATE ;
39
40 CURSOR c_monthly_premium (p_contract_id NUMBER,p_contract_line_id NUMBER )
41 IS
42 SELECT PREMIUM , IPF_CODE, DATE_TO , DATE_FROM
43 FROM OKL_INS_POLICIES_B IPYB
44 WHERE IPYB.kle_id = p_contract_line_id
45 AND IPYB.khr_id = p_contract_id ;
46
47 BEGIN
48
49 OPEN c_monthly_premium (p_contract_id,p_contract_line_id );
50 FETCH c_monthly_premium INTO l_amount, ls_payment_freq, date_to, date_from;
51 IF(c_monthly_premium%NOTFOUND) THEN
52 Okc_Api.set_message(G_APP_NAME, G_INVALID_CONTRACT_LINE,
53 G_COL_NAME_TOKEN,p_contract_line_id);
54 -- x_return_status := OKC_API.G_RET_STS_ERROR ;
55 CLOSE c_monthly_premium ;
56 RAISE OKC_API.G_EXCEPTION_ERROR;
57 END IF ;
58 CLOSE c_monthly_premium;
59
60 IF(ls_payment_freq = 'MONTHLY') THEN
61 l_freq_factor := 1;
62 ELSIF(ls_payment_freq = 'BI_MONTHLY') THEN
63 l_freq_factor := 1/2;
64 ELSIF(ls_payment_freq = 'HALF_YEARLY') THEN
65 l_freq_factor := 6; --- ETC.
66 ELSIF(ls_payment_freq = 'QUARTERLY') THEN
67 l_freq_factor := 3;
68 ELSIF(ls_payment_freq = 'YEARLY') THEN
69 l_freq_factor := 12;
70 ELSIF(ls_payment_freq = 'LUMP_SUM') THEN
71 -- Bug# 4056484 PAGARG removing rounding
72 l_freq_factor := MONTHS_BETWEEN( date_to,date_from);
73 END IF;
74 l_monthly_premium := l_amount / l_freq_factor ;
75 RETURN l_monthly_premium;
76 EXCEPTION
77 WHEN OTHERS THEN
78 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
79 p_msg_name => 'OKL_UNEXPECTED_ERROR',
80 p_token1 => 'OKL_SQLCODE',
81 p_token1_value => SQLCODE,
82 p_token2 => 'OKL_SQLERRM',
83 p_token2_value => SQLERRM);
84 RETURN NULL;
85
86 END;
87
88 ----------------------------------------------------------------------------------------------------
89
90
91 ---------------------------------------------------------------------------
92 -- Start of Comments
93 -- FUNCTION: INS_REFUNDABLE_MONTHS
94 -- DESC : It returns number of months to be refunded
95 -- IN : p_contract_id ,p_contract_line_id
96 -- OUT : Number of months
97 -- Created By: Dalip Khandel (dkhandel)
98 -- Version: 1.0
99 -- End of Commnets
100 ----------------------------------------------------------------------------------------------------
101
102 FUNCTION INS_REFUNDABLE_MONTHS(
103 p_contract_id IN NUMBER
104 -- ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
105 ,p_contract_line_id IN NUMBER
106 )
107 RETURN NUMBER
108 IS
109
110
111 CURSOR c_total_amount_paid (p_sty_id NUMBER)
112 IS
113 SELECT COUNT(*)
114 FROM okl_strm_elements STRE, OKL_STREAMS STR
115 WHERE STR.ID = STRE.STM_ID
116 AND STR.STY_ID = p_sty_id
117 AND STRE.DATE_BILLED IS NOT NULL
118 AND STR.KHR_ID = p_contract_id
119 AND STR.KLE_ID = p_contract_line_id;
120
121 CURSOR C_OKL_STRM_TYPE_REC_V IS
122 SELECT ID
123 FROM OKL_STRM_TYPE_TL
124 WHERE NAME = 'INSURANCE RECEIVABLE'
125 AND LANGUAGE = 'US';
126
127 CURSOR c_monthly_premium (p_contract_id NUMBER,p_contract_line_id NUMBER )
128 IS
129 SELECT IPF_CODE, DATE_TO , DATE_FROM --, CANCELLATION_DATE --++Effective DatedTermination ++---
130 FROM OKL_INS_POLICIES_B IPYB
131 WHERE IPYB.kle_id = p_contract_line_id
132 AND IPYB.khr_id = p_contract_id ;
133
134
135 ls_payment_freq OKL_INS_POLICIES_B.IPF_CODE%TYPE;
136 date_to OKL_INS_POLICIES_B.DATE_TO%TYPE ;
137 date_from OKL_INS_POLICIES_B.DATE_FROM%TYPE ;
138 cancel_date OKL_INS_POLICIES_B.CANCELLATION_DATE%TYPE;
139 l_stm_type_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
140
141
142 l_profile_value NUMBER := 0;
143 l_months_to_refund NUMBER := 0;
144
145 l_no_of_rec NUMBER := 0;
146 l_freq_factor NUMBER;
147 l_total_num_months_paid NUMBER;
148 l_total_consumed_months NUMBER;
149 l_unconsumed_months NUMBER;
150 l_cancellation_date DATE; ---++ Ins Effective Dated Term Changes ++----
151 l_cancellation_reason VARCHAR2(30);---++ Ins Effective Dated Term Changes ++----
152 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
153
154 BEGIN
155 -- ********************************************
156 -- Extract Insurance Cancellation Date from global variables
157 -- ********************************************
158 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(1)
159 AND okl_execute_formula_pub.g_additional_parameters(1).name = ' CANCELLATION DATE'
160 AND okl_execute_formula_pub.g_additional_parameters(1).value IS NOT NULL
161 THEN
162 l_cancellation_date := TO_DATE
163 (okl_execute_formula_pub.g_additional_parameters(1).value, 'MM/DD/YYYY');
164 END IF;
165 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(2)
166 AND okl_execute_formula_pub.g_additional_parameters(2).name = ' CANCELLATION REASON'
167 AND okl_execute_formula_pub.g_additional_parameters(2).value IS NOT NULL
168 THEN
169 l_cancellation_reason := TO_char
170 (okl_execute_formula_pub.g_additional_parameters(2).value);
171 END IF;
172 ---++ Ins Effective Dated Term Changes End ++----
173
174 -- GET profile value
175 l_profile_value := fnd_profile.value('OKLINMAXTERMFORINS');
176
177 IF(( l_profile_value = NULL) OR (l_profile_value = OKC_API.G_MISS_NUM )) THEN
178 l_unconsumed_months := 0 ;
179 END IF;
180
181 /*OPEN C_OKL_STRM_TYPE_REC_V ;
182 FETCH C_OKL_STRM_TYPE_REC_V INTO l_stm_type_id;
183 IF(C_OKL_STRM_TYPE_REC_V%NOTFOUND) THEN
184 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
185 G_COL_NAME_TOKEN,'Billing');
186 CLOSE C_OKL_STRM_TYPE_REC_V ;
187 RAISE OKC_API.G_EXCEPTION_ERROR;
188 END IF ;
189 CLOSE C_OKL_STRM_TYPE_REC_V;*/
190 -- cursor fetch replaced with the streams util call, change
191 -- done for user defined streams impacts, bug 3924300
192 -- begin changes for bug 3924300
193
194 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
195 'INSURANCE_RECEIVABLE',
196 l_return_status,
197 l_stm_type_id);
198 IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
199 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
200 ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
201 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_STREAM_TYPE', G_PURPOSE_TOKEN,'INSURANCE_RECEIVABLE'); -- bug 4024785
202 RAISE OKC_API.G_EXCEPTION_ERROR;
203 END IF;
204 -- end changes for bug 3924300
205
206
207 OPEN c_total_amount_paid(l_stm_type_id) ;
208 FETCH c_total_amount_paid INTO l_no_of_rec;
209 IF(c_total_amount_paid%NOTFOUND) THEN
210 l_no_of_rec := 0;
211 END IF ;
212 CLOSE c_total_amount_paid;
213
214
215 OPEN c_monthly_premium (p_contract_id,p_contract_line_id );
216 FETCH c_monthly_premium INTO ls_payment_freq, date_to, date_from;--, cancel_date;--++ Effective Dated TErmination ++--
217 IF(c_monthly_premium%NOTFOUND) THEN
218 Okc_Api.set_message(G_APP_NAME, G_INVALID_CONTRACT_LINE,
219 G_COL_NAME_TOKEN,p_contract_line_id);
220 -- x_return_status := OKC_API.G_RET_STS_ERROR ;
221 CLOSE c_monthly_premium ;
222 RAISE OKC_API.G_EXCEPTION_ERROR;
223 END IF ;
224 CLOSE c_monthly_premium;
225
226 ---++ Ins Effective Dated Term Changes Start ++----
227 IF(( l_cancellation_date IS NULL) OR (l_cancellation_date = OKC_API.G_MISS_DATE )) THEN
228 cancel_date := SYSDATE ;
229 ELSE
230 cancel_date := l_cancellation_date;
231 END IF;
232 ---++ Ins Effective Dated Term Changes End ++----
233
234 IF(ls_payment_freq = 'MONTHLY') THEN
235 l_freq_factor := 1;
236 ELSIF(ls_payment_freq = 'BI_MONTHLY') THEN
237 l_freq_factor := 1/2;
238 ELSIF(ls_payment_freq = 'HALF_YEARLY') THEN
239 l_freq_factor := 6; --- ETC.
240 ELSIF(ls_payment_freq = 'QUARTERLY') THEN
241 l_freq_factor := 3;
242 ELSIF(ls_payment_freq = 'YEARLY') THEN
243 l_freq_factor := 12;
244 ELSIF(ls_payment_freq = 'LUMP_SUM') THEN
245 --Bug# 4056484 PAGARG removing rounding
246 l_freq_factor := MONTHS_BETWEEN( date_to,date_from);
247 END IF;
248
249 l_total_num_months_paid := l_freq_factor * l_no_of_rec;
250 IF(( l_total_num_months_paid IS NULL) OR (l_total_num_months_paid = OKC_API.G_MISS_NUM )) THEN
251 l_total_num_months_paid := 0 ;
252 END IF;
253 --- ++++ Eff Dated Term Qte Changes +++++ ----------
254 IF cancel_date < date_from THEN
255 --** If Eff date of Termination is earlier than Policy start date then
256 --** calculate consumed months as insurance start to SYSDATE
257 IF date_from < SYSDATE THEN
258 l_total_consumed_months := MONTHS_BETWEEN(SYSDATE ,date_from);
259 ELSIF date_from > SYSDATE THEN
260 l_total_consumed_months := 0;
261 ELSE
262 -- Bug# 4056484 PAGARG removing rounding
263 l_total_consumed_months := MONTHS_BETWEEN( cancel_date,date_from);
264 END IF;
265 ELSE
266 -- Bug# 4056484 PAGARG removing rounding
267 l_total_consumed_months := MONTHS_BETWEEN( cancel_date,date_from);
268 END IF;
269 --- ++++ Eff Dated Term Qte Changes +++++ ----------
270
271 IF(( l_total_consumed_months IS NULL) OR (l_total_consumed_months = OKC_API.G_MISS_NUM )) THEN
272 l_total_consumed_months := 0 ;
273 END IF;
274
275 l_unconsumed_months := l_total_num_months_paid - l_total_consumed_months ;
276 IF(( l_unconsumed_months IS NULL) OR (l_unconsumed_months = OKC_API.G_MISS_NUM )) THEN
277 l_unconsumed_months := 0 ;
278 END IF;
279
280 IF (l_unconsumed_months > l_profile_value) AND
281 (l_cancellation_reason = 'CANCELED_BY_CUSTOMER') THEN --Eff Dated Term Changes ++---
282 RETURN l_profile_value;
283 ELSE
284 RETURN l_unconsumed_months;
285 END IF;
286
287 EXCEPTION
288 WHEN OTHERS THEN
289 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
290 p_msg_name => 'OKL_UNEXPECTED_ERROR',
291 p_token1 => 'OKL_SQLCODE',
292 p_token1_value => SQLCODE,
293 p_token2 => 'OKL_SQLERRM',
294 p_token2_value => SQLERRM);
295 RETURN NULL;
296
297 END;
298
299 ------------------------------------------------------------------------------
300 -- Start of Comments
301 -- Created By: sechawla 6651621
302 -- Function Name: line_taxable_basis
303 -- Description: Returns taxable basis amount for a transaction line.
304 -- For header level Booking, Rebook and Sales Quote transactions,
305 -- 0 amount is returned. For line level transactions, the default
306 -- taxable basis amount is returned. Default taxable basis amount
307 -- is passed to this function from okl_process_sales_tax_pvt, by
308 -- populating default_taxable_basis additional parameter. This function
309 -- extracts the amount from this parameter and returns it back.
310 -- Parameters: IN: p_khr_id, p_kle_id
311 -- additional parameters stored in g_additional_parameters
312 -- OUT: amount
313 -- Version: 1.0
314 -- History : 03-Jan-07 sechawla 6651621 - Created
315 -- End of Commnets
316 ------------------------------------------------------------------------------
317
318 FUNCTION line_taxable_basis (
319 p_khr_id IN NUMBER,
320 p_kle_id IN NUMBER)
321 RETURN NUMBER IS
322
323 l_source_trx_name VARCHAR2(150);
324 l_line_name VARCHAR2(150);
325 l_line_taxable_basis NUMBER;
326 BEGIN
327
328 -- Validate additional parameters availability
329 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
330 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
331 LOOP
332 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'SOURCE_TRX_NAME'
333 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
334 l_source_trx_name := okl_execute_formula_pub.g_additional_parameters(I).value;
335 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'LINE_NAME'
336 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
337 l_line_name :=okl_execute_formula_pub.g_additional_parameters(I).value;
338 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'DEFAULT_TAXABLE_BASIS'
339 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
340 l_line_taxable_basis := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
341 END IF;
342 END LOOP;
343 ELSE
344 -- Additional parameters are needed to evaluate taxable basis override formula LINE_TAXABLE_BASIS.
345 OKL_API.set_message(p_app_name => 'OKL',
346 p_msg_name => 'OKL_TX_NO_TBO_PARAMS');
347 RAISE Okl_Api.G_EXCEPTION_ERROR;
348
349 END IF;
350
351 IF l_source_trx_name IS NULL THEN
352 OKL_API.set_message( p_app_name => 'OKC',
353 p_msg_name => G_REQUIRED_VALUE,
354 p_token1 => G_COL_NAME_TOKEN,
355 p_token1_value => 'SOURCE_TRX_NAME');
356
357 RAISE Okl_Api.G_EXCEPTION_ERROR;
358 END IF;
359
360 IF l_line_taxable_basis IS NULL THEN
361 OKL_API.set_message( p_app_name => 'OKC',
362 p_msg_name => G_REQUIRED_VALUE,
363 p_token1 => G_COL_NAME_TOKEN,
364 p_token1_value => 'DEFAULT_TAXABLE_BASIS');
365
366 RAISE Okl_Api.G_EXCEPTION_ERROR;
367 END IF;
368
369 IF l_source_trx_name IN ('Booking','Rebook','Sales Quote') AND l_line_name IS NULL THEN
370 --Contract Header or Sales Quote Header level tax call
371 RETURN 0;
372 ELSE
373 RETURN l_line_taxable_basis;
374 END IF;
375
376 EXCEPTION
377
378 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
379 RETURN NULL;
380
381 WHEN OTHERS THEN
382
383 OKL_API.SET_MESSAGE (
384 p_app_name => OKL_API.G_APP_NAME,
385 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
386 p_token1 => 'SQLCODE',
387 p_token1_value => SQLCODE,
388 p_token2 => 'SQLERRM',
389 p_token2_value => SQLERRM);
390
391 RETURN NULL;
392
393 END line_taxable_basis;
394
395 ----------------------------------------------------------------------------------------------------
396
397 -- Start of Comments
398 -- Created By: Santhosh Siruvole (ssiruvol)
399 -- Function Name contract_sumofrents
400 -- Description: returns the sum of amount on stream type - Rent.
401 -- Dependencies:
402 -- Parameters: contract id.
403 -- Version: 1.0
404 -- End of Commnets
405
406 ----------------------------------------------------------------------------------------------------
407 FUNCTION contract_sum_of_rents(
408 p_chr_id IN NUMBER,
409 p_line_id IN NUMBER) RETURN NUMBER IS
410
411 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_SUM_OF_RENTS';
412 l_api_version CONSTANT NUMBER := 1;
413 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
414 x_msg_count NUMBER;
415 x_msg_data VARCHAR2(256);
416
417 l_rents NUMBER := 0;
418
419 CURSOR l_line_rents_csr (chrId NUMBER ) IS
420 SELECT NVL(str.link_hist_stream_id,-1) link_hist_stream_id,
421 NVL(SUM(sele.amount),0) amount
422 FROM okl_strm_elements sele,
423 okl_streams str,
424 --okl_strm_type_tl sty,
425 okl_strm_type_v sty,
426 okl_K_lines_full_v kle,
427 okc_statuses_b sts
428 WHERE sele.stm_id = str.id
429 AND str.sty_id = sty.id
430 --AND UPPER(sty.name) = 'RENT'
431 AND sty.stream_type_purpose = 'RENT'
432 --AND sty.LANGUAGE = 'US'
433 AND str.say_code = 'CURR'
434 AND str.active_yn = 'Y'
435 AND NVL( str.purpose_code, 'XXXX' ) = 'XXXX'
436 AND str.khr_id = chrId
437 AND str.kle_id = kle.id
438 AND kle.chr_id = chrId
439 AND kle.sts_code = sts.code
440 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
441 GROUP BY str.link_hist_stream_id;
442
443 CURSOR l_line_rents_adj_csr (p_stm_id NUMBER) IS
444 SELECT NVL(SUM(sele.amount),0) amount
445 FROM okl_strm_elements sele
446 WHERE stm_id = p_stm_id
447 AND date_billed IS NOT NULL;
448
449 CURSOR l_chr_rents_csr (chrId NUMBER ) IS
450 SELECT NVL(SUM(sele.amount),0) amount
451 FROM okl_strm_elements sele,
452 okl_streams str,
453 --okl_strm_type_tl sty
454 okl_strm_type_v sty
455 WHERE sele.stm_id = str.id
456 AND str.sty_id = sty.id
457 --AND UPPER(sty.name) = 'RENT'
458 AND sty.stream_type_purpose = 'RENT'
459 --AND sty.LANGUAGE = 'US'
460 AND str.say_code = 'CURR'
461 AND str.active_yn = 'Y'
462 AND NVL( str.purpose_code, 'XXXX' ) = 'XXXX'
463 AND str.khr_id = chrId
464 AND NVL(str.kle_id, -1) = -1;
465
466 -- Bug# 15992711 , Start
467 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
468 CURSOR l_line_rents_nr_csr (chrId NUMBER, p_line_type VARCHAR2 ) IS
469 SELECT NVL(str.link_hist_stream_id,-1) link_hist_stream_id,
470 NVL(SUM(sele.amount),0) amount
471 FROM okl_strm_elements sele,
472 okl_streams str,
473 --okl_strm_type_tl sty,
474 okl_strm_type_v sty,
475 okl_K_lines_full_v kle,
476 okc_statuses_b sts
477 WHERE sele.stm_id = str.id
478 AND str.sty_id = sty.id
479 --AND UPPER(sty.name) = 'RENT'
480 AND sty.stream_type_purpose = 'RENT'
481 --AND sty.LANGUAGE = 'US'
482 AND str.say_code = 'CURR'
483 AND str.active_yn = 'Y'
484 AND NVL( str.purpose_code, 'XXXX' ) = 'XXXX'
485 AND str.khr_id = chrId
486 AND str.kle_id = kle.id
487 AND kle.chr_id = chrId
488 AND kle.sts_code = sts.code
489 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
490 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y')
491 GROUP BY str.link_hist_stream_id;
492
493 l_line_type VARCHAR2(30) := 'X';
494 -- Bug# 15992711 , End
495
496
497 l_chr_rents_rec l_chr_rents_csr%ROWTYPE;
498 l_line_rents_amount NUMBER;
499 l_rent_adj_amount NUMBER;
500
501 BEGIN
502
503 IF ( p_chr_id IS NULL ) THEN
504 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
505 END IF;
506
507 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
508 -- If set then based on its value set l_line_type
509
510 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
511 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
512 LOOP
513 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
514 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
515 l_line_type := 'NEW'; --New
516 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
517 l_line_type := 'RELEASE'; --Release
518 END IF;
519 END IF;
520
521 END LOOP;
522 END IF;
523
524 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
525 -- l_line_rents_nr_csr cursor in order to consider either only new
526 -- assets or only re-leased assets, else no change in the standard behavior
527
528 IF l_line_type IN ('NEW','RELEASE') then
529 l_line_rents_amount := 0;
530
531 FOR l_line_rents_nr_rec IN l_line_rents_nr_csr (p_chr_id, l_line_type)
532 LOOP
533 l_line_rents_amount := NVL(l_line_rents_amount,0) + l_line_rents_nr_rec.amount;
534
535 IF (l_line_rents_nr_rec.link_hist_stream_id <> -1) THEN
536 l_rent_adj_amount := 0;
537 OPEN l_line_rents_adj_csr (l_line_rents_nr_rec.link_hist_stream_id);
538 FETCH l_line_rents_adj_csr INTO l_rent_adj_amount;
539 CLOSE l_line_rents_adj_csr;
540
541 l_line_rents_amount := l_line_rents_amount - NVL(l_rent_adj_amount,0);
542 END IF;
543 END LOOP;
544 ELSE
545 --Bug# 15992711 , End
546
547 l_line_rents_amount := 0;
548 FOR l_line_rents_rec IN l_line_rents_csr (p_chr_id)
549 LOOP
550 l_line_rents_amount := NVL(l_line_rents_amount,0) + l_line_rents_rec.amount;
551
552 IF (l_line_rents_rec.link_hist_stream_id <> -1) THEN
553 l_rent_adj_amount := 0;
554 OPEN l_line_rents_adj_csr (l_line_rents_rec.link_hist_stream_id);
555 FETCH l_line_rents_adj_csr INTO l_rent_adj_amount;
556 CLOSE l_line_rents_adj_csr;
557
558 l_line_rents_amount := l_line_rents_amount - NVL(l_rent_adj_amount,0);
559 END IF;
560 END LOOP;
561
562 /*
563 OPEN l_chr_rents_csr( p_chr_id );
564 FETCH l_chr_rents_csr INTO l_chr_rents_rec;
565 CLOSE l_chr_rents_csr;
566 */
567 --Bug# 15992711 , Start
568 END IF;
569 --Bug# 15992711 , End
570
571 l_rents := l_line_rents_amount;
572
573 RETURN l_rents;
574
575
576 EXCEPTION
577 WHEN OTHERS THEN
578 Okl_Api.SET_MESSAGE(
579 p_app_name => G_APP_NAME,
580 p_msg_name => G_UNEXPECTED_ERROR,
581 p_token1 => G_SQLCODE_TOKEN,
582 p_token1_value => SQLCODE,
583 p_token2 => G_SQLERRM_TOKEN,
584 p_token2_value => SQLERRM);
585 RETURN NULL;
586
587 END contract_sum_of_rents;
588
589 ----------------------------------------------------------------------------------------------------
590
591 -- Start of Comments
592 -- Created By: Santhosh Siruvole (ssiruvol)
593 -- Function Name contract_income
594 -- Description: returns sum of all incomes of financial asset lines of a contract
595 -- Dependencies:
596 -- Parameters: contract id.
597 -- Version: 1.0
598 -- End of Commnets
599
600 ----------------------------------------------------------------------------------------------------
601 FUNCTION contract_income(
602 p_chr_id IN NUMBER,
603 p_line_id IN NUMBER) RETURN NUMBER IS
604
605 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_INCOME';
606 l_api_version CONSTANT NUMBER := 1;
607 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
608 x_msg_count NUMBER;
609 x_msg_data VARCHAR2(256);
610
611 l_income NUMBER := 0;
612
613 BEGIN
614
615 IF ( p_chr_id IS NULL ) THEN
616 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
617 END IF;
618 --
619 -- Note: User defined stream: This stream type has been identified as
620 -- "Not being used" and hence not modified with its purpose
621 --
622 SELECT NVL(SUM(sele.amount),0) INTO l_income
623 FROM okl_strm_elements sele,
624 okl_streams str,
625 okl_strm_type_v sty,
626 okl_K_lines_full_v kle,
627 okc_statuses_b sts
628 WHERE sele.stm_id = str.id
629 AND str.sty_id = sty.id
630 AND UPPER(sty.name) = 'UNEARNED INCOME'
631 AND str.khr_id = p_chr_id
632 AND kle.sts_code = sts.code
633 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
634
635 RETURN l_income;
636
637
638 EXCEPTION
639
640 WHEN OTHERS THEN
641 Okl_Api.SET_MESSAGE(
642 p_app_name => G_APP_NAME,
643 p_msg_name => G_UNEXPECTED_ERROR,
644 p_token1 => G_SQLCODE_TOKEN,
645 p_token1_value => SQLCODE,
646 p_token2 => G_SQLERRM_TOKEN,
647 p_token2_value => SQLERRM);
648 RETURN NULL;
649
650
651 END contract_income;
652
653 --Bug# 3638568 : Function modifieed to conditionally include TERMINATED lines if called from pricing
654 ----------------------------------------------------------------------------------------------------
655
656 -- Start of Comments
657 -- Created By: Santhosh Siruvole (ssiruvol)
658 -- Function Name line_residualvalue
659 -- Description: returns the residual_value of the a financial asset line.
660 -- Dependencies:
661 -- Parameters: contract id and line id
662 -- Version: 1.0
663 -- SECHAWLA 05-MAY-04 3578894 : Modified to accomodate additional parameters for Reporting product
664 -- SECHAWLA 02-FEB-05 4141411 : Added unexpected error exception handling block
665 -- PRASJAIN Bug 6030917 : Added Proration Logic
666 -- End of Commnets
667
668 ----------------------------------------------------------------------------------------------------
669 FUNCTION line_residual_value(
670 p_chr_id IN NUMBER,
671 p_line_id IN NUMBER) RETURN NUMBER IS
672
673 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_LINE_RESIDUAL_VALUE';
674 l_api_version CONSTANT NUMBER := 1;
675 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
676 x_msg_count NUMBER;
677 x_msg_data VARCHAR2(256);
678
679 l_residual_value NUMBER := 0.0;
680 l_oec NUMBER := 0.0;
681
682 CURSOR residual_csr( chrId NUMBER, lineId NUMBER ) IS
683 SELECT NVL(kle.residual_value,0) Value,
684 NVL(kle.residual_percentage,0) Percent
685 ,ls.lty_code lty_Code --added bug 7439724
686 FROM OKC_LINE_STYLES_B LS,
687 okl_K_lines_full_v kle,
688 okc_statuses_b sts
689 WHERE LS.ID = KLE.LSE_ID
690 --Modified bug 7439724
691 AND LS.LTY_CODE in ('FREE_FORM1',
692 'FEE',
693 'SOLD_SERVICE'
694 )
695 AND KLE.ID = lineId
696 AND KLE.DNZ_CHR_ID = chrId
697 AND kle.sts_code = sts.code
698 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
699
700 CURSOR residual_csr_incl_terminated( chrId NUMBER, lineId NUMBER ) IS
701 SELECT NVL(kle.residual_value,0) Value,
702 NVL(kle.residual_percentage,0) Percent
703 ,ls.lty_code lty_Code --added bug 7439724
704 FROM OKC_LINE_STYLES_B LS,
705 okl_K_lines_full_v kle,
706 okc_statuses_b sts
707 WHERE LS.ID = KLE.LSE_ID
708 --Modified bug 7439724
709 AND LS.LTY_CODE in ('FREE_FORM1',
710 'FEE',
711 'SOLD_SERVICE'
712 )
713 AND KLE.ID = lineId
714 AND KLE.DNZ_CHR_ID = chrId
715 AND kle.sts_code = sts.code
716 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
717
718 residual_rec residual_csr%ROWTYPE;
719 --SECHAWLA 05-MAY-04 3578894 : new declarations
720 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
721 l_trx_date DATE;
722 l_k_end_date DATE;
723
724 -- get the K end date
725 CURSOR l_contract_csr(cp_chr_id IN NUMBER) IS
726 SELECT END_DATE
727 FROM okc_k_headers_b
728 WHERE id = cp_chr_id;
729
730 l_discount_incl_terminated BOOLEAN := FALSE;
731 l_proration_factor NUMBER;
732
733 BEGIN
734
735 IF ( ( p_chr_id IS NULL ) OR ( p_line_id IS NULL ) ) THEN
736 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
737
738 END IF;
739
740 -- SECHAWLA 05-MAY-04 3578894 : check the additional parameter for rep product
741 --Validate additional parameters availability
742 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
743 FOR I IN
744 Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.FIRST..Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.LAST LOOP
745 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
746 AND Okl_Execute_Formula_Pub.g_additional_parameters(I).value IS NOT NULL THEN
747 l_rep_prod_streams_yn := Okl_Execute_Formula_Pub.g_additional_parameters(I).value;
748 ELSIF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
749 AND Okl_Execute_Formula_Pub.g_additional_parameters(I).value IS NOT NULL THEN
750 l_trx_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
751
752 -- Start : Bug 6030917 : prasjain
753 --added for getting the proration factor for partial unit termination
754 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'proration_factor'
755 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
756 l_proration_factor := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
757 -- End : Bug 6030917 : prasjain
758
759 END IF;
760 END LOOP;
761 ELSE
762 l_rep_prod_streams_yn := 'N';
763 END IF;
764
765 IF l_rep_prod_streams_yn = 'Y' THEN
766 IF l_trx_date IS NULL THEN
767 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
768 Okl_Api.Set_Message(p_app_name => g_app_name,
769 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
770 RAISE Okl_Api.G_EXCEPTION_ERROR;
771 END IF;
772 END IF;
773
774 IF l_rep_prod_streams_yn = 'Y' THEN
775 OPEN l_contract_csr(p_chr_id);
776 FETCH l_contract_csr INTO l_k_end_date;
777 CLOSE l_contract_csr;
778
779 IF l_k_end_date <= l_trx_date THEN
780 RETURN 0;
781 END IF;
782 END IF;
783
784 ----------
785
786 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
787 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
788 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
789
790 -- rmunjulu 4042892
791 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
792 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
793 LOOP
794 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
795 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
796 l_discount_incl_terminated := TRUE;
797 END IF;
798 END LOOP;
799 END IF;
800 -- rmunjulu 4042892
801 IF l_discount_incl_terminated THEN
802 OPEN residual_csr_incl_terminated( p_chr_id, p_line_id );
803 FETCH residual_csr_incl_terminated INTO residual_rec;
804 IF( residual_csr_incl_terminated%NOTFOUND ) THEN
805 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
806 END IF;
807 CLOSE residual_csr_incl_terminated;
808 ELSE
809 OPEN residual_csr( p_chr_id, p_line_id );
810 FETCH residual_csr INTO residual_rec;
811 IF( residual_csr%NOTFOUND ) THEN
812 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
813 END IF;
814 CLOSE residual_csr;
815 END IF;
816
817 -- BUG 7439724 -- evaluate l_oec only for asset line
818 --because l_oec will return null for fee and service lines
819 IF residual_rec.lty_code = 'FREE_FORM1' THEN
820 IF ( residual_rec.Value <> 0 ) THEN
821 l_residual_value := residual_rec.Value;
822 ELSE
823 l_oec := line_oec( p_chr_id, p_line_id );
824 IF ( l_oec IS NULL ) THEN
825 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
826 END IF;
827 l_residual_value := residual_rec.Percent * l_oec / 100.00;
828 END IF;
829 END IF; --BUG 7439724
830 -- Start : Bug 6030917 : prasjain
831 IF nvl(l_proration_factor,1) <> 1 THEN
832 l_residual_value := l_residual_value * l_proration_factor;
833 END IF;
834 -- End : Bug 6030917 : prasjain
835
836 RETURN l_residual_value;
837
838 EXCEPTION
839 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
840 IF residual_csr%ISOPEN THEN
841 CLOSE residual_csr;
842 END IF;
843
844 IF l_contract_csr%ISOPEN THEN
845 CLOSE l_contract_csr;
846 END IF;
847
848 RETURN NULL;
849 -- SECHAWLA 02-FEB-05 4141411 : Added unexpected error exception handling block
850 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
851 IF residual_csr%ISOPEN THEN
852 CLOSE residual_csr;
853 END IF;
854
855 IF l_contract_csr%ISOPEN THEN
856 CLOSE l_contract_csr;
857 END IF;
858
859 RETURN NULL;
860 WHEN OTHERS THEN
861 IF residual_csr%ISOPEN THEN
862 CLOSE residual_csr;
863 END IF;
864
865 IF l_contract_csr%ISOPEN THEN
866 CLOSE l_contract_csr;
867 END IF;
868
869 Okl_Api.SET_MESSAGE(
870 p_app_name => G_APP_NAME,
871 p_msg_name => G_UNEXPECTED_ERROR,
872 p_token1 => G_SQLCODE_TOKEN,
873 p_token1_value => SQLCODE,
874 p_token2 => G_SQLERRM_TOKEN,
875 p_token2_value => SQLERRM);
876 RETURN NULL;
877
878
879 END line_residual_value;
880
881 ----------------------------------------------------------------------------------------------------
882
883 -- Start of Comments
884 -- Created By: Santhosh Siruvole (ssiruvol)
885 -- Function Name contract_residualvalue
886 -- Description: returns the sum of residual_value of all financial asset lines of a contract.
887 -- Dependencies:
888 -- Parameters: contract id.
889 -- Version: 1.0
890 -- End of Commnets
891
892 ----------------------------------------------------------------------------------------------------
893 FUNCTION contract_residual_value(
894 p_chr_id IN NUMBER,
895 p_line_id IN NUMBER) RETURN NUMBER IS
896
897 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_RESIDUAL_VALUE';
898 l_api_version CONSTANT NUMBER := 1;
899 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
900 x_msg_count NUMBER;
901 x_msg_data VARCHAR2(256);
902
903 l_residual_value NUMBER := 0.0;
904 l_lne_res_value NUMBER := 0.0;
905
906 CURSOR lines_csr( chrId NUMBER ) IS
907 SELECT kle.id lineId
908 FROM OKC_LINE_STYLES_B LS,
909 okl_K_lines_full_v kle,
910 okc_statuses_b sts
911 WHERE LS.ID = KLE.LSE_ID
912 AND LS.LTY_CODE ='FREE_FORM1'
913 AND KLE.DNZ_CHR_ID = chrId
914 AND kle.sts_code = sts.code
915 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
916
917 --Bug# 15992711 , Start
918 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
919 CURSOR lines_nr_csr( chrId NUMBER, p_line_type VARCHAR2 ) IS
920 SELECT kle.id lineId
921 FROM OKC_LINE_STYLES_B LS,
922 okl_K_lines_full_v kle,
923 okc_statuses_b sts
924 WHERE LS.ID = KLE.LSE_ID
925 AND LS.LTY_CODE ='FREE_FORM1'
926 AND KLE.DNZ_CHR_ID = chrId
927 AND kle.sts_code = sts.code
928 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
929 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
930
931 l_line_type VARCHAR2(30) := 'X';
932 --Bug# 15992711 , End
933
934 line_rec lines_csr%ROWTYPE;
935
936 BEGIN
937
938 IF ( p_chr_id IS NULL ) THEN
939 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
940 END IF;
941
942 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
943 -- If set then based on its value set l_line_type
944
945 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
946 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
947 LOOP
948 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
949 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
950 l_line_type := 'NEW'; --New
951 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
952 l_line_type := 'RELEASE'; --Release
953 END IF;
954 END IF;
955
956 END LOOP;
957 END IF;
958
959 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
960 -- lines_nr_csr cursor in order to consider either only new
961 -- assets or only re-leased assets, else no change in the standard behavior
962
963 IF l_line_type IN ('NEW','RELEASE') THEN
964
965 FOR line_nr_rec IN lines_nr_csr( p_chr_id, l_line_type )
966 LOOP
967 IF( lines_nr_csr%NOTFOUND ) THEN
968 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
969 END IF;
970 l_lne_res_value := line_residual_value( p_chr_id, line_nr_rec.lineId );
971 IF ( l_lne_res_value IS NULL ) THEN
972 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
973 END IF;
974 l_residual_value := l_residual_value + l_lne_res_value;
975 END LOOP;
976
977 ELSE
978 --Bug# 15992711 , End
979
980 FOR line_rec IN lines_csr( p_chr_id )
981 LOOP
982 IF( lines_csr%NOTFOUND ) THEN
983 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
984 END IF;
985 l_lne_res_value := line_residual_value( p_chr_id, line_rec.lineId );
986 IF ( l_lne_res_value IS NULL ) THEN
987 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
988 END IF;
989 l_residual_value := l_residual_value + l_lne_res_value;
990 END LOOP;
991
992 --Bug# 15992711 , Start
993 END IF;
994 --Bug# 15992711 , End
995
996 RETURN l_residual_value;
997
998 EXCEPTION
999
1000 WHEN OTHERS THEN
1001 Okl_Api.SET_MESSAGE(
1002 p_app_name => G_APP_NAME,
1003 p_msg_name => G_UNEXPECTED_ERROR,
1004 p_token1 => G_SQLCODE_TOKEN,
1005 p_token1_value => SQLCODE,
1006 p_token2 => G_SQLERRM_TOKEN,
1007 p_token2_value => SQLERRM);
1008 RETURN NULL;
1009
1010 END contract_residual_value;
1011
1012
1013 ----------------------------------------------------------------------------------------------------
1014
1015 -- Start of Comments
1016 -- Created By: Santhosh Siruvole (ssiruvol)
1017 -- Function Name contract_oec
1018 -- Description: returns the OEC of a contract.
1019 -- Dependencies:
1020 -- Parameters: contract id.
1021 -- Version: 1.0
1022 -- End of Commnets
1023
1024 ----------------------------------------------------------------------------------------------------
1025 FUNCTION contract_oec(
1026 p_chr_id IN NUMBER,
1027 p_line_id IN NUMBER) RETURN NUMBER IS
1028
1029 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_OEC';
1030 l_api_version CONSTANT NUMBER := 1;
1031 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1032 x_msg_count NUMBER;
1033 x_msg_data VARCHAR2(256);
1034
1035 BEGIN
1036 IF ( p_line_id IS NULL ) THEN
1037 RETURN line_oec( p_chr_id, NULL);
1038 ELSE
1039 RETURN line_oec( p_chr_id, p_line_id);
1040 END IF;
1041 END;
1042
1043 --Bug# 3638568 : This formula modified to conditionally include terminated lines
1044 -----------------------------------------------------------------------------------
1045 -- Start of Commnets
1046 -- Badrinath Kuchibholta
1047
1048 -- Procedure Name : FUNCTION_oec_calc
1049 -- Description : FUNCTION_oec_calc
1050 -- Business Rules :
1051 -- Parameters :
1052 -- Version : 1.0
1053 -- End of Commnets
1054
1055 FUNCTION line_oec(p_dnz_chr_id IN OKC_K_LINES_V.DNZ_CHR_ID%TYPE,
1056 --p_cle_id IN OKC_K_LINES_V.CLE_ID%TYPE DEFAULT Okl_Api.G_MISS_NUM)
1057 p_cle_id IN OKC_K_LINES_V.CLE_ID%TYPE )
1058 RETURN NUMBER IS
1059 G_APP_NAME CONSTANT VARCHAR2(3) := Okl_Api.G_APP_NAME;
1060 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
1061 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKL_UNEXPECTED_ERROR';
1062 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := Okl_Api.G_COL_NAME_TOKEN;
1063 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLerrm';
1064 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLcode';
1065 G_REQUIRED_VALUE CONSTANT VARCHAR2(200) := 'OKL_REQUIRED_VALUE';
1066 G_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
1067 G_LINE_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_LINE_RECORD';
1068 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_CRITERIA';
1069 G_EXCEPTION_HALT_VALIDATION EXCEPTION;
1070 G_EXCEPTION_STOP_VALIDATION EXCEPTION;
1071 G_FIN_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FREE_FORM1';
1072 G_MODEL_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'ITEM';
1073 G_ADDON_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'ADD_ITEM';
1074 G_LEASE_SCS_CODE OKC_K_HEADERS_V.SCS_CODE%TYPE := 'LEASE';
1075 G_LOAN_SCS_CODE OKC_K_HEADERS_V.SCS_CODE%TYPE := 'LOAN';
1076 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
1077 l_api_name CONSTANT VARCHAR2(30) := 'FUNCTION_OEC_CALC';
1078 ln_contract_oec OKL_K_LINES_V.OEC%TYPE := 0;
1079 lv_lty_code OKC_LINE_STYLES_V.LTY_CODE%TYPE;
1080 ln_model_line_oec OKL_K_LINES_V.OEC%TYPE := 0;
1081 ln_addon_line_oec OKL_K_LINES_V.OEC%TYPE := 0;
1082 ln_total_line_oec OKL_K_LINES_V.OEC%TYPE := 0;
1083 l_capred_incl_terminated BOOLEAN := FALSE;
1084 -- Cursor to get the lty_code
1085 CURSOR get_lty_code(p_cle_id IN OKC_K_LINES_V.ID%TYPE) IS
1086 SELECT lse.lty_code
1087 FROM okc_k_lines_b cle,
1088 okc_line_styles_b lse
1089 WHERE cle.id = p_cle_id
1090 AND cle.lse_id = lse.id;
1091 -- Cursor to sum up oec for contract
1092 CURSOR c_contract_oec_calc(p_dnz_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1093 SELECT SUM(kle.oec) oec
1094 FROM OKL_K_LINES_V kle,
1095 OKC_K_LINES_V cle,
1096 OKC_K_HEADERS_V CHR
1097 WHERE CHR.id = p_dnz_chr_id
1098 AND CHR.id = cle.dnz_chr_id
1099 AND cle.sts_code NOT IN ( 'ABANDONED', 'TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
1100 AND cle.id = kle.id;
1101
1102 CURSOR c_contract_oec_calc_incl_term(p_dnz_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1103 SELECT SUM(kle.oec) oec
1104 FROM OKL_K_LINES_V kle,
1105 OKC_K_LINES_V cle,
1106 OKC_K_HEADERS_V CHR
1107 WHERE CHR.id = p_dnz_chr_id
1108 AND CHR.id = cle.dnz_chr_id
1109 AND cle.sts_code NOT IN ( 'ABANDONED', 'EXPIRED', 'CANCELLED', 'HOLD')
1110 AND cle.id = kle.id;
1111 -- Cursor to sum up oec for given model line
1112 CURSOR c_model_oec_calc(p_top_cle_id OKC_K_LINES_V.CLE_ID%TYPE,
1113 p_dnz_chr_id OKC_K_LINES_V.DNZ_CHR_ID%TYPE) IS
1114 SELECT SUM(cle.price_unit * cim.number_of_items) oec
1115 FROM okc_subclass_top_line stl,
1116 okc_line_styles_b lse2,
1117 okc_line_styles_b lse1,
1118 okc_k_items_v cim,
1119 okc_k_lines_v cle
1120 WHERE cle.cle_id = p_top_cle_id
1121 AND cle.dnz_chr_id = p_dnz_chr_id
1122 AND cle.id = cim.cle_id
1123 AND cle.dnz_chr_id = cim.dnz_chr_id
1124 AND cle.lse_id = lse1.id
1125 AND lse1.lty_code = G_MODEL_LINE_LTY_CODE
1126 AND lse1.lse_parent_id = lse2.id
1127 AND lse2.lty_code = G_FIN_LINE_LTY_CODE
1128 AND lse2.id = stl.lse_id
1129 AND stl.scs_code IN (G_LEASE_SCS_CODE,G_LOAN_SCS_CODE);
1130 -- Cursor to sum up oec of addon line for a given top line
1131 CURSOR c_addon_oec_calc(p_top_cle_id OKC_K_LINES_V.CLE_ID%TYPE,
1132 p_dnz_chr_id OKC_K_LINES_V.DNZ_CHR_ID%TYPE) IS
1133 SELECT SUM(cle.price_unit* cim.number_of_items) oec
1134 FROM okc_subclass_top_line stl,
1135 okc_line_styles_b lse3,
1136 okc_line_styles_b lse2,
1137 okc_line_styles_b lse1,
1138 okc_k_items_v cim,
1139 okc_k_lines_b cle
1140 WHERE cle.dnz_chr_id = p_dnz_chr_id
1141 AND cle.dnz_chr_id = cim.dnz_chr_id
1142 AND cle.id = cim.cle_id
1143 AND cle.lse_id = lse1.id
1144 AND lse1.lty_code = G_ADDON_LINE_LTY_CODE
1145 AND lse1.lse_parent_id = lse2.id
1146 AND lse2.lty_code = G_MODEL_LINE_LTY_CODE
1147 AND lse2.lse_parent_id = lse3.id
1148 AND lse3.lty_code = G_FIN_LINE_LTY_CODE
1149 AND lse3.id = stl.lse_id
1150 AND stl.scs_code IN (G_LEASE_SCS_CODE,G_LOAN_SCS_CODE)
1151 --AND cle.cle_id IN (SELECT cle.id
1152 AND exists (SELECT 1 --cle.id
1153 FROM okc_subclass_top_line stlx,
1154 okc_line_styles_b lse2x,
1155 okc_line_styles_b lse1x,
1156 okc_k_lines_b clex
1157 WHERE clex.cle_id = p_top_cle_id
1158 AND clex.dnz_chr_id = p_dnz_chr_id
1159
1160 AND clex.lse_id = lse1x.id
1161 AND lse1x.lty_code = G_MODEL_LINE_LTY_CODE
1162 AND lse1x.lse_parent_id = lse2x.id
1163 AND lse2x.lty_code = G_FIN_LINE_LTY_CODE
1164 AND lse2x.id = stlx.lse_id
1165 AND stlx.scs_code IN (G_LEASE_SCS_CODE,G_LOAN_SCS_CODE)
1166 AND clex.id = cle.cle_id);
1167
1168 --Bug 4631549
1169 --cursor to find if this is a re-lease contract
1170 Cursor l_chrb_csr (p_chr_id in number) is
1171 SELECT chrb.orig_system_source_code
1172 FROM okc_k_headers_b chrb
1173 where chrb.id = p_chr_id;
1174
1175 l_chrb_rec l_chrb_csr%ROWTYPE;
1176
1177 --cursor to get expected asset value for contract
1178 cursor l_chr_expcost_trmn_csr(p_chr_id in number) is
1179 SELECT SUM(kle.expected_asset_cost) expected_asset_cost
1180 FROM OKL_K_LINES kle,
1181 OKC_K_LINES_B cleb
1182 WHERE kle.id = cleb.id
1183 AND cleb.dnz_chr_id = p_chr_id
1184 AND cleb.lse_id = 33
1185 AND cleb.sts_code NOT IN ( 'ABANDONED', 'EXPIRED', 'CANCELLED', 'HOLD');
1186
1187 cursor l_chr_expcost_csr(p_chr_id in number) is
1188 SELECT SUM(kle.expected_asset_cost) expected_asset_cost
1189 FROM OKL_K_LINES kle,
1190 OKC_K_LINES_B cleb
1191 WHERE kle.id = cleb.id
1192 AND cleb.dnz_chr_id = p_chr_id
1193 AND cleb.lse_id = 33
1194 AND cleb.sts_code NOT IN ( 'ABANDONED', 'TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1195
1196
1197 --cursor to get expected asset value for asset
1198 cursor l_cle_expcost_csr (p_cle_id in number) is
1199 Select nvl(kle.expected_asset_cost,0) expected_asset_cost
1200 from okl_k_lines kle
1201 where kle.id = p_cle_id;
1202
1203 --Bug# 15992711 , Start
1204 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
1205 CURSOR c_nr_con_oec_calc_incl_term(p_dnz_chr_id OKC_K_HEADERS_V.ID%TYPE,
1206 p_line_type VARCHAR2) IS
1207 SELECT SUM(kle.oec) oec
1208 FROM OKL_K_LINES_V kle,
1209 OKC_K_LINES_V cle,
1210 OKC_K_HEADERS_V CHR
1211 WHERE CHR.id = p_dnz_chr_id
1212 AND CHR.id = cle.dnz_chr_id
1213 AND cle.sts_code NOT IN ( 'ABANDONED', 'EXPIRED', 'CANCELLED', 'HOLD')
1214 AND cle.id = kle.id
1215 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
1216
1217
1218 CURSOR c_nr_contract_oec_calc(p_dnz_chr_id OKC_K_HEADERS_V.ID%TYPE,
1219 p_line_type VARCHAR2) IS
1220 SELECT SUM(kle.oec) oec
1221 FROM OKL_K_LINES_V kle,
1222 OKC_K_LINES_V cle,
1223 OKC_K_HEADERS_V CHR
1224 WHERE CHR.id = p_dnz_chr_id
1225 AND CHR.id = cle.dnz_chr_id
1226 AND cle.sts_code NOT IN ( 'ABANDONED', 'TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
1227 AND cle.id = kle.id
1228 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
1229
1230 /*
1231 CURSOR c_nr_model_oec_calc(p_top_cle_id OKC_K_LINES_V.CLE_ID%TYPE,
1232 p_dnz_chr_id OKC_K_LINES_V.DNZ_CHR_ID%TYPE,
1233 p_line_type VARCHAR2) IS
1234 SELECT SUM(cle.price_unit * cim.number_of_items) oec
1235 FROM okc_subclass_top_line stl,
1236 okc_line_styles_b lse2,
1237 okc_line_styles_b lse1,
1238 okc_k_items_v cim,
1239 okc_k_lines_v cle
1240 WHERE cle.cle_id = p_top_cle_id
1241 AND cle.dnz_chr_id = p_dnz_chr_id
1242 AND cle.id = cim.cle_id
1243 AND cle.dnz_chr_id = cim.dnz_chr_id
1244 AND cle.lse_id = lse1.id
1245 AND lse1.lty_code = G_MODEL_LINE_LTY_CODE
1246 AND lse1.lse_parent_id = lse2.id
1247 AND lse2.lty_code = G_FIN_LINE_LTY_CODE
1248 AND lse2.id = stl.lse_id
1249 AND stl.scs_code IN (G_LEASE_SCS_CODE,G_LOAN_SCS_CODE);
1250 */
1251
1252 l_line_type VARCHAR2(30) := 'X';
1253 --Bug# 15992711 , End
1254
1255
1256 ----------------------------------------------------------------------------------------------------
1257 -- Start of Commnets
1258 -- Badrinath Kuchibholta
1259 -- Procedure Name : validate_dnz_chr_id
1260 -- Description : validation with OKC_K_LINES_V
1261 -- Business Rules :
1262 -- Parameters :
1263 -- Version : 1.0
1264 -- End of Commnets
1265
1266 PROCEDURE validate_dnz_chr_id(p_dnz_chr_id IN OKC_K_LINES_V.DNZ_CHR_ID%TYPE,
1267 x_return_status OUT NOCOPY VARCHAR2) IS
1268 ln_dummy NUMBER := 0;
1269 CURSOR c_dnz_chr_id_validate(p_dnz_chr_id OKC_K_LINES_V.DNZ_CHR_ID%TYPE) IS
1270 SELECT 1
1271 --FROM DUAL
1272 --WHERE EXISTS (SELECT 1
1273 FROM OKC_K_HEADERS_B CHR
1274 WHERE CHR.id = p_dnz_chr_id; --);
1275 BEGIN
1276 -- initialize return status
1277 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1278 -- data is required
1279 IF (p_dnz_chr_id = Okl_Api.G_MISS_NUM) OR
1280 (p_dnz_chr_id IS NULL) THEN
1281 -- store SQL error message on message stack
1282 Okl_Api.set_message(p_app_name => G_APP_NAME,
1283 p_msg_name => G_REQUIRED_VALUE,
1284 p_token1 => G_COL_NAME_TOKEN,
1285 p_token1_value => 'P_DNZ_CHR_ID');
1286 -- halt validation as it is a required field
1287 RAISE G_EXCEPTION_STOP_VALIDATION;
1288 END IF;
1289 -- Enforce Foreign Key
1290 -- since we are creating a asset line
1291 -- we assume the cle_id will not null
1292 -- as the same is not top line and it will be sub line
1293 OPEN c_dnz_chr_id_validate(p_dnz_chr_id);
1294 IF c_dnz_chr_id_validate%NOTFOUND THEN
1295 Okl_Api.set_message(p_app_name => G_APP_NAME,
1296 p_msg_name => G_NO_MATCHING_RECORD,
1297 p_token1 => G_COL_NAME_TOKEN,
1298 p_token1_value => 'P_DNZ_CHR_ID');
1299 -- halt validation as it has no parent record
1300 RAISE G_EXCEPTION_HALT_VALIDATION;
1301 END IF;
1302 FETCH c_dnz_chr_id_validate INTO ln_dummy;
1303 CLOSE c_dnz_chr_id_validate;
1304 IF (ln_dummy = 0) THEN
1305 Okl_Api.set_message(p_app_name => G_APP_NAME,
1306 p_msg_name => G_NO_MATCHING_RECORD,
1307 p_token1 => G_COL_NAME_TOKEN,
1308 p_token1_value => 'P_DNZ_CHR_ID');
1309 -- halt validation as it has no parent record
1310 RAISE G_EXCEPTION_HALT_VALIDATION;
1311 END IF;
1312 EXCEPTION
1313 WHEN G_EXCEPTION_STOP_VALIDATION THEN
1314 -- We are here since the field is required
1315 -- Notify Error
1316 x_return_status := Okl_Api.G_RET_STS_ERROR;
1317 WHEN G_EXCEPTION_HALT_VALIDATION THEN
1318 -- If the cursor is open then it has to be closed
1319 IF c_dnz_chr_id_validate%ISOPEN THEN
1320 CLOSE c_dnz_chr_id_validate;
1321 END IF;
1322 x_return_status := Okl_Api.G_RET_STS_ERROR;
1323 WHEN OTHERS THEN
1324 -- store SQL error message on message stack
1325 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
1326 p_msg_name => G_UNEXPECTED_ERROR,
1327 p_token1 => G_SQLCODE_TOKEN,
1328 p_token1_value => SQLCODE,
1329 p_token2 => G_SQLERRM_TOKEN,
1330 p_token2_value => SQLERRM);
1331 -- If the cursor is open then it has to be closed
1332 IF c_dnz_chr_id_validate%ISOPEN THEN
1333 CLOSE c_dnz_chr_id_validate;
1334 END IF;
1335 -- notify caller of an error as UNEXPETED error
1336 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1337 END validate_dnz_chr_id;
1338 ----------------------------------------------------------------------------------------------------
1339 BEGIN
1340 -- We need to validate the dnz_chr_id first
1341 -- We are taking care of the validating p_cle_id via cursor we use for calculations of oec
1342 validate_dnz_chr_id(p_dnz_chr_id => p_dnz_chr_id,
1343 x_return_status => l_return_status);
1344 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1345 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1346 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1347 RAISE Okl_Api.G_EXCEPTION_ERROR;
1348 END IF;
1349
1350 --Bug# 4631549
1351 --Find out if re-lease contract
1352 open l_chrb_csr(p_chr_id => p_dnz_chr_id);
1353 fetch l_chrb_csr into l_chrb_rec;
1354 close l_chrb_csr;
1355 --Bug# 4631549
1356
1357 --Check whether terminated lines should be included
1358 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1359 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1360 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1361 --l_capred_incl_terminated := TRUE;
1362 --END IF;
1363
1364 -- rmunjulu 4042892
1365 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1366 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1367 LOOP
1368 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1369 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1370 l_capred_incl_terminated := TRUE;
1371
1372 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
1373 -- If set then based on its value set l_line_type
1374 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
1375 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
1376 l_line_type := 'NEW'; --New
1377 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
1378 l_line_type := 'RELEASE'; --Release
1379 END IF;
1380 --Bug# 15992711 , End
1381
1382 END IF;
1383 END LOOP;
1384 END IF;
1385
1386 -- Now we start calculations of the OEC
1387 IF (p_dnz_chr_id IS NOT NULL OR
1388 p_dnz_chr_id <> Okl_Api.G_MISS_NUM) AND
1389 (p_cle_id IS NULL OR
1390 p_cle_id = Okl_Api.G_MISS_NUM) THEN
1391 -- To get the OEC of the contract
1392
1393 --Bug# 4631549 :
1394 If nvl(l_chrb_rec.orig_system_source_code,okl_api.g_miss_char) = 'OKL_RELEASE' Then
1395 If l_capred_incl_terminated = TRUE Then
1396 OPEN l_chr_expcost_trmn_csr (p_chr_id => p_dnz_chr_id);
1397 FETCH l_chr_expcost_trmn_csr into ln_contract_oec;
1398 If l_chr_expcost_trmn_csr%NOTFOUND then
1399 Okl_Api.set_message(p_app_name => G_APP_NAME,
1400 p_msg_name => G_NO_MATCHING_RECORD,
1401 p_token1 => G_COL_NAME_TOKEN,
1402 p_token1_value => 'p_dnz_chr_id');
1403 RAISE Okl_Api.G_EXCEPTION_ERROR;
1404 End If;
1405 Close l_chr_expcost_trmn_csr;
1406 Else
1407 OPEN l_chr_expcost_csr (p_chr_id => p_dnz_chr_id);
1408 FETCH l_chr_expcost_csr into ln_contract_oec;
1409 If l_chr_expcost_csr%NOTFOUND then
1410 Okl_Api.set_message(p_app_name => G_APP_NAME,
1411 p_msg_name => G_NO_MATCHING_RECORD,
1412 p_token1 => G_COL_NAME_TOKEN,
1413 p_token1_value => 'p_dnz_chr_id');
1414 RAISE Okl_Api.G_EXCEPTION_ERROR;
1415 End If;
1416 Close l_chr_expcost_csr;
1417 End If;
1418 Else
1419 --Bug# 15992711 , Start
1420 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
1421 -- get_unearn_rev_nr_csr cursor in order to consider either only new
1422 -- assets or only re-leased assets, else no change in the standard behavior
1423
1424 IF l_line_type IN ('NEW','RELEASE') THEN
1425
1426 IF l_capred_incl_terminated = TRUE THEN
1427
1428 OPEN c_nr_con_oec_calc_incl_term(p_dnz_chr_id => p_dnz_chr_id, p_line_type => l_line_type);
1429 IF c_nr_con_oec_calc_incl_term%NOTFOUND THEN
1430 Okl_Api.set_message(p_app_name => G_APP_NAME,
1431 p_msg_name => G_NO_MATCHING_RECORD,
1432 p_token1 => G_COL_NAME_TOKEN,
1433 p_token1_value => 'p_dnz_chr_id');
1434 RAISE Okl_Api.G_EXCEPTION_ERROR;
1435 END IF;
1436 FETCH c_nr_con_oec_calc_incl_term INTO ln_contract_oec;
1437 CLOSE c_nr_con_oec_calc_incl_term;
1438 ELSE
1439 OPEN c_nr_contract_oec_calc(p_dnz_chr_id => p_dnz_chr_id, p_line_type => l_line_type);
1440 IF c_nr_contract_oec_calc%NOTFOUND THEN
1441 Okl_Api.set_message(p_app_name => G_APP_NAME,
1442 p_msg_name => G_NO_MATCHING_RECORD,
1443 p_token1 => G_COL_NAME_TOKEN,
1444 p_token1_value => 'p_dnz_chr_id');
1445 RAISE Okl_Api.G_EXCEPTION_ERROR;
1446 END IF;
1447 FETCH c_nr_contract_oec_calc INTO ln_contract_oec;
1448 CLOSE c_nr_contract_oec_calc;
1449 END IF;
1450 --Bug# 15992711 , End
1451
1452 --End Bug 4631549
1453 --Bug# 15992711 , Start
1454 --IF l_capred_incl_terminated = TRUE THEN
1455 ELSIF l_capred_incl_terminated = TRUE THEN
1456 --Bug# 15992711 , End
1457
1458 OPEN c_contract_oec_calc_incl_term(p_dnz_chr_id => p_dnz_chr_id);
1459 IF c_contract_oec_calc_incl_term%NOTFOUND THEN
1460 Okl_Api.set_message(p_app_name => G_APP_NAME,
1461 p_msg_name => G_NO_MATCHING_RECORD,
1462 p_token1 => G_COL_NAME_TOKEN,
1463 p_token1_value => 'p_dnz_chr_id');
1464 RAISE Okl_Api.G_EXCEPTION_ERROR;
1465 END IF;
1466 FETCH c_contract_oec_calc_incl_term INTO ln_contract_oec;
1467 CLOSE c_contract_oec_calc_incl_term;
1468 ELSE
1469 OPEN c_contract_oec_calc(p_dnz_chr_id => p_dnz_chr_id);
1470 IF c_contract_oec_calc%NOTFOUND THEN
1471 Okl_Api.set_message(p_app_name => G_APP_NAME,
1472 p_msg_name => G_NO_MATCHING_RECORD,
1473 p_token1 => G_COL_NAME_TOKEN,
1474 p_token1_value => 'p_dnz_chr_id');
1475 RAISE Okl_Api.G_EXCEPTION_ERROR;
1476 END IF;
1477 FETCH c_contract_oec_calc INTO ln_contract_oec;
1478 CLOSE c_contract_oec_calc;
1479 END IF;
1480 End If; -- Bug# 4631549
1481 -- Final Total Contract OEC
1482 ln_contract_oec := NVL(ln_contract_oec,0);
1483 RETURN(ln_contract_oec);
1484 ELSIF (p_dnz_chr_id IS NOT NULL OR
1485 p_dnz_chr_id <> Okl_Api.G_MISS_NUM) AND
1486 (p_cle_id IS NOT NULL OR
1487 p_cle_id <> Okl_Api.G_MISS_NUM) THEN
1488 -- To get the Line Style Code
1489 OPEN get_lty_code(p_cle_id => p_cle_id);
1490 IF get_lty_code%NOTFOUND THEN
1491 Okl_Api.set_message(p_app_name => G_APP_NAME,
1492 p_msg_name => G_NO_MATCHING_RECORD,
1493 p_token1 => G_COL_NAME_TOKEN,
1494 p_token1_value => 'Financial Asset Line');
1495 RAISE Okl_Api.G_EXCEPTION_ERROR;
1496 END IF;
1497 FETCH get_lty_code INTO lv_lty_code;
1498 CLOSE get_lty_code;
1499 IF lv_lty_code = G_FIN_LINE_LTY_CODE THEN
1500 --Bug# 4631549
1501 If l_chrb_rec.orig_system_source_code = 'OKL_RELEASE' then
1502 Open l_cle_expcost_csr (p_cle_id => p_cle_id);
1503 Fetch l_cle_expcost_csr into ln_total_line_oec;
1504 If l_cle_expcost_csr%NOTFOUND Then
1505 Okl_Api.set_message(p_app_name => G_APP_NAME,
1506 p_msg_name => G_NO_MATCHING_RECORD,
1507 p_token1 => G_COL_NAME_TOKEN,
1508 p_token1_value => 'Financial Asset Line');
1509 RAISE Okl_Api.G_EXCEPTION_ERROR;
1510 End If;
1511 Close l_cle_expcost_csr;
1512 ln_total_line_oec := nvl(ln_total_line_oec,0);
1513 Else --Bug# 4631549 end
1514 -- To get the OEC of the model Line
1515 OPEN c_model_oec_calc(p_top_cle_id => p_cle_id,
1516 p_dnz_chr_id => p_dnz_chr_id);
1517 IF c_model_oec_calc%NOTFOUND THEN
1518 Okl_Api.set_message(p_app_name => G_APP_NAME,
1519 p_msg_name => G_NO_MATCHING_RECORD,
1520 p_token1 => G_COL_NAME_TOKEN,
1521 p_token1_value => 'Model Line');
1522 RAISE Okl_Api.G_EXCEPTION_ERROR;
1523 END IF;
1524 FETCH c_model_oec_calc INTO ln_model_line_oec;
1525 CLOSE c_model_oec_calc;
1526 -- To get the OEC of the Addon line
1527 -- DJANASWA change begin 11/12/08
1528 /* OPEN c_addon_oec_calc(p_top_cle_id => p_cle_id,
1529 p_dnz_chr_id => p_dnz_chr_id);
1530 FETCH c_addon_oec_calc INTO ln_addon_line_oec;
1531 CLOSE c_addon_oec_calc;
1532 */
1533 ln_addon_line_oec := Okl_Seeded_Functions_Pvt.total_asset_addon_cost(
1534 p_contract_id => p_dnz_chr_id, p_contract_line_id => p_cle_id);
1535 -- DJANASWA change end 11/12/08
1536
1537 ln_total_line_oec := NVL(ln_model_line_oec,0) + NVL(ln_addon_line_oec,0);
1538 End If; --Bug# 4631549
1539 ELSE
1540 Okl_Api.set_message(p_app_name => G_APP_NAME,
1541 p_msg_name => G_LINE_RECORD);
1542 RAISE Okl_Api.G_EXCEPTION_ERROR;
1543 END IF;
1544 RETURN(ln_total_line_oec);
1545 ELSE
1546 Okl_Api.set_message(p_app_name => G_APP_NAME,
1547 p_msg_name => G_INVALID_CRITERIA);
1548 RAISE Okl_Api.G_EXCEPTION_ERROR;
1549 END IF;
1550 EXCEPTION
1551 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1552 -- If the cursor is open then it has to be closed
1553 IF get_lty_code%ISOPEN THEN
1554 CLOSE get_lty_code;
1555 END IF;
1556 IF c_contract_oec_calc%ISOPEN THEN
1557 CLOSE c_contract_oec_calc;
1558 END IF;
1559 IF c_contract_oec_calc_incl_term%ISOPEN THEN
1560 CLOSE c_contract_oec_calc_incl_term;
1561 END IF;
1562 IF c_model_oec_calc%ISOPEN THEN
1563 CLOSE c_model_oec_calc;
1564 END IF;
1565 IF c_addon_oec_calc%ISOPEN THEN
1566 CLOSE c_addon_oec_calc;
1567 END IF;
1568 RETURN(0);
1569 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1570 -- If the cursor is open then it has to be closed
1571 IF get_lty_code%ISOPEN THEN
1572 CLOSE get_lty_code;
1573 END IF;
1574 IF c_contract_oec_calc%ISOPEN THEN
1575 CLOSE c_contract_oec_calc;
1576 END IF;
1577 IF c_contract_oec_calc_incl_term%ISOPEN THEN
1578 CLOSE c_contract_oec_calc_incl_term;
1579 END IF;
1580 IF c_model_oec_calc%ISOPEN THEN
1581 CLOSE c_model_oec_calc;
1582 END IF;
1583 IF c_addon_oec_calc%ISOPEN THEN
1584 CLOSE c_addon_oec_calc;
1585 END IF;
1586 RETURN(0);
1587 WHEN OTHERS THEN
1588
1589 -- If the cursor is open then it has to be closed
1590 IF get_lty_code%ISOPEN THEN
1591 CLOSE get_lty_code;
1592 END IF;
1593 IF c_contract_oec_calc%ISOPEN THEN
1594 CLOSE c_contract_oec_calc;
1595 END IF;
1596 IF c_contract_oec_calc_incl_term%ISOPEN THEN
1597 CLOSE c_contract_oec_calc_incl_term;
1598 END IF;
1599 IF c_model_oec_calc%ISOPEN THEN
1600 CLOSE c_model_oec_calc;
1601 END IF;
1602 IF c_addon_oec_calc%ISOPEN THEN
1603 CLOSE c_addon_oec_calc;
1604 END IF;
1605 RETURN(0);
1606 END line_oec;
1607
1608 --Bug# 3638568 : This formula modified to conditionally include terminated lines
1609 ----------------------------------------------------------------------------------------------------
1610
1611 -- Start of Comments
1612 -- Created By: Santhosh Siruvole (ssiruvol)
1613 -- Function Name contract_tradein
1614 -- Description: returns the sum of tradein values of all financial asset lines of a contract.
1615 -- Dependencies:
1616 -- Parameters: contract id.
1617 -- Version: 1.0
1618 -- End of Commnets
1619
1620 ----------------------------------------------------------------------------------------------------
1621 FUNCTION contract_tradein(
1622 p_chr_id IN NUMBER,
1623 p_line_id IN NUMBER) RETURN NUMBER IS
1624
1625 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_TRADEIN_VALUE';
1626 l_api_version CONSTANT NUMBER := 1;
1627 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1628 x_msg_count NUMBER;
1629 x_msg_data VARCHAR2(256);
1630
1631 l_tradeIn_value NUMBER := 0;
1632
1633 l_discount_incl_terminated BOOLEAN := FALSE;
1634
1635 --Bug# 15992711 , Start
1636 l_line_type VARCHAR2(30) := 'X';
1637 --Bug# 15992711 , End
1638
1639
1640 BEGIN
1641
1642 IF ( p_chr_id IS NULL ) THEN
1643 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1644 END IF;
1645
1646 -- rmunjulu 4042892
1647 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1648 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1649 LOOP
1650 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1651 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1652 l_discount_incl_terminated := TRUE;
1653
1654 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
1655 -- If set then based on its value set l_line_type
1656 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
1657 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
1658 l_line_type := 'NEW'; --New
1659 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
1660 l_line_type := 'RELEASE'; --Release
1661 END IF;
1662 --Bug# 15992711 , End
1663
1664 END IF;
1665 END LOOP;
1666 END IF;
1667
1668
1669 --Bug# 15992711 , Start
1670 -- If l_line_type is set as either 'NEW' or 'RELEASE'
1671 -- based on the value of l_line_type query will consider either only new
1672 -- assets or only re-leased assets, else no change in the standard behavior
1673
1674 IF l_line_type IN ('NEW','RELEASE') THEN
1675
1676 IF l_discount_incl_terminated THEN
1677 SELECT NVL(SUM(kle.tradein_amount),0) INTO l_tradeIn_value
1678 FROM OKC_LINE_STYLES_B LS,
1679 okl_K_lines_full_v kle,
1680 okc_statuses_b sts
1681 WHERE LS.ID = KLE.LSE_ID
1682 AND LS.LTY_CODE ='FREE_FORM1'
1683 AND KLE.dnz_chr_iD = p_chr_id
1684 AND kle.sts_code = sts.code
1685 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD')
1686 AND NVL(kle.re_lease_yn,'N') = DECODE(l_line_type,'NEW','N','RELEASE','Y');
1687
1688 ELSE
1689
1690 SELECT NVL(SUM(kle.tradein_amount),0) INTO l_tradeIn_value
1691 FROM OKC_LINE_STYLES_B LS,
1692 okl_K_lines_full_v kle,
1693 okc_statuses_b sts
1694 WHERE LS.ID = KLE.LSE_ID
1695 AND LS.LTY_CODE ='FREE_FORM1'
1696 AND KLE.dnz_chr_iD = p_chr_id
1697 AND kle.sts_code = sts.code
1698 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
1699 AND NVL(kle.re_lease_yn,'N') = DECODE(l_line_type,'NEW','N','RELEASE','Y');
1700 END IF;
1701 --Bug# 15992711 , End
1702
1703
1704 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
1705 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1706 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1707 -- rmunjulu 4042892
1708
1709
1710 --Bug# 15992711 , Start
1711 --IF l_discount_incl_terminated THEN
1712 ELSIF l_discount_incl_terminated THEN
1713 --Bug# 15992711 , End
1714
1715 SELECT NVL(SUM(kle.tradein_amount),0) INTO l_tradeIn_value
1716 FROM OKC_LINE_STYLES_B LS,
1717 okl_K_lines_full_v kle,
1718 okc_statuses_b sts
1719 WHERE LS.ID = KLE.LSE_ID
1720 AND LS.LTY_CODE ='FREE_FORM1'
1721 AND KLE.dnz_chr_iD = p_chr_id
1722 AND kle.sts_code = sts.code
1723 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1724
1725 ELSE
1726 SELECT NVL(SUM(kle.tradein_amount),0) INTO l_tradeIn_value
1727 FROM OKC_LINE_STYLES_B LS,
1728 okl_K_lines_full_v kle,
1729 okc_statuses_b sts
1730 WHERE LS.ID = KLE.LSE_ID
1731 AND LS.LTY_CODE ='FREE_FORM1'
1732 AND KLE.dnz_chr_iD = p_chr_id
1733 AND kle.sts_code = sts.code
1734 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1735 END IF;
1736
1737 RETURN l_tradeIn_value;
1738
1739
1740 EXCEPTION
1741
1742 WHEN OTHERS THEN
1743 Okl_Api.SET_MESSAGE(
1744 p_app_name => G_APP_NAME,
1745 p_msg_name => G_UNEXPECTED_ERROR,
1746 p_token1 => G_SQLCODE_TOKEN,
1747 p_token1_value => SQLCODE,
1748 p_token2 => G_SQLERRM_TOKEN,
1749 p_token2_value => SQLERRM);
1750 RETURN NULL;
1751
1752
1753 END contract_tradein;
1754
1755 --Bug# 3638568 : This function modified to conditionally include terminated lines if called from pricing
1756 ----------------------------------------------------------------------------------------------------
1757
1758 -- Start of Comments
1759 -- Created By: Santhosh Siruvole (ssiruvol)
1760 -- Function Name line_tradein
1761 -- Description: returns the tradein of a financial asset line.
1762 -- Dependencies:
1763 -- Parameters: contract id and line id.
1764 -- Version: 1.0
1765 -- End of Commnets
1766
1767 ----------------------------------------------------------------------------------------------------
1768 FUNCTION line_tradein(
1769 p_chr_id IN NUMBER,
1770 p_line_id IN NUMBER) RETURN NUMBER IS
1771
1772 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_LINE_TRADEIN_VALUE';
1773 l_api_version CONSTANT NUMBER := 1;
1774 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1775 x_msg_count NUMBER;
1776 x_msg_data VARCHAR2(256);
1777
1778 l_tradeIn_value NUMBER := 0.0;
1779
1780 CURSOR trdinval_csr( chrID NUMBER, lineID NUMBER) IS
1781 SELECT NVL(kle.tradein_amount,0.0) amnt,
1782 kle.dnz_chr_id chrId,
1783 kle.id lneId
1784 FROM OKC_LINE_STYLES_B LS,
1785 okl_K_lines_full_v kle,
1786 okc_statuses_b sts
1787 WHERE LS.ID = kLE.LSE_ID
1788 AND LS.LTY_CODE ='FREE_FORM1'
1789 AND kLE.dnz_chr_id = chrID
1790 AND kLE.ID = lineID
1791 AND kle.sts_code = sts.code
1792 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1793
1794 CURSOR trdinval_csr_incl_terminated( chrID NUMBER, lineID NUMBER) IS
1795 SELECT NVL(kle.tradein_amount,0.0) amnt,
1796 kle.dnz_chr_id chrId,
1797 kle.id lneId
1798 FROM OKC_LINE_STYLES_B LS,
1799 okl_K_lines_full_v kle,
1800 okc_statuses_b sts
1801 WHERE LS.ID = kLE.LSE_ID
1802 AND LS.LTY_CODE ='FREE_FORM1'
1803 AND kLE.dnz_chr_id = chrID
1804 AND kLE.ID = lineID
1805 AND kle.sts_code = sts.code
1806 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1807
1808 l_trdinval_rec trdinval_csr%ROWTYPE;
1809
1810 l_discount_incl_terminated BOOLEAN := FALSE;
1811
1812 BEGIN
1813
1814 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL))THEN
1815 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1816 END IF;
1817
1818 -- rmunjulu 4042892
1819 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1820 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1821 LOOP
1822 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1823 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1824 l_discount_incl_terminated := TRUE;
1825 END IF;
1826 END LOOP;
1827 END IF;
1828
1829 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
1830 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
1831 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
1832
1833 IF l_discount_incl_terminated THEN
1834 OPEN trdinval_csr_incl_terminated ( p_chr_id, p_line_id );
1835 FETCH trdinval_csr_incl_terminated INTO l_trdinval_rec;
1836 IF( trdinval_csr_incl_terminated%NOTFOUND ) THEN
1837 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1838 END IF;
1839 CLOSE trdinval_csr_incl_terminated;
1840 ELSE
1841 OPEN trdinval_csr ( p_chr_id, p_line_id );
1842 FETCH trdinval_csr INTO l_trdinval_rec;
1843 IF( trdinval_csr%NOTFOUND ) THEN
1844 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1845 END IF;
1846 CLOSE trdinval_csr;
1847 END IF;
1848
1849 l_tradeIn_value := l_trdinval_rec.amnt;
1850 RETURN l_tradeIn_value;
1851
1852
1853 EXCEPTION
1854 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN -- Added for bug 14617639
1855 IF trdinval_csr_incl_terminated%ISOPEN THEN
1856 CLOSE trdinval_csr_incl_terminated;
1857 END IF;
1858 IF trdinval_csr%ISOPEN THEN
1859 CLOSE trdinval_csr;
1860 END IF;
1861 RETURN 0;
1862 WHEN OTHERS THEN
1863 IF trdinval_csr_incl_terminated%ISOPEN THEN
1864 CLOSE trdinval_csr_incl_terminated;
1865 END IF;
1866 IF trdinval_csr%ISOPEN THEN
1867 CLOSE trdinval_csr;
1868 END IF;
1869 Okl_Api.SET_MESSAGE(
1870 p_app_name => G_APP_NAME,
1871 p_msg_name => G_UNEXPECTED_ERROR,
1872 p_token1 => G_SQLCODE_TOKEN,
1873 p_token1_value => SQLCODE,
1874 p_token2 => G_SQLERRM_TOKEN,
1875 p_token2_value => SQLERRM);
1876 RETURN NULL;
1877
1878 END line_tradein;
1879
1880 --Bug# 3638568 : This function modified to conditionally include terminated lines if called from pricing
1881 ----------------------------------------------------------------------------------------------------
1882
1883 -- Start of Comments
1884 -- Created By: Santhosh Siruvole (ssiruvol)
1885 -- Function Name contract_capreduction
1886 -- Description: returns the sum of capital reduction of financial asset lines of a contract.
1887 -- Dependencies:
1888 -- Parameters: contract id.
1889 -- Version: 1.0
1890 -- End of Commnets
1891
1892 ----------------------------------------------------------------------------------------------------
1893 FUNCTION contract_capital_reduction(
1894 p_chr_id IN NUMBER,
1895 p_line_id IN NUMBER) RETURN NUMBER IS
1896
1897 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_CONTRACT_CAPITAL_REDUCTION_VALUE';
1898 l_api_version CONSTANT NUMBER := 1;
1899 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1900 x_msg_count NUMBER;
1901 x_msg_data VARCHAR2(256);
1902
1903 l_capred_value NUMBER := 0;
1904
1905 CURSOR l_lines_csr( chrId NUMBER ) IS
1906 SELECT kle.id
1907 FROM okc_line_styles_b ls,
1908 okl_K_lines_full_v kle,
1909 okc_statuses_b sts
1910 WHERE ls.id = kle.lse_id
1911 AND ls.lty_code = 'FREE_FORM1'
1912 AND kle.dnz_chr_id = chrId
1913 AND kle.sts_code = sts.code
1914 -- start: cklee: okl.h Sales Quote IA Authoring
1915 AND kle.CAPITALIZE_DOWN_PAYMENT_YN = 'Y'
1916 -- end: cklee: okl.h Sales Quote IA Authoring
1917 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
1918
1919
1920 CURSOR l_lines_csr_incl_terminated( chrId NUMBER ) IS
1921 SELECT kle.id
1922 FROM okc_line_styles_b ls,
1923 okl_K_lines_full_v kle,
1924 okc_statuses_b sts
1925 WHERE ls.id = kle.lse_id
1926 AND ls.lty_code = 'FREE_FORM1'
1927 AND kle.dnz_chr_id = chrId
1928 AND kle.sts_code = sts.code
1929 -- start: cklee: okl.h Sales Quote IA Authoring
1930 AND kle.CAPITALIZE_DOWN_PAYMENT_YN = 'Y'
1931 -- end: cklee: okl.h Sales Quote IA Authoring
1932 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
1933
1934 --Bug# 15992711 , Start
1935 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
1936 CURSOR l_lines_nr_csr( chrId NUMBER, p_line_type VARCHAR2 ) IS
1937 SELECT kle.id
1938 FROM okc_line_styles_b ls,
1939 okl_K_lines_full_v kle,
1940 okc_statuses_b sts
1941 WHERE ls.id = kle.lse_id
1942 AND ls.lty_code = 'FREE_FORM1'
1943 AND kle.dnz_chr_id = chrId
1944 AND kle.sts_code = sts.code
1945 -- start: cklee: okl.h Sales Quote IA Authoring
1946 AND kle.CAPITALIZE_DOWN_PAYMENT_YN = 'Y'
1947 -- end: cklee: okl.h Sales Quote IA Authoring
1948 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
1949 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
1950
1951
1952 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
1953 CURSOR l_lines_nr_csr_incl_term( chrId NUMBER, p_line_type VARCHAR2 ) IS
1954 SELECT kle.id
1955 FROM okc_line_styles_b ls,
1956 okl_K_lines_full_v kle,
1957 okc_statuses_b sts
1958 WHERE ls.id = kle.lse_id
1959 AND ls.lty_code = 'FREE_FORM1'
1960 AND kle.dnz_chr_id = chrId
1961 AND kle.sts_code = sts.code
1962 -- start: cklee: okl.h Sales Quote IA Authoring
1963 AND kle.CAPITALIZE_DOWN_PAYMENT_YN = 'Y'
1964 -- end: cklee: okl.h Sales Quote IA Authoring
1965 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD')
1966 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
1967
1968
1969 l_line_type VARCHAR2(30) := 'X';
1970 --Bug# 15992711 , End
1971
1972
1973 l_lines_rec l_lines_csr%ROWTYPE;
1974
1975 l_discount_incl_terminated BOOLEAN := FALSE;
1976 BEGIN
1977
1978 IF ( p_chr_id IS NULL ) THEN
1979 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1980 END IF;
1981
1982 -- rmunjulu 4042892
1983 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
1984 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
1985 LOOP
1986 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
1987 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
1988 l_discount_incl_terminated := TRUE;
1989
1990 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
1991 --If set then based on its value set l_line_type
1992 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
1993 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
1994 l_line_type := 'NEW'; --New
1995 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
1996 l_line_type := 'RELEASE'; --Release
1997 END IF;
1998 --Bug# 15992711 , End
1999
2000 END IF;
2001 END LOOP;
2002 END IF;
2003
2004
2005 --Bug# 15992711 , Start
2006 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
2007 -- l_lines_nr_csr or l_lines_nr_csr_incl_term based on l_discount_incl_terminated value
2008 -- cursor in order to consider either only new assets or only re-leased assets
2009 IF l_line_type IN ('NEW','RELEASE') THEN
2010 IF l_discount_incl_terminated THEN
2011
2012 FOR l_lines_rec IN l_lines_nr_csr_incl_term ( p_chr_id, l_line_type )
2013 LOOP
2014
2015 l_capred_value := l_capred_value + line_capital_reduction(p_chr_id, l_lines_rec.id);
2016
2017 END LOOP;
2018 ELSE
2019 FOR l_lines_rec IN l_lines_nr_csr ( p_chr_id, l_line_type )
2020 LOOP
2021
2022 l_capred_value := l_capred_value + line_capital_reduction(p_chr_id, l_lines_rec.id);
2023
2024 END LOOP;
2025 END IF;
2026 --Bug# 15992711 , End
2027
2028 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
2029 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
2030 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
2031
2032
2033 --Bug# 15992711 , Start
2034 --IF l_discount_incl_terminated THEN
2035 ELSIF l_discount_incl_terminated THEN
2036 --Bug# 15992711 , End
2037 FOR l_lines_rec IN l_lines_csr_incl_terminated ( p_chr_id )
2038 LOOP
2039
2040 l_capred_value := l_capred_value + line_capital_reduction(p_chr_id, l_lines_rec.id);
2041
2042 END LOOP;
2043
2044 ELSE
2045 FOR l_lines_rec IN l_lines_csr ( p_chr_id )
2046 LOOP
2047
2048 l_capred_value := l_capred_value + line_capital_reduction(p_chr_id, l_lines_rec.id);
2049
2050 END LOOP;
2051 END IF;
2052
2053 RETURN l_capred_value;
2054
2055
2056 EXCEPTION
2057
2058 WHEN OTHERS THEN
2059 IF l_lines_csr_incl_terminated%ISOPEN THEN
2060 CLOSE l_lines_csr_incl_terminated;
2061 END IF;
2062 IF l_lines_csr%ISOPEN THEN
2063 CLOSE l_lines_csr;
2064 END IF;
2065 Okl_Api.SET_MESSAGE(
2066 p_app_name => G_APP_NAME,
2067 p_msg_name => G_UNEXPECTED_ERROR,
2068 p_token1 => G_SQLCODE_TOKEN,
2069 p_token1_value => SQLCODE,
2070 p_token2 => G_SQLERRM_TOKEN,
2071 p_token2_value => SQLERRM);
2072 RETURN NULL;
2073
2074 END contract_capital_reduction;
2075
2076 --Bug# 3638568 : This function modified to conditionally include TERMINATED lines if called from pricing
2077 ----------------------------------------------------------------------------------------------------
2078
2079 -- Start of Comments
2080 -- Created By: Santhosh Siruvole (ssiruvol)
2081 -- Function Name line_capreduction
2082 -- Description: returns the capital reduction of a financial asset line.
2083 -- Dependencies:
2084 -- Parameters: contract id and line id
2085 -- Version: 1.0
2086 -- End of Commnets
2087
2088 ----------------------------------------------------------------------------------------------------
2089 FUNCTION line_capital_reduction(
2090 p_chr_id IN NUMBER,
2091 p_line_id IN NUMBER) RETURN NUMBER IS
2092
2093
2094 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_CAPITAL_REDUCTION_VALUE';
2095 l_api_version CONSTANT NUMBER := 1;
2096 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2097 x_msg_count NUMBER;
2098 x_msg_data VARCHAR2(256);
2099
2100 l_capred_value NUMBER := 0;
2101 l_capred_percent NUMBER := 0;
2102 l_capred_incl_terminated BOOLEAN := FALSE;
2103 l_caplitalize_flag varchar2(3);
2104
2105 -- start: cklee: okl.h Sales Quote IA Authoring
2106 CURSOR l_lines_csr(p_chr_id number,
2107 p_line_id number)
2108 IS
2109 SELECT NVL(kle.capital_reduction,0) capital_reduction,
2110 NVL(kle.capital_reduction_percent,0) capital_reduction_percent,
2111 NVL(kle.CAPITALIZE_DOWN_PAYMENT_YN, 'N') CAPITALIZE_DOWN_PAYMENT_YN,
2112 sts.ste_code
2113 FROM OKC_LINE_STYLES_B LS,
2114 okl_K_lines_full_v kle,
2115 okc_statuses_b sts
2116 WHERE LS.ID = KLE.LSE_ID
2117 AND LS.LTY_CODE ='FREE_FORM1'
2118 AND KLE.dnz_chr_id = p_chr_id
2119 AND KLE.ID = p_line_id
2120 AND kle.sts_code = sts.code
2121 ;
2122 -- end: cklee: okl.h Sales Quote IA Authoring
2123
2124 BEGIN
2125
2126 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL))THEN
2127 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2128 END IF;
2129
2130 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
2131 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
2132 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
2133 --l_capred_incl_terminated := TRUE;
2134 --END IF;
2135
2136 -- rmunjulu 4042892
2137 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
2138 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
2139 LOOP
2140 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
2141 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
2142 l_capred_incl_terminated := TRUE;
2143 END IF;
2144 END LOOP;
2145 END IF;
2146
2147 IF l_capred_incl_terminated = TRUE THEN
2148
2149 -- start: cklee: okl.h Sales Quote IA Authoring
2150 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
2151 IF this_row.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD') AND
2152 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
2153 l_capred_value := this_row.capital_reduction;
2154 END IF;
2155 END LOOP;
2156 /* SELECT NVL(kle.capital_reduction,0) INTO l_capred_value
2157 FROM OKC_LINE_STYLES_B LS,
2158 okl_K_lines_full_v kle,
2159 okc_statuses_b sts
2160 WHERE LS.ID = KLE.LSE_ID
2161 AND LS.LTY_CODE ='FREE_FORM1'
2162 AND KLE.dnz_chr_id = p_chr_id
2163 AND KLE.ID = p_line_id
2164 AND kle.sts_code = sts.code
2165 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
2166 */
2167 -- end: cklee: okl.h Sales Quote IA Authoring
2168 ELSE
2169 -- start: cklee: okl.h Sales Quote IA Authoring
2170 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
2171 IF this_row.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD') AND
2172 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
2173 l_capred_value := this_row.capital_reduction;
2174 END IF;
2175 END LOOP;
2176
2177 /* SELECT NVL(kle.capital_reduction,0) INTO l_capred_value
2178 FROM OKC_LINE_STYLES_B LS,
2179 okl_K_lines_full_v kle,
2180 okc_statuses_b sts
2181 WHERE LS.ID = KLE.LSE_ID
2182 AND LS.LTY_CODE ='FREE_FORM1'
2183 AND KLE.dnz_chr_id = p_chr_id
2184 AND KLE.ID = p_line_id
2185 AND kle.sts_code = sts.code
2186 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2187 */
2188 END IF;
2189
2190 -- end: cklee: okl.h Sales Quote IA Authoring
2191 IF( l_capred_value = 0) THEN
2192 IF l_capred_incl_terminated = TRUE THEN
2193 -- start: cklee: okl.h Sales Quote IA Authoring
2194 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
2195 IF this_row.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD') AND
2196 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
2197 l_capred_percent := this_row.capital_reduction_percent;
2198 END IF;
2199 END LOOP;
2200
2201 /* SELECT NVL(kle.capital_reduction_percent,0) INTO l_capred_percent
2202 FROM OKC_LINE_STYLES_B LS,
2203 okl_K_lines_full_v kle,
2204 okc_statuses_b sts
2205 WHERE LS.ID = KLE.LSE_ID
2206 AND LS.LTY_CODE ='FREE_FORM1'
2207 AND KLE.dnz_chr_id = p_chr_id
2208 AND KLE.ID = p_line_id
2209 AND kle.sts_code = sts.code
2210 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
2211 */
2212 -- end: cklee: okl.h Sales Quote IA Authoring
2213 ELSE
2214 -- start: cklee: okl.h Sales Quote IA Authoring
2215 FOR this_row IN l_lines_csr(p_chr_id, p_line_id) LOOP
2216 IF this_row.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD') AND
2217 this_row.CAPITALIZE_DOWN_PAYMENT_YN = 'Y' THEN
2218 l_capred_percent := this_row.capital_reduction_percent;
2219 END IF;
2220 END LOOP;
2221
2222 /* SELECT NVL(kle.capital_reduction_percent,0) INTO l_capred_percent
2223 FROM OKC_LINE_STYLES_B LS,
2224 okl_K_lines_full_v kle,
2225 okc_statuses_b sts
2226 WHERE LS.ID = KLE.LSE_ID
2227 AND LS.LTY_CODE ='FREE_FORM1'
2228 AND KLE.dnz_chr_id = p_chr_id
2229 AND KLE.ID = p_line_id
2230 AND kle.sts_code = sts.code
2231 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2232 */
2233 -- end: cklee: okl.h Sales Quote IA Authoring
2234 END IF;
2235
2236 IF( l_capred_percent <> 0) THEN
2237 l_capred_value := line_oec( p_chr_id, p_line_id ) * l_capred_percent / 100.00;
2238 END IF;
2239
2240 END IF;
2241
2242 RETURN l_capred_value;
2243
2244
2245 EXCEPTION
2246
2247 WHEN OTHERS THEN
2248 Okl_Api.SET_MESSAGE(
2249 p_app_name => G_APP_NAME,
2250 p_msg_name => G_UNEXPECTED_ERROR,
2251 p_token1 => G_SQLCODE_TOKEN,
2252 p_token1_value => SQLCODE,
2253 p_token2 => G_SQLERRM_TOKEN,
2254 p_token2_value => SQLERRM);
2255
2256 RETURN NULL;
2257
2258 END line_capital_reduction;
2259
2260 --Bug# 3638568 : This function modified to conditionally include TERMINATED lines if called from pricing
2261 ----------------------------------------------------------------------------------------------------
2262
2263 -- Start of Comments
2264 -- Created By: Santhosh Siruvole (ssiruvol)
2265 -- Function Name line_feescapitalized
2266 -- Description: returns the capitalized fees of a financial asset line.
2267 -- Dependencies:
2268 -- Parameters: contract id and line id
2269 -- Version: 1.0
2270 -- End of Commnets
2271
2272 ----------------------------------------------------------------------------------------------------
2273 FUNCTION line_fees_capitalized(
2274 p_chr_id IN NUMBER,
2275 p_line_id IN NUMBER) RETURN NUMBER IS
2276
2277 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_FEES_CAPITAL_AMOUNT_VALUE';
2278 l_api_version CONSTANT NUMBER := 1;
2279 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2280 x_msg_count NUMBER;
2281 x_msg_data VARCHAR2(256);
2282
2283 l_fees_value NUMBER := 0;
2284
2285 CURSOR l_fee_csr( kleId NUMBER) IS
2286 SELECT NVL(SUM(kle_cov.capital_amount),0) CapAmountLines
2287 FROM OKC_LINE_STYLES_B LSEB,
2288 OKC_K_ITEMS CIM,
2289 OKL_K_LINES KLE_COV,
2290 OKC_K_LINES_B CLEB_COV,
2291 OKC_STATUSES_B STSB
2292 WHERE LSEB.ID = CLEB_COV.LSE_ID
2293 AND LSEB.lty_code = 'LINK_FEE_ASSET'
2294 AND CIM.jtot_object1_code = 'OKX_COVASST'
2295 AND CLEB_COV.id = CIM.cle_id
2296 AND KLE_COV.id = CLEB_COV.ID
2297 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
2298 AND cim.object1_id1 = to_char(kleId)
2299 AND CLEB_COV.sts_code = STSB.code
2300 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2301
2302 CURSOR l_fee_csr_incl_terminated( kleId NUMBER) IS
2303 SELECT NVL(SUM(kle_cov.capital_amount),0) CapAmountLines
2304 FROM OKC_LINE_STYLES_B LSEB,
2305 OKC_K_ITEMS CIM,
2306 OKL_K_LINES KLE_COV,
2307 OKC_K_LINES_B CLEB_COV,
2308 OKC_STATUSES_B STSB
2309 WHERE LSEB.ID = CLEB_COV.LSE_ID
2310 AND LSEB.lty_code = 'LINK_FEE_ASSET'
2311 AND CIM.jtot_object1_code = 'OKX_COVASST'
2312 AND CLEB_COV.id = CIM.cle_id
2313 AND KLE_COV.id = CLEB_COV.ID
2314 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
2315 AND cim.object1_id1 = to_char(kleId)
2316 AND CLEB_COV.sts_code = STSB.code
2317 AND STSB.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
2318
2319 --Bug# 5150150 -- start
2320 CURSOR l_sys_source_code_csr (p_chr_id NUMBER) IS
2321 SELECT ID,ORIG_SYSTEM_SOURCE_CODE
2322 FROM OKC_K_HEADERS_B
2323 WHERE ID = p_chr_id;
2324
2325 l_chr_id okc_k_headers_b.id%type;
2326 l_orig_systm_source_code okc_k_headers_b.orig_system_source_code%type;
2327 --Bug# 5150150 -- end
2328 l_feeline_rec l_fee_csr%ROWTYPE;
2329 l_discount_incl_terminated BOOLEAN := FALSE;
2330
2331 BEGIN
2332
2333 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL)) THEN
2334 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2335 END IF;
2336
2337 --Bug# 5150150 -- start
2338 OPEN l_sys_source_code_csr ( p_chr_id );
2339 FETCH l_sys_source_code_csr INTO l_chr_id, l_orig_systm_source_code;
2340 CLOSE l_sys_source_code_csr;
2341
2342 if ((l_orig_systm_source_code is not null) and (l_orig_systm_source_code = 'OKL_RELEASE')) then
2343 l_fees_value := 0.0;
2344 else
2345 --Bug# 5150150 -- end
2346 -- rmunjulu 4042892
2347 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
2348 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
2349 LOOP
2350 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
2351 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
2352 l_discount_incl_terminated := TRUE;
2353 END IF;
2354 END LOOP;
2355 END IF;
2356
2357 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
2358 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
2359 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
2360 IF l_discount_incl_terminated THEN
2361 OPEN l_fee_csr_incl_terminated ( p_line_id );
2362 FETCH l_fee_csr_incl_terminated INTO l_feeline_rec;
2363 IF( l_fee_csr_incl_terminated%NOTFOUND ) THEN
2364 l_fees_value := 0.0;
2365 END IF;
2366 CLOSE l_fee_csr_incl_terminated;
2367 ELSE
2368 OPEN l_fee_csr( p_line_id );
2369 FETCH l_fee_csr INTO l_feeline_rec;
2370 IF( l_fee_csr%NOTFOUND ) THEN
2371 l_fees_value := 0.0;
2372 END IF;
2373 CLOSE l_fee_csr;
2374 END IF;
2375
2376 l_fees_value := l_feeline_rec.CapAmountLines;
2377
2378 end if;
2379 RETURN l_fees_value;
2380
2381
2382 EXCEPTION
2383
2384 WHEN OTHERS THEN
2385 IF l_fee_csr_incl_terminated%ISOPEN THEN
2386 CLOSE l_fee_csr_incl_terminated;
2387 END IF;
2388 IF l_fee_csr%ISOPEN THEN
2389 CLOSE l_fee_csr;
2390 END IF;
2391
2392 Okl_Api.SET_MESSAGE(
2393 p_app_name => G_APP_NAME,
2394 p_msg_name => G_UNEXPECTED_ERROR,
2395 p_token1 => G_SQLCODE_TOKEN,
2396 p_token1_value => SQLCODE,
2397 p_token2 => G_SQLERRM_TOKEN,
2398 p_token2_value => SQLERRM);
2399 RETURN NULL;
2400
2401 END line_fees_capitalized;
2402
2403 --Bug# 3638568 : This function modified to conditionally include TERMINATED lines if called from pricing
2404 ----------------------------------------------------------------------------------------------------
2405
2406 -- Start of Comments
2407 -- Created By: Santhosh Siruvole (ssiruvol)
2408 -- Function Name contract_feescapitalized
2409 -- Description: returns the sum of capitalized fees of all financial asset lines of a contract.
2410 -- Dependencies:
2411 -- Parameters: contract id.
2412 -- Version: 1.0
2413 -- End of Commnets
2414
2415 ----------------------------------------------------------------------------------------------------
2416 FUNCTION contract_fees_capitalized(
2417 p_chr_id IN NUMBER,
2418 p_line_id IN NUMBER) RETURN NUMBER IS
2419
2420 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_FEES_CAPITAL_AMOUNT_VALUE';
2421 l_api_version CONSTANT NUMBER := 1;
2422 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2423 x_msg_count NUMBER;
2424 x_msg_data VARCHAR2(256);
2425
2426
2427 CURSOR l_lines_csr( chrId NUMBER ) IS
2428 SELECT kle.id
2429 FROM okc_line_styles_b ls,
2430 okl_K_lines_full_v kle,
2431 okc_statuses_b sts
2432 WHERE ls.id = kle.lse_id
2433 AND ls.lty_code = 'FREE_FORM1'
2434 AND kle.dnz_chr_id = chrId
2435 AND kle.sts_code = sts.code
2436 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2437
2438 CURSOR l_lines_csr_incl_terminated( chrId NUMBER ) IS
2439 SELECT kle.id
2440 FROM okc_line_styles_b ls,
2441 okl_K_lines_full_v kle,
2442 okc_statuses_b sts
2443 WHERE ls.id = kle.lse_id
2444 AND ls.lty_code = 'FREE_FORM1'
2445 AND kle.dnz_chr_id = chrId
2446 AND kle.sts_code = sts.code
2447 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD');
2448
2449 --Bug# 15992711 , Start
2450 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
2451 CURSOR l_lines_nr_csr( chrId NUMBER, p_line_type VARCHAR2 ) IS
2452 SELECT kle.id
2453 FROM okc_line_styles_b ls,
2454 okl_K_lines_full_v kle,
2455 okc_statuses_b sts
2456 WHERE ls.id = kle.lse_id
2457 AND ls.lty_code = 'FREE_FORM1'
2458 AND kle.dnz_chr_id = chrId
2459 AND kle.sts_code = sts.code
2460 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
2461 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
2462
2463
2464 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
2465 CURSOR l_lines_nr_csr_incl_term( chrId NUMBER, p_line_type VARCHAR2 ) IS
2466 SELECT kle.id
2467 FROM okc_line_styles_b ls,
2468 okl_K_lines_full_v kle,
2469 okc_statuses_b sts
2470 WHERE ls.id = kle.lse_id
2471 AND ls.lty_code = 'FREE_FORM1'
2472 AND kle.dnz_chr_id = chrId
2473 AND kle.sts_code = sts.code
2474 AND sts.ste_code NOT IN ('EXPIRED', 'CANCELLED', 'HOLD')
2475 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
2476
2477 l_line_type VARCHAR2(30) := 'X';
2478 --Bug# 15992711 , End
2479
2480
2481 l_lines_rec l_lines_csr%ROWTYPE;
2482
2483 l_fees_value NUMBER := 0;
2484
2485 l_discount_incl_terminated BOOLEAN := FALSE;
2486
2487 BEGIN
2488
2489 IF ( p_chr_id IS NULL ) THEN
2490 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2491 END IF;
2492
2493 -- rmunjulu 4042892
2494 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
2495 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
2496 LOOP
2497 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
2498 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
2499 l_discount_incl_terminated := TRUE;
2500
2501 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
2502 -- If set then based on its value set l_line_type
2503
2504 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
2505 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
2506 l_line_type := 'NEW'; --New
2507 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
2508 l_line_type := 'RELEASE'; --Release
2509 END IF;
2510 --Bug# 15992711 , End
2511
2512 END IF;
2513 END LOOP;
2514 END IF;
2515
2516
2517 --Bug# 15992711 , Start
2518 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
2519 -- l_lines_nr_csr or l_lines_nr_csr_incl_term cursor based on l_discount_incl_terminated value
2520 -- in order to consider either only new assets or only re-leased assets, else no change in the standard behavior
2521
2522 IF l_line_type IN ('NEW','RELEASE') THEN
2523 IF l_discount_incl_terminated THEN
2524
2525 FOR l_lines_rec IN l_lines_nr_csr_incl_term ( p_chr_id, l_line_type )
2526 LOOP
2527
2528 l_fees_value := l_fees_value + line_fees_capitalized(p_chr_id, l_lines_rec.id);
2529
2530 END LOOP;
2531 ELSE
2532 FOR l_lines_rec IN l_lines_nr_csr ( p_chr_id, l_line_type )
2533 LOOP
2534
2535 l_fees_value := l_fees_value + line_fees_capitalized(p_chr_id, l_lines_rec.id);
2536
2537 END LOOP;
2538 END IF;
2539 --Bug# 15992711 , End
2540
2541
2542 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
2543 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
2544 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
2545
2546 --Bug# 15992711 , Start
2547 --IF l_discount_incl_terminated THEN
2548 ELSIF l_discount_incl_terminated THEN
2549 --Bug# 15992711 , End
2550 FOR l_lines_rec IN l_lines_csr_incl_terminated ( p_chr_id )
2551 LOOP
2552
2553 l_fees_value := l_fees_value + line_fees_capitalized(p_chr_id, l_lines_rec.id);
2554
2555 END LOOP;
2556
2557 ELSE
2558 FOR l_lines_rec IN l_lines_csr ( p_chr_id )
2559 LOOP
2560
2561 l_fees_value := l_fees_value + line_fees_capitalized(p_chr_id, l_lines_rec.id);
2562
2563 END LOOP;
2564 END IF;
2565
2566 RETURN l_fees_value;
2567
2568
2569 EXCEPTION
2570
2571 WHEN OTHERS THEN
2572 IF l_lines_csr_incl_terminated%ISOPEN THEN
2573 CLOSE l_lines_csr_incl_terminated;
2574 END IF;
2575 IF l_lines_csr%ISOPEN THEN
2576 CLOSE l_lines_csr;
2577 END IF;
2578 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
2579 p_msg_name => G_UNEXPECTED_ERROR,
2580 p_token1 => G_SQLCODE_TOKEN,
2581 p_token1_value => SQLCODE,
2582 p_token2 => G_SQLERRM_TOKEN,
2583 p_token2_value => SQLERRM);
2584 RETURN NULL;
2585
2586 END contract_fees_capitalized;
2587
2588 ----------------------------------------------------------------------------------------------------
2589
2590 -- Start of Comments
2591 -- Created By: Santhosh Siruvole (ssiruvol)
2592 -- Function Name line_servicecapitalized
2593 -- Description: returns the capitalized service fees of a financial asset line.
2594 -- Dependencies:
2595 -- Parameters: contract id and line id
2596 -- Version: 1.0
2597 -- End of Commnets
2598
2599 ----------------------------------------------------------------------------------------------------
2600 FUNCTION line_service_capitalized(
2601 p_chr_id IN NUMBER,
2602 p_line_id IN NUMBER) RETURN NUMBER IS
2603
2604 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_SVC_CAP_AMNT_VALUE';
2605 l_api_version CONSTANT NUMBER := 1;
2606 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2607 x_msg_count NUMBER;
2608 x_msg_data VARCHAR2(256);
2609
2610 l_srvcs_value NUMBER := 0;
2611
2612
2613 CURSOR l_srvcline_csr ( kleId NUMBER ) IS
2614 SELECT NVL(SUM(kle.capital_amount),0) CapAmountSubLines
2615 FROM OKC_LINE_STYLES_B LS,
2616 okc_k_items cim,
2617 okl_K_lines_full_v kle,
2618 okc_statuses_b sts
2619 WHERE LS.ID = KLE.LSE_ID
2620 AND ls.lty_code = 'LINK_SERV_ASSET'
2621 AND cim.jtot_object1_code = 'OKX_COVASST'
2622 AND kle.id = cim.cle_id
2623 AND cim.object1_id1 = to_char(kleId)
2624 AND kle.sts_code = sts.code
2625 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2626
2627 CURSOR srvc_strm_type_csr ( kleid NUMBER ) IS
2628 SELECT sty.capitalize_yn,
2629 sty.name
2630 FROM okl_strm_type_v sty,
2631 okc_k_items cim,
2632 okc_line_styles_b ls,
2633 okl_K_lines_full_v kle,
2634 okc_statuses_b sts
2635 WHERE cim.cle_id = kle.id
2636 AND ls.id = kle.lse_id
2637 AND ls.lty_code = 'SOLD_SERVICE'
2638 AND cim.object1_id1 = sty.id
2639 AND cim.object1_id2 = '#'
2640 AND kle.id = kleid
2641 AND kle.sts_code = sts.code
2642 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
2643
2644
2645 l_srvcline_rec l_srvcline_csr%ROWTYPE;
2646 l_srvcstrm_rec srvc_strm_type_csr%ROWTYPE;
2647
2648 BEGIN
2649
2650 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL))THEN
2651 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2652 END IF;
2653
2654 OPEN srvc_strm_type_csr( p_line_id );
2655 FETCH srvc_strm_type_csr INTO l_srvcstrm_rec;
2656 IF( srvc_strm_type_csr%NOTFOUND ) THEN
2657 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2658 END IF;
2659 CLOSE srvc_strm_type_csr;
2660
2661 IF( UPPER(l_srvcstrm_rec.capitalize_YN) = 'N' ) THEN
2662 RETURN 0.0;
2663 END IF;
2664
2665 OPEN l_srvcline_csr( p_line_id );
2666 FETCH l_srvcline_csr INTO l_srvcline_rec;
2667 IF( l_srvcline_csr%NOTFOUND ) THEN
2668 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2669 END IF;
2670 CLOSE l_srvcline_csr;
2671
2672 l_srvcs_value := l_srvcline_rec.CapAmountSubLines;
2673
2674 RETURN l_srvcs_value;
2675
2676
2677 EXCEPTION
2678
2679 WHEN OTHERS THEN
2680 Okl_Api.SET_MESSAGE(
2681 p_app_name => G_APP_NAME,
2682 p_msg_name => G_UNEXPECTED_ERROR,
2683 p_token1 => G_SQLCODE_TOKEN,
2684 p_token1_value => SQLCODE,
2685 p_token2 => G_SQLERRM_TOKEN,
2686 p_token2_value => SQLERRM);
2687 RETURN NULL;
2688
2689
2690 END line_service_capitalized;
2691
2692 ------------------------------------------------------------------------------
2693 -- Start of comments
2694 --
2695 -- Procedure Name : contract_total_adjustments
2696 -- Description : Sum of all approved requests for specfiic contract where type = prefunding
2697 -- and amount is negative
2698 -- Business Rules :
2699 -- Parameters :IN: p_contract_id, OUT: amount
2700 -- Version : 1.0
2701 -- History : 20-MAY-02 [email protected] -- Created
2702 --
2703 -- End of comments
2704 ------------------------------------------------------------------------------
2705 FUNCTION contract_total_adjustments(
2706 p_contract_id IN NUMBER
2707 ,p_contract_line_id IN NUMBER
2708 ) RETURN NUMBER
2709 IS
2710 l_amount NUMBER := 0;
2711 -- sjalasut, modified the cursor to have khr_id referred from okl_txl_ap_inv_lns_all_b
2712 -- changes made as part of OKLR12B project.
2713 --start:| 21-Sep-07 cklee Bug: 6438934 |
2714 /*
2715 CURSOR C (p_contract_id NUMBER)
2716 IS
2717 SELECT NVL(SUM(A.amount),0)
2718 FROM okl_trx_ap_invoices_b A
2719 ,okl_txl_ap_inv_lns_all_b B
2720 WHERE A.id = B.tap_id
2721 AND B.khr_id = p_contract_id
2722 AND A.funding_type_code = 'PREFUNDING'
2723 AND A.trx_status_code IN ('APPROVED', 'PROCESSED')
2724 AND A.amount < 0;
2725 */
2726 --end:| 21-Sep-07 cklee Bug: 6438934 |
2727
2728 BEGIN
2729
2730 --start:| 21-Sep-07 cklee Bug: 6438934 |
2731 /*
2732 OPEN C (p_contract_id);
2733 FETCH C INTO l_amount;
2734 CLOSE C;
2735 */
2736 l_amount := okl_funding_pvt.get_chr_funded_adjs(p_contract_id);
2737 --end:| 21-Sep-07 cklee Bug: 6438934 |
2738
2739 RETURN l_amount;
2740 EXCEPTION
2741 WHEN OTHERS THEN
2742 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2743 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2744 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2745 p_token1 => 'OKL_SQLCODE',
2746 p_token1_value => SQLCODE,
2747 p_token2 => 'OKL_SQLERRM',
2748 p_token2_value => SQLERRM);
2749 RETURN NULL;
2750
2751 END;
2752
2753 ------------------------------------------------------------------------------
2754 -- Start of comments
2755 --
2756 -- Procedure Name : contract_amount_prefunded
2757 -- Description : Sum of all approved requests for specfiic contract where type = prefunding
2758 -- Business Rules :
2759 -- Parameters :IN: p_contract_id, OUT: amount
2760 -- Version : 1.0
2761 -- History :13-JAN-02 [email protected] -- Created
2762 -- 22-Jan-07 sjalasut modified cursor c to have khr_id referred
2763 -- from okl_txl_Ap_inv_lns_all_b
2764 --
2765 -- End of comments
2766 ------------------------------------------------------------------------------
2767 FUNCTION contract_amount_prefunded(
2768 p_contract_id IN NUMBER
2769 ,p_contract_line_id IN NUMBER
2770 ) RETURN NUMBER
2771 IS
2772 l_amount NUMBER := 0;
2773
2774 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
2775 -- changes made as part of OKLR12B disbursements project
2776 --start:| 21-Sep-07 cklee Bug: 6438934 |
2777 /*
2778 CURSOR C (p_contract_id NUMBER)
2779 IS
2780 SELECT NVL(SUM(A.amount),0)
2781 FROM okl_trx_ap_invoices_b A
2782 ,okl_Txl_ap_inv_lns_all_b B
2783 WHERE A.id = B.tap_id
2784 AND B.khr_id = p_contract_id
2785 AND A.funding_type_code = 'PREFUNDING'
2786 AND A.trx_status_code IN ('APPROVED', 'PROCESSED')
2787 AND A.amount > 0;
2788 */
2789 --end:| 21-Sep-07 cklee Bug: 6438934 |
2790
2791 BEGIN
2792
2793 --start:| 21-Sep-07 cklee Bug: 6438934 |
2794 /*
2795 OPEN C (p_contract_id);
2796 FETCH C INTO l_amount;
2797 CLOSE C;*/
2798 l_amount := okl_funding_pvt.get_amount_prefunded(p_contract_id);
2799 --end:| 21-Sep-07 cklee Bug: 6438934 |
2800
2801 RETURN l_amount;
2802 EXCEPTION
2803 WHEN OTHERS THEN
2804 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2805 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2806 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2807 p_token1 => 'OKL_SQLCODE',
2808 p_token1_value => SQLCODE,
2809 p_token2 => 'OKL_SQLERRM',
2810 p_token2_value => SQLERRM);
2811 RETURN NULL;
2812
2813 END;
2814 ------------------------------------------------------------------------------
2815 -- Start of comments
2816 --
2817 -- Procedure Name : contract_total_funded
2818 -- Description : Sum of all approved requests for specific contract
2819 -- Business Rules :
2820 -- Parameters :IN: p_contract_id, OUT: amount
2821 -- Version : 1.0
2822 -- History :13-JAN-02 [email protected] -- Created
2823 -- 22-Jan-07 sjalasut modified cursor c to have khr_id referred
2824 -- from okl_txl_Ap_inv_lns_all_b
2825 --
2826 -- End of comments
2827 ------------------------------------------------------------------------------
2828 FUNCTION contract_total_funded(
2829 p_contract_id IN NUMBER
2830 ,p_contract_line_id IN NUMBER
2831 ) RETURN NUMBER
2832 IS
2833 l_amount NUMBER := 0;
2834
2835 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
2836 -- changes made as part of OKLR12B disbursements project
2837 --start:| 21-Sep-07 cklee Bug: 6438934 |
2838 /*
2839 CURSOR C (p_contract_id NUMBER)
2840 IS
2841 SELECT NVL(SUM(A.amount),0)
2842 FROM okl_trx_ap_invoices_b A
2843 ,okl_txl_ap_inv_lns_all_b B
2844 WHERE A.id = B.TAP_ID
2845 AND A.khr_id = p_contract_id
2846 AND A.funding_type_code NOT IN ('SUPPLIER_RETENTION', 'MANUAL_DISB')
2847 AND A.trx_status_code IN ('APPROVED', 'PROCESSED');
2848 */
2849 --end:| 21-Sep-07 cklee Bug: 6438934 |
2850
2851 BEGIN
2852
2853 --start:| 21-Sep-07 cklee Bug: 6438934 |
2854 /* OPEN C (p_contract_id);
2855 FETCH C INTO l_amount;
2856 CLOSE C;*/
2857 l_amount := okl_funding_pvt.get_total_funded(p_contract_id);
2858 --end:| 21-Sep-07 cklee Bug: 6438934 |
2859
2860 RETURN l_amount;
2861 EXCEPTION
2862 WHEN OTHERS THEN
2863 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2864 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2865 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2866 p_token1 => 'OKL_SQLCODE',
2867 p_token1_value => SQLCODE,
2868 p_token2 => 'OKL_SQLERRM',
2869 p_token2_value => SQLERRM);
2870 RETURN NULL;
2871
2872 END;
2873 ------------------------------------------------------------------------------
2874 -- Start of comments
2875 --
2876 -- Procedure Name : contract_total_debits
2877 -- Description : Sum of all approved requests for specific contract where amount is negative (A/P debits)
2878 -- Business Rules :
2879 -- Parameters :IN: p_contract_id, OUT: amount
2880 -- Version : 1.0
2881 -- History :13-JAN-02 [email protected] -- Created
2882 -- 22-Jan-07 sjalasut modified cursor c to have khr_id referred
2883 -- from okl_txl_Ap_inv_lns_all_b
2884 --
2885 -- End of comments
2886 ------------------------------------------------------------------------------
2887 FUNCTION contract_total_debits(
2888 p_contract_id IN NUMBER
2889 ,p_contract_line_id IN NUMBER
2890 ) RETURN NUMBER
2891 IS
2892 l_amount NUMBER := 0;
2893
2894 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
2895 -- changes made as part of OKLR12B disbursements project
2896 --start:| 21-Sep-07 cklee Bug: 6438934 |
2897 /*
2898 CURSOR C (p_contract_id NUMBER)
2899 IS
2900 SELECT NVL(SUM(B.amount),0)
2901 FROM okl_trx_ap_invoices_b A,
2902 okl_txl_ap_inv_lns_all_b B
2903 WHERE A.id = B.tap_id
2904 AND B.khr_id = p_contract_id
2905 AND A.trx_status_code IN ('APPROVED', 'PROCESSED')
2906 AND A.funding_type_code = 'SUPPLIER_RETENTION';
2907 */
2908 --end:| 21-Sep-07 cklee Bug: 6438934 |
2909 BEGIN
2910
2911 --start:| 21-Sep-07 cklee Bug: 6438934 |
2912 /*
2913 OPEN C (p_contract_id);
2914 FETCH C INTO l_amount;
2915 CLOSE C;*/
2916 l_amount := okl_funding_pvt.get_total_retention(p_contract_id);
2917 --end:| 21-Sep-07 cklee Bug: 6438934 |
2918
2919 RETURN l_amount;
2920
2921 EXCEPTION
2922 WHEN OTHERS THEN
2923 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2924 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2925 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2926 p_token1 => 'OKL_SQLCODE',
2927 p_token1_value => SQLCODE,
2928 p_token2 => 'OKL_SQLERRM',
2929 p_token2_value => SQLERRM);
2930 RETURN NULL;
2931
2932 END;
2933 -----------------------------------------------------------------------
2934 -- Start of comments
2935 --
2936 -- Procedure Name : creditline_total_limit
2937 -- Description : Sum of all credit limit (contract line) for specfiic
2938 -- contract entity scs_code = 'CREDITLINE_CONTRACT'
2939 -- Business Rules :
2940 -- Parameters :IN: p_contract_id, OUT: amount
2941 -- Version : 1.0
2942 -- History :13-JAN-02 [email protected] -- Created
2943 --
2944 -- End of comments
2945 ------------------------------------------------------------------------------
2946 FUNCTION creditline_total_limit(
2947 p_contract_id IN NUMBER
2948 ,p_contract_line_id IN NUMBER
2949 ) RETURN NUMBER
2950 IS
2951 l_amount NUMBER := 0;
2952 l_amount_add NUMBER := 0;
2953 l_amount_new NUMBER := 0;
2954 l_amount_reduce NUMBER := 0;
2955
2956 BEGIN
2957
2958 l_amount_add := NVL(creditline_total_addition(p_contract_id),0);
2959 l_amount_new := NVL(creditline_total_new_limit(p_contract_id),0);
2960 l_amount_reduce := NVL(creditline_total_reduction(p_contract_id),0);
2961
2962 l_amount := l_amount_new + l_amount_add - l_amount_reduce;
2963
2964 RETURN l_amount;
2965 EXCEPTION
2966 WHEN OTHERS THEN
2967 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
2968 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
2969 p_msg_name => 'OKL_UNEXPECTED_ERROR',
2970 p_token1 => 'OKL_SQLCODE',
2971 p_token1_value => SQLCODE,
2972 p_token2 => 'OKL_SQLERRM',
2973 p_token2_value => SQLERRM);
2974 RETURN NULL;
2975
2976 END;
2977 ------------------------------------------------------------------------------
2978 -- Start of comments
2979 --
2980 -- Procedure Name : creditline_total_remaining
2981 -- Description : Sum of all credit limit (contract line) for specfiic contract
2982 -- scs_code = 'CREDITLINE_CONTRACT' and substract from Funding total
2983 -- Business Rules :
2984 -- Parameters :IN: p_contract_id, OUT: amount
2985 -- Version : 1.0
2986 -- History :13-JAN-02 [email protected] -- Created
2987 --
2988 -- End of comments
2989 ------------------------------------------------------------------------------
2990 FUNCTION creditline_total_remaining(
2991 p_contract_id IN NUMBER
2992 ,p_contract_line_id IN NUMBER
2993 ) RETURN NUMBER
2994 IS
2995 l_amount NUMBER := 0;
2996 -- l_amount_funded NUMBER := 0;
2997 -- l_amount_limit NUMBER := 0;
2998 -- l_amount_remain NUMBER := 0;
2999
3000 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
3001 l_api_version NUMBER := 1.0;
3002 x_msg_count NUMBER;
3003 x_msg_data VARCHAR2(4000);
3004 l_init_msg_list VARCHAR2(10) := OKL_API.G_FALSE;
3005
3006 x_value NUMBER := 0;
3007
3008 BEGIN
3009
3010 /*
3011 --l_amount_funded := nvl(creditline_total_funded(p_contract_id),0);
3012 l_amount_limit := NVL(creditline_total_limit(p_contract_id),0);
3013
3014 -- l_amount_remain := OKL_PAY_INVOICES_DISB_PVT.credit_check
3015 l_amount_remain := OKL_BPD_CREDIT_CHECK_PVT.credit_check -- cklee 08/28/03
3016 (p_api_version => l_api_version
3017 ,p_init_msg_list => l_init_msg_list
3018 ,x_return_status => x_return_status
3019 ,x_msg_count => x_msg_count
3020 ,x_msg_data => x_msg_data
3021 ,p_creditline_id => p_contract_id
3022 ,p_credit_max => l_amount_limit);
3023
3024 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3025 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3026 l_amount_remain := 0;
3027 ELSIF (x_return_Status = OKL_API.G_RET_STS_ERROR) THEN
3028 --RAISE OKL_API.G_EXCEPTION_ERROR;
3029 l_amount_remain := 0;
3030 END IF;
3031
3032 l_amount := l_amount_remain;
3033
3034 */
3035
3036 --------------------------------------------------
3037 -- Credit limt Remaining check
3038 --------------------------------------------------
3039 OKL_EXECUTE_FORMULA_PUB.EXECUTE(
3040 p_api_version => l_api_version,
3041 p_init_msg_list => l_init_msg_list,
3042 x_return_status => x_return_status,
3043 x_msg_count => x_msg_count,
3044 x_msg_data => x_msg_data,
3045 p_formula_name => 'CREDIT_CHECK',
3046 p_contract_id => p_contract_id,
3047 x_value => x_value);
3048
3049 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3050 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3051 x_value := 0;
3052 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3053 --RAISE OKL_API.G_EXCEPTION_ERROR;
3054 x_value := 0;
3055 END IF;
3056
3057 l_amount := x_value;
3058
3059 RETURN l_amount;
3060 EXCEPTION
3061 WHEN OTHERS THEN
3062 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
3063 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
3064 p_msg_name => 'OKL_UNEXPECTED_ERROR',
3065 p_token1 => 'OKL_SQLCODE',
3066 p_token1_value => SQLCODE,
3067 p_token2 => 'OKL_SQLERRM',
3068 p_token2_value => SQLERRM);
3069 RETURN NULL;
3070
3071 END;
3072 ------------------------------------------------------------------------------
3073 -- Start of comments
3074 --
3075 -- Procedure Name : creditline_total_new_limit
3076 -- Description : Sum of all credit new limit (contract line) for specfiic contract
3077 -- scs_code = 'CREDITLINE_CONTRACT'
3078 -- Business Rules :
3079 -- Parameters :IN: p_contract_id, OUT: amount
3080 -- Version : 1.0
3081 -- History :13-JAN-02 [email protected] -- Created
3082 --
3083 -- End of comments
3084 ------------------------------------------------------------------------------
3085 FUNCTION creditline_total_new_limit(
3086 p_contract_id IN NUMBER
3087 --,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
3088 ,p_contract_line_id IN NUMBER
3089 ) RETURN NUMBER
3090 IS
3091 l_amount NUMBER := 0;
3092
3093 CURSOR C (p_contract_id NUMBER)
3094 IS
3095 SELECT NVL(SUM(A.amount),0)
3096 FROM OKL_K_LINES_FULL_V A
3097 WHERE A.dnz_chr_id = p_contract_id
3098 AND A.credit_nature = 'NEW'
3099 AND NVL(TRUNC(A.start_date),TRUNC(SYSDATE)) <= TRUNC(SYSDATE) -- fixed trunc issues
3100 ;
3101
3102 BEGIN
3103
3104 OPEN C (p_contract_id);
3105 FETCH C INTO l_amount;
3106 CLOSE C;
3107
3108 RETURN l_amount;
3109 EXCEPTION
3110 WHEN OTHERS THEN
3111 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
3112 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
3113 p_msg_name => 'OKL_UNEXPECTED_ERROR',
3114 p_token1 => 'OKL_SQLCODE',
3115 p_token1_value => SQLCODE,
3116 p_token2 => 'OKL_SQLERRM',
3117 p_token2_value => SQLERRM);
3118 RETURN NULL;
3119
3120 END;
3121 ------------------------------------------------------------------------------
3122 -- Start of comments
3123 --
3124 -- Procedure Name : creditline_total_addition
3125 -- Description : Sum of all credit addition (contract line) for specfiic contract
3126 -- scs_code = 'CREDITLINE_CONTRACT'
3127 -- Business Rules :
3128 -- Parameters :IN: p_contract_id, OUT: amount
3129 -- Version : 1.0
3130 -- History :13-JAN-02 [email protected] -- Created
3131 --
3132 -- End of comments
3133 ------------------------------------------------------------------------------
3134 FUNCTION creditline_total_addition(
3135 p_contract_id IN NUMBER
3136 --,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
3137 ,p_contract_line_id IN NUMBER
3138 ) RETURN NUMBER
3139 IS
3140 l_amount NUMBER := 0;
3141
3142 CURSOR C (p_contract_id NUMBER)
3143 IS
3144 SELECT NVL(SUM(A.amount),0)
3145 FROM OKL_K_LINES_FULL_V A
3146 WHERE A.dnz_chr_id = p_contract_id
3147 AND A.credit_nature = 'ADD'
3148 AND NVL(TRUNC(A.start_date),TRUNC(SYSDATE)) <= TRUNC(SYSDATE) -- fixed trunc issues
3149 ;
3150
3151 BEGIN
3152
3153 OPEN C (p_contract_id);
3154 FETCH C INTO l_amount;
3155 CLOSE C;
3156
3157 RETURN l_amount;
3158 EXCEPTION
3159 WHEN OTHERS THEN
3160 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
3161 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
3162 p_msg_name => 'OKL_UNEXPECTED_ERROR',
3163 p_token1 => 'OKL_SQLCODE',
3164 p_token1_value => SQLCODE,
3165 p_token2 => 'OKL_SQLERRM',
3166 p_token2_value => SQLERRM);
3167 RETURN NULL;
3168
3169 END;
3170 ------------------------------------------------------------------------------
3171 -- Start of comments
3172 --
3173 -- Procedure Name : creditline_total_reduction
3174 -- Description : Sum of all credit addition (contract line) for specfiic contract
3175 -- scs_code = 'CREDITLINE_CONTRACT'
3176 -- Business Rules :
3177 -- Parameters :IN: p_contract_id, OUT: amount
3178 -- Version : 1.0
3179 -- History :13-JAN-02 [email protected] -- Created
3180 --
3181 -- End of comments
3182 ------------------------------------------------------------------------------
3183 FUNCTION creditline_total_reduction(
3184 p_contract_id IN NUMBER
3185 --,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
3186 ,p_contract_line_id IN NUMBER
3187 ) RETURN NUMBER
3188 IS
3189 l_amount NUMBER := 0;
3190
3191 CURSOR C (p_contract_id NUMBER)
3192 IS
3193 SELECT NVL(SUM(A.amount),0)
3194 FROM OKL_K_LINES_FULL_V A
3195 WHERE A.dnz_chr_id = p_contract_id
3196 AND A.credit_nature = 'REDUCE'
3197 AND NVL(TRUNC(A.start_date),TRUNC(SYSDATE)) <= TRUNC(SYSDATE) -- fixed trunc issues
3198 ;
3199
3200 BEGIN
3201
3202 OPEN C (p_contract_id);
3203 FETCH C INTO l_amount;
3204 CLOSE C;
3205
3206 RETURN l_amount;
3207 EXCEPTION
3208 WHEN OTHERS THEN
3209 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
3210 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
3211 p_msg_name => 'OKL_UNEXPECTED_ERROR',
3212 p_token1 => 'OKL_SQLCODE',
3213 p_token1_value => SQLCODE,
3214 p_token2 => 'OKL_SQLERRM',
3215 p_token2_value => SQLERRM);
3216 RETURN NULL;
3217
3218 END;
3219
3220 /*FUNCTION line_capitalcost(
3221 p_chr_id IN NUMBER,
3222 p_line_id IN NUMBER,
3223 p_capred IN NUMBER,
3224 p_capred_per IN NUMBER,
3225 p_trd_amnt IN NUMBER) RETURN NUMBER IS
3226
3227 l_api_name CONSTANT VARCHAR2(60) := 'RETURN_LINE_CAP_AMNT_VALUE';
3228 l_api_version CONSTANT NUMBER := 1;
3229 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
3230 x_msg_count NUMBER;
3231 x_msg_data VARCHAR2(256);
3232
3233 l_capamnt_value NUMBER := 0;
3234 l_oec_value NUMBER := 0;
3235 l_oec NUMBER;
3236 l_tradeIn NUMBER;
3237 l_capred NUMBER;
3238 l_feecap NUMBER;
3239 l_servc NUMBER;
3240
3241
3242 BEGIN
3243
3244 IF ( ( p_chr_id IS NULL ) OR ( p_line_id IS NULL ) ) THEN
3245 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3246 END IF;
3247
3248 l_oec_value := line_oec( p_chr_id, p_line_id);
3249 IF ( l_oec_value IS NULL ) THEN
3250 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3251 END IF;
3252
3253 l_capred := p_capred;
3254 IF(( p_capred IS NULL ) OR ( p_capred = 0)) THEN
3255 IF (( p_capred_per IS NULL) OR ( p_capred_per = 0)) THEN
3256 l_capred := 0.0;
3257 ELSE
3258 l_capred := ( l_oec_value * p_capred_per ) / 100.00;
3259 END IF;
3260 END IF;
3261
3262 IF (p_trd_amnt IS NULL) THEN
3263 l_tradeIn := 0.0;
3264 ELSE
3265 l_tradeIn := p_trd_amnt;
3266 END IF;
3267
3268 l_capamnt_value := l_oec_value - l_capred - l_tradeIn;
3269
3270 RETURN l_capamnt_value;
3271
3272 EXCEPTION
3273 WHEN OTHERS THEN
3274 Okl_Api.SET_MESSAGE(
3275 p_app_name => G_APP_NAME,
3276 p_msg_name => G_UNEXPECTED_ERROR,
3277 p_token1 => G_SQLCODE_TOKEN,
3278 p_token1_value => SQLCODE,
3279 p_token2 => G_SQLERRM_TOKEN,
3280 p_token2_value => SQLERRM);
3281 RETURN NULL;
3282
3283
3284 END line_capitalcost;
3285
3286 */
3287
3288 ----------------------------------------------------------------------------------------------------
3289
3290 -- Start of Comments
3291 -- Created By : Shri Iyer
3292 -- Function Name : CONTRACT_DAYS_TO_ACCRUE
3293 -- Description : This function returns the number of days to accrue
3294 -- Dependencies : None
3295 -- Parameters : contract id, contract line id
3296 -- Version : 1.0
3297 -- End of Commnets
3298
3299 ----------------------------------------------------------------------------------------------------
3300
3301 FUNCTION CONTRACT_DAYS_TO_ACCRUE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3302
3303 l_days_to_accrue NUMBER;
3304 l_last_int_calc_date DATE;
3305 l_period_end_date DATE;
3306 l_period_start_date DATE;
3307 l_days_in_month VARCHAR2(100);
3308 l_contract_number VARCHAR2(2000);
3309 l_days_in_year VARCHAR2(100);
3310 l_advance_arrears VARCHAR2(1);
3311 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3312
3313 -- Fetch contract days in a month
3314 CURSOR days_in_month IS
3315 SELECT days_in_a_month_code
3316 FROM OKL_K_RATE_PARAMS
3317 WHERE khr_id = p_khr_id
3318 AND parameter_type_code = 'ACTUAL'
3319 AND effective_to_date IS NULL;
3320
3321 -- cursor to get the contract number
3322 CURSOR contract_num_csr IS
3323 SELECT contract_number
3324 FROM OKC_K_HEADERS_B
3325 WHERE id = p_khr_id;
3326
3327 -- Fetch contract days in a year
3328 CURSOR days_in_year IS
3329 SELECT days_in_a_year_code
3330 FROM OKL_K_RATE_PARAMS
3331 WHERE khr_id = p_khr_id
3332 AND parameter_type_code = 'ACTUAL'
3333 AND effective_to_date IS NULL;
3334
3335 CURSOR adv_arr_csr IS
3336 SELECT
3337 rulb2.RULE_INFORMATION10 arrears_yn
3338 FROM okc_k_lines_b cleb,
3339 okc_rule_groups_b rgpb,
3340 okc_rules_b rulb,
3341 okc_rules_b rulb2,
3342 okl_strm_type_b styb
3343 WHERE rgpb.chr_id IS NULL
3344 AND rgpb.dnz_chr_id = cleb.dnz_chr_id
3345 AND rgpb.cle_id = cleb.id
3346 AND cleb.dnz_chr_id = p_khr_id
3347 AND rgpb.rgd_code = 'LALEVL'
3348 AND rulb.rgp_id = rgpb.id
3349 AND rulb.rule_information_category = 'LASLH'
3350 AND TO_CHAR(styb.id) = rulb.object1_id1
3351 AND rulb2.object2_id1 = TO_CHAR(rulb.id)
3352 AND rulb2.rgp_id = rgpb.id
3353 AND rulb2.rule_information_category = 'LASLL';
3354
3355 BEGIN
3356 --Validate additional parameters availability
3357 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3358 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3359 LOOP
3360 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_last_int_calc_date' THEN
3361 l_last_int_calc_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3362 ELSIF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_period_end_date' THEN
3363 l_period_end_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3364 END IF;
3365 END LOOP;
3366 ELSE
3367 Okl_Api.Set_Message(p_app_name => g_app_name,
3368 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3369 RAISE Okl_Api.G_EXCEPTION_ERROR;
3370 END IF;
3371
3372 -- Validate parameters
3373 IF l_period_end_date IS NULL THEN
3374 Okl_Api.Set_Message(p_app_name => g_app_name,
3375 p_msg_name => 'OKL_AGN_FE_PERD_END_DATE');
3376 RAISE Okl_Api.G_EXCEPTION_ERROR;
3377 END IF;
3378
3379 IF l_last_int_calc_date IS NULL THEN
3380 Okl_Api.Set_Message(p_app_name => g_app_name,
3381 p_msg_name => 'OKL_AGN_FE_INT_CALC_DATE');
3382 RAISE Okl_Api.G_EXCEPTION_ERROR;
3383 END IF;
3384
3385 --Bug 5081876. Adding a day to last int calc date.
3386 --Bug 5162929. Undoing changes made for bug 5081876. One day is being added in accrual program
3387 --l_last_int_calc_date := l_last_int_calc_date + 1;
3388
3389 --Bug 5046184. ***Additional Code START***
3390 FOR y in contract_num_csr
3391 LOOP
3392 l_contract_number := y.contract_number;
3393 END LOOP;
3394
3395 IF l_contract_number IS NULL THEN
3396 Okl_Api.set_message(p_app_name => g_app_name,
3397 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3398 RAISE OKL_API.G_EXCEPTION_ERROR;
3399 END IF;
3400
3401 FOR x IN days_in_month
3402 LOOP
3403 l_days_in_month := x.days_in_a_month_code;
3404 END LOOP;
3405
3406 IF l_days_in_month IS NULL THEN
3407 Okl_Api.Set_Message(p_app_name => g_app_name,
3408 p_msg_name => 'OKL_AGN_FE_DAYSIN_MTH',
3409 p_token1 => 'CONTRACT_NUMBER',
3410 p_token1_value => l_contract_number);
3411 RAISE Okl_Api.G_EXCEPTION_ERROR;
3412 END IF;
3413
3414 FOR z IN days_in_year
3415 LOOP
3416 l_days_in_year := z.days_in_a_year_code;
3417 END LOOP;
3418
3419 IF l_days_in_year IS NULL THEN
3420 Okl_Api.Set_Message(p_app_name => g_app_name,
3421 p_msg_name => 'OKL_AGN_FE_DAYSIN_YR',
3422 p_token1 => 'CONTRACT_NUMBER',
3423 p_token1_value => l_contract_number);
3424 RAISE Okl_Api.G_EXCEPTION_ERROR;
3425 END IF;
3426
3427 FOR i in adv_arr_csr
3428 LOOP
3429 l_advance_arrears := NVL(i.arrears_yn, 'N');
3430 END LOOP;
3431
3432 l_days_to_accrue := okl_pricing_utils_pvt.get_day_count
3433 (l_days_in_month,
3434 l_days_in_year,
3435 l_last_int_calc_date,
3436 l_period_end_date,
3437 l_advance_arrears,
3438 l_return_status);
3439
3440 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3441 Okl_Api.set_message(p_app_name => g_app_name,
3442 p_msg_name => 'OKL_GET_DAY_CNT_ERROR');
3443
3444 RAISE OKL_API.G_EXCEPTION_ERROR;
3445 END IF;
3446 --Bug 5046184. ***Additional Code START***
3447
3448 --Bug 5046184. Commenting below calculation
3449 --l_days_to_accrue := l_period_end_date - l_last_int_calc_date;
3450
3451 RETURN l_days_to_accrue;
3452
3453 EXCEPTION
3454 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3455 RETURN NULL;
3456
3457 WHEN OTHERS THEN
3458 Okl_Api.SET_MESSAGE(
3459 p_app_name => G_APP_NAME,
3460 p_msg_name => G_UNEXPECTED_ERROR,
3461 p_token1 => G_SQLCODE_TOKEN,
3462 p_token1_value => SQLCODE,
3463 p_token2 => G_SQLERRM_TOKEN,
3464 p_token2_value => SQLERRM);
3465 RETURN NULL;
3466
3467 END CONTRACT_DAYS_TO_ACCRUE;
3468
3469 ----------------------------------------------------------------------------------------------------
3470
3471 -- Start of Comments
3472 -- Created By : Shri Iyer
3473 -- Function Name : CONTRACT_DAYS_IN_YEAR
3474 -- Description : This function returns the number of days in a year
3475 -- Dependencies : None
3476 -- Parameters : contract id, contract line id
3477 -- Version : 1.0
3478 -- End of Commnets
3479
3480 ----------------------------------------------------------------------------------------------------
3481
3482 FUNCTION CONTRACT_DAYS_IN_YEAR(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3483 l_days NUMBER;
3484 l_lookup_code VARCHAR2(2000);
3485 l_accrual_date DATE;
3486 l_year NUMBER;
3487 l_contract_number VARCHAR2(2000);
3488
3489 -- cursor to get the contract number
3490 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3491 SELECT contract_number
3492 FROM OKC_K_HEADERS_B
3493 WHERE id = p_ctr_id;
3494
3495 -- BUG 4730646. Changing cursor.
3496 -- CURSOR lookup_csr(p_ctr_id NUMBER) IS
3497 -- SELECT rule_information1
3498 -- FROM okc_rules_b okc
3499 -- WHERE okc.dnz_chr_id = p_ctr_id
3500 -- AND okc.rule_information_category = 'LAICLC';
3501
3502 -- Fetch contract days in a year
3503 CURSOR lookup_csr(p_ctr_id NUMBER) IS
3504 SELECT days_in_a_year_code
3505 FROM OKL_K_RATE_PARAMS
3506 WHERE khr_id = p_ctr_id
3507 AND parameter_type_code = 'ACTUAL'
3508 AND effective_to_date IS NULL;
3509
3510 BEGIN
3511 OPEN contract_num_csr(p_khr_id);
3512 FETCH contract_num_csr INTO l_contract_number;
3513 IF contract_num_csr%NOTFOUND THEN
3514 CLOSE contract_num_csr;
3515 Okl_Api.set_message(p_app_name => g_app_name,
3516 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3517 RAISE OKL_API.G_EXCEPTION_ERROR;
3518 END IF;
3519 CLOSE contract_num_csr;
3520
3521 OPEN lookup_csr(p_khr_id);
3522 FETCH lookup_csr INTO l_lookup_code;
3523 CLOSE lookup_csr;
3524
3525 IF l_lookup_code IS NULL THEN
3526 Okl_Api.Set_Message(p_app_name => g_app_name,
3527 p_msg_name => 'OKL_AGN_FE_DAYSIN_YR',
3528 p_token1 => 'CONTRACT_NUMBER',
3529 p_token1_value => l_contract_number);
3530 RAISE Okl_Api.G_EXCEPTION_ERROR;
3531 END IF;
3532
3533 IF l_lookup_code = 'ACTUAL' THEN
3534 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3535 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3536 LOOP
3537 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
3538 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3539 END IF;
3540 END LOOP;
3541 ELSE
3542 Okl_Api.Set_Message(p_app_name => g_app_name,
3543
3544
3545 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3546 RAISE Okl_Api.G_EXCEPTION_ERROR;
3547 END IF;
3548
3549 IF l_accrual_date IS NULL THEN
3550 Okl_Api.Set_Message(p_app_name => g_app_name,
3551 p_msg_name => 'OKL_AGN_FE_ACCRUAL_DATE');
3552 RAISE Okl_Api.G_EXCEPTION_ERROR;
3553 END IF;
3554
3555
3556 l_year := TO_NUMBER(TO_CHAR(l_accrual_date, 'RRRR'));
3557
3558 IF MOD(l_year,4) = 0 THEN
3559 l_days := 366;
3560 ELSE
3561 l_days := 365;
3562 END IF;
3563 ELSE
3564 l_days := TO_NUMBER(l_lookup_code);
3565 END IF;
3566
3567 RETURN l_days;
3568
3569 EXCEPTION
3570 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3571 RETURN NULL;
3572
3573 WHEN OTHERS THEN
3574 IF lookup_csr%ISOPEN THEN
3575 CLOSE lookup_csr;
3576 END IF;
3577 Okl_Api.SET_MESSAGE(
3578 p_app_name => G_APP_NAME,
3579 p_msg_name => G_UNEXPECTED_ERROR,
3580 p_token1 => G_SQLCODE_TOKEN,
3581 p_token1_value => SQLCODE,
3582 p_token2 => G_SQLERRM_TOKEN,
3583 p_token2_value => SQLERRM);
3584 RETURN NULL;
3585
3586 END CONTRACT_DAYS_IN_YEAR;
3587
3588 ----------------------------------------------------------------------------------------------------
3589
3590 -- Start of Comments
3591 -- Created By : Shri Iyer
3592 -- Function Name : CONTRACT_INTEREST_RATE
3593 -- Description : This function returns the rate of interest on the given date or closest to that date
3594 -- Dependencies : None
3595 -- Parameters : contract id, contract line id
3596 -- Version : 1.0
3597 -- End of Commnets
3598
3599 ----------------------------------------------------------------------------------------------------
3600
3601 FUNCTION CONTRACT_INTEREST_RATE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3602 l_accrual_date DATE;
3603 l_interest_rate NUMBER;
3604 l_adder_rate NUMBER;
3605 l_total_rate NUMBER;
3606 l_contract_number VARCHAR2(2000);
3607
3608 -- cursor to get the contract number
3609 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
3610 SELECT contract_number
3611 FROM OKC_K_HEADERS_B
3612 WHERE id = p_ctr_id;
3613
3614
3615 -- Bug 4737551. Commenting below cursor and writing new select statement. SGIYER.
3616 -- CURSOR interest_rate_csr(p_ctr_id NUMBER, p_accrual_date DATE) IS
3617 -- SELECT idv.value
3618 -- FROM OKC_RULES_B rule,
3619 -- OKL_INDEX_VALUES idv,
3620 -- OKL_INDICES idx
3621 -- WHERE rule.rule_information_category = 'LAIVAR'
3622 -- AND rule.dnz_chr_id = p_ctr_id
3623 -- AND TO_NUMBER(rule.rule_information2) = idx.id
3624 -- AND idx.ID = idv.idx_id
3625 -- AND idv.datetime_valid = (SELECT MAX(idv.datetime_valid)
3626 -- FROM OKL_INDEX_VALUES idv ,
3627 -- OKL_INDICES idx,
3628 -- OKC_RULES_B rules
3629 -- WHERE rules.rule_information_category = 'LAIVAR'
3630 -- AND rules.dnz_chr_id = p_ctr_id
3631 -- AND rules.rule_information2 = idx.id
3632 -- AND idx.id = idv.idx_id
3633 -- AND idv.datetime_valid <= p_accrual_date);
3634
3635 -- cursor to get interest rate
3636 CURSOR interest_rate_csr(p_ctr_id NUMBER, p_accrual_date DATE) IS
3637 SELECT idv.value
3638 FROM OKL_K_RATE_PARAMS okl,
3639 OKL_INDEX_VALUES idv,
3640 OKL_INDICES idx
3641 WHERE okl.khr_id = p_ctr_id
3642 AND okl.parameter_type_code = 'ACTUAL'
3643 AND okl.effective_to_date IS NULL
3644 AND okl.interest_index_id = idx.id
3645 AND idx.ID = idv.idx_id
3646 AND idv.datetime_valid = (SELECT MAX(idv.datetime_valid)
3647 FROM OKL_INDEX_VALUES idv ,
3648 OKL_INDICES idx,
3649 OKL_K_RATE_PARAMS rate
3650 WHERE rate.khr_id = p_ctr_id
3651 AND rate.parameter_type_code = 'ACTUAL'
3652 AND rate.effective_to_date IS NULL
3653 AND rate.interest_index_id = idx.id
3654 AND idx.id = idv.idx_id
3655 AND idv.datetime_valid <= p_accrual_date);
3656
3657 -- Bug# 2920174
3658 -- cursor to get adder rate
3659 -- Bug 4737551. Commenting below cursor and writing new select statement. SGIYER.
3660 -- CURSOR adder_rate_csr(p_ctr_id NUMBER) IS
3661 -- SELECT TO_NUMBER(rule_information4)
3662 -- FROM OKC_RULES_B
3663 -- WHERE rule_information_category = 'LAIVAR'
3664 -- AND dnz_chr_id = p_ctr_id;
3665
3666 -- cursor to get adder rate
3667 -- Bug 4737551.
3668 CURSOR adder_rate_csr(p_ctr_id NUMBER) IS
3669 SELECT adder_rate
3670 FROM OKL_K_RATE_PARAMS
3671 WHERE khr_id = p_ctr_id
3672 AND parameter_type_code = 'ACTUAL'
3673 AND effective_to_date IS NULL;
3674
3675 BEGIN
3676
3677 OPEN contract_num_csr(p_khr_id);
3678 FETCH contract_num_csr INTO l_contract_number;
3679 IF contract_num_csr%NOTFOUND THEN
3680 CLOSE contract_num_csr;
3681 Okl_Api.set_message(p_app_name => g_app_name,
3682 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3683 RAISE OKL_API.G_EXCEPTION_ERROR;
3684 END IF;
3685 CLOSE contract_num_csr;
3686
3687 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3688 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3689 LOOP
3690 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
3691 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3692 END IF;
3693 END LOOP;
3694 ELSE
3695 Okl_Api.Set_Message(p_app_name => g_app_name,
3696 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3697 RAISE Okl_Api.G_EXCEPTION_ERROR;
3698 END IF;
3699
3700 IF l_accrual_date IS NULL THEN
3701 Okl_Api.Set_Message(p_app_name => g_app_name,
3702 p_msg_name => 'OKL_AGN_FE_ACCRUAL_DATE');
3703 RAISE Okl_Api.G_EXCEPTION_ERROR;
3704 END IF;
3705
3706 OPEN interest_rate_csr(p_khr_id, l_accrual_date);
3707 FETCH interest_rate_csr INTO l_interest_rate;
3708 IF interest_rate_csr %NOTFOUND THEN
3709 Okl_Api.Set_Message(p_app_name => g_app_name,
3710 p_msg_name => 'OKL_AGN_FE_INT_RATE',
3711 p_token1 => 'CONTRACT_NUMBER',
3712 p_token1_value => l_contract_number);
3713 CLOSE interest_rate_csr;
3714 RAISE Okl_Api.G_EXCEPTION_ERROR;
3715 END IF;
3716 CLOSE interest_rate_csr;
3717
3718 OPEN adder_rate_csr(p_khr_id);
3719 FETCH adder_rate_csr INTO l_adder_rate;
3720 IF adder_rate_csr %NOTFOUND THEN
3721 Okl_Api.Set_Message(p_app_name => g_app_name,
3722 p_msg_name => 'OKL_AGN_FE_ADDER_RATE',
3723 p_token1 => 'CONTRACT_NUMBER',
3724 p_token1_value => l_contract_number);
3725 CLOSE interest_rate_csr;
3726 RAISE Okl_Api.G_EXCEPTION_ERROR;
3727 END IF;
3728 CLOSE adder_rate_csr;
3729
3730 -- Bug# 2920174
3731 -- get adder rate, add to interest rate and return total.
3732 l_total_rate := (l_interest_rate + l_adder_rate)/100;
3733
3734 RETURN l_total_rate;
3735
3736 EXCEPTION
3737 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3738 RETURN NULL;
3739
3740 WHEN OTHERS THEN
3741 IF interest_rate_csr%ISOPEN THEN
3742 CLOSE interest_rate_csr;
3743 END IF;
3744
3745 IF adder_rate_csr%ISOPEN THEN
3746 CLOSE adder_rate_csr;
3747 END IF;
3748
3749 IF contract_num_csr%ISOPEN THEN
3750 CLOSE contract_num_csr;
3751 END IF;
3752
3753 Okl_Api.SET_MESSAGE(
3754 p_app_name => G_APP_NAME,
3755 p_msg_name => G_UNEXPECTED_ERROR,
3756 p_token1 => G_SQLCODE_TOKEN,
3757 p_token1_value => SQLCODE,
3758 p_token2 => G_SQLERRM_TOKEN,
3759 p_token2_value => SQLERRM);
3760 RETURN NULL;
3761
3762 END CONTRACT_INTEREST_RATE;
3763
3764 ----------------------------------------------------------------------------------------------------
3765
3766 -- Start of Comments
3767 -- Created By : Shri Iyer
3768 -- Function Name : CONTRACT_PRINCIPAL_BALANCE
3769 -- Description : This function returns the principal balance for a contract as of that date
3770 -- Dependencies : None
3771 -- Parameters : contract id, contract line id
3772 -- Version : 1.0
3773 -- End of Commnets
3774
3775 ----------------------------------------------------------------------------------------------------
3776
3777 FUNCTION CONTRACT_PRINCIPAL_BALANCE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3778
3779 l_period_start_date DATE;
3780 l_period_end_date DATE;
3781 l_principal_bal NUMBER;
3782 l_contract_number VARCHAR2(2000);
3783 l_last_int_calc_date DATE;
3784 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3785 l_kle_id NUMBER;
3786 -- Bug 5055714.
3787 -- l_prin_bal_id NUMBER;
3788
3789 -- cursor to get the contract number
3790 CURSOR contract_num_csr IS
3791 SELECT contract_number
3792 FROM OKC_K_HEADERS_B
3793 WHERE id = p_khr_id;
3794
3795 -- Bug 5055714. Commenting below derivation. Using utility provided instead.
3796 -- CURSOR principal_bal_csr(p_ctr_id NUMBER, p_start_date DATE, p_end_date DATE, p_prin_bal_id NUMBER) IS
3797 -- SELECT SUM(ste.amount)
3798 -- FROM OKL_STRM_TYPE_B sty,
3799 -- OKL_STREAMS stm,
3800 -- OKL_STRM_ELEMENTS ste
3801 -- WHERE stm.khr_id = p_ctr_id
3802 -- AND stm.active_yn = 'Y'
3803 -- AND stm.say_code = 'CURR'
3804 -- AND sty.id = p_prin_bal_id
3805 -- AND stm.sty_id = sty.id
3806 -- AND ste.stm_id = stm.id
3807 -- AND ste.stream_element_date BETWEEN p_start_date AND p_end_date;
3808
3809 -- cursor for retrieveing earlier principal balance amount if principal balance
3810 -- for given period is not found
3811 -- CURSOR prior_prin_bal_csr(p_ctr_id NUMBER, p_start_date DATE, p_prin_bal_id NUMBER) IS
3812 -- SELECT SUM(ste.amount)
3813 -- FROM OKL_STRM_TYPE_B sty,
3814 -- OKL_STREAMS stm,
3815 -- OKL_STRM_ELEMENTS ste
3816 -- WHERE stm.khr_id = p_ctr_id
3817 -- AND stm.active_yn = 'Y'
3818 -- AND stm.say_code = 'CURR'
3819 -- AND sty.id = p_prin_bal_id
3820 -- AND stm.sty_id = sty.id
3821 -- AND ste.stm_id = stm.id
3822 -- AND ste.stream_element_date = (SELECT MAX(stream_element_date)
3823 -- FROM OKL_STRM_TYPE_B sty,
3824 -- OKL_STREAMS stm,
3825 -- OKL_STRM_ELEMENTS ste
3826 -- WHERE stm.khr_id = p_ctr_id
3827 -- AND stm.active_yn = 'Y'
3828 -- AND stm.say_code = 'CURR'
3829 -- AND sty.id = p_prin_bal_id
3830 -- AND stm.sty_id = sty.id
3831 -- AND ste.stm_id = stm.id
3832 -- AND stream_element_date < p_start_date);
3833
3834 BEGIN
3835
3836 FOR i IN contract_num_csr
3837 LOOP
3838 l_contract_number := i.contract_number;
3839 END LOOP;
3840
3841 IF l_contract_number IS NULL THEN
3842 Okl_Api.set_message(p_app_name => g_app_name,
3843 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
3844 RAISE OKL_API.G_EXCEPTION_ERROR;
3845 END IF;
3846
3847 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
3848 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
3849 LOOP
3850 -- Bug 5055714. Commenting below. Need Last int calc date
3851 -- IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_period_start_date' THEN
3852 -- l_period_start_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3853 -- ELSIF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_period_end_date' THEN
3854 -- l_period_end_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3855 -- END IF;
3856 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_last_int_calc_date' THEN
3857 l_last_int_calc_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
3858 END IF;
3859 END LOOP;
3860 ELSE
3861 Okl_Api.Set_Message(p_app_name => g_app_name,
3862 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
3863 RAISE Okl_Api.G_EXCEPTION_ERROR;
3864 END IF;
3865
3866 IF l_last_int_calc_date IS NULL THEN
3867 Okl_Api.Set_Message(p_app_name => g_app_name,
3868 p_msg_name => 'OKL_AGN_FE_INT_CALC_DATE');
3869 RAISE Okl_Api.G_EXCEPTION_ERROR;
3870 END IF;
3871
3872 -- Bug 5055714.No validation needed.
3873 -- IF l_period_end_date IS NULL THEN
3874 -- Okl_Api.Set_Message(p_app_name => g_app_name,
3875 -- p_msg_name => 'OKL_AGN_FE_PERD_END_DATE');
3876 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3877 -- END IF;
3878 --
3879 -- IF l_period_start_date IS NULL THEN
3880 -- Okl_Api.Set_Message(p_app_name => g_app_name,
3881 -- p_msg_name => 'OKL_AGN_FE_PERD_START_DATE');
3882 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3883 -- END IF;
3884
3885 -- SGIYER
3886 -- UDS Impact
3887 -- Bug 5055714.
3888 -- OKL_STREAMS_UTIL.get_dependent_stream_type(
3889 -- p_khr_id => p_khr_id,
3890 -- p_primary_sty_purpose => 'RENT',
3891 -- p_dependent_sty_purpose => 'PRINCIPAL_BALANCE',
3892 -- x_return_status => l_return_status,
3893 -- x_dependent_sty_id => l_prin_bal_id);
3894 --
3895 -- IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3896 -- Okl_Api.set_message(p_app_name => g_app_name,
3897 -- p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
3898 -- p_token1 => 'STREAM_NAME',
3899 -- p_token1_value => 'PRINCIPAL BALANCE');
3900 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3901 -- END IF;
3902
3903 -- Bug 5055714. Commenting below derivation. Using utility provided instead.
3904 -- OPEN principal_bal_csr (p_khr_id, l_period_start_date, l_period_end_date, l_prin_bal_id);
3905 -- FETCH principal_bal_csr INTO l_principal_bal;
3906 -- CLOSE principal_bal_csr;
3907
3908 --Added by bkatraga for bug 13447258
3909 l_kle_id := p_kle_id;
3910 IF(l_kle_id = OKL_API.G_MISS_NUM) THEN
3911 l_kle_id := NULL;
3912 END IF;
3913 --end bkatraga
3914
3915 -- Bug 5060624. Passing l_kle_id which is null and not okl_api.g_miss_num
3916 l_principal_bal := OKL_VARIABLE_INT_UTIL_PVT.get_principal_bal(
3917 x_return_status => l_return_status,
3918 p_khr_id => p_khr_id,
3919 p_kle_id => l_kle_id,
3920 p_date => l_last_int_calc_date);
3921
3922 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3923 Okl_Api.Set_Message(p_app_name => g_app_name,
3924 p_msg_name => 'OKL_AGN_VAR_PB_ERROR');
3925 END IF;
3926
3927 IF l_principal_bal IS NULL THEN
3928 Okl_Api.Set_Message(p_app_name => g_app_name,
3929 p_msg_name => 'OKL_AGN_FE_PRIN_BAL',
3930 p_token1 => 'CONTRACT_NUMBER',
3931 p_token1_value => l_contract_number);
3932 RAISE Okl_Api.G_EXCEPTION_ERROR;
3933 END IF;
3934
3935 -- Bug#2920344. Commenting error message.
3936 -- If principal balance for period range not found then retrieve
3937 -- principal balance for available prior period. MMITTAL.
3938 --Okl_Api.Set_Message(p_app_name => g_app_name,
3939 -- p_msg_name => 'OKL_AGN_FE_PRIN_BAL',
3940 -- p_token1 => 'CONTRACT_NUMBER',
3941 -- p_token1_value => l_contract_number);
3942 --CLOSE principal_bal_csr;
3943 --RAISE Okl_Api.G_EXCEPTION_ERROR;
3944
3945 -- If principal balance not found for date range, get prior principal balance.
3946 -- As per MMITTAL.
3947 -- OPEN prior_prin_bal_csr(p_khr_id, l_period_start_date,l_prin_bal_id);
3948 -- FETCH prior_prin_bal_csr INTO l_principal_bal;
3949 -- CLOSE prior_prin_bal_csr;
3950 -- IF l_principal_bal IS NULL THEN
3951 -- Okl_Api.Set_Message(p_app_name => g_app_name,
3952 -- p_msg_name => 'OKL_AGN_FE_PRIN_BAL',
3953 -- p_token1 => 'CONTRACT_NUMBER',
3954 -- p_token1_value => l_contract_number);
3955 -- RAISE Okl_Api.G_EXCEPTION_ERROR;
3956 -- END IF;
3957 -- END IF;
3958
3959 RETURN l_principal_bal;
3960
3961 EXCEPTION
3962 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3963 RETURN NULL;
3964
3965 WHEN OTHERS THEN
3966 Okl_Api.SET_MESSAGE(
3967 p_app_name => G_APP_NAME,
3968 p_msg_name => G_UNEXPECTED_ERROR,
3969 p_token1 => G_SQLCODE_TOKEN,
3970 p_token1_value => SQLCODE,
3971 p_token2 => G_SQLERRM_TOKEN,
3972 p_token2_value => SQLERRM);
3973 RETURN NULL;
3974 END CONTRACT_PRINCIPAL_BALANCE;
3975
3976 ----------------------------------------------------------------------------------------------------
3977
3978 -- Start of Comments
3979 -- Created By : Shri Iyer
3980 -- Function Name : CONTRACT_UNBILLED_RECEIVABLES
3981 -- Description : This function returns the unbilled receivables balance for a contract as of a given date
3982 -- Dependencies : None
3983 -- Parameters : contract id, contract line id
3984 -- Version : 1.0
3985 -- End of Commnets
3986
3987 ----------------------------------------------------------------------------------------------------
3988
3989 FUNCTION CONTRACT_UNBILLED_RECEIVABLES(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
3990 l_rent_strm_bal NUMBER := 0;
3991 l_contract_number VARCHAR2(2000);
3992 l_provision_date DATE;
3993 l_sty_id NUMBER;
3994 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3995
3996 -- cursor to get the contract number
3997 -- 02-Oct-2003. SGIYER. Added condition ste.stream_element_date >= p_date
3998 -- on product management's instructions.
3999 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
4000 SELECT contract_number
4001 FROM OKL_K_HEADERS_FULL_V
4002 WHERE id = p_ctr_id;
4003
4004 -- SGIYER
4005 -- modifying cursor for user defind streams project
4006 CURSOR get_unb_rec_csr(p_ctr_id NUMBER, p_date DATE, p_sty_id NUMBER) IS
4007 SELECT SUM(ste.amount)
4008 FROM OKL_STREAMS stm,
4009 OKL_STRM_ELEMENTS ste,
4010 OKL_STRM_TYPE_B sty
4011 WHERE stm.khr_id = p_ctr_id
4012 AND stm.sty_id = sty.id
4013 AND sty.id = p_sty_id
4014 AND stm.active_yn = 'Y'
4015 AND stm.say_code ='CURR'
4016 AND ste.stm_id = stm.id
4017 AND ste.stream_element_date >= p_date
4018 AND ste.date_billed IS NULL;
4019
4020 BEGIN
4021 OPEN contract_num_csr(p_khr_id);
4022 FETCH contract_num_csr INTO l_contract_number;
4023 CLOSE contract_num_csr;
4024
4025 IF l_contract_number IS NULL THEN
4026 Okl_Api.set_message(p_app_name => g_app_name,
4027 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
4028 RAISE OKL_API.G_EXCEPTION_ERROR;
4029 END IF;
4030
4031 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4032 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4033 LOOP
4034 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_provision_date' THEN
4035 l_provision_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
4036 END IF;
4037 END LOOP;
4038 ELSE
4039 Okl_Api.Set_Message(p_app_name => g_app_name,
4040 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
4041 RAISE Okl_Api.G_EXCEPTION_ERROR;
4042 END IF;
4043
4044 IF l_provision_date IS NULL THEN
4045 Okl_Api.Set_Message(p_app_name => g_app_name,
4046 p_msg_name => 'OKL_GLP_PROV_DATE_ERROR');
4047 RAISE Okl_Api.G_EXCEPTION_ERROR;
4048 END IF;
4049
4050 -- SGIYER
4051 -- UDS Impact
4052 OKL_STREAMS_UTIL.get_primary_stream_type(
4053 p_khr_id => p_khr_id,
4054 p_primary_sty_purpose => 'RENT',
4055 x_return_status => l_return_status,
4056 x_primary_sty_id => l_sty_id);
4057
4058 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
4059 Okl_Api.set_message(p_app_name => g_app_name,
4060 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
4061 p_token1 => 'STREAM_NAME',
4062 p_token1_value => 'RENT');
4063 RAISE Okl_Api.G_EXCEPTION_ERROR;
4064 END IF;
4065
4066 OPEN get_unb_rec_csr(p_khr_id, l_provision_date, l_sty_id);
4067 FETCH get_unb_rec_csr INTO l_rent_strm_bal;
4068 CLOSE get_unb_rec_csr;
4069
4070 -- Bug 2969989. Return zero explicitly if nothing found.
4071 IF l_rent_strm_bal IS NULL THEN
4072 l_rent_strm_bal := 0;
4073 END IF;
4074 RETURN l_rent_strm_bal;
4075
4076 EXCEPTION
4077 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4078 RETURN NULL;
4079
4080 WHEN OTHERS THEN
4081 IF get_unb_rec_csr%ISOPEN THEN
4082 CLOSE get_unb_rec_csr;
4083 END IF;
4084 IF contract_num_csr%ISOPEN THEN
4085 CLOSE contract_num_csr;
4086 END IF;
4087 Okl_Api.SET_MESSAGE(
4088 p_app_name => G_APP_NAME,
4089 p_msg_name => G_UNEXPECTED_ERROR,
4090 p_token1 => G_SQLCODE_TOKEN,
4091 p_token1_value => SQLCODE,
4092 p_token2 => G_SQLERRM_TOKEN,
4093 p_token2_value => SQLERRM);
4094 RETURN NULL;
4095 END CONTRACT_UNBILLED_RECEIVABLES;
4096
4097 ----------------------------------------------------------------------------------------------------
4098
4099 -- Start of Comments
4100 -- Created By : Shri Iyer
4101 -- Function Name : CONTRACT_UNEARNED_REVENUE
4102 -- Description : This function returns the unearned income for a contract as of a given date
4103 -- Dependencies : None
4104 -- Parameters : contract id, contract line id
4105 -- Version : 1.0
4106 -- End of Commnets
4107
4108 ----------------------------------------------------------------------------------------------------
4109
4110 FUNCTION CONTRACT_UNEARNED_REVENUE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
4111 l_income_strm_bal NUMBER := 0;
4112 l_contract_number VARCHAR2(2000);
4113 l_provision_date DATE;
4114 l_rent_sty_id NUMBER;
4115 l_lease_inc_sty_id NUMBER;
4116 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4117
4118 -- cursor to get the contract number
4119 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
4120 SELECT contract_number
4121 FROM OKL_K_HEADERS_FULL_V
4122 WHERE id = p_ctr_id;
4123
4124 -- changing stream type name from INCOME to PRE TAX INCOME as suggested by PM. BUG# 2671223
4125 -- correcting name. Its hould be PRE-TAX INCOME (with hyphen)
4126 -- Bug 2969989. Pre-Tax amount is negative by default. So taking absolute value.
4127 -- Bug 3126427. Removing absolute function.
4128 -- 02-Oct-2003. SGIYER. Added condition ste.stream_element_date >= p_date
4129 -- on product management's instructions.
4130 -- SGIYER. User defined streams project changes.09/22/04
4131 CURSOR get_unearn_rev_csr (p_ctr_id NUMBER, p_date DATE, p_rent_sty_id NUMBER, p_lease_inc_sty_id NUMBER) IS
4132 SELECT SUM(ste.amount)
4133 FROM OKL_STREAMS stm,
4134 OKL_STRM_ELEMENTS ste,
4135 OKL_STRM_TYPE_B sty
4136 WHERE stm.khr_id = p_ctr_id
4137 AND stm.sty_id = sty.id
4138 AND sty.id = p_lease_inc_sty_id
4139 AND stm.active_yn = 'Y'
4140 AND stm.say_code = 'CURR'
4141 AND ste.stm_id = stm.id
4142 AND ste.stream_element_date >=
4143 (SELECT TRUNC(MIN(ste.stream_element_date),'MM')
4144 FROM OKL_STREAMS stm,
4145 OKL_STRM_ELEMENTS ste,
4146 OKL_STRM_TYPE_B sty
4147 WHERE stm.khr_id = p_ctr_id
4148 AND stm.sty_id = sty.id
4149 AND sty.id = l_rent_sty_id
4150 AND stm.active_yn = 'Y'
4151 AND ste.stm_id = stm.id
4152 AND ste.stream_element_date >= p_date
4153 AND ste.date_billed IS NULL)
4154 AND ste.stream_element_date <=
4155 (SELECT LAST_DAY(MAX(ste.stream_element_date))
4156 FROM OKL_STREAMS stm,
4157 OKL_STRM_ELEMENTS ste,
4158 OKL_STRM_TYPE_B sty
4159 WHERE stm.khr_id = p_ctr_id
4160 AND stm.sty_id = sty.id
4161 AND sty.id = l_rent_sty_id
4162 AND stm.active_yn = 'Y'
4163 AND ste.stm_id = stm.id
4164 AND ste.stream_element_date >= p_date
4165 AND ste.date_billed IS NULL);
4166
4167 --Bug# 15992711 , Start
4168 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
4169 CURSOR get_unearn_rev_nr_csr (p_ctr_id NUMBER, p_date DATE, p_rent_sty_id NUMBER, p_lease_inc_sty_id NUMBER, p_line_type VARCHAR2) IS
4170 SELECT SUM(ste.amount)
4171 FROM OKL_STREAMS stm,
4172 OKL_STRM_ELEMENTS ste,
4173 OKL_STRM_TYPE_B sty,
4174 okc_k_lines_b cle,
4175 okl_k_lines kle
4176 WHERE stm.khr_id = p_ctr_id
4177 AND stm.sty_id = sty.id
4178 AND sty.id = p_lease_inc_sty_id
4179 AND stm.active_yn = 'Y'
4180 AND stm.say_code = 'CURR'
4181 AND ste.stm_id = stm.id
4182 AND ste.stream_element_date >=
4183 (SELECT TRUNC(MIN(ste.stream_element_date),'MM')
4184 FROM OKL_STREAMS stm,
4185 OKL_STRM_ELEMENTS ste,
4186 OKL_STRM_TYPE_B sty,
4187 okc_k_lines_b cle,
4188 okl_k_lines kle
4189 WHERE stm.khr_id = p_ctr_id
4190 AND stm.sty_id = sty.id
4191 AND sty.id = l_rent_sty_id
4192 AND stm.active_yn = 'Y'
4193 AND ste.stm_id = stm.id
4194 AND ste.stream_element_date >= p_date
4195 AND ste.date_billed IS NULL
4196 AND cle.chr_id = stm.khr_id
4197 AND cle.dnz_chr_id = stm.khr_id
4198 AND cle.id = kle.id
4199 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y')
4200 )
4201 AND ste.stream_element_date <=
4202 (SELECT LAST_DAY(MAX(ste.stream_element_date))
4203 FROM OKL_STREAMS stm,
4204 OKL_STRM_ELEMENTS ste,
4205 OKL_STRM_TYPE_B sty,
4206 okc_k_lines_b cle,
4207 okl_k_lines kle
4208 WHERE stm.khr_id = p_ctr_id
4209 AND stm.sty_id = sty.id
4210 AND sty.id = l_rent_sty_id
4211 AND stm.active_yn = 'Y'
4212 AND ste.stm_id = stm.id
4213 AND ste.stream_element_date >= p_date
4214 AND ste.date_billed IS NULL
4215 AND cle.chr_id = stm.khr_id
4216 AND cle.dnz_chr_id = stm.khr_id
4217 AND cle.id = kle.id
4218 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y')
4219 )
4220 AND cle.chr_id = stm.khr_id
4221 AND cle.dnz_chr_id = stm.khr_id
4222 AND cle.id = kle.id
4223 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
4224
4225 l_line_type VARCHAR2(30) := 'X';
4226 --Bug# 15992711 , End
4227
4228
4229 BEGIN
4230 OPEN contract_num_csr(p_khr_id);
4231 FETCH contract_num_csr INTO l_contract_number;
4232 CLOSE contract_num_csr;
4233 IF l_contract_number IS NULL THEN
4234 Okl_Api.set_message(p_app_name => g_app_name,
4235 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
4236 RAISE OKL_API.G_EXCEPTION_ERROR;
4237 END IF;
4238
4239 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4240 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4241 LOOP
4242 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_provision_date' THEN
4243 l_provision_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
4244 END IF;
4245
4246 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
4247 -- If set then based on its value set l_line_type
4248
4249 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
4250 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
4251 l_line_type := 'NEW'; --New
4252 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
4253 l_line_type := 'RELEASE'; --Release
4254 END IF;
4255 END IF;
4256 --Bug# 15992711 , End
4257 END LOOP;
4258 ELSE
4259 Okl_Api.Set_Message(p_app_name => g_app_name,
4260 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
4261 RAISE Okl_Api.G_EXCEPTION_ERROR;
4262 END IF;
4263
4264 IF l_provision_date IS NULL THEN
4265 Okl_Api.Set_Message(p_app_name => g_app_name,
4266 p_msg_name => 'OKL_GLP_PROV_DATE_ERROR');
4267 RAISE Okl_Api.G_EXCEPTION_ERROR;
4268 END IF;
4269
4270 -- SGIYER
4271 -- UDS Impact
4272 OKL_STREAMS_UTIL.get_primary_stream_type(
4273 p_khr_id => p_khr_id,
4274 p_primary_sty_purpose => 'RENT',
4275 x_return_status => l_return_status,
4276 x_primary_sty_id => l_rent_sty_id);
4277 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
4278 Okl_Api.set_message(p_app_name => g_app_name,
4279 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
4280 p_token1 => 'STREAM_NAME',
4281 p_token1_value => 'RENT');
4282 RAISE Okl_Api.G_EXCEPTION_ERROR;
4283 END IF;
4284
4285 -- SGIYER
4286 -- UDS Impact
4287 OKL_STREAMS_UTIL.get_dependent_stream_type(
4288 p_khr_id => p_khr_id,
4289 p_primary_sty_purpose => 'RENT',
4290 p_dependent_sty_purpose => 'LEASE_INCOME',
4291 x_return_status => l_return_status,
4292 x_dependent_sty_id => l_lease_inc_sty_id);
4293 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4294 -- store SQL error message on message stack for caller and entry in log file
4295 Okl_Api.set_message(p_app_name => g_app_name,
4296 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
4297 p_token1 => 'STREAM_NAME',
4298 p_token1_value => 'LEASE INCOME');
4299 RAISE Okl_Api.G_EXCEPTION_ERROR;
4300 END IF;
4301
4302 --Bug# 15992711 , Start
4303 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
4304 -- get_unearn_rev_nr_csr cursor in order to consider either only new
4305 -- assets or only re-leased assets, else no change in the standard behavior
4306
4307 IF l_line_type IN ('NEW','RELEASE') THEN
4308
4309 OPEN get_unearn_rev_nr_csr (p_khr_id, l_provision_date, l_rent_sty_id, l_lease_inc_sty_id, l_line_type);
4310 FETCH get_unearn_rev_nr_csr INTO l_income_strm_bal;
4311 CLOSE get_unearn_rev_nr_csr;
4312
4313 ELSE
4314 --Bug# 15992711 , End
4315
4316 OPEN get_unearn_rev_csr (p_khr_id, l_provision_date, l_rent_sty_id, l_lease_inc_sty_id);
4317 FETCH get_unearn_rev_csr INTO l_income_strm_bal;
4318 CLOSE get_unearn_rev_csr;
4319
4320 --Bug# 15992711 , Start
4321 END IF;
4322 --Bug# 15992711 , End
4323
4324 -- Bug 2969989. Return zero explicitly if nothing found.
4325 IF l_income_strm_bal IS NULL THEN
4326 l_income_strm_bal := 0;
4327 END IF;
4328
4329 RETURN l_income_strm_bal;
4330
4331 EXCEPTION
4332 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4333 RETURN NULL;
4334
4335 WHEN OTHERS THEN
4336 IF get_unearn_rev_csr%ISOPEN THEN
4337 CLOSE get_unearn_rev_csr;
4338 END IF;
4339 IF contract_num_csr%ISOPEN THEN
4340 CLOSE contract_num_csr;
4341 END IF;
4342 Okl_Api.SET_MESSAGE(
4343 p_app_name => G_APP_NAME,
4344 p_msg_name => G_UNEXPECTED_ERROR,
4345 p_token1 => G_SQLCODE_TOKEN,
4346 p_token1_value => SQLCODE,
4347 p_token2 => G_SQLERRM_TOKEN,
4348 p_token2_value => SQLERRM);
4349 RETURN NULL;
4350 END CONTRACT_UNEARNED_REVENUE;
4351
4352 ----------------------------------------------------------------------------------------------------
4353
4354 -- Start of Comments
4355 -- Created By : Shri Iyer
4356 -- Function Name : CONTRACT_UNGUARANTEED_RESIDUAL
4357 -- Description : This function returns the unguaranteed residual for a contract
4358 -- Dependencies : None
4359 -- Parameters : contract id, contract line id
4360 -- Version : 1.0
4361 -- End of Commnets
4362
4363 ----------------------------------------------------------------------------------------------------
4364
4365 FUNCTION CONTRACT_UNGUARANTEED_RESIDUAL(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
4366 l_unguaranteed_residual NUMBER := 0;
4367 l_contract_number VARCHAR2(2000);
4368
4369 -- cursor to get the contract number
4370 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
4371 SELECT contract_number
4372 FROM OKL_K_HEADERS_FULL_V
4373 WHERE id = p_ctr_id;
4374
4375 CURSOR get_ung_res_csr(p_ctr_id NUMBER) IS
4376 SELECT SUM(NVL(RESIDUAL_VALUE,0)) - SUM(NVL(RESIDUAL_GRNTY_AMOUNT, 0))
4377 FROM OKL_K_LINES_FULL_V
4378 WHERE DNZ_CHR_ID = p_ctr_id;
4379
4380 BEGIN
4381 OPEN contract_num_csr(p_khr_id);
4382 FETCH contract_num_csr INTO l_contract_number;
4383 IF contract_num_csr%NOTFOUND THEN
4384 CLOSE contract_num_csr;
4385 Okl_Api.set_message(p_app_name => g_app_name,
4386 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
4387 RAISE OKL_API.G_EXCEPTION_ERROR;
4388 END IF;
4389 CLOSE contract_num_csr;
4390
4391 OPEN get_ung_res_csr(p_khr_id);
4392 FETCH get_ung_res_csr INTO l_unguaranteed_residual;
4393 IF get_ung_res_csr%NOTFOUND THEN
4394 Okl_Api.Set_Message(p_app_name => g_app_name,
4395 p_msg_name => 'OKL_LPV_FE_UNG_RES',
4396 p_token1 => 'CONTRACT_NUMBER',
4397 p_token1_value => l_contract_number);
4398 CLOSE get_ung_res_csr;
4399 RAISE OKL_API.G_EXCEPTION_ERROR;
4400 END IF;
4401 CLOSE get_ung_res_csr;
4402
4403 -- Bug 2969989. Return zero explicitly if nothing found.
4404 IF l_unguaranteed_residual IS NULL THEN
4405 l_unguaranteed_residual := 0;
4406 END IF;
4407
4408 RETURN l_unguaranteed_residual;
4409
4410 EXCEPTION
4411 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4412 RETURN NULL;
4413
4414 WHEN OTHERS THEN
4415 Okl_Api.SET_MESSAGE(
4416 p_app_name => G_APP_NAME,
4417 p_msg_name => G_UNEXPECTED_ERROR,
4418 p_token1 => G_SQLCODE_TOKEN,
4419 p_token1_value => SQLCODE,
4420 p_token2 => G_SQLERRM_TOKEN,
4421 p_token2_value => SQLERRM);
4422 RETURN NULL;
4423 END CONTRACT_UNGUARANTEED_RESIDUAL;
4424
4425 ----------------------------------------------------------------------------------------------------
4426
4427 -- Start of Comments
4428 -- Created By : Shri Iyer
4429 -- Function Name : CONTRACT_UNACCRUED_SUBSIDY
4430 -- Description : This function returns the unaccrued portion of the subsidy streams for a
4431 -- given contract on a particular date
4432 -- Dependencies : None
4433 -- Parameters : contract id, contract line id
4434 -- Version : 1.0
4435 -- End of Commnets
4436
4437 ----------------------------------------------------------------------------------------------------
4438
4439 FUNCTION CONTRACT_UNACCRUED_SUBSIDY(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
4440 l_unaccrued_subsidy NUMBER := 0;
4441 l_contract_number VARCHAR2(2000);
4442 l_provision_date DATE;
4443 l_subsidy_inc_id NUMBER;
4444 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4445
4446 -- cursor to get the contract number
4447 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
4448 SELECT contract_number
4449 FROM OKL_K_HEADERS_FULL_V
4450 WHERE id = p_ctr_id;
4451
4452 -- cursor to get unaccrued subsidy for a contract
4453 CURSOR unaccrued_subsidy_csr(p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE, p_date DATE, p_subsidy_inc_id NUMBER) IS
4454 SELECT SUM(ste.amount)
4455 FROM OKL_STRM_ELEMENTS ste,
4456 OKL_STRM_TYPE_B sty,
4457 OKL_STREAMS stm
4458 WHERE stm.khr_id = p_ctr_id
4459 AND stm.sty_id = sty.id
4460 AND sty.id = p_subsidy_inc_id
4461 AND stm.active_yn = 'Y'
4462 AND stm.say_code = 'CURR'
4463 AND stm.id = ste.stm_id
4464 AND ste.accrued_yn IS NULL
4465 AND ste.stream_element_date <= p_date;
4466
4467
4468 BEGIN
4469
4470 OPEN contract_num_csr(p_khr_id);
4471 FETCH contract_num_csr INTO l_contract_number;
4472 CLOSE contract_num_csr;
4473
4474 IF l_contract_number IS NULL THEN
4475 Okl_Api.set_message(p_app_name => g_app_name,
4476 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
4477 RAISE OKL_API.G_EXCEPTION_ERROR;
4478 END IF;
4479
4480 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4481 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4482 LOOP
4483 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_provision_date' THEN
4484 l_provision_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
4485 END IF;
4486 END LOOP;
4487 ELSE
4488 Okl_Api.Set_Message(p_app_name => g_app_name,
4489 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
4490 RAISE Okl_Api.G_EXCEPTION_ERROR;
4491 END IF;
4492
4493 IF l_provision_date IS NULL THEN
4494 Okl_Api.Set_Message(p_app_name => g_app_name,
4495 p_msg_name => 'OKL_GLP_PROV_DATE_ERROR');
4496 RAISE Okl_Api.G_EXCEPTION_ERROR;
4497 END IF;
4498
4499 -- Bug 4053623.
4500 -- Modifying error handling.
4501 OKL_STREAMS_UTIL.get_dependent_stream_type(
4502 p_khr_id => p_khr_id,
4503 p_primary_sty_purpose => 'SUBSIDY',
4504 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
4505 x_return_status => l_return_status,
4506 x_dependent_sty_id => l_subsidy_inc_id);
4507 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4508 IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
4509 -- subsidy income stream not defined for the contract
4510 l_unaccrued_subsidy := 0;
4511 RETURN l_unaccrued_subsidy;
4512 ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4513 -- store SQL error message on message stack for caller and entry in log file
4514 Okl_Api.set_message(p_app_name => g_app_name,
4515 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
4516 p_token1 => 'STREAM_NAME',
4517 p_token1_value => 'SUBSIDY INCOME');
4518 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4519 END IF;
4520 END IF;
4521
4522 IF l_subsidy_inc_id IS NOT NULL THEN
4523 OPEN unaccrued_subsidy_csr (p_khr_id, l_provision_date, l_subsidy_inc_id);
4524 FETCH unaccrued_subsidy_csr INTO l_unaccrued_subsidy;
4525 CLOSE unaccrued_subsidy_csr;
4526 END IF;
4527 IF l_unaccrued_subsidy IS NULL THEN
4528 l_unaccrued_subsidy := 0;
4529 END IF;
4530
4531 RETURN l_unaccrued_subsidy;
4532
4533 EXCEPTION
4534 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4535 RETURN NULL;
4536
4537 WHEN OTHERS THEN
4538 IF unaccrued_subsidy_csr%ISOPEN THEN
4539 CLOSE unaccrued_subsidy_csr;
4540 END IF;
4541 IF contract_num_csr%ISOPEN THEN
4542 CLOSE contract_num_csr;
4543 END IF;
4544 Okl_Api.SET_MESSAGE(
4545 p_app_name => G_APP_NAME,
4546 p_msg_name => G_UNEXPECTED_ERROR,
4547 p_token1 => G_SQLCODE_TOKEN,
4548 p_token1_value => SQLCODE,
4549 p_token2 => G_SQLERRM_TOKEN,
4550 p_token2_value => SQLERRM);
4551 RETURN NULL;
4552 END CONTRACT_UNACCRUED_SUBSIDY;
4553
4554 FUNCTION CONTRACT_TOTAL_ACTUAL_INT(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
4555
4556 l_accrual_date DATE;
4557 l_total_actual_int NUMBER;
4558 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4559
4560 BEGIN
4561
4562
4563 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4564 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4565 LOOP
4566 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
4567 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
4568 END IF;
4569 END LOOP;
4570 ELSE
4571 Okl_Api.Set_Message(p_app_name => g_app_name,
4572 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
4573 RAISE Okl_Api.G_EXCEPTION_ERROR;
4574 END IF;
4575
4576 IF l_accrual_date IS NULL THEN
4577 Okl_Api.Set_Message(p_app_name => g_app_name,
4578 p_msg_name => 'OKL_AGN_DATE_ERROR');
4579 RAISE Okl_Api.G_EXCEPTION_ERROR;
4580 END IF;
4581
4582 l_total_actual_int := OKL_VARIABLE_INT_UTIL_PVT.get_interest_due(
4583 x_return_status => l_return_status,
4584 p_khr_id => p_khr_id,
4585 p_to_date => l_accrual_date);
4586
4587 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4588 -- store SQL error message on message stack for caller and entry in log file
4589 Okl_Api.set_message(p_app_name => g_app_name,
4590 p_msg_name => 'OKL_AGN_VAR_INT_UTIL_ERROR',
4591 p_token1 => 'ERROR_STATUS',
4592 p_token1_value => l_return_status);
4593 RAISE Okl_Api.G_EXCEPTION_ERROR;
4594 ELSE
4595 IF (l_total_actual_int IS NULL) OR (l_total_actual_int = 0) THEN
4596 Okl_Api.Set_Message(p_app_name => g_app_name,
4597 p_msg_name => 'OKL_AGN_TOT_VAR_INT_ERROR');
4598 RAISE OKL_API.G_EXCEPTION_ERROR;
4599 END IF;
4600 END IF;
4601
4602 RETURN l_total_actual_int;
4603
4604 EXCEPTION
4605 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4606 RETURN NULL;
4607
4608 WHEN OTHERS THEN
4609 Okl_Api.SET_MESSAGE(
4610 p_app_name => G_APP_NAME,
4611 p_msg_name => G_UNEXPECTED_ERROR,
4612 p_token1 => G_SQLCODE_TOKEN,
4613 p_token1_value => SQLCODE,
4614 p_token2 => G_SQLERRM_TOKEN,
4615 p_token2_value => SQLERRM);
4616 RETURN NULL;
4617
4618 END CONTRACT_TOTAL_ACTUAL_INT;
4619
4620 ----------------------------------------------------------------------------------------------------
4621
4622 -- Start of Comments
4623 -- Created By : Shri Iyer
4624 -- Function Name : CONTRACT_TOTAL_ACCRUED_INT
4625 -- Description : This function returns the total accrued amount for a
4626 -- given contract on a particular date
4627 -- Dependencies : None
4628 -- Parameters : contract id, contract line id
4629 -- Version : 1.0
4630 -- End of Commnets
4631
4632 ----------------------------------------------------------------------------------------------------
4633
4634 FUNCTION CONTRACT_TOTAL_ACCRUED_INT(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
4635 l_total_accrued NUMBER := 0;
4636 l_contract_number VARCHAR2(2000);
4637 l_accrual_date DATE;
4638 l_sty_id NUMBER;
4639 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4640
4641 -- cursor to get the contract number
4642 CURSOR contract_num_csr (p_ctr_id OKL_K_HEADERS_FULL_V.ID%TYPE) IS
4643 SELECT contract_number
4644 FROM OKL_K_HEADERS_FULL_V
4645 WHERE id = p_ctr_id;
4646
4647
4648 -- cursor to get unaccrued subsidy for a contract
4649 --sechawla 19-sep-09 8830506 : added new parameter cp_rep_type
4650 CURSOR total_accrued_csr(p_ctr_id NUMBER, p_date DATE, p_sty_id NUMBER, cp_rep_type IN VARCHAR2) IS
4651 SELECT SUM(trx.amount)
4652 FROM OKL_TRX_CONTRACTS trx,
4653 OKL_TRX_TYPES_V try,
4654 OKL_TXL_CNTRCT_LNS txl
4655 WHERE trx.khr_id = p_ctr_id
4656 --Fixed Bug 5707866 SLA Uptake Project by nikshah, changed tsu_code to PROCESSED from ENTERED
4657 AND trx.tsu_code ='PROCESSED'
4658 AND trx.try_id = try.id
4659 --AND trx.representation_type = 'PRIMARY' -- MGAAP OTHER 7263041 --sechawla 19-sep-09 8830506
4660 AND trx.representation_type = cp_rep_type --sechawla 19-sep-09 8830506
4661 AND try.name = 'Accrual'
4662 AND trx.date_transaction_occurred <= p_date
4663 AND trx.id = txl.tcn_id
4664 AND txl.sty_id = p_sty_id;
4665
4666 l_rep_type VARCHAR2(20); --sechawla 19-Sep-09 8830506 :added
4667
4668 BEGIN
4669
4670 OPEN contract_num_csr(p_khr_id);
4671 FETCH contract_num_csr INTO l_contract_number;
4672 CLOSE contract_num_csr;
4673
4674 IF l_contract_number IS NULL THEN
4675 Okl_Api.set_message(p_app_name => g_app_name,
4676 p_msg_name => 'OKL_REV_LPV_CNTRCT_NUM_ERROR');
4677 RAISE OKL_API.G_EXCEPTION_ERROR;
4678 END IF;
4679
4680 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
4681 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
4682 LOOP
4683 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_accrual_date' THEN
4684 l_accrual_date := TO_DATE(Okl_Execute_Formula_Pub.g_additional_parameters(i).value, 'MM/DD/YYYY');
4685 END IF;
4686 --sechawla 19-Sep-09 8830506 : added a new parameter
4687 IF Okl_Execute_Formula_Pub.g_additional_parameters(i).name = 'p_rep_type' THEN
4688 l_rep_type := Okl_Execute_Formula_Pub.g_additional_parameters(i).value;
4689 END IF;
4690 END LOOP;
4691 ELSE
4692 Okl_Api.Set_Message(p_app_name => g_app_name,
4693 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
4694 RAISE Okl_Api.G_EXCEPTION_ERROR;
4695 END IF;
4696
4697 --sechawla 21-sep-09 8830506
4698 IF l_rep_type = 'PRIMARY' THEN
4699 OKL_STREAMS_UTIL.get_dependent_stream_type(
4700 p_khr_id => p_khr_id,
4701 p_primary_sty_purpose => 'RENT',
4702 p_dependent_sty_purpose => 'ACTUAL_INCOME_ACCRUAL',
4703 x_return_status => l_return_status,
4704 x_dependent_sty_id => l_sty_id);
4705 ELSIF l_rep_type = 'SECONDARY' THEN
4706 OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
4707 p_khr_id => p_khr_id,
4708 p_primary_sty_purpose => 'RENT',
4709 p_dependent_sty_purpose => 'ACTUAL_INCOME_ACCRUAL',
4710 x_return_status => l_return_status,
4711 x_dependent_sty_id => l_sty_id);
4712 END IF;
4713
4714 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4715 -- store SQL error message on message stack for caller and entry in log file
4716 Okl_Api.set_message(p_app_name => g_app_name,
4717 p_msg_name => 'OKL_AGN_STRM_TYPE_ERROR',
4718 p_token1 => 'STREAM_NAME',
4719 p_token1_value => 'Actual Income Accrual');
4720 RAISE Okl_Api.G_EXCEPTION_ERROR;
4721 END IF;
4722
4723
4724
4725 IF l_accrual_date IS NULL THEN
4726 Okl_Api.Set_Message(p_app_name => g_app_name,
4727 p_msg_name => 'OKL_AGN_DATE_ERROR');
4728 RAISE Okl_Api.G_EXCEPTION_ERROR;
4729 END IF;
4730
4731 OPEN total_accrued_csr(p_khr_id, l_accrual_date, l_sty_id, l_rep_type); --sechawla 19-Sep-09 8830506 : added l_rep_type
4732 FETCH total_accrued_csr INTO l_total_accrued;
4733 CLOSE total_accrued_csr;
4734
4735 IF l_total_accrued IS NULL THEN
4736 l_total_accrued := 0;
4737 END IF;
4738
4739 RETURN l_total_accrued;
4740
4741 EXCEPTION
4742 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4743 RETURN NULL;
4744
4745 WHEN OTHERS THEN
4746 IF total_accrued_csr%ISOPEN THEN
4747 CLOSE total_accrued_csr;
4748 END IF;
4749 Okl_Api.SET_MESSAGE(
4750 p_app_name => G_APP_NAME,
4751 p_msg_name => G_UNEXPECTED_ERROR,
4752 p_token1 => G_SQLCODE_TOKEN,
4753 p_token1_value => SQLCODE,
4754 p_token2 => G_SQLERRM_TOKEN,
4755 p_token2_value => SQLERRM);
4756 RETURN NULL;
4757 END CONTRACT_TOTAL_ACCRUED_INT;
4758
4759 ------------------------------------------------------------------------------
4760 -- Start of Comments
4761 -- Created By: [email protected] - 20-FEB-2002
4762 -- Function Name: contract_estimate_tax
4763 -- Description: Estimate tax using ARP-CRM integration routines
4764 -- Dependencies: OKL building blocks AMTX and AMUV,
4765 -- Parameters: IN: p_contract_id, p_contract_line_id,
4766 -- taxable_amount (stored in g_additional_parameters(1))
4767 -- OUT: amount
4768 -- History : RMUNJULU 3394507 Get the loc_id for location_id and pass to Tax engine
4769 -- : RMUNJULU 3394507 Performance fix, changed cursor to query fron base tables
4770 -- instead of _uv
4771 -- : RMUNJULU 3394507 added code
4772 -- to reset the arp_tax.tax_info_rec before it is called
4773 -- Also added code to set the location_id based on bill_to_site
4774 -- for contract level quote line tax calculation
4775 -- : GKADARKA 3569441 Added union in cursor l_item_loc_csr
4776 -- : rmunjulu 3682465 Changed to get and set the bill_to_postal_code
4777 -- Version: 1.0
4778 -- End of Commnets
4779 ------------------------------------------------------------------------------
4780
4781 FUNCTION contract_estimate_tax (
4782 p_contract_id IN NUMBER,
4783 p_contract_line_id IN NUMBER)
4784 RETURN NUMBER IS
4785
4786 -- Get location of all Installed Base items
4787 -- linked to the Financial Asset Line
4788 -- RMUNJULU 3394507 Changed the cursor to get the loc_id (location ccid) for
4789 -- org_id and location_id
4790 -- RMUNJULU 3394507 Performance fix, query from base tables instead of
4791 -- from _uv
4792 /*
4793 CURSOR l_item_loc_csr (cp_fin_asset_cle_id NUMBER) IS
4794 SELECT DISTINCT LOA.loc_id location_id, LOC.postal_code -- 3682465
4795 FROM OKC_K_LINES_B KLE_FA,
4796 OKC_LINE_STYLES_B LSE_FA,
4797 OKC_K_LINES_B KLE_IL,
4798 OKC_LINE_STYLES_B LSE_IL,
4799 OKC_K_LINES_B KLE_IB,
4800 OKC_LINE_STYLES_B LSE_IB,
4801 OKC_K_ITEMS ITE,
4802 CSI_ITEM_INSTANCES CII,
4803 HZ_PARTY_SITES PSI,
4804 HZ_LOCATIONS LOC,
4805 -- HZ_PARTIES PAR,
4806 HZ_PARTY_SITE_USES PSU,
4807 HZ_LOC_ASSIGNMENTS LOA
4808 WHERE kle_fa.id = cp_fin_asset_cle_id
4809 AND lse_fa.id = kle_fa.lse_id
4810 AND lse_fa.lty_code = 'FREE_FORM1'
4811 AND kle_il.cle_id = kle_fa.id
4812 AND lse_il.id = kle_il.lse_id
4813 AND lse_il.lty_code = 'FREE_FORM2'
4814 AND kle_ib.cle_id = kle_il.id
4815 AND lse_ib.id = kle_ib.lse_id
4816 AND lse_ib.lty_code = 'INST_ITEM'
4817 AND ite.cle_id = kle_ib.id
4818 AND ite.jtot_object1_code = 'OKX_IB_ITEM'
4819 AND cii.instance_id = ite.object1_id1
4820 AND cii.install_location_type_code = 'HZ_PARTY_SITES'
4821 AND psi.party_site_id = cii.install_location_id
4822 AND loc.location_id = psi.location_id
4823 -- AND par.party_id = psi.party_id
4824 AND psu.party_site_id = psi.party_site_id
4825 AND psu.site_use_type = 'INSTALL_AT'
4826 AND loc.location_id = loa.location_id
4827 UNION
4828 SELECT DISTINCT LOA.loc_id location_id, LOC.postal_code -- 3682465
4829 FROM OKC_K_LINES_B KLE_FA,
4830 OKC_LINE_STYLES_B LSE_FA,
4831 OKC_K_LINES_B KLE_IL,
4832 OKC_LINE_STYLES_B LSE_IL,
4833 OKC_K_LINES_B KLE_IB,
4834 OKC_LINE_STYLES_B LSE_IB,
4835 OKC_K_ITEMS ITE,
4836 CSI_ITEM_INSTANCES CII,
4837 --HZ_PARTY_SITES PSI,
4838 HZ_LOCATIONS LOC,
4839 --HZ_PARTIES PAR,
4840 --HZ_PARTY_SITE_USES PSU,
4841 HZ_LOC_ASSIGNMENTS LOA
4842 WHERE kle_fa.id = cp_fin_asset_cle_id
4843 AND lse_fa.id = kle_fa.lse_id
4844 AND lse_fa.lty_code = 'FREE_FORM1'
4845 AND kle_il.cle_id = kle_fa.id
4846 AND lse_il.id = kle_il.lse_id
4847 AND lse_il.lty_code = 'FREE_FORM2'
4848 AND kle_ib.cle_id = kle_il.id
4849 AND lse_ib.id = kle_ib.lse_id
4850 AND lse_ib.lty_code = 'INST_ITEM'
4851 AND ite.cle_id = kle_ib.id
4852 AND ite.jtot_object1_code = 'OKX_IB_ITEM'
4853 AND cii.instance_id = ite.object1_id1
4854 AND cii.install_location_type_code = 'HZ_LOCATIONS'
4855 AND loc.location_id = cii.install_location_id
4856 --AND loc.location_id = psi.location_id
4857 --AND par.party_id = psi.party_id
4858 --AND psu.party_site_id = psi.party_site_id
4859 --AND psu.site_use_type = 'INSTALL_AT'
4860 AND loc.location_id = loa.location_id
4861 AND EXISTS (SELECT 1
4862 FROM HZ_PARTY_SITES psi,
4863 HZ_PARTY_SITE_USES psu
4864 WHERE psi.location_id = loc.location_id
4865 AND psu.party_site_id = psi.party_site_id
4866 AND psu.site_use_type = 'INSTALL_AT');
4867
4868 -- RMUNJULU 3394507 Added cursor to get the location for the LESSEE bill to
4869 -- Get the location_id (location_ccid) for the customer bill_to
4870 CURSOR item_loc_csr ( p_bill_to_site_use_id IN NUMBER, p_cust_acct_id IN NUMBER) IS
4871 SELECT loc_assign.loc_id location_id, LOC.postal_code -- 3682465
4872 FROM HZ_PARTY_SITES party_site,
4873 HZ_LOC_ASSIGNMENTS loc_assign,
4874 HZ_LOCATIONS loc,
4875 HZ_CUST_ACCT_SITES_ALL acct_site,
4876 HZ_PARTIES party,
4877 HZ_CUST_ACCOUNTS cust_acct,
4878 HZ_CUST_SITE_USES cust_site_uses
4879 WHERE acct_site.party_site_id = party_site.party_site_id
4880 AND loc.location_id = party_site.location_id
4881 AND loc.location_id = loc_assign.location_id
4882 AND acct_site.cust_acct_site_id = cust_site_uses.cust_acct_site_id
4883 AND party.party_id = cust_acct.party_id
4884 AND cust_site_uses.site_use_id = p_bill_to_site_use_id
4885 AND cust_acct.cust_account_id = p_cust_acct_id;
4886
4887 -- Get line name to use in the error messages
4888 CURSOR l_cle_csr (cp_cle_id NUMBER) IS
4889 SELECT l.name
4890 FROM okc_k_lines_v l
4891 WHERE l.id = cp_cle_id;
4892
4893 -- Get header number to use in error messages
4894 CURSOR l_chr_csr (cp_chr_id NUMBER) IS
4895 SELECT h.contract_number
4896 FROM okc_k_headers_v h
4897 WHERE h.id = cp_chr_id;
4898
4899 l_result_amount NUMBER := 0;
4900 l_no_taxable_amount EXCEPTION;
4901 l_no_sys_params EXCEPTION;
4902 l_tax_tbl ARP_TAX.om_tax_out_tab_type;
4903 l_bill_to_rec okx_cust_site_uses_v%ROWTYPE;
4904 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4905 l_overall_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4906 l_object_name VARCHAR2(200);
4907 l_token VARCHAR2(30);
4908
4909 -- Variables to pass to taxation API
4910 l_taxable_amount NUMBER := NULL;
4911 l_org_id NUMBER := NULL;
4912 l_sob_id NUMBER := NULL;
4913 l_currency VARCHAR2(15) := NULL;
4914 l_precision NUMBER := NULL;
4915 l_min_acc_unit NUMBER := NULL;
4916 l_cust_site_use_id NUMBER := NULL;
4917 l_cust_account_id NUMBER := NULL;
4918 l_location_id NUMBER := NULL;
4919
4920 -- RMUNJULU 3394507 Declared variable for tax_info_rec_type which will be used
4921 -- to reset the global variable
4922 l_tax_rec arp_tax.tax_info_rec_type;
4923 l_postal_code HZ_LOCATIONS.postal_code%TYPE; -- 3682465
4924 */
4925 BEGIN
4926
4927 -- ***********************************
4928 -- Get Object to use in error messages
4929 -- ***********************************
4930 /*
4931 IF p_contract_line_id IS NOT NULL THEN
4932 OPEN l_cle_csr (p_contract_line_id);
4933 FETCH l_cle_csr INTO l_object_name;
4934 CLOSE l_cle_csr;
4935 l_token := 'contract_line_id';
4936 ELSE
4937 OPEN l_chr_csr (p_contract_id);
4938 FETCH l_chr_csr INTO l_object_name;
4939 CLOSE l_chr_csr;
4940 l_token := 'contract_id';
4941 END IF;
4942
4943 IF l_object_name IS NULL THEN
4944 l_overall_status := OKL_API.G_RET_STS_ERROR;
4945 OKC_API.SET_MESSAGE (
4946 p_app_name => OKC_API.G_APP_NAME,
4947 p_msg_name => OKC_API.G_INVALID_VALUE,
4948 p_token1 => OKC_API.G_COL_NAME_TOKEN,
4949 p_token1_value => l_token);
4950 END IF;
4951
4952 -- ********************************************
4953 -- Extract Taxable Amount from global variables
4954 -- ********************************************
4955
4956 BEGIN
4957
4958 IF okl_execute_formula_pub.g_additional_parameters(1).name
4959 = 'TAXABLE AMOUNT'
4960 AND okl_execute_formula_pub.g_additional_parameters(1).value
4961 IS NOT NULL
4962 THEN
4963 l_taxable_amount := TO_NUMBER
4964 (okl_execute_formula_pub.g_additional_parameters(1).value);
4965 ELSE
4966 RAISE l_no_taxable_amount;
4967 END IF;
4968
4969 IF NVL (l_taxable_amount, 0) = 0 THEN
4970 RAISE l_no_taxable_amount;
4971 END IF;
4972
4973 EXCEPTION
4974 WHEN OTHERS THEN
4975 l_overall_status := OKL_API.G_RET_STS_ERROR;
4976 OKL_API.SET_MESSAGE (
4977 p_app_name => OKL_API.G_APP_NAME,
4978 p_msg_name => 'OKL_AM_TAX_NO_TAXABLE_AMOUNT',
4979 p_token1 => 'OBJECT',
4980 p_token1_value => l_object_name);
4981 END;
4982
4983 -- **************************************************
4984 -- Get all generic parameters required by taxation API
4985 -- **************************************************
4986
4987 BEGIN
4988
4989 l_org_id := okl_am_util_pvt.get_chr_org_id (p_contract_id);
4990 l_sob_id := okc_currency_api.get_ou_sob (l_org_id);
4991 l_currency := okc_currency_api.get_sob_currency (l_sob_id);
4992 okl_am_util_pvt.get_currency_info
4993 (l_currency, l_precision, l_min_acc_unit);
4994
4995 IF l_sob_id IS NULL OR l_precision IS NULL THEN
4996 RAISE l_no_sys_params;
4997 END IF;
4998
4999 EXCEPTION
5000 WHEN OTHERS THEN
5001 l_overall_status := OKL_API.G_RET_STS_ERROR;
5002 OKL_API.SET_MESSAGE (
5003 p_app_name => OKL_API.G_APP_NAME,
5004 p_msg_name => 'OKL_AM_TAX_NO_PARAMS',
5005 p_token1 => 'OBJECT',
5006 p_token1_value => l_object_name);
5007 END;
5008
5009 -- *****************************************************
5010 -- Get line specific parameters required by taxation API
5011 -- *****************************************************
5012
5013 IF (p_contract_line_id IS NOT NULL)
5014 AND (l_object_name IS NOT NULL) THEN
5015
5016 OPEN l_item_loc_csr (p_contract_line_id);
5017
5018 LOOP
5019 FETCH l_item_loc_csr INTO l_location_id, l_postal_code; -- 3682465
5020 EXIT WHEN l_item_loc_csr%NOTFOUND
5021 OR l_item_loc_csr%ROWCOUNT > 1;
5022 END LOOP;
5023
5024 IF l_item_loc_csr%ROWCOUNT <> 1
5025 OR l_location_id IS NULL THEN
5026 l_overall_status := OKL_API.G_RET_STS_ERROR;
5027 OKL_API.SET_MESSAGE (
5028 p_app_name => OKL_API.G_APP_NAME,
5029 p_msg_name => 'OKL_AM_TAX_NO_LOCATION',
5030 p_token1 => 'OBJECT',
5031 p_token1_value => l_object_name);
5032 END IF;
5033
5034 CLOSE l_item_loc_csr;
5035
5036 -- *********************************************************
5037 -- Get contract specific parameters required by taxation API
5038 -- *********************************************************
5039
5040 ELSIF (p_contract_line_id IS NULL) THEN
5041
5042 okl_am_util_pvt.get_bill_to_address (
5043 p_contract_id => p_contract_id,
5044 p_message_yn => FALSE,
5045 x_bill_to_address_rec => l_bill_to_rec,
5046 x_return_status => l_return_status);
5047
5048 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5049 l_cust_site_use_id := l_bill_to_rec.id1;
5050 l_cust_account_id := l_bill_to_rec.cust_account_id;
5051 END IF;
5052
5053 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
5054 OR l_cust_site_use_id IS NULL
5055 OR l_cust_account_id IS NULL THEN
5056 l_overall_status := OKL_API.G_RET_STS_ERROR;
5057 OKL_API.SET_MESSAGE (
5058 p_app_name => OKL_API.G_APP_NAME,
5059 p_msg_name => 'OKL_AM_TAX_NO_BILL_TO',
5060 p_token1 => 'OBJECT',
5061 p_token1_value => l_object_name);
5062 END IF;
5063
5064 END IF;
5065
5066 -- *****************
5067 -- Call taxation API
5068 -- *****************
5069
5070 -- RMUNJULU 3394507 Reset the GLOBAL tax_info_rec rec type with empty rec type
5071 arp_tax.tax_info_rec := l_tax_rec;
5072
5073 -- Calculate tax for positive amounts
5074 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS
5075 AND l_taxable_amount > 0 THEN
5076
5077 arp_tax.tax_info_rec.trx_date := SYSDATE;
5078 arp_tax.tax_info_rec.extended_amount := l_taxable_amount;
5079 arp_tax.tax_info_rec.trx_currency_code := l_currency;
5080 arp_tax.tax_info_rec.PRECISION := l_precision;
5081 arp_tax.tax_info_rec.minimum_accountable_unit := l_min_acc_unit;
5082
5083 IF p_contract_line_id IS NOT NULL THEN
5084
5085 arp_tax.tax_info_rec.bill_to_location_id := l_location_id;
5086
5087 arp_tax.tax_info_rec.bill_to_postal_code := l_postal_code; -- 3682465
5088
5089 ELSE
5090 arp_tax.tax_info_rec.bill_to_site_use_id := l_cust_site_use_id;
5091 arp_tax.tax_info_rec.bill_to_cust_id := l_cust_account_id;
5092
5093 -- RMUNJULU 3394507 Found that Tax engine also needs the location_id
5094 -- for the bill to location, added code to get and set that value
5095 -- get the location for the LESSEE bill to
5096 OPEN item_loc_csr ( l_cust_site_use_id, l_cust_account_id);
5097 FETCH item_loc_csr INTO l_location_id, l_postal_code; -- 3682465
5098 CLOSE item_loc_csr;
5099
5100 -- raise message if site location not found
5101 IF l_location_id IS NULL THEN
5102 OKL_API.SET_MESSAGE (
5103 p_app_name => OKL_API.G_APP_NAME,
5104 p_msg_name => 'OKL_AM_TAX_NO_LOCATION',
5105 p_token1 => 'OBJECT',
5106 p_token1_value => l_object_name);
5107 END IF;
5108
5109 -- set the tax_info_rec with location id
5110 arp_tax.tax_info_rec.bill_to_location_id := l_location_id;
5111
5112 arp_tax.tax_info_rec.bill_to_postal_code := l_postal_code; -- 3682465
5113
5114 END IF;
5115
5116 BEGIN
5117 arp_tax_crm_integration_pkg.summary
5118 (p_set_of_books_id => l_sob_id
5119 ,x_crm_tax_out_tbl => l_tax_tbl
5120 ,p_new_tax_amount => l_result_amount);
5121 EXCEPTION
5122 WHEN OTHERS THEN
5123 l_overall_status := OKL_API.G_RET_STS_ERROR;
5124 OKL_API.SET_MESSAGE (
5125 p_app_name => OKL_API.G_APP_NAME,
5126 p_msg_name => 'OKL_AM_TAX_ARP_FAILED',
5127 p_token1 => 'OBJECT',
5128 p_token1_value => l_object_name);
5129 END;
5130
5131 END IF;
5132
5133 RETURN NVL (l_result_amount, 0);
5134 */
5135 return 0;
5136 EXCEPTION
5137 WHEN OTHERS THEN
5138 /*
5139 -- Close open cursors
5140
5141 IF l_item_loc_csr%ISOPEN THEN
5142 CLOSE l_item_loc_csr;
5143 END IF;
5144
5145 IF l_cle_csr%ISOPEN THEN
5146 CLOSE l_cle_csr;
5147 END IF;
5148
5149 IF l_chr_csr%ISOPEN THEN
5150 CLOSE l_chr_csr;
5151 END IF;
5152
5153 -- RMUNJULU 3394507 close cursor if open
5154 IF item_loc_csr%ISOPEN THEN
5155 CLOSE item_loc_csr;
5156 END IF;
5157
5158 -- store SQL error message on message stack for caller
5159
5160 OKL_API.SET_MESSAGE (
5161 p_app_name => OKL_API.G_APP_NAME,
5162 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5163 p_token1 => 'SQLCODE',
5164 p_token1_value => SQLCODE,
5165 p_token2 => 'SQLERRM',
5166 p_token2_value => SQLERRM);
5167 */
5168 RETURN NULL;
5169
5170 END contract_estimate_tax;
5171
5172
5173 ------------------------------------------------------------------------------
5174 -- Start of Comments
5175 -- Created By: [email protected] - 20-FEB-2002
5176 -- Function Name: line_estimate_tax
5177 -- Description: Estimate tax using ARP-CRM integration routines
5178 -- Dependencies: OKL building blocks AMTX and AMUV,
5179 -- Parameters: IN: p_contract_id, p_contract_line_id,
5180 -- taxable_amount (stored in g_additional_parameters(1))
5181 -- OUT: amount
5182 -- Version: 1.0
5183 -- End of Commnets
5184 ------------------------------------------------------------------------------
5185
5186 FUNCTION line_estimate_tax (
5187 p_contract_id IN NUMBER,
5188 p_contract_line_id IN NUMBER)
5189 RETURN NUMBER IS
5190 BEGIN
5191 -- To avoid code repetition, both header
5192 -- and line are handled in one routine
5193 RETURN (contract_estimate_tax (p_contract_id, p_contract_line_id));
5194 END line_estimate_tax;
5195
5196
5197 ------------------------------------------------------------------------------
5198 -- Start of Comments
5199 -- Created By: [email protected] - 20-FEB-2002
5200 -- Function Name: line_estimated_property_tax
5201 -- Description: Estimate property tax based on previous records
5202 -- Dependencies: OKL building blocks AMTX and AMUV,
5203 -- Parameters: IN: p_contract_id, p_contract_line_id,
5204 -- OUT: amount
5205 -- Version: 1.0
5206 -- History: 21-MAR-2002 RDRAGUIL - Cursor based on Billing TRXs
5207 -- 05 Nov 2004 PAGARG Bug# 3925492
5208 -- Modified the procedure to call BPD API for formula value.
5209 -- End of Commnets
5210 ------------------------------------------------------------------------------
5211
5212 FUNCTION line_estimated_property_tax (
5213 p_contract_id IN NUMBER,
5214 p_contract_line_id IN NUMBER)
5215 RETURN NUMBER IS
5216
5217 l_result_amount NUMBER;
5218
5219 --Bug# 3925492: pagarg +++ Estd. Prop Tax +++++++ Start ++++++++++
5220 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
5221 SELECT trunc(qte.date_effective_from) date_effective_from
5222 FROM okl_trx_quotes_b qte
5223 WHERE qte.id = p_quote_id;
5224
5225 l_quote_id NUMBER;
5226 l_quote_date_eff DATE;
5227 l_sysdate DATE;
5228 l_api_version NUMBER;
5229 l_init_msg_list VARCHAR2(1);
5230 l_return_status VARCHAR2(1);
5231 l_msg_count NUMBER;
5232 l_msg_data VARCHAR2(2000);
5233 l_input_tbl OKL_BPD_TERMINATION_ADJ_PVT.input_tbl_type;
5234 lx_baj_tbl OKL_BPD_TERMINATION_ADJ_PVT.baj_tbl_type;
5235 l_tbl_cnt NUMBER;
5236 BEGIN
5237 l_api_version := '1.0';
5238 l_init_msg_list := OKL_API.G_FALSE;
5239 l_result_amount := 0;
5240
5241 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
5242 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
5243 LOOP
5244 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
5245 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
5246 END IF;
5247 END LOOP;
5248 END IF;
5249
5250 IF l_quote_id IS NOT NULL
5251 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
5252 OPEN get_quote_date_csr (l_quote_id);
5253 FETCH get_quote_date_csr INTO l_quote_date_eff;
5254 CLOSE get_quote_date_csr;
5255 END IF;
5256
5257 SELECT SYSDATE INTO l_sysdate FROM DUAL;
5258
5259 IF l_quote_date_eff IS NULL
5260 OR l_quote_date_eff = OKL_API.G_MISS_DATE
5261 THEN
5262 l_quote_date_eff := l_sysdate;
5263 END IF;
5264
5265 l_input_tbl(0).khr_id := p_contract_id;
5266 l_input_tbl(0).kle_id := p_contract_line_id;
5267 l_input_tbl(0).term_date_from := l_quote_date_eff;
5268
5269 OKL_BPD_TERMINATION_ADJ_PVT.get_unbilled_prop_tax(
5270 p_api_version => l_api_version,
5271 p_init_msg_list => l_init_msg_list,
5272 p_input_tbl => l_input_tbl,
5273 x_baj_tbl => lx_baj_tbl,
5274 x_return_status => l_return_status,
5275 x_msg_count => l_msg_count,
5276 x_msg_data => l_msg_data);
5277
5278 IF lx_baj_tbl.COUNT > 0
5279 THEN
5280 FOR l_tbl_cnt IN lx_baj_tbl.FIRST..lx_baj_tbl.LAST
5281 LOOP
5282 l_result_amount := l_result_amount + lx_baj_tbl(l_tbl_cnt).amount;
5283 END LOOP;
5284 END IF;
5285 --Bug# 3925492: pagarg +++ Estd. Prop Tax +++++++ End ++++++++++
5286
5287 RETURN NVL (l_result_amount, 0);
5288 EXCEPTION
5289 WHEN OTHERS THEN
5290 -- store SQL error message on message stack for caller
5291 OKL_API.SET_MESSAGE (
5292 p_app_name => OKL_API.G_APP_NAME,
5293 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5294 p_token1 => 'SQLCODE',
5295 p_token1_value => SQLCODE,
5296 p_token2 => 'SQLERRM',
5297 p_token2_value => SQLERRM);
5298
5299 RETURN NULL;
5300 END line_estimated_property_tax;
5301
5302 ------------------------------------------------------------------------------
5303 -- Start of Comments
5304 -- Created By: [email protected] - 20-FEB-2002
5305 -- Function Name: contract_remaining_sec_dep
5306 -- Description: If security deposit disposition is allowed to be included
5307 -- into a quote, return original security deposit amount
5308 -- minus any credit memos against security deposit invoices
5309 -- Dependencies: OKL building blocks AMTX and AMUV,
5310 -- Parameters: IN: p_contract_id
5311 -- OUT: amount
5312 -- Version: 1.0
5313 -- End of Commnets
5314 ------------------------------------------------------------------------------
5315
5316 FUNCTION contract_remaining_sec_dep (
5317 p_contract_id IN NUMBER,
5318 p_contract_line_id IN NUMBER)
5319 RETURN NUMBER IS
5320
5321 l_sdd_tbl okl_am_invoices_pvt.sdd_tbl_type;
5322 l_tld_tbl okl_am_invoices_pvt.tld_tbl_type;
5323 l_total_amount NUMBER;
5324
5325 BEGIN
5326
5327 okl_am_invoices_pvt.contract_remaining_sec_dep (
5328 p_contract_id => p_contract_id,
5329 p_contract_line_id => p_contract_line_id,
5330 x_sdd_tbl => l_sdd_tbl,
5331 x_tld_tbl => l_tld_tbl,
5332 x_total_amount => l_total_amount);
5333
5334 RETURN NVL (l_total_amount, 0);
5335
5336 EXCEPTION
5337
5338 WHEN OTHERS THEN
5339
5340 -- store SQL error message on message stack for caller
5341
5342 OKL_API.SET_MESSAGE (
5343 p_app_name => OKL_API.G_APP_NAME,
5344 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5345 p_token1 => 'SQLCODE',
5346 p_token1_value => SQLCODE,
5347 p_token2 => 'SQLERRM',
5348 p_token2_value => SQLERRM);
5349
5350 RETURN NULL;
5351
5352 END contract_remaining_sec_dep;
5353
5354
5355 ------------------------------------------------------------------------------
5356 -- Start of Comments
5357 -- Created By: [email protected] - 10-JUL-2002
5358 -- Function Name: line_unbilled_streams
5359 -- Description: Calculate unbilled streams
5360 -- Dependencies: OKL building blocks AMTX and AMUV,
5361 -- Parameters: IN: p_contract_id, p_contract_line_id,
5362 -- stream_type_id (stored in g_additional_parameters(1))
5363 -- OUT: amount
5364 -- Version: 1.0
5365 -- History SECHAWLA 04-MAR-03 : Restrict the calculation of unbilled
5366 -- receivables to only billable streams
5367 -- End of Commnets
5368 ------------------------------------------------------------------------------
5369
5370 FUNCTION line_unbilled_streams (
5371 p_contract_id IN NUMBER,
5372 p_contract_line_id IN NUMBER)
5373 RETURN NUMBER IS
5374
5375 -- Get Unbilled Streams
5376 CURSOR l_unbill_stream_csr (
5377 cp_contract_id NUMBER,
5378 cp_contract_line_id NUMBER,
5379 cp_stream_type_id NUMBER,
5380 cp_quote_eff_date DATE ) IS
5381 SELECT SUM (NVL (ste.amount, 0)) amount_due
5382 FROM okl_streams stm,
5383 okl_strm_type_b sty, -- SECHAWLA 04-MAR-03 Added this table to get the billable_yn flag
5384 okl_strm_elements ste
5385 WHERE stm.khr_id = cp_contract_id
5386 AND stm.kle_id = cp_contract_line_id
5387 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
5388 AND stm.active_yn = 'Y'
5389 AND stm.say_code = 'CURR'
5390 AND ste.stm_id = stm.id
5391 -- AND ste.date_billed IS NULL -- Removed date billed as future bills are adjusted for Bug15998398
5392 AND ste.stream_element_date > NVL(cp_quote_eff_date, ste.stream_element_date - 1) -- added the condition for Bug15998398
5393 AND NVL (ste.amount, 0) <> 0
5394 -- SECHAWLA 04-MAR-03 Added the following 3 conditions to restrict the unbilled receivables calculation to only
5395 -- billable streams
5396 AND sty.id = stm.sty_id
5397 AND sty.billable_yn = 'Y';
5398 -- AND sty.capitalize_yn = 'N'
5399
5400 l_result_amount NUMBER := 0;
5401 l_stream_type_id NUMBER;
5402 l_quote_eff_date DATE; -- added for Bug15998398
5403
5404 BEGIN
5405
5406 -- ********************************************
5407 -- Extract Stream Type Id from global variables
5408 -- ********************************************
5409
5410 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(1)
5411 AND okl_execute_formula_pub.g_additional_parameters(1).name = 'STREAM TYPE'
5412 AND okl_execute_formula_pub.g_additional_parameters(1).value IS NOT NULL
5413 THEN
5414 l_stream_type_id := TO_NUMBER
5415 (okl_execute_formula_pub.g_additional_parameters(1).value);
5416 ELSE
5417 l_stream_type_id := NULL;
5418 END IF;
5419
5420 -- added the following fo Bug15998398
5421 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(2)
5422 AND okl_execute_formula_pub.g_additional_parameters(2).name = 'quote_effective_from_date'
5423 AND okl_execute_formula_pub.g_additional_parameters(2).value IS NOT NULL
5424 THEN
5425 l_quote_eff_date := TO_DATE
5426 (okl_execute_formula_pub.g_additional_parameters(2).value,'MM/DD/YYYY');
5427 ELSE
5428 l_quote_eff_date := NULL;
5429 END IF;
5430
5431 -- ****************
5432 -- Calculate result
5433 -- ****************
5434
5435 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id, l_stream_type_id, l_quote_eff_date);-- modified for Bug15998398
5436 FETCH l_unbill_stream_csr INTO l_result_amount;
5437 CLOSE l_unbill_stream_csr;
5438
5439 RETURN NVL (l_result_amount, 0);
5440
5441 EXCEPTION
5442
5443 WHEN OTHERS THEN
5444
5445 -- Close open cursors
5446
5447 IF l_unbill_stream_csr%ISOPEN THEN
5448 CLOSE l_unbill_stream_csr;
5449 END IF;
5450
5451
5452 -- store SQL error message on message stack for caller
5453
5454 OKL_API.SET_MESSAGE (
5455 p_app_name => OKL_API.G_APP_NAME,
5456 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5457 p_token1 => 'SQLCODE',
5458 p_token1_value => SQLCODE,
5459 p_token2 => 'SQLERRM',
5460 p_token2_value => SQLERRM);
5461
5462 RETURN NULL;
5463
5464 END line_unbilled_streams;
5465
5466
5467 ------------------------------------------------------------------------------
5468 -- Start of Comments
5469 -- Created By: [email protected] - 24-APR-2002
5470 -- Function Name: line_unbilled_rent
5471 -- Description: Returns the unbilled rent amount for a given contract line
5472 -- Dependencies: OKL building blocks AMTX and AMUV
5473 -- Parameters: IN: p_contract_id, p_line_id
5474 -- stream_type_id (stored in g_additional_parameters(1))
5475 -- OUT: amount
5476 -- Version: 1.0
5477 -- History : SECHAWLA 05-MAY-04 3578894 : Modified to evaluate reporting streams
5478 -- based upon additional parameters
5479 -- : 31-Dec-2004 PAGARG Bug# 4097591
5480 -- : UDS impact to obtain stream type id
5481 -- End of Commnets
5482 ------------------------------------------------------------------------------
5483
5484 FUNCTION line_unbilled_rent (
5485 p_contract_id IN NUMBER,
5486 p_contract_line_id IN NUMBER)
5487 RETURN NUMBER IS
5488
5489 --SECHAWLA 05-MAY-04 3578894 : new declarations
5490 -- Get Unbilled Streams (moved from line_unbilled_streams)
5491 CURSOR l_unbill_stream_csr (
5492 cp_contract_id NUMBER,
5493 cp_contract_line_id NUMBER,
5494 cp_stream_type_id NUMBER) IS
5495 SELECT SUM (NVL (ste.amount, 0)) amount_due
5496 FROM okl_streams stm,
5497 okl_strm_type_b sty, -- SECHAWLA 04-MAR-03 Added this table to get the billable_yn flag
5498 okl_strm_elements ste
5499 WHERE stm.khr_id = cp_contract_id
5500 AND stm.kle_id = cp_contract_line_id
5501 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
5502 AND stm.active_yn = 'Y'
5503 AND stm.say_code = 'CURR'
5504 AND ste.stm_id = stm.id
5505 AND ste.date_billed IS NULL
5506 AND NVL (ste.amount, 0) <> 0
5507 -- SECHAWLA 04-MAR-03 Added the following 3 conditions to restrict the unbilled receivables calculation to only
5508 -- billable streams
5509 AND sty.id = stm.sty_id
5510 AND sty.billable_yn = 'Y';
5511 -- AND sty.capitalize_yn = 'N'
5512
5513 -- Get Unbilled Streams for Reporting product
5514 CURSOR l_unbill_reporting_stream_csr (
5515 cp_contract_id NUMBER,
5516 cp_contract_line_id NUMBER,
5517 cp_stream_type_id NUMBER,
5518 cp_trx_date DATE) IS
5519 SELECT SUM (NVL (ste.amount, 0)) amount_due
5520 FROM okl_streams stm,
5521 okl_strm_type_b sty,
5522 okl_strm_elements ste
5523 WHERE stm.khr_id = cp_contract_id
5524 AND stm.kle_id = cp_contract_line_id
5525 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
5526 AND stm.active_yn = 'N' -- reporting strems are inactive
5527 AND stm.say_code = 'CURR' -- reporting streams are current
5528 AND ste.stm_id = stm.id
5529 AND ste.date_billed IS NULL -- reporting streams never get billed
5530 AND NVL (ste.amount, 0) <> 0
5531 AND sty.id = stm.sty_id
5532 AND sty.billable_yn = 'Y' -- reporting streams are billable
5533 -- AND sty.capitalize_yn = 'N'
5534 AND stm.purpose_code = 'REPORT'
5535 AND ste.STREAM_ELEMENT_DATE > cp_trx_date;
5536
5537 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
5538 l_trx_date DATE;
5539
5540 ---SECHAWLA 05-MAY-04 3578894 : end new declarations
5541
5542 l_result_amount NUMBER := 0;
5543 l_stream_type_id NUMBER;
5544 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
5545 BEGIN
5546 --PAGARG 31-Dec-2004 Bug# 4097591 Start
5547 --UDS impact. Obtain stream type id and pass it to cursor
5548
5549 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
5550 'RENT',
5551 l_return_status,
5552 l_stream_type_id);
5553
5554 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
5555 THEN
5556 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5557 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
5558 THEN
5559 RAISE OKL_API.G_EXCEPTION_ERROR;
5560 END IF;
5561 --PAGARG 31-Dec-2004 Bug# 4097591 End
5562
5563 /* SECHAWLA 05-MAY-04 3578894
5564 okl_execute_formula_pub.g_additional_parameters(1).name := 'STREAM TYPE';
5565 okl_execute_formula_pub.g_additional_parameters(1).value := l_stream_type_id;
5566
5567 l_result_amount := line_unbilled_streams (p_contract_id, p_contract_line_id);
5568
5569 RETURN NVL (l_result_amount, 0);
5570 */
5571
5572 --Validate additional parameters availability
5573 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
5574 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
5575 LOOP
5576 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
5577 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
5578 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
5579 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
5580 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
5581 l_trx_date := TO_DATE(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
5582 END IF;
5583 END LOOP;
5584 ELSE
5585 l_rep_prod_streams_yn := 'N';
5586
5587 END IF;
5588
5589 IF l_rep_prod_streams_yn = 'Y' THEN
5590 IF l_trx_date IS NULL THEN
5591 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
5592 Okl_Api.Set_Message(p_app_name => g_app_name,
5593 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
5594 RAISE Okl_Api.G_EXCEPTION_ERROR;
5595 END IF;
5596 END IF;
5597
5598
5599 -- ****************
5600 -- Calculate result
5601 -- ****************
5602
5603 IF l_rep_prod_streams_yn = 'Y' THEN
5604 OPEN l_unbill_reporting_stream_csr(p_contract_id, p_contract_line_id, l_stream_type_id,l_trx_date );
5605 FETCH l_unbill_reporting_stream_csr INTO l_result_amount;
5606 CLOSE l_unbill_reporting_stream_csr;
5607 ELSE
5608
5609 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id, l_stream_type_id);
5610 FETCH l_unbill_stream_csr INTO l_result_amount;
5611 CLOSE l_unbill_stream_csr;
5612 END IF;
5613
5614 RETURN NVL (l_result_amount, 0);
5615
5616
5617 EXCEPTION
5618 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
5619 -- Close open cursors
5620 IF l_unbill_stream_csr%ISOPEN THEN
5621 CLOSE l_unbill_stream_csr;
5622 END IF;
5623
5624 IF l_unbill_reporting_stream_csr%ISOPEN THEN
5625 CLOSE l_unbill_reporting_stream_csr;
5626 END IF;
5627
5628 RETURN NULL;
5629
5630 WHEN OTHERS THEN
5631 -- Close open cursors
5632 IF l_unbill_stream_csr%ISOPEN THEN
5633 CLOSE l_unbill_stream_csr;
5634 END IF;
5635
5636 IF l_unbill_reporting_stream_csr%ISOPEN THEN
5637 CLOSE l_unbill_reporting_stream_csr;
5638 END IF;
5639 -- store SQL error message on message stack for caller
5640 OKL_API.SET_MESSAGE (
5641 p_app_name => OKL_API.G_APP_NAME,
5642 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5643 p_token1 => 'SQLCODE',
5644 p_token1_value => SQLCODE,
5645 p_token2 => 'SQLERRM',
5646 p_token2_value => SQLERRM);
5647
5648 RETURN NULL;
5649
5650 END line_unbilled_rent;
5651
5652
5653 -- Start of comments
5654 --
5655 -- Procedure Name : get_reporting_product
5656 -- Description : This procedure checks if there is a reporting product attached to the contract and returns
5657 -- the deal type of the reporting product and MG reporting book
5658 -- Business Rules :
5659 -- Parameters : p_contract_id - Contract ID
5660 -- Version : 1.0
5661 -- History : sechawla 12-Dec-07 - 6671849 Created
5662 -- End of comments
5663
5664 PROCEDURE get_reporting_product(p_api_version IN NUMBER,
5665 p_init_msg_list IN VARCHAR2,
5666 x_return_status OUT NOCOPY VARCHAR2,
5667 x_msg_count OUT NOCOPY NUMBER,
5668 x_msg_data OUT NOCOPY VARCHAR2,
5669 p_contract_id IN NUMBER,
5670 x_rep_product_id OUT NOCOPY VARCHAR2) IS
5671
5672
5673 -- Get the financial product of the contract
5674 CURSOR l_get_fin_product(cp_khr_id IN NUMBER) IS
5675 SELECT a.start_date, a.contract_number, b.pdt_id
5676 FROM okc_k_headers_b a, okl_k_headers b
5677 WHERE a.id = b.id
5678 AND a.id = cp_khr_id;
5679
5680 SUBTYPE pdtv_rec_type IS OKL_SETUPPRODUCTS_PUB.pdtv_rec_type;
5681 SUBTYPE pdt_parameters_rec_type IS OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
5682
5683 l_fin_product_id NUMBER;
5684 l_start_date DATE;
5685 lp_pdtv_rec pdtv_rec_type;
5686 lp_empty_pdtv_rec pdtv_rec_type;
5687 lx_no_data_found BOOLEAN;
5688 lx_pdt_parameter_rec pdt_parameters_rec_type ;
5689 l_contract_number VARCHAR2(120);
5690
5691 --mg_error EXCEPTION;
5692 l_reporting_product OKL_PRODUCTS_V.NAME%TYPE;
5693 l_reporting_product_id NUMBER;
5694
5695
5696
5697 BEGIN
5698 -- get the financial product of the contract
5699 OPEN l_get_fin_product(p_contract_id);
5700 FETCH l_get_fin_product INTO l_start_date, l_contract_number, l_fin_product_id;
5701 CLOSE l_get_fin_product;
5702
5703 lp_pdtv_rec.id := l_fin_product_id;
5704
5705 -- check if the fin product has a reporting product
5706 OKL_SETUPPRODUCTS_PUB.Getpdt_parameters( p_api_version => p_api_version,
5707 p_init_msg_list => OKC_API.G_FALSE,
5708 x_return_status => x_return_status,
5709 x_no_data_found => lx_no_data_found,
5710 x_msg_count => x_msg_count,
5711 x_msg_data => x_msg_data,
5712 p_pdtv_rec => lp_pdtv_rec,
5713 p_product_date => l_start_date,
5714 p_pdt_parameter_rec => lx_pdt_parameter_rec);
5715
5716 IF x_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
5717 -- Error getting financial product parameters for contract CONTRACT_NUMBER.
5718 OKC_API.set_message( p_app_name => 'OKL',
5719 p_msg_name => 'OKL_AM_FIN_PROD_PARAM_ERR',
5720 p_token1 => 'CONTRACT_NUMBER',
5721 p_token1_value => l_contract_number);
5722
5723 ELSE
5724
5725 l_reporting_product := lx_pdt_parameter_rec.reporting_product;
5726 l_reporting_product_id := lx_pdt_parameter_rec.reporting_pdt_id;
5727
5728 IF l_reporting_product IS NOT NULL AND l_reporting_product <> OKC_API.G_MISS_CHAR THEN
5729 -- Contract has a reporting product
5730 x_rep_product_id := l_reporting_product_id;
5731 END IF;
5732 END IF;
5733 EXCEPTION
5734 --WHEN mg_error THEN
5735 -- IF l_get_fin_product%ISOPEN THEN
5736 -- CLOSE l_get_fin_product;
5737 -- END IF;
5738 -- x_return_status := OKL_API.G_RET_STS_ERROR;
5739 WHEN OTHERS THEN
5740 IF l_get_fin_product%ISOPEN THEN
5741 CLOSE l_get_fin_product;
5742 END IF;
5743 OKL_API.set_message(p_app_name => 'OKC',
5744 p_msg_name => g_unexpected_error,
5745 p_token1 => g_sqlcode_token,
5746 p_token1_value => sqlcode,
5747 p_token2 => g_sqlerrm_token,
5748 p_token2_value => sqlerrm);
5749 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5750 END get_reporting_product;
5751
5752
5753 ------------------------------------------------------------------------------
5754 -- Start of Comments
5755 -- Created By: [email protected] - 24-APR-2002
5756 -- Function Name: line_unearned_income
5757 -- Description: Returns the unearned income amount for a given contract line
5758 -- Dependencies: OKL building blocks AMTX and AMUV
5759 -- Parameters: IN: p_contract_id, p_line_id
5760 -- stream_type_id (stored in g_additional_parameters(1))
5761 -- OUT: amount
5762 -- Version: 1.0
5763 -- SECHAWLA 05-MAY-04 3578894 : Modified to accomodate additional parameters for reporting product
5764 -- : 31-Dec-2004 PAGARG Bug# 4097591
5765 -- : UDS impact to obtain stream type id
5766 -- sechawla 05-dec-07 6671849 : Modified the dependent stream type check
5767 -- End of Commnets
5768 ------------------------------------------------------------------------------
5769 FUNCTION line_unearned_income (
5770 p_contract_id IN NUMBER,
5771 p_contract_line_id IN NUMBER)
5772 RETURN NUMBER IS
5773
5774 l_unearned_income NUMBER := 0;
5775 --Code changed by rvaduri for bug 3536862
5776 --This code will return the Pre-tax income at line level
5777 -- and will return values only contracts booked using ISG.
5778 --PAGARG 31-Dec-2004 Bug# 4097591
5779 --Instead of using stream name, join the sty id passed to cursor
5780 CURSOR line_csr (c_contract_line_id NUMBER, p_sty_id NUMBER) IS
5781 SELECT NVL(SUM(sel.amount),0)
5782 FROM okl_strm_elements sel,
5783 okl_streams stm,
5784 okl_strm_type_v sty
5785 WHERE sty.id = p_sty_id
5786 AND stm.sty_id = sty.id
5787 AND stm.say_code = 'CURR'
5788 AND stm.active_yn = 'Y'
5789 AND stm.purpose_code IS NULL
5790 AND stm.kle_id = c_contract_line_id
5791 AND sel.stm_id = stm.id;
5792
5793 --SECHAWLA 05-MAY-04 3578894 : new declarations
5794 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
5795 l_trx_date DATE;
5796
5797 -- SECHAWLA 05-MAY-04 3578894 : Created this cursor to evaluat ereporting streams based upon additional parameters
5798 --PAGARG 31-Dec-2004 Bug# 4097591
5799 --Instead of using stream name, join the sty id passed to cursor
5800 CURSOR line_reporting_csr (c_contract_line_id IN NUMBER, cp_trx_date IN DATE, p_sty_id NUMBER) IS
5801 SELECT NVL(SUM(sel.amount),0)
5802 FROM okl_strm_elements sel,
5803 okl_streams stm,
5804 okl_strm_type_v sty
5805 WHERE sty.id = p_sty_id
5806 AND stm.sty_id = sty.id
5807 AND stm.say_code = 'CURR' -- reporting streams are current
5808 AND stm.active_yn = 'N' -- reporting strems are inactive
5809 AND stm.purpose_code IS NULL
5810 AND sel.date_billed IS NULL -- reporting streams never get billed
5811 --AND sty.billable_yn = 'N' -- PRE-TAX streams are not billable
5812 AND stm.kle_id = c_contract_line_id
5813 AND sel.stm_id = stm.id
5814 AND stm.purpose_code = 'REPORT'
5815 AND sel.STREAM_ELEMENT_DATE > cp_trx_date;
5816
5817 l_stream_type_id NUMBER;
5818 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
5819
5820 -- sechawla 05-dec-07 6057301 - Added
5821 lx_rep_product_id OKL_PRODUCTS_V.ID%TYPE;
5822 l_api_version NUMBER := 1;
5823 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
5824 l_msg_count NUMBER;
5825 l_msg_data VARCHAR2(100);
5826 BEGIN
5827 -- SECHAWLA 05-MAY-04 3578894 : Validate additional parameters availability
5828 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
5829 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
5830 LOOP
5831 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
5832 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
5833 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
5834 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
5835 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
5836 l_trx_date := TO_DATE(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
5837 END IF;
5838 END LOOP;
5839 ELSE
5840
5841 l_rep_prod_streams_yn := 'N';
5842
5843 END IF;
5844
5845 -- sechawla 05-dec-07 6671849 : START
5846 IF l_rep_prod_streams_yn = 'Y' THEN
5847
5848 get_reporting_product(
5849 p_api_version => l_api_version,
5850 p_init_msg_list => OKC_API.G_FALSE,
5851 x_return_status => l_return_status,
5852 x_msg_count => l_msg_count,
5853 x_msg_data => l_msg_data,
5854 p_contract_id => p_contract_id,
5855 x_rep_product_id => lx_rep_product_id);
5856
5857
5858 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
5859 p_product_id => lx_rep_product_id,
5860 p_primary_sty_purpose => 'RENT',
5861 p_dependent_sty_purpose => 'LEASE_INCOME',
5862 x_return_status => l_return_status,
5863 x_dependent_sty_id => l_stream_type_id);
5864 ELSE
5865 -- sechawla 05-dec-07 6671849 : END
5866
5867 --PAGARG 31-Dec-2004 Bug# 4097591 Start
5868 --UDS impact. Obtain stream type id and pass it to cursor
5869 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
5870 p_primary_sty_purpose => 'RENT',
5871 p_dependent_sty_purpose => 'LEASE_INCOME',
5872 x_return_status => l_return_status,
5873 x_dependent_sty_id => l_stream_type_id);
5874
5875 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5876 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5877 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5878 RAISE OKL_API.G_EXCEPTION_ERROR;
5879 END IF;
5880 --PAGARG 31-Dec-2004 Bug# 4097591 End
5881
5882 END IF; -- sechawla 05-dec-07 6671849 : added
5883
5884 IF l_rep_prod_streams_yn = 'Y' THEN
5885 IF l_trx_date IS NULL THEN
5886 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
5887 Okl_Api.Set_Message(p_app_name => g_app_name,
5888 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
5889 RAISE Okl_Api.G_EXCEPTION_ERROR;
5890 END IF;
5891 END IF;
5892
5893 --SECHAWLA 05-MAY-04 3578894 : check if streams required for reporting product
5894 IF l_rep_prod_streams_yn = 'Y' THEN
5895 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
5896 OPEN line_reporting_csr(p_contract_line_id, l_trx_date, l_stream_type_id);
5897 FETCH line_reporting_csr INTO l_unearned_income;
5898 CLOSE line_reporting_csr;
5899 ELSE
5900 -- SECHAWLA 05-MAY-04 3578894 : end new code
5901 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
5902 OPEN line_csr(p_contract_line_id, l_stream_type_id);
5903 FETCH line_csr INTO l_unearned_income;
5904 CLOSE line_csr;
5905 END IF;
5906
5907 --Code commented by rvaduri.
5908 /*
5909 OPEN l_str_type_csr ('UNEARNED INCOME');
5910 FETCH l_str_type_csr INTO l_stream_type_id;
5911 CLOSE l_str_type_csr;
5912
5913 okl_execute_formula_pub.g_additional_parameters(1).name := 'STREAM TYPE';
5914 okl_execute_formula_pub.g_additional_parameters(1).value := l_stream_type_id;
5915
5916 l_result_amount := line_unbilled_streams (p_contract_id, p_contract_line_id);
5917
5918 RETURN NVL (l_result_amount, 0);
5919 */
5920 RETURN NVL(l_unearned_income,0);
5921
5922 EXCEPTION
5923 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
5924 IF line_csr%ISOPEN THEN
5925 CLOSE line_csr;
5926 END IF;
5927
5928 IF line_reporting_csr%ISOPEN THEN
5929 CLOSE line_reporting_csr;
5930 END IF;
5931
5932 RETURN NULL;
5933
5934 WHEN OTHERS THEN
5935
5936 -- Close open cursors
5937
5938 IF line_csr%ISOPEN THEN
5939 CLOSE line_csr;
5940 END IF;
5941
5942 IF line_reporting_csr%ISOPEN THEN
5943 CLOSE line_reporting_csr;
5944 END IF;
5945
5946 -- store SQL error message on message stack for caller
5947
5948 OKL_API.SET_MESSAGE (
5949 p_app_name => OKL_API.G_APP_NAME,
5950 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
5951 p_token1 => 'SQLCODE',
5952 p_token1_value => SQLCODE,
5953 p_token2 => 'SQLERRM',
5954 p_token2_value => SQLERRM);
5955
5956 RETURN NULL;
5957
5958 END line_unearned_income;
5959
5960
5961 ------------------------------------------------------------------------------
5962 -- Start of Comments
5963 -- Created By: [email protected] - 24-APR-2002
5964 -- Function Name: line_calculate_fmv
5965 -- Description: Returns the fair market value for a given contract line
5966 -- using an hook to an external system.
5967 -- Just a shell for now
5968 -- Dependencies:
5969 -- Parameters: IN: p_contract_id, p_line_id
5970 -- OUT: amount
5971 -- Version: 1.0
5972 -- End of Commnets
5973 ------------------------------------------------------------------------------
5974
5975 FUNCTION line_calculate_fmv (
5976 p_contract_id IN NUMBER,
5977 p_contract_line_id IN NUMBER)
5978 RETURN NUMBER IS
5979 BEGIN
5980 RETURN 0;
5981 END line_calculate_fmv;
5982
5983 ------------------------------------------------------------------------------
5984 -- Start of Comments
5985 -- Created By: [email protected] - 24-APR-2002
5986 -- Function Name: line_calculate_residual_value
5987 -- Description: Returns the residual value for a given contract line
5988 -- using an hook to an external system.
5989 -- Just a shell for now
5990 -- Dependencies:
5991 -- Parameters: IN: p_contract_id, p_line_id
5992 -- OUT: amount
5993 -- Version: 1.0
5994 -- End of Commnets
5995 ------------------------------------------------------------------------------
5996
5997 FUNCTION line_calculate_residual_value (
5998 p_contract_id IN NUMBER,
5999 p_contract_line_id IN NUMBER)
6000 RETURN NUMBER IS
6001 BEGIN
6002 RETURN 0;
6003 END line_calculate_residual_value;
6004
6005 ---------------------------------------------
6006 -- CS Functions
6007 ---------------------------------------------
6008
6009 ----------------------------------------------------------------------------------------------------
6010
6011 -- Start of Comments
6012 -- Created By: Ranu Srivastava (rsrivast)
6013 -- Function Name contract_security_deposit
6014 -- Description: returns the security deposit for given contract
6015 -- Dependencies:
6016 -- Parameters: contract id,contract line id
6017 -- Version: 1.0
6018 -- End of Commnets
6019
6020 ----------------------------------------------------------------------------------------------------
6021
6022 FUNCTION contract_security_deposit( p_contract_id IN NUMBER
6023 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6024 IS
6025 l_security_deposit NUMBER := 0;
6026
6027 -- select changed to filter streams based on purpose instead of on type
6028 -- enhancement done for user defined streams impacts, bug 3924303
6029
6030 CURSOR C (p_contract_id NUMBER)
6031 IS
6032 SELECT NVL(SUM(sele.amount),0)
6033 FROM okl_strm_elements sele,
6034 okl_streams str,
6035 okl_strm_type_v sty
6036 WHERE sele.stm_id = str.id
6037 AND str.sty_id = sty.id
6038 AND UPPER(sty.stream_type_purpose) = 'SECURITY_DEPOSIT'
6039 AND str.say_code = 'CURR'
6040 --multigaap changes
6041 AND STR.ACTIVE_YN = 'Y'
6042 AND STR.PURPOSE_CODE IS NULL
6043 --end multigaap changes
6044 AND str.khr_id = p_contract_id;
6045
6046 BEGIN
6047
6048 OPEN C (p_contract_id);
6049 FETCH C INTO l_security_deposit;
6050 CLOSE C;
6051
6052 RETURN l_security_deposit;
6053 EXCEPTION
6054 WHEN OTHERS THEN
6055 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6056 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6057 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6058 p_token1 => 'OKL_SQLCODE',
6059 p_token1_value => SQLCODE,
6060 p_token2 => 'OKL_SQLERRM',
6061 p_token2_value => SQLERRM);
6062 RETURN NULL;
6063
6064 END;
6065
6066 ----------------------------------------------------------------------------------------------------
6067
6068 -- Start of Comments
6069 -- Created By: Ranu Srivastava (rsrivast)
6070 -- Function Name contract_residual_amount
6071 -- Description: returns the residual value for given contract
6072 -- Dependencies:
6073 -- Parameters: contract id,contract line id
6074 -- Version: 1.0
6075 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract residual amount for line
6076 -- 27-Oct-04 PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
6077 -- End of Commnets
6078 ----------------------------------------------------------------------------------------------------
6079
6080 FUNCTION contract_residual_amount( p_contract_id IN NUMBER
6081 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6082 IS
6083 l_residual_value NUMBER := 0;
6084
6085 CURSOR C (p_contract_id NUMBER)
6086
6087 IS
6088 SELECT NVL(SUM(RESIDUAL_VALUE),0)
6089 FROM okl_k_lines_full_v
6090 WHERE dnz_chr_id= p_contract_id
6091 AND sts_code <> 'TERMINATED';
6092
6093 --Commented this code by rvaduri for bug 3487920
6094 /*
6095 SELECT NVL(SUM(cs.amount),0)
6096 FROM okl_streams_v asv,okl_strm_type_v bs,
6097 okl_strm_elements_v cs,
6098 okl_streams str,
6099 okl_strm_type_v sty
6100 WHERE cs.stm_id = asv.id AND bs.id = asv.sty_id
6101 AND str.sty_id = sty.id
6102 AND UPPER(sty.name) = 'RESIDUAL VALUE'
6103 AND str.say_code = 'CURR'
6104 --multigaap changes
6105 AND STR.ACTIVE_YN = 'Y'
6106 AND STR.PURPOSE_CODE is NULL --end multigaap changes AND
6107 cs.stream_element_date >= SYSDATE AND
6108 asv.khr_id = p_contract_id; */
6109
6110 CURSOR line(p_contract_line_id NUMBER)
6111 IS
6112 SELECT NVL(RESIDUAL_VALUE,0)
6113 FROM okl_k_lines
6114 WHERE id = p_contract_line_id;
6115
6116
6117 BEGIN
6118 IF p_contract_line_id IS NOT NULL
6119 AND p_contract_line_id <> OKL_API.G_MISS_NUM THEN -- PAGARG bug#3974997 -- check for G_MISS when checking for NULL
6120 OPEN line (p_contract_line_id);
6121 FETCH line INTO l_residual_value;
6122 CLOSE line;
6123 ELSE
6124 OPEN C (p_contract_id);
6125 FETCH C INTO l_residual_value;
6126 CLOSE C;
6127 END IF;
6128 RETURN l_residual_value;
6129 EXCEPTION
6130 WHEN OTHERS THEN
6131 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6132 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6133 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6134 p_token1 => 'OKL_SQLCODE',
6135 p_token1_value => SQLCODE,
6136 p_token2 => 'OKL_SQLERRM',
6137 p_token2_value => SQLERRM);
6138 RETURN NULL;
6139
6140 END;
6141
6142 ----------------------------------------------------------------------------------------------------
6143
6144 -- Start of Comments
6145 -- Created By: Ranu Srivastava (rsrivast)
6146 -- Function Name contract_Rent_amount
6147 -- Description: returns the rent amount for given contract
6148 -- Dependencies:
6149 -- Parameters: contract id,contract line id
6150 -- Version: 1.0
6151 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract rent amount for line
6152 -- 27-Oct-04 PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
6153 -- 04-dec-08 sechawla : Updated curosr 'line', to query for stream type purpsoe instead of stream type,
6154 -- added p_contract_id parameter to cursor 'line'
6155 -- End of Commnets
6156 ----------------------------------------------------------------------------------------------------
6157
6158 FUNCTION contract_rent_amount( p_contract_id IN NUMBER
6159 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6160 IS
6161 l_rent_amount NUMBER := 0;
6162
6163 --Get all the future unbilled receivables for the contract.
6164
6165 -- select changed to filter streams based on purpose instead of on name
6166 -- enhancement done for user defined streams impacts, bug 3924303
6167
6168 CURSOR C (p_contract_id NUMBER)
6169 IS
6170 SELECT NVL(SUM(sele.amount),0)
6171 FROM okl_strm_elements sele,
6172 okl_streams str,
6173 okl_strm_type_v sty
6174 WHERE sele.stm_id = str.id
6175 AND str.sty_id = sty.id
6176 AND UPPER(sty.stream_type_purpose) = 'RENT'
6177 AND str.say_code = 'CURR'
6178 AND STR.ACTIVE_YN = 'Y'
6179 AND STR.PURPOSE_CODE IS NULL
6180 AND SELE.DATE_BILLED IS NULL
6181 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
6182 AND str.khr_id = p_contract_id;
6183
6184
6185 --Get all the future unbilled receivables for the line.
6186 CURSOR line (p_contract_id NUMBER, p_contract_line_id NUMBER) IS --sechawla 04-dec-08 : added p_contract_id
6187 SELECT NVL(SUM(sele.amount),0)
6188 FROM okl_strm_elements sele,
6189 okl_streams str,
6190 okl_strm_type_v sty
6191 WHERE sele.stm_id = str.id
6192 AND str.sty_id = sty.id
6193 --AND UPPER(sty.name) = 'RENT' --sechawla 04-dec-08 : remoevd
6194 AND UPPER(sty.stream_type_purpose) = 'RENT' --sechawla 04-dec-08 : added
6195 AND str.say_code = 'CURR'
6196 AND STR.ACTIVE_YN = 'Y'
6197 AND STR.PURPOSE_CODE IS NULL
6198 AND SELE.DATE_BILLED IS NULL
6199 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
6200 AND str.khr_id = p_contract_id --sechawla 04-dec-08 : added
6201 AND str.kle_id = p_contract_line_id;
6202 BEGIN
6203 IF p_contract_line_id IS NOT NULL
6204 AND p_contract_line_id <> OKL_API.G_MISS_NUM THEN -- PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
6205 OPEN line (p_contract_id, p_contract_line_id); --sechawla 04-dec-08 : added p_contract_id
6206 FETCH line INTO l_rent_amount;
6207 CLOSE line;
6208 ELSE
6209 OPEN C (p_contract_id);
6210 FETCH C INTO l_rent_amount;
6211 CLOSE C;
6212 END IF;
6213 RETURN l_rent_amount;
6214 EXCEPTION
6215 WHEN OTHERS THEN
6216 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6217 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6218 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6219 p_token1 => 'OKL_SQLCODE',
6220 p_token1_value => SQLCODE,
6221 p_token2 => 'OKL_SQLERRM',
6222 p_token2_value => SQLERRM);
6223 RETURN NULL;
6224
6225 END;
6226
6227 ----------------------------------------------------------------------------------------------------
6228
6229 -- Start of Comments
6230 -- Created By: Ranu Srivastava (rsrivast)
6231 -- Function Name contract_unearned_income
6232 -- Description: returns the security deposit for given contract
6233 -- Dependencies:
6234 -- Parameters: contract id,contract line id
6235 -- Version: 1.0
6236 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract unearned income for line
6237 -- 27-Oct-04 PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
6238 -- End of Commnets
6239 ----------------------------------------------------------------------------------------------------
6240
6241 FUNCTION contract_unearned_income( p_contract_id IN NUMBER
6242 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6243 IS
6244 l_unearned_income NUMBER := 0;
6245
6246 -- select changed to filter streams based on purpose 'LEASE_INCOME' instead of on type
6247 -- 'PRE-TAX INCOME', changes done for user defined streams impacts, bug 3924303
6248
6249 CURSOR C (p_contract_id NUMBER)
6250 IS
6251 SELECT NVL(SUM(sele.amount),0)
6252 FROM okl_strm_elements sele,
6253 --okl_streams str, MGAAP 7263041
6254 okl_streams_rep_v str,
6255 okl_strm_type_v sty
6256 WHERE sele.stm_id = str.id
6257 AND str.sty_id = sty.id
6258 AND UPPER(sty.stream_type_purpose) = 'LEASE_INCOME'
6259 AND str.say_code = 'CURR'
6260 AND STR.ACTIVE_YN = 'Y'
6261 AND (STR.PURPOSE_CODE IS NULL OR STR.PURPOSE_CODE='REPORT')
6262 AND (sele.accrued_yn IS NULL OR sele.accrued_yn = 'N')
6263 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
6264 AND str.khr_id = p_contract_id;
6265
6266 --Commented by rvaduri for bug 3536862
6267 /*
6268 SELECT NVL(SUM(sele.amount),0)
6269 FROM okl_strm_elements sele,
6270 okl_streams str,
6271 okl_strm_type_v sty
6272 WHERE sele.stm_id = str.id
6273 AND str.sty_id = sty.id
6274 AND UPPER(sty.name) = 'UNEARNED INCOME'
6275 AND str.say_code = 'CURR'
6276 --multigaap changes
6277 AND STR.ACTIVE_YN = 'Y'
6278 AND STR.PURPOSE_CODE IS NULL
6279 --end multigaap changes
6280 AND str.khr_id = p_contract_id;
6281 */
6282
6283 CURSOR line (p_contract_line_id NUMBER) IS
6284 SELECT NVL(SUM(sele.amount),0)
6285 FROM okl_strm_elements sele,
6286 --okl_streams str, MGAAP 7263041
6287 okl_streams_rep_v str,
6288 okl_strm_type_v sty
6289 WHERE sele.stm_id = str.id
6290 AND str.sty_id = sty.id
6291 AND UPPER(sty.name) = 'PRE-TAX INCOME'
6292 AND str.say_code = 'CURR'
6293 AND STR.ACTIVE_YN = 'Y'
6294 AND STR.PURPOSE_CODE IS NULL
6295 AND (sele.accrued_yn IS NULL OR sele.accrued_yn = 'N')
6296 AND SELE.STREAM_ELEMENT_DATE > SYSDATE
6297 AND str.kle_id = p_contract_line_id;
6298 --Commented by rvaduri for bug 3536862
6299 /*
6300 *
6301 SELECT NVL(SUM(sel.amount),0)
6302 FROM okl_strm_elements sel,
6303 okl_streams stm,
6304 okl_strm_type_v sty
6305 WHERE sty.name = 'PRE-TAX INCOME'
6306 AND stm.sty_id = sty.id
6307 AND stm.say_code = 'CURR'
6308 AND stm.active_yn = 'Y'
6309 AND stm.kle_id = p_contract_line_id
6310 AND sel.stm_id = stm.id
6311 AND sel.stream_element_date > SYSDATE;
6312 */
6313
6314 BEGIN
6315 IF p_contract_line_id IS NOT NULL
6316 AND p_contract_line_id <> OKL_API.G_MISS_NUM THEN -- PAGARG bug# 3974997 -- check for G_MISS when checking for NULL
6317 OPEN line (p_contract_line_id);
6318 FETCH line INTO l_unearned_income;
6319 CLOSE line;
6320 ELSE
6321 OPEN C (p_contract_id);
6322 FETCH C INTO l_unearned_income;
6323 CLOSE C;
6324 END IF;
6325 RETURN l_unearned_income;
6326 EXCEPTION
6327 WHEN OTHERS THEN
6328 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6329 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6330 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6331 p_token1 => 'OKL_SQLCODE',
6332 p_token1_value => SQLCODE,
6333 p_token2 => 'OKL_SQLERRM',
6334 p_token2_value => SQLERRM);
6335 RETURN NULL;
6336
6337 END;
6338
6339 ----------------------------------------------------------------------------------------------------
6340
6341 -- Start of Comments
6342 -- Created By: Ranu Srivastava (rsrivast)
6343 -- Function Name contract_depriciation_amount
6344 -- Description: returns the depriciation amount for given contract
6345 -- Dependencies:
6346 -- Parameters: contract id,contract line id
6347 -- Version: 1.0
6348 -- End of Commnets
6349
6350 ----------------------------------------------------------------------------------------------------
6351
6352 FUNCTION contract_depriciation_amount( p_contract_id IN NUMBER
6353 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6354 IS
6355 /** NOTE: This Function is exactly the same as contract_acc_depreciation,
6356 * since the existing function code was wrong. Changed the code in pls
6357 * instead of changing the formula to use a different operand due to
6358 * operational issues of following up for getting the new operand seeded
6359 * Done for bug 3646679 */
6360
6361
6362 l_unearned_income NUMBER := 0;
6363 l_depreciation NUMBER := 0;
6364 l_depn_contract NUMBER := 0;
6365 l_converted_amount NUMBER := 0;
6366 p_return_status VARCHAR2(1);
6367 p_contract_start_date DATE;
6368 p_contract_currency okl_k_headers_full_v.currency_code%TYPE;
6369 p_currency_conversion_type okl_k_headers_full_v.currency_conversion_type%TYPE;
6370 p_currency_conversion_rate okl_k_headers_full_v.currency_conversion_rate%TYPE;
6371 p_currency_conversion_date okl_k_headers_full_v.currency_conversion_date%TYPE;
6372
6373 --Cursor to get the parent line id for a contract
6374 CURSOR parent_line_id_csr (p_contract_id NUMBER)
6375 IS
6376 SELECT line.id parent_line_id
6377 FROM okc_k_lines_b line
6378 ,okc_line_styles_v lse
6379 WHERE line.lse_id=lse.id
6380 AND lse.lty_code= 'FREE_FORM1'
6381 AND line.sts_code <> 'ABANDONED'
6382 AND dnz_chr_id = p_contract_id;
6383
6384
6385 -- line asset id and corporate book from FA
6386 CURSOR asset_details_csr(p_contract_line_id NUMBER)
6387 IS
6388 SELECT CORPORATE_BOOK, ASSET_ID
6389 FROM OKX_ASSET_LINES_V
6390 WHERE OKX_ASSET_LINES_V.PARENT_LINE_ID = p_contract_line_id;
6391
6392 -- total depreciation for the corporate book from FA
6393 CURSOR deprn_details_csr(p_asset_id NUMBER, p_corporate_book_code VARCHAR2)
6394 IS
6395 SELECT NVL(SUM(deprn_amount), 0) deprn_amount
6396 FROM OKX_AST_DPRTNS_V
6397 WHERE Asset_id = p_asset_id
6398 AND book_type_code = p_corporate_book_code
6399 AND status = 'A'
6400 AND NVL(start_date_active,SYSDATE) <= SYSDATE
6401 AND NVL(end_date_active,SYSDATE + 1) > SYSDATE;
6402
6403
6404 -- contract start date
6405 CURSOR contract_start_date_csr(p_khr_id NUMBER)
6406 IS
6407 SELECT start_date FROM okc_k_headers_b
6408 WHERE id = p_khr_id;
6409
6410 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
6411
6412 BEGIN
6413
6414 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
6415
6416 -- calculate asset line level depreciation
6417 IF(p_contract_line_id IS NOT NULL) THEN
6418 FOR p_asset_details_csr IN asset_details_csr(p_contract_line_id)
6419 LOOP
6420 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
6421 p_asset_details_csr.CORPORATE_BOOK)
6422 LOOP
6423 l_depreciation := p_deprn_details_csr.deprn_amount;
6424 END LOOP;
6425
6426 END LOOP;
6427
6428
6429 -- convert amount into contract currency
6430 OPEN contract_start_date_csr(p_contract_id);
6431 FETCH contract_start_date_csr INTO p_contract_start_date;
6432 CLOSE contract_start_date_csr;
6433
6434 okl_accounting_util.convert_to_contract_currency(
6435 p_khr_id => p_contract_id,
6436 p_from_currency => NULL,
6437 p_transaction_date => p_contract_start_date,
6438 p_amount => l_depreciation,
6439 x_return_status => p_return_status,
6440 x_contract_currency => p_contract_currency,
6441 x_currency_conversion_type => p_currency_conversion_type,
6442 x_currency_conversion_rate => p_currency_conversion_rate,
6443 x_currency_conversion_date => p_currency_conversion_date,
6444 x_converted_amount => l_converted_amount);
6445
6446 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6447 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6448 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6449 RAISE Okl_Api.G_EXCEPTION_ERROR;
6450 END IF;
6451
6452 RETURN l_converted_amount;
6453
6454 ELSE
6455 FOR p_parent_line_id_csr IN parent_line_id_csr(p_contract_id) LOOP
6456 --Get the Parent_line_id based on the contract id
6457 FOR p_asset_details_csr IN asset_details_csr(p_parent_line_id_csr.parent_line_id)
6458 LOOP
6459 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
6460 p_asset_details_csr.CORPORATE_BOOK)
6461 LOOP
6462 --Depreciation Amount from FA
6463 l_depreciation := p_deprn_details_csr.deprn_amount;
6464 END LOOP;
6465 END LOOP;
6466 l_depn_contract := l_depn_contract + l_depreciation;
6467 END LOOP;
6468 -- convert amount into contract currency
6469 OPEN contract_start_date_csr(p_contract_id);
6470 FETCH contract_start_date_csr INTO p_contract_start_date;
6471 CLOSE contract_start_date_csr;
6472
6473 okl_accounting_util.convert_to_contract_currency(
6474 p_khr_id => p_contract_id,
6475 p_from_currency => NULL,
6476 p_transaction_date => p_contract_start_date,
6477 p_amount => l_depn_contract,
6478 x_return_status => p_return_status,
6479 x_contract_currency => p_contract_currency,
6480 x_currency_conversion_type => p_currency_conversion_type,
6481 x_currency_conversion_rate => p_currency_conversion_rate,
6482 x_currency_conversion_date => p_currency_conversion_date,
6483 x_converted_amount => l_converted_amount);
6484
6485 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6486 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6487 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6488 RAISE Okl_Api.G_EXCEPTION_ERROR;
6489 END IF;
6490 RETURN l_converted_amount;
6491
6492 END IF;
6493
6494 EXCEPTION
6495 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6496 RETURN 0;
6497
6498 WHEN OTHERS THEN
6499 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6500 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6501 p_token1 => 'OKL_SQLCODE',
6502 p_token1_value => SQLCODE,
6503 p_token2 => 'OKL_SQLERRM',
6504 p_token2_value => SQLERRM);
6505 RETURN 0;
6506
6507 END contract_depriciation_amount;
6508
6509 ----------------------------------------------------------------------------------------------------
6510
6511 -- Start of Comments
6512 -- Created By: Ranu Srivastava (rsrivast)
6513 -- Function Name contract_principal_amount
6514 -- Description: returns the Principal amount for given contract
6515 -- Dependencies:
6516 -- Parameters: contract id,contract line id
6517 -- Version: 1.0
6518 -- End of Commnets
6519
6520 ----------------------------------------------------------------------------------------------------
6521
6522 FUNCTION contract_principal_amount( p_contract_id IN NUMBER
6523
6524 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6525 IS
6526 l_amount NUMBER := 0;
6527
6528 /*
6529 CURSOR c (p_contract_id NUMBER)
6530 IS
6531 SELECT NVL(cs.amount,0)
6532 FROM okl_streams_v asv,okl_strm_type_v bs,
6533 okl_strm_elements_v cs,
6534 okl_streams str,
6535 okl_strm_type_v sty,
6536 okc_k_headers_v okh
6537 WHERE cs.stm_id = asv.id AND bs.id = asv.sty_id
6538 AND str.sty_id = sty.id
6539 AND UPPER(sty.name) = 'PRINCIPAL BALANCE'
6540 AND str.say_code = 'CURR'
6541 --multigaap changes
6542 AND STR.ACTIVE_YN = 'Y'
6543 AND STR.PURPOSE_CODE is NULL
6544 --end multigaap changes
6545 AND cs.stream_element_date >= SYSDATE
6546 AND cs.stream_element_date BETWEEN okh.start_date AND okh.end_date
6547 AND asv.khr_id = okh.id
6548 AND asv.khr_id = p_contract_id;
6549 */
6550 -- query changed to filter streams based on purpose instead of on type
6551 -- changes done for user defined streams impacts, bug 3924303
6552
6553 CURSOR C (p_contract_id NUMBER)
6554 IS
6555 --It should be sum because we have to get the Principal balance on
6556 -- all the assets for the contract
6557 SELECT NVL(SUM(sel.amount),0)
6558 FROM okl_strm_elements sel,
6559 okl_streams stm,
6560 okl_strm_type_v sty
6561 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6562 AND stm.sty_id = sty.id
6563 AND stm.say_code = 'CURR'
6564 AND stm.active_yn = 'Y'
6565 AND stm.purpose_code IS NULL
6566 AND stm.khr_id = p_contract_id
6567 AND sel.stm_id = stm.id
6568 AND sel.stream_element_date =
6569 ( SELECT NVL(MAX(sel.stream_element_date), SYSDATE)
6570 FROM okl_strm_elements sel,okl_streams stm,
6571 okl_strm_type_v sty
6572 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6573 AND stm.sty_id = sty.id
6574 AND stm.say_code = 'CURR'
6575 AND stm.active_yn = 'Y'
6576 AND stm.purpose_code IS NULL
6577 AND stm.khr_id = p_contract_id
6578 AND sel.stm_id = stm.id
6579 AND sel.stream_element_date <= SYSDATE);
6580 BEGIN
6581
6582 OPEN C (p_contract_id);
6583 FETCH C INTO l_amount;
6584 CLOSE C;
6585
6586 RETURN l_amount;
6587 EXCEPTION
6588 WHEN OTHERS THEN
6589 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6590 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6591 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6592 p_token1 => 'OKL_SQLCODE',
6593 p_token1_value => SQLCODE,
6594 p_token2 => 'OKL_SQLERRM',
6595 p_token2_value => SQLERRM);
6596 RETURN NULL;
6597
6598 END;
6599
6600 --rkraya added
6601 ----------------------------------------------------------------------------------------------------
6602
6603 -- Start of Comments
6604 -- Created By: Reeshma Kuttiyat (rkuttiya/rkraya)
6605 -- Function Name: Unpaid Invoices
6606 -- Description: Function returns the sum of unpaid invoices for the asset line
6607 -- Dependencies:
6608 -- Parameters: contract id,contract line id
6609 -- Version: 1.0
6610 -- End of Commnets
6611
6612 ----------------------------------------------------------------------------------------------------
6613
6614 FUNCTION unpaid_invoices( p_contract_id IN NUMBER
6615 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6616 IS
6617 l_unpaid_inv NUMBER := 0;
6618 CURSOR c_unpaid_inv(p_contract_line_id IN NUMBER) IS
6619 SELECT SUM(APS.AMOUNT_DUE_REMAINING)
6620 FROM
6621 AR_PAYMENT_SCHEDULES_ALL APS,
6622 /*
6623 16-Aug-2007, ankushar Bug# 5499193
6624 start changes, modified the cursor to replace reference to okl_cnsld_ar_strms_b
6625 */
6626 okl_bpd_tld_ar_lines_v LSM,
6627 -- OKC_K_HEADERS_B CHR, commenting unused table, ankushar Bug# 5499193
6628 /* 16-Aug-2007 ankushar end changes */
6629 OKC_K_LINES_B CLE,
6630 OKC_LINE_STYLES_B LSE
6631 WHERE
6632 LSM.KLE_ID = p_contract_line_id
6633 AND LSM.CUSTOMER_TRX_ID = APS.CUSTOMER_TRX_ID
6634 AND APS.STATUS = 'OP'
6635 AND APS.CLASS IN ('INV')
6636 AND LSM.KLE_ID = CLE.CLE_ID
6637 AND CLE.LSE_ID = LSE.ID
6638 AND LSE.LTY_CODE = 'FIXED_ASSET';
6639
6640 BEGIN
6641
6642 OPEN c_unpaid_inv (p_contract_line_id);
6643 FETCH c_unpaid_inv INTO l_unpaid_inv;
6644 CLOSE c_unpaid_inv;
6645
6646 RETURN l_unpaid_inv;
6647 EXCEPTION
6648 WHEN OTHERS THEN
6649 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6650 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6651 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6652 p_token1 => 'OKL_SQLCODE',
6653 p_token1_value => SQLCODE,
6654 p_token2 => 'OKL_SQLERRM',
6655 p_token2_value => SQLERRM);
6656 RETURN NULL;
6657
6658 END;
6659
6660 ----------------------------------------------------------------------------------------------------
6661
6662 -- Start of Comments
6663 -- Created By: Reeshma Kuttiyat (rkuttiya/rkraya)
6664 -- Function Name: Unapplied Credit Memos
6665 -- Description: Function returns the sum of unapplied credit memos for the asset line
6666 -- Dependencies:
6667 -- Parameters: contract id,contract line id
6668 -- Version: 1.0
6669 -- End of Commnets
6670
6671 ----------------------------------------------------------------------------------------------------
6672
6673 FUNCTION unapplied_credit_memos( p_contract_id IN NUMBER
6674 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6675 IS
6676
6677 l_unapplied_credit NUMBER :=0;
6678 CURSOR c_unapplied_credit(p_contract_line_id IN NUMBER) IS
6679 SELECT SUM(APS.AMOUNT_DUE_REMAINING)
6680 FROM
6681 AR_PAYMENT_SCHEDULES_ALL APS,
6682 /*
6683 16-Aug-2007, ankushar Bug# 5499193
6684 start changes, modified the cursor to replace reference to okl_cnsld_ar_strms_b
6685 */
6686 okl_bpd_tld_ar_lines_v LSM,
6687 -- OKC_K_HEADERS_B CHR, commenting unused table, ankushar Bug# 5499193
6688 /* 16-Aug-2007 ankushar end changes */
6689 OKC_K_LINES_B CLE,
6690 OKC_LINE_STYLES_B LSE
6691 WHERE
6692 LSM.KLE_ID = p_contract_line_id
6693 AND LSM.CUSTOMER_TRX_ID = APS.CUSTOMER_TRX_ID
6694 AND APS.STATUS = 'OP'
6695 AND APS.CLASS IN ('CM')
6696 AND LSM.KLE_ID = CLE.CLE_ID
6697 AND CLE.LSE_ID = LSE.ID
6698 AND LSE.LTY_CODE = 'FIXED_ASSET';
6699
6700 BEGIN
6701
6702 OPEN c_unapplied_credit(p_contract_line_id);
6703 FETCH c_unapplied_credit INTO l_unapplied_credit;
6704 CLOSE c_unapplied_credit;
6705
6706 l_unapplied_credit := 0 - l_unapplied_credit;
6707
6708 RETURN l_unapplied_credit;
6709 EXCEPTION
6710 WHEN OTHERS THEN
6711 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
6712 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6713 p_msg_name => 'OKL_UNEXPECTED_ERROR',
6714 p_token1 => 'OKL_SQLCODE',
6715 p_token1_value => SQLCODE,
6716 p_token2 => 'OKL_SQLERRM',
6717 p_token2_value => SQLERRM);
6718 RETURN NULL;
6719
6720 END;
6721
6722
6723 ----------------------------------------------------------------------------------------------------
6724
6725 -- Start of Comments
6726 -- Created By: Ravikumar Vaduri
6727 -- Function Name contract_prin_balance
6728 -- Description: returns the Principal balance for given contract
6729 -- Dependencies:
6730 -- Parameters: contract id,contract line id
6731 -- the parameter Contract line id is not used for anything.
6732 -- Version: 1.0
6733 -- 20-Dec-02 rsrivast Added new cursor line to calculate contract principal balance for line
6734 -- 01-Dec-04 rmunjulu Modified to get quote id and from that the quote eff from date and use that
6735 -- End of Commnets
6736
6737 ----------------------------------------------------------------------------------------------------
6738 FUNCTION contract_prin_balance( p_contract_id IN NUMBER
6739 ,p_contract_line_id IN NUMBER) RETURN NUMBER
6740
6741 IS
6742 -- select changed to filter streams based on purpose instead of on type
6743 -- enhancement done for user defined streams impacts, bug 3924303
6744
6745 CURSOR C (p_contract_id NUMBER, p_date DATE) -- rmunjulu EDAT
6746 IS
6747 --It should be sum because we have to get the Principal balance on
6748 -- all the assets for the contract
6749 SELECT NVL(SUM(sel.amount),0)
6750 FROM okl_strm_elements sel,
6751 okl_streams stm,
6752 okl_strm_type_v sty
6753 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6754 AND stm.sty_id = sty.id
6755 AND stm.say_code = 'CURR'
6756 AND stm.active_yn = 'Y'
6757 AND stm.purpose_code IS NULL
6758 AND stm.khr_id = p_contract_id
6759 AND sel.stm_id = stm.id
6760 AND sel.stream_element_date =
6761 ( SELECT NVL(MAX(sel.stream_element_date), SYSDATE)
6762 FROM okl_strm_elements sel,okl_streams stm,
6763 okl_strm_type_v sty
6764 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6765 AND stm.sty_id = sty.id
6766 AND stm.say_code = 'CURR'
6767 AND stm.active_yn = 'Y'
6768 AND stm.purpose_code IS NULL
6769 AND stm.khr_id = p_contract_id
6770 AND sel.stm_id = stm.id
6771 AND sel.stream_element_date <= p_date); -- rmunjulu EDAT
6772
6773 -- select changed to filter streams based on purpose instead of on type
6774 -- enhancement done for user defined streams impacts, bug 3924303
6775
6776 CURSOR line (p_contract_line_id NUMBER, p_date DATE) IS
6777 SELECT NVL(sel.amount,0)
6778 FROM okl_strm_elements sel,
6779 okl_streams stm,
6780 okl_strm_type_v sty
6781 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6782 AND stm.sty_id = sty.id
6783 AND stm.say_code = 'CURR'
6784 AND stm.active_yn = 'Y'
6785 AND stm.purpose_code IS NULL
6786 AND stm.kle_id = p_contract_line_id
6787 AND sel.stm_id = stm.id
6788 AND sel.stream_element_date =
6789 ( SELECT NVL(MAX(sel.stream_element_date), SYSDATE)
6790 FROM okl_strm_elements sel,okl_streams stm,
6791 okl_strm_type_v sty
6792 WHERE sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
6793 AND stm.sty_id = sty.id
6794 AND stm.say_code = 'CURR'
6795 AND stm.active_yn = 'Y'
6796 AND stm.kle_id = p_contract_line_id
6797 AND stm.purpose_code IS NULL
6798 AND sel.stm_id = stm.id
6799 AND sel.stream_element_date <= p_date); -- rmunjulu EDAT
6800
6801 l_principal_balance NUMBER;
6802
6803 -- rmunjulu EDAT
6804 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
6805 SELECT trunc(qte.date_effective_from) date_effective_from
6806 FROM okl_trx_quotes_b qte
6807 WHERE qte.id = p_quote_id;
6808
6809 -- rmunjulu EDAT
6810 l_quote_id NUMBER;
6811 l_quote_date DATE;
6812 l_sysdate DATE;
6813
6814 BEGIN
6815
6816 -- rmunjulu EDAT Get additional parameter if found
6817 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
6818 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
6819 LOOP
6820 -- rmunjulu EDAT -- get quote id
6821 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_id' THEN
6822 l_quote_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
6823 END IF;
6824 END LOOP;
6825 END IF;
6826
6827 -- rmunjulu EDAT
6828 SELECT SYSDATE INTO l_sysdate FROM dual;
6829
6830 -- rmunjulu EDAT -- get eff date for quote
6831 IF l_quote_id IS NOT NULL
6832 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
6833
6834 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
6835 l_quote_date := get_quote_date_rec.date_effective_from;
6836 END LOOP;
6837
6838 END IF;
6839
6840 -- rmunjulu EDAT Default the l_quote_date to sysdate if quote id not found
6841 IF l_quote_date IS NULL
6842 OR l_quote_date = OKL_API.G_MISS_DATE THEN
6843 l_quote_date := l_sysdate;
6844 END IF;
6845
6846 IF p_contract_line_id IS NOT NULL THEN
6847 OPEN line (p_contract_line_id, l_quote_date); -- rmunjulu EDAT
6848 FETCH line INTO l_principal_balance;
6849 CLOSE line;
6850 ELSE
6851
6852 OPEN C(p_contract_id, l_quote_date); -- rmunjulu EDAT
6853 FETCH C INTO l_principal_balance;
6854 CLOSE C;
6855
6856 END IF;
6857
6858 RETURN l_principal_balance;
6859 END contract_prin_balance;
6860
6861 ----------------------------------------------------------------------------------------------------
6862
6863 -- Start of Comments
6864 -- Created By: Sridhar Moduga
6865 -- Function Name get_asset_subsidy_amount
6866 -- Description: returns the asset subsidy amount for given contract
6867 -- Dependencies:
6868 -- Parameters: contract id,accounting method
6869 --
6870 -- Version: 1.0
6871 --
6872 -- End of Comments
6873
6874 ----------------------------------------------------------------------------------------------------
6875 FUNCTION get_asset_subsidy_amount(
6876 p_contract_id IN NUMBER,
6877 p_accounting_method IN VARCHAR2)
6878 RETURN NUMBER IS
6879
6880 lx_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
6881 l_api_name CONSTANT VARCHAR2(30) := 'GET_ASSET_SUBSIDY';
6882 l_api_version CONSTANT NUMBER := 1.0;
6883 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
6884 lx_msg_count NUMBER := OKL_API.G_MISS_NUM;
6885 lx_msg_data VARCHAR2(2000);
6886
6887 x_subsidy_amount NUMBER;
6888
6889 l_asset_subsidy_amount NUMBER;
6890
6891 --cursor to fetch all the subsidies attached to financial asset
6892 --smoduga modified to set 0 when sub_kle.amount is null
6893 -- passing accounting method as input parameter
6894 CURSOR l_sub_csr(c_contract_id IN NUMBER,c_accounting_method IN VARCHAR2) IS
6895 SELECT NVL(SUM(NVL(sub_kle.subsidy_override_amount, sub_kle.amount)),0)
6896 FROM okl_subsidies_b subb,
6897 okl_k_lines sub_kle,
6898 okc_k_lines_b sub_cle,
6899 okc_line_styles_b sub_lse
6900 WHERE subb.id = sub_kle.subsidy_id
6901 AND subb.accounting_method_code = NVL(UPPER(c_accounting_method),subb.accounting_method_code)
6902 AND sub_kle.id = sub_cle.id
6903 AND sub_cle.lse_id = sub_lse.id
6904 AND sub_lse.lty_code = 'SUBSIDY'
6905 AND sub_cle.sts_code <> 'ABANDONED'
6906 AND sub_cle.dnz_chr_id = c_contract_id
6907 AND subb.customer_visible_yn = 'Y'
6908 ;
6909
6910 -- START: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6911 l_accounting_method okl_subsidies_b.accounting_method_code%TYPE;
6912 -- END: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6913 l_subsidy_cle_id NUMBER;
6914 BEGIN
6915
6916 l_asset_subsidy_amount := 0;
6917 -- START: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6918 IF(p_accounting_method = OKL_API.G_MISS_NUM OR p_accounting_method = OKL_API.G_MISS_CHAR) THEN
6919 l_accounting_method := NULL;
6920 END IF;
6921 -- END: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6922 --------------------------------------------------------------
6923 --get all the subsidies associated to asset and get amount
6924 --------------------------------------------------------------
6925 --smoduga added accountingmethod as in parameter
6926 -- OPEN l_sub_csr(p_contract_id , p_accounting_method);
6927 -- START: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6928 OPEN l_sub_csr(p_contract_id , l_accounting_method);
6929 -- END: cklee bug#4437995 if p_accounting_method has G_MISS then make it NULL
6930 LOOP
6931 FETCH l_sub_csr INTO l_asset_subsidy_amount;
6932 EXIT WHEN l_sub_csr%NOTFOUND;
6933 END LOOP;
6934 CLOSE l_sub_csr;
6935
6936 x_subsidy_amount := l_asset_subsidy_amount;
6937
6938 RETURN x_subsidy_amount;
6939
6940 EXCEPTION
6941 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6942 lx_return_status := OKL_API.HANDLE_EXCEPTIONS(
6943 l_api_name,
6944 G_PKG_NAME,
6945 'OKL_API.G_RET_STS_ERROR',
6946 lx_msg_count,
6947 lx_msg_data,
6948 '_PVT');
6949 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6950 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6951 l_api_name,
6952 G_PKG_NAME,
6953 'OKL_API.G_RET_STS_UNEXP_ERROR',
6954 lx_msg_count,
6955 lx_msg_data,
6956 '_PVT');
6957 WHEN OTHERS THEN
6958 IF l_sub_csr%ISOPEN THEN
6959 CLOSE l_sub_csr;
6960 END IF;
6961 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6962 l_api_name,
6963 G_PKG_NAME,
6964 'OTHERS',
6965 lx_msg_count,
6966 lx_msg_data,
6967 '_PVT');
6968
6969 END get_asset_subsidy_amount;
6970
6971
6972 ----------------------------------------------------------------------------------------------------
6973
6974 -- Start of Comments
6975 -- Created By: Ravikumar Vaduri
6976 -- Function Name contract_acc_depreciation
6977 -- Description: returns the acc depreciation for a contract from FA
6978 -- this function is used in calculation of NET INVESTMENT for
6979 -- OP LEASE
6980 -- Dependencies:
6981 -- Parameters: contract id,contract line id
6982 -- Version: 1.0
6983 -- 17-MAR-04 rvaduri Created the Function
6984 -- End of Commnets
6985
6986 ----------------------------------------------------------------------------------------------------
6987
6988 FUNCTION contract_acc_depreciation( p_contract_id IN NUMBER
6989 ,p_contract_line_id IN NUMBER)
6990 RETURN NUMBER IS
6991
6992 l_unearned_income NUMBER := 0;
6993 l_depreciation NUMBER := 0;
6994 l_depn_contract NUMBER := 0;
6995 l_converted_amount NUMBER := 0;
6996 p_return_status VARCHAR2(1);
6997 p_contract_start_date DATE;
6998 p_contract_currency okl_k_headers_full_v.currency_code%TYPE;
6999 p_currency_conversion_type okl_k_headers_full_v.currency_conversion_type%TYPE;
7000 p_currency_conversion_rate okl_k_headers_full_v.currency_conversion_rate%TYPE;
7001 p_currency_conversion_date okl_k_headers_full_v.currency_conversion_date%TYPE;
7002
7003 --Cursor to get the parent line id for a contract
7004 CURSOR parent_line_id_csr (p_contract_id NUMBER)
7005 IS
7006 SELECT line.id parent_line_id
7007 FROM okc_k_lines_b line
7008 ,okc_line_styles_v lse
7009 WHERE line.lse_id=lse.id
7010 AND lse.lty_code= 'FREE_FORM1'
7011 AND line.sts_code <> 'ABANDONED'
7012 AND dnz_chr_id = p_contract_id;
7013
7014
7015 -- line asset id and corporate book from FA
7016 CURSOR asset_details_csr(p_contract_line_id NUMBER)
7017 IS
7018 SELECT CORPORATE_BOOK, ASSET_ID
7019 FROM OKX_ASSET_LINES_V
7020 WHERE OKX_ASSET_LINES_V.PARENT_LINE_ID = p_contract_line_id;
7021
7022 -- total depreciation for the corporate book from FA
7023 CURSOR deprn_details_csr(p_asset_id NUMBER, p_corporate_book_code VARCHAR2)
7024 IS
7025 SELECT NVL(SUM(deprn_amount), 0) deprn_amount
7026 FROM OKX_AST_DPRTNS_V
7027 WHERE Asset_id = p_asset_id
7028 AND book_type_code = p_corporate_book_code
7029 AND status = 'A'
7030 AND NVL(start_date_active,SYSDATE) <= SYSDATE
7031 AND NVL(end_date_active,SYSDATE + 1) > SYSDATE;
7032
7033
7034 -- contract start date
7035 CURSOR contract_start_date_csr(p_khr_id NUMBER)
7036 IS
7037 SELECT start_date FROM okc_k_headers_b
7038 WHERE id = p_khr_id;
7039
7040 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
7041 BEGIN
7042
7043 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
7044 -- calculate asset line level depreciation
7045 IF(p_contract_line_id IS NOT NULL) THEN
7046 FOR p_asset_details_csr IN asset_details_csr(p_contract_line_id)
7047 LOOP
7048 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
7049 p_asset_details_csr.CORPORATE_BOOK)
7050 LOOP
7051 l_depreciation := p_deprn_details_csr.deprn_amount;
7052 END LOOP;
7053
7054 END LOOP;
7055
7056
7057 -- convert amount into contract currency
7058 OPEN contract_start_date_csr(p_contract_id);
7059 FETCH contract_start_date_csr INTO p_contract_start_date;
7060 CLOSE contract_start_date_csr;
7061
7062 okl_accounting_util.convert_to_contract_currency(
7063 p_khr_id => p_contract_id,
7064 p_from_currency => NULL,
7065 p_transaction_date => p_contract_start_date,
7066 p_amount => l_depreciation,
7067 x_return_status => p_return_status,
7068 x_contract_currency => p_contract_currency,
7069 x_currency_conversion_type => p_currency_conversion_type,
7070 x_currency_conversion_rate => p_currency_conversion_rate,
7071 x_currency_conversion_date => p_currency_conversion_date,
7072 x_converted_amount => l_converted_amount);
7073
7074 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7075 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
7076 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
7077 RAISE Okl_Api.G_EXCEPTION_ERROR;
7078 END IF;
7079
7080 RETURN l_converted_amount;
7081
7082 ELSE
7083 FOR p_parent_line_id_csr IN parent_line_id_csr(p_contract_id) LOOP
7084 --Get the Parent_line_id based on the contract id
7085 FOR p_asset_details_csr IN asset_details_csr(p_parent_line_id_csr.parent_line_id)
7086 LOOP
7087 FOR p_deprn_details_csr IN deprn_details_csr(p_asset_details_csr.ASSET_ID,
7088 p_asset_details_csr.CORPORATE_BOOK)
7089 LOOP
7090 --Depreciation Amount from FA
7091 l_depreciation := p_deprn_details_csr.deprn_amount;
7092 END LOOP;
7093 END LOOP;
7094 l_depn_contract := l_depn_contract + l_depreciation;
7095 END LOOP;
7096 -- convert amount into contract currency
7097 OPEN contract_start_date_csr(p_contract_id);
7098 FETCH contract_start_date_csr INTO p_contract_start_date;
7099 CLOSE contract_start_date_csr;
7100
7101 --rkuttiya modified for bug#4367682 changed l_depreciation to l_depn_contract
7102 okl_accounting_util.convert_to_contract_currency(
7103 p_khr_id => p_contract_id,
7104 p_from_currency => NULL,
7105 p_transaction_date => p_contract_start_date,
7106 p_amount => l_depn_contract,
7107 x_return_status => p_return_status,
7108 x_contract_currency => p_contract_currency,
7109 x_currency_conversion_type => p_currency_conversion_type,
7110 x_currency_conversion_rate => p_currency_conversion_rate,
7111 x_currency_conversion_date => p_currency_conversion_date,
7112 x_converted_amount => l_converted_amount);
7113
7114 IF(p_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7115 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
7116 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
7117 RAISE Okl_Api.G_EXCEPTION_ERROR;
7118 END IF;
7119 RETURN l_converted_amount;
7120
7121 END IF;
7122
7123 EXCEPTION
7124 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
7125 RETURN 0;
7126
7127 WHEN OTHERS THEN
7128 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
7129 p_msg_name => 'OKL_UNEXPECTED_ERROR',
7130 p_token1 => 'OKL_SQLCODE',
7131 p_token1_value => SQLCODE,
7132 p_token2 => 'OKL_SQLERRM',
7133 p_token2_value => SQLERRM);
7134 RETURN 0;
7135
7136 END contract_acc_depreciation;
7137
7138 ----------------------------------------------------------------------------------------------------
7139
7140 -- Start of Comments
7141 -- Created By: Ravikumar Vaduri
7142 -- Function Name pv_of_unbilled_rents
7143 -- Description: returns the Present value of Unbilled Rent for a contract
7144 -- this function is used in calculation of NET INVESTMENT for
7145 -- DF LEASE
7146 -- Dependencies:
7147 -- Parameters: contract id,contract line id
7148 -- Version: 1.0
7149 -- 17-MAR-04 rvaduri Created the Function
7150 -- End of Commnets
7151
7152 ----------------------------------------------------------------------------------------------------
7153
7154 FUNCTION pv_of_unbilled_rents(
7155 p_contract_id IN NUMBER
7156 ,p_contract_line_id IN NUMBER) RETURN NUMBER IS
7157
7158 l_api_name CONSTANT VARCHAR2(30) := 'PV_OF_UNBILLED_RENTS';
7159 l_api_version CONSTANT NUMBER := 1;
7160 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7161 x_msg_count NUMBER;
7162 x_msg_data VARCHAR2(256);
7163 l_cash_flow_tbl OKL_STREAM_GENERATOR_PVT.cash_flow_tbl;
7164 i NUMBER := 0;
7165 l_total_rent NUMBER := 0;
7166 l_rent NUMBER := 0;
7167 l_rate NUMBER := 0;
7168 x_pv_amount NUMBER := 0;
7169 l_due_date DATE;
7170 l_currency VARCHAR2(30);
7171 l_kle_id NUMBER := 0;
7172 l_slh_id NUMBER := 0;
7173 l_freq VARCHAR2(10);
7174
7175 -- select changed to filter streams based on purpose instead of on type
7176 -- enhancement done for user defined streams impacts, bug 3924303
7177
7178 CURSOR contract_unbilled_rent_csr(c_contract_id NUMBER)
7179 IS
7180 SELECT sel.amount rent
7181 ,sel.stream_element_date due_date
7182 ,stm.kle_id
7183 FROM okl_strm_elements sel,
7184 okl_streams stm,
7185 okl_strm_type_v sty
7186 WHERE sty.stream_type_purpose = 'RENT'
7187 AND stm.sty_id = sty.id
7188 AND stm.say_code = 'CURR'
7189 AND stm.active_yn = 'Y'
7190 AND stm.purpose_code IS NULL
7191 AND stm.khr_id = c_contract_id
7192 AND sel.stm_id = stm.id
7193 AND sel.date_billed IS NULL;
7194
7195
7196 -- select changed to filter streams based on purpose instead of on type
7197 -- enhancement done for user defined streams impacts, bug 3924303
7198
7199 CURSOR line_unbilled_rent_csr(c_contract_line_id NUMBER)
7200 IS
7201 SELECT sel.amount rent
7202 ,sel.stream_element_date due_date
7203 FROM okl_strm_elements sel,
7204 okl_streams stm,
7205 okl_strm_type_v sty
7206 WHERE sty.stream_type_purpose = 'RENT'
7207 AND stm.sty_id = sty.id
7208 AND stm.say_code = 'CURR'
7209 AND stm.active_yn = 'Y'
7210 AND stm.purpose_code IS NULL
7211 AND stm.kle_id = c_contract_line_id
7212 AND sel.stm_id = stm.id
7213 AND sel.date_billed IS NULL;
7214
7215
7216
7217 CURSOR c_get_rent_slh_id(c_line_id NUMBER,c_khr_id NUMBER)
7218 IS
7219 SELECT rl.id
7220 FROM okc_rule_groups_v rg,
7221 okc_rules_v rl
7222 WHERE rl.rgp_id = rg.id
7223 AND rl.dnz_chr_id = rg.dnz_chr_id
7224 AND rg.cle_id = c_line_id
7225 AND rg.rgd_code = 'LALEVL'
7226 AND rl.rule_information_category = 'LASLH'
7227 AND rl.dnz_chr_id = c_khr_id
7228 AND rl.object1_id1=(SELECT id FROM okl_strm_type_b WHERE code='RENT');
7229
7230 CURSOR c_get_freq(c_line_id NUMBER,c_khr_id NUMBER,c_rent_slh_id NUMBER)
7231 IS
7232 SELECT rl.object1_id1 frequency
7233 FROM okc_rule_groups_v rg,
7234 okc_rules_v rl
7235 WHERE rl.rgp_id = rg.id
7236 AND rl.dnz_chr_id = rg.dnz_chr_id
7237 AND rg.cle_id = c_line_id
7238 AND rg.rgd_code = 'LALEVL'
7239 AND rl.rule_information_category = 'LASLL'
7240 AND rl.dnz_chr_id = c_khr_id
7241 AND rl.object2_id1=c_rent_slh_id
7242 AND ROWNUM = 1;
7243
7244
7245 CURSOR contract_rate_csr (c_contract_id NUMBER)
7246 IS
7247 SELECT implicit_interest_rate
7248 FROM okl_k_headers
7249 WHERE id=c_contract_id;
7250
7251
7252 CURSOR k_curr_code (c_contract_id NUMBER)
7253 IS
7254 SELECT currency_code
7255 FROM okc_k_headers_b
7256 WHERE id=c_contract_id;
7257
7258
7259
7260 BEGIN
7261
7262 --Get the contract currency Code.
7263 OPEN k_curr_code(p_contract_id);
7264 FETCH k_curr_code INTO l_currency;
7265 CLOSE k_curr_code;
7266
7267 --Get the Interest Rate on the contract.
7268 OPEN contract_rate_csr(p_contract_id);
7269 FETCH contract_rate_csr INTO l_rate;
7270 CLOSE contract_rate_csr;
7271
7272 IF l_rate IS NULL THEN
7273 Okl_Api.set_message(p_app_name => G_APP_NAME,
7274 p_msg_name => G_REQUIRED_VALUE,
7275 p_token1 => G_COL_NAME_TOKEN,
7276 p_token1_value => 'RATE');
7277
7278 RAISE OKC_API.G_EXCEPTION_ERROR;
7279 END IF;
7280
7281 IF p_contract_line_id IS NOT NULL THEN
7282
7283 FOR cur_rec IN line_unbilled_rent_csr(p_contract_line_id) LOOP
7284 l_due_date := cur_rec.due_date;
7285 l_rent := cur_rec.rent;
7286
7287 IF l_due_date < SYSDATE THEN
7288 --The Due date is in the past, i.e no billing has been run
7289 --so the present value of the rent is the actual value
7290 --that is present in the streams table.
7291 l_total_rent := l_total_rent + l_rent;
7292 ELSE
7293 i := i + 1;
7294 --The Due date is in the future, so we have to calculate the
7295 --present value of the rent.
7296 OPEN c_get_rent_slh_id(p_contract_line_id,p_contract_id);
7297 FETCH c_get_rent_slh_id INTO l_slh_id;
7298 CLOSE c_get_rent_slh_id;
7299
7300
7301 OPEN c_get_freq(p_contract_line_id,p_contract_id,l_slh_id);
7302 FETCH c_get_freq INTO l_freq;
7303 CLOSE c_get_freq;
7304
7305
7306
7307 --Populate the pl/sql table for the calculation of PV of rent.
7308
7309 l_cash_flow_tbl(i).cf_date := l_due_date;
7310 l_cash_flow_tbl(i).cf_amount := l_rent;
7311 l_cash_flow_tbl(i).cf_frequency := l_freq;
7312 END IF;
7313 END LOOP;
7314 --Call the API that does the PV calculation.
7315
7316 IF l_cash_flow_tbl.COUNT > 0 THEN
7317 OKL_STREAM_GENERATOR_PVT.get_present_value(
7318 p_api_version => l_api_version,
7319 p_init_msg_list => OKL_API.G_TRUE,
7320 p_cash_flow_tbl => l_cash_flow_tbl,
7321 p_rate => l_rate,
7322 p_pv_date => SYSDATE,
7323 x_pv_amount => x_pv_amount,
7324 x_return_status => x_return_status,
7325 x_msg_count => x_msg_count,
7326 x_msg_data => x_msg_data);
7327
7328 IF (x_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
7329 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
7330 ELSIF (x_return_status = okl_api.G_RET_STS_ERROR) THEN
7331 RAISE okl_api.G_EXCEPTION_ERROR;
7332 END IF;
7333 END IF;
7334
7335 l_total_rent := l_total_rent + NVL(x_pv_amount,0);
7336
7337 ELSE
7338
7339 FOR cur_rec IN contract_unbilled_rent_csr(p_contract_id) LOOP
7340
7341 l_due_date := cur_rec.due_date;
7342 l_rent := cur_rec.rent;
7343 l_kle_id := cur_rec.kle_id;
7344 IF l_due_date < SYSDATE THEN
7345 --The Due date is in the past, i.e no billing has been run
7346 --so the present value of the rent is the actual value
7347 --that is present in the streams table.
7348 l_total_rent := l_total_rent + l_rent;
7349 ELSE
7350 i := i + 1;
7351 --The Due date is in the future, so we have to calculate the
7352 --present value of the rent.
7353 OPEN c_get_rent_slh_id(l_kle_id,p_contract_id);
7354 FETCH c_get_rent_slh_id INTO l_slh_id;
7355 CLOSE c_get_rent_slh_id;
7356
7357
7358 OPEN c_get_freq(l_kle_id,p_contract_id,l_slh_id);
7359 FETCH c_get_freq INTO l_freq;
7360 CLOSE c_get_freq;
7361
7362
7363 --Populate the pl/sql table for the calculation of PV of rent.
7364 l_cash_flow_tbl(i).cf_date := l_due_date;
7365 l_cash_flow_tbl(i).cf_amount := l_rent;
7366 l_cash_flow_tbl(i).cf_frequency := l_freq;
7367 END IF;
7368 END LOOP;
7369 --Call the API that does the PV calculation.
7370 IF l_cash_flow_tbl.COUNT > 0 THEN
7371 OKL_STREAM_GENERATOR_PVT.get_present_value(
7372 p_api_version => l_api_version,
7373 p_init_msg_list => OKL_API.G_TRUE,
7374 p_cash_flow_tbl => l_cash_flow_tbl,
7375 p_rate => l_rate,
7376 p_pv_date => SYSDATE,
7377 x_pv_amount => x_pv_amount,
7378 x_return_status => x_return_status,
7379 x_msg_count => x_msg_count,
7380 x_msg_data => x_msg_data);
7381
7382 IF (x_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
7383 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
7384 ELSIF (x_return_status = okl_api.G_RET_STS_ERROR) THEN
7385 RAISE okl_api.G_EXCEPTION_ERROR;
7386 END IF;
7387 END IF;
7388 l_total_rent := l_total_rent + NVL(x_pv_amount,0);
7389 END IF;
7390
7391 --Round the amount before returning it.
7392 RETURN OKL_ACCOUNTING_UTIL.round_amount(l_total_rent,l_currency);
7393
7394
7395 EXCEPTION
7396 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7397 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7398 l_api_name,
7399 G_PKG_NAME,
7400 'OKL_API.G_RET_STS_ERROR',
7401 x_msg_count,
7402 x_msg_data,
7403 '_PVT');
7404 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7405 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7406 l_api_name,
7407 G_PKG_NAME,
7408 'OKL_API.G_RET_STS_UNEXP_ERROR',
7409 x_msg_count,
7410 x_msg_data,
7411 '_PVT');
7412 WHEN OTHERS THEN
7413 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7414 l_api_name,
7415 G_PKG_NAME,
7416 'OTHERS',
7417 x_msg_count,
7418 x_msg_data,
7419 '_PVT');
7420 END pv_of_unbilled_rents;
7421
7422
7423 ---------------------------------------------
7424 -- End CS Functions
7425 ---------------------------------------------
7426
7427 -----------------------------------------------------------------------
7428 -- Functions By pdevaraj -start
7429 -----------------------------------------------------------------------
7430 -----------------------------------------------------------------------
7431 -- Start of Comments
7432 -- Created By: Punitharaj Devaraju (pdevaraj)
7433 -- Function Name: contract_net_investment
7434 -- Description: Get net investment for a contract.
7435 -- Dependencies: OKL_SEEDED_FUNCTIONS_PVT.contract_residual_value
7436 -- OKL_SEEDED_FUNCTIONS_PVT.contract_sum_of_rents
7437 -- OKL_SEEDED_FUNCTIONS_PVT.contract_income
7438 -- Parameters: contract id.
7439 -- Version: 1.0
7440 -- End of Commnets
7441 -----------------------------------------------------------------------
7442
7443 FUNCTION contract_net_investment
7444 (
7445 p_chr_id IN NUMBER
7446 ,p_line_id IN NUMBER
7447 )
7448 RETURN NUMBER IS
7449 l_api_version NUMBER;
7450 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7451 l_msg_count NUMBER;
7452 l_msg_data VARCHAR2(2000);
7453 l_rent NUMBER := 0;
7454 l_residual NUMBER := 0;
7455 l_income NUMBER := 0;
7456 l_net_investment NUMBER := 0;
7457
7458 BEGIN
7459
7460 -- Get Residual Value
7461 l_residual := Okl_Seeded_Functions_Pvt.contract_residual_value(p_chr_id => p_chr_id, p_line_id => NULL);
7462
7463 -- Get Rent
7464 l_rent := Okl_Seeded_Functions_Pvt.contract_sum_of_rents(p_chr_id, NULL);
7465
7466 -- Get Rent
7467 l_income := Okl_Seeded_Functions_Pvt.contract_income(p_chr_id, NULL);
7468
7469 -- Calculate Net Investment
7470 l_net_investment := l_rent + l_residual - l_income;
7471
7472 RETURN l_net_investment;
7473 EXCEPTION
7474 WHEN OTHERS THEN
7475 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7476 ,p_msg_name => G_UNEXPECTED_ERROR
7477 ,p_token1 => G_SQLCODE_TOKEN
7478 ,p_token1_value => SQLCODE
7479 ,p_token2 => G_SQLERRM_TOKEN
7480 ,p_token2_value => SQLERRM);
7481
7482 RETURN NULL;
7483 END contract_net_investment;
7484
7485 -----------------------------------------------------------------------
7486 -- Start of Comments
7487 -- Created By: Punitharaj Devaraju (pdevaraj)
7488 -- Function Name: contract_cures_in_possession
7489 -- Description: Get cures in possession a contract.
7490 -- Dependencies:
7491 -- Parameters: contract id.
7492 -- Version: 1.0
7493 -- End of Commnets
7494 -----------------------------------------------------------------------
7495 FUNCTION contract_cures_in_possession
7496 (
7497 p_chr_id IN NUMBER
7498 )
7499 RETURN NUMBER IS
7500 -- Cursor to get Cures in Possession
7501 CURSOR cures_in_possession_csr(p_chr_id IN NUMBER) IS
7502 SELECT NVL(SUM(amount),0)
7503 FROM OKL_CURE_PAYMENT_LINES
7504 WHERE chr_id = p_chr_id
7505 AND status = 'CURES_IN_POSSESSION'
7506 AND cured_flag = 'Y';
7507
7508 l_cures_in_possession NUMBER := 0;
7509
7510 BEGIN
7511
7512 OPEN cures_in_possession_csr(p_chr_id);
7513 FETCH cures_in_possession_csr INTO l_cures_in_possession;
7514 CLOSE cures_in_possession_csr;
7515
7516 RETURN l_cures_in_possession;
7517
7518 EXCEPTION
7519 WHEN OTHERS THEN
7520 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7521 ,p_msg_name => G_UNEXPECTED_ERROR
7522 ,p_token1 => G_SQLCODE_TOKEN
7523 ,p_token1_value => SQLCODE
7524 ,p_token2 => G_SQLERRM_TOKEN
7525
7526 ,p_token2_value => SQLERRM);
7527 RETURN NULL;
7528
7529 END contract_cures_in_possession;
7530
7531 -----------------------------------------------------------------------
7532 -- Start of Comments
7533 -- Created By: Punitharaj Devaraju (pdevaraj)
7534 -- Function Name: contract_outstanding_amount
7535 -- Description: Get contract outstanding amount.
7536 -- Dependencies:
7537 -- Parameters: contract id, contract line id.
7538 -- Version: 1.0
7539 -- End of Commnets
7540 -----------------------------------------------------------------------
7541 FUNCTION contract_outstanding_amount
7542 (
7543 p_chr_id IN NUMBER,
7544 p_line_id IN NUMBER
7545 )
7546
7547 RETURN NUMBER IS
7548 -- Cursor for outstanding amount
7549 -- Bug 5897792
7550 /*CURSOR outstanding_amount_csr (p_chr_id IN NUMBER) IS
7551 SELECT NVL(SUM(amount_due_remaining), 0)
7552 FROM okl_bpd_leasing_payment_trx_v
7553 WHERE contract_id = p_chr_id;*/
7554
7555 CURSOR outstanding_amount_csr (p_chr_id IN NUMBER) IS
7556 SELECT NVL(SUM(amount_due_remaining), 0)
7557 FROM okl_bpd_ar_inv_lines_v
7558 WHERE contract_id = p_chr_id;
7559
7560
7561 l_outstanding_amount NUMBER := 0;
7562
7563 BEGIN
7564
7565 OPEN outstanding_amount_csr (p_chr_id);
7566 FETCH outstanding_amount_csr INTO l_outstanding_amount;
7567 CLOSE outstanding_amount_csr;
7568
7569 RETURN l_outstanding_amount;
7570
7571 EXCEPTION
7572 WHEN OTHERS THEN
7573 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7574 ,p_msg_name => G_UNEXPECTED_ERROR
7575 ,p_token1 => G_SQLCODE_TOKEN
7576 ,p_token1_value => SQLCODE
7577 ,p_token2 => G_SQLERRM_TOKEN
7578 ,p_token2_value => SQLERRM);
7579 RETURN NULL;
7580
7581 END contract_outstanding_amount;
7582
7583 -----------------------------------------------------------------------
7584 -- Start of Comments
7585 -- Created By: Punitharaj Devaraju (pdevaraj)
7586 -- Function Name: contract_full_cure
7587 -- Description: Get full cure amount for a contract.
7588 -- Dependencies: OKL_SEEDED_FUNCTIONS_PVT.contract_rent_amount
7589 -- OKL_SEEDED_FUNCTIONS_PVT.contract_outstanding_amount
7590 -- OKL_SEEDED_FUNCTIONS_PVT.contract_cures_in_possession
7591 -- Parameters: contract id.
7592 -- Version: 1.0
7593 -- End of Commnets
7594 -----------------------------------------------------------------------
7595 FUNCTION contract_full_cure
7596 (
7597 p_chr_id IN NUMBER
7598 )
7599 RETURN NUMBER IS
7600 l_api_version NUMBER;
7601 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7602 l_msg_count NUMBER;
7603 l_msg_data VARCHAR2(2000);
7604 l_current_rent NUMBER;
7605 l_cures_in_possession NUMBER := 0;
7606 l_outstanding_amount NUMBER := 0;
7607 l_full_cure NUMBER := 0;
7608
7609 BEGIN
7610
7611 -- Get Current Rent
7612 l_current_rent := Okl_Seeded_Functions_Pvt.contract_rent_amount(p_chr_id, NULL);
7613
7614 -- Get Cures in Possession
7615 l_cures_in_possession := Okl_Seeded_Functions_Pvt.contract_cures_in_possession
7616 (p_chr_id);
7617
7618 l_outstanding_amount := Okl_Seeded_Functions_Pvt.contract_outstanding_amount
7619 ( p_chr_id
7620 ,NULL );
7621
7622 l_full_cure := l_outstanding_amount -
7623 l_current_rent -
7624 l_cures_in_possession;
7625
7626 RETURN l_full_cure;
7627
7628 EXCEPTION
7629 WHEN OTHERS THEN
7630 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7631 ,p_msg_name => G_UNEXPECTED_ERROR
7632 ,p_token1 => G_SQLCODE_TOKEN
7633 ,p_token1_value => SQLCODE
7634 ,p_token2 => G_SQLERRM_TOKEN
7635 ,p_token2_value => SQLERRM);
7636 RETURN NULL;
7637 END contract_full_cure;
7638
7639 -----------------------------------------------------------------------
7640 -- Start of Comments
7641 -- Created By: Punitharaj Devaraju (pdevaraj)
7642 -- Function Name: contract_interest_cure
7643 -- Description: Get interest cure amount for a contract.
7644 -- Dependencies: okl_contract_info.get_rule_value
7645 -- okl_contract_info_pvt.get_days_past_due
7646 -- Parameters: contract id.
7647 -- Version: 1.0
7648 -- End of Commnets
7649 -----------------------------------------------------------------------
7650 FUNCTION contract_interest_cure
7651 (
7652 p_chr_id IN NUMBER
7653 )
7654 RETURN NUMBER IS
7655 l_api_version NUMBER;
7656 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7657 l_msg_count NUMBER;
7658 l_msg_data VARCHAR2(2000);
7659 l_contract_rate NUMBER := 0.0;
7660 l_net_investment NUMBER := 0;
7661 l_interest_cure NUMBER := 0;
7662 l_current_date DATE := TRUNC(SYSDATE);
7663 l_days_past_due NUMBER := 0;
7664 l_last_due_date DATE;
7665 l_months_requiring_cure NUMBER := 0;
7666 l_value VARCHAR2(200);
7667 l_id1 VARCHAR2(40);
7668 l_id2 VARCHAR2(200);
7669
7670
7671 BEGIN
7672
7673 -- Get Net Investment
7674 l_net_investment := Okl_Seeded_Functions_Pvt.contract_net_investment
7675 (p_chr_id, NULL);
7676
7677 -- Get Contract rate from rule
7678 l_return_status := okl_contract_info.get_rule_value
7679 (
7680 p_contract_id => p_chr_id
7681 ,p_rule_group_code => 'COCURP'
7682 ,p_rule_code => 'COCURE'
7683 ,p_segment_number => 7
7684 ,x_id1 => l_id1
7685 ,x_id2 => l_id2
7686 ,x_value => l_value
7687 );
7688
7689 IF (l_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
7690 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
7691 ELSIF (l_return_status = okl_api.G_RET_STS_ERROR) THEN
7692 RAISE okl_api.G_EXCEPTION_ERROR;
7693 END IF;
7694
7695 l_contract_rate := ROUND(TO_NUMBER(l_value)/100, 3);
7696
7697 l_return_status := okl_contract_info.get_days_past_due
7698 ( p_chr_id
7699 ,l_days_past_due );
7700
7701 IF (l_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
7702 RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
7703 ELSIF (l_return_status = okl_api.G_RET_STS_ERROR) THEN
7704 RAISE okl_api.G_EXCEPTION_ERROR;
7705 END IF;
7706
7707 -- Get the furthest due date from current date
7708 -- when customer stopped paying
7709 l_last_due_date := l_current_date - l_days_past_due;
7710 l_months_requiring_cure :=
7711 FLOOR(MONTHS_BETWEEN(l_current_date,l_last_due_date));
7712
7713 l_interest_cure := (( l_net_investment * l_contract_rate )/12) *
7714 l_months_requiring_cure;
7715
7716 RETURN l_interest_cure;
7717
7718 EXCEPTION
7719 WHEN OTHERS THEN
7720 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7721 ,p_msg_name => G_UNEXPECTED_ERROR
7722 ,p_token1 => G_SQLCODE_TOKEN
7723 ,p_token1_value => SQLCODE
7724 ,p_token2 => G_SQLERRM_TOKEN
7725 ,p_token2_value => SQLERRM);
7726 RETURN NULL;
7727
7728 END contract_interest_cure;
7729
7730 ---------------------------------------------------------------------------
7731 -- FUNCTION get_unrefunded_cures
7732 ---------------------------------------------------------------------------
7733 FUNCTION get_unrefunded_cures(
7734 p_contract_id IN NUMBER,
7735 x_unrefunded_cures OUT NOCOPY NUMBER)
7736 RETURN VARCHAR2
7737 IS
7738
7739 -- Get unrefunded cures for a contract
7740 /*CURSOR unrefunded_cures_csr(p_contract_id NUMBER) IS
7741 SELECT SUM(amount)
7742 FROM OKL_cure_payment_lines_v
7743 WHERE chr_id = p_contract_id
7744 AND status = 'CURES_IN_POSSESSION'; */
7745
7746 l_unrefunded_cures NUMBER := 0;
7747 l_api_version NUMBER;
7748 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7749 l_msg_count NUMBER;
7750 l_msg_data VARCHAR2(2000);
7751
7752 BEGIN
7753
7754 --OPEN unrefunded_cures_csr(p_contract_id);
7755 --FETCH unrefunded_cures_csr INTO l_unrefunded_cures;
7756 --CLOSE unrefunded_cures_csr;
7757
7758 x_unrefunded_cures := l_unrefunded_cures;
7759
7760 RETURN l_return_status;
7761 EXCEPTION
7762 WHEN OTHERS THEN
7763 OKC_API.SET_MESSAGE( p_app_name => G_APP_NAME
7764 ,p_msg_name => G_UNEXPECTED_ERROR
7765 ,p_token1 => G_SQLCODE_TOKEN
7766 ,p_token1_value => SQLCODE
7767 ,p_token2 => G_SQLERRM_TOKEN
7768 ,p_token2_value => SQLERRM);
7769 l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
7770 RETURN(l_return_status);
7771
7772 END get_unrefunded_cures;
7773
7774 ---------------------------------------------------------------------------
7775 -- FUNCTION get_unrefunded_cures
7776 ---------------------------------------------------------------------------
7777 FUNCTION get_cured_status (p_contract_number IN NUMBER)
7778 RETURN VARCHAR2 IS
7779 CURSOR c_cured (p_chr_id NUMBER) IS
7780 SELECT 'Y'
7781 FROM OKL_CURE_PAYMENT_LINES
7782 WHERE EXISTS (SELECT 1
7783 FROM OKL_CURE_PAYMENT_LINES
7784 WHERE status = 'CURES_IN_POSSESSION'
7785 AND cured_flag = 'Y'
7786 AND chr_id = p_chr_id);
7787 ls_cured_flag VARCHAR2(1) := 'N';
7788 BEGIN
7789 OPEN c_cured(p_contract_number );
7790 FETCH c_cured INTO ls_cured_flag;
7791 IF(c_cured%NOTFOUND) THEN
7792 ls_cured_flag := 'N' ;
7793 CLOSE c_cured ;
7794 RETURN(ls_cured_flag);
7795 END IF ;
7796 CLOSE c_cured;
7797 RETURN(ls_cured_flag);
7798 END get_cured_status;
7799
7800 -----------------------------------------------------------------------
7801 -- Functions By pdevaraj -end
7802 -----------------------------------------------------------------------
7803
7804 ----------------------------------------------------------------------------------------------------
7805
7806 -- Start of Comments
7807 -- Created By: Santhosh Siruvole (ssiruvol)
7808 -- Function Name investor_account_amount
7809 -- Description: returns the investor account amount for the syndication.
7810 -- Dependencies:
7811 -- Parameters: contract id.
7812 -- Version: 1.0
7813 -- End of Commnets
7814
7815 ----------------------------------------------------------------------------------------------------
7816 FUNCTION investor_account_amount(
7817 p_chr_id IN NUMBER,
7818 p_line_id IN NUMBER) RETURN NUMBER IS
7819
7820 l_api_name CONSTANT VARCHAR2(30) := 'RETURN_CONTRACT_SUM_OF_RENTS';
7821 l_api_version CONSTANT NUMBER := 1;
7822 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7823 x_msg_count NUMBER;
7824 x_msg_data VARCHAR2(256);
7825
7826 l_inv_accnt_amnt NUMBER := 0;
7827 l_cap_amnt NUMBER := 0;
7828 l_pcnt_inv NUMBER := 0;
7829 l_stake_amnt NUMBER := 0;
7830
7831 CURSOR l_hdrrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
7832 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
7833 chrId NUMBER) IS
7834 SELECT crl.object1_id1,
7835 crl.RULE_INFORMATION1,
7836 crl.RULE_INFORMATION2,
7837 crl.RULE_INFORMATION3,
7838 crl.RULE_INFORMATION4,
7839 crl.RULE_INFORMATION5,
7840 crl.RULE_INFORMATION6,
7841 crl.RULE_INFORMATION10,
7842 crl.RULE_INFORMATION11
7843 FROM OKC_RULE_GROUPS_B crg,
7844 OKC_RULES_B crl
7845 WHERE crl.rgp_id = crg.id
7846 AND crg.RGD_CODE = rgcode
7847 AND crl.RULE_INFORMATION_CATEGORY = rlcat
7848 AND crg.dnz_chr_id = chrId;
7849
7850 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
7851
7852 BEGIN
7853
7854 IF ( p_chr_id IS NULL ) THEN
7855 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7856 END IF;
7857
7858 l_cap_amnt := contract_oec( p_chr_id, NULL)
7859 - contract_tradein( p_chr_id, NULL)
7860 - contract_capital_reduction( p_chr_id, NULL)
7861 + contract_fees_capitalized( p_chr_id, NULL);
7862
7863 OPEN l_hdrrl_csr( 'LASYND', 'LASYST',p_chr_id );
7864 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
7865 CLOSE l_hdrrl_csr;
7866
7867 l_stake_amnt := TO_NUMBER(NVL( l_hdrrl_rec.RULE_INFORMATION1, 0.0));
7868 l_pcnt_inv := TO_NUMBER(NVL( l_hdrrl_rec.RULE_INFORMATION2, 0.0)) / 100.00;
7869 l_inv_accnt_amnt := l_stake_amnt - l_cap_amnt * l_pcnt_inv;
7870
7871 RETURN l_inv_accnt_amnt;
7872
7873 EXCEPTION
7874 WHEN OTHERS THEN
7875 Okl_Api.SET_MESSAGE(
7876 p_app_name => G_APP_NAME,
7877 p_msg_name => G_UNEXPECTED_ERROR,
7878 p_token1 => G_SQLCODE_TOKEN,
7879 p_token1_value => SQLCODE,
7880 p_token2 => G_SQLERRM_TOKEN,
7881 p_token2_value => SQLERRM);
7882 RETURN NULL;
7883
7884 END investor_account_amount;
7885
7886
7887 ----------------------------------------------------------------------------------------------------
7888
7889 -- Start of Comments
7890 -- Created By: Santhosh Siruvole (ssiruvol)
7891 -- Function Name contract_capitalized_interest
7892 -- Description: returns the total capitalized interest for the contract.
7893 -- Dependencies:
7894 -- Parameters: contract id.
7895 -- Version: 1.0
7896 -- End of Commnets
7897
7898 ----------------------------------------------------------------------------------------------------
7899 FUNCTION contract_capitalized_interest(
7900 p_chr_id IN NUMBER,
7901 p_line_id IN NUMBER) RETURN NUMBER IS
7902
7903 l_api_name CONSTANT VARCHAR2(256) := 'RETURN_CONTRACT_CAPITALIZED_INTEREST';
7904 l_api_version CONSTANT NUMBER := 1;
7905 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7906 x_msg_count NUMBER;
7907 x_msg_data VARCHAR2(256);
7908
7909 l_capz_int NUMBER := 0.0;
7910
7911 CURSOR capz_csr( chrId NUMBER ) IS
7912 SELECT NVL( SUM(kle.capitalized_interest), 0.0)
7913 FROM OKC_LINE_STYLES_B LS,
7914 OKL_K_LINES_FULL_V KLE,
7915 okc_statuses_b sts
7916 WHERE LS.ID = KLE.LSE_ID
7917 AND LS.LTY_CODE ='FREE_FORM1'
7918 AND KLE.DNZ_CHR_ID = chrId
7919 -- start: cklee 05/18/2004 fixed for bug#3625609
7920 AND KLE.sts_code = sts.code
7921 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
7922 -- end: cklee 05/18/2004 fixed for bug#3625609
7923
7924 -- Bug# 15992711 , Start
7925 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
7926 CURSOR capz_nr_csr( chrId NUMBER, p_line_type VARCHAR2) IS
7927 SELECT NVL( SUM(kle.capitalized_interest), 0.0)
7928 FROM OKC_LINE_STYLES_B LS,
7929 OKL_K_LINES_FULL_V KLE,
7930 okc_statuses_b sts
7931 WHERE LS.ID = KLE.LSE_ID
7932 AND LS.LTY_CODE ='FREE_FORM1'
7933 AND KLE.DNZ_CHR_ID = chrId
7934 AND KLE.sts_code = sts.code
7935 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
7936 AND NVL(KLE.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
7937
7938
7939 l_line_type VARCHAR2(30) := 'X';
7940 -- Bug# 15992711 , End
7941
7942
7943 BEGIN
7944
7945 IF ( p_chr_id IS NULL ) THEN
7946 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7947 END IF;
7948
7949 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
7950 -- If set then based on its value set l_line_type
7951
7952 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
7953 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
7954 LOOP
7955
7956 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
7957 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
7958 l_line_type := 'NEW'; --New
7959 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
7960 l_line_type := 'RELEASE'; --Release
7961 END IF;
7962 END IF;
7963
7964 END LOOP;
7965 END IF;
7966
7967 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
7968 -- capz_nr_csr cursor in order to consider either only new
7969 -- assets or only re-leased assets, else no change in the standard behavior
7970
7971 IF l_line_type IN ('NEW','RELEASE') THEN
7972 OPEN capz_nr_csr( p_chr_id, l_line_type );
7973 FETCH capz_nr_csr INTO l_capz_int;
7974 CLOSE capz_nr_csr;
7975 ELSE
7976 --Bug# 15992711, End
7977
7978 OPEN capz_csr( p_chr_id );
7979 FETCH capz_csr INTO l_capz_int;
7980 CLOSE capz_csr;
7981 --Bug# 15992711 , Start
7982 END IF;
7983 --Bug# 15992711 , End
7984
7985 RETURN l_capz_int;
7986
7987 EXCEPTION
7988
7989 WHEN OTHERS THEN
7990 Okl_Api.SET_MESSAGE(
7991 p_app_name => G_APP_NAME,
7992 p_msg_name => G_UNEXPECTED_ERROR,
7993 p_token1 => G_SQLCODE_TOKEN,
7994 p_token1_value => SQLCODE,
7995 p_token2 => G_SQLERRM_TOKEN,
7996 p_token2_value => SQLERRM);
7997 RETURN NULL;
7998
7999 END contract_capitalized_interest;
8000
8001 ----------------------------------------------------------------------------------------------------
8002
8003 -- Start of Comments
8004 -- Created By: Santhosh Siruvole (ssiruvol)
8005 -- Function Name line_capitalized_interest
8006 -- Description: returns the total capitalized interest for the contract.
8007 -- Dependencies:
8008 -- Parameters: contract id.
8009 -- Version: 1.0
8010 -- End of Commnets
8011
8012 ----------------------------------------------------------------------------------------------------
8013 FUNCTION line_capitalized_interest(
8014 p_chr_id IN NUMBER,
8015 p_line_id IN NUMBER) RETURN NUMBER IS
8016
8017 l_api_name CONSTANT VARCHAR2(256) := 'RETURN_CONTRACT_CAPITALIZED_INTEREST';
8018 l_api_version CONSTANT NUMBER := 1;
8019 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
8020 x_msg_count NUMBER;
8021 x_msg_data VARCHAR2(256);
8022
8023 l_capz_int NUMBER := 0.0;
8024
8025 CURSOR capz_csr( chrId NUMBER, kleId NUMBER ) IS
8026 SELECT NVL( kle.capitalized_interest, 0.0)
8027 FROM OKC_LINE_STYLES_B LS,
8028 OKL_K_LINES_FULL_V KLE
8029 WHERE LS.ID = KLE.LSE_ID
8030 AND LS.LTY_CODE ='FREE_FORM1'
8031 AND KLE.DNZ_CHR_ID = chrId
8032 AND KLE.id = kleId;
8033
8034 BEGIN
8035
8036 IF (( p_chr_id IS NULL ) OR ( p_line_id IS NULL ) ) THEN
8037 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8038 END IF;
8039
8040 OPEN capz_csr( p_chr_id, p_line_id );
8041 FETCH capz_csr INTO l_capz_int;
8042 CLOSE capz_csr;
8043
8044 RETURN l_capz_int;
8045
8046 EXCEPTION
8047
8048 WHEN OTHERS THEN
8049 Okl_Api.SET_MESSAGE(
8050 p_app_name => G_APP_NAME,
8051 p_msg_name => G_UNEXPECTED_ERROR,
8052 p_token1 => G_SQLCODE_TOKEN,
8053 p_token1_value => SQLCODE,
8054 p_token2 => G_SQLERRM_TOKEN,
8055 p_token2_value => SQLERRM);
8056 RETURN NULL;
8057
8058 END line_capitalized_interest;
8059
8060 ---------------------------------------------
8061 -- Functions for Securitization
8062 -- mvasudev, 04/02/2003
8063 ---------------------------------------------
8064
8065 FUNCTION ASSET_UNDISBURSED_STREAMS(p_dnz_chr_id IN NUMBER -- Lease Contract ID
8066 ,p_kle_id IN NUMBER -- Lease Contract-Asset ID
8067 )
8068 RETURN NUMBER
8069 IS
8070 CURSOR l_okl_inv_payment_event_csr(p_khr_id IN NUMBER)
8071 IS
8072 SELECT rulb.rule_information2 payment_event
8073 FROM okc_rules_b rulb
8074 ,okc_rule_groups_b rgpb
8075 WHERE rgpb.dnz_chr_id = p_khr_id
8076 AND rgpb.chr_id = p_khr_id
8077 AND rgpb.rgd_code = 'LASEIR'
8078 AND rgpb.id = rulb.rgp_id
8079 AND rulb.rule_information_category = 'LASEIR';
8080
8081 CURSOR l_okl_unbilled_streams_csr(p_dnz_chr_id IN NUMBER
8082 ,p_kle_id IN NUMBER
8083 ,p_sty_id IN NUMBER)
8084 IS
8085 SELECT NVL(SUM(selb.amount),0) total_amount
8086 FROM okl_strm_elements selb
8087 ,okl_streams stmb
8088 ,okl_pool_contents pocb
8089 ,okl_strm_type_v styv --ankushar --Bug 6594724
8090 ,okc_k_headers_b chrb --ankushar --Bug 6594724
8091 WHERE stmb.khr_id = p_dnz_chr_id
8092 AND stmb.kle_id = p_kle_id
8093 AND stmb.sty_id = p_sty_id
8094 AND selb.stm_id = stmb.id
8095 AND stmb.active_yn = 'Y'
8096 AND stmb.say_code = 'CURR'
8097 AND selb.date_billed IS NULL
8098 AND pocb.kle_id = p_kle_id
8099 AND pocb.sty_id = p_sty_id
8100 -- mvasudev, 03/30/2004
8101 AND pocb.status_Code = 'ACTIVE'
8102 /*
8103 ankushar --Bug 6594724: Unable to terminate Investor Agreement with Residual Streams
8104 Start changes
8105 */
8106 AND stmb.sty_id = styv.id
8107 AND pocb.khr_id = chrb.id
8108 AND(selb.stream_element_date > SYSDATE
8109 OR
8110 (styv.stream_type_subclass = 'RESIDUAL'
8111 and chrb.STS_CODE IN ('TERMINATED','EXPIRED')
8112 )
8113 )
8114 /* ankushar Bug 6594724
8115 End Changes
8116 */
8117 -- end, mvasudev, 03/30/2004
8118 AND (selb.stream_element_date BETWEEN pocb.streams_from_date
8119 AND NVL(pocb.streams_to_date,G_FINAL_DATE)
8120 );
8121
8122 CURSOR l_okl_unreceived_streams_csr(p_dnz_chr_id IN NUMBER
8123 ,p_kle_id IN NUMBER
8124 ,p_sty_id IN NUMBER)
8125 IS
8126 SELECT NVL(SUM(amount_due_original - amount_due_remaining),0) total_amount
8127 FROM okl_bpd_leasing_payment_trx_v
8128 WHERE contract_id = p_dnz_chr_id
8129 AND contract_line_id = p_kle_id
8130 AND stream_type_id = p_sty_id
8131 AND amount_due_original <> amount_due_remaining;
8132
8133 CURSOR l_okl_unbilled_strms_pndg_csr(p_dnz_chr_id IN NUMBER
8134 ,p_kle_id IN NUMBER
8135 ,p_sty_id IN NUMBER)
8136 IS
8137 SELECT NVL(SUM(selb.amount),0) total_amount
8138 FROM okl_strm_elements selb
8139 ,okl_streams stmb
8140 ,okl_pool_contents pocb
8141 WHERE stmb.khr_id = p_dnz_chr_id
8142 AND stmb.kle_id = p_kle_id
8143 AND stmb.sty_id = p_sty_id
8144 AND selb.stm_id = stmb.id
8145 AND stmb.active_yn = 'Y'
8146 AND stmb.say_code = 'CURR'
8147 AND selb.date_billed IS NULL
8148 AND pocb.kle_id = p_kle_id
8149 AND pocb.sty_id = p_sty_id
8150 AND pocb.status_code = 'PENDING'
8151 AND selb.stream_element_date > SYSDATE
8152 AND (selb.stream_element_date BETWEEN pocb.streams_from_date
8153 AND NVL(pocb.streams_to_date,G_FINAL_DATE) );
8154
8155 l_total_amount NUMBER := 0;
8156 l_khr_id NUMBER;
8157 l_sty_id NUMBER;
8158 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
8159
8160 BEGIN
8161
8162 --Validate additional parameters availability
8163 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
8164 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
8165 LOOP
8166 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_khr_id' THEN
8167 l_khr_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8168 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_sty_id' THEN
8169 l_sty_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8170 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
8171 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8172 END IF;
8173 END LOOP;
8174 ELSE
8175 Okl_Api.Set_Message(p_app_name => G_APP_NAME,
8176 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
8177 RAISE OKL_API.G_EXCEPTION_ERROR;
8178 END IF;
8179
8180 FOR l_okl_inv_payment_event_rec IN l_okl_inv_payment_event_csr(l_khr_id)
8181 LOOP
8182 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8183 FOR l_okl_unbilled_strms_pndg_rec IN l_okl_unbilled_strms_pndg_csr(p_dnz_chr_id,p_kle_id,l_sty_id)
8184 LOOP
8185 l_total_amount := l_total_amount + l_okl_unbilled_strms_pndg_rec.total_amount;
8186 END LOOP; -- unbilled streams for pending pool contents
8187 ELSE
8188 FOR l_okl_unbilled_streams_rec IN l_okl_unbilled_streams_csr(p_dnz_chr_id,p_kle_id,l_sty_id)
8189 LOOP
8190 l_total_amount := l_total_amount + l_okl_unbilled_streams_rec.total_amount;
8191 END LOOP; -- unbilled streams
8192 END IF;
8193
8194 IF l_okl_inv_payment_event_rec.payment_event = 'RECEIPT' THEN
8195 FOR l_okl_unreceived_streams_rec IN l_okl_unreceived_streams_csr(p_dnz_chr_id,p_kle_id,l_sty_id)
8196 LOOP
8197 l_total_amount := l_total_amount + l_okl_unreceived_streams_rec.total_amount;
8198 END LOOP; -- unreceived streams
8199 END IF;
8200
8201 END LOOP; -- payment basis
8202
8203 RETURN l_total_amount;
8204
8205 EXCEPTION
8206 WHEN OTHERS THEN
8207 IF l_okl_inv_payment_event_csr%ISOPEN THEN
8208 CLOSE l_okl_inv_payment_event_csr;
8209 END IF;
8210 IF l_okl_unbilled_streams_csr%ISOPEN THEN
8211 CLOSE l_okl_unbilled_streams_csr;
8212 END IF;
8213 IF l_okl_unreceived_streams_csr%ISOPEN THEN
8214 CLOSE l_okl_unreceived_streams_csr;
8215 END IF;
8216 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
8217 p_msg_name => G_UNEXPECTED_ERROR,
8218 p_token1 => G_SQLCODE_TOKEN,
8219 p_token1_value => SQLCODE,
8220 p_token2 => G_SQLERRM_TOKEN,
8221 p_token2_value => SQLERRM);
8222 RETURN NULL;
8223 END ASSET_UNDISBURSED_STREAMS;
8224
8225 -- mvasudev, 10/14/2003
8226 FUNCTION INVESTORS_PV_AMOUNT(p_chr_id IN NUMBER -- Investor Agreement ID
8227 ,p_line_id IN NUMBER)
8228 RETURN NUMBER
8229 IS
8230 -- mvasudev, 09/29/2004, Bug#3909240
8231 --Bug# 12557486: Added p_poc_sty_purpose to identify whether RENT, RESIDUAL_VALUE or
8232 -- LOAN_PAYMENT stream type purpose
8233 CURSOR l_okl_pv_amounts_csr(p_sty_purpose IN VARCHAR2, p_poc_sty_purpose IN VARCHAR2)
8234 IS
8235 SELECT NVL(SUM(selb.amount),0) total_amount
8236 FROM okl_strm_elements selb
8237 ,okl_streams stmb
8238 ,okl_strm_type_v styv
8239 ,okl_pool_contents pocb
8240 ,okl_strm_type_v styv1
8241 WHERE stmb.source_id = p_chr_id
8242 AND styv.stream_type_purpose = p_sty_purpose
8243 AND stmb.sty_id = styv.id
8244 AND selb.stm_id = stmb.id
8245 AND stmb.active_yn = 'Y'
8246 AND stmb.say_code = 'CURR'
8247 AND pocb.status_code <> 'PENDING'
8248 AND pocb.khr_id = stmb.khr_id
8249 AND pocb.kle_id = stmb.kle_id
8250 AND pocb.sty_code = styv1.code
8251 AND styv1.stream_type_purpose = p_poc_sty_purpose;
8252
8253 --Bug# 12557486: Added p_poc_sty_purpose to identify whether RENT, RESIDUAL_VALUE or
8254 -- LOAN_PAYMENT stream type purpose
8255 CURSOR l_okl_pv_amounts_pending_csr(p_sty_purpose IN VARCHAR2, p_poc_sty_purpose IN VARCHAR2)
8256 IS
8257 SELECT NVL(SUM(selb.amount),0) total_amount
8258 FROM okl_strm_elements selb
8259 ,okl_streams stmb
8260 ,okl_strm_type_v styv
8261 ,okl_pool_contents pocb
8262 ,okl_strm_type_v styv1
8263 WHERE stmb.source_id = p_chr_id
8264 AND styv.stream_type_purpose = p_sty_purpose
8265 AND stmb.sty_id = styv.id
8266 AND selb.stm_id = stmb.id
8267 AND stmb.active_yn = 'Y'
8268 AND stmb.say_code = 'CURR'
8269 AND pocb.status_code = 'PENDING'
8270 AND pocb.khr_id = stmb.khr_id
8271 AND pocb.kle_id = stmb.kle_id
8272 AND pocb.sty_code = styv1.code
8273 AND styv1.stream_type_purpose = p_poc_sty_purpose;
8274
8275 /* fmiao , 09/6/2005 , Bug#4561645
8276 cursor change for stream_type_subclass filtering
8277 */
8278 CURSOR l_okl_percent_stake_csr(p_sty_subclass IN VARCHAR2)
8279 IS
8280 SELECT DISTINCT kleb.percent_stake,clet.id
8281 FROM okl_k_lines kleb,
8282 okc_k_lines_b clet,
8283 okc_k_lines_b cles
8284 WHERE kleb.id = cles.id
8285 AND cles.cle_id = clet.id
8286 AND clet.dnz_chr_id = p_chr_id
8287 --AND kleb.sty_id = styb.id
8288 AND kleb.stream_type_subclass = p_sty_subclass;
8289
8290 l_total_amount NUMBER := 0;
8291 l_total_percent NUMBER := 0;
8292 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
8293
8294 --Bug# 12557486
8295 l_rent_sty_purpose okl_strm_type_b.stream_type_purpose%TYPE := 'RENT';
8296 l_residual_sty_purpose okl_strm_type_b.stream_type_purpose%TYPE := 'RESIDUAL_VALUE';
8297 l_loan_pymt_sty_purpose okl_strm_type_b.stream_type_purpose%TYPE := 'LOAN_PAYMENT';
8298
8299 BEGIN
8300
8301 l_total_percent := 0;
8302
8303 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
8304 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
8305 LOOP
8306 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
8307 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8308 END IF;
8309 END LOOP;
8310 END IF;
8311
8312 /* fmiao , 09/6/2005 , Bug#4561645
8313 change the stream_type_purpose PV_RENT_SECURITIZED and PV_RV_SECURITIZED
8314 */
8315 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8316 --Bug# 12557486
8317 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_RENT_SECURITIZED', l_rent_sty_purpose)
8318 LOOP
8319 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
8320 LOOP
8321 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8322 END LOOP;
8323 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8324 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
8325 END IF;
8326 END LOOP; -- PV_RENT_SECURITIZED
8327 ELSE
8328 --Bug# 12557486
8329 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_RENT_SECURITIZED', l_rent_sty_purpose)
8330 LOOP
8331 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
8332 LOOP
8333 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8334 END LOOP;
8335 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8336 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
8337 END IF;
8338 END LOOP; -- PV_RENT_SECURITIZED
8339 END IF;
8340 l_total_percent := 0;
8341
8342 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8343 --Bug# 12557486
8344 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_RV_SECURITIZED', l_residual_sty_purpose)
8345 LOOP
8346 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
8347 LOOP
8348 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8349 END LOOP;
8350 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8351 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
8352 END IF;
8353 END LOOP; -- PV_RV_SECURITIZED
8354 ELSE
8355 --Bug# 12557486
8356 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_RV_SECURITIZED', l_residual_sty_purpose)
8357 LOOP
8358 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
8359 LOOP
8360 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8361 END LOOP;
8362 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8363 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
8364 END IF;
8365 END LOOP; -- PV_RV_SECURITIZED
8366 END IF;
8367 --Bug # 6740000 ssdeshpa Added for Addition of Loan Contract into the Pool
8368 --Calculate the PV Amount for Principal Sec of Loan Contracts
8369 l_total_percent := 0;
8370 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8371 --Bug# 12557486
8372 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_PRINCIPAL_SECURITIZED', l_loan_pymt_sty_purpose)
8373 LOOP
8374 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8375 LOOP
8376 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8377 END LOOP;
8378 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8379 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
8380 END IF;
8381 END LOOP; -- PV_PRINCIPAL_SECURITIZED
8382 ELSE
8383 --Bug# 12557486
8384 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_PRINCIPAL_SECURITIZED', l_loan_pymt_sty_purpose)
8385 LOOP
8386 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8387 LOOP
8388 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8389 END LOOP;
8390 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8391 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
8392 END IF;
8393 END LOOP; -- PV_PRINCIPAL_SECURITIZED
8394 END IF;
8395 --Calculate the PV Amount for Interest Sec of Loan Contracts
8396 l_total_percent := 0;
8397 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8398 --Bug# 12557486
8399 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_INTEREST_SECURITIZED', l_loan_pymt_sty_purpose)
8400 LOOP
8401 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8402 LOOP
8403 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8404 END LOOP;
8405 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8406 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
8407 END IF;
8408 END LOOP; -- PV_INTEREST_SECURITIZED
8409 ELSE
8410 --Bug# 12557486
8411 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_INTEREST_SECURITIZED', l_loan_pymt_sty_purpose)
8412 LOOP
8413 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8414 LOOP
8415 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8416 END LOOP;
8417 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8418 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
8419 END IF;
8420 END LOOP; -- PV_INTEREST_SECURITIZED
8421 END IF;
8422 --Calculate the PV Value for Unscheduled Principal Paydown(PPD) Payment
8423 l_total_percent := 0;
8424 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8425 --Bug# 12557486
8426 FOR l_okl_pv_amounts_pending_rec IN l_okl_pv_amounts_pending_csr('PV_UNSCHEDULED_PMT_SECURITIZED', l_loan_pymt_sty_purpose)
8427 LOOP
8428 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8429 LOOP
8430 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8431 END LOOP;
8432 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8433 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_pending_rec.total_amount;
8434 END IF;
8435 END LOOP; -- PV_UNSCHEDULED_PMT_SECURITIZED
8436 ELSE
8437 --Bug# 12557486
8438 FOR l_okl_pv_amounts_rec IN l_okl_pv_amounts_csr('PV_UNSCHEDULED_PMT_SECURITIZED', l_loan_pymt_sty_purpose)
8439 LOOP
8440 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8441 LOOP
8442 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8443 END LOOP;
8444 IF (l_total_percent >0 AND l_total_percent <=100) THEN
8445 l_total_amount := l_total_amount + (l_total_percent/100)*l_okl_pv_amounts_rec.total_amount;
8446 END IF;
8447 END LOOP; -- PV_UNSCHEDULED_PMT_SECURITIZED
8448 END IF;
8449 --Bug # 6740000 ssdeshpa Added for Addition of Loan Contract into the Pool
8450
8451 RETURN l_total_amount;
8452
8453 EXCEPTION
8454 WHEN OTHERS THEN
8455 IF l_okl_pv_amounts_csr%ISOPEN THEN
8456 CLOSE l_okl_pv_amounts_csr;
8457 END IF;
8458 IF l_okl_pv_amounts_pending_csr%ISOPEN THEN
8459 CLOSE l_okl_pv_amounts_pending_csr;
8460 END IF;
8461 IF l_okl_percent_stake_csr%ISOPEN THEN
8462 CLOSE l_okl_percent_stake_csr;
8463 END IF;
8464
8465 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
8466 p_msg_name => G_UNEXPECTED_ERROR,
8467 p_token1 => G_SQLCODE_TOKEN,
8468 p_token1_value => SQLCODE,
8469 p_token2 => G_SQLERRM_TOKEN,
8470 p_token2_value => SQLERRM);
8471 RETURN NULL;
8472 END INVESTORS_PV_AMOUNT;
8473
8474
8475 ---------------------------------------------
8476 -- END,Functions for Securitization
8477 -- mvasudev, 04/02/2003
8478 ---------------------------------------------
8479
8480 -- 06/02/03 cklee start
8481 ----------------------------------------------------------------------------------
8482 -- Start of comments
8483 --
8484 -- Procedure Name : investor_rent_accural_amout
8485 -- Description : get total rent accural amount by associated agreement's pool contracts
8486 -- Business Rules :
8487 -- Parameters :
8488 -- Created By : chenkuang.lee
8489 -- last modified by: ssdeshpa
8490 -- Version : 2.0 modified to use Accrual Adjustment streams instead of Accrual streams
8491 -- : 3.0 modified for Addition of Loan Contract into the Pool
8492 -- End of comments
8493 ----------------------------------------------------------------------------------
8494 FUNCTION investor_rent_accural_amout(
8495 p_contract_id IN okc_k_headers_b.id%TYPE
8496 ,p_contract_line_id IN NUMBER
8497 ) RETURN NUMBER
8498 IS
8499
8500 l_rent_accrual NUMBER;
8501
8502 -- mvasudev, 09/29/2004, Bug#3909240
8503 CURSOR c_rent_accrual(p_contract_id okc_k_headers_b.id%TYPE) IS
8504 SELECT NVL(SUM(SELB.AMOUNT),0)
8505 FROM
8506 OKL_STREAMS STMB,
8507 OKL_STRM_ELEMENTS SELB,
8508 OKL_STRM_TYPE_V STYV
8509 WHERE STMB.ID = SELB.STM_ID
8510 AND STMB.STY_ID = STYV.ID
8511 AND STYV.STREAM_TYPE_PURPOSE IN ('INVESTOR_PRETAX_INCOME','INVESTOR_RENTAL_ACCRUAL','INVESTOR_INTEREST_INCOME')
8512 AND STMB.SAY_CODE = 'CURR'
8513 AND STMB.ACTIVE_YN = 'Y'
8514 AND EXISTS (SELECT 1
8515 FROM OKL_POOL_CONTENTS POC,
8516 OKL_POOLS POL,
8517 OKL_STRM_TYPE_V STYS
8518 WHERE POC.POL_ID = POL.ID
8519 AND POC.KHR_ID = STMB.KHR_ID
8520 AND POL.KHR_ID = P_CONTRACT_ID
8521 AND POC.STY_ID = STYS.ID
8522 AND STYS.STREAM_TYPE_SUBCLASS IN ('RENT','LOAN_PAYMENT') --Bug # 6740000 ssdeshpa--For Loan Contracts Addition into the Pool
8523 AND POC.status_code <> Okl_Pool_Pvt.G_POC_STS_PENDING --Added by VARANGAN -Pool Contents Impact(Bug#6658065)
8524 );
8525
8526 CURSOR c_rent_accrual_pending(p_contract_id okc_k_headers_b.id%TYPE) IS
8527 SELECT NVL(SUM(SELB.AMOUNT),0)
8528 FROM
8529 OKL_STREAMS STMB,
8530 OKL_STRM_ELEMENTS SELB,
8531 OKL_STRM_TYPE_V STYV
8532 WHERE STMB.ID = SELB.STM_ID
8533 AND STMB.STY_ID = STYV.ID
8534 AND STYV.STREAM_TYPE_PURPOSE IN ('INVESTOR_PRETAX_INCOME','INVESTOR_RENTAL_ACCRUAL','INVESTOR_INTEREST_INCOME')
8535 AND STMB.SAY_CODE = 'CURR'
8536 AND STMB.ACTIVE_YN = 'Y'
8537 AND EXISTS (SELECT 1 FROM OKL_POOL_CONTENTS POC,
8538 OKL_POOLS POL,
8539 OKL_STRM_TYPE_V STYS
8540 WHERE POC.POL_ID = POL.ID
8541 AND POC.KHR_ID = STMB.KHR_ID
8542 AND POL.KHR_ID = P_CONTRACT_ID
8543 AND POC.STY_ID = STYS.ID
8544 AND STYS.STREAM_TYPE_SUBCLASS IN ('RENT','LOAN_PAYMENT') --Bug # 6740000 ssdeshpa--For Loan Contracts Addition into the Pool
8545 AND POC.status_code = Okl_Pool_Pvt.G_POC_STS_PENDING);
8546
8547 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
8548
8549 BEGIN
8550 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
8551 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
8552 LOOP
8553 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
8554 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8555 END IF;
8556 END LOOP;
8557 END IF;
8558
8559 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8560 OPEN c_rent_accrual_pending (p_contract_id);
8561 FETCH c_rent_accrual_pending INTO l_rent_accrual;
8562 CLOSE c_rent_accrual_pending;
8563 ELSE
8564 OPEN c_rent_accrual (p_contract_id);
8565 FETCH c_rent_accrual INTO l_rent_accrual;
8566 CLOSE c_rent_accrual;
8567 END IF;
8568
8569 RETURN l_rent_accrual;
8570
8571 EXCEPTION
8572 WHEN OTHERS THEN
8573 --Bug # 6740000 ssdeshpa added Start
8574 IF c_rent_accrual_pending%ISOPEN THEN
8575 CLOSE c_rent_accrual_pending;
8576 END IF;
8577 IF c_rent_accrual%ISOPEN THEN
8578 CLOSE c_rent_accrual;
8579 END IF;
8580 --Bug # 6740000 ssdeshpa added End
8581 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
8582 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8583 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8584 p_token1 => 'OKL_SQLCODE',
8585 p_token1_value => SQLCODE,
8586 p_token2 => 'OKL_SQLERRM',
8587 p_token2_value => SQLERRM);
8588 RETURN NULL;
8589
8590 END investor_rent_accural_amout;
8591
8592 ----------------------------------------------------------------------------------
8593 -- Start of comments
8594 --
8595 -- Procedure Name : investor_user_amount_stake
8596 -- Description : get total investor stake by associated agreement from user enter amount
8597 -- Business Rules :
8598 -- Parameters :
8599 -- Created By : chenkuang.lee
8600 -- Version : 1.0
8601 -- End of comments
8602 ----------------------------------------------------------------------------------
8603 FUNCTION investor_user_amount_stake(
8604 p_contract_id IN okc_k_headers_b.id%TYPE
8605 ,p_contract_line_id IN NUMBER
8606 ) RETURN NUMBER
8607 IS
8608 l_amount NUMBER;
8609
8610 CURSOR c_amt_stake(p_contract_id okc_k_headers_b.id%TYPE) IS
8611 SELECT
8612 NVL(SUM(NVL(KLEB.AMOUNT,0)),0)
8613 FROM
8614 OKL_K_LINES KLEB,
8615 OKC_K_LINES_B CLEB,
8616 OKC_LINE_STYLES_B LSEB
8617 WHERE
8618 CLEB.ID = KLEB.ID AND
8619 CLEB.LSE_ID = LSEB.ID AND
8620 LSEB.LTY_CODE = 'INVESTMENT' AND
8621 CLEB.DNZ_CHR_ID = p_contract_id;
8622 -- akjain 01-28-2004
8623 -- modified the cursor to simplify the query, removed join with OKX_PARTY
8624
8625 CURSOR c_add_amt_stake(p_contract_id okc_k_headers_b.id%TYPE) IS
8626 SELECT
8627 NVL(SUM(NVL(KLEB.AMOUNT_STAKE,0)),0)
8628 FROM
8629 OKL_K_LINES KLEB,
8630 OKC_K_LINES_B CLEB,
8631 OKC_LINE_STYLES_B LSEB
8632 WHERE
8633 CLEB.ID = KLEB.ID AND
8634 CLEB.LSE_ID = LSEB.ID AND
8635 LSEB.LTY_CODE = 'INVESTMENT' AND
8636 CLEB.DNZ_CHR_ID = p_contract_id;
8637
8638 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
8639
8640 BEGIN
8641
8642 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
8643 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
8644 LOOP
8645 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
8646 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8647 END IF;
8648 END LOOP;
8649 END IF;
8650
8651 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8652 OPEN c_add_amt_stake (p_contract_id);
8653 FETCH c_add_amt_stake INTO l_amount;
8654 CLOSE c_add_amt_stake;
8655 ELSE
8656 OPEN c_amt_stake (p_contract_id);
8657 FETCH c_amt_stake INTO l_amount;
8658 CLOSE c_amt_stake;
8659 END IF;
8660
8661 RETURN l_amount;
8662
8663 EXCEPTION
8664 WHEN OTHERS THEN
8665 --Bug # 6740000 ssdeshpa added Start
8666 IF c_add_amt_stake%ISOPEN THEN
8667 CLOSE c_add_amt_stake;
8668 END IF;
8669 --Bug # 6740000 ssdeshpa added End
8670 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
8671 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8672 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8673 p_token1 => 'OKL_SQLCODE',
8674 p_token1_value => SQLCODE,
8675 p_token2 => 'OKL_SQLERRM',
8676 p_token2_value => SQLERRM);
8677 RETURN NULL;
8678
8679 END investor_user_amount_stake;
8680
8681 ----------------------------------------------------------------------------------
8682 -- Start of comments
8683 --
8684 -- Procedure Name : investor_stream_amount
8685 -- Description : get total investor stream amount by associated agreement's pool contents
8686 -- Business Rules :
8687 -- Parameters : p_contract_id
8688 -- Created By : chenkuang.lee
8689 -- last modified by: ssdeshpa
8690 -- Version : 2.0
8691 -- comments : modified for the subclass changes 01-28-2004
8692 -- returns : Total securitized streams amount * revenue share percent
8693 -- Version : 3.0
8694 -- comments : Bug # 6740000 modified for the Addition of Loan Contracts into the Pool changes
8695 -- End of comments
8696 ----------------------------------------------------------------------------------
8697 FUNCTION investor_stream_amount(
8698 p_contract_id IN okc_k_headers_b.id%TYPE
8699 ,p_contract_line_id IN NUMBER
8700 ) RETURN NUMBER
8701 IS
8702
8703 x_value NUMBER;
8704 l_pol_id okl_pools.id%TYPE;
8705 l_percent_stake NUMBER;
8706 G_FINAL_DATE CONSTANT DATE := TO_DATE('1','j') + 5300000;
8707
8708
8709 CURSOR l_khr_csr(p_khr_id okc_k_headers_b.id%TYPE) IS
8710 SELECT polb.id
8711 FROM okl_pools polb
8712 WHERE polb.khr_id = p_khr_id;
8713
8714 -- get revenue share by subclass
8715 CURSOR l_okl_percent_stake_csr(p_sty_subclass IN VARCHAR2)
8716 IS
8717 SELECT DISTINCT kleb.percent_stake,clet.id
8718 FROM okl_k_lines kleb,
8719 okc_k_lines_b clet,
8720 okc_k_lines_b cles
8721 WHERE kleb.id = cles.id
8722 AND cles.cle_id = clet.id
8723 AND clet.dnz_chr_id = p_contract_id
8724 AND kleb.stream_type_subclass = p_sty_subclass;
8725
8726 -- get pool streams amount by subclass
8727 CURSOR l_streams_amount_csr (p_pol_id NUMBER, p_stm_sub_class VARCHAR2)
8728 IS
8729 SELECT
8730 NVL(SUM(NVL(selb.AMOUNT,0)),0) AMOUNT
8731 FROM
8732 okl_strm_type_v styv,
8733 okl_streams stmb,
8734 okl_strm_elements selb,
8735 okl_pool_contents pocb
8736 WHERE styv.stream_type_subclass = p_stm_sub_class
8737 AND styv.id = stmb.sty_id
8738 AND stmb.id = selb.stm_id
8739 AND pocb.pol_id = p_pol_id
8740 AND stmb.ID = pocb.STM_ID
8741 AND stmb.say_code = 'CURR'
8742 AND stmb.active_yn = 'Y'
8743 AND selb.STREAM_ELEMENT_DATE
8744 BETWEEN pocb.STREAMS_FROM_DATE AND NVL(pocb.STREAMS_TO_DATE, G_FINAL_DATE)
8745 AND pocb.status_code <> Okl_Pool_Pvt.G_POC_STS_PENDING ; --Added by VARANGAN -Pool Contents Impact(Bug#6658065)
8746
8747 -- get pool streams amount by subclass
8748 CURSOR l_streams_amount_pending_csr (p_pol_id NUMBER, p_stm_sub_class VARCHAR2)
8749 IS
8750 SELECT
8751 NVL(SUM(NVL(selb.AMOUNT,0)),0) AMOUNT
8752 FROM
8753 okl_strm_type_v styv,
8754 okl_streams stmb,
8755 okl_strm_elements selb,
8756 okl_pool_contents pocb
8757 WHERE styv.stream_type_subclass = p_stm_sub_class
8758 AND styv.id = stmb.sty_id
8759 AND stmb.id = selb.stm_id
8760 AND pocb.pol_id = p_pol_id
8761 AND stmb.ID = pocb.STM_ID
8762 AND stmb.say_code = 'CURR'
8763 AND stmb.active_yn = 'Y'
8764 AND selb.STREAM_ELEMENT_DATE
8765 BETWEEN pocb.STREAMS_FROM_DATE AND NVL(pocb.STREAMS_TO_DATE, G_FINAL_DATE)
8766 AND pocb.status_code = Okl_Pool_Pvt.G_POC_STS_PENDING ;
8767
8768 l_total_percent NUMBER := 0;
8769 l_total_sec_amount NUMBER := 0;
8770 l_per_subclass_amount NUMBER := 0;
8771 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
8772
8773 BEGIN
8774
8775 FOR l_khr_csr_rec IN l_khr_csr(p_contract_id)
8776 LOOP
8777 l_pol_id := l_khr_csr_rec.id;
8778 END LOOP;
8779
8780 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
8781 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
8782 LOOP
8783 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
8784 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
8785 END IF;
8786 END LOOP;
8787 END IF;
8788
8789 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8790 FOR l_streams_amount_pending_rec IN l_streams_amount_pending_csr(l_pol_id, 'RENT')
8791 LOOP
8792 l_per_subclass_amount := l_streams_amount_pending_rec.amount;
8793 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
8794 LOOP
8795 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8796 END LOOP;
8797 END LOOP;
8798 ELSE
8799 FOR l_streams_amount_csr_rec IN l_streams_amount_csr(l_pol_id, 'RENT')
8800 LOOP
8801 l_per_subclass_amount := l_streams_amount_csr_rec.amount;
8802 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RENT')
8803 LOOP
8804 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8805 END LOOP;
8806 END LOOP;
8807 END IF;
8808 l_total_sec_amount := (l_total_percent/100) * l_per_subclass_amount;
8809 l_total_percent := 0;
8810 l_per_subclass_amount := 0;
8811
8812 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8813 FOR l_streams_amount_pending_rec IN l_streams_amount_pending_csr(l_pol_id, 'RESIDUAL')
8814 LOOP
8815 l_per_subclass_amount := l_streams_amount_pending_rec.amount;
8816 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
8817 LOOP
8818 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8819 END LOOP;
8820 END LOOP;
8821 ELSE
8822 FOR l_streams_amount_csr_rec IN l_streams_amount_csr(l_pol_id, 'RESIDUAL')
8823 LOOP
8824 l_per_subclass_amount := l_streams_amount_csr_rec.amount;
8825 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('RESIDUAL')
8826 LOOP
8827 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8828 END LOOP;
8829 END LOOP;
8830 END IF;
8831 --Bug # 6740000 Changes for Adding the Loan Contracts Into Pool
8832 l_total_sec_amount := l_total_sec_amount + ((l_total_percent/100) * l_per_subclass_amount);
8833 l_total_percent := 0;
8834 l_per_subclass_amount := 0;
8835
8836 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
8837 FOR l_streams_amount_pending_rec IN l_streams_amount_pending_csr(l_pol_id, 'LOAN_PAYMENT')
8838 LOOP
8839 l_per_subclass_amount := l_streams_amount_pending_rec.amount;
8840 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8841 LOOP
8842 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8843 END LOOP;
8844 END LOOP;
8845 ELSE
8846 FOR l_streams_amount_csr_rec IN l_streams_amount_csr(l_pol_id, 'LOAN_PAYMENT')
8847 LOOP
8848 l_per_subclass_amount := l_streams_amount_csr_rec.amount;
8849 FOR l_okl_percent_stake_rec IN l_okl_percent_stake_csr('LOAN_PAYMENT')
8850 LOOP
8851 l_total_percent := l_total_percent + l_okl_percent_stake_rec.percent_stake;
8852 END LOOP;
8853 END LOOP;
8854 END IF;
8855 l_total_sec_amount := l_total_sec_amount + ((l_total_percent/100) * l_per_subclass_amount);
8856 --Bug # 6740000 Changes for Adding the Loan Contracts Into Pool End
8857 x_value := l_total_sec_amount;
8858
8859 RETURN x_value;
8860
8861 EXCEPTION
8862 WHEN OTHERS THEN
8863 --Bug # 6740000 ssdeshpa added Start
8864 IF l_khr_csr%ISOPEN THEN
8865 CLOSE l_khr_csr;
8866 END IF;
8867 IF l_okl_percent_stake_csr%ISOPEN THEN
8868 CLOSE l_okl_percent_stake_csr;
8869 END IF;
8870 IF l_streams_amount_csr%ISOPEN THEN
8871 CLOSE l_streams_amount_csr;
8872 END IF;
8873 IF l_streams_amount_pending_csr%ISOPEN THEN
8874 CLOSE l_streams_amount_pending_csr;
8875 END IF;
8876 --Bug # 6740000 ssdeshpa added End
8877 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
8878 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8879 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8880 p_token1 => 'OKL_SQLCODE',
8881 p_token1_value => SQLCODE,
8882 p_token2 => 'OKL_SQLERRM',
8883 p_token2_value => SQLERRM);
8884 RETURN NULL;
8885
8886 END investor_stream_amount;
8887
8888
8889 ----------------------------------------------------------------------------------
8890 -- Start of comments
8891 --
8892 -- Procedure Name : fee_idc_amount
8893 -- Description : gets the sum of fee idc amount for a given contract
8894 -- Business Rules :
8895 -- Parameters :
8896 -- Created By : smereddy
8897 -- Version : 1.0
8898 -- End of comments
8899 ----------------------------------------------------------------------------------
8900 FUNCTION fee_idc_amount(
8901 p_dnz_chr_id IN NUMBER
8902 ,p_kle_id IN NUMBER
8903 ) RETURN NUMBER
8904 IS
8905
8906 l_sum_idc_amt NUMBER;
8907
8908 -- smereddy 06/17/03 calculates sum of fee idc
8909 CURSOR sum_idc_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
8910 SELECT
8911 NVL(SUM(NVL(KLEB.initial_direct_cost,0)),0)
8912 FROM
8913 OKL_K_LINES KLEB,
8914 OKC_K_LINES_B CLEB,
8915 OKC_LINE_STYLES_B LSEB
8916 WHERE
8917 KLEB.ID = CLEB.ID AND
8918 CLEB.LSE_ID = LSEB.ID AND
8919 LSEB.LTY_CODE = 'FEE' AND
8920 KLEB.FEE_TYPE IN ('EXPENSE','MISCELLANEOUS') AND
8921 CLEB.CHR_ID = l_dnz_chr_id AND
8922 CLEB.STS_CODE IN ('APPROVED', 'COMPLETE');
8923 -- added COMPLETE to resolve bug # 3152093
8924
8925 BEGIN
8926
8927 OPEN sum_idc_csr (p_dnz_chr_id);
8928 FETCH sum_idc_csr INTO l_sum_idc_amt;
8929 CLOSE sum_idc_csr;
8930
8931 RETURN l_sum_idc_amt;
8932
8933 EXCEPTION
8934 WHEN OTHERS THEN
8935 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
8936 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
8937 p_msg_name => 'OKL_UNEXPECTED_ERROR',
8938 p_token1 => 'OKL_SQLCODE',
8939 p_token1_value => SQLCODE,
8940 p_token2 => 'OKL_SQLERRM',
8941 p_token2_value => SQLERRM);
8942 RETURN NULL;
8943
8944 END fee_idc_amount;
8945
8946
8947 -- 09/05/03 jsanju start
8948 --for cure calculation
8949
8950 FUNCTION contract_delinquent_amt (
8951 p_contract_id IN okc_k_headers_b.id%TYPE
8952 ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
8953 ) RETURN NUMBER IS
8954
8955 -- ASHIM CHANGE - START
8956
8957 /*
8958 CURSOR c_amount_past_due(p_contract_id IN NUMBER,
8959 p_grace_days IN NUMBER) IS
8960 SELECT SUM(NVL(aps.amount_due_remaining, 0)) past_due_amount
8961 FROM okl_cnsld_ar_strms_b ocas
8962 ,ar_payment_schedules aps
8963 , okl_strm_type_v sm
8964 WHERE ocas.khr_id = p_contract_id
8965 AND ocas.receivables_invoice_id = aps.customer_trx_id
8966 AND aps.class ='INV'
8967 AND (aps.due_date + p_grace_days) < SYSDATE
8968 AND NVL(aps.amount_due_remaining, 0) > 0
8969 AND sm.id = ocas.STY_ID
8970 AND sm.name <> 'CURE';*/
8971
8972 CURSOR c_amount_past_due(p_contract_id IN NUMBER,
8973 p_grace_days IN NUMBER) IS
8974 SELECT SUM(NVL(aps.amount_due_remaining, 0)) past_due_amount
8975 FROM okl_bpd_tld_ar_lines_v ocas
8976 ,ar_payment_schedules aps
8977 , okl_strm_type_v sm
8978 WHERE ocas.khr_id = p_contract_id
8979 AND ocas.customer_trx_id = aps.customer_trx_id
8980 AND aps.class ='INV'
8981 AND (aps.due_date + p_grace_days) < SYSDATE
8982 AND NVL(aps.amount_due_remaining, 0) > 0
8983 AND sm.id = ocas.STY_ID
8984 AND sm.name <> 'CURE';
8985
8986 -- ASHIM CHANGE - END
8987
8988 l_contract_number okc_k_headers_b.contract_number%TYPE;
8989 l_rule_name VARCHAR2(200);
8990 l_rule_value VARCHAR2(2000);
8991 l_return_Status VARCHAR2(1):=FND_Api.G_RET_STS_SUCCESS;
8992 l_id1 VARCHAR2(40);
8993 l_id2 VARCHAR2(200);
8994 l_days_allowed NUMBER :=0;
8995 l_program_id okl_k_headers.khr_id%TYPE;
8996 l_delinquent_amount NUMBER :=0;
8997
8998
8999 BEGIN
9000 IF (G_DEBUG_ENABLED = 'Y') THEN
9001 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
9002 END IF;
9003
9004 SELECT khr_id INTO l_program_id
9005 FROM okl_k_headers
9006 WHERE id=p_contract_id;
9007
9008
9009 l_return_status := okl_contract_info.get_rule_value(
9010 p_contract_id => l_program_id
9011 ,p_rule_group_code => 'COCURP'
9012 ,p_rule_code => 'COCURE'
9013 ,p_segment_number => 3
9014 ,x_id1 => l_id1
9015 ,x_id2 => l_id2
9016 ,x_value => l_rule_value);
9017
9018 l_days_allowed :=NVL(l_rule_value,0);
9019
9020
9021
9022 -- Get Past Due Amount with maximium days allowed
9023 OPEN c_amount_past_due (p_contract_id,l_days_allowed);
9024 FETCH c_amount_past_due INTO l_delinquent_amount;
9025 CLOSE c_amount_past_due;
9026 RETURN l_delinquent_amount;
9027
9028 EXCEPTION
9029 WHEN OTHERS THEN
9030
9031 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
9032 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, ' in contract_delinquent_amt'||SQLERRM);
9033 END IF;
9034 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
9035 p_msg_name => 'OKL_UNEXPECTED_ERROR',
9036 p_token1 => 'OKL_SQLCODE',
9037 p_token1_value => SQLCODE,
9038 p_token2 => 'OKL_SQLERRM',
9039 p_token2_value => SQLERRM);
9040 RETURN l_delinquent_amount;
9041
9042 END contract_delinquent_amt;
9043
9044 FUNCTION cumulative_vendor_invoice_amt (
9045 p_contract_id IN okc_k_headers_b.id%TYPE
9046 ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
9047 ) RETURN NUMBER IS
9048
9049 CURSOR c_vendor_invoice_amt (p_contract_id IN NUMBER) IS
9050 SELECT NVL(SUM(negotiated_amount),0)
9051 FROM okl_cure_amounts
9052 WHERE chr_id =p_contract_id
9053 AND status ='CURESINPROGRESS';
9054
9055 l_vendor_invoice_amt NUMBER;
9056
9057 BEGIN
9058 OPEN c_vendor_invoice_amt(p_contract_id);
9059 FETCH c_vendor_invoice_amt INTO l_vendor_invoice_amt;
9060 CLOSE c_vendor_invoice_amt;
9061
9062 RETURN l_vendor_invoice_amt;
9063
9064 END cumulative_vendor_invoice_amt;
9065
9066
9067 FUNCTION contract_short_fund_amt (
9068 p_contract_id IN okc_k_headers_b.id%TYPE
9069 ,p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM
9070 ) RETURN NUMBER IS
9071
9072 CURSOR c_get_short_fund_amt (p_contract_id IN NUMBER) IS
9073 SELECT NVL(SUM(short_fund_amount),0)
9074 FROM okl_cure_amounts
9075 WHERE chr_id =p_contract_id
9076 AND status ='CURESINPROGRESS';
9077
9078 l_short_fund_amt NUMBER;
9079
9080 BEGIN
9081 OPEN c_get_short_fund_amt(p_contract_id);
9082 FETCH c_get_short_fund_amt INTO l_short_fund_amt;
9083 CLOSE c_get_short_fund_amt;
9084
9085 RETURN l_short_fund_amt;
9086
9087 END contract_short_fund_amt;
9088
9089 -- 09/05/03 jsanju end
9090
9091 ------------------------------------------
9092 --Bug# 3143522 avsingh : 11.5.10 Subsidies
9093 ------------------------------------------
9094 --Bug# 3638568 : Modified function to conditionally include terminated lines if called from pricing
9095 --------------------------------------------------------------------------------
9096 --start of comments
9097 --Name : line_discount
9098 --Purpose : To calculate total discount on a financial asset line
9099 --Parameters : IN - p_chr_id contract header id
9100 -- - p_line id financial asset line id
9101 -- Return : Total line discount
9102 -- History : 16-SEP-2003 avsingh Creation
9103 --end of comments
9104 --------------------------------------------------------------------------------
9105 FUNCTION line_discount(
9106 p_chr_id IN NUMBER,
9107 p_line_id IN NUMBER) RETURN NUMBER IS
9108
9109 l_api_version NUMBER DEFAULT 1.0;
9110 l_return_status VARCHAR2(1) DEFAULT Okl_Api.G_RET_STS_SUCCESS;
9111 l_msg_count NUMBER;
9112 l_msg_data VARCHAR2(2000);
9113
9114 l_line_discount NUMBER;
9115 l_discount NUMBER;
9116 l_discount_incl_terminated BOOLEAN := FALSE;
9117
9118 --cursor to get line_sts
9119 CURSOR l_line_sts_csr (p_cle_id IN NUMBER) IS
9120 SELECT stsb.ste_code
9121 FROM okc_statuses_b stsb,
9122 okc_k_lines_b cleb
9123 WHERE stsb.code = cleb.sts_code
9124 AND cleb.id = p_cle_id;
9125
9126 l_line_sts_rec l_line_sts_csr%ROWTYPE;
9127
9128 --cursor to get financial asset lines on a contract (without terminated lines)
9129 CURSOR l_cleb_csr (p_chr_id IN NUMBER) IS
9130 SELECT cleb.id
9131 FROM okc_k_lines_b cleb,
9132 okc_statuses_b stsb,
9133 okc_line_styles_b lseb
9134 WHERE cleb.chr_id = p_chr_id
9135 AND cleb.lse_id = lseb.id
9136 AND lseb.lty_code = 'FREE_FORM1'
9137 AND cleb.sts_code = stsb.code
9138 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED');
9139
9140 --cursor to get financial asset lines on a contract (with terminated lines)
9141 CURSOR l_cleb_termn_csr (p_chr_id IN NUMBER) IS
9142 SELECT cleb.id
9143 FROM okc_k_lines_b cleb,
9144 okc_statuses_b stsb,
9145 okc_line_styles_b lseb
9146 WHERE cleb.chr_id = p_chr_id
9147 AND cleb.lse_id = lseb.id
9148 AND lseb.lty_code = 'FREE_FORM1'
9149 AND cleb.sts_code = stsb.code
9150 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED');
9151
9152 --Bug# 15992711 , Start
9153 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
9154 CURSOR l_cleb_nr_csr (p_chr_id IN NUMBER, p_line_type VARCHAR2) IS
9155 SELECT cleb.id
9156 FROM okc_k_lines_b cleb,
9157 okc_statuses_b stsb,
9158 okc_line_styles_b lseb,
9159 okl_k_lines kle
9160 WHERE cleb.chr_id = p_chr_id
9161 AND cleb.lse_id = lseb.id
9162 AND lseb.lty_code = 'FREE_FORM1'
9163 AND cleb.sts_code = stsb.code
9164 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
9165 AND cleb.id = kle.id
9166 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
9167
9168 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
9169 CURSOR l_cleb_nr_termn_csr (p_chr_id IN NUMBER, p_line_type VARCHAR2) IS
9170 SELECT cleb.id
9171 FROM okc_k_lines_b cleb,
9172 okc_statuses_b stsb,
9173 okc_line_styles_b lseb,
9174 okl_k_lines kle
9175 WHERE cleb.chr_id = p_chr_id
9176 AND cleb.lse_id = lseb.id
9177 AND lseb.lty_code = 'FREE_FORM1'
9178 AND cleb.sts_code = stsb.code
9179 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED')
9180 AND cleb.id = kle.id
9181 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
9182
9183 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
9184 CURSOR l_line_nr_sts_csr (p_cle_id IN NUMBER, p_line_type VARCHAR2) IS
9185 SELECT stsb.ste_code
9186 FROM okc_statuses_b stsb,
9187 okc_k_lines_b cleb,
9188 okl_k_lines kle
9189 WHERE stsb.code = cleb.sts_code
9190 AND cleb.id = p_cle_id
9191 AND cleb.id = kle.id
9192 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
9193
9194
9195 l_line_type VARCHAR2(30) := 'X';
9196 --Bug# 15992711 , End
9197
9198 l_cle_id okc_k_lines_b.ID%TYPE;
9199
9200
9201 BEGIN
9202
9203 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
9204 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
9205 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
9206 -- l_discount_incl_terminated := TRUE;
9207 --END IF;
9208
9209 -- rmunjulu 4042892
9210 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
9211 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
9212 LOOP
9213 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
9214 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
9215 l_discount_incl_terminated := TRUE;
9216
9217 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
9218 -- If set then based on its value set l_line_type
9219
9220 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
9221 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
9222 l_line_type := 'NEW'; --New
9223 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
9224 l_line_type := 'RELEASE'; --Release
9225 END IF;
9226 --Bug# 15992711 , End
9227
9228 END IF;
9229 END LOOP;
9230 END IF;
9231
9232 --Bug# 15992711 , Start
9233 IF (l_line_type IN ('NEW','RELEASE') )
9234 AND (p_line_id IS NOT NULL AND
9235 p_line_id <> OKC_API.G_MISS_NUM) THEN --Added OKC_API.G_MISS_NUM condition because p_line_id was having OKC_API.G_MISS_NUM value in few scenario
9236 --Get the line status
9237 OPEN l_line_nr_sts_csr(p_cle_id => p_line_id, p_line_type => l_line_type);
9238 FETCH l_line_nr_sts_csr INTO l_line_sts_rec;
9239 CLOSE l_line_nr_sts_csr;
9240
9241 IF l_line_sts_rec.ste_code IS NULL THEN
9242 l_line_discount := 0;
9243
9244 ELSIF (l_line_sts_rec.ste_code IN ('HOLD','EXPIRED','CANCELLED'))
9245 OR (l_line_sts_rec.ste_code = 'TERMINATED' AND
9246 NOT (l_discount_incl_terminated)) THEN
9247 l_line_discount := 0;
9248
9249 ELSIF (l_line_sts_rec.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED''CANCELLED'))
9250 OR (l_line_sts_rec.ste_code = 'TERMINATED' AND
9251 (l_discount_incl_terminated)) THEN
9252
9253 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
9254 (p_api_version => l_api_version,
9255 p_init_msg_list => Okl_Api.G_FALSE,
9256 x_msg_data => l_msg_data,
9257 x_msg_count => l_msg_count,
9258 x_return_status => l_return_status,
9259 p_asset_cle_id => p_line_id,
9260 p_accounting_method => 'NET',
9261 x_subsidy_amount => l_line_discount);
9262
9263 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
9264 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
9265 END IF;
9266 END IF;
9267
9268 --Added OKC_API.G_MISS_NUM condition because p_line_id was having OKC_API.G_MISS_NUM value in few scenario
9269 --IF p_line_id IS NOT NULL THEN
9270 ELSIF (p_line_id IS NOT NULL AND
9271 p_line_id <> OKC_API.G_MISS_NUM ) THEN
9272 --Bug# 15992711 , End
9273
9274 --Get the line status
9275 OPEN l_line_sts_csr(p_cle_id => p_line_id);
9276 FETCH l_line_sts_csr INTO l_line_sts_rec;
9277 CLOSE l_line_sts_csr;
9278
9279 IF l_line_sts_rec.ste_code IS NULL THEN
9280 l_line_discount := 0;
9281
9282 ELSIF (l_line_sts_rec.ste_code IN ('HOLD','EXPIRED','CANCELLED'))
9283 OR (l_line_sts_rec.ste_code = 'TERMINATED' AND
9284 NOT (l_discount_incl_terminated)) THEN
9285 l_line_discount := 0;
9286
9287 ELSIF (l_line_sts_rec.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED''CANCELLED'))
9288 OR (l_line_sts_rec.ste_code = 'TERMINATED' AND
9289 (l_discount_incl_terminated)) THEN
9290
9291 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
9292 (p_api_version => l_api_version,
9293 p_init_msg_list => Okl_Api.G_FALSE,
9294 x_msg_data => l_msg_data,
9295 x_msg_count => l_msg_count,
9296 x_return_status => l_return_status,
9297 p_asset_cle_id => p_line_id,
9298 p_accounting_method => 'NET',
9299 x_subsidy_amount => l_line_discount);
9300
9301 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
9302 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
9303 END IF;
9304 END IF;
9305
9306 --Bug# 15992711 , Start
9307 --Added OKC_API.G_MISS_NUM condition because p_line_id was having OKC_API.G_MISS_NUM value in few scenario
9308 --ELSIF (p_line_id IS NULL) AND (p_chr_id IS NOT NULL) THEN
9309 ELSIF (p_line_id IS NULL OR p_line_id = OKC_API.G_MISS_NUM) AND (p_chr_id IS NOT NULL) THEN
9310 --Bug# 15992711 , End
9311 l_line_discount := 0;
9312
9313
9314 --Bug# 15992711 , Start
9315 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
9316 -- l_cleb_nr_csr cursor in order to consider either only new
9317 -- assets or only re-leased assets, else no change in the standard behavior
9318 IF l_line_type IN ('NEW','RELEASE') THEN
9319 IF (l_discount_incl_terminated) THEN
9320 OPEN l_cleb_nr_termn_csr(p_chr_id => p_chr_id, p_line_type => l_line_type);
9321 LOOP
9322 FETCH l_cleb_nr_termn_csr INTO l_cle_id;
9323 EXIT WHEN l_cleb_nr_termn_csr%NOTFOUND;
9324 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
9325 (p_api_version => l_api_version,
9326 p_init_msg_list => Okl_Api.G_FALSE,
9327 x_msg_data => l_msg_data,
9328 x_msg_count => l_msg_count,
9329 x_return_status => l_return_status,
9330 p_asset_cle_id => l_cle_id,
9331 p_accounting_method => 'NET',
9332 x_subsidy_amount => l_discount);
9333 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
9334 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
9335 END IF;
9336
9337 l_line_discount := l_line_discount + l_discount;
9338 END LOOP;
9339
9340 CLOSE l_cleb_nr_termn_csr;
9341
9342 ELSIF NOT (l_discount_incl_terminated) THEN
9343 OPEN l_cleb_nr_csr(p_chr_id => p_chr_id, p_line_type => l_line_type);
9344 LOOP
9345 FETCH l_cleb_nr_csr INTO l_cle_id;
9346 EXIT WHEN l_cleb_nr_csr%NOTFOUND;
9347 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
9348 (p_api_version => l_api_version,
9349 p_init_msg_list => Okl_Api.G_FALSE,
9350 x_msg_data => l_msg_data,
9351 x_msg_count => l_msg_count,
9352 x_return_status => l_return_status,
9353 p_asset_cle_id => l_cle_id,
9354 p_accounting_method => 'NET',
9355 x_subsidy_amount => l_discount);
9356 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
9357 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
9358 END IF;
9359
9360 l_line_discount := l_line_discount + l_discount;
9361 END LOOP;
9362
9363 CLOSE l_cleb_nr_csr;
9364
9365 END IF;
9366 --IF (l_discount_incl_terminated) THEN -- Commented standard code
9367 ELSIF (l_discount_incl_terminated) THEN
9368
9369 --Bug# 15992711 , End
9370
9371 OPEN l_cleb_termn_csr(p_chr_id => p_chr_id);
9372 LOOP
9373 FETCH l_cleb_termn_csr INTO l_cle_id;
9374 EXIT WHEN l_cleb_termn_csr%NOTFOUND;
9375 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
9376 (p_api_version => l_api_version,
9377 p_init_msg_list => Okl_Api.G_FALSE,
9378 x_msg_data => l_msg_data,
9379 x_msg_count => l_msg_count,
9380 x_return_status => l_return_status,
9381 p_asset_cle_id => l_cle_id,
9382 p_accounting_method => 'NET',
9383 x_subsidy_amount => l_discount);
9384 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
9385 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
9386 END IF;
9387
9388 l_line_discount := l_line_discount + l_discount;
9389 END LOOP;
9390
9391 CLOSE l_cleb_termn_csr;
9392 ELSIF NOT (l_discount_incl_terminated) THEN
9393
9394 OPEN l_cleb_csr(p_chr_id => p_chr_id);
9395 LOOP
9396 FETCH l_cleb_csr INTO l_cle_id;
9397 EXIT WHEN l_cleb_csr%NOTFOUND;
9398 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount
9399 (p_api_version => l_api_version,
9400 p_init_msg_list => Okl_Api.G_FALSE,
9401 x_msg_data => l_msg_data,
9402 x_msg_count => l_msg_count,
9403 x_return_status => l_return_status,
9404 p_asset_cle_id => l_cle_id,
9405 p_accounting_method => 'NET',
9406 x_subsidy_amount => l_discount);
9407 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
9408 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
9409 END IF;
9410
9411 l_line_discount := l_line_discount + l_discount;
9412 END LOOP;
9413
9414 CLOSE l_cleb_csr;
9415
9416 END IF;
9417 --Bug# 15992711 , Start
9418 --Added OKC_API.G_MISS_NUM condition because p_line_id was having OKC_API.G_MISS_NUM value in few scenario
9419 --ELSIF (p_line_id IS NULL) AND (p_chr_id IS NULL) THEN
9420 ELSIF (p_line_id IS NULL OR p_line_id = OKC_API.G_MISS_NUM) AND (p_chr_id IS NULL) THEN
9421 --Bug# 15992711 , End
9422 RAISE Okl_Api.G_EXCEPTION_ERROR;
9423 END IF;
9424
9425 RETURN (l_line_discount);
9426
9427 EXCEPTION
9428 WHEN OTHERS THEN
9429 IF l_cleb_csr%ISOPEN THEN
9430 CLOSE l_cleb_csr;
9431 END IF;
9432 IF l_cleb_termn_csr%ISOPEN THEN
9433 CLOSE l_cleb_termn_csr;
9434 END IF;
9435 IF l_line_sts_csr%ISOPEN THEN
9436 CLOSE l_line_sts_csr;
9437 END IF;
9438 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
9439 p_msg_name => 'OKL_UNEXPECTED_ERROR',
9440 p_token1 => 'OKL_SQLCODE',
9441 p_token1_value => SQLCODE,
9442 p_token2 => 'OKL_SQLERRM',
9443 p_token2_value => SQLERRM);
9444 RETURN NULL;
9445 END line_discount;
9446 --------------------------------------------------------------------------------
9447 --start of comments
9448 --Name : contract_discount
9449 --Purpose : To calculate total discount on a contract
9450 --Parameters : IN - p_chr_id contract header id
9451 -- - p_line id financial asset line id
9452 -- Return : Total contract discount
9453 -- History : 16-SEP-2003 avsingh Creation
9454 --end of comments
9455 --------------------------------------------------------------------------------
9456 FUNCTION contract_discount(
9457 p_chr_id IN NUMBER,
9458 p_line_id IN NUMBER) RETURN NUMBER IS
9459
9460 l_api_version NUMBER DEFAULT 1.0;
9461 l_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
9462 l_msg_count NUMBER;
9463 l_msg_data VARCHAR2(2000);
9464
9465 l_contract_discount NUMBER;
9466 BEGIN
9467 IF (p_line_id IS NOT NULL) OR (p_chr_id IS NOT NULL) THEN
9468 l_contract_discount := line_discount(p_chr_id,p_line_id);
9469
9470 ELSIF (p_line_id IS NULL) AND (p_chr_id IS NULL) THEN
9471 RAISE OKL_API.G_EXCEPTION_ERROR;
9472 END IF;
9473 RETURN (l_contract_discount);
9474 EXCEPTION
9475 WHEN OTHERS THEN
9476 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
9477 p_msg_name => 'OKL_UNEXPECTED_ERROR',
9478 p_token1 => 'OKL_SQLCODE',
9479 p_token1_value => SQLCODE,
9480 p_token2 => 'OKL_SQLERRM',
9481 p_token2_value => SQLERRM);
9482 RETURN NULL;
9483 END contract_discount;
9484 ----------------------------------------------
9485 --End Bug# 3143522 avsingh : 11.5.10 Subsidies
9486 ----------------------------------------------
9487 -----------------------------------------------------------------------
9488 --Start Bug# 3036581 : avsingh new formula CONTRACT_AMORTIZED_EXPENSES
9489 -----------------------------------------------------------------------
9490 ----------------------------------------------------------------------------------------------------
9491
9492 -- Start of Comments
9493 -- Created By: avsingh
9494 -- Function Name contract_amortized_expenses
9495 -- Description: returns the sum of amount on stream type - Amortized Expense.
9496 -- Dependencies:
9497 -- Parameters: contract id.
9498 -- Version: 1.0
9499 -- End of Commnets
9500
9501 ----------------------------------------------------------------------------------------------------
9502 FUNCTION contract_amortized_expenses(
9503 p_chr_id IN NUMBER,
9504 p_line_id IN NUMBER) RETURN NUMBER IS
9505
9506 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_AMORTIZED_EXPENSES';
9507 l_api_version CONSTANT NUMBER := 1;
9508 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
9509 x_msg_count NUMBER;
9510 x_msg_data VARCHAR2(2000);
9511
9512 l_amortized_expenses NUMBER := 0;
9513
9514 ---------------------------------------------------
9515 --cursor to get sum of line level amortized expenses
9516 ---------------------------------------------------
9517 CURSOR l_line_amortexp_csr (chrId NUMBER ) IS
9518 SELECT NVL(SUM(sele.amount),0) amount
9519 FROM okl_strm_elements sele,
9520 okl_streams str,
9521 --okl_strm_type_tl sty,
9522 okl_strm_type_v sty,
9523 okl_K_lines_full_v kle,
9524 okc_statuses_b sts
9525 WHERE sele.stm_id = str.id
9526 AND str.sty_id = sty.id
9527 --AND UPPER(sty.name) = 'AMORTIZED EXPENSE'
9528 AND sty.stream_type_purpose = 'AMORTIZED_FEE_EXPENSE'
9529 --AND sty.LANGUAGE = 'US'
9530 AND str.say_code = 'CURR'
9531 AND str.active_yn = 'Y'
9532 AND NVL( str.purpose_code, 'XXXX' ) <> 'REPORT'
9533 AND str.khr_id = chrId
9534 AND NVL(str.kle_id,-9999) = kle.id
9535 AND kle.dnz_chr_id = chrId
9536 AND kle.sts_code = sts.code
9537 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
9538
9539 l_line_amortexp_rec l_line_amortexp_csr%ROWTYPE;
9540
9541 -----------------------------------------------------
9542 --Cursor to get sum of contract level amortized expenses
9543 -----------------------------------------------------
9544 CURSOR l_chr_amortexp_csr (chrId NUMBER) IS
9545 SELECT NVL(SUM(sele.amount),0) amount
9546 FROM okl_strm_elements sele,
9547 okl_streams str,
9548 --okl_strm_type_tl sty
9549 okl_strm_type_v sty
9550 WHERE sele.stm_id = str.id
9551 AND str.sty_id = sty.id
9552 --AND UPPER(sty.name) = 'AMORTIZED EXPENSE'
9553 AND sty.stream_type_purpose = 'AMORTIZED_FEE_EXPENSE'
9554 --AND sty.LANGUAGE = 'US'
9555 AND str.say_code = 'CURR'
9556 AND str.active_yn = 'Y'
9557 AND NVL( str.purpose_code, 'XXXX' ) <> 'REPORT'
9558 AND str.khr_id = chrId
9559 AND NVL(str.kle_id, -9999) = -9999;
9560
9561 l_chr_amortexp_rec l_chr_amortexp_csr%ROWTYPE;
9562
9563 BEGIN
9564
9565 IF ( NVL(p_chr_id,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM ) THEN
9566 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
9567 END IF;
9568
9569 OPEN l_line_amortexp_csr( p_chr_id );
9570 FETCH l_line_amortexp_csr INTO l_line_amortexp_rec;
9571 CLOSE l_line_amortexp_csr;
9572
9573 OPEN l_chr_amortexp_csr( p_chr_id );
9574 FETCH l_chr_amortexp_csr INTO l_chr_amortexp_rec;
9575 CLOSE l_chr_amortexp_csr;
9576
9577 l_amortized_expenses := l_line_amortexp_rec.amount + l_chr_amortexp_rec.amount;
9578
9579 RETURN l_amortized_expenses;
9580
9581
9582 EXCEPTION
9583 WHEN OTHERS THEN
9584 Okl_Api.SET_MESSAGE(
9585 p_app_name => G_APP_NAME,
9586 p_msg_name => G_UNEXPECTED_ERROR,
9587 p_token1 => G_SQLCODE_TOKEN,
9588 p_token1_value => SQLCODE,
9589 p_token2 => G_SQLERRM_TOKEN,
9590 p_token2_value => SQLERRM);
9591 RETURN NULL;
9592
9593 END contract_amortized_expenses;
9594 -------------------------------------------------
9595 --End Bug# 3036581 avsingh : 11.5.10
9596 -------------------------------------------------
9597
9598 -------------------------------------------------
9599 --Bug# 3143522 mdokal : 11.5.10 AM Securitization
9600 -------------------------------------------------
9601
9602 ------------------------------------------------------------------------------
9603 -- Start of Comments
9604 -- Created By: Manjit Dokal - 18-JUL-2003
9605 -- Function Name: investor_rent_factor
9606 -- Description: Calculate Investor Rent Factor
9607 -- Dependencies: OKL building blocks AMTX and AMUV,
9608 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
9609 -- OUT: amount
9610 -- History rmunjulu EDAT Changed to get unbilled streams after
9611 -- quote eff date and ALL undisbursed amount
9612 -- : PAGARG Bug# 4012614 User Defined Streams impact
9613 -- : 06-Dec-2004 PAGARG Bug# 3948473
9614 -- : obtain investor agreement id from additional parameters and
9615 -- : and use it to get stream id for INVESTOR_RENT_DISB_BASIS
9616 -- : 07-Jan-2004 PAGARG Bug# 3948473. Removed the billable_yn
9617 -- : accrual_yn joins from undisbursed investor rent streams cursor
9618 -- : gboomina bug 4775555 Modified to get FUTURE BILLS (billed and not billed from term date onwards)
9619 -- and FUTURE DISBURSEMENTS (disbursed and not disbursed from term date onwards)
9620
9621 -- Version: 1.0
9622 -- End of Commnets
9623 ------------------------------------------------------------------------------
9624
9625 FUNCTION investor_rent_factor (
9626 p_contract_id IN NUMBER,
9627 p_contract_line_id IN NUMBER)
9628 RETURN NUMBER IS
9629
9630 --Bug# 4012614 PAGARG modified the cursor for User Defined Streams Impact
9631 -- Get Unbilled Streams
9632 -- rmunjulu EDAT unbilled after quote eff from date
9633 CURSOR l_unbill_stream_csr (
9634 cp_contract_id NUMBER,
9635 cp_contract_line_id NUMBER,
9636 cp_date DATE,
9637 cp_sty_id NUMBER) IS
9638 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
9639 FROM okl_streams stm,
9640 okl_strm_type_b sty,
9641 okl_strm_elements ste
9642 ,okl_pool_contents pocb
9643 WHERE stm.khr_id = cp_contract_id
9644 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9645 AND stm.active_yn = 'Y'
9646 AND stm.say_code = 'CURR'
9647 AND ste.stm_id = stm.id
9648 AND NVL (ste.amount, 0) <> 0
9649 AND sty.id = stm.sty_id
9650 AND sty.id = cp_sty_id
9651 AND sty.billable_yn = 'Y'
9652 AND ste.stream_element_date > cp_date -- rmunjulu EDAT
9653 AND pocb.status_Code <> 'PENDING'
9654 AND pocb.khr_id = stm.khr_id
9655 AND pocb.kle_id = stm.kle_id
9656 AND pocb.sty_id = stm.sty_id;
9657
9658 --Bug# 4012614 PAGARG modified the cursor for User Defined Streams Impact
9659 -- Get Undisbursed Investor Rent Streams
9660 CURSOR l_undisb_rent_stream_csr (
9661 cp_contract_id NUMBER,
9662 cp_contract_line_id NUMBER,
9663 cp_sty_id NUMBER,
9664 cp_date DATE) IS --gboomina bug 4775555
9665 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
9666 FROM okl_streams stm,
9667 okl_strm_type_b sty,
9668 okl_strm_elements ste
9669 -- ,okl_pool_contents pocb
9670 WHERE stm.khr_id = cp_contract_id
9671 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9672 AND stm.active_yn = 'Y'
9673 AND stm.say_code= 'CURR'
9674 AND ste.stm_id = stm.id
9675 AND NVL (ste.amount, 0) <> 0
9676 AND sty.id = stm.sty_id
9677 AND sty.id = cp_sty_id
9678 AND ste.stream_element_date > cp_date -- gboomina bug 4775555 -- check for disbs after termination
9679 --AND pocb.status_Code <> 'PENDING' -- commented by sosharma for bug 9284305
9680 --AND pocb.khr_id = stm.khr_id
9681 --AND pocb.kle_id = stm.kle_id
9682 --AND pocb.sty_id = stm.sty_id
9683 ;
9684
9685 CURSOR l_unbill_stream_pending_csr (
9686 cp_contract_id NUMBER,
9687 cp_contract_line_id NUMBER,
9688 cp_date DATE,
9689 cp_sty_id NUMBER) IS
9690 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
9691 FROM okl_streams stm,
9692 okl_strm_type_b sty,
9693 okl_strm_elements ste
9694 ,okl_pool_contents pocb
9695 WHERE stm.khr_id = cp_contract_id
9696 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9697 AND stm.active_yn = 'Y'
9698 AND stm.say_code = 'CURR'
9699 AND ste.stm_id = stm.id
9700 AND NVL (ste.amount, 0) <> 0
9701 AND sty.id = stm.sty_id
9702 AND sty.id = cp_sty_id
9703 AND sty.billable_yn = 'Y'
9704 AND ste.stream_element_date > cp_date
9705 AND pocb.status_Code = 'PENDING'
9706 AND pocb.khr_id = stm.khr_id
9707 AND pocb.kle_id = stm.kle_id
9708 AND pocb.sty_id = stm.sty_id;
9709
9710 -- Get Undisbursed Investor Rent Streams
9711 CURSOR l_undisb_rent_strm_pndg_csr (
9712 cp_contract_id NUMBER,
9713 cp_contract_line_id NUMBER,
9714 cp_sty_id NUMBER,
9715 cp_date DATE) IS
9716 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
9717 FROM okl_streams stm,
9718 okl_strm_type_b sty,
9719 okl_strm_elements ste
9720 --,okl_pool_contents pocb
9721 WHERE stm.khr_id = cp_contract_id
9722 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9723 AND stm.active_yn = 'Y'
9724 AND stm.say_code = 'CURR'
9725 AND ste.stm_id = stm.id
9726 AND NVL (ste.amount, 0) <> 0
9727 AND sty.id = stm.sty_id
9728 AND sty.id = cp_sty_id
9729 AND ste.stream_element_date > cp_date
9730 --AND pocb.status_Code = 'PENDING' -- commented by sosharma for bug 9284305
9731 --AND pocb.khr_id = stm.khr_id
9732 --AND pocb.kle_id = stm.kle_id
9733 --AND pocb.sty_id = stm.sty_id
9734 ;
9735
9736
9737 l_unbill_rent_amount NUMBER := 0;
9738 l_undisb_rent_amount NUMBER := 0;
9739 l_result_amount NUMBER := 0;
9740 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
9741
9742 -- rmunjulu EDAT
9743 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
9744 SELECT trunc(qte.date_effective_from) date_effective_from
9745 FROM okl_trx_quotes_b qte
9746 WHERE qte.id = p_quote_id;
9747
9748 -- rmunjulu EDAT
9749 l_quote_id NUMBER;
9750 l_quote_date DATE;
9751 l_sysdate DATE;
9752 l_sty_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
9753 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
9754 --06-Dec-2004 PAGARG Bug# 3948473 variable to store investor agreement id
9755 l_inv_agr_id NUMBER;
9756 BEGIN
9757 -- ****************
9758 -- Calculate result
9759 -- ****************
9760 -- rmunjulu EDAT
9761 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
9762 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
9763 LOOP
9764 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
9765 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
9766 --06-Dec-2004 PAGARG Bug# 3948473 obtain investor agreement id
9767 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'inv_agr_id' THEN
9768 l_inv_agr_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
9769 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
9770 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
9771 END IF;
9772 END LOOP;
9773 END IF;
9774
9775 -- rmunjulu EDAT
9776 select sysdate into l_sysdate from dual;
9777
9778 -- rmunjulu EDAT
9779 IF l_quote_id IS NOT NULL
9780 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
9781
9782 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
9783 l_quote_date := get_quote_date_rec.date_effective_from;
9784 END LOOP;
9785 END IF;
9786
9787 -- rmunjulu EDAT
9788 IF l_quote_date IS NULL
9789 OR l_quote_date = OKL_API.G_MISS_DATE THEN
9790 l_quote_date := l_sysdate;
9791 END IF;
9792
9793 --PAGARG 19-Nov-2004 Bug# 4012614
9794 --UDS impact. Obtain stream type id and pass it to cursor
9795 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
9796 'RENT',
9797 l_return_status,
9798 l_sty_id);
9799
9800 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9801 THEN
9802 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9803 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9804 THEN
9805 RAISE OKL_API.G_EXCEPTION_ERROR;
9806 END IF;
9807
9808 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9809 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9810 FETCH l_unbill_stream_pending_csr INTO l_unbill_rent_amount;
9811 CLOSE l_unbill_stream_pending_csr;
9812 ELSE
9813 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
9814 FETCH l_unbill_stream_csr INTO l_unbill_rent_amount;
9815 CLOSE l_unbill_stream_csr;
9816 END IF;
9817
9818 --06-Dec-2004 PAGARG Bug# 3948473 Pass investor agreement id to obtain stream id
9819 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
9820 'INVESTOR_RENT_DISB_BASIS',
9821 l_return_status,
9822 l_sty_id);
9823
9824 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9825 THEN
9826 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9827 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9828 THEN
9829 RAISE OKL_API.G_EXCEPTION_ERROR;
9830 END IF;
9831
9832 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9833 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
9834 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_rent_amount;
9835 CLOSE l_undisb_rent_strm_pndg_csr;
9836 ELSE
9837 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
9838 FETCH l_undisb_rent_stream_csr INTO l_undisb_rent_amount;
9839 CLOSE l_undisb_rent_stream_csr;
9840 END IF;
9841
9842 -- this condition is included to prevent 'ORA-01476: divisor is equal to zero' error
9843 -- need to seed a new message
9844 IF l_unbill_rent_amount = 0 THEN
9845 l_result_amount := 0;
9846 ELSE
9847 l_result_amount := l_undisb_rent_amount/l_unbill_rent_amount;
9848 END IF;
9849
9850 RETURN l_result_amount;
9851
9852 EXCEPTION
9853
9854 WHEN OTHERS THEN
9855
9856 -- Close open cursors
9857 IF l_unbill_stream_csr%ISOPEN THEN
9858 CLOSE l_unbill_stream_csr;
9859 END IF;
9860 IF l_undisb_rent_stream_csr%ISOPEN THEN
9861 CLOSE l_undisb_rent_stream_csr;
9862 END IF;
9863 IF l_unbill_stream_pending_csr%ISOPEN THEN
9864 CLOSE l_unbill_stream_pending_csr;
9865 END IF;
9866 IF l_undisb_rent_strm_pndg_csr%ISOPEN THEN
9867 CLOSE l_undisb_rent_strm_pndg_csr;
9868 END IF;
9869 -- store SQL error message on message stack for caller
9870 OKL_API.SET_MESSAGE (
9871 p_app_name => OKL_API.G_APP_NAME,
9872 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
9873 p_token1 => 'SQLCODE',
9874 p_token1_value => SQLCODE,
9875 p_token2 => 'SQLERRM',
9876 p_token2_value => SQLERRM);
9877
9878 RETURN NULL;
9879
9880 END investor_rent_factor;
9881
9882
9883 ------------------------------------------------------------------------------
9884 -- Start of Comments
9885 -- Created By: Manjit Dokal - 18-JUL-2003
9886 -- Function Name: investor_rv_factor
9887 -- Description: Calculate Investor Residual Value Factor
9888 -- Dependencies: OKL building blocks AMTX and AMUV,
9889 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
9890 -- OUT: amount
9891 -- History rmunjulu EDAT Changed to get all residual streams amount
9892 -- : PAGARG 19-Nov-2004 Bug# 4012614
9893 -- : Fetching the l_unbill_stream_csr value into correct variable
9894 -- : UDS impact and modified to use correct stream type purpose
9895 -- Version: 1.0
9896 -- End of Commnets
9897 ------------------------------------------------------------------------------
9898
9899 FUNCTION investor_rv_factor (
9900 p_contract_id IN NUMBER,
9901 p_contract_line_id IN NUMBER)
9902 RETURN NUMBER IS
9903
9904 --Bug# 4012614 PAGARG modified the cursor for User Defined Streams Impact
9905 -- Get Residual Streams
9906 -- Get Residual Streams
9907 CURSOR l_unbill_stream_csr (
9908 cp_contract_id NUMBER,
9909 cp_contract_line_id NUMBER,
9910 cp_sty_id NUMBER) IS
9911 SELECT NVL(SUM (NVL (ste.amount, 0)), 0) amount_due
9912 FROM okl_streams stm,
9913 okl_strm_type_b sty,
9914 okl_strm_elements ste,
9915 okl_pool_contents pocb
9916 WHERE stm.khr_id = cp_contract_id
9917 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9918 AND stm.active_yn = 'Y'
9919 AND stm.say_code = 'CURR'
9920 AND ste.stm_id = stm.id
9921 AND ste.date_billed IS NULL
9922 AND NVL (ste.amount, 0) <> 0
9923 AND sty.id = stm.sty_id
9924 AND sty.id = cp_sty_id
9925 AND sty.billable_yn = 'N'
9926 AND pocb.status_Code <> 'PENDING'
9927 AND pocb.khr_id = stm.khr_id
9928 AND pocb.kle_id = stm.kle_id
9929 AND pocb.sty_id = stm.sty_id;
9930
9931 -- Get Residual Streams
9932 CURSOR l_unbill_stream_pending_csr (
9933 cp_contract_id NUMBER,
9934 cp_contract_line_id NUMBER,
9935 cp_sty_id NUMBER) IS
9936 SELECT NVL(SUM (NVL (ste.amount, 0)), 0) amount_due
9937 FROM okl_streams stm,
9938 okl_strm_type_b sty,
9939 okl_strm_elements ste,
9940 okl_pool_contents pocb
9941 WHERE stm.khr_id = cp_contract_id
9942 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
9943 AND stm.active_yn = 'Y'
9944 AND stm.say_code = 'CURR'
9945 AND ste.stm_id = stm.id
9946 AND ste.date_billed IS NULL
9947 AND NVL (ste.amount, 0) <> 0
9948 AND sty.id = stm.sty_id
9949 AND sty.id = cp_sty_id
9950 AND sty.billable_yn = 'N'
9951 AND pocb.status_Code = 'PENDING'
9952 AND pocb.khr_id = stm.khr_id
9953 AND pocb.kle_id = stm.kle_id
9954 AND pocb.sty_id = stm.sty_id;
9955
9956 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
9957 l_residual_amount NUMBER := 0;
9958 l_result_amount NUMBER := 0;
9959 l_sty_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
9960 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
9961
9962 BEGIN
9963 -- ****************
9964 -- Calculate result
9965 -- ****************
9966 --PAGARG 19-Nov-2004 Bug# 4012614
9967 --UDS impact. Obtain stream type id and pass it to cursor
9968 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
9969 'RESIDUAL_VALUE',
9970 l_return_status,
9971 l_sty_id);
9972
9973 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
9974 THEN
9975 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9976 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
9977 THEN
9978 RAISE OKL_API.G_EXCEPTION_ERROR;
9979 END IF;
9980
9981 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
9982 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
9983 LOOP
9984 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
9985 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
9986 END IF;
9987 END LOOP;
9988 END IF;
9989
9990 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
9991 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id, l_sty_id);
9992 FETCH l_unbill_stream_pending_csr INTO l_residual_amount;
9993 CLOSE l_unbill_stream_pending_csr;
9994 ELSE
9995 --PAGARG 19-Nov-2004 Bug# 4012614
9996 --Fetch cursor value into correct variable l_residual_amount
9997 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id, l_sty_id);
9998 FETCH l_unbill_stream_csr INTO l_residual_amount;
9999 CLOSE l_unbill_stream_csr;
10000 END IF;
10001
10002 -- this condition is included to prevent 'ORA-01476: divisor is equal to zero' error
10003 -- need to seed a new message
10004 IF l_residual_amount = 0 THEN
10005 l_result_amount := 0;
10006 ELSE
10007 l_result_amount := l_residual_amount/l_residual_amount;
10008 END IF;
10009
10010 RETURN l_result_amount;
10011
10012 EXCEPTION
10013
10014 WHEN OTHERS THEN
10015
10016 -- Close open cursors
10017
10018 IF l_unbill_stream_csr%ISOPEN THEN
10019 CLOSE l_unbill_stream_csr;
10020 END IF;
10021 IF l_unbill_stream_pending_csr%ISOPEN THEN
10022 CLOSE l_unbill_stream_pending_csr;
10023 END IF;
10024
10025 -- store SQL error message on message stack for caller
10026
10027 OKL_API.SET_MESSAGE (
10028 p_app_name => OKL_API.G_APP_NAME,
10029 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
10030 p_token1 => 'SQLCODE',
10031 p_token1_value => SQLCODE,
10032 p_token2 => 'SQLERRM',
10033 p_token2_value => SQLERRM);
10034
10035 RETURN NULL;
10036
10037 END investor_rv_factor;
10038
10039
10040 ------------------------------------------------------------------------------
10041 -- Start of Comments
10042 -- Created By: Sushil Deshpande
10043 -- Function Name: investor_loan_factor
10044 -- Description: Calculate Investor Loan Factor
10045 -- Dependencies: OKL building blocks AMTX and AMUV,
10046 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
10047 -- OUT: amount
10048 -- History
10049 -- Version: 1.0
10050 -- End of Commnets
10051 ------------------------------------------------------------------------------
10052
10053 FUNCTION investor_loan_factor (
10054 p_contract_id IN NUMBER,
10055 p_contract_line_id IN NUMBER)
10056 RETURN NUMBER IS
10057
10058 CURSOR l_unbill_stream_csr (cp_contract_id NUMBER,
10059 cp_contract_line_id NUMBER,
10060 cp_date DATE,
10061 cp_sty_id NUMBER) IS
10062 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
10063 FROM okl_streams stm,
10064 okl_strm_type_b sty,
10065 okl_strm_elements ste
10066 ,okl_pool_contents pocb
10067 WHERE stm.khr_id = cp_contract_id
10068 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
10069 AND stm.active_yn = 'Y'
10070 AND stm.say_code = 'CURR'
10071 AND ste.stm_id = stm.id
10072 AND NVL (ste.amount, 0) <> 0
10073 AND sty.id = stm.sty_id
10074 AND sty.id = cp_sty_id
10075 AND sty.billable_yn = 'Y'
10076 AND ste.stream_element_date > cp_date -- rmunjulu EDAT
10077 AND pocb.status_Code <> 'PENDING'
10078 AND pocb.khr_id = stm.khr_id
10079 AND pocb.kle_id = stm.kle_id
10080 AND pocb.sty_id = stm.sty_id;
10081
10082 -- Get Undisbursed Investor Rent Streams
10083 CURSOR l_undisb_rent_stream_csr (cp_contract_id NUMBER,
10084 cp_contract_line_id NUMBER,
10085 cp_sty_id NUMBER,
10086 cp_date DATE) IS --gboomina bug 4775555
10087 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
10088 FROM okl_streams stm,
10089 okl_strm_type_b sty,
10090 okl_strm_elements ste
10091 ,okl_pool_contents pocb
10092 WHERE stm.khr_id = cp_contract_id
10093 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
10094 AND stm.active_yn = 'Y'
10095 AND stm.say_code= 'CURR'
10096 AND ste.stm_id = stm.id
10097 AND NVL (ste.amount, 0) <> 0
10098 AND sty.id = stm.sty_id
10099 AND sty.id = cp_sty_id
10100 AND ste.stream_element_date > cp_date -- gboomina bug 4775555 -- check for disbs after termination
10101 AND pocb.status_Code <> 'PENDING'
10102 AND pocb.khr_id = stm.khr_id
10103 AND pocb.kle_id = stm.kle_id
10104 AND pocb.sty_id = stm.sty_id;
10105
10106 CURSOR l_unbill_stream_pending_csr (cp_contract_id NUMBER,
10107 cp_contract_line_id NUMBER,
10108 cp_date DATE,
10109 cp_sty_id NUMBER) IS
10110 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_due
10111 FROM okl_streams stm,
10112 okl_strm_type_b sty,
10113 okl_strm_elements ste,
10114 okl_pool_contents pocb
10115 WHERE stm.khr_id = cp_contract_id
10116 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
10117 AND stm.active_yn = 'Y'
10118 AND stm.say_code = 'CURR'
10119 AND ste.stm_id = stm.id
10120 AND NVL (ste.amount, 0) <> 0
10121 AND sty.id = stm.sty_id
10122 AND sty.id = cp_sty_id
10123 AND sty.billable_yn = 'Y'
10124 AND ste.stream_element_date > cp_date
10125 AND pocb.status_Code = 'PENDING'
10126 AND pocb.khr_id = stm.khr_id
10127 AND pocb.kle_id = stm.kle_id
10128 AND pocb.sty_id = stm.sty_id;
10129
10130 -- Get Undisbursed Investor Rent Streams
10131 CURSOR l_undisb_rent_strm_pndg_csr (cp_contract_id NUMBER,
10132 cp_contract_line_id NUMBER,
10133 cp_sty_id NUMBER,
10134 cp_date DATE) IS
10135 SELECT NVL(SUM (NVL (ste.amount, 0)),0) amount_payable
10136 FROM okl_streams stm,
10137 okl_strm_type_b sty,
10138 okl_strm_elements ste,
10139 okl_pool_contents pocb
10140 WHERE stm.khr_id = cp_contract_id
10141 AND stm.kle_id = NVL(cp_contract_line_id, stm.kle_id)
10142 AND stm.active_yn = 'Y'
10143 AND stm.say_code = 'CURR'
10144 AND ste.stm_id = stm.id
10145 AND NVL (ste.amount, 0) <> 0
10146 AND sty.id = stm.sty_id
10147 AND sty.id = cp_sty_id
10148 AND ste.stream_element_date > cp_date
10149 AND pocb.status_Code = 'PENDING'
10150 AND pocb.khr_id = stm.khr_id
10151 AND pocb.kle_id = stm.kle_id
10152 AND pocb.sty_id = stm.sty_id;
10153
10154
10155 l_unbill_principal_amount NUMBER := 0;
10156 l_unbill_interest_amount NUMBER := 0;
10157 l_unbill_ppd_amount NUMBER := 0;
10158 l_unbill_loan_amount NUMBER := 0;
10159 l_undisb_principal_amount NUMBER := 0;
10160 l_undisb_interest_amount NUMBER := 0;
10161 l_undisb_ppd_amount NUMBER := 0;
10162 l_undisb_loan_amount NUMBER := 0;
10163 l_result_amount NUMBER := 0;
10164 l_try_rsn OKL_POOL_TRANSACTIONS.TRANSACTION_REASON%TYPE;
10165
10166 -- rmunjulu EDAT
10167 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
10168 SELECT trunc(qte.date_effective_from) date_effective_from
10169 FROM okl_trx_quotes_b qte
10170 WHERE qte.id = p_quote_id;
10171
10172 -- rmunjulu EDAT
10173 l_quote_id NUMBER;
10174 l_quote_date DATE;
10175 l_sysdate DATE;
10176 l_sty_id OKL_STRM_TYPE_TL.ID%TYPE := 0;
10177 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
10178 --06-Dec-2004 PAGARG Bug# 3948473 variable to store investor agreement id
10179 l_inv_agr_id NUMBER;
10180 BEGIN
10181 -- ****************
10182 -- Calculate result
10183 -- ****************
10184 -- rmunjulu EDAT
10185 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
10186 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
10187 LOOP
10188 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
10189 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
10190 --06-Dec-2004 PAGARG Bug# 3948473 obtain investor agreement id
10191 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'inv_agr_id' THEN
10192 l_inv_agr_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
10193 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_transaction_reason' THEN
10194 l_try_rsn := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
10195 END IF;
10196 END LOOP;
10197 END IF;
10198
10199 -- rmunjulu EDAT
10200 select sysdate into l_sysdate from dual;
10201
10202 -- rmunjulu EDAT
10203 IF l_quote_id IS NOT NULL
10204 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
10205
10206 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
10207 l_quote_date := get_quote_date_rec.date_effective_from;
10208 END LOOP;
10209 END IF;
10210
10211 -- rmunjulu EDAT
10212 IF l_quote_date IS NULL
10213 OR l_quote_date = OKL_API.G_MISS_DATE THEN
10214 l_quote_date := l_sysdate;
10215 END IF;
10216
10217 --PAGARG 19-Nov-2004 Bug# 4012614
10218 --UDS impact. Obtain stream type id and pass it to cursor
10219 OKL_STREAMS_UTIL.get_dependent_stream_type(p_contract_id,
10220 'RENT',
10221 'PRINCIPAL_PAYMENT',
10222 l_return_status,
10223 l_sty_id);
10224
10225 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
10226 THEN
10227 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10228 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
10229 THEN
10230 RAISE OKL_API.G_EXCEPTION_ERROR;
10231 END IF;
10232
10233 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
10234 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
10235 FETCH l_unbill_stream_pending_csr INTO l_unbill_principal_amount;
10236 CLOSE l_unbill_stream_pending_csr;
10237 ELSE
10238 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
10239 FETCH l_unbill_stream_csr INTO l_unbill_principal_amount;
10240 CLOSE l_unbill_stream_csr;
10241 END IF;
10242
10243 --PAGARG 19-Nov-2004 Bug# 4012614
10244 --UDS impact. Obtain stream type id and pass it to cursor
10245 OKL_STREAMS_UTIL.get_dependent_stream_type(p_contract_id,
10246 'RENT',
10247 'INTEREST_PAYMENT',
10248 l_return_status,
10249 l_sty_id);
10250
10251 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
10252 THEN
10253 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10254 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
10255 THEN
10256 RAISE OKL_API.G_EXCEPTION_ERROR;
10257 END IF;
10258
10259 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
10260 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
10261 FETCH l_unbill_stream_pending_csr INTO l_unbill_interest_amount;
10262 CLOSE l_unbill_stream_pending_csr;
10263 ELSE
10264 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
10265 FETCH l_unbill_stream_csr INTO l_unbill_interest_amount;
10266 CLOSE l_unbill_stream_csr;
10267 END IF;
10268
10269 --PAGARG 19-Nov-2004 Bug# 4012614
10270 --UDS impact. Obtain stream type id and pass it to cursor
10271 OKL_STREAMS_UTIL.get_dependent_stream_type(p_contract_id,
10272 'RENT',
10273 'UNSCHEDULED_PRINCIPAL_PAYMENT',
10274 l_return_status,
10275 l_sty_id);
10276
10277 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
10278 THEN
10279 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10280 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
10281 THEN
10282 RAISE OKL_API.G_EXCEPTION_ERROR;
10283 END IF;
10284
10285 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
10286 OPEN l_unbill_stream_pending_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
10287 FETCH l_unbill_stream_pending_csr INTO l_unbill_ppd_amount;
10288 CLOSE l_unbill_stream_pending_csr;
10289 ELSE
10290 OPEN l_unbill_stream_csr (p_contract_id, p_contract_line_id,l_quote_date, l_sty_id);
10291 FETCH l_unbill_stream_csr INTO l_unbill_ppd_amount;
10292 CLOSE l_unbill_stream_csr;
10293 END IF;
10294
10295 --Calculate Total Unbilled Interest Amount
10296 l_unbill_loan_amount := l_unbill_principal_amount+l_unbill_interest_amount+l_unbill_ppd_amount;
10297
10298 IF l_inv_agr_id IS NOT NULL THEN
10299 --06-Dec-2004 PAGARG Bug# 3948473 Pass investor agreement id to obtain stream id
10300 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
10301 'INVESTOR_PRINCIPAL_DISB_BASIS',
10302 l_return_status,
10303 l_sty_id);
10304
10305 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
10306 THEN
10307 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10308 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
10309 THEN
10310 RAISE OKL_API.G_EXCEPTION_ERROR;
10311 END IF;
10312
10313 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
10314 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
10315 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_principal_amount;
10316 CLOSE l_undisb_rent_strm_pndg_csr;
10317 ELSE
10318 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
10319 FETCH l_undisb_rent_stream_csr INTO l_undisb_principal_amount;
10320 CLOSE l_undisb_rent_stream_csr;
10321 END IF;
10322
10323 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
10324 'INVESTOR_INTEREST_DISB_BASIS',
10325 l_return_status,
10326 l_sty_id);
10327
10328 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
10329 THEN
10330 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10331 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
10332 THEN
10333 RAISE OKL_API.G_EXCEPTION_ERROR;
10334 END IF;
10335
10336 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
10337 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
10338 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_interest_amount;
10339 CLOSE l_undisb_rent_strm_pndg_csr;
10340 ELSE
10341 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
10342 FETCH l_undisb_rent_stream_csr INTO l_undisb_interest_amount;
10343 CLOSE l_undisb_rent_stream_csr;
10344 END IF;
10345
10346 OKL_STREAMS_UTIL.get_primary_stream_type(l_inv_agr_id,
10347 'INVESTOR_PPD_DISB_BASIS',
10348 l_return_status,
10349 l_sty_id);
10350
10351 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
10352 THEN
10353 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10354 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
10355 THEN
10356 RAISE OKL_API.G_EXCEPTION_ERROR;
10357 END IF;
10358
10359 IF l_try_rsn IS NOT NULL AND l_try_rsn = 'ADJUSTMENTS' THEN
10360 OPEN l_undisb_rent_strm_pndg_csr (p_contract_id, p_contract_line_id, l_sty_id,l_quote_date);
10361 FETCH l_undisb_rent_strm_pndg_csr INTO l_undisb_ppd_amount;
10362 CLOSE l_undisb_rent_strm_pndg_csr;
10363 ELSE
10364 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
10365 FETCH l_undisb_rent_stream_csr INTO l_undisb_ppd_amount;
10366 CLOSE l_undisb_rent_stream_csr;
10367 END IF;
10368
10369 l_undisb_loan_amount := l_undisb_principal_amount + l_undisb_interest_amount+l_undisb_ppd_amount;
10370 END IF;
10371
10372 -- this condition is included to prevent 'ORA-01476: divisor is equal to zero' error
10373 -- need to seed a new message
10374 IF l_unbill_loan_amount = 0 THEN
10375 l_result_amount := 0;
10376 ELSE
10377 l_result_amount := l_undisb_loan_amount/l_unbill_loan_amount;
10378 END IF;
10379
10380 RETURN l_result_amount;
10381
10382 EXCEPTION
10383
10384 WHEN OTHERS THEN
10385 -- Close open cursors
10386 IF l_unbill_stream_csr%ISOPEN THEN
10387 CLOSE l_unbill_stream_csr;
10388 END IF;
10389 IF l_undisb_rent_stream_csr%ISOPEN THEN
10390 CLOSE l_undisb_rent_stream_csr;
10391 END IF;
10392 IF l_unbill_stream_pending_csr%ISOPEN THEN
10393 CLOSE l_unbill_stream_pending_csr;
10394 END IF;
10395 IF l_undisb_rent_strm_pndg_csr%ISOPEN THEN
10396 CLOSE l_undisb_rent_strm_pndg_csr;
10397 END IF;
10398 -- store SQL error message on message stack for caller
10399
10400 OKL_API.SET_MESSAGE (
10401 p_app_name => OKL_API.G_APP_NAME,
10402 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
10403 p_token1 => 'SQLCODE',
10404 p_token1_value => SQLCODE,
10405 p_token2 => 'SQLERRM',
10406 p_token2_value => SQLERRM);
10407
10408 RETURN NULL;
10409
10410 END investor_loan_factor;
10411
10412
10413 -----------------------------------------------------
10414 --End Bug# 3143522 mdokal : 11.5.10 AM Securitization
10415 -----------------------------------------------------
10416
10417
10418 ------------------------------------------------------------------------------
10419 -- Start of Comments
10420 -- Created By: Reeshma Kuttiyat - 15-SEP-2003
10421 -- Function Name: Net_Gain_Loss
10422 -- Description: Returns the Net Gain Loss for a Termination Quote
10423 -- Dependencies:
10424 -- Parameters: IN: p_contract_id, p_contract_line_id ,p_additional_paams(quote_id)
10425 -- OUT: amount
10426 -- rmunjulu 3842101 changed for proper calculation
10427 -- rmunjulu 3900814
10428 -- Version: 1.0
10429 -- End of Commnets
10430 ------------------------------------------------------------------------------
10431
10432 FUNCTION NET_GAIN_LOSS_QUOTE(p_khr_id IN NUMBER, p_kle_id IN NUMBER) RETURN NUMBER IS
10433
10434 --Cusor to obtain the asset line id
10435 CURSOR c_quote_asset_line(p_quote_id IN NUMBER) IS
10436 SELECT kle_id
10437 FROM OKL_TXL_QUOTE_LINES_B
10438 WHERE QTE_ID = p_quote_id
10439 AND QLT_CODE = 'AMCFIA';
10440
10441 --Cusor to obtain the quote net investment
10442 CURSOR c_quote_net_invst_csr(p_quote_id IN NUMBER) IS
10443 SELECT asset_value net_investment
10444 FROM OKL_TRX_QUOTES_V qte
10445 WHERE qte.id = p_quote_id;
10446
10447 --Cursor to obtain the total quote amount , excluding the billed quote lines
10448 CURSOR c_total_qt_amt(p_quote_id IN NUMBER) IS
10449 SELECT SUM(amount)
10450 FROM OKL_TXL_QUOTE_LINES_B
10451 WHERE qte_id = p_quote_id
10452 AND qlt_code NOT IN ('AMCFIA','AMCTAX', 'AMYOUB', 'AMCSDD'); -- rmunjulu 3842101 Added security deposit
10453
10454 l_quote_id NUMBER;
10455 l_net_gain_loss NUMBER;
10456 l_total_qte_amt NUMBER;
10457 l_total_invest NUMBER := 0;
10458 l_line_asset_invest NUMBER := 0 ;
10459 l_return_status VARCHAR2(1);
10460 l_unbilled_rent NUMBER;
10461 l_residual_value NUMBER;
10462 l_unearned_income NUMBER;
10463
10464 BEGIN
10465
10466 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
10467 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
10468 LOOP
10469 -- Start : PRASJAIN : Bug 6472724
10470 -- IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
10471 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
10472 -- End : PRASJAIN : Bug 6472724
10473 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
10474 END IF;
10475 END LOOP;
10476 END IF;
10477
10478 /* rmunjulu 3842101 get net investment from quote
10479 -- get the line asset investment by calling the formula engine
10480 FOR l_line IN c_quote_asset_line(l_quote_id)
10481 LOOP
10482
10483 l_unbilled_rent := line_unbilled_rent(p_khr_id,l_line.kle_id);
10484 l_residual_value := line_residual_value(p_khr_id,l_line.kle_id);
10485 l_unearned_income := line_unearned_income(p_khr_id,l_line.kle_id);
10486
10487 l_line_asset_invest := l_unbilled_rent + l_residual_value -l_unearned_income;
10488
10489 l_total_invest := l_total_invest + l_line_asset_invest;
10490
10491 END LOOP;
10492 */
10493 --get the total quote amount excluding billed quote lines
10494 OPEN c_total_qt_amt(l_quote_id);
10495 FETCH c_total_qt_amt INTO l_total_qte_amt;
10496 IF c_total_qt_amt%NOTFOUND THEN
10497 OKC_API.set_message( p_app_name => 'OKC',
10498 p_msg_name => G_INVALID_VALUE,
10499 p_token1 => G_COL_NAME_TOKEN,
10500 p_token1_value => 'KLE_ID');
10501 l_total_qte_amt := 0;
10502 END IF;
10503 CLOSE c_total_qt_amt;
10504
10505 -- rmunjulu 3842101 added this code to get net investment from quote
10506 OPEN c_quote_net_invst_csr(l_quote_id);
10507 FETCH c_quote_net_invst_csr INTO l_total_invest;
10508 CLOSE c_quote_net_invst_csr;
10509
10510 -- Net Gain/Loss = Total Quote Amount - Net Investment for quoted assets
10511 -- rmunjulu 3842101 added nvls or else values are being set with null and does not get calculated
10512 l_net_gain_loss := NVL(l_total_qte_amt,0) - NVL(l_total_invest,0);
10513
10514 RETURN l_net_gain_loss;
10515 EXCEPTION
10516 WHEN OTHERS THEN
10517 -- Close open cursors
10518
10519 IF c_total_qt_amt%ISOPEN THEN
10520 CLOSE c_total_qt_amt;
10521 END IF;
10522
10523 -- store SQL error message on message stack for caller
10524
10525 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
10526 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10527 p_token1 => 'OKL_SQLCODE',
10528 p_token1_value => SQLCODE,
10529 p_token2 => 'OKL_SQLERRM',
10530 p_token2_value => SQLERRM);
10531 RETURN NULL;
10532 END NET_GAIN_LOSS_QUOTE;
10533
10534
10535 --end rkuttiya
10536
10537 ------------------------------------------------------------------------------
10538 -- Start of Comments
10539 -- Created By: Manjit Dokal - 22-Oct-2003
10540 -- Function Name: contract_fee_amount
10541 -- Description: Calculate Financed Fee during termination
10542 -- Dependencies: OKL building blocks AMTX and AMUV,
10543 -- Parameters: IN: p_contract_id, p_contract_line_id (optional)
10544 -- p_operand (required additional parameter)
10545 -- OUT: amount
10546 -- History : 29-Aug-04 PAGARG Bug #3921591: Consider link fee assets
10547 -- while calculating amount. Include link fee assets also
10548 -- for both full and partial termination
10549 -- p_contract_line_id is used to obtain asset id
10550 -- : rmunjulu EDAT Made changes so that only unbilled fees from
10551 -- quote eff date onwards is calculated
10552 -- Version: 1.0
10553 -- End of Commnets
10554 ------------------------------------------------------------------------------
10555 FUNCTION contract_fee_amount (
10556 p_contract_id IN NUMBER,
10557 p_contract_line_id IN NUMBER)
10558 RETURN NUMBER IS
10559
10560 CURSOR l_unbilled_fee_streams_csr (
10561 cp_chr_id NUMBER,
10562 cp_fee_type VARCHAR2,
10563 cp_date DATE ) IS -- rmunjulu EDAT
10564 SELECT SUM(ste.amount) amount
10565 FROM okl_streams stm,
10566 okl_strm_type_b sty,
10567 okc_k_lines_b kle,
10568 okc_statuses_b kls,
10569 okc_line_styles_b lse,
10570 okl_strm_elements ste,
10571 okl_k_lines cle
10572 WHERE stm.khr_id = cp_chr_id
10573 AND stm.active_yn = 'Y'
10574 AND stm.say_code = 'CURR'
10575 AND ste.stm_id = stm.id
10576 AND sty.id = stm.sty_id
10577 AND sty.billable_yn = 'Y'
10578 AND kle.id = stm.kle_id
10579 AND kls.code = kle.sts_code
10580 AND kls.ste_code = 'ACTIVE'
10581 AND lse.id = kle.lse_id
10582 AND kle.id = cle.id
10583 AND lse.lty_code = 'FEE'
10584 AND ste.date_billed IS NULL -- rmunjulu EDAT
10585 AND trunc(ste.stream_element_date) > trunc(cp_date) -- rmunjulu EDAT
10586 AND cle.fee_type = cp_fee_type;
10587
10588 --Bug #3921591: pagarg +++ Rollover +++++++ Start ++++++++++
10589 -- Following cursor finds the total payments with all the assets associated
10590 -- to the given fee type for the given contract. This cursor will be used in
10591 -- case of full termination along with the above cursor.
10592 CURSOR l_unbilled_feeassets_strms_csr(
10593 cp_chr_id NUMBER,
10594 cp_fee_type VARCHAR2,
10595 cp_date DATE ) IS -- rmunjulu EDAT
10596 SELECT SUM(ste.amount) amount
10597 FROM okl_streams stm
10598 ,okl_strm_type_b sty
10599 ,okc_k_lines_b kle
10600 ,okc_statuses_b kls
10601 ,okc_line_styles_b lse
10602 ,okl_strm_elements ste
10603 ,okl_k_lines cle
10604 ,okc_k_lines_b cles
10605 WHERE stm.khr_id = cp_chr_id
10606 AND stm.active_yn = 'Y'
10607 AND stm.say_code = 'CURR'
10608 AND ste.stm_id = stm.id
10609 AND sty.id = stm.sty_id
10610 AND sty.billable_yn = 'Y'
10611 AND cles.id = stm.kle_id
10612 AND cles.cle_id = kle.id
10613 AND kls.code = kle.sts_code
10614 AND kls.ste_code = 'ACTIVE'
10615 AND lse.id = cles.lse_id
10616 AND kle.id = cle.id
10617 AND lse.lty_code = 'LINK_FEE_ASSET'
10618 AND ste.date_billed IS NULL -- rmunjulu EDAT
10619 AND trunc(ste.stream_element_date) > trunc(cp_date) -- rmunjulu EDAT
10620 AND cle.fee_type = cp_fee_type;
10621
10622 -- Following cursor obtains the total payments of a given asset associated
10623 -- to the given fee of the given contract. This will used in case of partial
10624 -- termination when we are processing formula for each link fee asset.
10625 CURSOR l_unbilled_feeasset_strms_csr(
10626 cp_chr_id NUMBER,
10627 cp_fee_type VARCHAR2,
10628 cp_asset_id NUMBER,
10629 cp_date DATE ) IS -- rmunjulu EDAT
10630 SELECT SUM(ste.amount) amount
10631 FROM okl_streams stm
10632 ,okl_strm_type_b sty
10633 ,okc_k_lines_b kle
10634 ,okc_statuses_b kls
10635 ,okc_line_styles_b lse
10636 ,okl_strm_elements ste
10637 ,okl_k_lines cle
10638 ,okc_k_lines_b cles
10639 ,okc_k_items cim
10640 WHERE stm.khr_id = cp_chr_id
10641 AND stm.active_yn = 'Y'
10642 AND stm.say_code = 'CURR'
10643 AND ste.stm_id = stm.id
10644 AND sty.id = stm.sty_id
10645 AND sty.billable_yn = 'Y'
10646 AND cles.id = stm.kle_id
10647 AND lse.id = cles.lse_id
10648 AND lse.lty_code = 'LINK_FEE_ASSET'
10649 AND cles.cle_id = kle.id
10650 AND kls.code = kle.sts_code
10651 AND kls.ste_code = 'ACTIVE'
10652 AND kle.id = cle.id
10653 AND cle.fee_type = cp_fee_type
10654 AND cim.object1_id1 = cp_asset_id
10655 AND ste.date_billed IS NULL -- rmunjulu EDAT
10656 AND trunc(ste.stream_element_date) > trunc(cp_date) -- rmunjulu EDAT
10657 AND cim.cle_id = cles.id;
10658 --Bug #3921591: pagarg +++ Rollover +++++++ End ++++++++++
10659 --mdokal assign fee type names to variables
10660 l_amafee CONSTANT VARCHAR2(30) := 'ABSORBED';
10661 l_amefee CONSTANT VARCHAR2(30) := 'EXPENSE';
10662 l_amffee CONSTANT VARCHAR2(30) := 'FINANCED';
10663 l_amgfee CONSTANT VARCHAR2(30) := 'GENERAL';
10664 l_amifee CONSTANT VARCHAR2(30) := 'INCOME';
10665 l_ammfee CONSTANT VARCHAR2(30) := 'MISCELLANEOUS';
10666 l_ampfee CONSTANT VARCHAR2(30) := 'PASSTHROUGH';
10667 l_amsfee CONSTANT VARCHAR2(30) := 'SECDEPOSIT';
10668 --Bug #3921591: pagarg +++ Rollover +++
10669 -- Constant for Rollover Fee
10670 l_amrfee CONSTANT VARCHAR2(30) := 'ROLLOVER';
10671
10672 l_operand VARCHAR2(30);
10673 l_fee_type VARCHAR2(50);
10674 l_unbilled_fee_amount NUMBER := 0;
10675 --Bug #3921591: pagarg +++ Rollover +++
10676 -- Variable to store fee asset amount
10677 l_unbilled_fee_assets_amt NUMBER := 0;
10678
10679 -- rmunjulu EDAT
10680 CURSOR get_quote_date_csr (p_quote_id IN NUMBER) IS
10681 SELECT trunc(qte.date_effective_from) date_effective_from
10682 FROM okl_trx_quotes_b qte
10683 WHERE qte.id = p_quote_id;
10684
10685 -- rmunjulu EDAT
10686 l_quote_id NUMBER;
10687 l_quote_date DATE;
10688 l_sysdate DATE;
10689 BEGIN
10690
10691 --Validate additional parameters availability
10692 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
10693 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
10694 LOOP
10695 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'p_operand' THEN
10696 l_operand := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
10697 END IF;
10698
10699 -- rmunjulu EDAT -- get quote id
10700 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_id' THEN
10701 l_quote_id := OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE;
10702 END IF;
10703 END LOOP;
10704 ELSE
10705 Okl_Api.Set_Message(p_app_name => G_APP_NAME,
10706 p_msg_name => 'OKL_AGN_FE_ADD_PARAMS');
10707 RAISE OKL_API.G_EXCEPTION_ERROR;
10708 END IF;
10709
10710 -- Determine the fee type passed
10711
10712 IF l_operand = 'AMAFEE' THEN
10713 l_fee_type := l_amafee;
10714 ELSIF l_operand = 'AMEFEE' THEN
10715 l_fee_type := l_amefee;
10716 ELSIF l_operand = 'AMFFEE' THEN
10717 l_fee_type := l_amffee;
10718 ELSIF l_operand = 'AMGFEE' THEN
10719 l_fee_type := l_amgfee;
10720 ELSIF l_operand = 'AMIFEE' THEN
10721 l_fee_type := l_amifee;
10722 ELSIF l_operand = 'AMMFEE' THEN
10723 l_fee_type := l_ammfee;
10724 ELSIF l_operand = 'AMPFEE' THEN
10725 l_fee_type := l_ampfee;
10726 ELSIF l_operand = 'AMSFEE' THEN
10727 l_fee_type := l_amsfee;
10728 --Bug #3921591: pagarg +++ Rollover +++
10729 -- Set the fee type based on operand value for Rollover
10730 ELSIF l_operand = 'AMRFEE' THEN
10731 l_fee_type := l_amrfee;
10732 END IF;
10733
10734 -- rmunjulu EDAT
10735 select sysdate into l_sysdate from dual;
10736
10737 -- rmunjulu EDAT
10738 IF l_quote_id IS NOT NULL
10739 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
10740
10741 FOR get_quote_date_rec IN get_quote_date_csr (l_quote_id) LOOP
10742 l_quote_date := get_quote_date_rec.date_effective_from;
10743 END LOOP;
10744 END IF;
10745
10746 -- rmunjulu EDAT
10747 IF l_quote_date IS NULL
10748 OR l_quote_date = OKL_API.G_MISS_DATE THEN
10749 l_quote_date := l_sysdate;
10750 END IF;
10751 -- ****************
10752 -- Calculate result
10753 -- ****************
10754 OPEN l_unbilled_fee_streams_csr (p_contract_id, l_fee_type, l_quote_date); -- rmunjulu EDAT
10755 FETCH l_unbilled_fee_streams_csr INTO l_unbilled_fee_amount;
10756 CLOSE l_unbilled_fee_streams_csr;
10757 --Bug #3921591: pagarg +++ Rollover +++++++ Start ++++++++++
10758 -- Find the sum of all the asset level streams for a given fee if asset id is null
10759 -- else if asset id is not null then sum all the asset level streams for that asset
10760 -- for the given fee.
10761 -- p_contract_line_id stores the asset id
10762 IF p_contract_line_id is NULL or p_contract_line_id = OKL_API.G_MISS_NUM THEN
10763 -- Find the total payments of all the assets associated to the given
10764 -- fee type of given contract.
10765 OPEN l_unbilled_feeassets_strms_csr (p_contract_id, l_fee_type, l_quote_date); -- rmunjulu EDAT
10766 FETCH l_unbilled_feeassets_strms_csr INTO l_unbilled_fee_assets_amt;
10767 CLOSE l_unbilled_feeassets_strms_csr;
10768 l_unbilled_fee_amount := NVL(l_unbilled_fee_amount, 0) + NVL(l_unbilled_fee_assets_amt, 0);
10769 ELSIF p_contract_line_id is NOT NULL THEN
10770 -- Find the total payments of given asset associated to the given
10771 -- fee type of given contract.
10772 OPEN l_unbilled_feeasset_strms_csr (p_contract_id, l_fee_type, p_contract_line_id, l_quote_date); -- rmunjulu EDAT
10773 FETCH l_unbilled_feeasset_strms_csr INTO l_unbilled_fee_assets_amt;
10774 CLOSE l_unbilled_feeasset_strms_csr;
10775 l_unbilled_fee_amount := NVL(l_unbilled_fee_assets_amt, 0);
10776
10777 END IF;
10778 --Bug #3921591: pagarg +++ Rollover +++++++ End ++++++++++
10779
10780 RETURN l_unbilled_fee_amount;
10781
10782 EXCEPTION
10783 WHEN OTHERS THEN
10784 -- Close open cursors
10785 IF l_unbilled_fee_streams_csr%ISOPEN THEN
10786 CLOSE l_unbilled_fee_streams_csr;
10787 END IF;
10788 -- store SQL error message on message stack for caller
10789 OKL_API.SET_MESSAGE (
10790 p_app_name => OKL_API.G_APP_NAME,
10791 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
10792 p_token1 => 'SQLCODE',
10793 p_token1_value => SQLCODE,
10794 p_token2 => 'SQLERRM',
10795 p_token2_value => SQLERRM);
10796 RETURN NULL;
10797 END contract_fee_amount;
10798 -----------------------------------------------------
10799 --End Bug# 3061765 mdokal : 11.5.10 AM Financed Fees
10800 -----------------------------------------------------
10801
10802 -- Bug# 3316994 start : 12-Jan-2004 cklee
10803 ------------------------------------------------------------------------------
10804 -- Start of Comments
10805 -- Created By: 13-Jan-2004 cklee
10806 -- Function Name: subsidy_amount
10807 -- Description: demo subsidy amount formula function
10808 -- Dependencies:
10809 -- Parameters: IN: p_contract_id, p_contract_line_id (FREE_FORM1)
10810 -- OUT: amount
10811 -- Version: 1.0
10812 -- End of Commnets
10813 ------------------------------------------------------------------------------
10814 FUNCTION SUBSIDY_AMOUNT(
10815 p_contract_id IN NUMBER
10816 ,p_contract_line_id IN NUMBER
10817 ) RETURN NUMBER
10818 IS
10819
10820 l_amount NUMBER;
10821
10822 /* case not available
10823 CURSOR c_subsidy_amount(p_cle_id okc_k_lines_b.id%TYPE) IS
10824 select (case
10825 when ROUND(MONTHS_BETWEEN(chr.end_date, cle.start_date)) <= 12 then NVL(kle.oec,0) * .2
10826 else NVL(kle.oec,0) * .1
10827 end) subsidy_amount
10828 from okc_k_lines_b cle,
10829 okl_k_lines kle,
10830 okc_k_headers_b chr
10831 where chr.id = cle.dnz_chr_id
10832 and kle.id = cle.id
10833 and cle.id = p_cle_id -- FREE_FORM1 (FIN)
10834 ;
10835 */
10836 CURSOR c_subsidy_amount(p_cle_id okc_k_lines_b.id%TYPE) IS
10837 SELECT ROUND(MONTHS_BETWEEN(CHR.end_date, cle.start_date)) months,
10838 NVL(kle.oec,0) oec
10839 FROM okc_k_lines_b cle,
10840 okl_k_lines kle,
10841 okc_k_headers_b CHR
10842 WHERE CHR.id = cle.dnz_chr_id
10843 AND kle.id = cle.id
10844 AND cle.id = p_cle_id -- FREE_FORM1 (FIN)
10845 ;
10846
10847 r_subsidy_amount c_subsidy_amount%ROWTYPE;
10848
10849
10850 BEGIN
10851
10852 OPEN c_subsidy_amount (p_contract_line_id);
10853 FETCH c_subsidy_amount INTO r_subsidy_amount;
10854 CLOSE c_subsidy_amount;
10855
10856 -- Bug 3487167
10857 IF r_subsidy_amount.months <= 12 THEN
10858 l_amount := r_subsidy_amount.oec * .02;
10859 ELSE
10860 l_amount := r_subsidy_amount.oec * .01;
10861 END IF;
10862
10863 RETURN l_amount;
10864
10865 EXCEPTION
10866 WHEN OTHERS THEN
10867 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
10868 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10869 p_msg_name => 'OKL_UNEXPECTED_ERROR',
10870 p_token1 => 'OKL_SQLCODE',
10871 p_token1_value => SQLCODE,
10872 p_token2 => 'OKL_SQLERRM',
10873 p_token2_value => SQLERRM);
10874 RETURN NULL;
10875
10876 END SUBSIDY_AMOUNT;
10877
10878 ------------------------------------------------------------------------------
10879 -- Start of Comments
10880 -- Created By: 13-Jan-2004 cklee
10881 -- Function Name: refund_subsidy
10882 -- Description: refund subsidy amount if asset terminated
10883 -- Dependencies:
10884 -- Parameters: IN: p_contract_id, p_contract_line_id (FREE_FORM1)
10885 -- OUT: amount
10886 -- Version: 1.0
10887 -- End of Commnets
10888 ------------------------------------------------------------------------------
10889 FUNCTION REFUND_SUBSIDY(
10890 p_contract_id IN NUMBER
10891 ,p_contract_line_id IN NUMBER
10892 ) RETURN NUMBER
10893 IS
10894
10895 l_amount NUMBER := 0;
10896 l_tot_amount NUMBER := 0;
10897 l_return_status VARCHAR2(1);
10898
10899 CURSOR c_subsidy_lines(p_cle_id okc_k_lines_b.id%TYPE) IS
10900 SELECT sub.accounting_method_code,
10901 top_cle.date_terminated,
10902 --TO_NUMBER(sgn.value) sty_id
10903 sub_kle.sty_id sty_id, /* Bug 6353756 */
10904 top_cle.dnz_chr_id chr_id
10905 FROM --okl_sgn_translations sgn,
10906 okl_subsidies_b sub,
10907 okl_k_lines sub_kle,
10908 okc_k_lines_b sub_cle,
10909 okc_k_lines_b top_cle
10910 WHERE --sgn.jtot_object1_code = 'OKL_STRMTYP'
10911 --AND sgn.object1_id1 = TO_CHAR(sub_kle.sty_id) AND
10912 sub.id = sub_kle.subsidy_id
10913 AND sub_cle.cle_id = top_cle.id
10914 AND sub_kle.id = sub_cle.id
10915 AND sub_cle.cle_id = p_cle_id -- FREE_FORM1
10916 ;
10917
10918 CURSOR c_refund_subsidy(p_cle_id okc_k_lines_b.id%TYPE,
10919 p_date_terminated okc_k_lines_b.date_terminated%TYPE,
10920 p_sty_id okl_strm_type_b.id%TYPE) IS
10921 SELECT NVL(SUM(selb.amount),0)
10922 FROM
10923 okl_streams stmb,
10924 okl_strm_elements selb
10925 WHERE stmb.id = selb.stm_id
10926 AND stmb.say_code = 'CURR'
10927 AND stmb.active_yn = 'Y'
10928 AND selb.date_billed IS NULL
10929 AND TRUNC(selb.stream_element_date) > TRUNC(p_date_terminated)
10930 AND stmb.kle_id = p_cle_id -- FREE_FORM1
10931 AND stmb.sty_id = p_sty_id
10932 ;
10933
10934 r_subsidy_line c_subsidy_lines%ROWTYPE;
10935 l_dependent_sty_id OKL_STRM_TYPE_B.ID%TYPE; -- Bug 6353756
10936
10937 BEGIN
10938
10939 FOR r_subsidy_line IN c_subsidy_lines(p_contract_line_id) LOOP
10940
10941 -- CASE r_subsidy_line.accounting_method_code
10942
10943 -- WHEN 'NET' THEN
10944 IF r_subsidy_line.accounting_method_code = 'NET' THEN
10945
10946 l_tot_amount := l_tot_amount + 0; -- through funding
10947
10948 -- WHEN 'AMORTIZE' THEN
10949 ELSIF r_subsidy_line.accounting_method_code = 'AMORTIZE' THEN
10950
10951 IF (r_subsidy_line.date_terminated IS NOT NULL) THEN
10952
10953 /* Bug 6353756 Get dependent stream type from r_subsidy_line.sty_id */
10954 okl_streams_util.get_dependent_stream_type(
10955 p_khr_id => r_subsidy_line.chr_id,
10956 p_primary_sty_id => r_subsidy_line.sty_id,
10957 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
10958 x_return_status => l_return_status,
10959 x_dependent_sty_id => l_dependent_sty_id);
10960 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10961 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10962 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
10963 RAISE OKL_API.G_EXCEPTION_ERROR;
10964 END IF;
10965
10966 OPEN c_refund_subsidy(p_contract_line_id,
10967 r_subsidy_line.date_terminated,
10968 --r_subsidy_line.sty_id);
10969 l_dependent_sty_id); -- Bug 6353756
10970 FETCH c_refund_subsidy INTO l_amount;
10971 CLOSE c_refund_subsidy;
10972 l_tot_amount := l_tot_amount + l_amount;
10973
10974 ELSE
10975 l_tot_amount := NULL; -- error
10976 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10977 p_msg_name => 'OKL_DATE_TERMINATED_REQUIRED');
10978
10979 RAISE OKC_API.G_EXCEPTION_ERROR;
10980 END IF;
10981
10982 ELSE -- error
10983 l_tot_amount := NULL;
10984 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
10985 p_msg_name => 'OKL_INVALID_ACCT_METHOD_CODE',
10986 p_token2 => 'COL_NAME',
10987 p_token2_value => r_subsidy_line.accounting_method_code);
10988
10989 RAISE OKC_API.G_EXCEPTION_ERROR;
10990 -- END CASE;
10991 END IF;
10992
10993 END LOOP;
10994
10995 RETURN l_tot_amount;
10996
10997 EXCEPTION
10998 WHEN OTHERS THEN
10999 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
11000 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
11001 p_msg_name => 'OKL_UNEXPECTED_ERROR',
11002 p_token1 => 'OKL_SQLCODE',
11003 p_token1_value => SQLCODE,
11004 p_token2 => 'OKL_SQLERRM',
11005 p_token2_value => SQLERRM);
11006 RETURN NULL;
11007
11008 END REFUND_SUBSIDY;
11009
11010 -- Bug# 3316994 end: 12-Jan-2004 cklee
11011
11012 -- Fix Bug 3417313, dedey 01/29/2004
11013 ----------------------------------------------------------------------------------------------------
11014
11015 -- Start of Comments
11016 -- Created By: dedey
11017 -- Function Name: contract_pretaxinc_book
11018 -- Description: Returns sum of all incomes of financial asset lines of a contract
11019 -- Dependencies:
11020 -- Parameters: contract id, line id
11021 -- Version: 1.0
11022 -- End of Commnets
11023
11024 ----------------------------------------------------------------------------------------------------
11025 FUNCTION contract_pretaxinc_book(
11026 p_chr_id IN NUMBER
11027 ,p_kle_id IN NUMBER
11028 )
11029 RETURN NUMBER IS
11030
11031 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_PRETAXINC_BOOK';
11032 l_api_version CONSTANT NUMBER := 1;
11033 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11034 x_msg_count NUMBER;
11035 x_msg_data VARCHAR2(256);
11036
11037 l_income NUMBER := 0;
11038
11039 CURSOR l_line_income_csr (p_chr_id NUMBER) IS
11040 SELECT NVL(str.link_hist_stream_id,-1) link_hist_stream_id,
11041 NVL(SUM(sele.amount),0) amount
11042 FROM okl_strm_elements sele,
11043 --okl_streams str, MGAAP 7263041
11044 okl_streams_rep_v str,
11045 okl_strm_type_v sty,
11046 okc_k_headers_b CHR,
11047 okc_statuses_b sts
11048 WHERE sele.stm_id = str.id
11049 AND str.sty_id = sty.id
11050 --AND UPPER(sty.name) = 'PRE-TAX INCOME'
11051 AND sty.stream_type_purpose = 'LEASE_INCOME'
11052 AND (NVL(str.purpose_code,'XXXX') = 'XXXX' OR
11053 NVL(str.purpose_code,'XXXX') = 'REPORT')
11054 AND str.say_code = 'CURR'
11055 AND str.active_yn = 'Y'
11056 AND CHR.id = p_chr_id
11057 AND CHR.sts_code = sts.code
11058 AND CHR.id = str.khr_id
11059 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
11060 GROUP BY str.link_hist_stream_id;
11061
11062 CURSOR l_line_income_adj_csr (p_stm_id NUMBER) IS
11063 SELECT NVL(SUM(sele.amount),0) amount
11064 FROM okl_strm_elements sele
11065 WHERE stm_id = p_stm_id
11066 AND NVL(accrued_yn,'N') = 'Y';
11067
11068 --Bug# 15992711 , Start
11069 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
11070 CURSOR l_line_income_nr_csr (p_chr_id NUMBER, p_line_type VARCHAR2) IS
11071 SELECT NVL(str.link_hist_stream_id,-1) link_hist_stream_id,
11072 NVL(SUM(sele.amount),0) amount
11073 FROM okl_strm_elements sele,
11074 --okl_streams str, MGAAP 7263041
11075 okl_streams_rep_v str,
11076 okl_strm_type_v sty,
11077 okc_k_headers_b CHR,
11078 okc_statuses_b sts,
11079 okc_k_lines_b cle,
11080 okl_k_lines kle
11081 WHERE sele.stm_id = str.id
11082 AND str.sty_id = sty.id
11083 --AND UPPER(sty.name) = 'PRE-TAX INCOME'
11084 AND sty.stream_type_purpose = 'LEASE_INCOME'
11085 AND (NVL(str.purpose_code,'XXXX') = 'XXXX' OR
11086 NVL(str.purpose_code,'XXXX') = 'REPORT')
11087 AND str.say_code = 'CURR'
11088 AND str.active_yn = 'Y'
11089 AND CHR.id = p_chr_id
11090 AND CHR.sts_code = sts.code
11091 AND CHR.id = str.khr_id
11092 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD')
11093 AND cle.chr_id = chr.id
11094 AND cle.dnz_chr_id = chr.id
11095 AND cle.id = kle.id
11096 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y')
11097 AND str.kle_id = kle.id
11098 GROUP BY str.link_hist_stream_id;
11099
11100 l_line_type VARCHAR2(30) := 'X';
11101 --Bug# 15992711 , End
11102
11103
11104 l_line_income_amount NUMBER;
11105 l_income_adj_amount NUMBER;
11106
11107 BEGIN
11108
11109 IF ( p_chr_id IS NULL ) THEN
11110 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11111 END IF;
11112
11113 --Bug# 15992711 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
11114 -- If set then based on its value set l_line_type
11115
11116 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
11117 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
11118 LOOP
11119 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
11120 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
11121 l_line_type := 'NEW'; --New
11122 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
11123 l_line_type := 'RELEASE'; --Release
11124 END IF;
11125 END IF;
11126
11127 END LOOP;
11128 END IF;
11129
11130 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
11131 -- l_line_income_nr_csr cursor in order to consider either only new
11132 -- assets or only re-leased assets, else no change in the standard behavior
11133
11134 IF l_line_type IN ('NEW','RELEASE') THEN
11135
11136 l_line_income_amount := 0;
11137 FOR l_line_income_nr_rec IN l_line_income_nr_csr (p_chr_id, l_line_type)
11138 LOOP
11139 l_line_income_amount := NVL(l_line_income_amount,0) + l_line_income_nr_rec.amount;
11140
11141 IF (l_line_income_nr_rec.link_hist_stream_id <> -1) THEN
11142 l_income_adj_amount := 0;
11143 OPEN l_line_income_adj_csr (l_line_income_nr_rec.link_hist_stream_id);
11144 FETCH l_line_income_adj_csr INTO l_income_adj_amount;
11145 CLOSE l_line_income_adj_csr;
11146
11147 l_line_income_amount := l_line_income_amount - NVL(l_income_adj_amount,0);
11148 END IF;
11149 END LOOP;
11150 ELSE
11151 --Bug# 15992711 , End
11152
11153 l_line_income_amount := 0;
11154 FOR l_line_income_rec IN l_line_income_csr (p_chr_id)
11155 LOOP
11156 l_line_income_amount := NVL(l_line_income_amount,0) + l_line_income_rec.amount;
11157
11158 IF (l_line_income_rec.link_hist_stream_id <> -1) THEN
11159 l_income_adj_amount := 0;
11160 OPEN l_line_income_adj_csr (l_line_income_rec.link_hist_stream_id);
11161 FETCH l_line_income_adj_csr INTO l_income_adj_amount;
11162 CLOSE l_line_income_adj_csr;
11163
11164 l_line_income_amount := l_line_income_amount - NVL(l_income_adj_amount,0);
11165 END IF;
11166 END LOOP;
11167
11168 --Bug# 15992711 , Start
11169 END IF;
11170 --Bug# 15992711 , End
11171
11172 l_income := l_line_income_amount;
11173
11174 RETURN l_income;
11175
11176
11177 EXCEPTION
11178
11179 WHEN OTHERS THEN
11180 Okl_Api.SET_MESSAGE(
11181 p_app_name => G_APP_NAME,
11182 p_msg_name => G_UNEXPECTED_ERROR,
11183 p_token1 => G_SQLCODE_TOKEN,
11184 p_token1_value => SQLCODE,
11185 p_token2 => G_SQLERRM_TOKEN,
11186 p_token2_value => SQLERRM);
11187 RETURN NULL;
11188
11189
11190 END contract_pretaxinc_book;
11191
11192 ----------------------------------------------------------------------------------------------------
11193
11194 -- Start of Comments
11195 -- Created By: arun.jain
11196 -- Function Name: CONTRACT_FINANCED_FEE
11197 -- Description: Returns the sum of Financed fee lines amount of a contract
11198 -- Dependencies:
11199 -- Parameters: contract id, line id
11200 -- Version: 1.0
11201 -- End of Commnets
11202
11203 ----------------------------------------------------------------------------------------------------
11204 FUNCTION CONTRACT_FINANCED_FEE(
11205 p_dnz_chr_id IN NUMBER
11206 ,p_kle_id IN NUMBER
11207 ) RETURN NUMBER
11208 IS
11209
11210 l_sum_financed_fee_amt NUMBER;
11211
11212 CURSOR sum_fin_fee_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
11213 SELECT
11214 NVL(SUM(NVL(KLEB.amount,0)),0)
11215 FROM
11216 OKL_K_LINES KLEB,
11217 OKC_K_LINES_B CLEB,
11218 OKC_LINE_STYLES_B LSEB,
11219 okc_statuses_b sts
11220 WHERE
11221 KLEB.ID = CLEB.ID AND
11222 CLEB.LSE_ID = LSEB.ID AND
11223 LSEB.LTY_CODE = 'FEE' AND
11224 KLEB.FEE_TYPE IN ('FINANCED') AND
11225 CLEB.DNZ_CHR_ID = l_dnz_chr_id AND
11226 CLEB.sts_code = sts.code AND
11227 sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
11228
11229 BEGIN
11230
11231 OPEN sum_fin_fee_csr (p_dnz_chr_id);
11232 FETCH sum_fin_fee_csr INTO l_sum_financed_fee_amt;
11233 CLOSE sum_fin_fee_csr;
11234
11235 RETURN l_sum_financed_fee_amt;
11236
11237 EXCEPTION
11238 WHEN OTHERS THEN
11239 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
11240 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
11241 p_msg_name => 'OKL_UNEXPECTED_ERROR',
11242 p_token1 => 'OKL_SQLCODE',
11243 p_token1_value => SQLCODE,
11244 p_token2 => 'OKL_SQLERRM',
11245 p_token2_value => SQLERRM);
11246 RETURN NULL;
11247
11248 END CONTRACT_FINANCED_FEE;
11249
11250
11251 ----------------------------------------------------------------------------------------------------
11252
11253 -- Start of Comments
11254 -- Created By: arun.jain
11255 -- Function Name: CONTRACT_ABSORBED_FEE
11256 -- Description: Returns the sum of Absorbed fee lines amount of a contract
11257 -- Dependencies:
11258 -- Parameters: contract id, line id
11259 -- Version: 1.0
11260 -- End of Commnets
11261
11262 ----------------------------------------------------------------------------------------------------
11263 FUNCTION CONTRACT_ABSORBED_FEE(
11264 p_dnz_chr_id IN NUMBER
11265 ,p_kle_id IN NUMBER
11266 ) RETURN NUMBER
11267 IS
11268
11269 l_sum_absorbed_fee_amt NUMBER;
11270
11271 CURSOR sum_abs_fee_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
11272 SELECT
11273 NVL(SUM(NVL(KLEB.amount,0)),0)
11274 FROM
11275 OKL_K_LINES KLEB,
11276 OKC_K_LINES_B CLEB,
11277 OKC_LINE_STYLES_B LSEB,
11278 okc_statuses_b sts
11279 WHERE
11280 KLEB.ID = CLEB.ID AND
11281 CLEB.LSE_ID = LSEB.ID AND
11282 LSEB.LTY_CODE = 'FEE' AND
11283 KLEB.FEE_TYPE IN ('ABSORBED') AND
11284 CLEB.DNZ_CHR_ID = l_dnz_chr_id AND
11285 CLEB.sts_code = sts.code AND
11286 sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
11287
11288 BEGIN
11289
11290 OPEN sum_abs_fee_csr (p_dnz_chr_id);
11291 FETCH sum_abs_fee_csr INTO l_sum_absorbed_fee_amt;
11292 CLOSE sum_abs_fee_csr;
11293
11294 RETURN l_sum_absorbed_fee_amt;
11295
11296 EXCEPTION
11297 WHEN OTHERS THEN
11298 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
11299 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
11300 p_msg_name => 'OKL_UNEXPECTED_ERROR',
11301 p_token1 => 'OKL_SQLCODE',
11302 p_token1_value => SQLCODE,
11303 p_token2 => 'OKL_SQLERRM',
11304 p_token2_value => SQLERRM);
11305 RETURN NULL;
11306
11307 END CONTRACT_ABSORBED_FEE;
11308
11309 ------------------------------------------------------------------------------
11310 -- Start of comments
11311 --
11312 -- Procedure Name : credit_check
11313 -- Description : Caculate total credit remaining
11314 --
11315 -- Business Rules :
11316 -- Parameters :IN: p_contract_id, OUT: amount
11317 -- Version : 1.0
11318 -- History :27-Aug-04 [email protected] -- Created
11319 --
11320 -- End of comments
11321 ------------------------------------------------------------------------------
11322 --START: 14-Feb-06 cklee Fixed bug#5017158 |
11323 /*| 14-Feb-06 cklee Fixed bug#5017158 |
11324 FUNCTION credit_check(
11325 p_contract_id IN NUMBER -- credit line contract id
11326 ,p_contract_line_id IN NUMBER
11327 ) RETURN NUMBER
11328 IS
11329
11330 CURSOR c_disb_tot IS
11331 SELECT TAP.AMOUNT,
11332 TAP.KHR_ID
11333 FROM OKL_TRX_AP_INVOICES_B TAP
11334 WHERE TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
11335 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
11336 -- start: cklee - okl.h ER 05/25/2005
11337 AND NOT EXISTS (SELECT 1
11338 FROM OKC_K_HEADERS_B KHR
11339 WHERE KHR.ID = TAP.KHR_ID
11340 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
11341 -- end: cklee - okl.h ER 05/25/2005
11342 ;
11343
11344 -- STRAT: cklee - bug#4655437 10/06/2005
11345 CURSOR c_principal_payments_tot IS
11346 SELECT TAR.AMOUNT,
11347 TAR.KHR_ID
11348 FROM okl_cnsld_ar_strms_b TAR
11349 WHERE TAR.receivables_invoice_id <> -99999
11350 AND exists (SELECT STY.ID
11351 FROM okl_strm_type_b STY
11352 WHERE STY.STREAM_TYPE_PURPOSE = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
11353 AND STY.ID = TAR.STY_ID);
11354
11355 l_payment_tot NUMBER := 0;
11356 -- END: cklee - bug#4655437 10/06/2005
11357
11358
11359 l_amount_limit NUMBER := 0;
11360 l_credit_remain NUMBER := 0;
11361 l_disbursement_tot NUMBER := 0;
11362
11363 l_amount NUMBER := 0;
11364 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
11365 l_api_version NUMBER := 1.0;
11366 x_msg_count NUMBER;
11367 x_msg_data VARCHAR2(4000);
11368 l_init_msg_list VARCHAR2(10) := OKL_API.G_FALSE;
11369
11370 BEGIN
11371
11372 FOR r_ast IN c_disb_tot LOOP
11373
11374 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(r_ast.KHR_ID) = p_contract_id) THEN
11375 l_disbursement_tot := l_disbursement_tot + NVL(r_ast.AMOUNT,0);
11376 END IF;
11377
11378 END LOOP;
11379
11380 -- START: cklee - bug#4655437 10/06/2005
11381 FOR r_pst IN c_principal_payments_tot LOOP
11382
11383 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(r_pst.KHR_ID) = p_contract_id) THEN
11384 l_payment_tot := l_payment_tot + NVL(r_pst.AMOUNT,0);
11385 END IF;
11386
11387 END LOOP;
11388 -- END: cklee - bug#4655437 10/06/2005
11389
11390 l_credit_remain := NVL(creditline_total_limit(p_contract_id),0) - l_disbursement_tot
11391 -- START: cklee - bug#4655437 10/06/2005
11392 + l_payment_tot;
11393 -- END: cklee - bug#4655437 10/06/2005
11394
11395 RETURN l_credit_remain;
11396
11397 EXCEPTION
11398 WHEN OTHERS THEN
11399 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
11400 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
11401 p_msg_name => 'OKL_UNEXPECTED_ERROR',
11402 p_token1 => 'OKL_SQLCODE',
11403 p_token1_value => SQLCODE,
11404 p_token2 => 'OKL_SQLERRM',
11405 p_token2_value => SQLERRM);
11406 RETURN NULL;
11407
11408 END;
11409 */
11410 FUNCTION credit_check(
11411 p_contract_id IN NUMBER -- credit line contract id
11412 ,p_contract_line_id IN NUMBER
11413 ) RETURN NUMBER
11414 IS
11415
11416 -- sjalasut, modified the cursor to have khr_id referred from okl_txl_ap_inv_lns_all_b
11417 -- changes made as part of OKLR12B disbursements project.
11418 -- cklee : 09/21/2007 restored the khr_id back to okl_trx_ap_invs_all_b
11419 -- reason: 1. line.khr_id will be always = header.khr_id
11420 -- 2. the modified code will multiply the header amount if mutliple lines found
11421
11422 CURSOR c_disb_tot(p_credit_id number) IS
11423 SELECT NVL(SUM(TAP.AMOUNT),0)
11424 FROM OKL_TRX_AP_INVOICES_B TAP,
11425 -- okl_txl_ap_inv_lns_all_b tpl,
11426 (
11427 select gov.dnz_chr_id chr_id,
11428 crd.ID credit_id
11429 from OKC_K_HEADERS_B crd,
11430 okc_Governances gov
11431 where crd.id = gov.chr_id_referred
11432 and crd.sts_code = 'ACTIVE'
11433 and crd.scs_code = 'CREDITLINE_CONTRACT'
11434 union
11435 select mla_g.dnz_chr_id chr_id,
11436 crd.ID credit_id
11437 from OKC_K_HEADERS_B crd,
11438 okc_Governances gov,
11439 OKC_K_HEADERS_B mla,
11440 okc_Governances mla_g
11441 where crd.id = gov.chr_id_referred
11442 and crd.sts_code = 'ACTIVE'
11443 and crd.scs_code = 'CREDITLINE_CONTRACT'
11444 and gov.dnz_chr_id = mla.id
11445 and mla.id = mla_g.chr_id_referred
11446 and mla.scs_code = 'MASTER_LEASE'
11447 ) ccg
11448 --WHERE TAP.id = TPL.tap_id
11449 where ccg.chr_id = Tap.KHR_ID
11450 AND ccg.credit_id = p_credit_id
11451 AND TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
11452 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
11453 --Bug# 10056660
11454 AND TAP.FUNDING_TYPE_CODE NOT IN ('SUPPLIER_RETENTION','MANUAL_DISB')
11455 AND NOT EXISTS (SELECT 1
11456 FROM OKC_K_HEADERS_B KHR
11457 WHERE KHR.ID = tap.KHR_ID
11458 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
11459 ;
11460
11461 /* ankushar, modified the cursor to replace reference to okl_cnsld_ar_strms_b
11462 OKL R12B billing changes
11463 */
11464 CURSOR c_principal_payments_tot(p_credit_id number) IS
11465 SELECT NVL(SUM(ARL.AMOUNT),0)
11466 FROM okl_bpd_ar_inv_lines_v ARL,
11467 (
11468 select gov.dnz_chr_id chr_id,
11469 crd.ID credit_id
11470 from OKC_K_HEADERS_B crd,
11471 okc_Governances gov
11472 where crd.id = gov.chr_id_referred
11473 and crd.sts_code = 'ACTIVE'
11474 and crd.scs_code = 'CREDITLINE_CONTRACT'
11475 union
11476 select mla_g.dnz_chr_id chr_id,
11477 crd.ID credit_id
11478 from OKC_K_HEADERS_B crd,
11479 okc_Governances gov,
11480 OKC_K_HEADERS_B mla,
11481 okc_Governances mla_g
11482 where crd.id = gov.chr_id_referred
11483 and crd.sts_code = 'ACTIVE'
11484 and crd.scs_code = 'CREDITLINE_CONTRACT'
11485 and gov.dnz_chr_id = mla.id
11486 and mla.id = mla_g.chr_id_referred
11487 and mla.scs_code = 'MASTER_LEASE'
11488 ) ccg
11489 WHERE ccg.chr_id = ARL.CONTRACT_ID
11490 AND ccg.credit_id = p_credit_id
11491 AND ARL.receivables_invoice_id <> -99999
11492 AND ARL.interface_line_context = 'OKL_CONTRACTS'
11493 AND exists (SELECT STY.ID
11494 FROM okl_strm_type_b STY
11495 WHERE STY.STREAM_TYPE_PURPOSE = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
11496 AND STY.ID = ARL.STY_ID);
11497
11498 l_payment_tot NUMBER := 0;
11499 l_credit_remain NUMBER := 0;
11500 l_disbursement_tot NUMBER := 0;
11501
11502 BEGIN
11503
11504 open c_disb_tot(p_contract_id);
11505 fetch c_disb_tot into l_disbursement_tot;
11506 close c_disb_tot;
11507
11508 open c_principal_payments_tot(p_contract_id);
11509 fetch c_principal_payments_tot into l_payment_tot;
11510 close c_principal_payments_tot;
11511
11512 l_credit_remain := NVL(creditline_total_limit(p_contract_id),0) - l_disbursement_tot + l_payment_tot;
11513
11514 RETURN l_credit_remain;
11515
11516 EXCEPTION
11517 WHEN OTHERS THEN
11518 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
11519 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
11520 p_msg_name => 'OKL_UNEXPECTED_ERROR',
11521 p_token1 => 'OKL_SQLCODE',
11522 p_token1_value => SQLCODE,
11523 p_token2 => 'OKL_SQLERRM',
11524 p_token2_value => SQLERRM);
11525 RETURN NULL;
11526
11527 END;
11528 --END:| 14-Feb-06 cklee Fixed bug#5017158 |
11529
11530 --------------------------------------------------------------------------------
11531
11532 -- STRAT: cklee - bug#4655437 10/06/2005
11533 ------------------------------------------------------------------------------
11534 -- Start of comments
11535 --
11536 -- Procedure Name : tot_credit_funding_pmt
11537 -- Description : Caculate total credit funding payments
11538 --
11539 -- Business Rules :
11540 -- Parameters :IN: p_contract_id, OUT: amount
11541 -- Version : 1.0
11542 -- History :07-Oct-05 [email protected] -- Created
11543 --
11544 -- End of comments
11545 ------------------------------------------------------------------------------
11546 FUNCTION tot_credit_funding_pmt(
11547 p_contract_id IN NUMBER -- credit line contract id
11548 ,p_contract_line_id IN NUMBER
11549 ) RETURN NUMBER
11550 IS
11551 -- sjalasut, modified the cursor to include khr_id from the okl_Txl_ap_inv_lns_all_b
11552 -- changes made as part of OKLR12B disbursements project
11553 /*
11554 CURSOR c_disb_tot IS
11555 SELECT TAP.AMOUNT,
11556 TPL.KHR_ID
11557 FROM OKL_TRX_AP_INVOICES_B TAP
11558 ,OKL_TXL_AP_INV_LNS_ALL_B TPL
11559 WHERE TAP.ID = TPL.TAP_ID
11560 AND TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
11561 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
11562 -- start: cklee - okl.h ER 05/25/2005
11563 AND NOT EXISTS (SELECT 1
11564 FROM OKC_K_HEADERS_B KHR
11565 WHERE KHR.ID = TPL.KHR_ID
11566 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
11567 -- end: cklee - okl.h ER 05/25/2005
11568 ;
11569 */
11570 -- cklee : 09/20/2007 change khr_id refer back to okl_trx_ap_invs_all_b instead
11571 -- reason: 1. The modified code will return duplicated header amount
11572 -- 2. line.khr_id will be always = header.khr_id
11573
11574 CURSOR c_disb_tot IS
11575 SELECT TAP.AMOUNT,
11576 TAP.KHR_ID
11577 FROM OKL_TRX_AP_INVOICES_B TAP
11578 where TAP.TRX_STATUS_CODE IN ('APPROVED','PROCESSED') -- push to AP
11579 AND TAP.FUNDING_TYPE_CODE IS NOT NULL
11580 -- start: cklee - okl.h ER 05/25/2005
11581 AND NOT EXISTS (SELECT 1
11582 FROM OKC_K_HEADERS_B KHR
11583 WHERE KHR.ID = tap.KHR_ID
11584 AND ORIG_SYSTEM_SOURCE_CODE = 'OKL_LEASE_APP')
11585 ;
11586 -- end: cklee - okl.h ER 05/25/2005
11587
11588 l_amount_limit NUMBER := 0;
11589 l_credit_remain NUMBER := 0;
11590 l_disbursement_tot NUMBER := 0;
11591
11592 l_amount NUMBER := 0;
11593 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
11594 l_api_version NUMBER := 1.0;
11595 x_msg_count NUMBER;
11596 x_msg_data VARCHAR2(4000);
11597 l_init_msg_list VARCHAR2(10) := OKL_API.G_FALSE;
11598
11599 BEGIN
11600
11601 FOR r_ast IN c_disb_tot LOOP
11602
11603 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(r_ast.KHR_ID) = p_contract_id) THEN
11604 l_disbursement_tot := l_disbursement_tot + NVL(r_ast.AMOUNT,0);
11605 END IF;
11606
11607 END LOOP;
11608
11609 RETURN l_disbursement_tot;
11610
11611 EXCEPTION
11612 WHEN OTHERS THEN
11613 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
11614 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
11615 p_msg_name => 'OKL_UNEXPECTED_ERROR',
11616 p_token1 => 'OKL_SQLCODE',
11617 p_token1_value => SQLCODE,
11618 p_token2 => 'OKL_SQLERRM',
11619 p_token2_value => SQLERRM);
11620 RETURN NULL;
11621
11622 END;
11623
11624 ------------------------------------------------------------------------------
11625 -- Start of comments
11626 --
11627 -- Procedure Name : tot_credit_principal_pmt
11628 -- Description : Caculate total credit principal payments
11629 --
11630 -- Business Rules :
11631 -- Parameters :IN: p_contract_id, OUT: amount
11632 -- Version : 1.0
11633 -- History :07-Oct-05 [email protected] -- Created
11634 --
11635 -- End of comments
11636 ------------------------------------------------------------------------------
11637 FUNCTION tot_credit_principal_pmt(
11638 p_contract_id IN NUMBER -- credit line contract id
11639 ,p_contract_line_id IN NUMBER
11640 ) RETURN NUMBER
11641 IS
11642
11643 /* ankushar 09-Feb-2007 OKL R12B Billing enhancement
11644 Replaced reference of okl_cnsld_ar_strms_b with Billing Util API call
11645 start changes
11646 */
11647 --Initialize standard API parameters
11648 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11649 x_msg_count NUMBER;
11650 x_msg_data VARCHAR2(256);
11651
11652 -- Intialize contract_invoice_tbl variable
11653 x_contract_invoice_tbl OKL_BILLING_UTIL_PVT.contract_invoice_tbl;
11654 /* ankushar end changes */
11655
11656 l_payment_tot NUMBER := 0;
11657 i NUMBER;
11658
11659
11660 BEGIN
11661
11662 /* Commented by bkatraga for bug 12378106
11663 -- Call to the Billing Util API replacing reference to okl_cnsld_ar_strms_b
11664 OKL_BILLING_UTIL_PVT.INVOICE_AMOUNT_FOR_STREAM(
11665 p_api_version => 1.0
11666 ,p_init_msg_list => OKL_API.G_FALSE
11667 ,x_return_status => x_return_status
11668 ,x_msg_count => x_msg_count
11669 ,x_msg_data => x_msg_data
11670 ,p_stream_purpose => 'UNSCHEDULED_PRINCIPAL_PAYMENT'
11671 ,x_contract_invoice_tbl => x_contract_invoice_tbl);
11672
11673 --rkuttiya added for bug 6313562
11674 IF x_contract_invoice_tbl.count > 0 THEN
11675 i := x_contract_invoice_tbl.FIRST;
11676 LOOP
11677 IF (OKL_CREDIT_PUB.get_creditline_by_chrid(x_contract_invoice_tbl(i).KHR_ID) = p_contract_id) THEN
11678 l_payment_tot := l_payment_tot + NVL(x_contract_invoice_tbl(i).AMOUNT, 0);
11679 END IF;
11680 EXIT WHEN i = x_contract_invoice_tbl.LAST;
11681 i := x_contract_invoice_tbl.NEXT(i);
11682 END LOOP;
11683 END IF;*/
11684
11685 --Added by bkatraga for bug 12378106
11686 OKL_BILLING_UTIL_PVT.CR_INVOICE_AMOUNT_FOR_STREAM(
11687 p_api_version => 1.0
11688 ,p_init_msg_list => OKL_API.G_FALSE
11689 ,x_return_status => x_return_status
11690 ,x_msg_count => x_msg_count
11691 ,x_msg_data => x_msg_data
11692 ,p_stream_purpose => 'UNSCHEDULED_PRINCIPAL_PAYMENT'
11693 ,p_cr_contract_id => p_contract_id
11694 ,x_tot_inv_line_amount => l_payment_tot);
11695
11696 /* ankushar end changes */
11697 RETURN l_payment_tot;
11698
11699 EXCEPTION
11700 WHEN OTHERS THEN
11701 --l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR ;
11702 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
11703 p_msg_name => 'OKL_UNEXPECTED_ERROR',
11704 p_token1 => 'OKL_SQLCODE',
11705 p_token1_value => SQLCODE,
11706 p_token2 => 'OKL_SQLERRM',
11707 p_token2_value => SQLERRM);
11708 RETURN NULL;
11709
11710 END;
11711 --------------------------------------------------------------------------------
11712 -- END: cklee - bug#4655437 10/06/2005
11713
11714
11715 --Bug# 3872534: start
11716 --------------------------------------------------------------------------------
11717
11718 -- Start of Comments
11719 -- Created By: Rekha Pillay (rpillay)
11720 -- Function Name: line_asset_cost
11721 -- Description: Returns the current cost of an asset in its Corporate Book
11722 -- from Oracle Assets
11723 -- Dependencies:
11724 -- Parameters: contract id, line id
11725 -- Version: 1.0
11726 -- End of Comments
11727
11728 --------------------------------------------------------------------------------
11729 FUNCTION line_asset_cost(
11730 p_contract_id IN NUMBER
11731 ,p_contract_line_id IN NUMBER
11732 )
11733 RETURN NUMBER IS
11734
11735 l_api_name CONSTANT VARCHAR2(30) := 'LINE_ASSET_COST';
11736 l_api_version CONSTANT NUMBER := 1;
11737 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11738 x_msg_count NUMBER;
11739 x_msg_data VARCHAR2(256);
11740
11741 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
11742 l_asset_fin_rec FA_API_TYPES.asset_fin_rec_type;
11743
11744 l_converted_amount NUMBER;
11745 l_contract_start_date DATE;
11746 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
11747 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
11748 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
11749 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
11750
11751 -- Bug# 4061058:
11752 -- Changes to ensure that the query works for Release Asset
11753 -- and Release Contract
11754 CURSOR l_asset_csr(p_chr_id IN NUMBER
11755 ,p_cle_id IN NUMBER
11756 ,p_book_class IN VARCHAR2
11757 ,p_book_type_code IN VARCHAR2) IS
11758 SELECT fab.asset_id,
11759 fab.book_type_code
11760 FROM okc_k_lines_v fin_ast_cle,
11761 okc_statuses_b stsb,
11762 fa_additions fad,
11763 fa_book_controls fbc,
11764 fa_books fab
11765 WHERE fin_ast_cle.id = p_cle_id
11766 AND fin_ast_cle.dnz_chr_id = p_chr_id
11767 AND fin_ast_cle.chr_id = p_chr_id
11768 AND fin_ast_cle.sts_code = stsb.code
11769 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED')
11770 AND fad.asset_number = fin_ast_cle.name
11771 AND fab.asset_id = fad.asset_id
11772 AND fab.book_type_code = fbc.book_type_code
11773 AND fab.transaction_header_id_out IS NULL
11774 --AND fbc.book_class = 'CORPORATE'
11775 AND fbc.book_class = p_book_class
11776 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
11777
11778 l_asset_rec l_asset_csr%ROWTYPE;
11779
11780 -- Bug# 4061058:
11781 -- Changes to ensure that the query works for Release Asset
11782 -- and Release Contract
11783 CURSOR l_asset_csr_incl_terminated
11784 (p_chr_id IN NUMBER
11785 ,p_cle_id IN NUMBER
11786 ,p_book_class IN VARCHAR2
11787 ,p_book_type_code IN VARCHAR2) IS
11788 SELECT fab.asset_id,
11789 fab.book_type_code
11790 FROM okc_k_lines_v fin_ast_cle,
11791 okc_statuses_b stsb,
11792 fa_additions fad,
11793 fa_book_controls fbc,
11794 fa_books fab
11795 WHERE fin_ast_cle.id = p_cle_id
11796 AND fin_ast_cle.dnz_chr_id = p_chr_id
11797 AND fin_ast_cle.chr_id = p_chr_id
11798 AND fin_ast_cle.sts_code = stsb.code
11799 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED')
11800 AND fad.asset_number = fin_ast_cle.name
11801 AND fab.asset_id = fad.asset_id
11802 AND fab.book_type_code = fbc.book_type_code
11803 AND fab.transaction_header_id_out IS NULL
11804 --AND fbc.book_class = 'CORPORATE'
11805 AND fbc.book_class = p_book_class
11806 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
11807
11808 CURSOR contract_start_date_csr(p_chr_id NUMBER) IS
11809 SELECT start_date
11810 FROM okc_k_headers_b
11811 WHERE id = p_chr_id;
11812
11813 --Bug# 16511024, Start
11814 --ndani - 15-Mar-2013 Start - Rebook Accounting Fix
11815 -- Changes to ensure that the query works for Release Asset and Release Contract
11816 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
11817 CURSOR l_nr_asset_csr(p_chr_id IN NUMBER
11818 ,p_cle_id IN NUMBER
11819 ,p_book_class IN VARCHAR2
11820 ,p_book_type_code IN VARCHAR2
11821 ,p_line_type IN VARCHAR2) IS
11822 SELECT fab.asset_id,
11823 fab.book_type_code
11824 FROM okc_k_lines_v fin_ast_cle,
11825 okc_statuses_b stsb,
11826 fa_additions fad,
11827 fa_book_controls fbc,
11828 fa_books fab,
11829 okl_k_lines_v kle
11830 WHERE fin_ast_cle.id = p_cle_id
11831 AND fin_ast_cle.dnz_chr_id = p_chr_id
11832 AND fin_ast_cle.chr_id = p_chr_id
11833 AND fin_ast_cle.sts_code = stsb.code
11834 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED')
11835 AND fad.asset_number = fin_ast_cle.name
11836 AND fab.asset_id = fad.asset_id
11837 AND fab.book_type_code = fbc.book_type_code
11838 AND fab.transaction_header_id_out IS NULL
11839 --AND fbc.book_class = 'CORPORATE'
11840 AND fbc.book_class = p_book_class
11841 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code)
11842 AND fin_ast_cle.id = kle.id
11843 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
11844
11845
11846 -- Changes to ensure that the query works for Release Asset
11847 -- and Release Contract
11848 -- Considers either new or re-leased assets of a Contract based on p_line_type parameter
11849 CURSOR l_nr_asset_csr_incl_terminated
11850 (p_chr_id IN NUMBER
11851 ,p_cle_id IN NUMBER
11852 ,p_book_class IN VARCHAR2
11853 ,p_book_type_code IN VARCHAR2
11854 ,p_line_type IN VARCHAR2) IS
11855 SELECT fab.asset_id,
11856 fab.book_type_code
11857 FROM okc_k_lines_v fin_ast_cle,
11858 okc_statuses_b stsb,
11859 fa_additions fad,
11860 fa_book_controls fbc,
11861 fa_books fab,
11862 okl_k_lines_v kle
11863 WHERE fin_ast_cle.id = p_cle_id
11864 AND fin_ast_cle.dnz_chr_id = p_chr_id
11865 AND fin_ast_cle.chr_id = p_chr_id
11866 AND fin_ast_cle.sts_code = stsb.code
11867 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED')
11868 AND fad.asset_number = fin_ast_cle.name
11869 AND fab.asset_id = fad.asset_id
11870 AND fab.book_type_code = fbc.book_type_code
11871 AND fab.transaction_header_id_out IS NULL
11872 --AND fbc.book_class = 'CORPORATE'
11873 AND fbc.book_class = p_book_class
11874 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code)
11875 AND fin_ast_cle.id = kle.id
11876 AND NVL(kle.re_lease_yn,'N') = DECODE(p_line_type,'NEW','N','RELEASE','Y');
11877
11878 l_line_type VARCHAR2(30) := 'X';
11879 --ndani - 15-Mar-2013 End - Rebook Accounting Fix
11880 --Bug# 16511024, End
11881
11882 l_discount_incl_terminated BOOLEAN := FALSE;
11883 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
11884 l_book_class FA_BOOK_CONTROLS.BOOK_CLASS%TYPE;
11885 l_book_type_code FA_BOOK_CONTROLS.BOOK_TYPE_CODE%TYPE;
11886
11887
11888 BEGIN
11889
11890 IF (( p_contract_id IS NULL ) OR ( p_contract_line_id IS NULL )) THEN
11891 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11892 END IF;
11893
11894 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
11895 l_book_type_code := NULL;
11896 IF (l_streams_repo_policy = 'PRIMARY') THEN
11897 l_book_class := 'CORPORATE';
11898 ELSE
11899 l_book_class := 'TAX';
11900 l_book_type_code := OKL_ACCOUNTING_UTIL.get_fa_reporting_book(
11901 p_kle_id => p_contract_line_id);
11902 END IF;
11903 -- rmunjulu 4042892
11904 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
11905 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
11906 LOOP
11907 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
11908 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
11909 l_discount_incl_terminated := TRUE;
11910
11911 --ndani - 15-Mar-2013 Start - Rebook Accounting Fix
11912 --Bug# 16511024 : Check for 'NEW_RELEASE_ASSET' global parameter is set or not
11913 -- If set then based on its value set l_line_type
11914
11915 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'NEW_RELEASE_ASSET' THEN
11916 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'NEW' THEN
11917 l_line_type := 'NEW'; --New
11918 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'RELEASE' THEN
11919 l_line_type := 'RELEASE'; --Release
11920 END IF;
11921 --Bug# 16511024 , End
11922 --ndani - 15-Mar-2013 End - Rebook Accounting Fix
11923 END IF;
11924 END LOOP;
11925 END IF;
11926
11927 --ndani - 15-Mar-2013 Start - Rebook Accounting Fix
11928 --Bug# 16511024 , Start
11929 -- If l_line_type is set as either 'NEW' or 'RELEASE' call
11930 -- l_nr_asset_csr_incl_terminated or l_nr_asset_csr cursor in order to consider either only new
11931 -- assets or only re-leased assets, else no change in the standard behavior
11932
11933 IF l_line_type IN ('NEW','RELEASE') THEN
11934 IF l_discount_incl_terminated THEN
11935 OPEN l_nr_asset_csr_incl_terminated(p_chr_id => p_contract_id,
11936 p_cle_id => p_contract_line_id,
11937 p_book_class => l_book_class,
11938 p_book_type_code => l_book_type_code,
11939 p_line_type => l_line_type);
11940 FETCH l_nr_asset_csr_incl_terminated INTO l_asset_rec;
11941 IF( l_nr_asset_csr_incl_terminated%NOTFOUND ) THEN
11942 CLOSE l_nr_asset_csr_incl_terminated;
11943 --Commenting RAISE statement, instead returning value zero
11944 --RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11945 l_converted_amount := 0;
11946 RETURN l_converted_amount;
11947 END IF;
11948 CLOSE l_nr_asset_csr_incl_terminated;
11949 ELSE
11950 OPEN l_nr_asset_csr(p_chr_id => p_contract_id,
11951 p_cle_id => p_contract_line_id,
11952 p_book_class => l_book_class,
11953 p_book_type_code => l_book_type_code,
11954 p_line_type => l_line_type);
11955 FETCH l_nr_asset_csr INTO l_asset_rec;
11956 IF( l_nr_asset_csr%NOTFOUND ) THEN
11957 CLOSE l_nr_asset_csr;
11958 --Commenting RAISE statement, instead returning value zero
11959 --RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11960 l_converted_amount := 0;
11961 RETURN l_converted_amount;
11962 END IF;
11963 CLOSE l_nr_asset_csr;
11964 END IF;
11965
11966 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
11967 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
11968 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
11969
11970 --IF l_discount_incl_terminated THEN -- Commented and re-written as ELSIF
11971 ELSIF l_discount_incl_terminated THEN
11972 --Bug# 16511024 , End
11973 --ndani - 15-Mar-2013 End - Rebook Accounting Fix
11974 OPEN l_asset_csr_incl_terminated(p_chr_id => p_contract_id,
11975 p_cle_id => p_contract_line_id,
11976 p_book_class => l_book_class,
11977 p_book_type_code => l_book_type_code);
11978 FETCH l_asset_csr_incl_terminated INTO l_asset_rec;
11979 IF( l_asset_csr_incl_terminated%NOTFOUND ) THEN
11980 CLOSE l_asset_csr_incl_terminated;
11981 --ndani - 15-Mar-2013 Start - Rebook Accounting Fix
11982 --Bug# 16511024, Start :Commenting RAISE statement, instead returning value zero
11983 --RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11984 l_converted_amount := 0;
11985 RETURN l_converted_amount;
11986 --Bug# 16511024, End
11987 --ndani - 15-Mar-2013 End - Rebook Accounting Fix
11988 END IF;
11989 CLOSE l_asset_csr_incl_terminated;
11990 ELSE
11991 OPEN l_asset_csr(p_chr_id => p_contract_id,
11992 p_cle_id => p_contract_line_id,
11993 p_book_class => l_book_class,
11994 p_book_type_code => l_book_type_code);
11995 FETCH l_asset_csr INTO l_asset_rec;
11996 IF( l_asset_csr%NOTFOUND ) THEN
11997 CLOSE l_asset_csr;
11998 --ndani - 15-Mar-2013 Start - Rebook Accounting Fix
11999 --Bug# 16511024, Start :Commenting RAISE statement, instead returning value zero
12000 --RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12001 l_converted_amount := 0;
12002 RETURN l_converted_amount;
12003 --Bug# 16511024, End
12004 --ndani - 15-Mar-2013 End - Rebook Accounting Fix
12005 END IF;
12006 CLOSE l_asset_csr;
12007 END IF;
12008
12009 l_asset_hdr_rec.asset_id := l_asset_rec.asset_id;
12010 l_asset_hdr_rec.book_type_code := l_asset_rec.book_type_code;
12011
12012 IF NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) THEN
12013 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12014 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
12015 );
12016 RAISE OKL_API.G_EXCEPTION_ERROR;
12017 END IF;
12018
12019 -- To fetch Asset Current Cost
12020 IF NOT FA_UTIL_PVT.get_asset_fin_rec
12021 (p_asset_hdr_rec => l_asset_hdr_rec,
12022 px_asset_fin_rec => l_asset_fin_rec,
12023 p_transaction_header_id => NULL,
12024 p_mrc_sob_type_code => 'P'
12025 ) THEN
12026
12027 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12028 p_msg_name => 'OKL_LLA_FA_ASSET_FIN_REC_ERROR'
12029 );
12030 RAISE OKL_API.G_EXCEPTION_ERROR;
12031 END IF;
12032
12033 -- convert amount into contract currency
12034 OPEN contract_start_date_csr(p_chr_id => p_contract_id);
12035 FETCH contract_start_date_csr INTO l_contract_start_date;
12036 CLOSE contract_start_date_csr;
12037
12038 l_converted_amount := 0;
12039 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
12040 p_khr_id => p_contract_id,
12041 p_from_currency => NULL,
12042 p_transaction_date => l_contract_start_date,
12043 p_amount => l_asset_fin_rec.cost,
12044 x_return_status => x_return_status,
12045 x_contract_currency => l_contract_currency,
12046 x_currency_conversion_type => l_currency_conversion_type,
12047 x_currency_conversion_rate => l_currency_conversion_rate,
12048 x_currency_conversion_date => l_currency_conversion_date,
12049 x_converted_amount => l_converted_amount);
12050
12051 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
12052 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
12053 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
12054 RAISE Okl_Api.G_EXCEPTION_ERROR;
12055 END IF;
12056
12057 RETURN l_converted_amount;
12058
12059 EXCEPTION
12060
12061 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12062 RETURN NULL;
12063
12064 WHEN OTHERS THEN
12065 Okl_Api.SET_MESSAGE(
12066 p_app_name => G_APP_NAME,
12067 p_msg_name => G_UNEXPECTED_ERROR,
12068 p_token1 => G_SQLCODE_TOKEN,
12069 p_token1_value => SQLCODE,
12070 p_token2 => G_SQLERRM_TOKEN,
12071 p_token2_value => SQLERRM);
12072 RETURN NULL;
12073
12074 END line_asset_cost;
12075
12076 --------------------------------------------------------------------------------
12077
12078 -- Start of Comments
12079 -- Created By: Rekha Pillay (rpillay)
12080 -- Function Name: line_accumulated_deprn
12081 -- Description: Returns the accumulated depreciation on an asset in
12082 -- its Corporate Book from Oracle Assets
12083 -- Dependencies:
12084 -- Parameters: contract id, line id
12085 -- Version: 1.0
12086 -- End of Comments
12087
12088 --------------------------------------------------------------------------------
12089 FUNCTION line_accumulated_deprn(
12090 p_contract_id IN NUMBER
12091 ,p_contract_line_id IN NUMBER
12092 )
12093 RETURN NUMBER IS
12094
12095 l_api_name CONSTANT VARCHAR2(30) := 'LINE_ACCUMULATED_DEPRN';
12096 l_api_version CONSTANT NUMBER := 1;
12097 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12098 x_msg_count NUMBER;
12099 x_msg_data VARCHAR2(256);
12100
12101 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
12102 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
12103
12104 l_converted_amount NUMBER;
12105 l_contract_start_date DATE;
12106 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
12107 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
12108 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
12109 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
12110
12111 -- Bug# 4061058:
12112 -- Changes to ensure that the query works for Release Asset
12113 -- and Release Contract
12114 CURSOR l_asset_csr(p_chr_id IN NUMBER
12115 ,p_cle_id IN NUMBER
12116 ,p_book_class IN VARCHAR2
12117 ,p_book_type_code IN VARCHAR2) IS
12118 SELECT fab.asset_id,
12119 fab.book_type_code
12120 FROM okc_k_lines_v fin_ast_cle,
12121 okc_statuses_b stsb,
12122 fa_additions fad,
12123 fa_book_controls fbc,
12124 fa_books fab
12125 WHERE fin_ast_cle.id = p_cle_id
12126 AND fin_ast_cle.dnz_chr_id = p_chr_id
12127 AND fin_ast_cle.chr_id = p_chr_id
12128 AND fin_ast_cle.sts_code = stsb.code
12129 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED')
12130 AND fad.asset_number = fin_ast_cle.name
12131 AND fab.asset_id = fad.asset_id
12132 AND fab.book_type_code = fbc.book_type_code
12133 AND fab.transaction_header_id_out IS NULL
12134 --AND fbc.book_class = 'CORPORATE';
12135 AND fbc.book_class = p_book_class
12136 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
12137
12138 l_asset_rec l_asset_csr%ROWTYPE;
12139
12140 -- Bug# 4061058:
12141 -- Changes to ensure that the query works for Release Asset
12142 -- and Release Contract
12143 CURSOR l_asset_csr_incl_terminated
12144 (p_chr_id IN NUMBER
12145 ,p_cle_id IN NUMBER
12146 ,p_book_class IN VARCHAR2
12147 ,p_book_type_code IN VARCHAR2) IS
12148 SELECT fab.asset_id,
12149 fab.book_type_code
12150 FROM okc_k_lines_v fin_ast_cle,
12151 okc_statuses_b stsb,
12152 fa_additions fad,
12153 fa_book_controls fbc,
12154 fa_books fab
12155 WHERE fin_ast_cle.id = p_cle_id
12156 AND fin_ast_cle.dnz_chr_id = p_chr_id
12157 AND fin_ast_cle.chr_id = p_chr_id
12158 AND fin_ast_cle.sts_code = stsb.code
12159 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED')
12160 AND fad.asset_number = fin_ast_cle.name
12161 AND fab.asset_id = fad.asset_id
12162 AND fab.book_type_code = fbc.book_type_code
12163 AND fab.transaction_header_id_out IS NULL
12164 --AND fbc.book_class = 'CORPORATE';
12165 AND fbc.book_class = p_book_class
12166 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
12167
12168 CURSOR contract_start_date_csr(p_chr_id NUMBER) IS
12169 SELECT start_date
12170 FROM okc_k_headers_b
12171 WHERE id = p_chr_id;
12172
12173 l_discount_incl_terminated BOOLEAN := FALSE;
12174 l_streams_repo_policy VARCHAR2(80); -- MGAAP 7263041
12175 l_book_class FA_BOOK_CONTROLS.BOOK_CLASS%TYPE;
12176 l_book_type_code FA_BOOK_CONTROLS.BOOK_TYPE_CODE%TYPE;
12177
12178 BEGIN
12179
12180 IF (( p_contract_id IS NULL ) OR ( p_contract_line_id IS NULL )) THEN
12181 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12182 END IF;
12183
12184 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
12185 l_book_type_code := NULL;
12186 IF (l_streams_repo_policy = 'PRIMARY') THEN
12187 l_book_class := 'CORPORATE';
12188 ELSE
12189 l_book_class := 'TAX';
12190 l_book_type_code := OKL_ACCOUNTING_UTIL.get_fa_reporting_book(
12191 p_kle_id => p_contract_line_id);
12192 END IF;
12193 -- rmunjulu 4042892
12194 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
12195 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
12196 LOOP
12197 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
12198 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
12199 l_discount_incl_terminated := TRUE;
12200 END IF;
12201 END LOOP;
12202 END IF;
12203
12204 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
12205 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
12206 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
12207
12208 IF l_discount_incl_terminated THEN
12209 OPEN l_asset_csr_incl_terminated(p_chr_id => p_contract_id,
12210 p_cle_id => p_contract_line_id,
12211 p_book_class => l_book_class,
12212 p_book_type_code => l_book_type_code);
12213 FETCH l_asset_csr_incl_terminated INTO l_asset_rec;
12214 IF( l_asset_csr_incl_terminated%NOTFOUND ) THEN
12215 CLOSE l_asset_csr_incl_terminated;
12216 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12217 END IF;
12218 CLOSE l_asset_csr_incl_terminated;
12219 ELSE
12220 OPEN l_asset_csr(p_chr_id => p_contract_id,
12221 p_cle_id => p_contract_line_id,
12222 p_book_class => l_book_class,
12223 p_book_type_code => l_book_type_code);
12224 FETCH l_asset_csr INTO l_asset_rec;
12225 IF( l_asset_csr%NOTFOUND ) THEN
12226 CLOSE l_asset_csr;
12227 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12228 END IF;
12229 CLOSE l_asset_csr;
12230 END IF;
12231
12232 l_asset_hdr_rec.asset_id := l_asset_rec.asset_id;
12233 l_asset_hdr_rec.book_type_code := l_asset_rec.book_type_code;
12234
12235 IF NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) THEN
12236 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12237 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
12238 );
12239 RAISE OKL_API.G_EXCEPTION_ERROR;
12240 END IF;
12241
12242 -- To fetch Depreciation Reserve
12243 IF NOT FA_UTIL_PVT.get_asset_deprn_rec
12244 (p_asset_hdr_rec => l_asset_hdr_rec ,
12245 px_asset_deprn_rec => l_asset_deprn_rec,
12246 p_period_counter => NULL,
12247 p_mrc_sob_type_code => 'P'
12248 ) THEN
12249 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
12250 p_msg_name => 'OKL_LLA_FA_DEPRN_REC_ERROR'
12251 );
12252 RAISE OKL_API.G_EXCEPTION_ERROR;
12253 END IF;
12254
12255 -- convert amount into contract currency
12256 OPEN contract_start_date_csr(p_chr_id => p_contract_id);
12257 FETCH contract_start_date_csr INTO l_contract_start_date;
12258 CLOSE contract_start_date_csr;
12259
12260 l_converted_amount := 0;
12261 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
12262 p_khr_id => p_contract_id,
12263 p_from_currency => NULL,
12264 p_transaction_date => l_contract_start_date,
12265 p_amount => l_asset_deprn_rec.deprn_reserve,
12266 x_return_status => x_return_status,
12267 x_contract_currency => l_contract_currency,
12268 x_currency_conversion_type => l_currency_conversion_type,
12269 x_currency_conversion_rate => l_currency_conversion_rate,
12270 x_currency_conversion_date => l_currency_conversion_date,
12271 x_converted_amount => l_converted_amount);
12272
12273 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
12274 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
12275 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
12276 RAISE Okl_Api.G_EXCEPTION_ERROR;
12277 END IF;
12278
12279 RETURN l_converted_amount;
12280
12281 EXCEPTION
12282
12283 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12284 RETURN NULL;
12285
12286 WHEN OTHERS THEN
12287 Okl_Api.SET_MESSAGE(
12288 p_app_name => G_APP_NAME,
12289 p_msg_name => G_UNEXPECTED_ERROR,
12290 p_token1 => G_SQLCODE_TOKEN,
12291 p_token1_value => SQLCODE,
12292 p_token2 => G_SQLERRM_TOKEN,
12293 p_token2_value => SQLERRM);
12294 RETURN NULL;
12295
12296 END line_accumulated_deprn;
12297
12298 --------------------------------------------------------------------------------
12299
12300 -- Start of Comments
12301 -- Created By: Rekha Pillay (rpillay)
12302 -- Function Name: contract_asset_cost
12303 -- Description: Returns the sum of current cost of all assets
12304 -- in the contract from Oracle Assets
12305 -- Dependencies:
12306 -- Parameters: contract id, line id
12307 -- Version: 1.0
12308 -- End of Comments
12309
12310 --------------------------------------------------------------------------------
12311 FUNCTION contract_asset_cost(
12312 p_contract_id IN NUMBER
12313 ,p_contract_line_id IN NUMBER
12314 )
12315 RETURN NUMBER IS
12316
12317 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_ASSET_COST';
12318 l_api_version CONSTANT NUMBER := 1;
12319 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12320 x_msg_count NUMBER;
12321 x_msg_data VARCHAR2(256);
12322
12323 CURSOR l_finast_csr(p_chr_id IN NUMBER) IS
12324 SELECT fin_cle.id
12325 FROM okc_k_lines_b fin_cle,
12326 okc_line_styles_b lse,
12327 okc_statuses_b stsb
12328 WHERE fin_cle.dnz_chr_id = p_chr_id
12329 AND fin_cle.chr_id = p_chr_id
12330 AND fin_cle.lse_id = lse.id
12331 AND lse.lty_code = 'FREE_FORM1'
12332 AND fin_cle.sts_code = stsb.code
12333 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED');
12334
12335 CURSOR l_finast_csr_incl_terminated(p_chr_id IN NUMBER) IS
12336 SELECT fin_cle.id
12337 FROM okc_k_lines_b fin_cle,
12338 okc_line_styles_b lse,
12339 okc_statuses_b stsb
12340 WHERE fin_cle.dnz_chr_id = p_chr_id
12341 AND fin_cle.chr_id = p_chr_id
12342 AND fin_cle.lse_id = lse.id
12343 AND lse.lty_code = 'FREE_FORM1'
12344 AND fin_cle.sts_code = stsb.code
12345 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED');
12346
12347 l_sum_asset_cost NUMBER;
12348 l_asset_cost NUMBER;
12349
12350 l_discount_incl_terminated BOOLEAN := FALSE;
12351
12352 BEGIN
12353
12354 IF ( p_contract_id IS NULL ) THEN
12355 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12356 END IF;
12357
12358 l_sum_asset_cost := 0;
12359
12360 -- rmunjulu 4042892
12361 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
12362 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
12363 LOOP
12364 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
12365 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
12366 l_discount_incl_terminated := TRUE;
12367 END IF;
12368 END LOOP;
12369 END IF;
12370
12371
12372 -- IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
12373 -- AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
12374 -- AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
12375
12376 IF l_discount_incl_terminated THEN
12377 FOR l_finast_rec IN l_finast_csr_incl_terminated(p_chr_id => p_contract_id) LOOP
12378 l_asset_cost := line_asset_cost(p_contract_id,l_finast_rec.id);
12379 IF (l_asset_cost IS NULL) THEN
12380 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12381 END IF;
12382 l_sum_asset_cost := l_sum_asset_cost + l_asset_cost;
12383 END LOOP;
12384
12385 ELSE
12386
12387 FOR l_finast_rec IN l_finast_csr(p_chr_id => p_contract_id) LOOP
12388 l_asset_cost := line_asset_cost(p_contract_id,l_finast_rec.id);
12389 IF (l_asset_cost IS NULL) THEN
12390 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12391 END IF;
12392 l_sum_asset_cost := l_sum_asset_cost + l_asset_cost;
12393 END LOOP;
12394
12395 END IF;
12396
12397 RETURN l_sum_asset_cost;
12398
12399 EXCEPTION
12400
12401 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12402 RETURN NULL;
12403
12404 WHEN OTHERS THEN
12405 Okl_Api.SET_MESSAGE(
12406 p_app_name => G_APP_NAME,
12407 p_msg_name => G_UNEXPECTED_ERROR,
12408 p_token1 => G_SQLCODE_TOKEN,
12409 p_token1_value => SQLCODE,
12410 p_token2 => G_SQLERRM_TOKEN,
12411 p_token2_value => SQLERRM);
12412 RETURN NULL;
12413
12414 END contract_asset_cost;
12415
12416 --------------------------------------------------------------------------------
12417
12418 -- Start of Comments
12419 -- Created By: Rekha Pillay (rpillay)
12420 -- Function Name: contract_accumulated_deprn
12421 -- Description: Returns the sum of accumulated depreciation
12422 -- for all assets in the contract from Oracle Assets
12423 -- Dependencies:
12424 -- Parameters: contract id, line id
12425 -- Version: 1.0
12426 -- End of Comments
12427
12428 --------------------------------------------------------------------------------
12429 FUNCTION contract_accumulated_deprn(
12430 p_contract_id IN NUMBER
12431 ,p_contract_line_id IN NUMBER
12432 )
12433 RETURN NUMBER IS
12434
12435 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_ACCUMULATED_DEPRN';
12436 l_api_version CONSTANT NUMBER := 1;
12437 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12438 x_msg_count NUMBER;
12439 x_msg_data VARCHAR2(256);
12440
12441 CURSOR l_finast_csr(p_chr_id IN NUMBER) IS
12442 SELECT fin_cle.id
12443 FROM okc_k_lines_b fin_cle,
12444 okc_line_styles_b lse,
12445 okc_statuses_b stsb
12446 WHERE fin_cle.dnz_chr_id = p_chr_id
12447 AND fin_cle.chr_id = p_chr_id
12448 AND fin_cle.lse_id = lse.id
12449 AND lse.lty_code = 'FREE_FORM1'
12450 AND fin_cle.sts_code = stsb.code
12451 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED');
12452
12453 CURSOR l_finast_csr_incl_terminated(p_chr_id IN NUMBER) IS
12454 SELECT fin_cle.id
12455 FROM okc_k_lines_b fin_cle,
12456 okc_line_styles_b lse,
12457 okc_statuses_b stsb
12458 WHERE fin_cle.dnz_chr_id = p_chr_id
12459 AND fin_cle.chr_id = p_chr_id
12460 AND fin_cle.lse_id = lse.id
12461 AND lse.lty_code = 'FREE_FORM1'
12462 AND fin_cle.sts_code = stsb.code
12463 AND stsb.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED');
12464
12465 l_sum_accumulated_deprn NUMBER;
12466 l_accumulated_deprn NUMBER;
12467
12468 l_discount_incl_terminated BOOLEAN := FALSE;
12469
12470 BEGIN
12471
12472 IF ( p_contract_id IS NULL ) THEN
12473 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12474 END IF;
12475
12476 l_sum_accumulated_deprn := 0;
12477
12478 -- rmunjulu 4042892
12479 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
12480 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
12481 LOOP
12482 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
12483 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
12484 l_discount_incl_terminated := TRUE;
12485 END IF;
12486 END LOOP;
12487 END IF;
12488
12489
12490 --IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0
12491 --AND Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS(0).NAME = 'TERMINATED_LINES_YN'
12492 --AND Okl_Execute_Formula_Pub.g_additional_parameters(0).value = 'Y' THEN
12493
12494 IF l_discount_incl_terminated THEN
12495 FOR l_finast_rec IN l_finast_csr_incl_terminated(p_chr_id => p_contract_id) LOOP
12496 l_accumulated_deprn := line_accumulated_deprn(p_contract_id,l_finast_rec.id);
12497 IF (l_accumulated_deprn IS NULL) THEN
12498 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12499 END IF;
12500 l_sum_accumulated_deprn := l_sum_accumulated_deprn + l_accumulated_deprn;
12501 END LOOP;
12502
12503 ELSE
12504
12505 FOR l_finast_rec IN l_finast_csr(p_chr_id => p_contract_id) LOOP
12506 l_accumulated_deprn := line_accumulated_deprn(p_contract_id,l_finast_rec.id);
12507 IF (l_accumulated_deprn IS NULL) THEN
12508 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12509 END IF;
12510 l_sum_accumulated_deprn := l_sum_accumulated_deprn + l_accumulated_deprn;
12511 END LOOP;
12512
12513 END IF;
12514
12515 RETURN l_sum_accumulated_deprn;
12516
12517 EXCEPTION
12518
12519 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12520 RETURN NULL;
12521
12522 WHEN OTHERS THEN
12523 Okl_Api.SET_MESSAGE(
12524 p_app_name => G_APP_NAME,
12525 p_msg_name => G_UNEXPECTED_ERROR,
12526 p_token1 => G_SQLCODE_TOKEN,
12527 p_token1_value => SQLCODE,
12528 p_token2 => G_SQLERRM_TOKEN,
12529 p_token2_value => SQLERRM);
12530 RETURN NULL;
12531
12532 END contract_accumulated_deprn;
12533
12534 --Bug# 3872534: end
12535
12536 --------------------------------------------------------------------------------
12537
12538 -- Start of Comments
12539 -- Created By: avsingh
12540 -- Function Name: contract_financed_amount
12541 -- Description: Returns the contract financed amount for
12542 -- booking page
12543 -- Dependencies:
12544 -- Parameters: contract id, line id
12545 -- Version: 1.0
12546 -- End of Comments
12547
12548 --------------------------------------------------------------------------------
12549 FUNCTION contract_financed_amount(
12550 p_contract_id IN NUMBER
12551 ,p_contract_line_id IN NUMBER
12552 )
12553 RETURN NUMBER IS
12554
12555 l_api_name CONSTANT VARCHAR2(30) := 'CONTRACT_CAPITAL_AMOUNT';
12556 l_api_version CONSTANT NUMBER := 1;
12557 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12558 x_msg_count NUMBER;
12559 x_msg_data VARCHAR2(256);
12560
12561 --cursor to find total capital amount
12562 CURSOR l_cap_amnt_csr( ChrId NUMBER) IS
12563 SELECT NVL(SUM(kle.capital_amount),0)
12564 --bug# 4899328
12565 --+ NVL(SUM(kle.capitalized_interest),0) CapAmountLines
12566 FROM OKC_LINE_STYLES_B LSEB,
12567 OKL_K_LINES KLE,
12568 OKC_K_LINES_B CLEB,
12569 OKC_STATUSES_B STSB
12570 WHERE LSEB.ID = CLEB.LSE_ID
12571 AND LSEB.lty_code = 'FREE_FORM1'
12572 AND KLE.id = CLEB.ID
12573 AND CLEB.CHR_ID = ChrId
12574 AND CLEB.DNZ_CHR_ID = ChrId
12575 AND CLEB.sts_code = STSB.code
12576 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
12577
12578 -- fixed bug 4134296
12579 -- cursor to find total Rollover Fee Amount for a Contract
12580 CURSOR l_rollover_fee_csr(l_dnz_chr_id okc_k_headers_b.id%TYPE) IS
12581 SELECT
12582 NVL(SUM(NVL(KLEB.amount,0)),0) ROLLOVER_AMOUNT
12583 FROM
12584 OKL_K_LINES KLEB,
12585 OKC_K_LINES_B CLEB,
12586 OKC_LINE_STYLES_B LSEB,
12587 OKC_STATUSES_B STS
12588 WHERE
12589 KLEB.ID = CLEB.ID AND
12590 CLEB.LSE_ID = LSEB.ID AND
12591 LSEB.LTY_CODE = 'FEE' AND
12592 KLEB.FEE_TYPE = 'ROLLOVER' AND
12593 CLEB.DNZ_CHR_ID = l_dnz_chr_id AND
12594 CLEB.STS_CODE = STS.CODE AND
12595 STS.STE_CODE NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
12596
12597
12598 l_rollover_fee_amount NUMBER;
12599
12600 l_capital_amount NUMBER;
12601
12602 l_financed_fee NUMBER;
12603
12604 l_contract_financed_amount NUMBER;
12605
12606
12607 BEGIN
12608
12609 IF ( p_contract_id IS NULL ) THEN
12610 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
12611 END IF;
12612
12613 l_capital_amount := 0;
12614 l_financed_fee := 0;
12615 l_contract_financed_amount := 0;
12616 l_rollover_fee_amount := 0;
12617
12618 OPEN l_cap_amnt_csr(ChrId => p_contract_id);
12619 FETCH l_cap_amnt_csr INTO l_capital_amount;
12620 IF l_cap_amnt_csr%NOTFOUND THEN
12621 NULL;
12622 END IF;
12623 CLOSE l_cap_amnt_csr;
12624
12625 FOR l_rollover_fee in l_rollover_fee_csr(p_contract_id)
12626 LOOP
12627
12628 l_rollover_fee_amount := l_rollover_fee.rollover_amount;
12629
12630 END LOOP;
12631
12632
12633 l_financed_fee := contract_financed_fee(p_contract_id, NULL);
12634 l_contract_financed_amount := l_capital_amount + l_financed_fee + l_rollover_fee_amount;
12635
12636 RETURN l_contract_financed_amount;
12637
12638 EXCEPTION
12639
12640 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12641 RETURN NULL;
12642
12643 WHEN OTHERS THEN
12644 Okl_Api.SET_MESSAGE(
12645 p_app_name => G_APP_NAME,
12646 p_msg_name => G_UNEXPECTED_ERROR,
12647 p_token1 => G_SQLCODE_TOKEN,
12648 p_token1_value => SQLCODE,
12649 p_token2 => G_SQLERRM_TOKEN,
12650 p_token2_value => SQLERRM);
12651 RETURN NULL;
12652 END contract_financed_amount;
12653
12654 --start:cklee
12655 --------------------------------------------------------------------------------
12656
12657 -- Start of Comments
12658 -- Created By: cklee
12659 -- Function Name: rollover fee
12660 -- Description: Returns the credit line total rollover fee
12661 --
12662 -- Dependencies:
12663 -- Parameters: contract id, line id
12664 -- Version: 1.0
12665 -- End of Comments
12666
12667 --------------------------------------------------------------------------------
12668 FUNCTION rollover_fee(
12669 p_contract_id IN NUMBER
12670 ,p_contract_line_id IN NUMBER
12671 )
12672 RETURN NUMBER IS
12673
12674 l_api_name CONSTANT VARCHAR2(30) := 'ROLLOVER_FEE';
12675 l_api_version CONSTANT NUMBER := 1;
12676 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12677 x_msg_count NUMBER;
12678 x_msg_data VARCHAR2(256);
12679
12680 --cursor to find...
12681 Cursor l_csr( ChrId NUMBER) IS
12682 SELECT NVL(chr.TOT_CL_TRANSFER_AMT,0)
12683 FROM OKL_K_HEADERS chr
12684 WHERE chr.ID = ChrId;
12685
12686 l_amount number := 0;
12687
12688 BEGIN
12689
12690 open l_csr(ChrId => p_contract_id);
12691 fetch l_csr into l_amount;
12692 close l_csr;
12693
12694 RETURN l_amount;
12695
12696 EXCEPTION
12697
12698 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12699 RETURN NULL;
12700
12701 WHEN OTHERS THEN
12702 Okl_Api.SET_MESSAGE(
12703 p_app_name => G_APP_NAME,
12704 p_msg_name => G_UNEXPECTED_ERROR,
12705 p_token1 => G_SQLCODE_TOKEN,
12706 p_token1_value => SQLCODE,
12707 p_token2 => G_SQLERRM_TOKEN,
12708 p_token2_value => SQLERRM);
12709 RETURN NULL;
12710 END rollover_fee;
12711
12712 --------------------------------------------------------------------------------
12713
12714 -- Start of Comments
12715 -- Created By: cklee
12716 -- Function Name: tot_net_transfers
12717 -- Description: Returns the credit line total net transfers (T and A)
12718 --
12719 -- Dependencies:
12720 -- Parameters: contract id, line id
12721 -- Version: 1.0
12722 -- End of Comments
12723
12724 --------------------------------------------------------------------------------
12725 FUNCTION tot_net_transfers(
12726 p_contract_id IN NUMBER
12727 ,p_contract_line_id IN NUMBER
12728 )
12729 RETURN NUMBER IS
12730
12731 l_api_name CONSTANT VARCHAR2(30) := 'TOT_NET_TRANSFERS';
12732 l_api_version CONSTANT NUMBER := 1;
12733 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12734 x_msg_count NUMBER;
12735 x_msg_data VARCHAR2(256);
12736
12737 --cursor to find...
12738 Cursor l_csr( ChrId NUMBER) IS
12739 SELECT NVL(chr.TOT_CL_NET_TRANSFER_AMT,0)
12740 FROM OKL_K_HEADERS chr
12741 WHERE chr.ID = ChrId;
12742
12743 l_amount number := 0;
12744
12745 BEGIN
12746
12747 open l_csr(ChrId => p_contract_id);
12748 fetch l_csr into l_amount;
12749 close l_csr;
12750
12751 RETURN l_amount;
12752
12753 EXCEPTION
12754
12755 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12756 RETURN NULL;
12757
12758 WHEN OTHERS THEN
12759 Okl_Api.SET_MESSAGE(
12760 p_app_name => G_APP_NAME,
12761 p_msg_name => G_UNEXPECTED_ERROR,
12762 p_token1 => G_SQLCODE_TOKEN,
12763 p_token1_value => SQLCODE,
12764 p_token2 => G_SQLERRM_TOKEN,
12765 p_token2_value => SQLERRM);
12766 RETURN NULL;
12767 END tot_net_transfers;
12768 --end:cklee
12769
12770
12771 ------------------------------------------------------------------------------
12772 -- Start of Comments
12773 -- Created By: rmunjulu 3816891
12774 -- Function Name: line_future_rent
12775 -- Description: Returns the future rent amount for a given contract line
12776 -- Dependencies: OKL building blocks AMTX and AMUV
12777 -- Parameters: IN: p_contract_id, p_line_id
12778 -- stream_type_id (stored in g_additional_parameters(1))
12779 -- OUT: amount
12780 -- Version: 1.0
12781 -- History : 31-Dec-2004 PAGARG Bug# 4097591
12782 -- : UDS impact to obtain stream type id
12783 -- : 15-Oct-07 prasjain Bug 6030917
12784 -- : Added proration logic
12785 -- End of Commnets
12786 ------------------------------------------------------------------------------
12787
12788 FUNCTION line_future_rent (
12789 p_contract_id IN NUMBER,
12790 p_contract_line_id IN NUMBER)
12791 RETURN NUMBER IS
12792
12793 -- Get future Streams
12794 -- Guru added trx_date
12795
12796 CURSOR l_future_stream_csr (
12797 cp_contract_id NUMBER,
12798 cp_contract_line_id NUMBER,
12799 cp_stream_type_id NUMBER,
12800 cp_trx_date DATE) IS
12801 SELECT SUM (NVL (ste.amount, 0)) amount_due
12802 --FROM okl_streams stm,
12803 FROM okl_streams_rep_v stm,
12804 okl_strm_type_b sty,
12805 okl_strm_elements ste
12806 WHERE stm.khr_id = cp_contract_id
12807 AND stm.kle_id = cp_contract_line_id
12808 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
12809 AND stm.active_yn = 'Y'
12810 AND stm.say_code = 'CURR'
12811 AND ste.stm_id = stm.id
12812 AND NVL (ste.amount, 0) <> 0
12813 -- Added the following 3 conditions to restrict the unbilled receivables calculation to only
12814 -- billable streams
12815 AND sty.id = stm.sty_id
12816 AND sty.billable_yn = 'Y'
12817 AND ste.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
12818
12819 -- Get future Streams for Reporting product
12820 CURSOR l_future_reporting_stream_csr (
12821 cp_contract_id NUMBER,
12822 cp_contract_line_id NUMBER,
12823 cp_stream_type_id NUMBER,
12824 cp_trx_date DATE) IS
12825 SELECT SUM (NVL (ste.amount, 0)) amount_due
12826 FROM okl_streams stm,
12827 okl_strm_type_b sty, -- Added this table to get the billable_yn flag
12828 okl_strm_elements ste
12829 WHERE stm.khr_id = cp_contract_id
12830 AND stm.kle_id = cp_contract_line_id
12831 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
12832 AND stm.active_yn = 'N' -- reporting strems are inactive
12833 AND stm.say_code = 'CURR' -- reporting streams are current
12834 AND ste.stm_id = stm.id
12835 --AND ste.date_billed IS NULL -- reporting streams never get billed
12836 AND NVL (ste.amount, 0) <> 0
12837 AND sty.id = stm.sty_id
12838 AND sty.billable_yn = 'Y' -- reporting streams are billable
12839 AND stm.purpose_code = 'REPORT'
12840 AND ste.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
12841
12842 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
12843 l_trx_date DATE;
12844
12845 l_result_amount NUMBER := 0;
12846 l_stream_type_id NUMBER;
12847
12848 -- rmunjulu
12849 l_quote_eff_date DATE;
12850 l_term_date DATE;
12851 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
12852
12853 -- Start : Bug 6030917 : prasjain
12854 --new cursor introduced for prorating and rounding the stream element amount
12855 --incase of partial unit termination
12856 CURSOR stream_element_csr (
12857 cp_contract_id NUMBER,
12858 cp_contract_line_id NUMBER,
12859 cp_stream_type_id NUMBER,
12860 cp_trx_date DATE) IS
12861 SELECT nvl(ste.amount, 0) amount
12862 FROM okl_streams stm,
12863 okl_strm_type_b sty,
12864 okl_strm_elements ste
12865 WHERE stm.khr_id = cp_contract_id
12866 AND stm.kle_id = cp_contract_line_id
12867 AND stm.sty_id = NVL (cp_stream_type_id, stm.sty_id)
12868 AND stm.active_yn = 'Y'
12869 AND stm.say_code = 'CURR'
12870 AND ste.stm_id = stm.id
12871 AND NVL (ste.amount, 0) <> 0
12872 AND sty.id = stm.sty_id
12873 AND sty.billable_yn = 'Y'
12874 AND ste.stream_element_date > nvl(cp_trx_date,sysdate);
12875
12876 stream_element_rec stream_element_csr%ROWTYPE;
12877 --currency code cursor added to derive currency code for the particular line
12878 --which will be used for rounding amount
12879 CURSOR currency_code_csr (p_kle_id NUMBER ) IS
12880 SELECT currency_code
12881 FROM okc_k_lines_b
12882 WHERE id = p_kle_id;
12883 --declaring proration factor , currency code and rounding rule variables
12884 l_proration_factor NUMBER;
12885 l_currency_code okc_k_lines_b.currency_code%TYPE;
12886 l_parent_strm_amt NUMBER;
12887 l_parent_strm_rounded_amt NUMBER;
12888 l_parent_strm_rounded_tot_amt NUMBER;
12889 --declaring other local variables
12890 i NUMBER;
12891 l_api_version NUMBER := 1;
12892 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
12893 l_msg_count NUMBER;
12894 l_msg_data VARCHAR2(100);
12895 -- End : Bug 6030917 : prasjain
12896
12897 --Bug 10075141
12898 CURSOR get_pricing_det_csr(p_khr_id IN NUMBER) IS
12899 SELECT gts.pricing_engine,
12900 gts.isg_arrears_pay_dates_option
12901 FROM okl_k_headers khr,
12902 okl_products pdt,
12903 okl_ae_tmpt_sets_all aes,
12904 okl_st_gen_tmpt_sets_all gts
12905 WHERE khr.pdt_id = pdt.id
12906 AND pdt.aes_id = aes.id
12907 AND aes.gts_id = gts.id
12908 AND khr.id = p_khr_id;
12909
12910 CURSOR get_pmnt_arrear_flag(p_khr_id IN NUMBER, p_kle_id IN NUMBER, p_sty_id IN NUMBER) IS
12911 SELECT NVL(rl_lasll.rule_information10,'N')
12912 FROM okc_rules_b rl_lasll,
12913 okc_rule_groups_b rgp,
12914 okc_rules_b rl_laslh
12915 WHERE rl_lasll.rule_information_category = 'LASLL'
12916 AND rl_lasll.rgp_id = rgp.id
12917 AND rl_lasll.object2_id1 = rl_laslh.id
12918 AND rl_laslh.rule_information_category = 'LASLH'
12919 AND rl_laslh.rgp_id = rgp.id
12920 AND rl_laslh.object1_id1 = TO_CHAR(p_sty_id)
12921 AND rgp.rgd_code = 'LALEVL'
12922 AND rgp.cle_id = p_kle_id
12923 AND rgp.dnz_chr_id = p_khr_id
12924 AND ROWNUM < 2;
12925
12926 CURSOR get_pricing_name_csr (p_sty_id IN NUMBER, p_khr_id NUMBER) IS
12927 SELECT pricing_name
12928 FROM okl_strm_tmpt_lines_uv stl,
12929 okc_k_headers_b chr,
12930 okl_k_headers khr
12931 WHERE chr.id = p_khr_id
12932 AND khr.id = chr.id
12933 AND stl.primary_yn = 'Y'
12934 AND stl.pdt_id = khr.pdt_id
12935 AND (stl.start_date <= chr.start_date)
12936 AND (stl.end_date >= chr.start_date OR stl.end_date IS NULL)
12937 AND primary_sty_id = p_sty_id;
12938
12939 l_pricing_name OKL_ST_GEN_TMPT_LNS_ALL.pricing_name%TYPE;
12940 l_pmnt_arrear_flag VARCHAR2(1);
12941 l_term_date_flag VARCHAR2(1);
12942 l_pricing_engine OKL_ST_GEN_TMPT_SETS.pricing_engine%TYPE;
12943 l_int_arrears_pay_option OKL_ST_GEN_TMPT_SETS.isg_arrears_pay_dates_option%TYPE;
12944 --end Bug 10075141
12945
12946 -- 13246259 get contract end date
12947 CURSOR get_chr_end_date_csr (p_khr_id IN NUMBER) IS
12948 SELECT end_date
12949 FROM OKC_K_HEADERS_ALL_B
12950 WHERE id = p_khr_id;
12951
12952 -- 13246259
12953 l_k_end_date DATE;
12954
12955
12956 BEGIN
12957 --PAGARG 31-Dec-2004 Bug# 4097591 Start
12958 --UDS impact. Obtain stream type id and pass it to cursor
12959
12960 OKL_STREAMS_UTIL.get_primary_stream_type(p_contract_id,
12961 'RENT',
12962 l_return_status,
12963 l_stream_type_id);
12964
12965 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
12966 THEN
12967 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12968 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
12969 THEN
12970 RAISE OKL_API.G_EXCEPTION_ERROR;
12971 END IF;
12972 --PAGARG 31-Dec-2004 Bug# 4097591 End
12973
12974 -- ********************************************
12975 -- Extract Stream Type Id from global variables
12976 -- ********************************************
12977
12978 --Validate additional parameters availability
12979 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
12980 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
12981 LOOP
12982 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
12983 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12984 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
12985 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
12986 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12987 l_trx_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
12988 -- rmunjulu -- this formula is called for amortization which will pass quote eff date
12989 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_effective_from_date'
12990 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12991 l_quote_eff_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
12992
12993 -- Start : Bug 6030917 : prasjain
12994 --added for getting the proration factor for partial unit termination
12995 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'proration_factor'
12996 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
12997 l_proration_factor := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
12998 -- End : Bug 6030917 : prasjain
12999
13000 END IF;
13001 END LOOP;
13002 ELSE
13003 l_rep_prod_streams_yn := 'N';
13004
13005 END IF;
13006
13007 IF l_rep_prod_streams_yn = 'Y' THEN
13008 IF l_trx_date IS NULL THEN
13009 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
13010 Okl_Api.Set_Message(p_app_name => g_app_name,
13011 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
13012 RAISE Okl_Api.G_EXCEPTION_ERROR;
13013 END IF;
13014 END IF;
13015
13016 -- rmunjulu
13017 IF l_quote_eff_date IS NULL THEN
13018 l_term_date := SYSDATE;
13019 ELSE
13020 l_term_date := l_quote_eff_date;
13021 END IF;
13022
13023 -- 13246259 Added get the contract end date to check if expiration
13024 OPEN get_chr_end_date_csr (p_contract_id);
13025 FETCH get_chr_end_date_csr INTO l_k_end_date;
13026 CLOSE get_chr_end_date_csr;
13027
13028 IF TRUNC(l_term_date) >= TRUNC(l_k_end_date) THEN -- 13246259 Added logic to return 0 in case of exipration
13029
13030 l_result_amount := 0;
13031
13032 ELSE -- From Termination quote
13033
13034 --Bug 10075141
13035 OPEN get_pricing_det_csr(p_khr_id => p_contract_id);
13036 FETCH get_pricing_det_csr INTO l_pricing_engine, l_int_arrears_pay_option;
13037 CLOSE get_pricing_det_csr;
13038
13039 l_pricing_name := NULL;
13040 IF l_pricing_engine = 'EXTERNAL' THEN
13041 OPEN get_pricing_name_csr(p_sty_id => l_stream_type_id,
13042 p_khr_id => p_contract_id);
13043 FETCH get_pricing_name_csr INTO l_pricing_name;
13044 CLOSE get_pricing_name_csr;
13045 END IF;
13046
13047 l_term_date_flag := 'N';
13048 IF(
13049 ((l_pricing_engine = 'EXTERNAL') AND (NVL(l_pricing_name,'XXX') = 'Rent'
13050 OR NVL(l_pricing_name, 'XXX') = 'Rent without Down Payments')) OR
13051 ((l_pricing_engine = 'INTERNAL') AND (NVL(l_int_arrears_pay_option,'XXX') = 'FIRST_DAY_OF_NEXT_PERIOD'))
13052 ) THEN
13053 l_term_date_flag := 'Y';
13054 END IF;
13055 --end Bug 10075141
13056
13057 -- ****************
13058 -- Calculate result
13059 -- ****************
13060
13061 IF l_rep_prod_streams_yn = 'Y' THEN -- MGAAP 7263041
13062 --OPEN l_future_reporting_stream_csr(p_contract_id, p_contract_line_id, l_stream_type_id,l_trx_date );
13063 OPEN l_future_stream_csr(p_contract_id, p_contract_line_id, l_stream_type_id,l_trx_date );
13064 FETCH l_future_stream_csr INTO l_result_amount;
13065 CLOSE l_future_stream_csr;
13066 ELSE
13067
13068 --Bug 10075141
13069 l_pmnt_arrear_flag := 'N';
13070 OPEN get_pmnt_arrear_flag(p_khr_id => p_contract_id,
13071 p_kle_id => p_contract_line_id,
13072 p_sty_id => l_stream_type_id);
13073 FETCH get_pmnt_arrear_flag INTO l_pmnt_arrear_flag;
13074 CLOSE get_pmnt_arrear_flag;
13075
13076 IF((l_pmnt_arrear_flag = 'Y') AND (l_term_date_flag = 'Y')) THEN
13077 l_term_date := l_term_date + 1;
13078 END IF;
13079 --end Bug 10075141
13080
13081 -- Guru added trx_date here
13082 -- Start : Bug 6030917 : prasjain
13083 --added for prorating incase of partial unit termination
13084 IF nvl(l_proration_factor,1) = 1 THEN
13085
13086 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
13087 FETCH l_future_stream_csr INTO l_result_amount;
13088 CLOSE l_future_stream_csr;
13089 ELSE
13090 --get curerncy code for the line
13091 OPEN currency_code_csr(p_contract_line_id);
13092 FETCH currency_code_csr INTO l_currency_code ;
13093 CLOSE currency_code_csr;
13094 --initializing l_parent_strm_rounded_tot_amt variable with 0
13095 l_parent_strm_rounded_tot_amt := 0;
13096
13097 FOR stream_element_rec IN stream_element_csr(p_contract_id,
13098 p_contract_line_id,
13099 l_stream_type_id,
13100 l_term_date)
13101 LOOP
13102 --prorate the amount, to derive the parent stream amount
13103 l_parent_strm_amt := stream_element_rec.amount * l_proration_factor;
13104 --round amount with streams option for paren stream element amounts
13105 okl_accounting_util.round_amount(
13106 p_api_version => l_api_version,
13107 p_init_msg_list => l_init_msg_list,
13108 x_return_status => l_return_status,
13109 x_msg_count => l_msg_count,
13110 x_msg_data => l_msg_data,
13111 p_amount => l_parent_strm_amt,
13112 p_currency_code => l_currency_code,
13113 p_round_option => 'STM',
13114 x_rounded_amount => l_parent_strm_rounded_amt
13115 );
13116 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13117 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13118 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
13119 RAISE OKL_API.G_EXCEPTION_ERROR;
13120 END IF;
13121 -- calculate the parent stream rounded total
13122 l_parent_strm_rounded_tot_amt := l_parent_strm_rounded_tot_amt
13123 + l_parent_strm_rounded_amt;
13124
13125 END LOOP;
13126 l_result_amount := l_parent_strm_rounded_tot_amt;
13127 END IF;
13128 -- End : Bug 6030917 : prasjain
13129 END IF;
13130 END IF; -- Added for 13246259
13131
13132 RETURN NVL (l_result_amount, 0);
13133
13134 EXCEPTION
13135 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
13136 -- Close open cursors
13137 IF l_future_stream_csr%ISOPEN THEN
13138 CLOSE l_future_stream_csr;
13139 END IF;
13140
13141 IF l_future_reporting_stream_csr%ISOPEN THEN
13142 CLOSE l_future_reporting_stream_csr;
13143 END IF;
13144
13145 -- Start : Bug 6030917 : prasjain
13146 IF currency_code_csr%ISOPEN THEN
13147 CLOSE currency_code_csr;
13148 END IF;
13149 IF stream_element_csr%ISOPEN THEN
13150 CLOSE stream_element_csr;
13151 END IF;
13152 -- End : Bug 6030917 : prasjain
13153
13154 RETURN NULL;
13155
13156 WHEN OTHERS THEN
13157 -- Close open cursors
13158 IF l_future_stream_csr%ISOPEN THEN
13159 CLOSE l_future_stream_csr;
13160 END IF;
13161
13162 IF l_future_reporting_stream_csr%ISOPEN THEN
13163 CLOSE l_future_reporting_stream_csr;
13164 END IF;
13165
13166 -- Start : Bug 6030917 : prasjain
13167 IF currency_code_csr%ISOPEN THEN
13168 CLOSE currency_code_csr;
13169 END IF;
13170 IF stream_element_csr%ISOPEN THEN
13171 CLOSE stream_element_csr;
13172 END IF;
13173 -- End : Bug 6030917 : prasjain
13174
13175 -- store SQL error message on message stack for caller
13176 OKL_API.SET_MESSAGE (
13177 p_app_name => OKL_API.G_APP_NAME,
13178 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
13179 p_token1 => 'SQLCODE',
13180 p_token1_value => SQLCODE,
13181 p_token2 => 'SQLERRM',
13182 p_token2_value => SQLERRM);
13183
13184 RETURN NULL;
13185
13186 END line_future_rent;
13187
13188 ------------------------------------------------------------------------------
13189 -- Start of Comments
13190 -- Created By: rmunjulu 3816891
13191 -- Function Name: line_future_income
13192 -- Description: Returns the future income amount for a given contract line
13193 -- Dependencies: OKL building blocks AMTX and AMUV
13194 -- Parameters: IN: p_contract_id, p_line_id
13195 -- stream_type_id (stored in g_additional_parameters(1))
13196 -- OUT: amount
13197 -- Version: 1.0
13198 -- History : 31-Dec-2004 PAGARG Bug# 4097591
13199 -- : UDS impact to obtain stream type id
13200 -- : 11-May-2006 gboomina Bug 5215019
13201 -- : check CHK_ACCRUAL_PREVIOUS_MNTH_YN
13202 -- : 15-Oct-07 prasjain Bug 6030917
13203 -- : Added proration logic
13204 -- : sechawla 05-dec-07 6671849 : Modified the dependent stream type check
13205 -- End of Commnets
13206 ------------------------------------------------------------------------------
13207
13208 FUNCTION line_future_income (
13209 p_contract_id IN NUMBER,
13210 p_contract_line_id IN NUMBER)
13211 RETURN NUMBER IS
13212
13213 l_unearned_income NUMBER := 0;
13214 -- 26-Aug-2004 Guru declared the following variables for bug 3849355
13215 l_term_date DATE;
13216 l_period_name VARCHAR2(30);
13217 l_start_date DATE;
13218 l_end_date DATE;
13219
13220 --Code changed by rvaduri for bug 3487920
13221 --This code will return the Pre-tax income at line level
13222 -- and will return values only contracts booked using ISG.
13223 -- Guru Added trx date
13224 --PAGARG 31-Dec-2004 Bug# 4097591
13225 --Instead of using stream name, join the sty id passed to cursor
13226 CURSOR line_csr (c_contract_line_id NUMBER,
13227 cp_trx_date DATE,
13228 p_sty_id NUMBER) IS
13229 SELECT NVL(SUM(sel.amount),0)
13230 FROM okl_strm_elements sel,
13231 --okl_streams stm, MGAAP 7263041
13232 okl_streams_rep_v stm,
13233 okl_strm_type_v sty
13234 WHERE sty.id = p_sty_id
13235 AND stm.sty_id = sty.id
13236 AND stm.say_code = 'CURR'
13237 AND stm.active_yn = 'Y'
13238 AND (stm.purpose_code IS NULL OR stm.purpose_code='REPORT')
13239 AND stm.kle_id = c_contract_line_id
13240 AND sel.stm_id = stm.id
13241 -- guru Added
13242 AND sel.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
13243
13244 l_rep_prod_streams_yn VARCHAR2(1) := 'N';
13245 l_trx_date DATE;
13246
13247 -- Created this cursor to evaluat ereporting streams based upon additional parameters
13248 --PAGARG 31-Dec-2004 Bug# 4097591
13249 --Instead of using stream name, join the sty id passed to cursor
13250 CURSOR line_reporting_csr (c_contract_line_id IN NUMBER, cp_trx_date IN DATE, p_sty_id NUMBER) IS
13251 SELECT NVL(SUM(sel.amount),0)
13252 FROM okl_strm_elements sel,
13253 --okl_streams stm, MGAAP 7263041
13254 okl_streams_rep_v stm,
13255 okl_strm_type_v sty
13256 WHERE sty.id = p_sty_id
13257 AND stm.sty_id = sty.id
13258 AND stm.say_code = 'CURR' -- reporting streams are current
13259 AND stm.active_yn = 'N' -- reporting strems are inactive
13260 AND stm.purpose_code IS NULL
13261 -- AND sel.date_billed IS NULL -- reporting streams never get billed
13262 --AND sty.billable_yn = 'N' -- PRE-TAX streams are not billable
13263 AND stm.kle_id = c_contract_line_id
13264 AND sel.stm_id = stm.id
13265 AND stm.purpose_code = 'REPORT'
13266 AND sel.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate); -- gkadarka added this null check
13267
13268 -- gboomina Bug 5215019 - Start
13269 CURSOR check_accrual_previous_csr IS
13270 SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
13271 FROM OKL_SYSTEM_PARAMS;
13272
13273 l_accrual_previous_mnth_yn VARCHAR2(3);
13274 l_accrual_adjst_date DATE;
13275 -- gboomina Bug 5215019 - End
13276
13277 -- rmunjulu
13278 l_quote_eff_date DATE;
13279 l_stream_type_id NUMBER;
13280 l_return_status VARCHAR2(3) := Okl_Api.G_RET_STS_SUCCESS;
13281
13282 l_debug_unearned_income NUMBER := 0;
13283 -- Start : Bug 6030917 : prasjain
13284 --new cursor introduced for prorating and rounding the stream element amount
13285 --incase of partial unit termination
13286 CURSOR stream_element_csr (c_contract_line_id NUMBER,
13287 cp_trx_date DATE,
13288 p_sty_id NUMBER) IS
13289 SELECT NVL(sel.amount,0) amount
13290 FROM okl_strm_elements sel,
13291 --okl_streams stm, MGAAP 7263041
13292 okl_streams_rep_v stm,
13293 okl_strm_type_v sty
13294 WHERE sty.id = p_sty_id
13295 AND stm.sty_id = sty.id
13296 AND stm.say_code = 'CURR'
13297 AND stm.active_yn = 'Y'
13298 AND (stm.purpose_code IS NULL OR stm.purpose_code='REPORT')
13299 AND stm.kle_id = c_contract_line_id
13300 AND sel.stm_id = stm.id
13301 AND sel.STREAM_ELEMENT_DATE > nvl(cp_trx_date,sysdate);
13302 stream_element_rec stream_element_csr%ROWTYPE;
13303 --currency code cursor added to derive currency code for the particular line
13304 --which will be used for rounding amount
13305 CURSOR currency_code_csr (p_kle_id NUMBER ) IS
13306 SELECT currency_code
13307 FROM okc_k_lines_b
13308 WHERE id = p_kle_id;
13309 --declaring proration factor , currency code and rounding rule variables
13310 l_proration_factor NUMBER;
13311 l_currency_code okc_k_lines_b.currency_code%TYPE;
13312 l_parent_strm_amt NUMBER;
13313 l_parent_strm_rounded_amt NUMBER;
13314 l_parent_strm_rounded_tot_amt NUMBER;
13315 --declaring other local variables
13316 l_api_version NUMBER := 1;
13317 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
13318 l_msg_count NUMBER;
13319 l_msg_data VARCHAR2(100);
13320 -- End : Bug 6030917 : prasjain
13321
13322 lx_rep_product_id OKL_PRODUCTS_V.ID%TYPE;
13323
13324 -- 13246259 get contract end date
13325 CURSOR get_chr_end_date_csr (p_khr_id IN NUMBER) IS
13326 SELECT end_date
13327 FROM OKC_K_HEADERS_ALL_B
13328 WHERE id = p_khr_id;
13329
13330 -- 13246259
13331 l_k_end_date DATE;
13332
13333 BEGIN
13334
13335 -- Validate additional parameters availability
13336 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
13337 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
13338 LOOP
13339 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'REP_PRODUCT_STRMS_YN'
13340 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
13341 l_rep_prod_streams_yn := okl_execute_formula_pub.g_additional_parameters(I).value;
13342 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'OFF_LSE_TRX_DATE'
13343 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
13344 l_trx_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
13345 -- rmunjulu -- this formula is called for amortization which will pass quote eff date
13346 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_effective_from_date'
13347 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
13348 l_quote_eff_date := to_date(okl_execute_formula_pub.g_additional_parameters(I).value, 'MM/DD/YYYY');
13349
13350 -- Start : Bug 6030917 : prasjain
13351 --added for getting the proration factor for partial unit termination
13352 ELSIF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'proration_factor'
13353 AND okl_execute_formula_pub.g_additional_parameters(I).value IS NOT NULL THEN
13354 l_proration_factor := to_number(okl_execute_formula_pub.g_additional_parameters(I).value);
13355 -- End : Bug 6030917 : prasjain
13356
13357 END IF;
13358 END LOOP;
13359 ELSE
13360
13361 l_rep_prod_streams_yn := 'N';
13362
13363 END IF;
13364
13365 -- sechawla 05-dec-07 6671849 -- START
13366 IF l_rep_prod_streams_yn = 'Y' THEN
13367
13368 get_reporting_product(
13369 p_api_version => l_api_version,
13370 p_init_msg_list => OKC_API.G_FALSE,
13371 x_return_status => l_return_status,
13372 x_msg_count => l_msg_count,
13373 x_msg_data => l_msg_data,
13374 p_contract_id => p_contract_id,
13375 x_rep_product_id => lx_rep_product_id);
13376
13377 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
13378 p_product_id => lx_rep_product_id,
13379 p_primary_sty_purpose => 'RENT',
13380 p_dependent_sty_purpose => 'LEASE_INCOME',
13381 x_return_status => l_return_status,
13382 x_dependent_sty_id => l_stream_type_id);
13383 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
13384 THEN
13385 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13386 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
13387 THEN
13388 RAISE OKL_API.G_EXCEPTION_ERROR;
13389 END IF;
13390 ELSE
13391 -- sechawla 05-dec-07 6671849 -- START
13392 --PAGARG 31-Dec-2004 Bug# 4097591 Start
13393 --UDS impact. Obtain stream type id and pass it to cursor
13394 OKL_STREAMS_UTIL.get_dependent_stream_type(p_khr_id => p_contract_id,
13395 p_primary_sty_purpose => 'RENT',
13396 p_dependent_sty_purpose => 'LEASE_INCOME',
13397 x_return_status => l_return_status,
13398 x_dependent_sty_id => l_stream_type_id);
13399
13400 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13401 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13402 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
13403 RAISE OKL_API.G_EXCEPTION_ERROR;
13404 END IF;
13405 --PAGARG 31-Dec-2004 Bug# 4097591 End
13406
13407 END IF; -- sechawla 05-dec-07 6671849 -- added
13408
13409 IF l_rep_prod_streams_yn = 'Y' THEN
13410 IF l_trx_date IS NULL THEN
13411 -- Can not calculate Net Investment for the reporting product as the transaction date is missing.
13412 Okl_Api.Set_Message(p_app_name => g_app_name,
13413 p_msg_name => 'OKL_AM_AMORT_NO_TRX_DATE');
13414 RAISE Okl_Api.G_EXCEPTION_ERROR;
13415 END IF;
13416 END IF;
13417
13418 -- 26-Aug-2004 3849355 Guru added the following code to get current accural period end date
13419
13420 /* -- rmunjulu
13421 IF l_trx_date IS NULL THEN
13422 l_term_date := SYSDATE;
13423 ELSE
13424 l_term_date := l_trx_date;
13425
13426 END IF;
13427 */
13428
13429 -- rmunjulu
13430 IF l_quote_eff_date IS NULL THEN
13431 l_term_date := SYSDATE;
13432 ELSE
13433 l_term_date := l_quote_eff_date;
13434 END IF;
13435
13436 -- 13246259 Added get the contract end date to check if expiration
13437 OPEN get_chr_end_date_csr (p_contract_id);
13438 FETCH get_chr_end_date_csr INTO l_k_end_date;
13439 CLOSE get_chr_end_date_csr;
13440
13441 IF TRUNC(l_term_date) >= TRUNC(l_k_end_date) THEN -- 13246259 Added logic to return 0 in case of exipration
13442
13443 l_unearned_income := 0;
13444
13445 ELSE -- From Termination quote
13446 -- gboomina Bug 5215019 - Start
13447 -- Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup check accruals
13448 -- till quote eff date OR previous month last date
13449 OPEN check_accrual_previous_csr;
13450 FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
13451 CLOSE check_accrual_previous_csr;
13452
13453 -- asahoo bug 13259692 derive the period in which termination is falling first and then
13454 -- derive the prior or current period based on Check_Accrual_Till_Previous_Month flag
13455
13456 okl_accounting_util.get_period_info(l_term_date,l_period_name, l_start_date,l_end_date);
13457
13458 -- asahoo bug 13259692 now that we have derived the GL Period use the GL Period Start Date or End Date to derive the Future Income
13459
13460 IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
13461 --l_accrual_adjst_date := l_term_date;
13462 -- asahoo bug 13259692 NIV will be greater than period end date
13463 l_accrual_adjst_date := l_end_date; -- asahoo bug 13259692
13464 ELSE
13465 --l_accrual_adjst_date := LAST_DAY(TRUNC(l_term_date, 'MONTH')-1);
13466 -- asahoo bug 13259692 NIV will be greater than period start_date - 1
13467 l_accrual_adjst_date := l_start_date - 1; -- asahoo bug 13259692
13468 END IF;
13469
13470 -- asahoo bug 13259692 Now start using Accrual Adjust Date
13471 --okl_accounting_util.get_period_info(l_accrual_adjst_date,l_period_name, l_start_date,l_end_date); -- asahoo bug 13259692 moved above
13472 -- gboomina Bug 5215019 - End
13473
13474 --check if streams required for reporting product
13475 IF l_rep_prod_streams_yn = 'Y' THEN
13476 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; --MGAAP 7263041
13477 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
13478 --OPEN line_reporting_csr(p_contract_line_id, l_end_date, l_stream_type_id); -- now passing l_end_date 26-Aug-2004 3849355
13479 --OPEN line_csr(p_contract_line_id, l_end_date, l_stream_type_id); -- now passing l_end_date 26-Aug-2004 3849355
13480 OPEN line_csr(p_contract_line_id, l_accrual_adjst_date, l_stream_type_id); -- asahoo now passing l_accrual_adjst_date bug 13259692
13481 FETCH line_csr INTO l_unearned_income;
13482 CLOSE line_csr;
13483 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
13484 ELSE
13485 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
13486 -- Start : Bug 6030917 : prasjain
13487 --added for prorating incase of partial unit termination
13488
13489 IF nvl(l_proration_factor,1) = 1 THEN
13490 --PAGARG 31-Dec-2004 Bug# 4097591, Pass stream type id to cursor
13491 --OPEN line_csr(p_contract_line_id,l_end_date, l_stream_type_id); -- now passing l_end_date 26-Aug-2004 3849355
13492 OPEN line_csr(p_contract_line_id,l_accrual_adjst_date, l_stream_type_id); -- asahoo now passing l_accrual_adjst_date bug 13259692
13493 FETCH line_csr INTO l_unearned_income;
13494 CLOSE line_csr;
13495 ELSE
13496 --get curerncy code for the line
13497 OPEN currency_code_csr(p_contract_line_id);
13498 FETCH currency_code_csr INTO l_currency_code ;
13499 CLOSE currency_code_csr;
13500 --initializing l_parent_strm_rounded_tot_amt variable with 0
13501 l_parent_strm_rounded_tot_amt := 0;
13502
13503 --FOR stream_element_rec IN stream_element_csr(p_contract_line_id, l_end_date, l_stream_type_id)
13504 -- asahoo bug 13259692 Now start using Accrual Adjust Date
13505 FOR stream_element_rec IN stream_element_csr(p_contract_line_id, l_accrual_adjst_date, l_stream_type_id)
13506 LOOP
13507 --prorate the amount, to derive the parent stream amount
13508 l_parent_strm_amt := stream_element_rec.amount * l_proration_factor;
13509 --round amount with streams option for paren stream element amounts
13510 okl_accounting_util.round_amount(
13511 p_api_version => l_api_version,
13512 p_init_msg_list => l_init_msg_list,
13513 x_return_status => l_return_status,
13514 x_msg_count => l_msg_count,
13515 x_msg_data => l_msg_data,
13516 p_amount => l_parent_strm_amt,
13517 p_currency_code => l_currency_code,
13518 p_round_option => 'STM',
13519 x_rounded_amount => l_parent_strm_rounded_amt
13520 );
13521 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13522 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13523 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
13524 RAISE OKL_API.G_EXCEPTION_ERROR;
13525 END IF;
13526
13527 -- calculate the parent stream rounded total
13528 l_parent_strm_rounded_tot_amt := l_parent_strm_rounded_tot_amt
13529 + l_parent_strm_rounded_amt;
13530
13531 END LOOP;
13532 l_unearned_income := l_parent_strm_rounded_tot_amt;
13533 END IF;
13534 -- End : Bug 6030917 : prasjain
13535 END IF;
13536 END IF; -- Added for 13246259
13537
13538 RETURN NVL(l_unearned_income,0);
13539
13540 EXCEPTION
13541
13542 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
13543 IF line_csr%ISOPEN THEN
13544 CLOSE line_csr;
13545 END IF;
13546
13547 IF line_reporting_csr%ISOPEN THEN
13548 CLOSE line_reporting_csr;
13549 END IF;
13550
13551 -- Start : Bug 6030917 : prasjain
13552 IF currency_code_csr%ISOPEN THEN
13553 CLOSE currency_code_csr;
13554 END IF;
13555 IF stream_element_csr%ISOPEN THEN
13556 CLOSE stream_element_csr;
13557 END IF;
13558 -- End : Bug 6030917 : prasjain
13559
13560 RETURN NULL;
13561
13562 WHEN OTHERS THEN
13563
13564 -- Close open cursors
13565
13566 IF line_csr%ISOPEN THEN
13567 CLOSE line_csr;
13568 END IF;
13569
13570 IF line_reporting_csr%ISOPEN THEN
13571 CLOSE line_reporting_csr;
13572 END IF;
13573
13574 -- Start : Bug 6030917 : prasjain
13575 IF currency_code_csr%ISOPEN THEN
13576 CLOSE currency_code_csr;
13577 END IF;
13578 IF stream_element_csr%ISOPEN THEN
13579 CLOSE stream_element_csr;
13580 END IF;
13581 -- End : Bug 6030917 : prasjain
13582
13583 -- store SQL error message on message stack for caller
13584
13585 OKL_API.SET_MESSAGE (
13586 p_app_name => OKL_API.G_APP_NAME,
13587 p_msg_name => 'OKL_CONTRACTS_UNEXPECTED_ERROR',
13588 p_token1 => 'SQLCODE',
13589 p_token1_value => SQLCODE,
13590 p_token2 => 'SQLERRM',
13591 p_token2_value => SQLERRM);
13592
13593 RETURN null;
13594
13595 END line_future_income;
13596
13597 -- Start of Comments
13598 -- Function Name: Asset_Residual
13599 -- Description: Returns the Residual value for an asset
13600 -- Dependencies:
13601 -- Parameters: IN: p_contract_id, p_contract_line_id ,p_additional_paams(quote_id, kle_id)
13602 -- OUT: amount
13603 -- rmunjulu 3816891 created
13604 -- Version: 1.0
13605 -- End of Commnets
13606 ------------------------------------------------------------------------------
13607
13608 FUNCTION asset_residual(
13609 p_khr_id IN NUMBER,
13610 p_kle_id IN NUMBER)
13611 RETURN NUMBER IS
13612
13613 Expected_error EXCEPTION;
13614
13615 -- get the quote type
13616 CURSOR get_qte_type_csr (p_quote_id IN NUMBER) IS
13617 SELECT qte.qtp_code qtp_code
13618 FROM okl_trx_quotes_v qte
13619 WHERE qte.id = p_quote_id;
13620
13621 -- get asset niv from quote lines
13622 CURSOR get_asset_niv_csr (p_kle_id IN NUMBER, p_quote_id IN NUMBER) IS
13623 SELECT nvl(tql.asset_value,0) residual_value
13624 FROM okl_txl_quote_lines_v tql
13625 WHERE tql.qte_id = p_quote_id
13626 AND tql.qlt_code = 'AMCFIA'
13627 AND tql.kle_id = p_kle_id;
13628
13629 -- get deprn cost from off-lease trn (SECHAWLA)
13630 CURSOR get_deprn_cost_csr (p_kle_id IN NUMBER) IS
13631 SELECT depreciation_cost, ID
13632 FROM okl_txl_assets_b
13633 WHERE kle_id = p_kle_id
13634 AND tal_type = 'AML'
13635 AND ROWNUM < 2;
13636
13637 l_quote_id NUMBER;
13638 l_asset_residual NUMBER;
13639 l_quote_type VARCHAR2(300);
13640 l_residual NUMBER;
13641 l_corp_book_cost NUMBER;
13642
13643 BEGIN
13644
13645 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
13646 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
13647 LOOP
13648 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
13649 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
13650 END IF;
13651 END LOOP;
13652 END IF;
13653
13654 IF l_quote_id IS NULL
13655 OR l_quote_id = OKL_API.G_MISS_NUM
13656 OR p_khr_id IS NULL
13657 OR p_khr_id = OKL_API.G_MISS_NUM
13658 OR p_kle_id IS NULL
13659 OR p_kle_id = OKL_API.G_MISS_NUM THEN
13660
13661 RAISE Expected_error;
13662 END IF;
13663
13664 -- get the quote type
13665 OPEN get_qte_type_csr(l_quote_id);
13666 FETCH get_qte_type_csr INTO l_quote_type;
13667 CLOSE get_qte_type_csr;
13668
13669 IF l_quote_type IN ( 'TER_MAN_PURCHASE',
13670 'TER_PURCHASE',
13671 'TER_RECOURSE',
13672 'TER_ROLL_PURCHASE') THEN
13673
13674 -- Get the asset NIV from the quoted quote line
13675 FOR get_asset_niv_rec IN get_asset_niv_csr (p_kle_id,l_quote_id ) LOOP
13676
13677 l_asset_residual := get_asset_niv_rec.residual_value;
13678 END LOOP;
13679
13680 ELSE -- termination without purchase
13681
13682 -- Get the Off-lease trn value
13683 FOR get_deprn_cost_rec IN get_deprn_cost_csr (p_kle_id ) LOOP
13684
13685 l_asset_residual := get_deprn_cost_rec.depreciation_cost;
13686 END LOOP;
13687 END IF;
13688
13689 IF l_asset_residual IS NULL THEN
13690
13691 l_asset_residual := 0;
13692 END IF;
13693
13694 RETURN l_asset_residual;
13695
13696 EXCEPTION
13697
13698 WHEN Expected_error THEN
13699
13700 RETURN 0;
13701 WHEN OTHERS THEN
13702 -- store SQL error message on message stack for caller
13703 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
13704 p_msg_name => 'OKL_UNEXPECTED_ERROR',
13705 p_token1 => 'OKL_SQLCODE',
13706 p_token1_value => SQLCODE,
13707 p_token2 => 'OKL_SQLERRM',
13708 p_token2_value => SQLERRM);
13709 RETURN NULL;
13710 END asset_residual;
13711
13712 -- rfedane 4058562
13713 FUNCTION principal_balance_fee_line (p_contract_id IN NUMBER,
13714 p_contract_line_id IN NUMBER) RETURN NUMBER IS
13715
13716 l_fee_payment_id NUMBER;
13717 l_quote_eff_date DATE;
13718 l_date DATE;
13719 l_prin_bal_id NUMBER;
13720 l_balance NUMBER;
13721 l_return_status VARCHAR2(1);
13722 l_prog_name VARCHAR2(61) := 'OKL_SEEDED_FUNCTIONS_PVT.principal_balance_fee_line';
13723
13724 CURSOR c_balance (p_sty_id NUMBER, p_date DATE) IS
13725 SELECT
13726 sel.amount
13727 FROM
13728 okl_strm_elements sel,
13729 okl_streams stm
13730 WHERE
13731 stm.sty_id = p_sty_id
13732 AND stm.khr_id = p_contract_id
13733 AND stm.kle_id = p_contract_line_id
13734 AND sel.stream_element_date <= p_date
13735 AND stm.say_code = 'CURR'
13736 AND stm.id = sel.stm_id
13737 ORDER BY sel.stream_element_date DESC;
13738
13739 BEGIN
13740
13741 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
13742 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST LOOP
13743
13744 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.EXISTS(i) THEN
13745
13746 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'quote_effective_from_date'
13747 AND okl_execute_formula_pub.g_additional_parameters(i).value IS NOT NULL THEN
13748 l_quote_eff_date := okl_execute_formula_pub.g_additional_parameters(i).value;
13749 END IF;
13750
13751 END IF;
13752 END LOOP;
13753 END IF;
13754
13755 IF l_quote_eff_date IS NOT NULL THEN
13756 l_date := l_quote_eff_date;
13757 ELSE
13758 l_date := TRUNC(SYSDATE);
13759 END IF;
13760
13761 SELECT TO_NUMBER(laslh.object1_id1)
13762 INTO l_fee_payment_id
13763 FROM okc_rule_groups_b lalevl,
13764 okc_rules_b laslh
13765 WHERE lalevl.cle_id = p_contract_line_id
13766 AND lalevl.rgd_code = 'LALEVL'
13767 AND lalevl.id = laslh.rgp_id
13768 AND laslh.rule_information_category = 'LASLH';
13769
13770 OKL_STREAMS_UTIL.get_dependent_stream_type(
13771 p_khr_id => p_contract_id,
13772 p_primary_sty_id => l_fee_payment_id,
13773 p_dependent_sty_purpose => 'PRINCIPAL_BALANCE',
13774 x_return_status => l_return_status,
13775 x_dependent_sty_id => l_prin_bal_id);
13776
13777 OPEN c_balance (p_sty_id => l_prin_bal_id, p_date => l_date);
13778 FETCH c_balance INTO l_balance;
13779 CLOSE c_balance;
13780
13781 RETURN l_balance;
13782
13783 EXCEPTION
13784
13785 WHEN OKL_API.G_EXCEPTION_ERROR THEN
13786 RAISE;
13787
13788 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13789 RAISE;
13790
13791 WHEN OTHERS THEN
13792
13793 OKL_API.SET_MESSAGE (p_app_name => 'OKL',
13794 p_msg_name => 'OKL_DB_ERROR',
13795 p_token1 => 'PROG_NAME',
13796 p_token1_value => l_prog_name,
13797 p_token2 => 'SQLCODE',
13798 p_token2_value => sqlcode,
13799 p_token3 => 'SQLERRM',
13800 p_token3_value => sqlerrm);
13801
13802 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13803
13804 END principal_balance_fee_line;
13805
13806
13807 -- rfedane 4058562
13808 FUNCTION principal_balance_financed (p_contract_id IN NUMBER,
13809 p_contract_line_id IN NUMBER) RETURN NUMBER IS
13810
13811 CURSOR c_fin_fees IS
13812 SELECT cle.id
13813 FROM
13814 okc_k_lines_b cle,
13815 okl_k_lines kle,
13816 okc_k_headers_b chr
13817 WHERE
13818 chr.id = p_contract_id
13819 AND cle.chr_id = chr.id
13820 AND cle.sts_code = chr.sts_code
13821 AND cle.id = kle.id
13822 AND kle.fee_type = 'FINANCED';
13823
13824 l_total_balance NUMBER := 0;
13825 l_prog_name VARCHAR2(61) := 'OKL_SEEDED_FUNCTIONS_PVT.principal_balance_financed';
13826
13827 BEGIN
13828
13829 FOR l_fin_fee IN c_fin_fees LOOP
13830
13831 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);
13832
13833 END LOOP;
13834
13835 RETURN l_total_balance;
13836
13837 EXCEPTION
13838
13839 WHEN OTHERS THEN
13840
13841 OKL_API.SET_MESSAGE (p_app_name => 'OKL',
13842 p_msg_name => 'OKL_DB_ERROR',
13843 p_token1 => 'PROG_NAME',
13844 p_token1_value => l_prog_name,
13845 p_token2 => 'SQLCODE',
13846 p_token2_value => sqlcode,
13847 p_token3 => 'SQLERRM',
13848 p_token3_value => sqlerrm);
13849
13850 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13851
13852 END principal_balance_financed;
13853
13854
13855 -- rfedane 4058562
13856 FUNCTION principal_balance_rollover (p_contract_id IN NUMBER,
13857 p_contract_line_id IN NUMBER) RETURN NUMBER IS
13858
13859 CURSOR c_fin_fees IS
13860 SELECT cle.id
13861 FROM
13862 okc_k_lines_b cle,
13863 okl_k_lines kle,
13864 okc_k_headers_b chr
13865 WHERE
13866 chr.id = p_contract_id
13867 AND cle.chr_id = chr.id
13868 AND cle.sts_code = chr.sts_code
13869 AND cle.id = kle.id
13870 AND kle.fee_type = 'ROLLOVER';
13871
13872 l_total_balance NUMBER := 0;
13873 l_prog_name VARCHAR2(61) := 'OKL_SEEDED_FUNCTIONS_PVT.principal_balance_rollover';
13874
13875 BEGIN
13876
13877 FOR l_fin_fee IN c_fin_fees LOOP
13878
13879 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);
13880
13881 END LOOP;
13882
13883 RETURN l_total_balance;
13884
13885 EXCEPTION
13886
13887 WHEN OTHERS THEN
13888
13889 OKL_API.SET_MESSAGE (p_app_name => 'OKL',
13890 p_msg_name => 'OKL_DB_ERROR',
13891 p_token1 => 'PROG_NAME',
13892 p_token1_value => l_prog_name,
13893 p_token2 => 'SQLCODE',
13894 p_token2_value => sqlcode,
13895 p_token3 => 'SQLERRM',
13896 p_token3_value => sqlerrm);
13897
13898 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13899
13900 END principal_balance_rollover;
13901
13902 -- rmunjulu 4299668 Added -- modified to call line_accumulated_deprn
13903 FUNCTION asset_net_book_value(
13904 p_khr_id IN NUMBER,
13905 p_kle_id IN NUMBER)
13906 RETURN NUMBER IS
13907
13908 Expected_error EXCEPTION;
13909
13910 l_quote_id NUMBER;
13911 l_nbv NUMBER;
13912
13913 CURSOR get_quote_date_csr (p_qte_id IN NUMBER) IS
13914 SELECT qte.date_effective_from
13915 FROM okl_trx_quotes_b qte
13916 WHERE qte.id = p_qte_id;
13917
13918 l_quote_eff_date DATE;
13919
13920 CURSOR get_asset_cost_csr (p_kle_id IN NUMBER) IS
13921 SELECT nvl(fab.cost,0) current_cost
13922 FROM fa_books fab,
13923 fa_book_controls fbc,
13924 okc_k_items_v itm,
13925 okc_k_lines_b kle,
13926 okc_line_styles_v lse
13927 WHERE fbc.book_class = 'CORPORATE'
13928 AND fab.book_type_code = fbc.book_type_code
13929 AND fab.asset_id = itm.object1_id1
13930 AND itm.cle_id = kle.id
13931 AND kle.cle_id = p_kle_id
13932 AND kle.lse_id = lse.id
13933 AND lse.lty_code = 'FIXED_ASSET'
13934 AND fab.transaction_header_id_out IS NULL;
13935
13936 l_asset_deprn NUMBER;
13937 l_current_cost NUMBER;
13938 l_asset_net_book_value NUMBER;
13939
13940 BEGIN
13941
13942 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
13943 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
13944 LOOP
13945 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
13946 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
13947 END IF;
13948 END LOOP;
13949 END IF;
13950
13951 IF p_khr_id IS NULL
13952 OR p_khr_id = OKL_API.G_MISS_NUM
13953 OR p_kle_id IS NULL
13954 OR p_kle_id = OKL_API.G_MISS_NUM THEN
13955
13956 RAISE Expected_error;
13957 END IF;
13958
13959 IF l_quote_id IS NOT NULL
13960 AND l_quote_id <> OKL_API.G_MISS_NUM THEN
13961
13962 OPEN get_quote_date_csr (l_quote_id);
13963 FETCH get_quote_date_csr INTO l_quote_eff_date;
13964 CLOSE get_quote_date_csr;
13965
13966 ELSE
13967
13968 l_quote_eff_date := sysdate;
13969
13970 END IF;
13971
13972 l_asset_deprn := line_accumulated_deprn(
13973 p_contract_id => p_khr_id,
13974 p_contract_line_id => p_kle_id);
13975
13976
13977 --OPEN get_asset_cost_csr (p_kle_id); -- rmunjulu modified
13978 --FETCH get_asset_cost_csr INTO l_current_cost;
13979 --CLOSE get_asset_cost_csr;
13980
13981 -- Update to mainline only -- gets converted current cost amount
13982 l_current_cost := line_asset_cost(
13983 p_contract_id => p_khr_id,
13984 p_contract_line_id => p_kle_id);
13985
13986 l_asset_net_book_value := l_current_cost - l_asset_deprn;
13987
13988 RETURN l_asset_net_book_value;
13989
13990 EXCEPTION
13991
13992 WHEN Expected_error THEN
13993
13994 IF get_quote_date_csr%ISOPEN THEN
13995 CLOSE get_quote_date_csr;
13996 END IF;
13997 IF get_asset_cost_csr%ISOPEN THEN
13998 CLOSE get_asset_cost_csr;
13999 END IF;
14000 RETURN Null;
14001 WHEN OTHERS THEN
14002 IF get_quote_date_csr%ISOPEN THEN
14003 CLOSE get_quote_date_csr;
14004 END IF;
14005 IF get_asset_cost_csr%ISOPEN THEN
14006 CLOSE get_asset_cost_csr;
14007 END IF;
14008 -- store SQL error message on message stack for caller
14009 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
14010 p_msg_name => 'OKL_UNEXPECTED_ERROR',
14011 p_token1 => 'OKL_SQLCODE',
14012 p_token1_value => SQLCODE,
14013 p_token2 => 'OKL_SQLERRM',
14014 p_token2_value => SQLERRM);
14015 RETURN NULL;
14016 END asset_net_book_value;
14017 -- varangan Added for Bug#5036582 start
14018 ----------------------------------------------------------------------------------------------------
14019 -- Start of Comments
14020 -- Created By: Vaijayanthi Ranganathan (varangan)
14021 -- Function Name: Contract Unpaid Invoices
14022 -- Description: Returns the sum of all unpaid invoices for leases/loans,
14023 -- including taxes, with due date prior to current system date
14024 -- Dependencies:
14025 -- Parameters: contract id,contract line id
14026 -- Version: 1.0
14027 -- End of Commnets
14028 ----------------------------------------------------------------------------------------------------
14029
14030 FUNCTION contract_unpaid_invoices(
14031 p_contract_id IN NUMBER,
14032 p_contract_line_id IN NUMBER)
14033 RETURN NUMBER IS
14034 --dkagrawa changed the follwong cursor for billing impact
14035 --changed query for Bug#6826370
14036 CURSOR cr_unpaid_invoices(c_contract_id IN NUMBER) IS
14037 SELECT nvl(sum(amount_remaining),0)
14038 FROM okl_cs_bpd_inv_dtl_v
14039 WHERE chr_id = c_contract_id
14040 AND due_date <= SYSDATE;
14041
14042 l_unpaid_invoices NUMBER;
14043
14044 BEGIN
14045 OPEN cr_unpaid_invoices (p_contract_id);
14046 FETCH cr_unpaid_invoices INTO l_unpaid_invoices;
14047 CLOSE cr_unpaid_invoices;
14048
14049 RETURN l_unpaid_invoices;
14050 EXCEPTION
14051 WHEN OTHERS THEN
14052 IF cr_unpaid_invoices%ISOPEN THEN
14053 CLOSE cr_unpaid_invoices;
14054 END IF;
14055 -- store SQL error message on message stack for caller
14056 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
14057 p_msg_name => 'OKL_UNEXPECTED_ERROR',
14058 p_token1 => 'OKL_SQLCODE',
14059 p_token1_value => SQLCODE,
14060 p_token2 => 'OKL_SQLERRM',
14061 p_token2_value => SQLERRM);
14062 RETURN NULL;
14063 END contract_unpaid_invoices;
14064
14065 ----------------------------------------------------------------------------------------------------
14066 -- Start of Comments
14067 -- Created By: Vaijayanthi Ranganathan (varangan)
14068 -- Function Name: Contract Unbilled Streams amount
14069 -- Description: Returns the sum of all Unbilled Streams for leases/loans,
14070 -- including taxes, with due date prior to current system date
14071 -- Dependencies:
14072 -- Parameters: contract id,contract line id
14073 -- Version: 1.0
14074 -- End of Commnets
14075 ----------------------------------------------------------------------------------------------------
14076 FUNCTION contract_unbilled_streams(
14077 p_contract_id IN NUMBER,
14078 p_contract_line_id IN NUMBER)
14079 RETURN NUMBER IS
14080
14081 CURSOR cr_unbilled_streams(c_contract_id IN NUMBER) IS
14082 SELECT NVL(sum(sel.amount),0)
14083 FROM okl_strm_elements sel,
14084 okl_streams stm,
14085 okl_strm_type_b sty
14086 WHERE stm.say_code = 'CURR'
14087 AND stm.active_yn = 'Y'
14088 AND stm.purpose_code is NULL
14089 AND stm.khr_id = c_contract_id
14090 AND sty.id = stm.sty_id
14091 AND sty.billable_yn = 'Y'
14092 AND sel.stm_id = stm.id
14093 AND date_billed is null
14094 AND stream_element_date <= SYSDATE;
14095
14096 l_unbilled_streams NUMBER;
14097
14098 BEGIN
14099 OPEN cr_unbilled_streams (p_contract_id);
14100 FETCH cr_unbilled_streams INTO l_unbilled_streams;
14101 CLOSE cr_unbilled_streams;
14102
14103 RETURN l_unbilled_streams;
14104 EXCEPTION
14105 WHEN OTHERS THEN
14106 IF cr_unbilled_streams%ISOPEN THEN
14107 CLOSE cr_unbilled_streams;
14108 END IF;
14109 -- store SQL error message on message stack for caller
14110 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
14111 p_msg_name => 'OKL_UNEXPECTED_ERROR',
14112 p_token1 => 'OKL_SQLCODE',
14113 p_token1_value => SQLCODE,
14114 p_token2 => 'OKL_SQLERRM',
14115 p_token2_value => SQLERRM);
14116 RETURN NULL;
14117 END contract_unbilled_streams;
14118 -- varangan Bug#5036582 end
14119
14120
14121 -- rmunjulu VENDOR_RESIDUAL_SHARE PROJECT
14122 FUNCTION vendor_residual_share_amount(
14123 p_khr_id IN NUMBER,
14124 p_kle_id IN NUMBER)
14125 RETURN NUMBER IS
14126
14127 CURSOR get_asset_residual_csr (p_kle_id IN NUMBER) IS
14128 SELECT nvl(KLE.residual_value,0) residual_value
14129 FROM OKL_K_LINES KLE
14130 WHERE KLE.id = p_kle_id;
14131
14132 CURSOR get_asset_sales_proceeds_csr (p_retirement_id IN NUMBER) IS
14133 SELECT nvl(RET.proceeds_of_sale,0) sales_proceeds
14134 FROM --OKX_ASSET_LINES_V OAL,
14135 FA_RETIREMENTS RET
14136 WHERE RET.RETIREMENT_ID = p_retirement_id;
14137 --WHERE OAL.parent_line_id = p_kle_id
14138 --AND OAL.corporate_book IS NOT NULL
14139 --AND OAL.asset_id = FAR.asset_id
14140 --AND OAL.corporate_book = FAR.book_type_code;
14141
14142 EXPECTED_ERROR EXCEPTION;
14143
14144 l_sales_proceeds NUMBER;
14145 l_share_percent NUMBER;
14146 l_residual_value NUMBER;
14147 l_share_amount NUMBER;
14148 l_currency_code VARCHAR2(15);
14149 l_contract_currency_code VARCHAR2(15);
14150 l_currency_conversion_type VARCHAR2(30);
14151 l_currency_conversion_rate NUMBER;
14152 l_currency_conversion_date DATE;
14153 l_converted_sales_proceeds NUMBER;
14154 l_return_status VARCHAR2(3);
14155 l_retirement_id NUMBER;
14156
14157 BEGIN
14158
14159 IF p_khr_id IS NULL
14160 OR p_khr_id = OKL_API.G_MISS_NUM
14161 OR p_kle_id IS NULL
14162 OR p_kle_id = OKL_API.G_MISS_NUM THEN
14163
14164 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
14165 p_msg_name => 'OKL_INVALID_VALUE',
14166 p_token1 => 'COL_NAME',
14167 p_token1_value => 'P_KHR_ID OR P_KLE_ID');
14168
14169 RAISE EXPECTED_ERROR;
14170 END IF;
14171
14172 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
14173 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
14174 LOOP
14175 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'retirement_id' THEN
14176 l_retirement_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
14177 END IF;
14178 END LOOP;
14179 END IF;
14180
14181 IF l_retirement_id IS NULL
14182 OR l_retirement_id = OKL_API.G_MISS_NUM THEN
14183
14184 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
14185 p_msg_name => 'OKL_INVALID_VALUE',
14186 p_token1 => 'COL_NAME',
14187 p_token1_value => 'retirement_id');
14188
14189 RAISE EXPECTED_ERROR;
14190 END IF;
14191
14192 l_sales_proceeds := 0;
14193 l_residual_value := 0;
14194 l_share_percent := 0;
14195 l_share_amount := 0;
14196
14197 OPEN get_asset_residual_csr (p_kle_id);
14198 FETCH get_asset_residual_csr INTO l_residual_value;
14199 CLOSE get_asset_residual_csr;
14200
14201 -- get sales proceeds for the retirement id
14202 OPEN get_asset_sales_proceeds_csr (l_retirement_id);
14203 FETCH get_asset_sales_proceeds_csr INTO l_sales_proceeds;
14204 CLOSE get_asset_sales_proceeds_csr;
14205
14206 -- Get the contract currency code
14207 l_currency_code := OKL_AM_UTIL_PVT.get_chr_currency(p_khr_id);
14208
14209 -- Convert sales_proceeds from functional_currency to contract_currency
14210 OKL_ACCOUNTING_UTIL.convert_to_contract_currency(
14211 p_khr_id => p_khr_id,
14212 p_from_currency => l_currency_code,
14213 p_transaction_date => sysdate,
14214 p_amount => l_sales_proceeds,
14215 x_return_status => l_return_status,
14216 x_contract_currency => l_contract_currency_code,
14217 x_currency_conversion_type => l_currency_conversion_type,
14218 x_currency_conversion_rate => l_currency_conversion_rate,
14219 x_currency_conversion_date => l_currency_conversion_date,
14220 x_converted_amount => l_converted_sales_proceeds);
14221
14222 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
14223 RAISE EXPECTED_ERROR;
14224 END IF;
14225
14226 l_share_amount := nvl(l_converted_sales_proceeds,0) - nvl(l_residual_value,0);
14227
14228 RETURN l_share_amount; -- has no share percent included, percent will be applied later
14229
14230 EXCEPTION
14231
14232 WHEN EXPECTED_ERROR THEN
14233
14234 IF get_asset_residual_csr%ISOPEN THEN
14235 CLOSE get_asset_residual_csr;
14236 END IF;
14237
14238 IF get_asset_sales_proceeds_csr%ISOPEN THEN
14239 CLOSE get_asset_sales_proceeds_csr;
14240 END IF;
14241
14242 RETURN NULL;
14243
14244 WHEN OTHERS THEN
14245
14246 IF get_asset_residual_csr%ISOPEN THEN
14247 CLOSE get_asset_residual_csr;
14248 END IF;
14249
14250 IF get_asset_sales_proceeds_csr%ISOPEN THEN
14251 CLOSE get_asset_sales_proceeds_csr;
14252 END IF;
14253
14254 -- store SQL error message on message stack for caller
14255 Okl_Api.Set_Message(p_app_name => OKL_API.G_APP_NAME,
14256 p_msg_name => 'OKL_UNEXPECTED_ERROR',
14257 p_token1 => 'OKL_SQLCODE',
14258 p_token1_value => SQLCODE,
14259 p_token2 => 'OKL_SQLERRM',
14260 p_token2_value => SQLERRM);
14261 RETURN NULL;
14262 END vendor_residual_share_amount;
14263
14264 -- rmunjulu LOANS_ENHANCEMENTS PROJECT
14265 FUNCTION loan_asset_prin_bal(
14266 p_khr_id IN NUMBER,
14267 p_kle_id IN NUMBER)
14268 RETURN NUMBER IS
14269
14270 CURSOR get_quote_date_csr (p_qte_id IN NUMBER) IS
14271 SELECT qte.date_effective_from
14272 FROM okl_trx_quotes_b qte
14273 WHERE qte.id = p_qte_id;
14274
14275 EXPECTED_ERROR EXCEPTION;
14276
14277 l_return_status VARCHAR2(3);
14278 l_quote_id NUMBER;
14279 l_quote_eff_from DATE;
14280 l_prin_bal NUMBER;
14281
14282 BEGIN
14283
14284 IF p_khr_id IS NULL
14285 OR p_khr_id = OKL_API.G_MISS_NUM
14286 OR p_kle_id IS NULL
14287 OR p_kle_id = OKL_API.G_MISS_NUM THEN
14288
14289 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
14290 p_msg_name => 'OKL_INVALID_VALUE',
14291 p_token1 => 'COL_NAME',
14292 p_token1_value => 'P_KHR_ID OR P_KLE_ID');
14293
14294 RAISE EXPECTED_ERROR;
14295 END IF;
14296
14297 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
14298 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
14299 LOOP
14300 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'quote_id' THEN
14301 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
14302 END IF;
14303 END LOOP;
14304 END IF;
14305
14306 IF l_quote_id IS NULL THEN
14307
14308 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
14309 p_msg_name => 'OKL_INVALID_VALUE',
14310 p_token1 => 'COL_NAME',
14311 p_token1_value => 'quote_id');
14312
14313 RAISE EXPECTED_ERROR;
14314 END IF;
14315
14316 OPEN get_quote_date_csr (l_quote_id);
14317 FETCH get_quote_date_csr INTO l_quote_eff_from;
14318 CLOSE get_quote_date_csr;
14319
14320
14321 -- call util to get actual principal balance
14322 l_prin_bal := OKL_VARIABLE_INT_UTIL_PVT.get_principal_bal(
14323 x_return_status => l_return_status,
14324 p_khr_id => p_khr_id,
14325 p_kle_id => p_kle_id,
14326 p_date => l_quote_eff_from);
14327
14328 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
14329 RAISE EXPECTED_ERROR;
14330 END IF;
14331
14332
14333 RETURN l_prin_bal;
14334
14335 EXCEPTION
14336
14337 WHEN EXPECTED_ERROR THEN
14338
14339 IF get_quote_date_csr%ISOPEN THEN
14340 CLOSE get_quote_date_csr;
14341 END IF;
14342
14343 RETURN NULL;
14344
14345 WHEN OTHERS THEN
14346
14347 IF get_quote_date_csr%ISOPEN THEN
14348 CLOSE get_quote_date_csr;
14349 END IF;
14350
14351 -- store SQL error message on message stack for caller
14352 Okl_Api.Set_Message(p_app_name => OKL_API.G_APP_NAME,
14353 p_msg_name => 'OKL_UNEXPECTED_ERROR',
14354 p_token1 => 'OKL_SQLCODE',
14355 p_token1_value => SQLCODE,
14356 p_token2 => 'OKL_SQLERRM',
14357 p_token2_value => SQLERRM);
14358 RETURN NULL;
14359 END loan_asset_prin_bal;
14360
14361 -- rmunjulu LOANS_ENHANCEMENTS PROJECT
14362 --SECHAWLA 30-NOV-05 4753429 : Modified to return perdiem amount for only LOANS/REVOLVING-LOANS
14363 --SECHAWLA 03-JAN-06 4920149 : Treat interest rate returned by the API OKL_VARIABLE_INT_UTIL_PVT
14364 -- as a percentage
14365 FUNCTION quote_perdiem_amount(
14366 p_khr_id IN NUMBER,
14367 p_kle_id IN NUMBER)
14368 RETURN NUMBER IS
14369
14370
14371
14372 CURSOR get_tot_outstanding_bal_csr (p_qte_id IN NUMBER) IS
14373 SELECT sum(TQL.asset_value) outstanding_bal
14374 FROM OKL_TXL_QUOTE_LINES_B TQL
14375 WHERE TQL.qte_id = p_qte_id
14376 AND TQL.qlt_code = 'AMCFIA';
14377
14378 CURSOR get_quote_date_csr (p_qte_id IN NUMBER) IS
14379 SELECT qte.date_effective_from
14380 FROM okl_trx_quotes_b qte
14381 WHERE qte.id = p_qte_id;
14382
14383 CURSOR get_base_interest_rate_csr (p_khr_id IN NUMBER) IS
14384 SELECT base_rate
14385 FROM okl_k_rate_params_v
14386 WHERE khr_id = p_khr_id;
14387
14388 --SECHAWLA 30-NOV-05 4753429 : New declarations begin
14389 CURSOR l_dealtype_csr (cp_khr_id IN NUMBER) IS
14390 SELECT deal_type
14391 FROM OKL_K_HEADERS
14392 WHERE id = cp_khr_id;
14393
14394 l_deal_type VARCHAR2(30);
14395 --SECHAWLA 30-NOV-05 4753429 : New declarations end
14396
14397 EXPECTED_ERROR EXCEPTION;
14398
14399 l_outstanding_bal NUMBER;
14400 l_return_status VARCHAR2(3);
14401 l_quote_id NUMBER;
14402 l_quote_eff_from DATE;
14403 l_interest_rate NUMBER;
14404 l_quote_perdiem NUMBER;
14405
14406 IsLeapYear BOOLEAN;
14407 iYear NUMBER;
14408
14409 l_days_in_year NUMBER;
14410 --gboomina Bug#4703521 27-Oct-05 start
14411 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
14412 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
14413 --gboomina Bug#4703521 27-Oct-05 end
14414 lx_return_status VARCHAR2(3);
14415
14416
14417
14418 BEGIN
14419
14420 --SECHAWLA 30-NOV-05 4753429 : begin
14421
14422 l_quote_perdiem := 0;
14423
14424 OPEN l_dealtype_csr(p_khr_id);
14425 FETCH l_dealtype_csr INTO l_deal_type;
14426 CLOSE l_dealtype_csr;
14427
14428 IF l_deal_type LIKE 'LOAN%' THEN
14429 --SECHAWLA 30-NOV-05 4753429 : end
14430
14431 l_outstanding_bal := 0;
14432
14433
14434
14435 IF Okl_Execute_Formula_Pub.g_additional_parameters.COUNT > 0 THEN
14436 FOR i IN Okl_Execute_Formula_Pub.g_additional_parameters.FIRST..Okl_Execute_Formula_Pub.g_additional_parameters.LAST
14437 LOOP
14438 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).name = 'QUOTE_ID' THEN
14439 l_quote_id := TO_NUMBER(OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(i).value);
14440 END IF;
14441 END LOOP;
14442 END IF;
14443
14444 IF l_quote_id IS NULL THEN
14445
14446 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
14447 p_msg_name => 'OKL_INVALID_VALUE',
14448 p_token1 => 'COL_NAME',
14449 p_token1_value => 'QUOTE_ID');
14450
14451 RAISE EXPECTED_ERROR;
14452 END IF;
14453
14454 OPEN get_tot_outstanding_bal_csr (l_quote_id);
14455 FETCH get_tot_outstanding_bal_csr INTO l_outstanding_bal;
14456 CLOSE get_tot_outstanding_bal_csr;
14457
14458 OPEN get_quote_date_csr (l_quote_id);
14459 FETCH get_quote_date_csr INTO l_quote_eff_from;
14460 CLOSE get_quote_date_csr;
14461
14462 -- get effective interest rate
14463 l_interest_rate := OKL_VARIABLE_INT_UTIL_PVT.get_effective_int_rate(
14464 x_return_status => l_return_status,
14465 p_khr_id => p_khr_id,
14466 p_effective_date => l_quote_eff_from);
14467
14468 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
14469 RAISE EXPECTED_ERROR;
14470 END IF;
14471
14472 -- use utility for getting the days (from SGT or Contract)
14473 OKL_PRICING_UTILS_PVT.get_day_convention(
14474 p_id => p_khr_id, -- ID of the contract/quote
14475 p_source => 'ESG', -- 'ESG'/'ISG' are acceptable values
14476 x_days_in_month => lx_days_in_month,
14477 x_days_in_year => lx_days_in_year,
14478 x_return_status => lx_return_status);
14479
14480 IF lx_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
14481 RAISE EXPECTED_ERROR;
14482 END IF;
14483
14484 IF lx_days_in_year = 'ACTUAL' THEN
14485
14486 -- get year of termination
14487 iYear := to_number(substr(to_char(trunc(l_quote_eff_from),'YYYY/DD/MON'),1,4));
14488
14489 -- check if leap year
14490 If (iYear Mod 4 = 0) And
14491 ((iYear Mod 100 <> 0) Or (iYear Mod 400 = 0)) Then
14492 IsLeapYear := True;
14493 Else
14494 IsLeapYear := False;
14495 End If;
14496
14497 IF IsLeapYear THEN
14498 l_days_in_year := 366;
14499 ELSE
14500 l_days_in_year := 365;
14501 END IF;
14502
14503 ELSE
14504 l_days_in_year := to_number(lx_days_in_year);
14505 END IF;
14506
14507 IF l_days_in_year IS NULL OR l_days_in_year = 0 THEN
14508 l_days_in_year := 365;
14509 END IF;
14510
14511 --l_quote_perdiem := nvl(l_outstanding_bal,0) * nvl(l_interest_rate,0) /l_days_in_year;
14512 -- SECHAWLA 03-JAN-06 4920149 l_interest_rate is a percentage
14513 l_quote_perdiem := nvl(l_outstanding_bal,0) * nvl((l_interest_rate/100),0) /l_days_in_year;
14514 END IF; --SECHAWLA 30-NOV-05 4753429
14515
14516 RETURN l_quote_perdiem;
14517
14518 EXCEPTION
14519
14520 WHEN EXPECTED_ERROR THEN
14521
14522 IF get_tot_outstanding_bal_csr%ISOPEN THEN
14523 CLOSE get_tot_outstanding_bal_csr;
14524 END IF;
14525
14526 IF get_quote_date_csr%ISOPEN THEN
14527 CLOSE get_quote_date_csr;
14528 END IF;
14529
14530 --SECHAWLA 30-NOV-05 4753429 : Added
14531 IF l_dealtype_csr%ISOPEN THEN
14532 CLOSE l_dealtype_csr;
14533 END IF;
14534
14535 RETURN NULL;
14536
14537 WHEN OTHERS THEN
14538
14539 IF get_tot_outstanding_bal_csr%ISOPEN THEN
14540 CLOSE get_tot_outstanding_bal_csr;
14541 END IF;
14542
14543 IF get_quote_date_csr%ISOPEN THEN
14544 CLOSE get_quote_date_csr;
14545 END IF;
14546
14547 --SECHAWLA 30-NOV-05 4753429 : Added
14548 IF l_dealtype_csr%ISOPEN THEN
14549 CLOSE l_dealtype_csr;
14550 END IF;
14551
14552 -- store SQL error message on message stack for caller
14553 Okl_Api.Set_Message(p_app_name => OKL_API.G_APP_NAME,
14554 p_msg_name => 'OKL_UNEXPECTED_ERROR',
14555 p_token1 => 'OKL_SQLCODE',
14556 p_token1_value => SQLCODE,
14557 p_token2 => 'OKL_SQLERRM',
14558 p_token2_value => SQLERRM);
14559 RETURN NULL;
14560 END quote_perdiem_amount;
14561
14562 -- sjalasut, Rebook Change Control Enhancement START
14563
14564 -- function that returns the sum of unbilled RENT for all active assets on the rebook copy of the contract
14565 FUNCTION cont_rbk_unbilled_receivables(p_contract_id okc_k_headers_b.id%TYPE
14566 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
14567
14568 -- get all unbilled receivables for all ACTIVE assets
14569 CURSOR cle_rents_csr(cp_contract_id okc_k_headers_b.id%TYPE) IS
14570 SELECT NVL(SUM(sele.amount),0)
14571 FROM okl_strm_elements sele
14572 ,okl_streams str
14573 ,okl_strm_type_v sty
14574 ,okc_k_lines_v line
14575 ,okc_statuses_b sts
14576 ,okc_line_styles_b style
14577 WHERE sele.stm_id = str.id
14578 AND str.sty_id = sty.id
14579 AND sty.stream_type_purpose = 'RENT'
14580 AND str.say_code = 'CURR'
14581 AND str.active_yn = 'Y'
14582 AND str.purpose_code IS NULL
14583 AND sele.date_billed IS NULL
14584 AND line.chr_id = str.khr_id
14585 AND line.id = str.kle_id
14586 AND line.lse_id = style.id
14587 AND style.lty_code = 'FREE_FORM1'
14588 AND line.sts_code = sts.code
14589 AND sts.ste_code = 'ACTIVE'
14590 AND str.khr_id = cp_contract_id;
14591 lv_rent_assets NUMBER;
14592
14593 lv_unbilled_recv NUMBER;
14594 BEGIN
14595 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
14596 -- initialize
14597 lv_unbilled_recv := 0;
14598 lv_rent_assets := 0;
14599
14600 -- ASSET level RENTS
14601 OPEN cle_rents_csr(cp_contract_id => p_contract_id); FETCH cle_rents_csr INTO lv_rent_assets;
14602 CLOSE cle_rents_csr;
14603
14604 lv_unbilled_recv := lv_rent_assets;
14605 END IF;
14606 RETURN lv_unbilled_recv;
14607 EXCEPTION
14608 WHEN OTHERS THEN
14609 IF(cle_rents_csr%ISOPEN)THEN
14610 CLOSE cle_rents_csr;
14611 END IF;
14612 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
14613 ,p_msg_name => G_UNEXPECTED_ERROR
14614 ,p_token1 => G_SQLCODE_TOKEN
14615 ,p_token1_value => SQLCODE
14616 ,p_token2 => G_SQLERRM_TOKEN
14617 ,p_token2_value => SQLERRM);
14618 RETURN NULL;
14619 END cont_rbk_unbilled_receivables;
14620
14621 -- function that returns the sum of pre-tax income that was not accrued for all active assets on the rebook copy of the contract
14622 FUNCTION cont_rbk_unearned_income(p_contract_id okc_k_headers_b.id%TYPE
14623 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
14624
14625 CURSOR c_pre_tax_csr(cp_contract_id okc_k_headers_b.id%TYPE) IS
14626 SELECT NVL(SUM(sele.amount),0)
14627 FROM okl_strm_elements sele
14628 --,okl_streams str MGAAP 7263041
14629 ,okl_streams_rep_v str
14630 ,okl_strm_type_v sty
14631 ,okc_k_lines_b line
14632 ,okc_line_styles_b style
14633 ,okc_statuses_b sts
14634 WHERE sele.stm_id = str.id
14635 AND str.sty_id = sty.id
14636 AND UPPER(sty.stream_type_purpose) = 'LEASE_INCOME' -- pre-tax income has steam type purpose as lease_income
14637 AND str.say_code = 'CURR'
14638 AND STR.ACTIVE_YN = 'Y'
14639 AND (STR.PURPOSE_CODE IS NULL OR STR.PURPOSE_CODE='REPORT')
14640 AND nvl(sele.accrued_yn,'N') = 'N'
14641 AND str.kle_id = line.id
14642 AND line.lse_id = style.id
14643 AND style.lty_code = 'FREE_FORM1'
14644 AND line.sts_code = sts.code
14645 AND sts.ste_code = 'ACTIVE'
14646 AND line.chr_id = cp_contract_id;
14647 lv_pre_tax_income NUMBER;
14648 BEGIN
14649 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
14650 lv_pre_tax_income := 0;
14651 OPEN c_pre_tax_csr(cp_contract_id => p_contract_id); FETCH c_pre_tax_csr INTO lv_pre_tax_income;
14652 CLOSE c_pre_tax_csr;
14653 END IF;
14654 RETURN lv_pre_tax_income;
14655 EXCEPTION
14656 WHEN OTHERS THEN
14657 IF(c_pre_tax_csr%ISOPEN)THEN
14658 CLOSE c_pre_tax_csr;
14659 END IF;
14660 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
14661 ,p_msg_name => G_UNEXPECTED_ERROR
14662 ,p_token1 => G_SQLCODE_TOKEN
14663 ,p_token1_value => SQLCODE
14664 ,p_token2 => G_SQLERRM_TOKEN
14665 ,p_token2_value => SQLERRM);
14666 RETURN NULL;
14667 END cont_rbk_unearned_income;
14668
14669 -- returns sum of rent not billed for all terminated assets
14670 -- do not send p_contract_line_id as okl_api.g_miss_num
14671 FUNCTION cont_tmt_unbilled_receivables(p_contract_id okc_k_headers_b.id%TYPE
14672 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
14673 -- get all unbilled receivables for all TERMINATED assets
14674 CURSOR cle_rents_csr(cp_contract_id okc_k_headers_b.id%TYPE
14675 ,cp_contract_line_id okc_k_lines_b.id%TYPE) IS
14676 SELECT NVL(SUM(sele.amount),0)
14677 FROM okl_strm_elements sele
14678 ,okl_streams str
14679 ,okl_strm_type_v sty
14680 ,okc_k_lines_v line
14681 -- ,okc_statuses_b sts
14682 ,okc_line_styles_b style
14683 WHERE sele.stm_id = str.id
14684 AND str.sty_id = sty.id
14685 AND sty.stream_type_purpose = 'RENT'
14686 AND str.say_code = 'CURR'
14687 AND str.active_yn = 'Y'
14688 AND str.purpose_code IS NULL
14689 AND sele.date_billed IS NULL
14690 AND line.chr_id = str.khr_id
14691 AND line.id = str.kle_id
14692 AND line.lse_id = style.id
14693 AND style.lty_code = 'FREE_FORM1'
14694 -- AND line.sts_code = sts.code
14695 -- AND sts.ste_code = 'TERMINATED'
14696 AND str.khr_id = cp_contract_id
14697 AND line.id = NVL(cp_contract_line_id, line.id);
14698 lv_rent_assets NUMBER;
14699
14700 lv_unbilled_recv NUMBER;
14701 BEGIN
14702 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
14703 -- initialize
14704 lv_unbilled_recv := 0;
14705 lv_rent_assets := 0;
14706
14707 -- ASSET level RENTS
14708 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;
14709 CLOSE cle_rents_csr;
14710
14711 lv_unbilled_recv := lv_rent_assets;
14712 END IF;
14713 RETURN lv_unbilled_recv;
14714 EXCEPTION
14715 WHEN OTHERS THEN
14716 IF(cle_rents_csr%ISOPEN)THEN
14717 CLOSE cle_rents_csr;
14718 END IF;
14719 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
14720 ,p_msg_name => G_UNEXPECTED_ERROR
14721 ,p_token1 => G_SQLCODE_TOKEN
14722 ,p_token1_value => SQLCODE
14723 ,p_token2 => G_SQLERRM_TOKEN
14724 ,p_token2_value => SQLERRM);
14725 RETURN NULL;
14726 END cont_tmt_unbilled_receivables;
14727
14728 -- returns sum of pre tax income not accrued for all terminated assets
14729 -- do not send p_contract_line_id as okl_api.g_miss_num
14730 FUNCTION cont_tmt_unearned_income(p_contract_id okc_k_headers_b.id%TYPE
14731 ,p_contract_line_id okc_k_lines_b.id%TYPE DEFAULT OKL_API.G_MISS_NUM) RETURN NUMBER IS
14732 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
14733 SELECT NVL(SUM(sele.amount),0)
14734 FROM okl_strm_elements sele
14735 --,okl_streams str MGAAP 7263041
14736 ,okl_streams_rep_v str
14737 ,okl_strm_type_v sty
14738 ,okc_k_lines_b line
14739 ,okc_line_styles_b style
14740 -- ,okc_statuses_b sts
14741 WHERE sele.stm_id = str.id
14742 AND str.sty_id = sty.id
14743 AND UPPER(sty.stream_type_purpose) = 'LEASE_INCOME' -- pre-tax income has steam type purpose as lease_income
14744 AND str.say_code = 'CURR'
14745 AND STR.ACTIVE_YN = 'Y'
14746 AND (STR.PURPOSE_CODE IS NULL OR STR.PURPOSE_CODE='REPORT')
14747 AND nvl(sele.accrued_yn,'N') = 'N'
14748 AND str.kle_id = line.id
14749 AND line.lse_id = style.id
14750 AND style.lty_code = 'FREE_FORM1'
14751 -- AND line.sts_code = sts.code
14752 -- AND sts.ste_code = 'TERMINATED'
14753 AND line.chr_id = cp_contract_id
14754 AND line.id = NVL(cp_contract_line_id, line.id);
14755 lv_pre_tax_income NUMBER;
14756 BEGIN
14757 IF(p_contract_id IS NOT NULL AND p_contract_id <> OKL_API.G_MISS_NUM)THEN
14758 lv_pre_tax_income := 0;
14759 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;
14760 CLOSE c_pre_tax_csr;
14761 END IF;
14762 RETURN lv_pre_tax_income;
14763 EXCEPTION
14764 WHEN OTHERS THEN
14765 IF(c_pre_tax_csr%ISOPEN)THEN
14766 CLOSE c_pre_tax_csr;
14767 END IF;
14768 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME
14769 ,p_msg_name => G_UNEXPECTED_ERROR
14770 ,p_token1 => G_SQLCODE_TOKEN
14771 ,p_token1_value => SQLCODE
14772 ,p_token2 => G_SQLERRM_TOKEN
14773 ,p_token2_value => SQLERRM);
14774 RETURN NULL;
14775 END cont_tmt_unearned_income;
14776
14777 -- sjalasut, Rebook Change Control Enhancement END
14778
14779 -- Begin - varangan-Bug#5009351
14780 ----------------------------------------------------------------------------------------------------
14781 -- Start of Comments
14782 -- Created By: Vaijayanthi (varangan)
14783 -- Function Name: contract_next_payment_amount
14784 -- Description: Returns the sum of all billable stream elements,
14785 -- excluding taxes, which fall on the next payment date
14786 -- Dependencies:
14787 -- Parameters: contract id,contract line id
14788 -- Version: 1.0
14789 -- End of Commnets
14790 ----------------------------------------------------------------------------------------------------
14791 FUNCTION contract_next_payment_amount(
14792 p_contract_id IN NUMBER,
14793 p_contract_line_id IN NUMBER)
14794 RETURN NUMBER IS
14795
14796 CURSOR cr_next_payment_date(c_contract_id IN NUMBER) IS
14797 SELECT MIN(sel.stream_element_date)
14798 FROM okl_strm_elements sel,
14799 okl_streams stm,
14800 okl_strm_type_v sty
14801 WHERE stm.sty_id = sty.id
14802 AND stm.say_code = 'CURR'
14803 AND stm.active_yn = 'Y'
14804 AND sty.billable_yn = 'Y'
14805 AND sty.stream_type_purpose NOT LIKE '%TAX%' -- vsgandhi: Bug 14712454
14806 AND stm.purpose_code is NULL
14807 AND stm.khr_id = c_contract_id
14808 AND sel.stm_id = stm.id
14809 AND sel.stream_element_date > sysdate;
14810
14811 CURSOR cr_next_payment_amt(c_contract_id IN NUMBER,
14812 c_next_due_date IN DATE) IS
14813 SELECT NVL(sum(sel.amount),0)
14814 FROM okl_strm_elements sel,
14815 okl_streams stm,
14816 okl_strm_type_v sty
14817 WHERE stm.sty_id = sty.id
14818 AND stm.say_code = 'CURR'
14819 AND stm.active_yn = 'Y'
14820 AND sty.billable_yn = 'Y'
14821 AND sty.stream_type_purpose NOT LIKE '%TAX%' -- vsgandhi : Bug 14712454
14822 AND stm.purpose_code is NULL
14823 AND stm.khr_id = c_contract_id
14824 AND sel.stm_id = stm.id
14825 AND sel.stream_element_date = c_next_due_date;
14826
14827 l_next_payment_date DATE;
14828 l_next_payment_amt NUMBER;
14829 BEGIN
14830 OPEN cr_next_payment_date(p_contract_id);
14831 FETCH cr_next_payment_date INTO l_next_payment_date;
14832 CLOSE cr_next_payment_date;
14833
14834 OPEN cr_next_payment_amt(p_contract_id,l_next_payment_date);
14835 FETCH cr_next_payment_amt INTO l_next_payment_amt;
14836 CLOSE cr_next_payment_amt;
14837 RETURN l_next_payment_amt;
14838
14839 EXCEPTION
14840 WHEN OTHERS THEN
14841 IF cr_next_payment_date%ISOPEN THEN
14842 CLOSE cr_next_payment_date;
14843 END IF;
14844 IF cr_next_payment_amt%ISOPEN THEN
14845 CLOSE cr_next_payment_amt;
14846 END IF;
14847 -- store SQL error message on message stack for caller
14848 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
14849 p_msg_name => 'OKL_UNEXPECTED_ERROR',
14850 p_token1 => 'OKL_SQLCODE',
14851 p_token1_value => SQLCODE,
14852 p_token2 => 'OKL_SQLERRM',
14853 p_token2_value => SQLERRM);
14854 RETURN NULL;
14855 END contract_next_payment_amount;
14856 -- End - varangan-Bug#5009351
14857
14858 -- Added by rravikir -- Bug 5055835
14859
14860 -- ############################################################
14861 -- FUNCTION get_leaseapp_id
14862 -- This function fetches the Lease Application Info
14863 -- associated to the Contract
14864 -- ############################################################
14865 FUNCTION get_leaseapp_id(p_contract_id IN NUMBER)
14866 RETURN NUMBER IS
14867
14868 CURSOR c_get_lease_app IS
14869 SELECT orig_system_id1
14870 FROM okc_k_headers_b
14871 WHERE id = p_contract_id
14872 AND orig_system_source_code = 'OKL_LEASE_APP';
14873
14874 ln_lease_app_id NUMBER;
14875 BEGIN
14876 OPEN c_get_lease_app;
14877 FETCH c_get_lease_app INTO ln_lease_app_id;
14878 CLOSE c_get_lease_app;
14879
14880 RETURN ln_lease_app_id;
14881 EXCEPTION
14882 WHEN OTHERS THEN
14883 IF c_get_lease_app%ISOPEN THEN
14884 CLOSE c_get_lease_app;
14885 END IF;
14886 RETURN NULL;
14887 END get_leaseapp_id;
14888
14889 -- ######################################################################
14890 -- FUNCTION check_contract_fin_amount
14891 -- This function checks for total financed amount on contract is
14892 -- equal to or less than the total amount approved on a Lease Application
14893 -- ######################################################################
14894 FUNCTION check_contract_fin_amount(p_contract_id IN NUMBER,
14895 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
14896 RETURN VARCHAR2 IS
14897
14898 ln_contract_financed_amount NUMBER;
14899 ln_leaseapp_financed_amount NUMBER;
14900 ln_lease_app_id NUMBER;
14901 ln_quote_id NUMBER;
14902
14903 CURSOR c_get_primary_quote(p_leaseapp_id IN NUMBER) IS
14904 SELECT id
14905 FROM okl_lease_quotes_b
14906 WHERE parent_object_id = p_leaseapp_id
14907 AND parent_object_code = 'LEASEAPP'
14908 AND primary_quote = 'Y';
14909
14910 BEGIN
14911 ln_contract_financed_amount := contract_financed_amount(p_contract_id => p_contract_id,
14912 p_contract_line_id => null);
14913
14914 -- Get Lease Application Info
14915 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
14916
14917 IF (ln_lease_app_id IS NOT NULL) THEN
14918 OPEN c_get_primary_quote(p_leaseapp_id => ln_lease_app_id);
14919 FETCH c_get_primary_quote INTO ln_quote_id;
14920 CLOSE c_get_primary_quote;
14921 END IF;
14922
14923 IF (ln_quote_id IS NOT NULL) THEN
14924 ln_leaseapp_financed_amount := okl_lease_app_pvt.get_financed_amount(p_lease_qte_id => ln_quote_id);
14925 END IF;
14926
14927 IF (ln_contract_financed_amount IS NOT NULL AND ln_leaseapp_financed_amount IS NOT NULL) THEN
14928 IF ln_contract_financed_amount <= ln_leaseapp_financed_amount THEN
14929 RETURN 'P';
14930 ELSE
14931 RETURN 'F';
14932 END IF;
14933 ELSE
14934 RETURN NULL;
14935 END IF;
14936
14937 EXCEPTION
14938 WHEN OTHERS THEN
14939 IF c_get_primary_quote%ISOPEN THEN
14940 CLOSE c_get_primary_quote;
14941 END IF;
14942 RETURN NULL;
14943 END check_contract_fin_amount;
14944
14945 -- ######################################################################
14946 -- FUNCTION check_fund_amount
14947 -- This function checks for total amount funded on a contract is
14948 -- equal to or less than the total amount approved on a Lease Application
14949 -- ######################################################################
14950 FUNCTION check_fund_amount(p_contract_id IN NUMBER,
14951 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
14952 RETURN VARCHAR2 IS
14953
14954 ln_contract_funded_amount NUMBER;
14955 ln_leaseapp_financed_amount NUMBER;
14956 ln_lease_app_id NUMBER;
14957 ln_quote_id NUMBER;
14958 ln_fund_amount NUMBER := 0;
14959
14960 CURSOR c_get_primary_quote(p_leaseapp_id IN NUMBER) IS
14961 SELECT id
14962 FROM okl_lease_quotes_b
14963 WHERE parent_object_id = p_leaseapp_id
14964 AND parent_object_code = 'LEASEAPP'
14965 AND primary_quote = 'Y';
14966
14967 CURSOR c_get_fund_amount(p_contract_line_id IN NUMBER) IS
14968 SELECT nvl(amount, 0)
14969 FROM okl_trx_ap_invoices_b
14970 WHERE id = p_contract_line_id;
14971 --AND trx_status_code = 'ENTERED'
14972 --AND FUNDING_TYPE_CODE IN ('PREFUNDING', 'ASSET', 'EXPENSE');
14973
14974 BEGIN
14975 ln_contract_funded_amount := okl_funding_pvt.get_total_funded(p_contract_id => p_contract_id);
14976
14977 IF (p_contract_line_id IS NOT NULL AND p_contract_line_id <> OKL_API.G_MISS_NUM) THEN
14978 OPEN c_get_fund_amount(p_contract_line_id => p_contract_line_id);
14979 FETCH c_get_fund_amount INTO ln_fund_amount;
14980 CLOSE c_get_fund_amount;
14981 END IF;
14982
14983 ln_contract_funded_amount := ln_contract_funded_amount + ln_fund_amount;
14984
14985 -- Get Lease Application Info
14986 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
14987
14988 IF (ln_lease_app_id IS NOT NULL) THEN
14989 OPEN c_get_primary_quote(p_leaseapp_id => ln_lease_app_id);
14990 FETCH c_get_primary_quote INTO ln_quote_id;
14991 CLOSE c_get_primary_quote;
14992 END IF;
14993
14994 IF (ln_quote_id IS NOT NULL) THEN
14995 ln_leaseapp_financed_amount := okl_lease_app_pvt.get_financed_amount(p_lease_qte_id => ln_quote_id);
14996 END IF;
14997
14998 IF (ln_contract_funded_amount IS NOT NULL AND ln_leaseapp_financed_amount IS NOT NULL) THEN
14999 IF ln_contract_funded_amount <= ln_leaseapp_financed_amount THEN
15000 RETURN 'P';
15001 ELSE
15002 RETURN 'F';
15003 END IF;
15004 ELSE
15005 RETURN NULL;
15006 END IF;
15007
15008 EXCEPTION
15009 WHEN OTHERS THEN
15010 IF c_get_primary_quote%ISOPEN THEN
15011 CLOSE c_get_primary_quote;
15012 END IF;
15013 RETURN NULL;
15014 END check_fund_amount;
15015
15016 -- ######################################################################
15017 -- FUNCTION check_party_custacct_match
15018 -- This function checks for Party and Customer Account on Lease Application
15019 -- and Contract are same
15020 -- ######################################################################
15021 FUNCTION check_party_custacct_match(p_contract_id IN NUMBER,
15022 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
15023 RETURN VARCHAR2 IS
15024
15025 ln_lease_app_id NUMBER;
15026 ln_k_party_id NUMBER;
15027 ln_k_cust_acct_id NUMBER;
15028 ln_lap_party_id NUMBER;
15029 ln_lap_cust_acct_id NUMBER;
15030
15031 CURSOR c_k_get_party_custacct_info IS
15032 SELECT kp.object1_id1, okc.cust_acct_id
15033 FROM okc_k_party_roles_b kp, okc_k_headers_b okc
15034 WHERE kp.dnz_chr_id = p_contract_id
15035 AND kp.rle_code = 'LESSEE'
15036 AND kp.dnz_chr_id = okc.id;
15037
15038 CURSOR c_lap_get_party_custacct_info(p_lease_app_id IN NUMBER) IS
15039 SELECT prospect_id, cust_acct_id
15040 FROM okl_lease_applications_b
15041 WHERE id = p_lease_app_id;
15042 BEGIN
15043
15044 -- Get Lease Application Info
15045 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
15046
15047 OPEN c_k_get_party_custacct_info;
15048 FETCH c_k_get_party_custacct_info INTO ln_k_party_id, ln_k_cust_acct_id;
15049 CLOSE c_k_get_party_custacct_info;
15050
15051 OPEN c_lap_get_party_custacct_info(p_lease_app_id => ln_lease_app_id) ;
15052 FETCH c_lap_get_party_custacct_info INTO ln_lap_party_id, ln_lap_cust_acct_id;
15053 CLOSE c_lap_get_party_custacct_info;
15054
15055 IF (ln_k_party_id = ln_lap_party_id AND ln_k_cust_acct_id = ln_lap_cust_acct_id) THEN
15056 RETURN 'P';
15057 ELSE
15058 RETURN 'F';
15059 END IF;
15060
15061 EXCEPTION
15062 WHEN OTHERS THEN
15063 IF c_k_get_party_custacct_info%ISOPEN THEN
15064 CLOSE c_k_get_party_custacct_info;
15065 END IF;
15066 IF c_lap_get_party_custacct_info%ISOPEN THEN
15067 CLOSE c_lap_get_party_custacct_info;
15068 END IF;
15069 RETURN NULL;
15070 END check_party_custacct_match;
15071
15072 -- ######################################################################
15073 -- FUNCTION check_vendor_prog_match
15074 -- This function checks for Vendor Program on Lease Application and
15075 -- Contract are same
15076 -- ######################################################################
15077 FUNCTION check_vendor_prog_match(p_contract_id IN NUMBER,
15078 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
15079 RETURN VARCHAR2 IS
15080
15081 CURSOR c_k_vendor_prog_info IS
15082 SELECT khr_id
15083 FROM okl_k_headers
15084 WHERE id = p_contract_id;
15085
15086 CURSOR c_lap_vendor_prog_info(p_lease_app_id IN NUMBER) IS
15087 SELECT program_agreement_id
15088 FROM okl_lease_applications_b
15089 WHERE id = p_lease_app_id;
15090
15091 ln_k_prog_id NUMBER;
15092 ln_lap_prog_id NUMBER;
15093 ln_lease_app_id NUMBER;
15094 BEGIN
15095
15096 -- Get Lease Application Info
15097 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
15098
15099 OPEN c_k_vendor_prog_info;
15100 FETCH c_k_vendor_prog_info INTO ln_k_prog_id;
15101 CLOSE c_k_vendor_prog_info;
15102
15103 OPEN c_lap_vendor_prog_info(p_lease_app_id => ln_lease_app_id);
15104 FETCH c_lap_vendor_prog_info INTO ln_lap_prog_id;
15105 CLOSE c_lap_vendor_prog_info;
15106
15107 IF (ln_k_prog_id IS NULL AND ln_lap_prog_id IS NULL) THEN
15108 RETURN 'P';
15109 ELSIF (ln_k_prog_id = ln_lap_prog_id) THEN
15110 RETURN 'P';
15111 ELSE
15112 RETURN 'F';
15113 END IF;
15114
15115 EXCEPTION
15116 WHEN OTHERS THEN
15117 IF c_k_vendor_prog_info%ISOPEN THEN
15118 CLOSE c_k_vendor_prog_info;
15119 END IF;
15120 IF c_lap_vendor_prog_info%ISOPEN THEN
15121 CLOSE c_lap_vendor_prog_info;
15122 END IF;
15123 RETURN NULL;
15124 END check_vendor_prog_match;
15125
15126 -- ######################################################################
15127 -- FUNCTION check_booking_date
15128 -- This function checks for Activation date of contract is within the
15129 -- effective dates of Lease Application
15130 -- ######################################################################
15131 FUNCTION check_booking_date(p_contract_id IN NUMBER,
15132 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
15133 RETURN VARCHAR2 IS
15134
15135 CURSOR c_k_booking_date IS
15136 SELECT date_transaction_occurred
15137 FROM okl_trx_contracts
15138 WHERE khr_id = p_contract_id
15139 AND representation_type = 'PRIMARY'; -- MGAAP OTHER 7263041
15140
15141 ld_k_booking_date DATE;
15142 ld_lap_app_exp_date DATE;
15143 ln_lease_app_id NUMBER;
15144 BEGIN
15145
15146 -- Get Lease Application Info
15147 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
15148
15149 OPEN c_k_booking_date;
15150 FETCH c_k_booking_date INTO ld_k_booking_date;
15151 CLOSE c_k_booking_date;
15152
15153 ld_lap_app_exp_date := okl_lease_app_pvt.get_approval_exp_date(p_lease_app_id => ln_lease_app_id);
15154
15155 IF (ld_k_booking_date IS NULL) THEN
15156 ld_k_booking_date := SYSDATE;
15157 END IF;
15158
15159 IF (ld_lap_app_exp_date IS NOT NULL) THEN
15160 IF (ld_k_booking_date <= ld_lap_app_exp_date ) THEN
15161 RETURN 'P';
15162 ELSE
15163 RETURN 'F';
15164 END IF;
15165 ELSE
15166 RETURN 'P';
15167 END IF;
15168
15169 EXCEPTION
15170 WHEN OTHERS THEN
15171 IF c_k_booking_date%ISOPEN THEN
15172 CLOSE c_k_booking_date;
15173 END IF;
15174 RETURN NULL;
15175 END check_booking_date;
15176
15177 -- ######################################################################
15178 -- FUNCTION check_funding_date
15179 -- This function checks for Funding date of Funding request is within the
15180 -- effective dates of Lease Application
15181 -- ######################################################################
15182 FUNCTION check_funding_date(p_contract_id IN NUMBER,
15183 p_contract_line_id IN NUMBER DEFAULT OKL_API.G_MISS_NUM)
15184 RETURN VARCHAR2 IS
15185
15186 -- sjalasut, modified the cursor to have p_contract_id mapped to okl_txl_ap_inv_lns_all_b
15187 -- changes made as part of OKLR12B disbursements project.
15188 CURSOR c_k_funding_date IS
15189 SELECT a.date_invoiced
15190 FROM okl_trx_ap_invoices_b a
15191 -- ,okl_txl_ap_inv_lns_all_b b --cklee 09/21/07
15192 -- WHERE a.id = b.tap_id
15193 where a.khr_id = p_contract_id;
15194
15195 ld_k_funded_date DATE;
15196 ld_lap_app_exp_date DATE;
15197 ln_lease_app_id NUMBER;
15198 BEGIN
15199 -- Get Lease Application Info
15200 ln_lease_app_id := get_leaseapp_id(p_contract_id => p_contract_id);
15201
15202 OPEN c_k_funding_date;
15203 FETCH c_k_funding_date INTO ld_k_funded_date;
15204 CLOSE c_k_funding_date;
15205
15206 ld_lap_app_exp_date := okl_lease_app_pvt.get_approval_exp_date(p_lease_app_id => ln_lease_app_id);
15207
15208 IF (ld_lap_app_exp_date IS NOT NULL) THEN
15209 IF (ld_k_funded_date <= ld_lap_app_exp_date ) THEN
15210 RETURN 'P';
15211 ELSE
15212 RETURN 'F';
15213 END IF;
15214 ELSE
15215 RETURN 'P';
15216 END IF;
15217
15218 EXCEPTION
15219 WHEN OTHERS THEN
15220 IF c_k_funding_date%ISOPEN THEN
15221 CLOSE c_k_funding_date;
15222 END IF;
15223 RETURN NULL;
15224 END check_funding_date;
15225 -- rravikir End -- Bug 5055835
15226
15227 -- ######################################################################
15228 -- FUNCTION asset_accu_deprn_reserve
15229 -- Returns fixed asset accumulated depreciation reserve for a financial asset
15230 -- line.
15231 -- ######################################################################
15232 FUNCTION asset_accu_deprn_reserve(
15233 p_contract_id IN NUMBER
15234 ,p_contract_line_id IN NUMBER
15235 )
15236 RETURN NUMBER IS
15237
15238 l_api_name CONSTANT VARCHAR2(30) := 'ASSET_ACCU_DEPRN_RESERVE';
15239 l_api_version CONSTANT NUMBER := 1;
15240 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
15241 x_msg_count NUMBER;
15242 x_msg_data VARCHAR2(256);
15243
15244 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
15245 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
15246
15247 l_converted_amount NUMBER;
15248 l_contract_start_date DATE;
15249 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
15250 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
15251 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
15252 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
15253
15254 CURSOR l_asset_csr(p_chr_id IN NUMBER
15255 ,p_cle_id IN NUMBER
15256 ,p_book_class IN VARCHAR2 -- 7626121
15257 ,p_book_type_code IN VARCHAR2) IS
15258 SELECT fab.asset_id,
15259 fab.book_type_code
15260 FROM okc_k_lines_v fin_ast_cle,
15261 okc_statuses_b stsb,
15262 fa_additions fad,
15263 fa_book_controls fbc,
15264 fa_books fab
15265 WHERE fin_ast_cle.id = p_cle_id
15266 AND fin_ast_cle.dnz_chr_id = p_chr_id
15267 AND fin_ast_cle.chr_id = p_chr_id
15268 AND fin_ast_cle.sts_code = stsb.code
15269 AND stsb.ste_code NOT IN ('HOLD','CANCELLED')
15270 AND fad.asset_number = fin_ast_cle.name
15271 AND fab.asset_id = fad.asset_id
15272 AND fab.book_type_code = fbc.book_type_code
15273 AND fab.transaction_header_id_out IS NULL
15274 --AND fbc.book_class = 'CORPORATE';
15275 AND fbc.book_class = p_book_class
15276 AND fab.book_type_code = NVL(p_book_type_code,fab.book_type_code);
15277
15278
15279 l_asset_rec l_asset_csr%ROWTYPE;
15280
15281
15282 CURSOR contract_start_date_csr(p_chr_id NUMBER) IS
15283 SELECT start_date
15284 FROM okc_k_headers_b
15285 WHERE id = p_chr_id;
15286
15287 l_streams_repo_policy VARCHAR2(80); -- 7626121
15288 l_book_class FA_BOOK_CONTROLS.BOOK_CLASS%TYPE := null;
15289 l_book_type_code FA_BOOK_CONTROLS.BOOK_TYPE_CODE%TYPE := null;
15290
15291
15292 BEGIN
15293
15294 IF (( p_contract_id IS NULL ) OR ( p_contract_line_id IS NULL )) THEN
15295 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
15296 END IF;
15297
15298 -- 7626121
15299 l_streams_repo_policy := OKL_STREAMS_SEC_PVT.GET_STREAMS_POLICY;
15300 l_book_type_code := NULL;
15301 IF (l_streams_repo_policy = 'PRIMARY') THEN
15302 l_book_class := 'CORPORATE';
15303 ELSE
15304 l_book_class := 'TAX';
15305 l_book_type_code := OKL_ACCOUNTING_UTIL.get_fa_reporting_book(
15306 p_kle_id => p_contract_line_id);
15307 END IF;
15308
15309 OPEN l_asset_csr(p_chr_id => p_contract_id,
15310 p_cle_id => p_contract_line_id,
15311 p_book_class => l_book_class, -- 7626121
15312 p_book_type_code => l_book_type_code);
15313 FETCH l_asset_csr INTO l_asset_rec;
15314 IF( l_asset_csr%NOTFOUND ) THEN
15315
15316 CLOSE l_asset_csr;
15317 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
15318 END IF;
15319 CLOSE l_asset_csr;
15320
15321 l_asset_hdr_rec.asset_id := l_asset_rec.asset_id;
15322 l_asset_hdr_rec.book_type_code := l_asset_rec.book_type_code;
15323
15324 IF NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) THEN
15325 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
15326 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
15327 );
15328 RAISE OKL_API.G_EXCEPTION_ERROR;
15329 END IF;
15330
15331
15332 -- To fetch Depreciation Reserve
15333 IF NOT FA_UTIL_PVT.get_asset_deprn_rec
15334 (p_asset_hdr_rec => l_asset_hdr_rec ,
15335 px_asset_deprn_rec => l_asset_deprn_rec,
15336 p_period_counter => NULL,
15337 p_mrc_sob_type_code => 'P'
15338 ) THEN
15339 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
15340 p_msg_name => 'OKL_LLA_FA_DEPRN_REC_ERROR'
15341 );
15342 RAISE OKL_API.G_EXCEPTION_ERROR;
15343 END IF;
15344
15345
15346
15347 -- convert amount into contract currency
15348 OPEN contract_start_date_csr(p_chr_id => p_contract_id);
15349 FETCH contract_start_date_csr INTO l_contract_start_date;
15350 CLOSE contract_start_date_csr;
15351
15352 l_converted_amount := 0;
15353 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
15354 p_khr_id => p_contract_id,
15355 p_from_currency => NULL,
15356 p_transaction_date => l_contract_start_date,
15357 p_amount => l_asset_deprn_rec.deprn_reserve,
15358 x_return_status => x_return_status,
15359 x_contract_currency => l_contract_currency,
15360 x_currency_conversion_type => l_currency_conversion_type,
15361 x_currency_conversion_rate => l_currency_conversion_rate,
15362 x_currency_conversion_date => l_currency_conversion_date,
15363 x_converted_amount => l_converted_amount);
15364
15365
15366 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
15367 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
15368 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
15369 RAISE Okl_Api.G_EXCEPTION_ERROR;
15370 END IF;
15371
15372 RETURN l_converted_amount;
15373
15374 EXCEPTION
15375
15376 WHEN OKL_API.G_EXCEPTION_ERROR THEN
15377 RETURN NULL;
15378
15379 WHEN OTHERS THEN
15380 Okl_Api.SET_MESSAGE(
15381 p_app_name => G_APP_NAME,
15382 p_msg_name => G_UNEXPECTED_ERROR,
15383 p_token1 => G_SQLCODE_TOKEN,
15384 p_token1_value => SQLCODE,
15385 p_token2 => G_SQLERRM_TOKEN,
15386 p_token2_value => SQLERRM);
15387 RETURN NULL;
15388
15389 END asset_accu_deprn_reserve;
15390
15391 -- Added by mansrini for ER Bug#6011738
15392 -- ---------------------------------------------------------------
15393 -- FUNCTION : lease_quote_financed_amount
15394 --
15395 -- DESC : Returns Financed Amount for an asset on a sales
15396 -- quote which is calculated as ->
15397 -- Asset Cost + Add-ons + Capitalized Fees
15398 -- - Capitalized Down Payments - Trade Ins.
15399 --
15400 -- PARAMETERS : Passed NONE, requires ASSET_ID to be passed as
15401 -- additional parameter from okl_execute_formula_pub
15402 -- which is the asset on quote for which to calculate
15403 -- financed amount.
15404 -- ---------------------------------------------------------------
15405 FUNCTION lease_quote_financed_amount
15406 RETURN NUMBER IS
15407 --cursor to get asset cost
15408 CURSOR c_asset_cost (p_asset_id IN NUMBER) IS
15409 SELECT (ASSETCOMP.NUMBER_OF_UNITS * ASSETCOMP.UNIT_COST) AST_COST
15410 FROM OKL_ASSET_COMPONENTS_B ASSETCOMP
15411 WHERE ASSETCOMP.PRIMARY_COMPONENT = 'YES'
15412 AND ASSETCOMP.ASSET_ID = p_asset_id;
15413
15414 --cursor to get asset Add-On amount
15415 CURSOR c_addOn_cost (p_asset_id IN NUMBER) IS
15416 SELECT sum(ASSETCOMP.NUMBER_OF_UNITS * ASSETCOMP.UNIT_COST) ADDON_AMNT
15417 FROM OKL_ASSET_COMPONENTS_B ASSETCOMP
15418 WHERE ASSETCOMP.PRIMARY_COMPONENT = 'NO'
15419 AND ASSETCOMP.ASSET_ID = p_asset_id;
15420
15421 -- cursor to get capitalized fee amount for the asset
15422 CURSOR c_cap_fee_amnt (p_asset_id IN NUMBER) IS
15423 SELECT SUM(amount) capitalized_fee_amount
15424 FROM okl_line_relationships_v lre
15425 WHERE source_line_type = 'ASSET'
15426 AND related_line_type = 'CAPITALIZED'
15427 AND source_line_id = p_asset_id;
15428
15429 --cursor to get capitalized down payment for the asset
15430 CURSOR c_cap_down_pmnt (p_asset_id IN NUMBER) IS
15431 SELECT sum(adj.value) cap_down_payment
15432 FROM okl_assets_b ast, okl_cost_adjustments_b adj
15433 WHERE ast.parent_object_code = 'LEASEQUOTE'
15434 AND adj.parent_object_id = ast.id
15435 AND adj.ADJUSTMENT_SOURCE_TYPE = 'DOWN_PAYMENT'
15436 AND adj.PROCESSING_TYPE = 'CAPITALIZE'
15437 AND ast.id = p_asset_id;
15438
15439 --cursor to get trade-in amount for the asset
15440 CURSOR c_tradein_amnt (p_asset_id IN NUMBER) IS
15441 SELECT sum(adj.value) tradeIn_amount
15442 FROM okl_assets_b ast, okl_cost_adjustments_b adj
15443 WHERE ast.parent_object_code = 'LEASEQUOTE'
15444 AND adj.parent_object_id = ast.id
15445 AND adj.adjustment_source_type = 'TRADEIN'
15446 AND ast.id = p_asset_id;
15447
15448 l_asset_id NUMBER;
15449
15450 l_financed_amount NUMBER;
15451 l_asset_cost NUMBER;
15452 l_add_on_amnt NUMBER;
15453 l_cap_fee_amnt NUMBER;
15454 l_cap_down_pmnt NUMBER;
15455 l_trade_in_amnt NUMBER;
15456
15457 BEGIN
15458
15459 -- get asset id passed as additional parameters
15460 IF okl_execute_formula_pub.g_additional_parameters.EXISTS(1)
15461 AND okl_execute_formula_pub.g_additional_parameters(1).name =
15462 'ASSET_ID'
15463 AND okl_execute_formula_pub.g_additional_parameters(1).value IS NOT
15464 NULL
15465 THEN
15466 l_asset_id :=
15467 to_number(okl_execute_formula_pub.g_additional_parameters(1).value);
15468 END IF;
15469
15470 IF (l_asset_id IS NULL) THEN
15471 RAISE OKL_API.G_EXCEPTION_ERROR;
15472 END IF;
15473
15474 -- get asset cost
15475 l_asset_cost := 0;
15476 OPEN c_asset_cost(l_asset_id);
15477 FETCH c_asset_cost INTO l_asset_cost;
15478 IF( c_asset_cost%NOTFOUND ) THEN
15479 CLOSE c_asset_cost;
15480 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
15481 END IF;
15482 CLOSE c_asset_cost;
15483
15484 -- get add-on amount
15485 OPEN c_addOn_cost(l_asset_id);
15486 FETCH c_addOn_cost INTO l_add_on_amnt;
15487 CLOSE c_addOn_cost;
15488 IF l_add_on_amnt is null then
15489 l_add_on_amnt := 0;
15490 END IF;
15491
15492 -- get capitalized fee amount
15493 OPEN c_cap_fee_amnt(l_asset_id);
15494 FETCH c_cap_fee_amnt INTO l_cap_fee_amnt;
15495 CLOSE c_cap_fee_amnt;
15496 IF l_cap_fee_amnt is null then
15497 l_cap_fee_amnt := 0;
15498 END IF;
15499
15500 -- get capitalized down payment amount
15501 OPEN c_cap_down_pmnt(l_asset_id);
15502 FETCH c_cap_down_pmnt INTO l_cap_down_pmnt;
15503 CLOSE c_cap_down_pmnt;
15504 IF l_cap_down_pmnt is null then
15505 l_cap_down_pmnt := 0;
15506 END IF;
15507
15508 -- get trade-in amount
15509 OPEN c_tradein_amnt(l_asset_id);
15510 FETCH c_tradein_amnt INTO l_trade_in_amnt;
15511 CLOSE c_tradein_amnt;
15512 IF l_trade_in_amnt is null then
15513 l_trade_in_amnt := 0;
15514 END IF;
15515
15516 l_financed_amount := l_asset_cost + l_add_on_amnt + l_cap_fee_amnt -
15517 l_cap_down_pmnt - l_trade_in_amnt;
15518
15519 RETURN l_financed_amount;
15520 EXCEPTION
15521 WHEN OKL_API.G_EXCEPTION_ERROR THEN
15522 IF c_asset_cost%ISOPEN THEN
15523 CLOSE c_asset_cost;
15524 END IF;
15525 IF c_addOn_cost%ISOPEN THEN
15526 CLOSE c_addOn_cost;
15527 END IF;
15528 IF c_cap_fee_amnt%ISOPEN THEN
15529 CLOSE c_cap_fee_amnt;
15530 END IF;
15531 IF c_cap_down_pmnt%ISOPEN THEN
15532 CLOSE c_cap_down_pmnt;
15533 END IF;
15534 IF c_tradein_amnt%ISOPEN THEN
15535 CLOSE c_tradein_amnt;
15536 END IF;
15537 RETURN NULL;
15538 WHEN OTHERS THEN
15539 Okl_Api.SET_MESSAGE(
15540 p_app_name => G_APP_NAME,
15541 p_msg_name => G_UNEXPECTED_ERROR,
15542 p_token1 => G_SQLCODE_TOKEN,
15543 p_token1_value => SQLCODE,
15544 p_token2 => G_SQLERRM_TOKEN,
15545 p_token2_value => SQLERRM);
15546 IF c_asset_cost%ISOPEN THEN
15547 CLOSE c_asset_cost;
15548 END IF;
15549 IF c_addOn_cost%ISOPEN THEN
15550 CLOSE c_addOn_cost;
15551 END IF;
15552 IF c_cap_fee_amnt%ISOPEN THEN
15553 CLOSE c_cap_fee_amnt;
15554 END IF;
15555 IF c_cap_down_pmnt%ISOPEN THEN
15556 CLOSE c_cap_down_pmnt;
15557 END IF;
15558 IF c_tradein_amnt%ISOPEN THEN
15559 CLOSE c_tradein_amnt;
15560 END IF;
15561 RETURN NULL;
15562 END lease_quote_financed_amount;
15563 -- End by mansrini for ER Bug#6011738
15564
15565 -- Start : Added by mansrini for ER Bug#6011738
15566 -- -----------------------------------------------------------------------
15567 -- FUNCTION : line_financed_amount
15568 --
15569 -- DESC : Returns Financed Amount for an asset line of a contract
15570 -- which is calculated as
15571 -- Financed Amount = Asset Cost
15572 -- + Add-On to the asset
15573 -- + Capitalized Fee associated to the asset
15574 -- - Capitalized Down Payment for the asset
15575 -- - Trade-In Amount associated to the asset
15576 --
15577 -- PARAMETERS : IN p_contract_id, p_contract_line_id
15578 -- -----------------------------------------------------------------------
15579 FUNCTION line_financed_amount(p_contract_id IN NUMBER
15580 ,p_contract_line_id IN NUMBER)
15581 RETURN NUMBER IS
15582 G_APP_NAME CONSTANT VARCHAR2(3) :=
15583 OKL_API.G_APP_NAME;
15584 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
15585 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) :=
15586 OKL_API.G_COL_NAME_TOKEN;
15587 G_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) :=
15588 'OKL_LLA_NO_MATCHING_RECORD';
15589 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLERRM';
15590 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLCODE';
15591 G_LINE_RECORD CONSTANT VARCHAR2(200) :=
15592 'OKL_LLA_LINE_RECORD';
15593 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) :=
15594 'OKL_LLA_INVALID_CRITERIA';
15595 l_return_status VARCHAR2(3) :=
15596 OKL_API.G_RET_STS_SUCCESS;
15597
15598 l_lty_code OKC_LINE_STYLES_V.LTY_CODE%TYPE;
15599 l_financed_amount NUMBER;
15600 l_asset_cost NUMBER;
15601 l_addon NUMBER;
15602 l_cap_fee NUMBER;
15603 l_trade_in NUMBER;
15604 l_cap_down_pmnt NUMBER;
15605 l_cap_down_pct NUMBER;
15606 l_cap_down_pmnt_yn VARCHAR2(3);
15607
15608 -- Cursor to get the lty_code
15609 CURSOR get_lty_code(p_line_id NUMBER) IS
15610 SELECT lse.lty_code
15611 FROM okc_k_lines_b cle,
15612 okc_line_styles_b lse
15613 WHERE cle.id = p_line_id
15614 AND cle.lse_id = lse.id;
15615
15616 -- Cursor to sum up asset cost for given Asset line
15617 CURSOR c_asset_cost(p_line_id NUMBER,
15618 p_dnz_chr_id NUMBER) IS
15619 SELECT SUM(cle.price_unit * cim.number_of_items) asset_cost
15620 FROM okc_subclass_top_line stl,
15621 okc_line_styles_b lse2,
15622 okc_line_styles_b lse1,
15623 okc_k_items_v cim,
15624 okc_k_lines_v cle
15625 WHERE cle.cle_id = p_line_id
15626 AND cle.dnz_chr_id = p_dnz_chr_id
15627 AND cle.id = cim.cle_id
15628 AND cle.dnz_chr_id = cim.dnz_chr_id
15629 AND cle.lse_id = lse1.id
15630 AND lse1.lty_code = 'ITEM'
15631 AND lse1.lse_parent_id = lse2.id
15632 AND lse2.lty_code = 'FREE_FORM1'
15633 AND lse2.id = stl.lse_id
15634 AND stl.scs_code IN ('LEASE','LOAN');
15635
15636 -- Cursor to sum up addon amount for a given line
15637 CURSOR c_addon(p_line_id NUMBER,
15638 p_dnz_chr_id NUMBER) IS
15639 SELECT SUM(cle.price_unit* cim.number_of_items) add_on
15640 FROM okc_subclass_top_line stl,
15641 okc_line_styles_b lse3,
15642 okc_line_styles_b lse2,
15643 okc_line_styles_b lse1,
15644 okc_k_items_v cim,
15645 okc_k_lines_b cle
15646 WHERE cle.dnz_chr_id = p_dnz_chr_id
15647 AND cle.dnz_chr_id = cim.dnz_chr_id
15648 AND cle.id = cim.cle_id
15649 AND cle.lse_id = lse1.id
15650 AND lse1.lty_code = 'ADD_ITEM'
15651 AND lse1.lse_parent_id = lse2.id
15652 AND lse2.lty_code = 'ITEM'
15653 AND lse2.lse_parent_id = lse3.id
15654 AND lse3.lty_code = 'FREE_FORM1'
15655 AND lse3.id = stl.lse_id
15656 AND stl.scs_code IN ('LEASE','LOAN')
15657 AND exists (SELECT 1
15658 FROM okc_subclass_top_line stlx,
15659 okc_line_styles_b lse2x,
15660 okc_line_styles_b lse1x,
15661 okc_k_lines_b clex
15662 WHERE clex.cle_id = p_line_id
15663 AND clex.dnz_chr_id = p_dnz_chr_id
15664 AND clex.lse_id = lse1x.id
15665 AND lse1x.lty_code = 'ITEM'
15666 AND lse1x.lse_parent_id = lse2x.id
15667 AND lse2x.lty_code = 'FREE_FORM1'
15668 AND lse2x.id = stlx.lse_id
15669 AND stlx.scs_code IN ('LEASE','LOAN')
15670 AND clex.id = cle.cle_id);
15671
15672 --Cursor for Capitalized Fee
15673 CURSOR c_cap_fee(p_line_id VARCHAR2,
15674 p_dnz_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
15675 SELECT SUM(kle_cov.capital_amount) Cap_fee
15676 FROM okc_line_styles_b lseb,
15677 okc_k_items cim,
15678 okl_k_lines kle_cov,
15679 okc_k_lines_b cleb_cov,
15680 okc_statuses_b stsb
15681 WHERE lseb.id = cleb_cov.lse_id
15682 AND lseb.lty_code = 'LINK_FEE_ASSET'
15683 AND cim.jtot_object1_code = 'OKX_COVASST'
15684 AND cleb_cov.id = cim.cle_id
15685 AND kle_cov.id = cleb_cov.id
15686 AND cleb_cov.dnz_chr_id = cim.dnz_chr_id
15687 AND cleb_cov.dnz_chr_id = p_dnz_chr_id
15688 AND cim.object1_id1 = p_line_id
15689 AND cleb_cov.sts_code = stsb.code
15690 AND stsb.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED',
15691 'HOLD');
15692
15693 --Cursor for Trade-in Amount and Capital Down Payment
15694 CURSOR c_asset_adjust(p_line_id NUMBER,
15695 p_dnz_chr_id NUMBER) IS
15696 SELECT NVL(kle.capital_reduction,0) capital_reduction,
15697 NVL(kle.tradein_amount,0) tradein_amount,
15698 NVL(kle.capital_reduction_percent,0) capital_reduction_percent,
15699 kle.capitalize_down_payment_yn capitalize_down_payment_yn
15700 FROM okc_line_styles_b ls,
15701 okl_k_lines_full_v kle,
15702 okc_statuses_b sts
15703 WHERE kle.dnz_chr_id = p_dnz_chr_id
15704 AND kle.id = p_line_id
15705 AND ls.id = kle.lse_id
15706 AND ls.lty_code ='FREE_FORM1'
15707 AND kle.sts_code = sts.code
15708 AND sts.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED',
15709 'HOLD');
15710
15711 BEGIN
15712 -- To get the Line Style Code
15713 OPEN get_lty_code(p_line_id => p_contract_line_id);
15714 IF get_lty_code%NOTFOUND THEN
15715 OKL_API.set_message(p_app_name => G_APP_NAME,
15716 p_msg_name => G_NO_MATCHING_RECORD,
15717 p_token1 => G_COL_NAME_TOKEN,
15718 p_token1_value => 'Financial Asset Line');
15719 RAISE OKL_API.G_EXCEPTION_ERROR;
15720 END IF;
15721 FETCH get_lty_code INTO l_lty_code;
15722 CLOSE get_lty_code;
15723
15724 IF l_lty_code = 'FREE_FORM1' THEN
15725 -- To get the asset cost
15726 OPEN c_asset_cost(p_line_id => p_contract_line_id,
15727 p_dnz_chr_id => p_contract_id);
15728 IF c_asset_cost%NOTFOUND THEN
15729 OKL_API.set_message(p_app_name => G_APP_NAME,
15730 p_msg_name => G_NO_MATCHING_RECORD,
15731 p_token1 => G_COL_NAME_TOKEN,
15732 p_token1_value => 'Model Line');
15733 RAISE OKL_API.G_EXCEPTION_ERROR;
15734 END IF;
15735 FETCH c_asset_cost INTO l_asset_cost;
15736 CLOSE c_asset_cost;
15737
15738 -- To get the Addon
15739 -- DJANASWA change begin 11/12/08
15740
15741 /* OPEN c_addon(p_line_id => p_contract_line_id,
15742 p_dnz_chr_id => p_contract_id);
15743 FETCH c_addon INTO l_addon;
15744 CLOSE c_addon;
15745 */
15746 l_addon := Okl_Seeded_Functions_Pvt.total_asset_addon_cost(
15747 p_contract_id => p_contract_id, p_contract_line_id => p_contract_line_id);
15748
15749 -- DJANASWA change end 11/12/08
15750
15751 l_addon := NVL(l_addon,0);
15752
15753 -- To get the Capitalized Fee
15754 OPEN c_cap_fee(p_line_id => TO_CHAR(p_contract_line_id),
15755 p_dnz_chr_id => p_contract_id);
15756 FETCH c_cap_fee INTO l_cap_fee;
15757 CLOSE c_cap_fee;
15758 l_cap_fee := NVL(l_cap_fee,0);
15759
15760 -- To get the Trade-in and Capitalized Down Payment
15761 OPEN c_asset_adjust(p_line_id => p_contract_line_id,
15762 p_dnz_chr_id => p_contract_id);
15763 FETCH c_asset_adjust INTO
15764 l_cap_down_pmnt,l_trade_in,l_cap_down_pct,l_cap_down_pmnt_yn;
15765 CLOSE c_asset_adjust;
15766 l_trade_in := NVL(l_trade_in,0);
15767 l_cap_down_pmnt := NVL(l_cap_down_pmnt,0);
15768 l_cap_down_pct := NVL(l_cap_down_pct,0);
15769 l_cap_down_pmnt_yn := NVL(l_cap_down_pmnt_yn,'N');
15770
15771 IF l_cap_down_pct<>0 THEN
15772 l_cap_down_pmnt := (l_asset_cost + l_addon) *
15773 l_cap_down_pct/100;
15774 END IF;
15775
15776 --Calculation of Financed Amount
15777 --on the basis of Capitalized Down Payment Flag
15778 IF l_cap_down_pmnt_yn = 'N' THEN
15779 l_financed_amount := l_asset_cost + l_addon + l_cap_fee -
15780 l_trade_in;
15781 ELSE
15782 l_financed_amount := l_asset_cost + l_addon + l_cap_fee -
15783 l_cap_down_pmnt - l_trade_in;
15784 END IF;
15785
15786 ELSE
15787 OKL_API.set_message(p_app_name => G_APP_NAME,
15788 p_msg_name => G_LINE_RECORD);
15789 RAISE OKL_API.G_EXCEPTION_ERROR;
15790 END IF;
15791 RETURN l_financed_amount;
15792 EXCEPTION
15793 WHEN OKL_API.G_EXCEPTION_ERROR THEN
15794 -- If the cursor is open then it has to be closed
15795 IF get_lty_code%ISOPEN THEN
15796 CLOSE get_lty_code;
15797 END IF;
15798 IF c_asset_cost%ISOPEN THEN
15799 CLOSE c_asset_cost;
15800 END IF;
15801 IF c_addon%ISOPEN THEN
15802 CLOSE c_addon;
15803 END IF;
15804 IF c_cap_fee%ISOPEN THEN
15805 CLOSE c_cap_fee;
15806 END IF;
15807 IF c_asset_adjust%ISOPEN THEN
15808 CLOSE c_asset_adjust;
15809 END IF;
15810 RETURN NULL;
15811 WHEN OTHERS THEN
15812 -- If the cursor is open then it has to be closed
15813 IF get_lty_code%ISOPEN THEN
15814 CLOSE get_lty_code;
15815 END IF;
15816 IF c_asset_cost%ISOPEN THEN
15817 CLOSE c_asset_cost;
15818 END IF;
15819 IF c_addon%ISOPEN THEN
15820 CLOSE c_addon;
15821 END IF;
15822 IF c_cap_fee%ISOPEN THEN
15823 CLOSE c_cap_fee;
15824 END IF;
15825 IF c_asset_adjust%ISOPEN THEN
15826 CLOSE c_asset_adjust;
15827 END IF;
15828 RETURN NULL;
15829 END line_financed_amount;
15830
15831 -- --------------------------------------------------------------------
15832 -- FUNCTION : front_end_financed_amount
15833 --
15834 -- DESC : Returns Financed Amount for a financial asset line
15835 -- depending upon the parameters passed
15836 --
15837 -- If p_contract_id and p_contract_line_id are NULL,
15838 -- it implies that the function is called from LEASE
15839 -- QUOTE process and the financed amount is calculated
15840 -- using the function lease_quote_financed_amount().
15841 --
15842 -- And if p_contract_id and p_contract_line_id are not
15843 -- NULL, then it implies that the function is called
15844 -- from AUTHORING process and the financed amount is then
15845 -- calculated using the function line_financed_amount().
15846 --
15847 -- PARAMETERS : IN p_contract_id, p_contract_line_id
15848 -- --------------------------------------------------------------------
15849 FUNCTION front_end_financed_amount( p_contract_id IN NUMBER
15850 ,p_contract_line_id IN NUMBER)
15851 RETURN NUMBER IS
15852 G_APP_NAME CONSTANT VARCHAR2(3) :=
15853 OKL_API.G_APP_NAME;
15854 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
15855 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLERRM';
15856 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLCODE';
15857 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) :=
15858 'OKL_LLA_INVALID_CRITERIA';
15859 l_api_name CONSTANT VARCHAR2(30) :=
15860 'FRONT_END_FINANCED_AMOUNT';
15861
15862 l_financed_amt NUMBER := 0;
15863
15864 BEGIN
15865 -- Call from LEASE QUOTE
15866 IF p_contract_id IS NULL AND p_contract_line_id IS NULL THEN
15867 l_financed_amt := lease_quote_financed_amount;
15868
15869 -- Call from AUTHORING
15870 ELSIF (p_contract_id IS NOT NULL OR
15871 p_contract_id <> Okl_Api.G_MISS_NUM) AND
15872 (p_contract_line_id IS NOT NULL OR
15873 p_contract_line_id <> Okl_Api.G_MISS_NUM) THEN
15874 l_financed_amt := line_financed_amount(p_contract_id => p_contract_id,
15875 p_contract_line_id =>
15876 p_contract_line_id);
15877
15878 ELSE
15879 RAISE OKL_API.G_EXCEPTION_ERROR;
15880 END IF;
15881
15882 RETURN l_financed_amt;
15883
15884 EXCEPTION
15885 WHEN OKL_API.G_EXCEPTION_ERROR THEN
15886 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
15887 p_msg_name => G_INVALID_CRITERIA);
15888 RETURN NULL;
15889 WHEN OTHERS THEN
15890 OKL_API.SET_MESSAGE(
15891 p_app_name => G_APP_NAME,
15892 p_msg_name => G_UNEXPECTED_ERROR,
15893 p_token1 => G_SQLCODE_TOKEN,
15894 p_token1_value => SQLCODE,
15895 p_token2 => G_SQLERRM_TOKEN,
15896 p_token2_value => SQLERRM);
15897 RETURN NULL;
15898 END front_end_financed_amount;
15899 --End by mansrini for Bug#6011738
15900
15901
15902 -- --------------------------------------------------------------------
15903 -- FUNCTION : total_asset_addon_cost
15904 --
15905 -- DESC : Returns total asset addon cost.
15906 --
15907 -- PARAMETERS : IN p_contract_id, p_contract_line_id
15908 -- Added by Durga Janaswamy
15909 -- --------------------------------------------------------------------
15910 FUNCTION total_asset_addon_cost ( p_contract_id IN NUMBER
15911 ,p_contract_line_id IN NUMBER)
15912 RETURN NUMBER IS
15913 G_APP_NAME CONSTANT VARCHAR2(3) := OKL_API.G_APP_NAME;
15914 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_FORMULA_PVT';
15915 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLERRM';
15916 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLCODE';
15917 G_INVALID_CRITERIA CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_CRITERIA';
15918 l_api_name CONSTANT VARCHAR2(30) := 'TOTAL_ASSET_ADDON_COST';
15919
15920 l_addon_cost NUMBER := 0;
15921
15922 CURSOR c_addon_cost_csr (p_contract_id IN NUMBER,
15923 p_contract_line_id IN NUMBER) IS
15924 SELECT SUM(cle.price_unit* cim.number_of_items) add_on_cost
15925 FROM okc_subclass_top_line stl,
15926 okc_line_styles_b lse3,
15927 okc_line_styles_b lse2,
15928 okc_line_styles_b lse1,
15929 okc_k_items_v cim,
15930 okc_k_lines_b cle
15931 WHERE cle.dnz_chr_id = p_contract_id
15932 AND cle.dnz_chr_id = cim.dnz_chr_id
15933 AND cle.id = cim.cle_id
15934 AND cle.lse_id = lse1.id
15935 AND lse1.lty_code = 'ADD_ITEM' -- G_ADDON_LINE_LTY_CODE
15936 AND lse1.lse_parent_id = lse2.id
15937 AND lse2.lty_code = 'ITEM' -- G_MODEL_LINE_LTY_CODE
15938 AND lse2.lse_parent_id = lse3.id
15939 AND lse3.lty_code = 'FREE_FORM1' -- G_FIN_LINE_LTY_CODE
15940 AND lse3.id = stl.lse_id
15941 AND stl.scs_code IN ('LEASE','LOAN')
15942 AND exists (SELECT 1
15943 FROM okc_subclass_top_line stlx,
15944 okc_line_styles_b lse2x,
15945 okc_line_styles_b lse1x,
15946 okc_k_lines_b clex
15947 WHERE clex.cle_id = p_contract_line_id -- lse_id = 33>
15948 AND clex.dnz_chr_id = p_contract_id
15949 AND clex.lse_id = lse1x.id
15950 AND lse1x.lty_code = 'ITEM' -- G_MODEL_LINE_LTY_CODE
15951 AND lse1x.lse_parent_id = lse2x.id
15952 AND lse2x.lty_code = 'FREE_FORM1' -- G_FIN_LINE_LTY_CODE
15953 AND lse2x.id = stlx.lse_id
15954 AND stlx.scs_code IN ('LEASE','LOAN')
15955 AND clex.id = cle.cle_id);
15956
15957
15958 BEGIN
15959
15960 IF (p_contract_id IS NOT NULL OR
15961 p_contract_id <> Okl_Api.G_MISS_NUM) AND
15962 (p_contract_line_id IS NOT NULL OR
15963 p_contract_line_id <> Okl_Api.G_MISS_NUM) THEN
15964
15965 OPEN c_addon_cost_csr ( p_contract_id => p_contract_id,
15966 p_contract_line_id => p_contract_line_id);
15967
15968 IF c_addon_cost_csr%NOTFOUND THEN
15969 NULL;
15970 END IF;
15971
15972 FETCH c_addon_cost_csr INTO l_addon_cost;
15973 CLOSE c_addon_cost_csr;
15974 END IF;
15975
15976 l_addon_cost := NVL(l_addon_cost,0);
15977
15978 RETURN(l_addon_cost);
15979
15980
15981 EXCEPTION
15982 WHEN OKL_API.G_EXCEPTION_ERROR THEN
15983 IF c_addon_cost_csr%ISOPEN THEN
15984 CLOSE c_addon_cost_csr;
15985 END IF;
15986
15987 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
15988 p_msg_name => G_INVALID_CRITERIA);
15989 RETURN NULL;
15990
15991
15992 WHEN OTHERS THEN
15993 --sechawla 18-nov-08 : close cursor
15994 IF c_addon_cost_csr%ISOPEN THEN
15995 CLOSE c_addon_cost_csr;
15996 END IF;
15997 OKL_API.SET_MESSAGE(
15998 p_app_name => G_APP_NAME,
15999 p_msg_name => G_UNEXPECTED_ERROR,
16000 p_token1 => G_SQLCODE_TOKEN,
16001 p_token1_value => SQLCODE,
16002 p_token2 => G_SQLERRM_TOKEN,
16003 p_token2_value => SQLERRM);
16004 RETURN NULL;
16005 END TOTAL_ASSET_ADDON_COST;
16006
16007
16008 ----------------------------------------------------------------------------------------------------
16009
16010 -- Start of Comments
16011 -- Created By: Durga Janaswamy
16012 -- Function Name get_line_subsidy_amount
16013 -- Description: returns the asset line subsidy amount for given contract
16014 -- Dependencies:
16015 -- Parameters: contract id,contract line id, accounting method
16016 --
16017 -- Version: 1.0
16018 --
16019 -- End of Comments
16020
16021 ----------------------------------------------------------------------------------------------------
16022 FUNCTION get_line_subsidy_amount(
16023 p_contract_id IN NUMBER,
16024 p_fin_asset_line_id IN NUMBER,
16025 p_accounting_method IN VARCHAR2)
16026 RETURN NUMBER IS
16027
16028 lx_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
16029 l_api_name CONSTANT VARCHAR2(30) := 'GET_LINE_ASSET_SUBSIDY';
16030 l_api_version CONSTANT NUMBER := 1.0;
16031 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
16032 lx_msg_count NUMBER := OKL_API.G_MISS_NUM;
16033 lx_msg_data VARCHAR2(2000);
16034
16035 x_subsidy_amount NUMBER;
16036
16037 l_asset_line_subsidy_amount NUMBER;
16038
16039 --cursor to fetch all the subsidies attached to financial asset
16040 -- passing accounting method as input parameter
16041 CURSOR l_sub_csr(p_contract_id IN NUMBER,
16042 p_fin_asset_line_id IN NUMBER,
16043 p_accounting_method IN VARCHAR2) IS
16044 SELECT NVL(SUM(sub_kle.amount),0)
16045 FROM okl_subsidies_b subb,
16046 okl_k_lines sub_kle,
16047 okc_k_lines_b sub_cle,
16048 okc_line_styles_b sub_lse
16049 WHERE subb.id = sub_kle.subsidy_id
16050 AND subb.accounting_method_code = NVL(UPPER(p_accounting_method),subb.accounting_method_code)
16051 AND sub_kle.id = sub_cle.id
16052 AND sub_cle.lse_id = sub_lse.id
16053 AND sub_lse.lty_code = 'SUBSIDY'
16054 AND sub_cle.sts_code <> 'ABANDONED'
16055 AND sub_cle.dnz_chr_id = p_contract_id
16056 AND sub_cle.cle_id = p_fin_asset_line_id
16057 AND subb.customer_visible_yn = 'Y'
16058 ;
16059
16060 l_accounting_method okl_subsidies_b.accounting_method_code%TYPE;
16061 l_subsidy_cle_id NUMBER;
16062
16063 BEGIN
16064
16065 l_asset_line_subsidy_amount := 0;
16066
16067 x_subsidy_amount := 0;
16068
16069
16070 IF(p_accounting_method IS NULL OR p_accounting_method = OKL_API.G_MISS_CHAR) THEN
16071 l_accounting_method := NULL;
16072 ELSE
16073 l_accounting_method := p_accounting_method;
16074 END IF;
16075
16076 --------------------------------------------------------------
16077 --get all the subsidies associated to asset and get amount
16078 --------------------------------------------------------------
16079 OPEN l_sub_csr(p_contract_id , p_fin_asset_line_id, l_accounting_method);
16080 --LOOP --sechawla 18-nov
16081 FETCH l_sub_csr INTO l_asset_line_subsidy_amount;
16082 -- EXIT WHEN l_sub_csr%NOTFOUND;
16083 -- END LOOP;
16084 CLOSE l_sub_csr;
16085
16086 x_subsidy_amount := NVL(l_asset_line_subsidy_amount,0);
16087
16088 RETURN x_subsidy_amount;
16089
16090 EXCEPTION
16091 WHEN OKL_API.G_EXCEPTION_ERROR THEN
16092 IF l_sub_csr%ISOPEN THEN
16093 CLOSE l_sub_csr;
16094 END IF;
16095 lx_return_status := OKL_API.HANDLE_EXCEPTIONS(
16096 l_api_name,
16097 G_PKG_NAME,
16098 'OKL_API.G_RET_STS_ERROR',
16099 lx_msg_count,
16100 lx_msg_data,
16101 '_PVT');
16102 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16103 IF l_sub_csr%ISOPEN THEN
16104 CLOSE l_sub_csr;
16105 END IF;
16106 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16107 l_api_name,
16108 G_PKG_NAME,
16109 'OKL_API.G_RET_STS_UNEXP_ERROR',
16110 lx_msg_count,
16111 lx_msg_data,
16112 '_PVT');
16113 WHEN OTHERS THEN
16114 IF l_sub_csr%ISOPEN THEN
16115 CLOSE l_sub_csr;
16116 END IF;
16117 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16118 l_api_name,
16119 G_PKG_NAME,
16120 'OTHERS',
16121 lx_msg_count,
16122 lx_msg_data,
16123 '_PVT');
16124
16125 END get_line_subsidy_amount;
16126
16127
16128 ----------------------------------------------------------------------------------------------------
16129
16130 -- Start of Comments
16131 -- Created By: Durga Janaswamy
16132 -- Function Name get_line_subsidy_ovrd_amount
16133 -- Description: returns the asset line subsidy amount for given contract
16134 -- Dependencies:
16135 -- Parameters: contract id,contract line id, accounting method
16136 --
16137 -- Version: 1.0
16138 --
16139 -- End of Comments
16140
16141 ----------------------------------------------------------------------------------------------------
16142 FUNCTION get_line_subsidy_ovrd_amount(
16143 p_contract_id IN NUMBER,
16144 p_fin_asset_line_id IN NUMBER,
16145 p_accounting_method IN VARCHAR2)
16146 RETURN NUMBER IS
16147
16148 lx_return_status VARCHAR2(1) DEFAULT OKL_API.G_RET_STS_SUCCESS;
16149 l_api_name CONSTANT VARCHAR2(30) := 'GET_LINE_ASSET_SUBSIDY_OVRD';
16150 l_api_version CONSTANT NUMBER := 1.0;
16151 l_init_msg_list VARCHAR2(1) := OKL_API.G_FALSE;
16152 lx_msg_count NUMBER := OKL_API.G_MISS_NUM;
16153 lx_msg_data VARCHAR2(2000);
16154
16155 x_subsidy_amount NUMBER;
16156
16157 l_asset_line_subs_ovrd_amn NUMBER;
16158
16159 --cursor to fetch all the subsidies attached to financial asset
16160 -- passing accounting method as input parameter
16161 CURSOR l_sub_csr(p_contract_id IN NUMBER,
16162 p_fin_asset_line_id IN NUMBER,
16163 p_accounting_method IN VARCHAR2) IS
16164 SELECT NVL(SUM(sub_kle.subsidy_override_amount),0)
16165 FROM okl_subsidies_b subb,
16166 okl_k_lines sub_kle,
16167 okc_k_lines_b sub_cle,
16168 okc_line_styles_b sub_lse
16169 WHERE subb.id = sub_kle.subsidy_id
16170 AND subb.accounting_method_code = NVL(UPPER(p_accounting_method),subb.accounting_method_code)
16171 AND sub_kle.id = sub_cle.id
16172 AND sub_cle.lse_id = sub_lse.id
16173 AND sub_lse.lty_code = 'SUBSIDY'
16174 AND sub_cle.sts_code <> 'ABANDONED'
16175 AND sub_cle.dnz_chr_id = p_contract_id
16176 AND sub_cle.cle_id = p_fin_asset_line_id
16177 AND subb.customer_visible_yn = 'Y'
16178 ;
16179
16180 l_accounting_method okl_subsidies_b.accounting_method_code%TYPE;
16181 l_subsidy_cle_id NUMBER;
16182
16183 BEGIN
16184
16185 l_asset_line_subs_ovrd_amn := 0;
16186
16187 x_subsidy_amount := 0;
16188
16189 IF(p_accounting_method IS NULL OR p_accounting_method = OKL_API.G_MISS_CHAR) THEN
16190 l_accounting_method := NULL;
16191 ELSE
16192 l_accounting_method := p_accounting_method;
16193 END IF;
16194
16195 --------------------------------------------------------------
16196 --get all the subsidies associated to asset and get amount
16197 --------------------------------------------------------------
16198 OPEN l_sub_csr(p_contract_id , p_fin_asset_line_id, l_accounting_method);
16199 --LOOP --sechawla 18-nov-08
16200 FETCH l_sub_csr INTO l_asset_line_subs_ovrd_amn;
16201 -- EXIT WHEN l_sub_csr%NOTFOUND;
16202 --END LOOP;
16203 CLOSE l_sub_csr;
16204
16205 x_subsidy_amount := NVL(l_asset_line_subs_ovrd_amn,0);
16206
16207 RETURN x_subsidy_amount;
16208
16209 EXCEPTION
16210 WHEN OKL_API.G_EXCEPTION_ERROR THEN
16211 IF l_sub_csr%ISOPEN THEN
16212 CLOSE l_sub_csr;
16213 END IF;
16214 lx_return_status := OKL_API.HANDLE_EXCEPTIONS(
16215 l_api_name,
16216 G_PKG_NAME,
16217 'OKL_API.G_RET_STS_ERROR',
16218 lx_msg_count,
16219 lx_msg_data,
16220 '_PVT');
16221 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
16222 IF l_sub_csr%ISOPEN THEN
16223 CLOSE l_sub_csr;
16224 END IF;
16225 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16226 l_api_name,
16227 G_PKG_NAME,
16228 'OKL_API.G_RET_STS_UNEXP_ERROR',
16229 lx_msg_count,
16230 lx_msg_data,
16231 '_PVT');
16232 WHEN OTHERS THEN
16233 IF l_sub_csr%ISOPEN THEN
16234 CLOSE l_sub_csr;
16235 END IF;
16236 lx_return_status :=OKL_API.HANDLE_EXCEPTIONS(
16237 l_api_name,
16238 G_PKG_NAME,
16239 'OTHERS',
16240 lx_msg_count,
16241 lx_msg_data,
16242 '_PVT');
16243
16244 END get_line_subsidy_ovrd_amount;
16245
16246
16247 ----------------------------------------------------------------------------------------------------
16248
16249 -- Start of Comments
16250 -- Created By: Seema Chawla
16251 -- Function Name Total_Asset_Financed_Fee_Amt
16252 -- Description: Returns total financed fee amount associated to an asset line
16253 -- Dependencies:
16254 -- Parameters: contract id and line id
16255 -- Version: 1.0
16256 -- End of Commnets
16257
16258 ----------------------------------------------------------------------------------------------------
16259 FUNCTION Total_Asset_Financed_Fee_Amt(
16260 p_chr_id IN NUMBER,
16261 p_line_id IN NUMBER) RETURN NUMBER IS
16262
16263 l_api_version CONSTANT NUMBER := 1;
16264 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
16265 x_msg_count NUMBER;
16266 x_msg_data VARCHAR2(256);
16267
16268 l_Asset_Fin_fees_amt NUMBER := 0;
16269
16270 CURSOR l_fee_csr( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
16271 SELECT sum(kle_cov.amount) asset_fin_fee_amt
16272 FROM OKC_LINE_STYLES_B LSEB,
16273 OKC_K_ITEMS CIM,
16274 OKL_K_LINES KLE_COV,
16275 okl_k_lines fee_line,
16276 OKC_K_LINES_B CLEB_COV,
16277 OKC_STATUSES_B STSB
16278 WHERE LSEB.ID = CLEB_COV.LSE_ID
16279 AND LSEB.lty_code = 'LINK_FEE_ASSET'
16280 AND CIM.jtot_object1_code = 'OKX_COVASST'
16281 AND CLEB_COV.id = CIM.cle_id
16282 AND KLE_COV.id = CLEB_COV.ID
16283 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
16284 AND CLEB_COV.dnz_chr_id = c_chr_id
16285 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
16286 AND CLEB_COV.sts_code = STSB.code
16287 and CLEB_COV.cle_id = fee_line.id
16288 and fee_line.fee_type = 'FINANCED'
16289 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
16290
16291
16292 CURSOR l_fee_csr_incl_terminated( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
16293 SELECT sum(kle_cov.amount) asset_fin_fee_amt
16294 FROM OKC_LINE_STYLES_B LSEB,
16295 OKC_K_ITEMS CIM,
16296 OKL_K_LINES KLE_COV,
16297 okl_k_lines fee_line,
16298 OKC_K_LINES_B CLEB_COV,
16299 OKC_STATUSES_B STSB
16300 WHERE LSEB.ID = CLEB_COV.LSE_ID
16301 AND LSEB.lty_code = 'LINK_FEE_ASSET'
16302 AND CIM.jtot_object1_code = 'OKX_COVASST'
16303 AND CLEB_COV.id = CIM.cle_id
16304 AND KLE_COV.id = CLEB_COV.ID
16305 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
16306 AND CLEB_COV.dnz_chr_id = c_chr_id
16307 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
16308 AND CLEB_COV.sts_code = STSB.code
16309 and CLEB_COV.cle_id = fee_line.id
16310 and fee_line.fee_type = 'FINANCED'
16311 AND STSB.ste_code NOT IN ( 'EXPIRED', 'CANCELLED', 'HOLD');
16312
16313
16314
16315 l_discount_incl_terminated BOOLEAN := FALSE;
16316
16317 BEGIN
16318
16319 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL)) THEN
16320 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
16321 END IF;
16322
16323
16324 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
16325 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
16326 LOOP
16327 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
16328 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
16329 l_discount_incl_terminated := TRUE;
16330 END IF;
16331 END LOOP;
16332 END IF;
16333
16334
16335 IF l_discount_incl_terminated THEN
16336 OPEN l_fee_csr_incl_terminated (p_chr_id, p_line_id );
16337 FETCH l_fee_csr_incl_terminated INTO l_Asset_Fin_fees_amt;
16338 CLOSE l_fee_csr_incl_terminated;
16339 ELSE
16340 OPEN l_fee_csr( p_chr_id, p_line_id );
16341 FETCH l_fee_csr INTO l_Asset_Fin_fees_amt;
16342 CLOSE l_fee_csr;
16343 END IF;
16344
16345 l_Asset_Fin_fees_amt := nvl(l_Asset_Fin_fees_amt,0);
16346
16347 RETURN l_Asset_Fin_fees_amt;
16348
16349 EXCEPTION
16350
16351 WHEN OTHERS THEN
16352 IF l_fee_csr_incl_terminated%ISOPEN THEN
16353 CLOSE l_fee_csr_incl_terminated;
16354 END IF;
16355 IF l_fee_csr%ISOPEN THEN
16356 CLOSE l_fee_csr;
16357 END IF;
16358
16359 Okl_Api.SET_MESSAGE(
16360 p_app_name => G_APP_NAME,
16361 p_msg_name => G_UNEXPECTED_ERROR,
16362 p_token1 => G_SQLCODE_TOKEN,
16363 p_token1_value => SQLCODE,
16364 p_token2 => G_SQLERRM_TOKEN,
16365 p_token2_value => SQLERRM);
16366 RETURN NULL;
16367
16368 END Total_Asset_Financed_Fee_Amt;
16369
16370
16371 ----------------------------------------------------------------------------------------------------
16372
16373 -- Start of Comments
16374 -- Created By: Seema Chawla
16375 -- Function Name Total_Asset_Rollover_Fee_Amt
16376 -- Description: Returns total Rollover fee amount associated to an asset line
16377 -- Dependencies:
16378 -- Parameters: contract id and line id
16379 -- Version: 1.0
16380 -- End of Commnets
16381
16382 ----------------------------------------------------------------------------------------------------
16383 FUNCTION Total_Asset_Rollover_Fee_Amt(
16384 p_chr_id IN NUMBER,
16385 p_line_id IN NUMBER) RETURN NUMBER IS
16386
16387 l_api_version CONSTANT NUMBER := 1;
16388 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
16389 x_msg_count NUMBER;
16390 x_msg_data VARCHAR2(256);
16391
16392 l_Asset_Roll_fees_amt NUMBER := 0;
16393
16394 CURSOR l_fee_csr( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
16395 SELECT sum(kle_cov.amount) asset_roll_fee_amt
16396 FROM OKC_LINE_STYLES_B LSEB,
16397 OKC_K_ITEMS CIM,
16398 OKL_K_LINES KLE_COV,
16399 okl_k_lines fee_line,
16400 OKC_K_LINES_B CLEB_COV,
16401 OKC_STATUSES_B STSB
16402 WHERE LSEB.ID = CLEB_COV.LSE_ID
16403 AND LSEB.lty_code = 'LINK_FEE_ASSET'
16404 AND CIM.jtot_object1_code = 'OKX_COVASST'
16405 AND CLEB_COV.id = CIM.cle_id
16406 AND KLE_COV.id = CLEB_COV.ID
16407 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
16408 AND CLEB_COV.dnz_chr_id = c_chr_id
16409 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
16410 AND CLEB_COV.sts_code = STSB.code
16411 and CLEB_COV.cle_id = fee_line.id
16412 and fee_line.fee_type = 'ROLLOVER'
16413 AND STSB.ste_code NOT IN ('TERMINATED', 'EXPIRED', 'CANCELLED', 'HOLD');
16414
16415
16416 CURSOR l_fee_csr_incl_terminated( c_chr_id IN NUMBER, c_fin_asset_line_id IN NUMBER) IS
16417 SELECT sum(kle_cov.amount) asset_roll_fee_amt
16418 FROM OKC_LINE_STYLES_B LSEB,
16419 OKC_K_ITEMS CIM,
16420 OKL_K_LINES KLE_COV,
16421 okl_k_lines fee_line,
16422 OKC_K_LINES_B CLEB_COV,
16423 OKC_STATUSES_B STSB
16424 WHERE LSEB.ID = CLEB_COV.LSE_ID
16425 AND LSEB.lty_code = 'LINK_FEE_ASSET'
16426 AND CIM.jtot_object1_code = 'OKX_COVASST'
16427 AND CLEB_COV.id = CIM.cle_id
16428 AND KLE_COV.id = CLEB_COV.ID
16429 AND CLEB_COV.DNZ_CHR_ID = CIM.DNZ_CHR_ID
16430 AND CLEB_COV.dnz_chr_id = c_chr_id
16431 AND cim.object1_id1 = to_char(c_fin_asset_line_id) --lse_id = 33
16432 AND CLEB_COV.sts_code = STSB.code
16433 and CLEB_COV.cle_id = fee_line.id
16434 and fee_line.fee_type = 'ROLLOVER'
16435 AND STSB.ste_code NOT IN ( 'EXPIRED', 'CANCELLED', 'HOLD');
16436
16437
16438
16439 l_discount_incl_terminated BOOLEAN := FALSE;
16440
16441 BEGIN
16442
16443 IF (( p_chr_id IS NULL ) OR (p_line_id IS NULL)) THEN
16444 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
16445 END IF;
16446
16447
16448 IF Okl_Execute_Formula_Pub.G_ADDITIONAL_PARAMETERS.COUNT > 0 THEN
16449 FOR I IN OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.FIRST..OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS.LAST
16450 LOOP
16451 IF OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).NAME = 'TERMINATED_LINES_YN' AND
16452 OKL_EXECUTE_FORMULA_PUB.G_ADDITIONAL_PARAMETERS(I).VALUE = 'Y' THEN
16453 l_discount_incl_terminated := TRUE;
16454 END IF;
16455 END LOOP;
16456 END IF;
16457
16458
16459 IF l_discount_incl_terminated THEN
16460 OPEN l_fee_csr_incl_terminated (p_chr_id, p_line_id );
16461 FETCH l_fee_csr_incl_terminated INTO l_Asset_roll_fees_amt;
16462 CLOSE l_fee_csr_incl_terminated;
16463 ELSE
16464 OPEN l_fee_csr( p_chr_id, p_line_id );
16465 FETCH l_fee_csr INTO l_Asset_roll_fees_amt;
16466 CLOSE l_fee_csr;
16467 END IF;
16468
16469 l_Asset_roll_fees_amt := nvl(l_Asset_roll_fees_amt,0);
16470
16471 RETURN l_Asset_roll_fees_amt;
16472
16473 EXCEPTION
16474
16475 WHEN OTHERS THEN
16476 IF l_fee_csr_incl_terminated%ISOPEN THEN
16477 CLOSE l_fee_csr_incl_terminated;
16478 END IF;
16479 IF l_fee_csr%ISOPEN THEN
16480 CLOSE l_fee_csr;
16481 END IF;
16482
16483 Okl_Api.SET_MESSAGE(
16484 p_app_name => G_APP_NAME,
16485 p_msg_name => G_UNEXPECTED_ERROR,
16486 p_token1 => G_SQLCODE_TOKEN,
16487 p_token1_value => SQLCODE,
16488 p_token2 => G_SQLERRM_TOKEN,
16489 p_token2_value => SQLERRM);
16490 RETURN NULL;
16491
16492 END Total_Asset_Rollover_Fee_Amt;
16493
16494
16495 END Okl_Seeded_Functions_Pvt;