DBA Data[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;