[Home] [Help]
PACKAGE BODY: APPS.OKL_LA_STREAM_PVT
Source
1 Package body OKL_LA_STREAM_PVT as
2 /* $Header: OKLRSGAB.pls 120.180.12020000.9 2013/01/31 11:08:33 bkatraga ship $ */
3 -------------------------------------------------------------------------------------------------
4 -- GLOBAL MESSAGE CONSTANTS
5 -------------------------------------------------------------------------------------------------
6 G_NO_PARENT_RECORD CONSTANT VARCHAR2(200) := 'OKL_NO_PARENT_RECORD';
7 G_FND_APP CONSTANT VARCHAR2(200) := OKL_API.G_FND_APP;
8 g_rep_req_yn VARCHAR2(3) := 'N';
9 G_SFE_TYPE_SUBSIDY CONSTANT VARCHAR2(200) := okl_create_streams_pvt.G_SFE_TYPE_SUBSIDY;
10 G_REQUIRED_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
11 G_INVALID_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_INVALID_VALUE;
12 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKL_CONTRACTS_UNEXP_ERROR';
13 G_DB_ERROR CONSTANT VARCHAR2(12) := 'OKL_DB_ERROR';
14 G_PROG_NAME_TOKEN CONSTANT VARCHAR2(9) := 'PROG_NAME';
15 G_SQLCODE_TOKEN CONSTANT VARCHAR2(7) := 'SQLCODE';
16 G_SQLERRM_TOKEN CONSTANT VARCHAR2(7) := 'SQLERRM';
17 G_UPPERCASE_REQUIRED CONSTANT VARCHAR2(200) := 'OKL_CONTRACTS_UPPERCASE_REQ';
18 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
19 -- Start modification Bug#3066346 bakuchib
20 G_LLA_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
21 l_pay_tbl OKL_STREAM_GENERATOR_PVT.payment_tbl_type;
22 -- End modification Bug#3066346 bakuchib
23 -- Variable put by HKPATEL for rollover quote
24 l_link_fee_asset_yn VARCHAR2(12) := 'NONE';
25 -- srsreeni - Bug#5699923 - Added - Start
26 G_STREAM_ACTIVITY_WORK CONSTANT VARCHAR2(4) := OKL_PROCESS_STREAMS_PVT.G_STREAM_ACTIVITY_WORK;
27 G_FEE_ROLLOVER CONSTANT VARCHAR2(30) := 'ROLLOVER';
28 G_FEE_FINANCED CONSTANT VARCHAR2(30) := 'FINANCED';
29 G_ORIGIN_STRM_PURPOSE CONSTANT VARCHAR2(30) := 'ORIGIN';
30 G_REPORT_STRM_PURPOSE CONSTANT VARCHAR2(30) := 'REPORT';
31 -- srsreeni - Bug#5699923 - Added - End
32 ------------------------------------------------------------------------------------
33 -- GLOBAL EXCEPTION
34 ------------------------------------------------------------------------------------
35 G_EXCEPTION_HALT_VALIDATION EXCEPTION;
36 G_EXCEPTION_STOP_VALIDATION EXCEPTION;
37 G_API_TYPE CONSTANT VARCHAR2(4) := '_PVT';
38 G_API_VERSION CONSTANT NUMBER := 1.0;
39 G_SCOPE CONSTANT VARCHAR2(4) := '_PVT';
40
41 --Added by kthiruva for Bug 5161075 on 19-Apr-2006
42 G_FALSE CONSTANT VARCHAR2(10) := 'false';
43 -- GLOBAL COMPOSITE DATA TYPE
44 --Added for debug_logging
45 L_DEBUG_ENABLED VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
46
47
48 -----------------------------------------------------------------------------------
49 -- Start of Bug#2757289 modification bakuchib
50 TYPE stub_rec_type IS RECORD (
51 number_of_periods NUMBER := 1,
52 advance_or_arrears OKL_SIF_FEES_V.advance_or_arrears%TYPE := OKL_CREATE_STREAMS_PVT.G_ARREARS,
53 period OKL_SIF_FEES_V.period%TYPE := 'T');
54 g_stub_rec stub_rec_type;
55 SUBTYPE pdtv_rec_type IS okl_setupproducts_pvt.pdtv_rec_type;
56 SUBTYPE ast_dtl_tbl_type IS okl_activate_asset_pvt.ast_dtl_tbl_type;
57 SUBTYPE pdt_param_rec_type IS okl_setupproducts_pvt.pdt_parameters_rec_type;
58 SUBTYPE asbv_tbl_type IS okl_subsidy_process_pvt.asbv_tbl_type;
59 -- End of Bug#2757289 modification bakuchib
60 -----------------------------------------------------------------------------------
61 --Added by kthiruva for the Variable Rate Build
62 --Record type declaration for storing the date and amount all the paydowns on a contract
63 TYPE ppd_rec_type IS RECORD (
64 paydown_date DATE,
65 paydown_amount NUMBER,
66 curr_paydown VARCHAR2(1),
67 diff_to_next NUMBER,
68 ppd_processed_yn VARCHAR2(1)
69 );
70
71 TYPE ppd_tbl_type is TABLE OF ppd_rec_Type INDEX BY BINARY_INTEGER;
72 l_ppd_tbl ppd_tbl_type;
73 l_ppd_count NUMBER := 0;
74 g_paydown_date DATE;
75 l_days_in_period NUMBER;
76 l_first_batch VARCHAR2(1) := 'N';
77 l_periods_after_ppd NUMBER;
78 l_period_end_date DATE;
79 l_adjusting_stub_date DATE;
80 l_days_between NUMBER;
81 --End of Changes
82
83 --Added by kthiruva on 27-Mar-2006 for logging purposes
84 --Start of Changes
85 PROCEDURE WRITE_TO_LOG(p_message IN VARCHAR2)
86 IS
87 BEGIN
88 IF L_DEBUG_ENABLED = 'Y' then
89 fnd_file.put_line (fnd_file.log,p_message);
90 END IF;
91 END WRITE_TO_LOG;
92
93
94 --Debuging procedures
95 PROCEDURE print(p_proc_name IN VARCHAR2,
96 p_message IN VARCHAR2,
97 x_return_status IN VARCHAR2) IS
98 BEGIN
99 NULL;
100 END;
101 PROCEDURE print(p_proc_name IN VARCHAR2,
102 p_message IN VARCHAR2) IS
103 BEGIN
104 print(p_proc_name, p_message, 'S' );
105 END;
106 -- Added new procedure for get the streams for reporting and original product
107 PROCEDURE get_primary_pricing_name
108 (
109 p_khr_id IN okl_k_headers_full_v.id%TYPE,
110 p_sty_id IN okl_strm_type_b.ID%TYPE,
111 x_return_status OUT NOCOPY VARCHAR2,
112 x_primary_pricing_name OUT NOCOPY OKL_ST_GEN_TMPT_LNS.PRICING_NAME%TYPE
113 )
114
115 IS
116
117 CURSOR cntrct_csr (l_khr_id NUMBER)IS
118 SELECT pdt_id, start_date
119 FROM okl_k_headers_full_v
120 WHERE id = l_khr_id;
121
122 CURSOR pry_prc_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
123 SELECT PRICING_NAME
124 FROM OKL_STRM_TMPT_LINES_UV STL
125 WHERE STL.PRIMARY_YN = 'Y'
126 AND STL.PDT_ID = l_pdt_id
127 AND (STL.START_DATE <= l_contract_start_date)
128 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
129 AND PRIMARY_STY_ID = p_sty_id;
130
131 CURSOR sty_csr IS
132 SELECT CODE
133 FROM okl_strm_type_b
134 WHERE id = p_sty_id;
135
136
137 -- l_primary_pricing_name VARCHAR2(30); --02-Sep-11 SECHAWLA 12936702
138 l_primary_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
139
140 l_contract_start_date DATE;
141 l_product_id NUMBER;
142 l_sty_code okl_strm_type_b.code%TYPE;
143
144 BEGIN
145
146 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
147
148
149 OPEN cntrct_csr (p_khr_id);
150 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
151 CLOSE cntrct_csr;
152
153
154
155 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
156 OPEN pry_prc_csr (l_product_id, l_contract_start_date);
157 FETCH pry_prc_csr INTO l_primary_pricing_name;
158 IF pry_prc_csr%NOTFOUND THEN
159
160 -- Bug 4064253
161
162 OPEN sty_csr;
163 FETCH sty_csr INTO l_sty_code;
164 CLOSE sty_csr;
165
166 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
167 p_msg_name => 'OKL_PRY_STY_CODE_NOT_FOUND',
168 p_token1 => 'STY_CODE',
169 p_token1_value => l_sty_code);
170 RAISE Okl_Api.G_EXCEPTION_ERROR;
171 END IF;
172 CLOSE pry_prc_csr;
173
174 ELSE
175
176 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
177 p_msg_name => 'OKL_NO_PDT_FOUND');
178 RAISE Okl_Api.G_EXCEPTION_ERROR;
179
180 END IF;
181
182 x_primary_pricing_name := l_primary_pricing_name;
183
184 EXCEPTION
185 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
186 IF cntrct_csr%ISOPEN THEN
187 CLOSE cntrct_csr;
188 END IF;
189 IF pry_prc_csr%ISOPEN THEN
190 CLOSE pry_prc_csr;
191 END IF;
192 x_return_status := Okl_Api.G_RET_STS_ERROR ;
193
194 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
195 IF cntrct_csr%ISOPEN THEN
196 CLOSE cntrct_csr;
197 END IF;
198 IF pry_prc_csr%ISOPEN THEN
199 CLOSE pry_prc_csr;
200 END IF;
201 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
202
203 WHEN OTHERS THEN
204 IF cntrct_csr%ISOPEN THEN
205 CLOSE cntrct_csr;
206 END IF;
207 IF pry_prc_csr%ISOPEN THEN
208 CLOSE pry_prc_csr;
209 END IF;
210 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
211
212
213 END get_primary_pricing_name;
214
215 PROCEDURE get_dependent_pricing_name
216 (
217 p_khr_id IN okl_k_headers_full_v.id%TYPE,
218 p_sty_id IN okl_strm_type_b.ID%TYPE,
219 x_return_status OUT NOCOPY VARCHAR2,
220 x_dependent_pricing_name OUT NOCOPY OKL_ST_GEN_TMPT_LNS.PRICING_NAME%TYPE
221 )
222
223 IS
224
225 CURSOR cntrct_csr (l_khr_id NUMBER)IS
226 SELECT pdt_id, start_date
227 FROM okl_k_headers_full_v
228 WHERE id = l_khr_id;
229
230 CURSOR pry_prc_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
231 SELECT PRICING_NAME
232 FROM OKL_STRM_TMPT_LINES_UV STL
233 WHERE STL.PRIMARY_YN = 'N'
234 AND STL.PDT_ID = l_pdt_id
235 AND (STL.START_DATE <= l_contract_start_date)
236 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
237 AND DEPENDENT_STY_ID = p_sty_id
238 AND PRICING_NAME IS NOT NULL;
239
240 CURSOR sty_csr IS
241 SELECT CODE
242 FROM okl_strm_type_b
243 WHERE id = p_sty_id;
244
245 -- l_dependent_pricing_name VARCHAR2(40); --02-Sep-11 SECHAWLA 12936702
246 l_dependent_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
247
248 l_contract_start_date DATE;
249 l_product_id NUMBER;
250 l_sty_code okl_strm_type_b.code%TYPE;
251
252 BEGIN
253
254 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
255
256
257 OPEN cntrct_csr (p_khr_id);
258 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
259 CLOSE cntrct_csr;
260
261
262
263 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
264 --okl_debug_pub.logmessage('Product Id1'||l_product_id);
265 --okl_debug_pub.logmessage('Contract Strat Date1'||l_contract_start_date);
266 OPEN pry_prc_csr (l_product_id, l_contract_start_date);
267 FETCH pry_prc_csr INTO l_dependent_pricing_name;
268 IF pry_prc_csr%NOTFOUND THEN
269
270 -- Bug 4064253
271 OPEN sty_csr;
272 FETCH sty_csr INTO l_sty_code;
273 CLOSE sty_csr;
274
275 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
276 p_msg_name => 'OKL_DEP_STY_CODE_NOT_FOUND',
277 p_token1 => 'STY_CODE',
278 p_token1_value => l_sty_code);
279
280 RAISE Okl_Api.G_EXCEPTION_ERROR;
281 END IF;
282 CLOSE pry_prc_csr;
283
284 ELSE
285
286 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
287 p_msg_name => 'OKL_NO_PDT_FOUND');
288 RAISE Okl_Api.G_EXCEPTION_ERROR;
289
290 END IF;
291
292 x_dependent_pricing_name := l_dependent_pricing_name;
293
294 EXCEPTION
295 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
296 IF cntrct_csr%ISOPEN THEN
297 CLOSE cntrct_csr;
298 END IF;
299 IF pry_prc_csr%ISOPEN THEN
300 CLOSE pry_prc_csr;
301 END IF;
302 x_return_status := Okl_Api.G_RET_STS_ERROR ;
303
304 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
305 IF cntrct_csr%ISOPEN THEN
306 CLOSE cntrct_csr;
307 END IF;
308 IF pry_prc_csr%ISOPEN THEN
309 CLOSE pry_prc_csr;
310 END IF;
311 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
312
313 WHEN OTHERS THEN
314 IF cntrct_csr%ISOPEN THEN
315 CLOSE cntrct_csr;
316 END IF;
317 IF pry_prc_csr%ISOPEN THEN
318 CLOSE pry_prc_csr;
319 END IF;
320 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
321 --okl_debug_pub.logmessage(SQLERRM);
322
323 END get_dependent_pricing_name;
324
325 PROCEDURE get_primary_stream_type
326 (
327 p_khr_id IN okl_k_headers_full_v.id%TYPE,
328 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
329 x_return_status OUT NOCOPY VARCHAR2,
330 x_primary_sty_id OUT NOCOPY strm_rec_type
331 )
332
333 IS
334
335 CURSOR cntrct_csr (l_khr_id NUMBER)IS
336 SELECT pdt_id, start_date
337 FROM okl_k_headers_full_v
338 WHERE id = l_khr_id;
339
340 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
341 SELECT PRIMARY_STY_ID, PRICING_NAME
342 FROM OKL_STRM_TMPT_LINES_UV STL
343 WHERE STL.PRIMARY_YN = 'Y'
344 AND STL.PDT_ID = l_pdt_id
345 AND (STL.START_DATE <= l_contract_start_date)
346 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
347 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
348 AND PRICING_NAME IS NOT NULL;
349
350 l_product_id NUMBER;
351 l_strm_rec_type strm_rec_type;
352 l_contract_start_date DATE;
353 l_primary_sty_id NUMBER;
354 l_primary_sty_purpose_meaning VARCHAR2(4000);
355
356 BEGIN
357
358 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
359
360
361 OPEN cntrct_csr (p_khr_id);
362 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
363 CLOSE cntrct_csr;
364
365
366
367 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
368 OPEN pry_sty_csr (l_product_id, l_contract_start_date);
369 FETCH pry_sty_csr INTO l_strm_rec_type;
370 IF pry_sty_csr%NOTFOUND THEN
371
372 -- Bug 4064253
373
374 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
375 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
376
377 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
378 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
379 p_token1 => 'PURPOSE',
380 p_token1_value => l_primary_sty_purpose_meaning);
381
382 RAISE Okl_Api.G_EXCEPTION_ERROR;
383 END IF;
384 CLOSE pry_sty_csr;
385
386 ELSE
387
388 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
389 p_msg_name => 'OKL_NO_PDT_FOUND');
390 RAISE Okl_Api.G_EXCEPTION_ERROR;
391
392 END IF;
393
394 x_primary_sty_id := l_strm_rec_type;
395
396 EXCEPTION
397 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
398 IF cntrct_csr%ISOPEN THEN
399 CLOSE cntrct_csr;
400 END IF;
401 IF pry_sty_csr%ISOPEN THEN
402 CLOSE pry_sty_csr;
403 END IF;
404 x_return_status := Okl_Api.G_RET_STS_ERROR ;
405
406 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
407 IF cntrct_csr%ISOPEN THEN
408 CLOSE cntrct_csr;
409 END IF;
410 IF pry_sty_csr%ISOPEN THEN
411 CLOSE pry_sty_csr;
412 END IF;
413 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
414
415 WHEN OTHERS THEN
416 IF cntrct_csr%ISOPEN THEN
417 CLOSE cntrct_csr;
418 END IF;
419 IF pry_sty_csr%ISOPEN THEN
420 CLOSE pry_sty_csr;
421 END IF;
422 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
423
424
425 END get_primary_stream_type;
426
427 PROCEDURE get_primary_no_prc_stream_type
428 (
429 p_khr_id IN okl_k_headers_full_v.id%TYPE,
430 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
431 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
432 x_return_status OUT NOCOPY VARCHAR2,
433 x_primary_sty_id OUT NOCOPY strm_rec_type
434 )
435
436
437
438 IS
439
440 CURSOR cntrct_csr (l_khr_id NUMBER)IS
441 SELECT pdt_id, start_date
442 FROM okl_k_headers_full_v
443 WHERE id = l_khr_id;
444
445 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
446 SELECT PRIMARY_STY_ID,PRICING_NAME
447 FROM OKL_STRM_TMPT_LINES_UV STL
448 WHERE STL.PRIMARY_YN = 'Y'
449 AND STL.PDT_ID = l_pdt_id
450 AND (STL.START_DATE <= l_contract_start_date)
451 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
452 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose;
453
454 l_product_id NUMBER;
455 l_strm_rec_type strm_rec_type;
456 l_contract_start_date DATE;
457 l_primary_sty_id NUMBER;
458 l_primary_sty_purpose_meaning VARCHAR2(4000);
459
460 BEGIN
461
462 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
463
464
465 OPEN cntrct_csr (p_khr_id);
466 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
467 CLOSE cntrct_csr;
468
469
470
471 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
472
473 OPEN pry_sty_csr (l_product_id, l_contract_start_date);
474 FETCH pry_sty_csr INTO l_strm_rec_type;
475 IF pry_sty_csr%NOTFOUND THEN
476
477 -- Bug 4064253
478
479 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
480 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
481
482 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
483 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
484 p_token1 => 'PURPOSE',
485 p_token1_value => l_primary_sty_purpose_meaning);
486
487 RAISE Okl_Api.G_EXCEPTION_ERROR;
488 END IF;
489 CLOSE pry_sty_csr;
490
491 ELSE
492
493 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
494 p_msg_name => 'OKL_NO_PDT_FOUND');
495 RAISE Okl_Api.G_EXCEPTION_ERROR;
496
497 END IF;
498
499 x_primary_sty_id := l_strm_rec_type;
500
501 EXCEPTION
502 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
503 IF cntrct_csr%ISOPEN THEN
504 CLOSE cntrct_csr;
505 END IF;
506 IF pry_sty_csr%ISOPEN THEN
507 CLOSE pry_sty_csr;
508 END IF;
509 x_return_status := Okl_Api.G_RET_STS_ERROR ;
510
511 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
512 IF cntrct_csr%ISOPEN THEN
513 CLOSE cntrct_csr;
514 END IF;
515 IF pry_sty_csr%ISOPEN THEN
516 CLOSE pry_sty_csr;
517 END IF;
518 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
519
520 WHEN OTHERS THEN
521 IF cntrct_csr%ISOPEN THEN
522 CLOSE cntrct_csr;
523 END IF;
524 IF pry_sty_csr%ISOPEN THEN
525 CLOSE pry_sty_csr;
526 END IF;
527 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
528
529
530 END get_primary_no_prc_stream_type;
531
532 PROCEDURE get_dep_no_prc_stream_type
533 (
534 p_khr_id IN okl_k_headers_full_v.id%TYPE,
535 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
536 p_primary_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
537 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
538 x_return_status OUT NOCOPY VARCHAR2,
539 x_dependent_sty_id OUT NOCOPY strm_rec_type
540 )
541
542 IS
543
544 CURSOR cntrct_csr (l_khr_id NUMBER)IS
545 SELECT pdt_id, start_date
546 FROM okl_k_headers_full_v
547 WHERE id = l_khr_id;
548
549 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
550 SELECT DEPENDENT_STY_ID,PRICING_NAME
551 FROM OKL_STRM_TMPT_LINES_UV STL
552 WHERE PRIMARY_YN = 'N'
553 AND STL.PDT_ID = l_product_id
554 AND (STL.START_DATE <= l_contract_start_date)
555 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
556 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
557 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
558
559 l_product_id NUMBER;
560 l_strm_rec_type strm_rec_type;
561 l_contract_start_date DATE;
562 l_dependetn_sty_id NUMBER;
563 rec_count NUMBER := 0;
564 l_dep_sty_purpose_meaning VARCHAR2(4000);
565
566 BEGIN
567
568 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
569
570
571 OPEN cntrct_csr (p_khr_id);
572 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
573 CLOSE cntrct_csr;
574
575
576 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
577
578 OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
579 FETCH dep_sty_csr INTO l_strm_rec_type;
580 IF dep_sty_csr%NOTFOUND THEN
581
582 -- Bug 4064253
583
584 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
585 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
586
587 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
588 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
589 p_token1 => 'PURPOSE',
590 p_token1_value => l_dep_sty_purpose_meaning);
591
592 RAISE Okl_Api.G_EXCEPTION_ERROR;
593 END IF;
594 CLOSE dep_sty_csr;
595
596 ELSE
597
598 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
599 p_msg_name => 'OKL_NO_PDT_FOUND');
600 RAISE Okl_Api.G_EXCEPTION_ERROR;
601
602 END IF;
603
604 x_dependent_sty_id := l_strm_rec_type;
605
606 EXCEPTION
607 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
608 IF cntrct_csr%ISOPEN THEN
609 CLOSE cntrct_csr;
610 END IF;
611 IF dep_sty_csr%ISOPEN THEN
612 CLOSE dep_sty_csr;
613 END IF;
614 x_return_status := Okl_Api.G_RET_STS_ERROR ;
615
616 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
617 IF cntrct_csr%ISOPEN THEN
618 CLOSE cntrct_csr;
619 END IF;
620 IF dep_sty_csr%ISOPEN THEN
621 CLOSE dep_sty_csr;
622 END IF;
623 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
624
625 WHEN OTHERS THEN
626 IF cntrct_csr%ISOPEN THEN
627 CLOSE cntrct_csr;
628 END IF;
629 IF dep_sty_csr%ISOPEN THEN
630 CLOSE dep_sty_csr;
631 END IF;
632 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
633
634 END get_dep_no_prc_stream_type;
635
636 PROCEDURE get_dep_no_prc_stream_type
637 (
638 p_khr_id IN okl_k_headers_full_v.id%TYPE,
639 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
640 p_primary_sty_id IN okl_strm_type_b.id%TYPE,
641 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
642 x_return_status OUT NOCOPY VARCHAR2,
643 x_dependent_sty_id OUT NOCOPY strm_rec_type
644 )
645
646 IS
647
648 CURSOR cntrct_csr (l_khr_id NUMBER)IS
649 SELECT pdt_id, start_date
650 FROM okl_k_headers_full_v
651 WHERE id = l_khr_id;
652
653 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
654 SELECT DEPENDENT_STY_ID,PRICING_NAME
655 FROM OKL_STRM_TMPT_LINES_UV STL
656 WHERE PRIMARY_YN = 'N'
657 AND STL.PDT_ID = l_product_id
658 AND (STL.START_DATE <= l_contract_start_date)
659 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
660 AND PRIMARY_STY_ID = p_primary_sty_id
661 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
662
663 l_product_id NUMBER;
664 l_strm_rec_type strm_rec_type;
665 l_contract_start_date DATE;
666 l_dependetn_sty_id NUMBER;
667 rec_count NUMBER := 0;
668 l_dep_sty_purpose_meaning VARCHAR2(4000);
669
670 BEGIN
671
672 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
673
674 OPEN cntrct_csr (p_khr_id);
675 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
676 CLOSE cntrct_csr;
677
678 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
679
680 OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
681 FETCH dep_sty_csr INTO l_strm_rec_type;
682 IF dep_sty_csr%NOTFOUND THEN
683
684 -- Bug 4064253
685
686 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
687 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
688
689 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
690 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
691 p_token1 => 'PURPOSE',
692 p_token1_value => l_dep_sty_purpose_meaning);
693
694 RAISE Okl_Api.G_EXCEPTION_ERROR;
695 END IF;
696 CLOSE dep_sty_csr;
697
698 ELSE
699
700 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
701 p_msg_name => 'OKL_NO_PDT_FOUND');
702 RAISE Okl_Api.G_EXCEPTION_ERROR;
703
704 END IF;
705
706 x_dependent_sty_id := l_strm_rec_type;
707
708 EXCEPTION
709 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
710 IF cntrct_csr%ISOPEN THEN
711 CLOSE cntrct_csr;
712 END IF;
713 IF dep_sty_csr%ISOPEN THEN
714 CLOSE dep_sty_csr;
715 END IF;
716 x_return_status := Okl_Api.G_RET_STS_ERROR ;
717
718 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
719 IF cntrct_csr%ISOPEN THEN
720 CLOSE cntrct_csr;
721 END IF;
722 IF dep_sty_csr%ISOPEN THEN
723 CLOSE dep_sty_csr;
724 END IF;
725 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
726
727 WHEN OTHERS THEN
728 IF cntrct_csr%ISOPEN THEN
729 CLOSE cntrct_csr;
730 END IF;
731 IF dep_sty_csr%ISOPEN THEN
732 CLOSE dep_sty_csr;
733 END IF;
734 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
735
736 END get_dep_no_prc_stream_type;
737
738 PROCEDURE get_dep_no_prc_stream_type
739 (
740 p_khr_id IN okl_k_headers_full_v.id%TYPE,
741 p_primary_sty_id IN okl_strm_type_b.id%TYPE,
742 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
743 x_return_status OUT NOCOPY VARCHAR2,
744 x_dependent_sty_id OUT NOCOPY strm_rec_type
745 )
746
747 IS
748
749 CURSOR cntrct_csr (l_khr_id NUMBER)IS
750 SELECT pdt_id, start_date
751 FROM okl_k_headers_full_v
752 WHERE id = l_khr_id;
753
754 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
755 SELECT DEPENDENT_STY_ID,PRICING_NAME
756 FROM OKL_STRM_TMPT_LINES_UV STL
757 WHERE PRIMARY_YN = 'N'
758 AND STL.PDT_ID = l_product_id
759 AND (STL.START_DATE <= l_contract_start_date)
760 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
761 AND PRIMARY_STY_ID = p_primary_sty_id
762 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
763
764 l_product_id NUMBER;
765 l_strm_rec_type strm_rec_type;
766 l_contract_start_date DATE;
767 l_dependetn_sty_id NUMBER;
768 rec_count NUMBER := 0;
769 l_dep_sty_purpose_meaning VARCHAR2(4000);
770
771 BEGIN
772
773 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
774
775 OPEN cntrct_csr (p_khr_id);
776 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
777 CLOSE cntrct_csr;
778
779 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
780
781 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
782 FETCH dep_sty_csr INTO l_strm_rec_type;
783 IF dep_sty_csr%NOTFOUND THEN
784
785 -- Bug 4064253
786
787 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
788 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
789
790 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
791 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
792 p_token1 => 'PURPOSE',
793 p_token1_value => l_dep_sty_purpose_meaning);
794
795 RAISE Okl_Api.G_EXCEPTION_ERROR;
796 END IF;
797 CLOSE dep_sty_csr;
798
799 ELSE
800
801 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
802 p_msg_name => 'OKL_NO_PDT_FOUND');
803 RAISE Okl_Api.G_EXCEPTION_ERROR;
804
805 END IF;
806
807 x_dependent_sty_id := l_strm_rec_type;
808
809 EXCEPTION
810 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
811 IF cntrct_csr%ISOPEN THEN
812 CLOSE cntrct_csr;
813 END IF;
814 IF dep_sty_csr%ISOPEN THEN
815 CLOSE dep_sty_csr;
816 END IF;
817 x_return_status := Okl_Api.G_RET_STS_ERROR ;
818
819 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
820 IF cntrct_csr%ISOPEN THEN
821 CLOSE cntrct_csr;
822 END IF;
823 IF dep_sty_csr%ISOPEN THEN
824 CLOSE dep_sty_csr;
825 END IF;
826 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
827
828 WHEN OTHERS THEN
829 IF cntrct_csr%ISOPEN THEN
830 CLOSE cntrct_csr;
831 END IF;
832 IF dep_sty_csr%ISOPEN THEN
833 CLOSE dep_sty_csr;
834 END IF;
835 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
836
837 END get_dep_no_prc_stream_type;
838
839
840 PROCEDURE get_primary_stream_type
841 (
842 p_khr_id IN okl_k_headers_full_v.id%TYPE,
843 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
844 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
845 x_return_status OUT NOCOPY VARCHAR2,
846 x_primary_sty_id OUT NOCOPY strm_rec_type
847 )
848
849
850
851 IS
852
853 CURSOR cntrct_csr (l_khr_id NUMBER)IS
854 SELECT pdt_id, start_date
855 FROM okl_k_headers_full_v
856 WHERE id = l_khr_id;
857
858 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
859 SELECT PRIMARY_STY_ID,PRICING_NAME
860 FROM OKL_STRM_TMPT_LINES_UV STL
861 WHERE STL.PRIMARY_YN = 'Y'
862 AND STL.PDT_ID = l_pdt_id
863 AND (STL.START_DATE <= l_contract_start_date)
864 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
865 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
866 AND PRICING_NAME IS NOT NULL;
867
868 l_product_id NUMBER;
869 l_strm_rec_type strm_rec_type;
870 l_contract_start_date DATE;
871 l_primary_sty_id NUMBER;
872 l_primary_sty_purpose_meaning VARCHAR2(4000);
873
874 BEGIN
875
876 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
877
878
879 OPEN cntrct_csr (p_khr_id);
880 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
881 CLOSE cntrct_csr;
882
883
884
885 -- Bug 7703744: change l_product_id to p_pdt_id. l_product_id is always primary product.
886 -- The product_id passed should be used instead.
887
888 -- IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
889 IF (p_pdt_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
890
891 -- Bug 7703744: change l_product_id to p_pdt_id.
892 --OPEN pry_sty_csr (l_product_id, l_contract_start_date);
893 OPEN pry_sty_csr (p_pdt_id, l_contract_start_date);
894 FETCH pry_sty_csr INTO l_strm_rec_type;
895 IF pry_sty_csr%NOTFOUND THEN
896
897 -- Bug 4064253
898
899 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
900 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
901
902 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
903 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
904 p_token1 => 'PURPOSE',
905 p_token1_value => l_primary_sty_purpose_meaning);
906
907 RAISE Okl_Api.G_EXCEPTION_ERROR;
908 END IF;
909 CLOSE pry_sty_csr;
910
911 ELSE
912
913 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
914 p_msg_name => 'OKL_NO_PDT_FOUND');
915 RAISE Okl_Api.G_EXCEPTION_ERROR;
916
917 END IF;
918
919 x_primary_sty_id := l_strm_rec_type;
920
921 EXCEPTION
922 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
923 IF cntrct_csr%ISOPEN THEN
924 CLOSE cntrct_csr;
925 END IF;
926 IF pry_sty_csr%ISOPEN THEN
927 CLOSE pry_sty_csr;
928 END IF;
929 x_return_status := Okl_Api.G_RET_STS_ERROR ;
930
931 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
932 IF cntrct_csr%ISOPEN THEN
933 CLOSE cntrct_csr;
934 END IF;
935 IF pry_sty_csr%ISOPEN THEN
936 CLOSE pry_sty_csr;
937 END IF;
938 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
939
940 WHEN OTHERS THEN
941 IF cntrct_csr%ISOPEN THEN
942 CLOSE cntrct_csr;
943 END IF;
944 IF pry_sty_csr%ISOPEN THEN
945 CLOSE pry_sty_csr;
946 END IF;
947 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
948
949
950 END get_primary_stream_type;
951
952 PROCEDURE get_primary_stream_types
953 (
954 p_khr_id IN okl_k_headers_full_v.id%TYPE,
955 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
956 x_return_status OUT NOCOPY VARCHAR2,
957 x_primary_sty_id OUT NOCOPY okl_strm_type_id_tbl_type
958 )
959
960 IS
961
962 CURSOR cntrct_csr (l_khr_id NUMBER)IS
963 SELECT pdt_id, start_date
964 FROM okl_k_headers_full_v
965 WHERE id = l_khr_id;
966
967 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
968 SELECT PRIMARY_STY_ID,PRICING_NAME
969 FROM OKL_STRM_TMPT_LINES_UV STL
970 WHERE STL.PRIMARY_YN = 'Y'
971 AND STL.PDT_ID = l_pdt_id
972 AND (STL.START_DATE <= l_contract_start_date)
973 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
974 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
975 AND PRICING_NAME IS NOT NULL;
976
977 l_product_id NUMBER;
978 l_contract_start_date DATE;
979 l_primary_sty_id NUMBER;
980 rec_count INTEGER := 0;
981 l_primary_sty_purpose_meaning VARCHAR2(4000);
982
983 BEGIN
984
985 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
986 x_primary_sty_id.delete;
987
988
989 OPEN cntrct_csr (p_khr_id);
990 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
991 CLOSE cntrct_csr;
992
993 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
994
995 FOR l_pry_sty_csr_rec in pry_sty_csr(l_product_id, l_contract_start_date) LOOP
996 rec_count := rec_count + 1;
997 x_primary_sty_id(rec_count).id := l_pry_sty_csr_rec.primary_sty_id;
998 x_primary_sty_id(rec_count).pricing_name := l_pry_sty_csr_rec.pricing_name;
999 END LOOP;
1000
1001 -- Bug 4064253
1002 IF (x_primary_sty_id.count = 0) THEN
1003 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1004 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
1005
1006 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1007 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
1008 p_token1 => 'PURPOSE',
1009 p_token1_value => l_primary_sty_purpose_meaning);
1010
1011 RAISE Okl_Api.G_EXCEPTION_ERROR;
1012 END IF;
1013 ELSE
1014
1015 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1016 p_msg_name => 'OKL_NO_PDT_FOUND');
1017 RAISE Okl_Api.G_EXCEPTION_ERROR;
1018
1019 END IF;
1020
1021 -- x_primary_sty_id := l_primary_sty_id;
1022
1023 EXCEPTION
1024 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1025 IF cntrct_csr%ISOPEN THEN
1026 CLOSE cntrct_csr;
1027 END IF;
1028 IF pry_sty_csr%ISOPEN THEN
1029 CLOSE pry_sty_csr;
1030 END IF;
1031 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1032
1033 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1034 IF cntrct_csr%ISOPEN THEN
1035 CLOSE cntrct_csr;
1036 END IF;
1037 IF pry_sty_csr%ISOPEN THEN
1038 CLOSE pry_sty_csr;
1039 END IF;
1040 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1041
1042 WHEN OTHERS THEN
1043 IF cntrct_csr%ISOPEN THEN
1044 CLOSE cntrct_csr;
1045 END IF;
1046 IF pry_sty_csr%ISOPEN THEN
1047 CLOSE pry_sty_csr;
1048 END IF;
1049 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1050
1051
1052 END get_primary_stream_types;
1053
1054 PROCEDURE get_dependent_stream_type
1055 (
1056 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1057 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1058 p_dependent_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1059 x_return_status OUT NOCOPY VARCHAR2,
1060 x_dependent_sty_id OUT NOCOPY strm_rec_type
1061 )
1062
1063 IS
1064
1065 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1066 SELECT pdt_id, start_date
1067 FROM okl_k_headers_full_v
1068 WHERE id = l_khr_id;
1069
1070 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1071 SELECT DEPENDENT_STY_ID,PRICING_NAME
1072 FROM OKL_STRM_TMPT_LINES_UV STL
1073 WHERE PRIMARY_YN = 'N'
1074 AND STL.PDT_ID = l_product_id
1075 AND (STL.START_DATE <= l_contract_start_date)
1076 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1077 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
1078 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1079 AND PRICING_NAME IS NOT NULL;
1080
1081 l_product_id NUMBER;
1082 l_strm_rec_type strm_rec_type;
1083 l_contract_start_date DATE;
1084 l_dependetn_sty_id NUMBER;
1085 l_dep_sty_purpose_meaning VARCHAR2(4000);
1086 BEGIN
1087
1088 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1089
1090 OPEN cntrct_csr (p_khr_id);
1091 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1092 CLOSE cntrct_csr;
1093
1094 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1095 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1096 FETCH dep_sty_csr INTO l_strm_rec_type;
1097 IF dep_sty_csr%NOTFOUND THEN
1098
1099 -- Bug 4064253
1100
1101 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1102 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1103
1104 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1105 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1106 p_token1 => 'PURPOSE',
1107 p_token1_value => l_dep_sty_purpose_meaning);
1108
1109 RAISE Okl_Api.G_EXCEPTION_ERROR;
1110 END IF;
1111 CLOSE dep_sty_csr;
1112
1113 ELSE
1114
1115 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1116 p_msg_name => 'OKL_NO_PDT_FOUND');
1117 RAISE Okl_Api.G_EXCEPTION_ERROR;
1118
1119 END IF;
1120
1121 x_dependent_sty_id := l_strm_rec_type;
1122
1123 EXCEPTION
1124 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1125 IF cntrct_csr%ISOPEN THEN
1126 CLOSE cntrct_csr;
1127 END IF;
1128 IF dep_sty_csr%ISOPEN THEN
1129 CLOSE dep_sty_csr;
1130 END IF;
1131 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1132
1133 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1134 IF cntrct_csr%ISOPEN THEN
1135 CLOSE cntrct_csr;
1136 END IF;
1137 IF dep_sty_csr%ISOPEN THEN
1138 CLOSE dep_sty_csr;
1139 END IF;
1140 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1141
1142 WHEN OTHERS THEN
1143 IF cntrct_csr%ISOPEN THEN
1144 CLOSE cntrct_csr;
1145 END IF;
1146 IF dep_sty_csr%ISOPEN THEN
1147 CLOSE dep_sty_csr;
1148 END IF;
1149 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1150
1151 END get_dependent_stream_type;
1152
1153 PROCEDURE get_dependent_stream_type
1154 (
1155 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1156 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1157 p_dependent_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1158 x_return_status OUT NOCOPY VARCHAR2,
1159 x_dependent_sty_id OUT NOCOPY strm_rec_type
1160 )
1161
1162 IS
1163
1164 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1165 SELECT pdt_id, start_date
1166 FROM okl_k_headers_full_v
1167 WHERE id = l_khr_id;
1168
1169 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1170 SELECT DEPENDENT_STY_ID,PRICING_NAME
1171 FROM OKL_STRM_TMPT_LINES_UV STL
1172 WHERE PRIMARY_YN = 'N'
1173 AND STL.PDT_ID = l_product_id
1174 AND (STL.START_DATE <= l_contract_start_date)
1175 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1176 AND PRIMARY_STY_ID = p_primary_sty_id
1177 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1178 AND PRICING_NAME IS NOT NULL;
1179
1180 l_product_id NUMBER;
1181 l_strm_rec_type strm_rec_type;
1182 l_contract_start_date DATE;
1183 l_dependetn_sty_id NUMBER;
1184 l_dep_sty_purpose_meaning VARCHAR2(4000);
1185 BEGIN
1186
1187 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1188
1189 OPEN cntrct_csr (p_khr_id);
1190 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1191 CLOSE cntrct_csr;
1192
1193 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1194 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1195 FETCH dep_sty_csr INTO l_strm_rec_type;
1196 IF dep_sty_csr%NOTFOUND THEN
1197
1198 -- Bug 4064253
1199
1200 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1201 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1202
1203 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1204 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1205 p_token1 => 'PURPOSE',
1206 p_token1_value => l_dep_sty_purpose_meaning);
1207
1208 RAISE Okl_Api.G_EXCEPTION_ERROR;
1209 END IF;
1210 CLOSE dep_sty_csr;
1211
1212 ELSE
1213
1214 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1215 p_msg_name => 'OKL_NO_PDT_FOUND');
1216 RAISE Okl_Api.G_EXCEPTION_ERROR;
1217
1218 END IF;
1219
1220 x_dependent_sty_id := l_strm_rec_type;
1221
1222 EXCEPTION
1223 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1224 IF cntrct_csr%ISOPEN THEN
1225 CLOSE cntrct_csr;
1226 END IF;
1227 IF dep_sty_csr%ISOPEN THEN
1228 CLOSE dep_sty_csr;
1229 END IF;
1230 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1231
1232 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1233 IF cntrct_csr%ISOPEN THEN
1234 CLOSE cntrct_csr;
1235 END IF;
1236 IF dep_sty_csr%ISOPEN THEN
1237 CLOSE dep_sty_csr;
1238 END IF;
1239 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1240
1241 WHEN OTHERS THEN
1242 IF cntrct_csr%ISOPEN THEN
1243 CLOSE cntrct_csr;
1244 END IF;
1245 IF dep_sty_csr%ISOPEN THEN
1246 CLOSE dep_sty_csr;
1247 END IF;
1248 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1249
1250 END get_dependent_stream_type;
1251 PROCEDURE get_dependent_stream_types
1252 (
1253 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1254 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1255 x_return_status OUT NOCOPY VARCHAR2,
1256 x_dependent_sty_id OUT NOCOPY okl_strm_type_id_tbl_type
1257 )
1258
1259 IS
1260
1261 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1262 SELECT pdt_id, start_date
1263 FROM okl_k_headers_full_v
1264 WHERE id = l_khr_id;
1265
1266 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1267 SELECT DEPENDENT_STY_ID,PRICING_NAME
1268 FROM OKL_STRM_TMPT_LINES_UV STL
1269 WHERE PRIMARY_YN = 'N'
1270 AND STL.PDT_ID = l_product_id
1271 AND (STL.START_DATE <= l_contract_start_date)
1272 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1273 AND PRIMARY_STY_ID = p_primary_sty_id
1274 AND PRICING_NAME IS NOT NULL;
1275
1276 l_product_id NUMBER;
1277 l_contract_start_date DATE;
1278 l_dependetn_sty_id NUMBER;
1279 rec_count NUMBER:= 0 ;
1280 l_dep_sty_purpose_meaning VARCHAR2(4000);
1281
1282 BEGIN
1283
1284 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1285
1286 OPEN cntrct_csr (p_khr_id);
1287 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1288 CLOSE cntrct_csr;
1289
1290 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1291 FOR l_dep_sty_csr_rec in dep_sty_csr(l_product_id, l_contract_start_date) LOOP
1292 rec_count := rec_count + 1;
1293 x_dependent_sty_id(rec_count).id := l_dep_sty_csr_rec.dependent_sty_id;
1294 x_dependent_sty_id(rec_count).pricing_name := l_dep_sty_csr_rec.pricing_name;
1295 END LOOP;
1296
1297 -- Bug 4064253
1298 /*
1299 IF (x_dependent_sty_id.count = 0) THEN
1300 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1301 p_msg_name => 'OKL_NO_PDT_FOUND');,
1302
1303 RAISE Okl_Api.G_EXCEPTION_ERROR;
1304 END IF;
1305 */
1306
1307 ELSE
1308 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1309 p_msg_name => 'OKL_NO_PDT_FOUND');
1310 RAISE Okl_Api.G_EXCEPTION_ERROR;
1311 END IF;
1312
1313 EXCEPTION
1314 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1315 IF cntrct_csr%ISOPEN THEN
1316 CLOSE cntrct_csr;
1317 END IF;
1318 IF dep_sty_csr%ISOPEN THEN
1319 CLOSE dep_sty_csr;
1320 END IF;
1321 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1322
1323 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1324 IF cntrct_csr%ISOPEN THEN
1325 CLOSE cntrct_csr;
1326 END IF;
1327 IF dep_sty_csr%ISOPEN THEN
1328 CLOSE dep_sty_csr;
1329 END IF;
1330 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1331
1332 WHEN OTHERS THEN
1333 IF cntrct_csr%ISOPEN THEN
1334 CLOSE cntrct_csr;
1335 END IF;
1336 IF dep_sty_csr%ISOPEN THEN
1337 CLOSE dep_sty_csr;
1338 END IF;
1339 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1340
1341 END get_dependent_stream_types;
1342
1343
1344
1345 PROCEDURE get_dependent_stream_types
1346 (
1347 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1348 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
1349 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1350 x_return_status OUT NOCOPY VARCHAR2,
1351 x_dependent_sty_id OUT NOCOPY okl_strm_type_id_tbl_type
1352 )
1353
1354 IS
1355
1356 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1357 SELECT pdt_id, start_date
1358 FROM okl_k_headers_full_v
1359 WHERE id = l_khr_id;
1360
1361 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1362 SELECT DEPENDENT_STY_ID, PRICING_NAME
1363 FROM OKL_STRM_TMPT_LINES_UV STL
1364 WHERE PRIMARY_YN = 'N'
1365 AND STL.PDT_ID = l_product_id
1366 AND (STL.START_DATE <= l_contract_start_date)
1367 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1368 AND PRIMARY_STY_ID = p_primary_sty_id
1369 AND PRICING_NAME IS NOT NULL;
1370
1371 l_product_id NUMBER;
1372 l_contract_start_date DATE;
1373 l_dependetn_sty_id NUMBER;
1374 rec_count NUMBER := 0 ;
1375 l_dep_sty_purpose_meaning VARCHAR2(4000);
1376
1377 BEGIN
1378
1379 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1380
1381 OPEN cntrct_csr (p_khr_id);
1382 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1383 CLOSE cntrct_csr;
1384
1385 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1386
1387 FOR l_dep_sty_csr_rec in dep_sty_csr(p_pdt_id, l_contract_start_date) LOOP
1388 rec_count := rec_count + 1;
1389 x_dependent_sty_id(rec_count).id := l_dep_sty_csr_rec.dependent_sty_id;
1390 x_dependent_sty_id(rec_count).pricing_name := l_dep_sty_csr_rec.pricing_name;
1391 END LOOP;
1392
1393 -- Bug 4064253
1394 /*
1395 IF (x_primary_sty_id.count = 0) THEN
1396 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1397 p_msg_name => 'OKL_NO_PDT_FOUND');
1398 RAISE Okl_Api.G_EXCEPTION_ERROR;
1399 END IF;
1400 */
1401
1402
1403 ELSE
1404 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1405 p_msg_name => 'OKL_NO_PDT_FOUND');
1406 RAISE Okl_Api.G_EXCEPTION_ERROR;
1407 END IF;
1408
1409 EXCEPTION
1410 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1411 IF cntrct_csr%ISOPEN THEN
1412 CLOSE cntrct_csr;
1413 END IF;
1414 IF dep_sty_csr%ISOPEN THEN
1415 CLOSE dep_sty_csr;
1416 END IF;
1417 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1418
1419 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1420 IF cntrct_csr%ISOPEN THEN
1421 CLOSE cntrct_csr;
1422 END IF;
1423 IF dep_sty_csr%ISOPEN THEN
1424 CLOSE dep_sty_csr;
1425 END IF;
1426 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1427
1428 WHEN OTHERS THEN
1429 IF cntrct_csr%ISOPEN THEN
1430 CLOSE cntrct_csr;
1431 END IF;
1432 IF dep_sty_csr%ISOPEN THEN
1433 CLOSE dep_sty_csr;
1434 END IF;
1435 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1436
1437 END get_dependent_stream_types;
1438
1439 PROCEDURE get_dependent_stream_type
1440 (
1441 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1442 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
1443 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1444 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
1445 x_return_status OUT NOCOPY VARCHAR2,
1446 x_dependent_sty_id OUT NOCOPY strm_rec_type
1447 )
1448
1449 IS
1450
1451 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1452 SELECT pdt_id, start_date
1453 FROM okl_k_headers_full_v
1454 WHERE id = l_khr_id;
1455
1456 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1457 SELECT DEPENDENT_STY_ID,PRICING_NAME
1458 FROM OKL_STRM_TMPT_LINES_UV STL
1459 WHERE PRIMARY_YN = 'N'
1460 AND STL.PDT_ID = l_product_id
1461 AND (STL.START_DATE <= l_contract_start_date)
1462 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1463 AND PRIMARY_STY_ID = p_primary_sty_id
1464 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1465 AND PRICING_NAME IS NOT NULL;
1466
1467 l_product_id NUMBER;
1468 l_strm_rec_type strm_rec_type;
1469 l_contract_start_date DATE;
1470 l_dependetn_sty_id NUMBER;
1471 rec_count NUMBER := 0;
1472 l_dep_sty_purpose_meaning VARCHAR2(4000);
1473
1474 BEGIN
1475
1476 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1477
1478 OPEN cntrct_csr (p_khr_id);
1479 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1480 CLOSE cntrct_csr;
1481
1482 /* sechawla 27-nov-09 bug 9001267
1483 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1484
1485 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1486 */
1487 --Modified by sechawla for bug 9001267 to check p_pdt_id variable instead of l_product_id
1488 IF (p_pdt_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1489
1490 --Modified by sechawla for bug 9001267 to pass p_pdt_id instead of l_product_id
1491 OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
1492 FETCH dep_sty_csr INTO l_strm_rec_type;
1493 IF dep_sty_csr%NOTFOUND THEN
1494
1495 -- Bug 4064253
1496
1497 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1498 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1499
1500 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1501 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1502 p_token1 => 'PURPOSE',
1503 p_token1_value => l_dep_sty_purpose_meaning);
1504
1505 RAISE Okl_Api.G_EXCEPTION_ERROR;
1506 END IF;
1507 CLOSE dep_sty_csr;
1508
1509 ELSE
1510
1511 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1512 p_msg_name => 'OKL_NO_PDT_FOUND');
1513 RAISE Okl_Api.G_EXCEPTION_ERROR;
1514
1515 END IF;
1516
1517 x_dependent_sty_id := l_strm_rec_type;
1518
1519 EXCEPTION
1520 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1521 IF cntrct_csr%ISOPEN THEN
1522 CLOSE cntrct_csr;
1523 END IF;
1524 IF dep_sty_csr%ISOPEN THEN
1525 CLOSE dep_sty_csr;
1526 END IF;
1527 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1528
1529 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1530 IF cntrct_csr%ISOPEN THEN
1531 CLOSE cntrct_csr;
1532 END IF;
1533 IF dep_sty_csr%ISOPEN THEN
1534 CLOSE dep_sty_csr;
1535 END IF;
1536 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1537
1538 WHEN OTHERS THEN
1539 IF cntrct_csr%ISOPEN THEN
1540 CLOSE cntrct_csr;
1541 END IF;
1542 IF dep_sty_csr%ISOPEN THEN
1543 CLOSE dep_sty_csr;
1544 END IF;
1545 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1546
1547 END get_dependent_stream_type;
1548
1549 PROCEDURE get_dependent_stream_type
1550 (
1551 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1552 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
1553 p_primary_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
1554 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
1555 x_return_status OUT NOCOPY VARCHAR2,
1556 x_dependent_sty_id OUT NOCOPY strm_rec_type
1557 )
1558
1559 IS
1560
1561 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1562 SELECT pdt_id, start_date
1563 FROM okl_k_headers_full_v
1564 WHERE id = l_khr_id;
1565
1566 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1567 SELECT DEPENDENT_STY_ID,PRICING_NAME
1568 FROM OKL_STRM_TMPT_LINES_UV STL
1569 WHERE PRIMARY_YN = 'N'
1570 AND STL.PDT_ID = l_product_id
1571 AND (STL.START_DATE <= l_contract_start_date)
1572 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1573 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
1574 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1575 AND PRICING_NAME IS NOT NULL;
1576
1577 l_product_id NUMBER;
1578 l_strm_rec_type strm_rec_type;
1579 l_contract_start_date DATE;
1580 l_dependetn_sty_id NUMBER;
1581 rec_count NUMBER;
1582 l_dep_sty_purpose_meaning VARCHAR2(4000);
1583
1584 BEGIN
1585
1586 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1587
1588 OPEN cntrct_csr (p_khr_id);
1589 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1590 CLOSE cntrct_csr;
1591
1592 /* --sechawla 27-NOV-09 9001267
1593 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1594
1595 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1596 */
1597 --Modified by sechawla for bug 9001267 to check p_pdt_id variable instead of l_product_id
1598 IF (p_pdt_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1599
1600 --Modified by sechawla for bug 9001267 to pass p_pdt_id instead of l_product_id
1601 OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
1602
1603 FETCH dep_sty_csr INTO l_strm_rec_type;
1604 IF dep_sty_csr%NOTFOUND THEN
1605 -- Bug 4064253
1606
1607 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1608 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1609
1610 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1611 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1612 p_token1 => 'PURPOSE',
1613 p_token1_value => l_dep_sty_purpose_meaning);
1614
1615 RAISE Okl_Api.G_EXCEPTION_ERROR;
1616 END IF;
1617 CLOSE dep_sty_csr;
1618
1619 ELSE
1620
1621 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1622 p_msg_name => 'OKL_NO_PDT_FOUND');
1623 RAISE Okl_Api.G_EXCEPTION_ERROR;
1624
1625 END IF;
1626
1627 x_dependent_sty_id := l_strm_rec_type;
1628
1629 EXCEPTION
1630 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1631 IF cntrct_csr%ISOPEN THEN
1632 CLOSE cntrct_csr;
1633 END IF;
1634 IF dep_sty_csr%ISOPEN THEN
1635 CLOSE dep_sty_csr;
1636 END IF;
1637 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1638
1639 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1640 IF cntrct_csr%ISOPEN THEN
1641 CLOSE cntrct_csr;
1642 END IF;
1643 IF dep_sty_csr%ISOPEN THEN
1644 CLOSE dep_sty_csr;
1645 END IF;
1646 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1647
1648 WHEN OTHERS THEN
1649 IF cntrct_csr%ISOPEN THEN
1650 CLOSE cntrct_csr;
1651 END IF;
1652 IF dep_sty_csr%ISOPEN THEN
1653 CLOSE dep_sty_csr;
1654 END IF;
1655 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1656
1657 END get_dependent_stream_type;
1658
1659 -- End code for new procedures of stream type
1660
1661 -- gboomina BUG#4508077 changes start
1662 -- procedure to update the rvi_amount and delete the primary stream
1663 PROCEDURE update_rvi_amount(p_api_version IN NUMBER,
1664 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1665 p_chr_id IN NUMBER,
1666 p_purpose IN VARCHAR2,
1667 x_return_status OUT NOCOPY VARCHAR2,
1668 x_msg_count OUT NOCOPY NUMBER,
1669 x_msg_data OUT NOCOPY VARCHAR2)
1670 IS
1671 -- cursor to fetch the abosrbed fee line with purpose as RVI
1672 CURSOR rvi_fee_csr IS
1673 SELECT KLE.ID ID
1674 FROM OKL_K_LINES KLE, OKC_K_LINES_B CLE, OKC_LINE_STYLES_B LSE
1675 WHERE CLE.CHR_ID = p_chr_id
1676 AND CLE.DNZ_CHR_ID = p_chr_id
1677 AND CLE.ID = KLE.ID
1678 AND CLE.LSE_ID = LSE.ID
1679 AND LSE.LTY_CODE = 'FEE'
1680 AND KLE.FEE_PURPOSE_CODE = 'RVI'
1681 AND KLE.FEE_TYPE = 'ABSORBED';
1682 -- cursor to fetch the fee line details
1683 CURSOR get_fee_dtls_csr(p_line_id NUMBER) IS
1684 SELECT LINE_ID, ITEM_ID, ITEM_OBJECT1_ID1, ITEM_OBJECT1_ID2, LINE_START_DATE, LINE_END_DATE, LINE_AMOUNT
1685 FROM okl_k_fee_lines_uv
1686 WHERE LINE_ID = p_line_id;
1687 -- cursor to fetch the stream element amount
1688 CURSOR get_strmele_csr(p_khr_id NUMBER, p_strm_id NUMBER, p_sty_id NUMBER) IS
1689 SELECT ele.amount
1690 FROM okl_strm_elements ele,
1691 okl_streams str
1692 WHERE ele.stm_id = p_strm_id
1693 AND str.khr_id = p_khr_id
1694 AND str.sty_id = p_sty_id
1695 AND upper(str.say_code) = 'CURR'
1696 AND upper(str.active_yn) = 'Y';
1697
1698 l_line_id NUMBER;
1699 lx_fee_types_rec okl_maintain_fee_pvt.fee_types_rec_type;
1700 l_fee_types_rec okl_maintain_fee_pvt.fee_types_rec_type;
1701 l_rvi_amount NUMBER;
1702 l_strm_id NUMBER;
1703 l_stmv_rec okl_streams_pub.stmv_rec_type;
1704 l_api_name VARCHAR2(255) := 'update_rvi_amount';
1705 BEGIN
1706 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1707 -- Call start_activity to create savepoint, check compatibility
1708 -- and initialize message list
1709 x_return_status := OKL_API.START_ACTIVITY (
1710 l_api_name
1711 ,p_init_msg_list
1712 ,'_PVT'
1713 ,x_return_status);
1714 -- Check if activity started successfully
1715 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1716 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1717 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1718 RAISE OKL_API.G_EXCEPTION_ERROR;
1719 END IF;
1720 l_line_id := NULL;
1721 l_rvi_amount := NULL;
1722 -- get the abosrbed fee line with purpose code as RVI
1723 FOR l_rvi_fee_rec IN rvi_fee_csr
1724 LOOP
1725 l_line_id := l_rvi_fee_rec.ID;
1726 END LOOP;
1727 -- if abosrbed fee line with purpose code as RVI exists
1728 -- populate the fee record
1729 IF l_line_id IS NOT NULL THEN
1730 FOR l_fee_dtls_rec IN get_fee_dtls_csr(p_line_id => l_line_id)
1731 LOOP
1732 l_fee_types_rec.line_id := l_line_id;
1733 l_fee_types_rec.dnz_chr_id := p_chr_id;
1734 l_fee_types_rec.fee_type := 'ABSORBED';
1735 l_fee_types_rec.item_id := l_fee_dtls_rec.item_id;
1736 l_fee_types_rec.item_id1 := l_fee_dtls_rec.item_object1_id1;
1737 l_fee_types_rec.item_id2 := l_fee_dtls_rec.item_object1_id2;
1738 l_fee_types_rec.effective_from := l_fee_dtls_rec.line_start_date;
1739 l_fee_types_rec.effective_to := l_fee_dtls_rec.line_end_date;
1740 END LOOP;
1741 -- fetch the residual value insurance amount
1742 -- get the stream header id
1743 FOR l_strm_rec IN strm_csr(p_chr_id,l_line_id,'CURR',p_purpose,l_fee_types_rec.item_id1)
1744 LOOP
1745 l_stmv_rec.id := l_strm_rec.strm_id;
1746 l_strm_id := l_strm_rec.strm_id;
1747 END LOOP;
1748
1749 IF l_strm_id IS NOT NULL THEN
1750 -- update the line amount only when the API is called for main product
1751 IF p_purpose = 'ORIGIN' THEN
1752 -- get the amount
1753 FOR l_strmele_rec IN get_strmele_csr(p_chr_id, l_strm_id, l_fee_types_rec.item_id1)
1754 LOOP
1755 l_rvi_amount := l_strmele_rec.amount;
1756 END LOOP;
1757 -- update the fee line amount when the stream element returns a value
1758 IF l_rvi_amount IS NOT NULL THEN
1759 l_fee_types_rec.amount := l_rvi_amount;
1760 -- update the fee line
1761 okl_maintain_fee_pvt.update_fee_type(p_api_version => p_api_version,
1762 p_init_msg_list => OKL_API.G_FALSE,
1763 x_return_status => x_return_status,
1764 x_msg_count => x_msg_count,
1765 x_msg_data => x_msg_data,
1766 p_fee_types_rec => l_fee_types_rec,
1767 x_fee_types_rec => lx_fee_types_rec);
1768 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1769 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1770 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1771 RAISE OKL_API.G_EXCEPTION_ERROR;
1772 END IF;
1773 END IF; -- end of stream element check
1774 END IF; -- end of main product check
1775 -- delete the primary stream for all products
1776 okl_streams_pub.delete_streams(p_api_version => p_api_version,
1777 p_init_msg_list => OKL_API.G_FALSE,
1778 x_return_status => x_return_status,
1779 x_msg_count => x_msg_count,
1780 x_msg_data => x_msg_data,
1781 p_stmv_rec => l_stmv_rec);
1782 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1783 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1784 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1785 RAISE OKL_API.G_EXCEPTION_ERROR;
1786 END IF;
1787 END IF; -- end of strm id not null check
1788 END IF; -- end of line id not null check
1789 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
1790 EXCEPTION
1791 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1792 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1793 p_api_name => l_api_name,
1794 p_pkg_name => g_pkg_name,
1795 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
1796 x_msg_count => x_msg_count,
1797 x_msg_data => x_msg_data,
1798 p_api_type => g_api_type);
1799
1800 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
1801 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1802 p_api_name => l_api_name,
1803 p_pkg_name => g_pkg_name,
1804 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1805 x_msg_count => x_msg_count,
1806 x_msg_data => x_msg_data,
1807 p_api_type => g_api_type);
1808
1809 WHEN OTHERS then
1810 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1811 p_api_name => l_api_name,
1812 p_pkg_name => g_pkg_name,
1813 p_exc_name => 'OTHERS',
1814 x_msg_count => x_msg_count,
1815 x_msg_data => x_msg_data,
1816 p_api_type => g_api_type);
1817 END update_rvi_amount;
1818 -- gboomina BUG#4508077 changes end
1819
1820 --Debuging procedures
1821 -------------------------------------------------------------------------------------------------
1822 -- Start of Commnets
1823 -- Badrinath Kuchibholta
1824 -- Procedure Name : yield_request
1825 -- Description : Making of Yield requests
1826 -- Business Rules : Yields are requested from the pricing engine as needed
1827 -- Parameters : out yield pl/sql table of recors
1828 -- Version :
1829 -- End of Commnets
1830 -------------------------------------------------------------------------------------------------
1831 FUNCTION yield_request(x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type)
1832 RETURN VARCHAR2 IS
1833 l_prog_name VARCHAR2(100) := 'YIELD_REQUEST';
1834 x_return_status VARCHAR2(3) := okl_api.g_ret_sts_success;
1835 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
1836 BEGIN
1837 -- Pre tax IRR with subsidy
1838 l_csm_yields_tbl(1).yield_name := 'PTIRR';
1839 l_csm_yields_tbl(1).method := 'Internal rate-of-return';
1840 l_csm_yields_tbl(1).array_type := 'PTCF';
1841 l_csm_yields_tbl(1).compounded_method := 'Periodic';
1842 l_csm_yields_tbl(1).nominal_yn := 'Y';
1843 l_csm_yields_tbl(1).pre_tax_yn := 'Y';
1844 l_csm_yields_tbl(1).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1845 -- After tax IRR with subsidy
1846 l_csm_yields_tbl(2).yield_name := 'NAT';
1847 l_csm_yields_tbl(2).method := 'Internal rate-of-return';
1848 l_csm_yields_tbl(2).array_type := 'ATCF';
1849 l_csm_yields_tbl(2).compounded_method := 'Periodic';
1850 l_csm_yields_tbl(2).nominal_yn := 'Y';
1851 l_csm_yields_tbl(2).pre_tax_yn := 'Y';
1852 l_csm_yields_tbl(2).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1853 -- Booking yield with subsidy
1854 l_csm_yields_tbl(3).yield_name := 'Booking';
1855 l_csm_yields_tbl(3).method := 'FAS 13 accounting';
1856 l_csm_yields_tbl(3).array_type := 'Full-term rate and subsidies';
1857 l_csm_yields_tbl(3).compounded_method := 'Periodic';
1858 l_csm_yields_tbl(3).nominal_yn := 'Y';
1859 l_csm_yields_tbl(3).pre_tax_yn := 'Y';
1860 l_csm_yields_tbl(3).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1861 -- Pre tax IRR without subsidy
1862 l_csm_yields_tbl(4).yield_name := 'PTIRRWS';
1863 l_csm_yields_tbl(4).method := 'Internal rate-of-return';
1864 l_csm_yields_tbl(4).array_type := 'PTCF w/o subsidies';
1865 l_csm_yields_tbl(4).compounded_method := 'Periodic';
1866 l_csm_yields_tbl(4).nominal_yn := 'Y';
1867 l_csm_yields_tbl(4).pre_tax_yn := 'Y';
1868 l_csm_yields_tbl(4).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1869 -- After tax IRR without subsidy
1870 l_csm_yields_tbl(5).yield_name := 'NATWS';
1871 l_csm_yields_tbl(5).method := 'Internal rate-of-return';
1872 l_csm_yields_tbl(5).array_type := 'ATCF w/o subsidies';
1873 l_csm_yields_tbl(5).compounded_method := 'Periodic';
1874 l_csm_yields_tbl(5).nominal_yn := 'Y';
1875 l_csm_yields_tbl(5).pre_tax_yn := 'N';
1876 l_csm_yields_tbl(5).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1877 -- Booking yield without subsidy
1878 l_csm_yields_tbl(6).yield_name := 'BookingWS';
1879 l_csm_yields_tbl(6).method := 'FAS 13 accounting';
1880 l_csm_yields_tbl(6).array_type := 'Full-term rate';
1881 l_csm_yields_tbl(6).compounded_method := 'Periodic';
1882 l_csm_yields_tbl(6).nominal_yn := 'Y';
1883 l_csm_yields_tbl(6).pre_tax_yn := 'N';
1884 l_csm_yields_tbl(6).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1885 -- Assign output rec
1886 x_csm_yields_tbl := l_csm_yields_tbl;
1887 RETURN x_return_status;
1888 EXCEPTION
1889 WHEN OTHERS THEN
1890 okl_api.set_message (p_app_name => G_APP_NAME,
1891 p_msg_name => G_DB_ERROR,
1892 p_token1 => G_PROG_NAME_TOKEN,
1893 p_token1_value => l_prog_name,
1894 p_token2 => G_SQLCODE_TOKEN,
1895 p_token2_value => sqlcode,
1896 p_token3 => G_SQLERRM_TOKEN,
1897 p_token3_value => sqlerrm);
1898 x_return_status := okl_api.g_ret_sts_error;
1899 RETURN x_return_status;
1900 END yield_request;
1901 --------------------------------------------------------------------------------
1902 -- Start modification 11i9 bakuchib
1903 -- Start modification Bug#3066346 bakuchib
1904 --------------------------------------------------------------------------------
1905 -- Start of Commnets
1906 -- Badrinath Kuchibholta
1907 -- Procedure Name : validate_txd_tax_book
1908 -- Description : Validate the Tax book for an asset number
1909 -- Business Rules : If there is only a single tax book and it is not
1910 -- designated as either Federal or State,
1911 -- We assume it as Federal.
1912 -- IF there are two tax books and neither is designated
1913 -- as either Federal or State, We issue an error
1914 -- during stream generation.
1915 -- Parameters : p_asset_number
1916 -- Version : 1.0
1917 -- History : BAKUCHIB 29-JUL-2003 - 3066346 created
1918 -- : BAKUCHIB 05-FEB-2004 - 3381853 Modified
1919 -- End of Commnets
1920 --------------------------------------------------------------------------------
1921 FUNCTION validate_txd_tax_book(p_asset_number IN OKL_TXD_ASSETS_B.ASSET_NUMBER%TYPE,
1922 x_fed_only_tax_book OUT NOCOPY OKL_TXD_ASSETS_B.TAX_BOOK%TYPE,
1923 x_fed_only OUT NOCOPY VARCHAR2)
1924 RETURN VARCHAR2 IS
1925 l_prog_name VARCHAR2(100) := 'VAL_TXD_TAX_BOOK';
1926 g_process_error EXCEPTION;
1927 G_NO_SETUP_TAX_BOOK CONSTANT VARCHAR2(200) := 'OKL_LLP_TAX_BOOK_MAP';
1928 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1929 i NUMBER := 0;
1930 lv_tax_book OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
1931 -- Get the OKL_TXD_ASSETS_B info
1932 CURSOR l_txd_csr(p_asset_num VARCHAR2)
1933 IS
1934 SELECT tax_book
1935 FROM okl_txd_assets_v txd
1936 WHERE txd.asset_number = p_asset_num;
1937 -- Get the types of TAX BOOKS defined in the setup
1938 -- We get first for the Federal or state
1939 CURSOR l_txtrans_csr (p_book fa_book_controls.book_type_code%TYPE)
1940 IS
1941 SELECT trns.value,
1942 books.book_type_code
1943 FROM okl_sgn_translations trns,
1944 fa_book_controls books
1945 WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
1946 AND trns.object1_id1 = books.book_type_code
1947 AND books.book_type_code = p_book;
1948 TYPE tax_book_value_rec IS RECORD(
1949 tax_book okl_txd_assets_b.tax_book%TYPE := NULL ,
1950 value okl_sgn_translations.value%TYPE := NULL);
1951 TYPE tax_book_value_tbl IS TABLE OF tax_book_value_rec
1952 INDEX BY BINARY_INTEGER;
1953 lt_tax_book_value_tbl tax_book_value_tbl;
1954 BEGIN
1955 -- We scan thru OKL_TXD_ASSETS_B for tax book
1956 FOR r_txd_csr IN l_txd_csr(p_asset_num => p_asset_number) LOOP
1957 OPEN l_txtrans_csr(p_book => r_txd_csr.tax_book);
1958 FETCH l_txtrans_csr INTO lt_tax_book_value_tbl(i).value,
1959 lt_tax_book_value_tbl(i).tax_book;
1960 IF l_txtrans_csr%NOTFOUND THEN
1961 lt_tax_book_value_tbl(i).tax_book := r_txd_csr.tax_book;
1962 END IF;
1963 CLOSE l_txtrans_csr;
1964 i := i + 1;
1965 END LOOP;
1966 x_fed_only := 'N';
1967 x_fed_only_tax_book := NULL;
1968 IF lt_tax_book_value_tbl.COUNT = 1 THEN
1969 IF lt_tax_book_value_tbl(lt_tax_book_value_tbl.FIRST).VALUE IS NULL THEN
1970 x_fed_only := 'Y';
1971 x_fed_only_tax_book := lt_tax_book_value_tbl(lt_tax_book_value_tbl.FIRST).tax_book;
1972 RETURN x_return_status;
1973 END IF;
1974 ELSIF lt_tax_book_value_tbl.COUNT > 1 THEN
1975 FOR j IN lt_tax_book_value_tbl.FIRST..lt_tax_book_value_tbl.LAST LOOP
1976 EXIT WHEN(j = j + 1);
1977 IF lt_tax_book_value_tbl(j).VALUE IS NULL AND
1978 lt_tax_book_value_tbl(j+1).VALUE IS NULL THEN
1979 okl_api.set_message(p_app_name => G_APP_NAME,
1980 p_msg_name => G_NO_SETUP_TAX_BOOK,
1981 p_token1 => 'TAX_BOOK',
1982 p_token1_value => lt_tax_book_value_tbl(j).tax_book);
1983 x_return_status := OKL_API.G_RET_STS_ERROR;
1984 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
1985 END IF;
1986 END LOOP;
1987 ELSE
1988 x_fed_only := 'N';
1989 x_fed_only_tax_book := NULL;
1990 RETURN x_return_status;
1991 END IF;
1992 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1993 RAISE g_process_error;
1994 END IF;
1995 RETURN x_return_status;
1996 EXCEPTION
1997 WHEN g_process_error THEN
1998 IF l_txtrans_csr%ISOPEN THEN
1999 CLOSE l_txtrans_csr;
2000 END IF;
2001 IF l_txd_csr%ISOPEN THEN
2002 CLOSE l_txd_csr;
2003 END IF;
2004 x_return_status := OKL_API.G_RET_STS_ERROR;
2005 RETURN x_return_status;
2006 WHEN OTHERS THEN
2007 IF l_txtrans_csr%ISOPEN THEN
2008 CLOSE l_txtrans_csr;
2009 END IF;
2010 IF l_txd_csr%ISOPEN THEN
2011 CLOSE l_txd_csr;
2012 END IF;
2013 OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME,
2014 p_msg_name => G_DB_ERROR,
2015 p_token1 => G_PROG_NAME_TOKEN,
2016 p_token1_value => l_prog_name,
2017 p_token2 => G_SQLCODE_TOKEN,
2018 p_token2_value => sqlcode,
2019 p_token3 => G_SQLERRM_TOKEN,
2020 p_token3_value => sqlerrm);
2021 x_return_status := OKL_API.G_RET_STS_ERROR;
2022 RETURN x_return_status;
2023 END validate_txd_tax_book;
2024 -------------------------------------------------------------------------------------------------
2025 -- Start modification 11i10 bakuchib
2026 -- Start modification Bug#3447917 bakuchib
2027 --------------------------------------------------------------------------------
2028 -- Start of Commnets
2029 -- Badrinath Kuchibholta
2030 -- Function Name : is_rep_pdt
2031 -- Description : Validate if the original product has a reporting product
2032 -- Business Rules : If there is a reporting product then we would generated
2033 -- book depreciation streams for the reporting tax book.
2034 -- and not generate federal depreciation streams or state
2035 -- depreciation streams.
2036 -- Parameters :
2037 -- Version : 1.0
2038 -- History : BAKUCHIB 20-FEB-2004 - 3447917 created
2039 -- End of Commnets
2040 --------------------------------------------------------------------------------
2041 -- bug 4194673 fixed by HKPATEL
2042 FUNCTION is_rep_pdt(--p_asset_number IN okl_txd_assets_b.asset_number%TYPE,
2043 p_corp_book IN VARCHAR2,
2044 x_mg_tax_yn OUT NOCOPY VARCHAR2)
2045 RETURN VARCHAR2 IS
2046 l_prog_name VARCHAR2(100) := 'IS_REP_PDT';
2047 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
2048 lv_mg_tax_yn VARCHAR2(3) := 'N';
2049 /*
2050 CURSOR get_rep_tax_csr(p_asset_number okl_txd_assets_b.asset_number%TYPE)
2051 IS
2052 SELECT 'Y'
2053 FROM DUAL
2054 WHERE EXISTS (SELECT 'Y'
2055 FROM okl_txd_assets_b txd
2056 WHERE txd.asset_number = p_asset_number
2057 AND txd.tax_book = fnd_profile.value('OKL_REPORTING_PDT_ASSET_BOOK'));
2058 */
2059 CURSOR get_rep_tax_csr(p_corp_book VARCHAR2)
2060 IS
2061 SELECT 'Y'
2062 FROM fa_book_controls
2063 WHERE book_class = 'TAX'
2064 AND mass_copy_source_book = p_corp_book
2065 AND book_type_code = OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
2066
2067 BEGIN
2068 --OPEN get_rep_tax_csr(p_asset_number => p_asset_number);
2069 OPEN get_rep_tax_csr(p_corp_book => p_corp_book);
2070 FETCH get_rep_tax_csr INTO lv_mg_tax_yn;
2071 CLOSE get_rep_tax_csr;
2072 x_mg_tax_yn := NVL(lv_mg_tax_yn,'N');
2073 RETURN x_return_status;
2074 EXCEPTION
2075 WHEN OTHERS THEN
2076 IF get_rep_tax_csr%ISOPEN THEN
2077 CLOSE get_rep_tax_csr;
2078 END IF;
2079 x_return_status := OKL_API.G_RET_STS_ERROR;
2080 RETURN x_return_status;
2081 END is_rep_pdt;
2082 -------------------------------------------------------------------------------------------------
2083 -- Start of Commnets
2084 -- Badrinath Kuchibholta
2085 -- Procedure Name : execute_formula
2086 -- Description : Execution of Formula Based on Line Status
2087 -- Business Rules : Execution of the formula will be based on the line status
2088 -- of the contract, presently we will be considering the TERMINATED
2089 -- line to compute the forumla since the resultant value will be
2090 -- included in yield calculations.
2091 -- Parameters : Standard Parameters with p_khr_id and p_line_id
2092 -- Version :
2093 -- End of Commnets
2094 -------------------------------------------------------------------------------------------------
2095 PROCEDURE execute_formula(p_api_version IN NUMBER,
2096 p_init_msg_list IN VARCHAR2,
2097 x_return_status OUT NOCOPY VARCHAR2,
2098 x_msg_count OUT NOCOPY NUMBER,
2099 x_msg_data OUT NOCOPY VARCHAR2,
2100 p_formula_name IN okl_formulae_v.name%TYPE,
2101 p_contract_id IN okl_k_headers_v.id%TYPE,
2102 p_line_id IN okl_k_lines_v.id%TYPE,
2103 x_value OUT NOCOPY NUMBER)
2104 IS
2105 l_api_name CONSTANT VARCHAR2(30) := 'EXECUTE_FORMULA';
2106 lv_hdr_ter VARCHAR2(3) := 'N';
2107 lv_lne_ter VARCHAR2(3) := 'N';
2108 SUBTYPE ctxt_val_tbl_type IS
2109 okl_execute_formula_pvt.ctxt_val_tbl_type;
2110 l_additional_parameters ctxt_val_tbl_type;
2111 -- To check if the chr_id has TERMINATED Line
2112 CURSOR l_hdr_ter_csr (p_chr_id NUMBER)
2113 IS
2114 SELECT 'Y'
2115 FROM dual
2116 WHERE EXISTS (SELECT 'Y'
2117 FROM okc_k_lines_b cle,
2118 okc_line_styles_b lse
2119 WHERE cle.dnz_chr_id = p_chr_id
2120 AND cle.lse_id = lse.id
2121 AND cle.sts_code = 'TERMINATED'
2122 AND lse.lty_code = 'FREE_FORM1');
2123 -- To check if the chr_id and line_id is a TERMINATED Line
2124 CURSOR l_lne_ter_csr (p_chr_id NUMBER,
2125 p_cle_id NUMBER)
2126 IS
2127 SELECT 'Y'
2128 FROM dual
2129 WHERE EXISTS (SELECT 'Y'
2130 FROM okc_k_lines_b cle,
2131 okc_line_styles_b lse
2132 WHERE cle.dnz_chr_id = p_chr_id
2133 AND cle.id = p_cle_id
2134 AND cle.lse_id = lse.id
2135 AND cle.sts_code = 'TERMINATED'
2136 AND lse.lty_code = 'FREE_FORM1');
2137 BEGIN
2138 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2139 -- Call start_activity to create savepoint, check compatibility
2140 -- and initialize message list
2141 x_return_status := OKL_API.START_ACTIVITY (
2142 l_api_name
2143 ,p_init_msg_list
2144 ,'_PVT'
2145 ,x_return_status);
2146 -- Check if activity started successfully
2147 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2148 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2149 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2150 RAISE OKL_API.G_EXCEPTION_ERROR;
2151 END IF;
2152 IF (p_contract_id IS NOT NULL OR
2153 p_contract_id <> okl_api.g_miss_num) AND
2154 (p_line_id IS NULL OR
2155 p_line_id = okl_api.g_miss_num) THEN
2156 OPEN l_hdr_ter_csr(p_chr_id => p_contract_id);
2157 FETCH l_hdr_ter_csr INTO lv_hdr_ter;
2158 CLOSE l_hdr_ter_csr;
2159 IF lv_hdr_ter = 'Y' THEN
2160 -- We need to set the global formula addtional parameter to Y and reset the
2161 -- same to N after using the formula since we need to consider TERMINATED lines
2162 l_additional_parameters(0).name := 'TERMINATED_LINES_YN';
2163 l_additional_parameters(0).value := 'Y';
2164 -- Calling the formula Engine with additional parameter
2165 -- so that the terminated lines are included for computing
2166 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2167 p_init_msg_list => p_init_msg_list,
2168 x_return_status => x_return_status,
2169 x_msg_count => x_msg_count,
2170 x_msg_data => x_msg_data,
2171 p_formula_name => p_formula_name,
2172 p_contract_id => p_contract_id,
2173 p_line_id => NULL,
2174 p_additional_parameters => l_additional_parameters,
2175 x_value => x_value);
2176 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2177 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2178 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2179 RAISE OKL_API.G_EXCEPTION_ERROR;
2180 END IF;
2181 -- We need to set the global formula addtional parameter to Y and reset the
2182 -- same to N after using the formula since we need to consider TERMINATED lines
2183 l_additional_parameters.delete;
2184 ELSIF lv_hdr_ter <> 'Y' THEN
2185 -- Normal calling of the formula engine
2186 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2187 p_init_msg_list => p_init_msg_list,
2188 x_return_status => x_return_status,
2189 x_msg_count => x_msg_count,
2190 x_msg_data => x_msg_data,
2191 p_formula_name => p_formula_name,
2192 p_contract_id => p_contract_id,
2193 p_line_id => NULL,
2194 x_value => x_value);
2195 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2196 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2197 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2198 RAISE OKL_API.G_EXCEPTION_ERROR;
2199 END IF;
2200 END IF;
2201 ELSIF (p_contract_id IS NOT NULL OR
2202 p_contract_id <> okl_api.g_miss_num) AND
2203 (p_line_id IS NOT NULL OR
2204 p_line_id <> okl_api.g_miss_num) THEN
2205 OPEN l_lne_ter_csr(p_chr_id => p_contract_id,
2206 p_cle_id => p_line_id);
2207 FETCH l_lne_ter_csr INTO lv_lne_ter;
2208 CLOSE l_lne_ter_csr;
2209 IF lv_lne_ter = 'Y' THEN
2210 -- We need to set the global formula addtional parameter to Y and reset the
2211 -- same to N after using the formula since we need to consider TERMINATED lines
2212 l_additional_parameters(0).name := 'TERMINATED_LINES_YN';
2213 l_additional_parameters(0).value := 'Y';
2214 -- Calling the formula Engine with additional parameter
2215 -- so that the terminated lines are included for computing
2216 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2217 p_init_msg_list => p_init_msg_list,
2218 x_return_status => x_return_status,
2219 x_msg_count => x_msg_count,
2220 x_msg_data => x_msg_data,
2221 p_formula_name => p_formula_name,
2222 p_contract_id => p_contract_id,
2223 p_line_id => p_line_id,
2224 p_additional_parameters => l_additional_parameters,
2225 x_value => x_value);
2226 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2227 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2228 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2229 RAISE OKL_API.G_EXCEPTION_ERROR;
2230 END IF;
2231 -- We need to set the global formula addtional parameter to Y and reset the
2232 -- same to N after using the formula since we need to consider TERMINATED lines
2233 l_additional_parameters.delete;
2234 ELSIF lv_lne_ter <> 'Y' THEN
2235 -- Normal calling of the formula engine
2236 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2237 p_init_msg_list => p_init_msg_list,
2238 x_return_status => x_return_status,
2239 x_msg_count => x_msg_count,
2240 x_msg_data => x_msg_data,
2241 p_formula_name => p_formula_name,
2242 p_contract_id => p_contract_id,
2243 p_line_id => p_line_id,
2244 x_value => x_value);
2245 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2246 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2247 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2248 RAISE OKL_API.G_EXCEPTION_ERROR;
2249 END IF;
2250 END IF;
2251 ELSE
2252 okl_api.set_message(p_app_name => G_APP_NAME,
2253 p_msg_name => G_REQUIRED_VALUE,
2254 p_token1 => G_COL_NAME_TOKEN,
2255 p_token1_value => 'Stub days, Periods');
2256 x_return_status := okl_api.g_ret_sts_error;
2257 RAISE OKL_API.G_EXCEPTION_ERROR;
2258 END IF;
2259 OKL_API.END_ACTIVITY (x_msg_count,
2260 x_msg_data );
2261 EXCEPTION
2262 WHEN OKL_API.G_EXCEPTION_ERROR then
2263 IF l_hdr_ter_csr%ISOPEN THEN
2264 CLOSE l_hdr_ter_csr;
2265 END IF;
2266 IF l_lne_ter_csr%ISOPEN THEN
2267 CLOSE l_lne_ter_csr;
2268 END IF;
2269 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2270 l_api_name,
2271 G_PKG_NAME,
2272 'OKL_API.G_RET_STS_ERROR',
2273 x_msg_count,
2274 x_msg_data,
2275 '_PVT');
2276 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2277 IF l_hdr_ter_csr%ISOPEN THEN
2278 CLOSE l_hdr_ter_csr;
2279 END IF;
2280 IF l_lne_ter_csr%ISOPEN THEN
2281 CLOSE l_lne_ter_csr;
2282 END IF;
2283 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2284 l_api_name,
2285 G_PKG_NAME,
2286 'OKL_API.G_RET_STS_UNEXP_ERROR',
2287 x_msg_count,
2288 x_msg_data,
2289 '_PVT');
2290 WHEN OTHERS then
2291 IF l_hdr_ter_csr%ISOPEN THEN
2292 CLOSE l_hdr_ter_csr;
2293 END IF;
2294 IF l_lne_ter_csr%ISOPEN THEN
2295 CLOSE l_lne_ter_csr;
2296 END IF;
2297 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2298 l_api_name,
2299 G_PKG_NAME,
2300 'OTHERS',
2301 x_msg_count,
2302 x_msg_data,
2303 '_PVT');
2304 END execute_formula;
2305 -------------------------------------------------------------------------------------------------
2306 -- Start of Commnets
2307 -- Badrinath Kuchibholta
2308 -- Procedure Name : append_perd_exp_tbl
2309 -- Description : append_perd_exp_tbl
2310 -- Business Rules : If the start date of the contract and start of the payment level
2311 -- are different we then append the periodic expenses table
2312 -- to include a stub.This is done for Fee lines only.
2313 -- Parameters : Standard Parameters with p_khr_id and p_csm_perd_exp_tbl
2314 -- Version :
2315 -- End of Commnets
2316 -------------------------------------------------------------------------------------------------
2317 FUNCTION append_perd_exp_tbl(p_khr_id IN OKC_K_HEADERS_B.ID%TYPE,
2318 p_csm_perd_exp_tbl IN OUT NOCOPY OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type)
2319 RETURN VARCHAR2 IS
2320 l_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type := p_csm_perd_exp_tbl;
2321 m_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2322 mx_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2323 lx_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2324 i NUMBER := 0;
2325 m NUMBER := 0;
2326 n NUMBER := 0;
2327 ld_start_date OKC_K_HEADERS_B.START_DATE%TYPE;
2328 g_process_error EXCEPTION;
2329 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
2330 -- Cursor to get the Start of the contract
2331 -- To compare the date Start of the table of Records
2332 CURSOR c_start_date_khr_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
2333 IS
2334 SELECT start_date
2335 FROM okc_k_headers_b
2336 WHERE id = p_khr_id;
2337 -- Since We are now Dealing with fee lines
2338 -- So we look for Fee lines in the Table of Records
2339 CURSOR c_fee_line_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
2340 IS
2341 SELECT cle.id id
2342 FROM okc_k_lines_b cle,
2343 okc_line_styles_b lse
2344 WHERE dnz_chr_id = p_khr_id
2345 AND cle.lse_id = lse.id
2346 AND lse.lty_code = 'FEE';
2347 BEGIN
2348 IF p_khr_id IS NOT NULL OR
2349 p_khr_id <> OKL_API.G_MISS_NUM THEN
2350 -- Cursor to get the Start of the contract
2351 -- To compare the date Start of the table of Records
2352 OPEN c_start_date_khr_csr(p_khr_id => p_khr_id);
2353 FETCH c_start_date_khr_csr INTO ld_start_date;
2354 IF c_start_date_khr_csr%NOTFOUND THEN
2355 RAISE g_process_error;
2356 END IF;
2357 CLOSE c_start_date_khr_csr;
2358 IF l_csm_perd_exp_tbl.COUNT > 0 THEN
2359 -- Since We are now Dealing with fee lines
2360 -- So we look for Fee lines in the Table of Records
2361 FOR r_fee_line_csr IN c_fee_line_csr(p_khr_id => p_khr_id) LOOP
2362 -- Now scanning the table of records and build a temp table of
2363 -- records which match the below condition
2364 FOR i IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2365 IF l_csm_perd_exp_tbl(i).kle_fee_id = r_fee_line_csr.id AND
2366 l_csm_perd_exp_tbl(i).level_index_number = 1 AND
2367 (ld_start_date IS NOT NULL OR
2368 ld_start_date <> OKL_API.G_MISS_DATE) AND
2369 l_csm_perd_exp_tbl(i).date_start <> ld_start_date THEN
2370 m_csm_perd_exp_tbl(i) := l_csm_perd_exp_tbl(i);
2371 END IF;
2372 END LOOP;
2373 END LOOP;
2374 -- If the Temp table of records are there
2375 IF m_csm_perd_exp_tbl.COUNT > 0 THEN
2376 -- Scan each record of the temp table
2377 i := m_csm_perd_exp_tbl.FIRST;
2378 LOOP
2379 -- Scan each record of the org table
2380 FOR j IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2381 IF j = (i + m) THEN
2382 -- if the record of the org table matches the temp table records.
2383 -- Then re arrange the table of record index number.
2384 FOR k IN REVERSE j..l_csm_perd_exp_tbl.LAST LOOP
2385 l_csm_perd_exp_tbl(k+1) := l_csm_perd_exp_tbl(k);
2386 END LOOP;
2387 -- Now after re arrangement we are Modifying the stub record.
2388 l_csm_perd_exp_tbl(j).level_index_number := 0;
2389 l_csm_perd_exp_tbl(j).number_of_periods := 1;
2390 l_csm_perd_exp_tbl(j).lock_level_step := NULL;
2391 -- Start modification bug#3145540,3145597
2392 l_csm_perd_exp_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
2393 -- End modification bug#3145540,3145597
2394 l_csm_perd_exp_tbl(j).query_level_yn := NULL;
2395 l_csm_perd_exp_tbl(j).structure := NULL;
2396 l_csm_perd_exp_tbl(j).amount := 0;
2397 l_csm_perd_exp_tbl(j).period := 'T';
2398 END IF;
2399 END LOOP;
2400 EXIT WHEN (i = m_csm_perd_exp_tbl.LAST);
2401 i := m_csm_perd_exp_tbl.NEXT(i);
2402 m := m + 1;
2403 END LOOP;
2404 END IF;
2405 IF l_csm_perd_exp_tbl.COUNT > 0 THEN
2406 -- Since We are now Dealing with fee lines
2407 -- So we look for Fee lines in the Table of Records
2408 FOR r_fee_line_csr IN c_fee_line_csr(p_khr_id => p_khr_id) LOOP
2409 n := 0;
2410 -- We are now re arranging the Level index number so that it
2411 -- should start from 1 instead of 0 .
2412 FOR i IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2413 IF l_csm_perd_exp_tbl(i).kle_fee_id = r_fee_line_csr.id AND
2414 l_csm_perd_exp_tbl(i).level_index_number = n AND
2415 (ld_start_date IS NOT NULL OR
2416 ld_start_date <> OKL_API.G_MISS_DATE) AND
2417 l_csm_perd_exp_tbl(i).date_start <> ld_start_date THEN
2418 n := n + 1;
2419 l_csm_perd_exp_tbl(i).level_index_number := n;
2420 END IF;
2421 END LOOP;
2422 END LOOP;
2423 END IF;
2424 END IF;
2425 ELSE
2426 RAISE g_process_error;
2427 END IF;
2428 p_csm_perd_exp_tbl := l_csm_perd_exp_tbl;
2429 RETURN x_return_status;
2430 EXCEPTION
2431 WHEN g_process_error THEN
2432 IF c_start_date_khr_csr%ISOPEN THEN
2433 CLOSE c_start_date_khr_csr;
2434 END IF;
2435 IF c_fee_line_csr%ISOPEN THEN
2436 CLOSE c_fee_line_csr;
2437 END IF;
2438 x_return_status := OKL_API.G_RET_STS_ERROR;
2439 RETURN x_return_status;
2440 WHEN OTHERS THEN
2441 IF c_start_date_khr_csr%ISOPEN THEN
2442 CLOSE c_start_date_khr_csr;
2443 END IF;
2444 IF c_fee_line_csr%ISOPEN THEN
2445 CLOSE c_fee_line_csr;
2446 END IF;
2447 x_return_status := OKL_API.G_RET_STS_ERROR;
2448 RETURN x_return_status;
2449 END append_perd_exp_tbl;
2450 -- End modification 11i9 bakuchib
2451 PROCEDURE delete_working_streams(
2452 p_api_version IN NUMBER,
2453 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2454 x_return_status OUT NOCOPY VARCHAR2,
2455 x_msg_count OUT NOCOPY NUMBER,
2456 x_msg_data OUT NOCOPY VARCHAR2,
2457 p_chr_id IN NUMBER) AS
2458 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_WKG_STRMS';
2459 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2460 l_api_version NUMBER := 1.0;
2461
2462 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
2463 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
2464 l_strms_orig_rec strms_csr%ROWTYPE;
2465 l_strms_rep_rec strms_csr%ROWTYPE;
2466
2467 i NUMBER;
2468
2469 Begin
2470
2471 print( l_api_name, 'begin');
2472 l_return_status := OKL_API.START_ACTIVITY(
2473 p_api_name => l_api_name,
2474 p_pkg_name => g_pkg_name,
2475 p_init_msg_list => p_init_msg_list,
2476 l_api_version => l_api_version,
2477 p_api_version => p_api_version,
2478 p_api_type => G_API_TYPE,
2479 x_return_status => x_return_status);
2480
2481 -- check if activity started successfully
2482 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2483 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2484 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
2485 raise OKL_API.G_EXCEPTION_ERROR;
2486 End If;
2487
2488 i := 0;
2489 FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN')
2490 LOOP
2491
2492 i := i + 1;
2493 print( l_api_name, 'DELETE:'||to_char(l_strms_orig_rec.strm_id));
2494 l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
2495 l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
2496 l_stmv_tbl(i).khr_id := p_chr_id;
2497 l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
2498 l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
2499
2500 END LOOP;
2501 FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT')
2502 LOOP
2503
2504 i := i + 1;
2505 print( l_api_name, 'DELETE:'||to_char(l_strms_rep_rec.strm_id));
2506 l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
2507 l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
2508 l_stmv_tbl(i).khr_id := p_chr_id;
2509 l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
2510 l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
2511
2512 END LOOP;
2513
2514 If ( i > 0 ) Then
2515
2516 Okl_Streams_pub.delete_streams(
2517 p_api_version => p_api_version,
2518 p_init_msg_list => p_init_msg_list,
2519 x_return_status => x_return_status,
2520 x_msg_count => x_msg_count,
2521 x_msg_data => x_msg_data,
2522 p_stmv_tbl => l_stmv_tbl);
2523
2524 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2525 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2526 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2527 RAISE OKL_API.G_EXCEPTION_ERROR;
2528 END IF;
2529
2530 End If;
2531
2532 print( l_api_name, 'end');
2533 EXCEPTION
2534 when OKL_API.G_EXCEPTION_ERROR then
2535 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2536 p_api_name => l_api_name,
2537 p_pkg_name => g_pkg_name,
2538 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
2539 x_msg_count => x_msg_count,
2540 x_msg_data => x_msg_data,
2541 p_api_type => g_api_type);
2542 x_return_status := l_return_status;
2543
2544 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2545 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2546 p_api_name => l_api_name,
2547 p_pkg_name => g_pkg_name,
2548 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2549 x_msg_count => x_msg_count,
2550 x_msg_data => x_msg_data,
2551 p_api_type => g_api_type);
2552 x_return_status := l_return_status;
2553
2554 when OTHERS then
2555 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2556 p_api_name => l_api_name,
2557 p_pkg_name => g_pkg_name,
2558 p_exc_name => 'OTHERS',
2559 x_msg_count => x_msg_count,
2560 x_msg_data => x_msg_data,
2561 p_api_type => g_api_type);
2562 x_return_status := l_return_status;
2563
2564
2565 End delete_working_streams;
2566
2567
2568 --Added by rgooty for bug 8399461
2569 -- Start of comments
2570 -- Procedure Name : get_pth_fee_due_amount
2571 -- Description : This procedure calculates and returns the passthrough
2572 -- fee payment due amount before payout out date
2573 -- End of comments
2574 PROCEDURE get_pth_fee_due_amount(p_chr_id IN NUMBER,
2575 p_kle_id IN NUMBER,
2576 p_prev_payout_date IN DATE,
2577 p_payout_date IN DATE,
2578 x_bill_amount OUT NOCOPY NUMBER,
2579 x_return_status OUT NOCOPY VARCHAR2) AS
2580 l_api_name CONSTANT VARCHAR2(30) := 'get_pth_fee_due_amount';
2581 l_payment_date DATE;
2582 l_arrears VARCHAR2(1) := NULL;
2583 l_recurrence_day NUMBER;
2584 l_rl_rec2 l_rl_csr2%ROWTYPE;
2585 l_num_of_periods NUMBER;
2586 l_period_start_date DATE;
2587 l_bill_amount NUMBER := 0;
2588 x_msg_data VARCHAR2(4000);
2589 x_msg_count NUMBER;
2590 l_arrears_pay_dates_option VARCHAR2(60);
2591 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
2592
2593 CURSOR c_arrears_option_at_sgt_csr (p_pdt_id NUMBER)
2594 IS
2595 SELECT tst.isg_arrears_pay_dates_option
2596 FROM okl_st_gen_tmpt_sets tst,
2597 okl_ae_tmpt_sets aes,
2598 okl_products pdt
2599 WHERE pdt.id = p_pdt_id
2600 AND aes.id = pdt.aes_id
2601 AND tst.id = aes.gts_id;
2602
2603 BEGIN
2604 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2605
2606 l_recurrence_day := NULL;
2607 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), p_kle_id);
2608 FETCH l_rl_csr2 INTO l_rl_rec2;
2609 IF l_rl_csr2%FOUND THEN
2610 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, p_kle_id) LOOP
2611 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
2612 IF(l_arrears IS NULL) THEN
2613 OPEN l_hdr_pdt_csr(p_chr_id);
2614 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
2615 CLOSE l_hdr_pdt_csr;
2616
2617 IF(g_rep_req_yn = 'Y') THEN
2618 OPEN c_arrears_option_at_sgt_csr(l_pdt_id_rec.report_pdt_id);
2619 FETCH c_arrears_option_at_sgt_csr INTO l_arrears_pay_dates_option;
2620 CLOSE c_arrears_option_at_sgt_csr;
2621 ELSE
2622 OPEN c_arrears_option_at_sgt_csr(l_pdt_id_rec.pid);
2623 FETCH c_arrears_option_at_sgt_csr INTO l_arrears_pay_dates_option;
2624 CLOSE c_arrears_option_at_sgt_csr;
2625 END IF;
2626 END IF;
2627 l_arrears := 'Y';
2628 ELSE
2629 l_arrears := 'N';
2630 END IF;
2631
2632 IF (l_rl_rec.rule_information7 IS NOT NULL OR
2633 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
2634 (l_rl_rec.rule_information8 IS NOT NULL OR
2635 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
2636 l_recurrence_day := NULL;
2637 IF(l_arrears = 'Y') THEN
2638 IF l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD' THEN
2639 l_payment_date := TRUNC(FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7));
2640 ELSE
2641 l_payment_date := TRUNC(FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7))-1;
2642 END IF;
2643 ELSE
2644 l_payment_date := TRUNC(FND_DATE.canonical_to_date(l_rl_rec.rule_information2));
2645 END IF;
2646
2647 IF (l_payment_date >= NVL(p_prev_payout_date,l_payment_date)) AND
2648 (l_payment_date < p_payout_date) THEN
2649 l_bill_amount := l_bill_amount + TO_NUMBER(l_rl_rec.rule_information8);
2650 ELSIF(l_payment_date >= p_payout_date) THEN
2651 EXIT;
2652 END IF;
2653 ELSE
2654 IF(l_recurrence_day IS NULL) THEN
2655 l_recurrence_day := TO_CHAR(TRUNC(FND_DATE.canonical_to_date(l_rl_rec.rule_information2)), 'DD');
2656 END IF;
2657
2658 l_num_of_periods := TO_NUMBER(l_rl_rec.RULE_INFORMATION3);
2659 l_period_start_date := TRUNC(FND_DATE.canonical_to_date(l_rl_rec.rule_information2));
2660 FOR k in 1 .. l_num_of_periods
2661 LOOP
2662 IF(l_arrears = 'Y') THEN
2663 l_payment_date := Okl_Lla_Util_Pvt.calculate_end_date(
2664 p_start_date => l_period_start_date,
2665 p_months => TO_NUMBER(l_rl_rec.decoded_object1_id1) * k,
2666 p_start_day => l_recurrence_day);
2667 IF l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD' THEN
2668 l_payment_date := l_payment_date + 1;
2669 END IF;
2670 ELSE
2671 l_payment_date := ADD_MONTHS(l_period_start_date, TO_NUMBER(l_rl_rec.decoded_object1_id1) * (k-1));
2672 END IF;
2673
2674 IF(l_payment_date >= NVL(p_prev_payout_date,l_payment_date)) AND
2675 (l_payment_date < p_payout_date) THEN
2676 l_bill_amount := l_bill_amount + TO_NUMBER(l_rl_rec.RULE_INFORMATION6);
2677 ELSIF(l_payment_date >= p_payout_date) THEN
2678 EXIT;
2679 END IF;
2680 END LOOP; --Periods Loop
2681 END IF;
2682 END LOOP; --SLL Loop
2683 END IF;
2684 CLOSE l_rl_csr2;
2685
2686 x_bill_amount := l_bill_amount;
2687
2688 EXCEPTION
2689 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2690 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2691 p_api_name => l_api_name,
2692 p_pkg_name => g_pkg_name,
2693 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
2694 x_msg_count => x_msg_count,
2695 x_msg_data => x_msg_data,
2696 p_api_type => g_api_type);
2697
2698 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2699 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2700 p_api_name => l_api_name,
2701 p_pkg_name => g_pkg_name,
2702 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2703 x_msg_count => x_msg_count,
2704 x_msg_data => x_msg_data,
2705 p_api_type => g_api_type);
2706
2707 WHEN OTHERS THEN
2708 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2709 p_api_name => l_api_name,
2710 p_pkg_name => g_pkg_name,
2711 p_exc_name => 'OTHERS',
2712 x_msg_count => x_msg_count,
2713 x_msg_data => x_msg_data,
2714 p_api_type => g_api_type);
2715
2716 END get_pth_fee_due_amount;
2717
2718
2719 -- Start of comments
2720 -- Procedure Name : consolidate_pth_acc_streams
2721 -- Description : This procedure sorts and consolidates the Passthrough
2722 -- Expense Accrual Stream elements
2723 -- End of comments
2724 PROCEDURE consolidate_pth_acc_streams(p_chr_id IN NUMBER,
2725 p_selv_tbl IN okl_streams_pub.selv_tbl_type,
2726 x_selv_tbl OUT NOCOPY okl_streams_pub.selv_tbl_type,
2727 x_return_status OUT NOCOPY VARCHAR2) AS
2728
2729 l_api_name CONSTANT VARCHAR2(30) := 'consolidate_pth_acc_streams';
2730 l_tmp_selv_tbl okl_streams_pub.selv_tbl_type;
2731 i NUMBER;
2732 j NUMBER;
2733 x_msg_data VARCHAR2(4000);
2734 x_msg_count NUMBER;
2735 l_init_loop BOOLEAN := TRUE;
2736 l_sort_line_number NUMBER := 0;
2737 l_next_lowest_date DATE;
2738 l_rec_exists BOOLEAN := FALSE;
2739
2740 BEGIN
2741 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2742
2743 l_tmp_selv_tbl := p_selv_tbl;
2744
2745 -- Start sorting and consolidation
2746 IF(l_tmp_selv_tbl.COUNT > 0) THEN
2747 FOR j IN 1..l_tmp_selv_tbl.COUNT loop
2748 -- find the lowest date value in the original table
2749 FOR i in 1..l_tmp_selv_tbl.LAST loop
2750 IF l_init_loop THEN
2751 IF l_tmp_selv_tbl.EXISTS(i) THEN
2752 l_next_lowest_date := l_tmp_selv_tbl(i).stream_element_date;
2753 l_init_loop := FALSE;
2754 END IF;
2755 END IF;
2756 IF l_tmp_selv_tbl.EXISTS(i) AND l_tmp_selv_tbl(i).stream_element_date < l_next_lowest_date THEN
2757 l_next_lowest_date := l_tmp_selv_tbl(i).stream_element_date;
2758 END IF;
2759 END LOOP;
2760
2761 -- reset flag, ready for use again
2762 l_init_loop := TRUE;
2763 l_rec_exists := FALSE;
2764 FOR i IN 1..l_tmp_selv_tbl.LAST LOOP
2765 IF l_tmp_selv_tbl.EXISTS(i) AND l_tmp_selv_tbl(i).stream_element_date = l_next_lowest_date THEN
2766 IF l_rec_exists THEN
2767 x_selv_tbl(l_sort_line_number).amount := x_selv_tbl(l_sort_line_number).amount + l_tmp_selv_tbl(i).amount;
2768 ELSE
2769 l_sort_line_number := l_sort_line_number+1;
2770 x_selv_tbl(l_sort_line_number).se_line_number := l_sort_line_number;
2771 x_selv_tbl(l_sort_line_number).stream_element_date := l_tmp_selv_tbl(i).stream_element_date;
2772 x_selv_tbl(l_sort_line_number).amount := l_tmp_selv_tbl(i).amount;
2773 l_rec_exists := TRUE;
2774 END IF;
2775 l_tmp_selv_tbl.DELETE(i);
2776 END IF;
2777 END LOOP;
2778 EXIT WHEN l_tmp_selv_tbl.LAST IS NULL;
2779 END LOOP;
2780 END IF;
2781 -- End sorting and consolidation
2782
2783 EXCEPTION
2784 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2785 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2786 p_api_name => l_api_name,
2787 p_pkg_name => g_pkg_name,
2788 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
2789 x_msg_count => x_msg_count,
2790 x_msg_data => x_msg_data,
2791 p_api_type => g_api_type);
2792
2793 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2794 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2795 p_api_name => l_api_name,
2796 p_pkg_name => g_pkg_name,
2797 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2798 x_msg_count => x_msg_count,
2799 x_msg_data => x_msg_data,
2800 p_api_type => g_api_type);
2801
2802 WHEN OTHERS THEN
2803 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2804 p_api_name => l_api_name,
2805 p_pkg_name => g_pkg_name,
2806 p_exc_name => 'OTHERS',
2807 x_msg_count => x_msg_count,
2808 x_msg_data => x_msg_data,
2809 p_api_type => g_api_type);
2810
2811 END consolidate_pth_acc_streams;
2812
2813
2814 -- Start of comments
2815 -- Procedure Name : get_passthru_exp_accruals
2816 -- Description : This procedure generates the Passthrough Expense
2817 -- Accrual Stream elements
2818 -- End of comments
2819 PROCEDURE get_passthru_exp_accruals(p_chr_id IN NUMBER,
2820 p_disb_amount IN NUMBER,
2821 p_start_date IN DATE,
2822 p_end_date IN DATE,
2823 x_selv_tbl OUT NOCOPY okl_streams_pub.selv_tbl_type,
2824 x_return_status OUT NOCOPY VARCHAR2) AS
2825
2826 l_api_name CONSTANT VARCHAR2(30) := 'get_passthru_exp_accruals';
2827 l_end_date DATE;
2828 l_total_days NUMBER;
2829 l_daily_amt NUMBER;
2830 l_start_date DATE;
2831 l_month_end DATE;
2832 l_disb_amt_bal NUMBER;
2833 l_days NUMBER;
2834 i BINARY_INTEGER := 0;
2835 x_msg_data VARCHAR2(4000);
2836 x_msg_count NUMBER;
2837 l_rounded_amount NUMBER;
2838 l_currency_code OKC_K_HEADERS_B.CURRENCY_CODE%TYPE;
2839 l_day_convention_month VARCHAR2(30);
2840 l_day_convention_year VARCHAR2(30);
2841
2842 --Cursor to get the contract currency code
2843 CURSOR get_currency_code
2844 IS
2845 SELECT CURRENCY_CODE
2846 FROM OKC_K_HEADERS_B
2847 WHERE ID = p_chr_id;
2848
2849 BEGIN
2850
2851 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2852
2853 --Get the day convention
2854 OKL_PRICING_UTILS_PVT.get_day_convention(
2855 p_id => p_chr_id,
2856 p_source => 'ISG',
2857 x_days_in_month => l_day_convention_month,
2858 x_days_in_year => l_day_convention_year,
2859 x_return_status => x_return_status);
2860 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
2861 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2862 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
2863 RAISE OKL_API.G_EXCEPTION_ERROR;
2864 END IF;
2865
2866 OPEN get_currency_code;
2867 FETCH get_currency_code INTO l_currency_code;
2868 CLOSE get_currency_code;
2869
2870 okl_accounting_util.round_amount(p_api_version => 1.0,
2871 p_init_msg_list => OKL_API.G_FALSE,
2872 x_return_status => x_return_status,
2873 x_msg_count => x_msg_count,
2874 x_msg_data => x_msg_data,
2875 p_amount => p_disb_amount,
2876 p_currency_code => l_currency_code,
2877 p_round_option => 'STM',
2878 x_rounded_amount => l_disb_amt_bal);
2879 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
2880 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2881 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
2882 RAISE OKL_API.G_EXCEPTION_ERROR;
2883 END IF;
2884
2885 l_start_date := p_start_date;
2886 l_end_date := p_end_date;
2887 l_month_end := LAST_DAY(l_start_date);
2888
2889 l_total_days := OKL_PRICING_UTILS_PVT.get_day_count(
2890 p_start_date => l_start_date,
2891 p_days_in_month => l_day_convention_month,
2892 p_days_in_year => l_day_convention_year,
2893 p_end_date => l_end_date,
2894 p_arrears => 'Y',
2895 x_return_status => x_return_status);
2896 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
2897 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2898 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
2899 RAISE OKL_API.G_EXCEPTION_ERROR;
2900 END IF;
2901
2902 l_daily_amt := p_disb_amount / l_total_days;
2903
2904 LOOP
2905 i := i + 1;
2906 IF TO_CHAR(l_month_end, 'MON') IN ('JAN', 'MAR', 'MAY', 'JUL', 'AUG', 'OCT', 'DEC') THEN
2907 x_selv_tbl(i).stream_element_date := l_month_end - 1;
2908 ELSE
2909 x_selv_tbl(i).stream_element_date := l_month_end;
2910 END IF;
2911
2912 x_selv_tbl(i).se_line_number := i;
2913
2914 IF l_month_end >= l_end_date THEN
2915 okl_accounting_util.round_amount(p_api_version => 1.0,
2916 p_init_msg_list => OKL_API.G_FALSE,
2917 x_return_status => x_return_status,
2918 x_msg_count => x_msg_count,
2919 x_msg_data => x_msg_data,
2920 p_amount => l_disb_amt_bal,
2921 p_currency_code => l_currency_code,
2922 p_round_option => 'STM',
2923 x_rounded_amount => l_rounded_amount);
2924 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
2925 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2926 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
2927 RAISE OKL_API.G_EXCEPTION_ERROR;
2928 END IF;
2929
2930 x_selv_tbl(i).amount := l_rounded_amount;
2931 EXIT;
2932 ELSE
2933 l_days := OKL_PRICING_UTILS_PVT.get_day_count(
2934 p_start_date => l_start_date,
2935 p_days_in_month => l_day_convention_month,
2936 p_days_in_year => l_day_convention_year,
2937 p_end_date => l_month_end,
2938 p_arrears => 'Y',
2939 x_return_status => x_return_status);
2940 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
2941 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2942 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
2943 RAISE OKL_API.G_EXCEPTION_ERROR;
2944 END IF;
2945
2946 okl_accounting_util.round_amount(p_api_version => 1.0,
2947 p_init_msg_list => OKL_API.G_FALSE,
2948 x_return_status => x_return_status,
2949 x_msg_count => x_msg_count,
2950 x_msg_data => x_msg_data,
2951 p_amount => l_days * l_daily_amt,
2952 p_currency_code => l_currency_code,
2953 p_round_option => 'STM',
2954 x_rounded_amount => l_rounded_amount);
2955 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
2956 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2957 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
2958 RAISE OKL_API.G_EXCEPTION_ERROR;
2959 END IF;
2960
2961 x_selv_tbl(i).amount := l_rounded_amount;
2962 END IF;
2963
2964 l_disb_amt_bal := l_disb_amt_bal - x_selv_tbl(i).amount;
2965 l_start_date := LAST_DAY(l_start_date) + 1;
2966 l_month_end := ADD_MONTHS(l_month_end, 1);
2967
2968 END LOOP;
2969
2970 EXCEPTION
2971 when OKL_API.G_EXCEPTION_ERROR then
2972 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2973 p_api_name => l_api_name,
2974 p_pkg_name => g_pkg_name,
2975 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
2976 x_msg_count => x_msg_count,
2977 x_msg_data => x_msg_data,
2978 p_api_type => g_api_type);
2979
2980 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2981 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2982 p_api_name => l_api_name,
2983 p_pkg_name => g_pkg_name,
2984 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2985 x_msg_count => x_msg_count,
2986 x_msg_data => x_msg_data,
2987 p_api_type => g_api_type);
2988
2989 when OTHERS then
2990 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2991 p_api_name => l_api_name,
2992 p_pkg_name => g_pkg_name,
2993 p_exc_name => 'OTHERS',
2994 x_msg_count => x_msg_count,
2995 x_msg_data => x_msg_data,
2996 p_api_type => g_api_type);
2997
2998 END get_passthru_exp_accruals;
2999 --end rgooty for bug 8399461
3000
3001
3002
3003 ---------------------------------------------------------------------------------------------
3004 -- Procedure adjust_passthrough_streams to handle passthrough streams.
3005 ---------------------------------------------------------------------------------------------
3006 -- 10-Aug-09 sechawla 8677460 PRB ESG Enhancements : Support PRB for Pass Through accrual streams
3007 PROCEDURE adjust_passthrough_streams(
3008 p_api_version IN NUMBER,
3009 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3010 x_return_status OUT NOCOPY VARCHAR2,
3011 x_msg_count OUT NOCOPY NUMBER,
3012 x_msg_data OUT NOCOPY VARCHAR2,
3013 p_chr_id IN VARCHAR2,
3014 p_purpose IN VARCHAR2) AS
3015 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_PASSTHROUGH_STREAMS';
3016 i BINARY_INTEGER := 0;
3017 --srsreeni Bug 5917582 start
3018 j BINARY_INTEGER := 0;
3019 --srsreeni Bug 5917582 end
3020 l_passthru_percent NUMBER := 0;
3021 --l_sty_id NUMBER;
3022 l_sty_id strm_rec_type;
3023 l_sty_name VARCHAR2(150);
3024 lx_return_status VARCHAR2(1);
3025 lx_isAllowed BOOLEAN;
3026 lx_passStatus VARCHAR2(30);
3027 lx_failStatus VARCHAR2(30);
3028 c_kle_id NUMBER;
3029 c_sty_id NUMBER;
3030 v_adj_amt NUMBER;
3031 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
3032 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
3033 l_selv_tbl okl_streams_pvt.selv_tbl_type;
3034 l_pt_tbl okl_streams_pub.selv_tbl_type;
3035 --srsreeni Bug 5917582 start
3036 l_pt_tbl_tmp okl_streams_pub.selv_tbl_type;
3037 --srsreeni Bug 5917582 end
3038 lx_selv_tbl okl_streams_pvt.selv_tbl_type;
3039 l_stmv_rec okl_streams_pub.stmv_rec_type;
3040 lx_stmv_rec okl_streams_pub.stmv_rec_type;
3041 --srsreeni bug 5869271 start add
3042 l_old_cle_id okc_k_lines_b.ID%TYPE;
3043 l_old_sty_id okl_strm_type_b.ID%TYPE;
3044 l_old_str_stmv_rec okl_streams_pub.stmv_rec_type;
3045 l_old_acr_stmv_rec okl_streams_pub.stmv_rec_type;
3046 l_last_se_line_number OKL_STRM_ELEMENTS_V.SE_LINE_NUMBER%TYPE;
3047 l_last_acr_se_line_number OKL_STRM_ELEMENTS_V.SE_LINE_NUMBER%TYPE;
3048 --srsreeni bug 5869271 end add
3049 l_purpose_code VARCHAR2(30) := p_purpose;
3050 -- To get the header information
3051 CURSOR c_hdr
3052 IS
3053 SELECT chr.template_yn,
3054 chr.currency_code,
3055 chr.start_date,
3056 chr.end_date, --sechawla 10-aug-09 : added
3057 khr.deal_type,
3058 khr.term_duration,
3059 NVL(khr.generate_accrual_yn, 'Y')
3060 FROM okc_k_headers_b chr,
3061 okl_k_headers khr
3062 WHERE khr.id = p_chr_id
3063 AND chr.id = khr.id;
3064
3065 --Added order by rul2.rule_information2 by djanaswa for bug 6007644
3066 -- To get the payment information
3067 CURSOR c_inflows
3068 IS
3069 SELECT rgp.cle_id cle_id,
3070 TO_NUMBER(rul1.object1_id1) sty_id,
3071 FND_DATE.canonical_to_date(rul2.rule_information2) start_date,
3072 TO_NUMBER(rul2.rule_information3) periods,
3073 -- srsreeni Bug 5917582 start
3074 TO_NUMBER(rul2.rule_information7) stub_days,
3075 TO_NUMBER(rul2.rule_information8) stub_amount,
3076 -- srsreeni Bug 5917582 end
3077 rul2.object1_id1 frequency,
3078 rul2.rule_information5 structure,
3079 DECODE(rul2.rule_information10, 'Y', 'ARREARS', 'ADVANCE') advance_arrears,
3080 FND_NUMBER.canonical_to_number(rul2.rule_information6) amount,
3081 lse.lty_code lty_code,
3082 kle.capital_amount capital_amount,
3083 kle.residual_value residual_value
3084 FROM okc_rule_groups_b rgp,
3085 okc_rules_b rul1,
3086 okc_rules_b rul2,
3087 okc_k_lines_b cle,
3088 okl_k_lines kle,
3089 okc_line_styles_b lse
3090 WHERE rul2.dnz_chr_id = p_chr_id
3091 AND rul2.rule_information_category = 'LASLL'
3092 AND rgp.RGD_CODE = 'LALEVL'
3093 AND rul2.rgp_id = rgp.id
3094 AND TO_NUMBER(rul2.object2_id1) = rul1.id
3095 AND rgp.cle_id = cle.id
3096 AND cle.sts_code IN ('PASSED','TERMINATED', 'COMPLETE')
3097 AND lse.lty_code = 'FEE'
3098 AND kle.fee_type = 'PASSTHROUGH'
3099 AND cle.id = kle.id
3100 AND cle.lse_id = lse.id
3101 --srsreeni bug 5869271 start add
3102 ORDER BY cle_id,sty_id, FND_DATE.canonical_to_date(rul2.rule_information2);
3103 --srsreeni bug 5869271 end add
3104 -- To get the streams information
3105 CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
3106 SELECT 'Y' What
3107 FROM dual
3108 WHERE EXISTS(SELECT stm.id stmid
3109 FROM okl_streams stm
3110 WHERE stm.khr_id = khrid
3111 --AND stm.say_code = 'CURR'
3112 AND stm.say_code = 'WORK'
3113 AND stm.sgn_code = 'STMP'
3114 AND NVL(stm.purpose_code, 'ORIGIN') = p
3115 AND stm.active_yn = 'N');
3116 -- To get the stream information
3117 CURSOR l_stm_csr(khrid NUMBER, kleid NUMBER, styid NUMBER, p VARCHAR2) IS
3118 SELECT stm.id stmid
3119 FROM okl_streams stm
3120 WHERE stm.khr_id = khrid
3121 AND stm.kle_id = kleid
3122 AND stm.sty_id = styid
3123 AND stm.say_code = 'CURR'
3124 AND nvl(stm.purpose_code, 'ORIGIN') = p
3125 AND stm.active_yn = 'Y';
3126
3127 -- Added for user defined streams HKPATEL
3128 Cursor dependent_sty_csr (payment_type_id NUMBER, p_purpose VARCHAR2)
3129 IS
3130 Select dependent_sty_id,dependent_sty_name
3131 FROM OKL_STRM_TMPT_LINES_UV where primary_sty_id = payment_type_id
3132 and pdt_id = (select pdt_id from okl_k_headers where id = p_chr_id)
3133 and dependent_sty_purpose = p_purpose
3134 and dependent_sty_id is not null;
3135
3136 l_dependent_strm_rec dependent_sty_csr%ROWTYPE;
3137 -- Added code ends here
3138 l_rl_rec1 l_rl_csr1%ROWTYPE;
3139 l_stm_rec l_stm_csr%ROWTYPE;
3140 l_stmp_yn_rec l_stmp_yn_csr%ROWTYPE;
3141 l_hdr c_hdr%ROWTYPE;
3142 l_hdr_rec l_hdr_csr%ROWTYPE;
3143 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
3144 l_pdt_id NUMBER;
3145 l_primary_sty_id NUMBER;
3146
3147 -- gboomina Bug 4746368 - Added - Start
3148 l_pt_pro_fee_tbl okl_streams_pub.selv_tbl_type;
3149 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
3150 -- gboomina Bug 4746368 - Added - End
3151 --srsreeni Bug 5917582 start
3152 l_pt_pro_fee_tbl_tmp okl_streams_pub.selv_tbl_type;
3153 --srsreeni Bug 5917582 end
3154
3155 --Added by djanaswa for bug 6007644
3156 l_recurrence_date DATE := NULL;
3157 l_old_cleId NUMBER;
3158 l_old_styId NUMBER;
3159 --end djanaswa
3160
3161 --sechawla 10-aug-09 : PRB ESG enhancements : begin
3162 cursor get_rebook_type is
3163 select nvl(amort_inc_adj_rev_dt_yn, 'N')
3164 from okl_sys_acct_opts;
3165
3166 -- Prospective Rebooking Enhancement
3167 CURSOR sg_during_rbk_csr( p_khr_id IN NUMBER)
3168 IS
3169 SELECT rbk_chr.contract_number rbk_contract_number,
3170 rbk_chr.orig_system_id1 original_chr_id,
3171 trx.rbr_code rbk_reason_code,
3172 trx.date_transaction_occurred revision_date,
3173 'ONLINE_REBOOK' rebook_type
3174 ,rbk_chr.start_date rbk_chr_start_date
3175 ,orig_chr.start_date orig_chr_start_date
3176 FROM okc_k_headers_all_b rbk_chr,
3177 okc_k_headers_all_b orig_chr,
3178 okl_trx_contracts_all trx
3179 WHERE rbk_chr.id = p_khr_id
3180 AND rbk_chr.orig_system_source_code = 'OKL_REBOOK'
3181 AND trx.khr_id_new = rbk_chr.id
3182 AND trx.tsu_code = 'ENTERED'
3183 AND trx.tcn_type = 'TRBK'
3184 AND rbk_chr.orig_system_id1 = orig_chr.id
3185 UNION
3186 SELECT orig_chr.contract_number rbk_contract_number,
3187 orig_chr.id original_chr_id,
3188 trx.rbr_code rbk_reason_code,
3189 trx.date_transaction_occurred revision_date,
3190 'MASS_REBOOK' rebook_type
3191 ,orig_chr.start_date rbk_chr_start_date
3192 ,orig_chr.start_date orig_chr_start_date
3193 FROM okc_k_headers_all_b orig_chr,
3194 okl_trx_contracts_all trx
3195 WHERE orig_chr.id = p_khr_id
3196 AND trx.khr_id = orig_chr.id
3197 AND trx.tsu_code = 'ENTERED'
3198 AND trx.tcn_type = 'TRBK'
3199 AND EXISTS
3200 (
3201 SELECT '1'
3202 FROM okl_rbk_selected_contract rbk_chr
3203 WHERE rbk_chr.khr_id = orig_chr.id
3204 AND rbk_chr.status <> 'PROCESSED'
3205 );
3206
3207 l_PROSPECTIVE_REBOOK_YN VARCHAR2(1);
3208 l_is_during_rebook_yn VARCHAR2(3);
3209 l_rebook_date DATE;
3210 l_prb_orig_khr_id NUMBER;
3211 l_rebook_type VARCHAR2(100);
3212 l_orig_khr_start_date DATE;
3213 l_rbk_khr_start_date DATE;
3214 --sechawla 10-aug-09 : PRB ESG enhancements : end
3215
3216 --Added by rgooty for bug 8399461
3217 --Cursor to get the Passthrough Disbursement information
3218 CURSOR c_pass(khrId NUMBER, cleId NUMBER) IS
3219 SELECT vDtls.DISBURSEMENT_BASIS,
3220 vDtls.DISBURSEMENT_FIXED_AMOUNT,
3221 vDtls.DISBURSEMENT_PERCENT,
3222 vDtls.PAYMENT_START_DATE,
3223 vDtls.PAYMENT_FREQUENCY,
3224 chr.END_DATE CONTRACT_END_DATE
3225 FROM okl_party_payment_hdr vHdr,
3226 okl_party_payment_dtls vDtls,
3227 okc_k_headers_b chr
3228 WHERE vDtls.payment_hdr_id = vHdr.id
3229 AND vHdr.CLE_ID = cleId
3230 AND vHdr.DNZ_CHR_ID = khrId
3231 AND vHdr.PASSTHRU_TERM = 'BASE'
3232 AND vHdr.DNZ_CHR_ID = chr.id;
3233
3234 --Cursor to get the fee payment frequency
3235 CURSOR c_feepayment_freq(khrId NUMBER, cleId NUMBER) IS
3236 SELECT rul.object1_id1 frequency
3237 FROM okc_rule_groups_b rgp,
3238 okc_rules_b rul
3239 WHERE rgp.dnz_chr_id = khrId
3240 AND rgp.cle_id = cleId
3241 AND rgp.RGD_CODE = 'LALEVL'
3242 AND rgp.id = rul.rgp_id
3243 AND rul.RULE_INFORMATION_CATEGORY = 'LASLL'
3244 AND ROWNUM < 2;
3245
3246 l_disb_amount NUMBER;
3247 l_frequency VARCHAR2(1);
3248 l_pay_start_date DATE;
3249 l_pay_end_date DATE;
3250 l_months_factor NUMBER;
3251 l_pth_selv_tbl okl_streams_pub.selv_tbl_type;
3252 l_pth_exp_selv_tbl okl_streams_pub.selv_tbl_type;
3253 l_bill_amount NUMBER;
3254 l_prev_pay_start_date DATE;
3255 --end rgooty
3256
3257 BEGIN
3258 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3259 -- Call start_activity to create savepoint, check compatibility
3260 -- and initialize message list
3261 x_return_status := OKL_API.START_ACTIVITY (
3262 l_api_name
3263 ,p_init_msg_list
3264 ,'_PVT'
3265 ,x_return_status);
3266 -- Check if activity started successfully
3267 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3268 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3269 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3270 RAISE OKL_API.G_EXCEPTION_ERROR;
3271 END IF;
3272 OPEN l_stmp_yn_csr( TO_NUMBER(p_chr_id), p_purpose);
3273 FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
3274 CLOSE l_stmp_yn_csr;
3275 IF ( NVL(l_stmp_yn_rec.What, 'N') = 'N' ) THEN
3276 RETURN;
3277 END IF;
3278 OPEN c_hdr;
3279 FETCH c_hdr INTO l_hdr;
3280 CLOSE c_hdr;
3281 l_stmv_tbl.delete;
3282 FOR l_inflow IN c_inflows LOOP
3283 OPEN l_rl_csr1 ( 'LAPSTH', 'LAPTPR', TO_NUMBER(p_chr_id), l_inflow.cle_id );
3284 FETCH l_rl_csr1 INTO l_rl_rec1;
3285 CLOSE l_rl_csr1;
3286 l_passthru_percent := nvl( l_rl_rec1.rule_information1, 0.0 );
3287 /*Commented for bug 4203804
3288 i := 0;
3289 FOR l_stm_rec in l_stm_csr(p_chr_id, l_inflow.cle_id, l_inflow.sty_id, p_purpose) LOOP
3290 i := i + 1;
3291 l_stmv_tbl(i).id := l_stm_rec.stmid;
3292 END LOOP;
3293 IF ( i > 0 ) THEN
3294 okl_streams_pub.delete_streams(p_api_version => p_api_version,
3295 x_return_status => x_return_status,
3296 p_init_msg_list => p_init_msg_list,
3297 x_msg_count => x_msg_count,
3298 x_msg_data => x_msg_data,
3299 p_stmv_tbl => l_stmv_tbl);
3300 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3301 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3302 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3303 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3304 END IF;
3305 END IF;
3306 */
3307
3308 --Added by djanaswa for bug 6007644
3309 IF((l_inflow.periods IS NULL) AND (l_inflow.stub_days IS NOT NULL)) THEN
3310 --Set the recurrence date to null for stub payment
3311 l_recurrence_date := NULL;
3312 ELSIF(l_recurrence_date IS NULL
3313 OR l_old_cleId <> l_inflow.cle_id
3314 OR l_old_styId <> l_inflow.sty_id) THEN
3315 --Set the recurrence date as periodic payment level start date
3316 l_recurrence_date := l_inflow.start_date;
3317 END IF;
3318 l_old_cleId := l_inflow.cle_id;
3319 l_old_styId := l_inflow.sty_id;
3320 --end djanaswa
3321
3322
3323 -- gboomina Bug 4746368 - Start
3324 -- calling get_stream_elements with l_pt_pro_fee_tbl parameter
3325 -- Added parameter p_recurrence_date by djanaswa for bug 6007644
3326 okl_stream_generator_pvt.get_stream_elements(
3327 p_start_date => l_inflow.start_date,
3328 p_periods => l_inflow.periods,
3329 p_frequency => l_inflow.frequency,
3330 p_structure => l_inflow.structure,
3331 p_advance_or_arrears => l_inflow.advance_arrears,
3332 p_amount => l_inflow.amount,
3333 --srsreeni Bug 5917582 start
3334 --p_stub_days => NULL,
3335 --p_stub_amount => NULL,
3336 p_stub_days => l_inflow.stub_days,
3337 p_stub_amount => l_inflow.stub_amount,
3338 --srsreeni Bug 5917582 end
3339 p_currency_code => l_hdr.currency_code,
3340 p_khr_id => p_chr_id,
3341 p_kle_id => l_inflow.cle_id,
3342 p_purpose_code => l_purpose_code,
3343 x_selv_tbl => l_selv_tbl,
3344 x_pt_tbl => l_pt_tbl,
3345 x_pt_pro_fee_tbl => l_pt_pro_fee_tbl,
3346 x_return_status => x_return_status,
3347 x_msg_count => x_msg_count,
3348 x_msg_data => x_msg_data,
3349 p_recurrence_date => l_recurrence_date);
3350 -- gboomina Bug 4746368 - End
3351 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3352 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3353 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3354 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3355 END IF;
3356
3357
3358
3359 -- Code commented and added for user defined streams - HKPATEL
3360 -- Payment level streams LASLL stream type
3361 -- Put the code for bug 4203804
3362 --srsreeni bug 5869271 start add
3363 IF (l_old_cle_id IS NULL OR (l_old_cle_id <> l_inflow.cle_id OR l_old_sty_id <> l_inflow.sty_id)) THEN
3364 --srsreeni bug 5869271 end add
3365 okl_stream_generator_pvt.get_stream_header(
3366 p_khr_id => p_chr_id,
3367 p_kle_id => l_inflow.cle_id,
3368 p_sty_id => l_inflow.sty_id,
3369 p_purpose_code => l_purpose_code,
3370 x_stmv_rec => l_stmv_rec,
3371 x_return_status => x_return_status);
3372 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3373 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3374 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3375 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3376 END IF;
3377 --l_stmv_rec.say_code := 'CURR';
3378 l_stmv_rec.say_code := 'WORK';
3379 l_stmv_rec.active_yn := 'Y';
3380 l_stmv_rec.date_working := SYSDATE;
3381 --Added by kthiruva on 09-Feb-2006
3382 --Bug 5029161 - Start of Changes
3383 IF l_selv_tbl.COUNT > 0 THEN
3384 okl_streams_pub.create_streams(p_api_version => p_api_version,
3385 p_init_msg_list => p_init_msg_list,
3386 x_return_status => x_return_status,
3387 x_msg_count => x_msg_count,
3388 x_msg_data => x_msg_data,
3389 p_stmv_rec => l_stmv_rec,
3390 p_selv_tbl => l_selv_tbl,
3391 x_stmv_rec => lx_stmv_rec,
3392 x_selv_tbl => lx_selv_tbl);
3393 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3394 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3395 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3396 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3397 END IF;
3398 END IF;
3399 --Bug 5029161 - End of Changes
3400 --srsreeni bug 5869271 start
3401 l_old_str_stmv_rec := lx_stmv_rec;
3402 l_last_se_line_number := l_selv_tbl(l_selv_tbl.LAST).se_line_number;
3403 ELSE
3404 -- populate the foreign key for the stream elements
3405 IF (l_selv_tbl.COUNT > 0) THEN
3406 i:= l_selv_tbl.FIRST;
3407 LOOP
3408 l_selv_tbl(i).stm_id := l_old_str_stmv_rec.id;
3409 l_last_se_line_number := l_last_se_line_number + 1;
3410 l_selv_tbl(i).se_line_number := l_last_se_line_number;
3411 EXIT WHEN(i = l_selv_tbl.LAST);
3412 i := l_selv_tbl.NEXT(i);
3413 END LOOP;
3414 -- populate the detail
3415 okl_streams_pub.create_stream_elements(
3416 p_api_version => p_api_version
3417 ,p_init_msg_list => p_init_msg_list
3418 ,x_return_status => x_return_status
3419 ,x_msg_count => x_msg_count
3420 ,x_msg_data => x_msg_data
3421 ,p_selv_tbl => l_selv_tbl
3422 ,x_selv_tbl => lx_selv_tbl);
3423 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3424 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3425 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3426 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3427 END IF;
3428 END IF;
3429 END IF;
3430 --srsreeni bug 5869271 end
3431
3432 okl_stream_generator_pvt.get_accrual_elements(
3433 p_start_date => l_inflow.start_date,
3434 p_periods => l_inflow.periods,
3435 p_frequency => l_inflow.frequency,
3436 p_structure => l_inflow.structure,
3437 p_advance_or_arrears => l_inflow.advance_arrears,
3438 p_amount => l_inflow.amount,
3439 --srsreeni Bug 5917582 start
3440 --p_stub_days => NULL,
3441 --p_stub_amount => NULL,
3442 p_stub_days => l_inflow.stub_days,
3443 p_stub_amount => l_inflow.stub_amount,
3444 --srsreeni Bug 5917582 end
3445 p_currency_code => l_hdr.currency_code,
3446 x_selv_tbl => l_selv_tbl,
3447 x_return_status => x_return_status);
3448 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3449 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3450 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3451 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3452 END IF;
3453
3454 --srsreeni bug 5869271 start add
3455 IF (l_old_cle_id IS NULL OR (l_old_cle_id <> l_inflow.cle_id OR l_old_sty_id <> l_inflow.sty_id)) THEN
3456 --srsreeni bug 5869271 end add
3457 -- Code commented and added for user defined streams - HKPATEL
3458 IF(g_rep_req_yn = 'Y') THEN
3459
3460 OPEN l_hdr_pdt_csr(p_chr_id);
3461 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
3462 CLOSE l_hdr_pdt_csr;
3463
3464 get_dep_no_prc_stream_type
3465 (
3466 p_khr_id => p_chr_id,
3467 p_pdt_id => l_pdt_id_rec.report_pdt_id,
3468 p_primary_sty_id => l_inflow.sty_id,
3469 p_dependent_sty_purpose => 'PASS_THRU_REV_ACCRUAL',
3470 x_return_status => x_return_status,
3471 x_dependent_sty_id => l_sty_id
3472 );
3473 IF x_return_status = 'E' THEN
3474 x_return_status := 'S';
3475 END IF;
3476
3477 ELSE
3478 get_dep_no_prc_stream_type
3479 (
3480 p_khr_id => p_chr_id,
3481 p_primary_sty_id => l_inflow.sty_id,
3482 p_dependent_sty_purpose => 'PASS_THRU_REV_ACCRUAL',
3483 x_return_status => x_return_status,
3484 x_dependent_sty_id => l_sty_id
3485 );
3486 IF x_return_status = 'E' THEN
3487 x_return_status := 'S';
3488 END IF;
3489
3490 END IF;
3491
3492 /*
3493 okl_stream_generator_pvt.get_sty_details (
3494 p_sty_name => 'PASS THROUGH REVENUE ACCRUAL',
3495 x_sty_id => l_sty_id,
3496 x_sty_name => l_sty_name,
3497 x_return_status => x_return_status);
3498 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3499 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3500 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3501 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3502 END IF;
3503 */
3504 -- Code commented and added for user defined streams ends here- HKPATEL
3505 IF(l_sty_id.id IS NOT NULL) THEN
3506 okl_stream_generator_pvt.get_stream_header(
3507 p_khr_id => p_chr_id,
3508 p_kle_id => l_inflow.cle_id,
3509 p_sty_id => l_sty_id.id,
3510 p_purpose_code => l_purpose_code,
3511 x_stmv_rec => l_stmv_rec,
3512 x_return_status => x_return_status);
3513 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3514 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3515 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3516 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3517 END IF;
3518 --l_stmv_rec.say_code := 'CURR';
3519 l_stmv_rec.say_code := 'WORK';
3520 l_stmv_rec.active_yn := 'Y';
3521 l_stmv_rec.date_working := SYSDATE;
3522 --Added by kthiruva on 09-Feb-2006
3523 --Bug 5029161 - Start of Changes
3524 IF l_selv_tbl.COUNT > 0 THEN
3525 okl_streams_pub.create_streams(p_api_version => p_api_version,
3526 p_init_msg_list => p_init_msg_list,
3527 x_return_status => x_return_status,
3528 x_msg_count => x_msg_count,
3529 x_msg_data => x_msg_data,
3530 p_stmv_rec => l_stmv_rec,
3531 p_selv_tbl => l_selv_tbl,
3532 x_stmv_rec => lx_stmv_rec,
3533 x_selv_tbl => lx_selv_tbl);
3534 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3535 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3536 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3537 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3538 END IF;
3539 END IF;
3540 --Bug 5029161 - Start of Changes
3541 --srsreeni bug 5869271 start add
3542 l_old_acr_stmv_rec := lx_stmv_rec;
3543 l_last_acr_se_line_number := l_selv_tbl(l_selv_tbl.LAST).se_line_number;
3544 END IF;
3545 ELSE
3546 -- populate the foreign key for the stream elements
3547 IF (l_selv_tbl.COUNT > 0) THEN
3548 i:= l_selv_tbl.FIRST;
3549 LOOP
3550 l_selv_tbl(i).stm_id := l_old_acr_stmv_rec.id;
3551 l_last_acr_se_line_number := l_last_acr_se_line_number + 1;
3552 l_selv_tbl(i).se_line_number := l_last_acr_se_line_number;
3553 EXIT WHEN(i = l_selv_tbl.LAST);
3554 i := l_selv_tbl.NEXT(i);
3555 END LOOP;
3556 -- populate the detail
3557 okl_streams_pub.create_stream_elements(
3558 p_api_version => p_api_version
3559 ,p_init_msg_list => p_init_msg_list
3560 ,x_return_status => x_return_status
3561 ,x_msg_count => x_msg_count
3562 ,x_msg_data => x_msg_data
3563 ,p_selv_tbl => l_selv_tbl
3564 ,x_selv_tbl => lx_selv_tbl);
3565 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3566 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3567 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3568 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3569 END IF;
3570 END IF;
3571 END IF;
3572 l_old_cle_id := l_inflow.cle_id;
3573 l_old_sty_id := l_inflow.sty_id;
3574 --srsreeni bug 5869271 ends
3575 -- Clear out reusable data structures
3576 l_sty_name := NULL;
3577 l_sty_id := NULL;
3578 l_stmv_rec := NULL;
3579 l_selv_tbl.delete;
3580 lx_stmv_rec := NULL;
3581 lx_selv_tbl.delete;
3582 END LOOP;
3583
3584
3585 -- gboomina - Bug 4746368 - Start
3586 -- moved PASS_THRU_EXP_ACCRUAL stream generation outside the Loop such that PASS_THRU_EXP_ACCRUAL will be dependent on PASS THROUGH FEE purpose.
3587 -------------------------------------------------------------------------------
3588 ---- Code for Generating PASS_THRU_EXP_ACCRUAL Streams ----
3589 -------------------------------------------------------------------------------
3590
3591 --Created separate API for generating pass through expense accrual streams
3592 --As part of bug 8624532 by NIKSHAH
3593 --API NAME: GENERATE_PASSTHRU_EXP_STREAMS
3594 --This api will be called from ESG (i.e. the next call) and from ISG
3595 -- (i.e. from OKL_STREAM_GENERATOR_PVT)
3596 GENERATE_PASSTHRU_EXP_STREAMS
3597 (
3598 p_api_version => p_api_version
3599 ,p_init_msg_list => p_init_msg_list
3600 ,P_CHR_ID => p_chr_id
3601 ,P_PURPOSE_CODE => l_purpose_code
3602 ,x_return_status => x_return_status
3603 ,x_msg_count => x_msg_count
3604 ,x_msg_data => x_msg_data
3605 );
3606
3607 -- gboomina Bug 4746368 - End
3608 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3609 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3610 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3611 RAISE OKL_API.G_EXCEPTION_ERROR;
3612 END IF;
3613
3614 --sechawla 15-SEP-2010 10045043 : begin
3615 -- Generate passthru service expense accrual streams for ESG
3616 -- ISG call for generating these streams is in
3617 -- okl_stream_generator_pvt.generate_streams, which calls OKL_LA_STREAM_PVT.GEN_PASSTHRU_SERV_EXP_STREAMS
3618 GEN_PASSTHRU_SERV_EXP_STREAMS
3619 (
3620 p_api_version => p_api_version
3621 ,p_init_msg_list => p_init_msg_list
3622 ,P_CHR_ID => p_chr_id
3623 ,P_PURPOSE_CODE => l_purpose_code
3624 ,x_return_status => x_return_status
3625 ,x_msg_count => x_msg_count
3626 ,x_msg_data => x_msg_data
3627 );
3628
3629
3630 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3631 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3632 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3633 RAISE OKL_API.G_EXCEPTION_ERROR;
3634 END IF;
3635 --sechawla 15-SEP-2010 10045043 : end
3636
3637 --------------------- sechawla 10-Aug-09 - begin ------------------------
3638 -- Just Before completing the Stream Generation Process, adjust the
3639 -- Accrual Streams based on the Straight Line Logic for Prospective Rebooking
3640 -- IF Prospective Rebooking Options is switched On
3641 -- And Stream Generation is during Rebook process,
3642 -- And the Rebook Date <> Contract Start Date
3643
3644 open get_rebook_type ;
3645 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN ;
3646 close get_rebook_type;
3647
3648
3649 IF l_PROSPECTIVE_REBOOK_YN = 'Y' THEN
3650 -- Inquire whether the Contract being processed is during Rebook or not
3651 l_is_during_rebook_yn := 'N';
3652 FOR t_rec IN sg_during_rbk_csr( p_khr_id => p_chr_id )
3653 LOOP
3654 l_is_during_rebook_yn := 'Y';
3655 l_rebook_date := t_rec.revision_date;
3656 l_prb_orig_khr_id := t_rec.original_chr_id;
3657 l_rebook_type := t_rec.rebook_type;
3658 l_orig_khr_start_date := TRUNC(t_rec.orig_chr_start_date);
3659 l_rbk_khr_start_date := TRUNC(t_rec.rbk_chr_start_date);
3660 END LOOP;
3661
3662 END IF;
3663
3664 write_to_log(l_api_name|| '--------------------------------------------------------' );
3665 write_to_log(l_api_name|| '--------------- Prospective Rebooking Changes ----------' );
3666 write_to_log(l_api_name|| '--------------------------------------------------------' );
3667 write_to_log(l_api_name|| 'l_prosp_rebook_flag : ' || l_PROSPECTIVE_REBOOK_YN );
3668 write_to_log(l_api_name|| 'l_is_during_rebook_yn : ' || l_is_during_rebook_yn);
3669 write_to_log(l_api_name|| 'l_rebook_date : ' || l_rebook_date );
3670 write_to_log(l_api_name|| 'l_hdr.start_date : ' || l_hdr.start_date );
3671 write_to_log(l_api_name|| 'l_prb_orig_khr_id : ' || l_prb_orig_khr_id );
3672 write_to_log(l_api_name|| 'l_orig_khr_start_date : ' || l_orig_khr_start_date );
3673 write_to_log(l_api_name|| 'l_rbk_khr_start_date : ' || l_rbk_khr_start_date );
3674
3675 IF l_rebook_type = 'ONLINE_REBOOK' AND
3676 l_orig_khr_start_date <> l_rbk_khr_start_date
3677 THEN
3678 -- Case: During Online Revision, Contract Start Date has been Changed
3679 -- Hence, consider this as a Retrospective Case only
3680 l_prospective_rebook_yn := 'N';
3681 END IF;
3682
3683
3684 IF l_PROSPECTIVE_REBOOK_YN = 'Y'
3685 AND l_is_during_rebook_yn = 'Y'
3686 AND l_rebook_date <> TRUNC(l_hdr.start_date)
3687 THEN
3688 IF l_purpose_code = 'ORIGIN'
3689 THEN
3690 l_purpose_code := '-99';
3691 ELSE
3692 l_purpose_code := 'REPORT';
3693 END IF;
3694
3695 --sechawla 15-SEP-2010 10045043 : Modified okl_stream_generator_pvt.prosp_adj_acc_strms for
3696 --purpose PASS_THRU_SVC_EXP_ACCRUAL, which is used to generate Passthru Service Expense Accrual Streams
3697 okl_stream_generator_pvt.prosp_adj_acc_strms(
3698 p_api_version => p_api_version
3699 ,p_init_msg_list => p_init_msg_list
3700 ,p_rebook_type => l_rebook_type
3701 ,p_rebook_date => l_rebook_date
3702 ,p_khr_id => p_chr_id
3703 ,p_deal_type => l_hdr.deal_type
3704 ,p_currency_code => l_hdr.currency_code
3705 ,p_start_date => l_hdr.start_date
3706 ,p_end_date => l_hdr.end_date
3707 ,p_context => 'PASSTHRU_ONLY'
3708 ,p_purpose_code => l_purpose_code
3709 ,x_return_status => x_return_status
3710 ,x_msg_count => x_msg_count
3711 ,x_msg_data => x_msg_data);
3712
3713 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3714 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3715 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3716 RAISE OKL_API.G_EXCEPTION_ERROR;
3717 END IF;
3718 END IF;
3719
3720
3721 OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME,
3722 p_msg_name => 'OKL_STREAM_GENERATION_SUCCESS');
3723
3724 --------------------- sechawla 10-Aug-09 - end ------------------------
3725
3726 OKL_API.END_ACTIVITY (x_msg_count,
3727 x_msg_data );
3728 EXCEPTION
3729 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3730 IF c_hdr%ISOPEN THEN
3731 CLOSE c_hdr;
3732 END IF;
3733 IF c_inflows%ISOPEN THEN
3734 CLOSE c_hdr;
3735 END IF;
3736 IF l_stmp_yn_csr%ISOPEN THEN
3737 CLOSE l_stmp_yn_csr;
3738 END IF;
3739 IF l_stm_csr%ISOPEN THEN
3740 CLOSE l_stm_csr;
3741 END IF;
3742 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3743 l_api_name,
3744 G_PKG_NAME,
3745 'OKL_API.G_RET_STS_ERROR',
3746 x_msg_count,
3747 x_msg_data,
3748 '_PVT');
3749 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3750 IF c_hdr%ISOPEN THEN
3751 CLOSE c_hdr;
3752 END IF;
3753 IF c_inflows%ISOPEN THEN
3754 CLOSE c_hdr;
3755 END IF;
3756 IF l_stmp_yn_csr%ISOPEN THEN
3757 CLOSE l_stmp_yn_csr;
3758 END IF;
3759 IF l_stm_csr%ISOPEN THEN
3760 CLOSE l_stm_csr;
3761 END IF;
3762 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3763 l_api_name,
3764 G_PKG_NAME,
3765 'OKL_API.G_RET_STS_UNEXP_ERROR',
3766 x_msg_count,
3767 x_msg_data,
3768 '_PVT');
3769 WHEN OTHERS THEN
3770 IF c_hdr%ISOPEN THEN
3771 CLOSE c_hdr;
3772 END IF;
3773 IF c_inflows%ISOPEN THEN
3774 CLOSE c_hdr;
3775 END IF;
3776 IF l_stmp_yn_csr%ISOPEN THEN
3777 CLOSE l_stmp_yn_csr;
3778 END IF;
3779 IF l_stm_csr%ISOPEN THEN
3780 CLOSE l_stm_csr;
3781 END IF;
3782 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3783 l_api_name,
3784 G_PKG_NAME,
3785 'OTHERS',
3786 x_msg_count,
3787 x_msg_data,
3788 '_PVT');
3789 END adjust_passthrough_streams;
3790
3791 ---------------------------------------------------------------------------------------------
3792 -- Procedure to create passthrough expense accrual streams which
3793 -- will be called from both ISG and ESG
3794 -- Created by NIKSHAH, 13-Aug-2009 as part of bug 8624532
3795 ---------------------------------------------------------------------------------------------
3796 PROCEDURE GENERATE_PASSTHRU_EXP_STREAMS
3797 (
3798 p_api_version IN NUMBER,
3799 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3800 P_CHR_ID IN NUMBER,
3801 P_PURPOSE_CODE IN VARCHAR2,
3802 x_return_status OUT NOCOPY VARCHAR2,
3803 x_msg_count OUT NOCOPY NUMBER,
3804 x_msg_data OUT NOCOPY VARCHAR2
3805 )
3806 AS
3807 l_api_name CONSTANT VARCHAR2(30) := 'GENERATE_PASSTHRU_EXP_STREAMS';
3808 i BINARY_INTEGER := 0;
3809 j BINARY_INTEGER := 0;
3810 l_purpose_code VARCHAR2(30) := p_purpose_code;
3811 l_pdt_id NUMBER;
3812 l_primary_sty_id NUMBER;
3813 l_disb_amount NUMBER;
3814 l_frequency VARCHAR2(1);
3815 l_pay_start_date DATE;
3816 l_pay_end_date DATE;
3817 l_months_factor NUMBER;
3818 l_bill_amount NUMBER;
3819 l_prev_pay_start_date DATE;
3820
3821 --Added by rgooty for bug 8399461
3822 --Cursor to get the Passthrough Disbursement information
3823 CURSOR c_pass(khrId NUMBER, cleId NUMBER) IS
3824 SELECT vDtls.DISBURSEMENT_BASIS,
3825 vDtls.DISBURSEMENT_FIXED_AMOUNT,
3826 vDtls.DISBURSEMENT_PERCENT,
3827 vDtls.PAYMENT_START_DATE,
3828 vDtls.PAYMENT_FREQUENCY,
3829 chr.END_DATE CONTRACT_END_DATE
3830 FROM okl_party_payment_hdr vHdr,
3831 okl_party_payment_dtls vDtls,
3832 okc_k_headers_b chr
3833 WHERE vDtls.payment_hdr_id = vHdr.id
3834 AND vHdr.CLE_ID = cleId
3835 AND vHdr.DNZ_CHR_ID = khrId
3836 AND vHdr.PASSTHRU_TERM = 'BASE'
3837 AND vHdr.DNZ_CHR_ID = chr.id;
3838
3839 --Cursor to get the service payment frequency
3840 --Bug 13448352: RGOOTY: Start:
3841 -- Modified the cursor to fetch the
3842 -- Payment Start Date and End Date
3843 CURSOR c_feepayment_freq(khrId NUMBER, cleId NUMBER) IS
3844 SELECT rul.object1_id1 payment_frequency
3845 ,MIN(pmnt.start_date) payment_period_start_date
3846 ,MAX(pmnt.end_date) payment_period_end_date
3847 FROM okc_rule_groups_b rgp
3848 ,okc_rules_b rul
3849 ,OKL_OR_PAYMENT_DETAILS_UV pmnt
3850 WHERE rgp.dnz_chr_id = khrId
3851 AND rgp.cle_id = cleId
3852 AND rgp.RGD_CODE = 'LALEVL'
3853 AND rgp.id = rul.rgp_id
3854 AND rul.RULE_INFORMATION_CATEGORY = 'LASLL'
3855 AND pmnt.dnz_chr_id = khrId
3856 AND pmnt.object2_id1 = rul.object2_id1
3857 AND pmnt.rul_lasll_id = rul.id
3858 GROUP BY rul.object1_id1;
3859
3860 -- Added by RGOOTY
3861 l_payment_frequency VARCHAR2(100);
3862 l_payment_period_start_date DATE;
3863 l_payment_period_end_date DATE;
3864 l_total_disb_amount NUMBER;
3865 --Bug 13448352: RGOOTY: End
3866
3867 l_pt_tbl_tmp okl_streams_pub.selv_tbl_type;
3868 l_pth_selv_tbl okl_streams_pub.selv_tbl_type;
3869 l_pth_exp_selv_tbl okl_streams_pub.selv_tbl_type;
3870 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
3871 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
3872 l_sty_id strm_rec_type;
3873 l_stmv_rec okl_streams_pub.stmv_rec_type;
3874 lx_stmv_rec okl_streams_pub.stmv_rec_type;
3875 lx_selv_tbl okl_streams_pvt.selv_tbl_type;
3876
3877 BEGIN
3878
3879 FOR l_lne_rec in l_line_rec_csr ( p_chr_id, 'FEE' )
3880 LOOP
3881 --Added by kthiruva on 04-Apr-2006
3882 --Perform the below processing only for Passthrough Fees
3883 --Bug 5137824 - Start of Changes
3884 IF (l_lne_rec.fee_type = 'PASSTHROUGH')
3885 THEN
3886 --Bug 13448352: RGOOTY: Start
3887 -- Execute the cursor to fetch the Payment Frequency, Start Date, End Date
3888 -- for accruing the Pass Through Service Expense accrual over the service/fee payment term
3889 FOR t_rec IN c_feepayment_freq(p_chr_id, l_lne_rec.id)
3890 LOOP
3891 l_payment_frequency := t_rec.payment_frequency;
3892 l_payment_period_start_date := t_rec.payment_period_start_date;
3893 l_payment_period_end_date := t_rec.payment_period_end_date;
3894 END LOOP;
3895 -- Initialize the disbursement amount
3896 l_total_disb_amount := 0;
3897 --Bug 13448352: RGOOTY: End
3898
3899 --Added by rgooty for bug 8399461
3900 l_pth_selv_tbl.delete;
3901 FOR r_pass IN c_pass(p_chr_id, l_lne_rec.id)
3902 LOOP
3903 l_pay_start_date := r_pass.PAYMENT_START_DATE;
3904 l_frequency := r_pass.PAYMENT_FREQUENCY;
3905 --If disbursement frequency is null then take the service/fee payment frequency
3906 IF(l_frequency IS NULL) THEN
3907 l_frequency := l_payment_frequency;
3908 END IF;
3909
3910 l_months_factor := OKL_STREAM_GENERATOR_PVT.get_months_factor(
3911 p_frequency => l_frequency,
3912 x_return_status => x_return_status);
3913 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3914 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3915 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3916 RAISE OKL_API.G_EXCEPTION_ERROR;
3917 END IF;
3918 l_prev_pay_start_date := NULL;
3919 LOOP
3920 IF (r_pass.disbursement_basis = 'PERCENT' ) THEN
3921 --When disbursement basis is PERCENT, then disbursement amount
3922 --is calculated by applying the percentage to all the billable
3923 --amounts due before the payout date
3924 get_pth_fee_due_amount(p_chr_id => p_chr_id,
3925 p_kle_id => l_lne_rec.id,
3926 p_prev_payout_date => l_prev_pay_start_date,
3927 p_payout_date => l_pay_start_date,
3928 x_bill_amount => l_bill_amount,
3929 x_return_status => x_return_status);
3930 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3931 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3932 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3933 RAISE OKL_API.G_EXCEPTION_ERROR;
3934 END IF;
3935 l_disb_amount := (l_bill_amount * r_pass.DISBURSEMENT_PERCENT)/100;
3936 ELSE
3937 l_disb_amount := r_pass.disbursement_fixed_amount;
3938 END IF;
3939 --Bug 13448352: RGOOTY
3940 -- Increment the l_total_disb_amount with the l_disb_amount
3941 l_total_disb_amount := l_total_disb_amount + NVL(l_disb_amount,0);
3942
3943 l_pay_end_date := ADD_MONTHS(l_pay_start_date, l_months_factor) - 1;
3944 IF(l_pay_end_date > r_pass.CONTRACT_END_DATE) THEN
3945 l_pay_end_date := r_pass.CONTRACT_END_DATE;
3946 END IF;
3947
3948 l_prev_pay_start_date := l_pay_start_date;
3949 l_pay_start_date := l_pay_end_date + 1;
3950 EXIT WHEN (l_pay_start_date > r_pass.CONTRACT_END_DATE);
3951 END LOOP;
3952 END LOOP;
3953
3954 --Bug 13448352: RGOOTY: Start
3955 -- In one go, generate the Service Expense Accruals using the total disbursement amount
3956 -- calculated as above and spread it over the Payment term
3957 get_passthru_exp_accruals(p_chr_id => p_chr_id,
3958 p_disb_amount => l_total_disb_amount,
3959 p_start_date => l_payment_period_start_date,
3960 p_end_date => l_payment_period_end_date,
3961 x_selv_tbl => l_pt_tbl_tmp,
3962 x_return_status => x_return_status);
3963 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR
3964 THEN
3965 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3966 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR
3967 THEN
3968 RAISE OKL_API.G_EXCEPTION_ERROR;
3969 END IF;
3970
3971 IF (l_pt_tbl_tmp.COUNT > 0)
3972 THEN
3973 i := l_pt_tbl_tmp.FIRST;
3974 j := 1;
3975 IF (l_pth_selv_tbl.COUNT > 0)
3976 THEN
3977 j := l_pth_selv_tbl.LAST + 1;
3978 END IF;
3979 LOOP
3980 l_pth_selv_tbl(j) := l_pt_tbl_tmp(i);
3981 l_pth_selv_tbl(j).se_line_number := j;
3982 EXIT WHEN (i = l_pt_tbl_tmp.LAST);
3983 i := l_pt_tbl_tmp.NEXT(i);
3984 j := j + 1;
3985 END LOOP;
3986 END IF;
3987 --Bug 13448352: RGOOTY: End
3988
3989 --Sort and consolidate the streams
3990 consolidate_pth_acc_streams(p_chr_id => p_chr_id,
3991 p_selv_tbl => l_pth_selv_tbl,
3992 x_selv_tbl => l_pth_exp_selv_tbl,
3993 x_return_status => x_return_status);
3994 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3995 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3996 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3997 RAISE OKL_API.G_EXCEPTION_ERROR;
3998 END IF;
3999 --end rgooty for bug 8399461
4000 OPEN fee_strm_type_csr ( l_lne_rec.id, 'FEE' );
4001 FETCH fee_strm_type_csr into l_fee_strm_type_rec;
4002 CLOSE fee_strm_type_csr;
4003 IF(g_rep_req_yn = 'Y') THEN
4004 OPEN l_hdr_pdt_csr(p_chr_id);
4005 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4006 CLOSE l_hdr_pdt_csr;
4007 l_pdt_id := l_pdt_id_rec.report_pdt_id;
4008 l_primary_sty_id := l_fee_strm_type_rec.styp_id;
4009 get_dep_no_prc_stream_type
4010 (
4011 p_khr_id => p_chr_id,
4012 p_pdt_id => l_pdt_id_rec.report_pdt_id,
4013 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
4014 p_dependent_sty_purpose => 'PASS_THRU_EXP_ACCRUAL',
4015 x_return_status => x_return_status,
4016 x_dependent_sty_id => l_sty_id
4017 );
4018 IF x_return_status = 'E' THEN
4019 x_return_status := 'S';
4020 END IF;
4021 ELSE
4022 get_dep_no_prc_stream_type
4023 (
4024 p_khr_id => p_chr_id,
4025 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
4026 p_dependent_sty_purpose => 'PASS_THRU_EXP_ACCRUAL',
4027 x_return_status => x_return_status,
4028 x_dependent_sty_id => l_sty_id
4029 );
4030 IF x_return_status = 'E' THEN
4031 x_return_status := 'S';
4032 END IF;
4033 END IF;
4034 IF(l_sty_id.id IS NOT NULL) THEN
4035 okl_stream_generator_pvt.get_stream_header(
4036 p_khr_id => p_chr_id,
4037 p_kle_id => l_lne_rec.id,
4038 p_sty_id => l_sty_id.id,
4039 p_purpose_code => l_purpose_code,
4040 x_stmv_rec => l_stmv_rec,
4041 x_return_status => x_return_status);
4042 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
4043 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
4044 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
4045 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
4046 END IF;
4047 l_stmv_rec.say_code := 'WORK';
4048 l_stmv_rec.active_yn := 'Y';
4049 l_stmv_rec.date_working := SYSDATE;
4050 --Added by kthiruva on 09-Feb-2006
4051 --Bug 5029161 - Start of Changes
4052 --Made change by bkatraga for bug 8226735
4053 IF l_pth_exp_selv_tbl.COUNT > 0 THEN
4054 okl_streams_pub.create_streams(p_api_version => p_api_version,
4055 p_init_msg_list => p_init_msg_list,
4056 x_return_status => x_return_status,
4057 x_msg_count => x_msg_count,
4058 x_msg_data => x_msg_data,
4059 p_stmv_rec => l_stmv_rec,
4060 p_selv_tbl => l_pth_exp_selv_tbl, --Changed by rgooty for bug 8399461
4061 x_stmv_rec => lx_stmv_rec,
4062 x_selv_tbl => lx_selv_tbl);
4063 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
4064 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
4065 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
4066 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
4067 END IF;
4068 END IF;
4069 --Bug 5029161 - End of Changes
4070 END IF;
4071 -- Clear out reusable data structures
4072 l_sty_id := NULL;
4073 l_stmv_rec := NULL;
4074 lx_stmv_rec := NULL;
4075 lx_selv_tbl.delete;
4076 END IF;
4077 --Bug 5137824 - End of Changes
4078 END LOOP;
4079 -- gboomina Bug 4746368 - End
4080 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4081 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4082 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4083 RAISE OKL_API.G_EXCEPTION_ERROR;
4084 END IF;
4085 EXCEPTION
4086 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4087 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4088 l_api_name,
4089 G_PKG_NAME,
4090 'OKL_API.G_RET_STS_ERROR',
4091 x_msg_count,
4092 x_msg_data,
4093 '_PVT');
4094 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4095 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4096 l_api_name,
4097 G_PKG_NAME,
4098 'OKL_API.G_RET_STS_UNEXP_ERROR',
4099 x_msg_count,
4100 x_msg_data,
4101 '_PVT');
4102 WHEN OTHERS THEN
4103 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4104 l_api_name,
4105 G_PKG_NAME,
4106 'OTHERS',
4107 x_msg_count,
4108 x_msg_data,
4109 '_PVT');
4110 END GENERATE_PASSTHRU_EXP_STREAMS;
4111
4112
4113 -- Start of comments
4114 --
4115 -- Procedure Name : GEN_PASSTHRU_SERV_EXP_STREAMS
4116 -- Description : This procedure creats passthrough service expense accrual streams which
4117 -- will be used for both ISG and ESG. For ESG, this procedure is called from
4118 -- okl_la_stream_pvt.adjust_passthrough_streams. For ISG, this procedure is called from
4119 -- okl_stream_generator_pvt.generate_streams
4120 -- Business Rules :
4121 -- Version : 1.0
4122 -- History : SECHAWLA 15-Sep-2010 - Bug# 10045043 Added new procedure GEN_PASSTHRU_SERV_EXP_STREAMS
4123
4124 PROCEDURE GEN_PASSTHRU_SERV_EXP_STREAMS
4125 (
4126 p_api_version IN NUMBER,
4127 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4128 P_CHR_ID IN NUMBER,
4129 P_PURPOSE_CODE IN VARCHAR2,
4130 x_return_status OUT NOCOPY VARCHAR2,
4131 x_msg_count OUT NOCOPY NUMBER,
4132 x_msg_data OUT NOCOPY VARCHAR2
4133 )
4134 AS
4135 l_api_name CONSTANT VARCHAR2(30) := 'GEN_PASSTHRU_SERV_EXP_STREAMS';
4136 i BINARY_INTEGER := 0;
4137 j BINARY_INTEGER := 0;
4138 l_purpose_code VARCHAR2(30) := p_purpose_code;
4139 l_pdt_id NUMBER;
4140 l_primary_sty_id NUMBER;
4141 l_disb_amount NUMBER;
4142 l_frequency VARCHAR2(1);
4143 l_pay_start_date DATE;
4144 l_pay_end_date DATE;
4145 l_months_factor NUMBER;
4146 l_bill_amount NUMBER;
4147 l_prev_pay_start_date DATE;
4148
4149
4150 --Cursor to get the Passthrough Disbursement information for the passthru service
4151 CURSOR c_pass(khrId NUMBER, cleId NUMBER) IS
4152 SELECT vDtls.DISBURSEMENT_BASIS,
4153 vDtls.DISBURSEMENT_FIXED_AMOUNT,
4154 vDtls.DISBURSEMENT_PERCENT,
4155 vDtls.PAYMENT_START_DATE,
4156 vDtls.PAYMENT_FREQUENCY,
4157 chr.END_DATE CONTRACT_END_DATE
4158 FROM okl_party_payment_hdr vHdr,
4159 okl_party_payment_dtls vDtls,
4160 okc_k_headers_b chr
4161 WHERE vDtls.payment_hdr_id = vHdr.id
4162 AND vHdr.CLE_ID = cleId
4163 AND vHdr.DNZ_CHR_ID = khrId
4164 AND vHdr.PASSTHRU_TERM = 'BASE'
4165 AND vHdr.DNZ_CHR_ID = chr.id;
4166
4167 --Cursor to get the service payment frequency
4168 --Bug 13448352: RGOOTY: Start:
4169 -- Modified the cursor to fetch the
4170 -- Payment Start Date and End Date
4171 CURSOR c_feepayment_freq(khrId NUMBER, cleId NUMBER) IS
4172 SELECT rul.object1_id1 payment_frequency
4173 ,MIN(pmnt.start_date) payment_period_start_date
4174 ,MAX(pmnt.end_date) payment_period_end_date
4175 FROM okc_rule_groups_b rgp
4176 ,okc_rules_b rul
4177 ,OKL_OR_PAYMENT_DETAILS_UV pmnt
4178 WHERE rgp.dnz_chr_id = khrId
4179 AND rgp.cle_id = cleId
4180 AND rgp.RGD_CODE = 'LALEVL'
4181 AND rgp.id = rul.rgp_id
4182 AND rul.RULE_INFORMATION_CATEGORY = 'LASLL'
4183 AND pmnt.dnz_chr_id = khrId
4184 AND pmnt.object2_id1 = rul.object2_id1
4185 AND pmnt.rul_lasll_id = rul.id
4186 GROUP BY rul.object1_id1;
4187
4188 -- Added by RGOOTY
4189 l_payment_frequency VARCHAR2(100);
4190 l_payment_period_start_date DATE;
4191 l_payment_period_end_date DATE;
4192 l_total_disb_amount NUMBER;
4193 --Bug 13448352: RGOOTY: End
4194
4195 l_pt_tbl_tmp okl_streams_pub.selv_tbl_type;
4196 l_pth_selv_tbl okl_streams_pub.selv_tbl_type;
4197 l_pth_exp_selv_tbl okl_streams_pub.selv_tbl_type;
4198 l_serv_strm_type_rec serv_strm_type_csr%ROWTYPE; --added this cursor in the spec
4199 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
4200 l_sty_id strm_rec_type;
4201 l_stmv_rec okl_streams_pub.stmv_rec_type;
4202 lx_stmv_rec okl_streams_pub.stmv_rec_type;
4203 lx_selv_tbl okl_streams_pvt.selv_tbl_type;
4204
4205 BEGIN
4206
4207 FOR l_lne_rec in l_line_rec_csr ( p_chr_id, 'SOLD_SERVICE' )
4208 LOOP
4209
4210 --check if this is a pssthru service line
4211 OPEN serv_strm_type_csr ( l_lne_rec.id, 'SOLD_SERVICE' );
4212 FETCH serv_strm_type_csr into l_serv_strm_type_rec;
4213 CLOSE serv_strm_type_csr;
4214
4215 -- IF (l_lne_rec.fee_type = 'PASSTHROUGH') THEN --Unlike fee line, Fee type is not set for service line
4216 IF l_serv_strm_type_rec.STREAM_TYPE_PURPOSE = 'PASS_THROUGH_SERVICE' THEN --use stream type purpose to identify if pasthru service
4217
4218 l_pth_selv_tbl.delete;
4219 --Bug 13448352: RGOOTY: Start
4220 -- Execute the cursor to fetch the Payment Frequency, Start Date, End Date
4221 -- for accruing the Pass Through Service Expense accrual over the service/fee payment term
4222 FOR t_rec IN c_feepayment_freq(p_chr_id, l_lne_rec.id)
4223 LOOP
4224 l_payment_frequency := t_rec.payment_frequency;
4225 l_payment_period_start_date := t_rec.payment_period_start_date;
4226 l_payment_period_end_date := t_rec.payment_period_end_date;
4227 END LOOP;
4228 --Bug 13448352: RGOOTY: End
4229 -- Initialize the disbursement amount
4230 l_total_disb_amount := 0;
4231 FOR r_pass IN c_pass(p_chr_id, l_lne_rec.id)
4232 LOOP
4233 l_pay_start_date := r_pass.PAYMENT_START_DATE;
4234 l_frequency := r_pass.PAYMENT_FREQUENCY;
4235 --If disbursement frequency is null then take the service/fee payment frequency
4236 IF(l_frequency IS NULL) THEN
4237 l_frequency := l_payment_frequency;
4238 END IF;
4239 l_months_factor := OKL_STREAM_GENERATOR_PVT.get_months_factor(
4240 p_frequency => l_frequency,
4241 x_return_status => x_return_status);
4242 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4243 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4244 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
4245 RAISE OKL_API.G_EXCEPTION_ERROR;
4246 END IF;
4247 l_prev_pay_start_date := NULL;
4248 LOOP
4249 IF (r_pass.disbursement_basis = 'PERCENT' ) THEN
4250 --When disbursement basis is PERCENT, then disbursement amount
4251 --is calculated by applying the percentage to all the billable
4252 --amounts due before the payout date
4253 get_pth_fee_due_amount(p_chr_id => p_chr_id,
4254 p_kle_id => l_lne_rec.id,
4255 p_prev_payout_date => l_prev_pay_start_date,
4256 p_payout_date => l_pay_start_date,
4257 x_bill_amount => l_bill_amount,
4258 x_return_status => x_return_status);
4259 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4260 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4261 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
4262 RAISE OKL_API.G_EXCEPTION_ERROR;
4263 END IF;
4264 l_disb_amount := (l_bill_amount * r_pass.DISBURSEMENT_PERCENT)/100;
4265 ELSE
4266 l_disb_amount := r_pass.disbursement_fixed_amount;
4267 END IF;
4268 l_pay_end_date := ADD_MONTHS(l_pay_start_date, l_months_factor) - 1;
4269 IF(l_pay_end_date > r_pass.CONTRACT_END_DATE) THEN
4270 l_pay_end_date := r_pass.CONTRACT_END_DATE;
4271 END IF;
4272 --Bug 13448352: RGOOTY
4273 -- Increment the l_total_disb_amount with the l_disb_amount
4274 l_total_disb_amount := l_total_disb_amount + NVL(l_disb_amount,0);
4275 -- Moving out the logic to generate the Accrual amount out of the loop
4276 l_prev_pay_start_date := l_pay_start_date;
4277 l_pay_start_date := l_pay_end_date + 1;
4278 EXIT WHEN (l_pay_start_date > r_pass.CONTRACT_END_DATE);
4279 END LOOP;
4280 END LOOP;
4281 --Bug 13448352: RGOOTY: Start
4282 -- In one go, generate the Service Expense Accruals using the total disbursement amount
4283 -- calculated as above and spread it over the Payment term
4284 get_passthru_exp_accruals(p_chr_id => p_chr_id,
4285 p_disb_amount => l_total_disb_amount,
4286 p_start_date => l_payment_period_start_date,
4287 p_end_date => l_payment_period_end_date,
4288 x_selv_tbl => l_pt_tbl_tmp,
4289 x_return_status => x_return_status);
4290 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR
4291 THEN
4292 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4293 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR
4294 THEN
4295 RAISE OKL_API.G_EXCEPTION_ERROR;
4296 END IF;
4297
4298 IF (l_pt_tbl_tmp.COUNT > 0)
4299 THEN
4300 i := l_pt_tbl_tmp.FIRST;
4301 j := 1;
4302 IF (l_pth_selv_tbl.COUNT > 0)
4303 THEN
4304 j := l_pth_selv_tbl.LAST + 1;
4305 END IF;
4306 LOOP
4307 l_pth_selv_tbl(j) := l_pt_tbl_tmp(i);
4308 l_pth_selv_tbl(j).se_line_number := j;
4309 EXIT WHEN (i = l_pt_tbl_tmp.LAST);
4310 i := l_pt_tbl_tmp.NEXT(i);
4311 j := j + 1;
4312 END LOOP;
4313 END IF;
4314 --Bug 13448352: RGOOTY: End
4315 --Sort and consolidate the streams
4316 consolidate_pth_acc_streams(p_chr_id => p_chr_id,
4317 p_selv_tbl => l_pth_selv_tbl,
4318 x_selv_tbl => l_pth_exp_selv_tbl,
4319 x_return_status => x_return_status);
4320 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4321 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4322 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
4323 RAISE OKL_API.G_EXCEPTION_ERROR;
4324 END IF;
4325
4326 --moved this up to check upfront if this is passthru service
4327 /*
4328 OPEN serv_strm_type_csr ( l_lne_rec.id, 'SOLD_SERVICE' );
4329 FETCH serv_strm_type_csr into l_serv_strm_type_rec;
4330 CLOSE serv_strm_type_csr;
4331 */
4332
4333 IF(g_rep_req_yn = 'Y') THEN
4334 OPEN l_hdr_pdt_csr(p_chr_id);
4335 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4336 CLOSE l_hdr_pdt_csr;
4337
4338 l_pdt_id := l_pdt_id_rec.report_pdt_id;
4339 l_primary_sty_id := l_serv_strm_type_rec.styp_id;
4340 get_dep_no_prc_stream_type
4341 (
4342 p_khr_id => p_chr_id,
4343 p_pdt_id => l_pdt_id_rec.report_pdt_id,
4344 p_primary_sty_id => l_serv_strm_type_rec.styp_id,
4345 p_dependent_sty_purpose => 'PASS_THRU_SVC_EXP_ACCRUAL', --'PASS_THRU_EXP_ACCRUAL',
4346 x_return_status => x_return_status,
4347 x_dependent_sty_id => l_sty_id
4348 );
4349 IF x_return_status = 'E' THEN
4350 x_return_status := 'S';
4351 END IF;
4352 ELSE
4353 get_dep_no_prc_stream_type
4354 (
4355 p_khr_id => p_chr_id,
4356 p_primary_sty_id => l_serv_strm_type_rec.styp_id,
4357 p_dependent_sty_purpose => 'PASS_THRU_SVC_EXP_ACCRUAL', --'PASS_THRU_EXP_ACCRUAL',
4358 x_return_status => x_return_status,
4359 x_dependent_sty_id => l_sty_id
4360 );
4361 IF x_return_status = 'E' THEN
4362 x_return_status := 'S';
4363 END IF;
4364 END IF;
4365 IF(l_sty_id.id IS NOT NULL) THEN
4366 okl_stream_generator_pvt.get_stream_header(
4367 p_khr_id => p_chr_id,
4368 p_kle_id => l_lne_rec.id,
4369 p_sty_id => l_sty_id.id,
4370 p_purpose_code => l_purpose_code,
4371 x_stmv_rec => l_stmv_rec,
4372 x_return_status => x_return_status);
4373 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
4374 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
4375 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
4376 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
4377 END IF;
4378 l_stmv_rec.say_code := 'WORK';
4379 l_stmv_rec.active_yn := 'Y';
4380 l_stmv_rec.date_working := SYSDATE;
4381 --Added by kthiruva on 09-Feb-2006
4382 --Bug 5029161 - Start of Changes
4383 --Made change by bkatraga for bug 8226735
4384 IF l_pth_exp_selv_tbl.COUNT > 0 THEN
4385 okl_streams_pub.create_streams(p_api_version => p_api_version,
4386 p_init_msg_list => p_init_msg_list,
4387 x_return_status => x_return_status,
4388 x_msg_count => x_msg_count,
4389 x_msg_data => x_msg_data,
4390 p_stmv_rec => l_stmv_rec,
4391 p_selv_tbl => l_pth_exp_selv_tbl,
4392 x_stmv_rec => lx_stmv_rec,
4393 x_selv_tbl => lx_selv_tbl);
4394 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
4395 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
4396 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
4397 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
4398 END IF;
4399 END IF;
4400 --Bug 5029161 - End of Changes
4401 END IF;
4402 -- Clear out reusable data structures
4403 l_sty_id := NULL;
4404 l_stmv_rec := NULL;
4405 lx_stmv_rec := NULL;
4406 lx_selv_tbl.delete;
4407 END IF;
4408 --Bug 5137824 - End of Changes
4409 END LOOP;
4410 -- gboomina Bug 4746368 - End
4411 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4412 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4413 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4414 RAISE OKL_API.G_EXCEPTION_ERROR;
4415 END IF;
4416 EXCEPTION
4417 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4418 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4419 l_api_name,
4420 G_PKG_NAME,
4421 'OKL_API.G_RET_STS_ERROR',
4422 x_msg_count,
4423 x_msg_data,
4424 '_PVT');
4425 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4426 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4427 l_api_name,
4428 G_PKG_NAME,
4429 'OKL_API.G_RET_STS_UNEXP_ERROR',
4430 x_msg_count,
4431 x_msg_data,
4432 '_PVT');
4433 WHEN OTHERS THEN
4434 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4435 l_api_name,
4436 G_PKG_NAME,
4437 'OTHERS',
4438 x_msg_count,
4439 x_msg_data,
4440 '_PVT');
4441 END GEN_PASSTHRU_SERV_EXP_STREAMS;
4442
4443
4444 Procedure alloc_strms_basis_level(
4445 p_api_version IN NUMBER,
4446 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4447 x_return_status OUT NOCOPY VARCHAR2,
4448 x_msg_count OUT NOCOPY NUMBER,
4449 x_msg_data OUT NOCOPY VARCHAR2,
4450 p_chr_id IN NUMBER,
4451 p_sty_id IN NUMBER,
4452 p_ctrt_cap_amnt IN NUMBER,
4453 p_strmele_tbl IN strmele_tbl_type) AS
4454
4455 l_api_name CONSTANT VARCHAR2(30) := 'ALLOC_STRMS_BASIS_LEVEL';
4456 l_api_version CONSTANT NUMBER := 1;
4457 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4458
4459
4460 l_ctrt_cap_amnt NUMBER := p_ctrt_cap_amnt;
4461
4462 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
4463 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
4464 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
4465 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
4466
4467 i NUMBER;
4468 j NUMBER;
4469 k NUMBER;
4470 TYPE amounts_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4471 amounts amounts_tbl_type;
4472 l_num_per NUMBER;
4473
4474 l_finline_rec l_line_rec_csr%ROWTYPE;
4475 l_subfee_rec l_subfee_csr%ROWTYPE;
4476 l_strmele_tbl strmele_tbl_type := p_strmele_tbl;
4477
4478 BEGIN
4479
4480 l_return_status := OKL_API.START_ACTIVITY(
4481 p_api_name => l_api_name,
4482 p_pkg_name => g_pkg_name,
4483 p_init_msg_list => p_init_msg_list,
4484 l_api_version => l_api_version,
4485 p_api_version => p_api_version,
4486 p_api_type => G_API_TYPE,
4487 x_return_status => x_return_status);
4488
4489 -- check if activity started successfully
4490 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4491 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4492 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
4493 raise OKL_API.G_EXCEPTION_ERROR;
4494 End If;
4495
4496 FOR l_finline_rec in l_line_rec_csr ( p_chr_id, 'FREE_FORM1')
4497 LOOP
4498
4499 l_stmv_rec.sty_id := p_sty_id;
4500 l_stmv_rec.khr_id := p_chr_id;
4501 l_stmv_rec.kle_id := l_finline_rec.id;
4502 l_stmv_rec.say_code := 'WORK';
4503 l_stmv_rec.active_yn := 'N';
4504 l_stmv_rec.date_working := sysdate;
4505
4506 l_stmv_rec.transaction_number := l_strmele_tbl(1).transaction_number;
4507 l_stmv_rec.sgn_code := l_strmele_tbl(1).sgn_code;
4508
4509 k := 0;
4510 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_finline_rec.id )
4511 LOOP
4512
4513 l_num_per := l_rl_rec1.object1_id1;
4514 k := amounts.COUNT;
4515 FOR j in 1..l_num_per
4516 LOOP
4517 amounts(j+k) := l_rl_rec1.RULE_INFORMATION6;
4518 END LOOP;
4519
4520 END LOOP;
4521
4522 FOR i in 1..l_strmele_tbl.COUNT
4523 LOOP
4524
4525 l_selv_tbl(i).amount := amounts(i);
4526 l_selv_tbl(i).accrued_yn := l_strmele_tbl(i).accrued_yn;
4527 l_selv_tbl(i).stream_element_date := l_strmele_tbl(i).stream_element_date;
4528 l_selv_tbl(i).date_billed := l_strmele_tbl(i).date_billed;
4529 l_selv_tbl(i).se_line_number := l_strmele_tbl(i).SE_LINE_NUMBER;
4530 l_selv_tbl(i).comments := l_strmele_tbl(i).comments;
4531
4532 END LOOP;
4533
4534
4535
4536 Okl_Streams_Pub.create_streams(
4537 p_api_version => l_api_version
4538 ,p_init_msg_list => p_init_msg_list
4539 ,x_return_status => l_return_status
4540 ,x_msg_count => x_msg_count
4541 ,x_msg_data => x_msg_data
4542 ,p_stmv_rec => l_stmv_rec
4543 ,p_selv_tbl => l_selv_tbl
4544 ,x_stmv_rec => x_stmv_rec
4545 ,x_selv_tbl => x_selv_tbl);
4546
4547 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4548 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4549 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
4550 raise OKL_API.G_EXCEPTION_ERROR;
4551 End If;
4552
4553 l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
4554 amounts.DELETE(1, amounts.COUNT);
4555 l_stmv_rec := NULL;
4556
4557
4558 END LOOP;
4559
4560
4561 x_return_status := l_return_status;
4562
4563 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
4564
4565 EXCEPTION
4566 when OKL_API.G_EXCEPTION_ERROR then
4567 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4568 p_api_name => l_api_name,
4569 p_pkg_name => g_pkg_name,
4570 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
4571 x_msg_count => x_msg_count,
4572 x_msg_data => x_msg_data,
4573 p_api_type => g_api_type);
4574 x_return_status := l_return_status;
4575
4576 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4577 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4578 p_api_name => l_api_name,
4579 p_pkg_name => g_pkg_name,
4580 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4581 x_msg_count => x_msg_count,
4582 x_msg_data => x_msg_data,
4583 p_api_type => g_api_type);
4584 x_return_status := l_return_status;
4585 If( l_strmele_csr%ISOPEN ) Then
4586 CLOSE l_strmele_csr;
4587 End If;
4588
4589
4590 when OTHERS then
4591 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4592 p_api_name => l_api_name,
4593 p_pkg_name => g_pkg_name,
4594 p_exc_name => 'OTHERS',
4595 x_msg_count => x_msg_count,
4596 x_msg_data => x_msg_data,
4597 p_api_type => g_api_type);
4598 x_return_status := l_return_status;
4599
4600
4601 END alloc_strms_basis_level;
4602
4603
4604 Procedure alloc_strms_basis_capital(
4605 p_api_version IN NUMBER,
4606 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4607 x_return_status OUT NOCOPY VARCHAR2,
4608 x_msg_count OUT NOCOPY NUMBER,
4609 x_msg_data OUT NOCOPY VARCHAR2,
4610 p_chr_id IN NUMBER,
4611 p_sty_id IN NUMBER,
4612 p_ctrt_cap_amnt IN NUMBER,
4613 p_strmele_tbl IN strmele_tbl_type) AS
4614
4615 l_api_name CONSTANT VARCHAR2(30) := 'ALLOC_STRMS_BASIS_CAPITAL';
4616 l_api_version CONSTANT NUMBER := 1;
4617 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4618
4619
4620
4621 l_finline_rec l_line_rec_csr%ROWTYPE;
4622 l_strmele_tbl strmele_tbl_type := p_strmele_tbl;
4623 l_subfee_rec l_subfee_csr%ROWTYPE;
4624
4625 i NUMBER;
4626 l_line_amnt NUMBER;
4627 l_feeline_amnt NUMBER;
4628 l_superTval NUMBER;
4629 l_alloc_value NUMBER;
4630 l_ctrt_cap_amnt NUMBER := p_ctrt_cap_amnt;
4631
4632 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
4633 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
4634 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
4635 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
4636
4637 BEGIN
4638
4639 l_return_status := OKL_API.START_ACTIVITY(
4640 p_api_name => l_api_name,
4641 p_pkg_name => g_pkg_name,
4642 p_init_msg_list => p_init_msg_list,
4643 l_api_version => l_api_version,
4644 p_api_version => p_api_version,
4645 p_api_type => G_API_TYPE,
4646 x_return_status => x_return_status);
4647
4648
4649 -- check if activity started successfully
4650 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4651 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4652 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
4653 raise OKL_API.G_EXCEPTION_ERROR;
4654 End If;
4655
4656
4657 FOR l_finline_rec in l_line_rec_csr ( p_chr_id, 'FREE_FORM1')
4658 LOOP
4659
4660 l_stmv_rec.sty_id := p_sty_id;
4661 l_stmv_rec.khr_id := p_chr_id;
4662 l_stmv_rec.kle_id := l_finline_rec.id;
4663 l_stmv_rec.say_code := 'CURR';
4664 l_stmv_rec.active_yn := 'Y';
4665 l_stmv_rec.date_current := sysdate;
4666
4667 l_stmv_rec.transaction_number := l_strmele_tbl(1).transaction_number;
4668 l_stmv_rec.sgn_code := l_strmele_tbl(1).sgn_code;
4669 l_stmv_rec.id := l_strmele_tbl(1).stm_id;
4670
4671
4672 l_line_amnt := l_finline_rec.capital_amount;
4673
4674 OPEN l_subfee_csr( l_finline_rec.id,
4675 'LINK_FEE_ASSET',
4676 'OKX_COVASST');
4677 FETCH l_subfee_csr INTO l_subfee_rec;
4678 If( l_subfee_csr%NOTFOUND ) Then
4679 l_feeline_amnt := 0.0;
4680 Else
4681 l_feeline_amnt := l_subfee_rec.capital_amount;
4682 End If;
4683 CLOSE l_subfee_csr;
4684
4685 FOR i in 1..l_strmele_tbl.COUNT
4686 LOOP
4687 l_superTval := l_strmele_tbl(i).AMOUNT;
4688 l_alloc_value := (l_superTval * ( l_line_amnt + l_feeline_amnt )) / l_ctrt_cap_amnt;
4689
4690 l_selv_tbl(i).amount := l_alloc_value;
4691 l_selv_tbl(i).accrued_yn := l_strmele_tbl(i).accrued_yn;
4692 l_selv_tbl(i).stream_element_date := l_strmele_tbl(i).stream_element_date;
4693 l_selv_tbl(i).date_billed := l_strmele_tbl(i).date_billed;
4694 l_selv_tbl(i).comments := l_strmele_tbl(i).comments;
4695 l_selv_tbl(i).se_line_number := l_strmele_tbl(i).SE_LINE_NUMBER;
4696
4697 END LOOP;
4698
4699
4700 Okl_Streams_Pub.update_streams(
4701 p_api_version => l_api_version
4702 ,p_init_msg_list => p_init_msg_list
4703 ,x_return_status => l_return_status
4704 ,x_msg_count => x_msg_count
4705 ,x_msg_data => x_msg_data
4706 ,p_stmv_rec => l_stmv_rec
4707 ,x_stmv_rec => x_stmv_rec);
4708
4709
4710
4711 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4712 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4713 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
4714 raise OKL_API.G_EXCEPTION_ERROR;
4715 End If;
4716
4717
4718
4719 FOR i in 1..l_selv_tbl.COUNT
4720 LOOP
4721 l_selv_tbl(i).stm_id := x_stmv_rec.id;
4722 END LOOP;
4723
4724 Okl_Streams_Pub.create_stream_elements(
4725 p_api_version => l_api_version
4726 ,p_init_msg_list => p_init_msg_list
4727 ,x_return_status => l_return_status
4728 ,x_msg_count => x_msg_count
4729 ,x_msg_data => x_msg_data
4730 ,p_selv_tbl => l_selv_tbl
4731 ,x_selv_tbl => x_selv_tbl);
4732
4733 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4734 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4735 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
4736 raise OKL_API.G_EXCEPTION_ERROR;
4737 End If;
4738
4739 l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
4740 l_stmv_rec := NULL;
4741
4742
4743 END LOOP;
4744
4745 x_return_status := l_return_status;
4746
4747 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
4748
4749 EXCEPTION
4750 when OKL_API.G_EXCEPTION_ERROR then
4751 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4752 p_api_name => l_api_name,
4753 p_pkg_name => g_pkg_name,
4754 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
4755 x_msg_count => x_msg_count,
4756 x_msg_data => x_msg_data,
4757 p_api_type => g_api_type);
4758 x_return_status := l_return_status;
4759
4760 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4761 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4762 p_api_name => l_api_name,
4763 p_pkg_name => g_pkg_name,
4764 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4765 x_msg_count => x_msg_count,
4766 x_msg_data => x_msg_data,
4767 p_api_type => g_api_type);
4768 x_return_status := l_return_status;
4769 If( l_strmele_csr%ISOPEN ) Then
4770 CLOSE l_strmele_csr;
4771 End If;
4772
4773
4774 when OTHERS then
4775 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4776 p_api_name => l_api_name,
4777 p_pkg_name => g_pkg_name,
4778 p_exc_name => 'OTHERS',
4779 x_msg_count => x_msg_count,
4780 x_msg_data => x_msg_data,
4781 p_api_type => g_api_type);
4782 x_return_status := l_return_status;
4783
4784
4785 END alloc_strms_basis_capital;
4786
4787 Procedure allocate_streams(
4788 p_api_version IN NUMBER,
4789 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4790 x_return_status OUT NOCOPY VARCHAR2,
4791 x_msg_count OUT NOCOPY NUMBER,
4792 x_msg_data OUT NOCOPY VARCHAR2,
4793 p_chr_id IN NUMBER) AS
4794
4795 l_api_name CONSTANT VARCHAR2(30) := 'ALLOCATE_STREAMS';
4796 l_api_version CONSTANT NUMBER := 1;
4797 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4798 l_ctrt_cap_amnt NUMBER;
4799 l_strmele_rec l_strmele_csr%ROWTYPE;
4800 l_strmele_tbl strmele_tbl_type;
4801 i NUMBER;
4802
4803 Cursor l_strms_csr ( chrId NUMBER, st VARCHAR2 ) IS
4804 Select sty.id sty_id,
4805 sty.name
4806 From okl_streams str,
4807 okl_strm_type_tl sty
4808 Where sty.id = str.sty_id
4809 and str.khr_id = chrId
4810 and sty.name = st
4811 and sty.language = 'US'
4812 and nvl( str.kle_id, 'XXX' ) = 'XXX';
4813
4814 l_strm_rec l_strms_csr%ROWTYPE;
4815
4816 BEGIN
4817
4818 print( l_api_name, 'begin');
4819
4820 l_return_status := OKL_API.START_ACTIVITY(
4821 p_api_name => l_api_name,
4822 p_pkg_name => g_pkg_name,
4823 p_init_msg_list => p_init_msg_list,
4824 l_api_version => l_api_version,
4825 p_api_version => p_api_version,
4826 p_api_type => G_API_TYPE,
4827 x_return_status => x_return_status);
4828
4829 -- check if activity started successfully
4830 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4831 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4832 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
4833 raise OKL_API.G_EXCEPTION_ERROR;
4834 End If;
4835
4836 execute_formula(p_api_version => l_api_version,
4837 p_init_msg_list => p_init_msg_list,
4838 x_return_status => l_return_status,
4839 x_msg_count => x_msg_count,
4840 x_msg_data => x_msg_data,
4841 --Bug# 9299451
4842 p_formula_name => 'CONTRACT_CAP_AMNT_PRICE',
4843 p_contract_id => p_chr_id,
4844 p_line_id => NULL,
4845 x_value => l_ctrt_cap_amnt);
4846 print( l_api_name, 'execute formula', x_return_status);
4847
4848 -- check if activity started successfully
4849 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4850 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4851 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
4852 raise OKL_API.G_EXCEPTION_ERROR;
4853 End If;
4854
4855 If (l_ctrt_cap_amnt <= 0) Then
4856 okl_api.set_message(
4857 p_app_name => G_APP_NAME,
4858 p_msg_name => 'G_INVALID_CONTRACT_CAP_AMNT');
4859 raise OKL_API.G_EXCEPTION_ERROR;
4860 End If;
4861
4862 /*
4863 FOR j in 1..n l_strms_csr ( TO_NUMBER(p_chr_id ), 'STREAM TYPE')
4864 LOOP
4865 */
4866
4867 OPEN l_strms_csr( TO_NUMBER(p_chr_id ), 'STREAM TYPE');
4868 FETCH l_strms_csr INTO l_strm_rec;
4869 CLOSE l_strms_csr;
4870
4871 i := 0;
4872 FOR l_strmele_rec in l_strmele_csr ( p_chr_id, l_strm_rec.sty_id)
4873 LOOP
4874
4875 i := i + 1;
4876 l_strmele_tbl(i).DATE_BILLED := l_strmele_rec.DATE_BILLED;
4877 l_strmele_tbl(i).STREAM_ELEMENT_DATE := l_strmele_rec.STREAM_ELEMENT_DATE;
4878 l_strmele_tbl(i).AMOUNT := l_strmele_rec.AMOUNT;
4879 l_strmele_tbl(i).ACCRUED_YN := l_strmele_rec.ACCRUED_YN;
4880 l_strmele_tbl(i).comments := l_strmele_rec.comments;
4881 l_strmele_tbl(i).se_line_number := l_strmele_rec.SE_LINE_NUMBER;
4882 l_strmele_tbl(i).sgn_code := l_strmele_rec.SGN_CODE;
4883 l_strmele_tbl(i).stm_id := l_strmele_rec.STM_ID;
4884 l_strmele_tbl(i).transaction_number := l_strmele_rec.TRANSACTION_NUMBER;
4885
4886 END LOOP;
4887
4888
4889 alloc_strms_basis_capital(
4890 p_api_version => p_api_version,
4891 p_init_msg_list => p_init_msg_list,
4892 x_return_status => l_return_status,
4893 x_msg_count => x_msg_count,
4894 x_msg_data => x_msg_data,
4895 p_chr_id => TO_NUMBER(p_chr_id),
4896 p_sty_id => l_strm_rec.sty_id,
4897 p_ctrt_cap_amnt => l_ctrt_cap_amnt,
4898 p_strmele_tbl => l_strmele_tbl );
4899
4900 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4901 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4902 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4903 RAISE OKL_API.G_EXCEPTION_ERROR;
4904 END IF;
4905
4906 l_strmele_tbl.DELETE(1, l_strmele_tbl.COUNT);
4907
4908 -- END LOOP;
4909
4910 x_return_status := l_return_status;
4911
4912 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
4913
4914 EXCEPTION
4915 when OKL_API.G_EXCEPTION_ERROR then
4916 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4917 p_api_name => l_api_name,
4918 p_pkg_name => g_pkg_name,
4919 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
4920 x_msg_count => x_msg_count,
4921 x_msg_data => x_msg_data,
4922 p_api_type => g_api_type);
4923 x_return_status := l_return_status;
4924
4925 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4926 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4927 p_api_name => l_api_name,
4928 p_pkg_name => g_pkg_name,
4929 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4930 x_msg_count => x_msg_count,
4931 x_msg_data => x_msg_data,
4932 p_api_type => g_api_type);
4933 x_return_status := l_return_status;
4934 If( strm_name_csr%ISOPEN ) Then
4935 CLOSE strm_name_csr;
4936 End If;
4937
4938 when OTHERS then
4939 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
4940 p_api_name => l_api_name,
4941 p_pkg_name => g_pkg_name,
4942 p_exc_name => 'OTHERS',
4943 x_msg_count => x_msg_count,
4944 x_msg_data => x_msg_data,
4945 p_api_type => g_api_type);
4946 x_return_status := l_return_status;
4947
4948 End allocate_streams;
4949 -- Start modification 11i10 bakuchib
4950 PROCEDURE create_interim_rental_streams(p_api_version IN NUMBER,
4951 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4952 x_return_status OUT NOCOPY VARCHAR2,
4953 x_msg_count OUT NOCOPY NUMBER,
4954 x_msg_data OUT NOCOPY VARCHAR2,
4955 p_chr_id IN NUMBER,
4956 p_purpose IN VARCHAR2) AS
4957 l_api_name CONSTANT VARCHAR2(256) := 'INTERIM_STREAMS';
4958 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4959 i NUMBER;
4960 j NUMBER;
4961 l_orig_amount NUMBER;
4962 l_rebook_amount NUMBER;
4963 l_structure NUMBER;
4964 error VARCHAR2(256);
4965 --styid NUMBER;
4966 styid strm_rec_type;
4967 stream_name VARCHAR2(256);
4968 lv_chr_secure VARCHAR2(3) := OKL_API.G_FALSE;
4969 ln_secure_amt NUMBER := 0;
4970 -- get the transaction number
4971 CURSOR l_strm_csr (chrId NUMBER, pp VARCHAR2 )
4972 IS
4973 SELECT DISTINCT str.transaction_number transaction_number
4974 FROM okl_streams str
4975 WHERE str.khr_id = chrId
4976 AND str.say_code = 'CURR'
4977 AND nvl(str.purpose_code, 'ORIGIN') = pp;
4978 -- Billable rents
4979
4980 -- Bug 4164120 changes start
4981
4982 CURSOR l_billedrents_csr(chrId NUMBER, kleid NUMBER, p VARCHAR2)
4983 IS
4984 SELECT nvl(sum(ele.AMOUNT),0)
4985 FROM okl_strm_elements ele,
4986 okl_streams str,
4987 okl_strm_type_b sty
4988 WHERE str.khr_id = chrId
4989 AND nvl(str.kle_id, -1) = kleid
4990 AND str.sty_id = sty.id
4991 AND str.say_code = 'CURR'
4992 AND nvl(str.purpose_code, 'ORIGIN') = p
4993 AND sty.stream_type_purpose <> 'REBOOK_BILLING_ADJUSTMENT'
4994 AND ele.stm_id = str.id
4995 AND nvl(ele.date_billed, sysdate+1) < sysdate;
4996
4997 -- Bug 4164120 changes end
4998
4999 -- Get the Line info
5000 CURSOR l_line_csr( chrid NUMBER )
5001 IS
5002 SELECT kle.id,
5003 kle.oec,
5004 kle.residual_code,
5005 kle.capital_amount,
5006 kle.delivered_date,
5007 kle.date_funding_required,
5008 kle.residual_grnty_amount,
5009 kle.date_funding,
5010 kle.residual_value,
5011 kle.amount,
5012 kle.price_negotiated,
5013 kle.start_date,
5014 kle.end_date,
5015 kle.orig_system_id1,
5016 kle.initial_direct_cost,
5017 tl.item_description,
5018 tl.name
5019 FROM okl_k_lines_full_v kle,
5020 okc_line_styles_b lse,
5021 okc_k_lines_tl tl,
5022 okc_statuses_b sts
5023 WHERE kle.lse_id = lse.id
5024 AND lse.lty_code in ( 'FREE_FORM1', 'FEE', 'SOLD_SERVICE', 'LINK_SERV_ASSET')--bug# 3343133 (ssiruvol)
5025 AND tl.id = kle.id
5026 AND tl.language = USERENV('LANG')
5027 AND kle.dnz_chr_id = chrid
5028 AND sts.code = kle.sts_code
5029 --Start of bug#3121708 modification BAKUCHIB
5030 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
5031 --End of bug#3121708 modification BAKUCHIB
5032
5033 -- Get the Header info
5034 CURSOR l_hdr_csr( chrId NUMBER )
5035 IS
5036 SELECT chr.orig_system_source_code,
5037 chr.start_date,
5038 chr.authoring_org_id,
5039 chr.inv_organization_id,
5040 khr.deal_type,
5041 pdt.id pid,
5042 chr.currency_code currency_code,
5043 khr.term_duration term,
5044 chr.orig_system_id1
5045 FROM okc_k_headers_v chr,
5046 okl_k_headers khr,
5047 okl_products_v pdt
5048 WHERE khr.id = chr.id
5049 AND chr.id = chrId
5050 AND khr.pdt_id = pdt.id(+);
5051 -- Get the Stream id
5052 CURSOR get_styid_csr(p_strm_name OKL_STRM_TYPE_TL.NAME%TYPE)
5053 IS
5054 SELECT nvl(tl.id,-1) id,
5055 b.stream_type_subclass
5056 FROM okl_strm_type_tl tl,
5057 okl_strm_type_b b
5058 WHERE tl.language = USERENV('LANG')
5059 AND tl.name = p_strm_name
5060 AND tl.id = b.id;
5061
5062 -- Added for user defined streams - HKPATEL
5063 l_strm_name VARCHAR2(30);
5064
5065 -- Added code ends here - HKPATEL
5066
5067 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
5068 l_hdr_rec l_hdr_csr%ROWTYPE;
5069 l_rl_rec1 l_rl_csr1%ROWTYPE;
5070 l_line_rec l_line_csr%ROWTYPE;
5071 l_strm_rec l_strm_csr%ROWTYPE;
5072 l_styid_rec get_styid_csr%ROWTYPE;
5073 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
5074 l_stmv_rec_intm_rentals Okl_Streams_pub.stmv_rec_type;
5075 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
5076 l_selv_tbl_intm_rentals Okl_Streams_pub.selv_tbl_type;
5077 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
5078 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
5079 l_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
5080 l_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
5081 lx_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
5082 lx_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
5083 lx_inv_agmt_chr_id_tbl okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
5084 BEGIN
5085 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5086 -- Call start_activity to create savepoint, check compatibility
5087 -- and initialize message list
5088 x_return_status := OKL_API.START_ACTIVITY (
5089 l_api_name
5090 ,p_init_msg_list
5091 ,'_PVT'
5092 ,x_return_status);
5093 -- Check if activity started successfully
5094 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5095 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5096 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5097 RAISE OKL_API.G_EXCEPTION_ERROR;
5098 END IF;
5099 -- get the stream id
5100 -- Code added and commented for user defined streams - HKPATEL
5101 IF(g_rep_req_yn = 'Y') THEN
5102
5103 OPEN l_hdr_pdt_csr(p_chr_id);
5104 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5105 CLOSE l_hdr_pdt_csr;
5106
5107 get_primary_no_prc_stream_type
5108 (
5109 p_khr_id =>p_chr_id,
5110 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
5111 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
5112 x_return_status => x_return_status,
5113 x_primary_sty_id =>styid
5114 );
5115 IF x_return_status = 'E' THEN
5116 x_return_status := 'S';
5117 END IF;
5118
5119
5120 ELSE
5121 get_primary_no_prc_stream_type
5122 (
5123 p_khr_id =>p_chr_id,
5124 p_pdt_id =>l_pdt_id_rec.pid,
5125 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
5126 x_return_status => x_return_status,
5127 x_primary_sty_id =>styid
5128 );
5129 IF x_return_status = 'E' THEN
5130 x_return_status := 'S';
5131 END IF;
5132
5133 END IF;
5134
5135 /*
5136 OPEN primary_sty_name_csr(p_chr_id => p_chr_id,
5137 p_purpose => 'REBOOK_BILLING_ADJUSTMENT');
5138 FETCH primary_sty_name_csr into l_strm_name;
5139 IF primary_sty_name_csr%NOTFOUND THEN
5140 okl_api.set_message(p_app_name => G_APP_NAME,
5141 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5142 p_token1 => G_COL_NAME_TOKEN,
5143 p_token1_value => 'Stream name');
5144 RAISE OKL_API.G_EXCEPTION_ERROR;
5145 END IF;
5146 CLOSE primary_sty_name_csr;
5147
5148
5149 OPEN get_styid_csr(p_strm_name => l_strm_name);
5150 FETCH get_styid_csr INTO l_styid_rec;
5151 IF get_styid_csr%NOTFOUND THEN
5152 okl_api.set_message(p_app_name => G_APP_NAME,
5153 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5154 p_token1 => G_COL_NAME_TOKEN,
5155 p_token1_value => 'Stream name');
5156 RAISE OKL_API.G_EXCEPTION_ERROR;
5157 END IF;
5158 CLOSE get_styid_csr;
5159
5160
5161
5162 IF l_styid_rec.id = -1 THEN
5163 okl_api.set_message(p_app_name => G_APP_NAME,
5164 p_msg_name => G_INVALID_VALUE,
5165 p_token1 => G_COL_NAME_TOKEN,
5166 p_token1_value => 'Stream ID');
5167 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5168 END IF;
5169 -- added code for user defined streams ends here
5170 */
5171 -- get the transaction number
5172 OPEN l_strm_csr (p_chr_id, p_purpose);
5173 FETCH l_strm_csr INTO l_strm_rec;
5174 IF l_strm_csr%NOTFOUND THEN
5175 okl_api.set_message(p_app_name => G_APP_NAME,
5176 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5177 p_token1 => G_COL_NAME_TOKEN,
5178 p_token1_value => 'Chr_id and for '||p_purpose);
5179 RAISE OKL_API.G_EXCEPTION_ERROR;
5180 END IF;
5181 CLOSE l_strm_csr;
5182 -- Get the header info
5183 OPEN l_hdr_csr (p_chr_id);
5184 FETCH l_hdr_csr INTO l_hdr_rec;
5185 IF l_hdr_csr%NOTFOUND THEN
5186 okl_api.set_message(p_app_name => G_APP_NAME,
5187 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5188 p_token1 => G_COL_NAME_TOKEN,
5189 p_token1_value => 'Chr_id ');
5190 RAISE OKL_API.G_EXCEPTION_ERROR;
5191 END IF;
5192 CLOSE l_hdr_csr;
5193 -- Get the line info
5194 FOR l_line_rec IN l_line_csr (p_chr_id) LOOP
5195 l_stmv_rec_intm_rentals.khr_id := p_chr_id;
5196 l_stmv_rec_intm_rentals.kle_id := l_line_rec.id;
5197 l_stmv_rec_intm_rentals.say_code := 'CURR';
5198 IF (p_purpose = 'REPORT') THEN
5199 l_stmv_rec_intm_rentals.active_yn := 'N';
5200 ELSE
5201 l_stmv_rec_intm_rentals.active_yn := 'Y';
5202 END IF;
5203 l_stmv_rec_intm_rentals.date_current := sysdate;
5204 l_stmv_rec_intm_rentals.transaction_number := l_strm_rec.transaction_number;
5205 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
5206 -- get Billabel Rentals original contract
5207
5208
5209 OPEN l_hdr_pdt_csr(p_chr_id);
5210 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5211 CLOSE l_hdr_pdt_csr;
5212
5213 OPEN l_billedrents_csr(l_hdr_rec.orig_system_id1, l_line_rec.orig_system_id1, p_purpose );
5214 FETCH l_billedrents_csr INTO l_orig_amount;
5215 IF l_billedrents_csr%NOTFOUND THEN
5216 okl_api.set_message(p_app_name => G_APP_NAME,
5217 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5218 p_token1 => G_COL_NAME_TOKEN,
5219 p_token1_value => 'Orig System Chr_id/Line id and for '||p_purpose);
5220 x_return_status := OKL_API.G_RET_STS_ERROR;
5221 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5222 END IF;
5223 CLOSE l_billedrents_csr;
5224 -- get Billabel Rentals contract id sent as parameter
5225 OPEN l_billedrents_csr(p_chr_id,l_line_rec.id,p_purpose );
5226 FETCH l_billedrents_csr INTO l_rebook_amount;
5227 IF l_billedrents_csr%NOTFOUND THEN
5228 okl_api.set_message(p_app_name => G_APP_NAME,
5229 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5230 p_token1 => G_COL_NAME_TOKEN,
5231 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
5232 x_return_status := OKL_API.G_RET_STS_ERROR;
5233 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5234 END IF;
5235 CLOSE l_billedrents_csr;
5236
5237
5238 l_selv_tbl_intm_rentals(1).amount := l_rebook_amount - l_orig_amount;
5239 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
5240 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
5241 l_selv_tbl_intm_rentals(1).se_line_number := 1;
5242 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Rebooked Rentals';
5243 --bug# 3014721
5244 --l_selv_tbl_intm_rentals(1).date_billed := sysdate;
5245 --l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
5246 l_stmv_rec_intm_rentals.sty_id := styid.id;
5247 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
5248 Okl_Streams_Pub.create_streams(
5249 p_api_version => p_api_version,
5250 p_init_msg_list => p_init_msg_list,
5251 x_return_status => x_return_status,
5252 x_msg_count => x_msg_count,
5253 x_msg_data => x_msg_data,
5254 p_stmv_rec => l_stmv_rec_intm_rentals,
5255 p_selv_tbl => l_selv_tbl_intm_rentals,
5256 x_stmv_rec => x_stmv_rec,
5257 x_selv_tbl => x_selv_tbl);
5258 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5259 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5260 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5261 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5262 END IF;
5263 END IF;
5264 -- Check for Original contract is securitized
5265 okl_securitization_pvt.check_khr_securitized(
5266 p_api_version => p_api_version,
5267 p_init_msg_list => p_init_msg_list,
5268 x_return_status => x_return_status,
5269 x_msg_count => x_msg_count,
5270 x_msg_data => x_msg_data,
5271 p_khr_id => l_hdr_rec.orig_system_id1,
5272 p_effective_date => l_line_rec.start_date,
5273 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
5274 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
5275 x_value => lv_chr_secure,
5276 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
5277 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5278 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5279 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5280 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5281 END IF;
5282 IF lv_chr_secure = OKL_API.G_TRUE THEN
5283 -- get the stream id
5284 -- code added for user defined stream
5285 IF(g_rep_req_yn = 'Y') THEN
5286 get_primary_no_prc_stream_type
5287 (
5288 p_khr_id =>p_chr_id,
5289 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
5290 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
5291 x_return_status => x_return_status,
5292 x_primary_sty_id =>styid
5293 );
5294 IF x_return_status = 'E' THEN
5295 x_return_status := 'S';
5296 END IF;
5297
5298 ELSE
5299 get_primary_no_prc_stream_type
5300 (
5301 p_khr_id =>p_chr_id,
5302 p_pdt_id =>l_pdt_id_rec.pid,
5303 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
5304 x_return_status => x_return_status,
5305 x_primary_sty_id =>styid
5306 );
5307 IF x_return_status = 'E' THEN
5308 x_return_status := 'S';
5309 END IF;
5310
5311 END IF;
5312 /*
5313 --OPEN get_styid_csr(p_strm_name => 'INVESTOR DISBURSEMENT ADJUSTMENT');
5314 OPEN get_styid_csr(p_strm_name => l_strm_name);
5315
5316
5317 FETCH get_styid_csr INTO l_styid_rec;
5318 IF get_styid_csr%NOTFOUND THEN
5319 okl_api.set_message(p_app_name => G_APP_NAME,
5320 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5321 p_token1 => G_COL_NAME_TOKEN,
5322 p_token1_value => 'Stream name');
5323 x_return_status := OKL_API.G_RET_STS_ERROR;
5324 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5325 END IF;
5326 CLOSE get_styid_csr;
5327 IF l_styid_rec.id = -1 THEN
5328 okl_api.set_message(p_app_name => G_APP_NAME,
5329 p_msg_name => G_INVALID_VALUE,
5330 p_token1 => G_COL_NAME_TOKEN,
5331 p_token1_value => 'Stream ID');
5332 x_return_status := OKL_API.G_RET_STS_ERROR;
5333 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5334 END IF;
5335 */
5336 -- Added code for user defined stream ends here
5337 -- Get the amount
5338 -- LOOP start.
5339 okl_securitization_pvt.check_kle_securitized(
5340 p_api_version => p_api_version,
5341 p_init_msg_list => p_init_msg_list,
5342 x_return_status => x_return_status,
5343 x_msg_count => x_msg_count,
5344 x_msg_data => x_msg_data,
5345 p_kle_id => l_line_rec.orig_system_id1,
5346 p_effective_date => l_line_rec.start_date,
5347 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
5348 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
5349 x_value => lv_chr_secure,
5350 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
5351 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5352 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5353 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5354 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5355 END IF;
5356
5357 --Start of modification Bug#3293300 - BAKUCHIB
5358 FOR i in lx_inv_agmt_chr_id_tbl.FIRST..lx_inv_agmt_chr_id_tbl.LAST LOOP
5359 --End of modification Bug#3293300 - BAKUCHIB
5360 ln_secure_amt := okl_investor_invoice_disb_pvt.get_disb_amt(
5361 p_ia_id => lx_inv_agmt_chr_id_tbl(i).khr_id,
5362 p_rbk_khr_id => l_hdr_rec.orig_system_id1,
5363 p_rbk_kle_id => l_line_rec.orig_system_id1);
5364 l_stmv_rec_secure := l_stmv_rec_intm_rentals;
5365 l_selv_tbl_secure := l_selv_tbl_intm_rentals;
5366 --l_stmv_rec_secure.sty_id := l_styid_rec.id;
5367 l_stmv_rec_secure.sty_id := styid.id;
5368
5369 l_stmv_rec_secure.source_id := lx_inv_agmt_chr_id_tbl(i).khr_id;
5370 l_stmv_rec_secure.source_table := 'OKL_K_HEADERS';
5371
5372 l_selv_tbl_secure(1).amount := ln_secure_amt * -1;
5373
5374 IF l_selv_tbl_secure(1).amount <> 0 THEN
5375
5376 okl_streams_pub.create_streams(
5377 p_api_version => p_api_version,
5378 p_init_msg_list => p_init_msg_list,
5379 x_return_status => x_return_status,
5380 x_msg_count => x_msg_count,
5381 x_msg_data => x_msg_data,
5382 p_stmv_rec => l_stmv_rec_secure,
5383 p_selv_tbl => l_selv_tbl_secure,
5384 x_stmv_rec => lx_stmv_rec_secure,
5385 x_selv_tbl => lx_selv_tbl_secure);
5386 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5387 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5388 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5389 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5390 END IF;
5391
5392 END IF;
5393
5394 l_selv_tbl_secure.DELETE;
5395 l_selv_tbl_secure := l_selv_tbl;
5396 l_stmv_rec_secure := l_stmv_rec;
5397
5398 END LOOP;
5399
5400 -- LOOP end.
5401 END if;
5402 l_selv_tbl_intm_rentals.DELETE;
5403 l_selv_tbl_intm_rentals := l_selv_tbl;
5404 l_stmv_rec_intm_rentals := l_stmv_rec;
5405 END LOOP;
5406 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5407 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5408 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5409 RAISE OKL_API.G_EXCEPTION_ERROR;
5410 END IF;
5411 -- for the contract header level.
5412 l_stmv_rec_intm_rentals.khr_id := TO_NUMBER(p_chr_id);
5413 l_stmv_rec_intm_rentals.kle_id := NULL;
5414 l_stmv_rec_intm_rentals.say_code := 'CURR';
5415 IF ( p_purpose = 'REPORT') THEN
5416 l_stmv_rec_intm_rentals.active_yn := 'N';
5417 ELSE
5418 l_stmv_rec_intm_rentals.active_yn := 'Y';
5419 END IF;
5420 l_stmv_rec_intm_rentals.date_current := sysdate;
5421 l_stmv_rec_intm_rentals.transaction_number := l_strm_rec.transaction_number;
5422 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
5423 -- Get Billabel rentals
5424
5425 OPEN l_billedrents_csr(l_hdr_rec.orig_system_id1, -1, p_purpose );
5426 FETCH l_billedrents_csr INTO l_orig_amount;
5427 IF l_billedrents_csr%NOTFOUND THEN
5428 okl_api.set_message(p_app_name => G_APP_NAME,
5429 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5430 p_token1 => G_COL_NAME_TOKEN,
5431 p_token1_value => 'Orig System Chr_id and for '||p_purpose);
5432 RAISE OKL_API.G_EXCEPTION_ERROR;
5433 END IF;
5434 CLOSE l_billedrents_csr;
5435 -- Get Billabel rentals
5436 OPEN l_billedrents_csr(TO_NUMBER(p_chr_id), -1, p_purpose );
5437 FETCH l_billedrents_csr INTO l_rebook_amount;
5438 IF l_billedrents_csr%NOTFOUND THEN
5439 okl_api.set_message(p_app_name => G_APP_NAME,
5440 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5441 p_token1 => G_COL_NAME_TOKEN,
5442 p_token1_value => 'Chr_id and for '||p_purpose);
5443 RAISE OKL_API.G_EXCEPTION_ERROR;
5444 END IF;
5445 CLOSE l_billedrents_csr;
5446
5447 l_selv_tbl_intm_rentals(1).amount := l_rebook_amount - l_orig_amount;
5448 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
5449 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
5450 l_selv_tbl_intm_rentals(1).se_line_number := 1;
5451 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Rebooked Rentals';
5452 --bug# 3014721
5453 --l_selv_tbl_intm_rentals(1).date_billed := sysdate;
5454 --l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
5455 l_stmv_rec_intm_rentals.sty_id := styid.id;
5456 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
5457 Okl_Streams_Pub.create_streams(
5458 p_api_version => p_api_version,
5459 p_init_msg_list => p_init_msg_list,
5460 x_return_status => x_return_status,
5461 x_msg_count => x_msg_count,
5462 x_msg_data => x_msg_data,
5463 p_stmv_rec => l_stmv_rec_intm_rentals,
5464 p_selv_tbl => l_selv_tbl_intm_rentals,
5465 x_stmv_rec => x_stmv_rec,
5466 x_selv_tbl => x_selv_tbl);
5467 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5468 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5469 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5470 RAISE OKL_API.G_EXCEPTION_ERROR;
5471 END IF;
5472 END IF;
5473 l_selv_tbl_intm_rentals.DELETE(1, l_selv_tbl_intm_rentals.LAST);
5474 l_stmv_rec_intm_rentals := NULL;
5475 -- for the contract header level.
5476 OKL_API.END_ACTIVITY (x_msg_count,
5477 x_msg_data );
5478 EXCEPTION
5479 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5480 IF l_strm_csr%ISOPEN THEN
5481 CLOSE l_strm_csr;
5482 END IF;
5483 IF l_billedrents_csr%ISOPEN THEN
5484 CLOSE l_billedrents_csr;
5485 END IF;
5486 IF l_line_csr%ISOPEN THEN
5487 CLOSE l_line_csr;
5488 END IF;
5489 IF l_hdr_csr%ISOPEN THEN
5490 CLOSE l_hdr_csr;
5491 END IF;
5492 IF get_styid_csr%ISOPEN THEN
5493 CLOSE get_styid_csr;
5494 END IF;
5495 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5496 l_api_name,
5497 G_PKG_NAME,
5498 'OKL_API.G_RET_STS_ERROR',
5499 x_msg_count,
5500 x_msg_data,
5501 '_PVT');
5502 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5503 IF l_strm_csr%ISOPEN THEN
5504 CLOSE l_strm_csr;
5505 END IF;
5506 IF l_billedrents_csr%ISOPEN THEN
5507 CLOSE l_billedrents_csr;
5508 END IF;
5509 IF l_line_csr%ISOPEN THEN
5510 CLOSE l_line_csr;
5511 END IF;
5512 IF l_hdr_csr%ISOPEN THEN
5513 CLOSE l_hdr_csr;
5514 END IF;
5515 IF get_styid_csr%ISOPEN THEN
5516 CLOSE get_styid_csr;
5517 END IF;
5518 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5519 l_api_name,
5520 G_PKG_NAME,
5521 'OKL_API.G_RET_STS_UNEXP_ERROR',
5522 x_msg_count,
5523 x_msg_data,
5524 '_PVT');
5525 WHEN OTHERS THEN
5526 IF l_strm_csr%ISOPEN THEN
5527 CLOSE l_strm_csr;
5528 END IF;
5529 IF l_billedrents_csr%ISOPEN THEN
5530 CLOSE l_billedrents_csr;
5531 END IF;
5532 IF l_line_csr%ISOPEN THEN
5533 CLOSE l_line_csr;
5534 END IF;
5535 IF l_hdr_csr%ISOPEN THEN
5536 CLOSE l_hdr_csr;
5537 END IF;
5538 IF get_styid_csr%ISOPEN THEN
5539 CLOSE get_styid_csr;
5540 END IF;
5541 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5542 l_api_name,
5543 G_PKG_NAME,
5544 'OTHERS',
5545 x_msg_count,
5546 x_msg_data,
5547 '_PVT');
5548 END create_interim_rental_streams;
5549
5550 -- Added by HKPATEL for mass rebook fix
5551 PROCEDURE adjust_massrebook_streams(
5552 p_api_version IN NUMBER,
5553 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
5554 x_return_status OUT NOCOPY VARCHAR2,
5555 x_msg_count OUT NOCOPY NUMBER,
5556 x_msg_data OUT NOCOPY VARCHAR2,
5557 p_chr_id IN VARCHAR2,
5558 p_purpose IN VARCHAR2) AS
5559
5560 l_api_name CONSTANT VARCHAR2(256) := 'ADJUSTMENT_STREAMS';
5561 --styid NUMBER;
5562 styid strm_rec_type;
5563 stream_name VARCHAR2(256);
5564 lv_chr_secure VARCHAR2(3) := OKL_API.G_FALSE;
5565 ln_secure_amt NUMBER := 0;
5566
5567 -- To check if the contract is MASS REBOOK candidate
5568 CURSOR c_chk_msrbk_csr(p_chr_id NUMBER)
5569 IS
5570 SELECT 'Y'
5571 FROM DUAL
5572 WHERE EXISTS (SELECT 'Y'
5573 FROM okl_rbk_selected_contract
5574 WHERE khr_id = p_chr_id
5575 AND status = 'UNDER REVISION');
5576 -- Billable rents
5577
5578 -- Bug 4164120 changes start
5579
5580 CURSOR l_billedrents_csr(p_chr_id NUMBER,
5581 p_kle_id NUMBER,
5582 p_purpose VARCHAR2)
5583 IS
5584 SELECT NVL(SUM(ele.AMOUNT),0) amount
5585 FROM okl_strm_elements ele,
5586 okl_streams str,
5587 okl_strm_type_b sty
5588 WHERE str.khr_id = p_chr_id
5589 AND NVL(str.kle_id, -1) = p_kle_id
5590 AND str.sty_id = sty.id
5591 AND str.say_code = 'CURR'
5592 AND nvl(str.purpose_code, 'ORIGIN') = p_purpose
5593 AND sty.stream_type_purpose <> 'REBOOK_BILLING_ADJUSTMENT'
5594 AND ele.stm_id = str.id
5595 AND NVL(ele.date_billed, SYSDATE+1) < SYSDATE;
5596
5597 -- Get billing adjustment stream amount which are not billed
5598 CURSOR l_bill_adjust_csr(p_chr_id NUMBER,
5599 p_kle_id NUMBER,
5600 p_purpose VARCHAR2)
5601 IS
5602 SELECT NVL(SUM(ele.AMOUNT),0) amount
5603 FROM okl_strm_elements ele,
5604 okl_streams str,
5605 okl_strm_type_b sty
5606 WHERE str.khr_id = p_chr_id
5607 AND NVL(str.kle_id, -1) = p_kle_id
5608 AND str.sty_id = sty.id
5609 AND str.say_code = 'CURR'
5610 AND nvl(str.purpose_code, 'ORIGIN') = p_purpose
5611 AND sty.stream_type_purpose = 'REBOOK_BILLING_ADJUSTMENT'
5612 AND ele.stm_id = str.id
5613 AND ele.date_billed IS NULL;
5614
5615 -- Bug 4164120 changes end
5616
5617 -- Get the Line info
5618 CURSOR l_line_csr( p_chr_id NUMBER )
5619 IS
5620 SELECT kle.id kle_id,
5621 kle.start_date
5622 FROM okc_k_lines_b kle,
5623 okc_line_styles_b lse
5624 WHERE kle.lse_id = lse.id
5625 AND lse.lty_code in ( 'FREE_FORM1', 'FEE', 'SOLD_SERVICE', 'LINK_SERV_ASSET')--bug# 3343133 (ssiruvol)
5626 AND kle.dnz_chr_id = p_chr_id;
5627
5628 -- Get the Stream id
5629 CURSOR get_styid_csr(p_strm_name OKL_STRM_TYPE_TL.NAME%TYPE)
5630 IS
5631 SELECT nvl(tl.id,-1) id,
5632 b.stream_type_subclass
5633 FROM okl_strm_type_tl tl,
5634 okl_strm_type_b b
5635 WHERE tl.language = USERENV('LANG')
5636 AND tl.name = p_strm_name
5637 AND tl.id = b.id;
5638
5639 -- Added for user defined streams - HKPATEL
5640
5641 l_strm_name VARCHAR2(30);
5642
5643 -- Added code ends here - HKPATEL
5644
5645
5646 -- get the transaction number
5647 CURSOR l_trx_num_csr
5648 IS
5649 -- SELECT DISTINCT str.transaction_number transaction_number
5650 -- FROM okl_streams str
5651 -- WHERE str.khr_id = p_chr_id
5652 -- AND str.say_code = 'CURR'
5653 -- AND nvl(str.purpose_code, 'ORIGIN') = p_purpose;
5654 SELECT OKL_SIF_SEQ.NEXTVAL
5655 FROM dual;
5656
5657 -- Bucket to store the billed amonts
5658 TYPE bill_rec_type IS RECORD (
5659 kle_id NUMBER := NULL,
5660 billed_amt NUMBER := NULL);
5661 lt_bill_rec bill_rec_type;
5662 k NUMBER := 0;
5663 ln_billed_adj_amt NUMBER := 0;
5664 ln_transaction_number NUMBER := 0;
5665 lv_msrbk_yn VARCHAR2(3) := 'N';
5666 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
5667 r_line_rec l_line_csr%ROWTYPE;
5668 l_strm_rec l_trx_num_csr%ROWTYPE;
5669 l_styid_rec get_styid_csr%ROWTYPE;
5670 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
5671 l_stmv_rec_intm_rentals Okl_Streams_pub.stmv_rec_type;
5672 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
5673 l_selv_tbl_intm_rentals Okl_Streams_pub.selv_tbl_type;
5674 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
5675 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
5676 l_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
5677 l_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
5678 lx_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
5679 lx_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
5680 lx_inv_agmt_chr_id_tbl okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
5681 Begin
5682 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5683 -- Call start_activity to create savepoint, check compatibility
5684 -- and initialize message list
5685 x_return_status := OKL_API.START_ACTIVITY (
5686 l_api_name
5687 ,p_init_msg_list
5688 ,'_PVT'
5689 ,x_return_status);
5690 -- Check if activity started successfully
5691 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5692 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5693 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5694 RAISE OKL_API.G_EXCEPTION_ERROR;
5695 END IF;
5696
5697 OPEN l_hdr_pdt_csr(p_chr_id);
5698 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5699 CLOSE l_hdr_pdt_csr;
5700
5701 OPEN c_chk_msrbk_csr(p_chr_id => p_chr_id);
5702 FETCH c_chk_msrbk_csr INTO lv_msrbk_yn;
5703 CLOSE c_chk_msrbk_csr;
5704 IF lv_msrbk_yn = 'Y' THEN
5705 -- Code added and commented for user defined streams - HKPATEL
5706 IF(g_rep_req_yn = 'Y') THEN
5707
5708 get_primary_no_prc_stream_type
5709 (
5710 p_khr_id =>p_chr_id,
5711 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
5712 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
5713 x_return_status => x_return_status,
5714 x_primary_sty_id =>styid
5715 );
5716 IF x_return_status = 'E' THEN
5717 x_return_status := 'S';
5718 END IF;
5719
5720 ELSE
5721 get_primary_no_prc_stream_type
5722 (
5723 p_khr_id =>p_chr_id,
5724 p_pdt_id =>l_pdt_id_rec.pid,
5725 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
5726 x_return_status => x_return_status,
5727 x_primary_sty_id =>styid
5728 );
5729 IF x_return_status = 'E' THEN
5730 x_return_status := 'S';
5731 END IF;
5732
5733 END IF;
5734 /*
5735 -- get the stream id
5736 OPEN get_styid_csr(p_strm_name => l_strm_name);
5737 --OPEN get_styid_csr(p_strm_name => 'BILLING ADJUSTMENT');
5738
5739 FETCH get_styid_csr INTO l_styid_rec;
5740 IF get_styid_csr%NOTFOUND THEN
5741 okl_api.set_message(p_app_name => G_APP_NAME,
5742 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5743 p_token1 => G_COL_NAME_TOKEN,
5744 p_token1_value => 'Stream name');
5745 RAISE OKL_API.G_EXCEPTION_ERROR;
5746 END IF;
5747 CLOSE get_styid_csr;
5748 IF l_styid_rec.id = -1 THEN
5749 okl_api.set_message(p_app_name => G_APP_NAME,
5750 p_msg_name => G_INVALID_VALUE,
5751 p_token1 => G_COL_NAME_TOKEN,
5752 p_token1_value => 'Stream ID');
5753 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5754 END IF;
5755 */
5756 -- Added code for user defined stream ends here
5757 -- Get the line info
5758 FOR r_line_rec IN l_line_csr (p_chr_id) LOOP
5759 l_stmv_rec_intm_rentals.khr_id := p_chr_id;
5760 l_stmv_rec_intm_rentals.kle_id := r_line_rec.kle_id;
5761 l_stmv_rec_intm_rentals.say_code := 'WORK';
5762 l_stmv_rec_intm_rentals.date_working := SYSDATE;
5763
5764 IF (p_purpose = 'REPORT') THEN
5765 l_stmv_rec_intm_rentals.active_yn := 'N';
5766 ELSE
5767 l_stmv_rec_intm_rentals.active_yn := 'Y';
5768 END IF;
5769
5770 -- to get the transaction number of the contract
5771 OPEN l_trx_num_csr;
5772 FETCH l_trx_num_csr INTO ln_transaction_number;
5773 CLOSE l_trx_num_csr;
5774 l_stmv_rec_intm_rentals.transaction_number := ln_transaction_number;
5775 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
5776 l_stmv_rec_intm_rentals.sty_id := styid.id;
5777 -- Get the billed amount + not billed billing adjustment amount
5778 -- When the billing adjustment streams are billed then
5779 -- we need to take the same into account.
5780 OPEN l_bill_adjust_csr(p_chr_id => p_chr_id,
5781 p_kle_id => r_line_rec.kle_id,
5782 p_purpose => p_purpose);
5783 FETCH l_bill_adjust_csr INTO ln_billed_adj_amt;
5784 IF l_bill_adjust_csr%NOTFOUND THEN
5785 okl_api.set_message(p_app_name => G_APP_NAME,
5786 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5787 p_token1 => G_COL_NAME_TOKEN,
5788 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
5789 x_return_status := OKL_API.G_RET_STS_ERROR;
5790 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5791 END IF;
5792 CLOSE l_bill_adjust_csr;
5793 -- to get the billed amount of all the rent that have been
5794 -- billed but does not include the billing adjustment stream amount
5795 OPEN l_billedrents_csr(p_chr_id => p_chr_id,
5796 p_kle_id => r_line_rec.kle_id,
5797 p_purpose => p_purpose);
5798 FETCH l_billedrents_csr INTO lt_bill_rec.billed_amt;
5799 IF l_billedrents_csr%NOTFOUND THEN
5800 okl_api.set_message(p_app_name => G_APP_NAME,
5801 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5802 p_token1 => G_COL_NAME_TOKEN,
5803 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
5804 x_return_status := OKL_API.G_RET_STS_ERROR;
5805 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5806 END IF;
5807 CLOSE l_billedrents_csr;
5808
5809 l_selv_tbl_intm_rentals(1).amount := (lt_bill_rec.billed_amt) * -1 + ln_billed_adj_amt;
5810 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
5811 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
5812 l_selv_tbl_intm_rentals(1).se_line_number := 1;
5813 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Mass Rebooked Rentals';
5814 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
5815 Okl_Streams_Pub.create_streams(
5816 p_api_version => p_api_version,
5817 p_init_msg_list => p_init_msg_list,
5818 x_return_status => x_return_status,
5819 x_msg_count => x_msg_count,
5820 x_msg_data => x_msg_data,
5821 p_stmv_rec => l_stmv_rec_intm_rentals,
5822 p_selv_tbl => l_selv_tbl_intm_rentals,
5823 x_stmv_rec => x_stmv_rec,
5824 x_selv_tbl => x_selv_tbl);
5825 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5826 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5827 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5828 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5829 END IF;
5830 END IF;
5831 -- Check for Original contract is securitized
5832 okl_securitization_pvt.check_khr_securitized(
5833 p_api_version => p_api_version,
5834 p_init_msg_list => p_init_msg_list,
5835 x_return_status => x_return_status,
5836 x_msg_count => x_msg_count,
5837 x_msg_data => x_msg_data,
5838 p_khr_id => p_chr_id,
5839 p_effective_date => r_line_rec.start_date,
5840 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
5841 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
5842 x_value => lv_chr_secure,
5843 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
5844 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5845 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5846 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5847 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5848 END IF;
5849 IF lv_chr_secure = OKL_API.G_TRUE THEN
5850 IF(g_rep_req_yn = 'Y') THEN
5851 get_primary_no_prc_stream_type
5852 (
5853 p_khr_id =>p_chr_id,
5854 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
5855 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
5856 x_return_status => x_return_status,
5857 x_primary_sty_id =>styid
5858 );
5859 IF x_return_status = 'E' THEN
5860 x_return_status := 'S';
5861 END IF;
5862
5863
5864 ELSE
5865 get_primary_no_prc_stream_type
5866 (
5867 p_khr_id =>p_chr_id,
5868 p_pdt_id =>l_pdt_id_rec.pid,
5869 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
5870 x_return_status => x_return_status,
5871 x_primary_sty_id =>styid
5872 );
5873 IF x_return_status = 'E' THEN
5874 x_return_status := 'S';
5875 END IF;
5876
5877 END IF;
5878
5879 /*
5880 --OPEN get_styid_csr(p_strm_name => 'INVESTOR DISBURSEMENT ADJUSTMENT');
5881 OPEN get_styid_csr(p_strm_name => l_strm_name);
5882 FETCH get_styid_csr INTO l_styid_rec;
5883 IF get_styid_csr%NOTFOUND THEN
5884 okl_api.set_message(p_app_name => G_APP_NAME,
5885 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5886 p_token1 => G_COL_NAME_TOKEN,
5887 p_token1_value => 'Stream name');
5888 x_return_status := OKL_API.G_RET_STS_ERROR;
5889 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5890 END IF;
5891 CLOSE get_styid_csr;
5892 IF l_styid_rec.id = -1 THEN
5893 okl_api.set_message(p_app_name => G_APP_NAME,
5894 p_msg_name => G_INVALID_VALUE,
5895 p_token1 => G_COL_NAME_TOKEN,
5896 p_token1_value => 'Stream ID');
5897 x_return_status := OKL_API.G_RET_STS_ERROR;
5898 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
5899 END IF;
5900 */
5901 -- Get the amount
5902 -- LOOP start.
5903 okl_securitization_pvt.check_kle_securitized(
5904 p_api_version => p_api_version,
5905 p_init_msg_list => p_init_msg_list,
5906 x_return_status => x_return_status,
5907 x_msg_count => x_msg_count,
5908 x_msg_data => x_msg_data,
5909 p_kle_id => r_line_rec.kle_id,
5910 p_effective_date => r_line_rec.start_date,
5911 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
5912 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
5913 x_value => lv_chr_secure,
5914 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
5915 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5916 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5917 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5918 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5919 END IF;
5920 FOR i in lx_inv_agmt_chr_id_tbl.FIRST..lx_inv_agmt_chr_id_tbl.LAST LOOP
5921 ln_secure_amt := okl_investor_invoice_disb_pvt.get_disb_amt(
5922 p_ia_id => lx_inv_agmt_chr_id_tbl(i).khr_id,
5923 p_rbk_khr_id => p_chr_id,
5924 p_rbk_kle_id => r_line_rec.kle_id);
5925 l_stmv_rec_secure := l_stmv_rec_intm_rentals;
5926 l_selv_tbl_secure := l_selv_tbl_intm_rentals;
5927 l_stmv_rec_secure.sty_id := styid.id;
5928 l_stmv_rec_secure.source_id := lx_inv_agmt_chr_id_tbl(i).khr_id;
5929 l_stmv_rec_secure.source_table := 'OKL_K_HEADERS';
5930 l_selv_tbl_secure(1).amount := ln_secure_amt * -1;
5931 IF l_selv_tbl_secure(1).amount <> 0 THEN
5932 okl_streams_pub.create_streams(
5933 p_api_version => p_api_version,
5934 p_init_msg_list => p_init_msg_list,
5935 x_return_status => x_return_status,
5936 x_msg_count => x_msg_count,
5937 x_msg_data => x_msg_data,
5938 p_stmv_rec => l_stmv_rec_secure,
5939 p_selv_tbl => l_selv_tbl_secure,
5940 x_stmv_rec => lx_stmv_rec_secure,
5941 x_selv_tbl => lx_selv_tbl_secure);
5942 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5943 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
5944 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5945 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
5946 END IF;
5947 END IF;
5948 l_selv_tbl_secure.DELETE;
5949 l_selv_tbl_secure := l_selv_tbl;
5950 l_stmv_rec_secure := l_stmv_rec;
5951 END LOOP;
5952 END IF;
5953 l_selv_tbl_intm_rentals.DELETE;
5954 l_selv_tbl_intm_rentals := l_selv_tbl;
5955 l_stmv_rec_intm_rentals := l_stmv_rec;
5956 END LOOP;
5957 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5958 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5959 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5960 RAISE OKL_API.G_EXCEPTION_ERROR;
5961 END IF;
5962 -- generate for the contract lines
5963 l_stmv_rec_intm_rentals.khr_id := p_chr_id;
5964 l_stmv_rec_intm_rentals.kle_id := NULL;
5965 l_stmv_rec_intm_rentals.say_code := 'WORK';
5966 IF (p_purpose = 'REPORT') THEN
5967 l_stmv_rec_intm_rentals.active_yn := 'N';
5968 ELSE
5969 l_stmv_rec_intm_rentals.active_yn := 'Y';
5970 END IF;
5971 l_stmv_rec_intm_rentals.date_working := sysdate;
5972 l_stmv_rec_intm_rentals.transaction_number := ln_transaction_number;
5973 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
5974 l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
5975 -- Get the billed amount + not billed billing adjustment amount
5976 -- When the billing adjustment streams are billed then
5977 -- we need to take the same into account.
5978 OPEN l_bill_adjust_csr(p_chr_id => p_chr_id,
5979 p_kle_id => NULL,
5980 p_purpose => p_purpose);
5981 FETCH l_bill_adjust_csr INTO ln_billed_adj_amt;
5982 IF l_bill_adjust_csr%NOTFOUND THEN
5983 okl_api.set_message(p_app_name => G_APP_NAME,
5984 p_msg_name => G_LLA_NO_MATCHING_RECORD,
5985 p_token1 => G_COL_NAME_TOKEN,
5986 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
5987 x_return_status := OKL_API.G_RET_STS_ERROR;
5988 RAISE OKL_API.G_EXCEPTION_ERROR;
5989 END IF;
5990 CLOSE l_bill_adjust_csr;
5991 -- to get the billed amount of all the rent that have been
5992 -- billed but does not include the billing adjustment stream amount
5993 OPEN l_billedrents_csr(p_chr_id => p_chr_id,
5994 p_kle_id => NULL,
5995 p_purpose => p_purpose);
5996 FETCH l_billedrents_csr INTO lt_bill_rec.billed_amt;
5997 IF l_billedrents_csr%NOTFOUND THEN
5998 okl_api.set_message(p_app_name => G_APP_NAME,
5999 p_msg_name => G_LLA_NO_MATCHING_RECORD,
6000 p_token1 => G_COL_NAME_TOKEN,
6001 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
6002 x_return_status := OKL_API.G_RET_STS_ERROR;
6003 RAISE OKL_API.G_EXCEPTION_ERROR;
6004 END IF;
6005 CLOSE l_billedrents_csr;
6006
6007 l_selv_tbl_intm_rentals(1).amount := (lt_bill_rec.billed_amt) * -1 + ln_billed_adj_amt;
6008 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
6009 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
6010 l_selv_tbl_intm_rentals(1).se_line_number := 1;
6011 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Mass Rebooked Rentals';
6012 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
6013 Okl_Streams_Pub.create_streams(
6014 p_api_version => p_api_version,
6015 p_init_msg_list => p_init_msg_list,
6016 x_return_status => x_return_status,
6017 x_msg_count => x_msg_count,
6018 x_msg_data => x_msg_data,
6019 p_stmv_rec => l_stmv_rec_intm_rentals,
6020 p_selv_tbl => l_selv_tbl_intm_rentals,
6021 x_stmv_rec => x_stmv_rec,
6022 x_selv_tbl => x_selv_tbl);
6023 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6024 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6025 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6026 RAISE OKL_API.G_EXCEPTION_ERROR;
6027 END IF;
6028 END IF;
6029 END IF;
6030 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6031 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6032 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6033 RAISE OKL_API.G_EXCEPTION_ERROR;
6034 END IF;
6035
6036 OKL_API.END_ACTIVITY (x_msg_count,
6037 x_msg_data );
6038 EXCEPTION
6039 WHEN OKL_API.G_EXCEPTION_ERROR then
6040 IF c_chk_msrbk_csr%ISOPEN THEN
6041 CLOSE c_chk_msrbk_csr;
6042 END IF;
6043 IF l_billedrents_csr%ISOPEN THEN
6044 CLOSE l_billedrents_csr;
6045 END IF;
6046 IF l_bill_adjust_csr%ISOPEN THEN
6047 CLOSE l_bill_adjust_csr;
6048 END IF;
6049 IF l_line_csr%ISOPEN THEN
6050 CLOSE l_line_csr;
6051 END IF;
6052 IF get_styid_csr%ISOPEN THEN
6053 CLOSE get_styid_csr;
6054 END IF;
6055 IF l_trx_num_csr%ISOPEN THEN
6056 CLOSE l_trx_num_csr;
6057 END IF;
6058 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6059 l_api_name,
6060 G_PKG_NAME,
6061 'OKL_API.G_RET_STS_ERROR',
6062 x_msg_count,
6063 x_msg_data,
6064 '_PVT');
6065 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6066 IF c_chk_msrbk_csr%ISOPEN THEN
6067 CLOSE c_chk_msrbk_csr;
6068 END IF;
6069 IF l_billedrents_csr%ISOPEN THEN
6070 CLOSE l_billedrents_csr;
6071 END IF;
6072 IF l_bill_adjust_csr%ISOPEN THEN
6073 CLOSE l_bill_adjust_csr;
6074 END IF;
6075 IF l_line_csr%ISOPEN THEN
6076 CLOSE l_line_csr;
6077 END IF;
6078 IF get_styid_csr%ISOPEN THEN
6079 CLOSE get_styid_csr;
6080 END IF;
6081 IF l_trx_num_csr%ISOPEN THEN
6082 CLOSE l_trx_num_csr;
6083 END IF;
6084 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6085 l_api_name,
6086 G_PKG_NAME,
6087 'OKL_API.G_RET_STS_UNEXP_ERROR',
6088 x_msg_count,
6089 x_msg_data,
6090 '_PVT');
6091 WHEN OTHERS then
6092 IF c_chk_msrbk_csr%ISOPEN THEN
6093 CLOSE c_chk_msrbk_csr;
6094 END IF;
6095 IF l_billedrents_csr%ISOPEN THEN
6096 CLOSE l_billedrents_csr;
6097 END IF;
6098 IF l_bill_adjust_csr%ISOPEN THEN
6099 CLOSE l_bill_adjust_csr;
6100 END IF;
6101 IF l_line_csr%ISOPEN THEN
6102 CLOSE l_line_csr;
6103 END IF;
6104 IF get_styid_csr%ISOPEN THEN
6105 CLOSE get_styid_csr;
6106 END IF;
6107 IF l_trx_num_csr%ISOPEN THEN
6108 CLOSE l_trx_num_csr;
6109 END IF;
6110 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6111 l_api_name,
6112 G_PKG_NAME,
6113 'OTHERS',
6114 x_msg_count,
6115 x_msg_data,
6116 '_PVT');
6117 END adjust_massrebook_streams;
6118
6119
6120 -- End modification 11i10 bakuchib
6121 -- Start modification 11i10 bakuchib
6122 procedure create_advance_rental_streams(
6123 p_api_version IN NUMBER,
6124 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
6125 x_return_status OUT NOCOPY VARCHAR2,
6126 x_msg_count OUT NOCOPY NUMBER,
6127 x_msg_data OUT NOCOPY VARCHAR2,
6128 p_chr_id IN NUMBER,
6129 p_purpose IN VARCHAR2) AS
6130
6131 l_api_name CONSTANT VARCHAR2(256) := 'CREATE_ADV_RTL_STRMS';
6132 l_api_version CONSTANT NUMBER := 1;
6133 i NUMBER;
6134 j NUMBER;
6135 l_amount NUMBER;
6136 l_pay_amount NUMBER;
6137 l_structure NUMBER;
6138 error VARCHAR2(256);
6139 --styid NUMBER;
6140 styid strm_rec_type;
6141 stream_name VARCHAR2(256);
6142 l_stmv_rec okl_streams_pub.stmv_rec_type;
6143 l_stmv_rec_adv_rentals okl_streams_pub.stmv_rec_type;
6144 l_selv_tbl okl_streams_pub.selv_tbl_type;
6145 l_selv_tbl_adv_rentals okl_streams_pub.selv_tbl_type;
6146 x_stmv_rec okl_streams_pub.stmv_rec_type;
6147 x_selv_tbl okl_streams_pub.selv_tbl_type;
6148
6149 --Modified for streams performance
6150 -- This cursors fetches all the line id's for the contract whose Rent streams
6151 -- have a structure that is not -1 or 0
6152 --Bug 4346646 - Start of Changes
6153 -- arajagop added disticnt to the cursor below
6154 CURSOR l_struct_csr(chrId NUMBER , styId NUMBER)
6155 IS
6156 SELECT distinct crg.cle_id line_id,
6157 (NVL(crl.rule_information5,-1)) structure
6158 ,cle.sts_code sts_code
6159 ,date_terminated date_terminated
6160 FROM okc_rule_groups_b crg,
6161 okc_rules_b crl,
6162 okc_rules_b crl1,
6163 -- Bug 7653893 : RGOOTY
6164 okc_k_lines_b cle
6165 WHERE crl.rgp_id = crg.id
6166 AND crg.rgd_code = 'LALEVL'
6167 AND crl.rule_information_category = 'LASLL'
6168 AND crl1.rule_information_category = 'LASLH'
6169 AND crl.object2_id1 = crl1.id
6170 AND crl1.object1_id1 = styid
6171 AND crg.dnz_chr_id = chrId
6172 AND (NVL(crl.rule_information5,-1)) not in (-1,0)
6173 AND crg.cle_id = cle.id; -- Bug 7653893 : RGOOTY
6174 --Bug 4346646 - End of Changes
6175
6176 --Added by kthiruva on 04-Jul-2005
6177 --Bug 4414441 - Start of Changes
6178 --This cursor fetches the details of the payment plan the would be used in the Advance Rent Calculation
6179 CURSOR l_payment_csr(chrId NUMBER , styId NUMBER,kleId NUMBER)
6180 IS
6181 SELECT (NVL(crl.rule_information5,-1)) structure,
6182 fnd_date.canonical_to_date(crl.RULE_INFORMATION2) START_DATE,
6183 crl.RULE_INFORMATION3 PERIOD_IN_MONTHS,
6184 crl.RULE_INFORMATION6 AMOUNT,
6185 nvl(crl.RULE_INFORMATION10,'N') ARREARS,
6186 crl.RULE_INFORMATION7 STUB_DAYS,
6187 crl.RULE_INFORMATION8 STUB_AMOUNT,
6188 TUOM.ID1 FREQUENCY,
6189 null END_DATE
6190 FROM okc_rule_groups_b crg,
6191 okc_rules_b crl,
6192 okc_rules_b crl1,
6193 okl_time_units_v tuom
6194 WHERE crl.rgp_id = crg.id
6195 AND crg.rgd_code = 'LALEVL'
6196 AND crl.rule_information_category = 'LASLL'
6197 AND crl1.rule_information_category = 'LASLH'
6198 AND crl.object2_id1 = crl1.id
6199 AND crl1.object1_id1 = styId
6200 AND crg.dnz_chr_id = chrId
6201 AND TUOM.ID1=crl.OBJECT1_ID1
6202 AND (NVL(crl.rule_information5,-1)) not in (-1,0)
6203 AND crg.cle_id = kleId
6204 ORDER BY start_date ASC;
6205 --Bug 4414441 - End of Changes
6206
6207 CURSOR l_strm_csr (chrId NUMBER,
6208 kleId NUMBER,
6209 styId NUMBER,
6210 status VARCHAR2,
6211 pp VARCHAR2)
6212 IS
6213 SELECT str.Id,
6214 str.transaction_number,
6215 str.sgn_code sgn_code,
6216 str.khr_id,
6217 str.sty_id,
6218 str.say_code,
6219 str.active_yn,
6220 str.kle_id
6221 FROM okl_streams str
6222 WHERE str.khr_id = chrId
6223 AND str.kle_id = kleId
6224 AND str.say_code = 'WORK'
6225 --Added by kthiruva for Streams Performance Patch
6226 --Bug 4346646 - Start of Changes
6227 AND str.sty_id = styId
6228 --Bug 4346646 -End of Changes
6229 AND nvl( str.purpose_code, 'ORIGIN') = pp;
6230
6231 CURSOR l_strmele1_csr(stmid NUMBER)
6232 IS
6233 SELECT ele.id,
6234 ele.date_billed,
6235 ele.stream_element_date,
6236 ele.amount,
6237 ele.accrued_yn,
6238 ele.comments,
6239 ele.stm_id stm_id,
6240 ele.se_line_number se_line_number
6241 FROM okl_strm_elements ele
6242 WHERE ele.stm_id = stmid
6243 ORDER BY ele.stream_element_date;
6244
6245 CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
6246 SELECT count(stm.id) cnt
6247 FROM okl_streams stm
6248 WHERE stm.khr_id = khrid
6249 AND stm.say_code = 'WORK'
6250 AND stm.sgn_code = 'STMP'
6251 AND nvl(stm.purpose_code, 'ORIGIN') = p;
6252
6253 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
6254 l_struct_rec l_struct_csr%ROWTYPE;
6255 l_strm_rec l_strm_csr%ROWTYPE;
6256 l_strmele_rec l_strmele1_csr%ROWTYPE;
6257 l_line_rec l_line_rec_csr%ROWTYPE;
6258 l_rl_rec1 l_rl_csr1%ROWTYPE;
6259 l_stmp_yn_rec l_stmp_yn_csr%ROWTYPE;
6260 --Added for Streams Perf by kthiruva
6261 --Bug 4346646 - Start of Changes
6262 l_sty_id strm_rec_type;
6263 --Bug 4346646 - End of Changes
6264 --Added by kthiruva for Bug 4402229
6265 l_product_id NUMBER;
6266 --Added by kthiruva for handling the Advance Rent Streams esp for stub payments
6267 --Bug 4414441 - Start of Changes
6268 l_payment_rec l_payment_csr%ROWTYPE;
6269 TYPE l_payment_tbl_type IS TABLE OF l_payment_csr%ROWTYPE INDEX BY BINARY_INTEGER;
6270 l_payment_tbl l_payment_tbl_type;
6271 l_rent_amt_tbl Okl_Streams_Util.NumberTabTyp;
6272 k NUMBER;
6273 l_next_position NUMBER;
6274 --Bug 4414441 - End of Changes
6275 BEGIN
6276 print( l_api_name, 'begin');
6277 x_return_status := OKL_API.START_ACTIVITY(
6278 p_api_name => l_api_name,
6279 p_pkg_name => g_pkg_name,
6280 p_init_msg_list => p_init_msg_list,
6281 l_api_version => l_api_version,
6282 p_api_version => p_api_version,
6283 p_api_type => G_API_TYPE,
6284 x_return_status => x_return_status);
6285 -- check if activity started successfully
6286 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6287 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6288 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6289 RAISE OKL_API.G_EXCEPTION_ERROR;
6290 End If;
6291
6292 OPEN l_stmp_yn_csr (TO_NUMBER(p_chr_id), p_purpose);
6293 FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
6294 CLOSE l_stmp_yn_csr;
6295 --Added by kthiruva on 01-Jun-2005
6296 --Bug 4402229 - Start of Changes
6297 --Fetching the contract details
6298 OPEN l_hdr_pdt_csr(p_chr_id);
6299 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
6300 CLOSE l_hdr_pdt_csr;
6301 IF ( p_purpose = 'ORIGIN') THEN
6302 l_product_id := l_pdt_id_rec.pid;
6303 ELSIF (p_purpose = 'REPORT') THEN
6304 l_product_id := l_pdt_id_rec.report_pdt_id;
6305 END IF;
6306 --Added by kthiruva for Streams Performance
6307 --This call returns the id of the stream type of purpose 'RENT' in the contract's Stream Generation Template.
6308 get_primary_no_prc_stream_type
6309 (
6310 p_khr_id =>p_chr_id,
6311 p_pdt_id =>l_product_id,
6312 p_primary_sty_purpose =>'RENT',
6313 x_return_status => x_return_status,
6314 x_primary_sty_id =>l_sty_id
6315 );
6316 --Bug 4402229 - End of Changes
6317 --Looping through all the contract lines that have a structure payment defined on them
6318 --Initialising the counter variable k
6319
6320 -- get the stream type id based on the type of the product
6321 IF(g_rep_req_yn = 'Y')
6322 THEN
6323 get_dep_no_prc_stream_type
6324 (
6325 p_khr_id =>p_chr_id,
6326 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
6327 p_primary_sty_purpose=>'RENT',
6328 p_dependent_sty_purpose=>'ADVANCE_RENT',
6329 x_return_status => x_return_status,
6330 x_dependent_sty_id => styid
6331 );
6332 IF x_return_status = 'E' THEN
6333 x_return_status := 'S';
6334 END IF;
6335 ELSE
6336 get_dep_no_prc_stream_type
6337 (
6338 p_khr_id =>p_chr_id,
6339 p_pdt_id =>l_pdt_id_rec.pid,
6340 p_primary_sty_purpose=>'RENT',
6341 p_dependent_sty_purpose=>'ADVANCE_RENT',
6342 x_return_status => x_return_status,
6343 x_dependent_sty_id => styid
6344 );
6345 IF x_return_status = 'E' THEN
6346 x_return_status := 'S';
6347 END IF;
6348 END IF;
6349
6350 FOR l_struct_rec IN l_struct_csr(TO_NUMBER(p_chr_id),l_sty_id.id)
6351 LOOP
6352 -- Bug 7653893 : RGOOTY
6353 IF l_struct_rec.sts_code = 'TERMINATED' AND
6354 l_stmp_yn_rec.cnt > 0 -- Stream Generation happening using ESG
6355 THEN
6356 -- Introduced Logic to handle the Advance Rentals of the Terminated Assets seperately.
6357 -- Requirement:
6358 -- For the Terminated Assets, Advance Rental Streams which are
6359 -- <= Termination Date should be copied over, rather than re-generating it again.
6360 --
6361 -- This copy over logic is actually handled in okl_la_stream_pvt.RECREATE_TMT_LN_STRMS
6362 -- This API currently copies all the Streams generated using ESG for the Terminated Assets
6363 -- As part of this bug 7653893, we will be modifying the okl_la_stream_pvt.RECREATE_TMT_LN_STRMS
6364 -- to consider the Advance_Rent streams also to copy over [as its currently ignoring those]
6365 -- Also modifying the create_advance_rental_streams API not to worry about the
6366 -- Advance Rental Streams Generation for the Terminated Assets in ESG contract.
6367 NULL;
6368 ELSE
6369 k := 0;
6370 l_payment_tbl.delete;
6371 l_structure := TO_NUMBER(l_struct_rec.structure);
6372 --Added by kthiruva on 04-Jul-2005
6373 --Bug 4414441 - Start of Changes
6374 --Fetching the payment lines
6375 FOR l_payment_rec IN l_payment_csr(chrId => TO_NUMBER(p_chr_id),
6376 styId => l_sty_id.id,
6377 kleId => l_struct_rec.line_id)
6378 LOOP
6379 l_payment_tbl(k) := l_payment_rec;
6380 k := k + 1;
6381 END LOOP;
6382 -- If the structure exists then, the amount for the 1st element has to be copied
6383 --from the payments table for the Rent Streams
6384 IF (l_payment_tbl(0).stub_days is not null) AND (l_payment_tbl(0).period_in_months is null)
6385 THEN
6386 l_rent_amt_tbl(0) := l_payment_tbl(0).stub_amount;
6387 ELSE
6388 l_rent_amt_tbl(0) := l_payment_tbl(0).amount;
6389 END IF;
6390 --Fetching the values from the payment definition for the Last n elements where n refers
6391 --to the structure for Rent Streams
6392 --To fetch the values of the last n stream elements, we loop through the payment table
6393 --from LAST to FIRST
6394 k := l_payment_tbl.LAST;
6395 i := 1;
6396 WHILE (i <= l_structure )
6397 LOOP
6398 WHILE (k >= l_payment_tbl.FIRST )
6399 LOOP
6400 --If the line is a stub payment,then we take the amount as it is and move to the previous line
6401 --in the payments table
6402 IF (l_payment_tbl(k).stub_days IS NOT NULL) AND (l_payment_tbl(k).period_in_months IS NULL)
6403 THEN
6404 l_rent_amt_tbl(l_structure - i + 1) := l_payment_tbl(k).stub_amount;
6405 k := k - 1;
6406 i := i + 1;
6407 ELSE
6408 --If the payment is periodic then we take the amount.We then check if the number of periods is
6409 --greater than 1. If so, the same line is used
6410 l_rent_amt_tbl(l_structure - i + 1) := l_payment_tbl(k).amount;
6411 i := i + 1;
6412 IF ( i > l_payment_tbl(k).period_in_months)
6413 THEN
6414 k := k - 1;
6415 END IF;
6416 END IF;
6417 --If the amounts of all the advance rent elements are derived then we exit the loop.
6418 IF (i > l_structure)
6419 THEN
6420 EXIT;
6421 END IF;
6422 END LOOP;
6423 END LOOP;
6424 --Bug 4414441 - End of Changes
6425
6426 OPEN l_strm_csr (TO_NUMBER(p_chr_id),
6427 l_struct_rec.line_id,
6428 l_sty_id.id,
6429 'WORK',
6430 p_purpose);
6431 FETCH l_strm_csr into l_strm_rec;
6432 IF l_strm_csr%FOUND THEN
6433 l_stmv_rec.id := l_strm_rec.id;
6434 -- Start of BUG# 3101439 modification
6435 --l_stmv_rec.active_yn := 'Y';
6436 -- End of BUG# 3101439 modification
6437 l_stmv_rec.date_current := sysdate;
6438 l_stmv_rec_adv_rentals.khr_id := TO_NUMBER(p_chr_id);
6439 l_stmv_rec_adv_rentals.kle_id := l_struct_rec.line_id;
6440 --l_stmv_rec_adv_rentals.say_code := 'CURR';
6441 l_stmv_rec_adv_rentals.say_code := 'WORK';
6442 IF (p_purpose = 'REPORT') THEN
6443 -- Start of BUG# 3101439 modification
6444 l_stmv_rec.active_yn := 'N';
6445 -- End of BUG# 3101439 modification
6446 l_stmv_rec_adv_rentals.active_yn := 'N';
6447 l_stmv_rec_adv_rentals.purpose_code := p_purpose;
6448 ELSE
6449 l_stmv_rec_adv_rentals.purpose_code := NULL;
6450 l_stmv_rec_adv_rentals.active_yn := 'N';
6451 -- Start of BUG# 3101439 modification
6452 l_stmv_rec.active_yn := 'N';
6453 -- End of BUG# 3101439 modification
6454 END IF;
6455 l_stmv_rec_adv_rentals.date_working := sysdate;
6456 l_stmv_rec_adv_rentals.transaction_number := l_strm_rec.transaction_number;
6457 l_stmv_rec_adv_rentals.sgn_code := 'MANL';
6458 i := 0;
6459 FOR l_strmele_rec IN l_strmele1_csr ( l_strm_rec.id) LOOP
6460 i := i + 1;
6461 l_selv_tbl(i).id := l_strmele_rec.id;
6462 l_selv_tbl(i).date_billed := l_strmele_rec.date_billed;
6463 l_selv_tbl(i).stream_element_date := l_strmele_rec.stream_element_date;
6464 l_selv_tbl(i).amount := l_strmele_rec.amount;
6465 l_selv_tbl(i).accrued_yn := l_strmele_rec.accrued_yn;
6466 l_selv_tbl(i).comments := l_strmele_rec.comments;
6467 l_selv_tbl(i).se_line_number := l_strmele_rec.se_line_number;
6468 l_selv_tbl(i).stm_id := l_strmele_rec.STM_ID;
6469 END LOOP;
6470 -- arajagop : the following calculation is needed for ESG
6471 -- where the RENT stream itself comes adjusted (8000, 4000, 0) say for a
6472 -- 4000 Advance First and Last payment
6473 j := 1;
6474 l_pay_amount := 0;
6475 --Added by kthiruva on 04-Jul-2005 for the Advance Rent Fix
6476 --Bug 4414441 - Start of Changes
6477 k := 1;
6478 l_pay_amount := 0;
6479 IF (l_stmp_yn_rec.cnt > 0) THEN
6480 --Assign the value for the first rent stream element from the rent amount table populated
6481 l_selv_tbl(1).amount := l_rent_amt_tbl(0);
6482 END IF;
6483 --Bug 4414441 - End of Changes
6484
6485 l_selv_tbl_adv_rentals(j).accrued_yn := l_selv_tbl(1).accrued_yn;
6486 l_selv_tbl_adv_rentals(j).stream_element_date := l_selv_tbl(1).stream_element_date;
6487 l_selv_tbl_adv_rentals(j).se_line_number := j; --l_selv_tbl(i).SE_LINE_NUMBER;
6488 l_selv_tbl_adv_rentals(j).comments := l_selv_tbl(1).comments;
6489 FOR i IN (l_selv_tbl.COUNT-l_structure+1)..l_selv_tbl.COUNT LOOP
6490 j := j + 1;
6491 IF (l_stmp_yn_rec.cnt > 0) THEN
6492 --Modified by kthriuva on 04-Jul-2005
6493 --Bug 4414441 - Start of Changes
6494 --Assign the values derived from the payment plan cursor to the last n stream elements for Rent
6495 l_selv_tbl(i).amount := l_rent_amt_tbl(k);
6496 l_selv_tbl_adv_rentals(j).amount := -1.0 * l_rent_amt_tbl(k);
6497 l_pay_amount := l_pay_amount+ l_rent_amt_tbl(k);
6498 k := k + 1;
6499 --Bug 4414441 - End of Changes
6500 ELSE
6501 -- sum up this value and store it for ISG first element
6502 l_pay_amount := l_pay_amount + l_selv_tbl(i).amount;
6503 -- store the same value as negative of the stream element value
6504 l_selv_tbl_adv_rentals(j).amount := -1.0 * l_selv_tbl(i).amount;
6505 END IF;
6506 l_selv_tbl_adv_rentals(j).accrued_yn := l_selv_tbl(i).accrued_yn;
6507 l_selv_tbl_adv_rentals(j).stream_element_date := l_selv_tbl(i).stream_element_date;
6508 l_selv_tbl_adv_rentals(j).date_billed := l_selv_tbl(i).date_billed;
6509 l_selv_tbl_adv_rentals(j).se_line_number := j; --l_selv_tbl(i).se_line_number;
6510 l_selv_tbl_adv_rentals(j).comments := l_selv_tbl(i).comments;
6511 END LOOP;
6512 IF (l_stmp_yn_rec.cnt > 0) THEN
6513 --Added by kthiruva on 04-Jul-2005
6514 --Bug 4414441 - Start of Changes
6515 --Assigning the value of the sum of the last n element amounts to the first advance rent stream
6516 l_selv_tbl_adv_rentals(1).amount := l_pay_amount;
6517 --Bug 4414441 - End of Changes
6518 -- update the rent streams for ESG to reflect uniform rental payment
6519 okl_streams_pub.update_streams(
6520 p_api_version => l_api_version
6521 ,p_init_msg_list => p_init_msg_list
6522 ,x_return_status => x_return_status
6523 ,x_msg_count => x_msg_count
6524 ,x_msg_data => x_msg_data
6525 ,p_stmv_rec => l_stmv_rec
6526 ,p_selv_tbl => l_selv_tbl
6527 ,x_stmv_rec => x_stmv_rec
6528 ,x_selv_tbl => x_selv_tbl);
6529
6530 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6531 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6532 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6533 RAISE OKL_API.G_EXCEPTION_ERROR;
6534 END IF;
6535 ELSE
6536 -- FOR ISG store the value for the first element alone
6537 -- as the sum of all the elements based on the structure (1,2,3)
6538 l_selv_tbl_adv_rentals(1).amount := l_pay_amount;
6539 END IF;
6540
6541 l_stmv_rec_adv_rentals.sty_id := styid.id;
6542 okl_streams_pub.create_streams(
6543 p_api_version => l_api_version
6544 ,p_init_msg_list => p_init_msg_list
6545 ,x_return_status => x_return_status
6546 ,x_msg_count => x_msg_count
6547 ,x_msg_data => x_msg_data
6548 ,p_stmv_rec => l_stmv_rec_adv_rentals
6549 ,p_selv_tbl => l_selv_tbl_adv_rentals
6550 ,x_stmv_rec => x_stmv_rec
6551 ,x_selv_tbl => x_selv_tbl);
6552
6553 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6554 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6555 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6556 RAISE OKL_API.G_EXCEPTION_ERROR;
6557 END IF;
6558 l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
6559 l_selv_tbl_adv_rentals.DELETE(1, l_selv_tbl_adv_rentals.COUNT);
6560 l_stmv_rec := NULL;
6561 l_stmv_rec_adv_rentals := NULL;
6562 /* Dont raise any exceptions if you dont find any thing for rent streams ..
6563 ELSE
6564 RAISE OKL_API.G_EXCEPTION_ERROR;
6565 */
6566 END IF;
6567 CLOSE l_Strm_csr;
6568 END IF;
6569 END LOOP;
6570 --Bug 4346646 - End of Changes
6571
6572 print( l_api_name, 'end', x_return_status);
6573 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
6574 EXCEPTION
6575 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6576 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6577 p_api_name => l_api_name,
6578 p_pkg_name => g_pkg_name,
6579 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
6580 x_msg_count => x_msg_count,
6581 x_msg_data => x_msg_data,
6582 p_api_type => g_api_type);
6583 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6584 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6585 p_api_name => l_api_name,
6586 p_pkg_name => g_pkg_name,
6587 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6588 x_msg_count => x_msg_count,
6589 x_msg_data => x_msg_data,
6590 p_api_type => g_api_type);
6591 If( strm_name_csr%ISOPEN ) Then
6592 CLOSE strm_name_csr;
6593 End If;
6594 WHEN OTHERS THEN
6595 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6596 p_api_name => l_api_name,
6597 p_pkg_name => g_pkg_name,
6598 p_exc_name => 'OTHERS',
6599 x_msg_count => x_msg_count,
6600 x_msg_data => x_msg_data,
6601 p_api_type => g_api_type);
6602 End create_advance_rental_streams;
6603
6604 -- End modification 11i10 bakuchib
6605 -- Start modification Bug#3121708 bakuchib
6606 Procedure update_contract_yields(
6607 p_api_version IN NUMBER,
6608 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
6609 x_return_status OUT NOCOPY VARCHAR2,
6610 x_msg_count OUT NOCOPY NUMBER,
6611 x_msg_data OUT NOCOPY VARCHAR2,
6612 p_chr_id IN VARCHAR2,
6613 p_chr_yields IN yields_rec_type) AS
6614
6615 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_YIELDS';
6616 l_api_version CONSTANT NUMBER := 1;
6617 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6618
6619 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
6620 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
6621 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
6622 xl_khrv_rec okl_contract_pub.khrv_rec_type;
6623
6624 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
6625 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
6626
6627 i NUMBER;
6628 l_tcnCode VARCHAR2(256);
6629 l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
6630
6631 l_fnd_rec fnd_lookups_csr%ROWTYPE;
6632 l_trx_rec trx_csr%ROWTYPE;
6633 l_hdr_rec l_hdr_csr%ROWTYPE;
6634
6635 l_chr_id NUMBER := TO_NUMBER(p_chr_id);
6636 ln_sub_exists NUMBER := 0;
6637 ln_esg_isg NUMBER := 0;
6638
6639 -- Validate weather the stream generation is done thru internal/external stream generation
6640 CURSOR validate_esg_isg (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
6641 IS
6642 SELECT 1
6643 FROM dual
6644 WHERE EXISTS (SELECT 1
6645 FROM okl_streams
6646 WHERE khr_id= p_dnz_chr_id
6647 AND say_code = 'WORK'
6648 AND sgn_code = 'STMP');
6649 -- Validate the contract has Subsidy line
6650 CURSOR validate_sub_line (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
6651 IS
6652 SELECT 1
6653 FROM dual
6654 WHERE EXISTS (SELECT '1'
6655 FROM okl_subsidies_b subb,
6656 okc_k_lines_b cle_fin,
6657 okc_line_styles_b lse_fin,
6658 okc_k_lines_b cle,
6659 okl_k_headers khr,
6660 okl_k_lines kle,
6661 okc_line_styles_b lse
6662 WHERE cle.dnz_chr_id = p_dnz_chr_id
6663 AND cle.dnz_chr_id = khr.id
6664 AND khr.deal_type IN ('LEASEDF','LEASEOP','LEASEST','LOAN')
6665 AND cle.cle_id = cle_fin.id
6666 AND cle.dnz_chr_id = cle_fin.dnz_chr_id
6667 AND cle.id = kle.id
6668 AND cle.lse_id = lse.id
6669 AND lse.lty_code = 'SUBSIDY'
6670 AND subb.id = kle.subsidy_id
6671 AND cle_fin.id = cle.cle_id
6672 AND cle_fin.lse_id = lse_fin.id
6673 AND lse_fin.lty_code = 'FREE_FORM1');
6674 begin
6675
6676 print( l_api_name, 'begin');
6677
6678 x_return_status := OKL_API.START_ACTIVITY(
6679 p_api_name => l_api_name,
6680 p_pkg_name => g_pkg_name,
6681 p_init_msg_list => p_init_msg_list,
6682 l_api_version => l_api_version,
6683 p_api_version => p_api_version,
6684 p_api_type => G_API_TYPE,
6685 x_return_status => x_return_status);
6686
6687 -- check if activity started successfully
6688 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6689 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6690 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6691 raise OKL_API.G_EXCEPTION_ERROR;
6692 End If;
6693 OPEN validate_sub_line(p_dnz_chr_id => l_chr_id);
6694 FETCH validate_sub_line INTO ln_sub_exists;
6695 CLOSE validate_sub_line;
6696 --Start of modifcation BAKUCHIB
6697 -- If the contract has Subsidy line then now we are populating
6698 -- Sub yield record of the okl_k_headers with regular yield's
6699 -- given by super trump/Internal stream generation
6700 OPEN validate_esg_isg(p_dnz_chr_id => l_chr_id);
6701 FETCH validate_esg_isg INTO ln_esg_isg;
6702 CLOSE validate_esg_isg;
6703 IF ln_sub_exists = 1 THEN
6704 print( l_api_name, ' contract # subsidy ' || to_char( l_chr_id ));
6705 pl_chrv_rec.id := l_chr_id;
6706 pl_khrv_rec.id := l_chr_id;
6707 --Start of modifcation Bug#3254058 BAKUCHIB
6708 -- Depending on the value of ln_esg_isg we decide weather stream generated by extrenal/internal
6709 IF ln_esg_isg = 1 THEN
6710 pl_khrv_rec.sub_pre_tax_yield := TRUNC(p_chr_yields.sub_pre_tax_yield*100.00,3);
6711 pl_khrv_rec.sub_after_tax_yield := TRUNC(p_chr_yields.sub_after_tax_yield*100.00,3);
6712 pl_khrv_rec.sub_pre_tax_irr := TRUNC(p_chr_yields.sub_pre_tax_irr*100.00,3);
6713 pl_khrv_rec.sub_after_tax_irr := TRUNC(p_chr_yields.sub_after_tax_irr*100.00,3);
6714 --Bug 4687692 dpsingh
6715 pl_khrv_rec.sub_impl_interest_rate := TRUNC(p_chr_yields.sub_impl_interest_rate*100.00,3);
6716 --Bug 4687692 end
6717 pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
6718 pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
6719 pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
6720 pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
6721 pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
6722 ELSIF ln_esg_isg = 0 THEN
6723 pl_khrv_rec.sub_pre_tax_yield := TRUNC(p_chr_yields.sub_pre_tax_yield*100.00,3);
6724 pl_khrv_rec.sub_after_tax_yield := TRUNC(p_chr_yields.sub_after_tax_yield*100.00,3);
6725 pl_khrv_rec.sub_pre_tax_irr := TRUNC(p_chr_yields.sub_pre_tax_irr*100.00,3);
6726 pl_khrv_rec.sub_after_tax_irr := TRUNC(p_chr_yields.sub_after_tax_irr*100.00,3);
6727 pl_khrv_rec.sub_impl_interest_rate := TRUNC(p_chr_yields.sub_impl_interest_rate*100.00,3);
6728 pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
6729 pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
6730 pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
6731 pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
6732 pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
6733 END IF;
6734 --End of modifcation Bug#3254058 BAKUCHIB
6735 ELSIF ln_sub_exists = 0 THEN
6736 print( l_api_name, ' contract # ' || to_char( l_chr_id ));
6737 pl_chrv_rec.id := l_chr_id;
6738 pl_khrv_rec.id := l_chr_id;
6739 pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
6740 pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
6741 pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
6742 pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
6743 pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
6744 pl_khrv_rec.sub_pre_tax_yield := NULL;
6745 pl_khrv_rec.sub_after_tax_yield := NULL;
6746 pl_khrv_rec.sub_pre_tax_irr := NULL;
6747 pl_khrv_rec.sub_after_tax_irr := NULL;
6748 pl_khrv_rec.sub_impl_interest_rate := NULL;
6749 END IF;
6750 --End of modifcation BAKUCHIB
6751 okl_contract_pvt.update_contract_header(
6752 p_api_version => p_api_version,
6753 p_init_msg_list => p_init_msg_list,
6754 x_return_status => x_return_status,
6755 x_msg_count => x_msg_count,
6756 x_msg_data => x_msg_data,
6757 p_restricted_update => OKL_API.G_FALSE,
6758 p_chrv_rec => pl_chrv_rec,
6759 p_khrv_rec => pl_khrv_rec,
6760 p_edit_mode => 'N',
6761 x_chrv_rec => xl_chrv_rec,
6762 x_khrv_rec => xl_khrv_rec);
6763
6764
6765 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6766 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6767 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6768 raise OKL_API.G_EXCEPTION_ERROR;
6769 End If;
6770
6771
6772 print( l_api_name, 'end', x_return_status);
6773
6774 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
6775
6776 Exception
6777 when OKL_API.G_EXCEPTION_ERROR then
6778 IF validate_sub_line%ISOPEN THEN
6779 CLOSE validate_sub_line;
6780 END IF;
6781 IF validate_esg_isg%ISOPEN THEN
6782 CLOSE validate_esg_isg;
6783 END IF;
6784 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6785 p_api_name => l_api_name,
6786 p_pkg_name => g_pkg_name,
6787 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
6788 x_msg_count => x_msg_count,
6789 x_msg_data => x_msg_data,
6790 p_api_type => g_api_type);
6791 IF l_hdr_csr%ISOPEN THEN
6792 CLOSE l_hdr_csr;
6793 End If;
6794
6795 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6796 IF validate_sub_line%ISOPEN THEN
6797 CLOSE validate_sub_line;
6798 END IF;
6799 IF validate_esg_isg%ISOPEN THEN
6800 CLOSE validate_esg_isg;
6801 END IF;
6802 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6803 p_api_name => l_api_name,
6804 p_pkg_name => g_pkg_name,
6805 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6806 x_msg_count => x_msg_count,
6807 x_msg_data => x_msg_data,
6808 p_api_type => g_api_type);
6809
6810 IF l_hdr_csr%ISOPEN THEN
6811 CLOSE l_hdr_csr;
6812 End If;
6813
6814 when OTHERS then
6815 IF validate_sub_line%ISOPEN THEN
6816 CLOSE validate_sub_line;
6817 END IF;
6818 IF validate_esg_isg%ISOPEN THEN
6819 CLOSE validate_esg_isg;
6820 END IF;
6821 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6822 p_api_name => l_api_name,
6823 p_pkg_name => g_pkg_name,
6824 p_exc_name => 'OTHERS',
6825 x_msg_count => x_msg_count,
6826 x_msg_data => x_msg_data,
6827 p_api_type => g_api_type);
6828
6829 IF l_hdr_csr%ISOPEN THEN
6830 CLOSE l_hdr_csr;
6831 End If;
6832
6833 end update_contract_yields;
6834
6835
6836 --Added by bkatraga for bug 13447258
6837 -- This procedure will copy the variable rate created streams for terminated assets
6838 PROCEDURE COPY_VARIABLE_RATE_STREAMS(
6839 p_api_version IN NUMBER,
6840 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
6841 x_return_status OUT NOCOPY VARCHAR2,
6842 x_msg_count OUT NOCOPY NUMBER,
6843 x_msg_data OUT NOCOPY VARCHAR2,
6844 p_chr_id IN VARCHAR2,
6845 p_trx_number IN NUMBER) AS
6846
6847 --Cursor to get the terminated assets
6848 CURSOR c_tmt_assets (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6849 SELECT CLE.ID LINE_ID
6850 , TRUNC(CLE.DATE_TERMINATED) TERMINATION_DATE
6851 FROM OKL_K_HEADERS KHR
6852 , OKC_K_LINES_B CLE
6853 , OKC_LINE_STYLES_B LSE
6854 , OKC_STATUSES_B STS
6855 WHERE CLE.DNZ_CHR_ID = KHR.ID
6856 AND LSE.ID = CLE.LSE_ID
6857 AND LSE.LTY_CODE ='FREE_FORM1'
6858 AND STS.CODE = CLE.STS_CODE
6859 AND STS.STE_CODE = 'TERMINATED'
6860 AND KHR.ID = cp_chr_id;
6861
6862 --Cursor to get the streams for terminated asset upto termination date
6863 CURSOR c_streams (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
6864 , cp_cle_id OKC_K_LINES_B.ID%TYPE
6865 , cp_date_terminated DATE
6866 , cp_trx_number okl_streams.transaction_number%TYPE) IS
6867 SELECT STM.ID STREAM_ID
6868 , STM.STY_ID
6869 , STM.SGN_CODE
6870 , STM.PURPOSE_CODE
6871 , STM.ACTIVE_YN
6872 , SEL.STREAM_ELEMENT_DATE
6873 , SEL.AMOUNT
6874 , SEL.SE_LINE_NUMBER
6875 , SEL.COMMENTS
6876 FROM OKL_STREAMS STM
6877 , OKL_STRM_ELEMENTS SEL
6878 , OKL_STRM_TYPE_B STY
6879 WHERE SEL.STM_ID = STM.ID
6880 AND STM.KHR_ID = cp_chr_id
6881 AND STM.KLE_ID = cp_cle_id
6882 AND (nvl(STM.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG') from okl_stream_interfaces si
6883 where transaction_number = cp_trx_number))
6884 AND STM.SAY_CODE = 'CURR'
6885 AND SEL.STREAM_ELEMENT_DATE <= cp_date_terminated
6886 AND STM.STY_ID = STY.ID
6887 AND STY.stream_type_purpose IN ('VARIABLE_INTEREST',
6888 'INTEREST_CATCHUP',
6889 'FLOAT_FACTOR_ADJUSTMENT')
6890 ORDER BY STM.ID;
6891
6892 l_api_name CONSTANT VARCHAR2(30) := 'COPY_VARIABLE_RATE_STREAMS';
6893 l_strm_index NUMBER;
6894 l_sel_index NUMBER;
6895 l_prev_stm_id OKL_STREAMS.ID%TYPE;
6896 l_terminated_date DATE;
6897 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
6898 lx_stmv_tbl okl_streams_pub.stmv_tbl_type;
6899 l_selv_tbl okl_streams_pub.selv_tbl_type;
6900 lx_selv_tbl okl_streams_pub.selv_tbl_type;
6901 l_kle_id OKC_K_LINES_B.ID%TYPE;
6902
6903 BEGIN
6904
6905 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6906
6907 -- Call start_activity to create savepoint, check compatibility
6908 -- and initialize message list
6909 x_return_status := OKL_API.START_ACTIVITY (
6910 l_api_name
6911 ,p_init_msg_list
6912 ,'_PVT'
6913 ,x_return_status);
6914 -- Check if activity started successfully
6915 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6916 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6917 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6918 RAISE OKL_API.G_EXCEPTION_ERROR;
6919 END IF;
6920
6921 l_strm_index := 0;
6922 l_sel_index := 0;
6923 l_prev_stm_id := NULL;
6924
6925 FOR tmt_asset_rec IN c_tmt_assets (p_chr_id)
6926 LOOP
6927 l_kle_id := tmt_asset_rec.LINE_ID;
6928 l_terminated_date := tmt_asset_rec.TERMINATION_DATE;
6929
6930 FOR streams_rec IN c_streams (p_chr_id, l_kle_id, l_terminated_date, p_trx_number)
6931 LOOP
6932 -- Set the Stream record if this is a new Stream
6933 IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
6934 l_prev_stm_id := streams_rec.STREAM_ID;
6935 l_strm_index := l_strm_index + 1;
6936
6937 l_stmv_tbl(l_strm_index).khr_id := p_chr_id;
6938 l_stmv_tbl(l_strm_index).kle_id := l_kle_id;
6939 l_stmv_tbl(l_strm_index).sty_id := streams_rec.STY_ID;
6940 l_stmv_tbl(l_strm_index).sgn_code := streams_rec.sgn_code;
6941 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
6942 l_stmv_tbl(l_strm_index).say_code := G_STREAM_ACTIVITY_WORK;
6943 l_stmv_tbl(l_strm_index).active_yn := streams_rec.active_yn;
6944 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
6945 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
6946 END IF;
6947
6948 l_sel_index := l_sel_index + 1;
6949 l_selv_tbl(l_sel_index).parent_index := l_strm_index;
6950 l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
6951 l_selv_tbl(l_sel_index).amount := streams_rec.amount;
6952 l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
6953 l_selv_tbl(l_sel_index).comments := streams_rec.comments;
6954 END LOOP;
6955 END LOOP;
6956
6957 IF l_stmv_tbl.COUNT > 0 THEN
6958 -- Call the API to bulk insert data into streams and stream elements
6959 OKL_STREAMS_PUB.CREATE_STREAMS_PERF(p_api_version
6960 , p_init_msg_list
6961 , x_return_status
6962 , x_msg_count
6963 , x_msg_data
6964 , l_stmv_tbl
6965 , l_selv_tbl
6966 , lx_stmv_tbl
6967 , lx_selv_tbl);
6968 IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6969 RAISE OKL_API.G_EXCEPTION_ERROR;
6970 ELSIF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
6971 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6972 END IF;
6973 END IF;
6974
6975 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
6976
6977 EXCEPTION
6978 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6979 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6980 p_api_name => l_api_name,
6981 p_pkg_name => g_pkg_name,
6982 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
6983 x_msg_count => x_msg_count,
6984 x_msg_data => x_msg_data,
6985 p_api_type => g_api_type);
6986 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6987 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6988 p_api_name => l_api_name,
6989 p_pkg_name => g_pkg_name,
6990 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6991 x_msg_count => x_msg_count,
6992 x_msg_data => x_msg_data,
6993 p_api_type => g_api_type);
6994 WHEN OTHERS THEN
6995 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6996 p_api_name => l_api_name,
6997 p_pkg_name => g_pkg_name,
6998 p_exc_name => 'OTHERS',
6999 x_msg_count => x_msg_count,
7000 x_msg_data => x_msg_data,
7001 p_api_type => g_api_type);
7002 END COPY_VARIABLE_RATE_STREAMS;
7003
7004
7005 -- This procedure will historize the variable rate created streams for terminated assets
7006 PROCEDURE HISTORIZE_VAR_RATE_STREAMS(
7007 p_api_version IN NUMBER,
7008 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
7009 x_return_status OUT NOCOPY VARCHAR2,
7010 x_msg_count OUT NOCOPY NUMBER,
7011 x_msg_data OUT NOCOPY VARCHAR2,
7012 p_chr_id IN VARCHAR2,
7013 p_purpose IN VARCHAR2) AS
7014
7015 --Cursor to get the terminated assets
7016 CURSOR c_tmt_assets (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
7017 SELECT CLE.ID LINE_ID
7018 FROM OKL_K_HEADERS KHR
7019 , OKC_K_LINES_B CLE
7020 , OKC_LINE_STYLES_B LSE
7021 , OKC_STATUSES_B STS
7022 WHERE CLE.DNZ_CHR_ID = KHR.ID
7023 AND LSE.ID = CLE.LSE_ID
7024 AND LSE.LTY_CODE ='FREE_FORM1'
7025 AND STS.CODE = CLE.STS_CODE
7026 AND STS.STE_CODE = 'TERMINATED'
7027 AND KHR.ID = cp_chr_id;
7028
7029 --Cursor to get the stream ids for terminated asset
7030 CURSOR c_streams (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
7031 , cp_cle_id OKC_K_LINES_B.ID%TYPE
7032 , cp_purpose VARCHAR2) IS
7033 SELECT STM.ID STREAM_ID
7034 FROM OKL_STREAMS STM
7035 , OKL_STRM_TYPE_B STY
7036 WHERE STM.KHR_ID = cp_chr_id
7037 AND STM.KLE_ID = cp_cle_id
7038 AND (nvl(STM.purpose_code,'ORIGIN') = cp_purpose)
7039 AND STM.SAY_CODE = 'CURR'
7040 AND STM.STY_ID = STY.ID
7041 AND STY.stream_type_purpose IN ('VARIABLE_INTEREST',
7042 'INTEREST_CATCHUP',
7043 'FLOAT_FACTOR_ADJUSTMENT');
7044
7045 --Cursor to check whether it is a partial termination mass rebook transaction
7046 CURSOR l_chk_mass_rbk_csr IS
7047 SELECT '!'
7048 FROM okc_k_headers_b CHR,
7049 okl_trx_contracts ktrx,
7050 okl_trx_contracts trx
7051 WHERE CHR.ID = p_chr_id
7052 AND ktrx.KHR_ID = chr.id
7053 AND ktrx.tsu_code = 'ENTERED'
7054 AND ktrx.rbr_code IS NOT NULL
7055 AND ktrx.tcn_type = 'TRBK'
7056 AND ktrx.representation_type = 'PRIMARY'
7057 AND ktrx.source_trx_type = 'TCN'
7058 AND trx.tcn_type = 'ALT'
7059 AND trx.id = ktrx.source_trx_id
7060 AND EXISTS (SELECT '1'
7061 FROM okl_rbk_selected_contract rbk_khr
7062 WHERE rbk_khr.KHR_ID = chr.id
7063 AND rbk_khr.STATUS <> 'PROCESSED');
7064
7065 l_api_name CONSTANT VARCHAR2(30) := 'HISTORIZE_VAR_RATE_STREAMS';
7066 l_mass_rbk_khr VARCHAR2(1);
7067
7068 BEGIN
7069
7070 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7071
7072 -- Call start_activity to create savepoint, check compatibility
7073 -- and initialize message list
7074 x_return_status := OKL_API.START_ACTIVITY (
7075 l_api_name
7076 ,p_init_msg_list
7077 ,'_PVT'
7078 ,x_return_status);
7079 -- Check if activity started successfully
7080 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7081 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7082 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7083 RAISE OKL_API.G_EXCEPTION_ERROR;
7084 END IF;
7085
7086
7087 l_mass_rbk_khr := '?';
7088 OPEN l_chk_mass_rbk_csr;
7089 FETCH l_chk_mass_rbk_csr INTO l_mass_rbk_khr;
7090 CLOSE l_chk_mass_rbk_csr;
7091
7092 IF l_mass_rbk_khr = '!' THEN
7093 FOR tmt_asset_rec IN c_tmt_assets (p_chr_id)
7094 LOOP
7095 FOR streams_rec IN c_streams (p_chr_id, tmt_asset_rec.LINE_ID, p_purpose)
7096 LOOP
7097 UPDATE OKL_STREAMS
7098 SET say_code = 'HIST',
7099 active_yn = 'N',
7100 date_history = sysdate,
7101 last_updated_by = FND_GLOBAL.USER_ID, -- BUG:14749215 changes start here
7102 last_update_date = sysdate,
7103 last_update_login = FND_GLOBAL.LOGIN_ID -- BUG:14749215 changes end here
7104 WHERE ID = streams_rec.STREAM_ID;
7105 END LOOP;
7106 END LOOP;
7107 END IF;
7108
7109 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
7110
7111 EXCEPTION
7112 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7113 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7114 p_api_name => l_api_name,
7115 p_pkg_name => g_pkg_name,
7116 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
7117 x_msg_count => x_msg_count,
7118 x_msg_data => x_msg_data,
7119 p_api_type => g_api_type);
7120 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7121 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7122 p_api_name => l_api_name,
7123 p_pkg_name => g_pkg_name,
7124 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7125 x_msg_count => x_msg_count,
7126 x_msg_data => x_msg_data,
7127 p_api_type => g_api_type);
7128 WHEN OTHERS THEN
7129 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7130 p_api_name => l_api_name,
7131 p_pkg_name => g_pkg_name,
7132 p_exc_name => 'OTHERS',
7133 x_msg_count => x_msg_count,
7134 x_msg_data => x_msg_data,
7135 p_api_type => g_api_type);
7136 END HISTORIZE_VAR_RATE_STREAMS;
7137 --end bkatraga for bug 13447258
7138
7139
7140 -- Start modification Bug#3121708 bakuchib
7141 -- gboomina BUG#4508077 added p_source_call as a parameter
7142 Procedure adjust_streams(
7143 p_api_version IN NUMBER,
7144 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
7145 x_return_status OUT NOCOPY VARCHAR2,
7146 x_msg_count OUT NOCOPY NUMBER,
7147 x_msg_data OUT NOCOPY VARCHAR2,
7148 p_chr_id IN VARCHAR2,
7149 p_purpose IN VARCHAR2,
7150 p_source_call IN VARCHAR2) AS
7151
7152 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_STREAMS';
7153 l_api_version CONSTANT NUMBER := 1;
7154 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7155
7156 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7157 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
7158 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7159 xl_khrv_rec okl_contract_pub.khrv_rec_type;
7160
7161 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
7162 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
7163 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
7164 l_strm_rec strm_csr%ROWTYPE;
7165 l_strms_rec strms_csr%ROWTYPE;
7166
7167 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
7168 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
7169 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
7170 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
7171
7172 -- Code for bulk update -02/28/2004 - HKPATEL
7173 l_id_tbl okl_streams_util.NumberTabTyp;
7174 l_say_code_tbl okl_streams_util.Var10TabTyp;
7175 l_active_yn_tbl okl_streams_util.Var10TabTyp;
7176 l_date_history_tbl okl_streams_util.DateTabTyp;
7177 l_date_curr_tbl okl_streams_util.DateTabTyp;
7178
7179 -- Code for bulk update ends here -02/28/2004 - HKPATEL
7180
7181
7182 i NUMBER;
7183 j NUMBER;
7184 l_tcnCode VARCHAR2(256);
7185 l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
7186
7187 l_fnd_rec fnd_lookups_csr%ROWTYPE;
7188 l_trx_rec trx_csr%ROWTYPE;
7189 l_hdr_rec l_hdr_csr%ROWTYPE;
7190
7191 l_strm_name_rec strm_name_csr%ROWTYPE;
7192 l_strm_name VARCHAR2(256);
7193
7194 l_chr_id NUMBER := TO_NUMBER(p_chr_id);
7195
7196 -- Changed this cursor for user defined streams
7197 Cursor l_secdep_csr( chrId NUMBER,pdtId NUMBER, pp VARCHAR2 ) is
7198 Select ele.id
7199 From okl_strm_elements ele,
7200 okl_streams str,
7201 --okl_strm_type_v sty,
7202 OKL_STRM_TMPT_LINES_UV sty,
7203 okl_k_lines_full_v kle,
7204 okc_line_styles_b lse,
7205 okc_statuses_b sts
7206 Where ele.stm_id = str.id
7207 and str.khr_id = chrId
7208 and str.kle_id = kle.id
7209 and str.sty_id = sty.primary_sty_id
7210 --and sty.name = 'SECURITY DEPOSIT'
7211 and sty.primary_sty_purpose = 'SECURITY_DEPOSIT'
7212 and sty.pdt_id = pdtId
7213 and str.say_code = 'CURR'
7214 and nvl(str.purpose_code, 'ORIGIN') = pp
7215 --and str.active_yn = 'Y' --sechawla 10-nov-09 9001318 : commented out
7216 and KLE.LSE_ID = LSE.ID
7217 and KLE.fee_type = 'SECDEPOSIT'
7218 and lse.lty_code = 'FEE'
7219 and kle.dnz_chr_id = str.khr_id
7220 and sts.code = kle.sts_code
7221 --Start of bug#3121708 modification BAKUCHIB
7222 and sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED')
7223 --End of bug#3121708 modification BAKUCHIB
7224 and ele.amount < 0
7225 Order By ele.stream_element_date;
7226
7227 l_secdep_rec l_secdep_csr%ROWTYPE;
7228
7229 CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
7230 SELECT count(stm.id) cnt
7231 FROM okl_streams stm
7232 WHERE stm.khr_id = khrid
7233 AND stm.say_code = 'WORK'
7234 AND stm.sgn_code = 'STMP'
7235 AND nvl(stm.purpose_code, 'ORIGIN') = p;
7236
7237 l_stmp_yn_rec l_stmp_yn_csr%ROWTYPE;
7238 -- added for bugfix 4034007
7239 CURSOR l_report_deal_csr (product_id number) IS
7240 select value
7241 from okl_pdt_pqy_vals_uv
7242 where name = 'LEASE' and pdt_id = product_id;
7243 l_rep_pdt_deal_type VARCHAR2(10);
7244 l_deal_type VARCHAR2(10);
7245 l_origin_purpose VARCHAR2(10);
7246
7247 -- Cursor for rebook enhancement - HKPATEL - 4212626
7248 l_hist_flag VARCHAR2(1) := 'Y';
7249 CURSOR bill_strm_hist_csr(chrId NUMBER,
7250 styId NUMBER,
7251 status VARCHAR2,
7252 pp VARCHAR2 )
7253 IS
7254
7255 SELECT 'N'
7256 FROM OKL_STREAMS str
7257 WHERE EXISTS (SELECT ID FROM OKL_STRM_ELEMENTS ele WHERE ele.STM_ID = str.ID AND ele.DATE_BILLED IS NULL )
7258 AND str.KHR_ID = chrId
7259 AND str.STY_ID = styId
7260 AND str.SAY_CODE = status
7261 AND nvl(str.purpose_code, 'ORIGIN') = pp;
7262 -- Cursor for rebook enhancement ends here - HKPATEL
7263
7264
7265
7266 begin
7267
7268 --Added by kthiruva for Debugging
7269 write_to_log('Inside procedure adjust_Streams');
7270
7271 print( l_api_name, 'begin');
7272 x_return_status := OKL_API.START_ACTIVITY(
7273 p_api_name => l_api_name,
7274 p_pkg_name => g_pkg_name,
7275 p_init_msg_list => p_init_msg_list,
7276 l_api_version => l_api_version,
7277 p_api_version => p_api_version,
7278 p_api_type => G_API_TYPE,
7279 x_return_status => x_return_status);
7280 -- check if activity started successfully
7281 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7282 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7283 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7284 raise OKL_API.G_EXCEPTION_ERROR;
7285 End If;
7286 OPEN l_hdr_pdt_csr(p_chr_id);
7287 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
7288 CLOSE l_hdr_pdt_csr;
7289
7290 OPEN l_stmp_yn_csr( TO_NUMBER(p_chr_id), p_purpose);
7291 FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
7292 CLOSE l_stmp_yn_csr;
7293 If ( l_stmp_yn_rec.cnt > 0 ) Then
7294
7295 OPEN l_hdr_csr( p_chr_id );
7296 FETCH l_hdr_csr INTO l_hdr_rec;
7297 CLOSE l_hdr_csr;
7298 -- added for bugfix 4034007
7299 if (p_purpose = 'ORIGIN') then
7300 l_origin_purpose := '-99';
7301 l_deal_type := l_hdr_rec.deal_type;
7302 else
7303 l_origin_purpose := p_purpose;
7304
7305 OPEN l_report_deal_csr( l_hdr_rec.report_pdt_id );
7306 FETCH l_report_deal_csr INTO l_rep_pdt_deal_type;
7307 CLOSE l_report_deal_csr;
7308
7309 l_deal_type := l_rep_pdt_deal_type;
7310 end if;
7311
7312 -- gboomina BUG#4508077 start - generating IDC streams only for ISG
7313 IF(p_source_call = 'ISG') THEN
7314 OKL_EXPENSE_STREAMS_PVT.generate_idc(
7315 p_khr_id => p_chr_id,
7316 p_purpose_code => l_origin_purpose,
7317 p_currency_code => l_hdr_rec.currency_code,
7318 p_start_date => l_hdr_rec.start_date,
7319 p_end_date => l_hdr_rec.end_date,
7320 p_deal_type => l_deal_type,
7321 x_return_status => x_return_status);
7322 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7323 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7324 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7325 raise OKL_API.G_EXCEPTION_ERROR;
7326 End If;
7327 END IF;
7328 -- gboomina BUG#4508077 end
7329 END IF;
7330 --Added by kthiruva for Debugging
7331 write_To_log('Prior to the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE');
7332 OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE(
7333 p_api_version => p_api_version,
7334 p_init_msg_list => p_init_msg_list,
7335 p_khr_id => p_chr_id,
7336 p_purpose_code => p_purpose,
7337 x_return_status => x_return_status,
7338 x_msg_count => x_msg_count,
7339 x_msg_data => x_msg_data);
7340
7341 --Added by kthiruva for Debugging
7342 write_to_log('After the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE, return status is :'||x_return_status);
7343 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7344 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7345 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7346 raise OKL_API.G_EXCEPTION_ERROR;
7347 END IF;
7348
7349 -- Added by HKPATEL for mass rebook fix
7350 /*
7351 Commented by HKPATEL for bug 4212626
7352 adjust_massrebook_streams(p_api_version => p_api_version,
7353 p_init_msg_list => p_init_msg_list,
7354 x_return_status => x_return_status,
7355 x_msg_count => x_msg_count,
7356 x_msg_data => x_msg_data,
7357 p_chr_id => p_chr_id,
7358 p_purpose => p_purpose);
7359 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7360 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7361 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7362 raise OKL_API.G_EXCEPTION_ERROR;
7363 END IF;
7364 */
7365
7366 -- Code for rebook enhancement - HKPATEL - 4212626
7367 --Added by kthiruva for Debugging
7368 write_to_log('Prior to the call to create_advance_rental_streams');
7369 create_advance_rental_streams(
7370 p_api_version => p_api_version,
7371 p_init_msg_list => p_init_msg_list,
7372 x_return_status => x_return_status,
7373 x_msg_count => x_msg_count,
7374 x_msg_data => x_msg_data,
7375 p_chr_id => l_chr_id,
7376 p_purpose => p_purpose);
7377
7378 --Added by kthiruva for Debugging
7379 write_to_log('After the call to create_advance_rental_streams, return status is :'||x_return_status);
7380
7381 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7382 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7383 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7384 raise OKL_API.G_EXCEPTION_ERROR;
7385 END IF;
7386
7387 --Added by kthiruva for Debugging
7388 write_to_log('Prior to the call to adjust_passthrough_streams ');
7389 adjust_passthrough_streams(
7390 p_api_version => p_api_version,
7391 p_init_msg_list => p_init_msg_list,
7392 x_return_status => x_return_status,
7393 x_msg_count => x_msg_count,
7394 x_msg_data => x_msg_data,
7395 p_chr_id => p_chr_id,
7396 p_purpose => p_purpose);
7397
7398 --Added by kthiruva for Debugging
7399 write_to_log('After the call to adjust_passthrough_streams, return status is :'||x_return_status);
7400
7401 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7402 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7403 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7404 RAISE OKL_API.G_EXCEPTION_ERROR;
7405 END IF;
7406
7407 --Added by kthiruva for Debugging
7408 write_to_log('Prior to the call to OKL_CONTRACT_REBOOK_PVT.link_streams');
7409 OKL_CONTRACT_REBOOK_PVT.link_streams(
7410 p_api_version => p_api_version,
7411 p_init_msg_list => p_init_msg_list,
7412 x_return_status => x_return_status,
7413 x_msg_count => x_msg_count,
7414 x_msg_data => x_msg_data,
7415 p_khr_id => p_chr_id);
7416
7417 --Added by kthiruva for Debugging
7418 write_to_log('After the call to OKL_CONTRACT_REBOOK_PVT.link_streams, return status is :'||x_return_status);
7419
7420 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7421 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7422 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7423 RAISE OKL_API.G_EXCEPTION_ERROR;
7424 END IF;
7425 -- Code for rebook enhancement ends here - HKPATEL
7426
7427 --Added by bkatraga for bug 13447258
7428 IF p_source_call = 'ESG' THEN
7429 HISTORIZE_VAR_RATE_STREAMS(
7430 p_api_version => p_api_version,
7431 p_init_msg_list => p_init_msg_list,
7432 x_return_status => x_return_status,
7433 x_msg_count => x_msg_count,
7434 x_msg_data => x_msg_data,
7435 p_chr_id => p_chr_id,
7436 p_purpose => p_purpose);
7437 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7438 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7439 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7440 RAISE OKL_API.G_EXCEPTION_ERROR;
7441 END IF;
7442 END IF;
7443 --end bkatraga for bug 13447258
7444
7445 i := 0;
7446 FOR l_strms_rec in strms_csr ( l_chr_id, 'CURR', p_purpose )
7447 LOOP
7448 -- code change for rebook enhancement - HKPATEL-4212626
7449 l_hist_flag := 'Y';
7450 OPEN strm_name_csr ( l_strms_rec.sty_id );
7451 FETCH strm_name_csr into l_strm_name_rec;
7452 IF strm_name_csr%NOTFOUND THEN
7453 CLOSE strm_name_csr;
7454 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7455 ELSIF (l_strm_name_rec.name = 'BILLING ADJUSTMENT') THEN
7456 OPEN bill_strm_hist_csr(l_chr_id,l_strms_rec.sty_id,'CURR',p_purpose);
7457 FETCH bill_strm_hist_csr into l_hist_flag;
7458 IF bill_strm_hist_csr%NOTFOUND THEN
7459 CLOSE bill_strm_hist_csr;
7460 END IF;
7461 END IF;
7462 CLOSE strm_name_csr;
7463
7464 -- code change for rebook enhancement ends here- HKPATEL
7465
7466 OPEN strm_name_csr ( l_strms_rec.sty_id );
7467 FETCH strm_name_csr into l_strm_name_rec;
7468
7469 IF strm_name_csr%NOTFOUND THEN
7470 CLOSE strm_name_csr;
7471 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7472
7473 ELSIF (l_strm_name_rec.stream_type_purpose NOT IN (
7474 'INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT',
7475 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
7476 'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE',
7477 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
7478 'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE',
7479 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
7480 'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS',
7481 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
7482 'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY',
7483 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
7484 'PV_RV_SECURITIZED')
7485 -- INVESTOR_CNTRCT_OBLIGATION_PAY' --'INVESTOR_CONTRACT_OBLIGATION_PAYABLE'
7486 -- ,'INVESTOR_RESIDUAL_PAY' ) --'INVESTOR_RESIDUAL_PAYABLE')
7487
7488 --Condition added by kthiruva for Bug 4737555 .Streams generated by Interest Calc Prog should not be historised
7489 AND (l_strms_rec.SGN_CODE NOT IN ('INTC','LATE_CALC')) -- bug 6472228
7490 AND l_hist_flag = 'Y') THEN
7491 i := i + 1;
7492 print( l_api_name, 'to HIST STMID:' || to_char(l_strm_rec.strm_id ));
7493 -- Code commented and added for bulk update by HKPATEL - 02/28/2005
7494 /*
7495 l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
7496 l_stmv_tbl(i).say_code := 'HIST';
7497 l_stmv_tbl(i).active_yn := 'N';
7498 l_stmv_tbl(i).date_history := sysdate;
7499 */
7500
7501 l_id_tbl(i):= l_strms_rec.STRM_ID;
7502 l_say_code_tbl(i) := 'HIST';
7503 l_active_yn_tbl(i) := 'N';
7504 l_date_history_tbl(i) := sysdate;
7505 l_date_curr_tbl(i) := l_strms_rec.date_current;
7506 -- Code commented and added ends here for bulk update by HKPATEL - 02/28/2005
7507
7508
7509 END IF;
7510 CLOSE strm_name_csr;
7511
7512 END LOOP;
7513 FOR l_strms_rec in strms_csr ( l_chr_id, 'WORK', p_purpose)
7514 LOOP
7515 OPEN strm_name_csr ( l_strms_rec.sty_id );
7516 FETCH strm_name_csr into l_strm_name_rec;
7517 IF strm_name_csr%NOTFOUND THEN
7518 CLOSE strm_name_csr;
7519 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7520 END IF;
7521 CLOSE strm_name_csr;
7522 -- Code commented and added for use defined streams
7523 --l_strm_name := l_strm_name_rec.name;
7524 l_strm_name := l_strm_name_rec.stream_type_purpose;
7525
7526
7527 -- Added and commented code ends here.
7528 i := i + 1;
7529 print( l_api_name, 'to CURR STMID:' || to_char(l_strms_rec.strm_id ));
7530 -- Code for bulk update -02/28/2004 - HKPATEL
7531 l_id_tbl(i):= l_strms_rec.STRM_ID;
7532 l_say_code_tbl(i) := 'CURR';
7533 l_date_curr_tbl(i) := sysdate;
7534 l_date_history_tbl(i) := NULL;
7535
7536 --l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
7537 --l_stmv_tbl(i).say_code := 'CURR';
7538
7539
7540 -- Code for bulk update ends here -02/28/2004 - HKPATEL
7541
7542 -- code added and commented for user defined streams
7543 /*
7544 If (( l_strm_name = 'FEDERAL DEPRECIATION' ) OR
7545 ( l_strm_name = 'STATE DEPRECIATION' ) OR
7546 ( l_strm_name = 'BOOK DEPRECIATION' )) THEN
7547 */
7548 If (( l_strm_name = 'FEDERAL_DEPRECIATION' ) OR
7549 ( l_strm_name = 'STATE_DEPRECIATION' ) OR
7550 ( l_strm_name = 'BOOK_DEPRECIATION' )) THEN
7551
7552 --l_stmv_tbl(i).active_yn := 'N';
7553 l_active_yn_tbl(i) := 'N';
7554 Else
7555 --l_stmv_tbl(i).active_yn := 'Y';
7556 l_active_yn_tbl(i) := 'Y';
7557 End If;
7558
7559 If ( p_purpose = 'REPORT') THEN
7560 --l_stmv_tbl(i).active_yn := 'N';
7561 l_active_yn_tbl(i) := 'N';
7562 Else
7563 --l_stmv_tbl(i).active_yn := 'Y';
7564 l_active_yn_tbl(i) := 'Y';
7565 End If;
7566
7567 --l_stmv_tbl(i).date_current := sysdate;
7568
7569
7570 END LOOP;
7571 If ( l_id_tbl.COUNT > 0 ) Then
7572 /* Commented for Bulk update by HKPATEL -02/18/2005
7573 If ( l_stmv_tbl.COUNT > 0 ) Then
7574 Okl_Streams_pub.update_streams(
7575 p_api_version => p_api_version,
7576 p_init_msg_list => p_init_msg_list,
7577 x_return_status => x_return_status,
7578 x_msg_count => x_msg_count,
7579 x_msg_data => x_msg_data,
7580 p_stmv_tbl => l_stmv_tbl,
7581 x_stmv_tbl => x_stmv_tbl);
7582 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7583 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7584 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7585 raise OKL_API.G_EXCEPTION_ERROR;
7586 END IF;
7587 Commented code for Bulk update ends here by HKPATEL -02/18/2005 */
7588
7589 -- Bulk update
7590 BEGIN
7591 --Added by kthiruva for Debugging
7592 write_to_log('Prior to the Historing of Current streams and updation of Work streams to current');
7593
7594 FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
7595 UPDATE OKL_STREAMS
7596 SET say_code = l_say_code_tbl(i),
7597 active_yn = l_active_yn_tbl(i),
7598 date_history = l_date_history_tbl(i),
7599 date_current = l_date_curr_tbl(i),
7600 last_updated_by = FND_GLOBAL.USER_ID, -- BUG:14749215 changes start here
7601 last_update_date = sysdate,
7602 last_update_login = FND_GLOBAL.LOGIN_ID -- BUG:14749215 changes end here
7603 WHERE ID = l_id_tbl(i);
7604
7605 --Added by kthiruva for Debugging
7606 write_to_log('Statuses updated successfully');
7607
7608 -- Added by mansrini for bug 4728636 (G bug 4520466)
7609 IF p_purpose <> 'REPORT' THEN
7610 OKL_BILLING_CONTROLLER_PVT.track_next_bill_date(p_chr_id);
7611 END IF;
7612 -- end changes
7613 --Added by kthiruva for Debugging
7614 write_to_log('After the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
7615
7616 EXCEPTION
7617 WHEN OTHERS THEN
7618 okl_api.set_message (p_app_name => G_APP_NAME,
7619 p_msg_name => G_DB_ERROR,
7620 p_token1 => G_PROG_NAME_TOKEN,
7621 p_token1_value => l_api_name,
7622 p_token2 => G_SQLCODE_TOKEN,
7623 p_token2_value => sqlcode,
7624 p_token3 => G_SQLERRM_TOKEN,
7625 p_token3_value => sqlerrm);
7626 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
7627 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7628 END;
7629
7630 -- Bulk update ends here
7631
7632 End If;
7633 /* Changed the position of code for bug 4212626
7634 create_advance_rental_streams(
7635 p_api_version => p_api_version,
7636 p_init_msg_list => p_init_msg_list,
7637 x_return_status => x_return_status,
7638 x_msg_count => x_msg_count,
7639 x_msg_data => x_msg_data,
7640 p_chr_id => l_chr_id,
7641 p_purpose => p_purpose);
7642
7643
7644 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7645 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7646 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7647 raise OKL_API.G_EXCEPTION_ERROR;
7648 END IF;
7649 */
7650 OPEN l_hdr_csr( l_chr_id);
7651 FETCH l_hdr_csr INTO l_hdr_rec;
7652
7653 IF l_hdr_csr%NOTFOUND THEN
7654 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7655 Elsif (l_hdr_rec.orig_system_source_code = 'OKL_REBOOK') Then
7656 NULL;
7657 /* Changed the position of code for bug 4212626
7658 create_interim_rental_streams(
7659 p_api_version => p_api_version,
7660 p_init_msg_list => p_init_msg_list,
7661 x_return_status => x_return_status,
7662 x_msg_count => x_msg_count,
7663 x_msg_data => x_msg_data,
7664 p_chr_id => l_chr_id,
7665 p_purpose => p_purpose);
7666
7667 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7668 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7669 END IF;
7670 */
7671 END IF;
7672 CLOSE l_hdr_csr;
7673
7674 /*
7675 * get rid of return negative stream value for Security Deposit.
7676 */
7677 l_selv_tbl.delete(1, l_selv_tbl.COUNT );
7678 i := 0;
7679 IF(g_rep_req_yn = 'Y') THEN
7680 FOR l_secdep_rec in l_secdep_csr ( p_chr_id,l_pdt_id_rec.report_pdt_id, p_purpose )
7681 LOOP
7682
7683 i := i + 1;
7684 l_selv_tbl(i).id := l_secdep_rec.ID;
7685
7686 END LOOP;
7687 ELSE
7688 FOR l_secdep_rec in l_secdep_csr ( p_chr_id,l_pdt_id_rec.pid, p_purpose )
7689 LOOP
7690
7691 i := i + 1;
7692 l_selv_tbl(i).id := l_secdep_rec.ID;
7693
7694 END LOOP;
7695
7696 END IF;
7697
7698
7699 If ( i > 0 ) Then
7700
7701 Okl_Streams_pub.delete_stream_elements(
7702 p_api_version => p_api_version,
7703 p_init_msg_list => p_init_msg_list,
7704 x_return_status => x_return_status,
7705 x_msg_count => x_msg_count,
7706 x_msg_data => x_msg_data,
7707 p_selv_tbl => l_selv_tbl);
7708
7709
7710 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7711 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7712 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7713 RAISE OKL_API.G_EXCEPTION_ERROR;
7714 END IF;
7715 End If;
7716 /* Changed the position of code for bug 4212626
7717 adjust_passthrough_streams(
7718 p_api_version => p_api_version,
7719 p_init_msg_list => p_init_msg_list,
7720 x_return_status => x_return_status,
7721 x_msg_count => x_msg_count,
7722 x_msg_data => x_msg_data,
7723 p_chr_id => p_chr_id,
7724 p_purpose => p_purpose);
7725
7726
7727 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7728 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7729 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7730 RAISE OKL_API.G_EXCEPTION_ERROR;
7731 END IF;
7732 */
7733 x_return_status := l_return_status;
7734
7735 print( l_api_name, 'end', x_return_status);
7736
7737 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
7738
7739 Exception
7740 when OKL_API.G_EXCEPTION_ERROR THEN
7741 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7742 p_api_name => l_api_name,
7743 p_pkg_name => g_pkg_name,
7744 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
7745 x_msg_count => x_msg_count,
7746 x_msg_data => x_msg_data,
7747 p_api_type => g_api_type);
7748 IF l_hdr_csr%ISOPEN THEN
7749 CLOSE l_hdr_csr;
7750 End If;
7751
7752 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7753 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7754 p_api_name => l_api_name,
7755 p_pkg_name => g_pkg_name,
7756 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7757 x_msg_count => x_msg_count,
7758 x_msg_data => x_msg_data,
7759 p_api_type => g_api_type);
7760
7761 If ( strm_csr%ISOPEN ) Then
7762 CLOSE strm_csr;
7763 End If;
7764
7765 IF l_hdr_csr%ISOPEN THEN
7766 CLOSE l_hdr_csr;
7767 End If;
7768
7769 when OTHERS THEN
7770 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7771 p_api_name => l_api_name,
7772 p_pkg_name => g_pkg_name,
7773 p_exc_name => 'OTHERS',
7774 x_msg_count => x_msg_count,
7775 x_msg_data => x_msg_data,
7776 p_api_type => g_api_type);
7777
7778 IF l_hdr_csr%ISOPEN THEN
7779 CLOSE l_hdr_csr;
7780 End If;
7781
7782 end adjust_streams;
7783 --vdamerla Bug6149951 - Added - Start
7784 -- New procedure to identify and retrieve the khr_id
7785 -- of a original contract if the input contract is REBOOK copy
7786 -- Else input contract is returned as output
7787 PROCEDURE retrive_orig_hdr_id(p_chr_id IN VARCHAR2
7788 , x_chr_id OUT NOCOPY VARCHAR2
7789 ) IS
7790 l_orig_chr_id OKC_K_HEADERS_B.ID%TYPE;
7791 cursor c_online_rbk_csr(cp_chr_id in okc_k_headers_b.id%TYPE) is
7792 select ORIG_SYSTEM_ID1
7793 from okc_k_headers_b
7794 where id=cp_chr_id
7795 and trim(ORIG_SYSTEM_SOURCE_CODE)='OKL_REBOOK';
7796
7797 begin
7798 open c_online_rbk_csr(p_chr_id);
7799 fetch c_online_rbk_csr into l_orig_chr_id;
7800 IF c_online_rbk_csr%FOUND THEN
7801 x_chr_id := l_orig_chr_id;
7802 ELSE
7803 x_chr_id := p_chr_id;
7804 END IF;
7805 close c_online_rbk_csr;
7806
7807 end retrive_orig_hdr_id;
7808 --vdamerla Bug6149951 - Added - End
7809
7810 -- srsreeni - Bug#5699923 - Added - Start
7811 -- Start of comments
7812 -- Procedure Name : RECREATE_TMT_LN_STRMS
7813 -- Description : Creates Working copy of the CURRENT streams of LOAN Components
7814 -- of TERMINATED LINES. LOAN components refer to
7815 -- lines on a LOAN contract or FINANCED or
7816 -- ROLLOVER Fees.
7817 -- Business Rules : During partial termination, mass rebook re-generates streams of terminated lines.
7818 -- This process has been modified not to generate streams for
7819 -- Loan components. Instead the current streams are copied over.
7820 -- Parameters : p_chr_id - Contract Identifier
7821 -- p_source_call - Identifies if this is ESG or ISG
7822 -- Version : 1.0 - Introduced as part of Bug#5699923
7823 --
7824 -- End of comments
7825 PROCEDURE RECREATE_TMT_LN_STRMS(
7826 p_api_version IN NUMBER,
7827 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
7828 x_return_status OUT NOCOPY VARCHAR2,
7829 x_msg_count OUT NOCOPY NUMBER,
7830 x_msg_data OUT NOCOPY VARCHAR2,
7831 p_chr_id IN VARCHAR2,
7832 p_trx_number IN NUMBER,
7833 p_source_call IN VARCHAR2 default 'ESG') AS
7834
7835 -- Declare Variables
7836 l_api_name CONSTANT VARCHAR2(30) := 'RECREATE_TMT_LN_STRMS';
7837 l_strm_index NUMBER;
7838 l_sel_index NUMBER;
7839 l_prev_stm_id OKL_STREAMS.ID%TYPE;
7840
7841 -- vdamerla Forward Ported Bug6149951 starts
7842
7843 l_orig_chr_id OKC_K_HEADERS_B.ID%TYPE; -- smadhava - Bug# 6149951
7844 l_new_stm_cle_id OKC_K_LINES_B.ID%TYPE; -- smadhava - Bug# 6149951
7845
7846 -- vdamerla Forward Ported Bug6149951 ends
7847
7848 -- Declare records/table types
7849 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
7850 lx_stmv_tbl okl_streams_pub.stmv_tbl_type;
7851 l_selv_tbl okl_streams_pub.selv_tbl_type;
7852 lx_selv_tbl okl_streams_pub.selv_tbl_type;
7853 -- vdamerla Forward Port
7854 -- Cursor to get fees linked to a terminated Asset
7855 CURSOR c_lnk_fin_rol_trm_fee (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
7856 SELECT LNK_CLE.ID LNK_ID
7857 , FEE_CLE.ID FEE_ID
7858 , LNK_CLE.DATE_TERMINATED
7859 FROM OKC_K_LINES_B LNK_CLE
7860 , OKC_LINE_STYLES_B LNK_LSE
7861 , OKL_K_LINES FEE_KLE
7862 , OKC_K_LINES_B FEE_CLE
7863 , OKC_STATUSES_B STS
7864 WHERE LNK_CLE.CLE_ID = FEE_CLE.ID
7865 AND LNK_CLE.DNZ_CHR_ID = cp_chr_id
7866 AND FEE_CLE.DNZ_CHR_ID = cp_chr_id
7867 AND LNK_LSE.ID = LNK_CLE.LSE_ID
7868 AND LNK_LSE.LTY_CODE = 'LINK_FEE_ASSET'
7869 AND STS.CODE = LNK_CLE.STS_CODE
7870 AND STS.STE_CODE = 'TERMINATED' -- LINKED line is terminated
7871 AND FEE_KLE.ID = FEE_CLE.ID;
7872 -- vdamerla Forward Ported Bug6149951
7873 --AND FEE_KLE.ID = FEE_CLE.ID
7874 --AND FEE_KLE.FEE_TYPE IN (G_FEE_FINANCED,G_FEE_ROLLOVER);
7875
7876
7877 -- Cursor to get Terminated Asset lines of a LOAN contract
7878 CURSOR c_tmt_asset_loan (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
7879 SELECT CLE.ID LINE_ID
7880 , CLE.DATE_TERMINATED
7881 FROM OKL_K_HEADERS KHR
7882 , OKC_K_LINES_B CLE
7883 , OKC_LINE_STYLES_B LSE
7884 , OKC_STATUSES_B STS
7885 WHERE CLE.DNZ_CHR_ID = KHR.ID
7886 AND LSE.ID = CLE.LSE_ID
7887 AND LSE.LTY_CODE ='FREE_FORM1'
7888 AND STS.CODE = CLE.STS_CODE
7889 AND STS.STE_CODE = 'TERMINATED'
7890 AND KHR.ID = cp_chr_id
7891 --vdamerla Bug6149951 starts. Need to restrict only LOAN-REVOLVING deal type for a terminated asset
7892 --LOAN and LEASE stream types needs to be copied as they will not be requested for a terminated asset
7893 -- AND KHR.DEAL_TYPE = 'LOAN' -- only LOAN contracts (exclude REV-LOAN)
7894 AND KHR.DEAL_TYPE <> 'LOAN-REVOLVING'
7895 --vdamerla Bug6149951 ends
7896 ;
7897
7898 -- Modified by bkatraga for bug 5704245. Added bind condition for purpose_code
7899 -- Cursor to get Current Streams and elements for a particular line of a contract
7900 -- Modified the cursor by vdamerla for bug 6344223
7901 -- Added ISG generated stream type purposes so that these streams will not be
7902 -- copied over during mass/online rebook. Streams will be regenerated by ISG
7903
7904 CURSOR c_streams (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
7905 , cp_cle_id OKC_K_LINES_B.ID%TYPE
7906 , cp_date_terminated DATE
7907 , cp_trx_number okl_streams.transaction_number%TYPE) IS
7908 SELECT STM.ID STREAM_ID
7909 , STM.STY_ID
7910 , STM.SGN_CODE
7911 , STM.PURPOSE_CODE
7912 , STM.ACTIVE_YN -- vdamerla Forward Ported Bug 6082209
7913 , SEL.STREAM_ELEMENT_DATE
7914 , SEL.AMOUNT
7915 , SEL.SE_LINE_NUMBER
7916 , SEL.COMMENTS -- vdamerla Forward Ported Bug 6344223
7917 FROM OKL_STREAMS STM
7918 , OKL_STRM_ELEMENTS SEL
7919 , OKL_STRM_TYPE_B STY -- vdamerla Forward Ported Bug 6082209
7920 WHERE SEL.STM_ID = STM.ID
7921 AND STM.KHR_ID = cp_chr_id
7922 AND STM.KLE_ID = cp_cle_id
7923 AND (nvl(STM.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG') from okl_stream_interfaces si
7924 where transaction_number = cp_trx_number))
7925 AND STM.SAY_CODE = 'CURR'
7926 -- vdamerla Forward Ported Bug6344223
7927 AND SEL.STREAM_ELEMENT_DATE <= nvl(cp_date_terminated, SEL.STREAM_ELEMENT_DATE)
7928 AND STM.SGN_CODE <> 'INTC'
7929 AND STM.STY_ID = STY.ID
7930 AND STY.stream_type_purpose NOT IN
7931 ('INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT', 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
7932 'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE', 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
7933 'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE', 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
7934 'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS', 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
7935 'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY', 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
7936 'PV_RV_SECURITIZED' --, 'ADVANCE_RENT' -- 7653893: Modified to consider Advance Rental Streams for copy over
7937 , 'PASS_THROUGH_EVERGREEN_FEE', 'PASS_THROUGH_EVERGREEN_RENT', 'PASS_THROUGH_EVERGREEN_SERVICE',
7938 'PASS_THROUGH_FEE', 'PASS_THROUGH_SERVICE', 'PASS_THRU_EXP_ACCRUAL', 'PASS_THRU_REV_ACCRUAL', 'PASS_THRU_SVC_EXP_ACCRUAL',
7939 'PASS_THRU_SVC_REV_ACCRUAL', 'PV_RV', 'PV_RV_GUARANTEED', 'PV_RV_UNGUARANTEED', 'RESIDUAL_GUARANTEED', 'RESIDUAL_VALUE',
7940 'SECURITY_DEPOSIT', 'SERVICE_EXPENSE', 'SERVICE_FEE_AMORT_SCHEDULE', 'SERVICE_FEE_AUDIT_LETTER', 'SERVICE_FEE_DOCUMENT_REQ',
7941 'SERVICE_FEE_EXCHG_REQUEST', 'SERVICE_FEE_GENERAL', 'SERVICE_FEE_INTEREST_CONV', 'SERVICE_FEE_INVOICE_DEMAND',
7942 'SERVICE_FEE_INVOICE_REPRINT', 'SERVICE_FEE_PMT_CHANGE', 'SERVICE_FEE_REST_REQUEST', 'SERVICE_FEE_TERM_REQUEST',
7943 'SERVICE_FEE_TRANS_REQUEST', 'SERVICE_FEE_VAR_RATE_STMNT', 'SERVICE_FEE_VAT_SCHEDULE', 'SERVICE_INCOME', 'SERVICE_PAYMENT',
7944 'SERVICE_RENEWAL')
7945
7946 --AND SEL.STREAM_ELEMENT_DATE <= cp_date_terminated
7947 -- vdamerla End Forward Ported Bug6344223
7948 AND STM.SGN_CODE NOT IN ('INTC','LATE_CALC') -- Bug 6472228
7949 ORDER BY STM.ID -- to get the stream elements of a stream together
7950 ;
7951
7952 lnk_fin_rol_trm_fee_rec c_lnk_fin_rol_trm_fee%ROWTYPE;
7953 tmt_asset_loan_rec c_tmt_asset_loan%ROWTYPE;
7954 streams_rec c_streams%ROWTYPE;
7955 --Added by vdamerla for bug 6082209
7956 --Cursor to check whether it is a partial termination mass rebook transaction
7957 CURSOR l_chk_mass_rbk_csr IS
7958 SELECT '!'
7959 FROM okc_k_headers_b CHR,
7960 okl_trx_contracts ktrx,
7961 okl_trx_contracts trx
7962 WHERE CHR.ID = p_chr_id
7963 AND ktrx.KHR_ID = chr.id
7964 AND ktrx.tsu_code = 'ENTERED'
7965 AND ktrx.rbr_code IS NOT NULL
7966 AND ktrx.tcn_type = 'TRBK'
7967 --rkuttiya added for 12.1.1 Multi GAAP
7968 AND ktrx.representation_type = 'PRIMARY'
7969 --
7970 AND ktrx.source_trx_type = 'TCN'
7971 AND trx.tcn_type = 'ALT'
7972 AND trx.id = ktrx.source_trx_id
7973 AND EXISTS (SELECT '1'
7974 FROM okl_rbk_selected_contract rbk_khr
7975 WHERE rbk_khr.KHR_ID = chr.id
7976 AND rbk_khr.STATUS <> 'PROCESSED');
7977
7978 --Modified by vdamerla for bug 6344223
7979 --This cursor will get the terminated lines of current streams
7980 CURSOR l_get_curr_streams_lines
7981 IS
7982 SELECT distinct stm.kle_id
7983 FROM okl_streams stm,
7984 okc_k_lines_b ln
7985 WHERE stm.khr_id = p_chr_id
7986 AND stm.say_code = 'CURR'
7987 AND stm.kle_id = ln.id
7988 AND ln.STS_CODE = 'TERMINATED'
7989 AND (nvl(stm.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG')
7990 from okl_stream_interfaces si
7991 where si.transaction_number = p_trx_number));
7992
7993 --Cursor to get the line terminated date
7994 --Modified by vdamerla for bug 6344223
7995 CURSOR l_get_line_term_date(p_line_id OKC_K_LINES_B.ID%TYPE)
7996 IS
7997 SELECT date_terminated
7998 FROM okc_k_lines_b
7999 WHERE id = p_line_id;
8000
8001 --To get the streams for which kle_id is null
8002 --Also streams related to Investor and Interest Calc Prog should not be copied over as these streams are not historized
8003 --Modified the cursor by vdamerla for bug 6344223
8004 --Added ISG generated stream type purposes so that these streams will not be
8005 --copied over during mass/online rebook. Streams will be regenerated by ISG
8006 CURSOR c_streams1 (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
8007 ,cp_trx_number okl_streams.transaction_number%TYPE) IS
8008 SELECT STM.ID STREAM_ID
8009 , STM.STY_ID
8010 , STM.SGN_CODE
8011 , STM.PURPOSE_CODE
8012 , STM.ACTIVE_YN
8013 , SEL.STREAM_ELEMENT_DATE
8014 , SEL.AMOUNT
8015 , SEL.SE_LINE_NUMBER
8016 , SEL.COMMENTS
8017 FROM OKL_STREAMS STM
8018 , OKL_STRM_ELEMENTS SEL
8019 , OKL_STRM_TYPE_B STY
8020 WHERE SEL.STM_ID = STM.ID
8021 AND STM.KHR_ID = cp_chr_id
8022 AND STM.KLE_ID IS NULL
8023 AND (nvl(STM.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG') from okl_stream_interfaces si
8024 where transaction_number = cp_trx_number))
8025 AND STM.SAY_CODE = 'CURR'
8026 AND STM.SGN_CODE <> 'INTC'
8027 AND STM.STY_ID = STY.ID
8028 AND STY.stream_type_purpose NOT IN
8029 ('INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT', 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
8030 'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE', 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
8031 'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE', 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
8032 'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS', 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
8033 'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY', 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
8034 'PV_RV_SECURITIZED', 'ADVANCE_RENT', 'PASS_THROUGH_EVERGREEN_FEE', 'PASS_THROUGH_EVERGREEN_RENT', 'PASS_THROUGH_EVERGREEN_SERVICE',
8035 'PASS_THROUGH_FEE', 'PASS_THROUGH_SERVICE', 'PASS_THRU_EXP_ACCRUAL', 'PASS_THRU_REV_ACCRUAL', 'PASS_THRU_SVC_EXP_ACCRUAL',
8036 'PASS_THRU_SVC_REV_ACCRUAL', 'PV_RV', 'PV_RV_GUARANTEED', 'PV_RV_UNGUARANTEED', 'RESIDUAL_GUARANTEED', 'RESIDUAL_VALUE',
8037 'SECURITY_DEPOSIT', 'SERVICE_EXPENSE', 'SERVICE_FEE_AMORT_SCHEDULE', 'SERVICE_FEE_AUDIT_LETTER', 'SERVICE_FEE_DOCUMENT_REQ',
8038 'SERVICE_FEE_EXCHG_REQUEST', 'SERVICE_FEE_GENERAL', 'SERVICE_FEE_INTEREST_CONV', 'SERVICE_FEE_INVOICE_DEMAND',
8039 'SERVICE_FEE_INVOICE_REPRINT', 'SERVICE_FEE_PMT_CHANGE', 'SERVICE_FEE_REST_REQUEST', 'SERVICE_FEE_TERM_REQUEST',
8040 'SERVICE_FEE_TRANS_REQUEST', 'SERVICE_FEE_VAR_RATE_STMNT', 'SERVICE_FEE_VAT_SCHEDULE', 'SERVICE_INCOME', 'SERVICE_PAYMENT',
8041 'SERVICE_RENEWAL')
8042 ORDER BY STM.ID; -- to get the stream elements of a stream together
8043
8044 l_mass_rbk_khr VARCHAR2(1) DEFAULT '?';
8045 l_terminated_date DATE;
8046 --end vdamerla
8047
8048 --smadhava - Bug# 6149951 - Added - Start
8049 -- Get Line ID in rebook copy that was copied from LINE the original contract
8050 -- cp_rbk_chr_id is the rebook copy contract
8051 -- cp_ole_id is original contract line ID
8052 CURSOR c_get_orig_line_id (cp_rbk_chr_id IN okc_k_headers_b.id%type
8053 , cp_ole_id IN OKC_K_LINES_B.ID%TYPE) is
8054 SELECT cle.id new_cle_id
8055 FROM okc_k_lines_b cle
8056 ,okc_k_lines_b ole
8057 WHERE cle.dnz_chr_id=cp_rbk_chr_id
8058 and ole.id = cp_ole_id
8059 and ole.lse_id = cle.lse_id
8060 and ole.id=cle.orig_system_id1;
8061 --smadhava - Bug# 6149951 - Added - End
8062 --Added by vdamerla for bug 6149951
8063 CURSOR c_chk_accrual_sty_on_pdt(cp_pdt_id OKL_PRODUCTS.ID%TYPE,
8064 cp_sty_id OKL_STRM_TYPE_B.ID%TYPE) IS
8065 SELECT 'Y'
8066 FROM OKL_STRM_TYPE_B sty,
8067 OKL_PROD_STRM_TYPES psty
8068 WHERE sty.id = psty.sty_id
8069 AND psty.pdt_id = cp_pdt_id
8070 AND psty.accrual_yn = 'Y'
8071 --srsreeni Might need this
8072 AND psty.sty_id=cp_sty_id;
8073 -- 9001154 - Commented to ensure subsidy income streams are considered as accrual streams
8074 --AND sty.stream_type_purpose NOT IN ('SUBSIDY_INCOME');
8075
8076 --Cursor to get the purpose code to identify whether it is a regular or reporting product call
8077 CURSOR c_get_purpose_code IS
8078 select nvl(purpose_code,'ORIGIN')
8079 from okl_stream_interfaces
8080 where transaction_number = p_trx_number;
8081
8082 --To get the regular product id
8083 CURSOR c_get_regular_product_id IS
8084 SELECT pdt_id
8085 FROM okl_k_headers
8086 WHERE id = p_chr_id;
8087
8088 --To get the reporting product id
8089 CURSOR c_get_report_product_id IS
8090 SELECT pdt.reporting_pdt_id
8091 FROM okl_k_headers khr,
8092 okl_products pdt
8093 WHERE khr.id = p_chr_id
8094 AND khr.pdt_id = pdt.id;
8095
8096 --To check whether the accrual flag is checked or not
8097 CURSOR check_accrual_previous_csr IS
8098 SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
8099 FROM OKL_SYSTEM_PARAMS_ALL;
8100
8101
8102 CURSOR chk_curr_terminated_line(p_kle_id IN OKC_K_LINES_B.ID%TYPE) IS
8103 SELECT 'Y'
8104 FROM okc_k_headers_b CHR,
8105 okl_trx_contracts ktrx,
8106 okl_trx_contracts trx,
8107 okl_txl_quote_lines_b txl
8108 WHERE CHR.ID = p_chr_id
8109 AND ktrx.KHR_ID = chr.id
8110 AND ktrx.tsu_code = 'ENTERED'
8111 AND ktrx.rbr_code IS NOT NULL
8112 AND ktrx.tcn_type = 'TRBK'
8113 --rkuttiya added for 12.1.1 Multi GAAP
8114 AND ktrx.representation_type = 'PRIMARY'
8115 --
8116 AND ktrx.source_trx_type = 'TCN'
8117 AND trx.tcn_type = 'ALT'
8118 AND trx.id = ktrx.source_trx_id
8119 AND TXL.QTE_ID = TRX.QTE_ID
8120 AND TXL.qlt_code = 'AMCFIA'
8121 AND TXL.kle_id = p_kle_id
8122 AND EXISTS (SELECT '1'
8123 FROM okl_rbk_selected_contract rbk_khr
8124 WHERE rbk_khr.KHR_ID = chr.id
8125 AND rbk_khr.STATUS <> 'PROCESSED')
8126 AND TXL.QTE_ID = TRX.QTE_ID
8127 UNION -- 24-Mar-2008 sechawla FP fix 7445633 for base bug 7421107 : Added union part
8128 SELECT 'Y'
8129 FROM okc_k_headers_b CHR,
8130 okl_trx_contracts ktrx,
8131 okl_trx_contracts trx,
8132 okl_txl_quote_lines_b txl
8133 , OKC_K_ITEMS LNK_ITM
8134 WHERE CHR.ID = p_chr_id
8135 AND ktrx.KHR_ID = chr.id
8136 AND ktrx.tsu_code = 'ENTERED'
8137 AND ktrx.rbr_code IS NOT NULL
8138 AND ktrx.tcn_type = 'TRBK'
8139 AND ktrx.source_trx_type = 'TCN'
8140 AND trx.tcn_type = 'ALT'
8141 AND trx.id = ktrx.source_trx_id
8142 AND TXL.QTE_ID = TRX.QTE_ID
8143 AND TXL.qlt_code = 'AMCFIA'
8144 AND TXL.kle_id = LNK_ITM.OBJECT1_ID1
8145 AND LNK_ITM.CLE_ID = p_kle_id
8146 AND LNK_ITM.DNZ_CHR_ID = p_chr_id
8147 AND LNK_ITM.JTOT_OBJECT1_CODE = 'OKX_COVASST'
8148 AND LNK_ITM.OBJECT1_ID2 = '#'
8149 AND EXISTS (SELECT '1'
8150 FROM okl_rbk_selected_contract rbk_khr
8151 WHERE rbk_khr.KHR_ID = chr.id
8152 AND rbk_khr.STATUS <> 'PROCESSED')
8153 AND TXL.QTE_ID = TRX.QTE_ID;
8154
8155
8156 l_accrual_previous_mnth_yn VARCHAR2(3);
8157 l_purpose_code okl_stream_interfaces.purpose_code%TYPE;
8158 l_product_id okl_products.id%TYPE;
8159 l_temp_term_date DATE;
8160 l_chk_accrual_stream VARCHAR2(1);
8161 l_curr_term_flag VARCHAR2(1);
8162 --end vdamerla
8163 -- vdamerla End Forward Ported Bug 6082209
8164 -- asahoo bug 13259692
8165 l_acc_period_name VARCHAR2(30);
8166 l_acc_period_start_date DATE;
8167 l_acc_period_end_date DATE;
8168
8169
8170 BEGIN
8171
8172 x_return_status := OKL_API.G_RET_STS_SUCCESS;
8173
8174 -- Call start_activity to create savepoint, check compatibility
8175 -- and initialize message list
8176 x_return_status := OKL_API.START_ACTIVITY (
8177 l_api_name
8178 ,p_init_msg_list
8179 ,'_PVT'
8180 ,x_return_status);
8181 -- Check if activity started successfully
8182 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8183 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8184 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8185 RAISE OKL_API.G_EXCEPTION_ERROR;
8186 END IF;
8187
8188 -- Initialize variables/records
8189 l_strm_index := 0;
8190 l_sel_index := 0;
8191 l_prev_stm_id := NULL;
8192
8193 -- Currently as part of Bug#5668947, logic written for ESG flow
8194 -- If fix is made for ISG, this check can be removed and the logic can be
8195 -- opened to ISG also. The only place where p_source_call will then be useful
8196 -- is in case of determining the transaction_number
8197 IF p_source_call = 'ESG' THEN
8198 --Added by vdamerla for bug 6082209
8199 --check for mass rebook contract
8200 --If termination mass rebook transaction exists, then copy the old streams as
8201 --new streams instead of re-generating them
8202 l_mass_rbk_khr := '?';
8203 OPEN l_chk_mass_rbk_csr;
8204 FETCH l_chk_mass_rbk_csr INTO l_mass_rbk_khr;
8205 CLOSE l_chk_mass_rbk_csr;
8206
8207 IF l_mass_rbk_khr = '!' THEN
8208
8209 --Added by vdamerla for bug 6149951
8210 --Check whether the stream type is accrual or not
8211 OPEN c_get_purpose_code;
8212 FETCH c_get_purpose_code INTO l_purpose_code;
8213 CLOSE c_get_purpose_code;
8214
8215 IF(l_purpose_code = 'ORIGIN') THEN
8216 OPEN c_get_regular_product_id;
8217 FETCH c_get_regular_product_id INTO l_product_id;
8218 CLOSE c_get_regular_product_id;
8219 ELSE
8220 OPEN c_get_report_product_id;
8221 FETCH c_get_report_product_id INTO l_product_id;
8222 CLOSE c_get_report_product_id;
8223 END IF;
8224
8225 --Check whether the CHECK_ACCRUALS_TILL_PREVIOUS_MONTH flag is checked or not
8226 OPEN check_accrual_previous_csr;
8227 FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
8228 CLOSE check_accrual_previous_csr;
8229 --end vdamerla
8230
8231 FOR curr_rec IN l_get_curr_streams_lines
8232 LOOP
8233 --Modified by vdamerla for bug 6344223
8234 OPEN l_get_line_term_date (p_line_id => curr_rec.kle_id);
8235 FETCH l_get_line_term_date INTO l_terminated_date;
8236 CLOSE l_get_line_term_date;
8237
8238 --Added by vdamerla for bug 6149951
8239 l_curr_term_flag := NULL;
8240 OPEN chk_curr_terminated_line (p_kle_id => curr_rec.kle_id);
8241 FETCH chk_curr_terminated_line INTO l_curr_term_flag;
8242 CLOSE chk_curr_terminated_line;
8243 --end vdamerla
8244
8245 FOR streams_rec IN c_streams (p_chr_id
8246 ,curr_rec.kle_id
8247 ,TRUNC(LAST_DAY(l_terminated_date)) --Added by vdamerla for bug 6149951
8248 ,p_trx_number)
8249 LOOP
8250 -- Set the Stream record if this is a new Stream
8251 IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
8252 l_prev_stm_id := streams_rec.STREAM_ID;
8253 l_strm_index := l_strm_index + 1;
8254
8255 l_stmv_tbl(l_strm_index).khr_id := p_chr_id;
8256 l_stmv_tbl(l_strm_index).kle_id := curr_rec.kle_id;
8257 l_stmv_tbl(l_strm_index).sty_id := streams_rec.STY_ID;
8258 l_stmv_tbl(l_strm_index).sgn_code := streams_rec.sgn_code;
8259 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
8260 l_stmv_tbl(l_strm_index).say_code := G_STREAM_ACTIVITY_WORK;
8261 l_stmv_tbl(l_strm_index).active_yn := streams_rec.active_yn;
8262 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
8263
8264 --Added by bkatraga for bug 5704245
8265 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
8266 --end bkatraga
8267 --Added by vdamerla for bug 6149951
8268 l_temp_term_date := NULL;
8269 l_chk_accrual_stream := NULL;
8270 IF(l_terminated_date IS NOT NULL AND l_curr_term_flag = 'Y') THEN
8271 OPEN c_chk_accrual_sty_on_pdt(cp_pdt_id => l_product_id,
8272 cp_sty_id => streams_rec.STY_ID);
8273 FETCH c_chk_accrual_sty_on_pdt INTO l_chk_accrual_stream;
8274 CLOSE c_chk_accrual_sty_on_pdt;
8275 -- asahoo bug 13259692 derive the period in which termination is falling first and then
8276 -- derive the current or next period based on Check_Accrual_Till_Previous_Month flag
8277
8278 okl_accounting_util.get_period_info(l_terminated_date,l_acc_period_name, l_acc_period_start_date,l_acc_period_end_date);
8279
8280 --To check whether the stream is accrual or not
8281 IF(l_chk_accrual_stream = 'Y') THEN
8282 IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
8283 --l_temp_term_date := TRUNC(LAST_DAY(l_terminated_date));
8284 l_temp_term_date := l_acc_period_end_date; -- asahoo 13259692 reverse accruals from next period onwards
8285
8286 ELSE
8287 --l_temp_term_date := LAST_DAY(TRUNC(l_terminated_date, 'MONTH')-1);
8288 l_temp_term_date := l_acc_period_start_date - 1; -- asahoo 13259692 reverse accruals from current period onwards
8289
8290 END IF;
8291 ELSE
8292 l_temp_term_date := TRUNC(l_terminated_date);
8293 END IF;
8294 END IF;
8295 --end bkatraga
8296
8297 END IF; -- end of check for new stream record
8298
8299 ----------------------------------------------------
8300 -- Get the Stream Elements
8301 ----------------------------------------------------
8302 --Added if condition by bkatraga for bug 6149951
8303 IF(l_temp_term_date IS NULL
8304 OR streams_rec.stream_element_date <= l_temp_term_date) THEN
8305 l_sel_index := l_sel_index + 1;
8306 l_selv_tbl(l_sel_index).parent_index := l_strm_index;
8307 l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
8308 l_selv_tbl(l_sel_index).amount := streams_rec.amount;
8309 l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
8310 l_selv_tbl(l_sel_index).comments := streams_rec.comments;
8311 END IF; --Added by vdamerla for bug 6149951
8312
8313 END LOOP; -- END of FOR for Streams
8314
8315 END LOOP;
8316
8317 --Added by bkatraga for bug 13447258
8318 COPY_VARIABLE_RATE_STREAMS(
8319 p_api_version => p_api_version,
8320 p_init_msg_list => p_init_msg_list,
8321 x_return_status => x_return_status,
8322 x_msg_count => x_msg_count,
8323 x_msg_data => x_msg_data,
8324 p_chr_id => p_chr_id,
8325 p_trx_number => p_trx_number);
8326 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8327 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8328 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8329 RAISE OKL_API.G_EXCEPTION_ERROR;
8330 END IF;
8331 --end bkatraga for bug 13447258
8332
8333 ELSE
8334 --end bkatraga
8335
8336 -- srsreeni - Bug# 6149951 - Added - Start
8337 -- Determine if this ESG call is from a rebook copy, if so rebook copies
8338 -- donot have streams to copy from. Hence look at the original contract
8339 retrive_orig_hdr_id(p_chr_id, l_orig_chr_id);
8340 -- srsreeni - Bug# 6149951 - Added - End
8341
8342 -- vdamerla End Forward Ported Bug6082209
8343
8344
8345 -- STEP 1(a)
8346 ----------------------------------------------------
8347 -- Get the FINANCED/ROLLOVER FEE lines attached to
8348 -- TERMINATED Assets
8349 ----------------------------------------------------
8350
8351 -- vdamerla Forward Ported Bug6082209
8352 FOR lnk_fin_rol_trm_fee_rec IN c_lnk_fin_rol_trm_fee (l_orig_chr_id)
8353 --FOR lnk_fin_rol_trm_fee_rec IN c_lnk_fin_rol_trm_fee (p_chr_id)
8354 -- vdamerla End Forward Ported Bug6082209
8355 LOOP
8356
8357 -- STEP 1(b)
8358 ----------------------------------------------------
8359 -- Get the CURRENT Streams of fees attached to
8360 -- TERMINATED Asset Lines of the contract.
8361 -- And Create a WORKING COPY.
8362 ----------------------------------------------------
8363 -- vdamerla Forward Ported Bug6082209
8364 FOR streams_rec IN c_streams (l_orig_chr_id
8365 --FOR streams_rec IN c_streams (p_chr_id
8366 -- vdamerla End Forward Ported Bug6082209
8367 , lnk_fin_rol_trm_fee_rec.LNK_ID
8368 -- vdamerla Forward Port Bug6149951
8369 , NULL -- smadhava - Bug# 6149951 -- Blindly copy stream elements
8370 -- of terminated lines during flows other than partial termination mass rebook of the asset
8371 -- vdamerla End Forward Port Bug6149951
8372
8373 --, TRUNC(lnk_fin_rol_trm_fee_rec.DATE_TERMINATED)
8374 , p_trx_number) --Added by bkatraga for bug 5704245
8375 LOOP
8376 -- Set the Stream record if this is a new Stream
8377 IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
8378 l_prev_stm_id := streams_rec.STREAM_ID;
8379 l_strm_index := l_strm_index + 1;
8380
8381 -- vdamerla Forward Port Bug6149951
8382
8383 -- srsreeni - Bug# 6149951 - Added - Start
8384 IF l_orig_chr_id <> p_chr_id THEN
8385 OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
8386 cp_ole_id => lnk_fin_rol_trm_fee_rec.LNK_ID);
8387 FETCH c_get_orig_line_id INTO l_new_stm_cle_id;
8388 CLOSE c_get_orig_line_id;
8389 ELSE
8390 l_new_stm_cle_id := lnk_fin_rol_trm_fee_rec.LNK_ID;
8391 END IF;
8392 -- srsreeni - Bug# 6149951 - Added - End
8393 -- vdamerla End Forward Port Bug6149951
8394
8395
8396
8397 l_stmv_tbl(l_strm_index).khr_id := p_chr_id;
8398 -- vdamerla Forward Ported Bug6149951
8399 l_stmv_tbl(l_strm_index).kle_id := l_new_stm_cle_id;
8400 --l_stmv_tbl(l_strm_index).kle_id := lnk_fin_rol_trm_fee_rec.LNK_ID;
8401 -- vdamerla End Forward Ported Bug6149951
8402 l_stmv_tbl(l_strm_index).sty_id := streams_rec.STY_ID;
8403 l_stmv_tbl(l_strm_index).sgn_code := streams_rec.sgn_code;
8404 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
8405 l_stmv_tbl(l_strm_index).say_code := G_STREAM_ACTIVITY_WORK;
8406 l_stmv_tbl(l_strm_index).active_yn := 'N';
8407 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
8408
8409 --Added by bkatraga for bug 5704245
8410 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
8411 --end bkatraga
8412
8413 END IF; -- end of check for new stream record
8414
8415 -- STEP 1(c)
8416 ----------------------------------------------------
8417 -- Get the Stream Elements of FINANCED/ROLLOVER fee attached
8418 -- to TERMINATED Asset Lines of the contract.
8419 -- Only Elements ON or BEFORE the TERMINATION DATE of Fee are copied
8420 ----------------------------------------------------
8421 l_sel_index := l_sel_index + 1;
8422 l_selv_tbl(l_sel_index).parent_index := l_strm_index;
8423 l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
8424 l_selv_tbl(l_sel_index).amount := streams_rec.amount;
8425 l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
8426 --Added by vdamerla for bug 6082209
8427 l_selv_tbl(l_sel_index).comments := streams_rec.comments;
8428 --end bkatraga
8429 -- vdamerla End Forward Ported Bug6082209
8430
8431
8432 END LOOP; -- END of FOR for Streams
8433 END LOOP; -- END of FOR For FINANCED/ROLLOVER
8434
8435 -- Reinitialize variables
8436 l_prev_stm_id := NULL;
8437
8438 -- STEP 2(a)
8439 ----------------------------------------------------
8440 -- Get the TERMINATED Asset lines of contracts
8441 ----------------------------------------------------
8442 -- vdamerla Forward Ported Bug6149951
8443 FOR tmt_asset_loan_rec IN c_tmt_asset_loan (l_orig_chr_id) -- smadhava - Bug# 6149951
8444 --FOR tmt_asset_loan_rec IN c_tmt_asset_loan (p_chr_id)
8445 -- vdamerla End Forward Ported Bug6149951
8446 LOOP
8447
8448 -- STEP 2(b)
8449 ----------------------------------------------------
8450 -- Get the CURRENT Streams of Asset lines.
8451 -- And Create a WORKING COPY.
8452 ----------------------------------------------------
8453 -- vdamerla Forward Ported Bug6149951
8454 FOR streams_rec IN c_streams (l_orig_chr_id -- smadhava - Bug# 6149951
8455 -- FOR streams_rec IN c_streams (p_chr_id
8456 , tmt_asset_loan_rec.LINE_ID
8457 , NULL -- smadhava - Bug# 6149951 -- Blindly copy stream elements
8458 -- of terminated lines during flows other than partial termination mass rebook of the asset
8459 --, TRUNC(tmt_asset_loan_rec.DATE_TERMINATED)
8460 -- vdamerla End Forward Ported Bug6149951
8461 , p_trx_number) --Added by bkatraga for bug 5704245
8462 LOOP
8463 -- Set the Stream record if this is a new Stream
8464 IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
8465 l_prev_stm_id := streams_rec.STREAM_ID;
8466 l_strm_index := l_strm_index + 1;
8467 -- vdamerla - Bug# 6149951 - Added - Start
8468 IF l_orig_chr_id <> p_chr_id THEN
8469 OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
8470 cp_ole_id => tmt_asset_loan_rec.LINE_ID);
8471 FETCH c_get_orig_line_id INTO l_new_stm_cle_id;
8472 CLOSE c_get_orig_line_id;
8473 ELSE
8474 l_new_stm_cle_id := tmt_asset_loan_rec.LINE_ID;
8475 END IF;
8476 -- vdamerla End Forward Ported Bug6149951
8477
8478
8479
8480
8481 l_stmv_tbl(l_strm_index).khr_id := p_chr_id;
8482 -- vdamerla Forward Ported Bug6149951
8483 l_stmv_tbl(l_strm_index).kle_id := l_new_stm_cle_id; -- smadhava Bug# 6149951
8484 --l_stmv_tbl(l_strm_index).kle_id := tmt_asset_loan_rec.LINE_ID;
8485 -- vdamerla End Forward Ported Bug6149951
8486 l_stmv_tbl(l_strm_index).sty_id := streams_rec.STY_ID;
8487 l_stmv_tbl(l_strm_index).sgn_code := streams_rec.sgn_code;
8488 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
8489 l_stmv_tbl(l_strm_index).say_code := G_STREAM_ACTIVITY_WORK;
8490 l_stmv_tbl(l_strm_index).active_yn := 'N';
8491 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
8492
8493 --Added by bkatraga for bug 5704245
8494 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
8495 --end bkatraga
8496
8497 END IF; -- end of check for new stream record
8498
8499 -- STEP 2(c)
8500 ----------------------------------------------------
8501 -- Get the Stream Elements of of LOAN Asset lines.
8502 -- Only Elements ON or BEFORE the TERMINATION DATE of lines are copied
8503 ----------------------------------------------------
8504 l_sel_index := l_sel_index + 1;
8505 l_selv_tbl(l_sel_index).parent_index := l_strm_index;
8506 l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
8507 l_selv_tbl(l_sel_index).amount := streams_rec.amount;
8508 l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
8509 --Added by vdamerla for bug 6082209
8510 l_selv_tbl(l_sel_index).comments := streams_rec.comments;
8511 --end bkatraga
8512 -- vdamerla End Forward Ported Bug 6082209
8513
8514
8515
8516 END LOOP; -- END of FOR for Streams
8517 END LOOP; -- END of For loop over Terminated loan assets
8518 END IF; --Added by bkatraga for bug 6082209
8519
8520 -- STEP 3
8521 IF l_stmv_tbl.COUNT > 0 THEN
8522 -- Call the API to bulk insert data into streams and stream elements
8523 OKL_STREAMS_PUB.CREATE_STREAMS_PERF(p_api_version
8524 , p_init_msg_list
8525 , x_return_status
8526 , x_msg_count
8527 , x_msg_data
8528 , l_stmv_tbl
8529 , l_selv_tbl
8530 , lx_stmv_tbl
8531 , lx_selv_tbl);
8532 IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8533 RAISE OKL_API.G_EXCEPTION_ERROR;
8534 ELSIF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
8535 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8536 END IF;
8537 END IF; -- l_stmv_tbl count check
8538
8539 END IF; -- END IF p_source_call check
8540
8541 -- End of API
8542 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
8543 EXCEPTION
8544 WHEN OKL_API.G_EXCEPTION_ERROR THEN
8545 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8546 p_api_name => l_api_name,
8547 p_pkg_name => g_pkg_name,
8548 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
8549 x_msg_count => x_msg_count,
8550 x_msg_data => x_msg_data,
8551 p_api_type => g_api_type);
8552 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8553 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8554 p_api_name => l_api_name,
8555 p_pkg_name => g_pkg_name,
8556 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8557 x_msg_count => x_msg_count,
8558 x_msg_data => x_msg_data,
8559 p_api_type => g_api_type);
8560 WHEN OTHERS THEN
8561 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8562 p_api_name => l_api_name,
8563 p_pkg_name => g_pkg_name,
8564 p_exc_name => 'OTHERS',
8565 x_msg_count => x_msg_count,
8566 x_msg_data => x_msg_data,
8567 p_api_type => g_api_type);
8568 END RECREATE_TMT_LN_STRMS;
8569 -- srsreeni - Bug#5699923 - Added - End
8570
8571 -- Start modification 11i10 bakuchib
8572 Procedure process_streams(
8573 p_api_version IN NUMBER,
8574 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8575 x_return_status OUT NOCOPY VARCHAR2,
8576 x_msg_count OUT NOCOPY NUMBER,
8577 x_msg_data OUT NOCOPY VARCHAR2,
8578 p_chr_id IN VARCHAR2,
8579 p_process_yn IN VARCHAR2,
8580 p_chr_yields IN yields_rec_type,
8581 p_source_call IN VARCHAR2) AS
8582
8583 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_STREAMS';
8584 l_api_version CONSTANT NUMBER := 1;
8585 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8586
8587 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
8588 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
8589 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
8590 xl_khrv_rec okl_contract_pub.khrv_rec_type;
8591
8592 l_chr_yields yields_rec_type;
8593
8594 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
8595 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
8596 -- Code for bulk update -02/18/2004 - HKPATEL
8597 l_id_tbl okl_streams_util.NumberTabTyp;
8598 -- Code for bulk update ends here -02/18/2004 - HKPATEL
8599
8600
8601 Cursor ylds_csr( chrId NUMBER ) IS
8602 Select 'N' exist
8603 from okl_k_headers_full_v
8604 where id = chrId
8605 and pre_tax_yield is NULL
8606 and after_tax_yield is NULL
8607 and pre_tax_irr is NULL
8608 and after_tax_irr is NULL
8609 and implicit_interest_rate is NULL;
8610 -- get rates and line id for a financed fee
8611 CURSOR get_fin_lne_csr(p_chr_id NUMBER)
8612 IS
8613 SELECT DISTINCT cle.id line_id,
8614 lev.rate
8615 FROM okl_sif_ret_levels lev,
8616 okl_sif_rets ret,
8617 okl_stream_interfaces sif,
8618 okl_sif_lines line,
8619 okc_k_lines_b cle,
8620 okl_k_lines kle,
8621 okc_line_styles_b lse,
8622 okl_sif_fees fee
8623 WHERE lev.sir_id = ret.id
8624 AND lev.level_type = 'Payment'
8625 AND ret.transaction_number = sif.transaction_number
8626 AND sif.id = line.sif_id
8627 AND line.sif_id = fee.sif_id
8628 AND line.id = fee.sil_id
8629 AND line.kle_id = cle.id
8630 AND cle.lse_id = lse.id
8631 AND lse.lty_code = 'FEE'
8632 AND cle.id = kle.id
8633 AND kle.fee_type = 'FINANCED'
8634 AND fee.fee_index_number = lev.index_number
8635 AND line.sil_type = 'SGN'
8636 AND sif.transaction_number IN (SELECT MAX(transaction_number)
8637 FROM okl_stream_interfaces
8638 WHERE khr_id = p_chr_id
8639 AND purpose_code IS NULL);
8640 -- get payment levels for line
8641 CURSOR get_level_csr(p_chr_id NUMBER,
8642 p_cle_id NUMBER)
8643 IS
8644 SELECT sll.id sll_id,
8645 slh.id slh_id
8646 FROM okc_rule_groups_b rgp,
8647 okc_rules_b slh,
8648 okc_rules_b sll
8649 WHERE rgp.dnz_chr_id = p_chr_id
8650 AND rgp.rgd_code = 'LALEVL'
8651 AND rgp.cle_id = p_cle_id
8652 AND rgp.id = slh.rgp_id
8653 AND sll.rgp_id = slh.rgp_id
8654 AND sll.dnz_chr_id = slh.dnz_chr_id
8655 AND slh.dnz_chr_id = rgp.dnz_chr_id
8656 AND sll.object2_id1 = slh.id
8657 AND sll.object2_id2 = '#'
8658 AND sll.jtot_object2_code = 'OKL_STRMHDR';
8659 -- validate the contract is reporting product or not
8660 CURSOR validate_pdt_csr(p_chr_id NUMBER)
8661 IS
8662 SELECT 'Y'
8663 FROM DUAL
8664 WHERE EXISTS (SELECT 1
8665 FROM okl_k_headers khr,
8666 okl_products_v pdt
8667 WHERE khr.id = p_chr_id
8668 AND khr.pdt_id = pdt.id
8669 AND pdt.reporting_pdt_id IS NOT NULL);
8670 -- Check for reporting streams for non MGAPP prodcut
8671 -- Modified by kthiruva on 17-Nov-2005.
8672 -- Streams having an SGN_CODE = 'INTC' should not be historized
8673 -- Bug 4737555 - Start of Changes
8674 CURSOR non_mg_rep_csr(p_chr_id NUMBER)
8675 IS
8676 SELECT str.id strm_id,
8677 str.kle_id,
8678 str.sty_id sty_id,
8679 str.sgn_code sgn_code,
8680 str.sgn_code alloc_yn,
8681 str.comments alloc_basis,
8682 str.transaction_number trn_num,
8683 str.purpose_code,
8684 str.say_code,
8685 str.active_yn
8686 FROM okl_streams str
8687 WHERE str.khr_id = p_chr_id
8688 AND str.purpose_code = 'REPORT'
8689 AND str.say_code = 'CURR'
8690 AND str.sgn_code NOT IN ('INTC','LATE_CALC') -- bug 6472228
8691 AND (NVL( str.kle_id, -1) = -1 OR
8692 str.kle_id IN (SELECT kle.id
8693 FROM okl_k_lines_full_v kle,
8694 okc_line_styles_b lse,
8695 okc_statuses_b sts
8696 WHERE KLE.LSE_ID = LSE.ID
8697 AND kle.dnz_chr_id = p_chr_id
8698 AND sts.code = kle.sts_code
8699 AND lse.lty_code NOT IN ('INSURANCE')));
8700 -- Bug 4737555 - End of Changes
8701
8702 lv_pdt_no_rep VARCHAR2(3) := 'N';
8703 j NUMBER := 0;
8704 m_stmv_tbl okl_streams_pub.stmv_tbl_type;
8705 mx_stmv_tbl okl_streams_pub.stmv_tbl_type;
8706 ylds_rec ylds_csr%ROWTYPE;
8707
8708 l_strm_rec strm_csr%ROWTYPE;
8709 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
8710 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
8711
8712 i NUMBER;
8713 l_tcnCode VARCHAR2(256);
8714 l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
8715
8716 l_fnd_rec fnd_lookups_csr%ROWTYPE;
8717 l_trx_rec trx_csr%ROWTYPE;
8718 l_hdr_rec l_hdr_csr%ROWTYPE;
8719
8720 l_strm_name_rec strm_name_csr%ROWTYPE;
8721 l_strms_orig_rec strms_csr%ROWTYPE;
8722 l_strms_rep_rec strms_csr%ROWTYPE;
8723 l_strm_name VARCHAR2(256);
8724
8725 l_chr_id NUMBER := TO_NUMBER(p_chr_id);
8726
8727 l_process_yn VARCHAR2(1) := 'N';
8728 l_orig_yn VARCHAR2(1) := 'N';
8729 l_rep_yn VARCHAR2(1) := 'N';
8730 l_mgaap_yn VARCHAR2(1) := 'N';
8731
8732 c_num VARCHAR2(256);
8733 -- Start of modification for bug#3320656 -- bakuchib
8734 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
8735 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8736 lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8737 r_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8738 rx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
8739 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
8740 -- End of modification for bug#3320656 -- bakuchib
8741 --Added by kthiruva on 11-Aug-2005
8742 --Bug 4541302 - Start of Changes
8743 CURSOR get_stream_req_status_csr(p_khr_id NUMBER)
8744 IS
8745 SELECT * FROM (
8746 SELECT SIF.SIS_CODE REQUEST_STATUS
8747 FROM OKL_STREAM_INTERFACES SIF
8748 WHERE SIF.KHR_ID = p_khr_id
8749 AND SIF.PURPOSE_CODE = 'REPORT'
8750 ORDER BY SIF.TRANSACTION_NUMBER DESC)
8751 WHERE ROWNUM < 2;
8752
8753 -- To get the reporting request transaction number
8754 CURSOR get_rep_trans_num(p_khr_id NUMBER)
8755 IS
8756 SELECT * FROM (
8757 SELECT SIF.TRANSACTION_NUMBER TRANSACTION_NUMBER
8758 FROM OKL_STREAM_INTERFACES SIF
8759 WHERE SIF.KHR_ID = p_khr_id
8760 AND SIF.PURPOSE_CODE = 'REPORT'
8761 ORDER BY SIF.TRANSACTION_NUMBER DESC)
8762 WHERE ROWNUM < 2;
8763
8764 l_report_req_status VARCHAR2(100);
8765 l_message VARCHAR2(30);
8766 l_status NUMBER := 0;
8767 l_timeout NUMBER := 120;
8768 l_alert_name VARCHAR2(20) := 'REP_PROD_COMPLETE';
8769 l_rep_message VARCHAR2(30) := 'PROCESSED';
8770 --Bug 4541302 - End of Changes
8771
8772
8773 BEGIN
8774 x_return_status := OKL_API.G_RET_STS_SUCCESS;
8775 -- Call start_activity to create savepoint, check compatibility
8776 -- and initialize message list
8777 x_return_status := OKL_API.START_ACTIVITY (
8778 l_api_name
8779 ,p_init_msg_list
8780 ,'_PVT'
8781 ,x_return_status);
8782 -- Check if activity started successfully
8783 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8784 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8785 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8786 RAISE OKL_API.G_EXCEPTION_ERROR;
8787 END IF;
8788 IF p_process_yn = OKL_API.G_TRUE Then
8789 l_process_yn := 'Y';
8790 END IF;
8791
8792 --Added by kthiruva for Debug Logging
8793 write_to_log('Just inside process_streams ');
8794
8795 FOR get_fin_lne_rec IN get_fin_lne_csr(p_chr_id => p_chr_id) LOOP
8796 FOR get_level_rec IN get_level_csr(p_chr_id => p_chr_id,
8797 p_cle_id => get_fin_lne_rec.line_id) LOOP
8798 r_rulv_rec.id := get_level_rec.slh_id;
8799 r_rulv_rec.rule_information2 := 'IMPL_INTEREST_RATE';
8800 -- Start of modification for bug#3320656 -- bakuchib
8801 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
8802 OKL_RULE_PUB.update_rule(
8803 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
8804 -- end of modification for bug#3320656 -- bakuchib
8805 p_api_version => p_api_version,
8806 p_init_msg_list => p_init_msg_list,
8807 x_return_status => x_return_status,
8808 x_msg_count => x_msg_count,
8809 x_msg_data => x_msg_data,
8810 p_rulv_rec => r_rulv_rec,
8811 p_edit_mode => 'N',
8812 x_rulv_rec => rx_rulv_rec);
8813 l_rulv_rec.id := get_level_rec.sll_id;
8814 l_rulv_rec.rule_information13 := get_fin_lne_rec.rate;
8815 -- Start of modification for bug#3320656 -- bakuchib
8816 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
8817 OKL_RULE_PUB.update_rule(
8818 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
8819 -- end of modification for bug#3320656 -- bakuchib
8820 p_api_version => p_api_version,
8821 p_init_msg_list => p_init_msg_list,
8822 x_return_status => x_return_status,
8823 x_msg_count => x_msg_count,
8824 x_msg_data => x_msg_data,
8825 p_rulv_rec => l_rulv_rec,
8826 p_edit_mode => 'N',
8827 x_rulv_rec => lx_rulv_rec);
8828 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8829 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
8830 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8831 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
8832 END IF;
8833 END LOOP;
8834 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8835 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
8836 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8837 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
8838 END IF;
8839 END LOOP;
8840 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8841 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8842 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8843 RAISE OKL_API.G_EXCEPTION_ERROR;
8844 END IF;
8845 -- getting the header info
8846 OPEN l_hdr_csr( p_chr_id );
8847 FETCH l_hdr_csr INTO l_hdr_rec;
8848 CLOSE l_hdr_csr;
8849 -- Checking if the normal streams which are in working status
8850 OPEN strms_csr(p_chr_id, 'WORK', 'ORIGIN');
8851 FETCH strms_csr INTO l_strms_orig_rec;
8852 IF strms_csr%FOUND THEN
8853 l_orig_yn := 'Y';
8854 END IF;
8855 CLOSE strms_csr;
8856 -- bug# 2763523
8857 okl_context.set_okc_org_context(l_hdr_rec.authoring_org_id,l_hdr_rec.inv_organization_id);
8858 IF l_hdr_rec.report_pdt_id <> -1 THEN
8859 -- Checking if the Reporting streams which are in working status
8860 OPEN strms_csr(p_chr_id, 'WORK', 'REPORT');
8861 FETCH strms_csr into l_strms_rep_rec;
8862 IF strms_csr%FOUND THEN
8863 l_rep_yn := 'Y';
8864 END IF;
8865 CLOSE strms_csr;
8866 l_mgaap_yn := 'Y';
8867 END IF;
8868 IF ((l_mgaap_yn='N' AND l_process_yn='N') OR
8869 (l_mgaap_yn='Y' AND l_orig_yn='N' AND l_rep_yn='N' AND l_process_yn='N')) Then
8870 RETURN;
8871 END IF;
8872 IF ((l_orig_yn='Y' ) AND (l_process_yn='Y' )) THEN
8873 l_chr_yields.pre_tax_yield := p_chr_yields.PRE_TAX_YIELD;
8874 l_chr_yields.after_tax_yield := p_chr_yields.AFTER_TAX_YIELD;
8875 l_chr_yields.pre_tax_irr := p_chr_yields.PRE_TAX_IRR;
8876 l_chr_yields.after_tax_irr := p_chr_yields.AFTER_TAX_IRR;
8877 l_chr_yields.implicit_interest_rate := p_chr_yields.IMPLICIT_INTEREST_RATE;
8878 l_chr_yields.sub_pre_Tax_yield := p_chr_yields.sub_pre_Tax_yield;
8879 l_chr_yields.sub_after_tax_yield := p_chr_yields.sub_after_tax_yield;
8880 l_chr_yields.sub_pre_tax_irr := p_chr_yields.sub_pre_tax_irr;
8881 l_chr_yields.sub_after_tax_irr := p_chr_yields.sub_after_tax_irr;
8882 l_chr_yields.sub_impl_interest_rate := p_chr_yields.sub_impl_interest_rate;
8883 END IF;
8884 OPEN ylds_csr(p_chr_id);
8885 FETCH ylds_csr into ylds_rec;
8886 CLOSE ylds_csr;
8887 --Modified by kthiruva on 08-Feb-2005
8888 --Ensure that the reporting producti does not update the contract yields
8889 --Bug 3955561 - Start of Changes
8890 -- IF NOT (l_orig_yn='Y' AND l_rep_yn='Y' AND ylds_rec.exist = 'Y' ) THEN
8891 IF not(l_orig_yn='N' AND l_rep_yn='Y' AND ylds_rec.exist = 'N' ) THEN
8892 --Bug 3955561 - End of Changes
8893 --Added by kthiruva for Logging Purposes
8894 write_to_log('Before the call to update_contract_yields');
8895
8896 update_contract_yields(
8897 p_api_version => p_api_version,
8898 p_init_msg_list => p_init_msg_list,
8899 x_return_status => x_return_status,
8900 x_msg_count => x_msg_count,
8901 x_msg_data => x_msg_data,
8902 p_chr_id => p_chr_id,
8903 p_chr_yields => l_chr_yields);
8904
8905 --Added by kthiruva for Logging Purposes
8906 write_to_log('After the call to update_contract_yields, the return status is :'||x_return_status);
8907
8908 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8909 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8910 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8911 RAISE OKL_API.G_EXCEPTION_ERROR;
8912 END IF;
8913 END IF;
8914 IF p_source_call = 'ESG' THEN
8915 --Added by kthiruva for Debugging
8916 write_to_log('The source call is ESG');
8917 IF l_mgaap_yn = 'Y' THEN
8918 IF l_process_yn='N' THEN
8919 i := 0;
8920 FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN') LOOP
8921 i := i + 1;
8922 l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
8923 l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
8924 l_stmv_tbl(i).khr_id := p_chr_id;
8925 l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
8926 l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
8927 END LOOP;
8928 FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT') LOOP
8929 i := i + 1;
8930 l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
8931 l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
8932 l_stmv_tbl(i).khr_id := p_chr_id;
8933 l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
8934 l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
8935 END LOOP;
8936 IF i > 0 THEN
8937 Okl_Streams_pub.delete_streams(
8938 p_api_version => p_api_version,
8939 p_init_msg_list => p_init_msg_list,
8940 x_return_status => x_return_status,
8941 x_msg_count => x_msg_count,
8942 x_msg_data => x_msg_data,
8943 p_stmv_tbl => l_stmv_tbl);
8944
8945 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8946 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8947 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8948 RAISE OKL_API.G_EXCEPTION_ERROR;
8949 END IF;
8950 END IF;
8951 RETURN;
8952 -- Start for bug#3388812 modification - BAKUCHIB
8953 -- ELSIF (l_orig_yn <> l_rep_yn ) THEN -- when (orig=Y and rep=N) OR (orig=N and rep=Y)
8954 -- RETURN;
8955 -- End for bug#3388812 modification - BAKUCHIB
8956 ELSIF l_rep_yn='Y' THEN
8957 -- gboomina BUG#4508077 passing p_source_call as a parameter
8958
8959 --Added by kthiruva for Debug Purposes
8960 write_to_log('Value of l_rep_yn is Y');
8961 write_to_log('Before the call to Adjust Streams');
8962
8963 adjust_streams(p_api_version => p_api_version,
8964 p_init_msg_list => p_init_msg_list,
8965 x_return_status => x_return_status,
8966 x_msg_count => x_msg_count,
8967 x_msg_data => x_msg_data,
8968 p_chr_id => p_chr_id,
8969 p_purpose => 'REPORT',
8970 p_source_call => p_source_call);
8971
8972 --Added by kthiruva for Debug Purposes
8973 write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
8974
8975 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8976 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8977 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8978 RAISE OKL_API.G_EXCEPTION_ERROR;
8979 END IF;
8980 END IF;
8981 END If;
8982 IF l_orig_yn = 'Y' THEN
8983 -- gboomina BUG#4508077 passing p_source_call as a parameter
8984 --Added by kthiruva for Debug Purposes
8985 write_to_log('Value of l_orig_yn is Y');
8986 write_to_log('Before the call to Adjust Streams');
8987 adjust_streams(p_api_version => p_api_version,
8988 p_init_msg_list => p_init_msg_list,
8989 x_return_status => x_return_status,
8990 x_msg_count => x_msg_count,
8991 x_msg_data => x_msg_data,
8992 p_chr_id => p_chr_id,
8993 p_purpose => 'ORIGIN',
8994 p_source_call => p_source_call);
8995
8996 --Added by kthiruva for Debug Purposes
8997 write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
8998
8999 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9000 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9001 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9002 RAISE OKL_API.G_EXCEPTION_ERROR;
9003 END IF;
9004 END IF;
9005 ELSIF p_source_call = 'ISG' THEN
9006 --Added by kthiruva for Debugging
9007 write_to_log('The source call is ISG');
9008 IF l_mgaap_yn = 'Y' THEN
9009 IF l_process_yn='N' THEN
9010 i := 0;
9011 FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN') LOOP
9012 i := i + 1;
9013 l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
9014 l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
9015 l_stmv_tbl(i).khr_id := p_chr_id;
9016 l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
9017 l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
9018 END LOOP;
9019 FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT') LOOP
9020 i := i + 1;
9021 l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
9022 l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
9023 l_stmv_tbl(i).khr_id := p_chr_id;
9024 l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
9025 l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
9026 END LOOP;
9027 IF i > 0 THEN
9028 Okl_Streams_pub.delete_streams(
9029 p_api_version => p_api_version,
9030 p_init_msg_list => p_init_msg_list,
9031 x_return_status => x_return_status,
9032 x_msg_count => x_msg_count,
9033 x_msg_data => x_msg_data,
9034 p_stmv_tbl => l_stmv_tbl);
9035
9036 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9037 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9038 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9039 RAISE OKL_API.G_EXCEPTION_ERROR;
9040 END IF;
9041 END IF;
9042 RETURN;
9043 -- Start for bug#3388812 modification - BAKUCHIB
9044 -- ELSIF (l_orig_yn <> l_rep_yn ) THEN -- when (orig=Y and rep=N) OR (orig=N and rep=Y)
9045 -- RETURN;
9046 -- End for bug#3388812 modification - BAKUCHIB
9047 -- gboomina BUG#4508077 passing p_source_call as a parameter
9048 ELSIF l_rep_yn='Y' THEN
9049 adjust_streams(p_api_version => p_api_version,
9050 p_init_msg_list => p_init_msg_list,
9051 x_return_status => x_return_status,
9052 x_msg_count => x_msg_count,
9053 x_msg_data => x_msg_data,
9054 p_chr_id => p_chr_id,
9055 p_purpose => 'REPORT',
9056 p_source_call => p_source_call);
9057
9058 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9059 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9060 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9061 RAISE OKL_API.G_EXCEPTION_ERROR;
9062 END IF;
9063 -- gboomina BUG#4508077 passing p_source_call as a parameter
9064 adjust_streams(p_api_version => p_api_version,
9065 p_init_msg_list => p_init_msg_list,
9066 x_return_status => x_return_status,
9067 x_msg_count => x_msg_count,
9068 x_msg_data => x_msg_data,
9069 p_chr_id => p_chr_id,
9070 p_purpose => 'ORIGIN',
9071 p_source_call => p_source_call);
9072
9073 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9074 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9075 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9076 RAISE OKL_API.G_EXCEPTION_ERROR;
9077 END IF;
9078 END IF;
9079 ELSE
9080 write_to_log('Before the call to Adjust Streams');
9081 -- gboomina BUG#4508077 passing p_source_call as a parameter
9082 adjust_streams(p_api_version => p_api_version,
9083 p_init_msg_list => p_init_msg_list,
9084 x_return_status => x_return_status,
9085 x_msg_count => x_msg_count,
9086 x_msg_data => x_msg_data,
9087 p_chr_id => p_chr_id,
9088 p_purpose => 'ORIGIN',
9089 p_source_call => p_source_call);
9090
9091 --Added by kthiruva for Debug Purposes
9092 write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
9093
9094 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9095 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9096 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9097 RAISE OKL_API.G_EXCEPTION_ERROR;
9098 END IF;
9099 END If;
9100 END IF;
9101
9102 -- Start for bug#3388812 modification - BAKUCHIB
9103 -- We are explicitly making the non MGAAP streams to History if the product
9104 -- is non MGAPP.
9105 OPEN validate_pdt_csr(p_chr_id => p_chr_id);
9106 FETCH validate_pdt_csr INTO lv_pdt_no_rep;
9107 CLOSE validate_pdt_csr;
9108 IF lv_pdt_no_rep = 'N' THEN
9109 FOR non_mg_rep_rec IN non_mg_rep_csr(p_chr_id => p_chr_id) LOOP
9110 j := j + 1;
9111 /* Commeneted for Bulk update by HKPATEL -02/28/04
9112 m_stmv_tbl(j).id := non_mg_rep_rec.strm_id;
9113 m_stmv_tbl(j).say_code := 'HIST';
9114 m_stmv_tbl(j).active_yn := 'N';
9115 m_stmv_tbl(j).date_history := sysdate;
9116 */
9117
9118 l_id_tbl(j) := non_mg_rep_rec.strm_id;
9119 END LOOP;
9120 IF (l_id_tbl.COUNT > 0) THEN
9121
9122 BEGIN
9123 --Added by kthiruva for Debugging
9124 write_to_log('Prior to the call to historing current streams');
9125 FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
9126 UPDATE OKL_STREAMS
9127 SET say_code = 'HIST',
9128 active_yn = 'N',
9129 date_history = sysdate,
9130 last_updated_by = FND_GLOBAL.USER_ID, -- BUG:14749215 changes start here
9131 last_update_date = sysdate,
9132 last_update_login = FND_GLOBAL.LOGIN_ID -- BUG:14749215 changes end here
9133 WHERE ID = l_id_tbl(i);
9134 write_to_log('Streams historised successfully');
9135
9136 EXCEPTION
9137 WHEN OTHERS THEN
9138 okl_api.set_message (p_app_name => G_APP_NAME,
9139 p_msg_name => G_DB_ERROR,
9140 p_token1 => G_PROG_NAME_TOKEN,
9141 p_token1_value => l_api_name,
9142 p_token2 => G_SQLCODE_TOKEN,
9143 p_token2_value => sqlcode,
9144 p_token3 => G_SQLERRM_TOKEN,
9145 p_token3_value => sqlerrm);
9146 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
9147 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9148 END;
9149 /* Commented for Bulk Update - HKPATEL - 02/18/2004
9150 IF (m_stmv_tbl.COUNT > 0) THEN
9151 okl_streams_pub.update_streams(
9152 p_api_version => p_api_version,
9153 p_init_msg_list => p_init_msg_list,
9154 x_return_status => x_return_status,
9155 x_msg_count => x_msg_count,
9156 x_msg_data => x_msg_data,
9157 p_stmv_tbl => m_stmv_tbl,
9158 x_stmv_tbl => mx_stmv_tbl);
9159 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9160 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9161 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
9162 raise OKL_API.G_EXCEPTION_ERROR;
9163 END IF;
9164 */
9165 END IF;
9166 END IF;
9167
9168 -- gboomina BUG#4508077 changes start
9169 -- for main product
9170 IF l_orig_yn = 'Y' THEN
9171 --Added by kthiruva for Debugging
9172 write_to_log('Value of l_orig_yn = Y');
9173 write_to_log('Prior to the call to update_rvi_amount');
9174
9175 update_rvi_amount(p_api_version => p_api_version,
9176 p_init_msg_list => OKL_API.G_FALSE,
9177 p_chr_id => p_chr_id,
9178 p_purpose => 'ORIGIN',
9179 x_return_status => x_return_status,
9180 x_msg_count => x_msg_count,
9181 x_msg_data => x_msg_data);
9182
9183 --Added by kthiruva for Debugging
9184 write_to_log('After the call to Update_rvi_amount, the return status is :'||x_return_status);
9185 -- raise appropriate exceptions depending on the return status
9186 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9187 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9188 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9189 RAISE OKL_API.G_EXCEPTION_ERROR;
9190 END IF;
9191 END IF;
9192 -- for reporting product
9193 IF l_rep_yn = 'Y' THEN
9194 --Added by kthiruva for Debugging
9195 write_to_log('Value of l_rep_yn = Y');
9196 write_to_log('Prior to the call to update_rvi_amount');
9197
9198 update_rvi_amount(p_api_version => p_api_version,
9199 p_init_msg_list => OKL_API.G_FALSE,
9200 p_chr_id => p_chr_id,
9201 p_purpose => 'REPORT',
9202 x_return_status => x_return_status,
9203 x_msg_count => x_msg_count,
9204 x_msg_data => x_msg_data);
9205
9206 --Added by kthiruva for Debugging
9207 write_to_log('After the call to Update_rvi_amount, the return status is :'||x_return_status);
9208 -- raise appropriate exceptions depending on the return status
9209 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9210 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9211 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9212 RAISE OKL_API.G_EXCEPTION_ERROR;
9213 END IF;
9214 END IF;
9215 -- gboomina BUG#4508077 changes end
9216 -- End for bug#3388812 modification - BAKUCHIB
9217 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
9218 --PAGARG 25-Feb-2005 Bug 4037658 starts
9219 IF (p_source_call = 'ESG') THEN
9220 IF not (l_orig_yn='N' AND l_rep_yn='Y') THEN
9221 --Added by kthiruva on 11-Aug-2005
9222 --Bug 4541302 - Start of Changes
9223 --1)If the regular product has a Multi-GAAP product then, we check to see if the Reporting
9224 -- Product's stream generation request is already completed.
9225 --2)If yes, we update the contract status
9226 --3)If no and the request is still being processed, we register an alert and wait on the alert.
9227 --4)The alert would be signalled by the reporting product once its stream generation request
9228 -- is complete.
9229 --5)Once the alert is received, the regular product can update the contract status to complete.
9230 --6)If the reporting product's stream generation request does not complete, and there is no
9231 -- alert signalled, then the contract status is not updated.
9232 IF l_mgaap_yn = 'Y' THEN
9233 --Fetching the request status of the Reporting Product
9234 OPEN get_stream_req_status_csr(p_chr_id);
9235 FETCH get_stream_req_status_csr INTO l_report_req_status;
9236 CLOSE get_stream_req_status_csr;
9237
9238 --When the reporting request has completed with the below statuses, we do not want to update
9239 --the contract status. We therefore, update l_status to 1.
9240 IF l_report_req_status IN ('PROCESSING_FAILED','PROCESS_ABORTED','SERVER_NA','TIME_OUT') THEN
9241 l_status := 1;
9242 END IF;
9243
9244 IF(l_report_req_status NOT IN('PROCESS_COMPLETE', 'PROCESS_COMPLETE_ERRORS','PROCESSING_FAILED'
9245 ,'PROCESS_ABORTED','SERVER_NA','TIME_OUT')) THEN
9246
9247 --Fetching the value of the time out variable
9248 l_timeout := FND_PROFILE.value('OKL_STREAMS_TIME_OUT');
9249 l_timeout := l_timeout * 60;
9250
9251 OPEN get_rep_trans_num(p_chr_id);
9252 FETCH get_rep_trans_num INTO l_alert_name;
9253 CLOSE get_rep_trans_num;
9254
9255 DBMS_ALERT.REGISTER(l_alert_name);
9256 DBMS_ALERT.WAITONE(l_alert_name,l_message,l_status,l_timeout);
9257 DBMS_ALERT.REMOVE(l_alert_name);
9258
9259 IF l_status = 1 THEN
9260 --Fetching the request status of the Reporting Product
9261 OPEN get_stream_req_status_csr(p_chr_id);
9262 FETCH get_stream_req_status_csr INTO l_report_req_status;
9263 CLOSE get_stream_req_status_csr;
9264 END IF;
9265 END IF;
9266 END IF;
9267 IF(l_status = 0 OR (l_report_req_status IN('PROCESS_COMPLETE', 'PROCESS_COMPLETE_ERRORS'))) THEN
9268 print( l_api_name, 'updating the status');
9269 --Added by kthiruva for Debugging
9270 write_to_log('Prior to the call to update_contract_status');
9271 okl_contract_status_pub.update_contract_status(
9272 l_api_version,
9273 p_init_msg_list,
9274 x_return_status,
9275 x_msg_count,
9276 x_msg_data,
9277 'COMPLETE',
9278 p_chr_id );
9279 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9280 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9281 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9282 RAISE OKL_API.G_EXCEPTION_ERROR;
9283 END IF;
9284 --Added by kthiruva for Debugging
9285 write_to_log('After the call to update_contract_status, return status is :'||x_return_status);
9286
9287 --call to cascade status on to lines
9288 OKL_CONTRACT_STATUS_PVT.cascade_lease_status(
9289 p_api_version => l_api_version,
9290 p_init_msg_list => p_init_msg_list,
9291 x_return_status => x_return_status,
9292 x_msg_count => x_msg_count,
9293 x_msg_data => x_msg_data,
9294 p_chr_id => l_chr_id);
9295 --Added by kthiruva for Debugging
9296 write_to_log('After the call to cascade_lease_status, return status is :'||x_return_status);
9297
9298 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9299 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9300 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9301 RAISE OKL_API.G_EXCEPTION_ERROR;
9302 END IF;
9303 --srsreeni Bug6011651 starts
9304 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
9305 p_api_version => l_api_version,
9306 p_init_msg_list => p_init_msg_list,
9307 x_return_status => x_return_status,
9308 x_msg_count => x_msg_count,
9309 x_msg_data => x_msg_data,
9310 p_khr_id => l_chr_id,
9311 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
9312 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
9313 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9314 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9315 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9316 RAISE OKL_API.G_EXCEPTION_ERROR;
9317 END IF;
9318 --srsreeni Bug6011651 ends
9319 END IF;
9320
9321 ELSE --For the if condition that checks if the request is of the regular product
9322 OPEN get_rep_trans_num(p_chr_id);
9323 FETCH get_rep_trans_num INTO l_alert_name;
9324 CLOSE get_rep_trans_num;
9325
9326 DBMS_ALERT.SIGNAL(l_alert_name,l_rep_message);
9327 COMMIT;
9328 -- Bug 4541302 - End of Changes
9329 END IF;
9330 ELSE
9331 --PAGARG 25-Feb-2005 Bug 4037658 ends
9332
9333 print( l_api_name, 'updating the status');
9334 okl_contract_status_pub.update_contract_status(
9335 l_api_version,
9336 p_init_msg_list,
9337 x_return_status,
9338 x_msg_count,
9339 x_msg_data,
9340 'COMPLETE',
9341 p_chr_id );
9342
9343 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9344 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9345 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9346 RAISE OKL_API.G_EXCEPTION_ERROR;
9347 END IF;
9348 --call to cascade status on to lines
9349 OKL_CONTRACT_STATUS_PVT.cascade_lease_status
9350 (p_api_version => l_api_version,
9351 p_init_msg_list => p_init_msg_list,
9352 x_return_status => x_return_status,
9353 x_msg_count => x_msg_count,
9354 x_msg_data => x_msg_data,
9355 p_chr_id => l_chr_id);
9356
9357 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9358 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9359 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9360 RAISE OKL_API.G_EXCEPTION_ERROR;
9361 END IF;
9362 --srsreeni Bug6011651 starts
9363 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
9364 p_api_version => l_api_version,
9365 p_init_msg_list => p_init_msg_list,
9366 x_return_status => x_return_status,
9367 x_msg_count => x_msg_count,
9368 x_msg_data => x_msg_data,
9369 p_khr_id => l_chr_id,
9370 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
9371 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
9372 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9373 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9374 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9375 RAISE OKL_API.G_EXCEPTION_ERROR;
9376 END IF;
9377 --srsreeni Bug6011651 ends
9378 END IF;
9379 --PAGARG 25-Feb-2005 Bug 4037658 starts
9380 END IF; -- for p_source_call = 'ESG' check
9381
9382 IF (p_source_call = 'ESG') THEN
9383 IF not (l_orig_yn='N' AND l_rep_yn='Y') THEN
9384 -- rebook contract.
9385 print( l_api_name, 'calling mass rebook api');
9386 --Added by kthiruva for Debugging
9387 write_to_log('Prior to the call to mass_rebook_after_yield'||x_return_status);
9388 OKL_MASS_REBOOK_PUB.mass_rebook_after_yield(
9389 p_api_version => l_api_version
9390 ,p_init_msg_list => p_init_msg_list
9391 ,x_return_status => x_return_status
9392 ,x_msg_count => x_msg_count
9393 ,x_msg_data => x_msg_data
9394 ,p_chr_id => l_chr_id);
9395 --Added by kthiruva for Debugging
9396 write_to_log('After the call to mass_rebook_after_yield, return status is '||x_return_status);
9397
9398 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9399 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9400 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9401 RAISE OKL_API.G_EXCEPTION_ERROR;
9402 END IF;
9403
9404 -- after yield processing for an imported contract.
9405 print( l_api_name, 'calling import api');
9406 --Added by kthiruva for Debugging
9407 write_to_log('Prior to the call to contract_after_yield'||x_return_status);
9408 OKL_OPEN_INTERFACE_PVT.contract_after_yield(
9409 p_api_version => l_api_version
9410 ,p_init_msg_list => p_init_msg_list
9411 ,x_return_status => x_return_status
9412 ,x_msg_count => x_msg_count
9413 ,x_msg_data => x_msg_data
9414 ,p_chr_id => l_chr_id);
9415
9416 --Added by kthiruva for Debugging
9417 write_to_log('After the call to contract_after_yield, return status is '||x_return_status);
9418
9419 print( l_api_name, 'import api', x_return_status);
9420 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9421 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9422 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9423 RAISE OKL_API.G_EXCEPTION_ERROR;
9424 END IF;
9425 --Bug 8814790: Moved split_asset_after_yield for ESG to be inside the IF condition
9426 --Added by vdamerla for bug 6344223
9427 print( l_api_name, 'calling split asset api');
9428 --Added by kthiruva for Debugging
9429 write_to_log('Prior to the call to split_asset_after_yield'||x_return_status);
9430 OKL_SPLIT_ASSET_PVT.split_asset_after_yield(
9431 p_api_version => l_api_version
9432 ,p_init_msg_list => p_init_msg_list
9433 ,x_return_status => x_return_status
9434 ,x_msg_count => x_msg_count
9435 ,x_msg_data => x_msg_data
9436 ,p_chr_id => l_chr_id);
9437 --Added by kthiruva for Debugging
9438 write_to_log('After the call to split_asset_after_yield, return status is '||x_return_status);
9439 print( l_api_name, 'split asset api', x_return_status);
9440 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9441 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9442 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9443 RAISE OKL_API.G_EXCEPTION_ERROR;
9444 END IF;
9445 --end vdamerla for bug 6344223
9446 END IF;
9447 ELSE -- For Internal Stream generator
9448 --PAGARG 25-Feb-2005 Bug 4037658 ends
9449
9450 -- rebook contract.
9451 print( l_api_name, 'calling mass rebook api');
9452 OKL_MASS_REBOOK_PUB.mass_rebook_after_yield(
9453 p_api_version => l_api_version
9454 ,p_init_msg_list => p_init_msg_list
9455 ,x_return_status => x_return_status
9456 ,x_msg_count => x_msg_count
9457 ,x_msg_data => x_msg_data
9458 ,p_chr_id => l_chr_id);
9459
9460 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9461 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9462 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9463 RAISE OKL_API.G_EXCEPTION_ERROR;
9464 END IF;
9465
9466 -- after yield processing for an imported contract.
9467 print( l_api_name, 'calling import api');
9468 OKL_OPEN_INTERFACE_PVT.contract_after_yield(
9469 p_api_version => l_api_version
9470 ,p_init_msg_list => p_init_msg_list
9471 ,x_return_status => x_return_status
9472 ,x_msg_count => x_msg_count
9473 ,x_msg_data => x_msg_data
9474 ,p_chr_id => l_chr_id);
9475
9476 print( l_api_name, 'import api', x_return_status);
9477 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9478 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9479 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9480 RAISE OKL_API.G_EXCEPTION_ERROR;
9481 END IF;
9482
9483 --Bug 8814790: Moved split_asset_after_yield for ISG to be inside the ELSE condition
9484 --Added by vdamerla for bug 6344223
9485 print( l_api_name, 'calling split asset api');
9486 OKL_SPLIT_ASSET_PVT.split_asset_after_yield(
9487 p_api_version => l_api_version
9488 ,p_init_msg_list => p_init_msg_list
9489 ,x_return_status => x_return_status
9490 ,x_msg_count => x_msg_count
9491 ,x_msg_data => x_msg_data
9492 ,p_chr_id => l_chr_id);
9493 print( l_api_name, 'split asset api', x_return_status);
9494 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9495 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9496 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9497 RAISE OKL_API.G_EXCEPTION_ERROR;
9498 END IF;
9499 --end vdamerla for bug 6344223
9500 --PAGARG 25-Feb-2005 Bug 4037658
9501 END IF; -- for p_source_call = 'ESG' check
9502
9503 print( l_api_name, 'end', x_return_status);
9504 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
9505 EXCEPTION
9506 WHEN OKL_API.G_EXCEPTION_ERROR THEN
9507 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9508 p_api_name => l_api_name,
9509 p_pkg_name => g_pkg_name,
9510 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
9511 x_msg_count => x_msg_count,
9512 x_msg_data => x_msg_data,
9513 p_api_type => g_api_type);
9514 IF l_hdr_csr%ISOPEN THEN
9515 CLOSE l_hdr_csr;
9516 End If;
9517 IF get_fin_lne_csr%ISOPEN THEN
9518 CLOSE get_fin_lne_csr;
9519 End If;
9520 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9521 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9522 p_api_name => l_api_name,
9523 p_pkg_name => g_pkg_name,
9524 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9525 x_msg_count => x_msg_count,
9526 x_msg_data => x_msg_data,
9527 p_api_type => g_api_type);
9528
9529 If ( strms_csr%ISOPEN ) Then
9530 CLOSE strms_csr;
9531 End If;
9532
9533 IF l_hdr_csr%ISOPEN THEN
9534 CLOSE l_hdr_csr;
9535 End If;
9536 IF get_fin_lne_csr%ISOPEN THEN
9537 CLOSE get_fin_lne_csr;
9538 End If;
9539 when OTHERS then
9540 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9541 p_api_name => l_api_name,
9542 p_pkg_name => g_pkg_name,
9543 p_exc_name => 'OTHERS',
9544 x_msg_count => x_msg_count,
9545 x_msg_data => x_msg_data,
9546 p_api_type => g_api_type);
9547
9548 IF l_hdr_csr%ISOPEN THEN
9549 CLOSE l_hdr_csr;
9550 End If;
9551 IF get_fin_lne_csr%ISOPEN THEN
9552 CLOSE get_fin_lne_csr;
9553 End If;
9554 end process_streams;
9555 -- End modification 11i10 bakuchib
9556 -- Start modification 11i10 bakuchib
9557 PROCEDURE check_for_mandatory_streams(
9558 p_api_version IN NUMBER,
9559 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
9560 x_return_status OUT NOCOPY VARCHAR2,
9561 x_msg_count OUT NOCOPY NUMBER,
9562 x_msg_data OUT NOCOPY VARCHAR2,
9563 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
9564 p_deal_type IN VARCHAR2,
9565 p_stream_types_tbl IN okl_create_streams_pub.csm_stream_types_tbl_type,
9566 x_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
9567 l_api_name VARCHAR2(256) := 'CHECK_FOR_MD_STRMS';
9568 i NUMBER;
9569 styid NUMBER;
9570 l_return_status VARCHAR2(1);
9571 j NUMBER;
9572 k NUMBER :=0;
9573 ln_dummy NUMBER := 0;
9574 ln_income NUMBER := 0;
9575 l_strm_name VARCHAR2(256) := OKL_API.G_MISS_CHAR;
9576 l_blnInclude VARCHAR2(3) := OKL_API.G_TRUE;
9577 l_blnhasfees VARCHAR2(3) := OKL_API.G_FALSE;
9578 l_blnhasfin VARCHAR2(3) := OKL_API.G_FALSE;
9579 TYPE l_streams_tbl_type IS TABLE OF VARCHAR2(256)
9580 INDEX BY BINARY_INTEGER;
9581 TYPE fin_id_tbl_type IS TABLE OF NUMBER
9582 INDEX BY BINARY_INTEGER;
9583 l_streams_tbl l_streams_tbl_type;
9584 l_fin_id_tbl fin_id_tbl_type;
9585 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
9586 -- get Stream name
9587 CURSOR strm_name_csr (styid NUMBER)
9588 IS
9589 SELECT tl.name name,
9590 stm.stream_type_class stream_type_class,
9591 tl.description alloc_basis,
9592 stm.capitalize_yn capitalize_yn,
9593 stm.periodic_yn periodic_yn
9594 FROM okl_strm_type_b stm,
9595 okl_strm_type_tl tl
9596 WHERE tl.id = stm.id
9597 AND tl.language = 'US'
9598 AND stm.id = styid;
9599 --get finance strms
9600 -- nikshah -- Bug # 5484903 Fixed,
9601 -- Removed CURSOR c_finance_strm_csr
9602
9603 -- Get the stream type id
9604 CURSOR l_strmid_csr (strmName VARCHAR2)
9605 IS
9606 SELECT id styid
9607 FROM okl_strm_type_tl
9608 WHERE LANGUAGE = 'US'
9609 AND NAME = strmName;
9610 -- get the Contract line info
9611 CURSOR l_line_rec_csr(chrid NUMBER)
9612 IS
9613 SELECT cle.id
9614 FROM okc_k_lines_b cle,
9615 okc_line_styles_b lse,
9616 okc_statuses_b sts
9617 WHERE cle.dnz_chr_id = chrid
9618 AND cle.lse_id = lse.id
9619 AND lse.lty_code = 'FREE_FORM1'
9620 AND sts.code = cle.sts_code
9621 --Start of bug#3121708 modification BAKUCHIB
9622 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED');
9623 --End of bug#3121708 modification BAKUCHIB
9624 -- Get all valid fee lines
9625 CURSOR l_fee_type_csr ( chrId NUMBER, feeId NUMBER ) IS
9626 SELECT kle.fee_type
9627 FROM okl_k_lines kle,
9628 okc_k_lines_b cle,
9629 okc_line_styles_b lse,
9630 okc_statuses_b sts
9631 WHERE cle.lse_id = lse.id
9632 AND lse.lty_code = 'FEE'
9633 AND cle.dnz_chr_id = chrid
9634 AND cle.id = kle.id
9635 AND kle.id = feeId
9636 AND sts.code = cle.sts_code
9637 --Start of bug#3121708 modification BAKUCHIB
9638 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED');
9639 --End of bug#3121708 modification BAKUCHIB
9640
9641 -- To check if the chr_id has Financed fee feetype defined
9642 CURSOR l_fin_type_csr (chrId NUMBER)
9643 IS
9644 SELECT cle.id fin_id
9645 FROM okc_k_lines_b cle,
9646 okc_line_styles_b lse,
9647 okl_k_lines kle,
9648 okc_statuses_b sts
9649 WHERE cle.dnz_chr_id = chrId
9650 AND cle.lse_id = lse.id
9651 AND lse.lty_code = 'FEE'
9652 AND cle.id = kle.id
9653 AND sts.code = cle.sts_code
9654 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
9655 AND kle.fee_type = 'FINANCED';
9656
9657 -- Code required for rollover quote- HKPATEL
9658 CURSOR l_rollover_csr(chrId NUMBER)
9659 IS
9660 SELECT cle.id fin_id
9661 FROM okc_k_lines_b cle,
9662 okc_line_styles_b lse,
9663 okl_k_lines kle,
9664 okc_statuses_b sts
9665 WHERE cle.dnz_chr_id = chrId
9666 AND cle.lse_id = lse.id
9667 AND lse.lty_code = 'FEE'
9668 AND cle.id = kle.id
9669 AND sts.code = cle.sts_code
9670 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
9671 AND kle.fee_type = 'ROLLOVER';
9672
9673 CURSOR l_link_rollover_csr(cleId NUMBER)
9674 IS
9675 SELECT okc.id kle_id
9676 FROM okc_k_lines_b okc,
9677 okl_k_lines kle ,
9678 okc_line_styles_b lse
9679 WHERE okc.cle_id = cleId
9680 AND okc.lse_id = lse.id
9681 AND okc.id = kle.id
9682 AND lty_code = 'LINK_FEE_ASSET';
9683 -- Code for rollover quotes ends here- HKPATEL
9684
9685 -- To get the Subsidy Income Accural stream type id
9686 -- and also fetch the sub line id
9687 /*
9688 CURSOR get_sub_line_csr (p_dnz_chr_id okc_k_lines_b.dnz_chr_id%TYPE)
9689 IS
9690 SELECT TO_NUMBER(sgn.value) sty_id,
9691 cle.id
9692 FROM okl_sgn_translations sgn,
9693 okl_strm_type_b sty,
9694 okl_subsidies_v sub,
9695 okl_k_lines kle,
9696 okc_statuses_b sts,
9697 okc_line_styles_b lse,
9698 okc_k_lines_b cle
9699 WHERE cle.dnz_chr_id = p_dnz_chr_id
9700 AND cle.lse_id = lse.id
9701 AND lse.lty_code = 'SUBSIDY'
9702 AND sts.code = cle.sts_code
9703 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
9704 AND cle.id = kle.id
9705 AND TO_CHAR(kle.sty_id) = sgn.object1_id1
9706 AND sgn.object1_id1 = TO_CHAR(sty.id)
9707 AND sgn.jtot_object1_code = 'OKL_STRMTYP'
9708 AND kle.subsidy_id = sub.id;
9709 */
9710 CURSOR get_sub_line_csr(p_dnz_chr_id IN okc_k_lines_b.dnz_chr_id%TYPE)
9711 IS
9712 SELECT kle.sty_id,
9713 cle.id
9714 --srsreeni Bug5699923 Start
9715 ,sts.ste_code
9716 --srsreeni Bug5699923 End
9717 FROM okl_k_lines kle,
9718 okc_k_lines_b cle,
9719 okl_subsidies_v sub,
9720 okc_statuses_b sts,
9721 okc_line_styles_b lse
9722 WHERE cle.dnz_chr_id = p_dnz_chr_id
9723 AND cle.lse_id = lse.id
9724 AND lse.lty_code = 'SUBSIDY'
9725 AND sts.code = cle.sts_code
9726 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
9727 AND cle.id = kle.id
9728 AND kle.subsidy_id = sub.id;
9729
9730 -- srsreeni - Bug#5699923 - Added - Start
9731 CURSOR c_is_loan_khr(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
9732 SELECT 'Y'
9733 FROM OKL_K_HEADERS
9734 WHERE ID = p_chr_id
9735 AND DEAL_TYPE = 'LOAN';
9736
9737 l_is_loan_khr VARCHAR2(1) := 'N';
9738 -- srsreeni - Bug#569923 - Added - End
9739
9740 l_fee_type_rec l_fee_type_csr%ROWTYPE;
9741 l_strm_name_rec strm_name_csr%ROWTYPE;
9742 l_strmid_rec l_strmid_csr%ROWTYPE;
9743 r_strmid_rec l_strmid_csr%ROWTYPE;
9744 m_strmid_rec l_strmid_csr%ROWTYPE;
9745
9746 -- Code added by HKPATEL for user defined streams
9747 l_flag VARCHAR2(3) := 'YES';
9748
9749 -- Added code ends here for user defined streams
9750 -- Added by mansrini for Bug 5111058 (Fwd port bug 5061024)
9751 -- l_pricing_name VARCHAR2(40); --02-Sep-11 SECHAWLA 12936702
9752 l_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
9753 -- end mansrini
9754
9755 BEGIN
9756 x_return_status := OKL_API.G_RET_STS_SUCCESS;
9757 -- Call start_activity to create savepoint, check compatibility
9758 -- and initialize message list
9759 x_return_status := OKL_API.START_ACTIVITY (
9760 l_api_name
9761 ,p_init_msg_list
9762 ,'_PVT'
9763 ,x_return_status);
9764 -- Check if activity started successfully
9765 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9766 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9767 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9768 RAISE OKL_API.G_EXCEPTION_ERROR;
9769 END IF;
9770 l_streams_tbl(1) := 'RENT';
9771 l_streams_tbl(2) := 'PRINCIPAL BALANCE';
9772 l_streams_tbl(3) := 'RATE PARTICIPATION';
9773 l_streams_tbl(4) := 'INTEREST PAYMENT';
9774 l_streams_tbl(5) := 'PRINCIPAL PAYMENT';
9775 l_streams_tbl(6) := 'FAS 91 FEE INCOME';
9776 l_streams_tbl(7) := 'RENTAL ACCRUAL';
9777 l_streams_tbl(8) := 'FINANCED EXTENSION FEE INCOME';
9778 l_streams_tbl(9) := 'RATE SUBSIDY';
9779 l_streams_tbl(10) := 'PRE-TAX INCOME';
9780 l_streams_tbl(11) := 'RENT';--'PRESENT VALUE RESIDUAL'; --TBC
9781 l_streams_tbl(12) := 'RENT';--'PV GUARANTEE';--TBC
9782 l_streams_tbl(13) := 'RESIDUAL VALUE INSURANCE PREMIUM';
9783 l_streams_tbl(14) := 'GUARANTEED RESIDUAL INSURED'; -- RVI takes care of requesting by default.
9784 l_streams_tbl(15) := 'RENT';--'PRESENT VALUE INSURED RESIDUAL';--TBC
9785 l_streams_tbl(16) := 'RENT';--'UNEARNED INCOME';
9786 l_streams_tbl(17) := 'RENT'; --'DEFERRED INCOME';
9787 l_streams_tbl(18) := 'TERMINATION VALUE';
9788 l_streams_tbl(19) := 'STIP LOSS VALUE';
9789 l_streams_tbl(20) := 'LOAN PAYMENT';
9790 l_streams_tbl(21) := 'FEE INCOME';
9791 l_streams_tbl(22) := 'PERIODIC EXPENSE PAYABLE';
9792 l_streams_tbl(23) := 'INTEREST INCOME';
9793 -- Populating the O/P Stream Type tables with the existing one
9794 IF p_stream_types_tbl.COUNT > 0 THEN
9795 FOR i IN p_stream_types_tbl.FIRST..p_stream_types_tbl.LAST LOOP
9796 x_stream_types_tbl(i).stream_type_id := p_stream_types_tbl(i).stream_type_id;
9797 x_stream_types_tbl(i).pricing_name := p_stream_types_tbl(i).pricing_name;
9798 x_stream_types_tbl(i).kle_asset_id := p_stream_types_tbl(i).kle_asset_id;
9799 x_stream_types_tbl(i).kle_fee_id := p_stream_types_tbl(i).kle_fee_id;
9800 IF x_stream_types_tbl(i).kle_fee_id <> OKL_API.G_MISS_NUM AND
9801 l_blnhasfees = OKL_API.G_FALSE THEN
9802 l_blnhasfees := OKL_API.G_TRUE;
9803 END IF;
9804 END LOOP;
9805 END IF;
9806
9807 -- Code commented by HKPATEL for user defined stream
9808 /*
9809 -- Scan through Stream types tables
9810 FOR i IN l_streams_tbl.FIRST..l_streams_tbl.LAST LOOP
9811 j := 1;
9812 -- Validate the Stream type
9813 WHILE (( l_strm_name <> l_streams_tbl(i) ) AND ( j <= x_stream_types_tbl.COUNT)) LOOP
9814 OPEN strm_name_csr ( x_stream_types_tbl(j).stream_type_id );
9815 FETCH strm_name_csr into l_strm_name_rec;
9816 IF strm_name_csr%NOTFOUND THEN
9817 okl_api.set_message(p_app_name => G_APP_NAME,
9818 p_msg_name => G_LLA_NO_MATCHING_RECORD,
9819 p_token1 => G_COL_NAME_TOKEN,
9820 p_token1_value => 'Stream Type id');
9821 x_return_status := OKL_API.G_RET_STS_ERROR;
9822 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9823 END IF;
9824 CLOSE strm_name_csr;
9825 l_strm_name := l_strm_name_rec.name;
9826 j := j + 1;
9827 END LOOP;
9828 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
9829 EXIT WHEN (x_return_status <> OKL_API.G_RET_STS_SUCCESS);
9830 END IF;
9831 IF ((j > x_stream_types_tbl.COUNT ) AND ( l_strm_name <> l_streams_tbl(i))) THEN
9832 l_blnInclude := OKL_API.G_FALSE;
9833 -- If the Deal type Containing Lease
9834 IF (INSTR( p_deal_type, 'LEASE') > 0) THEN
9835 -- Then we can include RENT,RENT,RENT,RESIDUAL VALUE INSURANCE PREMIUM
9836 -- RENT,RENT
9837 IF l_streams_tbl(i) = 'RENT' OR
9838 l_streams_tbl(i) = 'RESIDUAL VALUE INSURANCE PREMIUM' THEN
9839 l_blnInclude := OKL_API.G_TRUE;
9840 -- then we can include PRE-TAX INCOME if Deal type is Lease Direct finance
9841 -- then we can include PRE-TAX INCOME if Deal type is Lease Sale Type
9842 ELSIF l_streams_tbl(i) = 'PRE-TAX INCOME' AND
9843 trim(p_deal_type) IN ('LEASEDF','LEASEST') THEN
9844 l_blnInclude := OKL_API.G_TRUE;
9845 -- Then we can include FINANCED EXTENSION FEE INCOME if the Lease contract has Fee line
9846 ELSIF l_streams_tbl(i) = 'FINANCED EXTENSION FEE INCOME' AND
9847 l_blnhasfees = OKL_API.G_TRUE THEN
9848 l_blnInclude := OKL_API.G_TRUE;
9849 -- then we can include RENTAL ACCRUAL if Deal type is Lease operating
9850 ELSIF l_streams_tbl(i) = 'RENTAL ACCRUAL' AND
9851 trim(p_deal_type) = 'LEASEOP' THEN
9852 l_blnInclude := OKL_API.G_TRUE;
9853 END IF;
9854 -- If the Deal type Containing Loan
9855 ELSIF (INSTR(p_deal_type, 'LOAN') > 0) THEN
9856 -- Then we can include PRINCIPAL BALANCE,INTEREST PAYMENT,PRINCIPAL PAYMENT,
9857 -- LOAN PAYMENT, PRE-TAX INCOME
9858 IF l_streams_tbl(i) = 'PRINCIPAL BALANCE' OR
9859 l_streams_tbl(i) = 'INTEREST PAYMENT' OR
9860 l_streams_tbl(i) = 'PRINCIPAL PAYMENT' OR
9861 l_streams_tbl(i) = 'LOAN PAYMENT' OR
9862 l_streams_tbl(i) = 'PRE-TAX INCOME' THEN
9863 l_blnInclude := OKL_API.G_TRUE;
9864 END IF;
9865 END IF;
9866 -- We include the below streams independent of the Deal type but
9867 -- Conditional basis of weather the contact has Fee line
9868 -- RATE PARTICIPATION,FAS 91 FEE INCOME,RATE SUBSIDY,
9869 -- TERMINATION VALUE,STIP LOSS VALUE,FEE INCOME,PERIODIC EXPENSE PAYABLE
9870 IF (l_streams_tbl(i) = 'RATE PARTICIPATION' AND
9871 l_blnhasfees = OKL_API.G_TRUE) OR
9872 (l_streams_tbl(i) = 'RATE SUBSIDY' AND
9873 l_blnhasfees = OKL_API.G_TRUE) OR
9874 (l_streams_tbl(i) = 'FEE INCOME' AND
9875 l_blnhasfees = OKL_API.G_TRUE) OR
9876 (l_streams_tbl(i) = 'FAS 91 FEE INCOME') OR
9877 (l_streams_tbl(i) = 'TERMINATION VALUE') OR
9878 (l_streams_tbl(i) = 'STIP LOSS VALUE') THEN
9879 l_blnInclude := OKL_API.G_TRUE;
9880 -- Start of BUG#2997914 fix
9881 END IF;
9882 -- End of BUG#2997914 fix
9883 -- Handling only fee receivable Streams
9884 IF l_streams_tbl(i) = 'FEE INCOME' AND
9885 l_blnInclude = OKL_API.G_TRUE THEN
9886 FOR k IN p_stream_types_tbl.FIRST..p_stream_types_tbl.LAST LOOP
9887 IF p_stream_types_tbl(k).kle_fee_id <> OKL_API.G_MISS_NUM THEN
9888 OPEN l_fee_type_csr (p_chr_id,
9889 p_stream_types_tbl(k).kle_fee_id);
9890 FETCH l_fee_type_csr INTO l_fee_type_rec;
9891 CLOSE l_fee_type_csr;
9892 IF l_fee_type_rec.fee_type IN ('PASSTHROUGH','MISCELLANEOUS') THEN
9893 l_blnInclude := OKL_API.G_TRUE;
9894 EXIT;
9895 ELSE
9896 l_blnInclude := OKL_API.G_FALSE;
9897 END IF;
9898 END IF;
9899 END LOOP;
9900 END IF;
9901 IF (l_blnInclude = OKL_API.G_TRUE) THEN
9902 OPEN l_strmid_csr(l_streams_tbl(i));
9903 FETCH l_strmid_csr into l_strmid_rec;
9904 IF l_strmid_csr%NOTFOUND THEN
9905 okl_api.set_message(p_app_name => G_APP_NAME,
9906 p_msg_name => G_LLA_NO_MATCHING_RECORD,
9907 p_token1 => G_COL_NAME_TOKEN,
9908 p_token1_value => 'Stream Type');
9909 x_return_status := OKL_API.G_RET_STS_ERROR;
9910 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9911 END IF;
9912 CLOSE l_strmid_csr;
9913 styid := l_strmid_rec.styid;
9914 -- Then we can include PRINCIPAL BALANCE,INTEREST PAYMENT,PRINCIPAL PAYMENT,
9915 -- LOAN PAYMENT
9916 -- This will be true for Loan deal type
9917 IF (l_streams_tbl(i) = 'PRINCIPAL BALANCE' OR
9918 l_streams_tbl(i) = 'INTEREST PAYMENT' OR
9919 l_streams_tbl(i) = 'PRE-TAX INCOME' OR
9920 l_streams_tbl(i) = 'PRINCIPAL PAYMENT' OR
9921 l_streams_tbl(i) = 'LOAN PAYMENT') AND
9922 p_deal_type = 'LOAN' THEN
9923 FOR l_line_rec in l_line_rec_csr(p_chr_id) LOOP
9924 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := styid;
9925 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_line_rec.id;
9926 END LOOP;
9927 -- Added by dedey, arun, since mandatory sterams are not getting picked up
9928 -- during Lease Contract stream generation
9929 -- starts 06/14/2002
9930 ELSE
9931 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := styid;
9932 -- end 06/14/2002
9933 END IF;
9934 END IF;
9935 END IF;
9936 END LOOP;
9937 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9938 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9939 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9940 RAISE OKL_API.G_EXCEPTION_ERROR;
9941 END IF;
9942
9943 --Code commented by HKPATEL for userdefined streams */
9944 /*
9945 IF x_stream_types_tbl.COUNT > 0 THEN
9946 FOR l_fin_type_rec IN l_fin_type_csr(chrId => p_chr_id) LOOP
9947 FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
9948 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
9949 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_fin_type_rec.fin_id;
9950 END LOOP;
9951 l_blnhasfin := OKL_API.G_TRUE;
9952 END LOOP;
9953 -- Now we get the Subsidy Income Accural stream type id , wil be fetched from
9954 -- Subsidy setup
9955 FOR get_sub_line_rec IN get_sub_line_csr (p_dnz_chr_id => p_chr_id) LOOP
9956 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := get_sub_line_rec.sty_id;
9957 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
9958 END LOOP;
9959 END IF;
9960
9961 -- Requesting streams for rollover quote- HKPATEL
9962 IF x_stream_types_tbl.COUNT > 0 THEN
9963 IF l_link_fee_asset_yn = 'FALSE' THEN
9964 FOR l_rollover_rec IN l_rollover_csr(chrId => p_chr_id) LOOP
9965 FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
9966 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
9967 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_rollover_rec.fin_id;
9968 END LOOP;
9969 END LOOP;
9970 ELSIF l_link_fee_asset_yn = 'TRUE' THEN
9971 FOR l_rollover_rec IN l_rollover_csr(chrId => p_chr_id) LOOP
9972 FOR l_link_rollover_rec IN l_link_rollover_csr(cleId => l_rollover_rec.fin_id) LOOP
9973 FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
9974 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
9975 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_link_rollover_rec.kle_id;
9976 END LOOP;
9977 END LOOP;
9978 END LOOP;
9979 END IF;
9980 END IF;
9981 -- Stream request for rollover quote ends here - HKPATEL
9982
9983 */
9984 -- srsreeni - Bug#5699923 - Added - Start
9985 -- Determine if the contract is a loan contract (rev-loan excluded)
9986 OPEN c_is_loan_khr(p_chr_id);
9987 FETCH c_is_loan_khr INTO l_is_loan_khr;
9988 CLOSE c_is_loan_khr;
9989 -- srsreeni - Bug#5699923 - Added - End
9990 IF x_stream_types_tbl.COUNT > 0 THEN
9991 -- Now we get the Subsidy Income Accural stream type id , wil be fetched from
9992 -- Subsidy setup
9993 FOR get_sub_line_rec IN get_sub_line_csr (p_dnz_chr_id => p_chr_id) LOOP
9994 -- srsreeni - Bug#5699923 - Added - Start
9995 -- DONOT request SuperTrump to generate streams
9996 -- for TERMINATED lines. Fix for Bug#5699923 deals with LOAN
9997 -- contracts alone and hence this check is restricted to LOAN
9998 --vdamerla Bug6149951 start commented the following as streams should not be requested for any terminated asset line
9999 --of a contract of any book classification and not just LOAN
10000 -- IF l_is_loan_khr ='Y' AND get_sub_line_rec.ste_code = 'TERMINATED' THEN
10001 IF get_sub_line_rec.ste_code = 'TERMINATED' THEN
10002 --srsreeni Bug6149951 ends
10003 NULL; -- Donot request streams if LOAN and line TERMINATED
10004 ELSE
10005 get_dependent_stream_types
10006 (
10007 p_khr_id => p_chr_id,
10008 p_primary_sty_id => get_sub_line_rec.sty_id,
10009 x_return_status => l_return_status,
10010 x_dependent_sty_id => l_strm_type_id_tbl
10011 );
10012 IF l_return_status = 'E' THEN
10013 l_return_status := 'S';
10014 END IF;
10015
10016 IF l_strm_type_id_tbl.COUNT > 0 THEN
10017 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10018 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := l_strm_type_id_tbl(i).id;
10019 x_stream_types_tbl(x_stream_types_tbl.COUNT).pricing_name := l_strm_type_id_tbl(i).pricing_name;
10020 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
10021 END LOOP;
10022 END IF;
10023
10024 -- Added by bkatraga for bug 5061024
10025 -- To generate the primary stream of purpose Subsidy
10026 get_primary_pricing_name
10027 (
10028 p_khr_id => p_chr_id,
10029 p_sty_id => get_sub_line_rec.sty_id,
10030 x_return_status => l_return_status,
10031 x_primary_pricing_name => l_pricing_name
10032 );
10033
10034 IF l_return_status = 'E' THEN
10035 l_return_status := 'S';
10036 END IF;
10037
10038 IF l_pricing_name IS NOT NULL THEN
10039 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := get_sub_line_rec.sty_id;
10040 x_stream_types_tbl(x_stream_types_tbl.COUNT).pricing_name := l_pricing_name;
10041 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
10042 END IF;
10043 -- end bkatraga for bug 5061024
10044 END IF; -- Check for terminated lines on a LOAN contract
10045 -- srsreeni - Bug#5699923 - Added - End
10046
10047 END LOOP;
10048 END IF;
10049
10050 -- Code for user defined streams ends here
10051
10052
10053 OKL_API.END_ACTIVITY (x_msg_count,
10054 x_msg_data );
10055
10056 EXCEPTION
10057 WHEN OKL_API.G_EXCEPTION_ERROR THEN
10058 IF get_sub_line_csr%ISOPEN THEN
10059 CLOSE get_sub_line_csr;
10060 END IF;
10061 IF strm_name_csr%ISOPEN THEN
10062 CLOSE strm_name_csr;
10063 END IF;
10064 IF l_strmid_csr%ISOPEN THEN
10065 CLOSE l_strmid_csr;
10066 END IF;
10067 IF l_line_rec_csr%ISOPEN THEN
10068 CLOSE l_line_rec_csr;
10069 END IF;
10070 IF l_fee_type_csr%ISOPEN THEN
10071 CLOSE l_fee_type_csr;
10072 END IF;
10073 IF l_fin_type_csr%ISOPEN THEN
10074 CLOSE l_fin_type_csr;
10075 END IF;
10076
10077 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10078 l_api_name,
10079 G_PKG_NAME,
10080 'OKL_API.G_RET_STS_ERROR',
10081 x_msg_count,
10082 x_msg_data,
10083 '_PVT');
10084 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10085 IF get_sub_line_csr%ISOPEN THEN
10086 CLOSE get_sub_line_csr;
10087 END IF;
10088 IF strm_name_csr%ISOPEN THEN
10089 CLOSE strm_name_csr;
10090 END IF;
10091 IF l_strmid_csr%ISOPEN THEN
10092 CLOSE l_strmid_csr;
10093 END IF;
10094 IF l_line_rec_csr%ISOPEN THEN
10095 CLOSE l_line_rec_csr;
10096 END IF;
10097 IF l_fee_type_csr%ISOPEN THEN
10098 CLOSE l_fee_type_csr;
10099 END IF;
10100 IF l_fin_type_csr%ISOPEN THEN
10101 CLOSE l_fin_type_csr;
10102 END IF;
10103 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10104 l_api_name,
10105 G_PKG_NAME,
10106 'OKL_API.G_RET_STS_UNEXP_ERROR',
10107 x_msg_count,
10108 x_msg_data,
10109 '_PVT');
10110 WHEN OTHERS THEN
10111 IF get_sub_line_csr%ISOPEN THEN
10112 CLOSE get_sub_line_csr;
10113 END IF;
10114 IF strm_name_csr%ISOPEN THEN
10115 CLOSE strm_name_csr;
10116 END IF;
10117 IF l_strmid_csr%ISOPEN THEN
10118 CLOSE l_strmid_csr;
10119 END IF;
10120
10121 IF l_line_rec_csr%ISOPEN THEN
10122 CLOSE l_line_rec_csr;
10123 END IF;
10124 IF l_fee_type_csr%ISOPEN THEN
10125 CLOSE l_fee_type_csr;
10126 END IF;
10127 IF l_fin_type_csr%ISOPEN THEN
10128 CLOSE l_fin_type_csr;
10129 END IF;
10130 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
10131 l_api_name,
10132 G_PKG_NAME,
10133 'OTHERS',
10134 x_msg_count,
10135 x_msg_data,
10136 '_PVT');
10137 END check_for_mandatory_streams;
10138 -- End modification 11i10 bakuchib
10139 Procedure extract_security_deposit( p_api_version IN NUMBER,
10140 p_chr_id IN NUMBER,
10141 p_deal_type IN VARCHAR2,
10142 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
10143 x_msg_count OUT NOCOPY NUMBER,
10144 x_msg_data OUT NOCOPY VARCHAR2,
10145 x_return_status OUT NOCOPY VARCHAR2,
10146 px_csm_lease_header IN OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
10147 px_csm_one_off_fee_tbl IN OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
10148 px_csm_periodic_expenses_tbl IN OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
10149 px_csm_stream_types_tbl IN OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
10150
10151 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_SECURITY_DEPOSIT';
10152 l_api_version CONSTANT NUMBER := 1;
10153
10154 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
10155 x NUMBER := 0;
10156
10157 CURSOR c_deposit_date( chrId NUMBER) IS
10158 SELECT FND_DATE.canonical_to_date(rule_information5) date_returned
10159 FROM okc_rules_b
10160 WHERE dnz_chr_id = chrId
10161 AND rule_information_category = 'LASDEP';
10162
10163 l_c_deposit_date c_deposit_date%ROWTYPE;
10164
10165 cursor l_line_rec_csr1( chrid NUMBER, lnetype VARCHAR2 ) is
10166 select kle.id,
10167 kle.oec,
10168 kle.residual_code,
10169 kle.capital_amount,
10170 kle.delivered_date,
10171 kle.date_funding_required,
10172 kle.residual_grnty_amount,
10173 kle.date_funding,
10174 kle.residual_value,
10175 kle.amount,
10176 kle.price_negotiated,
10177 kle.start_date,
10178 kle.end_date,
10179 kle.orig_system_id1,
10180 kle.fee_type,
10181 kle.initial_direct_cost,
10182 tl.item_description,
10183 tl.name ,
10184 kle.orig_contract_line_id --sechawla 15-jul-09 PRB ESG Enhancements : added orig_contract_line_id
10185 from okl_k_lines_full_v kle,
10186 okc_line_styles_b lse,
10187 okc_k_lines_tl tl,
10188 okc_statuses_b sts
10189 where KLE.LSE_ID = LSE.ID
10190 and lse.lty_code = lnetype
10191 and tl.id = kle.id
10192 and tl.language = userenv('LANG')
10193 and kle.dnz_chr_id = chrid
10194 and kle.fee_type = 'SECDEPOSIT'
10195 and sts.code = kle.sts_code
10196 --Start of bug#3121708 modification BAKUCHIB
10197 and sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
10198 --End of bug#3121708 modification BAKUCHIB
10199
10200
10201 --- sgorantl added for bug#4084201
10202 CURSOR fee_strm_type_csr1 (kleid NUMBER,
10203 linestyle VARCHAR2 )
10204 IS
10205 SELECT stl.ST_GEN_TMPT_SET_NAME strm_name,
10206 stl.pricing_name pricing_name,
10207 kle.id line_id,
10208 stl.id styp_id
10209 FROM OKL_STRM_TMPT_LINES_UV stl,
10210 okc_k_items cim,
10211 okl_k_lines_full_v kle,
10212 okc_line_styles_b ls
10213 WHERE cim.cle_id = kle.id
10214 AND ls.id = kle.lse_id
10215 AND ls.lty_code = 'FEE'
10216 AND cim.object1_id1 = stl.primary_sty_id
10217 AND cim.object1_id2 = '#'
10218 AND kle.id = kleid
10219 AND stl.pricing_name is not null;
10220 --- sgorantl added for bug#4084201 --end
10221
10222
10223 -- sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
10224 cursor get_rebook_type is
10225 select nvl(amort_inc_adj_rev_dt_yn, 'N')
10226 from okl_sys_acct_opts;
10227
10228 l_PROSPECTIVE_REBOOK_YN VARCHAR2(1);
10229
10230
10231 l_line_rec1 l_line_rec_csr1%ROWTYPE;
10232 l_rl_rec l_rl_csr%ROWTYPE;
10233 l_rl_rec1 l_rl_csr1%ROWTYPE;
10234 l_rl_rec2 l_rl_csr2%ROWTYPE;
10235 l_fee_strm_type_rec1 fee_strm_type_csr1%ROWTYPE;
10236 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
10237 l_strm_name_rec strm_name_csr%ROWTYPE;
10238
10239 l_hdr_rec l_hdr_csr%ROWTYPE;
10240
10241 l_level_type NUMBER;
10242 l_strm_name VARCHAR2(200);
10243 i BINARY_INTEGER := 0;
10244 j BINARY_INTEGER := 0;
10245 k BINARY_INTEGER := 0;
10246 l BINARY_INTEGER := 0;
10247 m BINARY_INTEGER := 0;
10248 idx BINARY_INTEGER := 0;
10249
10250
10251 Begin
10252
10253 print( l_api_name, 'begin');
10254
10255 x_return_status := OKL_API.START_ACTIVITY(
10256 p_api_name => l_api_name,
10257 p_pkg_name => g_pkg_name,
10258 p_init_msg_list => p_init_msg_list,
10259 l_api_version => l_api_version,
10260 p_api_version => p_api_version,
10261 p_api_type => G_API_TYPE,
10262
10263 x_return_status => x_return_status);
10264
10265 -- check if ac1tivity started successfully
10266 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
10267 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10268 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
10269 raise OKL_API.G_EXCEPTION_ERROR;
10270 End If;
10271
10272 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
10273 open get_rebook_type ;
10274 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN ;
10275 close get_rebook_type;
10276
10277 l := px_csm_one_off_fee_tbl.COUNT;
10278 m := px_csm_stream_types_tbl.COUNT;
10279
10280 FOR l_lne_rec1 in l_line_rec_csr1 ( p_chr_id, 'FEE' )
10281 LOOP
10282
10283 IF( l_lne_rec1.fee_type = 'SECDEPOSIT' ) THEN
10284 --- sgorantl added for bug#4084201 --end
10285 OPEN fee_strm_type_csr1 ( l_lne_rec1.id, 'FEE' );
10286 FETCH fee_strm_type_csr1 into l_fee_strm_type_rec1;
10287 CLOSE fee_strm_type_csr1;
10288 IF l_fee_strm_type_rec1.PRICING_NAME IS NOT NULL THEN
10289 --end
10290 OPEN fee_strm_type_csr ( l_lne_rec1.id, 'FEE' );
10291 FETCH fee_strm_type_csr into l_fee_strm_type_rec;
10292 CLOSE fee_strm_type_csr;
10293
10294 l_level_type := l_fee_strm_type_rec.styp_id;
10295 l_strm_name := l_fee_strm_type_rec.strm_name;
10296
10297 --px_csm_lease_header.security_deposit_amount := l_lne_rec.amount;
10298 --px_csm_lease_header.date_sec_deposit_collected := l_lne_rec.start_date;
10299
10300 print( l_api_name, 'requesting sec dep streams');
10301 m := m + 1;
10302 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10303 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec1.id;
10304 --- sgorantl added for bug#4084201
10305 px_csm_stream_types_tbl(m).pricing_name := l_fee_strm_type_rec1.PRICING_NAME;
10306 --end
10307 l := l + 1;
10308 px_csm_one_off_fee_tbl(l).description := l_strm_name;
10309 px_csm_one_off_fee_tbl(l).fee_type := 'SECDEPOSIT';
10310 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10311 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec1.id;
10312
10313 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
10314 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
10315 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_lne_rec1.orig_contract_line_id;
10316 --end if;
10317
10318 OPEN l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_lne_rec1.id );
10319 FETCH l_rl_csr1 INTO l_rl_rec1;
10320 CLOSE l_rl_csr1;
10321 px_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec1.RULE_INFORMATION6,'0'));
10322 IF(l_rl_rec1.RULE_INFORMATION2 IS NULL or l_rl_rec1.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
10323 px_csm_one_off_fee_tbl(l).date_start := l_lne_rec1.start_date ;
10324 ELSE
10325 px_csm_one_off_fee_tbl(l).date_start := FND_DATE.canonical_to_date(l_rl_rec1.RULE_INFORMATION2);
10326 END IF;
10327
10328 OPEN c_deposit_date ( TO_NUMBER(p_chr_id) );
10329 FETCH c_deposit_date INTO l_c_deposit_date;
10330 CLOSE c_deposit_date;
10331
10332 OPEN l_hdr_csr( p_chr_id );
10333 FETCH l_hdr_csr INTO l_hdr_rec;
10334 CLOSE l_hdr_csr;
10335
10336 px_csm_one_off_fee_tbl(l).date_paid := nvl(l_c_deposit_date.date_returned, l_hdr_rec.end_date);
10337
10338 print( l_api_name, 'amnt='||to_char(px_csm_one_off_fee_tbl(l).amount)||
10339 'dateStart='||to_char(px_csm_one_off_fee_tbl(l).date_paid));
10340
10341 End If;
10342 END IF;
10343 END LOOP;
10344
10345 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
10346
10347 print( l_api_name, 'end', x_return_status);
10348
10349 Exception
10350
10351 when OKL_API.G_EXCEPTION_ERROR then
10352 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10353 p_api_name => l_api_name,
10354 p_pkg_name => g_pkg_name,
10355 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
10356 x_msg_count => x_msg_count,
10357 x_msg_data => x_msg_data,
10358 p_api_type => g_api_type);
10359
10360 If (fee_strm_type_csr1%ISOPEN) Then
10361 CLOSE fee_strm_type_csr1;
10362 End If;
10363
10364 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10365 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10366
10367 p_api_name => l_api_name,
10368
10369 p_pkg_name => g_pkg_name,
10370 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10371 x_msg_count => x_msg_count,
10372 x_msg_data => x_msg_data,
10373 p_api_type => g_api_type);
10374
10375 If (fee_strm_type_csr%ISOPEN) Then
10376 CLOSE fee_strm_type_csr;
10377 End If;
10378
10379 when OTHERS then
10380 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10381 p_api_name => l_api_name,
10382 p_pkg_name => g_pkg_name,
10383 p_exc_name => 'OTHERS',
10384 x_msg_count => x_msg_count,
10385 x_msg_data => x_msg_data,
10386 p_api_type => g_api_type);
10387
10388 If (fee_strm_type_csr%ISOPEN) Then
10389 CLOSE fee_strm_type_csr;
10390 End If;
10391
10392 If (fee_strm_type_csr1%ISOPEN) Then
10393 CLOSE fee_strm_type_csr1;
10394 End If;
10395
10396 end extract_security_deposit;
10397 -- Start modification 11i10 release
10398 --------------------------------------------------------------------------------
10399 -- Start of Commnets
10400 -- Badrinath Kuchibholta
10401 -- Procedure Name : extract_subsidized_lines
10402 -- Description : extraction of subsidized lines for amortized
10403 -- accounting methode code
10404 -- Business Rules : extraction of subsidized lines for amortized
10405 -- accounting methode code
10406 -- Parameters : p_chr_id, p_csm_line_details_tbl and
10407 -- px_csm_one_off_fee_tbl
10408 -- Version : 1.0
10409 -- History : BAKUCHIB 21-oct-2003
10410 -- : BAKUCHIB 24-FEB-2004
10411 -- : BAKUCHIB 19-MAR-2004
10412 -- End of Commnets
10413 --------------------------------------------------------------------------------
10414 PROCEDURE extract_subsidized_lines(p_api_version IN NUMBER,
10415 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
10416 x_return_status OUT NOCOPY VARCHAR2,
10417 x_msg_count OUT NOCOPY NUMBER,
10418 x_msg_data OUT NOCOPY VARCHAR2,
10419 p_chr_id IN NUMBER,
10420 px_csm_one_off_fee_tbl IN OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type)
10421
10422 AS
10423 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_SUBSIDIZED_LINES';
10424 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type := px_csm_one_off_fee_tbl;
10425 i BINARY_INTEGER := 0;
10426 lv_acc_mtd_code okl_subsidies_b.accounting_method_code%TYPE := NULL;
10427 lv_strm_desc VARCHAR2(200);
10428 ln_sub_id okc_k_lines_b.id%TYPE := NULL;
10429 ln_dummy NUMBER := 0;
10430 ln_cap_wos okl_k_lines.capital_amount%TYPE := 0;
10431 ln_cap_amt okl_k_lines.capital_amount%TYPE := 0;
10432 ln_cap_dis okl_k_lines.capital_amount%TYPE := 0;
10433 l_asbv_tbl asbv_tbl_type;
10434 l_sty_id NUMBER;
10435 l_dep_sty_id NUMBER;
10436 l_return_status VARCHAR2(1);
10437 -- get Asset lines for the contract
10438 CURSOR get_asset_lines_csr (p_chr_id okc_k_lines_b.id%TYPE)
10439 IS
10440 SELECT cle.id,
10441 NVL(kle.date_funding,cle.start_date) date_funding ,
10442 kle.orig_contract_line_id --sechawla 15-jun-09 PRB ESG Enhancement : added orig_contract_line_id
10443 FROM okc_k_lines_b cle,
10444 okl_k_lines kle,
10445 okc_line_styles_b lse
10446 WHERE cle.dnz_chr_id = p_chr_id
10447 AND cle.sts_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
10448 AND cle.id = kle.id
10449 AND cle.lse_id = lse.id
10450 AND lse.lty_code = 'FREE_FORM1';
10451 -- get the accouting method to send only Amoritized Subsidy lines
10452 --Modified bug 9306619 to not pick ABANDONED subsidy lines
10453 -- get the accouting method to send only Amoritized Subsidy lines
10454 CURSOR get_acc_mth_code (p_line_id OKL_K_LINES.ID%TYPE)
10455 IS
10456 SELECT subb.accounting_method_code,
10457 cle.id
10458 FROM okl_subsidies_b subb,
10459 okc_k_lines_b cle_fin,
10460 okc_line_styles_b lse_fin,
10461 okc_k_lines_b cle,
10462 okl_k_lines kle,
10463 okc_line_styles_b lse
10464 WHERE cle.cle_id = p_line_id
10465 AND cle.id = kle.id
10466 AND cle.lse_id = lse.id
10467 AND lse.lty_code = 'SUBSIDY'
10468 AND cle.sts_code <> 'ABANDONED'
10469 AND subb.id = kle.subsidy_id
10470 AND cle_fin.id = cle.cle_id
10471 AND cle_fin.lse_id = lse_fin.id
10472 AND lse_fin.lty_code = 'FREE_FORM1';
10473 -- Validate the contract has Subsidy line
10474 CURSOR validate_sub_line (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
10475 IS
10476 SELECT 1
10477 FROM dual
10478 WHERE EXISTS (SELECT '1'
10479 FROM okl_subsidies_b subb,
10480 okc_k_lines_b cle_fin,
10481 okc_line_styles_b lse_fin,
10482 okc_k_lines_b cle,
10483 okl_k_lines kle,
10484 okc_line_styles_b lse
10485 WHERE cle.dnz_chr_id = p_dnz_chr_id
10486 AND cle.cle_id = cle_fin.id
10487 AND cle.dnz_chr_id = cle_fin.dnz_chr_id
10488 AND cle.id = kle.id
10489 AND cle.lse_id = lse.id
10490 AND lse.lty_code = 'SUBSIDY'
10491 AND subb.id = kle.subsidy_id
10492 AND cle_fin.id = cle.cle_id
10493 AND cle_fin.lse_id = lse_fin.id
10494 AND lse_fin.lty_code = 'FREE_FORM1');
10495 -- To get the Subsidy Income Accural Description
10496 -- Changed for bug 4044089 by HKPATEL 12/02/2004
10497 CURSOR get_sub_income_strm_csr (p_dnz_chr_id IN okc_k_lines_b.dnz_chr_id%TYPE,
10498 p_sub_cle_id IN okc_k_lines_b.id%TYPE)
10499 IS
10500
10501 SELECT kle.sty_id
10502 FROM okl_k_lines kle,
10503 okc_k_lines_b cle,
10504 okc_line_styles_b lse,
10505 okl_subsidies_v sub
10506
10507 WHERE cle.dnz_chr_id = p_dnz_chr_id
10508 AND cle.id = p_sub_cle_id
10509 AND cle.lse_id = lse.id
10510 AND lse.lty_code = 'SUBSIDY'
10511 AND cle.id = kle.id
10512 AND kle.subsidy_id = sub.id;
10513 /*
10514 SELECT sty_inc.code strm_desc
10515 FROM okl_sgn_translations sgn,
10516 okl_strm_type_b sty_inc,
10517 okl_strm_type_b sty,
10518 okl_subsidies_v sub,
10519 okl_k_lines kle,
10520 okc_line_styles_b lse,
10521 okc_k_lines_b cle
10522 WHERE cle.dnz_chr_id = p_dnz_chr_id
10523 AND cle.id = p_sub_cle_id
10524 AND cle.lse_id = lse.id
10525 AND lse.lty_code = 'SUBSIDY'
10526 AND cle.id = kle.id
10527 AND TO_CHAR(kle.sty_id) = sgn.object1_id1
10528 AND sgn.object1_id1 = TO_CHAR(sty.id)
10529 AND TO_CHAR(sty_inc.id) = sgn.value
10530 AND sgn.jtot_object1_code = 'OKL_STRMTYP'
10531 AND kle.subsidy_id = sub.id;
10532 */
10533 -- New code for bug 4044089 by HKPATEL 12/02/2004
10534 CURSOR get_strm_type_code (p_sty_id IN okl_strm_type_b.ID%TYPE)
10535 IS
10536
10537 SELECT code
10538 FROM okl_strm_type_b
10539 WHERE id = p_sty_id;
10540
10541 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
10542 cursor get_rebook_type is
10543 select nvl(amort_inc_adj_rev_dt_yn, 'N')
10544 from okl_sys_acct_opts;
10545 l_PROSPECTIVE_REBOOK_YN VARCHAR2(1);
10546
10547 BEGIN
10548 x_return_status := OKL_API.G_RET_STS_SUCCESS;
10549 -- Call start_activity to create savepoint, check compatibility
10550 -- and initialize message list
10551 x_return_status := OKL_API.START_ACTIVITY (
10552 l_api_name
10553 ,p_init_msg_list
10554 ,'_PVT'
10555 ,x_return_status);
10556 -- check if ac1tivity started successfully
10557 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10558 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10559 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10560 RAISE OKL_API.G_EXCEPTION_ERROR;
10561 END IF;
10562
10563 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
10564 open get_rebook_type;
10565 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN;
10566 close get_rebook_type;
10567
10568
10569 OPEN validate_sub_line (p_dnz_chr_id => p_chr_id );
10570 FETCH validate_sub_line INTO ln_dummy;
10571 CLOSE validate_sub_line;
10572 IF ln_dummy = 1 THEN
10573 IF l_csm_one_off_fee_tbl.COUNT > 0 THEN
10574 -- Get the last record of each one off table
10575 i := l_csm_one_off_fee_tbl.LAST;
10576 -- Now scan thru the CSM line details table for the asset id
10577 -- and then call the OKL_SUBSIDY_PROCESS_PVT to get the total subsidized amount for an asset
10578 FOR get_asset_lines_rec IN get_asset_lines_csr (p_chr_id => p_chr_id) LOOP
10579 IF get_asset_lines_rec.id IS NOT NULL OR
10580 get_asset_lines_rec.id <> OKL_API.G_MISS_NUM THEN
10581 execute_formula(p_api_version => p_api_version,
10582 p_init_msg_list => p_init_msg_list,
10583 x_return_status => x_return_status,
10584 x_msg_count => x_msg_count,
10585 x_msg_data => x_msg_data,
10586 --Bug# 9299451
10587 p_formula_name => 'LINE_CAP_AMNT_PRICE',
10588 p_contract_id => p_chr_id,
10589 p_line_id => get_asset_lines_rec.id,
10590 x_value => ln_cap_amt);
10591 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10592 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10593 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10594 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10595 END IF;
10596 execute_formula(p_api_version => p_api_version,
10597 p_init_msg_list => p_init_msg_list,
10598 x_return_status => x_return_status,
10599 x_msg_count => x_msg_count,
10600 x_msg_data => x_msg_data,
10601 p_formula_name => 'LINE_DISCOUNT',
10602 p_contract_id => p_chr_id,
10603 p_line_id => get_asset_lines_rec.id,
10604 x_value => ln_cap_dis);
10605 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10606 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10607 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10608 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10609 END IF;
10610 -- We are doing the above since we need the cap amt for each line
10611 -- and since the cap amt is inclusive of the discount then
10612 -- we need to exclude the same and then use to send the same to
10613 -- pricing engine since we need to send the subsidyl in %
10614 -- This is applicable to NET accouting method of Subsidy only
10615
10616 --Modified by kthiruva on 15-Mar-2006
10617 --Bug 4898772 - Start of Changes
10618 --As the subsidy is not being deducted in the formula LINE_CAP_AMNT_PRICE, it does not have to be added again
10619 ln_cap_wos := ln_cap_amt;
10620 --Bug 4898772 - End of Changes
10621 FOR get_acc_mth_code_rec IN get_acc_mth_code (p_line_id => get_asset_lines_rec.id) LOOP
10622 i := i + 1;
10623 -- Changing the over loaded get_asset_subsidy_amont the tbl version
10624 okl_subsidy_process_pvt.get_asset_subsidy_amount(
10625 p_api_version => p_api_version,
10626 p_init_msg_list => p_init_msg_list,
10627 x_return_status => x_return_status,
10628 x_msg_count => x_msg_count,
10629 x_msg_data => x_msg_data,
10630 p_asset_cle_id => get_asset_lines_rec.id,
10631 x_asbv_tbl => l_asbv_tbl);
10632 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10633 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10634 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10635 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10636 END IF;
10637 IF l_asbv_tbl.COUNT > 0 THEN
10638 FOR k IN l_asbv_tbl.FIRST..l_asbv_tbl.LAST LOOP
10639 /* Bug# 7534196 - Commented
10640 IF get_acc_mth_code_rec.accounting_method_code = 'AMORTIZE' AND
10641 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
10642 l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
10643 ELSIF get_acc_mth_code_rec.accounting_method_code = 'NET' AND
10644 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
10645 IF l_asbv_tbl(k).amount < ln_cap_wos THEN
10646 l_csm_one_off_fee_tbl(i).rate := l_asbv_tbl(k).amount/ln_cap_wos;
10647 END IF;
10648 END IF;
10649 */
10650 -- Bug#7534196 - Always pass subsidy amount to supertrump irrespective of account method
10651 IF l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
10652 l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
10653 END IF;
10654 END LOOP;
10655 ELSE
10656 okl_api.set_message(
10657 p_app_name => G_APP_NAME,
10658 p_msg_name => G_LLA_NO_MATCHING_RECORD,
10659 p_token1 => G_COL_NAME_TOKEN,
10660 p_token1_value => 'Subsidy Records');
10661 x_return_status := OKL_API.G_RET_STS_ERROR;
10662 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10663 END IF;
10664 l_csm_one_off_fee_tbl(i).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10665 l_csm_one_off_fee_tbl(i).date_paid := get_asset_lines_rec.date_funding;
10666 l_csm_one_off_fee_tbl(i).kle_asset_id := get_asset_lines_rec.id;
10667
10668 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
10669 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
10670 l_csm_one_off_fee_tbl(i).orig_contract_line_id := get_asset_lines_rec.orig_contract_line_id;
10671 --end if;
10672
10673 l_csm_one_off_fee_tbl(i).other_type_id := get_acc_mth_code_rec.id;
10674 l_csm_one_off_fee_tbl(i).other_type := G_SFE_TYPE_SUBSIDY;
10675
10676 OPEN get_sub_income_strm_csr(p_dnz_chr_id => p_chr_id,
10677 p_sub_cle_id => get_acc_mth_code_rec.id);
10678 -- Changed for bug 4044089 by HKPATEL 12/02/2004
10679 --FETCH get_sub_income_strm_csr INTO l_csm_one_off_fee_tbl(i).description;
10680 FETCH get_sub_income_strm_csr INTO l_sty_id;
10681 IF get_sub_income_strm_csr%NOTFOUND THEN
10682 OKL_API.set_message(p_app_name => G_APP_NAME,
10683 p_msg_name => G_REQUIRED_VALUE,
10684 p_token1 => G_COL_NAME_TOKEN,
10685 p_token1_value => 'Subsidy Income Stream Description');
10686 x_return_status := OKL_API.G_RET_STS_ERROR;
10687 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10688 END IF;
10689 CLOSE get_sub_income_strm_csr;
10690
10691 -- New code for bug 4044089 by HKPATEL 12/02/2004
10692 OKL_STREAMS_UTIL.get_dependent_stream_type
10693 (
10694 p_khr_id =>p_chr_id,
10695 p_primary_sty_id =>l_sty_id,
10696 p_dependent_sty_purpose=>'SUBSIDY_INCOME',
10697 x_return_status => l_return_status,
10698 x_dependent_sty_id=>l_dep_sty_id
10699 );
10700 IF l_return_status = 'E' THEN
10701 l_return_status := 'S';
10702 END IF;
10703
10704 IF l_dep_sty_id IS NOT NULL THEN
10705 l_sty_id := l_dep_sty_id;
10706 END IF;
10707
10708 OPEN get_strm_type_code(p_sty_id => l_sty_id);
10709 FETCH get_strm_type_code INTO l_csm_one_off_fee_tbl(i).description;
10710 CLOSE get_strm_type_code;
10711 -- New code for bug 4044089 by HKPATEL 12/02/2004 ends here
10712
10713 END LOOP;
10714 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10715 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10716 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10717 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10718 END IF;
10719 ELSE
10720 OKL_API.set_message(p_app_name => G_APP_NAME,
10721 p_msg_name => G_REQUIRED_VALUE,
10722 p_token1 => G_COL_NAME_TOKEN,
10723 p_token1_value => 'kle_asset_id');
10724 x_return_status := OKL_API.G_RET_STS_ERROR;
10725 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10726 END IF;
10727 END LOOP;
10728 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
10729 RAISE OKL_API.G_EXCEPTION_ERROR;
10730 END IF;
10731 ELSE
10732 -- Since there are no One off tbl create one
10733 -- Now scan thru the CSM line details table for the asset id
10734 -- and then call the OKL_SUBSIDY_PROCESS_PVT to get the total subsidized amount for an asset
10735 FOR get_asset_lines_rec IN get_asset_lines_csr (p_chr_id => p_chr_id) LOOP
10736 IF get_asset_lines_rec.id IS NOT NULL OR
10737 get_asset_lines_rec.id <> OKL_API.G_MISS_NUM THEN
10738 execute_formula(p_api_version => p_api_version,
10739 p_init_msg_list => p_init_msg_list,
10740 x_return_status => x_return_status,
10741 x_msg_count => x_msg_count,
10742 x_msg_data => x_msg_data,
10743 --Bug# 9299451
10744 p_formula_name => 'LINE_CAP_AMNT_PRICE',
10745 p_contract_id => p_chr_id,
10746 p_line_id => get_asset_lines_rec.id,
10747 x_value => ln_cap_amt);
10748 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10749 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10750 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10751 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10752 END IF;
10753 execute_formula(p_api_version => p_api_version,
10754 p_init_msg_list => p_init_msg_list,
10755 x_return_status => x_return_status,
10756 x_msg_count => x_msg_count,
10757 x_msg_data => x_msg_data,
10758 p_formula_name => 'LINE_DISCOUNT',
10759 p_contract_id => p_chr_id,
10760 p_line_id => get_asset_lines_rec.id,
10761 x_value => ln_cap_dis);
10762 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10763 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10764 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10765 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10766 END IF;
10767 -- We are doing the above since we need the cap amt for each line
10768 -- and since the cap amt is inclusive of the discount then
10769 -- we need to exclude the same and then use to send the same to
10770 -- pricing engine since we need to send the subsidyl in %
10771 -- This is applicable to NET accouting method of Subsidy only
10772
10773 --Modified by kthiruva on 15-Mar-2006
10774 --Bug 4898772 - Start of Changes
10775 --As the subsidy is not being deducted in the formula LINE_CAP_AMNT_PRICE, it does not have to be added again
10776 ln_cap_wos := ln_cap_amt;
10777 --Bug 4898772 - End of Changes
10778
10779 FOR get_acc_mth_code_rec IN get_acc_mth_code (p_line_id => get_asset_lines_rec.id) LOOP
10780 i := i + 1;
10781 -- Changing the over loaded get_asset_subsidy_amont the tbl version
10782 okl_subsidy_process_pvt.get_asset_subsidy_amount(
10783 p_api_version => p_api_version,
10784 p_init_msg_list => p_init_msg_list,
10785 x_return_status => x_return_status,
10786 x_msg_count => x_msg_count,
10787 x_msg_data => x_msg_data,
10788 p_asset_cle_id => get_asset_lines_rec.id,
10789 x_asbv_tbl => l_asbv_tbl);
10790 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10791 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10792 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10793 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10794 END IF;
10795 IF l_asbv_tbl.COUNT > 0 THEN
10796 FOR k IN l_asbv_tbl.FIRST..l_asbv_tbl.LAST LOOP
10797 /* Bug# 7534196 - Commented
10798 IF get_acc_mth_code_rec.accounting_method_code = 'AMORTIZE' AND
10799 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
10800 l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
10801 ELSIF get_acc_mth_code_rec.accounting_method_code = 'NET' AND
10802 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
10803 IF l_asbv_tbl(k).amount < ln_cap_wos THEN
10804 l_csm_one_off_fee_tbl(i).rate := l_asbv_tbl(k).amount/ln_cap_wos;
10805 END IF;
10806 END IF;
10807 */
10808 -- Bug#7534196 - Always pass subsidy amount to supertrump irrespective of account method
10809 IF l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
10810 l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
10811 END IF;
10812 END LOOP;
10813 ELSE
10814 okl_api.set_message(
10815 p_app_name => G_APP_NAME,
10816 p_msg_name => G_LLA_NO_MATCHING_RECORD,
10817 p_token1 => G_COL_NAME_TOKEN,
10818 p_token1_value => 'Subsidy Records');
10819 x_return_status := OKL_API.G_RET_STS_ERROR;
10820 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10821 END IF;
10822 l_csm_one_off_fee_tbl(i).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10823 l_csm_one_off_fee_tbl(i).date_paid := get_asset_lines_rec.date_funding;
10824 l_csm_one_off_fee_tbl(i).kle_asset_id := get_asset_lines_rec.id;
10825
10826 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
10827 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
10828 l_csm_one_off_fee_tbl(i).orig_contract_line_id := get_asset_lines_rec.orig_contract_line_id;
10829 --end if;
10830
10831 l_csm_one_off_fee_tbl(i).other_type_id := get_acc_mth_code_rec.id;
10832 l_csm_one_off_fee_tbl(i).other_type := G_SFE_TYPE_SUBSIDY;
10833 OPEN get_sub_income_strm_csr(p_dnz_chr_id => p_chr_id,
10834 p_sub_cle_id => get_acc_mth_code_rec.id);
10835 --FETCH get_sub_income_strm_csr INTO l_csm_one_off_fee_tbl(i).description;
10836 FETCH get_sub_income_strm_csr INTO l_sty_id;
10837 IF get_sub_income_strm_csr%NOTFOUND THEN
10838 OKL_API.set_message(p_app_name => G_APP_NAME,
10839 p_msg_name => G_REQUIRED_VALUE,
10840 p_token1 => G_COL_NAME_TOKEN,
10841 p_token1_value => 'Subsidy Income Stream Description');
10842 x_return_status := OKL_API.G_RET_STS_ERROR;
10843 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10844 END IF;
10845 CLOSE get_sub_income_strm_csr;
10846 -- New code for bug 4044089 by HKPATEL 12/02/2004
10847 OKL_STREAMS_UTIL.get_dependent_stream_type
10848 (
10849 p_khr_id =>p_chr_id,
10850 p_primary_sty_id =>l_sty_id,
10851 p_dependent_sty_purpose=>'SUBSIDY_INCOME',
10852 x_return_status => l_return_status,
10853 x_dependent_sty_id=>l_dep_sty_id
10854 );
10855 IF l_return_status = 'E' THEN
10856 l_return_status := 'S';
10857 END IF;
10858
10859 IF l_dep_sty_id IS NOT NULL THEN
10860 l_sty_id := l_dep_sty_id;
10861 END IF;
10862
10863 OPEN get_strm_type_code(p_sty_id => l_sty_id);
10864 FETCH get_strm_type_code INTO l_csm_one_off_fee_tbl(i).description;
10865 CLOSE get_strm_type_code;
10866 -- New code for bug 4044089 by HKPATEL 12/02/2004 ends here
10867
10868 END LOOP;
10869 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
10870 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
10871 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
10872 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10873 END IF;
10874 ELSE
10875 OKL_API.set_message(p_app_name => G_APP_NAME,
10876 p_msg_name => G_REQUIRED_VALUE,
10877 p_token1 => G_COL_NAME_TOKEN,
10878 p_token1_value => 'kle_asset_id');
10879 x_return_status := OKL_API.G_RET_STS_ERROR;
10880 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
10881 END IF;
10882 END LOOP;
10883 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
10884 RAISE OKL_API.G_EXCEPTION_ERROR;
10885 END IF;
10886 END IF;
10887 END IF;
10888 px_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
10889 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
10890 x_msg_data => x_msg_data);
10891 EXCEPTION
10892 WHEN OKL_API.G_EXCEPTION_ERROR THEN
10893 IF get_asset_lines_csr%ISOPEN THEN
10894 CLOSE get_asset_lines_csr;
10895 END IF;
10896 IF get_sub_income_strm_csr%ISOPEN THEN
10897 CLOSE get_sub_income_strm_csr;
10898 END IF;
10899 IF get_acc_mth_code%ISOPEN THEN
10900 CLOSE get_acc_mth_code;
10901 END IF;
10902 IF validate_sub_line%ISOPEN THEN
10903 CLOSE validate_sub_line;
10904 END IF;
10905 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10906 p_api_name => l_api_name,
10907 p_pkg_name => g_pkg_name,
10908 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
10909 x_msg_count => x_msg_count,
10910 x_msg_data => x_msg_data,
10911 p_api_type => g_api_type);
10912 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
10913 IF get_asset_lines_csr%ISOPEN THEN
10914 CLOSE get_asset_lines_csr;
10915 END IF;
10916 IF get_sub_income_strm_csr%ISOPEN THEN
10917 CLOSE get_sub_income_strm_csr;
10918 END IF;
10919 IF get_acc_mth_code%ISOPEN THEN
10920 CLOSE get_acc_mth_code;
10921 END IF;
10922 IF validate_sub_line%ISOPEN THEN
10923 CLOSE validate_sub_line;
10924 END IF;
10925 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10926 p_api_name => l_api_name,
10927 p_pkg_name => g_pkg_name,
10928 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10929 x_msg_count => x_msg_count,
10930 x_msg_data => x_msg_data,
10931 p_api_type => g_api_type);
10932 WHEN OTHERS THEN
10933 IF get_asset_lines_csr%ISOPEN THEN
10934 CLOSE get_asset_lines_csr;
10935 END IF;
10936 IF get_sub_income_strm_csr%ISOPEN THEN
10937 CLOSE get_sub_income_strm_csr;
10938 END IF;
10939 IF get_acc_mth_code%ISOPEN THEN
10940 CLOSE get_acc_mth_code;
10941 END IF;
10942 IF validate_sub_line%ISOPEN THEN
10943 CLOSE validate_sub_line;
10944 END IF;
10945 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10946 p_api_name => l_api_name,
10947 p_pkg_name => g_pkg_name,
10948 p_exc_name => 'OTHERS',
10949 x_msg_count => x_msg_count,
10950 x_msg_data => x_msg_data,
10951 p_api_type => g_api_type);
10952 END extract_subsidized_lines;
10953 -- End modification 11i10 release
10954 -- Start modification 11i10 bakuchib
10955 Procedure extract_fee_lines( p_api_version IN NUMBER,
10956 p_chr_id IN NUMBER,
10957 p_deal_type IN VARCHAR2,
10958 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
10959 x_msg_count OUT NOCOPY NUMBER,
10960 x_msg_data OUT NOCOPY VARCHAR2,
10961 x_return_status OUT NOCOPY VARCHAR2,
10962 px_csm_one_off_fee_tbl IN OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
10963 px_csm_periodic_expenses_tbl IN OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
10964 px_csm_stream_types_tbl IN OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
10965
10966 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_FEE_LINES';
10967 l_api_version CONSTANT NUMBER := 1;
10968 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
10969 ln_level_cnt NUMBER := 0;
10970 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
10971 l_line_rec l_line_rec_csr%ROWTYPE;
10972 l_lne_rec l_line_rec_csr%ROWTYPE;
10973 l_rl_rec l_rl_csr%ROWTYPE;
10974 r_rl_rec l_rl_csr%ROWTYPE;
10975 l_rl_rec1 l_rl_csr1%ROWTYPE;
10976 l_rl_rec2 l_rl_csr2%ROWTYPE;
10977 l_rl_rec2_exp l_rl_csr2%ROWTYPE;
10978 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
10979 l_strm_name_rec strm_name_csr%ROWTYPE;
10980
10981 l_hdr_rec l_hdr_csr%ROWTYPE;
10982
10983 l_level_type NUMBER;
10984 l_strm_name VARCHAR2(200);
10985 i BINARY_INTEGER := 0;
10986 j BINARY_INTEGER := 0;
10987 k BINARY_INTEGER := 0;
10988 l BINARY_INTEGER := 0;
10989 m BINARY_INTEGER := 0;
10990 idx BINARY_INTEGER := 0;
10991 --l_sty_id NUMBER;
10992 l_sty_id strm_rec_type;
10993 -- l_pricing_name VARCHAR2(40); --02-Sep-11 SECHAWLA 12936702
10994
10995 l_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
10996
10997 l_passthru_percent NUMBER := 0;
10998 l_fee_type apps.OKL_K_LINES.FEE_TYPE%TYPE;
10999
11000 --TYPE okl_strm_type_id_tbl_type IS TABLE OF okl_strm_type_b.ID%TYPE
11001 --INDEX BY BINARY_INTEGER;
11002 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
11003
11004
11005 px_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
11006
11007 /* ER# 5150038 */
11008 /* This cursor is used to fetch the linked asset lines when fees are associated to assets */
11009 CURSOR l_linked_asset_line_csr (p_chr_d NUMBER,
11010 p_cle_id NUMBER)
11011 IS
11012 SELECT lse.lty_code,
11013 kle.fee_type,
11014 tl.name,
11015 tl.item_description,
11016 kle.id,
11017 kle.cle_id,
11018 kle.oec,
11019 kle.residual_code,
11020 kle.capital_amount,
11021 kle.initial_direct_cost,
11022 kle.delivered_date,
11023 kle.date_funding_required,
11024 kle.residual_grnty_amount,
11025 kle.date_funding,
11026 kle.residual_value,
11027 kle.date_delivery_expected,
11028 kle.orig_system_id1 old_line_id,
11029 kle.amount,
11030 kle.price_negotiated,
11031 kle.start_date,
11032 kle.end_date,
11033 kle.orig_system_id1,
11034 sts.ste_code,
11035 kle.tradein_amount,
11036 kle.date_funding_expected,
11037 kle.capital_reduction,
11038 kle.capitalize_down_payment_yn,
11039 kle.orig_contract_line_id --sechawla 15-jul-09 ESG PRB Enhancements : added orig_contract_line_id
11040 FROM okl_k_lines_full_v kle,
11041 okc_line_styles_b lse,
11042 okc_k_lines_tl tl,
11043 okc_statuses_b sts
11044 WHERE kle.lse_id = lse.id
11045 AND lse.lty_code = 'LINK_FEE_ASSET'
11046 AND tl.id = kle.id
11047 AND kle.cle_id = p_cle_id
11048 AND tl.language = userenv('LANG')
11049 AND kle.dnz_chr_id = p_chr_d
11050 AND sts.code = kle.sts_code
11051 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
11052
11053 l_linked_asset_line_rec l_linked_asset_line_csr%ROWTYPE;
11054 l_asset_association BOOLEAN := FALSE;
11055 l_expense_exists BOOLEAN := FALSE;
11056 l_ratio NUMBER := 0.0;
11057
11058 CURSOR get_strm_name_fin_csr(p_chr_d NUMBER,
11059 p_cle_id NUMBER )
11060 IS
11061 SELECT crl.rule_information2 amount,
11062 styt.name strm_name
11063 FROM okl_strm_type_tl styt,
11064 okc_k_items cim,
11065 okc_rule_groups_b crg,
11066 okc_rules_b crl
11067 WHERE crl.rgp_id = crg.id
11068 AND crg.RGD_CODE = 'LAFEXP'
11069 AND crl.RULE_INFORMATION_CATEGORY = 'LAFEXP'
11070 AND crg.dnz_chr_id = p_chr_d
11071 AND crg.cle_id = p_cle_id
11072 AND cim.dnz_chr_id = crg.dnz_chr_id
11073 AND cim.cle_id = crg.cle_id
11074 AND cim.object1_id1 = TO_CHAR(styt.id)
11075 AND cim.object1_id2 = '#'
11076 AND cim.jtot_object1_code = 'OKL_STRMTYP'
11077 AND styt.language = USERENV('lang');
11078
11079 -- Cursor put by HKPATEL for rollover fee associated with asset
11080 CURSOR link_rollover_csr(cleId NUMBER)
11081 IS
11082 SELECT okc.id id,
11083 okc.chr_id chr_id,
11084 okc.cle_id cle_id,
11085 okc.dnz_chr_id dnz_chr_id,
11086 kle.capital_amount capital_amount,
11087 kle.amount amount,
11088 lse.lty_code lty_code
11089 -- srsreeni - Bug#5699923 - Added - Start
11090 , sts.ste_code
11091 -- srsreeni - Bug#5699923 - Added - End
11092 , kle.orig_contract_line_id ,--sechawla 15-jul-09 PRB ESG enhancements : added orig_contract_line_id
11093 okc.start_date --11-Sep-09 sechawla 8798556 : added
11094 FROM okc_k_lines_b okc,
11095 okl_k_lines kle ,
11096 okc_line_styles_b lse
11097 ,okc_statuses_b sts
11098 WHERE okc.cle_id = cleId
11099 AND okc.lse_id = lse.id
11100 AND okc.id = kle.id
11101 AND lty_code = 'LINK_FEE_ASSET'
11102 AND sts.code=okc.sts_code;
11103
11104 --Start of modification for Bug#3320656 BAKUCHIB Modified
11105 -- to get the absorbed fees amount
11106 -- gboomina BUG#4508077 changes start - selecting the fee purpose and stream type
11107 CURSOR get_strm_name_abs_csr(p_chr_d NUMBER,
11108 p_cle_id NUMBER )
11109 IS
11110 SELECT kle.amount amount,
11111 styt.name strm_name,
11112 kle.fee_purpose_code fee_purpose_code,
11113 styt.id sty_id
11114 FROM okl_strm_type_tl styt,
11115 okc_k_items cim,
11116 okc_k_lines_b cle,
11117 okl_k_lines kle
11118 WHERE cle.dnz_chr_id = p_chr_d
11119 AND cle.id = p_cle_id
11120 AND cle.id = kle.id
11121 AND cim.dnz_chr_id = cle.dnz_chr_id
11122 AND cim.cle_id = cle.id
11123 AND cim.object1_id1 = TO_CHAR(styt.id)
11124 AND cim.object1_id2 = '#'
11125 AND cim.jtot_object1_code = 'OKL_STRMTYP'
11126 AND styt.language = USERENV('lang');
11127 --End of modification for Bug#3320656 BAKUCHIB Modified
11128 -- get the self referencing Line based rule information
11129 CURSOR l_rl_income_csr(rlgpId NUMBER,
11130 rgcode okc_rule_groups_b.rgd_code%TYPE,
11131 rlcat okc_rules_b.rule_information_category%TYPE,
11132 chrId NUMBER,
11133 cleId NUMBER )
11134 IS
11135 --srsreeni Bug5890437 start
11136 -- Start of modification for Bug#3322910 BAKUCHIB Modified
11137 SELECT SUM(TO_NUMBER(NVL(crl.rule_information3,1))) level_cnt
11138 -- End of modification for Bug#3322910 BAKUCHIB Modified
11139 --srsreeni Bug5890437 end
11140 FROM okc_rule_groups_b crg,
11141 okc_rules_b crl
11142 WHERE crl.rgp_id = crg.id
11143 AND crl.object2_id1 = rlgpId
11144 AND crg.rgd_code = rgcode
11145 AND crl.rule_information_category = rlcat
11146 AND crg.dnz_chr_id = chrId
11147 AND crg.cle_id = cleId
11148 ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
11149
11150 -- nikshah -- Bug # 5484903 Fixed
11151 -- Removed CURSOR c_finance_strm_csr (payment_type_id NUMBER, p_chr_id NUMBER)
11152
11153 --mansrini : Code for VR build
11154 CURSOR get_day_conv_on_contrct
11155 IS
11156 SELECT
11157 --Added by srsreeni for bug6076113
11158 -- rate_params.days_in_a_year_code,
11159 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
11160 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
11161 rate_params.days_in_a_year_code
11162 --srsreeni bug6076113 ends
11163 FROM okl_k_rate_params rate_params
11164 WHERE khr_id = p_chr_id;
11165
11166 CURSOR get_day_conv_on_sgt
11167 IS
11168 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
11169 gts.days_in_yr_code
11170 FROM
11171 okl_k_headers khr,
11172 okl_products_v pdt,
11173 okl_ae_tmpt_sets_v aes,
11174 OKL_ST_GEN_TMPT_SETS gts
11175 WHERE
11176 khr.pdt_id = pdt.id AND
11177 pdt.aes_id = aes.id AND
11178 aes.gts_id = gts.id AND
11179 khr.id = p_chr_id;
11180
11181 l_strm_name_fin_rec get_strm_name_fin_csr%ROWTYPE;
11182 --Start of modification for Bug#3320656 BAKUCHIB Modified
11183 l_strm_name_abs_rec get_strm_name_abs_csr%ROWTYPE;
11184 l_strmid_rec l_strmid_csr%ROWTYPE;
11185 --End of modification for Bug#3320656 BAKUCHIB Modified
11186 -- Rollover modification by HKPATEL
11187 link_rollover_rec link_rollover_csr%ROWTYPE;
11188 -- Rollover modification ends here
11189 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
11190 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
11191
11192 -- gboomina Bug 4746368 - Added - Start
11193 -- Condition added to the cursor by kthiruva on 09-Feb-2006
11194 --Only disbursement and processing fee details specified in Base Term should be picked
11195 --Bug 4746189 - Start of Changes
11196 --Made changes by rgooty for bug 8399461 to add new fields
11197 Cursor c_pass ( khrId NUMBER, cleId NUMBER) IS
11198 select vDtls.DISBURSEMENT_BASIS,
11199 vDtls.DISBURSEMENT_FIXED_AMOUNT,
11200 vDtls.DISBURSEMENT_PERCENT,
11201 vDtls.PROCESSING_FEE_BASIS,
11202 vDtls.PROCESSING_FEE_FIXED_AMOUNT,
11203 vDtls.PROCESSING_FEE_PERCENT,
11204 vDtls.PAYMENT_START_DATE,
11205 vDtls.PAYMENT_FREQUENCY,
11206 chr.END_DATE CONTRACT_END_DATE,
11207 vDtls.ORIG_CONTRACT_LINE_ID --sechawla 21-Jul-09 8677460 : PRB ESG Enhancements
11208 from okl_party_payment_hdr vHdr,
11209 okl_party_payment_dtls vDtls,
11210 okc_k_headers_b chr
11211 where vDtls.payment_hdr_id = vHdr.id
11212 and vHdr.CLE_ID = cleId
11213 and vHdr.DNZ_CHR_ID = khrId
11214 and vHdr.PASSTHRU_TERM = 'BASE'
11215 and vHdr.DNZ_CHR_ID = chr.id;
11216 --Bug 4746189 - End of Changes
11217
11218 r_pass c_pass%ROWTYPE;
11219 -- gboomina Bug 4746368 - Added - End
11220
11221 --Added by rgooty for bug 8399461
11222 --Cursor to get the fee payment frequency
11223 CURSOR c_feepayment_freq(khrId NUMBER, cleId NUMBER) IS
11224 SELECT rul.object1_id1 frequency
11225 FROM okc_rule_groups_b rgp,
11226 okc_rules_b rul
11227 WHERE rgp.dnz_chr_id = khrId
11228 AND rgp.cle_id = cleId
11229 AND rgp.RGD_CODE = 'LALEVL'
11230 AND rgp.id = rul.rgp_id
11231 AND rul.RULE_INFORMATION_CATEGORY = 'LASLL'
11232 AND ROWNUM < 2;
11233
11234 --Cursor to get the number of disbursements
11235 CURSOR c_num_of_disb(p_contract_end_date DATE, p_payout_date DATE, p_frequency VARCHAR2)
11236 IS
11237 SELECT CEIL(Months_between(p_contract_end_date, p_payout_date)/
11238 DECODE(p_frequency,'A',12,'S',6,'Q',3,1))
11239 FROM DUAL;
11240
11241
11242 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
11243 cursor get_rebook_type is
11244 select nvl(amort_inc_adj_rev_dt_yn, 'N')
11245 from okl_sys_acct_opts;
11246 l_PROSPECTIVE_REBOOK_YN varchar2(1);
11247
11248 l_calc_disb_amount NUMBER;
11249 l_disb_amount NUMBER;
11250 l_num_of_disb NUMBER;
11251 l_frequency VARCHAR2(1);
11252 l_bill_amount NUMBER;
11253 l_desc_index NUMBER := 0;
11254 l_pay_start_date DATE;
11255 l_prev_pay_start_date DATE;
11256 l_months_factor NUMBER;
11257 --end rgooty
11258
11259
11260 Begin
11261 print( l_api_name, 'begin');
11262 x_return_status := OKL_API.START_ACTIVITY(
11263 p_api_name => l_api_name,
11264 p_pkg_name => g_pkg_name,
11265 p_init_msg_list => p_init_msg_list,
11266 l_api_version => l_api_version,
11267 p_api_version => p_api_version,
11268 p_api_type => G_API_TYPE,
11269 x_return_status => x_return_status);
11270 -- check if activity started successfully
11271 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
11272 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11273 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
11274 raise OKL_API.G_EXCEPTION_ERROR;
11275 End If;
11276
11277 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
11278 open get_rebook_type;
11279 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN ;
11280 close get_rebook_type;
11281
11282 --get day convention info : mansrini
11283 OPEN get_day_conv_on_contrct;
11284 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
11285 CLOSE get_day_conv_on_contrct;
11286
11287 --Added by srsreeni for bug6076113
11288 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
11289 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
11290 --srsreeni bug6076113 ends
11291 THEN
11292 OPEN get_day_conv_on_sgt;
11293 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
11294 CLOSE get_day_conv_on_sgt;
11295 END IF;
11296
11297 OPEN l_hdr_pdt_csr(p_chr_id);
11298 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
11299 CLOSE l_hdr_pdt_csr;
11300
11301 OPEN l_hdr_csr(p_chr_id);
11302 FETCH l_hdr_csr into l_hdr_rec;
11303 IF l_hdr_csr%NOTFOUND THEN
11304 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11305 END IF;
11306 CLOSE l_hdr_csr;
11307 i := 0; j := 0;
11308 k := px_csm_periodic_expenses_tbl.COUNT;
11309 l := px_csm_one_off_fee_tbl.COUNT;
11310 m := px_csm_stream_types_tbl.COUNT;
11311 FOR l_lne_rec in l_line_rec_csr ( p_chr_id, 'FEE' ) LOOP
11312
11313 OPEN fee_strm_type_csr ( l_lne_rec.id, 'FEE' );
11314 FETCH fee_strm_type_csr into l_fee_strm_type_rec;
11315 CLOSE fee_strm_type_csr;
11316 l_level_type := l_fee_strm_type_rec.styp_id;
11317 l_strm_name := l_fee_strm_type_rec.strm_name;
11318 print( l_api_name, 'Fee Line='||l_strm_name);
11319
11320 l_fee_type := nvl(l_lne_rec.fee_type, 'NOFEETYPE');
11321 If (( l_fee_type = 'PASSTHROUGH' ) AND (l_passthru_percent < 0.0)) Then
11322 okl_api.set_message(
11323 p_app_name => G_APP_NAME,
11324 p_msg_name => 'OKL_LLA_NEG_PASSTHRU');
11325 raise OKL_API.G_EXCEPTION_ERROR;
11326 End If;
11327
11328 print( l_api_name, 'fee type'||l_fee_type);
11329 If (( l_fee_strm_type_rec.capitalize_yn = 'Y') OR ( l_fee_type = 'CAPITALIZED' )) Then
11330 /* The fee amounts are already prorated into
11331 * asset costs. This is true only for
11332 * capitalized fees.
11333 */
11334 NULL;
11335 Elsif ( l_fee_type = 'PASSTHROUGH' ) Then
11336
11337 /* ER# 5150038 */
11338 /* Getting the linked asset line for the EXPENSE or MISCELLANEOUS fee.
11339 * If there is an asset association, this cursor will return those linked asset association.
11340 * In the case of MISCELLANEOUS fee, only if the relevant payment is also associated to an asset,
11341 * it is considered as an asset association.
11342 */
11343 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
11344 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
11345
11346 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
11347 FETCH l_rl_csr2 INTO l_rl_rec2;
11348
11349 IF l_linked_asset_line_csr%FOUND AND
11350 l_rl_csr2%FOUND
11351 THEN
11352 l_asset_association := TRUE;
11353 ELSE
11354 l_asset_association := FALSE;
11355 END IF;
11356 CLOSE l_linked_asset_line_csr;
11357 CLOSE l_rl_csr2;
11358
11359
11360 --Added by rgooty for bug 8399461 to pass disbursement as Expense
11361 FOR r_pass IN c_pass( p_chr_id, l_lne_rec.id)
11362 LOOP
11363 l_frequency := r_pass.PAYMENT_FREQUENCY;
11364 --If disbursement frequency is null then take the fee payment frequency
11365 IF(l_frequency IS NULL) THEN
11366 OPEN c_feepayment_freq(p_chr_id, l_lne_rec.id);
11367 FETCH c_feepayment_freq INTO l_frequency;
11368 CLOSE c_feepayment_freq;
11369 END IF;
11370
11371 IF (r_pass.disbursement_basis = 'PERCENT' ) THEN
11372
11373 l_months_factor := OKL_STREAM_GENERATOR_PVT.get_months_factor(
11374 p_frequency => l_frequency,
11375 x_return_status => x_return_status);
11376 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
11377 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11378 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
11379 RAISE OKL_API.G_EXCEPTION_ERROR;
11380 END IF;
11381
11382 l_pay_start_date := r_pass.PAYMENT_START_DATE;
11383 l_prev_pay_start_date := NULL;
11384 idx := 0;
11385 l_desc_index := l_desc_index + 1;
11386 LOOP
11387 --When disbursement basis is PERCENT, then disbursement amount
11388 --is calculated by applying the percentage to all the billable
11389 --amounts due before the payout date
11390 get_pth_fee_due_amount(p_chr_id => p_chr_id,
11391 p_kle_id => l_lne_rec.id,
11392 p_prev_payout_date => l_prev_pay_start_date,
11393 p_payout_date => l_pay_start_date,
11394 x_bill_amount => l_bill_amount,
11395 x_return_status => x_return_status);
11396 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
11397 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11398 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
11399 RAISE OKL_API.G_EXCEPTION_ERROR;
11400 END IF;
11401
11402 l_calc_disb_amount := (l_bill_amount * r_pass.DISBURSEMENT_PERCENT)/100;
11403
11404 okl_accounting_util.round_amount(p_api_version => 1.0,
11405 p_init_msg_list => OKL_API.G_FALSE,
11406 x_return_status => x_return_status,
11407 x_msg_count => x_msg_count,
11408 x_msg_data => x_msg_data,
11409 p_amount => l_calc_disb_amount,
11410 p_currency_code => l_hdr_rec.currency_code,
11411 p_round_option => 'STM',
11412 x_rounded_amount => l_disb_amount);
11413 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
11414 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11415 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
11416 RAISE OKL_API.G_EXCEPTION_ERROR;
11417 END IF;
11418
11419 IF(l_disb_amount <> 0) THEN
11420 k := k + 1;
11421 idx := idx + 1;
11422 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11423 px_csm_periodic_expenses_tbl(k).amount := l_disb_amount;
11424 px_csm_periodic_expenses_tbl(k).date_start := l_pay_start_date;
11425 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
11426 px_csm_periodic_expenses_tbl(k).period := l_frequency;
11427 px_csm_periodic_expenses_tbl(k).description := l_strm_name || l_desc_index;
11428 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11429
11430 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11431 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11432 --px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id; --sechawla 21-Jul-09
11433 --sechawla 21-Jul-09
11434 --get the original contract line ID from party payment details, for passthru fee of type expense
11435 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := r_pass.orig_contract_line_id;
11436 --end if;
11437
11438 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11439 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11440 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11441 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11442 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11443 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11444 END IF;
11445
11446 l_prev_pay_start_date := l_pay_start_date;
11447 l_pay_start_date := ADD_MONTHS(l_pay_start_date, l_months_factor);
11448 EXIT WHEN (l_pay_start_date > r_pass.CONTRACT_END_DATE);
11449 END LOOP;
11450 ELSE
11451 l_disb_amount := r_pass.disbursement_fixed_amount;
11452
11453 IF(l_disb_amount <> 0) THEN
11454 OPEN c_num_of_disb(r_pass.CONTRACT_END_DATE, r_pass.PAYMENT_START_DATE, l_frequency);
11455 FETCH c_num_of_disb INTO l_num_of_disb;
11456 CLOSE c_num_of_disb;
11457
11458 k := k + 1;
11459 l_desc_index := l_desc_index + 1;
11460 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
11461 px_csm_periodic_expenses_tbl(k).amount := l_disb_amount;
11462 px_csm_periodic_expenses_tbl(k).date_start := r_pass.PAYMENT_START_DATE;
11463 px_csm_periodic_expenses_tbl(k).number_of_periods := l_num_of_disb;
11464 px_csm_periodic_expenses_tbl(k).period := l_frequency;
11465 px_csm_periodic_expenses_tbl(k).description := l_strm_name || l_desc_index;
11466 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11467
11468 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11469 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11470 --px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id; --sechawla 21-Jul-09
11471 --sechawla 21-Jul-09
11472 --get the original contract line ID from party payment details, for passthru fee of type expense
11473 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := r_pass.orig_contract_line_id ;
11474 --end if;
11475
11476 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11477 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11478 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11479 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11480 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11481 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11482 END IF;
11483 END IF;
11484 END LOOP;
11485 --end rgooty for bug 8399461
11486
11487
11488
11489 IF l_asset_association THEN
11490
11491 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
11492
11493 /* Calculate the ratio */
11494 l_ratio := l_linked_asset_line_rec.amount / l_lne_rec.amount;
11495
11496 -- gboomina Bug 4746368 - Start
11497 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
11498 FETCH l_rl_csr2 INTO l_rl_rec2;
11499 IF l_rl_csr2%FOUND THEN
11500 idx := 0;
11501 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_linked_asset_line_rec.id ) LOOP
11502
11503 -- Start of Bug#2757289 modification
11504 IF (l_rl_rec.rule_information7 IS NOT NULL OR
11505 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11506 (l_rl_rec.rule_information8 IS NOT NULL OR
11507 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11508 k := k + 1;
11509 idx := idx + 1;
11510 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11511 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
11512 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11513 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
11514 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
11515 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11516 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
11517
11518 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11519 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11520 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
11521 --end if;
11522
11523 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11524 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11525 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11526 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11527 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11528
11529 IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
11530 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
11531 END IF;
11532 -- End of Bug#2757289 modification
11533
11534 -- Added by kthiruva on 29-Dec-2005.
11535 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11536 -- Bug 4915938 - Start of Changes
11537 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11538 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11539 ELSE
11540 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11541 END IF;
11542 -- Bug 4915938 - End of Changes
11543
11544 ELSIF (l_rl_rec.rule_information7 IS NULL OR
11545 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11546 (l_rl_rec.rule_information8 IS NULL OR
11547 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11548 k := k + 1;
11549 idx := idx + 1;
11550 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11551 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11552 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11553 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
11554 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
11555 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
11556 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11557 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
11558
11559 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11560 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11561 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
11562 --end if;
11563
11564 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11565 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11566 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11567
11568 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
11569 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
11570 END IF;
11571 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11572 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11573 ELSE
11574 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11575 END IF;
11576 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
11577 --11-Sep-09 sechawla 8798556
11578 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11579 px_csm_periodic_expenses_tbl(k).date_start:= l_linked_asset_line_rec.start_date;
11580 ELSE
11581 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
11582 END IF;
11583 END IF;
11584
11585 END LOOP;-- end-loop: l_rl_rec
11586 Else -- this condition is never reached.
11587 k := k + 1;
11588 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
11589 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11590 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11591 px_csm_periodic_expenses_tbl(k).period := 'M';
11592 --Added by rgooty for bug 8399461
11593 px_csm_periodic_expenses_tbl(k).amount := l_linked_asset_line_rec.amount;
11594 --end rgooty
11595 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
11596 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11597 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11598 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
11599
11600 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11601 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11602 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
11603 --end if;
11604 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
11605 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11606 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11607 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11608
11609 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
11610 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
11611 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
11612 End If;
11613 CLOSE l_rl_csr2;
11614 END LOOP; -- end-for-loop: l_linked_asset_line_rec
11615 ELSE
11616 -- gboomina Bug 4746368 - Start
11617 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
11618 FETCH l_rl_csr2 INTO l_rl_rec2;
11619 IF l_rl_csr2%FOUND THEN
11620 idx := 0;
11621 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_lne_rec.id ) LOOP
11622
11623
11624 -- Start of Bug#2757289 modification
11625 IF (l_rl_rec.rule_information7 IS NOT NULL OR
11626 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11627 (l_rl_rec.rule_information8 IS NOT NULL OR
11628 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11629 k := k + 1;
11630 idx := idx + 1;
11631 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11632 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
11633 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11634 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
11635 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
11636 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11637 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11638
11639 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11640 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11641 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
11642 --end if;
11643
11644 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11645 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11646 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11647 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11648 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11649
11650 IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
11651 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
11652 END IF;
11653 -- End of Bug#2757289 modification
11654
11655 -- Added by kthiruva on 29-Dec-2005.
11656 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11657 -- Bug 4915938 - Start of Changes
11658 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11659 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11660 ELSE
11661 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11662 END IF;
11663 -- Bug 4915938 - End of Changes
11664
11665 ELSIF (l_rl_rec.rule_information7 IS NULL OR
11666 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11667 (l_rl_rec.rule_information8 IS NULL OR
11668 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11669 k := k + 1;
11670 idx := idx + 1;
11671 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11672 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11673 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11674 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
11675 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
11676 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
11677 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11678 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11679
11680 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11681 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11682 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
11683 --end if;
11684
11685 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11686 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11687 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11688
11689 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
11690 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
11691 END IF;
11692 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11693 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11694 ELSE
11695 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11696 END IF;
11697 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
11698 --11-Sep-09 sechawla 8798556
11699 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11700 px_csm_periodic_expenses_tbl(k).date_start:= l_lne_rec.start_date;
11701 ELSE
11702 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
11703 END IF;
11704 END IF;
11705
11706 END LOOP;
11707 Else -- this condition is never reached.
11708 k := k + 1;
11709 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
11710 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11711 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11712 px_csm_periodic_expenses_tbl(k).period := 'M';
11713 --Added by rgooty for bug 8399461
11714 px_csm_periodic_expenses_tbl(k).amount := l_lne_rec.amount;
11715 --end rgooty
11716 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
11717 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11718 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11719 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11720
11721 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11722 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11723 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
11724 --end if;
11725
11726 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
11727 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11728 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11729 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11730
11731 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
11732 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
11733 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
11734 End If;
11735 CLOSE l_rl_csr2;
11736 END IF; -- end-if l_asset_association
11737 Elsif (( l_fee_type = 'EXPENSE' )OR ( l_fee_type = 'MISCELLANEOUS' )) THEN
11738 /* ER# 5150038 */
11739 /* Getting the linked asset line for the EXPENSE or MISCELLANEOUS fee.
11740 * If there is an asset association, this cursor will return those linked asset association.
11741 * In the case of MISCELLANEOUS fee, only if the relevant payment is also associated to an asset,
11742 * it is considered as an asset association.
11743 */
11744 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
11745 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
11746
11747 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
11748 FETCH l_rl_csr2 INTO l_rl_rec2;
11749
11750 IF l_linked_asset_line_csr%FOUND AND
11751 ((l_rl_csr2%FOUND AND l_fee_type = 'MISCELLANEOUS') OR
11752 l_fee_type = 'EXPENSE')
11753 THEN
11754 l_asset_association := TRUE;
11755 ELSE
11756 l_asset_association := FALSE;
11757 END IF;
11758 CLOSE l_linked_asset_line_csr;
11759 CLOSE l_rl_csr2;
11760
11761 OPEN l_rl_csr2 ( 'LAFEXP', 'LAFEXP', TO_NUMBER(p_chr_id), l_lne_rec.id );
11762 FETCH l_rl_csr2 INTO l_rl_rec2_exp;
11763 IF l_rl_csr2%FOUND THEN
11764 l_expense_exists := TRUE;
11765 ELSE
11766 l_expense_exists := FALSE;
11767 END IF;
11768 CLOSE l_rl_csr2;
11769
11770 IF l_expense_exists THEN
11771 OPEN l_rl_csr1 ( 'LAFEXP', 'LAFREQ', TO_NUMBER(p_chr_id), l_lne_rec.id );
11772 FETCH l_rl_csr1 INTO l_rl_rec1;
11773 CLOSE l_rl_csr1;
11774 END IF;
11775
11776 IF l_asset_association THEN
11777 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id)
11778 LOOP
11779 /* IDC amount needs to be prorated based on the fee amounts allocated to each assets
11780 * Hence the formula of the ratio calculation = (fee amounts allocated to each assets) / (total fee amount)
11781 * fee amounts allocated to each assets = l_linked_asset_line_rec.amount
11782 * total fee amount = l_lne_rec.amount
11783 * Hence the IDC amount to be prorated = (IDC amount) * ratio
11784 */
11785 l_ratio := l_linked_asset_line_rec.amount / l_lne_rec.amount;
11786
11787 If ( nvl(l_lne_rec.initial_direct_cost,0) > 0.0 ) Then
11788 l := l + 1;
11789 px_csm_one_off_fee_tbl(l).description := l_fee_strm_type_rec.strm_name;
11790 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
11791 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11792 px_csm_one_off_fee_tbl(l).amount := l_lne_rec.initial_direct_cost * l_ratio;
11793 px_csm_one_off_fee_tbl(l).date_paid := l_linked_asset_line_rec.start_date;
11794 px_csm_one_off_fee_tbl(l).kle_fee_id := l_linked_asset_line_rec.id; -- Assign linked fee asset line id
11795
11796 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
11797 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11798 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
11799 --end if;
11800
11801 -- gboomina BUG#4508077 IDC changes start
11802 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11803 -- gboomina BUG#4508077 IDC changes end
11804 End If;
11805 --Added by kthiruva on 15-Feb-2006
11806 -- Streams for the fee need to be retrieved if Pricing Name is setup for the same
11807 --Bug 4930293 - Start of Changes
11808 --Added by srsreeni for bug5841892
11809 -- m := m + 1;
11810 -- px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
11811 --bug5841892 end of changes
11812 --vdamerla Bug6149951 start
11813 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
11814 get_primary_pricing_name
11815 (
11816 p_khr_id =>p_chr_id,
11817 p_sty_id =>l_fee_strm_type_rec.styp_id,
11818 x_return_status =>x_return_status,
11819 x_primary_pricing_name =>l_pricing_name
11820 );
11821 --Added by srsreeni for bug5841892
11822 if l_pricing_name is not null then
11823 m := m + 1;
11824 px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
11825 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
11826 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id; -- Assign linked fee asset line id
11827 end if;
11828 --bug5841892 end of changes
11829 --Bug 4930293 - End of Changes
11830
11831 -- gboomina BUG#4508077 IDC changes start
11832 -- get dependent streams for the reporting product
11833 IF(g_rep_req_yn = 'Y') THEN
11834
11835 get_dependent_stream_types
11836 (
11837 p_khr_id => p_chr_id,
11838 p_pdt_id => l_pdt_id_rec.report_pdt_id,
11839 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
11840 x_return_status => x_return_status,
11841 x_dependent_sty_id => l_strm_type_id_tbl
11842 );
11843 IF(x_return_status = 'E') THEN
11844 x_return_status := 'S';
11845 END IF;
11846 -- get dependent streams for the main product
11847 ELSE
11848 get_dependent_stream_types
11849 (
11850 p_khr_id => p_chr_id,
11851 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
11852 x_return_status => x_return_status,
11853 x_dependent_sty_id => l_strm_type_id_tbl
11854 );
11855 IF(x_return_status = 'E') THEN
11856 x_return_status := 'S';
11857 END IF;
11858
11859 END IF; -- end of dependent streams block
11860 -- populate the dependent stream types
11861 IF l_strm_type_id_tbl.COUNT > 0 THEN
11862 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11863 m := m + 1;
11864 --Modified by kthiruva on 21-Oct-2005
11865 --Bug 4690770 - Start of Changes
11866 --l_strm_type_id_tbl should be referenced, not l_sty_id during the assignments
11867 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11868 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11869 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;-- Assign linked fee asset line id
11870 --Bug 4690770 - End of Changes
11871 END LOOP;
11872 END IF; -- end of populate dependent stream types
11873 -- gboomina BUG#4508077 IDC changes end
11874 END IF;--vdamerla Bug6149951 ends
11875
11876 IF l_expense_exists THEN
11877 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. START
11878 IF NVL(l_lne_rec.amount,-1) <> NVL(l_lne_rec.initial_direct_cost,-1) THEN
11879 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. END
11880 k := k + 1;
11881 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
11882 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11883 px_csm_periodic_expenses_tbl(k).description := l_fee_strm_type_rec.strm_name;
11884 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11885 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION2,'0'));
11886 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION1, l_hdr_rec.term));
11887 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount - (NVL(l_lne_rec.initial_direct_cost,0)/px_csm_periodic_expenses_tbl(k).number_of_periods);
11888 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount * l_ratio;
11889 px_csm_periodic_expenses_tbl(k).period := l_rl_rec1.object1_id1;
11890 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11891 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
11892
11893 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11894 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11895 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
11896 --end if;
11897
11898 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
11899 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11900 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11901 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11902 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11903 END IF;
11904 Elsif ( l_fee_type <> 'MISCELLANEOUS' ) Then
11905 --m := m + 1;
11906 --px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
11907 --px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
11908 k := k + 1;
11909 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
11910 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11911 px_csm_periodic_expenses_tbl(k).description := l_fee_strm_type_rec.strm_name;
11912 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11913 px_csm_periodic_expenses_tbl(k).amount := nvl(l_lne_rec.amount,0)-nvl(l_lne_rec.initial_direct_cost,0);
11914 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount * l_ratio;
11915 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
11916 px_csm_periodic_expenses_tbl(k).period := 'M';
11917 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11918 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
11919
11920 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
11921 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
11922 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
11923 --end if;
11924
11925 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
11926 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11927 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11928 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11929 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11930
11931 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
11932 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
11933 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
11934
11935 End If; -- end-if: l_expense_exists
11936
11937 -- Process payments
11938 IF ( l_fee_type = 'MISCELLANEOUS' ) Then
11939 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
11940 FETCH l_rl_csr2 INTO l_rl_rec2;
11941
11942 IF l_rl_csr2%FOUND THEN
11943
11944 --Added by srsreeni for bug5841892
11945 -- m := m + 1;
11946 -- px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11947 --bug5841892 end of changes
11948 -- vdamerla Forward Port Bug6149951
11949 --vdamerla Bug6149951 start
11950 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
11951
11952 get_primary_pricing_name
11953 (
11954 p_khr_id =>p_chr_id,
11955 p_sty_id =>l_rl_rec2.object1_id1,
11956 x_return_status =>x_return_status,
11957 x_primary_pricing_name =>l_pricing_name
11958 );
11959 --Added by srsreeni for bug5841892
11960 if l_pricing_name is not null then
11961 m := m + 1;
11962 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11963 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
11964 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
11965 end if;
11966 --bug5841892 end of changes
11967 -- vdamerla Forward Port Bug6149951
11968 --OPEN strm_name_csr( l_rl_rec2.object1_id1);
11969 --FETCH strm_name_csr INTO l_strm_name_rec;
11970 --CLOSE strm_name_csr;
11971
11972 --l_level_type := l_rl_rec2.object1_id1;
11973 --l_strm_name := l_strm_name_rec.name;
11974
11975 --Added by srsreeni for bug5841892
11976 -- px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
11977 --bug5841892 end of changes
11978 --Added by kthiruva on 07-Dec-2005
11979 --Accrued Fee Income streams are retrieved and requested if defined
11980 --Bug 3410253 - Start of Changes
11981 IF(g_rep_req_yn = 'Y') THEN
11982
11983 get_dependent_stream_type
11984 (
11985 p_khr_id =>p_chr_id,
11986 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11987 p_primary_sty_id => l_level_type,
11988 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
11989 x_return_status => x_return_status,
11990 x_dependent_sty_id =>l_sty_id
11991 );
11992
11993 IF(x_return_status = 'E') THEN
11994 x_return_status := 'S';
11995 END IF;
11996
11997 ELSE
11998 get_dependent_stream_type
11999 (
12000 p_khr_id => p_chr_id,
12001 p_primary_sty_id => l_level_type,
12002 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
12003 x_return_status => x_return_status,
12004 x_dependent_sty_id =>l_sty_id
12005 );
12006
12007 IF x_return_status = 'E' THEN
12008 x_return_status := 'S';
12009 END IF;
12010 END IF;
12011
12012 IF(l_sty_id.id IS NOT NULL) THEN
12013 m := m + 1;
12014 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
12015 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
12016 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
12017 END IF;
12018
12019 --Bug 3410253 - End of Changes
12020 END IF;--vdamerla Bug6149951 ends
12021
12022 OPEN strm_name_csr( l_rl_rec2.object1_id1);
12023 FETCH strm_name_csr INTO l_strm_name_rec;
12024 CLOSE strm_name_csr;
12025
12026 l_level_type := l_rl_rec2.object1_id1;
12027 l_strm_name := l_strm_name_rec.name;
12028
12029
12030 idx := 0;
12031 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_linked_asset_line_rec.id ) LOOP
12032 -- Start of Bug#2757289 modification
12033 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12034 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12035 (l_rl_rec.rule_information8 IS NOT NULL OR
12036 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12037 k := k + 1;
12038 idx := idx + 1;
12039 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12040 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
12041 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12042 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
12043 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
12044 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12045 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12046 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12047 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
12048
12049 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12050 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12051 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
12052 --end if;
12053
12054 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12055 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12056 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12057
12058 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
12059 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12060 END IF;
12061
12062 -- Added by kthiruva on 29-Dec-2005.
12063 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12064 -- Bug 4915938 - Start of Changes
12065 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12066 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12067 ELSE
12068 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12069 END IF;
12070 -- Bug 4915938 - End of Changes
12071 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12072 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12073 (l_rl_rec.rule_information8 IS NULL OR
12074 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12075 -- End of Bug#2757289 modification
12076 k := k + 1;
12077 idx := idx + 1;
12078 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12079 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12080 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12081 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
12082 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12083 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12084 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12085 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12086 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
12087
12088 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12089 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12090 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
12091 --end if;
12092
12093 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12094 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12095
12096 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
12097 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12098 END IF;
12099 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12100 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12101 ELSE
12102 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12103 END IF;
12104 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
12105 --11-Sep-09 sechawla 8798556
12106 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
12107 px_csm_periodic_expenses_tbl(k).date_start:=l_linked_asset_line_rec.start_date;
12108 ELSE
12109 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12110 END IF;
12111 END IF;
12112 END LOOP; -- END-FOR-LOOP: l_rl_csr
12113 Else -- l_rl_csr2%NOTFOUND
12114 --Added by srsreeni for bug5841892
12115 -- m := m + 1;
12116 -- px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12117 --bug5841892 end of changes
12118 --vdamerla Bug6149951 start
12119 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
12120 get_primary_pricing_name
12121 (
12122 p_khr_id =>p_chr_id,
12123 p_sty_id =>l_level_type,
12124 x_return_status =>x_return_status,
12125 x_primary_pricing_name =>l_pricing_name
12126 );
12127 --Added by srsreeni for bug5841892
12128 if l_pricing_name is not null then
12129 m := m + 1;
12130 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12131 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12132 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
12133 end if;
12134 END IF;--vdamerla Bug6149951 ends
12135
12136 --bug5841892 end of changes
12137 k := k + 1;
12138 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
12139 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12140 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12141 px_csm_periodic_expenses_tbl(k).period := 'M';
12142 px_csm_periodic_expenses_tbl(k).amount := l_linked_asset_line_rec.amount;
12143 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
12144 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12145 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12146 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
12147
12148 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12149 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12150 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
12151 --end if;
12152
12153 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
12154 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12155 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12156 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12157
12158 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
12159 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
12160 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
12161
12162 End If; -- end-if l_rl_csr2%FOUND
12163 CLOSE l_rl_csr2;
12164 End If; -- end-if l_fee_type = 'MISCELLANEOUS'
12165
12166 END LOOP; -- end-loop: l_linked_asset_line_rec
12167 ELSE -- No asset association found
12168 If ( nvl(l_lne_rec.initial_direct_cost,0) > 0.0 ) Then
12169 l := l + 1;
12170 px_csm_one_off_fee_tbl(l).description := l_strm_name;
12171 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
12172 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12173 px_csm_one_off_fee_tbl(l).amount := l_lne_rec.initial_direct_cost;
12174 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
12175 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
12176
12177 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
12178 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12179 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12180 --end if;
12181
12182 -- gboomina BUG#4508077 IDC changes start
12183 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
12184 -- gboomina BUG#4508077 IDC changes end
12185 End If;
12186 --Added by kthiruva on 15-Feb-2006
12187 -- Streams for the fee need to be retrieved if Pricing Name is setup for the same
12188 --Bug 4930293 - Start of Changes
12189 --Added by srsreeni for bug5841892
12190 -- m := m + 1;
12191 -- px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12192 --bug5841892 end of changes
12193 get_primary_pricing_name
12194 (
12195 p_khr_id =>p_chr_id,
12196 p_sty_id =>l_level_type,
12197 x_return_status =>x_return_status,
12198 x_primary_pricing_name =>l_pricing_name
12199 );
12200 --Added by srsreeni for bug5841892
12201 if l_pricing_name is not null then
12202 m := m + 1;
12203 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12204 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12205 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
12206 end if;
12207 --bug5841892 end of changes
12208 --Bug 4930293 - End of Changes
12209
12210 -- gboomina BUG#4508077 IDC changes start
12211 -- get dependent streams for the reporting product
12212 IF(g_rep_req_yn = 'Y') THEN
12213
12214 get_dependent_stream_types
12215 (
12216 p_khr_id => p_chr_id,
12217 p_pdt_id => l_pdt_id_rec.report_pdt_id,
12218 p_primary_sty_id => l_level_type,
12219 x_return_status => x_return_status,
12220 x_dependent_sty_id => l_strm_type_id_tbl
12221 );
12222 IF(x_return_status = 'E') THEN
12223 x_return_status := 'S';
12224 END IF;
12225 -- get dependent streams for the main product
12226 ELSE
12227 get_dependent_stream_types
12228 (
12229 p_khr_id => p_chr_id,
12230 p_primary_sty_id => l_level_type,
12231 x_return_status => x_return_status,
12232 x_dependent_sty_id => l_strm_type_id_tbl
12233 );
12234 IF(x_return_status = 'E') THEN
12235 x_return_status := 'S';
12236 END IF;
12237
12238 END IF; -- end of dependent streams block
12239
12240 -- populate the dependent stream types
12241 IF l_strm_type_id_tbl.COUNT > 0 THEN
12242 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12243 m := m + 1;
12244 --Modified by kthiruva on 21-Oct-2005
12245 --Bug 4690770 - Start of Changes
12246 --l_strm_type_id_tbl should be referenced, not l_sty_id during the assignments
12247 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12248 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12249 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
12250 --Bug 4690770 - End of Changes
12251 END LOOP;
12252 -- gboomina BUG#4508077 IDC changes end
12253 END IF; -- end of populate dependent stream types
12254
12255 IF l_expense_exists THEN
12256 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. START
12257 IF NVL(l_lne_rec.amount,-1) <> NVL(l_lne_rec.initial_direct_cost,-1) THEN
12258 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. END
12259 k := k + 1;
12260 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
12261 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12262 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12263 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12264 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION2,'0'));
12265 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION1, l_hdr_rec.term));
12266 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount - (NVL(l_lne_rec.initial_direct_cost,0)/px_csm_periodic_expenses_tbl(k).number_of_periods);
12267 px_csm_periodic_expenses_tbl(k).period := l_rl_rec1.object1_id1;
12268 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12269 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
12270
12271 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12272 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12273 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12274 --end if;
12275
12276 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
12277 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12278 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12279 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12280 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12281 END IF;
12282 Elsif ( l_fee_type <> 'MISCELLANEOUS' ) Then
12283 --m := m + 1;
12284 --px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12285 --srsreeni Bug6149951 start
12286 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
12287 get_primary_pricing_name
12288 (
12289 p_khr_id =>p_chr_id,
12290 p_sty_id =>l_level_type,
12291 x_return_status =>x_return_status,
12292 x_primary_pricing_name =>l_pricing_name
12293 );
12294 IF l_pricing_name IS NOT NULL
12295 THEN
12296 m := m + 1;
12297 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12298 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12299 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
12300 END IF;
12301 END IF;
12302 --srsreeni Bug6149951 ends
12303 --px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
12304 k := k + 1;
12305 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
12306 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12307 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12308 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12309 px_csm_periodic_expenses_tbl(k).amount := nvl(l_lne_rec.amount,0)-nvl(l_lne_rec.initial_direct_cost,0);
12310 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
12311 px_csm_periodic_expenses_tbl(k).period := 'M';
12312 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12313 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
12314
12315 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12316 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12317 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12318 --end if;
12319
12320 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
12321 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12322 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12323 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12324 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12325
12326 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
12327 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
12328 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
12329
12330 End If; -- end-if: l_expense_exists
12331
12332 IF ( l_fee_type = 'MISCELLANEOUS' ) Then
12333 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
12334 FETCH l_rl_csr2 INTO l_rl_rec2;
12335
12336 IF l_rl_csr2%FOUND THEN
12337 --Added by srsreeni for bug5841892
12338 -- m := m + 1;
12339 -- px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
12340 --bug5841892 end of changes
12341 get_primary_pricing_name
12342 (
12343 p_khr_id =>p_chr_id,
12344 p_sty_id =>l_rl_rec2.object1_id1,
12345 x_return_status =>x_return_status,
12346 x_primary_pricing_name =>l_pricing_name
12347 );
12348 --Added by srsreeni for bug5841892
12349 if l_pricing_name is not null then
12350 m := m + 1;
12351 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
12352 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12353 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
12354 end if;
12355 --bug5841892 end of changes
12356 OPEN strm_name_csr( l_rl_rec2.object1_id1);
12357 FETCH strm_name_csr INTO l_strm_name_rec;
12358 CLOSE strm_name_csr;
12359
12360 l_level_type := l_rl_rec2.object1_id1;
12361 l_strm_name := l_strm_name_rec.name;
12362 --Added by srsreeni for bug5841892
12363 -- px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
12364 --bug5841892 end of changes
12365 --Added by kthiruva on 07-Dec-2005
12366 --Accrued Fee Income streams are retrieved and requested if defined
12367 --Bug 3410253 - Start of Changes
12368 IF(g_rep_req_yn = 'Y') THEN
12369
12370 get_dependent_stream_type
12371 (
12372 p_khr_id =>p_chr_id,
12373 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12374 p_primary_sty_id => l_level_type,
12375 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
12376 x_return_status => x_return_status,
12377 x_dependent_sty_id =>l_sty_id
12378 );
12379
12380 IF(x_return_status = 'E') THEN
12381 x_return_status := 'S';
12382 END IF;
12383
12384 ELSE
12385 get_dependent_stream_type
12386 (
12387 p_khr_id => p_chr_id,
12388 p_primary_sty_id => l_level_type,
12389 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
12390 x_return_status => x_return_status,
12391 x_dependent_sty_id =>l_sty_id
12392 );
12393
12394 IF x_return_status = 'E' THEN
12395 x_return_status := 'S';
12396 END IF;
12397 END IF;
12398
12399 IF(l_sty_id.id IS NOT NULL) THEN
12400 m := m + 1;
12401 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
12402 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
12403 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
12404 END IF;
12405
12406 --Bug 3410253 - End of Changes
12407
12408 idx := 0;
12409 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_lne_rec.id ) LOOP
12410 -- Start of Bug#2757289 modification
12411 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12412 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12413 (l_rl_rec.rule_information8 IS NOT NULL OR
12414 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12415 k := k + 1;
12416 idx := idx + 1;
12417 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12418 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
12419 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12420 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
12421 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
12422 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12423 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12424 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12425 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
12426
12427 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12428 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12429 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12430 --end if;
12431
12432 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12433 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12434 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12435
12436 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
12437 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12438 END IF;
12439
12440 -- Added by kthiruva on 29-Dec-2005.
12441 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12442 -- Bug 4915938 - Start of Changes
12443 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12444 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12445 ELSE
12446 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12447 END IF;
12448 -- Bug 4915938 - End of Changes
12449 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12450 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12451 (l_rl_rec.rule_information8 IS NULL OR
12452 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12453 -- End of Bug#2757289 modification
12454 k := k + 1;
12455 idx := idx + 1;
12456 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12457 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12458 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12459 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
12460 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12461 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12462 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12463 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12464 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
12465
12466 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12467 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12468 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12469 --end if;
12470
12471 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12472 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12473
12474 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
12475 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12476 END IF;
12477 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12478 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12479 ELSE
12480 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12481 END IF;
12482 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
12483 --11-Sep-09 sechawla 8798556
12484 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
12485 px_csm_periodic_expenses_tbl(k).date_start:= l_lne_rec.start_date;
12486 ELSE
12487 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12488 END IF;
12489 END IF;
12490 END LOOP; -- END-FOR-LOOP: l_rl_csr
12491 Else -- l_rl_csr2%NOTFOUND
12492 --Added by srsreeni for bug5841892
12493 -- m := m + 1;
12494 -- px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12495 --bug5841892 end of changes
12496
12497 get_primary_pricing_name
12498 (
12499 p_khr_id =>p_chr_id,
12500 p_sty_id =>l_level_type,
12501 x_return_status =>x_return_status,
12502 x_primary_pricing_name =>l_pricing_name
12503 );
12504 --Added by srsreeni for bug5841892
12505 if l_pricing_name is not null then
12506 m := m + 1;
12507 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12508 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12509 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
12510 end if;
12511
12512 --bug5841892 end of changes
12513 k := k + 1;
12514 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
12515 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12516 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12517 px_csm_periodic_expenses_tbl(k).period := 'M';
12518 px_csm_periodic_expenses_tbl(k).amount := l_lne_rec.amount;
12519 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
12520 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12521 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12522 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
12523
12524 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12525 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12526 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12527 --end if;
12528
12529 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
12530 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12531 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12532 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12533
12534 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
12535 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
12536 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
12537
12538 End If; -- end-if l_rl_csr2%FOUND
12539 CLOSE l_rl_csr2;
12540 End If; -- end-if l_fee_type = 'MISCELLANEOUS'
12541
12542 END IF; -- end-if: l_asset_association
12543
12544 ELSIF l_fee_type = 'FINANCED' THEN
12545 OPEN get_strm_name_fin_csr(p_chr_d => p_chr_id,
12546 p_cle_id => l_lne_rec.id);
12547 FETCH get_strm_name_fin_csr INTO l_strm_name_fin_rec;
12548 CLOSE get_strm_name_fin_csr;
12549
12550 /* ER# 5150038 */
12551 /* Getting the linked asset line for the current financed fee.
12552 * If there is an asset association, this cursor will return those linked asset association.
12553 * Only if the relevant payment is also associated to an asset, then use the amount allocated to
12554 * each asset as funding amount since the number of periods in expense is always 1.
12555 * You don't have to split the expense amount based on a ratio of amount allocated to each assets.
12556 */
12557 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
12558 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
12559
12560 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
12561 FETCH l_rl_csr2 INTO l_rl_rec2;
12562
12563 IF l_linked_asset_line_csr%FOUND AND
12564 l_rl_csr2%FOUND
12565 THEN
12566 l_asset_association := TRUE;
12567 ELSE
12568 l_asset_association := FALSE;
12569 END IF;
12570 CLOSE l_linked_asset_line_csr;
12571 CLOSE l_rl_csr2;
12572
12573 IF l_asset_association THEN
12574 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
12575 l := l + 1;
12576 px_csm_one_off_fee_tbl(l).description := l_strm_name_fin_rec.strm_name;
12577 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
12578 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12579 px_csm_one_off_fee_tbl(l).amount := l_linked_asset_line_rec.amount;
12580 px_csm_one_off_fee_tbl(l).date_paid := l_linked_asset_line_rec.start_date;
12581 px_csm_one_off_fee_tbl(l).kle_fee_id := l_linked_asset_line_rec.id;
12582
12583 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
12584 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12585 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
12586 --end if;
12587
12588 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
12589 FETCH l_rl_csr2 INTO l_rl_rec2;
12590 IF l_rl_csr2%FOUND THEN
12591 -- Code added and commented for user defined streams
12592 --m := m + 1;
12593 -- srsreeni - Bug#5699923 - Added - Start
12594 -- DONOT request SuperTrump to generate streams
12595 -- for TERMINATED lines
12596 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
12597
12598 IF(g_rep_req_yn = 'Y') THEN
12599
12600 get_dependent_stream_types
12601 (
12602 p_khr_id =>p_chr_id,
12603 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12604 p_primary_sty_id =>l_rl_rec2.object1_id1,
12605 x_return_status => x_return_status,
12606 x_dependent_sty_id =>l_strm_type_id_tbl
12607 );
12608 IF x_return_status = 'E' THEN
12609 x_return_status := 'S';
12610 END IF;
12611
12612 ELSE
12613 get_dependent_stream_types
12614 (
12615 p_khr_id =>p_chr_id,
12616 p_primary_sty_id =>l_rl_rec2.object1_id1,
12617 x_return_status => x_return_status,
12618 x_dependent_sty_id =>l_strm_type_id_tbl
12619 );
12620 IF x_return_status = 'E' THEN
12621 x_return_status := 'S';
12622 END IF;
12623 END IF;
12624
12625 IF l_strm_type_id_tbl.COUNT > 0 THEN
12626 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12627 m := m + 1;
12628
12629 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12630 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12631 px_csm_stream_types_tbl(m).kle_asset_id := l_linked_asset_line_rec.id;
12632 END LOOP;
12633 END IF;
12634 END IF; -- End of check for TERMINATED status
12635 -- srsreeni - Bug#5699923 - Added - End
12636
12637 OPEN strm_name_csr( l_rl_rec2.object1_id1);
12638 FETCH strm_name_csr INTO l_strm_name_rec;
12639 CLOSE strm_name_csr;
12640 l_level_type := l_rl_rec2.object1_id1;
12641 l_strm_name := l_strm_name_rec.name;
12642 idx := 0;
12643 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_linked_asset_line_rec.id) LOOP
12644 -- Start of Bug#2757289 modification
12645 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12646 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12647 (l_rl_rec.rule_information8 IS NOT NULL OR
12648 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12649 k := k + 1;
12650 idx := idx + 1;
12651 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12652 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
12653 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12654 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
12655 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
12656 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12657 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12658 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12659 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
12660
12661 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12662 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12663 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
12664 --end if;
12665 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12666 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12667 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12668
12669 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
12670 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
12671 END IF;
12672 -- End of Bug#2757289 modification
12673
12674 -- Added by kthiruva on 29-Dec-2005.
12675 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12676 -- Bug 4915938 - Start of Changes
12677 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12678 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12679 ELSE
12680 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12681 END IF;
12682 -- Bug 4915938 - End of Changes
12683
12684 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12685 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12686 (l_rl_rec.rule_information8 IS NULL OR
12687 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12688 k := k + 1;
12689 idx := idx + 1;
12690 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12691 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12692 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12693 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
12694 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
12695 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
12696 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12697 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
12698
12699 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12700 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12701 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
12702 --end if;
12703
12704 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12705 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12706 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12707
12708 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
12709 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
12710 END IF;
12711 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12712 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12713 ELSE
12714 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12715 END IF;
12716 IF(l_rl_rec.rule_information2 IS NULL OR
12717 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
12718 --11-Sep-09 sechawla 8798556
12719 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
12720 px_csm_periodic_expenses_tbl(k).date_start:= l_linked_asset_line_rec.start_date;
12721 ELSE
12722 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
12723 END IF;
12724 END IF;
12725 END LOOP;
12726
12727 END IF; -- l_rl_csr2%FOUND
12728 CLOSE l_rl_csr2;
12729 END LOOP; -- l_linked_asset_line_csr
12730 ELSE
12731 l := l + 1;
12732 px_csm_one_off_fee_tbl(l).description := l_strm_name_fin_rec.strm_name;
12733 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
12734 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12735 px_csm_one_off_fee_tbl(l).amount := l_strm_name_fin_rec.amount;
12736 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
12737 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
12738
12739 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
12740 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12741 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12742 --end if;
12743
12744 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
12745 FETCH l_rl_csr2 INTO l_rl_rec2;
12746 IF l_rl_csr2%FOUND THEN
12747 -- Code added and commented for user defined streams
12748 --m := m + 1;
12749 IF(g_rep_req_yn = 'Y') THEN
12750
12751 get_dependent_stream_types
12752 (
12753 p_khr_id =>p_chr_id,
12754 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12755 p_primary_sty_id =>l_rl_rec2.object1_id1,
12756 x_return_status => x_return_status,
12757 x_dependent_sty_id =>l_strm_type_id_tbl
12758 );
12759 IF x_return_status = 'E' THEN
12760 x_return_status := 'S';
12761 END IF;
12762
12763 ELSE
12764 get_dependent_stream_types
12765 (
12766 p_khr_id =>p_chr_id,
12767 p_primary_sty_id =>l_rl_rec2.object1_id1,
12768 x_return_status => x_return_status,
12769 x_dependent_sty_id =>l_strm_type_id_tbl
12770 );
12771 IF x_return_status = 'E' THEN
12772 x_return_status := 'S';
12773 END IF;
12774
12775 END IF;
12776
12777 IF l_strm_type_id_tbl.COUNT > 0 THEN
12778 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12779 m := m + 1;
12780
12781 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12782 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12783 px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
12784 END LOOP;
12785 END IF;
12786
12787 --px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
12788 --px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
12789
12790 --Added Code ends here
12791 OPEN strm_name_csr( l_rl_rec2.object1_id1);
12792 FETCH strm_name_csr INTO l_strm_name_rec;
12793 CLOSE strm_name_csr;
12794 l_level_type := l_rl_rec2.object1_id1;
12795 l_strm_name := l_strm_name_rec.name;
12796 idx := 0;
12797 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
12798 -- Start of Bug#2757289 modification
12799 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12800 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12801 (l_rl_rec.rule_information8 IS NOT NULL OR
12802 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12803 k := k + 1;
12804 idx := idx + 1;
12805 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12806 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
12807 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12808 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
12809 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
12810 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12811 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12812 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12813 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
12814
12815 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12816 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12817 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12818 --end if;
12819 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12820 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12821 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12822
12823 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
12824 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
12825 END IF;
12826 -- End of Bug#2757289 modification
12827
12828 -- Added by kthiruva on 29-Dec-2005.
12829 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12830 -- Bug 4915938 - Start of Changes
12831 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12832 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12833 ELSE
12834 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12835 END IF;
12836 -- Bug 4915938 - End of Changes
12837
12838 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12839 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12840 (l_rl_rec.rule_information8 IS NULL OR
12841 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12842 k := k + 1;
12843 idx := idx + 1;
12844 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12845 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
12846 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
12847 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
12848 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
12849 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
12850 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12851 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
12852
12853 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
12854 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12855 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
12856 --end if;
12857
12858 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12859 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12860 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12861
12862 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
12863 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
12864 END IF;
12865 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12866 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12867 ELSE
12868 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12869 END IF;
12870 IF(l_rl_rec.rule_information2 IS NULL OR
12871 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
12872 --11-Sep-09 sechawla 8798556
12873 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
12874 px_csm_periodic_expenses_tbl(k).date_start:=l_lne_rec.start_date;
12875 ELSE
12876 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
12877 END IF;
12878 END IF;
12879 END LOOP;
12880
12881 END IF; -- l_rl_csr2%FOUND
12882 CLOSE l_rl_csr2;
12883 END IF; -- l_asset_association
12884
12885 /* -- End of the process for Funding section considering asset association -- */
12886
12887
12888 -- Code added by HKPATEL 04-AUG-2004 for ROLLOVER QUOTE changes
12889
12890 ELSIF l_fee_type = 'ROLLOVER' THEN
12891 OPEN get_strm_name_abs_csr(p_chr_d => p_chr_id,
12892 p_cle_id => l_lne_rec.id);
12893 FETCH get_strm_name_abs_csr INTO l_strm_name_abs_rec;
12894 CLOSE get_strm_name_abs_csr;
12895
12896 l_link_fee_asset_yn := 'FALSE';
12897 -- Code for linked asset with rollover fee
12898 OPEN link_rollover_csr(l_lne_rec.id);
12899 FETCH link_rollover_csr INTO link_rollover_rec;
12900 IF link_rollover_csr%FOUND THEN
12901 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), link_rollover_rec.id );
12902 FETCH l_rl_csr2 INTO l_rl_rec2;
12903 IF l_rl_csr2%FOUND THEN
12904 l_link_fee_asset_yn := 'TRUE';
12905 END IF;
12906 CLOSE l_rl_csr2;
12907 END IF;
12908 CLOSE link_rollover_csr;
12909
12910 IF l_link_fee_asset_yn = 'TRUE' THEN
12911 FOR link_rollover_rec IN link_rollover_csr(l_lne_rec.id) LOOP
12912
12913 l := l + 1;
12914 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
12915 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
12916 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12917 px_csm_one_off_fee_tbl(l).amount := link_rollover_rec.amount;
12918 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
12919 px_csm_one_off_fee_tbl(l).kle_fee_id := link_rollover_rec.id;
12920
12921 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
12922 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
12923 px_csm_one_off_fee_tbl(l).orig_contract_line_id := link_rollover_rec.orig_contract_line_id;
12924 --end if;
12925
12926 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), link_rollover_rec.id );
12927 FETCH l_rl_csr2 INTO l_rl_rec2;
12928 IF l_rl_csr2%FOUND THEN
12929 /*m := m + 1;
12930 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
12931 px_csm_stream_types_tbl(m).kle_asset_id := link_rollover_rec.id;
12932 */
12933
12934 -- srsreeni - Bug#5699923 - Added - Start
12935 -- DONOT request SuperTrump to generate streams
12936 -- for TERMINATED lines
12937 IF link_rollover_rec.STE_CODE <> 'TERMINATED' THEN
12938 IF(g_rep_req_yn = 'Y') THEN
12939
12940 get_dependent_stream_types
12941 (
12942 p_khr_id =>p_chr_id,
12943 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12944 p_primary_sty_id =>l_rl_rec2.object1_id1,
12945 x_return_status => x_return_status,
12946 x_dependent_sty_id =>l_strm_type_id_tbl
12947 );
12948 IF x_return_status = 'E' THEN
12949 x_return_status := 'S';
12950 END IF;
12951
12952 ELSE
12953 get_dependent_stream_types
12954 (
12955 p_khr_id =>p_chr_id,
12956 p_primary_sty_id =>l_rl_rec2.object1_id1,
12957 x_return_status => x_return_status,
12958 x_dependent_sty_id =>l_strm_type_id_tbl
12959 );
12960 IF x_return_status = 'E' THEN
12961 x_return_status := 'S';
12962 END IF;
12963
12964 END IF;
12965
12966 IF l_strm_type_id_tbl.COUNT > 0 THEN
12967 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12968 m := m + 1;
12969 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12970 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12971 --smahapat for bug 4100031
12972 --px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
12973 px_csm_stream_types_tbl(m).kle_asset_id := link_rollover_rec.id;
12974 -- end change for bug 4100031
12975 END LOOP;
12976 END IF;
12977 END IF; -- End of check for TERMINATED status
12978 -- srsreeni - Bug#5699923 - Added - End
12979
12980
12981 OPEN strm_name_csr( l_rl_rec2.object1_id1);
12982 FETCH strm_name_csr INTO l_strm_name_rec;
12983 CLOSE strm_name_csr;
12984 l_level_type := l_rl_rec2.object1_id1;
12985 l_strm_name := l_strm_name_rec.name;
12986 idx := 0;
12987 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, link_rollover_rec.id) LOOP
12988 -- Start of Bug#2757289 modification
12989 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12990 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12991 (l_rl_rec.rule_information8 IS NOT NULL OR
12992 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12993 k := k + 1;
12994 idx := idx + 1;
12995 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
12996 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
12997 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12998 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
12999 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
13000 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13001 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13002 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
13003 px_csm_periodic_expenses_tbl(k).kle_fee_id := link_rollover_rec.id;
13004
13005 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
13006 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13007 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := link_rollover_rec.orig_contract_line_id;
13008 --end if;
13009
13010 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
13011 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
13012 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
13013
13014 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
13015 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
13016 END IF;
13017 -- End of Bug#2757289 modification
13018
13019 -- Added by kthiruva on 29-Dec-2005.
13020 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
13021 -- Bug 4915938 - Start of Changes
13022 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13023 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13024 ELSE
13025 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13026 END IF;
13027 -- Bug 4915938 - End of Changes
13028
13029 ELSIF (l_rl_rec.rule_information7 IS NULL OR
13030 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
13031 (l_rl_rec.rule_information8 IS NULL OR
13032 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
13033 k := k + 1;
13034 idx := idx + 1;
13035 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
13036 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
13037 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
13038 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
13039 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
13040 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
13041 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13042 px_csm_periodic_expenses_tbl(k).kle_fee_id := link_rollover_rec.id;
13043
13044 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
13045 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13046 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := link_rollover_rec.orig_contract_line_id;
13047 --end if;
13048
13049 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13050 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
13051 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
13052
13053 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
13054 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
13055 END IF;
13056 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13057 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13058 ELSE
13059 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13060 END IF;
13061 IF(l_rl_rec.rule_information2 IS NULL OR
13062 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
13063 --11-Sep-09 sechawla 8798556
13064 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
13065 px_csm_periodic_expenses_tbl(k).date_start:= link_rollover_rec.start_date;
13066 ELSE
13067 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
13068 END IF;
13069 END IF;
13070 END LOOP;
13071 END IF;
13072 CLOSE l_rl_csr2;
13073 END LOOP;
13074 END IF;
13075 -- Code for linked asset ends here
13076
13077 IF l_link_fee_asset_yn = 'FALSE' THEN
13078 l := l + 1;
13079 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
13080 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
13081 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13082 px_csm_one_off_fee_tbl(l).amount := l_strm_name_abs_rec.amount;
13083 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
13084 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
13085
13086 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
13087 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13088 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
13089 --end if;
13090
13091 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
13092 FETCH l_rl_csr2 INTO l_rl_rec2;
13093 IF l_rl_csr2%FOUND THEN
13094 /*
13095 m := m + 1;
13096 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
13097 px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
13098 */
13099 IF(g_rep_req_yn = 'Y') THEN
13100
13101 get_dependent_stream_types
13102 (
13103 p_khr_id =>p_chr_id,
13104 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
13105 p_primary_sty_id =>l_rl_rec2.object1_id1,
13106 x_return_status => x_return_status,
13107 x_dependent_sty_id =>l_strm_type_id_tbl
13108 );
13109 IF x_return_status = 'E' THEN
13110 x_return_status := 'S';
13111 END IF;
13112
13113 ELSE
13114 get_dependent_stream_types
13115 (
13116 p_khr_id =>p_chr_id,
13117 p_primary_sty_id =>l_rl_rec2.object1_id1,
13118 x_return_status => x_return_status,
13119 x_dependent_sty_id =>l_strm_type_id_tbl
13120 );
13121 IF x_return_status = 'E' THEN
13122 x_return_status := 'S';
13123 END IF;
13124
13125 END IF;
13126
13127 IF l_strm_type_id_tbl.COUNT > 0 THEN
13128 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
13129 m := m + 1;
13130 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
13131 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
13132 px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
13133 END LOOP;
13134 END IF;
13135
13136 OPEN strm_name_csr( l_rl_rec2.object1_id1);
13137 FETCH strm_name_csr INTO l_strm_name_rec;
13138 CLOSE strm_name_csr;
13139 l_level_type := l_rl_rec2.object1_id1;
13140 l_strm_name := l_strm_name_rec.name;
13141 idx := 0;
13142 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
13143 -- Start of Bug#2757289 modification
13144 IF (l_rl_rec.rule_information7 IS NOT NULL OR
13145 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
13146 (l_rl_rec.rule_information8 IS NOT NULL OR
13147 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
13148 k := k + 1;
13149 idx := idx + 1;
13150 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
13151 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
13152 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
13153 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
13154 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
13155 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13156 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13157 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
13158 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
13159
13160 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
13161 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13162 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
13163 --end if;
13164
13165 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
13166 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
13167 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
13168
13169 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
13170 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
13171 END IF;
13172 -- End of Bug#2757289 modification
13173
13174 -- Added by kthiruva on 29-Dec-2005.
13175 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
13176 -- Bug 4915938 - Start of Changes
13177 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13178 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13179 ELSE
13180 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13181 END IF;
13182 -- Bug 4915938 - End of Changes
13183
13184 ELSIF (l_rl_rec.rule_information7 IS NULL OR
13185 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
13186 (l_rl_rec.rule_information8 IS NULL OR
13187 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
13188 k := k + 1;
13189 idx := idx + 1;
13190 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
13191 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
13192 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
13193 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
13194 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
13195 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
13196 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13197 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
13198
13199 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
13200 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13201 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
13202 --end if;
13203
13204 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13205 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
13206 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
13207
13208 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
13209 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
13210 END IF;
13211 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13212 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13213 ELSE
13214 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13215 END IF;
13216 IF(l_rl_rec.rule_information2 IS NULL OR
13217 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
13218 --11-Sep-09 sechawla 8798556
13219 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
13220 px_csm_periodic_expenses_tbl(k).date_start:= l_lne_rec.start_date;
13221 ELSE
13222 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
13223 END IF;
13224 END IF;
13225 END LOOP;
13226 END IF;
13227 CLOSE l_rl_csr2;
13228 END IF;
13229
13230 --CLOSE link_rollover_csr;
13231
13232 -- Code added by HKPATEL 04-AUG-2004 for ROLLOVER QUOTE ends here
13233
13234 ELSIF l_fee_type = 'ABSORBED' THEN
13235 --Start of modification for Bug#3320656 BAKUCHIB Modified
13236 OPEN get_strm_name_abs_csr(p_chr_d => p_chr_id,
13237 p_cle_id => l_lne_rec.id);
13238 FETCH get_strm_name_abs_csr INTO l_strm_name_abs_rec;
13239 CLOSE get_strm_name_abs_csr;
13240
13241 /* ER# 5150038 */
13242 /* Getting the linked asset line for the current absorbed fee.
13243 * If absorbed fee is associated to assets, this cursor will return those linked asset association.
13244 * Use the amount allocated to each asset as one-time fee amount.
13245 * Since no payments are expected for absorbed fee,
13246 * you don't have to check if payment lines are associated to assets.
13247 */
13248 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
13249 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
13250
13251 IF l_linked_asset_line_csr%FOUND THEN
13252 l_asset_association := TRUE;
13253 ELSE
13254 l_asset_association := FALSE;
13255 END IF;
13256 CLOSE l_linked_asset_line_csr;
13257
13258 IF l_asset_association THEN
13259 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
13260 l := l + 1;
13261 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
13262 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
13263 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13264 px_csm_one_off_fee_tbl(l).amount := l_linked_asset_line_rec.amount;
13265 px_csm_one_off_fee_tbl(l).date_paid := l_linked_asset_line_rec.start_date;
13266 px_csm_one_off_fee_tbl(l).kle_fee_id := l_linked_asset_line_rec.id;
13267
13268 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
13269 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13270 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_linked_asset_line_rec.orig_contract_line_id;
13271 --end if;
13272
13273 -- gboomina BUG#4508077 changes start
13274 IF('RVI' = l_strm_name_abs_rec.fee_purpose_code) THEN
13275 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
13276 -- populating the interface table records if pricing name is not null
13277 -- vdamerla Bug6149951
13278 --vdamerla Bug6149951 start
13279 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
13280 get_primary_pricing_name
13281 (
13282 p_khr_id =>p_chr_id,
13283 p_sty_id =>l_strm_name_abs_rec.sty_id,
13284 x_return_status =>x_return_status,
13285 x_primary_pricing_name => l_pricing_name
13286 );
13287 IF l_pricing_name IS NOT NULL THEN
13288 m := m + 1;
13289 px_csm_stream_types_tbl(m).stream_type_id := l_strm_name_abs_rec.sty_id;
13290 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
13291 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
13292 END IF;
13293 -- vdamerla Forward Ported Bug6149951
13294 END IF;
13295 --Added by kthiruva on 03-Jan-2005
13296 --Dependents on Absorbd Fees need to be requested always
13297 --Bug 4918934 - Start of Changes
13298 END IF;
13299 -- vdamerla Forward Ported Bug6149951
13300 --srsreeni Bug6149951 start
13301 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
13302 --Bug 4918934 - End of Changes
13303 -- get dependent streams for the reporting product
13304 IF(g_rep_req_yn = 'Y') THEN
13305 get_dependent_stream_types(p_khr_id => p_chr_id,
13306 p_pdt_id => l_pdt_id_rec.report_pdt_id,
13307 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
13308 x_return_status => x_return_status,
13309 x_dependent_sty_id => l_strm_type_id_tbl);
13310 IF(x_return_status = 'E') THEN
13311 x_return_status := 'S';
13312 END IF;
13313 -- get dependent streams for the main product
13314 ELSE
13315 get_dependent_stream_types(p_khr_id => p_chr_id,
13316 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
13317 x_return_status => x_return_status,
13318 x_dependent_sty_id => l_strm_type_id_tbl);
13319 IF(x_return_status = 'E') THEN
13320 x_return_status := 'S';
13321 END IF;
13322 END IF; -- end of dependent streams block
13323 -- populate the dependent stream types
13324 IF l_strm_type_id_tbl.COUNT > 0 THEN
13325 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
13326 m := m + 1;
13327 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
13328 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
13329 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
13330 END LOOP;
13331 END IF; -- end of populate dependent stream types
13332 -- gboomina BUG#4508077 changes end
13333 END IF;--vdamerla Bug6149951 ends
13334
13335 --End of modification for Bug#3320656 BAKUCHIB Modified
13336 -- gboomina BUG#4598620 changes start
13337 -- requesting all ABSORBED fees as IDC fees
13338 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
13339 -- gboomina BUG#4598620 changes end
13340 END LOOP; -- l_linked_asset_line_csr
13341 ELSE
13342 l := l + 1;
13343 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
13344 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
13345 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13346 px_csm_one_off_fee_tbl(l).amount := l_strm_name_abs_rec.amount;
13347 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
13348 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
13349
13350 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
13351 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13352 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
13353 --end if;
13354
13355 -- gboomina BUG#4508077 changes start
13356 IF('RVI' = l_strm_name_abs_rec.fee_purpose_code) THEN
13357 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
13358 -- populating the interface table records if pricing name is not null
13359 get_primary_pricing_name
13360 (
13361 p_khr_id =>p_chr_id,
13362 p_sty_id =>l_strm_name_abs_rec.sty_id,
13363 x_return_status =>x_return_status,
13364 x_primary_pricing_name => l_pricing_name
13365 );
13366 IF l_pricing_name IS NOT NULL THEN
13367 m := m + 1;
13368 px_csm_stream_types_tbl(m).stream_type_id := l_strm_name_abs_rec.sty_id;
13369 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
13370 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
13371 END IF;
13372 --Added by kthiruva on 03-Jan-2005
13373 --Dependents on Absorbd Fees need to be requested always
13374 --Bug 4918934 - Start of Changes
13375 END IF;
13376 --Bug 4918934 - End of Changes
13377 -- get dependent streams for the reporting product
13378 IF(g_rep_req_yn = 'Y') THEN
13379 get_dependent_stream_types(p_khr_id => p_chr_id,
13380 p_pdt_id => l_pdt_id_rec.report_pdt_id,
13381 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
13382 x_return_status => x_return_status,
13383 x_dependent_sty_id => l_strm_type_id_tbl);
13384 IF(x_return_status = 'E') THEN
13385 x_return_status := 'S';
13386 END IF;
13387 -- get dependent streams for the main product
13388 ELSE
13389 get_dependent_stream_types(p_khr_id => p_chr_id,
13390 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
13391 x_return_status => x_return_status,
13392 x_dependent_sty_id => l_strm_type_id_tbl);
13393 IF(x_return_status = 'E') THEN
13394 x_return_status := 'S';
13395 END IF;
13396 END IF; -- end of dependent streams block
13397 -- populate the dependent stream types
13398 IF l_strm_type_id_tbl.COUNT > 0 THEN
13399 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
13400 m := m + 1;
13401 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
13402 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
13403 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
13404 END LOOP;
13405 END IF; -- end of populate dependent stream types
13406 -- gboomina BUG#4508077 changes end
13407
13408 --End of modification for Bug#3320656 BAKUCHIB Modified
13409 -- gboomina BUG#4598620 changes start
13410 -- requesting all ABSORBED fees as IDC fees
13411 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
13412 -- gboomina BUG#4598620 changes end
13413 END IF; -- l_asset_association
13414
13415 ELSIF l_fee_type = 'INCOME' THEN
13416 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
13417 FETCH l_rl_csr2 INTO l_rl_rec2;
13418 IF l_rl_csr2%FOUND THEN
13419 -- rabhupat BUG#4234441 start
13420 -- populating the interface table records if pricing name is not null
13421 get_primary_pricing_name
13422 (
13423 p_khr_id =>p_chr_id,
13424 p_sty_id =>l_rl_rec2.object1_id1,
13425 x_return_status =>x_return_status,
13426 x_primary_pricing_name =>l_pricing_name
13427 );
13428 IF l_pricing_name IS NOT NULL THEN
13429 -- rabhupat BUG#4234441 end
13430 m := m + 1;
13431 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
13432 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
13433
13434 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
13435 OPEN strm_name_csr( l_rl_rec2.object1_id1);
13436 FETCH strm_name_csr INTO l_strm_name_rec;
13437 CLOSE strm_name_csr;
13438 l_level_type := l_rl_rec2.object1_id1;
13439 l_strm_name := l_strm_name_rec.name;
13440 -- Bakuchib
13441 -- we need to find the number of payment levels for the income fees to
13442 -- decide weather we should send the one off table of records or
13443 -- Periodic expense table of records
13444 OPEN l_rl_income_csr(rlgpId => l_rl_rec2.slh_id,
13445 rgcode => 'LALEVL',
13446 rlcat => 'LASLL',
13447 chrId => p_chr_id,
13448 cleId => l_lne_rec.id);
13449 FETCH l_rl_income_csr INTO ln_level_cnt;
13450 CLOSE l_rl_income_csr;
13451 IF ln_level_cnt = 1 THEN
13452 -- Requesting for Amortized Fee Income streams Additionaly
13453 -- added and commented code for user defined streams
13454 IF(g_rep_req_yn = 'Y') THEN
13455
13456 get_dependent_stream_type
13457 (
13458 p_khr_id =>p_chr_id,
13459 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
13460 p_primary_sty_id => l_level_type,
13461 p_dependent_sty_purpose =>'AMORTIZE_FEE_INCOME',
13462 x_return_status => x_return_status,
13463 x_dependent_sty_id =>l_sty_id
13464 );
13465 IF(x_return_status = 'E') THEN
13466 x_return_status := 'S';
13467 END IF;
13468
13469 ELSE
13470 get_dependent_stream_type
13471 (
13472 p_khr_id => p_chr_id,
13473 p_primary_sty_id => l_level_type,
13474 p_dependent_sty_purpose =>'AMORTIZE_FEE_INCOME',
13475 x_return_status => x_return_status,
13476 x_dependent_sty_id =>l_sty_id
13477 );
13478 IF x_return_status = 'E' THEN
13479 x_return_status := 'S';
13480 END IF;
13481 END IF;
13482
13483 /*
13484 OPEN l_strmid_csr('AMORTIZED FEE INCOME');
13485 FETCH l_strmid_csr into l_strmid_rec;
13486 IF l_strmid_csr%NOTFOUND THEN
13487 OKL_API.set_message(p_app_name => G_APP_NAME,
13488 p_msg_name => G_LLA_NO_MATCHING_RECORD,
13489 p_token1 => G_COL_NAME_TOKEN,
13490 p_token1_value => 'AMORTIZED FEE INCOME');
13491 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13492 END IF;
13493 CLOSE l_strmid_csr;
13494 */
13495 -- added and commented code ends here.
13496 IF (l_sty_id.id IS NOT NULL) THEN
13497 m := m + 1;
13498 --px_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
13499 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
13500 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
13501 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
13502 END IF;
13503 l := l + 1;
13504 OPEN l_rl_csr(rlgpId => l_rl_rec2.slh_id,
13505 rgcode => 'LALEVL',
13506 rlcat => 'LASLL',
13507 chrId => p_chr_id,
13508 cleId => l_lne_rec.id);
13509 FETCH l_rl_csr INTO r_rl_rec;
13510 CLOSE l_rl_csr;
13511 px_csm_one_off_fee_tbl(l).description := l_strm_name;
13512 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
13513 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13514 px_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(r_rl_rec.rule_information6);
13515 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
13516 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
13517
13518 --sechawla 15-jul-09 PRB ESG enhancements : assign orig_contract_line_id
13519 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13520 px_csm_one_off_fee_tbl(l).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
13521 --end if;
13522
13523 ELSIF ln_level_cnt > 1 THEN
13524 -- Requesting for Amortized Fee Income streams Additionaly
13525 -- added and commented code for user defined streams
13526
13527 -- Put the rignt stream purpose 'ACCRUED_FEE_INCOME'- hkpatel- 4374085
13528 IF(g_rep_req_yn = 'Y') THEN
13529
13530 get_dependent_stream_type
13531 (
13532 p_khr_id =>p_chr_id,
13533 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
13534 p_primary_sty_id => l_level_type,
13535 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
13536 x_return_status => x_return_status,
13537 x_dependent_sty_id =>l_sty_id
13538 );
13539 IF(x_return_status = 'E') THEN
13540 x_return_status := 'S';
13541 END IF;
13542
13543 ELSE
13544 get_dependent_stream_type
13545 (
13546 p_khr_id => p_chr_id,
13547 p_primary_sty_id => l_level_type,
13548 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
13549 x_return_status => x_return_status,
13550 x_dependent_sty_id =>l_sty_id
13551 );
13552 IF x_return_status = 'E' THEN
13553 x_return_status := 'S';
13554 END IF;
13555 END IF;
13556
13557 -- End Put the rignt stream purpose 'ACCRUED_FEE_INCOME'- hkpatel- 4374085
13558 /*
13559 OPEN l_strmid_csr('FEE INCOME');
13560 FETCH l_strmid_csr into l_strmid_rec;
13561 IF l_strmid_csr%NOTFOUND THEN
13562 OKL_API.set_message(p_app_name => G_APP_NAME,
13563 p_msg_name => G_LLA_NO_MATCHING_RECORD,
13564 p_token1 => G_COL_NAME_TOKEN,
13565 p_token1_value => 'FEE INCOME');
13566 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13567 END IF;
13568 CLOSE l_strmid_csr;
13569 */
13570 IF(l_sty_id.id IS NOT NULL) THEN
13571 m := m + 1;
13572 --px_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
13573 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
13574 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
13575 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
13576 END IF;
13577 idx := 0;
13578 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
13579 -- Start of Bug#2757289 modification
13580 IF (l_rl_rec.rule_information7 IS NOT NULL OR
13581 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
13582 (l_rl_rec.rule_information8 IS NOT NULL OR
13583 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
13584 k := k + 1;
13585 idx := idx + 1;
13586 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
13587 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
13588 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
13589 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
13590 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
13591 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13592 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13593 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
13594
13595 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
13596 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13597 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
13598 --end if;
13599
13600 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
13601 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
13602 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
13603 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
13604
13605 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
13606 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
13607 END IF;
13608 -- End of Bug#2757289 modification
13609
13610 -- Added by kthiruva on 29-Dec-2005.
13611 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
13612 -- Bug 4915938 - Start of Changes
13613 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13614 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13615 ELSE
13616 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13617 END IF;
13618 -- Bug 4915938 - End of Changes
13619
13620 ELSIF (l_rl_rec.rule_information7 IS NULL OR
13621 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
13622 (l_rl_rec.rule_information8 IS NULL OR
13623 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
13624 k := k + 1;
13625 idx := idx + 1;
13626 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
13627 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
13628 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
13629 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
13630 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
13631 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
13632 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13633 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13634 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
13635
13636 --sechawla 15-jul-09 : PRb ESg enhancements : assign orig_contract_line_id
13637 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
13638 px_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_lne_rec.orig_contract_line_id;
13639 --end if;
13640
13641 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
13642 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
13643
13644 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
13645 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
13646 END IF;
13647 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13648 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13649 ELSE
13650 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13651 END IF;
13652 IF(l_rl_rec.rule_information2 IS NULL OR
13653 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
13654 --11-Sep-09 sechawla 8798556
13655 --px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
13656 px_csm_periodic_expenses_tbl(k).date_start:=l_lne_rec.start_date;
13657 ELSE
13658 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
13659 END IF;
13660 END IF;
13661
13662 -- RGOOTY: Bug 7552496: Start
13663 -- Issue: Periodic Income Streams are not correct when Fee starts later Contract Start Date
13664 -- Solution: Passing the Fee Start Date in okl_sif_fees_b.date_paid to pass it to SuperTrump
13665 -- using the StartAccrual tag only for the First Cash flow level
13666 IF idx = 1
13667 THEN
13668 IF(l_rl_rec.rule_information2 IS NULL OR
13669 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
13670 px_csm_periodic_expenses_tbl(k).date_paid := l_hdr_rec.start_date;
13671 ELSE
13672 px_csm_periodic_expenses_tbl(k).date_paid := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
13673 END IF;
13674 END IF;
13675 -- RGOOTY: Bug 7552496: End
13676
13677 END LOOP;
13678 END IF;
13679 -- rabhupat BUG#4234441 start
13680 END IF; -- end of pricing name check
13681 -- rabhupat BUG#4234441 end
13682 END IF;
13683 CLOSE l_rl_csr2;
13684 ElsIF( l_lne_rec.fee_type = 'SECDEPOSIT' ) THEN
13685
13686 extract_security_deposit( p_api_version => p_api_version,
13687 p_chr_id => TO_NUMBER(p_chr_id),
13688 p_deal_type => p_deal_type,
13689 p_init_msg_list => p_init_msg_list,
13690 x_return_status => x_return_status,
13691 x_msg_count => x_msg_count,
13692 x_msg_data => x_msg_data,
13693 px_csm_lease_header => px_csm_lease_header,
13694 px_csm_stream_types_tbl => px_csm_stream_types_tbl,
13695 px_csm_one_off_fee_tbl => px_csm_one_off_fee_tbl,
13696 px_csm_periodic_expenses_tbl => px_csm_periodic_expenses_tbl);
13697
13698 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
13699 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13700 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
13701 raise OKL_API.G_EXCEPTION_ERROR;
13702 End If;
13703
13704 k := px_csm_periodic_expenses_tbl.COUNT;
13705 l := px_csm_one_off_fee_tbl.COUNT;
13706 m := px_csm_stream_types_tbl.COUNT;
13707
13708 Else
13709
13710 okl_api.set_message(
13711 p_app_name => G_APP_NAME,
13712 p_msg_name => 'OKL_LLA_NO_FEETYPE');
13713 raise OKL_API.G_EXCEPTION_ERROR;
13714
13715 End If;
13716
13717 END LOOP;
13718
13719 print( l_api_name, 'end', x_return_status);
13720
13721 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
13722
13723 Exception
13724
13725 when OKL_API.G_EXCEPTION_ERROR THEN
13726
13727 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13728
13729 p_api_name => l_api_name,
13730 p_pkg_name => g_pkg_name,
13731 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
13732 x_msg_count => x_msg_count,
13733 x_msg_data => x_msg_data,
13734 p_api_type => g_api_type);
13735
13736 If(l_rl_csr1%ISOPEN) Then
13737 CLOSE l_rl_csr1;
13738 End If;
13739 If(l_rl_csr2%ISOPEN) Then
13740 CLOSE l_rl_csr2;
13741 End If;
13742
13743 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13744
13745 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13746 p_api_name => l_api_name,
13747 p_pkg_name => g_pkg_name,
13748 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
13749 x_msg_count => x_msg_count,
13750 x_msg_data => x_msg_data,
13751 p_api_type => g_api_type);
13752 If(l_rl_csr1%ISOPEN) Then
13753 CLOSE l_rl_csr1;
13754 End If;
13755 If(l_rl_csr2%ISOPEN) Then
13756 CLOSE l_rl_csr2;
13757 End If;
13758
13759 when OTHERS THEN
13760
13761 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13762 p_api_name => l_api_name,
13763 p_pkg_name => g_pkg_name,
13764 p_exc_name => 'OTHERS',
13765 x_msg_count => x_msg_count,
13766 x_msg_data => x_msg_data,
13767 p_api_type => g_api_type);
13768 If(l_rl_csr1%ISOPEN) Then
13769 CLOSE l_rl_csr1;
13770 End If;
13771 If(l_rl_csr2%ISOPEN) Then
13772 CLOSE l_rl_csr2;
13773 End If;
13774
13775 End extract_fee_lines;
13776 -- End modification 11i10 bakuchib
13777 -- Start modification 11i10 bakuchib
13778 PROCEDURE extract_params_loan_deal(
13779 p_api_version IN NUMBER,
13780 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
13781 p_chr_id IN VARCHAR2,
13782 p_deal_type IN VARCHAR2,
13783 x_return_status OUT NOCOPY VARCHAR2,
13784 x_msg_count OUT NOCOPY NUMBER,
13785 x_msg_data OUT NOCOPY VARCHAR2,
13786 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
13787 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
13788 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
13789 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
13790 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
13791 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
13792 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
13793 p_orp_code IN VARCHAR2 DEFAULT NULL ) AS
13794
13795 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_DEAL';
13796 l_api_version CONSTANT NUMBER := 1;
13797 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
13798 l_level_type NUMBER;
13799 l_strm_name VARCHAR2(200);
13800 i BINARY_INTEGER := 0;
13801 j BINARY_INTEGER := 0;
13802 k BINARY_INTEGER := 0;
13803 l BINARY_INTEGER := 0;
13804 m BINARY_INTEGER := 0;
13805 idx BINARY_INTEGER := 0;
13806 idx_exp BINARY_INTEGER := 0; -- bug6245602
13807 l_basis_percent NUMBER;
13808 styid NUMBER;
13809 -- l_pricing_name VARCHAR2(40); --02-Sep-11 SECHAWLA 12936702
13810 l_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
13811 l_salvage NUMBER;
13812 l_purchase_option VARCHAR2(256);
13813 l_deal_type VARCHAR2(256);
13814 l_purchase_option_amount NUMBER;
13815 l_msg_count Number;
13816 l_msg_data varchar2(2000);
13817 l_chr_id Number := TO_NUMBER(p_chr_id);
13818 l_cle_id Number;
13819 l_rgd_code Varchar2(30) := 'LAPSTH';
13820 l_rdf_code Varchar2(30) := 'LASTRM';
13821 l_rdf_name Varchar2(80) := 'xxx';
13822 l_id1 Varchar2(40);
13823 l_id2 Varchar2(200);
13824 l_name Varchar2(200);
13825 l_description Varchar2(2000);
13826 l_status Varchar2(1);
13827 l_start_date date;
13828 l_end_date date;
13829 l_org_id Number;
13830 l_inv_org_id Number;
13831 l_book_type_code Varchar2(15);
13832 l_select Varchar2(2000);
13833 l_msg_index_out Number;
13834 l_total_lending NUMBER;
13835 l_payment_exists BOOLEAN; --Added by bkatraga for bug 14529745
13836 l_down_payment_amt NUMBER; --Added by bkatraga for bug 15942693
13837
13838 Cursor l_struct_csr( chrId NUMBER ) is
13839 select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
13840 from OKC_RULE_GROUPS_B crg,
13841 OKC_RULES_B crl
13842 where crl.rgp_id = crg.id
13843 and crg.RGD_CODE = 'LALEVL'
13844 and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
13845 and crg.dnz_chr_id = chrId;
13846
13847
13848 l_line_rec l_line_rec_csr%ROWTYPE;
13849 l_lne_rec l_line_rec_csr%ROWTYPE;
13850 l_hdr_rec l_hdr_csr%ROWTYPE;
13851 l_rl_rec l_rl_csr%ROWTYPE;
13852 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
13853 l_rl_rec1 l_rl_csr1%ROWTYPE;
13854 l_tx_rec l_tx_csr%ROWTYPE;
13855 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
13856 l_strm_name_rec strm_name_csr%ROWTYPE;
13857 l_ib_rec ib_csr%ROWTYPE;
13858 l_struct_rec l_struct_csr%ROWTYPE;
13859 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
13860 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
13861 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
13862 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
13863 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
13864 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
13865 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
13866 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
13867 l_csm_line_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
13868 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
13869 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
13870
13871 --mansrini : Code for VR build
13872 CURSOR get_day_conv_on_contrct
13873 IS
13874 SELECT
13875 --Added by srsreeni for bug6076113
13876 -- rate_params.days_in_a_year_code,
13877 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
13878 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
13879 rate_params.days_in_a_year_code
13880 --srsreeni bug6076113 ends
13881 FROM okl_k_rate_params rate_params
13882 WHERE khr_id = p_chr_id;
13883
13884 CURSOR get_day_conv_on_sgt
13885 IS
13886 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
13887 gts.days_in_yr_code
13888 FROM
13889 okl_k_headers khr,
13890 okl_products_v pdt,
13891 okl_ae_tmpt_sets_v aes,
13892 OKL_ST_GEN_TMPT_SETS gts
13893 WHERE
13894 khr.pdt_id = pdt.id AND
13895 pdt.aes_id = aes.id AND
13896 aes.gts_id = gts.id AND
13897 khr.id = p_chr_id;
13898
13899 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
13900 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
13901
13902 --Added by kthiruva on 13-Sep-2005 for the VR build
13903 --The base rate defined on the contract is captured when the payment type is Principal
13904 CURSOR get_base_rate_csr(p_chr_id IN NUMBER,
13905 p_date IN DATE)
13906 IS
13907 SELECT PARM.BASE_RATE
13908 FROM OKL_K_RATE_PARAMS parm
13909 WHERE PARM.KHR_ID = p_chr_id
13910 AND PARM.PARAMETER_TYPE_CODE = 'ACTUAL'
13911 AND p_date BETWEEN EFFECTIVE_FROM_DATE AND NVL(EFFECTIVE_TO_DATE,p_date);
13912
13913
13914 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
13915 cursor get_rebook_type is
13916 select nvl(amort_inc_adj_rev_dt_yn, 'N')
13917 from okl_sys_acct_opts;
13918 l_PROSPECTIVE_REBOOK_YN varchar2(1);
13919
13920
13921 l_base_rate NUMBER;
13922 l_rent_sty_id strm_rec_type;
13923 --Added by kthiruva on 22-Nov-2005 for the Down Payment CR
13924 --Bug 4738011 - Start of Changes
13925 l_sty_id strm_rec_type;
13926 --Bug 4738011 - End of Changes
13927
13928 BEGIN
13929 --Added by kthiruva for Debugging
13930 write_to_log('Inside procedure extract_params_loan_deal');
13931
13932 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13933 -- Call start_activity to create savepoint, check compatibility
13934 -- and initialize message list
13935 x_return_status := OKL_API.START_ACTIVITY (
13936 l_api_name
13937 ,p_init_msg_list
13938 ,'_PVT'
13939 ,x_return_status);
13940 -- Check if activity started successfully
13941 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13942 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13943 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13944 RAISE OKL_API.G_EXCEPTION_ERROR;
13945 END IF;
13946
13947 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
13948 open get_rebook_type ;
13949 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN;
13950 close get_rebook_type;
13951
13952
13953 OPEN l_hdr_pdt_csr(p_chr_id);
13954 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
13955 CLOSE l_hdr_pdt_csr;
13956
13957 --get day convention info : mansrini
13958 OPEN get_day_conv_on_contrct;
13959 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
13960 CLOSE get_day_conv_on_contrct;
13961
13962 --Added by srsreeni for bug6076113
13963 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
13964 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
13965 --srsreeni bug6076113 ends
13966 THEN
13967 OPEN get_day_conv_on_sgt;
13968 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
13969 CLOSE get_day_conv_on_sgt;
13970 END IF;
13971
13972 --Added by kthiruva for Debugging
13973 write_to_log('Prior to the call to validate_payments');
13974 -- Validate the payments
13975 validate_payments(p_api_version => p_api_version,
13976 p_init_msg_list => p_init_msg_list,
13977 x_return_status => x_return_status,
13978 x_msg_count => x_msg_count,
13979 x_msg_data => x_msg_data,
13980 p_khr_id => p_chr_id,
13981 p_paym_tbl => l_pay_tbl);
13982 --Added by kthiruva for Debugging
13983 write_to_log('After the call to validate_payments, the return status is :'|| x_return_status);
13984 write_to_log('After the call to validate_payments, the error message is :' || x_msg_data );
13985 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13986 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13987 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13988 RAISE OKL_API.G_EXCEPTION_ERROR;
13989 END IF;
13990 i := 0; j := 0; k := 0; l := 0; m := 0;
13991
13992 -- Header infro
13993 OPEN l_hdr_csr(p_chr_id);
13994 FETCH l_hdr_csr into l_hdr_rec;
13995 IF l_hdr_csr%NOTFOUND THEN
13996 --Added by kthiruva for Debugging
13997 write_to_log('Cursor l_hdr_csr not found ');
13998 okl_api.set_message(p_app_name => G_APP_NAME,
13999 p_msg_name => G_LLA_NO_MATCHING_RECORD,
14000 p_token1 => G_COL_NAME_TOKEN,
14001 p_token1_value => 'Contract id');
14002 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14003 END IF;
14004 CLOSE l_hdr_csr;
14005 l_csm_loan_header.khr_id := p_chr_id;
14006 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
14007 l_csm_loan_header.date_start := l_hdr_rec.start_date;
14008 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
14009 IF ( p_deal_type IS NULL ) THEN
14010 l_deal_type := l_hdr_rec.deal_type;
14011 ELSE
14012 l_deal_type := p_deal_type;
14013 END IF;
14014 -- Fetching the location of the asset
14015 OPEN ib_csr(TO_NUMBER(p_chr_id));
14016 FETCH ib_csr into l_ib_rec;
14017 IF ib_csr%NOTFOUND THEN
14018 --Added by kthiruva for Debugging
14019 write_to_log('Cursor ib_csr not found ');
14020 okl_api.set_message(p_app_name => G_APP_NAME,
14021 p_msg_name => G_LLA_NO_MATCHING_RECORD,
14022 p_token1 => G_COL_NAME_TOKEN,
14023 p_token1_value => 'Contract id');
14024 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14025 END IF;
14026 CLOSE ib_csr;
14027 l_csm_loan_header.country := l_ib_rec.country;
14028 IF p_orp_code IS NOT NULL
14029 THEN
14030 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_UPGRADE;
14031 ELSE
14032 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
14033 END IF;
14034 -- l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
14035 -- Callling the formual ccontract cap amount
14036 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
14037 --The Capital Reduction should not be removed from the Funding amount
14038 --Bug 4738011 - Start of Changes
14039
14040 --Added by kthiruva for Debugging
14041 write_to_log('Prior to the call to execute_formula');
14042
14043 execute_formula(p_api_version => p_api_version,
14044 p_init_msg_list => p_init_msg_list,
14045 x_return_status => x_return_status,
14046 x_msg_count => x_msg_count,
14047 x_msg_data => x_msg_data,
14048 p_formula_name => 'CONTRACT_CAP_AMNT_LOAN',
14049 p_contract_id => p_chr_id,
14050 p_line_id => NULL,
14051 x_value => l_total_lending);
14052
14053 --Added by kthiruva for Debugging
14054 write_to_log('After the call to execute_formula, the return status is :'||x_return_status);
14055 --Bug 4738011 - End of Changes
14056 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14057 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
14058 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14059 RAISE OKL_API.G_EXCEPTION_ERROR;
14060 END IF;
14061 l_csm_loan_header.total_lending := l_total_lending;
14062 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
14063 -- asset infor
14064 FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
14065 i := i + 1;
14066 idx := 0;
14067 idx_exp := 0; -- bug6245602
14068 --Added by bkatraga for bug 14529745
14069 l_payment_exists := FALSE;
14070 l_csm_loan_levels_tbl(i).kle_loan_id := l_line_rec.id;
14071
14072 --sechawla 27-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id for loans
14073 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14074 l_csm_loan_levels_tbl(i).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14075 end if;
14076
14077 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
14078 --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
14079 --payment tag in the Lending Loans tag of the Outbound XML.
14080 --Bug 4738011 - Start of Changes
14081 IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
14082 l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
14083
14084 --Added by bkatraga for bug 15942693
14085 IF(l_line_rec.capital_reduction IS NULL) THEN
14086 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
14087 l_csm_loan_levels_tbl(i).down_payment_amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
14088 ELSE
14089 l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
14090 END IF;
14091 --end bkatraga for bug 15942693
14092 END IF;
14093 --Bug 4738011 - End of Changes
14094 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14095 --Added by bkatraga for bug 14529745
14096 l_payment_exists := TRUE;
14097 l_level_type := l_rl_rec1.object1_id1;
14098
14099 OPEN strm_name_csr ( l_level_type );
14100 FETCH strm_name_csr into l_strm_name_rec;
14101 IF strm_name_csr%NOTFOUND THEN
14102 okl_api.set_message(p_app_name => G_APP_NAME,
14103 p_msg_name => G_LLA_NO_MATCHING_RECORD,
14104 p_token1 => G_COL_NAME_TOKEN,
14105 p_token1_value => 'Contract id');
14106 x_return_status := OKL_API.G_RET_STS_ERROR;
14107 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
14108 END IF;
14109 CLOSE strm_name_csr;
14110 --l_strm_name := l_strm_name_rec.name;
14111 l_strm_name := l_strm_name_rec.stream_type_purpose;
14112 -- srsreeni - Bug#5699923 - Added - Start
14113 -- DONOT request SuperTrump to generate streams
14114 -- for TERMINATED lines
14115 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14116 --Modified by kthiruva for the VR build
14117 --Including PRINCIPAL_PAYMENT Stream in the condition.
14118 --From OKL.H,in addition to Rent, Payment of type Principal can also be defined on assets
14119 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
14120 IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
14121 --srsreeni Bug6245602 ends
14122 --Added by srsreeni for bug5841892
14123 -- m := m + 1;
14124 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
14125 --bug5841892 end of changes
14126 get_dependent_pricing_name
14127 (
14128 p_khr_id =>p_chr_id,
14129 p_sty_id =>l_level_type,
14130 x_return_status =>x_return_status,
14131 x_dependent_pricing_name =>l_pricing_name
14132 );
14133 --Added by srsreeni for bug5841892
14134 if l_pricing_name is not null then
14135 m := m + 1;
14136 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
14137 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
14138 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14139 end if;
14140 --bug5841892 end of changes
14141 END IF;
14142 --idx := 0;
14143 --Added by kthiruva on 16-Nov-2005 for the Down Payment CR
14144 --Bug 4738011 - Start of Changes
14145 IF( UPPER(TRIM(l_strm_name)) ='DOWN_PAYMENT' ) THEN
14146 --Added by srsreeni for bug5841892
14147 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
14148 --bug5841892 end of changes
14149 get_primary_pricing_name
14150 (
14151 p_khr_id =>p_chr_id,
14152 p_sty_id =>l_level_type,
14153 x_return_status =>x_return_status,
14154 x_primary_pricing_name =>l_pricing_name
14155 );
14156 IF x_return_status = 'E' THEN
14157 x_return_status := 'S';
14158 END IF;
14159 --Added by srsreeni for bug5841892
14160 if l_pricing_name is not null then
14161 m:=m+1; --added to increase the counter
14162 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
14163 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
14164 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14165 end if;
14166 --bug5841892 end of changes
14167 END IF;
14168 --Bug 4738011 - End of Changes
14169 END IF; -- End of check for TERMINATED status
14170 -- srsreeni - Bug#5699923 - Added - End
14171
14172 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
14173 -- srsreeni - Bug#5699923 - Added - Start
14174 -- DONOT request SuperTrump to generate streams
14175 -- for TERMINATED lines
14176 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14177 IF(g_rep_req_yn = 'Y') THEN
14178 get_dependent_stream_types
14179 (
14180 p_khr_id =>p_chr_id,
14181 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14182 p_primary_sty_id =>l_level_type,
14183 x_return_status => x_return_status,
14184 x_dependent_sty_id =>l_strm_type_id_tbl
14185 );
14186 IF x_return_status = 'E' THEN
14187 x_return_status := 'S';
14188 END IF;
14189 ELSE
14190 get_dependent_stream_types
14191 (
14192 p_khr_id =>p_chr_id,
14193 p_primary_sty_id =>l_level_type,
14194 x_return_status => x_return_status,
14195 x_dependent_sty_id =>l_strm_type_id_tbl
14196 );
14197 IF x_return_status = 'E' THEN
14198 x_return_status := 'S';
14199 END IF;
14200 END IF;
14201 IF l_strm_type_id_tbl.COUNT > 0 THEN
14202 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
14203 m := m + 1;
14204 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
14205 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
14206 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14207 END LOOP;
14208 END IF;
14209 END IF; -- End of check for TERMINATED status
14210 -- srsreeni - Bug#5699923 - Added - End
14211 j := j + 1;
14212 idx := idx + 1;
14213 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14214 l_csm_line_details_tbl(j).description := 'Funding';
14215
14216 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14217 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14218 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14219 end if;
14220
14221 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
14222 --The Capital Reduction should not be removed from the Funding amount
14223 --Bug 4738011 - Start of Changes
14224 execute_formula(p_api_version => p_api_version,
14225 p_init_msg_list => p_init_msg_list,
14226 x_return_status => x_return_status,
14227 x_msg_count => x_msg_count,
14228 x_msg_data => x_msg_data,
14229 p_formula_name => 'LINE_CAP_AMNT_LOAN',
14230 p_contract_id => p_chr_id,
14231 p_line_id => l_line_rec.id,
14232 x_value => l_total_lending);
14233 --Bug 4738011 - End of Changes
14234 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14235 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
14236 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14237 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
14238 END IF;
14239 l_csm_line_details_tbl(j).amount := l_total_lending;
14240 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
14241 --Bug 4576794 - Start of Changes
14242 --When a funding date is specified on the asset,it needs to be used as the date_start
14243 --When funding date is not specified, we use the contract start date
14244
14245 --sechawla 11-sep-09 8798556 : When funding date is not specified, use asset start date, instead of contract start dt
14246 --l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
14247 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_line_rec.start_date);
14248
14249 --Bug 4576794 - End of Changes
14250 l_csm_line_details_tbl(j).level_index_number := idx;
14251 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14252 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14253 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14254
14255 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
14256 --If the Down Payment is capitalised then , a new funding line with the opposite sign
14257 --needs to be added
14258 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
14259 --Bug 4738011 - Start of Changes
14260 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
14261 j := j + 1;
14262 idx := idx + 1;
14263 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14264
14265 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14266 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14267 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14268 end if;
14269
14270 l_csm_line_details_tbl(j).description := 'Funding';
14271
14272 --Added by bkatraga for bug 15942693
14273 IF(l_line_rec.capital_reduction IS NULL) THEN
14274 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
14275 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
14276 ELSE
14277 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction;
14278 END IF;
14279 l_csm_line_details_tbl(j).amount := l_csm_line_details_tbl(j).amount * (-1);
14280 --end bkatraga for bug 15942693
14281
14282 --sechawla 11-sep-09 8798556 :
14283 --l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
14284 l_csm_line_details_tbl(j).date_start := l_line_rec.start_date;
14285
14286 l_csm_line_details_tbl(j).level_index_number := idx;
14287 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14288 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14289 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14290 -- srsreeni - Bug#5699923 - Added - Start
14291 -- DONOT request SuperTrump to generate streams
14292 -- for TERMINATED lines
14293 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14294
14295 --Fetching and Requesting the Capital Reduction stream type if it has been defined on
14296 --the Stream Generation Template
14297 get_primary_stream_type
14298 (
14299 p_khr_id => p_chr_id,
14300 p_primary_sty_purpose => 'CAPITAL_REDUCTION',
14301 x_return_status => x_return_status,
14302 x_primary_sty_id =>l_sty_id
14303 );
14304 IF x_return_status = 'E' THEN
14305 x_return_status := 'S';
14306 END IF;
14307 IF (l_sty_id.id IS NOT NULL ) THEN
14308 m := m + 1;
14309 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
14310 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
14311 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14312 END IF;
14313 END IF;
14314 END IF; -- End of check for TERMINATED status
14315 -- srsreeni - Bug#5699923 - Added - End
14316 --Bug 4738011 - End of Changes
14317
14318
14319 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14320 -- Start of Bug#2757289 modification
14321 IF (l_rl_rec.rule_information7 IS NOT NULL OR
14322 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14323 (l_rl_rec.rule_information8 IS NOT NULL OR
14324 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14325 j := j + 1;
14326 idx := idx + 1;
14327 l_csm_line_details_tbl(j).level_index_number := idx;
14328 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
14329 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
14330 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14331 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14332 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14333 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14334
14335 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14336 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14337 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14338 end if;
14339
14340 l_csm_line_details_tbl(j).description := l_strm_name;
14341 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14342 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14343 --Added by kthiruva on 09-Dec-2005
14344 --This rate column is relevant for rent payments only in the rebook scenarios
14345 --after a reamort
14346 --Bug 4766555 - Start of Changes
14347 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
14348 --Bug 4766555 - End of Changes
14349
14350 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14351 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14352 ELSE
14353 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14354 END IF;
14355 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14356 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14357 END IF;
14358 -- End of Bug#2757289 modification
14359
14360 -- Added by kthiruva on 29-Dec-2005.
14361 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
14362 -- Bug 4915938 - Start of Changes
14363 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14364 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14365 ELSE
14366 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14367 END IF;
14368 -- Bug 4915938 - End of Changes
14369
14370 ELSIF (l_rl_rec.rule_information7 IS NULL OR
14371 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14372 (l_rl_rec.rule_information8 IS NULL OR
14373 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14374 j := j + 1;
14375 idx := idx + 1;
14376 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14377
14378 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14379 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14380 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14381 end if;
14382
14383 l_csm_line_details_tbl(j).description := l_strm_name;
14384 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14385 --Modified by kthiruva on 09-Dec-2005 for the VR build
14386 --Bug 4766555 - Start of Changes
14387 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
14388 --Bug 4766555 - End of Changes
14389 l_csm_line_details_tbl(j).level_index_number := idx;
14390 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14391 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14392 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
14393 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14394 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14395 --Added by kthiruva on 09-Dec-2005
14396 --This rate column is relevant for rent payments only in the rebook scenarios
14397 --after a reamort
14398 --Bug 4766555 - Start of Changes
14399 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
14400 --Bug 4766555 - End of Changes
14401
14402 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14403 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14404 END IF;
14405 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14406 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14407 ELSE
14408 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14409 END IF;
14410 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14411 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14412 ELSE
14413 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14414 END IF;
14415 END IF;
14416 END LOOP;
14417 --Code for the new payment type 'PRINCIPAL_PAYMENT' that is allowed for Loan Contracts
14418 --Added by kthiruva on 13-Sep-2005 for the VR Build
14419 --Bug - Start of Changes
14420 ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
14421 IF(g_rep_req_yn = 'Y') THEN
14422 --Added by kthriuva for VR build
14423 --For payment of type principal, we need to request the dependents
14424 --on Rent. Hence obtaining the stream type id of Rent
14425 get_primary_no_prc_stream_type
14426 (
14427 p_khr_id =>p_chr_id,
14428 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14429 p_primary_sty_purpose =>'RENT',
14430 x_return_status => x_return_status,
14431 x_primary_sty_id => l_rent_sty_id
14432 );
14433 --kthriuva - End of Changes for VR build
14434 get_dependent_stream_types
14435 (
14436 p_khr_id =>p_chr_id,
14437 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14438 p_primary_sty_id =>l_rent_sty_id.id,
14439 x_return_status => x_return_status,
14440 x_dependent_sty_id =>l_strm_type_id_tbl
14441 );
14442 IF x_return_status = 'E' THEN
14443 x_return_status := 'S';
14444 END IF;
14445 ELSE
14446 --Added by kthriuva for VR build
14447 --For payment of type principal, we need to request the dependents
14448 --on Rent. Hence obtaining the stream type id of Rent
14449 get_primary_no_prc_stream_type
14450 (
14451 p_khr_id =>p_chr_id,
14452 p_pdt_id =>l_pdt_id_rec.pid,
14453 p_primary_sty_purpose =>'RENT',
14454 x_return_status => x_return_status,
14455 x_primary_sty_id => l_rent_sty_id
14456 );
14457
14458 --kthriuva - End of Changes for VR build
14459 get_dependent_stream_types
14460 (
14461 p_khr_id =>p_chr_id,
14462 p_primary_sty_id =>l_rent_sty_id.id,
14463 x_return_status => x_return_status,
14464 x_dependent_sty_id =>l_strm_type_id_tbl
14465 );
14466 IF x_return_status = 'E' THEN
14467 x_return_status := 'S';
14468 END IF;
14469 END IF;
14470 --Fetching the base rate
14471 OPEN get_base_rate_csr(p_chr_id => p_chr_id,
14472 p_date => l_hdr_rec.start_date);
14473 FETCH get_base_rate_csr INTO l_base_rate;
14474 IF get_base_rate_csr%NOTFOUND THEN
14475 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
14476 p_msg_name => 'OKL_LLAP_BASE_RATE_NOT_DEF');
14477 RAISE Okl_Api.G_EXCEPTION_ERROR;
14478 END IF;
14479 CLOSE get_base_rate_csr;
14480 -- srsreeni - Bug#5699923 - Added - Start
14481 -- DONOT request SuperTrump to generate streams
14482 -- for TERMINATED lines
14483 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14484 IF l_strm_type_id_tbl.COUNT > 0 THEN
14485 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
14486 m := m + 1;
14487 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
14488 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
14489 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14490 END LOOP;
14491 END IF;
14492 END IF; -- End of check for TERMINATED status
14493 -- srsreeni - Bug#5699923 - Added - End
14494 j := j + 1;
14495 idx := idx + 1;
14496 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14497
14498 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14499 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14500 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14501 end if;
14502
14503 l_csm_line_details_tbl(j).description := 'Funding';
14504 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
14505 --The Capital Reduction should not be removed from the Funding amount
14506 --Bug 4738011 - Start of Changes
14507 execute_formula(p_api_version => p_api_version,
14508 p_init_msg_list => p_init_msg_list,
14509 x_return_status => x_return_status,
14510 x_msg_count => x_msg_count,
14511 x_msg_data => x_msg_data,
14512 p_formula_name => 'LINE_CAP_AMNT_LOAN',
14513 p_contract_id => p_chr_id,
14514 p_line_id => l_line_rec.id,
14515 x_value => l_total_lending);
14516 --Bug 4738011 - End of Changes
14517 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14518 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
14519 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14520 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
14521 END IF;
14522 l_csm_line_details_tbl(j).amount := l_total_lending;
14523 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
14524 --Bug 4576794 - Start of Changes
14525 --When a funding date is specified on the asset,it needs to be used as the date_start
14526 --When funding date is not specified, we use the contract start date
14527
14528 --sechawla 11-sep-09 8798556 : When funding date is not specified, use asset start date, instead of contract start dt
14529 --l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
14530 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_line_rec.start_date);
14531
14532
14533 --Bug 4576794 - End of Changes
14534 l_csm_line_details_tbl(j).level_index_number := idx;
14535 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14536 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14537 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14538
14539 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
14540 --If the Down Payment is capitalised then , a new funding line with the opposite sign
14541 --needs to be added
14542 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
14543 --Bug 4738011 - Start of Changes
14544 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
14545 j := j + 1;
14546 idx := idx + 1;
14547 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14548
14549 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14550 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14551 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14552 end if;
14553
14554 l_csm_line_details_tbl(j).description := 'Funding';
14555
14556 --Added by bkatraga for bug 15942693
14557 IF(l_line_rec.capital_reduction IS NULL) THEN
14558 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
14559 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
14560 ELSE
14561 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction;
14562 END IF;
14563 l_csm_line_details_tbl(j).amount := l_csm_line_details_tbl(j).amount * (-1);
14564 --end bkatraga for bug 15942693
14565
14566 --sechawla 11-sep-09 8798556
14567 --l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
14568 l_csm_line_details_tbl(j).date_start := l_line_rec.start_date;
14569
14570 l_csm_line_details_tbl(j).level_index_number := idx;
14571 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14572 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14573 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14574 -- srsreeni - Bug#5699923 - Added - Start
14575 -- DONOT request SuperTrump to generate streams
14576 -- for TERMINATED lines
14577 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14578
14579 --Fetching and Requesting the Capital Reduction stream type if it has been defined on
14580 --the Stream Generation Template
14581 get_primary_stream_type
14582 (
14583 p_khr_id => p_chr_id,
14584 p_primary_sty_purpose => 'CAPITAL_REDUCTION',
14585 x_return_status => x_return_status,
14586 x_primary_sty_id =>l_sty_id
14587 );
14588 IF x_return_status = 'E' THEN
14589 x_return_status := 'S';
14590 END IF;
14591 IF (l_sty_id.id IS NOT NULL ) THEN
14592 m := m + 1;
14593 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
14594 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
14595 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14596 END IF;
14597
14598 END IF; -- End of check for TERMINATED status
14599 -- srsreeni - Bug#5699923 - Added - End
14600 END IF;
14601 --Bug 4738011 - End of Changes
14602
14603 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14604 -- Start of Bug#2757289 modification
14605 IF (l_rl_rec.rule_information7 IS NOT NULL OR
14606 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14607 (l_rl_rec.rule_information8 IS NOT NULL OR
14608 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14609 j := j + 1;
14610 idx := idx + 1;
14611 l_csm_line_details_tbl(j).level_index_number := idx;
14612 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
14613 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
14614 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14615 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14616 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14617 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14618
14619 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14620 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14621 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14622 end if;
14623
14624 l_csm_line_details_tbl(j).description := l_strm_name;
14625 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14626 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14627 --When the payment type is Principal, the Base Rate specified in the contract needs to be
14628 --captured and passed. This rate is used in calculation of the Interest Payment Streams
14629 --Modified by kthiruva on 09-Dec-2005
14630 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
14631 --l_base_Rate needs to be used.
14632 --Bug 4766555 - Start of Changes
14633 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
14634 --Bug 4766555 - End of Changes
14635
14636 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14637 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14638 ELSE
14639 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14640 END IF;
14641
14642 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14643 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14644 END IF;
14645
14646 -- End of Bug#2757289 modification
14647
14648 -- Added by kthiruva on 29-Dec-2005.
14649 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
14650 -- Bug 4915938 - Start of Changes
14651 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14652 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14653 ELSE
14654 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14655 END IF;
14656 -- Bug 4915938 - End of Changes
14657
14658 ELSIF (l_rl_rec.rule_information7 IS NULL OR
14659 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14660 (l_rl_rec.rule_information8 IS NULL OR
14661 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14662 j := j + 1;
14663 idx := idx + 1;
14664 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14665
14666 --sechawla 15-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id
14667 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14668 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14669 end if;
14670
14671 l_csm_line_details_tbl(j).description := l_strm_name;
14672 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14673 --Modified by kthiruva on 09-Dec-2005 for the VR build
14674 --Bug 4766555 - Start of Changes
14675 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
14676 --Bug 4766555 - End of Changes
14677 l_csm_line_details_tbl(j).level_index_number := idx;
14678 --Modified by kthiruva on 09-Nov-2005.The level type should be
14679 --set as PRINCIPAL as the payment type is PRINCIPAL_PAYMENT
14680 --Bug 4726209 - Start of Changes
14681 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14682 --Bug 4726209 - End of Changes
14683 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14684 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
14685 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14686 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14687 --When the payment type is Principal, the Base Rate specified in the contract needs to be
14688 --captured and passed. This rate is used in calculation of the Interest Payment Streams
14689 --Modified by kthiruva on 09-Dec-2005
14690 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
14691 --l_base_Rate needs to be used.
14692 --Bug 4766555 - Start of Changes
14693 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
14694 --Bug 4766555 - End of Changes
14695
14696 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14697 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14698 END IF;
14699 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14700 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14701 ELSE
14702 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14703 END IF;
14704 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14705 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14706 ELSE
14707 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14708 END IF;
14709 END IF;
14710 END LOOP;
14711
14712 -- Code for Estimated Property Tax Starts Here
14713 ELSIF( UPPER(TRIM(l_strm_name)) = 'ESTIMATED_PROPERTY_TAX' ) THEN
14714 --srsreeni Bug6245602 start. Added logic to request for streams
14715 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14716 get_primary_pricing_name
14717 (
14718 p_khr_id =>p_chr_id,
14719 p_sty_id =>l_level_type,
14720 x_return_status =>x_return_status,
14721 x_primary_pricing_name =>l_pricing_name
14722 );
14723 IF x_return_status = 'E' THEN
14724 x_return_status := 'S';
14725 END IF;
14726 if l_pricing_name is not null then
14727 m:=m+1; --added to increase the counter
14728 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
14729 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
14730 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14731 end if;
14732 --get dependent
14733 IF(g_rep_req_yn = 'Y') THEN
14734 get_dependent_stream_types
14735 (
14736 p_khr_id =>p_chr_id,
14737 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14738 p_primary_sty_id =>l_level_type,
14739 x_return_status => x_return_status,
14740 x_dependent_sty_id =>l_strm_type_id_tbl
14741 );
14742 IF x_return_status = 'E' THEN
14743 x_return_status := 'S';
14744 END IF;
14745 ELSE
14746 get_dependent_stream_types
14747 (
14748 p_khr_id =>p_chr_id,
14749 p_primary_sty_id =>l_level_type,
14750 x_return_status => x_return_status,
14751 x_dependent_sty_id =>l_strm_type_id_tbl
14752 );
14753 IF x_return_status = 'E' THEN
14754 x_return_status := 'S';
14755 END IF;
14756 END IF;
14757 IF l_strm_type_id_tbl.COUNT > 0 THEN
14758 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
14759 m := m + 1;
14760 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
14761 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
14762 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14763 END LOOP;
14764 end if;
14765 end if;
14766 --srsreeni Bug6245602 end
14767 FOR l_rl_rec in l_rl_csr(l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14768 IF (l_rl_rec.rule_information7 IS NOT NULL OR
14769 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14770 (l_rl_rec.rule_information8 IS NOT NULL OR
14771 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14772 k := k + 1;
14773 -- idx := idx + 1; bug6245602
14774 idx_exp := idx_exp + 1; -- bug6245602
14775 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp; -- bug6245602
14776 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
14777 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
14778 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
14779 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
14780 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14781 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14782 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
14783 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
14784
14785 --sechawla 16-Jul-09 PRb ESg enhancements : assign orig_contract_line_id
14786 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14787 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14788 end if;
14789
14790 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
14791 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
14792 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14793 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14794
14795 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14796 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14797 END If;
14798
14799 -- Added by kthiruva on 29-Dec-2005.
14800 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
14801 -- Bug 4915938 - Start of Changes
14802 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14803 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14804 ELSE
14805 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14806 END IF;
14807 -- Bug 4915938 - End of Changes
14808
14809 ELSIF (l_rl_rec.rule_information7 IS NULL OR
14810 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14811 (l_rl_rec.rule_information8 IS NULL OR
14812 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14813 k := k + 1;
14814 -- idx := idx + 1; bug6245602
14815 idx_exp := idx_exp + 1; -- bug6245602
14816 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp; -- bug6245602
14817 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14818 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
14819 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
14820 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14821 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14822 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
14823
14824 --sechawla 16-Jul-09 PRb ESg enhancements : assign orig_contract_line_id
14825 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14826 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14827 end if;
14828
14829 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14830 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
14831 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
14832 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14833 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14834
14835 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14836 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14837 END If;
14838 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14839 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14840 ELSE
14841 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14842 END IF;
14843 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
14844 --sechawla 11-sep-09 8798556
14845 --l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
14846 l_csm_periodic_expenses_tbl(k).date_start := l_line_rec.start_date;
14847
14848 ELSE
14849 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
14850 END IF;
14851 END IF;
14852 END LOOP;
14853 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14854 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
14855 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14856 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
14857 END IF;
14858
14859 -- Code for Estimated Property Tax Ends Here
14860
14861 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
14862 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
14863 (l_strm_name_rec.capitalize_yn = 'N')) OR
14864 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
14865 -- code for user defined streams
14866 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
14867 (UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
14868 -- code for use defined streams ends here
14869 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14870 -- Start of Bug#2757289 modification
14871 IF (l_rl_rec.rule_information7 IS NOT NULL OR
14872 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14873 (l_rl_rec.rule_information8 IS NOT NULL OR
14874 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14875 k := k + 1;
14876 -- idx := idx + 1; bug6245602
14877 idx_exp := idx_exp + 1; -- bug6245602
14878 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;
14879 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
14880 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
14881 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
14882 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
14883 l_csm_periodic_expenses_tbl(k).advance_or_arrears := g_stub_rec.advance_or_arrears;
14884 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
14885
14886 --sechawla 16-Jul-09 PRb ESg enhancements : assign orig_contract_line_id
14887 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14888 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14889 end if;
14890
14891 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
14892 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14893 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14894
14895 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14896 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14897 END IF;
14898 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14899 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14900 ELSE
14901 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14902 END IF;
14903 -- Code for user defined streams
14904 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
14905 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
14906 -- code ends here
14907 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
14908 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
14909 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
14910 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14911 ELSE
14912 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14913 END If;
14914 -- End of Bug#2757289 modification
14915
14916 -- Added by kthiruva on 29-Dec-2005.
14917 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
14918 -- Bug 4915938 - Start of Changes
14919 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14920 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14921 ELSE
14922 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14923 END IF;
14924 -- Bug 4915938 - End of Changes
14925
14926 ELSIF (l_rl_rec.rule_information7 IS NULL OR
14927 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14928 (l_rl_rec.rule_information8 IS NULL OR
14929 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14930 k := k + 1;
14931 -- idx := idx + 1; bug6245602
14932 idx_exp := idx_exp + 1; -- bug6245602
14933 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;
14934 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
14935 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
14936 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14937 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14938 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
14939
14940 --sechawla 16-Jul-09 PRb ESg enhancements : assign orig_contract_line_id
14941 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14942 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14943 end if;
14944
14945 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14946 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14947
14948 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14949 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14950 END IF;
14951 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14952 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14953 ELSE
14954 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14955 END IF;
14956 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
14957 --sechawla 11-sep-09 8798556
14958 --l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
14959 l_csm_periodic_expenses_tbl(k).date_start := l_line_rec.start_date;
14960 ELSE
14961 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
14962 END IF;
14963 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14964 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14965 ELSE
14966 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14967 END IF;
14968 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
14969 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
14970 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
14971 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
14972 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
14973 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14974 ELSE
14975 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14976 END If;
14977 END IF;
14978 END LOOP;
14979 ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
14980 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14981 l := l + 1;
14982 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
14983 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14984 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14985 If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
14986 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
14987 Else
14988 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
14989 End If;
14990 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
14991
14992 --sechawla 16-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
14993 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
14994 l_csm_one_off_fee_tbl(l).orig_contract_line_id := l_line_rec.orig_contract_line_id;
14995 end if;
14996
14997 END LOOP;
14998 END IF;
14999 END LOOP;
15000 --Added by bkatraga for bug 14529745
15001 IF NOT(l_payment_exists) THEN
15002 l_csm_loan_levels_tbl.DELETE(i);
15003 i := i - 1;
15004 END IF;
15005 --end bkatraga
15006 END LOOP;
15007 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15008 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15009 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15010 RAISE OKL_API.G_EXCEPTION_ERROR;
15011 End If;
15012 -- Extract fee line
15013 -- Added by kthiruva for Debugging
15014 write_to_log('Before the call to extract_fee_lines');
15015 extract_fee_lines( p_api_version => p_api_version,
15016 p_chr_id => TO_NUMBER(p_chr_id),
15017 p_deal_type => l_deal_type,
15018 p_init_msg_list => p_init_msg_list,
15019 x_msg_count => x_msg_count,
15020 x_msg_data => x_msg_data,
15021 x_return_status => x_return_status,
15022 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
15023 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
15024 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
15025 --Added by kthiruva for Debugging
15026 write_to_log('After the call to extract_fee_lines, the return status is :'||x_return_status);
15027
15028 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15029 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15030 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15031 raise OKL_API.G_EXCEPTION_ERROR;
15032 End If;
15033 extract_subsidized_lines(p_api_version => p_api_version,
15034 p_init_msg_list => p_init_msg_list,
15035 x_return_status => x_return_status,
15036 x_msg_count => x_msg_count,
15037 x_msg_data => x_msg_data,
15038 p_chr_id => TO_NUMBER(p_chr_id),
15039 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
15040 --Added by kthiruva for Debugging
15041 write_to_log('After the call to extract_subsidized_lines, the return status is :'||x_return_status);
15042 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15043 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15044 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15045 raise OKL_API.G_EXCEPTION_ERROR;
15046 End If;
15047 check_for_mandatory_streams(
15048 p_api_version => p_api_version,
15049 p_init_msg_list => p_init_msg_list,
15050 x_msg_count => x_msg_count,
15051 x_msg_data => x_msg_data,
15052 x_return_status => x_return_status,
15053 p_chr_id => p_chr_id,
15054 p_deal_type => l_deal_type,
15055 p_stream_types_tbl => l_csm_stream_types_tbl,
15056 x_stream_types_tbl => l_req_stream_types_tbl);
15057 --Added by kthiruva for Debugging
15058 write_to_log('After the call to check_for_mandatory_streams, the return status is :'||x_return_status);
15059
15060 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15061 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15062 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15063 raise OKL_API.G_EXCEPTION_ERROR;
15064 End If;
15065 -- Requesting for yields
15066 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
15067 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15068 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15069 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15070 RAISE OKL_API.G_EXCEPTION_ERROR;
15071 END IF;
15072
15073 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
15074 okl_api.set_message(
15075 p_app_name => G_APP_NAME,
15076 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
15077 raise OKL_API.G_EXCEPTION_ERROR;
15078 End If;
15079
15080 g_rep_req_yn := 'N'; --Added by bkatraga for bug 16045077
15081
15082 x_csm_loan_header := l_csm_loan_header;
15083 x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
15084 x_csm_loan_levels_tbl := l_csm_line_details_tbl;
15085 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
15086 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
15087 x_csm_yields_tbl := l_csm_yields_tbl;
15088 x_csm_stream_types_tbl := l_req_stream_types_tbl;
15089 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
15090 x_msg_data => x_msg_data);
15091 EXCEPTION
15092 WHEN OKL_API.G_EXCEPTION_ERROR THEN
15093 IF l_hdr_csr%ISOPEN THEN
15094 CLOSE l_hdr_csr;
15095 END IF;
15096 IF ib_csr%ISOPEN THEN
15097 CLOSE ib_csr;
15098 END IF;
15099 IF l_line_rec_csr%ISOPEN THEN
15100 CLOSE l_line_rec_csr;
15101 END IF;
15102 IF l_rl_csr1%ISOPEN THEN
15103 CLOSE l_rl_csr1;
15104 END IF;
15105 IF strm_name_csr%ISOPEN THEN
15106 CLOSE strm_name_csr;
15107 END IF;
15108 IF l_rl_csr%ISOPEN THEN
15109 CLOSE l_rl_csr;
15110 END IF;
15111 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
15112 l_api_name,
15113 G_PKG_NAME,
15114 'OKL_API.G_RET_STS_ERROR',
15115 x_msg_count,
15116 x_msg_data,
15117 '_PVT');
15118 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
15119 IF l_hdr_csr%ISOPEN THEN
15120 CLOSE l_hdr_csr;
15121 END IF;
15122 IF ib_csr%ISOPEN THEN
15123 CLOSE ib_csr;
15124 END IF;
15125 IF l_line_rec_csr%ISOPEN THEN
15126 CLOSE l_line_rec_csr;
15127 END IF;
15128 IF l_rl_csr1%ISOPEN THEN
15129 CLOSE l_rl_csr1;
15130 END IF;
15131 IF strm_name_csr%ISOPEN THEN
15132 CLOSE strm_name_csr;
15133 END IF;
15134 IF l_rl_csr%ISOPEN THEN
15135 CLOSE l_rl_csr;
15136 END IF;
15137 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
15138 l_api_name,
15139 G_PKG_NAME,
15140 'OKL_API.G_RET_STS_UNEXP_ERROR',
15141 x_msg_count,
15142 x_msg_data,
15143 '_PVT');
15144 WHEN OTHERS then
15145 IF l_hdr_csr%ISOPEN THEN
15146 CLOSE l_hdr_csr;
15147 END IF;
15148 IF ib_csr%ISOPEN THEN
15149 CLOSE ib_csr;
15150 END IF;
15151 IF l_line_rec_csr%ISOPEN THEN
15152 CLOSE l_line_rec_csr;
15153 END IF;
15154 IF l_rl_csr1%ISOPEN THEN
15155 CLOSE l_rl_csr1;
15156 END IF;
15157 IF strm_name_csr%ISOPEN THEN
15158 CLOSE strm_name_csr;
15159 END IF;
15160 IF l_rl_csr%ISOPEN THEN
15161 CLOSE l_rl_csr;
15162 END IF;
15163 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
15164 l_api_name,
15165 G_PKG_NAME,
15166 'OTHERS',
15167 x_msg_count,
15168 x_msg_data,
15169 '_PVT');
15170 END extract_params_loan_deal;
15171 -- End modification 11i10 bakuchib
15172 PROCEDURE extract_params_loan_paydown(
15173 p_api_version IN NUMBER,
15174 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
15175 p_chr_id IN VARCHAR2,
15176 p_deal_type IN VARCHAR2,
15177 p_paydown_type IN VARCHAR2,
15178 p_paydown_date IN DATE,
15179 p_paydown_amount IN NUMBER,
15180 p_balance_type_code IN VARCHAR2,
15181 x_return_status OUT NOCOPY VARCHAR2,
15182 x_msg_count OUT NOCOPY NUMBER,
15183 x_msg_data OUT NOCOPY VARCHAR2,
15184 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
15185 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
15186 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
15187 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
15188 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
15189 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
15190 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
15191
15192 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_PPD';
15193 l_api_version CONSTANT NUMBER := 1;
15194 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
15195 l_level_type NUMBER;
15196 l_strm_name VARCHAR2(200);
15197 i BINARY_INTEGER := 0;
15198 j BINARY_INTEGER := 0;
15199 k BINARY_INTEGER := 0;
15200 l BINARY_INTEGER := 0;
15201 m BINARY_INTEGER := 0;
15202 idx BINARY_INTEGER := 0;
15203 l_basis_percent NUMBER;
15204 styid NUMBER;
15205 -- l_pricing_name VARCHAR2(40); --02-Sep-11 SECHAWLA 12936702
15206 l_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
15207 l_salvage NUMBER;
15208 l_purchase_option VARCHAR2(256);
15209 l_deal_type VARCHAR2(256);
15210 l_purchase_option_amount NUMBER;
15211 l_msg_count Number;
15212 l_msg_data varchar2(2000);
15213 l_chr_id Number := TO_NUMBER(p_chr_id);
15214 l_cle_id Number;
15215 l_rgd_code Varchar2(30) := 'LAPSTH';
15216 l_rdf_code Varchar2(30) := 'LASTRM';
15217 l_rdf_name Varchar2(80) := 'xxx';
15218 l_id1 Varchar2(40);
15219 l_id2 Varchar2(200);
15220 l_name Varchar2(200);
15221 l_description Varchar2(2000);
15222 l_status Varchar2(1);
15223 l_start_date date;
15224 l_end_date date;
15225 l_org_id Number;
15226 l_inv_org_id Number;
15227 l_book_type_code Varchar2(15);
15228 l_select Varchar2(2000);
15229 l_msg_index_out Number;
15230 l_total_lending NUMBER;
15231 l_down_payment_amt NUMBER; --Added by bkatraga for bug 15942693
15232
15233 --Bug 5146545 dpsingh start
15234 l_ic VARCHAR2(30);
15235
15236 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
15237 cursor get_rebook_type is
15238 select nvl(amort_inc_adj_rev_dt_yn, 'N')
15239 from okl_sys_acct_opts;
15240 l_PROSPECTIVE_REBOOK_YN varchar2(1);
15241
15242 Cursor check_fixed_contract(chrId VARCHAR2) is
15243 SELECT
15244 gts.interest_calc_meth_code
15245 FROM
15246 okl_k_headers khr,
15247 okl_products_v pdt,
15248 okl_ae_tmpt_sets_v aes,
15249 OKL_ST_GEN_TMPT_SETS gts
15250 WHERE
15251 khr.pdt_id = pdt.id AND
15252 pdt.aes_id = aes.id AND
15253 aes.gts_id = gts.id AND
15254 khr.id =chrId;
15255
15256 Cursor get_iir_value(chrId VARCHAR2) is
15257 SELECT
15258 implicit_interest_rate
15259 FROM
15260 okl_k_headers
15261 WHERE id=chrId;
15262 --Bug 5146545 dpsingh end
15263
15264
15265 Cursor l_struct_csr( chrId NUMBER ) is
15266 select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
15267 from OKC_RULE_GROUPS_B crg,
15268 OKC_RULES_B crl
15269 where crl.rgp_id = crg.id
15270 and crg.RGD_CODE = 'LALEVL'
15271 and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
15272 and crg.dnz_chr_id = chrId;
15273
15274
15275 l_line_rec l_line_rec_csr%ROWTYPE;
15276 l_lne_rec l_line_rec_csr%ROWTYPE;
15277 l_hdr_rec l_hdr_csr%ROWTYPE;
15278 l_rl_rec l_rl_csr%ROWTYPE;
15279 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
15280 l_rl_rec1 l_rl_csr1%ROWTYPE;
15281 l_tx_rec l_tx_csr%ROWTYPE;
15282 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
15283 l_strm_name_rec strm_name_csr%ROWTYPE;
15284 l_ib_rec ib_csr%ROWTYPE;
15285 l_struct_rec l_struct_csr%ROWTYPE;
15286 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
15287 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
15288 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
15289 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
15290 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
15291 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
15292 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
15293 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
15294 l_csm_line_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
15295 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
15296 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
15297 --p_deal_type okl_st_gen_tmpt_sets.deal_type%TYPE;
15298
15299 --mansrini : Code for VR build
15300 CURSOR get_day_conv_on_contrct
15301 IS
15302 SELECT
15303 --Added by srsreeni for bug6076113
15304 -- rate_params.days_in_a_year_code,
15305 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
15306 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
15307 rate_params.days_in_a_year_code
15308 --srsreeni bug6076113 ends
15309 FROM okl_k_rate_params rate_params
15310 WHERE khr_id = p_chr_id;
15311
15312 CURSOR get_day_conv_on_sgt
15313 IS
15314 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
15315 gts.days_in_yr_code
15316 FROM
15317 okl_k_headers khr,
15318 okl_products_v pdt,
15319 okl_ae_tmpt_sets_v aes,
15320 OKL_ST_GEN_TMPT_SETS gts
15321 WHERE
15322 khr.pdt_id = pdt.id AND
15323 pdt.aes_id = aes.id AND
15324 aes.gts_id = gts.id AND
15325 khr.id = p_chr_id;
15326
15327 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
15328 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
15329 l_number_periods_remaining okl_sif_fees.number_of_periods%TYPE;
15330 l_number_periods_completed okl_sif_fees.number_of_periods%TYPE;
15331 l_number_periods_completed_cpy okl_sif_fees.number_of_periods%TYPE;
15332 l_variable_rate okl_sif_fees.rate%TYPE;
15333 l_total_oec okl_k_lines_full_v.oec%TYPE;
15334 --Added by kthiruva for the VR build
15335 l_ppd_assigned VARCHAR2(1) := 'N';
15336 l_rent_sty_id strm_rec_type;
15337 l_prev_ppd NUMBER := 0;
15338
15339 --This Cursor fetches the Principal Paydown lines existing per asset line
15340 --on the contract
15341 CURSOR get_prev_ppd_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
15342 rlcat okc_rules_b.rule_information_category%TYPE,
15343 chrId NUMBER,
15344 cleId NUMBER )
15345 IS
15346 SELECT crl.id slh_id,
15347 crl.object1_id1,
15348 crl.rule_information1,
15349 crl.rule_information2,
15350 crl.rule_information3,
15351 crl.rule_information5,
15352 crl.rule_information6,
15353 crl.rule_information7,
15354 crl.rule_information8,
15355 crl.rule_information13,
15356 crl.rule_information10
15357 FROM okc_rule_groups_b crg,
15358 okc_rules_b crl,
15359 okl_strm_type_v sty
15360 WHERE crl.rgp_id = crg.id
15361 AND crg.rgd_code = rgcode
15362 AND crl.rule_information_category = rlcat
15363 AND crg.dnz_chr_id = chrId
15364 AND crg.cle_id = cleId
15365 AND crl.object1_id1 = sty.id
15366 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
15367 ORDER BY crl.rule_information1;
15368
15369 get_prev_ppd_rec get_prev_ppd_csr%ROWTYPE;
15370
15371
15372 FUNCTION get_end_date(
15373 l_start_date IN DATE,
15374 p_frequency IN VARCHAR2,
15375 p_period IN NUMBER,
15376 ---- cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
15377 p_start_day IN NUMBER DEFAULT NULL
15378 )
15379 RETURN DATE IS
15380 l_end_date date;
15381 factor number := 0;
15382 BEGIN
15383 if(p_frequency = 'M') then
15384 factor := 1;
15385 elsif(p_frequency = 'Q') then
15386 factor := 3;
15387 elsif(p_frequency = 'S') then
15388 factor := 6;
15389 elsif(p_frequency = 'A') then
15390 factor := 12;
15391 end if;
15392 l_end_date := Okl_Lla_Util_Pvt.calculate_end_date(p_start_date => l_start_date,
15393 p_months => factor * NVL(p_period,0),
15394 p_start_day => p_start_day);
15395
15396 return l_end_date;
15397 EXCEPTION
15398 WHEN OTHERS THEN
15399 RETURN null;
15400 END get_end_date;
15401
15402 BEGIN
15403 x_return_status := OKL_API.G_RET_STS_SUCCESS;
15404 -- Call start_activity to create savepoint, check compatibility
15405 -- and initialize message list
15406 x_return_status := OKL_API.START_ACTIVITY (
15407 l_api_name
15408 ,p_init_msg_list
15409 ,'_PVT'
15410 ,x_return_status);
15411 -- Check if activity started successfully
15412 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15413 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15414 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15415 RAISE OKL_API.G_EXCEPTION_ERROR;
15416 END IF;
15417
15418 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
15419 open get_rebook_type;
15420 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN ;
15421 close get_rebook_type;
15422
15423
15424 OPEN l_hdr_pdt_csr(p_chr_id);
15425 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
15426 CLOSE l_hdr_pdt_csr;
15427
15428 --get day convention info : mansrini
15429 OPEN get_day_conv_on_contrct;
15430 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
15431 CLOSE get_day_conv_on_contrct;
15432
15433 --Added by srsreeni for bug6076113
15434 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
15435 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
15436 --srsreeni bug6076113 ends
15437 THEN
15438 OPEN get_day_conv_on_sgt;
15439 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
15440 CLOSE get_day_conv_on_sgt;
15441 END IF;
15442 -- Validate the payments
15443 validate_payments(p_api_version => p_api_version,
15444 p_init_msg_list => p_init_msg_list,
15445 x_return_status => x_return_status,
15446 x_msg_count => x_msg_count,
15447 x_msg_data => x_msg_data,
15448 p_khr_id => p_chr_id,
15449 p_paym_tbl => l_pay_tbl);
15450 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15451 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15452 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15453 RAISE OKL_API.G_EXCEPTION_ERROR;
15454 END IF;
15455 i := 0; j := 0; k := 0; l := 0; m := 0;
15456 /*
15457 OPEN l_hdr_pdt_csr(p_chr_id);
15458 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
15459 CLOSE l_hdr_pdt_csr;
15460 */
15461 -- Header infro
15462 OPEN l_hdr_csr(p_chr_id);
15463 FETCH l_hdr_csr into l_hdr_rec;
15464 IF l_hdr_csr%NOTFOUND THEN
15465 okl_api.set_message(p_app_name => G_APP_NAME,
15466 p_msg_name => G_LLA_NO_MATCHING_RECORD,
15467 p_token1 => G_COL_NAME_TOKEN,
15468 p_token1_value => 'Contract id');
15469 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15470 END IF;
15471 CLOSE l_hdr_csr;
15472 l_csm_loan_header.khr_id := p_chr_id;
15473 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
15474 l_csm_loan_header.date_start := l_hdr_rec.start_date;
15475 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
15476 IF ( p_deal_type IS NULL ) THEN
15477 l_deal_type := l_hdr_rec.deal_type;
15478 ELSE
15479 l_deal_type := p_deal_type;
15480 END IF;
15481 -- Fetching the location of the asset
15482 OPEN ib_csr(TO_NUMBER(p_chr_id));
15483 FETCH ib_csr into l_ib_rec;
15484 IF ib_csr%NOTFOUND THEN
15485 okl_api.set_message(p_app_name => G_APP_NAME,
15486 p_msg_name => G_LLA_NO_MATCHING_RECORD,
15487 p_token1 => G_COL_NAME_TOKEN,
15488 p_token1_value => 'Contract id');
15489 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15490 END IF;
15491 CLOSE ib_csr;
15492 l_csm_loan_header.country := l_ib_rec.country;
15493 --The orp code for the Principal Paydown process is used here.
15494 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_RENEWAL;
15495 -- Callling the formual ccontract cap amount
15496 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
15497 --The Capital Reduction should not be removed from the Funding amount
15498 --Bug 4738011 - Start of Changes
15499 execute_formula(p_api_version => p_api_version,
15500 p_init_msg_list => p_init_msg_list,
15501 x_return_status => x_return_status,
15502 x_msg_count => x_msg_count,
15503 x_msg_data => x_msg_data,
15504 p_formula_name => 'CONTRACT_CAP_AMNT_LOAN',
15505 p_contract_id => p_chr_id,
15506 p_line_id => NULL,
15507 x_value => l_total_lending);
15508 --Bug 4738011 - End of Changes
15509 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15510 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15511 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15512 RAISE OKL_API.G_EXCEPTION_ERROR;
15513 END IF;
15514 l_csm_loan_header.total_lending := l_total_lending;
15515 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
15516
15517 --kthiruva : for PR proj
15518 --Fetch the total OEC for this contract so that it can be prorated for each asset in
15519 --the following loop
15520 OPEN total_oec_csr(p_chr_id);
15521 FETCH total_oec_csr INTO l_total_oec;
15522 CLOSE total_oec_csr;
15523
15524 -- asset infor
15525 FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
15526 i := i + 1;
15527 idx := 0;
15528 l_csm_loan_levels_tbl(i).kle_loan_id := l_line_rec.id;
15529
15530 --sechawla 27-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id for loans
15531 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
15532 l_csm_loan_levels_tbl(i).orig_contract_line_id := l_line_rec.orig_contract_line_id;
15533 end if;
15534
15535 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
15536 --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
15537 --payment tag in the Lending Loans tag of the Outbound XML.
15538 --Bug 4738011 - Start of Changes
15539 IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
15540 l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
15541
15542 --Added by bkatraga for bug 15942693
15543 IF(l_line_rec.capital_reduction IS NULL) THEN
15544 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
15545 l_csm_loan_levels_tbl(i).down_payment_amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
15546 ELSE
15547 l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
15548 END IF;
15549 --end bkatraga for bug 15942693
15550 END IF;
15551 --Bug 4738011 - End of Changes
15552
15553 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15554 --Added by kthiruva on 05-Dec-2005
15555 --Initialising l_first_batch for every asset line
15556 --Bug 4777531 - Start of Changes
15557 l_first_batch := 'N';
15558 l_ppd_assigned := 'N';
15559 --Bug 4777531 - End of Changes
15560
15561 l_level_type := l_rl_rec1.object1_id1;
15562
15563 OPEN strm_name_csr ( l_level_type );
15564 FETCH strm_name_csr into l_strm_name_rec;
15565 IF strm_name_csr%NOTFOUND THEN
15566 okl_api.set_message(p_app_name => G_APP_NAME,
15567 p_msg_name => G_LLA_NO_MATCHING_RECORD,
15568 p_token1 => G_COL_NAME_TOKEN,
15569 p_token1_value => 'Contract id');
15570 x_return_status := OKL_API.G_RET_STS_ERROR;
15571 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
15572 END IF;
15573 CLOSE strm_name_csr;
15574
15575 --Bug 5146545 dpsingh start
15576 OPEN check_fixed_contract(p_chr_id);
15577 FETCH check_fixed_contract INTO l_ic;
15578 CLOSE check_fixed_contract;
15579
15580 IF l_ic = 'FIXED' THEN
15581 OPEN get_iir_value(p_chr_id);
15582 FETCH get_iir_value INTO l_variable_rate ;
15583 CLOSE get_iir_value;
15584 ELSE
15585 --Added by kthiruva on 04-Oct-2005
15586 --Calling the variable Rate utility to determine the rate that needs to be used to solve for payment
15587 l_variable_rate := OKL_VARIABLE_INT_UTIL_PVT.get_effective_int_rate(
15588 x_return_status => l_return_status,
15589 p_khr_id => p_chr_id,
15590 p_effective_date => p_paydown_date);
15591
15592
15593 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15594 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15595 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
15596 raise OKL_API.G_EXCEPTION_ERROR;
15597 End If;
15598 END IF;
15599 --Bug 5146545 dpsingh end
15600 --l_strm_name := l_strm_name_rec.name;
15601 l_strm_name := l_strm_name_rec.stream_type_purpose;
15602 -- srsreeni - Bug#5699923 - Added - Start
15603 -- DONOT request SuperTrump to generate streams
15604 -- for TERMINATED lines
15605 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
15606 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
15607 IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
15608 --srsreeni Bug6245602 end
15609 --Added by srsreeni for bug5841892
15610 -- m := m + 1;
15611 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
15612 --bug5841892 end of changes
15613 get_dependent_pricing_name
15614 (
15615 p_khr_id =>p_chr_id,
15616 p_sty_id =>l_level_type,
15617 x_return_status =>x_return_status,
15618 x_dependent_pricing_name =>l_pricing_name
15619 );
15620 --Added by srsreeni for bug5841892
15621 if l_pricing_name is not null then
15622 m := m + 1;
15623 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
15624 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
15625 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
15626 end if;
15627 --bug5841892 end of changes
15628 END IF;
15629 END IF; -- End of check for TERMINATED status
15630 -- srsreeni - Bug#5699923 - Added - End
15631 --idx := 0;
15632 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
15633 -- srsreeni - Bug#5699923 - Added - Start
15634 -- DONOT request SuperTrump to generate streams
15635 -- for TERMINATED lines
15636 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
15637 IF(g_rep_req_yn = 'Y') THEN
15638
15639 get_dependent_stream_types
15640 (
15641 p_khr_id =>p_chr_id,
15642 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
15643 p_primary_sty_id =>l_level_type,
15644 x_return_status => x_return_status,
15645 x_dependent_sty_id =>l_strm_type_id_tbl
15646 );
15647 IF x_return_status = 'E' THEN
15648 x_return_status := 'S';
15649 END IF;
15650
15651 ELSE
15652
15653 get_dependent_stream_types
15654 (
15655 p_khr_id =>p_chr_id,
15656 p_primary_sty_id =>l_level_type,
15657 x_return_status => x_return_status,
15658 x_dependent_sty_id =>l_strm_type_id_tbl
15659 );
15660 IF x_return_status = 'E' THEN
15661 x_return_status := 'S';
15662 END IF;
15663
15664 END IF;
15665
15666
15667 IF l_strm_type_id_tbl.COUNT > 0 THEN
15668 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
15669 m := m + 1;
15670
15671 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
15672 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
15673 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
15674 END LOOP;
15675 END IF;
15676 END IF; -- End of check for TERMINATED status
15677 -- srsreeni - Bug#5699923 - Added - End
15678
15679 j := j + 1;
15680 idx := idx + 1;
15681 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15682
15683 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
15684 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
15685 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
15686 end if;
15687
15688
15689 l_csm_line_details_tbl(j).description := 'Funding';
15690 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
15691 --The Capital Reduction should not be removed from the Funding amount
15692 --Bug 4738011 - Start of Changes
15693 execute_formula(p_api_version => p_api_version,
15694 p_init_msg_list => p_init_msg_list,
15695 x_return_status => x_return_status,
15696 x_msg_count => x_msg_count,
15697 x_msg_data => x_msg_data,
15698 p_formula_name => 'LINE_CAP_AMNT_LOAN',
15699 p_contract_id => p_chr_id,
15700 p_line_id => l_line_rec.id,
15701 x_value => l_total_lending);
15702 --Bug 4738011 - End of Changes
15703 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15704 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
15705 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15706 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
15707 END IF;
15708 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
15709 l_ppd_count := 0;
15710 l_ppd_tbl.delete;
15711 --Modified by kthiruva on 26-Sep-2005
15712 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
15713 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
15714 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15715 IF (l_rl_rec.rule_information7 IS NOT NULL OR
15716 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
15717 (l_rl_rec.rule_information8 IS NOT NULL OR
15718 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
15719 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
15720 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
15721 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
15722 l_ppd_count := l_ppd_count + 1;
15723 END IF;
15724 END LOOP;
15725 END LOOP;
15726 --Adding the current paydown to the ppd_tbl as the current paydown is not yet updated on the contract
15727 l_ppd_tbl(l_ppd_count).paydown_date := p_paydown_date;
15728 --Assigning it to 0 initially the paydown amount per line needs to be derived after proration
15729 l_ppd_tbl(l_ppd_count).paydown_amount := 0;
15730 l_ppd_tbl(l_ppd_count).curr_paydown := 'Y';
15731 --kthiruva : End of Changes
15732
15733 --Populating the diff_to_next column for all records in the l_ppd_tbl
15734 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
15735 --If there is no subsequent paydown then the diff_to_next column stores a value 0
15736 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
15737 IF l_ppd_tbl.COUNT = 1 THEN
15738 l_ppd_tbl(k).diff_to_next := 0;
15739 ELSE
15740 IF (k = l_ppd_tbl.LAST) THEN
15741 l_ppd_tbl(k).diff_to_next := 0;
15742 ELSE
15743 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
15744 END IF;
15745 END IF;
15746 END LOOP;
15747
15748 l_csm_line_details_tbl(j).amount := l_total_lending;
15749 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
15750 --Bug 4576794 - Start of Changes
15751 --When a funding date is specified on the asset,it needs to be used as the date_start
15752 --When funding date is not specified, we use the contract start date
15753
15754 --sechawla 11-sep-09 8798556 : When funding date is not specified, use asset start date, instead of contract start dt
15755 --l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
15756 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_line_rec.start_date);
15757
15758
15759 --Bug 4576794 - End of Changes
15760 l_csm_line_details_tbl(j).level_index_number := idx;
15761 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
15762 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15763 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15764 l_csm_line_details_tbl(j).rate := l_variable_rate;
15765
15766 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
15767 --If the Down Payment is capitalised then , a new funding line with the opposite sign
15768 --needs to be added
15769 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
15770 --Bug 4738011 - Start of Changes
15771 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
15772 j := j + 1;
15773 idx := idx + 1;
15774 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15775
15776 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
15777 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
15778 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
15779 end if;
15780
15781 l_csm_line_details_tbl(j).description := 'Funding';
15782
15783 --Added by bkatraga for bug 15942693
15784 IF(l_line_rec.capital_reduction IS NULL) THEN
15785 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
15786 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
15787 ELSE
15788 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction;
15789 END IF;
15790 l_csm_line_details_tbl(j).amount := l_csm_line_details_tbl(j).amount * (-1);
15791 --end bkatraga for bug 15942693
15792
15793 --sechawla 11-sep-09 8798556
15794 --l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
15795 l_csm_line_details_tbl(j).date_start := l_line_rec.start_date;
15796
15797 l_csm_line_details_tbl(j).level_index_number := idx;
15798 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
15799 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15800 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15801 END IF;
15802 --Bug 4738011 - End of Changes
15803
15804 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15805 -- Start of Bug#2757289 modification
15806
15807 l_number_periods_remaining :=0;
15808 l_number_periods_completed := 0;
15809 l_number_periods_completed_cpy :=0;
15810 --If the payment is a stub
15811 IF (l_rl_rec.rule_information7 IS NOT NULL OR
15812 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
15813 (l_rl_rec.rule_information8 IS NOT NULL OR
15814 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
15815
15816 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
15817 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
15818 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
15819 --Modified by kthiruva on 13-Feb-2006
15820 --Bug 4964710 - Start of Changes
15821 --============================================================================================
15822 --Step 1 : If payment is in Arrears created the PPD stub First
15823 --============================================================================================
15824 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15825 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
15826 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
15827 j := j + 1;
15828 idx := idx + 1;
15829 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15830 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
15831 l_csm_line_details_tbl(j).period := g_stub_rec.period;
15832 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15833 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15834
15835 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
15836 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
15837 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
15838 end if;
15839
15840 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
15841 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
15842 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
15843 p_currency_code => l_hdr_rec.currency_code) ;
15844 --The flag l_ppd_assigned is set to true.
15845 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
15846 l_ppd_assigned := 'Y';
15847 ELSE
15848 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
15849 END IF;
15850 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
15851 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
15852 l_csm_line_details_tbl(j).level_index_number := idx;
15853 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15854 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15855 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
15856 l_csm_line_details_tbl(j).rate := l_variable_rate;
15857 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15858 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15859 ELSE
15860 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15861 END IF;
15862
15863 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15864 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15865 END IF;
15866
15867 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15868 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15869 ELSE
15870 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15871 END IF;
15872
15873 END IF;
15874 END LOOP;
15875 --=====================================================================
15876 --Step 2 : The payment like for the existing stub is being created here
15877 --=====================================================================
15878 --The payment line for the existing stub is created here
15879 j := j + 1;
15880 idx := idx + 1;
15881 l_csm_line_details_tbl(j).level_index_number := idx;
15882 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
15883 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
15884 THEN
15885 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
15886 ELSE
15887 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
15888 END IF;
15889 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
15890 l_csm_line_details_tbl(j).period := g_stub_rec.period;
15891 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15892 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15893 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15894
15895 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
15896 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
15897 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
15898 end if;
15899
15900 l_csm_line_details_tbl(j).description := l_strm_name;
15901 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15902 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15903 l_csm_line_details_tbl(j).rate := l_variable_rate;
15904 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
15905 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
15906 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
15907 --solving for the new payment plan.
15908 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
15909 --both rate and amount
15910 IF l_ppd_assigned = 'Y' THEN
15911 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
15912 ELSIF l_ppd_assigned = 'N' THEN
15913 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
15914 END IF;
15915
15916 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15917 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15918 ELSE
15919 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15920 END IF;
15921
15922 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15923 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15924 END IF;
15925
15926 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15927 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15928 ELSE
15929 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15930 END IF;
15931 --=======================================================================================
15932 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
15933 --=======================================================================================
15934 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
15935 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
15936 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15937 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
15938 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
15939 j := j + 1;
15940 idx := idx + 1;
15941 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15942 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
15943 l_csm_line_details_tbl(j).period := g_stub_rec.period;
15944 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15945 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15946
15947 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
15948 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
15949 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
15950 end if;
15951
15952 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
15953 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
15954 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
15955 p_currency_code => l_hdr_rec.currency_code) ;
15956 --The flag l_ppd_assigned is set to true.
15957 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
15958 l_ppd_assigned := 'Y';
15959 ELSE
15960 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
15961 END IF;
15962 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
15963 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
15964 l_csm_line_details_tbl(j).level_index_number := idx;
15965 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15966 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15967 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
15968 l_csm_line_details_tbl(j).rate := l_variable_rate;
15969 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15970 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15971 ELSE
15972 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15973 END IF;
15974
15975 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15976 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15977 END IF;
15978
15979 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15980 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15981 ELSE
15982 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15983 END IF;
15984
15985 END IF;
15986 END LOOP;
15987 --Bug 4964710 - End of Changes
15988
15989 END IF;
15990 -- End of Bug#2757289 modification
15991 /*mansrini Handle PPD for non-stub payments here*/
15992 ELSIF (l_rl_rec.rule_information7 IS NULL OR
15993 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
15994 (l_rl_rec.rule_information8 IS NULL OR
15995 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
15996
15997 --When there is no PPD in the range of the periodic payment, the payment is retained as is
15998 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15999 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
16000 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16001 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
16002
16003 j := j + 1;
16004 idx := idx + 1;
16005 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16006
16007 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16008 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16009 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16010 end if;
16011
16012 l_csm_line_details_tbl(j).description := l_strm_name;
16013 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16014 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16015 l_csm_line_details_tbl(j).level_index_number := idx;
16016 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16017 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16018
16019 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16020 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16021 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16022 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16023 l_csm_line_details_tbl(j).rate := l_variable_rate;
16024 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16025 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16026 --solving for the new payment plan.
16027 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16028 --both rate and amount
16029 IF l_ppd_assigned = 'Y' THEN
16030 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16031 ELSIF l_ppd_assigned = 'N' THEN
16032 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16033 END IF;
16034
16035 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16036 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16037 END IF;
16038
16039 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16040 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16041 ELSE
16042 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16043 END IF;
16044
16045 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16046 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16047 ELSE
16048 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16049 END IF;
16050
16051 ELSE
16052
16053 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
16054 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16055 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN /*chk date cols*/
16056 --=============================================================
16057 --Step 1 : Obtaining the number of periods prior to the paydown
16058 --=============================================================
16059 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
16060 --Modified by kthiruva on 12-Dec-2005
16061 --Instead of round, the function trunc needs to be used as we want the number
16062 --of periods elapsed completely
16063 --Bug 4878162 - Start of Changes
16064 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
16065 --Bug 4878162 - End of Changes
16066
16067 IF l_number_periods_completed = 0 THEN
16068 l_number_periods_completed_cpy := 0;
16069 l_number_periods_remaining := l_number_periods_remaining - 1;
16070 ELSE
16071 l_number_periods_completed_cpy := l_number_periods_completed;
16072 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
16073 END IF;
16074 --======================================================================================
16075 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
16076 -- yet to be processed
16077 --=======================================================================================
16078
16079 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
16080 j := j + 1;
16081 idx := idx + 1;
16082 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16083
16084 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16085 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16086 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16087 end if;
16088
16089 l_csm_line_details_tbl(j).description := l_strm_name;
16090 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16091 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16092 l_csm_line_details_tbl(j).level_index_number := idx;
16093 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16094
16095 IF l_number_periods_completed_cpy = 0 THEN
16096 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16097 ELSE
16098 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
16099 END IF;
16100
16101 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16102 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16103 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16104 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16105 l_csm_line_details_tbl(j).rate := l_variable_rate;
16106 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16107 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16108 --solving for the new payment plan.
16109 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16110 --both rate and amount
16111 IF l_ppd_assigned = 'Y' THEN
16112 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16113 ELSIF l_ppd_assigned = 'N' THEN
16114 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16115 END IF;
16116
16117 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16118 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16119 END IF;
16120
16121 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16122 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16123 ELSE
16124 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16125 END IF;
16126
16127 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16128 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16129 ELSE
16130 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16131 END IF;
16132 l_first_batch := 'Y';
16133 END IF;
16134 --=====================================================================
16135 --Step 3 : If the payment is in Advance Create the Adjusting stub first
16136 --=====================================================================
16137 --If the payment is in Advance, the Adjusting stub needs to be created
16138 --first followed up the PPD Stub
16139 --For Payment in Arrears, the PPD stub is creted first followed by the
16140 --Adjusting Stub
16141 --Added by kthiruva on 10-Feb-2006
16142 --Bug 4964710 - Start of Changes
16143 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16144 THEN
16145 --Calculating the days between the Paydown date and the due date of the next periodic payment
16146 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16147 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16148
16149 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16150 --line for remaining payments are created.
16151 --If only one PPD is within a period then an adjusting stub is created for the rest
16152 --of the period and one payment line for the remaining periods until the next paydown date
16153 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16154 j := j + 1;
16155 idx := idx + 1;
16156 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16157 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16158 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16159 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16160 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16161
16162 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16163 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16164 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16165 end if;
16166
16167 l_csm_line_details_tbl(j).description := l_strm_name;
16168 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16169 --The adjusting stub would end one day before the PPD date
16170 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16171 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16172 l_csm_line_details_tbl(j).level_index_number := idx;
16173 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16174 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16175 l_csm_line_details_tbl(j).rate := l_variable_rate;
16176 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16177 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16178 --solving for the new payment plan.
16179 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16180 --both rate and amount
16181 IF l_ppd_assigned = 'Y' THEN
16182 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16183 ELSIF l_ppd_assigned = 'N' THEN
16184 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16185 END IF;
16186
16187 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16188 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16189 END IF;
16190
16191 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16192 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16193 ELSE
16194 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16195 END IF;
16196
16197 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16198 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16199 ELSE
16200 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16201 END IF;
16202 END IF;
16203 END IF;
16204 --Bug 4964710 - End of Changes
16205
16206 --=================================
16207 --Step 4 : Create the paydown stub
16208 --=================================
16209
16210 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
16211 /*PPD stub*/
16212 j := j + 1;
16213 idx := idx + 1;
16214 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16215 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16216 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16217 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16218 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16219
16220 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16221 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16222 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16223 end if;
16224
16225 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16226 --Calculating the prorated paydown amount if it is the current PPD
16227 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
16228 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
16229 p_currency_code => l_hdr_rec.currency_code) ;
16230 --The flag l_ppd_assigned is set to true.
16231 --The flag is used to track whether a payment is appearing after the Prinicpal Paydown stub
16232 l_ppd_assigned := 'Y';
16233 ELSE
16234 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
16235 END IF;
16236 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16237 THEN
16238 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16239 ELSE
16240 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16241 END IF;
16242 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16243 l_csm_line_details_tbl(j).level_index_number := idx;
16244 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16245 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16246 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16247 l_csm_line_details_tbl(j).rate := l_variable_rate;
16248
16249 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16250 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16251 END IF;
16252
16253 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16254 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16255 ELSE
16256 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16257 END IF;
16258
16259 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16260 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16261 ELSE
16262 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16263 END IF;
16264 --===============================================================================
16265 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
16266 --================================================================================
16267 --Added by kthiruva on 10-Feb-2006
16268 --Bug 4964710 - Start of Changes
16269 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
16270 THEN
16271 --Calculating the days between the Paydown date and the due date of the next periodic payment
16272 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16273 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16274
16275 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16276 --line for remaining payments are created.
16277 --If only one PPD is within a period then an adjusting stub is created for the rest
16278 --of the period and one payment line for the remaining periods until the next paydown date
16279 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16280 /*Adjusting stub*/
16281 j := j + 1;
16282 idx := idx + 1;
16283 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16284 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16285 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16286 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16287 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16288 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16289 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16290 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16291 end if;
16292
16293 l_csm_line_details_tbl(j).description := l_strm_name;
16294 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16295 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
16296 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16297 l_csm_line_details_tbl(j).level_index_number := idx;
16298 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16299 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16300 l_csm_line_details_tbl(j).rate := l_variable_rate;
16301 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16302 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16303 --solving for the new payment plan.
16304 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16305 --both rate and amount
16306 IF l_ppd_assigned = 'Y' THEN
16307 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16308 ELSIF l_ppd_assigned = 'N' THEN
16309 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16310 END IF;
16311
16312 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16313 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16314 END IF;
16315
16316 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16317 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16318 ELSE
16319 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16320 END IF;
16321
16322 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16323 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16324 ELSE
16325 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16326 END IF;
16327 END IF;
16328 END IF;
16329 --Bug 4964710 - Start of Changes
16330 --===================================================================================
16331 --Step 6 : Check whether a payment line for the remaining payments needs to be created
16332 --===================================================================================
16333
16334 --The periods between the end date of the adjusting stub and the next PPD is calculated
16335 --If number of periods > 0, then a payment line for that many periods needs to be created.
16336 IF k = l_ppd_tbl.LAST THEN
16337 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
16338 ELSE
16339 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
16340 END IF;
16341 --Modified by kthiruva on 12-Dec-2005
16342 --Use round here
16343 --Bug 4878162 - Start of Changes
16344 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
16345 --Bug 4878162 - End of Changes
16346
16347 --Create a payment line only if the number of periods till the next paydown is greater than 0
16348 IF (l_periods_after_ppd > 0) THEN
16349 /*Remaining amts*/
16350 j := j + 1;
16351 idx := idx + 1;
16352 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16353 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
16354 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16355 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16356 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16357
16358 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16359 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16360 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16361 end if;
16362
16363 l_csm_line_details_tbl(j).description := l_strm_name;
16364 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16365 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16366 l_csm_line_details_tbl(j).level_index_number := idx;
16367 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16368 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16369 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
16370 l_csm_line_details_tbl(j).rate := l_variable_rate;
16371 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16372 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16373 --solving for the new payment plan.
16374 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16375 --both rate and amount
16376 IF l_ppd_assigned = 'Y' THEN
16377 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16378 ELSIF l_ppd_assigned = 'N' THEN
16379 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16380 END IF;
16381
16382 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16383 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16384 END IF;
16385
16386 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16387 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16388 ELSE
16389 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16390 END IF;
16391
16392 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16393 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16394 ELSE
16395 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16396 END IF;
16397 END IF;--End of condition l_periods_after_ppd >0
16398 END IF;--The condition that checks the paydown type
16399 END IF;--The condition check for the date of every PPD in the ppd_tbl
16400 END LOOP;--loop for l_ppd_tbl
16401 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
16402 END IF;--The condition checking for Stub or periodic payment
16403 END LOOP;
16404 --Added by kthiruva for VR Build
16405 --When the Payment Type on the loan contract is PRINCIPAL.
16406 ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
16407 -- srsreeni - Bug#5699923 - Added - Start
16408 -- DONOT request SuperTrump to generate streams
16409 -- for TERMINATED lines
16410 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
16411 IF(g_rep_req_yn = 'Y') THEN
16412
16413 --Added by kthriuva for VR build
16414 --For payment of type principal, we need to request the dependents
16415 --on Rent. Hence obtaining the stream type id of Rent
16416 get_primary_no_prc_stream_type
16417 (
16418 p_khr_id =>p_chr_id,
16419 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
16420 p_primary_sty_purpose =>'RENT',
16421 x_return_status => x_return_status,
16422 x_primary_sty_id => l_rent_sty_id
16423 );
16424 --kthriuva - End of Changes for VR build
16425
16426 get_dependent_stream_types
16427 (
16428 p_khr_id =>p_chr_id,
16429 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
16430 p_primary_sty_id =>l_rent_sty_id.id,
16431 x_return_status => x_return_status,
16432 x_dependent_sty_id =>l_strm_type_id_tbl
16433 );
16434 IF x_return_status = 'E' THEN
16435 x_return_status := 'S';
16436 END IF;
16437
16438 ELSE
16439 --Added by kthriuva for VR build
16440 --For payment of type principal, we need to request the dependents
16441 --on Rent. Hence obtaining the stream type id of Rent
16442 get_primary_no_prc_stream_type
16443 (
16444 p_khr_id =>p_chr_id,
16445 p_pdt_id =>l_pdt_id_rec.pid,
16446 p_primary_sty_purpose =>'RENT',
16447 x_return_status => x_return_status,
16448 x_primary_sty_id => l_rent_sty_id
16449 );
16450
16451 --kthriuva - End of Changes for VR build
16452 get_dependent_stream_types
16453 (
16454 p_khr_id =>p_chr_id,
16455 p_primary_sty_id =>l_rent_sty_id.id,
16456 x_return_status => x_return_status,
16457 x_dependent_sty_id =>l_strm_type_id_tbl
16458 );
16459 IF x_return_status = 'E' THEN
16460 x_return_status := 'S';
16461 END IF;
16462
16463 END IF;
16464
16465
16466 IF l_strm_type_id_tbl.COUNT > 0 THEN
16467 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
16468 m := m + 1;
16469
16470 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
16471 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
16472 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
16473 END LOOP;
16474 END IF;
16475 END IF; -- End of check for TERMINATED status
16476 -- srsreeni - Bug#5699923 - Added - End
16477
16478 j := j + 1;
16479 idx := idx + 1;
16480 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16481
16482 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16483 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16484 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16485 end if;
16486
16487 l_csm_line_details_tbl(j).description := 'Funding';
16488 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
16489 --The Capital Reduction should not be removed from the Funding amount
16490 --Bug 4738011 - Start of Changes
16491 execute_formula(p_api_version => p_api_version,
16492 p_init_msg_list => p_init_msg_list,
16493 x_return_status => x_return_status,
16494 x_msg_count => x_msg_count,
16495 x_msg_data => x_msg_data,
16496 p_formula_name => 'LINE_CAP_AMNT_LOAN',
16497 p_contract_id => p_chr_id,
16498 p_line_id => l_line_rec.id,
16499 x_value => l_total_lending);
16500 --Bug 4738011 - End of Changes
16501 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16502 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
16503 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16504 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
16505 END IF;
16506 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
16507 l_ppd_count := 0;
16508 l_ppd_tbl.delete;
16509 --Added by kthiruva on 19-Sep-2005
16510 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
16511 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
16512 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16513 IF (l_rl_rec.rule_information7 IS NOT NULL OR
16514 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16515 (l_rl_rec.rule_information8 IS NOT NULL OR
16516 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16517 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
16518 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
16519 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
16520 l_ppd_count := l_ppd_count + 1;
16521 END IF;
16522 END LOOP;
16523 END LOOP;
16524 --Adding the current paydown to the ppd_tbl as the current paydown is not yet updated on the contract
16525 l_ppd_tbl(l_ppd_count).paydown_date := p_paydown_date;
16526 --Assigning it to 0 initially the paydown amount per line needs to be derived after proration
16527 l_ppd_tbl(l_ppd_count).paydown_amount := 0;
16528 l_ppd_tbl(l_ppd_count).curr_paydown := 'Y';
16529 --kthiruva : End of Changes
16530
16531 --Populating the diff_to_next column for all records in the l_ppd_tbl
16532 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
16533 --If there is no subsequent paydown then the diff_to_next column stores a value 0
16534 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
16535 IF l_ppd_tbl.COUNT = 1 THEN
16536 l_ppd_tbl(k).diff_to_next := 0;
16537 ELSE
16538 IF (k = l_ppd_tbl.LAST) THEN
16539 l_ppd_tbl(k).diff_to_next := 0;
16540 ELSE
16541 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
16542 END IF;
16543 END IF;
16544 END LOOP;
16545
16546 l_csm_line_details_tbl(j).amount := l_total_lending;
16547 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
16548 --Bug 4576794 - Start of Changes
16549 --When a funding date is specified on the asset,it needs to be used as the date_start
16550 --When funding date is not specified, we use the contract start date
16551
16552 --sechawla 11-sep-09 8798556 : When funding date is not specified, use asset start date, instead of contract start dt
16553 --l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
16554 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_line_rec.start_date);
16555
16556
16557 --Bug 4576794 - End of Changes
16558 l_csm_line_details_tbl(j).level_index_number := idx;
16559 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
16560 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16561 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16562 l_csm_line_details_tbl(j).rate := l_variable_rate;
16563
16564 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
16565 --If the Down Payment is capitalised then , a new funding line with the opposite sign
16566 --needs to be added
16567 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
16568 --Bug 4738011 - Start of Changes
16569 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
16570 j := j + 1;
16571 idx := idx + 1;
16572 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16573
16574 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16575 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16576 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16577 end if;
16578
16579 l_csm_line_details_tbl(j).description := 'Funding';
16580
16581 --Added by bkatraga for bug 15942693
16582 IF(l_line_rec.capital_reduction IS NULL) THEN
16583 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
16584 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
16585 ELSE
16586 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction;
16587 END IF;
16588 l_csm_line_details_tbl(j).amount := l_csm_line_details_tbl(j).amount * (-1);
16589 --end bkatraga for bug 15942693
16590
16591 --sechawla 11-sep-09 8798556
16592 --l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
16593 l_csm_line_details_tbl(j).date_start := l_line_rec.start_date;
16594
16595 l_csm_line_details_tbl(j).level_index_number := idx;
16596 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
16597 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16598 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16599 END IF;
16600 --Bug 4738011 - End of Changes
16601
16602 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16603 -- Start of Bug#2757289 modification
16604
16605 l_number_periods_remaining :=0;
16606 l_number_periods_completed := 0;
16607 l_number_periods_completed_cpy :=0;
16608 --If payment is a stub
16609 IF (l_rl_rec.rule_information7 IS NOT NULL OR
16610 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16611 (l_rl_rec.rule_information8 IS NOT NULL OR
16612 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16613 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
16614 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
16615 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
16616 --Modified by kthiruva on 13-Feb-2006
16617 --Bug 4964710 - Start of Changes
16618 --============================================================================================
16619 --Step 1 : If payment is in Arrears created the PPD stub First
16620 --============================================================================================
16621 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16622 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
16623 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
16624 j := j + 1;
16625 idx := idx + 1;
16626 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16627 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16628 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16629 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16630 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16631
16632 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16633 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16634 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16635 end if;
16636
16637 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16638 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
16639 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
16640 p_currency_code => l_hdr_rec.currency_code) ;
16641 --The flag l_ppd_assigned is set to true.
16642 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
16643 l_ppd_assigned := 'Y';
16644 ELSE
16645 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
16646 END IF;
16647 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16648 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16649 l_csm_line_details_tbl(j).level_index_number := idx;
16650 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16651 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16652 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16653 l_csm_line_details_tbl(j).rate := l_variable_rate;
16654 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16655 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16656 ELSE
16657 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16658 END IF;
16659
16660 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16661 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16662 END IF;
16663
16664 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16665 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16666 ELSE
16667 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16668 END IF;
16669
16670 END IF;
16671 END LOOP;
16672 --=====================================================================
16673 --Step 2 : The payment like for the existing stub is being created here
16674 --=====================================================================
16675 --The payment line for the existing stub is created here
16676 j := j + 1;
16677 idx := idx + 1;
16678 l_csm_line_details_tbl(j).level_index_number := idx;
16679 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
16680 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16681 THEN
16682 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16683 ELSE
16684 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
16685 END IF;
16686 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16687 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16688 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16689 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16690 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16691
16692 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16693 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16694 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16695 end if;
16696
16697 l_csm_line_details_tbl(j).description := l_strm_name;
16698 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16699 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16700 l_csm_line_details_tbl(j).rate := l_variable_rate;
16701 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16702 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16703 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16704 --solving for the new payment plan.
16705 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16706 --both rate and amount
16707 IF l_ppd_assigned = 'Y' THEN
16708 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16709 ELSIF l_ppd_assigned = 'N' THEN
16710 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16711 END IF;
16712
16713 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16714 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16715 ELSE
16716 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16717 END IF;
16718
16719 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16720 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16721 END IF;
16722
16723 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16724 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16725 ELSE
16726 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16727 END IF;
16728 --=======================================================================================
16729 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
16730 --=======================================================================================
16731 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
16732 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
16733 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16734 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
16735 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
16736 j := j + 1;
16737 idx := idx + 1;
16738 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16739 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16740 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16741 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16742 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16743
16744 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16745 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16746 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16747 end if;
16748
16749 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16750 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
16751 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
16752 p_currency_code => l_hdr_rec.currency_code) ;
16753 --The flag l_ppd_assigned is set to true.
16754 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
16755 l_ppd_assigned := 'Y';
16756 ELSE
16757 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
16758 END IF;
16759 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
16760 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16761 l_csm_line_details_tbl(j).level_index_number := idx;
16762 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16763 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16764 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16765 l_csm_line_details_tbl(j).rate := l_variable_rate;
16766 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16767 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16768 ELSE
16769 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16770 END IF;
16771
16772 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16773 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16774 END IF;
16775
16776 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16777 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16778 ELSE
16779 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16780 END IF;
16781
16782 END IF;
16783 END LOOP;
16784 --Bug 4964710 - End of Changes
16785 END IF;
16786 -- End of Bug#2757289 modification
16787 /*mansrini Handle PPD for non-stub payments here*/
16788 ELSIF (l_rl_rec.rule_information7 IS NULL OR
16789 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
16790 (l_rl_rec.rule_information8 IS NULL OR
16791 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
16792
16793 --When there is no PPD in the range of the periodic payment, the payment is retained as is
16794 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16795 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
16796 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16797 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
16798
16799 j := j + 1;
16800 idx := idx + 1;
16801 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16802
16803 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16804 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16805 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16806 end if;
16807
16808 l_csm_line_details_tbl(j).description := l_strm_name;
16809 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16810 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16811 l_csm_line_details_tbl(j).level_index_number := idx;
16812 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16813 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16814
16815 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16816 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16817 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16818 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16819 l_csm_line_details_tbl(j).rate := l_variable_rate;
16820 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16821 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16822 --solving for the new payment plan.
16823 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16824 --both rate and amount
16825 IF l_ppd_assigned = 'Y' THEN
16826 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16827 ELSIF l_ppd_assigned = 'N' THEN
16828 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16829 END IF;
16830
16831 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16832 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16833 END IF;
16834
16835 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16836 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16837 ELSE
16838 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16839 END IF;
16840
16841 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16842 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16843 ELSE
16844 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16845 END IF;
16846
16847 ELSE
16848
16849 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
16850 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16851 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN
16852 --=============================================================
16853 --Step 1 : Obtaining the number of periods prior to the paydown
16854 --=============================================================
16855 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
16856 --Modified by kthiruva on 12-Dec-2005
16857 --Use trunc instead of round as we need the number of periods elapsed completely
16858 --Bug 4878162 - Start of Changes
16859 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
16860 --Bug 4878162 - End of Changes
16861
16862
16863 IF l_number_periods_completed = 0 THEN
16864 l_number_periods_completed_cpy := 0;
16865 l_number_periods_remaining := l_number_periods_remaining - 1;
16866 ELSE
16867 l_number_periods_completed_cpy := l_number_periods_completed;
16868 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
16869 END IF;
16870 --======================================================================================
16871 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
16872 -- yet to be processed
16873 --=======================================================================================
16874
16875 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
16876 j := j + 1;
16877 idx := idx + 1;
16878 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16879
16880 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16881 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16882 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16883 end if;
16884
16885 l_csm_line_details_tbl(j).description := l_strm_name;
16886 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16887 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16888 l_csm_line_details_tbl(j).level_index_number := idx;
16889 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16890
16891 IF l_number_periods_completed_cpy = 0 THEN
16892 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16893 ELSE
16894 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
16895 END IF;
16896
16897 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16898 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16899 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16900 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16901 l_csm_line_details_tbl(j).rate := l_variable_rate;
16902 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16903 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16904 --solving for the new payment plan.
16905 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16906 --both rate and amount
16907 IF l_ppd_assigned = 'Y' THEN
16908 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16909 ELSIF l_ppd_assigned = 'N' THEN
16910 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16911 END IF;
16912
16913 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16914 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16915 END IF;
16916
16917 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16918 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16919 ELSE
16920 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16921 END IF;
16922
16923 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16924 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16925 ELSE
16926 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16927 END IF;
16928 l_first_batch := 'Y';
16929 END IF;
16930 --=====================================================================
16931 --Step 3 : If the payment is in Advance Create the Adjusting stub first
16932 --=====================================================================
16933 --If the payment is in Advance, the Adjusting stub needs to be created
16934 --first followed up the PPD Stub
16935 --For Payment in Arrears, the PPD stub is creted first followed by the
16936 --Adjusting Stub
16937 --Added by kthiruva on 10-Feb-2006
16938 --Bug 4964710 - Start of Changes
16939 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16940 THEN
16941 --Calculating the days between the Paydown date and the due date of the next periodic payment
16942 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16943 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16944
16945 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16946 --line for remaining payments are created.
16947 --If only one PPD is within a period then an adjusting stub is created for the rest
16948 --of the period and one payment line for the remaining periods until the next paydown date
16949 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16950 j := j + 1;
16951 idx := idx + 1;
16952 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16953 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16954 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16955 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16956 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16957
16958 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
16959 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
16960 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
16961 end if;
16962
16963 l_csm_line_details_tbl(j).description := l_strm_name;
16964 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16965 --The adjusting stub would end one day before the PPD date
16966 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16967 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
16968 l_csm_line_details_tbl(j).level_index_number := idx;
16969 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16970 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16971 l_csm_line_details_tbl(j).rate := l_variable_rate;
16972 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
16973 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
16974 --solving for the new payment plan.
16975 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
16976 --both rate and amount
16977 IF l_ppd_assigned = 'Y' THEN
16978 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
16979 ELSIF l_ppd_assigned = 'N' THEN
16980 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
16981 END IF;
16982
16983 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16984 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16985 END IF;
16986
16987 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16988 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16989 ELSE
16990 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16991 END IF;
16992
16993 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16994 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16995 ELSE
16996 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16997 END IF;
16998 END IF;
16999 END IF;
17000 --Bug 4964710 - End of Changes
17001
17002 --=================================
17003 --Step 4 : Create the paydown stub
17004 --=================================
17005
17006 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
17007 /*PPD stub*/
17008 j := j + 1;
17009 idx := idx + 1;
17010 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
17011 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
17012 l_csm_line_details_tbl(j).period := g_stub_rec.period;
17013 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
17014 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
17015
17016 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
17017 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17018 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17019 end if;
17020
17021 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
17022 --Calculating the prorated paydown amount if it is the current PPD
17023 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
17024 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
17025 p_currency_code => l_hdr_rec.currency_code) ;
17026 --The flag l_ppd_assigned is set to true.
17027 --The flag is used to track whether a payment is appearing after the Prinicpal Paydown stub
17028 l_ppd_assigned := 'Y';
17029 ELSE
17030 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
17031 END IF;
17032 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
17033 THEN
17034 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
17035 ELSE
17036 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
17037 END IF;
17038 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
17039 l_csm_line_details_tbl(j).level_index_number := idx;
17040 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
17041 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
17042 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
17043 l_csm_line_details_tbl(j).rate := l_variable_rate;
17044
17045 /*Populate the accrual end date as well*/
17046 /*Create a stub for principal paydown*/
17047 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
17048 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
17049 END IF;
17050
17051 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
17052 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
17053 ELSE
17054 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
17055 END IF;
17056
17057 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
17058 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
17059 ELSE
17060 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17061 END IF;
17062 --===============================================================================
17063 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
17064 --================================================================================
17065 --Added by kthiruva on 10-Feb-2006
17066 --Bug 4964710 - Start of Changes
17067 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
17068 THEN
17069 --Calculating the days between the Paydown date and the due date of the next periodic payment
17070 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
17071 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
17072
17073 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
17074 --line for remaining payments are created.
17075 --If only one PPD is within a period then an adjusting stub is created for the rest
17076 --of the period and one payment line for the remaining periods until the next paydown date
17077 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
17078 /*Adjusting stub*/
17079 j := j + 1;
17080 idx := idx + 1;
17081 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
17082 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
17083 l_csm_line_details_tbl(j).period := g_stub_rec.period;
17084 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
17085 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
17086
17087 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
17088 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17089 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17090 end if;
17091
17092 l_csm_line_details_tbl(j).description := l_strm_name;
17093 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
17094 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
17095 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
17096 l_csm_line_details_tbl(j).level_index_number := idx;
17097 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
17098 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
17099 l_csm_line_details_tbl(j).rate := l_variable_rate;
17100 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
17101 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
17102 --solving for the new payment plan.
17103 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
17104 --both rate and amount
17105 IF l_ppd_assigned = 'Y' THEN
17106 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
17107 ELSIF l_ppd_assigned = 'N' THEN
17108 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
17109 END IF;
17110
17111 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
17112 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
17113 END IF;
17114
17115 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
17116 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
17117 ELSE
17118 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
17119 END IF;
17120
17121 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
17122 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
17123 ELSE
17124 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17125 END IF;
17126 END IF;
17127 END IF;
17128 --===================================================================================
17129 --Step 6 : Check whether a payment line for the remaining payments needs to be creted
17130 --===================================================================================
17131
17132 --The periods between the end date of the adjusting stub and the next PPD is calculated
17133 --If number of periods > 0, then a payment line for that many periods needs to be created.
17134 IF k = l_ppd_tbl.LAST THEN
17135 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
17136 ELSE
17137 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
17138 END IF;
17139 --Modified by kthiruva on 12-Dec-2005
17140 --Use round here
17141 --Bug 4878162 - Start of Changes
17142 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
17143 --Bug 4878162 - Start of Changes
17144 --Create a payment line only if the number of periods till the next paydown is greater than 0
17145 IF (l_periods_after_ppd > 0) THEN
17146 /*Remaining amts*/
17147 j := j + 1;
17148 idx := idx + 1;
17149 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
17150 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
17151 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
17152 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
17153 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
17154
17155 --sechawla 16-Jul-09 PRB ESG Enhanceents : assign orig_contract_line_id
17156 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17157 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17158 end if;
17159
17160 l_csm_line_details_tbl(j).description := l_strm_name;
17161 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
17162 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
17163 l_csm_line_details_tbl(j).level_index_number := idx;
17164 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
17165 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
17166 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
17167 l_csm_line_details_tbl(j).rate := l_variable_rate;
17168 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
17169 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
17170 --solving for the new payment plan.
17171 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
17172 --both rate and amount
17173 IF l_ppd_assigned = 'Y' THEN
17174 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
17175 ELSIF l_ppd_assigned = 'N' THEN
17176 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
17177 END IF;
17178
17179 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
17180 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
17181 END IF;
17182
17183 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
17184 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
17185 ELSE
17186 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
17187 END IF;
17188
17189 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
17190 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
17191 ELSE
17192 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17193 END IF;
17194 END IF;--End of condition l_periods_after_ppd >0
17195
17196 END IF;--The condition that checks the paydown type
17197 END IF;--The condition check for the date of every PPD in the ppd_tbl
17198 END LOOP;--loop for l_ppd_tbl
17199 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
17200 END IF;--The condition checking for Stub or periodic payment
17201 END LOOP;
17202 --Emd of Changes for payment type 'PRINCIPAL_PAYMENT'
17203 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
17204 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
17205 (l_strm_name_rec.capitalize_yn = 'N')) OR
17206 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
17207 -- code for user defined streams
17208 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
17209 (UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
17210 -- code for use defined streams ends here
17211 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
17212 -- Start of Bug#2757289 modification
17213 IF (l_rl_rec.rule_information7 IS NOT NULL OR
17214 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
17215 (l_rl_rec.rule_information8 IS NOT NULL OR
17216 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
17217 k := k + 1;
17218 idx := idx + 1;
17219 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
17220 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
17221 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
17222 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
17223 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
17224 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
17225
17226 --sechawla 16-JUl-09 PRB ESg Enhancements : assign orig_contract_line_id
17227 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17228 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17229 end if;
17230
17231 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
17232 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
17233 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
17234
17235 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
17236 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
17237 END IF;
17238 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
17239 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
17240 ELSE
17241 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17242 END IF;
17243 -- Code for user defined streams
17244 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
17245 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
17246 -- code ends here
17247 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
17248 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
17249 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
17250 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
17251 ELSE
17252 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
17253 END If;
17254 -- End of Bug#2757289 modification
17255
17256 -- Added by kthiruva on 29-Dec-2005.
17257 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
17258 -- Bug 4915938 - Start of Changes
17259 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
17260 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
17261 ELSE
17262 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
17263 END IF;
17264 -- Bug 4915938 - End of Changes
17265
17266 ELSIF (l_rl_rec.rule_information7 IS NULL OR
17267 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
17268 (l_rl_rec.rule_information8 IS NULL OR
17269 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
17270 k := k + 1;
17271 idx := idx + 1;
17272 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
17273 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
17274 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
17275 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
17276 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
17277 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
17278
17279 --sechawla 16-JUl-09 PRB ESg Enhancements : assign orig_contract_line_id
17280 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17281 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17282 end if;
17283
17284 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
17285 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
17286
17287 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
17288 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
17289 END IF;
17290 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
17291 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
17292 ELSE
17293 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
17294 END IF;
17295 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
17296 --sechawla 11-sep-09 8798556
17297 --l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
17298 l_csm_periodic_expenses_tbl(k).date_start := l_line_rec.start_date;
17299 ELSE
17300 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
17301 END IF;
17302 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
17303 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
17304 ELSE
17305 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17306 END IF;
17307 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
17308 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
17309 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
17310 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
17311 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
17312 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
17313 ELSE
17314 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
17315 END If;
17316 END IF;
17317 END LOOP;
17318 ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
17319 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
17320 l := l + 1;
17321 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
17322 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17323 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
17324 If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
17325 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
17326 Else
17327 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
17328 End If;
17329 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
17330
17331 --sechawla 16-Jul-09 PRb ESg Enhancements : assign orig_contract_line_id
17332 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17333 l_csm_one_off_fee_tbl(l).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17334 end if;
17335
17336 END LOOP;
17337 END IF;
17338 END LOOP;
17339 END LOOP;
17340 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17341 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17342 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17343 RAISE OKL_API.G_EXCEPTION_ERROR;
17344 End If;
17345 -- Extract fee line
17346 extract_fee_lines( p_api_version => p_api_version,
17347 p_chr_id => TO_NUMBER(p_chr_id),
17348 p_deal_type => l_deal_type,
17349 p_init_msg_list => p_init_msg_list,
17350 x_msg_count => x_msg_count,
17351 x_msg_data => x_msg_data,
17352 x_return_status => x_return_status,
17353 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
17354 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
17355 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
17356 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17357 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17358 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17359 raise OKL_API.G_EXCEPTION_ERROR;
17360 End If;
17361 extract_subsidized_lines(p_api_version => p_api_version,
17362 p_init_msg_list => p_init_msg_list,
17363 x_return_status => x_return_status,
17364 x_msg_count => x_msg_count,
17365 x_msg_data => x_msg_data,
17366 p_chr_id => TO_NUMBER(p_chr_id),
17367 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
17368 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17369 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17370 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17371 raise OKL_API.G_EXCEPTION_ERROR;
17372 End If;
17373 check_for_mandatory_streams(
17374 p_api_version => p_api_version,
17375 p_init_msg_list => p_init_msg_list,
17376 x_msg_count => x_msg_count,
17377 x_msg_data => x_msg_data,
17378 x_return_status => x_return_status,
17379 p_chr_id => p_chr_id,
17380 p_deal_type => l_deal_type,
17381 p_stream_types_tbl => l_csm_stream_types_tbl,
17382 x_stream_types_tbl => l_req_stream_types_tbl);
17383 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17384 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17385 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17386 raise OKL_API.G_EXCEPTION_ERROR;
17387 End If;
17388 -- Requesting for yields
17389 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
17390 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17391 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17392 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17393 RAISE OKL_API.G_EXCEPTION_ERROR;
17394 END IF;
17395
17396 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17397 okl_api.set_message(
17398 p_app_name => G_APP_NAME,
17399 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
17400 raise OKL_API.G_EXCEPTION_ERROR;
17401 End If;
17402
17403 x_csm_loan_header := l_csm_loan_header;
17404 x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
17405 x_csm_loan_levels_tbl := l_csm_line_details_tbl;
17406 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
17407 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
17408 x_csm_yields_tbl := l_csm_yields_tbl;
17409 x_csm_stream_types_tbl := l_req_stream_types_tbl;
17410 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
17411 x_msg_data => x_msg_data);
17412 EXCEPTION
17413 WHEN OKL_API.G_EXCEPTION_ERROR THEN
17414 IF l_hdr_csr%ISOPEN THEN
17415 CLOSE l_hdr_csr;
17416 END IF;
17417 IF ib_csr%ISOPEN THEN
17418 CLOSE ib_csr;
17419 END IF;
17420 IF l_line_rec_csr%ISOPEN THEN
17421 CLOSE l_line_rec_csr;
17422 END IF;
17423 IF l_rl_csr1%ISOPEN THEN
17424 CLOSE l_rl_csr1;
17425 END IF;
17426 IF strm_name_csr%ISOPEN THEN
17427 CLOSE strm_name_csr;
17428 END IF;
17429 IF l_rl_csr%ISOPEN THEN
17430 CLOSE l_rl_csr;
17431 END IF;
17432 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
17433 l_api_name,
17434 G_PKG_NAME,
17435 'OKL_API.G_RET_STS_ERROR',
17436 x_msg_count,
17437 x_msg_data,
17438 '_PVT');
17439 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
17440 IF l_hdr_csr%ISOPEN THEN
17441 CLOSE l_hdr_csr;
17442 END IF;
17443 IF ib_csr%ISOPEN THEN
17444 CLOSE ib_csr;
17445 END IF;
17446 IF l_line_rec_csr%ISOPEN THEN
17447 CLOSE l_line_rec_csr;
17448 END IF;
17449 IF l_rl_csr1%ISOPEN THEN
17450 CLOSE l_rl_csr1;
17451 END IF;
17452 IF strm_name_csr%ISOPEN THEN
17453 CLOSE strm_name_csr;
17454 END IF;
17455 IF l_rl_csr%ISOPEN THEN
17456 CLOSE l_rl_csr;
17457 END IF;
17458 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
17459 l_api_name,
17460 G_PKG_NAME,
17461 'OKL_API.G_RET_STS_UNEXP_ERROR',
17462 x_msg_count,
17463 x_msg_data,
17464 '_PVT');
17465 WHEN OTHERS then
17466 IF l_hdr_csr%ISOPEN THEN
17467 CLOSE l_hdr_csr;
17468 END IF;
17469 IF ib_csr%ISOPEN THEN
17470 CLOSE ib_csr;
17471 END IF;
17472 IF l_line_rec_csr%ISOPEN THEN
17473 CLOSE l_line_rec_csr;
17474 END IF;
17475 IF l_rl_csr1%ISOPEN THEN
17476 CLOSE l_rl_csr1;
17477 END IF;
17478 IF strm_name_csr%ISOPEN THEN
17479 CLOSE strm_name_csr;
17480 END IF;
17481 IF l_rl_csr%ISOPEN THEN
17482 CLOSE l_rl_csr;
17483 END IF;
17484 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
17485 l_api_name,
17486 G_PKG_NAME,
17487 'OTHERS',
17488 x_msg_count,
17489 x_msg_data,
17490 '_PVT');
17491 END extract_params_loan_paydown;
17492
17493 PROCEDURE extract_params_ppd_rebook(
17494 p_api_version IN NUMBER,
17495 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
17496 p_chr_id IN VARCHAR2,
17497 x_return_status OUT NOCOPY VARCHAR2,
17498 x_msg_count OUT NOCOPY NUMBER,
17499 x_msg_data OUT NOCOPY VARCHAR2,
17500 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
17501 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
17502 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
17503 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
17504 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
17505 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
17506 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
17507
17508 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_PPD_REBOOK';
17509 l_api_version CONSTANT NUMBER := 1;
17510 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
17511 l_level_type NUMBER;
17512 l_strm_name VARCHAR2(200);
17513 i BINARY_INTEGER := 0;
17514 j BINARY_INTEGER := 0;
17515 k BINARY_INTEGER := 0;
17516 l BINARY_INTEGER := 0;
17517 m BINARY_INTEGER := 0;
17518 idx BINARY_INTEGER := 0;
17519 l_basis_percent NUMBER;
17520 styid NUMBER;
17521 -- l_pricing_name VARCHAR2(40); --02-Sep-11 SECHAWLA 12936702
17522 l_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
17523 l_salvage NUMBER;
17524 l_purchase_option VARCHAR2(256);
17525 l_deal_type VARCHAR2(256);
17526 l_purchase_option_amount NUMBER;
17527 l_msg_count Number;
17528 l_msg_data varchar2(2000);
17529 l_chr_id Number := TO_NUMBER(p_chr_id);
17530 l_cle_id Number;
17531 l_rgd_code Varchar2(30) := 'LAPSTH';
17532 l_rdf_code Varchar2(30) := 'LASTRM';
17533 l_rdf_name Varchar2(80) := 'xxx';
17534 l_id1 Varchar2(40);
17535 l_id2 Varchar2(200);
17536 l_name Varchar2(200);
17537 l_description Varchar2(2000);
17538 l_status Varchar2(1);
17539 l_start_date date;
17540 l_end_date date;
17541 l_org_id Number;
17542 l_inv_org_id Number;
17543 l_book_type_code Varchar2(15);
17544 l_select Varchar2(2000);
17545 l_msg_index_out Number;
17546 l_total_lending NUMBER;
17547 l_down_payment_amt NUMBER; --Added by bkatraga for bug 15942693
17548
17549
17550 Cursor l_struct_csr( chrId NUMBER ) is
17551 select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
17552 from OKC_RULE_GROUPS_B crg,
17553 OKC_RULES_B crl
17554 where crl.rgp_id = crg.id
17555 and crg.RGD_CODE = 'LALEVL'
17556 and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
17557 and crg.dnz_chr_id = chrId;
17558
17559
17560 l_line_rec l_line_rec_csr%ROWTYPE;
17561 l_lne_rec l_line_rec_csr%ROWTYPE;
17562 l_hdr_rec l_hdr_csr%ROWTYPE;
17563 l_rl_rec l_rl_csr%ROWTYPE;
17564 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
17565 l_rl_rec1 l_rl_csr1%ROWTYPE;
17566 l_tx_rec l_tx_csr%ROWTYPE;
17567 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
17568 l_strm_name_rec strm_name_csr%ROWTYPE;
17569 l_ib_rec ib_csr%ROWTYPE;
17570 l_struct_rec l_struct_csr%ROWTYPE;
17571 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
17572 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
17573 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
17574 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
17575 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
17576 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
17577 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
17578 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
17579 l_csm_line_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
17580 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
17581 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
17582 --p_deal_type okl_st_gen_tmpt_sets.deal_type%TYPE;
17583
17584 --mansrini : Code for VR build
17585 CURSOR get_day_conv_on_contrct
17586 IS
17587 SELECT
17588 --Added by srsreeni for bug6076113
17589 -- rate_params.days_in_a_year_code,
17590 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
17591 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
17592 rate_params.days_in_a_year_code
17593 --srsreeni bug6076113 ends
17594 FROM okl_k_rate_params rate_params
17595 WHERE khr_id = p_chr_id;
17596
17597 CURSOR get_day_conv_on_sgt
17598 IS
17599 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
17600 gts.days_in_yr_code
17601 FROM
17602 okl_k_headers khr,
17603 okl_products_v pdt,
17604 okl_ae_tmpt_sets_v aes,
17605 OKL_ST_GEN_TMPT_SETS gts
17606 WHERE
17607 khr.pdt_id = pdt.id AND
17608 pdt.aes_id = aes.id AND
17609 aes.gts_id = gts.id AND
17610 khr.id = p_chr_id;
17611
17612 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
17613 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
17614 l_number_periods_remaining okl_sif_fees.number_of_periods%TYPE;
17615 l_number_periods_completed okl_sif_fees.number_of_periods%TYPE;
17616 l_number_periods_completed_cpy okl_sif_fees.number_of_periods%TYPE;
17617 l_variable_rate okl_sif_fees.rate%TYPE;
17618 l_total_oec okl_k_lines_full_v.oec%TYPE;
17619 --Added by kthiruva for the VR build
17620 l_rent_sty_id strm_rec_type;
17621 l_prev_ppd NUMBER := 0;
17622
17623 --Added by NIKSHAH for bug 9103807 :START
17624 l_total_amount NUMBER;
17625 l_index_flag NUMBER;
17626 l_funded_amount NUMBER;
17627 l_diff_amount NUMBER;
17628 --Added by NIKSHAH for bug 9103807 :END
17629
17630
17631 --This Cursor fetches the Principal Paydown lines existing per asset line
17632 --on the contract
17633 CURSOR get_prev_ppd_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
17634 rlcat okc_rules_b.rule_information_category%TYPE,
17635 chrId NUMBER,
17636 cleId NUMBER )
17637 IS
17638 SELECT crl.id slh_id,
17639 crl.object1_id1,
17640 crl.rule_information1,
17641 crl.rule_information2,
17642 crl.rule_information3,
17643 crl.rule_information5,
17644 crl.rule_information6,
17645 crl.rule_information7,
17646 crl.rule_information8,
17647 crl.rule_information13,
17648 crl.rule_information10
17649 FROM okc_rule_groups_b crg,
17650 okc_rules_b crl,
17651 okl_strm_type_v sty
17652 WHERE crl.rgp_id = crg.id
17653 AND crg.rgd_code = rgcode
17654 AND crl.rule_information_category = rlcat
17655 AND crg.dnz_chr_id = chrId
17656 AND crg.cle_id = cleId
17657 AND crl.object1_id1 = sty.id
17658 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
17659 ORDER BY crl.rule_information1;
17660
17661 get_prev_ppd_rec get_prev_ppd_csr%ROWTYPE;
17662
17663 --Added by kthiruva on 15-Jun-2006 for Bug 5261952
17664 --The base rate defined on the contract is captured when the payment type is Principal
17665 CURSOR get_base_rate_csr(p_chr_id IN NUMBER,
17666 p_date IN DATE)
17667 IS
17668 SELECT PARM.BASE_RATE
17669 FROM OKL_K_RATE_PARAMS parm
17670 WHERE PARM.KHR_ID = p_chr_id
17671 AND PARM.PARAMETER_TYPE_CODE = 'ACTUAL'
17672 AND p_date BETWEEN EFFECTIVE_FROM_DATE AND NVL(EFFECTIVE_TO_DATE,p_date);
17673
17674 l_base_rate NUMBER;
17675
17676 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
17677 cursor get_rebook_type is
17678 select nvl(amort_inc_adj_rev_dt_yn, 'N')
17679 from okl_sys_acct_opts;
17680 l_PROSPECTIVE_REBOOK_YN varchar2(1);
17681
17682
17683 FUNCTION get_end_date(
17684 l_start_date IN DATE,
17685 p_frequency IN VARCHAR2,
17686 p_period IN NUMBER,
17687 ---- cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
17688 p_start_day IN NUMBER DEFAULT NULL
17689 )
17690 RETURN DATE IS
17691 l_end_date date;
17692 factor number := 0;
17693 BEGIN
17694 if(p_frequency = 'M') then
17695 factor := 1;
17696 elsif(p_frequency = 'Q') then
17697 factor := 3;
17698 elsif(p_frequency = 'S') then
17699 factor := 6;
17700 elsif(p_frequency = 'A') then
17701 factor := 12;
17702 end if;
17703 l_end_date := Okl_Lla_Util_Pvt.calculate_end_date(p_start_date => l_start_date,
17704 p_months => factor * NVL(p_period,0),
17705 p_start_day => p_start_day);
17706
17707 return l_end_date;
17708 EXCEPTION
17709 WHEN OTHERS THEN
17710 RETURN null;
17711 END get_end_date;
17712
17713 BEGIN
17714 x_return_status := OKL_API.G_RET_STS_SUCCESS;
17715 -- Call start_activity to create savepoint, check compatibility
17716 -- and initialize message list
17717 x_return_status := OKL_API.START_ACTIVITY (
17718 l_api_name
17719 ,p_init_msg_list
17720 ,'_PVT'
17721 ,x_return_status);
17722 -- Check if activity started successfully
17723 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17724 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17725 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17726 RAISE OKL_API.G_EXCEPTION_ERROR;
17727 END IF;
17728
17729
17730 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
17731 open get_rebook_type;
17732 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN;
17733 close get_rebook_type;
17734
17735
17736 OPEN l_hdr_pdt_csr(p_chr_id);
17737 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
17738 CLOSE l_hdr_pdt_csr;
17739
17740 --get day convention info : mansrini
17741 OPEN get_day_conv_on_contrct;
17742 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
17743 CLOSE get_day_conv_on_contrct;
17744
17745 --Added by srsreeni for bug6076113
17746 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
17747 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
17748 --srsreeni bug6076113 ends
17749 THEN
17750 OPEN get_day_conv_on_sgt;
17751 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
17752 CLOSE get_day_conv_on_sgt;
17753 END IF;
17754 -- Validate the payments
17755 validate_payments(p_api_version => p_api_version,
17756 p_init_msg_list => p_init_msg_list,
17757 x_return_status => x_return_status,
17758 x_msg_count => x_msg_count,
17759 x_msg_data => x_msg_data,
17760 p_khr_id => p_chr_id,
17761 p_paym_tbl => l_pay_tbl);
17762 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17763 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17764 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17765 RAISE OKL_API.G_EXCEPTION_ERROR;
17766 END IF;
17767 i := 0; j := 0; k := 0; l := 0; m := 0;
17768 /*
17769 OPEN l_hdr_pdt_csr(p_chr_id);
17770 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
17771 CLOSE l_hdr_pdt_csr;
17772 */
17773 -- Header infro
17774 OPEN l_hdr_csr(p_chr_id);
17775 FETCH l_hdr_csr into l_hdr_rec;
17776 IF l_hdr_csr%NOTFOUND THEN
17777 okl_api.set_message(p_app_name => G_APP_NAME,
17778 p_msg_name => G_LLA_NO_MATCHING_RECORD,
17779 p_token1 => G_COL_NAME_TOKEN,
17780 p_token1_value => 'Contract id');
17781 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17782 END IF;
17783 CLOSE l_hdr_csr;
17784 l_csm_loan_header.khr_id := p_chr_id;
17785 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
17786 l_csm_loan_header.date_start := l_hdr_rec.start_date;
17787 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
17788 l_deal_type := l_hdr_rec.deal_type;
17789 -- Fetching the location of the asset
17790 OPEN ib_csr(TO_NUMBER(p_chr_id));
17791 FETCH ib_csr into l_ib_rec;
17792 IF ib_csr%NOTFOUND THEN
17793 okl_api.set_message(p_app_name => G_APP_NAME,
17794 p_msg_name => G_LLA_NO_MATCHING_RECORD,
17795 p_token1 => G_COL_NAME_TOKEN,
17796 p_token1_value => 'Contract id');
17797 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17798 END IF;
17799 CLOSE ib_csr;
17800 l_csm_loan_header.country := l_ib_rec.country;
17801 --The orp code for the Principal Paydown process is used here.
17802 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
17803 -- Callling the formual ccontract cap amount
17804 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
17805 --The Capital Reduction should not be removed from the Funding amount
17806 --Bug 4738011 - Start of Changes
17807 execute_formula(p_api_version => p_api_version,
17808 p_init_msg_list => p_init_msg_list,
17809 x_return_status => x_return_status,
17810 x_msg_count => x_msg_count,
17811 x_msg_data => x_msg_data,
17812 p_formula_name => 'CONTRACT_CAP_AMNT_LOAN',
17813 p_contract_id => p_chr_id,
17814 p_line_id => NULL,
17815 x_value => l_total_lending);
17816 --Bug 4738011 - End of Changes
17817 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17818 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17819 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17820 RAISE OKL_API.G_EXCEPTION_ERROR;
17821 END IF;
17822 l_csm_loan_header.total_lending := l_total_lending;
17823 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
17824
17825 --kthiruva : for PR proj
17826 --Fetch the total OEC for this contract so that it can be prorated for each asset in
17827 --the following loop
17828 OPEN total_oec_csr(p_chr_id);
17829 FETCH total_oec_csr INTO l_total_oec;
17830 CLOSE total_oec_csr;
17831
17832 -- asset infor
17833 FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
17834 i := i + 1;
17835 idx := 0;
17836 l_csm_loan_levels_tbl(i).kle_loan_id := l_line_rec.id;
17837
17838 --sechawla 27-JUL-09 :ESG PRB Enhancements :populate orig_contract_line_id for loans
17839 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17840 l_csm_loan_levels_tbl(i).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17841 end if;
17842
17843 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
17844 --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
17845 --payment tag in the Lending Loans tag of the Outbound XML.
17846 --Bug 4738011 - Start of Changes
17847 IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
17848 l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
17849
17850 --Added by bkatraga for bug 15942693
17851 IF(l_line_rec.capital_reduction IS NULL) THEN
17852 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
17853 l_csm_loan_levels_tbl(i).down_payment_amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
17854 ELSE
17855 l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
17856 END IF;
17857 --end bkatraga for bug 15942693
17858 END IF;
17859 --Bug 4738011 - End of Changes
17860
17861 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
17862 --Added by kthiruva on 05-Dec-2005
17863 --Initialising l_first_batch for every asset line
17864 --Bug 4777531 - Start of Changes
17865 l_first_batch := 'N';
17866 --Bug 4777531 - End of Changes
17867
17868 l_level_type := l_rl_rec1.object1_id1;
17869
17870 OPEN strm_name_csr ( l_level_type );
17871 FETCH strm_name_csr into l_strm_name_rec;
17872 IF strm_name_csr%NOTFOUND THEN
17873 okl_api.set_message(p_app_name => G_APP_NAME,
17874 p_msg_name => G_LLA_NO_MATCHING_RECORD,
17875 p_token1 => G_COL_NAME_TOKEN,
17876 p_token1_value => 'Contract id');
17877 x_return_status := OKL_API.G_RET_STS_ERROR;
17878 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
17879 END IF;
17880 CLOSE strm_name_csr;
17881
17882 --l_strm_name := l_strm_name_rec.name;
17883 l_strm_name := l_strm_name_rec.stream_type_purpose;
17884 -- srsreeni - Bug#5699923 - Added - Start
17885 -- DONOT request SuperTrump to generate streams
17886 -- for TERMINATED lines
17887 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
17888 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
17889 IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
17890 --srsreeni Bug6245602 end
17891 --Added by srsreeni for bug5841892
17892 -- m := m + 1;
17893 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
17894 --bug5841892 end of changes
17895 get_dependent_pricing_name
17896 (
17897 p_khr_id =>p_chr_id,
17898 p_sty_id =>l_level_type,
17899 x_return_status =>x_return_status,
17900 x_dependent_pricing_name =>l_pricing_name
17901 );
17902 --Added by srsreeni for bug5841892
17903 if l_pricing_name is not null then
17904 m := m + 1;
17905 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
17906 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
17907
17908 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
17909 end if;
17910 --bug5841892 end of changes
17911 END IF;
17912 END IF; -- End of check for TERMINATED status
17913 -- srsreeni - Bug#5699923 - Added - End
17914 --idx := 0;
17915 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
17916 -- srsreeni - Bug#5699923 - Added - Start
17917 -- DONOT request SuperTrump to generate streams
17918 -- for TERMINATED lines
17919 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
17920 IF(g_rep_req_yn = 'Y') THEN
17921
17922 get_dependent_stream_types
17923 (
17924 p_khr_id =>p_chr_id,
17925 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
17926 p_primary_sty_id =>l_level_type,
17927 x_return_status => x_return_status,
17928 x_dependent_sty_id =>l_strm_type_id_tbl
17929 );
17930 IF x_return_status = 'E' THEN
17931 x_return_status := 'S';
17932 END IF;
17933
17934 ELSE
17935
17936 get_dependent_stream_types
17937 (
17938 p_khr_id =>p_chr_id,
17939 p_primary_sty_id =>l_level_type,
17940 x_return_status => x_return_status,
17941 x_dependent_sty_id =>l_strm_type_id_tbl
17942 );
17943 IF x_return_status = 'E' THEN
17944 x_return_status := 'S';
17945 END IF;
17946
17947 END IF;
17948
17949
17950 IF l_strm_type_id_tbl.COUNT > 0 THEN
17951 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
17952 m := m + 1;
17953
17954 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
17955 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
17956 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
17957 END LOOP;
17958 END IF;
17959 END IF; -- End of check for TERMINATED status
17960 -- srsreeni - Bug#5699923 - Added - End
17961
17962 j := j + 1;
17963 idx := idx + 1;
17964 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
17965
17966 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
17967 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
17968 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
17969 end if;
17970
17971 l_csm_line_details_tbl(j).description := 'Funding';
17972 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
17973 --The Capital Reduction should not be removed from the Funding amount
17974 --Bug 4738011 - Start of Changes
17975 execute_formula(p_api_version => p_api_version,
17976 p_init_msg_list => p_init_msg_list,
17977 x_return_status => x_return_status,
17978 x_msg_count => x_msg_count,
17979 x_msg_data => x_msg_data,
17980 p_formula_name => 'LINE_CAP_AMNT_LOAN',
17981 p_contract_id => p_chr_id,
17982 p_line_id => l_line_rec.id,
17983 x_value => l_total_lending);
17984 --Bug 4738011 - End of Changes
17985 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17986 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
17987 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17988 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
17989 END IF;
17990 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
17991 l_ppd_count := 0;
17992 l_ppd_tbl.delete;
17993 --Modified by kthiruva on 26-Sep-2005
17994 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
17995 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
17996 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
17997 IF (l_rl_rec.rule_information7 IS NOT NULL OR
17998 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
17999 (l_rl_rec.rule_information8 IS NOT NULL OR
18000 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18001 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18002 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
18003 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
18004 l_ppd_count := l_ppd_count + 1;
18005 END IF;
18006 END LOOP;
18007 END LOOP;
18008
18009 --Populating the diff_to_next column for all records in the l_ppd_tbl
18010 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
18011 --If there is no subsequent paydown then the diff_to_next column stores a value 0
18012 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
18013 IF l_ppd_tbl.COUNT = 1 THEN
18014 l_ppd_tbl(k).diff_to_next := 0;
18015 ELSE
18016 IF (k = l_ppd_tbl.LAST) THEN
18017 l_ppd_tbl(k).diff_to_next := 0;
18018 ELSE
18019 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
18020 END IF;
18021 END IF;
18022 END LOOP;
18023
18024 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_total_lending, p_currency_code => l_hdr_rec.currency_code);
18025 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
18026 --Bug 4576794 - Start of Changes
18027 --When a funding date is specified on the asset,it needs to be used as the date_start
18028 --When funding date is not specified, we use the contract start date
18029
18030 --sechawla 11-sep-09 8798556 : When funding date is not specified, use asset start date, instead of contract start dt
18031 --l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
18032 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_line_rec.start_date);
18033
18034
18035 --Bug 4576794 - End of Changes
18036 l_csm_line_details_tbl(j).level_index_number := idx;
18037 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
18038 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18039 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18040
18041 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
18042 --If the Down Payment is capitalised then , a new funding line with the opposite sign
18043 --needs to be added
18044 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
18045 --Bug 4738011 - Start of Changes
18046 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
18047 j := j + 1;
18048 idx := idx + 1;
18049 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18050
18051 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18052 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18053 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18054 end if;
18055
18056 l_csm_line_details_tbl(j).description := 'Funding';
18057
18058 --Added by bkatraga for bug 15942693
18059 IF(l_line_rec.capital_reduction IS NULL) THEN
18060 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
18061 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
18062 ELSE
18063 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction;
18064 END IF;
18065 l_csm_line_details_tbl(j).amount := l_csm_line_details_tbl(j).amount * (-1);
18066 --end bkatraga for bug 15942693
18067
18068 --sechawla 11-sep-09 8798556
18069 --l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
18070 l_csm_line_details_tbl(j).date_start := l_line_rec.start_date;
18071
18072 l_csm_line_details_tbl(j).level_index_number := idx;
18073 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
18074 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18075 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18076 END IF;
18077 --Bug 4738011 - End of Changes
18078
18079 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18080 -- Start of Bug#2757289 modification
18081
18082 l_number_periods_remaining :=0;
18083 l_number_periods_completed := 0;
18084 l_number_periods_completed_cpy :=0;
18085 --If the payment is a stub
18086 IF (l_rl_rec.rule_information7 IS NOT NULL OR
18087 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18088 (l_rl_rec.rule_information8 IS NOT NULL OR
18089 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18090
18091 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
18092 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
18093 --Modified by kthiruva on 13-Feb-2006
18094 --Bug 4964710 - Start of Changes
18095 --============================================================================================
18096 --Step 1 : If payment is in Arrears created the PPD stub First
18097 --============================================================================================
18098 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
18099 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
18100 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
18101 j := j + 1;
18102 idx := idx + 1;
18103 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
18104 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18105 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18106 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18107 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18108
18109 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18110 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18111 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18112 end if;
18113
18114 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
18115 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_ppd_tbl(k).paydown_amount, p_currency_code => l_hdr_rec.currency_code);
18116 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
18117 l_csm_line_details_tbl(j).level_index_number := idx;
18118 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18119 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18120 --This rate column is relevant for rent payments only in the rebook scenarios
18121 --after a reamort
18122 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18123
18124 --When the cashflow step is a payment line, both amount and rate should not be locked
18125 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18126 -- we are solving for rate.
18127 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
18128 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18129 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18130 ELSE
18131 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18132 END IF;
18133
18134 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18135 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18136 END IF;
18137
18138 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18139 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18140 ELSE
18141 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18142 END IF;
18143
18144 END IF;
18145 END LOOP;
18146 --=====================================================================
18147 --Step 2 : The payment like for the existing stub is being created here
18148 --=====================================================================
18149 --The payment line for the existing stub is created here
18150 j := j + 1;
18151 idx := idx + 1;
18152 l_csm_line_details_tbl(j).level_index_number := idx;
18153 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => TO_NUMBER(l_rl_rec.rule_information8), p_currency_code => l_hdr_rec.currency_code);
18154 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
18155 THEN
18156 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
18157 ELSE
18158 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18159 END IF;
18160 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18161 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18162 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18163 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18164 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18165
18166 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18167 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18168 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18169 end if;
18170
18171 l_csm_line_details_tbl(j).description := l_strm_name;
18172 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18173 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18174 --This rate column is relevant for rent payments only in the rebook scenarios
18175 --after a reamort
18176 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18177
18178 --When the cashflow step is a payment line, both amount and rate should not be locked
18179 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18180 -- we are solving for rate.
18181 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
18182
18183 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18184 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18185 ELSE
18186 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18187 END IF;
18188
18189 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18190 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18191 END IF;
18192
18193 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18194 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18195 ELSE
18196 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18197 END IF;
18198 --=======================================================================================
18199 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
18200 --=======================================================================================
18201 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
18202 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
18203 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
18204 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
18205 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
18206 j := j + 1;
18207 idx := idx + 1;
18208 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
18209 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18210 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18211 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18212 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18213
18214 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18215 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18216 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18217 end if;
18218
18219 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
18220 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_ppd_tbl(k).paydown_amount, p_currency_code => l_hdr_rec.currency_code);
18221 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18222 l_csm_line_details_tbl(j).level_index_number := idx;
18223 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18224 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18225 --This rate column is relevant for rent payments only in the rebook scenarios
18226 --after a reamort
18227 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18228
18229 --When the cashflow step is a payment line, both amount and rate should not be locked
18230 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18231 -- we are solving for rate.
18232 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
18233 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18234 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18235 ELSE
18236 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18237 END IF;
18238
18239 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18240 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18241 END IF;
18242
18243 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18244 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18245 ELSE
18246 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18247 END IF;
18248
18249 END IF;
18250 END LOOP;
18251 --Bug 4964710 - End of Changes
18252 -- End of Bug#2757289 modification
18253 /*mansrini Handle PPD for non-stub payments here*/
18254 ELSIF (l_rl_rec.rule_information7 IS NULL OR
18255 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
18256 (l_rl_rec.rule_information8 IS NULL OR
18257 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
18258
18259 --When there is no PPD in the range of the periodic payment, the payment is retained as is
18260 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
18261 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
18262 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
18263 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
18264
18265 j := j + 1;
18266 idx := idx + 1;
18267 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18268
18269 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18270 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18271 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18272 end if;
18273
18274 l_csm_line_details_tbl(j).description := l_strm_name;
18275 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')), p_currency_code => l_hdr_rec.currency_code);
18276 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
18277 l_csm_line_details_tbl(j).level_index_number := idx;
18278 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18279 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
18280
18281 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
18282 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18283 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18284 --This rate column is relevant for rent payments only in the rebook scenarios
18285 --after a reamort
18286 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18287
18288 --When the cashflow step is a payment line, both amount and rate should not be locked
18289 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18290 -- we are solving for rate.
18291 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
18292
18293 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18294 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18295 END IF;
18296
18297 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18298 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18299 ELSE
18300 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18301 END IF;
18302
18303 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18304 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18305 ELSE
18306 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18307 END IF;
18308
18309 ELSE
18310
18311 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
18312 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
18313 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN /*chk date cols*/
18314 --=============================================================
18315 --Step 1 : Obtaining the number of periods prior to the paydown
18316 --=============================================================
18317 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
18318 --Modified by kthiruva on 12-Dec-2005
18319 --Instead of round, the function trunc needs to be used as we want the number
18320 --of periods elapsed completely
18321 --Bug 4878162 - Start of Changes
18322 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
18323 --Bug 4878162 - End of Changes
18324
18325 IF l_number_periods_completed = 0 THEN
18326 l_number_periods_completed_cpy := 0;
18327 l_number_periods_remaining := l_number_periods_remaining - 1;
18328 ELSE
18329 l_number_periods_completed_cpy := l_number_periods_completed;
18330 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
18331 END IF;
18332 --======================================================================================
18333 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
18334 -- yet to be processed
18335 --=======================================================================================
18336
18337 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
18338 j := j + 1;
18339 idx := idx + 1;
18340 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18341
18342 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18343 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18344 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18345 end if;
18346
18347 l_csm_line_details_tbl(j).description := l_strm_name;
18348 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')), p_currency_code => l_hdr_rec.currency_code);
18349 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
18350 l_csm_line_details_tbl(j).level_index_number := idx;
18351 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18352
18353 IF l_number_periods_completed_cpy = 0 THEN
18354 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
18355 ELSE
18356 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
18357 END IF;
18358
18359 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
18360 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18361 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18362 --This rate column is relevant for rent payments only in the rebook scenarios
18363 --after a reamort
18364 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18365
18366 --When the cashflow step is a payment line, both amount and rate should not be locked
18367 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18368 -- we are solving for rate.
18369 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
18370
18371 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18372 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18373 END IF;
18374
18375 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18376 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18377 ELSE
18378 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18379 END IF;
18380
18381 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18382 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18383 ELSE
18384 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18385 END IF;
18386 l_first_batch := 'Y';
18387 END IF;
18388 --=====================================================================
18389 --Step 3 : If the payment is in Advance Create the Adjusting stub first
18390 --=====================================================================
18391 --If the payment is in Advance, the Adjusting stub needs to be created
18392 --first followed up the PPD Stub
18393 --For Payment in Arrears, the PPD stub is creted first followed by the
18394 --Adjusting Stub
18395 --Added by kthiruva on 10-Feb-2006
18396 --Bug 4964710 - Start of Changes
18397 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
18398 THEN
18399 --Calculating the days between the Paydown date and the due date of the next periodic payment
18400 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
18401 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
18402
18403 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
18404 --line for remaining payments are created.
18405 --If only one PPD is within a period then an adjusting stub is created for the rest
18406 --of the period and one payment line for the remaining periods until the next paydown date
18407 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
18408 j := j + 1;
18409 idx := idx + 1;
18410 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18411 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18412 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18413 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18414 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18415
18416 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18417 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18418 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18419 end if;
18420
18421 l_csm_line_details_tbl(j).description := l_strm_name;
18422 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')), p_currency_code => l_hdr_rec.currency_code);
18423 --The adjusting stub would end one day before the PPD date
18424 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
18425 l_csm_line_details_tbl(j).level_index_number := idx;
18426 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18427 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18428 --This rate column is relevant for rent payments only in the rebook scenarios
18429 --after a reamort
18430 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18431
18432 --When the cashflow step is a payment line, both amount and rate should not be locked
18433 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18434 -- we are solving for rate.
18435 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
18436
18437 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18438 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18439 END IF;
18440
18441 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18442 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18443 ELSE
18444 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18445 END IF;
18446
18447 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18448 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18449 ELSE
18450 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18451 END IF;
18452 END IF;
18453 END IF;
18454 --Bug 4964710 - End of Changes
18455
18456 --=================================
18457 --Step 4 : Create the paydown stub
18458 --=================================
18459
18460 /*PPD stub*/
18461 j := j + 1;
18462 idx := idx + 1;
18463 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
18464 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18465 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18466 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18467 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18468
18469 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18470 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18471 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18472 end if;
18473
18474 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
18475 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_ppd_tbl(k).paydown_amount, p_currency_code => l_hdr_rec.currency_code);
18476 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
18477 THEN
18478 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
18479 ELSE
18480 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
18481 END IF;
18482 l_csm_line_details_tbl(j).level_index_number := idx;
18483 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18484 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18485 --This rate column is relevant for rent payments only in the rebook scenarios
18486 --after a reamort
18487 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18488
18489 --When the cashflow step is a payment line, both amount and rate should not be locked
18490 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18491 -- we are solving for rate.
18492 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
18493
18494 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18495 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18496 END IF;
18497
18498 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18499 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18500 ELSE
18501 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18502 END IF;
18503
18504 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18505 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18506 ELSE
18507 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18508 END IF;
18509 --===============================================================================
18510 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
18511 --================================================================================
18512 --Added by kthiruva on 10-Feb-2006
18513 --Bug 4964710 - Start of Changes
18514 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
18515 THEN
18516 --Calculating the days between the Paydown date and the due date of the next periodic payment
18517 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
18518 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
18519
18520 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
18521 --line for remaining payments are created.
18522 --If only one PPD is within a period then an adjusting stub is created for the rest
18523 --of the period and one payment line for the remaining periods until the next paydown date
18524 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
18525 /*Adjusting stub*/
18526 j := j + 1;
18527 idx := idx + 1;
18528 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18529 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18530 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18531 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18532 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18533
18534 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18535 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18536 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18537 end if;
18538
18539 l_csm_line_details_tbl(j).description := l_strm_name;
18540 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')), p_currency_code => l_hdr_rec.currency_code);
18541 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
18542 l_csm_line_details_tbl(j).level_index_number := idx;
18543 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18544 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18545 --This rate column is relevant for rent payments only in the rebook scenarios
18546 --after a reamort
18547 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18548
18549 --When the cashflow step is a payment line, both amount and rate should not be locked
18550 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18551 -- we are solving for rate.
18552 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
18553
18554 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18555 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18556 END IF;
18557
18558 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18559 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18560 ELSE
18561 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18562 END IF;
18563
18564 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18565 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18566 ELSE
18567 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18568 END IF;
18569 END IF;
18570 END IF;
18571 --Bug 4964710 - Start of Changes
18572 --===================================================================================
18573 --Step 6 : Check whether a payment line for the remaining payments needs to be created
18574 --===================================================================================
18575
18576 --The periods between the end date of the adjusting stub and the next PPD is calculated
18577 --If number of periods > 0, then a payment line for that many periods needs to be created.
18578 IF k = l_ppd_tbl.LAST THEN
18579 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
18580 ELSE
18581 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
18582 END IF;
18583 --Modified by kthiruva on 12-Dec-2005
18584 --Use round here
18585 --Bug 4878162 - Start of Changes
18586 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
18587 --Bug 4878162 - End of Changes
18588
18589 --Create a payment line only if the number of periods till the next paydown is greater than 0
18590 IF (l_periods_after_ppd > 0) THEN
18591 /*Remaining amts*/
18592 j := j + 1;
18593 idx := idx + 1;
18594 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18595 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
18596 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
18597 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18598 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18599
18600 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18601 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18602 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18603 end if;
18604
18605 l_csm_line_details_tbl(j).description := l_strm_name;
18606 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')), p_currency_code => l_hdr_rec.currency_code);
18607 l_csm_line_details_tbl(j).level_index_number := idx;
18608 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18609 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18610 --This rate column is relevant for rent payments only in the rebook scenarios
18611 --after a reamort
18612 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
18613
18614 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
18615 --When the cashflow step is a payment line, both amount and rate should not be locked
18616 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18617 -- we are solving for rate.
18618 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
18619
18620 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18621 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18622 END IF;
18623
18624 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18625 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18626 ELSE
18627 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18628 END IF;
18629
18630 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18631 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18632 ELSE
18633 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18634 END IF;
18635 END IF;--End of condition l_periods_after_ppd >0
18636 END IF;--The condition check for the date of every PPD in the ppd_tbl
18637 END LOOP;--loop for l_ppd_tbl
18638 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
18639 END IF;--The condition checking for Stub or periodic payment
18640 END LOOP;
18641 --Added by kthiruva for VR Build
18642 --When the Payment Type on the loan contract is PRINCIPAL.
18643 ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
18644 -- srsreeni - Bug#5699923 - Added - Start
18645 -- DONOT request SuperTrump to generate streams
18646 -- for TERMINATED lines
18647 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
18648 IF(g_rep_req_yn = 'Y') THEN
18649
18650 --Added by kthriuva for VR build
18651 --For payment of type principal, we need to request the dependents
18652 --on Rent. Hence obtaining the stream type id of Rent
18653 get_primary_no_prc_stream_type
18654 (
18655 p_khr_id =>p_chr_id,
18656 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18657 p_primary_sty_purpose =>'RENT',
18658 x_return_status => x_return_status,
18659 x_primary_sty_id => l_rent_sty_id
18660 );
18661 --kthriuva - End of Changes for VR build
18662
18663 get_dependent_stream_types
18664 (
18665 p_khr_id =>p_chr_id,
18666 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18667 p_primary_sty_id =>l_rent_sty_id.id,
18668 x_return_status => x_return_status,
18669 x_dependent_sty_id =>l_strm_type_id_tbl
18670 );
18671 IF x_return_status = 'E' THEN
18672 x_return_status := 'S';
18673 END IF;
18674
18675 ELSE
18676 --Added by kthriuva for VR build
18677 --For payment of type principal, we need to request the dependents
18678 --on Rent. Hence obtaining the stream type id of Rent
18679 get_primary_no_prc_stream_type
18680 (
18681 p_khr_id =>p_chr_id,
18682 p_pdt_id =>l_pdt_id_rec.pid,
18683 p_primary_sty_purpose =>'RENT',
18684 x_return_status => x_return_status,
18685 x_primary_sty_id => l_rent_sty_id
18686 );
18687
18688 --kthriuva - End of Changes for VR build
18689 get_dependent_stream_types
18690 (
18691 p_khr_id =>p_chr_id,
18692 p_primary_sty_id =>l_rent_sty_id.id,
18693 x_return_status => x_return_status,
18694 x_dependent_sty_id =>l_strm_type_id_tbl
18695 );
18696 IF x_return_status = 'E' THEN
18697 x_return_status := 'S';
18698 END IF;
18699
18700 END IF;
18701
18702
18703 IF l_strm_type_id_tbl.COUNT > 0 THEN
18704 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
18705 m := m + 1;
18706
18707 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
18708 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
18709 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18710 END LOOP;
18711 END IF;
18712 END IF; -- End of check for TERMINATED status
18713 -- srsreeni - Bug#5699923 - Added - End
18714 --Fetching the base rate
18715 OPEN get_base_rate_csr(p_chr_id => p_chr_id,
18716 p_date => l_hdr_rec.start_date);
18717 FETCH get_base_rate_csr INTO l_base_rate;
18718 IF get_base_rate_csr%NOTFOUND THEN
18719 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
18720 p_msg_name => 'OKL_LLAP_BASE_RATE_NOT_DEF');
18721 RAISE Okl_Api.G_EXCEPTION_ERROR;
18722 END IF;
18723 CLOSE get_base_rate_csr;
18724
18725 j := j + 1;
18726 idx := idx + 1;
18727 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18728
18729 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18730 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18731 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18732 end if;
18733
18734 l_csm_line_details_tbl(j).description := 'Funding';
18735 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
18736 --The Capital Reduction should not be removed from the Funding amount
18737 --Bug 4738011 - Start of Changes
18738 execute_formula(p_api_version => p_api_version,
18739 p_init_msg_list => p_init_msg_list,
18740 x_return_status => x_return_status,
18741 x_msg_count => x_msg_count,
18742 x_msg_data => x_msg_data,
18743 p_formula_name => 'LINE_CAP_AMNT_LOAN',
18744 p_contract_id => p_chr_id,
18745 p_line_id => l_line_rec.id,
18746 x_value => l_total_lending);
18747 --Bug 4738011 - End of Changes
18748 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18749 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18750 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18751 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18752 END IF;
18753 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
18754 l_ppd_count := 0;
18755 l_ppd_tbl.delete;
18756 --Added by kthiruva on 19-Sep-2005
18757 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
18758 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
18759 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18760 IF (l_rl_rec.rule_information7 IS NOT NULL OR
18761 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18762 (l_rl_rec.rule_information8 IS NOT NULL OR
18763 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18764 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18765 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
18766 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
18767 l_ppd_count := l_ppd_count + 1;
18768 END IF;
18769 END LOOP;
18770 END LOOP;
18771
18772 --Populating the diff_to_next column for all records in the l_ppd_tbl
18773 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
18774 --If there is no subsequent paydown then the diff_to_next column stores a value 0
18775 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
18776 IF l_ppd_tbl.COUNT = 1 THEN
18777 l_ppd_tbl(k).diff_to_next := 0;
18778 ELSE
18779 IF (k = l_ppd_tbl.LAST) THEN
18780 l_ppd_tbl(k).diff_to_next := 0;
18781 ELSE
18782 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
18783 END IF;
18784 END IF;
18785 END LOOP;
18786
18787 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_total_lending, p_currency_code => l_hdr_rec.currency_code);
18788 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
18789 --Bug 4576794 - Start of Changes
18790 --When a funding date is specified on the asset,it needs to be used as the date_start
18791 --When funding date is not specified, we use the contract start date
18792
18793 --sechawla 11-sep-09 8798556 : When funding date is not specified, use asset start date, instead of contract start dt
18794 --l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
18795 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_line_rec.start_date);
18796
18797
18798 --Bug 4576794 - End of Changes
18799 l_csm_line_details_tbl(j).level_index_number := idx;
18800 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
18801 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18802 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18803
18804 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
18805 --If the Down Payment is capitalised then , a new funding line with the opposite sign
18806 --needs to be added
18807 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
18808 --Bug 4738011 - Start of Changes
18809 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
18810 j := j + 1;
18811 idx := idx + 1;
18812 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18813
18814 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18815 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18816 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18817 end if;
18818
18819 l_csm_line_details_tbl(j).description := 'Funding';
18820
18821 --Added by bkatraga for bug 15942693
18822 IF(l_line_rec.capital_reduction IS NULL) THEN
18823 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
18824 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
18825 ELSE
18826 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction;
18827 END IF;
18828 l_csm_line_details_tbl(j).amount := l_csm_line_details_tbl(j).amount * (-1);
18829 --end bkatraga for bug 15942693
18830
18831 --sechawla 11-sep-09 8798556
18832 --l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
18833 l_csm_line_details_tbl(j).date_start := l_line_rec.start_date;
18834
18835 l_csm_line_details_tbl(j).level_index_number := idx;
18836 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
18837 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18838 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18839 END IF;
18840 --Bug 4738011 - End of Changes
18841
18842 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18843 -- Start of Bug#2757289 modification
18844
18845 l_number_periods_remaining :=0;
18846 l_number_periods_completed := 0;
18847 l_number_periods_completed_cpy :=0;
18848 --If payment is a stub
18849 IF (l_rl_rec.rule_information7 IS NOT NULL OR
18850 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18851 (l_rl_rec.rule_information8 IS NOT NULL OR
18852 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18853 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
18854 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
18855 --Modified by kthiruva on 13-Feb-2006
18856 --Bug 4964710 - Start of Changes
18857 --============================================================================================
18858 --Step 1 : If payment is in Arrears created the PPD stub First
18859 --============================================================================================
18860 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
18861 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
18862 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
18863 j := j + 1;
18864 idx := idx + 1;
18865 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
18866 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18867 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18868 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18869 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18870
18871 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18872 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18873 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18874 end if;
18875
18876 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
18877 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_ppd_tbl(k).paydown_amount, p_currency_code => l_hdr_rec.currency_code);
18878 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
18879 l_csm_line_details_tbl(j).level_index_number := idx;
18880 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18881 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18882 --When the payment type is Principal, the Base Rate specified in the contract needs to be
18883 --captured and passed. This rate is used in calculation of the Interest Payment Streams
18884 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
18885 --l_base_Rate needs to be used.
18886 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
18887
18888 --When the cashflow step is a payment line, both amount and rate should not be locked
18889 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18890 -- we are solving for rate.
18891 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
18892 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18893 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18894 ELSE
18895 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18896 END IF;
18897
18898 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18899 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18900 END IF;
18901
18902 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18903 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18904 ELSE
18905 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18906 END IF;
18907
18908 END IF;
18909 END LOOP;
18910 --=====================================================================
18911 --Step 2 : The payment like for the existing stub is being created here
18912 --=====================================================================
18913 --The payment line for the existing stub is created here
18914 j := j + 1;
18915 idx := idx + 1;
18916 l_csm_line_details_tbl(j).level_index_number := idx;
18917 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => TO_NUMBER(l_rl_rec.rule_information8) , p_currency_code => l_hdr_rec.currency_code);
18918 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
18919 THEN
18920 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
18921 ELSE
18922 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18923 END IF;
18924 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18925 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18926 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18927 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
18928 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18929
18930 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18931 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18932 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18933 end if;
18934
18935
18936 l_csm_line_details_tbl(j).description := l_strm_name;
18937 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18938 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18939 --When the payment type is Principal, the Base Rate specified in the contract needs to be
18940 --captured and passed. This rate is used in calculation of the Interest Payment Streams
18941 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
18942 --l_base_Rate needs to be used.
18943 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
18944
18945 --When the cashflow step is a payment line, both amount and rate should not be locked
18946 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
18947 -- we are solving for rate.
18948 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
18949
18950 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
18951 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
18952 ELSE
18953 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18954 END IF;
18955
18956 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18957 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18958 END IF;
18959
18960 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18961 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18962 ELSE
18963 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18964 END IF;
18965 --=======================================================================================
18966 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
18967 --=======================================================================================
18968 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
18969 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
18970 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
18971 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
18972 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
18973 j := j + 1;
18974 idx := idx + 1;
18975 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
18976 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18977 l_csm_line_details_tbl(j).period := g_stub_rec.period;
18978 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
18979 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
18980
18981 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
18982 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
18983 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
18984 end if;
18985
18986 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
18987 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_ppd_tbl(k).paydown_amount , p_currency_code => l_hdr_rec.currency_code);
18988 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18989 l_csm_line_details_tbl(j).level_index_number := idx;
18990 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
18991 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
18992 --When the payment type is Principal, the Base Rate specified in the contract needs to be
18993 --captured and passed. This rate is used in calculation of the Interest Payment Streams
18994 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
18995 --l_base_Rate needs to be used.
18996 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
18997
18998 --When the cashflow step is a payment line, both amount and rate should not be locked
18999 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
19000 -- we are solving for rate.
19001 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
19002 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19003 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19004 ELSE
19005 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19006 END IF;
19007
19008 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19009 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19010 END IF;
19011
19012 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19013 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19014 ELSE
19015 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19016 END IF;
19017
19018 END IF;
19019 END LOOP;
19020 --Bug 4964710 - End of Changes
19021 -- End of Bug#2757289 modification
19022 /*mansrini Handle PPD for non-stub payments here*/
19023 ELSIF (l_rl_rec.rule_information7 IS NULL OR
19024 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
19025 (l_rl_rec.rule_information8 IS NULL OR
19026 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
19027
19028 --When there is no PPD in the range of the periodic payment, the payment is retained as is
19029 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
19030 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
19031 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
19032 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
19033
19034 j := j + 1;
19035 idx := idx + 1;
19036 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
19037
19038 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
19039 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19040 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19041 end if;
19042
19043 l_csm_line_details_tbl(j).description := l_strm_name;
19044 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')) , p_currency_code => l_hdr_rec.currency_code);
19045 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
19046 l_csm_line_details_tbl(j).level_index_number := idx;
19047 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
19048 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
19049
19050 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
19051 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
19052 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
19053 --When the payment type is Principal, the Base Rate specified in the contract needs to be
19054 --captured and passed. This rate is used in calculation of the Interest Payment Streams
19055 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
19056 --l_base_Rate needs to be used.
19057 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
19058
19059 --When the cashflow step is a payment line, both amount and rate should not be locked
19060 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
19061 -- we are solving for rate.
19062 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
19063
19064 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19065 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19066 END IF;
19067
19068 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19069 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19070 ELSE
19071 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19072 END IF;
19073
19074 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19075 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19076 ELSE
19077 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19078 END IF;
19079
19080 ELSE
19081
19082 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
19083 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
19084 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN
19085 --=============================================================
19086 --Step 1 : Obtaining the number of periods prior to the paydown
19087 --=============================================================
19088 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
19089 --Modified by kthiruva on 12-Dec-2005
19090 --Use trunc instead of round as we need the number of periods elapsed completely
19091 --Bug 4878162 - Start of Changes
19092 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
19093 --Bug 4878162 - End of Changes
19094
19095
19096 IF l_number_periods_completed = 0 THEN
19097 l_number_periods_completed_cpy := 0;
19098 l_number_periods_remaining := l_number_periods_remaining - 1;
19099 ELSE
19100 l_number_periods_completed_cpy := l_number_periods_completed;
19101 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
19102 END IF;
19103 --======================================================================================
19104 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
19105 -- yet to be processed
19106 --=======================================================================================
19107
19108 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
19109 j := j + 1;
19110 idx := idx + 1;
19111 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
19112
19113 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
19114 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19115 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19116 end if;
19117
19118 l_csm_line_details_tbl(j).description := l_strm_name;
19119 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')) , p_currency_code => l_hdr_rec.currency_code);
19120 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
19121 l_csm_line_details_tbl(j).level_index_number := idx;
19122 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
19123
19124 IF l_number_periods_completed_cpy = 0 THEN
19125 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
19126 ELSE
19127 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
19128 END IF;
19129
19130 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
19131 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
19132 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
19133 --When the payment type is Principal, the Base Rate specified in the contract needs to be
19134 --captured and passed. This rate is used in calculation of the Interest Payment Streams
19135 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
19136 --l_base_Rate needs to be used.
19137 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
19138
19139 --When the cashflow step is a payment line, both amount and rate should not be locked
19140 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
19141 -- we are solving for rate.
19142 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
19143
19144 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19145 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19146 END IF;
19147
19148 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19149 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19150 ELSE
19151 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19152 END IF;
19153
19154 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19155 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19156 ELSE
19157 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19158 END IF;
19159 l_first_batch := 'Y';
19160 END IF;
19161 --=====================================================================
19162 --Step 3 : If the payment is in Advance Create the Adjusting stub first
19163 --=====================================================================
19164 --If the payment is in Advance, the Adjusting stub needs to be created
19165 --first followed up the PPD Stub
19166 --For Payment in Arrears, the PPD stub is creted first followed by the
19167 --Adjusting Stub
19168 --Added by kthiruva on 10-Feb-2006
19169 --Bug 4964710 - Start of Changes
19170 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
19171 THEN
19172 --Calculating the days between the Paydown date and the due date of the next periodic payment
19173 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
19174 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
19175
19176 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
19177 --line for remaining payments are created.
19178 --If only one PPD is within a period then an adjusting stub is created for the rest
19179 --of the period and one payment line for the remaining periods until the next paydown date
19180 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
19181 j := j + 1;
19182 idx := idx + 1;
19183 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
19184 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
19185 l_csm_line_details_tbl(j).period := g_stub_rec.period;
19186 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
19187 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
19188
19189 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
19190 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19191 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19192 end if;
19193
19194 l_csm_line_details_tbl(j).description := l_strm_name;
19195 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')) , p_currency_code => l_hdr_rec.currency_code);
19196 --The adjusting stub would end one day before the PPD date
19197 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
19198 l_csm_line_details_tbl(j).level_index_number := idx;
19199 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
19200 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
19201 --When the payment type is Principal, the Base Rate specified in the contract needs to be
19202 --captured and passed. This rate is used in calculation of the Interest Payment Streams
19203 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
19204 --l_base_Rate needs to be used.
19205 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
19206
19207 --When the cashflow step is a payment line, both amount and rate should not be locked
19208 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
19209 -- we are solving for rate.
19210 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
19211
19212 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19213 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19214 END IF;
19215
19216 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19217 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19218 ELSE
19219 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19220 END IF;
19221
19222 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19223 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19224 ELSE
19225 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19226 END IF;
19227 END IF;
19228 END IF;
19229 --Bug 4964710 - End of Changes
19230
19231 --=================================
19232 --Step 4 : Create the paydown stub
19233 --=================================
19234
19235 /*PPD stub*/
19236 j := j + 1;
19237 idx := idx + 1;
19238 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
19239 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
19240 l_csm_line_details_tbl(j).period := g_stub_rec.period;
19241 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
19242 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
19243
19244 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
19245 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19246 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19247 end if;
19248
19249
19250 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
19251 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => l_ppd_tbl(k).paydown_amount , p_currency_code => l_hdr_rec.currency_code);
19252 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
19253 THEN
19254 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
19255 ELSE
19256 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
19257 END IF;
19258 l_csm_line_details_tbl(j).level_index_number := idx;
19259 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
19260 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
19261 --When the payment type is Principal, the Base Rate specified in the contract needs to be
19262 --captured and passed. This rate is used in calculation of the Interest Payment Streams
19263 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
19264 --l_base_Rate needs to be used.
19265 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
19266
19267
19268 --When the cashflow step is a payment line, both amount and rate should not be locked
19269 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
19270 -- we are solving for rate.
19271 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
19272
19273 /*Populate the accrual end date as well*/
19274 /*Create a stub for principal paydown*/
19275 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19276 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19277 END IF;
19278
19279 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19280 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19281 ELSE
19282 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19283 END IF;
19284
19285 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19286 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19287 ELSE
19288 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19289 END IF;
19290 --===============================================================================
19291 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
19292 --================================================================================
19293 --Added by kthiruva on 10-Feb-2006
19294 --Bug 4964710 - Start of Changes
19295 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
19296 THEN
19297 --Calculating the days between the Paydown date and the due date of the next periodic payment
19298 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
19299 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
19300
19301 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
19302 --line for remaining payments are created.
19303 --If only one PPD is within a period then an adjusting stub is created for the rest
19304 --of the period and one payment line for the remaining periods until the next paydown date
19305 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
19306 /*Adjusting stub*/
19307 j := j + 1;
19308 idx := idx + 1;
19309 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
19310 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
19311 l_csm_line_details_tbl(j).period := g_stub_rec.period;
19312 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
19313 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
19314
19315 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
19316 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19317 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19318 end if;
19319
19320 l_csm_line_details_tbl(j).description := l_strm_name;
19321 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')) , p_currency_code => l_hdr_rec.currency_code);
19322 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
19323 l_csm_line_details_tbl(j).level_index_number := idx;
19324 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
19325 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
19326 --When the payment type is Principal, the Base Rate specified in the contract needs to be
19327 --captured and passed. This rate is used in calculation of the Interest Payment Streams
19328 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
19329 --l_base_Rate needs to be used.
19330 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
19331
19332 --When the cashflow step is a payment line, both amount and rate should not be locked
19333 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
19334 -- we are solving for rate.
19335 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
19336
19337 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19338 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19339 END IF;
19340
19341 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19342 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19343 ELSE
19344 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19345 END IF;
19346
19347 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19348 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19349 ELSE
19350 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19351 END IF;
19352 END IF;
19353 END IF;
19354 --===================================================================================
19355 --Step 6 : Check whether a payment line for the remaining payments needs to be creted
19356 --===================================================================================
19357
19358 --The periods between the end date of the adjusting stub and the next PPD is calculated
19359 --If number of periods > 0, then a payment line for that many periods needs to be created.
19360 IF k = l_ppd_tbl.LAST THEN
19361 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
19362 ELSE
19363 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
19364 END IF;
19365 --Modified by kthiruva on 12-Dec-2005
19366 --Use round here
19367 --Bug 4878162 - Start of Changes
19368 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
19369 --Bug 4878162 - Start of Changes
19370 --Create a payment line only if the number of periods till the next paydown is greater than 0
19371 IF (l_periods_after_ppd > 0) THEN
19372 /*Remaining amts*/
19373 j := j + 1;
19374 idx := idx + 1;
19375 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
19376 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
19377 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
19378 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
19379 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
19380
19381 --sechawla 17-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
19382 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19383 l_csm_line_details_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19384 end if;
19385
19386 l_csm_line_details_tbl(j).description := l_strm_name;
19387 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')) , p_currency_code => l_hdr_rec.currency_code);
19388 l_csm_line_details_tbl(j).level_index_number := idx;
19389 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
19390 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
19391 --When the payment type is Principal, the Base Rate specified in the contract needs to be
19392 --captured and passed. This rate is used in calculation of the Interest Payment Streams
19393 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
19394 --l_base_Rate needs to be used.
19395 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
19396
19397 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
19398 --When the cashflow step is a payment line, both amount and rate should not be locked
19399 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
19400 -- we are solving for rate.
19401 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
19402
19403 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19404 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19405 END IF;
19406
19407 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19408 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19409 ELSE
19410 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19411 END IF;
19412
19413 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19414 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19415 ELSE
19416 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19417 END IF;
19418 END IF;--End of condition l_periods_after_ppd >0
19419
19420 END IF;--The condition check for the date of every PPD in the ppd_tbl
19421 END LOOP;--loop for l_ppd_tbl
19422 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
19423 END IF;--The condition checking for Stub or periodic payment
19424 END LOOP;
19425 --Emd of Changes for payment type 'PRINCIPAL_PAYMENT'
19426 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
19427 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
19428 (l_strm_name_rec.capitalize_yn = 'N')) OR
19429 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
19430 -- code for user defined streams
19431 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
19432 (UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
19433 -- code for use defined streams ends here
19434 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
19435 -- Start of Bug#2757289 modification
19436 IF (l_rl_rec.rule_information7 IS NOT NULL OR
19437 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
19438 (l_rl_rec.rule_information8 IS NOT NULL OR
19439 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
19440 k := k + 1;
19441 idx := idx + 1;
19442 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
19443 l_csm_periodic_expenses_tbl(k).amount := okl_accounting_util.round_amount (p_amount => TO_NUMBER(l_rl_rec.rule_information8) , p_currency_code => l_hdr_rec.currency_code);
19444 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
19445 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
19446 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
19447 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
19448
19449 --sechawla 16-Jul-09 PRB ESg enhancements : assign orig_contract_line_id
19450 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19451 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19452 end if;
19453
19454 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
19455 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
19456 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
19457
19458 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19459 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19460 END IF;
19461 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19462 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19463 ELSE
19464 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19465 END IF;
19466 -- Code for user defined streams
19467 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
19468 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
19469 -- code ends here
19470 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
19471 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
19472 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
19473 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
19474 ELSE
19475 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
19476 END If;
19477 -- End of Bug#2757289 modification
19478
19479 -- Added by kthiruva on 29-Dec-2005.
19480 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
19481 -- Bug 4915938 - Start of Changes
19482 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19483 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19484 ELSE
19485 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19486 END IF;
19487 -- Bug 4915938 - End of Changes
19488
19489 ELSIF (l_rl_rec.rule_information7 IS NULL OR
19490 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
19491 (l_rl_rec.rule_information8 IS NULL OR
19492 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
19493 k := k + 1;
19494 idx := idx + 1;
19495 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
19496 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
19497 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
19498 l_csm_periodic_expenses_tbl(k).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')) , p_currency_code => l_hdr_rec.currency_code);
19499 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
19500 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
19501
19502 --sechawla 16-Jul-09 PRB ESg enhancements : assign orig_contract_line_id
19503 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19504 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19505 end if;
19506
19507 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
19508 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
19509
19510 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19511 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19512 END IF;
19513 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19514 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19515 ELSE
19516 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19517 END IF;
19518 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
19519 --sechawla 11-sep-09 8798556
19520 --l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
19521 l_csm_periodic_expenses_tbl(k).date_start := l_line_rec.start_date;
19522 ELSE
19523 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
19524 END IF;
19525 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
19526 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
19527 ELSE
19528 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19529 END IF;
19530 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
19531 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
19532 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
19533 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
19534 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
19535 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
19536 ELSE
19537 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
19538 END If;
19539 END IF;
19540 END LOOP;
19541 ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
19542 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
19543 l := l + 1;
19544 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
19545 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19546 l_csm_one_off_fee_tbl(l).amount := okl_accounting_util.round_amount (p_amount => FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0')) , p_currency_code => l_hdr_rec.currency_code);
19547 If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
19548 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
19549 Else
19550 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
19551 End If;
19552 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
19553
19554 --sechawla 16-Jul-09 PRB ESG Enhancements : assign orig_contract_line_id
19555 if l_PROSPECTIVE_REBOOK_YN = 'Y' then
19556 l_csm_one_off_fee_tbl(l).orig_contract_line_id := l_line_rec.orig_contract_line_id;
19557 end if;
19558
19559 END LOOP;
19560 END IF;
19561 END LOOP;
19562 END LOOP;
19563 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19564 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19565 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19566 RAISE OKL_API.G_EXCEPTION_ERROR;
19567 End If;
19568 -- Extract fee line
19569 extract_fee_lines( p_api_version => p_api_version,
19570 p_chr_id => TO_NUMBER(p_chr_id),
19571 p_deal_type => l_deal_type,
19572 p_init_msg_list => p_init_msg_list,
19573 x_msg_count => x_msg_count,
19574 x_msg_data => x_msg_data,
19575 x_return_status => x_return_status,
19576 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
19577 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
19578 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
19579 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19580 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19581 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19582 raise OKL_API.G_EXCEPTION_ERROR;
19583 End If;
19584 extract_subsidized_lines(p_api_version => p_api_version,
19585 p_init_msg_list => p_init_msg_list,
19586 x_return_status => x_return_status,
19587 x_msg_count => x_msg_count,
19588 x_msg_data => x_msg_data,
19589 p_chr_id => TO_NUMBER(p_chr_id),
19590 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
19591 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19592 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19593 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19594 raise OKL_API.G_EXCEPTION_ERROR;
19595 End If;
19596 check_for_mandatory_streams(
19597 p_api_version => p_api_version,
19598 p_init_msg_list => p_init_msg_list,
19599 x_msg_count => x_msg_count,
19600 x_msg_data => x_msg_data,
19601 x_return_status => x_return_status,
19602 p_chr_id => p_chr_id,
19603 p_deal_type => l_deal_type,
19604 p_stream_types_tbl => l_csm_stream_types_tbl,
19605 x_stream_types_tbl => l_req_stream_types_tbl);
19606 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19607 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19608 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19609 raise OKL_API.G_EXCEPTION_ERROR;
19610 End If;
19611 -- Requesting for yields
19612 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
19613 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19614 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19615 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19616 RAISE OKL_API.G_EXCEPTION_ERROR;
19617 END IF;
19618
19619 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19620 okl_api.set_message(
19621 p_app_name => G_APP_NAME,
19622 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
19623 raise OKL_API.G_EXCEPTION_ERROR;
19624 End If;
19625
19626 write_to_log('okl_la_stream_pvt.extract_params_ppd_rebook: Begin(+)');
19627 IF l_csm_line_details_tbl.COUNT > 0 THEN
19628 FOR z IN l_csm_line_details_tbl.FIRST..l_csm_line_details_tbl.LAST
19629 LOOP
19630 IF l_csm_line_details_tbl.exists(z) THEN
19631 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').description :' || l_csm_line_details_tbl(z).description);
19632 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').date_start :' || l_csm_line_details_tbl(z).date_start);
19633 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').kle_loan_id :' || l_csm_line_details_tbl(z).kle_loan_id);
19634 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').level_index_number :' || l_csm_line_details_tbl(z).level_index_number);
19635 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').level_type :' || l_csm_line_details_tbl(z).level_type);
19636 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').number_of_periods :' || l_csm_line_details_tbl(z).number_of_periods);
19637 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').amount :' || l_csm_line_details_tbl(z).amount);
19638 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').lock_level_step :' || l_csm_line_details_tbl(z).lock_level_step);
19639 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').rate :' || l_csm_line_details_tbl(z).rate);
19640 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').period :' || l_csm_line_details_tbl(z).period);
19641 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').advance_or_arrears :' || l_csm_line_details_tbl(z).advance_or_arrears);
19642 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').income_or_expense :' || l_csm_line_details_tbl(z).income_or_expense);
19643 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').structure :' || l_csm_line_details_tbl(z).structure);
19644 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').query_level_yn :' || l_csm_line_details_tbl(z).query_level_yn);
19645 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').days_in_month :' || l_csm_line_details_tbl(z).days_in_month);
19646 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').days_in_year :' || l_csm_line_details_tbl(z).days_in_year);
19647 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').balance_type_code :' || l_csm_line_details_tbl(z).balance_type_code);
19648 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').payment_type :' || l_csm_line_details_tbl(z).payment_type);
19649 write_to_log(' okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(' || z || ').orig_contract_line_id :' || l_csm_line_details_tbl(z).orig_contract_line_id);
19650 END IF;
19651 END LOOP;
19652 END IF;
19653 write_to_log('okl_la_stream_pvt.extract_params_ppd_rebook: End(-)');
19654
19655 --Added by NIKSHAH for bug 9103807 :START
19656 l_total_amount := 0;
19657 l_index_flag := -1;
19658 l_funded_amount := 0;
19659 IF l_csm_line_details_tbl.COUNT > 0 THEN
19660 FOR z IN l_csm_line_details_tbl.FIRST..l_csm_line_details_tbl.LAST
19661 LOOP
19662 IF l_csm_line_details_tbl.exists(z) THEN
19663 IF l_csm_line_details_tbl(z).level_type = 'PRINCIPAL' OR
19664 l_csm_line_details_tbl(z).level_type = 'PRINCIPAL_PAYMENT' THEN
19665 IF l_csm_line_details_tbl(z).period = 'T' AND
19666 l_index_flag = -1 AND
19667 l_csm_line_details_tbl(z).lock_level_step <> OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT
19668 THEN
19669 l_index_flag := z;
19670 END IF;
19671 l_total_amount := l_total_amount + (l_csm_line_details_tbl(z).amount * l_csm_line_details_tbl(z).number_of_periods);
19672 ELSIF l_csm_line_details_tbl(z).level_type = 'FUNDING' THEN
19673 l_funded_amount := l_csm_line_details_tbl(z).amount;
19674 END IF;
19675 END IF;
19676 END LOOP;
19677 END IF;
19678 l_total_amount := okl_accounting_util.round_amount (p_amount => l_total_amount , p_currency_code => l_hdr_rec.currency_code);
19679 IF l_index_flag <> -1 THEN
19680 l_diff_amount := l_funded_amount - l_total_amount;
19681 l_csm_line_details_tbl(l_index_flag).amount := l_csm_line_details_tbl(l_index_flag).amount + l_diff_amount;
19682 END IF;
19683 --Added by NIKSHAH for bug 9103807 :END
19684 write_to_log('okl_la_stream_pvt.extract_params_ppd_rebook: l_index_flag: ' || l_index_flag);
19685 write_to_log('okl_la_stream_pvt.extract_params_ppd_rebook: l_diff_amount: ' || l_diff_amount);
19686 write_to_log('okl_la_stream_pvt.extract_params_ppd_rebook: l_funded_amount: ' || l_funded_amount);
19687 write_to_log('okl_la_stream_pvt.extract_params_ppd_rebook: l_total_amount: ' || l_total_amount);
19688 --Commented by bkatraga for bug 13093818
19689 --write_to_log('okl_la_stream_pvt.extract_params_ppd_rebook: l_csm_line_details_tbl(l_index_flag).amount: ' || l_csm_line_details_tbl(l_index_flag).amount);
19690
19691 x_csm_loan_header := l_csm_loan_header;
19692 x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
19693 x_csm_loan_levels_tbl := l_csm_line_details_tbl;
19694 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
19695 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
19696 x_csm_yields_tbl := l_csm_yields_tbl;
19697 x_csm_stream_types_tbl := l_req_stream_types_tbl;
19698 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
19699 x_msg_data => x_msg_data);
19700 EXCEPTION
19701 WHEN OKL_API.G_EXCEPTION_ERROR THEN
19702 IF l_hdr_csr%ISOPEN THEN
19703 CLOSE l_hdr_csr;
19704 END IF;
19705 IF ib_csr%ISOPEN THEN
19706 CLOSE ib_csr;
19707 END IF;
19708 IF l_line_rec_csr%ISOPEN THEN
19709 CLOSE l_line_rec_csr;
19710 END IF;
19711 IF l_rl_csr1%ISOPEN THEN
19712 CLOSE l_rl_csr1;
19713 END IF;
19714 IF strm_name_csr%ISOPEN THEN
19715 CLOSE strm_name_csr;
19716 END IF;
19717 IF l_rl_csr%ISOPEN THEN
19718 CLOSE l_rl_csr;
19719 END IF;
19720 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19721 l_api_name,
19722 G_PKG_NAME,
19723 'OKL_API.G_RET_STS_ERROR',
19724 x_msg_count,
19725 x_msg_data,
19726 '_PVT');
19727 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
19728 IF l_hdr_csr%ISOPEN THEN
19729 CLOSE l_hdr_csr;
19730 END IF;
19731 IF ib_csr%ISOPEN THEN
19732 CLOSE ib_csr;
19733 END IF;
19734 IF l_line_rec_csr%ISOPEN THEN
19735 CLOSE l_line_rec_csr;
19736 END IF;
19737 IF l_rl_csr1%ISOPEN THEN
19738 CLOSE l_rl_csr1;
19739 END IF;
19740 IF strm_name_csr%ISOPEN THEN
19741 CLOSE strm_name_csr;
19742 END IF;
19743 IF l_rl_csr%ISOPEN THEN
19744 CLOSE l_rl_csr;
19745 END IF;
19746 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
19747 l_api_name,
19748 G_PKG_NAME,
19749 'OKL_API.G_RET_STS_UNEXP_ERROR',
19750 x_msg_count,
19751 x_msg_data,
19752 '_PVT');
19753 WHEN OTHERS then
19754 IF l_hdr_csr%ISOPEN THEN
19755 CLOSE l_hdr_csr;
19756 END IF;
19757 IF ib_csr%ISOPEN THEN
19758 CLOSE ib_csr;
19759 END IF;
19760 IF l_line_rec_csr%ISOPEN THEN
19761 CLOSE l_line_rec_csr;
19762 END IF;
19763 IF l_rl_csr1%ISOPEN THEN
19764 CLOSE l_rl_csr1;
19765 END IF;
19766 IF strm_name_csr%ISOPEN THEN
19767 CLOSE strm_name_csr;
19768 END IF;
19769 IF l_rl_csr%ISOPEN THEN
19770 CLOSE l_rl_csr;
19771 END IF;
19772 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
19773 l_api_name,
19774 G_PKG_NAME,
19775 'OTHERS',
19776 x_msg_count,
19777 x_msg_data,
19778 '_PVT');
19779 END extract_params_ppd_rebook;
19780
19781
19782 Procedure extract_params_loan(
19783 p_api_version IN NUMBER,
19784 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
19785 p_chr_id IN VARCHAR2,
19786 x_return_status OUT NOCOPY VARCHAR2,
19787 x_msg_count OUT NOCOPY NUMBER,
19788 x_msg_data OUT NOCOPY VARCHAR2,
19789 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
19790 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
19791 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
19792 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
19793 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
19794 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
19795 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
19796 p_orp_code IN VARCHAR2 DEFAULT NULL) AS
19797
19798 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
19799 --This cursor determines whether there have been any Paydowns on this Contract
19800 CURSOR is_ppd_available_csr(chrId NUMBER)
19801 IS
19802 SELECT count(crl.id)
19803 FROM okc_rule_groups_b crg,
19804 okc_rules_b crl,
19805 okl_strm_type_v sty
19806 WHERE crl.rgp_id = crg.id
19807 AND crg.rgd_code = 'LALEVL'
19808 AND crl.rule_information_category = 'LASLH'
19809 AND crg.dnz_chr_id = chrId
19810 AND crl.object1_id1 = sty.id
19811 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
19812 ORDER BY crl.rule_information1;
19813
19814 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
19815 l_ppd_cnt NUMBER := 0;
19816
19817 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN';
19818 l_api_version CONSTANT NUMBER := 1;
19819 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
19820
19821 Begin
19822
19823 --Added by kthiruva on 18-Apr-2006
19824 --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
19825 --else call extract_params_loan
19826 --Bug 5161075- Start of Changes
19827 OPEN is_ppd_available_csr(p_chr_id);
19828 FETCH is_ppd_available_csr INTO l_ppd_cnt;
19829 CLOSE is_ppd_available_csr;
19830
19831 IF l_ppd_cnt > 0 THEN
19832
19833 extract_params_ppd_rebook(
19834 p_api_version,
19835 p_init_msg_list,
19836 p_chr_id,
19837 x_return_status,
19838 x_msg_count,
19839 x_msg_data,
19840 x_csm_loan_header,
19841 x_csm_loan_lines_tbl,
19842 x_csm_loan_levels_tbl,
19843 x_csm_one_off_fee_tbl,
19844 x_csm_periodic_expenses_tbl,
19845 x_csm_yields_tbl,
19846 x_csm_stream_types_tbl);
19847
19848 --Added by kthiruva for Debugging
19849 write_to_log('After the call to extract_params_ppd_rebook, the return status is :'||x_return_status);
19850 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19851 okl_api.set_message(
19852 p_app_name => G_APP_NAME,
19853 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19854 raise OKL_API.G_EXCEPTION_ERROR;
19855 End If;
19856
19857 ELSE
19858 extract_params_loan_deal(
19859 p_api_version,
19860 p_init_msg_list,
19861 p_chr_id,
19862 NULL,
19863 x_return_status,
19864 x_msg_count,
19865 x_msg_data,
19866 x_csm_loan_header,
19867 x_csm_loan_lines_tbl,
19868 x_csm_loan_levels_tbl,
19869 x_csm_one_off_fee_tbl,
19870 x_csm_periodic_expenses_tbl,
19871 x_csm_yields_tbl,
19872 x_csm_stream_types_tbl,
19873 p_orp_code ); -- p_orp_code -- RG: 11-Aug-2009: PRB Upgrade
19874
19875 --Added by kthiruva for Debugging
19876 write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
19877 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19878 okl_api.set_message(
19879 p_app_name => G_APP_NAME,
19880 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19881 raise OKL_API.G_EXCEPTION_ERROR;
19882 End If;
19883
19884 END IF;
19885 print( l_api_name, 'end', x_return_status);
19886 end extract_params_loan;
19887
19888 --Added by kthiruva for Bug 5161075
19889 Procedure extract_params_loan_reamort(
19890 p_api_version IN NUMBER,
19891 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
19892 p_chr_id IN VARCHAR2,
19893 x_return_status OUT NOCOPY VARCHAR2,
19894 x_msg_count OUT NOCOPY NUMBER,
19895 x_msg_data OUT NOCOPY VARCHAR2,
19896 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
19897 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
19898 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
19899 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
19900 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
19901 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
19902 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
19903
19904 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
19905 --This cursor determines whether there have been any Paydowns on this Contract
19906 CURSOR is_payment_available_csr(chrId NUMBER,
19907 strmPurpose VARCHAR2)
19908 IS
19909 SELECT count(crl.id)
19910 FROM okc_rule_groups_b crg,
19911 okc_rules_b crl,
19912 okl_strm_type_v sty
19913 WHERE crl.rgp_id = crg.id
19914 AND crg.rgd_code = 'LALEVL'
19915 AND crl.rule_information_category = 'LASLH'
19916 AND crg.dnz_chr_id = chrId
19917 AND crl.object1_id1 = sty.id
19918 AND sty.stream_type_purpose = strmPurpose
19919 ORDER BY crl.rule_information1;
19920
19921 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
19922 l_prin_cnt NUMBER := 0;
19923 l_ppd_cnt NUMBER := 0;
19924
19925
19926 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_REAMORT';
19927 l_api_version CONSTANT NUMBER := 1;
19928 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
19929
19930 Begin
19931
19932 --Added by kthiruva on 18-Apr-2006
19933 --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
19934 --else call extract_params_loan
19935 --Bug 5161075- Start of Changes
19936 OPEN is_payment_available_csr(p_chr_id,
19937 'PRINCIPAL_PAYMENT');
19938 FETCH is_payment_available_csr INTO l_prin_cnt;
19939 CLOSE is_payment_available_csr;
19940
19941 --Added by kthiruva on 18-Apr-2006
19942 --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
19943 --else call extract_params_loan
19944 --Bug 5161075- Start of Changes
19945 OPEN is_payment_available_csr(p_chr_id,
19946 'UNSCHEDULED_PRINCIPAL_PAYMENT');
19947 FETCH is_payment_available_csr INTO l_ppd_cnt;
19948 CLOSE is_payment_available_csr;
19949
19950 IF l_prin_cnt > 0 THEN
19951 extract_params_loan_deal(
19952 p_api_version,
19953 p_init_msg_list,
19954 p_chr_id,
19955 NULL,
19956 x_return_status,
19957 x_msg_count,
19958 x_msg_data,
19959 x_csm_loan_header,
19960 x_csm_loan_lines_tbl,
19961 x_csm_loan_levels_tbl,
19962 x_csm_one_off_fee_tbl,
19963 x_csm_periodic_expenses_tbl,
19964 x_csm_yields_tbl,
19965 x_csm_stream_types_tbl,
19966 NULL ); -- p_orp_code
19967
19968 --Added by kthiruva for Debugging
19969 write_to_log('After the call to extract_params_loan_deal, the return status is :'||x_return_status);
19970 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19971 okl_api.set_message(
19972 p_app_name => G_APP_NAME,
19973 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19974 raise OKL_API.G_EXCEPTION_ERROR;
19975 End If;
19976 ELSE
19977 --Payment type on the contract is Rent
19978 --IF there is a PPD on the contract then call extract_params_loan_deal
19979 --otherwise call extract_params_ppd_rebook
19980 IF l_ppd_cnt = 0 THEN
19981 extract_params_loan_deal(
19982 p_api_version,
19983 p_init_msg_list,
19984 p_chr_id,
19985 NULL,
19986 x_return_status,
19987 x_msg_count,
19988 x_msg_data,
19989 x_csm_loan_header,
19990 x_csm_loan_lines_tbl,
19991 x_csm_loan_levels_tbl,
19992 x_csm_one_off_fee_tbl,
19993 x_csm_periodic_expenses_tbl,
19994 x_csm_yields_tbl,
19995 x_csm_stream_types_tbl,
19996 NULL ); -- p_orp_code
19997
19998 --Added by kthiruva for Debugging
19999 write_to_log('After the call to extract_params_loan_deal, the return status is :'||x_return_status);
20000 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
20001 okl_api.set_message(
20002 p_app_name => G_APP_NAME,
20003 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
20004 raise OKL_API.G_EXCEPTION_ERROR;
20005 End If;
20006 ELSIF l_ppd_cnt > 0 THEN
20007
20008 --Payment on the contract is Rent. Therefore the PPD should also be incorporated
20009 --into the payment table that needs to be built to be sent to SuperTrump
20010 extract_params_ppd_rebook(
20011 p_api_version,
20012 p_init_msg_list,
20013 p_chr_id,
20014 x_return_status,
20015 x_msg_count,
20016 x_msg_data,
20017 x_csm_loan_header,
20018 x_csm_loan_lines_tbl,
20019 x_csm_loan_levels_tbl,
20020 x_csm_one_off_fee_tbl,
20021 x_csm_periodic_expenses_tbl,
20022 x_csm_yields_tbl,
20023 x_csm_stream_types_tbl);
20024
20025 --Added by kthiruva for Debugging
20026 write_to_log('After the call to extract_params_ppd_rebook, the return status is :'||x_return_status);
20027 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
20028 okl_api.set_message(
20029 p_app_name => G_APP_NAME,
20030 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
20031 raise OKL_API.G_EXCEPTION_ERROR;
20032 End If;
20033 END IF;
20034 END IF;
20035 print( l_api_name, 'end', x_return_status);
20036 end extract_params_loan_reamort;
20037
20038 -- Start modification 11i10 bakuchib
20039 PROCEDURE extract_params_lease_deal(
20040 p_api_version IN NUMBER,
20041 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
20042 p_chr_id IN VARCHAR2,
20043 p_deal_type IN VARCHAR2,
20044 x_return_status OUT NOCOPY VARCHAR2,
20045 x_msg_count OUT NOCOPY NUMBER,
20046 x_msg_data OUT NOCOPY VARCHAR2,
20047 x_csm_lease_header OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
20048 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
20049 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
20050 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
20051 x_req_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
20052 x_csm_line_details_tbl OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
20053 x_rents_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
20054 p_orp_code IN VARCHAR2 DEFAULT NULL ) AS
20055
20056 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LEASE_DEAL';
20057 l_api_version CONSTANT NUMBER := 1;
20058 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
20059 lv_fed_only VARCHAR2(3) := 'N';
20060 ln_value NUMBER := 0;
20061 lv_fed_only_tax_book OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
20062 lv_mg_tax_yn VARCHAR2(3) := 'N';
20063 ln_org_id okc_k_headers_b.authoring_org_id%TYPE;
20064 lv_currency_code okc_k_headers_b.currency_code%TYPE;
20065 l_rnd_basis_percent NUMBER;
20066 l_level_type NUMBER;
20067 l_strm_name VARCHAR2(200);
20068 ln_fin_yn NUMBER := 0;
20069 i BINARY_INTEGER := 0;
20070 j BINARY_INTEGER := 0;
20071 k BINARY_INTEGER := 0;
20072 l BINARY_INTEGER := 0;
20073 m BINARY_INTEGER := 0;
20074 idx BINARY_INTEGER := 0;
20075 l_basis_percent NUMBER;
20076 styid NUMBER;
20077 l_salvage NUMBER;
20078 l_purchase_option VARCHAR2(256);
20079 l_deal_type VARCHAR2(256);
20080 l_purchase_option_amount NUMBER;
20081 l_msg_count Number;
20082 l_msg_data varchar2(2000);
20083 l_chr_id Number := TO_NUMBER(p_chr_id);
20084 l_cle_id Number;
20085 l_rgd_code Varchar2(30) := 'LAPSTH';
20086 l_rdf_code Varchar2(30) := 'LASTRM';
20087 l_rdf_name Varchar2(80) := 'xxx';
20088 l_id1 Varchar2(40);
20089 l_id2 Varchar2(200);
20090 l_name Varchar2(200);
20091 l_description Varchar2(2000);
20092 l_status Varchar2(1);
20093 l_start_date date;
20094 l_end_date date;
20095 l_org_id Number;
20096 l_inv_org_id Number;
20097 l_book_type_code Varchar2(15);
20098 l_select Varchar2(2000);
20099 l_msg_index_out Number;
20100 lv_diff_date VARCHAR2(3) := 'N';
20101 l_value OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
20102 l_tradein OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
20103 l_capreduc OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
20104 l_feecap OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
20105 l_capint OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
20106 l_discount OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
20107 l_corp_dep_cost OKL_TXL_ASSETS_B.DEPRECIATION_COST%TYPE := 0;
20108 l_tax_dep_cost OKL_TXD_ASSETS_B.COST%TYPE := 0;
20109 l_lease_tax_owner okc_rules_b.rule_information1%TYPE := NULL;
20110 lx_no_data_found BOOLEAN;
20111 -- l_sty_id NUMBER;
20112 l_sty_id strm_rec_type;
20113 l_down_payment_sty_id strm_rec_type;
20114 l_dummy_sty_id strm_rec_type;
20115 -- l_pricing_name VARCHAR2(40); --02-Sep-11 SECHAWLA 12936702
20116 l_pricing_name VARCHAR2(150); --02-Sep-11 SECHAWLA 12936702
20117
20118 l_dependent_sty_id NUMBER;
20119 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
20120 l_sub_amt OKL_K_LINES.AMOUNT%TYPE := 0;
20121 l_sub_override_amt OKL_K_LINES.SUBSIDY_OVERRIDE_AMOUNT%TYPE := 0;
20122 l_down_payment_amt NUMBER; --Added by bkatraga for bug 15942693
20123
20124 --Added by bkatraga for bug 14822974
20125 l_arrears_pay_dates_option okl_st_gen_tmpt_sets_all.isg_arrears_pay_dates_option%TYPE;
20126 l_adv_arrears okc_rules_b.rule_information10%TYPE;
20127
20128 CURSOR l_adv_arrears_csr (p_khr_id in NUMBER, p_cle_id in NUMBER) is
20129 select nvl( sll_rulb.rule_information10,'N') advance_or_arrears
20130 from okc_rules_b sll_rulb,
20131 okc_rules_b slh_rulb,
20132 okl_strm_type_b styb,
20133 okc_rule_groups_b rgpb
20134 where sll_rulb.rgp_id = rgpb.id
20135 and sll_rulb.rule_information_category = 'LASLL'
20136 and sll_rulb.dnz_chr_id = rgpb.dnz_chr_id
20137 and sll_rulb.object2_id1 = to_char(slh_rulb.id)
20138 and slh_rulb.rgp_id = rgpb.id
20139 and slh_rulb.rule_information_category = 'LASLH'
20140 and slh_rulb.dnz_chr_id = rgpb.dnz_chr_id
20141 and styb.id = slh_rulb.object1_id1
20142 and styb.stream_type_purpose IN ('RENT')
20143 and rgpb.dnz_chr_id = p_khr_id
20144 and rgpb.cle_id = p_cle_id
20145 and rgpb.rgd_code = 'LALEVL';
20146 --end bkatraga for bug 14822974
20147
20148 -- To check if the chr_id has Financed fee feetype defined
20149 CURSOR l_financed_type_csr (chrId NUMBER)
20150 IS
20151 SELECT 1
20152 FROM dual
20153 WHERE EXISTS (SELECT 1
20154 FROM okc_k_lines_b cle,
20155 okc_line_styles_b lse,
20156 okl_k_lines kle
20157 WHERE cle.dnz_chr_id = chrId
20158 AND cle.lse_id = lse.id
20159 AND lse.lty_code = 'FEE'
20160 AND cle.id = kle.id
20161 AND kle.fee_type in ('ROLLOVER', 'FINANCED'));
20162 -- get the currency_code and Authoring_org_id
20163 -- from okc_k_headers_b
20164 CURSOR get_org_id(p_chr_id okc_k_headers_b.id%TYPE)
20165 IS
20166 SELECT authoring_org_id,
20167 currency_code
20168 FROM okc_k_headers_b
20169 WHERE id = p_chr_id;
20170 -- get the Lease Contract Header info
20171 CURSOR l_hdr_csr_lease(chrId NUMBER)
20172 IS
20173 SELECT chr.orig_system_source_code,
20174 chr.start_date,
20175 chr.end_date,
20176 chr.template_yn,
20177 chr.authoring_org_id,
20178 khr.expected_delivery_date,
20179 chr.inv_organization_id,
20180 khr.deal_type,
20181 pdt.id pid,
20182 NVL(pdt.reporting_pdt_id, -1) report_pdt_id,
20183 chr.currency_code currency_code,
20184 khr.term_duration term
20185 FROM okc_k_headers_v chr,
20186 okl_k_headers khr,
20187 okl_products_v pdt
20188 WHERE khr.id = chr.id
20189 AND chr.id = chrId
20190 AND khr.pdt_id = pdt.id(+);
20191 -- get the Lease Header rule information
20192 CURSOR l_hdrrl_csr_lease(rgcode okc_rule_groups_b.rgd_code%TYPE,
20193 rlcat okc_rules_b.rule_information_category%TYPE,
20194 chrId NUMBER)
20195 IS
20196 SELECT crl.object1_id1,
20197 crl.rule_information1,
20198 crl.rule_information2,
20199 crl.rule_information3,
20200 crl.rule_information4,
20201 crl.rule_information5,
20202 crl.rule_information6,
20203 crl.rule_information10,
20204 crl.rule_information13,
20205 crl.rule_information11
20206 FROM okc_rule_groups_b crg,
20207 okc_rules_b crl
20208 WHERE crl.rgp_id = crg.id
20209 AND crg.rgd_code = rgcode
20210 AND crl.rule_information_category = rlcat
20211 AND crg.dnz_chr_id = chrId;
20212 -- get the Lease install based location
20213 CURSOR ib_csr_lease (chrId NUMBER)
20214 IS
20215 SELECT DISTINCT hl.country country
20216 FROM hz_locations hl,
20217 hz_party_sites hps,
20218 hz_party_site_uses hpsu,
20219 okl_txl_itm_insts iti,
20220 okc_line_styles_b lse_ib,
20221 okc_k_lines_b cle_ib
20222 WHERE cle_ib.dnz_chr_id = chrId
20223 AND cle_ib.lse_id = lse_ib.id
20224 AND lse_ib.lty_code = 'INST_ITEM'
20225 AND iti.kle_id = cle_ib.id
20226 AND iti.object_id1_new = hpsu.party_site_use_id
20227 AND iti.object_id2_new = '#'
20228 AND hpsu.party_site_id = hps.party_site_id
20229 AND hps.location_id = hl.location_id;
20230 -- Get the stream type id
20231 CURSOR l_strmid_csr_lease (strmName VARCHAR2)
20232 IS
20233 SELECT id styid
20234 FROM okl_strm_type_tl
20235 WHERE LANGUAGE = 'US'
20236 AND NAME = strmName;
20237
20238 --Added capital_reduction_percent by bkatraga for bug 15942693
20239 -- get the lease Contract line info
20240 -- Modified by kthiruva on 26-Aug-05
20241 -- Added trade-in amount and expected funding date to the Select clause of the
20242 -- cursor for Pricing Enhancements
20243 CURSOR l_line_rec_csr_lease(chrid NUMBER, lnetype VARCHAR2)
20244 IS
20245 SELECT kle.id,
20246 kle.oec,
20247 kle.residual_code,
20248 kle.capital_amount,
20249 kle.delivered_date,
20250 kle.date_funding_required,
20251 kle.residual_grnty_amount,
20252 kle.date_funding,
20253 kle.date_terminated,
20254 kle.residual_value,
20255 kle.date_delivery_expected,
20256 kle.orig_system_id1 old_line_id,
20257 kle.amount,
20258 kle.price_negotiated,
20259 kle.start_date,
20260 kle.end_date,
20261 kle.orig_system_id1,
20262 kle.fee_type,
20263 kle.initial_direct_cost,
20264 tl.item_description,
20265 tl.name,
20266 sts.ste_code,
20267 --Added for Pricing Enhancements
20268 kle.tradein_amount,
20269 kle.date_funding_expected,
20270 -- Added for Down Payment Enhancement
20271 kle.capital_reduction,
20272 kle.capitalize_down_payment_yn,
20273 kle.orig_contract_line_id, --sechawla 10-jul-09 PRB ESG enhancements : added
20274 kle.capital_reduction_percent
20275 FROM okl_k_lines_full_v kle,
20276 okc_line_styles_b lse,
20277 okc_k_lines_tl tl,
20278 okc_statuses_b sts
20279 WHERE kle.lse_id = lse.id
20280 AND lse.lty_code = lnetype
20281 AND tl.id = kle.id
20282 AND tl.language = userenv('LANG')
20283 AND kle.dnz_chr_id = chrid
20284 AND sts.code = kle.sts_code
20285 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
20286 -- get discount amount on the line
20287 CURSOR get_dis_amt_csr_lease(p_chr_id NUMBER, p_cle_id NUMBER)
20288 IS
20289 SELECT kle_sub.amount, kle_sub.SUBSIDY_OVERRIDE_AMOUNT
20290 FROM okl_subsidies_b subb,
20291 okc_k_lines_b cle_fin,
20292 okc_line_styles_b lse_fin,
20293 okc_k_lines_b cle_sub,
20294 okl_k_lines kle_sub,
20295 okc_line_styles_b lse_sub
20296 WHERE cle_fin.id = p_cle_id
20297 AND cle_fin.dnz_chr_id = p_chr_id
20298 AND cle_sub.id = kle_sub.id
20299 AND cle_sub.lse_id = lse_sub.id
20300 AND lse_sub.lty_code = 'SUBSIDY'
20301 AND subb.id = kle_sub.subsidy_id
20302 AND cle_fin.id = cle_sub.cle_id
20303 AND cle_fin.lse_id = lse_fin.id
20304 AND lse_fin.lty_code = 'FREE_FORM1'
20305 AND subb.accounting_method_code = 'NET';
20306 -- get the lease setup values for tax book and coporate book
20307 CURSOR l_txtrans_csr_lease (Book Varchar2)
20308 IS
20309 SELECT trns.value,
20310 books.book_type_code
20311 FROM okl_sgn_translations trns,
20312 fa_book_controls books
20313 WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
20314 AND trns.object1_id1 = books.book_type_code
20315 AND books.book_type_code = Book
20316 AND trns.sgn_code = 'STMP';
20317 -- get the lease Line rule information
20318 CURSOR l_slh_csr_lease(rgcode okc_rule_groups_b.rgd_code%TYPE,
20319 rlcat okc_rules_b.rule_information_category%TYPE,
20320 chrId NUMBER,
20321 cleId NUMBER )
20322 IS
20323 SELECT crl.id slh_id,
20324 crl.object1_id1,
20325 crl.rule_information1,
20326 crl.rule_information2,
20327 crl.rule_information3,
20328 crl.rule_information5,
20329 crl.rule_information6,
20330 crl.rule_information7,
20331 crl.rule_information8,
20332 crl.rule_information13,
20333 crl.rule_information10
20334 FROM okc_rule_groups_b crg,
20335 okc_rules_b crl
20336 WHERE crl.rgp_id = crg.id
20337 AND crg.rgd_code = rgcode
20338 AND crl.rule_information_category = rlcat
20339 AND crg.dnz_chr_id = chrId
20340 AND crg.cle_id = cleId
20341 ORDER BY crl.rule_information1;
20342 -- get Stream name
20343 CURSOR strm_name_csr_lease (styid NUMBER)
20344 IS
20345 SELECT tl.name name,
20346 stm.stream_type_purpose stream_type_purpose,
20347 stm.stream_type_class stream_type_class,
20348 tl.description alloc_basis,
20349 stm.capitalize_yn capitalize_yn,
20350 stm.periodic_yn periodic_yn
20351 FROM okl_strm_type_b stm,
20352 okl_strm_type_tl tl
20353 WHERE tl.id = stm.id
20354 AND tl.language = 'US'
20355 AND stm.id = styid;
20356 -- get the self referencing Line based rule information
20357 CURSOR l_sll_csr_lease(rlgpId NUMBER,
20358 rgcode okc_rule_groups_b.rgd_code%TYPE,
20359 rlcat okc_rules_b.rule_information_category%TYPE,
20360 chrId NUMBER,
20361 cleId NUMBER )
20362 IS
20363 SELECT crl.object1_id1,
20364 crl.rule_information1,
20365 crl.rule_information2,
20366 crl.rule_information3,
20367 crl.rule_information5,
20368 crl.rule_information6,
20369 crl.rule_information7,
20370 crl.rule_information8,
20371 crl.rule_information13,
20372 crl.rule_information10
20373 FROM okc_rule_groups_b crg,
20374 okc_rules_b crl
20375 WHERE crl.rgp_id = crg.id
20376 AND crl.object2_id1 = rlgpId
20377 AND crg.rgd_code = rgcode
20378 AND crl.rule_information_category = rlcat
20379 AND crg.dnz_chr_id = chrId
20380 AND crg.cle_id = cleId
20381 ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
20382
20383 --mansrini : Code for VR build
20384 CURSOR get_day_conv_on_contrct
20385 IS
20386 SELECT
20387 --Added by srsreeni for bug6076113
20388 -- rate_params.days_in_a_year_code,
20389 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
20390 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
20391 rate_params.days_in_a_year_code
20392 --srsreeni bug6076113 ends
20393 FROM okl_k_rate_params rate_params
20394 WHERE khr_id = p_chr_id;
20395
20396 CURSOR get_day_conv_on_sgt
20397 IS
20398 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
20399 gts.days_in_yr_code
20400 FROM
20401 okl_k_headers khr,
20402 okl_products_v pdt,
20403 okl_ae_tmpt_sets_v aes,
20404 OKL_ST_GEN_TMPT_SETS gts
20405 WHERE
20406 khr.pdt_id = pdt.id AND
20407 pdt.aes_id = aes.id AND
20408 aes.gts_id = gts.id AND
20409 khr.id = p_chr_id;
20410
20411
20412 -- Code added by HKPATEL for user defined streams
20413 -- Accrual Streams for Reporting product
20414
20415 --l_dependent_rep_sty_rec dependent_rep_sty_id_csr%ROWTYPE;
20416
20417 l_dependent_sty_name VARCHAR2(30);
20418
20419 -- nikshah -- Bug # 5484903 Fixed,
20420 -- Removed CURSOR primary_sty_id_csr definition
20421
20422
20423 --added by bkatraga for residual streams. Bug 4274539
20424 l_primary_sty_id OKL_ST_GEN_TMPT_LNS.PRIMARY_STY_ID%TYPE;
20425
20426 --To get the styid for primary stream purpose Residual Value
20427 CURSOR get_residual_primary_sty_id (l_pdt_id NUMBER, l_contract_start_date DATE)
20428 IS
20429 SELECT PRIMARY_STY_ID
20430 FROM OKL_STRM_TMPT_LINES_UV STL
20431 WHERE STL.PRIMARY_YN = 'Y'
20432 AND STL.PDT_ID = l_pdt_id
20433 AND (STL.START_DATE <= l_contract_start_date)
20434 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
20435 AND PRIMARY_STY_PURPOSE = 'RESIDUAL_VALUE';
20436 -- end bkatraga
20437
20438
20439 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
20440
20441 -- Added code ends here
20442
20443
20444 l_pdtv_rec pdtv_rec_type;
20445 lx_pdt_param_rec pdt_param_rec_type;
20446 l_ast_dtl_tbl ast_dtl_tbl_type;
20447 l_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
20448 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
20449 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
20450 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
20451 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
20452 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
20453 l_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
20454 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
20455 l_line_rec l_line_rec_csr_lease%ROWTYPE;
20456 l_hdr_rec l_hdr_csr_lease%ROWTYPE;
20457 l_rl_rec l_sll_csr_lease%ROWTYPE;
20458 l_hdrrl_rec l_hdrrl_csr_lease%ROWTYPE;
20459 l_rl_rec1 l_slh_csr_lease%ROWTYPE;
20460 l_txtrans_rec l_txtrans_csr_lease%ROWTYPE;
20461 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
20462 l_strm_name_rec strm_name_csr_lease%ROWTYPE;
20463 l_ib_rec ib_csr_lease%ROWTYPE;
20464 l_strmid_rec l_strmid_csr_lease%ROWTYPE;
20465 l_adrconv_rec l_adrconv_csr%ROWTYPE;
20466 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
20467 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
20468
20469 -- Start fix for bug 6858487
20470 l_orig_chr_id OKC_K_HEADERS_B.ID%TYPE;
20471 l_orig_cle_id OKC_K_LINES_B.ID%TYPE;
20472
20473 -- Get Line ID in rebook copy that was copied from LINE the original contract
20474 -- cp_rbk_chr_id is the rebook copy contract
20475 -- cp_ole_id is original contract line ID
20476 CURSOR c_get_orig_line_id (cp_rbk_chr_id IN okc_k_headers_b.id%type
20477 , cp_ole_id IN OKC_K_LINES_B.ID%TYPE) is
20478 SELECT --cle.id new_cle_id
20479 cle.orig_system_id1
20480 FROM okc_k_lines_b cle
20481 ,okc_k_lines_b ole
20482 WHERE cle.dnz_chr_id=cp_rbk_chr_id
20483 and cle.id = cp_ole_id
20484 and ole.lse_id = cle.lse_id
20485 and ole.id=cle.orig_system_id1;
20486
20487 -- End fix for bug 6858487
20488 l_rep_pdt_book fa_books.book_type_code%TYPE; --sechawla bug 8464912 : added
20489
20490 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
20491 cursor get_rebook_type is
20492 select nvl(amort_inc_adj_rev_dt_yn, 'N')
20493 from okl_sys_acct_opts;
20494 l_PROSPECTIVE_REBOOK_YN varchar2(1);
20495
20496 BEGIN
20497 --Added by kthiruva for Debugging
20498 write_to_log('Inside procedure extract_params_lease_deal');
20499
20500 x_return_status := OKL_API.G_RET_STS_SUCCESS;
20501 -- Call start_activity to create savepoint, check compatibility
20502 -- and initialize message list
20503 x_return_status := OKL_API.START_ACTIVITY (
20504 l_api_name
20505 ,p_init_msg_list
20506 ,'_PVT'
20507 ,x_return_status);
20508 -- Check if activity started successfully
20509 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20510 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20511 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20512 RAISE OKL_API.G_EXCEPTION_ERROR;
20513 END IF;
20514
20515
20516 --sechawla 20-Jul-09 PRB ESG Enhancements : check rebook option
20517 open get_rebook_type ;
20518 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN;
20519 close get_rebook_type;
20520
20521 -- Validate the payments
20522 --Added by kthiruva for Debugging
20523 write_to_log('Prior to the call to validate_payments');
20524 validate_payments(p_api_version => p_api_version,
20525 p_init_msg_list => p_init_msg_list,
20526 x_return_status => x_return_status,
20527 x_msg_count => x_msg_count,
20528 x_msg_data => x_msg_data,
20529 p_khr_id => p_chr_id,
20530 p_paym_tbl => l_pay_tbl);
20531
20532 --Added by kthiruva for Debugging
20533 write_to_log('After the call to validate_payments, the return status is :'||x_return_status);
20534
20535 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20536 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20537 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20538 RAISE OKL_API.G_EXCEPTION_ERROR;
20539 END IF;
20540 i := 0; j := 0; k := 0; l := 0; m := 0;
20541
20542 OPEN l_hdr_pdt_csr(p_chr_id);
20543 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
20544 CLOSE l_hdr_pdt_csr;
20545
20546 --get day convention info : mansrini
20547 OPEN get_day_conv_on_contrct;
20548 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
20549 CLOSE get_day_conv_on_contrct;
20550
20551 --Added by srsreeni for bug6076113
20552 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
20553 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
20554 --srsreeni bug6076113 ends
20555 THEN
20556 OPEN get_day_conv_on_sgt;
20557 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
20558 CLOSE get_day_conv_on_sgt;
20559 END IF;
20560
20561
20562 -- get header info
20563 OPEN l_hdr_csr_lease(p_chr_id);
20564 FETCH l_hdr_csr_lease into l_hdr_rec;
20565 IF l_hdr_csr_lease%NOTFOUND THEN
20566 --Added by kthiruva for Debugging
20567 write_to_log('Cursor l_hdr_csr_lease not found');
20568 okl_api.set_message(p_app_name => G_APP_NAME,
20569 p_msg_name => G_LLA_NO_MATCHING_RECORD,
20570 p_token1 => G_COL_NAME_TOKEN,
20571 p_token1_value => 'Contract id');
20572 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20573 END IF;
20574 CLOSE l_hdr_csr_lease;
20575 -- get header rule info
20576 OPEN l_hdrrl_csr_lease('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
20577 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
20578 IF l_hdrrl_csr_lease%NOTFOUND THEN
20579 --Added by kthiruva for Debugging
20580 write_to_log('Cursor l_hdrrl_csr_lease not found');
20581 okl_api.set_message(p_app_name => G_APP_NAME,
20582 p_msg_name => G_LLA_NO_MATCHING_RECORD,
20583 p_token1 => G_COL_NAME_TOKEN,
20584 p_token1_value => 'Contract id');
20585 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20586 END IF;
20587 CLOSE l_hdrrl_csr_lease;
20588 l_csm_lease_header.irs_tax_treatment_method := l_hdrrl_rec.RULE_INFORMATION1;
20589 l_lease_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
20590 IF p_deal_type IS NULL THEN
20591 l_deal_type := l_hdr_rec.deal_type;
20592 ELSE
20593 l_deal_type := p_deal_type;
20594 END IF;
20595 l_csm_lease_header.khr_id := p_chr_id;
20596 l_csm_lease_header.date_payments_commencement := l_hdr_rec.start_date;
20597 l_csm_lease_header.fasb_acct_treatment_method := l_deal_type;
20598 l_csm_lease_header.date_delivery := l_hdr_rec.expected_delivery_date;
20599 l_csm_lease_header.term := l_hdr_rec.term;
20600 l_csm_lease_header.pdt_id := l_hdr_rec.pid;
20601 -- to send the right sif code
20602 OPEN l_financed_type_csr (chrId => p_chr_id);
20603 FETCH l_financed_type_csr INTO ln_fin_yn;
20604 CLOSE l_financed_type_csr;
20605 IF ln_fin_yn = 1 THEN
20606 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_BOTH;
20607 ELSIF ln_fin_yn = 0 THEN
20608 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LESSOR;
20609 END IF;
20610 -- to get the locatin of the asset
20611 OPEN ib_csr_lease(TO_NUMBER(p_chr_id));
20612 FETCH ib_csr_lease into l_ib_rec;
20613 IF ib_csr_lease%NOTFOUND THEN
20614 --Added by kthiruva for Debugging
20615 write_to_log('Cursor ib_csr_lease not found');
20616 okl_api.set_message(p_app_name => G_APP_NAME,
20617 p_msg_name => G_LLA_NO_MATCHING_RECORD,
20618 p_token1 => G_COL_NAME_TOKEN,
20619 p_token1_value => 'Contract id');
20620 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20621 END IF;
20622 CLOSE ib_csr_lease;
20623 l_csm_lease_header.country := l_ib_rec.country;
20624 IF p_orp_code IS NOT NULL
20625 THEN
20626 l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_UPGRADE;
20627 ELSE
20628 l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
20629 END IF;
20630 -- l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
20631 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_NO;
20632 -- get header rule info
20633 OPEN l_hdrrl_csr_lease('LARVIN', 'LARVAU', TO_NUMBER(p_chr_id));
20634 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
20635 CLOSE l_hdrrl_csr_lease;
20636 IF l_hdrrl_rec.RULE_INFORMATION1 = 'Y' THEN
20637 IF(g_rep_req_yn = 'Y') THEN
20638 get_primary_stream_type(
20639 p_khr_id =>p_chr_id,
20640 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
20641 p_primary_sty_purpose =>'RESIDUAL_VALUE_INSURANCE_PREMIUM',
20642 x_return_status => x_return_status,
20643 x_primary_sty_id =>l_sty_id );
20644 IF x_return_status = 'E' THEN
20645 x_return_status := 'S';
20646 END IF;
20647 ELSE
20648 get_primary_stream_type (
20649 p_khr_id => p_chr_id,
20650 p_primary_sty_purpose => 'RESIDUAL_VALUE_INSURANCE_PREMIUM',
20651 x_return_status => x_return_status,
20652 x_primary_sty_id =>l_sty_id
20653 );
20654 IF x_return_status = 'E' THEN
20655 x_return_status := 'S';
20656 END IF;
20657 END IF;
20658 IF (l_sty_id.id IS NOT NULL) THEN
20659 m := m + 1;
20660 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
20661 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
20662 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
20663 END IF;
20664 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_YES;
20665 -- get header rule info
20666 OPEN l_hdrrl_csr_lease('LARVIN', 'LARVAM', TO_NUMBER(p_chr_id));
20667 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
20668 CLOSE l_hdrrl_csr_lease;
20669 l_csm_lease_header.rvi_rate := TO_NUMBER(nvl(l_hdrrl_rec.RULE_INFORMATION4,'0'));
20670 END IF;
20671 -- Purchase option,
20672 OPEN l_hdrrl_csr_lease('AMTFOC', 'AMBPOC', TO_NUMBER(p_chr_id));
20673 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
20674 CLOSE l_hdrrl_csr_lease;
20675 l_purchase_option := l_hdrrl_rec.RULE_INFORMATION11;
20676 IF (l_hdrrl_rec.rule_information1 IS NOT NULL OR
20677 l_hdrrl_rec.rule_information1 <> okl_api.g_miss_char) AND
20678 LTRIM(RTRIM(l_hdrrl_rec.rule_information1)) = 'USE_FORMULA' AND
20679 (l_hdrrl_rec.rule_information3 IS NOT NULL OR
20680 l_hdrrl_rec.rule_information3 <> okl_api.g_miss_char) THEN
20681 -- Executing the formula defined
20682 --Added by kthiruva for Debugging
20683 write_to_log('Prior to the call to execute_formula');
20684 execute_formula(p_api_version => l_api_version,
20685 p_init_msg_list => p_init_msg_list,
20686 x_return_status => l_return_status,
20687 x_msg_count => x_msg_count,
20688 x_msg_data => x_msg_data,
20689 p_formula_name => LTRIM(RTRIM(l_hdrrl_rec.rule_information3)),
20690 p_contract_id => p_chr_id,
20691 p_line_id => NULL,
20692 x_value => l_purchase_option_amount);
20693 --Added by kthiruva for Debugging
20694
20695 --Commented by bkatraga for bug 10649684
20696 --write_to_log('After the call to execute_formula, the return status is :'||l_return_status);
20697 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20698 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20699 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20700 RAISE OKL_API.G_EXCEPTION_ERROR;
20701 END IF;
20702 ELSIF (l_hdrrl_rec.rule_information1 IS NOT NULL OR
20703 l_hdrrl_rec.rule_information1 <> okl_api.g_miss_char) AND
20704 LTRIM(RTRIM(l_hdrrl_rec.rule_information1)) = 'USE_FIXED_AMOUNT' AND
20705 (l_hdrrl_rec.rule_information2 IS NOT NULL OR
20706 l_hdrrl_rec.rule_information2 <> okl_api.g_miss_char) THEN
20707 l_purchase_option_amount := TO_NUMBER(l_hdrrl_rec.RULE_INFORMATION2);
20708 ELSE
20709 l_purchase_option := 'NONE';
20710 l_purchase_option_amount := NULL;
20711 END IF;
20712
20713 -- Added by bkatraga for bug 4194641
20714 IF(l_purchase_option IS NOT NULL AND l_purchase_option = 'FMV') THEN
20715 l_purchase_option_amount := NULL;
20716 END IF;
20717 -- end bkatraga
20718
20719 -- Added by kthiruva for Stream Performance
20720 -- This cursor was moved outside the loop to improve performance
20721 -- Get the org id
20722 --Bug 4346646 - Start of Changes
20723 OPEN get_org_id(p_chr_id => p_chr_id);
20724 FETCH get_org_id INTO ln_org_id,
20725 lv_currency_code;
20726 IF get_org_id%NOTFOUND THEN
20727 --Added by kthiruva for Debugging
20728 write_to_log('Cursor get_org_id not found');
20729 okl_api.set_message(p_app_name => G_APP_NAME,
20730 p_msg_name => G_LLA_NO_MATCHING_RECORD,
20731 p_token1 => G_COL_NAME_TOKEN,
20732 p_token1_value => 'Contract id');
20733 x_return_status := OKL_API.G_RET_STS_ERROR;
20734 END IF;
20735 CLOSE get_org_id;
20736 --Bug 4346646 - End of Changes
20737
20738 --Added by bkatraga for bug 14822974
20739 OKL_ISG_UTILS_PVT.get_arrears_pay_dates_option(
20740 p_khr_id => p_chr_id,
20741 x_arrears_pay_dates_option => l_arrears_pay_dates_option,
20742 x_return_status => x_return_status);
20743 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20744 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20745 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20746 RAISE OKL_API.G_EXCEPTION_ERROR;
20747 END IF;
20748 --end bkatraga for bug 14822974
20749
20750 -- fetching the line record
20751 --Added by kthiruva for Debugging
20752 write_to_log('Fetching the line details for the contract ');
20753 FOR l_line_rec in l_line_rec_csr_lease ( p_chr_id , 'FREE_FORM1') LOOP
20754 i := i + 1;
20755 l_csm_line_details_tbl(i).kle_asset_id := l_line_rec.id;
20756
20757 ----Sechawla 7-aug-09 PRB ESG : Populate orig_contract_line_id
20758
20759 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
20760 l_csm_line_details_tbl(i).orig_contract_line_id := l_line_rec.orig_contract_line_id;
20761 --END IF;
20762
20763 l_csm_line_details_tbl(i).state_depre_dmnshing_value_rt := 0; -- TBD
20764 l_csm_line_details_tbl(i).book_depre_dmnshing_value_rt := 0; -- TBD
20765 l_csm_line_details_tbl(i).residual_guarantee_method := l_line_rec.residual_code;
20766 l_csm_line_details_tbl(i).fed_depre_dmnshing_value_rate := 0; -- TBD
20767 l_csm_line_details_tbl(i).purchase_option := l_purchase_option;
20768 l_csm_line_details_tbl(i).purchase_option_amount := l_purchase_option_amount;
20769 IF l_line_rec.ste_code = 'TERMINATED' THEN
20770 l_csm_line_details_tbl(i).residual_date := l_line_rec.date_terminated;
20771 ELSE
20772 --Added by bkatraga for bug 14822974
20773 l_adv_arrears := 'N';
20774 OPEN l_adv_arrears_csr(p_chr_id, l_line_rec.id);
20775 FETCH l_adv_arrears_csr INTO l_adv_arrears;
20776 CLOSE l_adv_arrears_csr;
20777
20778 IF(l_adv_arrears = 'Y' AND l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD') THEN
20779 l_csm_line_details_tbl(i).residual_date := l_hdr_rec.end_date + 1;
20780 ELSE
20781 l_csm_line_details_tbl(i).residual_date := l_hdr_rec.end_date;
20782 END IF;
20783 --end bkatraga for bug 14822974
20784 END IF;
20785 IF l_line_rec.residual_value IS NULL THEN
20786 l_csm_line_details_tbl(i).residual_amount := 0;
20787 END IF; -- Added by gboomina for BUG 4384784
20788 -- calling the asset mangement API
20789 -- to get the residual value of Terminated line
20790 -- Changed the ELSIF to IF by gboomina for BUG 4384784
20791 IF l_line_rec.ste_code = 'TERMINATED' THEN
20792 -- Start fix for bug 6858487
20793 retrive_orig_hdr_id(p_chr_id, l_orig_chr_id);
20794 IF l_orig_chr_id <> p_chr_id THEN
20795 OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
20796 cp_ole_id => l_line_rec.id);
20797 FETCH c_get_orig_line_id INTO l_orig_cle_id;
20798 CLOSE c_get_orig_line_id;
20799 ELSE
20800 l_orig_cle_id := l_line_rec.id;
20801 END IF;
20802 l_csm_line_details_tbl(i).residual_amount := okl_am_util_pvt.get_actual_asset_residual(p_khr_id => l_orig_chr_id,
20803 p_kle_id => l_orig_cle_id);
20804
20805 -- End fix for bug 6858487
20806 -- Changed the ELSE to ELSIF condition by gboomina for BUG 4384784
20807 ELSIF l_line_rec.residual_value IS NOT NULL THEN
20808 l_csm_line_details_tbl(i).residual_amount := l_line_rec.residual_value;
20809 END IF;
20810 IF l_line_rec.delivered_date IS NULL THEN
20811 l_csm_line_details_tbl(i).date_delivery := l_line_rec.start_date;
20812 ELSE
20813 l_csm_line_details_tbl(i).date_delivery := l_line_rec.delivered_date;
20814 END IF;
20815 l_csm_line_details_tbl(i).residual_guarantee_amount := l_line_rec.residual_grnty_amount;
20816 --Modified by kthiruva for Pricing Enhancements
20817 --Currently the funding date defaults to the start date for all asset lines
20818 --The funding date is now a user enterable value and hence date_funding should
20819 --obtain its value from the date_funding_expected column.
20820 l_csm_line_details_tbl(i).date_funding := NVL(l_line_rec.date_funding_expected,l_line_rec.start_date);
20821
20822 l_csm_line_details_tbl(i).description := l_line_rec.item_description;
20823
20824 -- we need to set the context since the records in
20825 -- OKL_SYS_ACCT_OPTS table are stored with regards to the context
20826 -- To calculate basis percent for Corp or tax book
20827 -- we need the Line capital amount.
20828 -- Now since new version of the pricing eng
20829 -- NET subsidies , amount of sudsidy is sent to
20830 -- pricing eng as percent so we exclude the discout as below
20831 -- Now we are fetching the line capital amount and not using the
20832 -- formulas.
20833 -- Get line Discount
20834 l_discount := 0;
20835 FOR l_subsidy_rec IN get_dis_amt_csr_lease(p_chr_id => p_chr_id, p_cle_id => l_line_rec.id) LOOP
20836 IF(l_subsidy_rec.SUBSIDY_OVERRIDE_AMOUNT IS NULL) THEN
20837 l_discount := l_discount + NVL(l_subsidy_rec.AMOUNT,0);
20838 ELSE
20839 l_discount := l_discount + l_subsidy_rec.SUBSIDY_OVERRIDE_AMOUNT;
20840 END IF;
20841 END LOOP;
20842
20843 l_value := l_line_rec.capital_amount;
20844 ln_value := l_value - NVL(l_discount,0); -- Bug# 7534196 - Subtract Net Subsidy
20845
20846 --Made changes by bkatraga for bug 5243586
20847 --Commenting the code below as Trade-in amount is already deducted from the asset cost during authoring itself
20848 /*
20849 --Added by kthiruva for Pricing Enhancements
20850 --If a tradein_amount is defined on an asset, it needs to be deducted from
20851 --the asset cost
20852 IF l_line_rec.tradein_amount is not null THEN
20853 ln_value := ln_value - l_line_rec.tradein_amount;
20854 END IF;
20855 --End of Changes for Pricing Enhancements
20856 */
20857 --end changes by bkatraga
20858
20859 -- Modified by RGOOTY Bug 4629365: Start
20860 l_csm_line_details_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
20861 -- Modified by RGOOTY Bug 4629365: End
20862 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
20863 --Bug 4738011 - Start of Changes
20864 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
20865
20866 --Added by bkatraga for bug 15942693
20867 IF(l_line_rec.capital_reduction IS NULL) THEN
20868 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
20869 l_csm_line_details_tbl(i).down_payment_amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
20870 ELSE
20871 l_csm_line_details_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
20872 END IF;
20873 --end bkatraga for bug 15942693
20874
20875 --If the Down Payment is capitalised then we fetch and request stream of Type Capital Reduction
20876 --vdamerla Bug6149951 starts
20877 IF l_line_rec.ste_code <> 'TERMINATED' THEN
20878
20879 get_primary_stream_type
20880 (
20881 p_khr_id => p_chr_id,
20882 p_primary_sty_purpose => 'CAPITAL_REDUCTION',
20883 x_return_status => x_return_status,
20884 x_primary_sty_id =>l_sty_id
20885 );
20886 IF x_return_status = 'E' THEN
20887 x_return_status := 'S';
20888 END IF;
20889
20890 IF (l_sty_id.id IS NOT NULL ) THEN
20891 m := m + 1;
20892 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
20893 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
20894 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
20895 END IF;
20896 END IF;
20897 --vdamerla Bug6149951 ends
20898 END IF;
20899
20900 --Modified by kthiruva for the Down Payment CR
20901 --Deducting the Capital Reduction is already being done by Authoring.Hence,commenting the code
20902 /*IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
20903 l_csm_line_details_tbl(i).asset_cost := ln_value - l_line_rec.capital_reduction;
20904 ELSE
20905 l_csm_line_details_tbl(i).asset_cost := ln_value;
20906 END IF;*/
20907 l_csm_line_details_tbl(i).asset_cost := l_value; -- Bug# 7534196 - Ensure Asset cost is passed to Supertrump as is
20908 --Bug 4738011 - End of Changes
20909
20910 -- Now we are dealing with corp book and building
20911 -- Book Depreciation Stream info
20912 l_ast_dtl_tbl.delete;
20913 --Added by kthiruva for Debugging
20914 write_To_log('Prior to the call to okl_activate_asset_pvt.get_pricing_parameters');
20915 okl_activate_asset_pvt.get_pricing_parameters(
20916 p_api_version => p_api_version,
20917 p_init_msg_list => p_init_msg_list,
20918 x_return_status => x_return_status,
20919 x_msg_count => x_msg_count,
20920 x_msg_data => x_msg_data,
20921 p_chr_id => p_chr_id,
20922 p_cle_id => l_line_rec.id,
20923 x_ast_dtl_tbl => l_ast_dtl_tbl);
20924 --Added by kthiruva for Debugging
20925 write_To_log('After the call to okl_activate_asset_pvt.get_pricing_parameters, return status is :'||x_return_status);
20926 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20927 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
20928 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20929 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
20930 END IF;
20931 -- bug 4194673 fixed by HKPATEL
20932 IF l_ast_dtl_tbl.COUNT > 0 THEN
20933 l_book_type_code := NULL;
20934 FOR j IN l_ast_dtl_tbl.FIRST..l_ast_dtl_tbl.LAST LOOP
20935 IF l_ast_dtl_tbl(j).book_class = 'CORPORATE' THEN
20936 l_book_type_code := l_ast_dtl_tbl(j).book_type_code;
20937 END IF;
20938 END LOOP;
20939 END IF;
20940
20941 IF l_ast_dtl_tbl.COUNT > 0 THEN
20942 FOR j IN l_ast_dtl_tbl.FIRST..l_ast_dtl_tbl.LAST LOOP
20943 -- Thru this we will know if the there is reporting product or not
20944 -- and the g_rep_yn flag will let us know that there reporting streams
20945 -- requested so we try to generate the reporting dep streasm based on the
20946 -- the belwo condition.
20947 IF l_hdr_rec.report_pdt_id <> -1 AND
20948 g_rep_req_yn = 'Y' AND
20949 l_ast_dtl_tbl(j).book_class = 'TAX' THEN
20950 l_pdtv_rec.id := l_hdr_rec.report_pdt_id;
20951 --Added by kthiruva for Debugging
20952 write_to_log('Prior to the call to okl_setupproducts_pvt.getpdt_parameters');
20953 okl_setupproducts_pvt.getpdt_parameters(
20954 p_api_version => p_api_version,
20955 p_init_msg_list => p_init_msg_list,
20956 x_return_status => x_return_status,
20957 x_msg_count => x_msg_count,
20958 x_msg_data => x_msg_data,
20959 p_pdtv_rec => l_pdtv_rec,
20960 x_no_data_found => lx_no_data_found,
20961 p_pdt_parameter_rec => lx_pdt_param_rec);
20962
20963 --Added by kthiruva for Debugging
20964 write_to_log('After the call to okl_setupproducts_pvt.getpdt_parameters, the return status is :'||x_return_status);
20965 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20966 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
20967 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20968 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
20969 END IF;
20970 -- bug 4194673 fixed by HKPATEL
20971 x_return_status := is_rep_pdt(--p_asset_number => l_line_rec.name,
20972 p_corp_book => l_book_type_code,
20973 x_mg_tax_yn => lv_mg_tax_yn);
20974 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20975 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
20976 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20977 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
20978 END IF;
20979 -- If the reporting book is of deal type and if the
20980 -- if there is multi gaap tax book create in okl_txd_assets_b table
20981 -- then we go and generate the book dep streams for the Mg tax book
20982 -- else we do not generate stream for the Multi gaap
20983 IF lx_pdt_param_rec.deal_type = 'LEASEOP' AND lv_mg_tax_yn = 'Y' THEN
20984 --sechawla bug 8464912 : begin
20985 l_rep_pdt_book := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
20986 IF(l_rep_pdt_book = l_ast_dtl_tbl(j).BOOK_TYPE_CODE) THEN
20987 --sechawla bug 8464912 : end
20988
20989 -- Now we are determing the Basis percent for the corp book
20990 -- Basis percent = Depreciable Cost (for each asset defined corp book)
20991 -- / Total Asset Capital Cost
20992 l_basis_percent := 0;
20993 l_rnd_basis_percent := 0;
20994 l_salvage := 0;
20995 IF (l_ast_dtl_tbl(j).cost IS NULL OR
20996 l_ast_dtl_tbl(j).cost = 0 ) THEN
20997 l_basis_percent := 0;
20998 ELSE
20999 -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
21000 -- Capitalized Interest and Discount for getting the corporate depreciation cost
21001 -- Now since new version of the pricing eng
21002 -- NET subsidies , amount of sudsidy is sent to
21003 -- pricing eng as percent so we exclude the discout as below
21004 -- l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
21005 --Commneted the above by virtue of Authoring API
21006 -- getting the Actual cost going into /in FA
21007 l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_discount,0); -- Bug# 7534196 - Subtract Net Subsidy
21008 l_basis_percent := (NVL(l_tax_dep_cost,0)/ln_value) * 100;
21009 END IF;
21010 IF l_basis_percent <> 0 THEN
21011 -- Now we round the Basis Percent
21012 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
21013 p_amount => l_basis_percent);
21014 ELSIF l_basis_percent = 0 THEN
21015 l_rnd_basis_percent := 0;
21016 END IF;
21017 -- Now we are determing the Salvage value
21018 l_salvage := NVL(l_ast_dtl_tbl(j).salvage_value,0);
21019 IF( l_salvage = 0) Then
21020 l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100;
21021 END IF;
21022 l_csm_line_details_tbl(i).book_adr_convention := l_ast_dtl_tbl(j).prorate_convention_code;
21023 l_csm_line_details_tbl(i).book_term := l_ast_dtl_tbl(j).life_in_months;
21024 l_csm_line_details_tbl(i).book_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
21025 l_csm_line_details_tbl(i).book_salvage := l_salvage;
21026 l_csm_line_details_tbl(i).date_book := l_ast_dtl_tbl(j).in_service_date;
21027 l_csm_line_details_tbl(i).book_basis_percent := l_rnd_basis_percent;
21028 -- AND condition added below by HKPATEL for bug 4194673
21029 IF l_lease_tax_owner = 'LESSOR' AND l_rnd_basis_percent <> 0 THEN
21030 IF(g_rep_req_yn = 'Y') THEN
21031 get_primary_stream_type
21032 (
21033 p_khr_id =>p_chr_id,
21034 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
21035 p_primary_sty_purpose =>'BOOK_DEPRECIATION',
21036 x_return_status => x_return_status,
21037 x_primary_sty_id =>l_sty_id
21038 );
21039 IF x_return_status = 'E' THEN
21040 x_return_status := 'S';
21041 END IF;
21042 ELSE
21043 get_primary_stream_type
21044 (
21045 p_khr_id => p_chr_id,
21046 p_primary_sty_purpose => 'BOOK_DEPRECIATION',
21047 x_return_status => x_return_status,
21048 x_primary_sty_id =>l_sty_id
21049 );
21050 IF x_return_status = 'E' THEN
21051 x_return_status := 'S';
21052 END IF;
21053 END IF;
21054 --vdamerla Bug6149951 starts
21055 IF l_line_rec.ste_code <> 'TERMINATED' THEN
21056 IF (l_sty_id.id IS NOT NULL ) THEN
21057 m := m + 1;
21058 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
21059 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
21060 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
21061 END IF;
21062 END IF;--srsreeni Bug6149951 ends
21063 END IF;
21064 END IF; --sechawla bug 8464912
21065 END IF;
21066 ELSIF l_ast_dtl_tbl(j).book_class = 'CORPORATE' AND
21067 g_rep_req_yn = 'N' THEN
21068 -- Now we are determing the Basis percent for the corp book
21069 -- Basis percent = Depreciable Cost (for each asset defined corp book)
21070 -- / Total Asset Capital Cost
21071 IF (l_ast_dtl_tbl(j).cost IS NULL OR
21072 l_ast_dtl_tbl(j).cost = 0 ) THEN
21073 l_basis_percent := 0;
21074 ELSE
21075 -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
21076 -- Capitalized Interest and Discount for getting the corporate depreciation cost
21077 -- Now since new version of the pricing eng
21078 -- NET subsidies , amount of sudsidy is sent to
21079 -- pricing eng as percent so we exclude the discout as below
21080 -- l_corp_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
21081 --Commneted the above by virtue of Authoring API
21082 -- getting the Actual cost going into /in FA
21083 l_corp_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_discount,0);
21084 l_basis_percent := (NVL(l_corp_dep_cost,0) / ln_value) * 100;
21085 END IF;
21086 IF l_basis_percent <> 0 THEN
21087 -- Now we round the Basis Percent
21088 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
21089 p_amount => l_basis_percent);
21090 ELSIF l_basis_percent = 0 THEN
21091 l_rnd_basis_percent := 0;
21092 END IF;
21093 -- Now we are determing the Salvage value
21094 l_salvage := nvl(l_ast_dtl_tbl(j).salvage_value,0);
21095 IF( l_salvage = 0) Then
21096 l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100.00;
21097 END IF;
21098 l_csm_line_details_tbl(i).book_adr_convention := l_ast_dtl_tbl(j).prorate_convention_code;
21099 l_csm_line_details_tbl(i).book_term := l_ast_dtl_tbl(j).life_in_months;
21100 l_csm_line_details_tbl(i).book_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
21101 l_csm_line_details_tbl(i).book_salvage := l_salvage;
21102 l_csm_line_details_tbl(i).date_book := l_ast_dtl_tbl(j).in_service_date;
21103 l_csm_line_details_tbl(i).book_basis_percent := l_rnd_basis_percent;
21104 -- AND condition added below by HKPATEL for bug 4194673
21105 IF l_lease_tax_owner = 'LESSOR' AND l_rnd_basis_percent <> 0 THEN
21106 -- vdamerla Forward Port Bug6149951
21107 --vdamerla Bug6149951 starts
21108 IF l_line_rec.ste_code <> 'TERMINATED' THEN
21109
21110 IF(g_rep_req_yn = 'Y') THEN
21111 get_primary_stream_type
21112 (
21113 p_khr_id =>p_chr_id,
21114 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
21115 p_primary_sty_purpose =>'BOOK_DEPRECIATION',
21116 x_return_status => x_return_status,
21117 x_primary_sty_id =>l_sty_id
21118 );
21119 IF x_return_status = 'E' THEN
21120 x_return_status := 'S';
21121 END IF;
21122 ELSE
21123 get_primary_stream_type
21124 (
21125 p_khr_id => p_chr_id,
21126 p_primary_sty_purpose => 'BOOK_DEPRECIATION',
21127 x_return_status => x_return_status,
21128 x_primary_sty_id =>l_sty_id
21129 );
21130 IF x_return_status = 'E' THEN
21131 x_return_status := 'S';
21132 END IF;
21133 END IF;
21134 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
21135 IF (l_sty_id.id IS NOT NULL ) THEN
21136 m := m + 1;
21137 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
21138 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
21139 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
21140 END IF;
21141 -- vdamerla Forward Port Bug6149951
21142 END IF;--vdamerla Bug6149951 ends
21143 END IF;
21144 ELSIF l_ast_dtl_tbl(j).book_class = 'TAX' AND
21145 g_rep_req_yn = 'N' THEN
21146 -- Now we are changing the approach for generating Tax book Depreciation streams
21147 -- by the virtue of Bug#3447917 so changes because of bug#3066346 is reverted.
21148 -- We need to validate tax book for a given asset number
21149 -- and also validate if there has been setups done for these
21150 -- tax books
21151 -- Now we are dealing with Tax book and building
21152 -- Federal/State Depreciation Stream info
21153 -- Since there could be more than one tax book we need to loop for each
21154 -- tax book
21155 -- Now we are determing the Basis percent for the Tax book
21156 -- Basis percent = Depreciable Cost (for each asset defined tax book)
21157 -- / Total Asset Capital Cost
21158 -- Intialize the variable
21159 l_basis_percent := 0;
21160 l_rnd_basis_percent := 0;
21161 l_salvage := 0;
21162 IF (l_ast_dtl_tbl(j).cost IS NULL OR
21163 l_ast_dtl_tbl(j).cost = 0) THEN
21164 l_basis_percent := 0;
21165 ELSE
21166 -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
21167 -- Capitalized Interest and Discount for getting the Tax book cost
21168 -- Now since new version of the pricing eng
21169 -- NET subsidies , amount of sudsidy is sent to
21170 -- pricing eng as percent so we exclude the discout as below
21171 -- l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
21172 --Commneted the above by virtue of Authoring API
21173 -- getting the Actual cost going into /in FA
21174 l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_discount,0); -- Bug# 7534196 - Subtract Net Subsidy
21175 l_basis_percent := (NVL(l_tax_dep_cost,0) / ln_value) * 100;
21176 END IF;
21177 IF l_basis_percent <> 0 THEN
21178 -- Now we round the Basis Percent
21179 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
21180 p_amount => l_basis_percent);
21181 ELSIF l_basis_percent = 0 THEN
21182 l_rnd_basis_percent := 0;
21183 END IF;
21184 -- Now we are determing the Salvage value
21185 l_salvage := nvl(l_ast_dtl_tbl(j).salvage_value,0);
21186 IF( l_salvage = 0) Then
21187 l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100;
21188 END IF;
21189 -- we build both federal and state Depreciation Stream
21190 FOR l_txtrans_rec in l_txtrans_csr_lease (l_ast_dtl_tbl(j).book_type_code) LOOP
21191 IF l_txtrans_rec.value IS NOT NULL AND
21192 l_txtrans_rec.value = 'FEDERAL' THEN
21193 l_csm_line_details_tbl(i).fed_depre_adr_conve := l_ast_dtl_tbl(j).prorate_convention_code;
21194 l_csm_line_details_tbl(i).fed_depre_term := l_ast_dtl_tbl(j).life_in_months;
21195 l_csm_line_details_tbl(i).fed_depre_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
21196 l_csm_line_details_tbl(i).fed_depre_salvage := l_salvage;
21197 l_csm_line_details_tbl(i).date_fed_depre := l_ast_dtl_tbl(j).in_service_date;
21198 l_csm_line_details_tbl(i).fed_depre_basis_percent := l_rnd_basis_percent;
21199 IF l_lease_tax_owner = 'LESSOR' THEN
21200 -- vdamerla Forward Port Bug61130937
21201 --vdamerla Bug61130937 starts
21202 IF l_line_rec.ste_code <> 'TERMINATED' THEN
21203 IF(g_rep_req_yn = 'Y') THEN
21204 get_primary_stream_type
21205 (
21206 p_khr_id =>p_chr_id,
21207 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
21208 p_primary_sty_purpose =>'FEDERAL_DEPRECIATION',
21209 x_return_status => x_return_status,
21210 x_primary_sty_id =>l_sty_id
21211 );
21212 IF x_return_status = 'E' THEN
21213 x_return_status := 'S';
21214 END IF;
21215 ELSE
21216 get_primary_stream_type
21217 (
21218 p_khr_id => p_chr_id,
21219 p_primary_sty_purpose => 'FEDERAL_DEPRECIATION',
21220 x_return_status => x_return_status,
21221 x_primary_sty_id =>l_sty_id
21222 );
21223 IF x_return_status = 'E' THEN
21224 x_return_status := 'S';
21225 END IF;
21226 END IF;
21227 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
21228 IF (l_sty_id.id IS NOT NULL ) THEN
21229 m := m + 1;
21230 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
21231 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
21232 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
21233 END IF;
21234 END IF; --vdamerla Bug6149951 ends
21235 END IF;
21236 ELSIF l_txtrans_rec.value IS NOT NULL AND
21237 l_txtrans_rec.value = 'STATE' THEN
21238 l_csm_line_details_tbl(i).state_depre_adr_convent := l_ast_dtl_tbl(j).prorate_convention_code;
21239 l_csm_line_details_tbl(i).state_depre_term := l_ast_dtl_tbl(j).life_in_months;
21240 l_csm_line_details_tbl(i).state_depre_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
21241 l_csm_line_details_tbl(i).state_depre_salvage := l_salvage;
21242 l_csm_line_details_tbl(i).date_state_depre := l_ast_dtl_tbl(j).in_service_date;
21243 l_csm_line_details_tbl(i).state_depre_basis_percent := l_rnd_basis_percent;
21244 IF l_lease_tax_owner = 'LESSOR' THEN
21245 --vdamerla Bug61130937 starts
21246 IF l_line_rec.ste_code <> 'TERMINATED' THEN
21247 IF(g_rep_req_yn = 'Y') THEN
21248 get_primary_stream_type
21249 (
21250 p_khr_id =>p_chr_id,
21251 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
21252 p_primary_sty_purpose =>'STATE_DEPRECIATION',
21253 x_return_status => x_return_status,
21254 x_primary_sty_id =>l_sty_id
21255 );
21256 IF x_return_status = 'E' THEN
21257 x_return_status := 'S';
21258 END IF;
21259 ELSE
21260 get_primary_stream_type
21261 (
21262 p_khr_id => p_chr_id,
21263 p_primary_sty_purpose => 'STATE_DEPRECIATION',
21264 x_return_status => x_return_status,
21265 x_primary_sty_id =>l_sty_id
21266 );
21267 IF x_return_status = 'E' THEN
21268 x_return_status := 'S';
21269 END IF;
21270 END IF;
21271 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
21272 IF (l_sty_id.id IS NOT NULL ) THEN
21273 m := m + 1;
21274 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
21275 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
21276 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
21277 END IF;
21278 END IF;--vdamerla Bug6149951 ends
21279 END IF;
21280 END IF;
21281 END LOOP;
21282 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21283 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21284 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21285 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21286 END IF;
21287 END IF;
21288 END LOOP;
21289 ELSE
21290 okl_api.set_message(p_app_name => G_APP_NAME,
21291 p_msg_name => G_LLA_NO_MATCHING_RECORD,
21292 p_token1 => G_COL_NAME_TOKEN,
21293 p_token1_value => 'Asset Number : '||l_line_rec.name);
21294 x_return_status := OKL_API.G_RET_STS_ERROR;
21295 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21296 END IF;
21297
21298
21299 -- added by bkatraga for residual streams. Bug 4274539
21300 IF(l_line_rec.residual_value IS NOT NULL) THEN
21301 -- To get the primary stream purpose Residual Value id into l_primary_sty_id
21302 OPEN get_residual_primary_sty_id(l_hdr_rec.pid, l_hdr_rec.start_date);
21303 FETCH get_residual_primary_sty_id INTO l_primary_sty_id;
21304 CLOSE get_residual_primary_sty_id;
21305 -- To check if the product is reporting one or not
21306 --vdamerla Bug61130937 starts
21307 IF l_line_rec.ste_code <> 'TERMINATED' THEN
21308
21309 IF(g_rep_req_yn = 'Y') THEN
21310 -- To get the dependant stream types of purpose Residual Value which have pricing name defined
21311 get_dependent_stream_types
21312 (
21313 p_khr_id =>p_chr_id,
21314 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
21315 p_primary_sty_id =>l_primary_sty_id,
21316 x_return_status => x_return_status,
21317 x_dependent_sty_id =>l_strm_type_id_tbl
21318 );
21319 IF x_return_status = 'E' THEN
21320 x_return_status := 'S';
21321 END IF;
21322 ELSE
21323 get_dependent_stream_types
21324 (
21325 p_khr_id =>p_chr_id,
21326 p_primary_sty_id =>l_primary_sty_id,
21327 x_return_status => x_return_status,
21328 x_dependent_sty_id =>l_strm_type_id_tbl
21329 );
21330 IF x_return_status = 'E' THEN
21331 x_return_status := 'S';
21332 END IF;
21333 END IF;
21334 -- Populate the dependant stream types
21335 IF l_strm_type_id_tbl.COUNT > 0 THEN
21336 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
21337 m := m + 1;
21338 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
21339 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
21340 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
21341 END LOOP;
21342 END IF;
21343 END IF;--vdamerla Bug6149951 ends
21344 END IF;
21345 -- end bkatraga
21346 FOR l_rl_rec1 in l_slh_csr_lease ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
21347 l_level_type := l_rl_rec1.object1_id1;
21348 OPEN strm_name_csr_lease ( l_level_type );
21349 FETCH strm_name_csr_lease into l_strm_name_rec;
21350 IF strm_name_csr_lease%NOTFOUND THEN
21351 x_return_status := OKL_API.G_RET_STS_ERROR;
21352 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21353 END IF;
21354 CLOSE strm_name_csr_lease;
21355 l_strm_name := l_strm_name_rec.stream_type_purpose;
21356 --Added by srsreeni for bug5841892
21357 -- m := m + 1;
21358 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
21359 --bug5841892 end of changes
21360 --vdamerla Bug61130937 starts
21361 IF l_line_rec.ste_code <> 'TERMINATED' THEN
21362 get_primary_pricing_name
21363 (
21364 p_khr_id =>p_chr_id,
21365 p_sty_id =>l_level_type,
21366 x_return_status =>x_return_status,
21367 x_primary_pricing_name =>l_pricing_name
21368 );
21369 IF x_return_status = 'E' THEN
21370 x_return_status := 'S';
21371 END IF;
21372 --Added by srsreeni for bug5841892
21373 if l_pricing_name is not null then
21374 m := m + 1;
21375 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
21376 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
21377 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
21378 end if;
21379 --bug5841892 end of changes
21380 --Commented as we want to generate all the dependents of RENT streams
21381 IF(g_rep_req_yn = 'Y') THEN
21382 get_dependent_stream_types
21383 (
21384 p_khr_id =>p_chr_id,
21385 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
21386 p_primary_sty_id =>l_level_type,
21387 x_return_status => x_return_status,
21388 x_dependent_sty_id =>l_strm_type_id_tbl
21389 );
21390 IF x_return_status = 'E' THEN
21391 x_return_status := 'S';
21392 END IF;
21393 ELSE
21394 get_dependent_stream_types
21395 (
21396 p_khr_id =>p_chr_id,
21397 p_primary_sty_id =>l_level_type,
21398 x_return_status => x_return_status,
21399 x_dependent_sty_id =>l_strm_type_id_tbl
21400 );
21401 IF x_return_status = 'E' THEN
21402 x_return_status := 'S';
21403 END IF;
21404 END IF;
21405 IF l_strm_type_id_tbl.COUNT > 0 THEN
21406 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
21407 m := m + 1;
21408 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
21409 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
21410 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
21411 END LOOP;
21412 END IF;
21413 END IF;--vdamerla Bug6149951 ends
21414 lv_diff_date := 'N';
21415 idx := 0;
21416 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
21417 FOR l_rl_rec in l_sll_csr_lease ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
21418 -- Start of Bug#3401024 modification BAKUCHIB
21419 /*IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
21420 lv_diff_date = 'N' AND
21421 idx = 0 THEN
21422 j := j + 1;
21423 idx := idx + 1;
21424 l_rents_tbl(j).level_index_number := idx;
21425 l_rents_tbl(j).amount := 0;
21426 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
21427 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
21428 l_rents_tbl(j).period := g_stub_rec.period;
21429 l_rents_tbl(j).description := l_strm_name;
21430 l_rents_tbl(j).kle_asset_id := l_line_rec.id;
21431 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21432 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21433 l_rents_tbl(j).days_in_month := l_days_in_month_code;
21434 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
21435 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
21436 IF l_line_rec.capitalize_down_payment_yn = 'N' AND
21437 l_line_rec.capital_reduction IS NOT NULL
21438 THEN
21439 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
21440 END IF;
21441 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
21442 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
21443 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21444 END If;
21445 lv_diff_date := 'Y';
21446 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
21447
21448 -- Added by kthiruva on 29-Dec-2005.
21449 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
21450 -- Bug 4915938 - Start of Changes
21451 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21452 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21453 ELSE
21454 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21455 END IF;
21456 -- Bug 4915938 - End of Changes
21457 -- Bug 8978040 : RGOOTY
21458 IF l_PROSPECTIVE_REBOOK_YN = 'Y' THEN
21459 l_rents_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21460 END IF;
21461
21462 END IF; */
21463 -- End of Bug#3401024 modification BAKUCHIB
21464 -- Start of Bug#2757289 modification
21465 IF (l_rl_rec.rule_information7 IS NOT NULL OR
21466 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
21467 (l_rl_rec.rule_information8 IS NOT NULL OR
21468 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
21469 j := j + 1;
21470 idx := idx + 1;
21471 l_rents_tbl(j).level_index_number := idx;
21472 l_rents_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
21473 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
21474 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
21475 l_rents_tbl(j).period := g_stub_rec.period;
21476 l_rents_tbl(j).description := l_strm_name;
21477 l_rents_tbl(j).kle_asset_id := l_line_rec.id;
21478 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21479 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21480 l_rents_tbl(j).days_in_month := l_days_in_month_code;
21481 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
21482 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
21483 IF l_line_rec.capitalize_down_payment_yn = 'N'
21484 THEN
21485 --Added by bkatraga for bug 15942693
21486 IF(l_line_rec.capital_reduction IS NULL) THEN
21487 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
21488 l_rents_tbl(j).down_payment_amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
21489 ELSE
21490 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
21491 END IF;
21492 --end bkatraga for bug 15942693
21493 END IF;
21494 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
21495 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
21496 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21497 END If;
21498 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
21499 -- End of Bug#2757289 modification
21500
21501 -- Added by kthiruva on 29-Dec-2005.
21502 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
21503 -- Bug 4915938 - Start of Changes
21504 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21505 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21506 ELSE
21507 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21508 END IF;
21509 -- Bug 4915938 - End of Changes
21510 -- Bug 8978040 : RGOOTY
21511 --Commented IF condition by bkatraga for bug 13693187
21512 --IF l_PROSPECTIVE_REBOOK_YN = 'Y' THEN
21513 l_rents_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21514 --END IF;
21515 ELSIF (l_rl_rec.rule_information7 IS NULL OR
21516 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
21517 (l_rl_rec.rule_information8 IS NULL OR
21518 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
21519 j := j + 1;
21520 idx := idx + 1;
21521 l_rents_tbl(j).level_index_number := idx;
21522 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21523 l_rents_tbl(j).description := l_strm_name;
21524 l_rents_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
21525 l_rents_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
21526 l_rents_tbl(j).period := l_rl_rec.object1_id1;
21527 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21528 l_rents_tbl(j).kle_asset_id := l_line_rec.id;
21529 l_rents_tbl(j).days_in_month := l_days_in_month_code;
21530 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
21531 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
21532 IF l_line_rec.capitalize_down_payment_yn = 'N'
21533 THEN
21534 --Added by bkatraga for bug 15942693
21535 IF(l_line_rec.capital_reduction IS NULL) THEN
21536 l_down_payment_amt := l_line_rec.oec * l_line_rec.capital_reduction_percent * 0.01;
21537 l_rents_tbl(j).down_payment_amount := okl_accounting_util.round_amount (p_amount => l_down_payment_amt, p_currency_code => l_hdr_rec.currency_code);
21538 ELSE
21539 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
21540 END IF;
21541 --end bkatraga for bug 15942693
21542 END IF;
21543
21544 --sechawla 14-Jul-09 PRB ESG enhancements : set orig_contract_line_id on Rent
21545 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21546 l_rents_tbl(j).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21547 --end if;
21548
21549 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
21550 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
21551 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21552 END If;
21553 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21554 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21555 ELSE
21556 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21557 END IF;
21558 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
21559 --sechawla 11-sep-09 8798556
21560 --l_rents_tbl(j).date_start := l_hdr_rec.start_date;
21561 l_rents_tbl(j).date_start := l_line_rec.start_date;
21562 ELSE
21563 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
21564 END IF;
21565 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
21566 END IF;
21567 END LOOP;
21568 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21569 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21570 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21571 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21572 END IF;
21573 -- Code for Estimated Property Tax Starts Here
21574 ELSIF( UPPER(TRIM(l_strm_name)) = 'ESTIMATED_PROPERTY_TAX' ) THEN
21575 FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
21576 /*
21577 IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
21578 lv_diff_date = 'N' AND
21579 idx = 0 THEN
21580 k := k + 1;
21581 idx := idx + 1;
21582 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
21583 l_csm_periodic_expenses_tbl(k).amount := 0;
21584 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
21585 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
21586 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
21587 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
21588 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
21589
21590 --sechawla 15-JUL-09 : PRB ESG Enhancements : assigne orig_contract_line_id
21591 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21592 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21593 --end if;
21594
21595 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21596 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21597 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
21598 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
21599 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
21600 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
21601
21602 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
21603 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21604 END If;
21605 lv_diff_date := 'Y';
21606
21607 -- Added by kthiruva on 29-Dec-2005.
21608 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
21609 -- Bug 4915938 - Start of Changes
21610 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21611 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21612 ELSE
21613 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21614 END IF;
21615 -- Bug 4915938 - End of Changes
21616 END IF;
21617 */
21618
21619 IF (l_rl_rec.rule_information7 IS NOT NULL OR
21620 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
21621 (l_rl_rec.rule_information8 IS NOT NULL OR
21622 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
21623 k := k + 1;
21624 idx := idx + 1;
21625 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
21626 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
21627 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
21628 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
21629 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
21630 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21631 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21632 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
21633 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
21634
21635 --sechawla 15-Jul-09 PRB ESG enhancements : set orig_contract_line_id on Rent
21636 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21637 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21638 --end if;
21639
21640 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
21641 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
21642 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
21643 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
21644
21645 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
21646 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21647 END If;
21648
21649 -- Added by kthiruva on 29-Dec-2005.
21650 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
21651 -- Bug 4915938 - Start of Changes
21652 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21653 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21654 ELSE
21655 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21656 END IF;
21657 -- Bug 4915938 - End of Changes
21658
21659 ELSIF (l_rl_rec.rule_information7 IS NULL OR
21660 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
21661 (l_rl_rec.rule_information8 IS NULL OR
21662 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
21663 k := k + 1;
21664 idx := idx + 1;
21665 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
21666 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21667 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
21668 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
21669 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
21670 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
21671 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
21672
21673 --sechawla 15-JUL-09 : PRB ESG Enhancements : assigne orig_contract_line_id
21674 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21675 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21676 --end if;
21677
21678 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21679 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
21680 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
21681 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
21682 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
21683
21684 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
21685 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21686 END If;
21687 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21688 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21689 ELSE
21690 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21691 END IF;
21692 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
21693 --sechawla 11-sep-09 8798556
21694 --l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
21695 l_csm_periodic_expenses_tbl(k).date_start := l_line_rec.start_date;
21696
21697 ELSE
21698 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
21699 END IF;
21700 END IF;
21701 END LOOP;
21702 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21703 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21704 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21705 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21706 END IF;
21707
21708 -- Code for Estimated Property Tax Ends Here
21709 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
21710 (UPPER(l_strm_name_rec.name) = 'FEE') AND
21711 (l_strm_name_rec.capitalize_yn = 'N') ) OR
21712 ((l_strm_name_rec.periodic_yn = 'Y' ) AND (UPPER(l_strm_name_rec.name) <> 'FEE'))) Then
21713 FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
21714 -- Start of Bug#3401024 modification BAKUCHIB
21715 /*
21716 IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
21717 lv_diff_date = 'N' AND
21718 idx = 0 THEN
21719 k := k + 1;
21720 idx := idx + 1;
21721 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
21722 l_csm_periodic_expenses_tbl(k).amount := 0;
21723 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
21724 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
21725 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
21726 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
21727 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
21728
21729 --sechawla 15-JUL-09 : PRB ESG Enhancements : assigne orig_contract_line_id
21730 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21731 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21732 --end if;
21733
21734 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21735 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21736 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
21737 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
21738
21739 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
21740 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21741 END If;
21742 lv_diff_date := 'Y';
21743
21744 -- Added by kthiruva on 29-Dec-2005.
21745 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
21746 -- Bug 4915938 - Start of Changes
21747 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21748 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21749 ELSE
21750 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21751 END IF;
21752 -- Bug 4915938 - End of Changes
21753
21754 END IF;
21755 */
21756 -- End of Bug#3401024 modification BAKUCHIB
21757 -- Start of Bug#2757289 modification
21758 IF (l_rl_rec.rule_information7 IS NOT NULL OR
21759 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
21760 (l_rl_rec.rule_information8 IS NOT NULL OR
21761 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
21762 k := k + 1;
21763 idx := idx + 1;
21764 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
21765 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
21766 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
21767 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
21768 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
21769 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21770 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21771 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
21772 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
21773
21774 --sechawla 15-JUL-09 : PRB ESG Enhancements : assigne orig_contract_line_id
21775 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21776 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21777 --end if;
21778
21779 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
21780 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
21781
21782 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
21783 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21784 END If;
21785 -- End of Bug#2757289 modification
21786
21787 -- Added by kthiruva on 29-Dec-2005.
21788 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
21789 -- Bug 4915938 - Start of Changes
21790 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21791 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21792 ELSE
21793 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21794 END IF;
21795 -- Bug 4915938 - End of Changes
21796
21797 ELSIF (l_rl_rec.rule_information7 IS NULL OR
21798 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
21799 (l_rl_rec.rule_information8 IS NULL OR
21800 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
21801 k := k + 1;
21802 idx := idx + 1;
21803 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
21804 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
21805 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
21806 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
21807 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
21808 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
21809 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
21810
21811 --sechawla 15-jul-09 PRB ESg enhancements : assign orig_contract_line_id
21812 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21813 l_csm_periodic_expenses_tbl(k).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21814 --end if;
21815
21816 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21817 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
21818 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
21819
21820 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
21821 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
21822 END If;
21823 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
21824 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
21825 ELSE
21826 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
21827 END IF;
21828 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
21829 --sechawla 11-sep-09 8798556
21830 --l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
21831 l_csm_periodic_expenses_tbl(k).date_start := l_line_rec.start_date;
21832
21833 ELSE
21834 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
21835 END IF;
21836 END IF;
21837 END LOOP;
21838 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21839 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21840 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21841 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21842 END IF;
21843 ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' ) AND
21844 (UPPER(TRIM(l_strm_name)) <> 'DOWN_PAYMENT') ) THEN
21845 FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
21846 l := l + 1;
21847 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
21848 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
21849 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
21850 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
21851 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
21852 ELSE
21853 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
21854 END IF;
21855 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
21856
21857 --sechawla 15-Jul-09 : PRB ESg enhancements : assign orig_contract_line_id
21858 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then
21859 l_csm_one_off_fee_tbl(l).orig_contract_line_id := l_line_rec.orig_contract_line_id;
21860 --end if;
21861
21862
21863 END LOOP;
21864 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21865 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21866 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21867 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21868 END IF;
21869 END IF;
21870 END LOOP;
21871 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21872 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21873 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21874 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
21875 END IF;
21876 END LOOP;
21877 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
21878 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21879 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
21880 RAISE OKL_API.G_EXCEPTION_ERROR;
21881 END IF;
21882 --Added for Debugging
21883 write_to_log('Prior to the call to extract_fee_lines');
21884 -- g_rep_req_yn := 'N'; --sechawla for bug 9001267
21885 -- Extract Fee lines
21886 extract_fee_lines( p_api_version => p_api_version,
21887 p_chr_id => TO_NUMBER(p_chr_id),
21888 p_deal_type => l_deal_type,
21889 p_init_msg_list => p_init_msg_list,
21890 x_return_status => x_return_status,
21891 x_msg_count => x_msg_count,
21892 x_msg_data => x_msg_data,
21893 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
21894 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
21895 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
21896 --Added for Debugging
21897 write_to_log('After the call to extract_fee_lines, the return status is :'|| x_return_status);
21898 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
21899 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21900 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
21901 RAISE OKL_API.G_EXCEPTION_ERROR;
21902 END IF;
21903 -- Check for mandatory stream for pricing eng
21904 check_for_mandatory_streams(
21905 p_api_version => p_api_version,
21906 p_init_msg_list => p_init_msg_list,
21907 x_msg_count => x_msg_count,
21908 x_msg_data => x_msg_data,
21909 x_return_status => x_return_status,
21910 p_chr_id => p_chr_id,
21911 p_deal_type => l_deal_type,
21912 p_stream_types_tbl => l_csm_stream_types_tbl,
21913 x_stream_types_tbl => l_req_stream_types_tbl);
21914 --Added for Debugging
21915 write_to_log('After the call to check_for_mandatory_streams, the return status is :'||x_return_status);
21916 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21917 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21918 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21919 RAISE OKL_API.G_EXCEPTION_ERROR;
21920 END IF;
21921 -- Requesting for yields
21922 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
21923 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21924 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21925 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21926 RAISE OKL_API.G_EXCEPTION_ERROR;
21927 END IF;
21928 -- Extract Subsidy line
21929 extract_subsidized_lines(p_api_version => p_api_version,
21930 p_init_msg_list => p_init_msg_list,
21931 x_return_status => x_return_status,
21932 x_msg_count => x_msg_count,
21933 x_msg_data => x_msg_data,
21934 p_chr_id => TO_NUMBER(p_chr_id),
21935 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
21936 --Added by kthiruva for debugging
21937 write_to_log('After the call to extract_subsidized_lines, the return status is :'||x_return_status);
21938
21939 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21940 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21941 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
21942 RAISE OKL_API.G_EXCEPTION_ERROR;
21943 END IF;
21944 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
21945 okl_api.set_message(p_app_name => G_APP_NAME,
21946 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
21947 RAISE OKL_API.G_EXCEPTION_ERROR;
21948 END IF;
21949
21950 g_rep_req_yn := 'N'; --Added by sechawla for bug 9001267
21951
21952 x_csm_lease_header := l_csm_lease_header;
21953 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
21954 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
21955 x_csm_yields_tbl := l_csm_yields_tbl;
21956 x_req_stream_types_tbl := l_req_stream_types_tbl;
21957 x_csm_line_details_tbl := l_csm_line_details_tbl;
21958 x_rents_tbl := l_rents_tbl;
21959 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
21960 x_msg_data => x_msg_data);
21961 EXCEPTION
21962 WHEN OKL_API.G_EXCEPTION_ERROR then
21963 IF l_hdr_csr_lease%ISOPEN THEN
21964 CLOSE l_hdr_csr_lease;
21965 END IF;
21966 IF l_line_rec_csr_lease%ISOPEN THEN
21967 CLOSE l_line_rec_csr_lease;
21968 END IF;
21969 IF l_hdrrl_csr_lease%ISOPEN THEN
21970 CLOSE l_hdrrl_csr_lease;
21971 END IF;
21972 IF l_financed_type_csr%ISOPEN THEN
21973 CLOSE l_financed_type_csr;
21974 END IF;
21975 IF ib_csr_lease%ISOPEN THEN
21976 CLOSE ib_csr_lease;
21977 END IF;
21978 IF get_org_id%ISOPEN THEN
21979 CLOSE get_org_id;
21980 END IF;
21981 IF l_strmid_csr_lease%ISOPEN THEN
21982 CLOSE l_strmid_csr_lease;
21983 END IF;
21984 IF strm_name_csr_lease%ISOPEN THEN
21985 CLOSE strm_name_csr_lease;
21986 END IF;
21987 IF l_slh_csr_lease%ISOPEN THEN
21988 CLOSE l_slh_csr_lease;
21989 END IF;
21990 IF l_sll_csr_lease%ISOPEN THEN
21991 CLOSE l_sll_csr_lease;
21992 END IF;
21993 IF get_dis_amt_csr_lease%ISOPEN THEN
21994 CLOSE get_dis_amt_csr_lease;
21995 END IF;
21996 IF l_txtrans_csr_lease%ISOPEN THEN
21997 CLOSE l_txtrans_csr_lease;
21998 END IF;
21999 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
22000 l_api_name,
22001 G_PKG_NAME,
22002 'OKL_API.G_RET_STS_ERROR',
22003 x_msg_count,
22004 x_msg_data,
22005 '_PVT');
22006 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
22007 IF l_hdr_csr_lease%ISOPEN THEN
22008 CLOSE l_hdr_csr_lease;
22009 END IF;
22010 IF l_line_rec_csr_lease%ISOPEN THEN
22011 CLOSE l_line_rec_csr_lease;
22012 END IF;
22013 IF l_hdrrl_csr_lease%ISOPEN THEN
22014 CLOSE l_hdrrl_csr_lease;
22015 END IF;
22016 IF l_financed_type_csr%ISOPEN THEN
22017 CLOSE l_financed_type_csr;
22018 END IF;
22019 IF ib_csr_lease%ISOPEN THEN
22020 CLOSE ib_csr_lease;
22021 END IF;
22022 IF get_org_id%ISOPEN THEN
22023 CLOSE get_org_id;
22024 END IF;
22025 IF l_strmid_csr_lease%ISOPEN THEN
22026 CLOSE l_strmid_csr_lease;
22027 END IF;
22028 IF strm_name_csr_lease%ISOPEN THEN
22029 CLOSE strm_name_csr_lease;
22030 END IF;
22031 IF l_slh_csr_lease%ISOPEN THEN
22032 CLOSE l_slh_csr_lease;
22033 END IF;
22034 IF l_sll_csr_lease%ISOPEN THEN
22035 CLOSE l_sll_csr_lease;
22036 END IF;
22037 IF get_dis_amt_csr_lease%ISOPEN THEN
22038 CLOSE get_dis_amt_csr_lease;
22039 END IF;
22040 IF l_txtrans_csr_lease%ISOPEN THEN
22041 CLOSE l_txtrans_csr_lease;
22042 END IF;
22043 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
22044 l_api_name,
22045 G_PKG_NAME,
22046 'OKL_API.G_RET_STS_UNEXP_ERROR',
22047 x_msg_count,
22048 x_msg_data,
22049 '_PVT');
22050 WHEN OTHERS then
22051 IF l_hdr_csr_lease%ISOPEN THEN
22052 CLOSE l_hdr_csr_lease;
22053 END IF;
22054 IF l_line_rec_csr_lease%ISOPEN THEN
22055 CLOSE l_line_rec_csr_lease;
22056 END IF;
22057 IF l_hdrrl_csr_lease%ISOPEN THEN
22058 CLOSE l_hdrrl_csr_lease;
22059 END IF;
22060 IF l_financed_type_csr%ISOPEN THEN
22061 CLOSE l_financed_type_csr;
22062 END IF;
22063 IF ib_csr_lease%ISOPEN THEN
22064 CLOSE ib_csr_lease;
22065 END IF;
22066 IF get_org_id%ISOPEN THEN
22067 CLOSE get_org_id;
22068 END IF;
22069 IF l_strmid_csr_lease%ISOPEN THEN
22070 CLOSE l_strmid_csr_lease;
22071 END IF;
22072 IF strm_name_csr_lease%ISOPEN THEN
22073 CLOSE strm_name_csr_lease;
22074 END IF;
22075 IF l_slh_csr_lease%ISOPEN THEN
22076 CLOSE l_slh_csr_lease;
22077 END IF;
22078 IF l_sll_csr_lease%ISOPEN THEN
22079 CLOSE l_sll_csr_lease;
22080 END IF;
22081 IF get_dis_amt_csr_lease%ISOPEN THEN
22082 CLOSE get_dis_amt_csr_lease;
22083 END IF;
22084 IF l_txtrans_csr_lease%ISOPEN THEN
22085 CLOSE l_txtrans_csr_lease;
22086 END IF;
22087 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
22088 l_api_name,
22089 G_PKG_NAME,
22090 'OTHERS',
22091 x_msg_count,
22092 x_msg_data,
22093 '_PVT');
22094 END extract_params_lease_deal;
22095 -- End modification 11i10 bakuchib
22096 Procedure extract_params_lease(
22097 p_api_version IN NUMBER,
22098 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
22099 p_chr_id IN VARCHAR2,
22100 x_return_status OUT NOCOPY VARCHAR2,
22101 x_msg_count OUT NOCOPY NUMBER,
22102 x_msg_data OUT NOCOPY VARCHAR2,
22103 x_csm_lease_header OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
22104 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
22105 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
22106 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
22107 x_req_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
22108 x_csm_line_details_tbl OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
22109 x_rents_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
22110 p_orp_code IN VARCHAR2 DEFAULT NULL ) AS
22111
22112 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LEASE';
22113 l_api_version CONSTANT NUMBER := 1;
22114 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
22115
22116 Begin
22117
22118 print( l_api_name, 'begin');
22119
22120 extract_params_lease_deal(
22121 l_api_version,
22122 p_init_msg_list,
22123 p_chr_id,
22124 NULL,
22125 x_return_status,
22126 x_msg_count,
22127 x_msg_data,
22128 x_csm_lease_header,
22129 x_csm_one_off_fee_tbl,
22130 x_csm_periodic_expenses_tbl,
22131 x_csm_yields_tbl,
22132 x_req_stream_types_tbl,
22133 x_csm_line_details_tbl,
22134 x_rents_tbl,
22135 p_orp_code );
22136
22137 print( l_api_name, 'end', x_return_status);
22138 End extract_params_lease;
22139
22140 Procedure generate_reporting_streams(
22141 p_api_version IN NUMBER,
22142 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
22143 p_chr_id IN VARCHAR2,
22144 p_report_deal_type IN VARCHAR2,
22145 p_generation_context IN VARCHAR2,
22146 p_skip_prc_engine IN VARCHAR2,
22147 x_return_status OUT NOCOPY VARCHAR2,
22148 x_msg_count OUT NOCOPY NUMBER,
22149 x_msg_data OUT NOCOPY VARCHAR2,
22150 x_request_id IN OUT NOCOPY NUMBER,
22151 x_trans_status OUT NOCOPY VARCHAR2,
22152 p_orp_code IN VARCHAR2) AS
22153
22154 l_api_name CONSTANT VARCHAR2(30) := 'GEN_REPORT_STREAMS';
22155 l_api_version CONSTANT NUMBER := 1;
22156 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
22157 l_fnd_rec fnd_lookups_csr%ROWTYPE;
22158
22159 l_isStrmGenAllowed BOOLEAN := TRUE;
22160 l_passStatus VARCHAR2(256);
22161 l_failStatus VARCHAR2(256);
22162
22163 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
22164 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
22165
22166 l_lines_rec l_line_rec_csr%ROWTYPE;
22167 l_transaction_type VARCHAR2(256):= 'Miscellaneous';--'Generate Yields';
22168 l_request_id NUMBER;
22169
22170 cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
22171 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
22172 chrId NUMBER,
22173 cleId NUMBER ) IS
22174 select crl.id
22175 from OKC_RULE_GROUPS_B crg,
22176 OKC_RULES_B crl
22177 where crl.rgp_id = crg.id
22178 and crg.RGD_CODE = rgcode
22179 and crl.RULE_INFORMATION_CATEGORY = rlcat
22180 and crl.RULE_INFORMATION2 is null
22181 and crg.dnz_chr_id = chrId
22182 and crg.cle_id = cleId;
22183
22184 l_nullrl_rec l_nullrl_csr%ROWTYPE;
22185
22186 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
22187
22188 l_Trx_Type_rec Transaction_Type_csr%ROWTYPE;
22189 l_hdr_rec l_hdr_csr%ROWTYPE;
22190
22191 x_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
22192 x_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
22193 x_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22194 x_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
22195 x_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
22196 x_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
22197 x_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
22198 x_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22199
22200 x_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
22201 x_csm_lines_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
22202 x_csm_loan_lines_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
22203 x_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
22204
22205 BEGIN
22206
22207
22208 print( l_api_name, 'begin');
22209
22210 x_return_status := OKL_API.G_RET_STS_SUCCESS;
22211
22212 x_return_status := OKL_API.START_ACTIVITY(
22213 p_api_name => l_api_name,
22214 p_pkg_name => g_pkg_name,
22215 p_init_msg_list => p_init_msg_list,
22216 l_api_version => l_api_version,
22217 p_api_version => p_api_version,
22218 p_api_type => G_API_TYPE,
22219 x_return_status => x_return_status);
22220
22221 -- check if activity started successfully
22222 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
22223 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22224 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
22225 raise OKL_API.G_EXCEPTION_ERROR;
22226 End If;
22227
22228 print( l_api_name, 'Reporting Deal Type='||p_report_deal_type);
22229
22230 IF (INSTR( p_report_deal_type, 'LEASE') > 0) THEN
22231
22232 g_rep_req_yn:= 'Y';
22233 extract_params_lease_deal(
22234 p_api_version,
22235 p_init_msg_list,
22236 p_chr_id,
22237 p_report_deal_type,
22238 x_return_status,
22239 x_msg_count,
22240 x_msg_data,
22241 x_csm_lease_header,
22242 x_csm_one_off_fee_tbl,
22243 x_csm_periodic_expenses_tbl,
22244 x_csm_yields_tbl,
22245 x_req_stream_types_tbl,
22246 x_csm_line_details_tbl,
22247 x_rents_tbl,
22248 p_orp_code);
22249
22250 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then -- Modified 06/14/2002. dedey
22251 okl_api.set_message(
22252 p_app_name => G_APP_NAME,
22253 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
22254 raise OKL_API.G_EXCEPTION_ERROR;
22255 End If;
22256
22257 x_csm_lease_header.purpose_code := 'REPORT';
22258 x_csm_lease_header.sif_id := x_request_id;
22259
22260 okl_create_streams_pub.create_streams_lease_book(
22261 p_api_version,
22262 p_init_msg_list,
22263 p_skip_prc_engine,
22264 x_csm_lease_header,
22265 x_csm_one_off_fee_tbl,
22266 x_csm_periodic_expenses_tbl,
22267 x_csm_yields_tbl,
22268 x_req_stream_types_tbl,
22269 x_csm_line_details_tbl,
22270 x_rents_tbl,
22271 x_request_id,
22272 x_trans_status,
22273 x_return_status,
22274 x_msg_count,
22275 x_msg_data);
22276 -- rabhupat BUG#4259056 start
22277 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
22278 -- rabhupat BUG#4259056 end
22279 okl_api.set_message(
22280 p_app_name => G_APP_NAME,
22281 p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FLD');
22282 raise OKL_API.G_EXCEPTION_ERROR;
22283 End If;
22284
22285 ELSIF (INSTR(p_report_deal_type, 'LOAN') > 0) THEN
22286 -- Reporting loan streams were not getting generated- hkpatel- Bug 4734085
22287 g_rep_req_yn:= 'Y';
22288
22289
22290 extract_params_loan(
22291 p_api_version,
22292 p_init_msg_list,
22293 p_chr_id,
22294 x_return_status,
22295 x_msg_count,
22296 x_msg_data,
22297 x_csm_loan_header,
22298 x_csm_loan_lines_tbl,
22299 x_csm_loan_levels_tbl,
22300 x_csm_one_off_fee_tbl,
22301 x_csm_periodic_expenses_tbl,
22302 x_csm_yields_tbl,
22303 x_csm_stream_types_tbl,
22304 p_orp_code);
22305
22306 --Added by kthiruva for Debugging
22307 write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
22308 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
22309 okl_api.set_message(
22310 p_app_name => G_APP_NAME,
22311 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
22312 raise OKL_API.G_EXCEPTION_ERROR;
22313 End If;
22314
22315 x_csm_loan_header.purpose_code := 'REPORT';
22316 x_csm_loan_header.sif_id := x_request_id;
22317
22318 okl_create_streams_pub.create_streams_loan_book(
22319 p_api_version => p_api_version,
22320 p_init_msg_list => p_init_msg_list,
22321 p_skip_prc_engine => p_skip_prc_engine,
22322 p_csm_loan_header => x_csm_loan_header,
22323 p_csm_loan_lines_tbl => x_csm_loan_lines_tbl,
22324 p_csm_loan_levels_tbl => x_csm_loan_levels_tbl,
22325 p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl,
22326 p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl,
22327 p_csm_yields_tbl => x_csm_yields_tbl,
22328 p_csm_stream_types_tbl => x_csm_stream_types_tbl,
22329 x_trans_id => x_request_id,
22330 x_trans_status => x_trans_status,
22331 x_return_status => x_return_status,
22332 x_msg_count => x_msg_count,
22333 x_msg_data => x_msg_data);
22334
22335 -- rabhupat BUG#4259056 start
22336 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
22337 -- rabhupat BUG#4259056 end
22338 okl_api.set_message(
22339 p_app_name => G_APP_NAME,
22340 p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FLD');
22341 raise OKL_API.G_EXCEPTION_ERROR;
22342 End If;
22343 ELSE
22344 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22345 END IF;
22346
22347
22348 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
22349 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22350 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
22351 raise OKL_API.G_EXCEPTION_ERROR;
22352 End If;
22353
22354 print( l_api_name, 'end', x_return_status);
22355 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
22356
22357 Exception
22358 when OKL_API.G_EXCEPTION_ERROR then
22359 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
22360 p_api_name => l_api_name,
22361 p_pkg_name => g_pkg_name,
22362 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
22363 x_msg_count => x_msg_count,
22364 x_msg_data => x_msg_data,
22365 p_api_type => g_api_type);
22366
22367 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
22368 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
22369 p_api_name => l_api_name,
22370 p_pkg_name => g_pkg_name,
22371 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
22372 x_msg_count => x_msg_count,
22373 x_msg_data => x_msg_data,
22374 p_api_type => g_api_type);
22375
22376 when OTHERS then
22377 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
22378 p_api_name => l_api_name,
22379 p_pkg_name => g_pkg_name,
22380 p_exc_name => 'OTHERS',
22381 x_msg_count => x_msg_count,
22382 x_msg_data => x_msg_data,
22383 p_api_type => g_api_type);
22384
22385 END generate_reporting_streams;
22386
22387 Procedure generate_streams(
22388 p_api_version IN NUMBER,
22389 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
22390 p_chr_id IN VARCHAR2,
22391 p_generation_context IN VARCHAR2,
22392 p_skip_prc_engine IN VARCHAR2,
22393 x_return_status OUT NOCOPY VARCHAR2,
22394 x_msg_count OUT NOCOPY NUMBER,
22395 x_msg_data OUT NOCOPY VARCHAR2,
22396 x_request_id OUT NOCOPY NUMBER,
22397 x_trans_status OUT NOCOPY VARCHAR2) AS
22398
22399 l_api_name CONSTANT VARCHAR2(30) := 'MAP_AND_GEN_STREAMS';
22400 l_api_version CONSTANT NUMBER := 1;
22401 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
22402 l_fnd_rec fnd_lookups_csr%ROWTYPE;
22403 lv_stream VARCHAR2(200) := null;
22404
22405 l_isStrmGenAllowed BOOLEAN := TRUE;
22406 l_passStatus VARCHAR2(256);
22407 l_failStatus VARCHAR2(256);
22408
22409 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
22410 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
22411
22412 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
22413 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
22414
22415 i NUMBER;
22416 l_lines_rec l_line_rec_csr%ROWTYPE;
22417 l_transaction_type VARCHAR2(256):= 'Miscellaneous';--'Generate Yields';
22418
22419 cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
22420 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
22421 chrId NUMBER ) IS
22422 select crl.id
22423 from OKC_RULE_GROUPS_B crg,
22424 OKC_RULES_B crl
22425 where crl.rgp_id = crg.id
22426 and crg.RGD_CODE = rgcode
22427 and crl.RULE_INFORMATION_CATEGORY = rlcat
22428 and nvl(crl.RULE_INFORMATION1, 'XXX' ) = 'XXX'
22429 and nvl(crl.RULE_INFORMATION2, 'XXX' ) = 'XXX'
22430 and nvl(crl.RULE_INFORMATION3, 'XXX' ) = 'XXX'
22431 and nvl(crl.RULE_INFORMATION6, 'XXX' ) = 'XXX'
22432 and crg.dnz_chr_id = chrId;
22433
22434
22435
22436 l_nullrl_rec l_nullrl_csr%ROWTYPE;
22437
22438 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
22439
22440 l_Trx_Type_rec Transaction_Type_csr%ROWTYPE;
22441 l_hdr_rec l_hdr_csr%ROWTYPE;
22442 l_strms_orig_rec strms_csr%ROWTYPE;
22443 l_strms_rep_rec strms_csr%ROWTYPE;
22444
22445 x_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
22446 x_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
22447 x_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22448 x_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
22449 x_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
22450 x_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
22451 x_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
22452 x_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22453
22454 x_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
22455 x_csm_lines_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
22456 x_csm_loan_lines_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
22457 x_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
22458
22459 p_pdtv_rec pdtv_rec_type;
22460 x_pdt_parameter_rec pdt_param_rec_type;
22461 x_no_data_found BOOLEAN;
22462
22463 BEGIN
22464 --Added by kthiruva for Debugging
22465 write_to_log('Inside the call to generate_streams');
22466
22467 x_return_status := OKL_API.G_RET_STS_SUCCESS;
22468 x_return_status := OKL_API.START_ACTIVITY(
22469 p_api_name => l_api_name,
22470 p_pkg_name => g_pkg_name,
22471 p_init_msg_list => p_init_msg_list,
22472 l_api_version => l_api_version,
22473 p_api_version => p_api_version,
22474 p_api_type => G_API_TYPE,
22475 x_return_status => x_return_status);
22476 -- check if activity started successfully
22477 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
22478 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22479 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
22480 raise OKL_API.G_EXCEPTION_ERROR;
22481 End If;
22482
22483 -- 2. type of contract lease/loan
22484 OPEN l_hdr_csr(p_chr_id);
22485 FETCH l_hdr_csr into l_hdr_rec;
22486 IF l_hdr_csr%NOTFOUND THEN
22487 CLOSE l_hdr_csr;
22488 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22489 END IF;
22490 CLOSE l_hdr_csr;
22491
22492 IF (l_hdr_rec.template_yn = 'Y') Then
22493 x_return_status := OKL_API.G_RET_STS_ERROR;
22494 OKL_API.set_message(
22495 p_app_name => G_APP_NAME,
22496 p_msg_name => 'OKL_LLA_NO_STRM_TMPLTC');
22497 return;
22498 END IF;
22499 okl_contract_status_pub.get_contract_status(l_api_version,
22500 p_init_msg_list,
22501 x_return_status,
22502 x_msg_count,
22503 x_msg_data,
22504 l_isStrmGenAllowed,
22505 l_passStatus,
22506 l_failStatus,
22507 OKL_CONTRACT_STATUS_PUB.G_K_STRMGEN,
22508 p_chr_id);
22509 If ( NOT (l_isStrmGenAllowed )) then
22510 x_return_status := OKL_API.G_RET_STS_ERROR;
22511 okl_api.set_message(
22512 p_app_name => G_APP_NAME,
22513 p_msg_name => OKL_CONTRACT_STATUS_PUB.G_CANNOT_GENSTRMS);
22514 return;
22515 ElsIf (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
22516 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22517 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
22518 raise OKL_API.G_EXCEPTION_ERROR;
22519 End If;
22520
22521 print( l_api_name, 'Contract Status Check', x_return_status);
22522 FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id )
22523 LOOP
22524
22525 l_rulv_rec.id := l_nullrl_rec.id;
22526
22527 OKL_RULE_PUB.delete_rule(
22528 p_api_version => l_api_version,
22529 p_init_msg_list => p_init_msg_list,
22530 x_return_status => x_return_status,
22531 x_msg_count => x_msg_count,
22532 x_msg_data => x_msg_data,
22533 p_rulv_rec => l_rulv_rec );
22534
22535
22536 -- check if activity started successfully
22537 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
22538 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
22539 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
22540 raise OKC_API.G_EXCEPTION_ERROR;
22541 End If;
22542
22543 END LOOP;
22544
22545 delete_working_streams(
22546 p_api_version => p_api_version,
22547 p_init_msg_list => p_init_msg_list,
22548 x_return_status => x_return_status,
22549 x_msg_count => x_msg_count,
22550 x_msg_data => x_msg_data,
22551 p_chr_id => p_chr_id);
22552
22553 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
22554 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22555 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
22556 raise OKL_API.G_EXCEPTION_ERROR;
22557 END IF;
22558
22559 -- Reporting stream generation call will be made first bug 8814790.
22560 -- Start
22561 If ( l_hdr_rec.report_pdt_id <> -1 ) Then
22562
22563 --Added for Debugging
22564 write_to_log('Reporting Product is present');
22565 p_pdtv_rec.id := l_hdr_rec.report_pdt_id;
22566
22567 OKL_SETUPPRODUCTS_PVT.Getpdt_parameters(
22568 p_api_version => p_api_version,
22569 p_init_msg_list => p_init_msg_list,
22570 x_return_status => x_return_status,
22571 x_msg_count => x_msg_count,
22572 x_msg_data => x_msg_data,
22573 p_pdtv_rec => p_pdtv_rec,
22574 x_no_data_found => x_no_data_found,
22575 p_pdt_parameter_rec => x_pdt_parameter_rec);
22576 --Added by kthiruva for Debugging
22577 write_to_log('After the call to OKL_SETUPPRODUCTS_PVT.Getpdt_parameters, return status is :'||x_return_status);
22578
22579 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
22580 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22581 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
22582 RAISE OKL_API.G_EXCEPTION_ERROR;
22583 END IF;
22584
22585 --Added by kthiruva for Debugging
22586 write_to_log('Prior to the call to generate_reporting_streams');
22587
22588 generate_reporting_streams(
22589 p_api_version => p_api_version,
22590 p_init_msg_list => p_init_msg_list,
22591 p_chr_id => p_chr_id,
22592 p_report_deal_type => x_pdt_parameter_rec.deal_type,
22593 p_generation_context => p_generation_context,
22594 p_skip_prc_engine => p_skip_prc_engine,
22595 x_return_status => x_return_status,
22596 x_msg_count => x_msg_count,
22597 x_msg_data => x_msg_data,
22598 x_request_id => x_request_id,
22599 x_trans_status => x_trans_status,
22600 p_orp_code => NULL );
22601
22602 --Added by kthiruva for Debugging
22603 write_to_log('After the call to generate_reporting_streams, return status is :'||x_return_status);
22604 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
22605
22606 okl_api.set_message(
22607 p_app_name => G_APP_NAME,
22608 p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FAILED');
22609 raise OKL_API.G_EXCEPTION_ERROR;
22610
22611 End If;
22612
22613
22614 End If;
22615 -- Reporting stream generation call will be made first bug 8814790.
22616 -- End
22617
22618
22619 IF (INSTR( l_hdr_rec.deal_type, 'LEASE') > 0) THEN
22620 --Added by kthiruva for Debugging
22621 write_to_log('Deal Type is Lease');
22622 write_to_log('Prior to the call to extract_params_lease');
22623
22624 extract_params_lease(
22625 p_api_version,
22626 p_init_msg_list,
22627 p_chr_id,
22628 x_return_status,
22629 x_msg_count,
22630 x_msg_data,
22631 x_csm_lease_header,
22632 x_csm_one_off_fee_tbl,
22633 x_csm_periodic_expenses_tbl,
22634 x_csm_yields_tbl,
22635 x_req_stream_types_tbl,
22636 x_csm_line_details_tbl,
22637 x_rents_tbl,
22638 NULL ); -- p_orp_code
22639
22640 --Added by kthiruva for Debugging
22641 write_to_log('After the call to extract_params_lease, the return status is :'||x_return_status);
22642
22643 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then -- Modified 06/14/2002. dedey
22644 okl_api.set_message(
22645 p_app_name => G_APP_NAME,
22646 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
22647 raise OKL_API.G_EXCEPTION_ERROR;
22648 End If;
22649
22650 -- FOR i in 1..x_req_stream_types_tbl.COUNT
22651 -- LOOP
22652 -- print( l_api_name, ' req strm ' || to_char(x_req_stream_types_tbl(i).stream_type_id) ||
22653 -- ' for fee ' || to_char(nvl( x_req_stream_types_tbl(i).kle_fee_id,-1)) );
22654 -- END LOOP;
22655
22656
22657 okl_create_streams_pub.create_streams_lease_book(
22658 p_api_version,
22659 p_init_msg_list,
22660 p_skip_prc_engine,
22661 x_csm_lease_header,
22662 x_csm_one_off_fee_tbl,
22663 x_csm_periodic_expenses_tbl,
22664 x_csm_yields_tbl,
22665 x_req_stream_types_tbl,
22666 x_csm_line_details_tbl,
22667 x_rents_tbl,
22668 x_request_id,
22669 x_trans_status,
22670 x_return_status,
22671 x_msg_count,
22672 x_msg_data);
22673
22674 --Added by kthiruva for Debugging
22675 write_to_log('After the call to create_streams_lease_book, the return status is '||x_return_status);
22676
22677 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
22678 okl_api.set_message(
22679 p_app_name => G_APP_NAME,
22680 p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
22681 raise OKL_API.G_EXCEPTION_ERROR;
22682 End If;
22683
22684 ELSIF (INSTR(l_hdr_rec.deal_type, 'LOAN') > 0) THEN
22685
22686 --Added by kthiruva for Debugging
22687 write_to_log('Deal Type is Loan');
22688 write_to_log('Prior to the call to extract_params_loan');
22689 extract_params_loan(
22690 p_api_version,
22691 p_init_msg_list,
22692 p_chr_id,
22693 x_return_status,
22694 x_msg_count,
22695 x_msg_data,
22696 x_csm_loan_header,
22697 x_csm_loan_lines_tbl,
22698 x_csm_loan_levels_tbl,
22699 x_csm_one_off_fee_tbl,
22700 x_csm_periodic_expenses_tbl,
22701 x_csm_yields_tbl,
22702 x_csm_stream_types_tbl,
22703 NULL ); -- p_orp_code
22704
22705 --Added by kthiruva for Debugging
22706 write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
22707 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
22708 okl_api.set_message(
22709 p_app_name => G_APP_NAME,
22710 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
22711 raise OKL_API.G_EXCEPTION_ERROR;
22712 End If;
22713
22714 okl_create_streams_pub.create_streams_loan_book(
22715 p_api_version => p_api_version,
22716 p_init_msg_list => p_init_msg_list,
22717 p_skip_prc_engine => p_skip_prc_engine,
22718 p_csm_loan_header => x_csm_loan_header,
22719 p_csm_loan_lines_tbl => x_csm_loan_lines_tbl,
22720 p_csm_loan_levels_tbl => x_csm_loan_levels_tbl,
22721 p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl,
22722 p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl,
22723 p_csm_yields_tbl => x_csm_yields_tbl,
22724 p_csm_stream_types_tbl => x_csm_stream_types_tbl,
22725 x_trans_id => x_request_id,
22726 x_trans_status => x_trans_status,
22727 x_return_status => x_return_status,
22728 x_msg_count => x_msg_count,
22729 x_msg_data => x_msg_data);
22730
22731 --Added by kthiruva for Debugging
22732 write_to_log('After the call to create_streams_loan_book, the return status is '||x_return_status);
22733
22734 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
22735 okl_api.set_message(
22736 p_app_name => G_APP_NAME,
22737 p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
22738 raise OKL_API.G_EXCEPTION_ERROR;
22739 End If;
22740 ELSE
22741 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22742 END IF;
22743 -- Reporting stream generation call will be made first Bug 8814790.
22744 -- Start
22745 -- Reporting stream call removed.
22746 -- End
22747 --Reporting stream generation call will be made first Bug 8814790
22748
22749
22750 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
22751 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22752 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
22753 raise OKL_API.G_EXCEPTION_ERROR;
22754 End If;
22755
22756 print( l_api_name, 'end', x_return_status);
22757 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
22758
22759 Exception
22760 when OKL_API.G_EXCEPTION_ERROR then
22761 --srsreeni bug6011651 starts
22762 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
22763 p_api_version => p_api_version,
22764 p_init_msg_list => p_init_msg_list,
22765 x_return_status => x_return_status,
22766 x_msg_count => x_msg_count,
22767 x_msg_data => x_msg_data,
22768 p_khr_id => p_chr_id,
22769 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
22770 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
22771 --srsreeni bug6011651 ends
22772 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
22773 p_api_name => l_api_name,
22774 p_pkg_name => g_pkg_name,
22775 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
22776 x_msg_count => x_msg_count,
22777 x_msg_data => x_msg_data,
22778 p_api_type => g_api_type);
22779
22780 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
22781 --srsreeni bug6011651 starts
22782 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
22783 p_api_version => p_api_version,
22784 p_init_msg_list => p_init_msg_list,
22785 x_return_status => x_return_status,
22786 x_msg_count => x_msg_count,
22787 x_msg_data => x_msg_data,
22788 p_khr_id => p_chr_id,
22789 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
22790 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
22791 --srsreeni bug6011651 ends
22792 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
22793 p_api_name => l_api_name,
22794 p_pkg_name => g_pkg_name,
22795 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
22796 x_msg_count => x_msg_count,
22797 x_msg_data => x_msg_data,
22798 p_api_type => g_api_type);
22799
22800 when OTHERS then
22801 --srsreeni bug6011651 starts
22802 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
22803 p_api_version => p_api_version,
22804 p_init_msg_list => p_init_msg_list,
22805 x_return_status => x_return_status,
22806 x_msg_count => x_msg_count,
22807 x_msg_data => x_msg_data,
22808 p_khr_id => p_chr_id,
22809 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
22810 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
22811 --srsreeni bug6011651 ends
22812 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
22813 p_api_name => l_api_name,
22814 p_pkg_name => g_pkg_name,
22815 p_exc_name => 'OTHERS',
22816 x_msg_count => x_msg_count,
22817 x_msg_data => x_msg_data,
22818 p_api_type => g_api_type);
22819
22820
22821 END generate_streams;
22822
22823
22824 Procedure generate_internal_streams(
22825 p_api_version IN NUMBER,
22826 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
22827 p_chr_id IN NUMBER,
22828 p_line_id IN NUMBER,
22829 x_return_status OUT NOCOPY VARCHAR2,
22830 x_msg_count OUT NOCOPY NUMBER,
22831 x_msg_data OUT NOCOPY VARCHAR2) IS
22832
22833 l_api_name CONSTANT VARCHAR2(30) := 'GEN_STREAMS';
22834 l_api_version CONSTANT NUMBER := 1.0;
22835 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
22836
22837 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
22838 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
22839 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
22840 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
22841
22842 cursor l_rl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
22843 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
22844 chrId NUMBER,
22845 cleId NUMBER ) IS
22846 select crl.object1_id1,
22847 crl.RULE_INFORMATION1,
22848 crl.RULE_INFORMATION2,
22849 crl.RULE_INFORMATION3,
22850 crl.RULE_INFORMATION5,
22851 crl.RULE_INFORMATION6,
22852 crl.RULE_INFORMATION10
22853 from OKC_RULE_GROUPS_B crg,
22854 OKC_RULES_B crl
22855 where crl.rgp_id = crg.id
22856 and crg.RGD_CODE = rgcode
22857 and crl.RULE_INFORMATION_CATEGORY = rlcat
22858 and crg.dnz_chr_id = chrId
22859 and crg.cle_id = cleId
22860 order by crl.RULE_INFORMATION1;
22861
22862 l_rl_rec l_rl_csr%ROWTYPE;
22863 l_rl_rec1 l_rl_csr%ROWTYPE;
22864 number_of_periods NUMBER;
22865 start_date DATE;
22866 amount NUMBER;
22867 i NUMBER;
22868 j NUMBER;
22869 k NUMBER;
22870 temp NUMBER;
22871
22872 cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
22873 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
22874 chrId NUMBER,
22875 cleId NUMBER ) IS
22876 select crl.id
22877 from OKC_RULE_GROUPS_B crg,
22878 OKC_RULES_B crl
22879 where crl.rgp_id = crg.id
22880 and crg.RGD_CODE = rgcode
22881 and crl.RULE_INFORMATION_CATEGORY = rlcat
22882 and nvl(crl.RULE_INFORMATION1, 'XXX' ) = 'XXX'
22883 and nvl(crl.RULE_INFORMATION2, 'XXX' ) = 'XXX'
22884 and nvl(crl.RULE_INFORMATION3, 'XXX' ) = 'XXX'
22885 and nvl(crl.RULE_INFORMATION6, 'XXX' ) = 'XXX'
22886 and crg.dnz_chr_id = chrId
22887 and nvl(crg.cle_id, -1) = cleId;
22888
22889 l_nullrl_rec l_nullrl_csr%ROWTYPE;
22890
22891 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
22892
22893 BEGIN
22894
22895 x_return_status := OKC_API.START_ACTIVITY(
22896 p_api_name => l_api_name,
22897 p_pkg_name => g_pkg_name,
22898 p_init_msg_list => p_init_msg_list,
22899 l_api_version => l_api_version,
22900 p_api_version => p_api_version,
22901 p_api_type => G_API_TYPE,
22902 x_return_status => x_return_status);
22903
22904 -- check if activity started successfully
22905 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
22906 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
22907 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
22908 raise OKC_API.G_EXCEPTION_ERROR;
22909 End If;
22910
22911
22912 FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id, p_line_id )
22913 LOOP
22914
22915 l_rulv_rec.id := l_nullrl_rec.id;
22916
22917 OKL_RULE_PUB.delete_rule(
22918 p_api_version => l_api_version,
22919 p_init_msg_list => p_init_msg_list,
22920 x_return_status => x_return_status,
22921 x_msg_count => x_msg_count,
22922 x_msg_data => x_msg_data,
22923 p_rulv_rec => l_rulv_rec );
22924
22925
22926 -- check if activity started successfully
22927 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
22928 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
22929 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
22930 raise OKC_API.G_EXCEPTION_ERROR;
22931 End If;
22932
22933 END LOOP;
22934
22935 FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id, -1 )
22936 LOOP
22937
22938 l_rulv_rec.id := l_nullrl_rec.id;
22939
22940 OKL_RULE_PUB.delete_rule(
22941 p_api_version => l_api_version,
22942 p_init_msg_list => p_init_msg_list,
22943 x_return_status => x_return_status,
22944 x_msg_count => x_msg_count,
22945 x_msg_data => x_msg_data,
22946 p_rulv_rec => l_rulv_rec );
22947
22948
22949 -- check if activity started successfully
22950 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
22951 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
22952 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
22953 raise OKC_API.G_EXCEPTION_ERROR;
22954 End If;
22955
22956 END LOOP;
22957
22958 OPEN l_rl_csr ( 'LALEVL', 'LASLH', p_chr_id, p_line_id );
22959 FETCH l_rl_csr INTO l_rl_rec1;
22960 If ( l_rl_csr%NOTFOUND ) Then
22961 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
22962 End If;
22963 CLOSE l_rl_csr;
22964
22965 l_stmv_rec.sty_id := TO_NUMBER(l_rl_rec1.object1_id1);
22966 l_stmv_rec.khr_id := p_chr_id;
22967 l_stmv_rec.kle_id := p_line_id;
22968 l_stmv_rec.say_code := 'CURR';
22969 l_stmv_rec.active_yn := 'Y';
22970 l_stmv_rec.date_current := sysdate;
22971
22972 Select max(transaction_number)+1 into temp
22973 From okl_streams;
22974
22975 l_stmv_rec.transaction_number := temp;
22976 l_stmv_rec.sgn_code := 'MANL';
22977
22978 j := 0;
22979 FOR l_rl_rec in l_rl_csr ( 'LALEVL', 'LASLL', p_chr_id, p_line_id )
22980 LOOP
22981
22982 number_of_periods := TO_NUMBER(l_rl_rec.RULE_INFORMATION3);
22983 amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
22984 start_date := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
22985 k := 0;
22986 FOR i in 1..number_of_periods
22987 LOOP
22988 k := i;
22989 l_selv_tbl(i+j).amount := amount;
22990 l_selv_tbl(i+j).accrued_yn := 'Y';
22991 l_selv_tbl(i+j).stream_element_date := add_months(start_date,i-1);
22992 l_selv_tbl(i+j).date_billed := l_selv_tbl(i+j).stream_element_date;
22993 l_selv_tbl(i+j).se_line_number := i+j;
22994 l_selv_tbl(i+j).comments := 'Streams';
22995
22996 END LOOP;
22997 j := j + k;
22998
22999 END LOOP;
23000
23001 Okl_Streams_Pub.create_streams(
23002 p_api_version => l_api_version
23003 ,p_init_msg_list => p_init_msg_list
23004 ,x_return_status => l_return_status
23005 ,x_msg_count => x_msg_count
23006 ,x_msg_data => x_msg_data
23007 ,p_stmv_rec => l_stmv_rec
23008 ,p_selv_tbl => l_selv_tbl
23009 ,x_stmv_rec => x_stmv_rec
23010 ,x_selv_tbl => x_selv_tbl);
23011
23012 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23013 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23014 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
23015 raise OKL_API.G_EXCEPTION_ERROR;
23016 End If;
23017
23018 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
23019
23020 Exception
23021 when OKC_API.G_EXCEPTION_ERROR then
23022 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
23023 p_api_name => l_api_name,
23024 p_pkg_name => g_pkg_name,
23025 p_exc_name => 'OKC_API.G_RET_STS_ERROR',
23026 x_msg_count => x_msg_count,
23027 x_msg_data => x_msg_data,
23028 p_api_type => g_api_type);
23029
23030 when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
23031 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
23032 p_api_name => l_api_name,
23033 p_pkg_name => g_pkg_name,
23034 p_exc_name => 'OKC_API.G_RET_STS_UNEXP_ERROR',
23035 x_msg_count => x_msg_count,
23036 x_msg_data => x_msg_data,
23037 p_api_type => g_api_type);
23038
23039 when OTHERS then
23040 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
23041 p_api_name => l_api_name,
23042 p_pkg_name => g_pkg_name,
23043 p_exc_name => 'OTHERS',
23044 x_msg_count => x_msg_count,
23045 x_msg_data => x_msg_data,
23046 p_api_type => g_api_type);
23047
23048
23049 END generate_internal_streams;
23050
23051 Procedure generate_internal_streams(
23052 p_api_version IN NUMBER,
23053 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
23054 p_chr_id IN NUMBER,
23055 x_return_status OUT NOCOPY VARCHAR2,
23056 x_msg_count OUT NOCOPY NUMBER,
23057 x_msg_data OUT NOCOPY VARCHAR2) IS
23058
23059 l_api_name CONSTANT VARCHAR2(30) := 'GEN_STREAMS';
23060 l_api_version CONSTANT NUMBER := 1.0;
23061 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
23062
23063 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
23064 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
23065 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
23066 xl_khrv_rec okl_contract_pub.khrv_rec_type;
23067
23068 l_rents NUMBER;
23069 l_cap_amnt NUMBER;
23070 l_yield NUMBER;
23071
23072
23073 BEGIN
23074
23075 l_return_status := OKC_API.START_ACTIVITY(
23076 p_api_name => l_api_name,
23077 p_pkg_name => g_pkg_name,
23078 p_init_msg_list => p_init_msg_list,
23079 l_api_version => l_api_version,
23080 p_api_version => p_api_version,
23081 p_api_type => G_API_TYPE,
23082 x_return_status => l_return_status);
23083
23084 -- check if activity started successfully
23085 If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
23086 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
23087 ElSIF (l_return_status = OKC_API.G_RET_STS_ERROR) then
23088 raise OKC_API.G_EXCEPTION_ERROR;
23089 End If;
23090 okl_contract_status_pub.update_contract_status(
23091 l_api_version,
23092 p_init_msg_list,
23093 x_return_status,
23094 x_msg_count,
23095 x_msg_data,
23096 'COMPLETE',
23097 p_chr_id );
23098
23099 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23100 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23101 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23102 RAISE OKL_API.G_EXCEPTION_ERROR;
23103 END IF;
23104
23105 OKL_CONTRACT_STATUS_PVT.cascade_lease_status
23106 (p_api_version => p_api_version,
23107 p_init_msg_list => p_init_msg_list,
23108 x_return_status => x_return_status,
23109 x_msg_count => x_msg_count,
23110 x_msg_data => x_msg_data,
23111 p_chr_id => p_chr_id);
23112
23113 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23114 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23115 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23116 RAISE OKL_API.G_EXCEPTION_ERROR;
23117 END IF;
23118 ---
23119
23120 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
23121
23122 Exception
23123 when OKC_API.G_EXCEPTION_ERROR then
23124 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
23125 p_api_name => l_api_name,
23126 p_pkg_name => g_pkg_name,
23127 p_exc_name => 'OKC_API.G_RET_STS_ERROR',
23128 x_msg_count => x_msg_count,
23129 x_msg_data => x_msg_data,
23130 p_api_type => g_api_type);
23131
23132 when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
23133 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
23134 p_api_name => l_api_name,
23135 p_pkg_name => g_pkg_name,
23136 p_exc_name => 'OKC_API.G_RET_STS_UNEXP_ERROR',
23137 x_msg_count => x_msg_count,
23138 x_msg_data => x_msg_data,
23139 p_api_type => g_api_type);
23140
23141 when OTHERS then
23142 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
23143 p_api_name => l_api_name,
23144 p_pkg_name => g_pkg_name,
23145 p_exc_name => 'OTHERS',
23146 x_msg_count => x_msg_count,
23147 x_msg_data => x_msg_data,
23148 p_api_type => g_api_type);
23149
23150
23151 END generate_internal_streams;
23152
23153 PROCEDURE GEN_INTR_EXTR_STREAM (
23154 p_api_version IN NUMBER,
23155 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
23156 x_return_status OUT NOCOPY VARCHAR2,
23157 x_msg_count OUT NOCOPY NUMBER,
23158 x_msg_data OUT NOCOPY VARCHAR2,
23159 p_khr_id IN OKC_K_HEADERS_B.ID%TYPE,
23160 p_generation_ctx_code IN VARCHAR2,
23161 x_trx_number OUT NOCOPY NUMBER,
23162 x_trx_status OUT NOCOPY VARCHAR2
23163 ) AS
23164
23165 l_api_name VARCHAR2(35) := 'gen_intr_extr_stream';
23166 l_proc_name VARCHAR2(35) := 'GEN_INTR_EXTR_STREAM';
23167 l_api_version NUMBER := 1.0;
23168 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
23169
23170 l_pre_tax_irr NUMBER;
23171
23172 -- TYPE yields IS TABLE OF yields_rec_type INDEX BY BINARY_INTEGER;
23173 -- Start modification 11i10 bakuchib
23174 p_chr_yields yields_rec_type;
23175 -- end modification 11i10 bakuchib
23176 lx_contract_rates OKL_STREAM_GENERATOR_PVT.rate_rec_type;
23177
23178 l_hdr_rec l_hdr_csr%ROWTYPE;
23179 p_pdtv_rec pdtv_rec_type;
23180 x_pdt_parameter_rec pdt_param_rec_type;
23181 x_no_data_found BOOLEAN;
23182
23183 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
23184 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
23185 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
23186 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
23187 l_strms_orig_rec strms_csr%ROWTYPE;
23188 l_strms_rep_rec strms_csr%ROWTYPE;
23189 -- Code for bulk update -02/28/2004 - HKPATEL
23190 l_id_tbl okl_streams_util.NumberTabTyp;
23191 -- Code for bulk update ends here -02/28/2004 - HKPATEL
23192
23193
23194 i NUMBER;
23195 l_strms_rec strms_csr%ROWTYPE;
23196 l_pricing_engine okl_st_gen_tmpt_sets.pricing_engine%TYPE;
23197
23198 cursor get_rebook_type is
23199 select nvl(amort_inc_adj_rev_dt_yn, 'N')
23200 from okl_sys_acct_opts;
23201
23202 l_PROSPECTIVE_REBOOK_YN varchar2(1);
23203
23204 BEGIN
23205 --Added by kthiruva for Debugging
23206 L_DEBUG_ENABLED := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
23207 write_to_log('Start of Debug Logging for ESG');
23208 write_to_log ('=============================');
23209 print( l_api_name, 'begin');
23210 x_return_status := OKL_API.START_ACTIVITY(
23211 p_api_name => l_api_name,
23212 p_pkg_name => G_PKG_NAME,
23213 p_init_msg_list => p_init_msg_list,
23214 l_api_version => l_api_version,
23215 p_api_version => p_api_version,
23216 p_api_type => G_API_TYPE,
23217 x_return_status => x_return_status);
23218
23219 -- check if activity started successfully
23220 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23221 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23222 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23223 raise OKL_API.G_EXCEPTION_ERROR;
23224 END IF;
23225
23226 print( l_api_name, 'deleting working streams');
23227 delete_working_streams(
23228 p_api_version => p_api_version,
23229 p_init_msg_list => p_init_msg_list,
23230 x_return_status => x_return_status,
23231 x_msg_count => x_msg_count,
23232 x_msg_data => x_msg_data,
23233 p_chr_id => p_khr_id);
23234
23235 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23236 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23237 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23238 raise OKL_API.G_EXCEPTION_ERROR;
23239 END IF;
23240
23241 OPEN l_hdr_csr(p_khr_id);
23242 FETCH l_hdr_csr into l_hdr_rec;
23243 IF l_hdr_csr%NOTFOUND THEN
23244 CLOSE l_hdr_csr;
23245 print( l_api_name, 'header curosr unexpected error');
23246 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23247 END IF;
23248 CLOSE l_hdr_csr;
23249
23250 IF ( l_hdr_rec.deal_type = 'LOAN-REVOLVING') Then
23251
23252 --Added by kthiruva for Debugging
23253 write_to_log('The Deal Type is Loan Revolving');
23254 write_to_log('Prior to the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE');
23255
23256 print( l_api_name, 'generating var int sched');
23257 OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE(
23258 p_api_version => p_api_version,
23259 p_init_msg_list => p_init_msg_list,
23260 p_khr_id => p_khr_id,
23261 p_purpose_code => NULL,
23262 x_return_status => x_return_status,
23263 x_msg_count => x_msg_count,
23264 x_msg_data => x_msg_data);
23265 --Added by kthiruva for Debugging
23266 write_to_log('After the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE, return status is :'||x_return_status);
23267
23268 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23269 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23270 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23271 raise OKL_API.G_EXCEPTION_ERROR;
23272 END IF;
23273
23274 I := 0;
23275 FOR l_strms_rec in strms_csr ( p_khr_id, 'WORK', 'ORIGIN')
23276 LOOP
23277
23278 i := i + 1;
23279 /* Commented code for Bulk update by HKPATEL -02/28/2005
23280 l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
23281 l_stmv_tbl(i).say_code := 'CURR';
23282 l_stmv_tbl(i).active_yn := 'Y';
23283 l_stmv_tbl(i).date_current := sysdate;
23284 */
23285
23286 l_id_tbl(i) := l_strms_rec.STRM_ID;
23287
23288 END LOOP;
23289
23290 If ( l_id_tbl.COUNT > 0 ) Then
23291 BEGIN
23292 --Added by kthiruva for Debugging
23293 write_to_log('Updating the Work streams to CURR');
23294
23295 FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
23296 UPDATE OKL_STREAMS
23297 SET say_code = 'CURR',
23298 active_yn = 'Y',
23299 date_current = sysdate,
23300 last_updated_by = FND_GLOBAL.USER_ID, -- BUG:14749215 changes start here
23301 last_update_date = sysdate,
23302 last_update_login = FND_GLOBAL.LOGIN_ID -- BUG:14749215 changes end here
23303 WHERE ID = l_id_tbl(i);
23304
23305 --Added by kthiruva for Debugging
23306 write_to_log('Streams updated succesfully');
23307 write_to_log('Prior to the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
23308 -- Added by mansrini for bug 4728636 (G bug 4520466 )
23309 OKL_BILLING_CONTROLLER_PVT.track_next_bill_date(p_khr_id);
23310 -- end changes
23311 write_to_log('Aftter the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
23312
23313
23314 EXCEPTION
23315 WHEN OTHERS THEN
23316 okl_api.set_message (p_app_name => G_APP_NAME,
23317 p_msg_name => G_DB_ERROR,
23318 p_token1 => G_PROG_NAME_TOKEN,
23319 p_token1_value => l_api_name,
23320 p_token2 => G_SQLCODE_TOKEN,
23321 p_token2_value => sqlcode,
23322 p_token3 => G_SQLERRM_TOKEN,
23323 p_token3_value => sqlerrm);
23324 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
23325 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23326 END;
23327 /* Commented for Bulk update by HKPATEL -02/28/2004
23328 If ( l_stmv_tbl.COUNT > 0 ) Then
23329 Okl_Streams_pub.update_streams(
23330 p_api_version => p_api_version,
23331 p_init_msg_list => p_init_msg_list,
23332 x_return_status => x_return_status,
23333 x_msg_count => x_msg_count,
23334 x_msg_data => x_msg_data,
23335 p_stmv_tbl => l_stmv_tbl,
23336 x_stmv_tbl => x_stmv_tbl);
23337
23338 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23339 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23340 END IF;
23341 */
23342
23343 ENd If;
23344 --Added by kthiruva on 09-Oct-2007 for Bug 6476425
23345 --Updating the contract status to Complete
23346 okl_contract_status_pub.update_contract_status(
23347 l_api_version,
23348 p_init_msg_list,
23349 x_return_status,
23350 x_msg_count,
23351 x_msg_data,
23352 'COMPLETE',
23353 p_khr_id );
23354 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23355 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23356 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23357 RAISE OKL_API.G_EXCEPTION_ERROR;
23358 END IF;
23359 --Added by kthiruva for Debugging
23360 write_to_log('After the call to update_contract_status, return status is :'||x_return_status);
23361
23362 --call to cascade status on to lines
23363 OKL_CONTRACT_STATUS_PVT.cascade_lease_status(
23364 p_api_version => l_api_version,
23365 p_init_msg_list => p_init_msg_list,
23366 x_return_status => x_return_status,
23367 x_msg_count => x_msg_count,
23368 x_msg_data => x_msg_data,
23369 p_chr_id => p_khr_id);
23370 --Added by kthiruva for Debugging
23371 write_to_log('After the call to cascade_lease_status, return status is :'||x_return_status);
23372
23373 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23374 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23375 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23376 RAISE OKL_API.G_EXCEPTION_ERROR;
23377 END IF;
23378
23379 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
23380 p_api_version => l_api_version,
23381 p_init_msg_list => p_init_msg_list,
23382 x_return_status => x_return_status,
23383 x_msg_count => x_msg_count,
23384 x_msg_data => x_msg_data,
23385 p_khr_id => p_khr_id,
23386 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
23387 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
23388
23389 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23390 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23391 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23392 RAISE OKL_API.G_EXCEPTION_ERROR;
23393 END IF;
23394 --Bug 6476425 - End of Changes
23395
23396
23397 return;
23398
23399 End If;
23400
23401 OKL_STREAMS_UTIL.get_pricing_engine(
23402 p_khr_id => p_khr_id,
23403 x_pricing_engine => l_pricing_engine,
23404 x_return_status => x_return_status);
23405 --Added by kthiruva for Debugging
23406 write_to_log('The pricing engine is :'||l_pricing_engine);
23407 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23408 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23409 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23410 raise OKL_API.G_EXCEPTION_ERROR;
23411 END IF;
23412
23413
23414 --IF ( fnd_profile.value('OKL_STREAMS_GEN_PATH') = 'EXTERNAL') THEN
23415 IF ( l_pricing_engine = 'EXTERNAL') THEN
23416
23417 -- populate orig_contract_line_id for the lines.
23418 -- orig_contract_line_id would be null for existing contracts and needing upgrade
23419 -- when using the prospective rebook feature.
23420 -- orig_contract_line_id could be null for new lines are added during rebook.
23421 open get_rebook_type;
23422 fetch get_rebook_type into l_PROSPECTIVE_REBOOK_YN ;
23423 close get_rebook_type;
23424
23425 --if l_PROSPECTIVE_REBOOK_YN = 'Y' then -- prospective rebook enabled.
23426 OKL_LLA_UTIL_PVT.update_external_id(p_chr_id => p_khr_id,
23427 x_return_status => x_return_status);
23428 --end if;
23429
23430 write_to_log('Done with populating orig_contract_line_id');
23431 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23432 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23433 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23434 raise OKL_API.G_EXCEPTION_ERROR;
23435 END IF;
23436
23437 --
23438 -- Call EXTERNAL Stream genration process
23439 --
23440 OKL_GENERATE_STREAMS_PUB.GENERATE_STREAMS(
23441 p_api_version => p_api_version,
23442 p_init_msg_list => OKL_API.G_FALSE,
23443 p_khr_id => p_khr_id,
23444 p_generation_ctx_code => p_generation_ctx_code,
23445 x_trx_number => x_trx_number,
23446 x_trx_status => x_trx_status,
23447 x_return_status => x_return_status,
23448 x_msg_count => x_msg_count,
23449 x_msg_data => x_msg_data
23450 );
23451
23452 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23453 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23454 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23455 raise OKL_API.G_EXCEPTION_ERROR;
23456 END IF;
23457
23458 --ELSE -- fnd_profile = INTERNAL or NONE
23459 ELSIF ( l_pricing_engine = 'INTERNAL') THEN
23460 --
23461 -- Call INTERNAL Stream genration process
23462 --
23463 print( l_api_name, 'generating streams');
23464 /*
23465 OKL_STREAM_GENERATOR_PUB.generate_streams(
23466 p_api_version => l_api_version,
23467 p_init_msg_list => p_init_msg_list,
23468 p_khr_id => p_khr_id,
23469 x_pre_tax_irr => l_pre_tax_irr,
23470 x_return_status => x_return_status,
23471 x_msg_count => x_msg_count,
23472 x_msg_data => x_msg_data
23473 );
23474 */
23475 OKL_STREAM_GENERATOR_PUB.generate_streams(
23476 p_api_version => l_api_version,
23477 p_init_msg_list => p_init_msg_list,
23478 x_return_status => x_return_status,
23479 x_msg_count => x_msg_count,
23480 x_msg_data => x_msg_data,
23481 p_khr_id => p_khr_id,
23482 x_contract_rates => lx_contract_rates) ;
23483 -- check if activity started successfully
23484 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23485 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23486 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23487 raise OKL_API.G_EXCEPTION_ERROR;
23488 End If;
23489
23490 p_chr_yields.pre_tax_yield := lx_contract_rates.pre_tax_yield;
23491 p_chr_yields.pre_tax_irr := lx_contract_rates.pre_tax_irr;
23492 p_chr_yields.implicit_interest_rate := lx_contract_rates.implicit_interest_rate;
23493 p_chr_yields.sub_impl_interest_rate := lx_contract_rates.sub_impl_interest_rate;
23494 p_chr_yields.sub_pre_tax_irr := lx_contract_rates.sub_pre_tax_irr;
23495
23496 -- Added by kthiruva on 10-Aug-2004
23497 -- Bug 3817222 - Start of Changes
23498 If ( l_hdr_rec.report_pdt_id <> -1 ) Then
23499 p_pdtv_rec.id := l_hdr_rec.report_pdt_id;
23500 OKL_SETUPPRODUCTS_PVT.Getpdt_parameters(
23501 p_api_version => p_api_version,
23502 p_init_msg_list => p_init_msg_list,
23503 x_return_status => x_return_status,
23504 x_msg_count => x_msg_count,
23505 x_msg_data => x_msg_data,
23506 p_pdtv_rec => p_pdtv_rec,
23507 x_no_data_found => x_no_data_found,
23508 p_pdt_parameter_rec => x_pdt_parameter_rec);
23509 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23510 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23511 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23512 RAISE OKL_API.G_EXCEPTION_ERROR;
23513 END IF;
23514 OKL_STREAM_GENERATOR_PUB.generate_streams(
23515 p_api_version => l_api_version,
23516 p_init_msg_list => p_init_msg_list,
23517 x_return_status => x_return_status,
23518 x_msg_count => x_msg_count,
23519 x_msg_data => x_msg_data,
23520 p_khr_id => p_khr_id,
23521 p_reporting_book_class => x_pdt_parameter_rec.deal_type,
23522 x_contract_rates => lx_contract_rates) ;
23523 -- check if activity started successfully
23524 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23525 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23526 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23527 raise OKL_API.G_EXCEPTION_ERROR;
23528 End If;
23529 -- p_chr_yields(1).PRE_TAX_IRR := l_pre_tax_irr; -- Not updated though !!! (ssiruvol - 06-FEB-2003)
23530 -- Start modification 11i10 bakuchib
23531 /* Commented by HKPATEL for bug 4040722 - 01-DEC-2004
23532 p_chr_yields.pre_tax_yield := lx_contract_rates.pre_tax_yield;
23533 p_chr_yields.pre_tax_irr := lx_contract_rates.pre_tax_irr;
23534 p_chr_yields.implicit_interest_rate := lx_contract_rates.implicit_interest_rate;
23535 p_chr_yields.sub_impl_interest_rate := lx_contract_rates.sub_impl_interest_rate;
23536 p_chr_yields.sub_pre_tax_irr := lx_contract_rates.sub_pre_tax_irr;
23537 Bug 4040722*/
23538 -- End modification 11i10 bakuchib
23539
23540 x_trx_number := -1;
23541 x_trx_status := NULL;
23542 End If;
23543 -- Bug 3817222 - End of Changes
23544
23545 print( l_api_name, 'process streams');
23546 process_streams(
23547 p_api_version => l_api_version,
23548 p_init_msg_list => OKL_API.G_FALSE,
23549 x_return_status => x_return_status,
23550 x_msg_count => x_msg_count,
23551 x_msg_data => x_msg_data,
23552 p_chr_id => p_khr_id,
23553 p_process_yn => OKL_API.G_TRUE,
23554 p_chr_yields => p_chr_yields,
23555 p_source_call => 'ISG');
23556 -- check if activity started successfully
23557 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
23558 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23559 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
23560 raise OKL_API.G_EXCEPTION_ERROR;
23561 End If;
23562
23563 END IF; -- fnd_profile
23564 print( l_api_name, 'end', x_return_status);
23565 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
23566 x_msg_data => x_msg_data);
23567
23568 RETURN;
23569
23570 EXCEPTION
23571 when OKL_API.G_EXCEPTION_ERROR then
23572 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
23573 p_api_name => l_api_name,
23574 p_pkg_name => G_PKG_NAME,
23575 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
23576 x_msg_count => x_msg_count,
23577 x_msg_data => x_msg_data,
23578 p_api_type => G_API_TYPE);
23579
23580 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
23581 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
23582 p_api_name => l_api_name,
23583 p_pkg_name => G_PKG_NAME,
23584 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
23585 x_msg_count => x_msg_count,
23586 x_msg_data => x_msg_data,
23587 p_api_type => G_API_TYPE);
23588
23589 when OTHERS then
23590 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
23591 p_api_name => l_api_name,
23592 p_pkg_name => G_PKG_NAME,
23593 p_exc_name => 'OTHERS',
23594 x_msg_count => x_msg_count,
23595 x_msg_data => x_msg_data,
23596 p_api_type => G_API_TYPE);
23597
23598 END GEN_INTR_EXTR_STREAM;
23599 -- Start modification 11i10 bakuchib
23600 -------------------------------------------------------------------------------------------------
23601 -- Start of Commnets
23602 -- Badrinath Kuchibholta
23603 -- Procedure Name : validate_payments
23604 -- Description : validate sll payments
23605 -- Business Rules :
23606 -- Parameters : Standard Parameters with Payment table
23607 -- Version :
23608 -- End of Commnets
23609 -------------------------------------------------------------------------------------------------
23610 PROCEDURE validate_payments(p_api_version IN NUMBER,
23611 p_init_msg_list IN VARCHAR2,
23612 x_return_status OUT NOCOPY VARCHAR2,
23613 x_msg_count OUT NOCOPY NUMBER,
23614 x_msg_data OUT NOCOPY VARCHAR2,
23615 p_khr_id IN OKC_K_HEADERS_B.ID%TYPE,
23616 p_paym_tbl IN OKL_STREAM_GENERATOR_PVT.payment_tbl_type)
23617 IS
23618 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_PAYMENTS';
23619 G_APP_NAME VARCHAR2(30) := 'OKL';
23620 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
23621 G_RGD_CODE okc_rule_groups_b.rgd_code%TYPE := 'LALEVL';
23622 G_RUL_SLH_CODE okc_rules_b.rule_information_category%TYPE := 'LASLH';
23623 G_RUL_SLL_CODE okc_rules_b.rule_information_category%TYPE := 'LASLL';
23624 G_FEE_TYPE okl_k_lines.fee_type%TYPE := 'PASSTHROUGH';
23625 -- Messages
23626 G_PAYMENT_OVERLAP_ERROR VARCHAR2(200) := 'OKL_PAYMENT_OVERLAP_ERROR';
23627 G_PAYMENT_GAP_ERROR VARCHAR2(200) := 'OKL_PAYMENT_GAP_ERROR';
23628 G_PSTH_PAYMENT_ERROR VARCHAR2(200) := 'OKL_PSTH_PAYMENT_ERROR';
23629 -- Messages
23630 ln_pasth_cnt NUMBER := 0;
23631 ln_dummy NUMBER := 0;
23632 i NUMBER := 0;
23633 j NUMBER := 0;
23634 ln_cnt_amt_null NUMBER := 0;
23635 ln_cnt_amt_not_null NUMBER := 0;
23636 ln_cnt_rte_null NUMBER := 0;
23637 ln_cnt_rte_not_null NUMBER := 0;
23638 ln_tot_cnt NUMBER := 0;
23639 l_freq VARCHAR2(1);
23640 -- Get Passthrough Fee Lines
23641 CURSOR c_get_psth_csr(p_khr_id okl_k_headers.id%TYPE)
23642 IS
23643 SELECT cle.id
23644 FROM okc_k_lines_b cle,
23645 okl_k_lines kle,
23646 okc_line_styles_b lse
23647 WHERE cle.dnz_chr_id = p_khr_id
23648 AND cle.lse_id = lse.id
23649 AND cle.sts_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED')
23650 AND lse.lty_code = 'FEE'
23651 AND cle.id = kle.id
23652 AND kle.fee_type = G_FEE_TYPE;
23653 -- Get number of SLH payments for Passthrough fee type
23654 CURSOR c_get_pay_psth_csr(p_khr_id okl_k_headers.id%TYPE,
23655 p_kle_id okl_k_headers.id%TYPE)
23656 IS
23657 SELECT COUNT(*)
23658 FROM okc_rules_b slh,
23659 okc_rule_groups_b rgp,
23660 okl_k_lines kle
23661 WHERE rgp.dnz_chr_id = p_khr_id
23662 AND kle.id = p_kle_id
23663 AND rgp.rgd_code= G_RGD_CODE
23664 AND rgp.id = slh.rgp_id
23665 AND kle.id = rgp.cle_id
23666 AND kle.fee_type = G_FEE_TYPE
23667 AND slh.rule_information_category = G_RUL_SLH_CODE;
23668
23669 -- Get all the Top lines for p_khr_id
23670 CURSOR c_get_all_lines_csr(p_khr_id okl_k_headers.id%TYPE)
23671 IS
23672 SELECT cle.id line_id
23673 FROM okc_k_lines_b cle,
23674 okc_line_styles_b lse
23675 WHERE cle.dnz_chr_id = p_khr_id
23676 AND cle.lse_id = lse.id
23677 AND cle.sts_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED')
23678 AND lse.lty_code IN ('FREE_FORM1','FEE','SOLD_SERVICE');
23679
23680 -- Get all the SLH payment lines for Each Khr_id and Line Id
23681 CURSOR c_get_slh_lines_csr(p_khr_id okl_k_headers.id%TYPE,
23682 p_cle_id okl_k_lines.id%TYPE)
23683 IS
23684 SELECT rul.id slh_id
23685 FROM okc_rule_groups_b rgp,
23686 okc_rules_b rul
23687 WHERE rul.rgp_id = rgp.id
23688 AND rgp.rgd_code = G_RGD_CODE
23689 AND rul.rule_information_category = G_RUL_SLH_CODE
23690 AND rgp.dnz_chr_id = p_khr_id
23691 AND rgp.cle_id = p_cle_id;
23692
23693 -- Get all the SLL payment lines for Each Khr_id,SLH id and Line Id
23694 CURSOR c_get_sll_lines_csr(p_khr_id okl_k_headers.id%TYPE,
23695 p_cle_id okl_k_lines.id%TYPE,
23696 p_slh_id okc_rules_b.id%TYPE)
23697 IS
23698 SELECT FND_DATE.canonical_to_date(sll.rule_information2) start_date,
23699 /* DECODE(SLL.rule_information7,
23700 NULL,(ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1),
23701 TO_NUMBER(SLL.rule_information7),FND_DATE.canonical_to_date(sll.rule_information2)+SLL.rule_information7-1,
23702 (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1)) end_date,
23703 */
23704 -- Bug 5362566: Start
23705 OKL_LA_PAYMENTS_PVT.get_display_end_date(
23706 sll.RULE_INFORMATION2, sll.RULE_INFORMATION7, sll.OBJECT1_ID1, sll.RULE_INFORMATION3,
23707 okl_la_payments_pvt.get_start_day( sll.id,sll.dnz_chr_id,sll.rgp_id,sll.object2_id1,sll.RULE_INFORMATION2)
23708 ,(SELECT end_date FROM okc_k_headers_b WHERE id = rgp.dnz_chr_id )
23709 )
23710 END_DATE,
23711 -- Bug 5362566: End
23712 -- Start of BAKUCHIB modification bug#3121708
23713 FND_NUMBER.canonical_to_number(NVL(sll.rule_information6,sll.rule_information8)) amount,
23714 -- End of BAKUCHIB modification bug#3121708
23715 sll.rule_information13 rate,
23716 nvl(sll.rule_information10,'Y') arrears_yn,
23717 sll.rule_information5 structure
23718 FROM okc_rules_b sll,
23719 okc_rules_b slh,
23720 okc_rule_groups_b rgp
23721 WHERE rgp.dnz_chr_id = p_khr_id
23722 AND rgp.cle_id = p_cle_id
23723 AND slh.id = p_slh_id
23724 AND rgp.rgd_code = G_RGD_CODE
23725 AND rgp.id = slh.rgp_id
23726 AND slh.rule_information_category = G_RUL_SLH_CODE
23727 AND TO_CHAR(slh.id) = sll.object2_id1
23728 AND sll.rule_information_category = G_RUL_SLL_CODE
23729 --Added by kthiruva for Bug 5130703
23730 AND slh.JTOT_OBJECT1_CODE = 'OKL_STRMTYP'
23731 ORDER BY FND_DATE.canonical_to_date(sll.rule_information2);
23732
23733 CURSOR c_valid_khr_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
23734 IS
23735 SELECT 1
23736 FROM DUAL
23737 WHERE EXISTS (SELECT 1
23738 FROM okc_k_headers_b
23739 WHERE id = p_khr_id);
23740 TYPE sll_date_rec_type IS RECORD (
23741 start_date okc_rules_b.last_update_date%TYPE := okl_api.G_MISS_DATE,
23742 end_date okc_rules_b.last_update_date%TYPE := okl_api.G_MISS_DATE);
23743 TYPE sll_date_tbl_type IS TABLE OF sll_date_rec_type
23744 INDEX BY BINARY_INTEGER;
23745 lt_sll_date_tbl_type sll_date_tbl_type;
23746 l_paym_tbl OKL_STREAM_GENERATOR_PVT.payment_tbl_type := p_paym_tbl;
23747 BEGIN
23748 l_return_status := OKL_API.START_ACTIVITY (
23749 l_api_name
23750 ,p_init_msg_list
23751 ,'_PVT'
23752 ,l_return_status);
23753 -- Check if activity started successfully
23754 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23755 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23756 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
23757 RAISE OKL_API.G_EXCEPTION_ERROR;
23758 END IF;
23759 IF (p_khr_id = OKL_API.G_MISS_NUM OR
23760 p_khr_id IS NULL) AND
23761 p_paym_tbl.COUNT = 0 THEN
23762 OKL_API.set_message(p_app_name => G_APP_NAME,
23763 p_msg_name => G_REQUIRED_VALUE,
23764 p_token1 => G_COL_NAME_TOKEN,
23765 p_token1_value => 'khr_id/Payment table');
23766 RAISE OKL_API.G_EXCEPTION_ERROR;
23767 ELSIF p_khr_id <> OKL_API.G_MISS_NUM OR
23768 p_khr_id IS NOT NULL THEN
23769 -- Validating the khr_id
23770 OPEN c_valid_khr_csr(p_khr_id => p_khr_id);
23771 FETCH c_valid_khr_csr INTO ln_dummy;
23772 IF c_valid_khr_csr%NOTFOUND THEN
23773 OKL_API.set_message(p_app_name => G_APP_NAME,
23774 p_msg_name => G_REQUIRED_VALUE,
23775 p_token1 => G_COL_NAME_TOKEN,
23776 p_token1_value => 'khr_id');
23777 RAISE OKL_API.G_EXCEPTION_ERROR;
23778 END IF;
23779 CLOSE c_valid_khr_csr;
23780 IF ln_dummy <> 1 THEN
23781 OKL_API.set_message(p_app_name => G_APP_NAME,
23782 p_msg_name => G_INVALID_VALUE,
23783 p_token1 => G_COL_NAME_TOKEN,
23784 p_token1_value => 'khr_id');
23785 RAISE OKL_API.G_EXCEPTION_ERROR;
23786 END IF;
23787 -- Checking for Passthrough
23788 FOR r_get_psth_rec IN c_get_psth_csr (p_khr_id => p_khr_id) LOOP
23789 OPEN c_get_pay_psth_csr(p_khr_id => p_khr_id,
23790 p_kle_id => r_get_psth_rec.id);
23791 FETCH c_get_pay_psth_csr INTO ln_pasth_cnt;
23792 CLOSE c_get_pay_psth_csr;
23793 IF ln_pasth_cnt > 1 THEN
23794 OKL_API.set_message(p_app_name => G_APP_NAME,
23795 p_msg_name => G_PSTH_PAYMENT_ERROR,
23796 p_token1 => 'FEE_TYPE',
23797 p_token1_value => G_FEE_TYPE);
23798 l_return_status := OKL_API.G_RET_STS_ERROR;
23799 EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
23800 END IF;
23801 END LOOP;
23802 -- Check if activity started successfully
23803 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23804 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23805 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
23806 RAISE OKL_API.G_EXCEPTION_ERROR;
23807 END IF;
23808 -- Get all the lines
23809 FOR r_get_all_lines_rec IN c_get_all_lines_csr(p_khr_id => p_khr_id) LOOP
23810 -- Get all the SLH payment lines for khr_id and each line_id
23811 FOR r_get_slh_lines_rec IN c_get_slh_lines_csr(p_khr_id => p_khr_id,
23812 p_cle_id => r_get_all_lines_rec.line_id) LOOP
23813
23814 -- Get all the SLL payment lines for Khr_id,line_id and each slh_id
23815 FOR r_get_sll_lines_rec IN c_get_sll_lines_csr(p_khr_id => p_khr_id,
23816 p_cle_id => r_get_all_lines_rec.line_id,
23817 p_slh_id => r_get_slh_lines_rec.slh_id) LOOP
23818
23819 lt_sll_date_tbl_type(i).start_date := r_get_sll_lines_rec.start_date;
23820
23821 -- lt_sll_date_tbl_type(i).end_date := r_get_sll_lines_rec.end_date; -- sechawla 8429670
23822 lt_sll_date_tbl_type(i).end_date := to_date(r_get_sll_lines_rec.end_date, fnd_profile.value('ICX_DATE_FORMAT_MASK')); -- sechawla 8429670
23823
23824 IF r_get_sll_lines_rec.amount IS NULL THEN
23825 ln_cnt_amt_null := ln_cnt_amt_null + 1;
23826 ELSIF r_get_sll_lines_rec.amount IS NOT NULL THEN
23827 ln_cnt_amt_not_null := ln_cnt_amt_not_null + 1;
23828 END IF;
23829 -- Collecting amount and rate info to validate further
23830 IF r_get_sll_lines_rec.rate IS NULL THEN
23831 ln_cnt_rte_null := ln_cnt_rte_null + 1;
23832 ELSIF r_get_sll_lines_rec.rate IS NOT NULL THEN
23833 ln_cnt_rte_not_null := ln_cnt_rte_not_null + 1;
23834 END IF;
23835 IF r_get_sll_lines_rec.arrears_yn IS NULL OR
23836 r_get_sll_lines_rec.arrears_yn = OKL_API.G_MISS_CHAR THEN
23837 l_return_status := OKL_API.G_RET_STS_ERROR;
23838 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23839 OKL_API.set_message(p_app_name => G_APP_NAME,
23840 p_msg_name => G_INVALID_VALUE,
23841 p_token1 => G_COL_NAME_TOKEN,
23842 p_token1_value => 'Arrear');
23843 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23844 END IF;
23845 ELSIF (r_get_sll_lines_rec.arrears_yn IS NOT NULL OR
23846 r_get_sll_lines_rec.arrears_yn <> OKL_API.G_MISS_CHAR) AND
23847 r_get_sll_lines_rec.arrears_yn = 'N' THEN
23848 IF r_get_sll_lines_rec.STRUCTURE IS NULL OR
23849 r_get_sll_lines_rec.STRUCTURE = OKL_API.G_MISS_CHAR THEN
23850 l_return_status := OKL_API.G_RET_STS_ERROR;
23851 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23852 OKL_API.set_message(p_app_name => G_APP_NAME,
23853 p_msg_name => G_INVALID_VALUE,
23854 p_token1 => G_COL_NAME_TOKEN,
23855 p_token1_value => 'Structure');
23856 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23857 END IF;
23858 END IF;
23859 END IF;
23860 i := i + 1;
23861 ln_tot_cnt := ln_tot_cnt + 1;
23862 END LOOP;
23863 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23864 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23865 END IF;
23866 -- Validating amounts and rates values
23867 IF ln_cnt_rte_not_null = ln_tot_cnt AND
23868 ln_cnt_amt_null < ln_tot_cnt AND
23869 ln_cnt_amt_null > 1 THEN
23870 l_return_status := OKL_API.G_RET_STS_ERROR;
23871 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23872 OKL_API.set_message(p_app_name => G_APP_NAME,
23873 p_msg_name => G_INVALID_VALUE,
23874 p_token1 => G_COL_NAME_TOKEN,
23875 p_token1_value => 'payment amounts');
23876 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23877 END IF;
23878 END IF;
23879 IF ln_cnt_amt_not_null = ln_tot_cnt THEN
23880 IF ln_cnt_rte_not_null < ln_tot_cnt AND
23881 ln_cnt_rte_not_null > 0 THEN
23882 l_return_status := OKL_API.G_RET_STS_ERROR;
23883 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23884 OKL_API.set_message(p_app_name => G_APP_NAME,
23885 p_msg_name => G_INVALID_VALUE,
23886 p_token1 => G_COL_NAME_TOKEN,
23887 p_token1_value => 'payment rates');
23888 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23889 END IF;
23890 END IF;
23891 END IF;
23892 IF ln_cnt_rte_null = ln_tot_cnt AND
23893 ln_cnt_amt_null = ln_tot_cnt THEN
23894 l_return_status := OKL_API.G_RET_STS_ERROR;
23895 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23896 OKL_API.set_message(p_app_name => G_APP_NAME,
23897 p_msg_name => G_REQUIRED_VALUE,
23898 p_token1 => G_COL_NAME_TOKEN,
23899 p_token1_value => 'payment rate and payment amount');
23900 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23901 END IF;
23902 END IF;
23903 IF ln_cnt_rte_not_null <> ln_tot_cnt AND
23904 ln_cnt_amt_not_null <> ln_tot_cnt THEN
23905 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23906 OKL_API.set_message(p_app_name => G_APP_NAME,
23907 p_msg_name => G_INVALID_VALUE,
23908 p_token1 => G_COL_NAME_TOKEN,
23909 p_token1_value => 'payment rates and payment amounts');
23910 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23911 END IF;
23912 END IF;
23913 ln_cnt_amt_null := 0;
23914 ln_cnt_amt_not_null := 0;
23915 ln_cnt_rte_null := 0;
23916 ln_cnt_rte_not_null := 0;
23917 -- Validate dates either overlapping or having gap
23918 IF lt_sll_date_tbl_type.COUNT > 0 THEN
23919 IF lt_sll_date_tbl_type.LAST > 1 THEN
23920 FOR k IN lt_sll_date_tbl_type.FIRST..lt_sll_date_tbl_type.LAST LOOP
23921 EXIT WHEN(k = lt_sll_date_tbl_type.LAST);
23922
23923
23924 IF lt_sll_date_tbl_type(k+1).start_date >= lt_sll_date_tbl_type(k).start_date AND
23925 lt_sll_date_tbl_type(k+1).start_date <= lt_sll_date_tbl_type(k).end_date THEN
23926 OKL_API.set_message(p_app_name => G_APP_NAME,
23927 p_msg_name => G_PAYMENT_OVERLAP_ERROR);
23928 l_return_status := OKL_API.G_RET_STS_ERROR;
23929 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23930 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23931 END IF;
23932 ELSIF lt_sll_date_tbl_type(k+1).start_date > lt_sll_date_tbl_type(k).end_date + 1 THEN
23933 OKL_API.set_message(p_app_name => G_APP_NAME,
23934 p_msg_name => G_PAYMENT_GAP_ERROR);
23935 l_return_status := OKL_API.G_RET_STS_ERROR;
23936 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23937 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23938 END IF;
23939 END IF;
23940 END LOOP;
23941 END IF;
23942 ELSE
23943 OKL_API.set_message(p_app_name => G_APP_NAME,
23944 p_msg_name => G_REQUIRED_VALUE,
23945 p_token1 => G_COL_NAME_TOKEN,
23946 p_token1_value => 'Payment Line Record');
23947 l_return_status := OKL_API.G_RET_STS_ERROR;
23948 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23949 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23950 END IF;
23951 END IF;
23952 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23953 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23954 END IF;
23955 lt_sll_date_tbl_type.DELETE;
23956 i := 0;
23957 END LOOP;
23958 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23959 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
23960 END IF;
23961 END LOOP;
23962 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
23963 RAISE OKL_API.G_EXCEPTION_ERROR;
23964 END IF;
23965 ELSIF l_paym_tbl.COUNT > 0 THEN
23966 i := l_paym_tbl.FIRST;
23967 LOOP
23968 IF (l_paym_tbl(i).START_DATE IS NULL OR
23969 l_paym_tbl(i).START_DATE = OKL_API.G_MISS_DATE) OR
23970 (l_paym_tbl(i).frequency IS NULL OR
23971 l_paym_tbl(i).frequency = OKL_API.G_MISS_CHAR) OR
23972 l_paym_tbl(i).frequency NOT IN ('A','S','Q','M') THEN
23973 OKL_API.set_message(p_app_name => G_APP_NAME,
23974 p_msg_name => G_REQUIRED_VALUE,
23975 p_token1 => G_COL_NAME_TOKEN,
23976 p_token1_value => 'Start date, Frequency');
23977 l_return_status := OKL_API.G_RET_STS_ERROR;
23978 EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
23979 END IF;
23980 IF l_paym_tbl(i).frequency = 'A' THEN
23981 l_freq := 12;
23982 ELSIF l_paym_tbl(i).frequency = 'S' THEN
23983 l_freq := 6;
23984 ELSIF l_paym_tbl(i).frequency = 'Q' THEN
23985 l_freq := 3;
23986 ELSIF l_paym_tbl(i).frequency = 'M' THEN
23987 l_freq := 1;
23988 END IF;
23989 IF (l_paym_tbl(i).stub_days IS NULL OR
23990 l_paym_tbl(i).stub_days = OKL_API.G_MISS_NUM) AND
23991 (l_paym_tbl(i).periods IS NOT NULL OR
23992 l_paym_tbl(i).periods <> OKL_API.G_MISS_NUM) THEN
23993 lt_sll_date_tbl_type(j).START_DATE := l_paym_tbl(i).START_DATE;
23994 lt_sll_date_tbl_type(j).end_date := ADD_MONTHS(l_paym_tbl(i).START_DATE,(l_paym_tbl(i).periods*l_freq))-1;
23995 ELSIF (l_paym_tbl(i).stub_days IS NOT NULL OR
23996 l_paym_tbl(i).stub_days <> OKL_API.G_MISS_NUM) AND
23997 (l_paym_tbl(i).periods IS NULL OR
23998 l_paym_tbl(i).periods = OKL_API.G_MISS_NUM) THEN
23999 lt_sll_date_tbl_type(j).START_DATE := l_paym_tbl(i).START_DATE;
24000 lt_sll_date_tbl_type(j).end_date := (l_paym_tbl(i).START_DATE+l_paym_tbl(i).stub_days)-1;
24001 ELSIF (l_paym_tbl(i).periods IS NULL OR
24002 l_paym_tbl(i).periods = OKL_API.G_MISS_NUM) AND
24003 (l_paym_tbl(i).stub_days IS NULL OR
24004 l_paym_tbl(i).stub_days = OKL_API.G_MISS_NUM) THEN
24005 OKL_API.set_message(p_app_name => G_APP_NAME,
24006 p_msg_name => G_REQUIRED_VALUE,
24007 p_token1 => G_COL_NAME_TOKEN,
24008 p_token1_value => 'Stub days, Periods');
24009 l_return_status := OKL_API.G_RET_STS_ERROR;
24010 EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
24011 END IF;
24012 j := j + 1;
24013 -- Collecting amount and rate info to validate further
24014 IF l_paym_tbl(i).amount IS NULL THEN
24015 ln_cnt_amt_null := ln_cnt_amt_null + 1;
24016 ELSIF l_paym_tbl(i).amount IS NOT NULL THEN
24017 ln_cnt_amt_not_null := ln_cnt_amt_not_null + 1;
24018 END IF;
24019 -- Collecting amount and rate info to validate further
24020 IF l_paym_tbl(i).rate IS NULL THEN
24021 ln_cnt_rte_null := ln_cnt_rte_null + 1;
24022 ELSIF l_paym_tbl(i).rate IS NOT NULL THEN
24023 ln_cnt_rte_not_null := ln_cnt_rte_not_null + 1;
24024 END IF;
24025 l_paym_tbl(i).arrears_yn := nvl(l_paym_tbl(i).arrears_yn,'Y');
24026 IF l_paym_tbl(i).arrears_yn IS NULL OR
24027 l_paym_tbl(i).arrears_yn = OKL_API.G_MISS_CHAR THEN
24028 l_return_status := OKL_API.G_RET_STS_ERROR;
24029 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24030 OKL_API.set_message(p_app_name => G_APP_NAME,
24031 p_msg_name => G_INVALID_VALUE,
24032 p_token1 => G_COL_NAME_TOKEN,
24033 p_token1_value => 'Arrear');
24034 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
24035 END IF;
24036 ELSIF (l_paym_tbl(i).arrears_yn IS NOT NULL OR
24037 l_paym_tbl(i).arrears_yn <> OKL_API.G_MISS_CHAR) AND
24038 l_paym_tbl(i).arrears_yn = 'N' THEN
24039 IF l_paym_tbl(i).STRUCTURE IS NULL OR
24040 l_paym_tbl(i).STRUCTURE = OKL_API.G_MISS_CHAR THEN
24041 l_return_status := OKL_API.G_RET_STS_ERROR;
24042 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24043 OKL_API.set_message(p_app_name => G_APP_NAME,
24044 p_msg_name => G_INVALID_VALUE,
24045 p_token1 => G_COL_NAME_TOKEN,
24046 p_token1_value => 'Structure');
24047 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
24048 END IF;
24049 END IF;
24050 END IF;
24051 EXIT WHEN (i = l_paym_tbl.LAST);
24052 i := l_paym_tbl.NEXT(i);
24053 END LOOP;
24054 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24055 RAISE OKL_API.G_EXCEPTION_ERROR;
24056 END IF;
24057 -- Validating amounts and rates values
24058 IF ln_cnt_rte_not_null = l_paym_tbl.COUNT AND
24059 ln_cnt_amt_null < l_paym_tbl.COUNT AND
24060 ln_cnt_amt_null > 1 THEN
24061 OKL_API.set_message(p_app_name => G_APP_NAME,
24062 p_msg_name => G_INVALID_VALUE,
24063 p_token1 => G_COL_NAME_TOKEN,
24064 p_token1_value => 'payment amounts');
24065 RAISE OKL_API.G_EXCEPTION_ERROR;
24066 END IF;
24067 IF ln_cnt_amt_not_null = l_paym_tbl.COUNT THEN
24068 IF ln_cnt_rte_not_null < l_paym_tbl.COUNT AND
24069 ln_cnt_rte_not_null > 0 THEN
24070 OKL_API.set_message(p_app_name => G_APP_NAME,
24071 p_msg_name => G_INVALID_VALUE,
24072 p_token1 => G_COL_NAME_TOKEN,
24073 p_token1_value => 'payment rates');
24074 RAISE OKL_API.G_EXCEPTION_ERROR;
24075 END IF;
24076 END IF;
24077 IF ln_cnt_rte_null = l_paym_tbl.COUNT AND
24078 ln_cnt_amt_null = l_paym_tbl.COUNT THEN
24079 OKL_API.set_message(p_app_name => G_APP_NAME,
24080 p_msg_name => G_REQUIRED_VALUE,
24081 p_token1 => G_COL_NAME_TOKEN,
24082 p_token1_value => 'payment rate and payment amount');
24083 RAISE OKL_API.G_EXCEPTION_ERROR;
24084 END IF;
24085 IF ln_cnt_rte_not_null <> l_paym_tbl.COUNT AND
24086 ln_cnt_amt_not_null <> l_paym_tbl.COUNT THEN
24087 OKL_API.set_message(p_app_name => G_APP_NAME,
24088 p_msg_name => G_INVALID_VALUE,
24089 p_token1 => G_COL_NAME_TOKEN,
24090 p_token1_value => 'payment rates and payment amounts');
24091 RAISE OKL_API.G_EXCEPTION_ERROR;
24092 END IF;
24093 ln_cnt_amt_null := 0;
24094 ln_cnt_amt_not_null := 0;
24095 ln_cnt_rte_null := 0;
24096 ln_cnt_rte_not_null := 0;
24097 -- Validate dates either overlapping or having gap
24098 IF lt_sll_date_tbl_type.COUNT > 0 THEN
24099 IF lt_sll_date_tbl_type.LAST > 1 THEN
24100 FOR k IN lt_sll_date_tbl_type.FIRST..lt_sll_date_tbl_type.LAST LOOP
24101 EXIT WHEN(k = lt_sll_date_tbl_type.LAST);
24102 IF lt_sll_date_tbl_type(k+1).start_date >= lt_sll_date_tbl_type(k).start_date AND
24103 lt_sll_date_tbl_type(k+1).start_date <= lt_sll_date_tbl_type(k).end_date THEN
24104 OKL_API.set_message(p_app_name => G_APP_NAME,
24105 p_msg_name => G_PAYMENT_OVERLAP_ERROR);
24106 l_return_status := OKL_API.G_RET_STS_ERROR;
24107 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24108 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
24109 END IF;
24110 ELSIF lt_sll_date_tbl_type(k+1).start_date > lt_sll_date_tbl_type(k).end_date + 1 THEN
24111 OKL_API.set_message(p_app_name => G_APP_NAME,
24112 p_msg_name => G_PAYMENT_GAP_ERROR);
24113 l_return_status := OKL_API.G_RET_STS_ERROR;
24114 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24115 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
24116 END IF;
24117 END IF;
24118 END LOOP;
24119 END IF;
24120 END IF;
24121 ELSE
24122 OKL_API.set_message(p_app_name => G_APP_NAME,
24123 p_msg_name => G_REQUIRED_VALUE,
24124 p_token1 => G_COL_NAME_TOKEN,
24125 p_token1_value => 'Payment Line Record');
24126 l_return_status := OKL_API.G_RET_STS_ERROR;
24127 END IF;
24128 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24129 RAISE OKL_API.G_EXCEPTION_ERROR;
24130 END IF;
24131 x_return_status := l_return_status;
24132 OKL_API.END_ACTIVITY (x_msg_count,
24133 x_msg_data );
24134 EXCEPTION
24135 WHEN OKL_API.G_EXCEPTION_ERROR THEN
24136 IF c_get_sll_lines_csr%ISOPEN THEN
24137 CLOSE c_get_sll_lines_csr;
24138 END IF;
24139 IF c_get_slh_lines_csr%ISOPEN THEN
24140 CLOSE c_get_slh_lines_csr;
24141 END IF;
24142 IF c_get_all_lines_csr%ISOPEN THEN
24143 CLOSE c_get_all_lines_csr;
24144 END IF;
24145 IF c_get_pay_psth_csr%ISOPEN THEN
24146 CLOSE c_get_pay_psth_csr;
24147 END IF;
24148 IF c_valid_khr_csr%ISOPEN THEN
24149 CLOSE c_valid_khr_csr;
24150 END IF;
24151 IF c_get_psth_csr%ISOPEN THEN
24152 CLOSE c_get_psth_csr;
24153 END IF;
24154 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
24155 l_api_name,
24156 G_PKG_NAME,
24157 'OKL_API.G_RET_STS_ERROR',
24158 x_msg_count,
24159 x_msg_data,
24160 '_PVT');
24161 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
24162 IF c_get_sll_lines_csr%ISOPEN THEN
24163 CLOSE c_get_sll_lines_csr;
24164 END IF;
24165 IF c_get_slh_lines_csr%ISOPEN THEN
24166 CLOSE c_get_slh_lines_csr;
24167 END IF;
24168 IF c_get_all_lines_csr%ISOPEN THEN
24169 CLOSE c_get_all_lines_csr;
24170 END IF;
24171 IF c_get_pay_psth_csr%ISOPEN THEN
24172 CLOSE c_get_pay_psth_csr;
24173 END IF;
24174 IF c_valid_khr_csr%ISOPEN THEN
24175 CLOSE c_valid_khr_csr;
24176 END IF;
24177 IF c_get_psth_csr%ISOPEN THEN
24178 CLOSE c_get_psth_csr;
24179 END IF;
24180 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
24181 l_api_name,
24182 G_PKG_NAME,
24183 'OKL_API.G_RET_STS_UNEXP_ERROR',
24184 x_msg_count,
24185 x_msg_data,
24186 '_PVT');
24187 WHEN OTHERS THEN
24188 IF c_get_sll_lines_csr%ISOPEN THEN
24189 CLOSE c_get_sll_lines_csr;
24190 END IF;
24191 IF c_get_slh_lines_csr%ISOPEN THEN
24192 CLOSE c_get_slh_lines_csr;
24193 END IF;
24194 IF c_get_all_lines_csr%ISOPEN THEN
24195 CLOSE c_get_all_lines_csr;
24196 END IF;
24197 IF c_get_pay_psth_csr%ISOPEN THEN
24198 CLOSE c_get_pay_psth_csr;
24199 END IF;
24200 IF c_valid_khr_csr%ISOPEN THEN
24201 CLOSE c_valid_khr_csr;
24202 END IF;
24203 IF c_get_psth_csr%ISOPEN THEN
24204 CLOSE c_get_psth_csr;
24205 END IF;
24206 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
24207 l_api_name,
24208 G_PKG_NAME,
24209 'OTHERS',
24210 x_msg_count,
24211 x_msg_data,
24212 '_PVT');
24213 END validate_payments;
24214
24215 -------------------------------------------------------------------------------------------------
24216 -- Start of Commnets
24217 -- Badrinath Kuchibholta
24218 -- Procedure Name : get_so_asset_oec1
24219 -- Description : get_so_asset_oec1
24220 -- Business Rules :
24221 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
24222 -- Version :
24223 -- End of Commnets
24224 -------------------------------------------------------------------------------------------------
24225 PROCEDURE get_so_asset_oec1(p_khr_id IN NUMBER,
24226 p_kle_id IN NUMBER,
24227 p_subside_yn IN VARCHAR2,
24228 x_return_status OUT NOCOPY VARCHAR2,
24229 x_asset_oec OUT NOCOPY NUMBER,
24230 x_start_date OUT NOCOPY DATE)
24231 IS
24232 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
24233 l_msg_count NUMBER;
24234 l_msg_data VARCHAR2(32767);
24235 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_DISCOUNT';
24236 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
24237 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
24238 l_api_version NUMBER := 0;
24239 l_dis_amt NUMBER := 0;
24240 l_tot_oec_amt NUMBER := 0;
24241 CURSOR get_oec_csr (p_khr_id NUMBER,
24242 p_kle_id NUMBER)
24243 IS
24244 SELECT kle_rv.id asset_line_id,
24245 kle_rv.oec oec,
24246 cle_so.START_DATE
24247 FROM okc_k_headers_b chr_rv,
24248 okc_line_styles_b lse_rv,
24249 okl_k_lines kle_rv,
24250 okc_k_lines_b cle_rv,
24251 okc_rules_b rul_rv,
24252 okc_rule_groups_b rgp_rv,
24253 okc_line_styles_b lse_so,
24254 okc_k_lines_b cle_so,
24255 okc_rules_b rul_so,
24256 okc_rule_groups_b rgp_so
24257 WHERE rgp_so.cle_id = p_kle_id
24258 AND rgp_so.dnz_chr_id = p_khr_id
24259 AND rgp_so.rgd_code = 'SOPYSC'
24260 AND rgp_so.dnz_chr_id = rul_so.dnz_chr_id
24261 AND rgp_so.id = rul_so.rgp_id
24262 AND rul_so.rule_information_category = 'SOPMSC'
24263 AND rgp_so.cle_id = cle_so.id
24264 AND cle_so.dnz_chr_id = rul_so.dnz_chr_id
24265 AND cle_so.lse_id = lse_so.id
24266 AND lse_so.lty_code = 'SO_PAYMENT'
24267 AND rul_rv.object1_id1 = to_char(rul_so.id)
24268 AND rul_rv.dnz_chr_id = rul_so.dnz_chr_id
24269 AND rul_rv.rgp_id = rgp_rv.id
24270 AND rgp_rv.rgd_code = 'SOPSAD'
24271 AND rgp_rv.dnz_chr_id = rul_so.dnz_chr_id
24272 AND rgp_rv.cle_id = cle_rv.id
24273 AND cle_rv.lse_id = lse_rv.id
24274 AND lse_rv.lty_code = 'FREE_FORM1'
24275 AND rgp_rv.dnz_chr_id = chr_rv.id
24276 AND chr_rv.START_DATE = cle_rv.START_DATE
24277 AND cle_rv.id = kle_rv.id;
24278 BEGIN
24279 IF p_subside_yn NOT IN ('Y','N') THEN
24280 OKL_API.set_message(p_app_name => G_APP_NAME,
24281 p_msg_name => G_INVALID_VALUE,
24282 p_token1 => G_COL_NAME_TOKEN,
24283 p_token1_value => 'p_subside_yn');
24284 RAISE OKL_API.G_EXCEPTION_ERROR;
24285 END IF;
24286 FOR get_oec_rec IN get_oec_csr(p_khr_id => p_khr_id,
24287 p_kle_id => p_kle_id) LOOP
24288 IF p_subside_yn = 'Y' THEN
24289 execute_formula(p_api_version => l_api_version,
24290 p_init_msg_list => OKL_API.G_TRUE,
24291 x_return_status => l_return_status,
24292 x_msg_count => l_msg_count,
24293 x_msg_data => l_msg_data,
24294 p_formula_name => G_FORMULA_DIS,
24295 p_contract_id => p_khr_id,
24296 p_line_id => get_oec_rec.asset_line_id,
24297 x_value => l_dis_amt);
24298 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
24299 OKL_API.set_message(p_app_name => G_APP_NAME,
24300 p_msg_name => G_CALC_AMOUNT);
24301 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
24302 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
24303 OKL_API.set_message(p_app_name => G_APP_NAME,
24304 p_msg_name => G_CALC_AMOUNT);
24305 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_ERROR);
24306 END IF;
24307 l_tot_oec_amt := l_tot_oec_amt + (get_oec_rec.oec - nvl(l_dis_amt,0));
24308 ELSE
24309 l_tot_oec_amt := l_tot_oec_amt + get_oec_rec.oec;
24310 END IF;
24311 x_start_date := get_oec_rec.START_DATE;
24312 END LOOP;
24313 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24314 RAISE OKL_API.G_EXCEPTION_ERROR;
24315 END IF;
24316 x_asset_oec := l_tot_oec_amt;
24317 IF NVL(x_asset_oec,0) = 0 THEN
24318 OKL_API.set_message(p_app_name => G_APP_NAME,
24319 p_msg_name => G_CALC_AMOUNT);
24320 RAISE OKL_API.G_EXCEPTION_ERROR;
24321 END IF;
24322 x_return_status := l_return_status;
24323 EXCEPTION
24324 WHEN OKL_API.G_EXCEPTION_ERROR THEN
24325 IF get_oec_csr%ISOPEN THEN
24326 CLOSE get_oec_csr;
24327 END IF;
24328 x_return_status := OKL_API.G_RET_STS_ERROR;
24329 WHEN OTHERS THEN
24330 IF get_oec_csr%ISOPEN THEN
24331 CLOSE get_oec_csr;
24332 END IF;
24333 x_return_status := OKL_API.G_RET_STS_ERROR;
24334 END get_so_asset_oec1;
24335 -------------------------------------------------------------------------------------------------
24336 -- Start of Commnets
24337 -- Badrinath Kuchibholta
24338 -- Procedure Name : get_so_residual_value1
24339 -- Description : get_so_residual_value1
24340 -- Business Rules :
24341 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
24342 -- Version :
24343 -- End of Commnets
24344 -------------------------------------------------------------------------------------------------
24345 PROCEDURE get_so_residual_value1(p_khr_id IN NUMBER,
24346 p_kle_id IN NUMBER,
24347 p_subside_yn IN VARCHAR2,
24348 x_return_status OUT NOCOPY VARCHAR2,
24349 x_residual_value OUT NOCOPY NUMBER,
24350 x_start_date OUT NOCOPY DATE)
24351 IS
24352 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
24353 l_msg_count NUMBER;
24354 l_msg_data VARCHAR2(32767);
24355 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_DISCOUNT';
24356 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
24357 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
24358 l_api_version NUMBER := 0;
24359 l_dis_amt NUMBER := 0;
24360 l_res_val NUMBER := 0;
24361 l_tot_res_val NUMBER := 0;
24362 --start changed by abhsaxen for Bug#6174484
24363 CURSOR get_rvs_csr (p_khr_id NUMBER,
24364 p_kle_id NUMBER)
24365 IS
24366 SELECT kle_rv.id asset_line_id,
24367 kle_rv.oec oec,
24368 kle_rv.residual_percentage residual_percent,
24369 cle_so.start_date
24370 FROM okc_k_headers_b chr_rv,
24371 okc_line_styles_b lse_rv,
24372 okl_k_lines kle_rv,
24373 okc_k_lines_b cle_rv,
24374 okc_rules_b rul_rv,
24375 okc_rule_groups_b rgp_rv,
24376 okc_line_styles_b lse_so,
24377 okc_k_lines_b cle_so,
24378 okc_rules_b rul_so,
24379 okc_rule_groups_b rgp_so
24380 WHERE rgp_so.cle_id = p_kle_id
24381 AND rgp_so.dnz_chr_id = p_khr_id
24382 AND rgp_so.rgd_code = 'SOPYSC'
24383 AND rgp_so.dnz_chr_id = rul_so.dnz_chr_id
24384 AND rgp_so.id = rul_so.rgp_id
24385 AND rul_so.rule_information_category = 'SOPMSC'
24386 AND rgp_so.cle_id = cle_so.id
24387 AND cle_so.dnz_chr_id = rul_so.dnz_chr_id
24388 AND cle_so.lse_id = lse_so.id
24389 AND lse_so.lty_code = 'SO_PAYMENT'
24390 AND rul_rv.object1_id1 = to_char(rul_so.id)
24391 AND rul_rv.dnz_chr_id = rul_so.dnz_chr_id
24392 AND rul_rv.rgp_id = rgp_rv.id
24393 AND rgp_rv.rgd_code = 'SOPSAD'
24394 AND rgp_rv.dnz_chr_id = cle_rv.dnz_chr_id
24395 AND rgp_rv.cle_id = cle_rv.id
24396 AND cle_rv.lse_id = lse_rv.id
24397 AND lse_rv.lty_code = 'FREE_FORM1'
24398 AND rgp_rv.dnz_chr_id = chr_rv.id
24399 AND chr_rv.start_date = cle_rv.start_date
24400 AND cle_rv.id = kle_rv.id;
24401 --end changed by abhsaxen for Bug#6174484
24402 BEGIN
24403 IF p_subside_yn NOT IN ('Y','N') THEN
24404 OKL_API.set_message(p_app_name => G_APP_NAME,
24405 p_msg_name => G_INVALID_VALUE,
24406 p_token1 => G_COL_NAME_TOKEN,
24407 p_token1_value => 'p_subside_yn');
24408 RAISE OKL_API.G_EXCEPTION_ERROR;
24409 END IF;
24410
24411 FOR get_rvs_rec IN get_rvs_csr(p_khr_id => p_khr_id,
24412 p_kle_id => p_kle_id) LOOP
24413 IF p_subside_yn = 'Y' THEN
24414 execute_formula(p_api_version => l_api_version,
24415 p_init_msg_list => OKL_API.G_TRUE,
24416 x_return_status => l_return_status,
24417 x_msg_count => l_msg_count,
24418 x_msg_data => l_msg_data,
24419 p_formula_name => G_FORMULA_DIS,
24420 p_contract_id => p_khr_id,
24421 p_line_id => get_rvs_rec.asset_line_id,
24422 x_value => l_dis_amt);
24423 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
24424 OKL_API.set_message(p_app_name => G_APP_NAME,
24425 p_msg_name => G_CALC_AMOUNT);
24426 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
24427 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
24428 OKL_API.set_message(p_app_name => G_APP_NAME,
24429 p_msg_name => G_CALC_AMOUNT);
24430 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_ERROR);
24431 END IF;
24432 IF get_rvs_rec.residual_percent IS NOT NULL THEN
24433 l_res_val := get_rvs_rec.residual_percent * (get_rvs_rec.oec - nvl(l_dis_amt,0)) /100;
24434 l_tot_res_val := l_tot_res_val + l_res_val;
24435 ELSE
24436 l_tot_res_val := 0;
24437 EXIT;
24438 END IF;
24439 ELSE
24440 IF get_rvs_rec.residual_percent IS NOT NULL THEN
24441 l_res_val := get_rvs_rec.residual_percent * get_rvs_rec.oec /100;
24442 l_tot_res_val := l_tot_res_val + l_res_val;
24443 ELSE
24444 l_tot_res_val := 0;
24445 EXIT;
24446 END IF;
24447 END IF;
24448 x_start_date := get_rvs_rec.START_DATE;
24449 END LOOP;
24450 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
24451 RAISE OKL_API.G_EXCEPTION_ERROR;
24452 END IF;
24453 x_residual_value := l_tot_res_val;
24454 IF (x_residual_value IS NULL) THEN -- bug# 3381546.
24455 OKL_API.set_message(p_app_name => G_APP_NAME,
24456 p_msg_name => G_INVALID_VALUE,
24457 p_token1 => G_COL_NAME_TOKEN,
24458 p_token1_value => 'Residual Value');
24459 RAISE OKL_API.G_EXCEPTION_ERROR;
24460 END IF;
24461 x_return_status := l_return_status;
24462 EXCEPTION
24463 WHEN OKL_API.G_EXCEPTION_ERROR THEN
24464 IF get_rvs_csr%ISOPEN THEN
24465 CLOSE get_rvs_csr;
24466 END IF;
24467 x_return_status := OKL_API.G_RET_STS_ERROR;
24468 WHEN OTHERS THEN
24469 IF get_rvs_csr%ISOPEN THEN
24470 CLOSE get_rvs_csr;
24471 END IF;
24472 x_return_status := OKL_API.G_RET_STS_ERROR;
24473 END get_so_residual_value1;
24474
24475 -------------------------------------------------------------------------------------------------
24476 -- Start of Commnets
24477 -- Santhosh Siruvole
24478 -- Procedure Name : get_so_asset_oec
24479 -- Description : get_so_asset_oec
24480 -- Business Rules :
24481 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
24482 -- Version :
24483 -- End of Commnets
24484 -------------------------------------------------------------------------------------------------
24485 PROCEDURE get_so_residual_value(p_khr_id IN NUMBER,
24486 p_kle_id IN NUMBER,
24487 p_subside_yn IN VARCHAR2,
24488 x_return_status OUT NOCOPY VARCHAR2,
24489 x_residual_value OUT NOCOPY NUMBER,
24490 x_start_date OUT NOCOPY DATE)
24491 IS
24492 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
24493 l_msg_count NUMBER;
24494 l_msg_data VARCHAR2(32767);
24495 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
24496 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
24497 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
24498 l_api_version NUMBER := 0;
24499
24500 Cursor khr_type_csr IS
24501 Select SCS_CODE,
24502 START_DATE
24503 From okc_K_headers_b chr
24504 Where chr.id = p_khr_id;
24505
24506 khr_type_rec khr_type_csr%ROWTYPE;
24507
24508 Begin
24509
24510 OPEN khr_type_csr;
24511 FETCH khr_type_csr INTO khr_type_rec;
24512 CLOSE khr_type_csr;
24513
24514 IF (INSTR( khr_type_rec.scs_code, 'LEASE') > 0) THEN
24515 execute_formula(p_api_version => 1.0,
24516 p_init_msg_list => OKL_API.G_TRUE,
24517 x_return_status => l_return_status,
24518 x_msg_count => l_msg_count,
24519 x_msg_data => l_msg_data,
24520 p_formula_name => 'LINE_RESIDUAL_VALUE',
24521 p_contract_id => p_khr_id,
24522 p_line_id => p_kle_id,
24523 x_value => x_residual_value);
24524 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
24525 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
24526 ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
24527 RAISE OKL_API.G_EXCEPTION_ERROR;
24528 END IF;
24529
24530 x_start_date := khr_type_rec.start_date;
24531
24532 Else
24533
24534 get_so_residual_value1(p_khr_id => p_khr_id,
24535 p_kle_id => p_kle_id,
24536 p_subside_yn => p_subside_yn,
24537 x_return_status => x_return_status,
24538 x_residual_value => x_residual_value,
24539 x_start_date => x_start_date);
24540
24541 End If;
24542
24543 EXCEPTION
24544 WHEN OKL_API.G_EXCEPTION_ERROR THEN
24545 IF khr_type_csr%ISOPEN THEN
24546 CLOSE khr_type_csr;
24547 END IF;
24548 x_return_status := OKL_API.G_RET_STS_ERROR;
24549 WHEN OTHERS THEN
24550 IF khr_type_csr%ISOPEN THEN
24551 CLOSE khr_type_csr;
24552 END IF;
24553 x_return_status := OKL_API.G_RET_STS_ERROR;
24554
24555 End get_so_residual_value;
24556
24557 -------------------------------------------------------------------------------------------------
24558 -- Start of Commnets
24559 -- Santhosh Siruvole
24560 -- Procedure Name : get_so_asset_oec
24561 -- Description : get_so_asset_oec
24562 -- Business Rules :
24563 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
24564 -- Version :
24565 -- End of Commnets
24566 -------------------------------------------------------------------------------------------------
24567 PROCEDURE get_so_asset_oec(p_khr_id IN NUMBER,
24568 p_kle_id IN NUMBER,
24569 p_subside_yn IN VARCHAR2,
24570 x_return_status OUT NOCOPY VARCHAR2,
24571 x_asset_oec OUT NOCOPY NUMBER,
24572 x_start_date OUT NOCOPY DATE)
24573 IS
24574 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
24575 l_msg_count NUMBER;
24576 l_msg_data VARCHAR2(32767);
24577 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
24578 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
24579 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
24580 l_api_version NUMBER := 0;
24581
24582 Cursor khr_type_csr IS
24583 Select SCS_CODE,
24584 START_DATE
24585 From okc_K_headers_b chr
24586 Where chr.id = p_khr_id;
24587
24588 khr_type_rec khr_type_csr%ROWTYPE;
24589
24590 Begin
24591
24592 OPEN khr_type_csr;
24593 FETCH khr_type_csr INTO khr_type_rec;
24594 CLOSE khr_type_csr;
24595
24596 IF (INSTR( khr_type_rec.scs_code, 'LEASE') > 0) THEN
24597 execute_formula(p_api_version => 1.0,
24598 p_init_msg_list => OKL_API.G_TRUE,
24599 x_return_status => l_return_status,
24600 x_msg_count => l_msg_count,
24601 x_msg_data => l_msg_data,
24602 p_formula_name => 'LINE_CAP_AMNT',
24603 p_contract_id => p_khr_id,
24604 p_line_id => p_kle_id,
24605 x_value => x_asset_oec);
24606 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
24607 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
24608 ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
24609 RAISE OKL_API.G_EXCEPTION_ERROR;
24610 END IF;
24611
24612 x_start_date := khr_type_rec.start_date;
24613
24614 Else
24615
24616 get_so_asset_oec1(p_khr_id => p_khr_id,
24617 p_kle_id => p_kle_id,
24618 p_subside_yn => p_subside_yn,
24619 x_return_status => x_return_status,
24620 x_asset_oec => x_asset_oec,
24621 x_start_date => x_start_date);
24622
24623 End If;
24624
24625 EXCEPTION
24626 WHEN OKL_API.G_EXCEPTION_ERROR THEN
24627 IF khr_type_csr%ISOPEN THEN
24628 CLOSE khr_type_csr;
24629 END IF;
24630 x_return_status := OKL_API.G_RET_STS_ERROR;
24631 WHEN OTHERS THEN
24632 IF khr_type_csr%ISOPEN THEN
24633 CLOSE khr_type_csr;
24634 END IF;
24635 x_return_status := OKL_API.G_RET_STS_ERROR;
24636
24637 End get_so_asset_oec;
24638
24639 -------------------------------------------------------------------------------------------------
24640 -- Start of Commnets
24641 -- Badrinath Kuchibholta
24642 -- Procedure Name : extract_params_so
24643 -- Description : extract_params_so
24644 -- Business Rules :
24645 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
24646 -- Version :
24647 -- End of Commnets
24648 -------------------------------------------------------------------------------------------------
24649 PROCEDURE extract_params_so(
24650 p_api_version IN NUMBER,
24651 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
24652 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
24653 p_cle_id IN OKC_K_LINES_B.ID%TYPE,
24654 x_return_status OUT NOCOPY VARCHAR2,
24655 x_msg_count OUT NOCOPY NUMBER,
24656 x_msg_data OUT NOCOPY VARCHAR2,
24657 x_csm_lease_header OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
24658 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
24659 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
24660 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
24661 x_req_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
24662 x_csm_line_details_tbl OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
24663 x_rents_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
24664 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
24665 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
24666 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type)
24667 IS
24668 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_SO';
24669 lv_fed_only VARCHAR2(3) := 'N';
24670 ln_value NUMBER := 0;
24671 -- Start of BAKUCHIB modification bug#3121708
24672 ln_diff_days NUMBER := 0;
24673 ld_last_start_date okc_k_headers_b.start_date%TYPE;
24674 ld_last_end_date okc_k_headers_b.start_date%TYPE;
24675 ld_chr_end_date okc_k_headers_b.end_date%TYPE;
24676 -- End of BAKUCHIB modification bug#3121708
24677 lv_fed_only_tax_book OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
24678 ln_org_id okc_k_headers_b.authoring_org_id%TYPE;
24679 lv_currency_code okc_k_headers_b.currency_code%TYPE;
24680 l_rnd_basis_percent NUMBER;
24681 l_level_type NUMBER;
24682 l_strm_name VARCHAR2(200);
24683 ln_fin_yn NUMBER := 0;
24684 i BINARY_INTEGER := 0;
24685 j BINARY_INTEGER := 0;
24686 k BINARY_INTEGER := 0;
24687 l BINARY_INTEGER := 0;
24688 m BINARY_INTEGER := 0;
24689 idx BINARY_INTEGER := 0;
24690 l_basis_percent NUMBER;
24691 styid NUMBER;
24692 --l_sty_id NUMBER;
24693 l_sty_id strm_rec_type;
24694 l_salvage NUMBER;
24695 l_purchase_option VARCHAR2(256);
24696 l_deal_type VARCHAR2(256) := NULL;
24697 l_purchase_option_amount NUMBER;
24698 l_value OKL_K_LINES.CAPITAL_AMOUNT%TYPE;
24699 ld_asset_start_date DATE;
24700 l_tot_asset_oec NUMBER := 0;
24701 l_asset_oec NUMBER := 0;
24702 l_cap_fee_amt NUMBER := 0;
24703 l_total_lending NUMBER := 0;
24704 l_lending NUMBER := 0;
24705 l_lne_tot_lend NUMBER := 0;
24706 l_tradein OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
24707 l_capreduc OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
24708 l_feecap OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
24709 l_capint OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
24710 l_discount OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
24711 l_corp_dep_cost OKL_TXL_ASSETS_B.DEPRECIATION_COST%TYPE := 0;
24712 l_tax_dep_cost OKL_TXD_ASSETS_B.COST%TYPE := 0;
24713 l_lease_tax_owner okc_rules_b.rule_information1%TYPE := NULL;
24714 -- get the Contract Header info
24715 CURSOR l_hdr_csr(chrId NUMBER)
24716 IS
24717 SELECT chr.orig_system_source_code,
24718 chr.start_date,
24719 chr.end_date,
24720 chr.template_yn,
24721 chr.authoring_org_id,
24722 chr.inv_organization_id,
24723 khr.deal_type,
24724 pdt.id pid,
24725 NVL(pdt.reporting_pdt_id, -1) report_pdt_id,
24726 chr.currency_code currency_code,
24727 khr.term_duration term
24728 FROM okc_k_headers_v chr,
24729 okl_k_headers khr,
24730 okl_products_v pdt
24731 WHERE khr.id = chr.id
24732 AND chr.id = chrId
24733 AND khr.pdt_id = pdt.id(+);
24734 -- get the Header rule information
24735 CURSOR l_hdrrl_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
24736 rlcat okc_rules_b.rule_information_category%TYPE,
24737 chrId NUMBER)
24738 IS
24739 SELECT crl.object1_id1,
24740 crl.rule_information1,
24741 crl.rule_information2,
24742 crl.rule_information3,
24743 crl.rule_information4,
24744 crl.rule_information5,
24745 crl.rule_information6,
24746 crl.rule_information10,
24747 crl.rule_information13,
24748 crl.rule_information11
24749 FROM okc_rule_groups_b crg,
24750 okc_rules_b crl
24751 WHERE crl.rgp_id = crg.id
24752 AND crg.rgd_code = rgcode
24753 AND crl.rule_information_category = rlcat
24754 AND crg.dnz_chr_id = chrId;
24755 -- get the install based location
24756 CURSOR ib_csr (chrId NUMBER)
24757 IS
24758 SELECT DISTINCT hl.country country
24759 FROM hz_locations hl,
24760 hz_party_sites hps,
24761 hz_party_site_uses hpsu,
24762 okl_txl_itm_insts iti,
24763 okc_line_styles_b lse_ib,
24764 okc_k_lines_b cle_ib
24765 WHERE cle_ib.dnz_chr_id = chrId
24766 AND cle_ib.lse_id = lse_ib.id
24767 AND lse_ib.lty_code = 'INST_ITEM'
24768 AND iti.kle_id = cle_ib.id
24769 AND iti.object_id1_new = hpsu.party_site_use_id
24770 AND iti.object_id2_new = '#'
24771 AND hpsu.party_site_id = hps.party_site_id
24772 AND hps.location_id = hl.location_id;
24773 -- get the Contract line info
24774 CURSOR l_line_rec_csr(chrid NUMBER, lnetype VARCHAR2)
24775 IS
24776 SELECT kle.id,
24777 kle.oec,
24778 kle.residual_code,
24779 kle.capital_amount,
24780 kle.delivered_date,
24781 kle.date_funding_required,
24782 kle.residual_grnty_amount,
24783 kle.residual_code guarantee_type,
24784 kle.date_funding,
24785 kle.residual_value,
24786 kle.amount,
24787 kle.price_negotiated,
24788 kle.start_date,
24789 kle.end_date,
24790 kle.orig_system_id1,
24791 kle.fee_type,
24792 kle.initial_direct_cost,
24793 tl.item_description,
24794 tl.name
24795 FROM okl_k_lines_full_v kle,
24796 okc_line_styles_b lse,
24797 okc_k_lines_tl tl,
24798 okc_statuses_b sts
24799 WHERE kle.lse_id = lse.id
24800 AND lse.lty_code = lnetype
24801 AND tl.id = kle.id
24802 AND tl.language = userenv('LANG')
24803 AND kle.dnz_chr_id = chrid
24804 AND sts.code = kle.sts_code
24805 --Start of bug#3121708 modification BAKUCHIB
24806 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
24807 --End of bug#3121708 modification BAKUCHIB
24808
24809 -- get the Contract line info
24810 CURSOR l_so_line_rec_csr(p_chr_id NUMBER, p_cle_id NUMBER)
24811 IS
24812 SELECT kle.id,
24813 kle.oec,
24814 kle.residual_code,
24815 kle.capital_amount,
24816 kle.delivered_date,
24817 kle.date_funding_required,
24818 kle.residual_grnty_amount,
24819 kle.date_funding,
24820 kle.residual_value,
24821 kle.amount,
24822 kle.price_negotiated,
24823 kle.start_date,
24824 kle.end_date,
24825 kle.orig_system_id1,
24826 kle.fee_type,
24827 kle.initial_direct_cost,
24828 tl.item_description,
24829 tl.name
24830 FROM okl_k_lines_full_v kle,
24831 okc_line_styles_b lse,
24832 okc_k_lines_tl tl,
24833 okc_statuses_b sts
24834 WHERE kle.lse_id = lse.id
24835 AND lse.lty_code = 'SO_PAYMENT'
24836 AND kle.id = p_cle_id
24837 AND tl.id = kle.id
24838 AND tl.language = userenv('LANG')
24839 AND kle.dnz_chr_id = p_chr_id
24840 AND sts.code = kle.sts_code
24841 --Start of bug#3121708 modification BAKUCHIB
24842 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
24843 --End of bug#3121708 modification BAKUCHIB
24844
24845 -- get the txl transaction information
24846 CURSOR l_tx_csr(ass VARCHAR2)
24847 IS
24848 SELECT txl.life_in_months,
24849 txl.corporate_book,
24850 txl.deprn_method,
24851 txl.in_service_date,
24852 txl.salvage_value,
24853 txl.percent_salvage_value,
24854 txl.depreciation_cost,
24855 mth.id1,
24856 ct.prorate_convention_code
24857 FROM okl_txl_assets_b txl,
24858 okx_asst_dep_methods_v mth,
24859 okx_ast_ct_bk_dfs_v ct
24860 WHERE mth.method_code = txl.deprn_method
24861 AND mth.life_in_months = txl.life_in_months
24862 AND ct.category_id = txl.depreciation_id
24863 AND ct.book_type_code = txl.corporate_book
24864 AND txl.asset_number = ass
24865 -- Start of Bug#3388812 Modification - BAKUCHIB
24866 AND txl.in_service_date BETWEEN ct.start_dpis AND NVL(ct.end_dpis,txl.in_service_date);
24867 -- End of Bug#3388812 Modification - BAKUCHIB
24868 -- get the txd transaction information
24869 CURSOR l_txd_csr(ass VARCHAR2)
24870 IS
24871 SELECT txd.cost,
24872 txd.deprn_method_tax,
24873 txd.life_in_months_tax,
24874 txd.salvage_value,
24875 txd.tax_book,
24876 mth.id1
24877 FROM okl_txd_assets_v txd,
24878 okx_asst_dep_methods_v mth
24879 WHERE mth.method_code = txd.deprn_method_tax
24880 AND mth.life_in_months = txd.life_in_months_tax
24881 AND txd.asset_number = ass;
24882 -- get the setup values for tax book and coporate book
24883 CURSOR l_txtrans_csr (Book Varchar2)
24884 IS
24885 SELECT trns.value,
24886 books.book_type_code
24887 FROM okl_sgn_translations trns,
24888 fa_book_controls books
24889 WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
24890 AND trns.object1_id1 = books.book_type_code
24891 AND trns.sgn_code = 'STMP'
24892 AND books.book_type_code = Book;
24893 -- Get the stream type id
24894 CURSOR l_strmid_csr (strmName VARCHAR2)
24895 IS
24896 SELECT id styid
24897 FROM okl_strm_type_tl
24898 WHERE LANGUAGE = 'US'
24899 AND NAME = strmName;
24900 -- get Stream name
24901 CURSOR strm_name_csr (styid NUMBER)
24902 IS
24903 SELECT tl.name name,
24904 stm.stream_type_class stream_type_class,
24905 stm.stream_type_purpose,
24906 tl.description alloc_basis,
24907 stm.capitalize_yn capitalize_yn,
24908 stm.periodic_yn periodic_yn
24909 FROM okl_strm_type_b stm,
24910 okl_strm_type_tl tl
24911 WHERE tl.id = stm.id
24912 AND tl.language = 'US'
24913 AND stm.id = styid;
24914 -- get the LASLH self referencing Line based rule information
24915 CURSOR l_rl_csr1(rgcode okc_rule_groups_b.rgd_code%TYPE,
24916 rlcat okc_rules_b.rule_information_category%TYPE,
24917 chrId NUMBER,
24918 cleId NUMBER )
24919 IS
24920 SELECT crl.id slh_id,
24921 crl.object1_id1,
24922 crl.rule_information1,
24923 crl.rule_information2,
24924 crl.rule_information3,
24925 crl.rule_information5,
24926 crl.rule_information6,
24927 crl.rule_information7,
24928 crl.rule_information8,
24929 crl.rule_information13,
24930 crl.rule_information10
24931 FROM okc_rule_groups_b crg,
24932 okc_rules_b crl
24933 WHERE crl.rgp_id = crg.id
24934 AND crg.rgd_code = rgcode
24935 AND crl.rule_information_category = rlcat
24936 AND crg.dnz_chr_id = chrId
24937 AND crg.cle_id = cleId
24938 ORDER BY crl.rule_information1;
24939 -- get the LASLL self referencing Line based rule information
24940 CURSOR l_rl_csr(rlgpId NUMBER,
24941 rgcode okc_rule_groups_b.rgd_code%TYPE,
24942 rlcat okc_rules_b.rule_information_category%TYPE,
24943 chrId NUMBER,
24944 cleId NUMBER )
24945 IS
24946 SELECT crl.object1_id1,
24947 crl.rule_information1,
24948 crl.rule_information2,
24949 crl.rule_information3,
24950 crl.rule_information5,
24951 crl.rule_information6,
24952 crl.rule_information7,
24953 crl.rule_information8,
24954 crl.rule_information13,
24955 crl.rule_information10
24956 FROM okc_rule_groups_b crg,
24957 okc_rules_b crl
24958 WHERE crl.rgp_id = crg.id
24959 AND crl.object2_id1 = rlgpId
24960 AND crg.rgd_code = rgcode
24961 AND crl.rule_information_category = rlcat
24962 AND crg.dnz_chr_id = chrId
24963 AND crg.cle_id = cleId
24964 ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
24965 -- Get Structure
24966 CURSOR l_struct_csr(chrId NUMBER)
24967 IS
24968 SELECT DISTINCT(nvl(crl.rule_information5,-1)) structure
24969 FROM okc_rule_groups_b crg,
24970 okc_rules_b crl
24971 WHERE crl.rgp_id = crg.id
24972 AND crg.rgd_code = 'LALEVL'
24973 AND crl.rule_information_category = 'LASLL'
24974 AND crg.dnz_chr_id = chrId;
24975 -- To check if the chr_id has Financed fee feetype defined
24976 CURSOR l_financed_type_csr (chrId NUMBER)
24977 IS
24978 SELECT 1
24979 FROM dual
24980 WHERE EXISTS (SELECT 1
24981 FROM okc_k_lines_b cle,
24982 okc_line_styles_b lse,
24983 okl_k_lines kle
24984 WHERE cle.dnz_chr_id = chrId
24985 AND cle.lse_id = lse.id
24986 AND lse.lty_code = 'FEE'
24987 AND cle.id = kle.id
24988 AND kle.fee_type in ('ROLLOVER', 'FINANCED'));
24989 -- get the currency_code and Authoring_org_id
24990 -- from okc_k_headers_b
24991 CURSOR get_org_id(p_chr_id okc_k_headers_b.id%TYPE)
24992 IS
24993 SELECT authoring_org_id,
24994 currency_code
24995 FROM okc_k_headers_b
24996 WHERE id = p_chr_id;
24997 -- Get Capitalized fees amount for a contract
24998 CURSOR get_cap_fee_amt(p_chr_id okc_k_headers_b.id%TYPE)
24999 IS
25000 SELECT NVL(kle.amount, 0) total_cap_fee
25001 FROM okl_k_lines kle,
25002 okc_k_lines_b cle,
25003 okc_k_items cim,
25004 okl_strm_type_b sty
25005 WHERE cle.dnz_chr_id = p_chr_id
25006 AND cle.id = kle.id
25007 AND cle.id = cim.cle_id
25008 AND cim.jtot_object1_code = 'OKL_STRMTYP'
25009 AND cim.object1_id1 = to_char(sty.id)
25010 AND sty.capitalize_yn = 'Y';
25011 -- get line oec
25012 -- nikshah -- Bug # 5484903 Fixed,
25013 -- Removed CURSOR get_oec_csr
25014
25015 -- Start of BAKUCHIB modification bug#3121708
25016 -- Get diff in days between contract end_date
25017 -- and max payment leve(LASLL) end_date
25018 CURSOR c_diff_days_csr(p_chr_id okc_k_headers_b.id%TYPE,
25019 p_cle_id okc_k_lines_b.id%TYPE,
25020 p_slh_id okc_rule_groups_b.id%TYPE)
25021 IS
25022 SELECT chrv.end_date chr_end_date,
25023 MAX(FND_DATE.canonical_to_date(sll.rule_information2)) pay_start_date,
25024 MAX(DECODE(SLL.rule_information7,
25025 NULL,(ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1),
25026 TO_NUMBER(SLL.rule_information7),FND_DATE.canonical_to_date(sll.rule_information2)+SLL.rule_information7-1,
25027 (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1))) pay_end_date
25028 FROM okc_rules_b sll,
25029 okc_rules_b slh,
25030 okc_rule_groups_b rgp,
25031 okc_k_headers_b chrv
25032 WHERE rgp.dnz_chr_id = p_chr_id
25033 AND rgp.cle_id = p_cle_id
25034 AND slh.id = p_slh_id
25035 AND rgp.rgd_code = 'LALEVL'
25036 AND rgp.id = slh.rgp_id
25037 AND slh.rule_information_category = 'LASLH'
25038 AND TO_CHAR(slh.id) = sll.object2_id1
25039 AND sll.rule_information_category = 'LASLL'
25040 AND chrv.id = rgp.dnz_chr_id
25041 GROUP BY chrv.end_date;
25042 -- End of BAKUCHIB modification bug#3121708
25043 l_line_rec l_line_rec_csr%ROWTYPE;
25044 l_hdr_rec l_hdr_csr%ROWTYPE;
25045 l_rl_rec l_rl_csr%ROWTYPE;
25046 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
25047 l_rl_rec1 l_rl_csr1%ROWTYPE;
25048 l_tx_rec l_tx_csr%ROWTYPE;
25049 l_txd_rec l_txd_csr%ROWTYPE;
25050 l_txtrans_rec l_txtrans_csr%ROWTYPE;
25051 l_strm_name_rec strm_name_csr%ROWTYPE;
25052 l_ib_rec ib_csr%ROWTYPE;
25053 l_strmid_rec l_strmid_csr%ROWTYPE;
25054 l_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
25055 l_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
25056 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
25057 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
25058 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
25059 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
25060 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
25061 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
25062 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
25063 l_csm_loan_details_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
25064 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
25065
25066 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
25067
25068 --mansrini : Code for VR build
25069 CURSOR get_day_conv_on_contrct
25070 IS
25071 SELECT
25072 --Added by srsreeni for bug6076113
25073 -- rate_params.days_in_a_year_code,
25074 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
25075 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
25076 rate_params.days_in_a_year_code
25077 --srsreeni bug6076113 ends
25078 FROM okl_k_rate_params rate_params
25079 WHERE khr_id = p_chr_id;
25080
25081 CURSOR get_day_conv_on_sgt
25082 IS
25083 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
25084 gts.days_in_yr_code
25085 FROM
25086 okl_k_headers khr,
25087 okl_products_v pdt,
25088 okl_ae_tmpt_sets_v aes,
25089 OKL_ST_GEN_TMPT_SETS gts
25090 WHERE
25091 khr.pdt_id = pdt.id AND
25092 pdt.aes_id = aes.id AND
25093 aes.gts_id = gts.id AND
25094 khr.id = p_chr_id;
25095
25096 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
25097 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
25098
25099 BEGIN
25100 x_return_status := OKL_API.G_RET_STS_SUCCESS;
25101 -- Call start_activity to create savepoint, check compatibility
25102 -- and initialize message list
25103 x_return_status := OKL_API.START_ACTIVITY (
25104 l_api_name
25105 ,p_init_msg_list
25106 ,'_PVT'
25107 ,x_return_status);
25108 -- Check if activity started successfully
25109 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
25110 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25111 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
25112 RAISE OKL_API.G_EXCEPTION_ERROR;
25113 END IF;
25114 -- To get product id
25115 OPEN l_hdr_pdt_csr(p_chr_id);
25116 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
25117 CLOSE l_hdr_pdt_csr;
25118
25119 -- get Header info
25120 OPEN l_hdr_csr(p_chr_id);
25121 FETCH l_hdr_csr INTO l_hdr_rec;
25122 IF l_hdr_csr%NOTFOUND THEN
25123 okl_api.set_message(p_app_name => G_APP_NAME,
25124 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25125 p_token1 => G_COL_NAME_TOKEN,
25126 p_token1_value => 'Contract id');
25127 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25128 END IF;
25129 CLOSE l_hdr_csr;
25130
25131 --get day convention info : mansrini
25132 OPEN get_day_conv_on_contrct;
25133 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
25134 CLOSE get_day_conv_on_contrct;
25135
25136 --Added by srsreeni for bug6076113
25137 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
25138 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
25139 --srsreeni bug6076113 ends
25140 THEN
25141 OPEN get_day_conv_on_sgt;
25142 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
25143 CLOSE get_day_conv_on_sgt;
25144 END IF;
25145
25146 -- Validating the Deal type
25147 IF l_hdr_rec.deal_type IS NOT NULL OR
25148 l_hdr_rec.deal_type <> OKL_API.G_MISS_CHAR THEN
25149 l_deal_type := l_hdr_rec.deal_type;
25150 ELSE
25151 okl_api.set_message(p_app_name => G_APP_NAME,
25152 p_msg_name => G_REQUIRED_VALUE,
25153 p_token1 => G_COL_NAME_TOKEN,
25154 p_token1_value => 'Deal_type');
25155 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25156 END IF;
25157 IF l_deal_type IN ('LEASEDF','LEASEOP','LEASEST') THEN
25158 -- Get the Lease owner info
25159 OPEN l_hdrrl_csr('LATOWN', 'LATOWN',p_chr_id);
25160 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
25161 IF(l_hdrrl_csr%NOTFOUND) THEN
25162 okl_api.set_message(p_app_name => G_APP_NAME,
25163 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25164 p_token1 => G_COL_NAME_TOKEN,
25165 p_token1_value => 'Contract id');
25166 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25167 ELSIF l_hdrrl_csr%FOUND THEN
25168 l_csm_lease_header.irs_tax_treatment_method := l_hdrrl_rec.RULE_INFORMATION1;
25169 -- Start of Bug#3388812 modification - BAKUCHIB
25170 l_lease_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
25171 -- End of Bug#3388812 modification - BAKUCHIB
25172 END IF;
25173 CLOSE l_hdrrl_csr;
25174 -- Validating the Deal type
25175 IF l_hdr_rec.deal_type IS NOT NULL OR
25176 l_hdr_rec.deal_type <> OKL_API.G_MISS_CHAR THEN
25177 l_deal_type := l_hdr_rec.deal_type;
25178 ELSE
25179 l_csm_lease_header.irs_tax_treatment_method := 'LESSOR';
25180 END IF;
25181 l_csm_lease_header.khr_id := p_chr_id;
25182 l_csm_lease_header.date_payments_commencement := l_hdr_rec.start_date;
25183 l_csm_lease_header.fasb_acct_treatment_method := l_deal_type;
25184 l_csm_lease_header.date_delivery := l_hdr_rec.start_date;
25185 l_csm_lease_header.term := l_hdr_rec.term;
25186 l_csm_lease_header.pdt_id := l_hdr_rec.pid;
25187 -- Checking if the chr_id is having a financed fee to set
25188 -- the sif_code accordingly
25189 OPEN l_financed_type_csr (chrId => p_chr_id);
25190 FETCH l_financed_type_csr INTO ln_fin_yn;
25191 CLOSE l_financed_type_csr;
25192 IF ln_fin_yn = 1 THEN
25193 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_BOTH;
25194 ELSIF ln_fin_yn = 0 THEN
25195 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LESSOR;
25196 END IF;
25197 -- Getting the install base location
25198 OPEN ib_csr(p_chr_id);
25199 FETCH ib_csr INTO l_ib_rec;
25200 IF ib_csr%NOTFOUND THEN
25201 okl_api.set_message(p_app_name => G_APP_NAME,
25202 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25203 p_token1 => G_COL_NAME_TOKEN,
25204 p_token1_value => 'Contract id');
25205 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25206 END IF;
25207 CLOSE ib_csr;
25208 l_csm_lease_header.country := l_ib_rec.country;
25209 l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
25210 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_NO;
25211 -- Fetching the Header rule for Residual value insurance premium
25212 OPEN l_hdrrl_csr('LARVIN', 'LARVAU', TO_NUMBER(p_chr_id));
25213 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
25214 CLOSE l_hdrrl_csr;
25215 IF l_hdrrl_rec.rule_information1 = 'Y' THEN
25216 -- Added and commented by HKPATEL
25217 IF(g_rep_req_yn = 'Y') THEN
25218
25219 get_primary_stream_type
25220 (
25221 p_khr_id =>p_chr_id,
25222 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
25223 p_primary_sty_purpose =>'RESIDUAL_VALUE_INSURANCE_PREMIUM',
25224 x_return_status => x_return_status,
25225 x_primary_sty_id =>l_sty_id
25226 );
25227
25228 ELSE
25229
25230 get_primary_stream_type
25231 (
25232 p_khr_id => p_chr_id,
25233 p_primary_sty_purpose => 'RESIDUAL_VALUE_INSURANCE_PREMIUM',
25234 x_return_status => x_return_status,
25235 x_primary_sty_id =>l_sty_id
25236 );
25237
25238 END IF;
25239 /*
25240 SELECT nvl(id,-1)
25241 INTO styid
25242 FROM okl_strm_type_tl
25243 WHERE LANGUAGE = 'US'
25244 AND name = 'RESIDUAL VALUE INSURANCE PREMIUM';
25245 IF styid = -1 THEN
25246 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25247 END IF;
25248 */
25249 m := m + 1;
25250 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
25251 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
25252 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_YES;
25253 OPEN l_hdrrl_csr('LARVIN', 'LARVAM', p_chr_id);
25254 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
25255 CLOSE l_hdrrl_csr;
25256 l_csm_lease_header.rvi_rate := TO_NUMBER(nvl(l_hdrrl_rec.RULE_INFORMATION4,'0'));
25257 END IF;
25258 -- Purchase option,
25259 OPEN l_hdrrl_csr('AMTFOC', 'AMBPOC', p_chr_id);
25260 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
25261 CLOSE l_hdrrl_csr;
25262 l_purchase_option := l_hdrrl_rec.rule_information11;
25263 IF l_hdrrl_rec.rule_information2 IS NOT NULL THEN
25264 l_purchase_option_amount := TO_NUMBER(nvl(l_hdrrl_rec.rule_information2,'0'));
25265 ELSE
25266 l_purchase_option := 'NONE';
25267 END IF;
25268
25269 --Modified by kthiruva for Streams Performance
25270 --This cursor was moved outside the loop to increase performance
25271 --Bug 4346646 - Start of Changes
25272 --Fetching the org_id
25273 OPEN get_org_id(p_chr_id => p_chr_id);
25274 FETCH get_org_id INTO ln_org_id,
25275 lv_currency_code;
25276 IF get_org_id%NOTFOUND THEN
25277 okl_api.set_message(p_app_name => G_APP_NAME,
25278 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25279 p_token1 => G_COL_NAME_TOKEN,
25280 p_token1_value => 'Contract id');
25281 x_return_status := OKL_API.G_RET_STS_ERROR;
25282 END IF;
25283 CLOSE get_org_id;
25284 --Bug 4346646 - End of Changes
25285
25286 -- now get record for a asset line
25287 FOR l_line_rec IN l_line_rec_csr (p_chr_id,'FREE_FORM1') LOOP
25288 i := i + 1;
25289 l_csm_line_details_tbl(i).kle_asset_id := l_line_rec.id;
25290 l_csm_line_details_tbl(i).state_depre_dmnshing_value_rt := 0;
25291 l_csm_line_details_tbl(i).book_depre_dmnshing_value_rt := 0;
25292 l_csm_line_details_tbl(i).residual_guarantee_method := l_line_rec.residual_code;
25293 l_csm_line_details_tbl(i).fed_depre_dmnshing_value_rate := 0;
25294 l_csm_line_details_tbl(i).purchase_option := l_purchase_option;
25295 l_csm_line_details_tbl(i).purchase_option_amount := l_purchase_option_amount;
25296
25297 execute_formula(p_api_version => p_api_version,
25298 p_init_msg_list => p_init_msg_list,
25299 x_return_status => x_return_status,
25300 x_msg_count => x_msg_count,
25301 x_msg_data => x_msg_data,
25302 p_formula_name => 'LINE_CAP_AMNT',
25303 p_contract_id => p_chr_id,
25304 p_line_id => l_line_rec.id,
25305 x_value => l_value);
25306 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
25307 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
25308 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
25309 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25310 END IF;
25311 -- Get line Trade in
25312 execute_formula(p_api_version => p_api_version,
25313 p_init_msg_list => p_init_msg_list,
25314 x_return_status => x_return_status,
25315 x_msg_count => x_msg_count,
25316 x_msg_data => x_msg_data,
25317 p_formula_name => 'LINE_TRADEIN',
25318 p_contract_id => p_chr_id,
25319 p_line_id => l_line_rec.id,
25320 x_value => l_tradein);
25321 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
25322 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
25323 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
25324 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25325 END IF;
25326 -- Get line cap Reduction
25327 execute_formula(p_api_version => p_api_version,
25328 p_init_msg_list => p_init_msg_list,
25329 x_return_status => x_return_status,
25330 x_msg_count => x_msg_count,
25331 x_msg_data => x_msg_data,
25332 p_formula_name => 'LINE_CAPREDUCTION',
25333 p_contract_id => p_chr_id,
25334 p_line_id => l_line_rec.id,
25335 x_value => l_capreduc);
25336 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
25337 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
25338 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
25339 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25340 END IF;
25341 -- Get line Fee Capilitized
25342 execute_formula(p_api_version => p_api_version,
25343 p_init_msg_list => p_init_msg_list,
25344 x_return_status => x_return_status,
25345 x_msg_count => x_msg_count,
25346 x_msg_data => x_msg_data,
25347 p_formula_name => 'LINE_FEESCAPITALIZED',
25348 p_contract_id => p_chr_id,
25349 p_line_id => l_line_rec.id,
25350 x_value => l_feecap);
25351 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
25352 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
25353 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
25354 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25355 END IF;
25356 -- Get line Capitalized Interest
25357 execute_formula(p_api_version => p_api_version,
25358 p_init_msg_list => p_init_msg_list,
25359 x_return_status => x_return_status,
25360 x_msg_count => x_msg_count,
25361 x_msg_data => x_msg_data,
25362 p_formula_name => 'LINE_CAPITALIZED_INTEREST',
25363 p_contract_id => p_chr_id,
25364 p_line_id => l_line_rec.id,
25365 x_value => l_capint);
25366 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
25367 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
25368 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
25369 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25370 END IF;
25371 -- Get line Discount
25372 execute_formula(p_api_version => p_api_version,
25373 p_init_msg_list => p_init_msg_list,
25374 x_return_status => x_return_status,
25375 x_msg_count => x_msg_count,
25376 x_msg_data => x_msg_data,
25377 p_formula_name => 'LINE_DISCOUNT',
25378 p_contract_id => p_chr_id,
25379 p_line_id => l_line_rec.id,
25380 x_value => l_discount);
25381 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
25382 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
25383 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
25384 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25385 END IF;
25386 IF l_line_rec.residual_value IS NULL THEN
25387 l_csm_line_details_tbl(i).residual_amount := 0;
25388 ELSE
25389 l_csm_line_details_tbl(i).residual_amount := l_line_rec.residual_value;
25390 END IF;
25391 IF l_line_rec.delivered_date IS NULL THEN
25392 l_csm_line_details_tbl(i).date_delivery := l_line_rec.start_date;
25393 ELSE
25394 l_csm_line_details_tbl(i).date_delivery := l_line_rec.delivered_date;
25395 END IF;
25396 l_csm_line_details_tbl(i).residual_guarantee_amount := l_line_rec.residual_grnty_amount;
25397 IF l_line_rec.residual_grnty_amount IS NOT NULL OR
25398 l_line_rec.residual_grnty_amount <> OKL_API.G_MISS_NUM THEN
25399 l_csm_line_details_tbl(i).guarantee_type := l_line_rec.guarantee_type;
25400 END IF;
25401 --smahapat changed 03/13/04
25402 --cannot support until field populated by authoring since field mandatory
25403 --l_csm_line_details_tbl(i).date_funding := l_line_rec.date_funding;
25404 l_csm_line_details_tbl(i).date_funding := NVL(l_line_rec.date_funding,l_line_rec.start_date);
25405 --smahapat end change 03/13/04
25406 l_csm_line_details_tbl(i).description := l_line_rec.item_description;
25407 -- we need to set the context since the records in
25408 -- OKL_SYS_ACCT_OPTS table are stored with regards to the context
25409 -- To calculate basis percent for Corp or tax book
25410 -- we need the Line capital amount.
25411 -- Now since new version of the pricing eng
25412 -- NET subsidies , amount of sudsidy is sent to
25413 -- pricing eng as percent so we exclude the discout as below
25414 ln_value := l_value + NVL(l_discount,0);
25415 l_csm_line_details_tbl(i).asset_cost := ln_value;
25416 -- Now we are dealing with corp book and building
25417 -- Book Depreciation Stream info
25418 OPEN l_tx_csr(l_line_rec.name );
25419 FETCH l_tx_csr into l_tx_rec;
25420 IF l_tx_csr%NOTFOUND THEN
25421 OKL_API.set_message(p_app_name => G_APP_NAME,
25422 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25423 p_token1 => G_COL_NAME_TOKEN,
25424 p_token1_value => l_line_rec.name);
25425 x_return_status := OKL_API.G_RET_STS_ERROR;
25426 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25427 END IF;
25428 CLOSE l_tx_csr;
25429 -- Now we are determing the Basis percent for the corp book
25430 -- Basis percent = Depreciable Cost (for each asset defined corp book)
25431 -- / Total Asset Capital Cost
25432 IF (l_tx_rec.depreciation_cost IS NULL OR
25433 TO_NUMBER(l_tx_rec.depreciation_cost) = 0 ) THEN
25434 l_basis_percent := 0;
25435 ELSE
25436 -- Start for bug#3388812 modification - BAKUCHIB
25437 -- Now since new version of the pricing eng
25438 -- NET subsidies , amount of sudsidy is sent to
25439 -- pricing eng as percent so we exclude the discout as below
25440 l_corp_dep_cost := l_tx_rec.depreciation_cost - NVL(l_tradein,0) - NVL(l_capreduc,0) +
25441 NVL(l_feecap,0) + NVL(l_capint,0);
25442 -- End for bug#3388812 modification - BAKUCHIB
25443 l_basis_percent := TO_NUMBER(nvl(l_corp_dep_cost,'0')) / TO_NUMBER(ln_value );
25444 -- Start for bug#3388812 modification - BAKUCHIB
25445 l_basis_percent := l_basis_percent * 100;
25446 -- End for bug#3388812 modification - BAKUCHIB
25447 END IF;
25448 IF l_basis_percent <> 0 THEN
25449 -- Now we round the Basis Percent
25450 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
25451 p_amount => l_basis_percent);
25452 END IF;
25453 -- Now we are determing the Salvage value
25454 l_salvage := nvl(l_tx_rec.salvage_value,0);
25455 IF l_salvage = 0 THEN
25456 l_salvage := (nvl(l_tx_rec.percent_salvage_value,0) * l_line_rec.oec)/100.00;
25457 END IF;
25458 l_csm_line_details_tbl(i).book_adr_convention := l_tx_rec.prorate_convention_code;
25459 l_csm_line_details_tbl(i).book_term := l_tx_rec.life_in_months;
25460 l_csm_line_details_tbl(i).book_method := to_char(l_tx_rec.id1);
25461 l_csm_line_details_tbl(i).book_salvage := l_salvage;
25462 l_csm_line_details_tbl(i).date_book := l_tx_rec.in_service_date;
25463 l_csm_line_details_tbl(i).book_basis_percent := l_rnd_basis_percent;
25464
25465 -- Start of Bug#3388812 modification - BAKUCHIB
25466 IF l_lease_tax_owner = 'LESSOR' THEN
25467 m := m + 1;
25468 -- End of Bug#3388812 modification - BAKUCHIB
25469 -- Code added and commented by HKPATEL
25470 IF(g_rep_req_yn = 'Y') THEN
25471 get_primary_stream_type
25472 (
25473 p_khr_id =>p_chr_id,
25474 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
25475 p_primary_sty_purpose =>'BOOK_DEPRECIATION',
25476 x_return_status => x_return_status,
25477 x_primary_sty_id =>l_sty_id
25478 );
25479
25480 ELSE
25481
25482 get_primary_stream_type
25483 (
25484 p_khr_id => p_chr_id,
25485 p_primary_sty_purpose => 'BOOK_DEPRECIATION',
25486 x_return_status => x_return_status,
25487 x_primary_sty_id =>l_sty_id
25488 );
25489
25490 END IF;
25491
25492 /*
25493 OPEN l_strmid_csr('BOOK DEPRECIATION');
25494 FETCH l_strmid_csr into l_strmid_rec;
25495 IF l_strmid_csr%NOTFOUND THEN
25496 OKL_API.set_message(p_app_name => G_APP_NAME,
25497 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25498 p_token1 => G_COL_NAME_TOKEN,
25499 p_token1_value => 'BOOK DEPRECIATION');
25500 x_return_status := OKL_API.G_RET_STS_ERROR;
25501 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25502 END IF;
25503 CLOSE l_strmid_csr;
25504 */
25505 -- Added code ends here - HKPATEL
25506 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
25507 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
25508 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
25509 END IF;
25510 -- Start modification Bug#3447917
25511 -- Now we are changing the approach for generating Tax book Depreciation streams
25512 -- by the virtue of Bug#3447917 so changes because of bug#3066346 is reverted.
25513 -- Start modification Bug#3066346
25514 -- We need to validate tax book for a given asset number
25515 -- and also validate if there has been setups done for these
25516 -- tax books
25517 -- Now we are dealing with Tax book and building
25518 -- Federal/State Depreciation Stream info
25519 -- Since there could be more than one tax book we need to loop for each
25520 -- tax book
25521 -- End modification Bug#3066346
25522 -- End modification Bug#3447917
25523 FOR l_txd_rec IN l_txd_csr(l_line_rec.name) LOOP
25524 -- Now we are determing the Basis percent for the Tax book
25525 -- Basis percent = Depreciable Cost (for each asset defined tax book)
25526 -- / Total Asset Capital Cost
25527 -- Intialize the variable
25528 l_basis_percent := 0;
25529 l_rnd_basis_percent := 0;
25530 IF (l_txd_rec.cost IS NULL OR
25531 TO_NUMBER(l_txd_rec.cost) = 0) THEN
25532 l_basis_percent := 0;
25533 ELSE
25534 -- Start for bug#3388812 modification - BAKUCHIB
25535 -- Now since new version of the pricing eng
25536 -- NET subsidies , amount of sudsidy is sent to
25537 -- pricing eng as percent so we exclude the discout as below
25538 l_tax_dep_cost := l_txd_rec.cost - NVL(l_tradein,0) - NVL(l_capreduc,0) +
25539 NVL(l_feecap,0) + NVL(l_capint,0);
25540 -- End for bug#3388812 modification - BAKUCHIB
25541 l_basis_percent := TO_NUMBER(nvl(l_tax_dep_cost,'0')) / TO_NUMBER(ln_value );
25542 l_basis_percent := l_basis_percent * 100.00;
25543 END IF;
25544 IF l_basis_percent <> 0 THEN
25545 -- Now we round the Basis Percent
25546 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
25547 p_amount => l_basis_percent);
25548 END IF;
25549 -- Start modification Bug#3447917
25550 -- Start modification Bug#3066346
25551 -- If we find only setup for one tax book only then
25552 -- we build only federal Depreciation Stream
25553 -- we build both federal and state Depreciation Stream
25554 FOR l_txtrans_rec in l_txtrans_csr (l_txd_rec.tax_book) LOOP
25555 IF l_txtrans_rec.value IS NOT NULL AND
25556 l_txtrans_rec.value = 'FEDERAL' THEN
25557 l_csm_line_details_tbl(i).fed_depre_adr_conve := l_tx_rec.prorate_convention_code;
25558 l_csm_line_details_tbl(i).fed_depre_term := l_txd_rec.life_in_months_tax;
25559 l_csm_line_details_tbl(i).fed_depre_method := to_char(l_txd_rec.id1);
25560 l_csm_line_details_tbl(i).fed_depre_salvage := l_txd_rec.salvage_value;
25561 l_csm_line_details_tbl(i).date_fed_depre := l_tx_rec.in_service_date;
25562 l_csm_line_details_tbl(i).fed_depre_basis_percent := l_rnd_basis_percent;
25563
25564 -- Start of Bug#3388812 modification - BAKUCHIB
25565 IF l_lease_tax_owner = 'LESSOR' THEN
25566 -- End of Bug#3388812 modification - BAKUCHIB
25567 m := m + 1;
25568 -- Added code by HKPATEL
25569 IF(g_rep_req_yn = 'Y') THEN
25570
25571 get_primary_stream_type
25572 (
25573 p_khr_id =>p_chr_id,
25574 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
25575 p_primary_sty_purpose =>'FEDERAL_DEPRECIATION',
25576 x_return_status => x_return_status,
25577 x_primary_sty_id =>l_sty_id
25578 );
25579
25580 ELSE
25581
25582 get_primary_stream_type
25583 (
25584 p_khr_id => p_chr_id,
25585 p_primary_sty_purpose => 'FEDERAL_DEPRECIATION',
25586 x_return_status => x_return_status,
25587 x_primary_sty_id =>l_sty_id
25588 );
25589
25590 END IF;
25591 /*
25592 OPEN l_strmid_csr('FEDERAL DEPRECIATION');
25593 FETCH l_strmid_csr into l_strmid_rec;
25594 IF l_strmid_csr%NOTFOUND THEN
25595 OKL_API.set_message(p_app_name => G_APP_NAME,
25596 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25597 p_token1 => G_COL_NAME_TOKEN,
25598 p_token1_value => 'FEDERAL DEPRECIATION');
25599 x_return_status := OKL_API.G_RET_STS_ERROR;
25600 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25601 END IF;
25602 CLOSE l_strmid_csr;
25603 */
25604 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
25605 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
25606 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
25607 END IF;
25608 ELSIF l_txtrans_rec.value IS NOT NULL AND
25609 l_txtrans_rec.value = 'STATE' THEN
25610 l_csm_line_details_tbl(i).state_depre_adr_convent := l_tx_rec.prorate_convention_code;
25611 l_csm_line_details_tbl(i).state_depre_term := l_txd_rec.life_in_months_tax;
25612 l_csm_line_details_tbl(i).state_depre_method := to_char(l_txd_rec.id1);
25613 l_csm_line_details_tbl(i).state_depre_salvage := l_txd_rec.salvage_value;
25614 l_csm_line_details_tbl(i).date_state_depre := l_tx_rec.in_service_date;
25615 l_csm_line_details_tbl(i).state_depre_basis_percent := l_rnd_basis_percent;
25616
25617 -- Start of Bug#3388812 modification - BAKUCHIB
25618 IF l_lease_tax_owner = 'LESSOR' THEN
25619 -- End of Bug#3388812 modification - BAKUCHIB
25620 m := m + 1;
25621 -- Added code by HKPATEL
25622 IF(g_rep_req_yn = 'Y') THEN
25623
25624 get_primary_stream_type
25625 (
25626 p_khr_id =>p_chr_id,
25627 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
25628 p_primary_sty_purpose =>'STATE_DEPRECIATION',
25629 x_return_status => x_return_status,
25630 x_primary_sty_id =>l_sty_id
25631 );
25632
25633 ELSE
25634
25635 get_primary_stream_type
25636 (
25637 p_khr_id => p_chr_id,
25638 p_primary_sty_purpose => 'STATE_DEPRECIATION',
25639 x_return_status => x_return_status,
25640 x_primary_sty_id =>l_sty_id
25641 );
25642
25643 END IF;
25644 /*
25645 OPEN l_strmid_csr('STATE DEPRECIATION');
25646 FETCH l_strmid_csr into l_strmid_rec;
25647 IF l_strmid_csr%NOTFOUND THEN
25648 OKL_API.set_message(p_app_name => G_APP_NAME,
25649 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25650 p_token1 => G_COL_NAME_TOKEN,
25651 p_token1_value => 'STATE DEPRECIATION');
25652 x_return_status := OKL_API.G_RET_STS_ERROR;
25653 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25654 END IF;
25655 CLOSE l_strmid_csr;
25656 */
25657 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
25658 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
25659 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
25660 END IF;
25661 END IF;
25662 END LOOP;
25663 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
25664 EXIT WHEN(x_return_status <> OKL_API.G_RET_STS_SUCCESS);
25665 END IF;
25666 END LOOP;
25667 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
25668 EXIT WHEN(x_return_status <> OKL_API.G_RET_STS_SUCCESS);
25669 END IF;
25670 END LOOP;
25671 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
25672 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25673 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
25674 RAISE OKL_API.G_EXCEPTION_ERROR;
25675 END IF;
25676 -- WE should deal with so Payment line differently
25677 -- Getting the payment information of the asset
25678 FOR l_so_line_rec IN l_so_line_rec_csr (p_chr_id,p_cle_id) LOOP
25679 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLH',p_chr_id, l_so_line_rec.id ) LOOP
25680 l_level_type := l_rl_rec1.object1_id1;
25681 OPEN strm_name_csr ( l_level_type );
25682 FETCH strm_name_csr into l_strm_name_rec;
25683 IF strm_name_csr%NOTFOUND THEN
25684 OKL_API.set_message(p_app_name => G_APP_NAME,
25685 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25686 p_token1 => G_COL_NAME_TOKEN,
25687 p_token1_value => 'Stream Id');
25688 x_return_status := OKL_API.G_RET_STS_ERROR;
25689 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25690 END IF;
25691 CLOSE strm_name_csr;
25692 l_strm_name := l_strm_name_rec.stream_type_purpose;
25693 m := m + 1;
25694 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
25695 l_csm_stream_types_tbl(m).kle_asset_id := l_so_line_rec.id;
25696 idx := 0;
25697 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
25698 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_so_line_rec.id ) LOOP
25699 IF (l_rl_rec.rule_information7 IS NOT NULL OR
25700 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
25701 (l_rl_rec.rule_information8 IS NOT NULL OR
25702 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
25703 j := j + 1;
25704 idx := idx + 1;
25705 l_rents_tbl(j).level_index_number := idx;
25706 l_rents_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
25707 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
25708 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
25709 l_rents_tbl(j).period := g_stub_rec.period;
25710 l_rents_tbl(j).description := l_strm_name;
25711 -- l_rents_tbl(j).kle_asset_id := l_so_line_rec.id;
25712 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
25713 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
25714 l_rents_tbl(j).days_in_month := l_days_in_month_code;
25715 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
25716 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
25717 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
25718 END If;
25719 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
25720
25721 -- Added by kthiruva on 29-Dec-2005.
25722 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
25723 -- Bug 4915938 - Start of Changes
25724 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
25725 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
25726 ELSE
25727 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
25728 END IF;
25729 -- Bug 4915938 - End of Changes
25730
25731 ELSIF (l_rl_rec.rule_information7 IS NULL OR
25732 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
25733 (l_rl_rec.rule_information8 IS NULL OR
25734 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
25735 j := j + 1;
25736 idx := idx + 1;
25737 l_rents_tbl(j).level_index_number := idx;
25738 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
25739 l_rents_tbl(j).description := l_strm_name;
25740 l_rents_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
25741 l_rents_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
25742 l_rents_tbl(j).period := l_rl_rec.object1_id1;
25743 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
25744 -- l_rents_tbl(j).kle_asset_id := l_so_line_rec.id;
25745 l_rents_tbl(j).days_in_month := l_days_in_month_code;
25746 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
25747 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
25748 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
25749 END If;
25750 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
25751 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
25752 ELSE
25753 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
25754 END IF;
25755 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
25756 l_rents_tbl(j).date_start := l_hdr_rec.start_date;
25757 ELSE
25758 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
25759 END IF;
25760 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
25761 END IF;
25762 -- Now we get difference in days between contract end_date and last payment end_date
25763 -- Start of BAKUCHIB modification bug#3121708
25764 OPEN c_diff_days_csr(p_chr_id => p_chr_id,
25765 p_cle_id => l_so_line_rec.id,
25766 p_slh_id => l_rl_rec1.slh_id);
25767 FETCH c_diff_days_csr INTO ld_chr_end_date,
25768 ld_last_start_date,
25769 ld_last_end_date;
25770 IF c_diff_days_csr%FOUND THEN
25771 ln_diff_days := ld_chr_end_date - ld_last_end_date;
25772 END IF;
25773 CLOSE c_diff_days_csr;
25774 IF SIGN(ln_diff_days) = -1 THEN
25775 OKL_API.set_message(p_app_name => G_APP_NAME,
25776 p_msg_name => G_INVALID_VALUE,
25777 p_token1 => G_COL_NAME_TOKEN,
25778 p_token1_value => 'Diffrence End date');
25779 x_return_status := OKL_API.G_RET_STS_ERROR;
25780 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
25781 END IF;
25782 -- If there is diff in days then an empty stub will be appended
25783 IF ln_diff_days > 0 AND
25784 ld_last_start_date = FND_DATE.canonical_to_date(l_rl_rec.rule_information2) THEN
25785 j := j + 1;
25786 idx := idx + 1;
25787 l_rents_tbl(j).level_index_number := idx;
25788 l_rents_tbl(j).amount := 0;
25789 l_rents_tbl(j).date_start := (ld_last_end_date + 1) + ln_diff_days;
25790 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
25791 l_rents_tbl(j).period := g_stub_rec.period;
25792 l_rents_tbl(j).description := l_strm_name;
25793 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
25794 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
25795 l_rents_tbl(j).days_in_month := l_days_in_month_code;
25796 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
25797
25798 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
25799 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
25800 END If;
25801
25802 -- Added by kthiruva on 29-Dec-2005.
25803 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
25804 -- Bug 4915938 - Start of Changes
25805 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
25806 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
25807 ELSE
25808 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
25809 END IF;
25810 -- Bug 4915938 - End of Changes
25811 END IF;
25812 -- End of BAKUCHIB modification bug#3121708
25813 END LOOP;
25814 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
25815 (UPPER(l_strm_name_rec.name) = 'FEE') AND
25816 (l_strm_name_rec.capitalize_yn = 'N') ) OR
25817 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
25818 (UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
25819 FOR l_rl_rec IN l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_so_line_rec.id) LOOP
25820 IF (l_rl_rec.rule_information7 IS NOT NULL OR
25821 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
25822 (l_rl_rec.rule_information8 IS NOT NULL OR
25823 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
25824 k := k + 1;
25825 idx := idx + 1;
25826 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
25827 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
25828 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
25829 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
25830 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
25831 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
25832 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
25833 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
25834 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
25835 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
25836 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
25837
25838 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
25839 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
25840 END If;
25841
25842 -- Added by kthiruva on 29-Dec-2005.
25843 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
25844 -- Bug 4915938 - Start of Changes
25845 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
25846 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
25847 ELSE
25848 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
25849 END IF;
25850 -- Bug 4915938 - End of Changes
25851
25852 ELSIF (l_rl_rec.rule_information7 IS NULL OR
25853 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
25854 (l_rl_rec.rule_information8 IS NULL OR
25855 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
25856 k := k + 1;
25857 idx := idx + 1;
25858 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
25859 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
25860 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
25861 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
25862 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
25863 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
25864 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
25865 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
25866 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
25867 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
25868
25869 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
25870 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
25871 END If;
25872 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
25873 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
25874 ELSE
25875 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
25876 END IF;
25877 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
25878 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
25879 ELSE
25880 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
25881 END IF;
25882 END IF;
25883 END LOOP;
25884 ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) THEN
25885 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL',p_chr_id, l_so_line_rec.id ) LOOP
25886 l := l + 1;
25887 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
25888 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
25889 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
25890 IF (l_rl_rec.RULE_INFORMATION2 IS NULL OR l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
25891 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
25892 ELSE
25893 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
25894 END IF;
25895 -- l_csm_one_off_fee_tbl(l).kle_asset_id := l_so_line_rec.id;
25896 END LOOP;
25897 END IF;
25898 END LOOP;
25899 END LOOP;
25900 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
25901 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25902 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
25903 RAISE OKL_API.G_EXCEPTION_ERROR;
25904 END IF;
25905 -- Extracting the fee lines
25906 extract_fee_lines( p_api_version => p_api_version,
25907 p_chr_id => p_chr_id,
25908 p_deal_type => l_deal_type,
25909 p_init_msg_list => p_init_msg_list,
25910 x_return_status => x_return_status,
25911 x_msg_count => x_msg_count,
25912 x_msg_data => x_msg_data,
25913 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
25914 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
25915 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
25916 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
25917 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25918 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
25919 RAISE OKL_API.G_EXCEPTION_ERROR;
25920 END IF;
25921 -- Check for Mandatory streams
25922 check_for_mandatory_streams(
25923 p_api_version => p_api_version,
25924 p_init_msg_list => p_init_msg_list,
25925 x_msg_count => x_msg_count,
25926 x_msg_data => x_msg_data,
25927 x_return_status => x_return_status,
25928 p_chr_id => p_chr_id,
25929 p_deal_type => l_deal_type,
25930 p_stream_types_tbl => l_csm_stream_types_tbl,
25931 x_stream_types_tbl => l_req_stream_types_tbl);
25932 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
25933 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25934 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
25935 RAISE OKL_API.G_EXCEPTION_ERROR;
25936 END IF;
25937 -- Requesting for yields
25938 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
25939 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
25940 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25941 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
25942 RAISE OKL_API.G_EXCEPTION_ERROR;
25943 END IF;
25944 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
25945 okl_api.set_message(p_app_name => G_APP_NAME,
25946 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
25947 RAISE OKL_API.G_EXCEPTION_ERROR;
25948 END IF;
25949 -- Call to extraction SUBSIDY line API
25950 extract_subsidized_lines(p_api_version => p_api_version,
25951 p_init_msg_list => p_init_msg_list,
25952 x_return_status => x_return_status,
25953 x_msg_count => x_msg_count,
25954 x_msg_data => x_msg_data,
25955 p_chr_id => p_chr_id,
25956 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
25957 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
25958 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25959 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
25960 RAISE OKL_API.G_EXCEPTION_ERROR;
25961 END IF;
25962 x_csm_lease_header := l_csm_lease_header;
25963 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
25964 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
25965 x_csm_yields_tbl := l_csm_yields_tbl;
25966 x_req_stream_types_tbl := l_req_stream_types_tbl;
25967 x_csm_line_details_tbl := l_csm_line_details_tbl;
25968 x_rents_tbl := l_rents_tbl;
25969 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
25970 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25971 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
25972 RAISE OKL_API.G_EXCEPTION_ERROR;
25973 END IF;
25974 ELSIF l_deal_type = 'LOAN' THEN
25975 FOR l_line_rec in l_line_rec_csr ( p_chr_id ,'FREE_FORM1') LOOP
25976 l_tot_asset_oec := l_tot_asset_oec + l_line_rec.oec;
25977 END LOOP;
25978 OPEN get_cap_fee_amt(p_chr_id => p_chr_id);
25979 FETCH get_cap_fee_amt INTO l_cap_fee_amt;
25980 CLOSE get_cap_fee_amt;
25981 l_total_lending := l_tot_asset_oec + l_cap_fee_amt;
25982
25983 -- Getting the install base location
25984 OPEN ib_csr(p_chr_id);
25985 FETCH ib_csr INTO l_ib_rec;
25986 IF ib_csr%NOTFOUND THEN
25987 okl_api.set_message(p_app_name => G_APP_NAME,
25988 p_msg_name => G_LLA_NO_MATCHING_RECORD,
25989 p_token1 => G_COL_NAME_TOKEN,
25990 p_token1_value => 'Contract id');
25991 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
25992 END IF;
25993 CLOSE ib_csr;
25994 l_csm_loan_header.khr_id := p_chr_id;
25995 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
25996 l_csm_loan_header.date_start := l_hdr_rec.start_date;
25997 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
25998 l_csm_loan_header.country := l_ib_rec.country;
25999 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
26000 l_csm_loan_header.total_lending := l_total_lending;
26001 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
26002 FOR l_line_rec in l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
26003 i := i + 1;
26004 l_csm_loan_details_tbl(i).kle_loan_id := l_line_rec.id;
26005 END LOOP;
26006 FOR l_so_line_rec IN l_so_line_rec_csr (p_chr_id,p_cle_id) LOOP
26007 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', p_chr_id, l_so_line_rec.id ) LOOP
26008 l_level_type := l_rl_rec1.object1_id1;
26009 OPEN strm_name_csr ( l_level_type );
26010 FETCH strm_name_csr into l_strm_name_rec;
26011 IF strm_name_csr%NOTFOUND THEN
26012 OKL_API.set_message(p_app_name => G_APP_NAME,
26013 p_msg_name => G_LLA_NO_MATCHING_RECORD,
26014 p_token1 => G_COL_NAME_TOKEN,
26015 p_token1_value => 'Stream Id');
26016 x_return_status := OKL_API.G_RET_STS_ERROR;
26017 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
26018 END IF;
26019 CLOSE strm_name_csr;
26020 l_strm_name := l_strm_name_rec.stream_type_purpose;
26021 IF(UPPER(TRIM(l_strm_name)) <> 'RENT') THEN
26022 m := m + 1;
26023 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
26024 l_csm_stream_types_tbl(m).kle_asset_id := l_so_line_rec.id;
26025 END IF;
26026 idx := 0;
26027 IF( UPPER(TRIM(l_strm_name)) = 'RENT') THEN
26028 j := j + 1;
26029 idx := idx + 1;
26030 -- smahapat l_csm_loan_levels_tbl(j).kle_loan_id := l_so_line_rec.id;
26031 l_csm_loan_levels_tbl(j).description := 'Funding';
26032 l_csm_loan_levels_tbl(j).amount := l_total_lending;
26033 l_csm_loan_levels_tbl(j).date_start := l_hdr_rec.start_date;
26034 l_csm_loan_levels_tbl(j).level_index_number := idx;
26035 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
26036 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
26037 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
26038
26039 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
26040 IF (l_rl_rec.rule_information7 IS NOT NULL OR
26041 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
26042 (l_rl_rec.rule_information8 IS NOT NULL OR
26043 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
26044 j := j + 1;
26045 idx := idx + 1;
26046 l_csm_loan_levels_tbl(j).level_index_number := idx;
26047 l_csm_loan_levels_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
26048 l_csm_loan_levels_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
26049 l_csm_loan_levels_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
26050 l_csm_loan_levels_tbl(j).period := g_stub_rec.period;
26051 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
26052 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
26053 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
26054
26055 --smahapat l_csm_loan_levels_tbl(j).kle_loan_id := l_so_line_rec.id;
26056 l_csm_loan_levels_tbl(j).description := l_strm_name;
26057 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
26058 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
26059 ELSE
26060 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
26061 END IF;
26062 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
26063 l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
26064 END IF;
26065
26066 -- Added by kthiruva on 29-Dec-2005.
26067 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
26068 -- Bug 4915938 - Start of Changes
26069 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
26070 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
26071 ELSE
26072 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
26073 END IF;
26074 -- Bug 4915938 - End of Changes
26075
26076 ELSIF (l_rl_rec.rule_information7 IS NULL OR
26077 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
26078 (l_rl_rec.rule_information8 IS NULL OR
26079 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
26080 j := j + 1;
26081 idx := idx + 1;
26082 --smahapat l_csm_loan_levels_tbl(j).kle_loan_id := l_so_line_rec.id;
26083 l_csm_loan_levels_tbl(j).description := l_strm_name;
26084 l_csm_loan_levels_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
26085 l_csm_loan_levels_tbl(j).date_start := l_hdr_rec.start_date;
26086 l_csm_loan_levels_tbl(j).level_index_number := idx;
26087 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
26088 l_csm_loan_levels_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
26089 l_csm_loan_levels_tbl(j).period := l_rl_rec.object1_id1;
26090 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
26091 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
26092
26093 IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
26094 l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
26095 END IF;
26096 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
26097 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
26098 ELSE
26099 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
26100 END IF;
26101 IF(l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
26102 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
26103 ELSE
26104 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
26105 END IF;
26106 END IF;
26107 -- Now we get difference in days between contract end_date and last payment end_date
26108 -- Start of BAKUCHIB modification bug#3121708
26109 OPEN c_diff_days_csr(p_chr_id => p_chr_id,
26110 p_cle_id => l_so_line_rec.id,
26111 p_slh_id => l_rl_rec1.slh_id);
26112 FETCH c_diff_days_csr INTO ld_chr_end_date,
26113 ld_last_start_date,
26114 ld_last_end_date;
26115 IF c_diff_days_csr%FOUND THEN
26116 ln_diff_days := ld_chr_end_date - ld_last_end_date;
26117 END IF;
26118 CLOSE c_diff_days_csr;
26119 IF SIGN(ln_diff_days) = -1 THEN
26120 OKL_API.set_message(p_app_name => G_APP_NAME,
26121 p_msg_name => G_INVALID_VALUE,
26122 p_token1 => G_COL_NAME_TOKEN,
26123 p_token1_value => 'Diffrence End date');
26124 x_return_status := OKL_API.G_RET_STS_ERROR;
26125 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
26126 END IF;
26127 -- If there is diff in days then an empty stub will be appended
26128 IF ln_diff_days > 0 AND
26129 ld_last_start_date = FND_DATE.canonical_to_date(l_rl_rec.rule_information2) THEN
26130 j := j + 1;
26131 idx := idx + 1;
26132 l_csm_loan_levels_tbl(j).level_index_number := idx;
26133 l_csm_loan_levels_tbl(j).amount := 0;
26134 l_csm_loan_levels_tbl(j).date_start := (ld_last_end_date + 1) + ln_diff_days;
26135 l_csm_loan_levels_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
26136 l_csm_loan_levels_tbl(j).period := g_stub_rec.period;
26137 l_csm_loan_levels_tbl(j).description := l_strm_name;
26138 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
26139 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
26140 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
26141
26142 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
26143 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
26144 ELSE
26145 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
26146 END IF;
26147 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
26148 l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
26149 END IF;
26150
26151 -- Added by kthiruva on 29-Dec-2005.
26152 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
26153 -- Bug 4915938 - Start of Changes
26154 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
26155 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
26156 ELSE
26157 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
26158 END IF;
26159 -- Bug 4915938 - End of Changes
26160
26161 END IF;
26162 -- End of BAKUCHIB modification bug#3121708
26163 END LOOP;
26164 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
26165 (UPPER(l_strm_name_rec.name) = 'FEE') AND
26166 (l_strm_name_rec.capitalize_yn = 'N')) OR
26167 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
26168 (UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
26169 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
26170 IF (l_rl_rec.rule_information7 IS NOT NULL OR
26171 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
26172 (l_rl_rec.rule_information8 IS NOT NULL OR
26173 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
26174 k := k + 1;
26175 idx := idx + 1;
26176 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
26177 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
26178 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
26179 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
26180 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
26181 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
26182 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
26183 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
26184 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
26185
26186 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
26187 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
26188 END IF;
26189 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
26190 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
26191 ELSE
26192 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
26193 END IF;
26194 IF (UPPER(l_strm_name_rec.name) = 'INTEREST_PAYMENT') THEN
26195 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
26196 ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL_PAYMENT' ) THEN
26197 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
26198 ELSE
26199 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
26200 END If;
26201
26202 --Added by kthiruva on 29-Dec-2005.
26203 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
26204 -- Bug 4915938 - Start of Changes
26205 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
26206 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
26207 ELSE
26208 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
26209 END IF;
26210 -- Bug 4915938 - End of Changes
26211
26212 ELSIF (l_rl_rec.rule_information7 IS NULL OR
26213 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
26214 (l_rl_rec.rule_information8 IS NULL OR
26215 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
26216 k := k + 1;
26217 idx := idx + 1;
26218 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
26219 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
26220 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
26221 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
26222 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
26223 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
26224 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
26225 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
26226
26227 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
26228 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
26229 END IF;
26230 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
26231 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
26232 ELSE
26233 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
26234 END IF;
26235 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
26236 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
26237 ELSE
26238 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
26239 END IF;
26240 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
26241 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
26242 ELSE
26243 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
26244 END IF;
26245 IF ( UPPER(l_strm_name_rec.name) = 'INTEREST_PAYMENT' ) THEN
26246 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
26247 ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL_PAYMENT' ) Then
26248 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
26249 ELSE
26250 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
26251 END If;
26252 END IF;
26253 END LOOP;
26254 ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) THEN
26255 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
26256 l := l + 1;
26257 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
26258 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
26259 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
26260 IF (l_rl_rec.RULE_INFORMATION2 IS NULL OR
26261 l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
26262 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
26263 ELSE
26264 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
26265 END IF;
26266 -- l_csm_one_off_fee_tbl(l).kle_asset_id := l_so_line_rec.id;
26267 END LOOP;
26268 END IF;
26269 END LOOP;
26270 END LOOP;
26271 extract_fee_lines( p_api_version => p_api_version,
26272 p_chr_id => p_chr_id,
26273 p_deal_type => l_deal_type,
26274 p_init_msg_list => p_init_msg_list,
26275 x_msg_count => x_msg_count,
26276 x_msg_data => x_msg_data,
26277 x_return_status => x_return_status,
26278 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
26279 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
26280 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
26281 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
26282 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26283 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
26284 RAISE OKL_API.G_EXCEPTION_ERROR;
26285 END IF;
26286 extract_subsidized_lines(p_api_version => p_api_version,
26287 p_init_msg_list => p_init_msg_list,
26288 x_return_status => x_return_status,
26289 x_msg_count => x_msg_count,
26290 x_msg_data => x_msg_data,
26291 p_chr_id => TO_NUMBER(p_chr_id),
26292 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
26293 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
26294 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26295 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
26296 RAISE OKL_API.G_EXCEPTION_ERROR;
26297 END IF;
26298 check_for_mandatory_streams(
26299 p_api_version => p_api_version,
26300 p_init_msg_list => p_init_msg_list,
26301 x_msg_count => x_msg_count,
26302 x_msg_data => x_msg_data,
26303 x_return_status => x_return_status,
26304 p_chr_id => p_chr_id,
26305 p_deal_type => l_deal_type,
26306 p_stream_types_tbl => l_csm_stream_types_tbl,
26307 x_stream_types_tbl => l_req_stream_types_tbl);
26308 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
26309 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26310 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
26311 RAISE OKL_API.G_EXCEPTION_ERROR;
26312 END IF;
26313 -- Requesting for yields
26314 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
26315 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
26316 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26317 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
26318 RAISE OKL_API.G_EXCEPTION_ERROR;
26319 END IF;
26320 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
26321 okl_api.set_message(
26322 p_app_name => G_APP_NAME,
26323 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
26324 RAISE OKL_API.G_EXCEPTION_ERROR;
26325 End If;
26326 x_csm_loan_header := l_csm_loan_header;
26327 x_csm_loan_lines_tbl := l_csm_loan_details_tbl;
26328 x_csm_loan_levels_tbl := l_csm_loan_levels_tbl;
26329 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
26330 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
26331 x_csm_yields_tbl := l_csm_yields_tbl;
26332 x_req_stream_types_tbl := l_req_stream_types_tbl;
26333 ELSE
26334 okl_api.set_message(p_app_name => G_APP_NAME,
26335 p_msg_name => G_INVALID_VALUE,
26336 p_token1 => G_COL_NAME_TOKEN,
26337 p_token1_value => 'Deal_type');
26338 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26339 END IF;
26340 OKL_API.END_ACTIVITY (x_msg_count,
26341 x_msg_data );
26342 EXCEPTION
26343 WHEN OKL_API.G_EXCEPTION_ERROR THEN
26344 IF l_hdr_csr%ISOPEN THEN
26345 CLOSE l_hdr_csr;
26346 END IF;
26347 IF l_hdrrl_csr%ISOPEN THEN
26348 CLOSE l_hdrrl_csr;
26349 END IF;
26350 IF l_financed_type_csr%ISOPEN THEN
26351 CLOSE l_financed_type_csr;
26352 END IF;
26353 IF ib_csr%ISOPEN THEN
26354 CLOSE ib_csr;
26355 END IF;
26356 IF l_line_rec_csr%ISOPEN THEN
26357 CLOSE l_line_rec_csr;
26358 END IF;
26359 IF get_org_id%ISOPEN THEN
26360 CLOSE get_org_id;
26361 END IF;
26362 IF l_tx_csr%ISOPEN THEN
26363 CLOSE l_tx_csr;
26364 END IF;
26365 IF l_strmid_csr%ISOPEN THEN
26366 CLOSE l_strmid_csr;
26367 END IF;
26368 IF l_txd_csr%ISOPEN THEN
26369 CLOSE l_txd_csr;
26370 END IF;
26371 IF l_txtrans_csr%ISOPEN THEN
26372 CLOSE l_txtrans_csr;
26373 END IF;
26374 IF strm_name_csr%ISOPEN THEN
26375 CLOSE strm_name_csr;
26376 END IF;
26377 IF l_rl_csr%ISOPEN THEN
26378 CLOSE l_rl_csr;
26379 END IF;
26380 IF l_rl_csr1%ISOPEN THEN
26381 CLOSE l_rl_csr1;
26382 END IF;
26383 IF l_so_line_rec_csr%ISOPEN THEN
26384 CLOSE l_so_line_rec_csr;
26385 END IF;
26386 IF get_cap_fee_amt%ISOPEN THEN
26387 CLOSE get_cap_fee_amt;
26388 END IF;
26389 IF c_diff_days_csr%ISOPEN THEN
26390 CLOSE c_diff_days_csr;
26391 END IF;
26392 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
26393 l_api_name,
26394 G_PKG_NAME,
26395 'OKL_API.G_RET_STS_ERROR',
26396 x_msg_count,
26397 x_msg_data,
26398 '_PVT');
26399 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
26400 IF l_hdr_csr%ISOPEN THEN
26401 CLOSE l_hdr_csr;
26402 END IF;
26403 IF l_hdrrl_csr%ISOPEN THEN
26404 CLOSE l_hdrrl_csr;
26405 END IF;
26406 IF l_financed_type_csr%ISOPEN THEN
26407 CLOSE l_financed_type_csr;
26408 END IF;
26409 IF ib_csr%ISOPEN THEN
26410 CLOSE ib_csr;
26411 END IF;
26412 IF l_line_rec_csr%ISOPEN THEN
26413 CLOSE l_line_rec_csr;
26414 END IF;
26415 IF get_org_id%ISOPEN THEN
26416 CLOSE get_org_id;
26417 END IF;
26418 IF l_tx_csr%ISOPEN THEN
26419 CLOSE l_tx_csr;
26420 END IF;
26421 IF l_strmid_csr%ISOPEN THEN
26422 CLOSE l_strmid_csr;
26423 END IF;
26424 IF l_txd_csr%ISOPEN THEN
26425 CLOSE l_txd_csr;
26426 END IF;
26427 IF l_txtrans_csr%ISOPEN THEN
26428 CLOSE l_txtrans_csr;
26429 END IF;
26430 IF strm_name_csr%ISOPEN THEN
26431 CLOSE strm_name_csr;
26432 END IF;
26433 IF l_rl_csr%ISOPEN THEN
26434 CLOSE l_rl_csr;
26435 END IF;
26436 IF l_rl_csr1%ISOPEN THEN
26437 CLOSE l_rl_csr1;
26438 END IF;
26439 IF l_so_line_rec_csr%ISOPEN THEN
26440 CLOSE l_so_line_rec_csr;
26441 END IF;
26442 IF get_cap_fee_amt%ISOPEN THEN
26443 CLOSE get_cap_fee_amt;
26444 END IF;
26445 IF c_diff_days_csr%ISOPEN THEN
26446 CLOSE c_diff_days_csr;
26447 END IF;
26448 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
26449 l_api_name,
26450 G_PKG_NAME,
26451 'OKL_API.G_RET_STS_UNEXP_ERROR',
26452 x_msg_count,
26453 x_msg_data,
26454 '_PVT');
26455 WHEN OTHERS THEN
26456 IF l_hdr_csr%ISOPEN THEN
26457 CLOSE l_hdr_csr;
26458 END IF;
26459 IF l_hdrrl_csr%ISOPEN THEN
26460 CLOSE l_hdrrl_csr;
26461 END IF;
26462 IF l_financed_type_csr%ISOPEN THEN
26463 CLOSE l_financed_type_csr;
26464 END IF;
26465 IF ib_csr%ISOPEN THEN
26466 CLOSE ib_csr;
26467 END IF;
26468 IF l_line_rec_csr%ISOPEN THEN
26469 CLOSE l_line_rec_csr;
26470 END IF;
26471 IF get_org_id%ISOPEN THEN
26472 CLOSE get_org_id;
26473 END IF;
26474 IF l_tx_csr%ISOPEN THEN
26475 CLOSE l_tx_csr;
26476 END IF;
26477 IF l_strmid_csr%ISOPEN THEN
26478 CLOSE l_strmid_csr;
26479 END IF;
26480 IF l_txd_csr%ISOPEN THEN
26481 CLOSE l_txd_csr;
26482 END IF;
26483 IF l_txtrans_csr%ISOPEN THEN
26484 CLOSE l_txtrans_csr;
26485 END IF;
26486 IF strm_name_csr%ISOPEN THEN
26487 CLOSE strm_name_csr;
26488 END IF;
26489 IF l_rl_csr%ISOPEN THEN
26490 CLOSE l_rl_csr;
26491 END IF;
26492 IF l_rl_csr1%ISOPEN THEN
26493 CLOSE l_rl_csr1;
26494 END IF;
26495 IF l_so_line_rec_csr%ISOPEN THEN
26496 CLOSE l_so_line_rec_csr;
26497 END IF;
26498 IF get_cap_fee_amt%ISOPEN THEN
26499 CLOSE get_cap_fee_amt;
26500 END IF;
26501 IF c_diff_days_csr%ISOPEN THEN
26502 CLOSE c_diff_days_csr;
26503 END IF;
26504 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
26505 l_api_name,
26506 G_PKG_NAME,
26507 'OTHERS',
26508 x_msg_count,
26509 x_msg_data,
26510 '_PVT');
26511 END extract_params_so;
26512
26513 /************************************************************************
26514 * API to upgrade the ESG Contracts to support the
26515 * Prospective Rebooking
26516 *************************************************************************/
26517 PROCEDURE upgrade_esg_khr_for_prb(
26518 p_chr_id IN VARCHAR2
26519 ,x_return_status OUT NOCOPY VARCHAR2
26520 ,x_msg_count OUT NOCOPY NUMBER
26521 ,x_msg_data OUT NOCOPY VARCHAR2
26522 ,x_request_id OUT NOCOPY NUMBER
26523 ,x_trans_status OUT NOCOPY VARCHAR2
26524 ,x_rep_request_id OUT NOCOPY NUMBER
26525 ,x_rep_trans_status OUT NOCOPY VARCHAR2 )
26526 AS
26527 l_api_name CONSTANT VARCHAR2(30) := 'UPGRADE_ESG_KHR_FOR_PRB';
26528 l_api_version CONSTANT NUMBER := 1;
26529 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
26530 l_init_msg_list VARCHAR2(1) := OKL_API.G_TRUE;
26531
26532 l_hdr_rec l_hdr_csr%ROWTYPE;
26533 -- Record Structures required for the Lease Contracts
26534 x_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
26535 x_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
26536 x_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
26537 x_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
26538 x_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
26539 x_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
26540 x_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
26541 x_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
26542 -- Record Structures required for the Loan Contracts
26543 x_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
26544 x_csm_lines_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
26545 x_csm_loan_lines_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
26546 x_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
26547
26548 p_pdtv_rec pdtv_rec_type;
26549 x_pdt_parameter_rec pdt_param_rec_type;
26550 x_no_data_found BOOLEAN;
26551
26552 BEGIN
26553 print( l_api_name, 'Start');
26554
26555 x_return_status := OKL_API.G_RET_STS_SUCCESS;
26556 x_return_status := OKL_API.START_ACTIVITY(
26557 p_api_name => l_api_name,
26558 p_pkg_name => g_pkg_name,
26559 p_init_msg_list => l_init_msg_list,
26560 l_api_version => l_api_version,
26561 p_api_version => l_api_version,
26562 p_api_type => G_API_TYPE,
26563 x_return_status => x_return_status);
26564 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
26565 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26566 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
26567 RAISE OKL_API.G_EXCEPTION_ERROR;
26568 END IF;
26569
26570 -- Fetch preliminary details about the Contract: Deal Type etc
26571 print( l_api_name, 'Fetching Deal Type of the Contract' );
26572 OPEN l_hdr_csr(p_chr_id);
26573 FETCH l_hdr_csr into l_hdr_rec;
26574 IF l_hdr_csr%NOTFOUND
26575 THEN
26576 CLOSE l_hdr_csr;
26577 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26578 END IF;
26579 CLOSE l_hdr_csr;
26580
26581 print( l_api_name, 'Extraction phase. Deal Type = ' || l_hdr_rec.deal_type );
26582 IF (INSTR( l_hdr_rec.deal_type, 'LEASE') > 0)
26583 THEN
26584 print( l_api_name, 'Handling Lease Type Contract ' );
26585 extract_params_lease(
26586 p_api_version => l_api_version
26587 ,p_init_msg_list => l_init_msg_list
26588 ,p_chr_id => p_chr_id
26589 ,x_return_status => x_return_status
26590 ,x_msg_count => x_msg_count
26591 ,x_msg_data => x_msg_data
26592 ,x_csm_lease_header => x_csm_lease_header
26593 ,x_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl
26594 ,x_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl
26595 ,x_csm_yields_tbl => x_csm_yields_tbl
26596 ,x_req_stream_types_tbl => x_req_stream_types_tbl
26597 ,x_csm_line_details_tbl => x_csm_line_details_tbl
26598 ,x_rents_tbl => x_rents_tbl
26599 ,p_orp_code => 'UPGRADE' );
26600 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS)
26601 THEN
26602 OKL_API.set_message(
26603 p_app_name => G_APP_NAME
26604 ,p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
26605 RAISE OKL_API.G_EXCEPTION_ERROR;
26606 END IF;
26607 print( l_api_name, 'Before Calling the create_streams_lease_book' );
26608 OKL_CREATE_STREAMS_PUB.create_streams_lease_book(
26609 p_api_version => l_api_version
26610 ,p_init_msg_list => l_init_msg_list
26611 ,p_skip_prc_engine => OKL_API.G_FALSE
26612 ,p_csm_lease_header => x_csm_lease_header
26613 ,p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl
26614 ,p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl
26615 ,p_csm_yields_tbl => x_csm_yields_tbl
26616 ,p_csm_stream_types_tbl => x_req_stream_types_tbl
26617 ,p_csm_line_details_tbl => x_csm_line_details_tbl
26618 ,p_rents_tbl => x_rents_tbl
26619 ,x_trans_id => x_request_id
26620 ,x_trans_status => x_trans_status
26621 ,x_return_status => x_return_status
26622 ,x_msg_count => x_msg_count
26623 ,x_msg_data => x_msg_data );
26624 print( l_api_name, 'After the call to create_streams_lease_book: ' ||x_return_status);
26625 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
26626 okl_api.set_message(
26627 p_app_name => G_APP_NAME
26628 ,p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
26629 RAISE OKL_API.G_EXCEPTION_ERROR;
26630 END IF;
26631
26632 -- Handling the Loan Type Contracts
26633 ELSIF (INSTR(l_hdr_rec.deal_type, 'LOAN') > 0)
26634 THEN
26635 print( l_api_name, 'Handling Loan Type Contracts ' );
26636 print( l_api_name, 'Before Calling the Extract_params_loan ' );
26637 extract_params_loan(
26638 p_api_version => l_api_version
26639 ,p_init_msg_list => l_init_msg_list
26640 ,p_chr_id => p_chr_id
26641 ,x_return_status => x_return_status
26642 ,x_msg_count => x_msg_count
26643 ,x_msg_data => x_msg_data
26644 ,x_csm_loan_header => x_csm_loan_header
26645 ,x_csm_loan_lines_tbl => x_csm_loan_lines_tbl
26646 ,x_csm_loan_levels_tbl => x_csm_loan_levels_tbl
26647 ,x_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl
26648 ,x_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl
26649 ,x_csm_yields_tbl => x_csm_yields_tbl
26650 ,x_csm_stream_types_tbl => x_csm_stream_types_tbl
26651 ,p_orp_code => 'UPGRADE' );
26652 print( l_api_name, 'After the call to extract_params_loan: '||x_return_status);
26653 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
26654 okl_api.set_message(
26655 p_app_name => G_APP_NAME,
26656 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
26657 RAISE OKL_API.G_EXCEPTION_ERROR;
26658 END IF;
26659
26660 print( l_api_name, 'Before calling the Create_stream_loan_book API ' );
26661 OKL_CREATE_STREAMS_PUB.create_streams_loan_book(
26662 p_api_version => l_api_version
26663 ,p_init_msg_list => l_init_msg_list
26664 ,p_skip_prc_engine => OKL_API.G_FALSE
26665 ,p_csm_loan_header => x_csm_loan_header
26666 ,p_csm_loan_lines_tbl => x_csm_loan_lines_tbl
26667 ,p_csm_loan_levels_tbl => x_csm_loan_levels_tbl
26668 ,p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl
26669 ,p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl
26670 ,p_csm_yields_tbl => x_csm_yields_tbl
26671 ,p_csm_stream_types_tbl => x_csm_stream_types_tbl
26672 ,x_trans_id => x_request_id
26673 ,x_trans_status => x_trans_status
26674 ,x_return_status => x_return_status
26675 ,x_msg_count => x_msg_count
26676 ,x_msg_data => x_msg_data);
26677 print( l_api_name, 'After the call to create_streams_loan_book: '||x_return_status);
26678 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS)
26679 THEN
26680 okl_api.set_message(
26681 p_app_name => G_APP_NAME
26682 ,p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
26683 RAISE OKL_API.G_EXCEPTION_ERROR;
26684 END IF;
26685 ELSE
26686 print( l_api_name, 'Error: Invalid deal Type ' );
26687 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26688 END IF;
26689
26690 print( l_api_name, 'Checking if the Reporting Product Exists or not ' );
26691 IF ( l_hdr_rec.report_pdt_id <> -1 )
26692 THEN
26693 print( l_api_name, 'Reporting Product exists for this contract ' );
26694 p_pdtv_rec.id := l_hdr_rec.report_pdt_id;
26695 OKL_SETUPPRODUCTS_PVT.Getpdt_parameters(
26696 p_api_version => l_api_version
26697 ,p_init_msg_list => l_init_msg_list
26698 ,x_return_status => x_return_status
26699 ,x_msg_count => x_msg_count
26700 ,x_msg_data => x_msg_data
26701 ,p_pdtv_rec => p_pdtv_rec
26702 ,x_no_data_found => x_no_data_found
26703 ,p_pdt_parameter_rec => x_pdt_parameter_rec);
26704 print( l_api_name, 'After OKL_SETUPPRODUCTS_PVT.Getpdt_parameters: '||x_return_status);
26705 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
26706 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26707 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
26708 RAISE OKL_API.G_EXCEPTION_ERROR;
26709 END IF;
26710
26711 print( l_api_name, 'Prior to the call to generate_reporting_streams');
26712 generate_reporting_streams(
26713 p_api_version => l_api_version
26714 ,p_init_msg_list => l_init_msg_list
26715 ,p_chr_id => p_chr_id
26716 ,p_report_deal_type => x_pdt_parameter_rec.deal_type
26717 ,p_generation_context => 'FULL'
26718 ,p_skip_prc_engine => OKL_API.G_FALSE
26719 ,x_return_status => x_return_status
26720 ,x_msg_count => x_msg_count
26721 ,x_msg_data => x_msg_data
26722 ,x_request_id => x_rep_request_id
26723 ,x_trans_status => x_rep_trans_status
26724 ,p_orp_code => 'UPGRADE' );
26725 print( l_api_name, 'After generate_reporting_streams: '||x_return_status);
26726 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS)
26727 THEN
26728 okl_api.set_message(
26729 p_app_name => G_APP_NAME
26730 ,p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FAILED');
26731 RAISE OKL_API.G_EXCEPTION_ERROR;
26732 END IF;
26733
26734 END IF;
26735
26736 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
26737 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
26738 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
26739 RAISE OKL_API.G_EXCEPTION_ERROR;
26740 END IF;
26741
26742 print( l_api_name, 'END: ' || x_return_status);
26743 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
26744 print( l_api_name, ': End' );
26745 EXCEPTION
26746 WHEN OKL_API.G_EXCEPTION_ERROR
26747 THEN
26748 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
26749 p_api_name => l_api_name
26750 ,p_pkg_name => g_pkg_name
26751 ,p_exc_name => 'OKL_API.G_RET_STS_ERROR'
26752 ,x_msg_count => x_msg_count
26753 ,x_msg_data => x_msg_data
26754 ,p_api_type => g_api_type);
26755
26756 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR
26757 THEN
26758 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
26759 p_api_name => l_api_name
26760 ,p_pkg_name => g_pkg_name
26761 ,p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR'
26762 ,x_msg_count => x_msg_count
26763 ,x_msg_data => x_msg_data
26764 ,p_api_type => g_api_type);
26765
26766 WHEN OTHERS
26767 THEN
26768 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
26769 p_api_name => l_api_name
26770 ,p_pkg_name => g_pkg_name
26771 ,p_exc_name => 'OTHERS'
26772 ,x_msg_count => x_msg_count
26773 ,x_msg_data => x_msg_data
26774 ,p_api_type => g_api_type);
26775 END upgrade_esg_khr_for_prb;
26776
26777
26778 -- End modification 11i10 bakuchib
26779 End OKL_LA_STREAM_PVT;