DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_CS_PRINCIPAL_PAYDOWN_PVT

Source


1 PACKAGE BODY OKL_CS_PRINCIPAL_PAYDOWN_PVT AS
2 /* $Header: OKLRPPDB.pls 120.39.12010000.3 2009/08/05 13:00:57 rpillay ship $ */
3 
4     G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5     G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6     G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7 -------------------------------------------------------------------------------------------------
8 -- GLOBAL MESSAGE CONSTANTS
9 -------------------------------------------------------------------------------------------------
10   G_FND_APP                     CONSTANT  VARCHAR2(200) := OKL_API.G_FND_APP;
11   G_COL_NAME_TOKEN              CONSTANT  VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
12   G_PARENT_TABLE_TOKEN          CONSTANT  VARCHAR2(200) := OKL_API.G_PARENT_TABLE_TOKEN;
13   G_CHILD_TABLE_TOKEN           CONSTANT  VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
14   G_UNEXPECTED_ERROR            CONSTANT  VARCHAR2(200) := 'OKL_UNEXPECTED_ERROR';
15   G_SQLERRM_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLerrm';
16   G_SQLCODE_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLcode';
17   G_NO_PARENT_RECORD            CONSTANT  VARCHAR2(200) := 'NO_PARENT_RECORD';
18   G_REQUIRED_VALUE              CONSTANT  VARCHAR2(200) := 'REQUIRED_VALUE';
19 
20 ------------------------------------------------------------------------------------
21 -- GLOBAL EXCEPTION
22 ------------------------------------------------------------------------------------
23   G_EXCEPTION_HALT_VALIDATION             EXCEPTION;
24   G_EXCEPTION_STOP_VALIDATION             EXCEPTION;
25   G_API_TYPE                    CONSTANT  VARCHAR2(4) := '_PVT';
26   G_API_VERSION                 CONSTANT  NUMBER := 1.0;
27   G_SCOPE                       CONSTANT  VARCHAR2(4) := '_PVT';
28 
29 -----------------------------------------------------------------------------------
30  -- GLOBAL VARIABLES
31 -----------------------------------------------------------------------------------
32   G_PKG_NAME                    CONSTANT  VARCHAR2(200) := 'OKL_CS_PRINCIPAL_PAYDOWN';
33   G_APP_NAME                    CONSTANT  VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
34   G_UNSCHED_PP_STREAM           CONSTANT  VARCHAR2(60)   := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
35   G_UNSCHED_LP_STREAM           CONSTANT  VARCHAR2(60)   := 'UNSCHEDULED_LOAN_PAYMENT';
36   G_RENT_STREAM		        CONSTANT  VARCHAR2(60)   := 'RENT';
37   G_PRINCIPAL_PAYMENT           CONSTANT  VARCHAR2(60)   := 'PRINCIPAL_PAYMENT';
38 
39    subtype khrv_rec_type IS OKL_CONTRACT_PUB.khrv_rec_type;
40    subtype chrv_rec_type IS OKL_OKC_MIGRATION_PVT.chrv_rec_type;
41   TYPE kle_rec_type IS RECORD (
42     ID          OKL_K_LINES_V.ID%TYPE
43   );
44 
45   TYPE kle_tbl_type IS TABLE OF kle_rec_type INDEX BY BINARY_INTEGER;
46  SUBTYPE selv_tbl_type IS Okl_Streams_Pvt.selv_tbl_type;
47 
48 
49 
50 
51 PROCEDURE PRINT_MESSAGES(l_payment_struc IN okl_mass_rebook_pvt.strm_lalevl_tbl_type)
52 IS
53   i Number;
54 BEGIN
55   IF (G_DEBUG_ENABLED = 'Y') THEN
56     G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
57   END IF;
58   i := 0;
59  IF l_payment_struc.COUNT > 0 THEN
60     i := l_payment_struc.FIRST;
61      LOOP
62         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
63                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Starting the Loop ....');
64           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).chr_id ' || i ||' - '||l_payment_struc(i).chr_id);
65           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).cle_id ' || i ||' - '||l_payment_struc(i).cle_id);
66           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION_CATEGORY ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION_CATEGORY);
67           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION2 ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION2);
68           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION3 ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION3);
69           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION5 ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION5);
70           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION6 ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION6);
71           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION7 ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION7);
72           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION8 ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION8);
73           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION10 ' || i ||' - '|| l_payment_struc(i).RULE_INFORMATION10);
74           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).OBJECT1_ID1 ' || i ||' - '|| l_payment_struc(i).OBJECT1_ID1);
75         END IF;
76         EXIT WHEN i = l_payment_struc.LAST;
77         i := l_payment_struc.NEXT(i);
78      END LOOP;
79   END IF;
80 
81 END PRINT_MESSAGES;
82 
83 PROCEDURE PRINT_STM_PAYMENTS(p_payment_tbl IN payment_tbl_type)
84 IS
85  i NUMBER;
86 BEGIN
87   IF (G_DEBUG_ENABLED = 'Y') THEN
88     G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
89   END IF;
90  i := 0;
91  IF p_payment_tbl.COUNT > 0 THEN
92     i := p_payment_tbl.FIRST;
93     LOOP
94       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
95               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).KHR_ID       :'||i||' -'|| p_payment_tbl(i).KHR_ID);
96         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).KLE_ID       :'||i||' -'|| p_payment_tbl(i).KLE_ID);
97         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).STY_ID       :'||i||' -'|| p_payment_tbl(i).STY_ID);
98         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).start_date   :'||i||' -'|| p_payment_tbl(i).start_date);
99         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).structure    :'||i||' -'|| p_payment_tbl(i).structure);
100         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).arrears_yn   :'||i||' -'|| p_payment_tbl(i).arrears_yn);
101         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).periods      :'||i||' -'|| p_payment_tbl(i).periods);
102         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).frequency    :'||i||' -'|| p_payment_tbl(i).frequency);
103         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).amount       :'||i||' -'|| p_payment_tbl(i).amount);
104         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).stub_days    :'||i||' -'|| p_payment_tbl(i).stub_days);
105         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).stub_amount  :'||i||' -'|| p_payment_tbl(i).stub_amount);
106       END IF;
107       EXIT WHEN i = p_payment_tbl.LAST;
108       i := p_payment_tbl.NEXT(i);
109     END LOOP;
110  END IF;
111 END PRINT_STM_PAYMENTS;
112 
113 PROCEDURE PRINT_ISG_PARAMS(p_payment_tbl IN okl_pricing_pvt.payment_tbl_type)
114 IS
115 BEGIN
116   IF (G_DEBUG_ENABLED = 'Y') THEN
117     G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
118   END IF;
119 
120 FOR i in p_payment_tbl.FIRST..p_payment_tbl.LAST LOOP
121 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
122   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).start_date   :'||i||' -'|| p_payment_tbl(i).start_date);
123   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).structure    :'||i||' -'|| p_payment_tbl(i).structure);
124   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).arrears_yn   :'||i||' -'|| p_payment_tbl(i).arrears_yn);
125   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).periods      :'||i||' -'|| p_payment_tbl(i).periods);
126   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).frequency    :'||i||' -'|| p_payment_tbl(i).frequency);
127   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).amount       :'||i||' -'|| p_payment_tbl(i).amount);
128   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).stub_days    :'||i||' -'|| p_payment_tbl(i).stub_days);
129   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'    p_payment_tbl(i).stub_amount  :'||i||' -'|| p_payment_tbl(i).stub_amount);
130 END IF;
131 END LOOP;
132 END PRINT_ISG_PARAMS;
133 
134 --added by rkuttiya for 11i OKL.H
135 
136 Function re_organize_payment_tbl(p_payment_tbl IN OKL_CS_PRINCIPAL_PAYDOWN_PVT.payment_tbl_type)
137  RETURN OKL_CS_PRINCIPAL_PAYDOWN_PVT.payment_tbl_type IS
138   i             number;
139   j             number;
140   l_payment_tbl OKL_CS_PRINCIPAL_PAYDOWN_PVT.payment_tbl_type;
141   l_rec_found   varchar2(1);
142  BEGIN
143   i := 0;
144   IF p_payment_tbl.COUNT > 0 THEN
145     i := p_payment_tbl.FIRST;
146 
147     -- First record of the input table is blindly copied to the local table.
148     l_payment_tbl(i).KHR_ID        := p_payment_tbl(i).KHR_ID;
149     l_payment_tbl(i).KLE_ID        := p_payment_tbl(i).KLE_ID;
150     l_payment_tbl(i).STY_ID        := p_payment_tbl(i).STY_ID;
151     l_payment_tbl(i).start_date    := p_payment_tbl(i).start_date;
152     l_payment_tbl(i).structure     := p_payment_tbl(i).structure;
153     l_payment_tbl(i).arrears_yn    := p_payment_tbl(i).arrears_yn;
154     l_payment_tbl(i).periods       := p_payment_tbl(i).periods;
155     l_payment_tbl(i).frequency     := p_payment_tbl(i).frequency;
156     l_payment_tbl(i).amount        := p_payment_tbl(i).amount;
157     l_payment_tbl(i).stub_days     := p_payment_tbl(i).stub_days;
158     l_payment_tbl(i).stub_amount   := p_payment_tbl(i).stub_amount;
159 
160     LOOP
161       EXIT WHEN i = p_payment_tbl.LAST;
162       i := p_payment_tbl.NEXT(i);
163       -- 2nd or greater record from the input table will be processed here
164 
165       l_rec_found := 'N';
166       j := 0;
167       j := l_payment_tbl.FIRST;
168       LOOP
169         IF (l_payment_tbl(j).kle_id = p_payment_tbl(i).KLE_ID
170            and l_payment_tbl(j).frequency = p_payment_tbl(i).frequency
171            and l_payment_tbl(j).amount  = p_payment_tbl(i).amount) THEN
172           --Bug#4964710 changed start_date derivation, removed  + 1 --dkagrawa
173           l_payment_tbl(j).start_date    := (least(p_payment_tbl(i).start_date,l_payment_tbl(j).start_date) );
174           l_payment_tbl(j).periods       := l_payment_tbl(j).periods + p_payment_tbl(i).periods;
175           l_rec_found := 'Y';
176           EXIT;
177         END IF;
178         EXIT WHEN j = l_payment_tbl.LAST;
179         j := l_payment_tbl.NEXT(j);
180       END LOOP;
181 
182       IF l_rec_found = 'N' THEN
183         l_payment_tbl(i).KHR_ID        := p_payment_tbl(i).KHR_ID;
184         l_payment_tbl(i).KLE_ID        := p_payment_tbl(i).KLE_ID;
185         l_payment_tbl(i).STY_ID        := p_payment_tbl(i).STY_ID;
186         l_payment_tbl(i).start_date    := p_payment_tbl(i).start_date;
187         l_payment_tbl(i).structure     := p_payment_tbl(i).structure;
188         l_payment_tbl(i).arrears_yn    := p_payment_tbl(i).arrears_yn;
189         l_payment_tbl(i).periods       := p_payment_tbl(i).periods;
190         l_payment_tbl(i).frequency     := p_payment_tbl(i).frequency;
191         l_payment_tbl(i).amount        := p_payment_tbl(i).amount;
192         l_payment_tbl(i).stub_days     := p_payment_tbl(i).stub_days;
193         l_payment_tbl(i).stub_amount   := p_payment_tbl(i).stub_amount;
194       END IF;
195 
196     END LOOP;
197   END IF;
198 
199   RETURN l_payment_tbl;
200 END;
201 
202 
203   FUNCTION get_status
204    (p_request_id	IN	NUMBER)
205    RETURN VARCHAR2
206 
207   AS
208 
209     CURSOR c_cs_status_csr (a_id IN NUMBER)
210 	IS
211     SELECT request_status_code,
212 	   object1_id1,
213 	   jtot_object1_code
214     FROM okl_trx_requests
215     where id=a_id;
216 
217     CURSOR c_supertrump_csr (a_id IN NUMBER)
218 	IS
219     SELECT sis_code
220     FROM   okl_stream_interfaces
221     WHERE  ID=a_id;
222 
223 	l_status_code	VARCHAR2(80);
224 	l_object1_id1	VARCHAR2(40);
225 	l_object1_code	VARCHAR2(30);
226 	l_sis_code	VARCHAR2(80);
227 
228   BEGIN
229 
230 	OPEN c_cs_Status_csr(p_request_id);
231 	FETCH c_cs_Status_csr INTO l_status_code,l_object1_id1,l_object1_code;
232 	CLOSE c_cs_Status_csr;
233 
234 	IF l_status_code='SUBMITTED_CALCULATION' THEN
235 		--Still not processed, Check for the status in Streams table.
236 		IF l_object1_code = 'OKL_STREAM_INTERFACES' THEN
237 			open c_supertrump_csr(l_object1_id1);
238 			FETCH c_supertrump_csr INTO l_sis_code;
239 			CLOSE c_supertrump_csr;
240 		END IF;
241 		l_status_code :=l_sis_code;
242 	END IF;
243 	RETURN l_status_code;
244 
245   END get_status;
246 
247 
248 
249 
250 ------------------------------------------------------------------
251 --Functions to Fetch Data from Tables.
252 -----------------------------------------------------------------
253   ---------------------------------------------------------------------------
254   -- FUNCTION get_chrv_rec for: OKC_K_HEADERS_V
255   ---------------------------------------------------------------------------
256   FUNCTION get_chrv_rec (p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
257                          x_return_status OUT NOCOPY VARCHAR2)
258   RETURN chrv_rec_type IS
259     CURSOR okc_chrv_pk_csr(p_id OKC_K_HEADERS_V.ID%TYPE) IS
260     SELECT ID,
261            OBJECT_VERSION_NUMBER,
262            SFWT_FLAG,
263            CHR_ID_RESPONSE,
264            CHR_ID_AWARD,
265            INV_ORGANIZATION_ID,
266            STS_CODE,
267            QCL_ID,
268            SCS_CODE,
269            CONTRACT_NUMBER,
270            CURRENCY_CODE,
271            CONTRACT_NUMBER_MODIFIER,
272            ARCHIVED_YN,
273            DELETED_YN,
274            CUST_PO_NUMBER_REQ_YN,
275            PRE_PAY_REQ_YN,
276            CUST_PO_NUMBER,
277            SHORT_DESCRIPTION,
278            COMMENTS,
279            DESCRIPTION,
280            DPAS_RATING,
281            COGNOMEN,
282            TEMPLATE_YN,
283            TEMPLATE_USED,
284            DATE_APPROVED,
285            DATETIME_CANCELLED,
286            AUTO_RENEW_DAYS,
287            DATE_ISSUED,
288            DATETIME_RESPONDED,
289            NON_RESPONSE_REASON,
290            NON_RESPONSE_EXPLAIN,
291            RFP_TYPE,
292            CHR_TYPE,
293            KEEP_ON_MAIL_LIST,
294            SET_ASIDE_REASON,
295            SET_ASIDE_PERCENT,
296            RESPONSE_COPIES_REQ,
297            DATE_CLOSE_PROJECTED,
298            DATETIME_PROPOSED,
299            DATE_SIGNED,
300            DATE_TERMINATED,
301            DATE_RENEWED,
302            TRN_CODE,
303            START_DATE,
304            END_DATE,
305            AUTHORING_ORG_ID,
306            BUY_OR_SELL,
307            ISSUE_OR_RECEIVE,
308            ESTIMATED_AMOUNT,
309            ESTIMATED_AMOUNT_RENEWED,
310            CURRENCY_CODE_RENEWED,
311            UPG_ORIG_SYSTEM_REF,
312            UPG_ORIG_SYSTEM_REF_ID,
313            APPLICATION_ID,
314            ORIG_SYSTEM_SOURCE_CODE,
315            ORIG_SYSTEM_ID1,
316            ORIG_SYSTEM_REFERENCE1,
317            ATTRIBUTE_CATEGORY,
318            ATTRIBUTE1,
319            ATTRIBUTE2,
320            ATTRIBUTE3,
321            ATTRIBUTE4,
322            ATTRIBUTE5,
323            ATTRIBUTE6,
324            ATTRIBUTE7,
325            ATTRIBUTE8,
326            ATTRIBUTE9,
327            ATTRIBUTE10,
328            ATTRIBUTE11,
329            ATTRIBUTE12,
330            ATTRIBUTE13,
331            ATTRIBUTE14,
332            ATTRIBUTE15,
333            CREATED_BY,
334            CREATION_DATE,
335            LAST_UPDATED_BY,
336            LAST_UPDATE_DATE,
337            LAST_UPDATE_LOGIN
338      FROM okc_k_headers_v chrv
339      WHERE chrv.id = p_id;
340      x_chrv_rec chrv_rec_type;
341   BEGIN
342     OPEN okc_chrv_pk_csr (p_chr_id);
343     FETCH okc_chrv_pk_csr INTO
344           x_chrv_rec.ID,
345           x_chrv_rec.OBJECT_VERSION_NUMBER,
346           x_chrv_rec.SFWT_FLAG,
347           x_chrv_rec.CHR_ID_RESPONSE,
348           x_chrv_rec.CHR_ID_AWARD,
349           x_chrv_rec.INV_ORGANIZATION_ID,
350           x_chrv_rec.STS_CODE,
351           x_chrv_rec.QCL_ID,
352           x_chrv_rec.SCS_CODE,
353           x_chrv_rec.CONTRACT_NUMBER,
354           x_chrv_rec.CURRENCY_CODE,
355           x_chrv_rec.CONTRACT_NUMBER_MODIFIER,
356           x_chrv_rec.ARCHIVED_YN,
357           x_chrv_rec.DELETED_YN,
358           x_chrv_rec.CUST_PO_NUMBER_REQ_YN,
359           x_chrv_rec.PRE_PAY_REQ_YN,
360           x_chrv_rec.CUST_PO_NUMBER,
361           x_chrv_rec.SHORT_DESCRIPTION,
362           x_chrv_rec.COMMENTS,
363           x_chrv_rec.DESCRIPTION,
364           x_chrv_rec.DPAS_RATING,
365           x_chrv_rec.COGNOMEN,
366           x_chrv_rec.TEMPLATE_YN,
367           x_chrv_rec.TEMPLATE_USED,
368           x_chrv_rec.DATE_APPROVED,
369           x_chrv_rec.DATETIME_CANCELLED,
370           x_chrv_rec.AUTO_RENEW_DAYS,
371           x_chrv_rec.DATE_ISSUED,
372           x_chrv_rec.DATETIME_RESPONDED,
373           x_chrv_rec.NON_RESPONSE_REASON,
374           x_chrv_rec.NON_RESPONSE_EXPLAIN,
375           x_chrv_rec.RFP_TYPE,
376           x_chrv_rec.CHR_TYPE,
377           x_chrv_rec.KEEP_ON_MAIL_LIST,
378           x_chrv_rec.SET_ASIDE_REASON,
379           x_chrv_rec.SET_ASIDE_PERCENT,
380           x_chrv_rec.RESPONSE_COPIES_REQ,
381           x_chrv_rec.DATE_CLOSE_PROJECTED,
382           x_chrv_rec.DATETIME_PROPOSED,
383           x_chrv_rec.DATE_SIGNED,
384           x_chrv_rec.DATE_TERMINATED,
385           x_chrv_rec.DATE_RENEWED,
386           x_chrv_rec.TRN_CODE,
387           x_chrv_rec.START_DATE,
388           x_chrv_rec.END_DATE,
389           x_chrv_rec.AUTHORING_ORG_ID,
390           x_chrv_rec.BUY_OR_SELL,
391           x_chrv_rec.ISSUE_OR_RECEIVE,
392           x_chrv_rec.ESTIMATED_AMOUNT,
393           x_chrv_rec.ESTIMATED_AMOUNT_RENEWED,
394           x_chrv_rec.CURRENCY_CODE_RENEWED,
395           x_chrv_rec.UPG_ORIG_SYSTEM_REF,
396           x_chrv_rec.UPG_ORIG_SYSTEM_REF_ID,
397           x_chrv_rec.APPLICATION_ID,
398           x_chrv_rec.ORIG_SYSTEM_SOURCE_CODE,
399           x_chrv_rec.ORIG_SYSTEM_ID1,
400           x_chrv_rec.ORIG_SYSTEM_REFERENCE1,
401           x_chrv_rec.ATTRIBUTE_CATEGORY,
402           x_chrv_rec.ATTRIBUTE1,
403           x_chrv_rec.ATTRIBUTE2,
404           x_chrv_rec.ATTRIBUTE3,
405           x_chrv_rec.ATTRIBUTE4,
406           x_chrv_rec.ATTRIBUTE5,
407           x_chrv_rec.ATTRIBUTE6,
408           x_chrv_rec.ATTRIBUTE7,
409           x_chrv_rec.ATTRIBUTE8,
410           x_chrv_rec.ATTRIBUTE9,
411           x_chrv_rec.ATTRIBUTE10,
412           x_chrv_rec.ATTRIBUTE11,
413           x_chrv_rec.ATTRIBUTE12,
414           x_chrv_rec.ATTRIBUTE13,
415           x_chrv_rec.ATTRIBUTE14,
416           x_chrv_rec.ATTRIBUTE15,
417           x_chrv_rec.CREATED_BY,
418           x_chrv_rec.CREATION_DATE,
419           x_chrv_rec.LAST_UPDATED_BY,
420           x_chrv_rec.LAST_UPDATE_DATE,
421           x_chrv_rec.LAST_UPDATE_LOGIN;
422     IF okc_chrv_pk_csr%NOTFOUND THEN
423        x_return_status := OKL_API.G_RET_STS_ERROR;
424     END IF;
425     CLOSE okc_chrv_pk_csr;
426     RETURN(x_chrv_rec);
427   EXCEPTION
428     WHEN OTHERS THEN
429       -- store SQL error message on message stack for caller
430       OKL_API.set_message(
431               G_APP_NAME,
432               G_UNEXPECTED_ERROR,
433               'SQLcode',
434               SQLCODE,
435               'SQLerrm',
436               SQLERRM);
437       -- notify caller of an UNEXPECTED error
438       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
439       -- if the cursor is open
440       IF okc_chrv_pk_csr%ISOPEN THEN
441          CLOSE okc_chrv_pk_csr;
442       END IF;
443 
444   END get_chrv_rec;
445 
446   ---------------------------------------------------------------------------
447   -- FUNCTION get_khrv_rec for: OKL_K_HEADERS_V
448   ---------------------------------------------------------------------------
449   FUNCTION get_khrv_rec (
450     p_khr_id                       IN  OKL_K_HEADERS_V.ID%TYPE,
451     x_return_status                OUT NOCOPY VARCHAR2
452   ) RETURN khrv_rec_type IS
453     CURSOR okl_k_headers_v_pk_csr (p_id IN OKL_K_HEADERS_V.ID%TYPE) IS
454       SELECT
455         ID,
456         OBJECT_VERSION_NUMBER,
457         ISG_ID,
458         KHR_ID,
459         PDT_ID,
460         AMD_CODE,
461         DATE_FIRST_ACTIVITY,
462         GENERATE_ACCRUAL_YN,
463         GENERATE_ACCRUAL_OVERRIDE_YN,
464         DATE_REFINANCED,
465         CREDIT_ACT_YN,
466         TERM_DURATION,
467         CONVERTED_ACCOUNT_YN,
468         DATE_CONVERSION_EFFECTIVE,
469         SYNDICATABLE_YN,
470         SALESTYPE_YN,
471         DATE_DEAL_TRANSFERRED,
472         DATETIME_PROPOSAL_EFFECTIVE,
473         DATETIME_PROPOSAL_INEFFECTIVE,
474         DATE_PROPOSAL_ACCEPTED,
475         ATTRIBUTE_CATEGORY,
476         ATTRIBUTE1,
477         ATTRIBUTE2,
478         ATTRIBUTE3,
479         ATTRIBUTE4,
480         ATTRIBUTE5,
481         ATTRIBUTE6,
482         ATTRIBUTE7,
483         ATTRIBUTE8,
484         ATTRIBUTE9,
485         ATTRIBUTE10,
486         ATTRIBUTE11,
487         ATTRIBUTE12,
488         ATTRIBUTE13,
489         ATTRIBUTE14,
490         ATTRIBUTE15,
491         CREATED_BY,
492         CREATION_DATE,
493         LAST_UPDATED_BY,
494         LAST_UPDATE_DATE,
495         LAST_UPDATE_LOGIN,
496         PRE_TAX_YIELD,
497         AFTER_TAX_YIELD,
498         IMPLICIT_INTEREST_RATE,
499         IMPLICIT_NON_IDC_INTEREST_RATE,
500         TARGET_PRE_TAX_YIELD,
501         TARGET_AFTER_TAX_YIELD,
502         TARGET_IMPLICIT_INTEREST_RATE,
503         TARGET_IMPLICIT_NONIDC_INTRATE,
504         DATE_LAST_INTERIM_INTEREST_CAL,
505         DEAL_TYPE,
506         PRE_TAX_IRR,
507         AFTER_TAX_IRR,
508         EXPECTED_DELIVERY_DATE,
509         ACCEPTED_DATE,
510         PREFUNDING_ELIGIBLE_YN,
511         REVOLVING_CREDIT_YN
512       FROM OKL_K_HEADERS_V
513       WHERE OKL_K_HEADERS_V.id     = p_id;
514       l_okl_k_headers_v_pk     okl_k_headers_v_pk_csr%ROWTYPE;
515       l_khrv_rec               khrv_rec_type;
516   BEGIN
517 
518     x_return_status := OKL_API.G_RET_STS_SUCCESS;
519     -- Get current database values
520     OPEN okl_k_headers_v_pk_csr (p_khr_id);
521     FETCH okl_k_headers_v_pk_csr INTO
522        l_khrv_rec.ID,
523         l_khrv_rec.OBJECT_VERSION_NUMBER,
524         l_khrv_rec.ISG_ID,
525         l_khrv_rec.KHR_ID,
526         l_khrv_rec.PDT_ID,
527         l_khrv_rec.AMD_CODE,
528         l_khrv_rec.DATE_FIRST_ACTIVITY,
529         l_khrv_rec.GENERATE_ACCRUAL_YN,
530         l_khrv_rec.GENERATE_ACCRUAL_OVERRIDE_YN,
531         l_khrv_rec.DATE_REFINANCED,
532         l_khrv_rec.CREDIT_ACT_YN,
533         l_khrv_rec.TERM_DURATION,
534         l_khrv_rec.CONVERTED_ACCOUNT_YN,
535         l_khrv_rec.DATE_CONVERSION_EFFECTIVE,
536         l_khrv_rec.SYNDICATABLE_YN,
537         l_khrv_rec.SALESTYPE_YN,
538         l_khrv_rec.DATE_DEAL_TRANSFERRED,
539         l_khrv_rec.DATETIME_PROPOSAL_EFFECTIVE,
540         l_khrv_rec.DATETIME_PROPOSAL_INEFFECTIVE,
541         l_khrv_rec.DATE_PROPOSAL_ACCEPTED,
542         l_khrv_rec.ATTRIBUTE_CATEGORY,
543         l_khrv_rec.ATTRIBUTE1,
544         l_khrv_rec.ATTRIBUTE2,
545         l_khrv_rec.ATTRIBUTE3,
546         l_khrv_rec.ATTRIBUTE4,
547         l_khrv_rec.ATTRIBUTE5,
548         l_khrv_rec.ATTRIBUTE6,
549         l_khrv_rec.ATTRIBUTE7,
550         l_khrv_rec.ATTRIBUTE8,
551         l_khrv_rec.ATTRIBUTE9,
552         l_khrv_rec.ATTRIBUTE10,
553         l_khrv_rec.ATTRIBUTE11,
554         l_khrv_rec.ATTRIBUTE12,
555         l_khrv_rec.ATTRIBUTE13,
556         l_khrv_rec.ATTRIBUTE14,
557         l_khrv_rec.ATTRIBUTE15,
558         l_khrv_rec.CREATED_BY,
559         l_khrv_rec.CREATION_DATE,
560         l_khrv_rec.LAST_UPDATED_BY,
561         l_khrv_rec.LAST_UPDATE_DATE,
562         l_khrv_rec.LAST_UPDATE_LOGIN,
563         l_khrv_rec.PRE_TAX_YIELD,
564         l_khrv_rec.AFTER_TAX_YIELD,
565         l_khrv_rec.IMPLICIT_INTEREST_RATE,
566         l_khrv_rec.IMPLICIT_NON_IDC_INTEREST_RATE,
567         l_khrv_rec.TARGET_PRE_TAX_YIELD,
568         l_khrv_rec.TARGET_AFTER_TAX_YIELD,
569         l_khrv_rec.TARGET_IMPLICIT_INTEREST_RATE,
570         l_khrv_rec.TARGET_IMPLICIT_NONIDC_INTRATE,
571         l_khrv_rec.DATE_LAST_INTERIM_INTEREST_CAL,
572         l_khrv_rec.DEAL_TYPE,
573         l_khrv_rec.PRE_TAX_IRR,
574         l_khrv_rec.AFTER_TAX_IRR,
575         l_khrv_rec.EXPECTED_DELIVERY_DATE,
576         l_khrv_rec.ACCEPTED_DATE,
577         l_khrv_rec.PREFUNDING_ELIGIBLE_YN,
578         l_khrv_rec.REVOLVING_CREDIT_YN
579         ;
580     IF okl_k_headers_v_pk_csr%NOTFOUND THEN
581        x_return_status := OKL_API.G_RET_STS_ERROR;
582     END IF;
583     CLOSE okl_k_headers_v_pk_csr;
584     RETURN(l_khrv_rec);
585   EXCEPTION
586     WHEN OTHERS THEN
587       -- store SQL error message on message stack for caller
588       OKL_API.set_message(
589               G_APP_NAME,
590               G_UNEXPECTED_ERROR,
591               'SQLcode',
592               SQLCODE,
593               'SQLerrm',
594               SQLERRM);
595       -- notify caller of an UNEXPECTED error
596       -- if the cursor is open
597       IF okl_k_headers_v_pk_csr%ISOPEN THEN
598          CLOSE okl_k_headers_v_pk_csr;
599       END IF;
600       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
601   END get_khrv_rec;
602 
603   FUNCTION get_factor_synd(p_khr_id IN NUMBER) RETURN VARCHAR2 IS
604     CURSOR c_synd IS
605         SELECT
606           'SYNDICATION'
607         FROM
608           okc_k_headers_b chr
609         WHERE
610           EXISTS ( SELECT 'x' FROM okc_k_items cim
611                         WHERE  cim.object1_id1 = to_char(chr.id) AND
612           EXISTS ( SELECT 'x' FROM okc_k_lines_b cle, okc_line_styles_b  lse
613                         WHERE  cle.lse_id = lse.id AND
614           lse.lty_code = 'SHARED' AND cle.id = cim.cle_id ) AND
615           EXISTS ( SELECT 'x' FROM okc_k_headers_b chr2
616                         WHERE  chr2.id = cim.dnz_chr_id AND
617           chr2.scs_code = 'SYNDICATION'                     AND
618           chr2.sts_code not in  ('TERMINATED','ABANDONED') ) ) AND
619           chr.scs_code = 'LEASE' AND
620           id = p_khr_id;
621 
622     CURSOR c_fact IS
623         select '1'
624         from   okc_rules_b
625         where  dnz_chr_id  = p_khr_id
626         and    rule_information_category = 'LAFCTG'
627         and    (rule_information1 is not null
628         or      rule_information2 is not null
629         or      rule_information3 is not null);
630     l_contract_type   VARCHAR2(30);
631 
632   BEGIN
633 
634     OPEN c_synd;
635     FETCH c_synd INTO l_contract_type;
636     CLOSE c_synd;
637 
638     IF l_contract_type IS NOT NULL THEN
639       RETURN  l_contract_type;
640     END IF;
641 
642     OPEN c_fact;
643     FETCH c_fact INTO l_contract_type;
644     CLOSE c_fact;
645 
646     IF l_contract_type IS NOT NULL THEN
647       l_contract_type := 'FACTORING';
648       RETURN  l_contract_type;
649     END IF;
650 
651     RETURN NULL;
652 
653   EXCEPTION
654 
655     WHEN OTHERS THEN
656 
657       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
658                            p_msg_name     => G_UNEXPECTED_ERROR,
659                            p_token1       => G_SQLCODE_TOKEN,
660                            p_token1_value => SQLCODE,
661                            p_token2       => G_SQLERRM_TOKEN,
662                            p_token2_value => SQLERRM);
663 
664   END get_factor_synd;
665 
666  PROCEDURE create_working_copy(
667                 p_api_version           IN      NUMBER,
668                 p_init_msg_list         IN      VARCHAR2 := OKL_API.G_FALSE,
669 		p_commit		IN	VARCHAR2 := OKL_API.G_FALSE,
670                 x_return_status         OUT NOCOPY VARCHAR2,
671                 x_msg_count             OUT NOCOPY NUMBER,
672                 x_msg_data              OUT NOCOPY VARCHAR2,
673                 p_chr_id                IN NUMBER,
674                 x_chr_id                OUT NOCOPY NUMBER)
675   AS
676         l_api_name          CONSTANT VARCHAR2(30) := 'CREATE_WORKING_COPY';
677 	l_seq_no	    NUMBER;
678 	l_orig_contract_number OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
679 	l_new_contract_number  OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
680 	l_khrv_rec             khrv_rec_type;
681 	x_khrv_rec             khrv_rec_type;
682 	l_chrv_rec             chrv_rec_type;
683 	x_chrv_rec             chrv_rec_type;
684 
685 
686 
687   CURSOR orig_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
688   SELECT contract_number
689   FROM   okc_k_headers_v
690   WHERE  id = p_chr_id;
691 
692 
693    BEGIN
694 
695         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
696 
697         --Call start_activity to create savepoint, check compatibility and initialize message list
698         x_return_status := OKL_API.START_ACTIVITY(
699                               l_api_name
700                               ,p_init_msg_list
701                               ,'_PVT'
702                               ,x_return_status);
703 
704         --Check if activity started successfully
705 
706         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
707                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
708         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
709                 RAISE OKL_API.G_EXCEPTION_ERROR;
710         END IF;
711 
712 	--Create the working copy here....
713 
714       -- Get Sequence Number to generate Contract Number
715       SELECT okl_rbk_seq.nextval
716       INTO   l_seq_no
717       FROM   DUAL;
718 
719       -- Get Contract Number from Original Contract
720       OPEN orig_csr(p_chr_id);
721       FETCH orig_csr INTO l_orig_contract_number;
722 
723       IF orig_csr%NOTFOUND THEN
724          RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
725       END IF;
726 
727       CLOSE orig_csr;
728       l_new_contract_number :=  l_orig_contract_number||'-PPD'||l_seq_no;
729 
730       okl_copy_contract_pub.copy_lease_contract(
731                                                  p_api_version              => 1.0,
732                                                  p_init_msg_list            => OKC_API.G_FALSE,
733                                                  x_return_status            => x_return_status,
734                                                  x_msg_count                => x_msg_count,
735                                                  x_msg_data                 => x_msg_data,
736                                                  p_chr_id                   => p_chr_id,
737                                                  p_contract_number          => l_new_contract_number,
738                                                  p_contract_number_modifier => NULL,
739                                                  p_renew_ref_yn             => 'N',
740                                                  p_trans_type               => 'CRB',
741                                                  x_chr_id                   => x_chr_id
742                                                 );
743 
744       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
745          RAISE OKC_API.G_EXCEPTION_ERROR;
746       END IF;
747       --
748       -- Update Rebook Contract Status to 'ABANDONED'
749       --
750       l_khrv_rec.id                      := x_chr_id;
751       l_chrv_rec.id                      := x_chr_id;
752       l_chrv_rec.sts_code                := 'ABANDONED';
753 
754       okl_contract_pub.update_contract_header(
755                                               p_api_version         => 1.0,
756                                               p_init_msg_list       => p_init_msg_list,
757                                               x_return_status       => x_return_status,
758                                               x_msg_count           => x_msg_count,
759                                               x_msg_data            => x_msg_data,
760                                               p_restricted_update   => OKC_API.G_FALSE,
761                                               p_chrv_rec            => l_chrv_rec,
762                                               p_khrv_rec            => l_khrv_rec,
763                                               x_chrv_rec            => x_chrv_rec,
764                                               x_khrv_rec            => x_khrv_rec
765                                              );
766 
767 
768       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
769          RAISE OKC_API.G_EXCEPTION_ERROR;
770       END IF;
771 
772 --**********************************************************
773       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
774                            x_msg_data    => x_msg_data);
775 if p_commit= OKC_API.G_TRUE then
776 	commit;
777 end if;
778 
779   EXCEPTION
780       when OKC_API.G_EXCEPTION_ERROR then
781          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
782                         p_api_name  => l_api_name,
783                         p_pkg_name  => G_PKG_NAME,
784                         p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
785                         x_msg_count => x_msg_count,
786                         x_msg_data  => x_msg_data,
787                         p_api_type  => '_PVT');
788 
789       when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
790          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
791                         p_api_name  => l_api_name,
792                         p_pkg_name  => G_PKG_NAME,
793                         p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
794                         x_msg_count => x_msg_count,
795                         x_msg_data  => x_msg_data,
796                         p_api_type  => '_PVT');
797 
798       when OTHERS then
799          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
800                           p_api_name  => l_api_name,
801                         p_pkg_name  => G_PKG_NAME,
802                         p_exc_name  => 'OTHERS',
803                         x_msg_count => x_msg_count,
804                         x_msg_data  => x_msg_data,
805                         p_api_type  => '_PVT');
806 
807   END create_working_copy;
808 
809 -----------------------------------------------------------------
810 --API to update the HDR info about the Start date, term and End date for the working copy...
811 ----------------------------------------------------------------
812 
813  PROCEDURE update_hdr_info(
814 			       x_return_status  OUT NOCOPY VARCHAR2,
815                                x_msg_count      OUT NOCOPY NUMBER,
816                                x_msg_data       OUT NOCOPY VARCHAR2,
817                                p_working_copy_chr_id 	IN  OKC_K_HEADERS_V.ID%TYPE,
818                                p_start_date     IN  OKL_K_HEADERS_FULL_V.START_DATE%TYPE,
819                                p_end_date       IN  OKL_K_HEADERS_FULL_V.END_DATE%TYPE,
820                                p_term_duration  IN  OKL_K_HEADERS_FULL_V.TERM_DURATION%TYPE
821                               )
822  IS
823 
824   l_khrv_rec    khrv_rec_type;
825   l_chrv_rec    chrv_rec_type;
826   x_khrv_rec    khrv_rec_type;
827   x_chrv_rec    chrv_rec_type;
828 
829   update_failed		EXCEPTION;
830  BEGIN
831 	x_return_status := OKC_API.G_RET_STS_SUCCESS;
832      l_khrv_rec := get_khrv_rec(
833                                 p_khr_id        => p_working_copy_chr_id,
834                                 x_return_status => x_return_status
835                                );
836      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
837         RAISE update_failed;
838      END IF;
839 
840      l_chrv_rec := get_chrv_rec(
841                                 p_chr_id        => p_working_copy_chr_id,
842                                 x_return_status => x_return_status
843                                );
844      IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
845         RAISE update_failed;
846      END IF;
847 
848 
849 	l_khrv_rec.term_duration := p_term_duration;
850 
851         l_chrv_rec.start_date    := p_start_date;
852         l_chrv_rec.end_date      := p_end_date;
853 
854         okl_contract_pub.update_contract_header(
855                                                 p_api_version        => 1.0,
856                                                 p_init_msg_list      => OKC_API.G_FALSE,
857                                                 x_return_status      => x_return_status,
858                                                 x_msg_count          => x_msg_count,
859                                                 x_msg_data           => x_msg_data,
860                                                 p_restricted_update  => OKC_API.G_FALSE,
861                                                 p_chrv_rec           => l_chrv_rec,
862                                                 p_khrv_rec           => l_khrv_rec,
863                                                 x_chrv_rec           => x_chrv_rec,
864                                                 x_khrv_rec           => x_khrv_rec
865                                                );
866         IF (x_return_status <> Okc_Api.G_RET_STS_SUCCESS) THEN
867             x_return_status := Okc_Api.G_RET_STS_ERROR;
868             RAISE update_failed;
869         END IF;
870 
871      --END LOOP;
872 
873      --RETURN;
874 
875   EXCEPTION
876     WHEN update_failed THEN
877        x_return_status := OKC_API.G_RET_STS_ERROR;
878   END update_hdr_info;
879 
880 --
881 /*
882   PROCEDURE get_principal_balance(
883 		p_khr_id		IN	NUMBER
884 		,x_principal_balance OUT NOCOPY NUMBER)
885   IS
886 
887        CURSOR c_payments_made(c_khr_id	NUMBER)
888 	IS
889 	SELECT count(sele.amount)
890 	FROM okl_strm_elements sele,
891        	    okl_streams str,
892        	    okl_strm_type_v sty
893 	WHERE sele.stm_id = str.id
894        	    AND str.sty_id = sty.id
895        	    AND UPPER(sty.name) = 'PRINCIPAL PAYMENT'
896             AND str.say_code = 'CURR'
897            --multigaap changes
898            AND str.ACTIVE_YN = 'Y'
899            AND str.PURPOSE_CODE is NULL
900            --end multigaap changes
901        	    AND str.khr_id = c_khr_id
902        	    and sele.DATE_BILLED is not null;
903 
904 	CURSOR c_initial_principal(c_khr_id NUMBER)
905 	 IS
906 	  SELECT sum(sele.amount)
907 	  FROM okl_strm_elements sele,
908 		okl_streams str,
909 		okl_strm_type_v sty
910 	WHERE sele.stm_id = str.id
911            AND str.sty_id = sty.id
912            AND UPPER(sty.name) = 'PRINCIPAL BALANCE'
913            AND str.say_code = 'CURR'
914            --multigaap changes
915            AND str.ACTIVE_YN = 'Y'
916            AND str.PURPOSE_CODE is NULL
917            --end multigaap changes
918            AND str.khr_id = c_khr_id
919            and sele.stream_element_date = (select min(sele.stream_element_date)
920     					FROM okl_strm_elements sele,
921 						okl_streams str,
922 						okl_strm_type_v sty
923 					WHERE sele.stm_id = str.id
924 					AND str.sty_id = sty.id
925 					AND UPPER(sty.name) = 'PRINCIPAL PAYMENT'
926 					AND str.say_code = 'CURR'
927 				        --multigaap changes
928 				        AND str.ACTIVE_YN = 'Y'
929 				        AND str.PURPOSE_CODE is NULL
930 				        --end multigaap changes
931 					AND str.khr_id = c_khr_id
932 					AND sele.DATE_BILLED is null);
933 
934 	CURSOR c_current_principal(c_khr_id NUMBER)
935 	 IS
936 	  SELECT sum(sele.amount)
937 	  FROM okl_strm_elements sele,
938 		okl_streams str,
939 		okl_strm_type_v sty
940 	WHERE sele.stm_id = str.id
941            AND str.sty_id = sty.id
942            AND UPPER(sty.name) = 'PRINCIPAL BALANCE'
943            AND str.say_code = 'CURR'
944            --multigaap changes
945            AND str.ACTIVE_YN = 'Y'
946            AND str.PURPOSE_CODE is NULL
947            --end multigaap changes
948            AND str.khr_id = c_khr_id
949            and sele.stream_element_date = (select max(sele.stream_element_date)
950     					FROM okl_strm_elements sele,
951 						okl_streams str,
952 						okl_strm_type_v sty
953 					WHERE sele.stm_id = str.id
954 					AND str.sty_id = sty.id
955 					AND UPPER(sty.name) = 'PRINCIPAL PAYMENT'
956 					AND str.say_code = 'CURR'
957                                         --multigaap changes
958                                         AND str.ACTIVE_YN = 'Y'
959                                         AND str.PURPOSE_CODE is NULL
960                                         --end multigaap changes
961 					AND str.khr_id = c_khr_id
962 					AND sele.DATE_BILLED is not null);
963 
964 	l_knt_paid		NUMBER;
965 
966 BEGIN
967 	OPEN c_payments_made(p_khr_id);
968 	FETCH c_payments_made INTO l_knt_paid;
969 	CLOSE c_payments_made;
970 
971 	IF l_knt_paid = 0 THEN
972 		--No payment have been made yet.
973 		OPEN c_initial_principal(p_khr_id);
974 		FETCH c_initial_principal INTO x_principal_balance;
975 		CLOSE c_initial_principal;
976 	ELSE
977 		--Some payments have been made till now.
978 		OPEN c_current_principal(p_khr_id);
979 		FETCH c_current_principal INTO x_principal_balance;
980 		CLOSE c_current_principal;
981 	END IF;
982 
983 END get_principal_balance;
984 
985 */
986 /*
987  PROCEDURE get_payments_remaining(
988 		p_kle_id		IN	NUMBER
989         ,p_parent_kle_id_passed IN VARCHAR2
990 		,x_payments_remaining	OUT NOCOPY NUMBER)
991   IS
992     l_parent_kle_id     NUMBER;
993       CURSOR c_remaining_payments(c_kle_id	NUMBER)
994 	IS
995 	SELECT count(sele.amount)
996 	FROM okl_strm_elements sele,
997        	    okl_streams str,
998        	    okl_strm_type_v sty
999 	WHERE sele.stm_id = str.id
1000        	    AND str.sty_id = sty.id
1001        	    AND UPPER(sty.name) = 'PRINCIPAL PAYMENT'
1002             AND str.say_code = 'CURR'
1003            --multigaap changes
1004            AND str.ACTIVE_YN = 'Y'
1005            AND str.PURPOSE_CODE is NULL
1006            --end multigaap changes
1007        	    AND str.kle_id = c_kle_id
1008        	    and sele.DATE_BILLED is null;
1009     CURSOR c_get_parent_kle_id(c_kle_id NUMBER)
1010     IS
1011     SELECT orig_system_id1
1012     FROM okc_k_lines_b
1013     where id=c_kle_id;
1014 
1015 BEGIN
1016  --Since Streams are not generated for the Copied Contract, We have to
1017  --get the kle_id of the original contract and find the values for
1018  -- that contract from the streams table.
1019  -- The parameter p_parent_kle_id_passed will be 'F' if copied kle_id
1020  -- is passed.
1021 
1022  If (p_parent_kle_id_passed = 'F') THEN
1023     OPEN c_get_parent_kle_id(p_kle_id);
1024     FETCH c_get_parent_kle_id INTO l_parent_kle_id;
1025     CLOSE c_get_parent_kle_id;
1026 ELSE
1027     l_parent_kle_id := p_kle_id;
1028 END IF;
1029 	OPEN c_remaining_payments(l_parent_kle_id);
1030 	FETCH c_remaining_payments INTO x_payments_remaining;
1031 	CLOSE c_remaining_payments;
1032 
1033 
1034 END get_payments_remaining;
1035 
1036 */
1037 FUNCTION get_end_date(
1038     l_start_date      IN  DATE,
1039     p_frequency       IN  VARCHAR2,
1040     p_period          IN  NUMBER)
1041     RETURN DATE IS
1042     l_end_date date;
1043     factor number := 0;
1044     BEGIN
1045      if(p_frequency = 'M') then
1046         factor := 1;
1047      elsif(p_frequency = 'Q') then
1048         factor := 3;
1049      elsif(p_frequency = 'S') then
1050         factor := 6;
1051      elsif(p_frequency = 'A') then
1052         factor := 12;
1053      end if;
1054      l_end_date := add_months(l_start_date, (factor * nvl(p_period,0)));
1055      l_end_date := l_end_date - 1;
1056      return l_end_date;
1057 EXCEPTION
1058     WHEN OTHERS THEN
1059       RETURN null;
1060 END get_end_date;
1061 
1062 FUNCTION get_final_end_date(
1063     p_start_date      IN  VARCHAR2,
1064     p_stub_days       IN  VARCHAR2,
1065     p_frequency       IN  VARCHAR2,
1066     p_period          IN  VARCHAR2)
1067     RETURN DATE IS
1068     l_end_date date;
1069     BEGIN
1070      if(p_stub_days is not null and p_stub_days <> OKL_API.G_MISS_CHAR) then -- end date for stub entry.
1071         l_end_date := FND_DATE.canonical_to_date(p_start_date) + to_number(p_stub_days);
1072         l_end_date := l_end_date - 1;
1073      else -- end date for level entry.
1074         l_end_date := get_end_date(FND_DATE.canonical_to_date(p_start_date), p_frequency, to_number(nvl(p_period,0)));
1075      end if;
1076      return l_end_date;
1077 EXCEPTION
1078     WHEN OTHERS THEN
1079       RETURN '';
1080 END get_final_end_date;
1081 
1082 --************************************************************************
1083 -- API for getting the payment details for a contract.
1084 -- This API will be used when we call ISG for Stream Generation
1085 -- This API accepts the contract ID and then gets the asset lines on the
1086 -- contract  and calculates the remaining payments for the asset line.
1087 -- For calculation of the remaining payments we do no see whether the
1088 -- Billing has been run for the contract or not.
1089 -- We get the number of remaining payments are of the paydown date
1090 -- and calculate the number of payments going forward.
1091 -- We figure out which line has the longest term remaining and get the
1092 -- Frequency and Advance arrears for that line and send it to ISG.
1093 --***********************************************************************
1094 
1095 
1096 
1097 PROCEDURE get_payment_details
1098 (	p_contract_id		IN	NUMBER
1099 	,p_paydown_date		IN	DATE
1100         ,x_line_id              OUT NOCOPY NUMBER
1101         ,x_frequency            OUT NOCOPY VARCHAR2
1102         ,x_arrears_yn           OUT NOCOPY VARCHAR2
1103 	,x_payments_remaining	OUT NOCOPY NUMBER)
1104 AS
1105     l_number_of_payments    NUMBER;
1106     l_max_number_of_payments    NUMBER := 0;
1107     l_line_id_max_payments  NUMBER;
1108     l_rent_slh_id       NUMBER;
1109 
1110     CURSOR c_line_id (l_khr_id NUMBER)
1111     IS
1112        SELECT line.id line_id
1113        FROM okl_k_lines_full_v line,
1114             okc_line_styles_v lse
1115        WHERE line.lse_id=lse.id
1116        and lse.lty_code='FREE_FORM1'
1117        and dnz_chr_id=l_khr_id;
1118 
1119 
1120     CURSOR c_get_remaining_payments(c_line_id NUMBER,c_pay_date DATE)
1121     IS
1122       SELECT count(sel.amount)
1123       FROM okl_strm_elements sel,
1124            okl_streams stm,
1125            okl_strm_type_v sty
1126       WHERE sty.name = 'PRINCIPAL PAYMENT'
1127         AND stm.sty_id = sty.id
1128         AND stm.say_code = 'CURR'
1129         AND stm.active_yn = 'Y'
1130         AND stm.purpose_code is NULL
1131         AND stm.kle_id = c_line_id
1132         AND sel.stm_id = stm.id
1133         AND sel.stream_element_date >
1134                    ( SELECT NVL(MAX(sel.stream_element_date), c_pay_date)
1135                      FROM okl_strm_elements sel,okl_streams stm,
1136                           okl_strm_type_v sty
1137                      WHERE sty.name = 'PRINCIPAL PAYMENT'
1138                        AND stm.sty_id = sty.id
1139                        AND stm.say_code = 'CURR'
1140                        AND stm.active_yn = 'Y'
1141                        AND stm.purpose_code is NULL
1142                        AND stm.kle_id = c_line_id
1143                        AND sel.stm_id = stm.id
1144                        AND sel.stream_element_date <= c_pay_date);
1145 
1146     CURSOR c_get_rent_slh_id(c_line_id NUMBER,c_khr_id NUMBER)
1147     IS
1148         select rl.id
1149         from okc_rule_groups_v rg,
1150              okc_rules_v rl
1151         where rl.rgp_id = rg.id
1152           and rl.dnz_chr_id = rg.dnz_chr_id
1153           and rg.cle_id = c_line_id
1154           and rg.rgd_code = 'LALEVL'
1155           and rl.rule_information_category = 'LASLH'
1156           and rl.dnz_chr_id = c_khr_id
1157           and rl.object1_id1=(select id from okl_strm_type_b where code='RENT');
1158 
1159     CURSOR c_get_freq_arr(c_line_id NUMBER,c_khr_id NUMBER,c_rent_slh_id NUMBER)
1160     IS
1161         select rl.object1_id1 frequency
1162               ,nvl(rl.rule_information10,'N') Arrears
1163         from okc_rule_groups_v rg,
1164              okc_rules_v rl
1165         where rl.rgp_id = rg.id
1166           and rl.dnz_chr_id = rg.dnz_chr_id
1167           and rg.cle_id = c_line_id
1168           and rg.rgd_code = 'LALEVL'
1169           and rl.rule_information_category = 'LASLL'
1170           and rl.dnz_chr_id = c_khr_id
1171           and rl.object2_id1=c_rent_slh_id
1172           and rownum = 1;
1173 
1174 
1175 BEGIN
1176 
1177 	FOR cur_rec in c_line_id(p_contract_id) LOOP
1178 
1179     		OPEN c_get_remaining_payments(cur_rec.line_id,p_paydown_date);
1180 		FETCH c_get_remaining_payments INTO l_number_of_payments;
1181 		CLOSE c_get_remaining_payments;
1182 
1183     		If l_number_of_payments > l_max_number_of_payments THEN
1184         		l_max_number_of_payments := l_number_of_payments;
1185         		l_line_id_max_payments := cur_rec.line_id;
1186     		END IF;
1187 
1188 	END LOOP;
1189 
1190     	OPEN c_get_rent_slh_id(l_line_id_max_payments,p_contract_id);
1191     	FETCH c_get_rent_slh_id INTO l_rent_slh_id;
1192     	CLOSE c_get_rent_slh_id;
1193 
1194     	OPEN c_get_freq_arr(l_line_id_max_payments,p_contract_id,l_rent_slh_id);
1195     	FETCH c_get_freq_arr INTO x_frequency,x_arrears_yn;
1196     	CLOSE c_get_freq_arr;
1197 
1198 
1199     	x_line_id := l_line_id_max_payments;
1200     	x_payments_remaining := l_max_number_of_payments;
1201 
1202 
1203 END get_payment_details;
1204 
1205   PROCEDURE get_current_payments(
1206     p_khr_id            IN  NUMBER,
1207     x_payment_struc     OUT NOCOPY okl_mass_rebook_pvt.strm_lalevl_tbl_type,
1208     x_prim_sty_id       OUT NOCOPY NUMBER,
1209     x_upp_sty_id        OUT NOCOPY NUMBER,
1210     x_primary_strm_type  OUT NOCOPY VARCHAR2) AS
1211 
1212    /*-----------------------------------------------------------------------+
1213  *    | Cursor Declarations                                                   |
1214  *       +-----------------------------------------------------------------------*/
1215 
1216 --added by rkuttiya for 11i OKL.H Variable Rate Project
1217    --Get type of Stream type , Principal Payment Stream type or Rent Stream type
1218    CURSOR  l_stream_type_csr(p_stream_type IN VARCHAR2
1219                            ,p_khr_id IN NUMBER) IS
1220     SELECT  COUNT(*)
1221     FROM    okc_rules_b sll_rul,
1222             okl_strmtyp_source_v sttyp,
1223             okc_rules_b slh_rul,
1224             okc_rule_groups_b rgp
1225     WHERE   sll_rul.object2_id1 = to_char(slh_rul.id)
1226     AND     sll_rul.rgp_id    = rgp.id
1227     AND     sll_rul.rule_information_category = 'LASLL'
1228     AND     sttyp.id1 = slh_rul.object1_id1
1229     AND     slh_rul.rgp_id = rgp.id
1230     AND     slh_rul.rule_information_category = 'LASLH'
1231     AND     rgp.rgd_code = 'LALEVL'
1232     AND     sttyp.stream_type_purpose = p_stream_type
1233     AND     rgp.dnz_chr_id = p_khr_id;
1234 
1235     -- Get all the assets attached to the contract
1236     -- These lines may or may not have payments associated with them
1237     CURSOR l_okcklines_csr(cp_chr_id IN NUMBER) IS
1238     SELECT cle.id, cle.lse_id, lse.lty_code
1239     FROM   okc_k_lines_b cle, okc_line_styles_b lse
1240     WHERE  cle.lse_id = lse.id
1241     AND    cle.sts_code = 'BOOKED'
1242     AND    lse.lty_code = 'FREE_FORM1'
1243     AND    chr_id = cp_chr_id;
1244 
1245     --This cursor returns the payments associated with an Asset
1246     -- Get the current Line Level payments
1247     CURSOR  l_lpayments_csr(cp_cle_id IN NUMBER
1248                            ,cp_sty_id IN NUMBER) IS
1249     SELECT  rgp.cle_id cle_id,
1250         sttyp.id1   sty_id,
1251         sttyp.code  stream_type,
1252         tuom.id1 frequency,
1253         sll_rul.rule_information1 seq_num,
1254         sll_rul.rule_information2 start_date,
1255         sll_rul.rule_information3 period_in_months,
1256         sll_rul.rule_information5 advance_periods,
1257         sll_rul.rule_information6 amount,
1258         sll_rul.rule_information10 due_arrears_yn,
1259         sll_rul.rule_information7 stub_days,
1260         sll_rul.rule_information8 stub_amount,
1261         rgp.dnz_chr_id khr_id
1262     FROM    okl_time_units_v tuom,
1263         okc_rules_b sll_rul,
1264         okl_strmtyp_source_v sttyp,
1265         okc_rules_b slh_rul,
1266         okc_rule_groups_b rgp
1267     WHERE   tuom.id1      = sll_rul.object1_id1
1268     AND     sll_rul.object2_id1 = to_char(slh_rul.id)
1269     AND     sll_rul.rgp_id    = rgp.id
1270     AND     sll_rul.rule_information_category = 'LASLL'
1271     AND     sttyp.id1 = slh_rul.object1_id1
1272     AND     slh_rul.rgp_id = rgp.id
1273     AND     slh_rul.rule_information_category = 'LASLH'
1274     AND     rgp.rgd_code = 'LALEVL'
1275     AND     rgp.cle_id = cp_cle_id
1276     AND     sttyp.id1 = cp_sty_id
1277     ORDER BY stream_type, start_date;
1278 
1279 
1280 
1281  /*-----------------------------------------------------------------------+
1282  *  | Local Variable Declarations and initializations                       |
1283  *   +-----------------------------------------------------------------------*/
1284     l_prev_sty_id NUMBER := -99;
1285     l_payment_struc              okl_mass_rebook_pvt.strm_lalevl_tbl_type;
1286     i                            NUMBER :=1;
1287     x_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1288     --l_rent_sty_id            NUMBER;
1289     l_prim_sty_id            NUMBER;
1290     l_strm_type              VARCHAR2(80);
1291     l_upp_sty_id             NUMBER;
1292     l_rent_count             NUMBER;
1293     l_principal_count        NUMBER;
1294   BEGIN
1295     IF (G_DEBUG_ENABLED = 'Y') THEN
1296       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1297     END IF;
1298 
1299     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1300        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.get_current_payments'
1301                                                                         ,'Begin(+)');
1302     END IF;
1303 
1304     --Print Input Variables
1305    IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1306        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.get_current_payments.',
1307               'p_khr_id  :'||p_khr_id );
1308 
1309    END IF;
1310 
1311 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1312   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Get current payments');
1313 END IF;
1314 
1315     --rkuttiya added for 11i OKL.H Variable Rate Project
1316       -- Get primary stream type on the contract
1317        OPEN l_stream_type_csr('PRINCIPAL_PAYMENT',p_khr_id);
1318        FETCH l_stream_type_csr INTO l_principal_count;
1319        CLOSE l_stream_type_csr;
1320         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1321                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_principal_count);
1322         END IF;
1323 
1324        OPEN l_stream_type_csr('RENT',p_khr_id);
1325        FETCH l_stream_type_csr INTO l_rent_count;
1326        CLOSE l_stream_type_csr;
1327         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1328                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_rent_count);
1329         END IF;
1330 
1331        IF l_principal_count > 0 THEN
1332          l_strm_type := 'PRINCIPAL_PAYMENT';
1333        --get the sty_id for principal payment
1334        OKL_STREAMS_UTIL.get_dependent_stream_type(
1335                  p_khr_id                        => p_khr_id
1336                  ,p_primary_sty_purpose          => G_RENT_STREAM
1337                  ,p_dependent_sty_purpose        => G_PRINCIPAL_PAYMENT
1338                  ,x_return_status                => x_return_status
1339                  ,x_dependent_sty_id             => l_prim_sty_id);
1340 
1341           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1342                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After getting primary stream type for Principal Payment'|| x_return_status);
1343             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Primary Stream Type Id for Principal Payment'|| l_prim_sty_id);
1344           END IF;
1345 
1346         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1347                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1348         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1349                 RAISE OKL_API.G_EXCEPTION_ERROR;
1350         END IF;
1351 
1352  --Get the Stream type id for UPP.
1353         OKL_STREAMS_UTIL.get_dependent_stream_type(
1354                  p_khr_id                        => p_khr_id
1355                  ,p_primary_sty_purpose          => G_RENT_STREAM
1356                  ,p_dependent_sty_purpose        => G_UNSCHED_PP_STREAM
1357                  ,x_return_status                => x_return_status
1358                  ,x_dependent_sty_id             => l_upp_sty_id);
1359         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1360                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type: '|| x_return_status);
1361           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'dependent stream type id: '||l_upp_sty_id);
1362         END IF;
1363 
1364         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1365                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1366         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1367                 RAISE OKL_API.G_EXCEPTION_ERROR;
1368         END IF;
1369 
1370        ELSIF l_rent_count  > 0 THEN
1371          l_strm_type := 'RENT';
1372           --get the sty id for rent.
1373         OKL_STREAMS_UTIL.get_primary_stream_type
1374                 (p_khr_id              => p_khr_id
1375                 ,p_primary_sty_purpose => G_RENT_STREAM
1376                 ,x_return_status       => x_return_status
1377                 ,x_primary_sty_id      => l_prim_sty_id);
1378  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1379    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Get primary strm type for Rent ' || x_return_status);
1380           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Primary Stream Type Id for Rent'   || l_prim_sty_id);
1381  END IF;
1382 
1383         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1384                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1385         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1386                 RAISE OKL_API.G_EXCEPTION_ERROR;
1387         END IF;
1388 
1389         --Get the Stream type id for UPP.
1390         OKL_STREAMS_UTIL.get_dependent_stream_type(
1391                  p_khr_id                        => p_khr_id
1392                  ,p_primary_sty_purpose          => G_RENT_STREAM
1393                  ,p_dependent_sty_purpose        => G_UNSCHED_PP_STREAM
1394                  ,x_return_status                => x_return_status
1395                  ,x_dependent_sty_id             => l_upp_sty_id);
1396         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1397                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type: '|| x_return_status);
1398           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Dependent Stream Type Id :' || l_upp_sty_id);
1399         END IF;
1400 
1401         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1402                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1403         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1404                 RAISE OKL_API.G_EXCEPTION_ERROR;
1405         END IF;
1406        END IF;
1407 
1408 
1409 
1410    --------------get curent line level payments ---------------------------
1411    -- get all the contract lines
1412    FOR l_okcklines_rec IN l_okcklines_csr(p_khr_id) LOOP
1413 
1414        l_prev_sty_id := -99;
1415 
1416 	--Get the Rent Payments
1417        FOR l_lpayments_rec IN l_lpayments_csr(l_okcklines_rec.id,l_prim_sty_id) LOOP
1418         IF l_prev_sty_id <> l_lpayments_rec.sty_id THEN
1419             --Create the SLH here
1420             l_payment_struc(i).chr_id :=  l_lpayments_rec.khr_id;
1421             l_payment_struc(i).cle_id :=  l_lpayments_rec.cle_id;
1422             l_payment_struc(i).RULE_INFORMATION_CATEGORY := 'LASLH';
1423             l_payment_struc(i).OBJECT1_ID1 :=  l_lpayments_rec.sty_id;
1424             i := i+ 1;
1425         END IF;
1426               --Now populate LASLLs
1427             l_payment_struc(i).chr_id :=  l_lpayments_rec.khr_id;
1428             l_payment_struc(i).cle_id :=  l_lpayments_rec.cle_id;
1429             l_payment_struc(i).rule_information1 := l_lpayments_rec.seq_num;
1430             l_payment_struc(i).RULE_INFORMATION2 := l_lpayments_rec.start_date;
1431             l_payment_struc(i).rule_information3 := l_lpayments_rec.period_in_months;
1432             l_payment_struc(i).rule_information5 := l_lpayments_rec.advance_periods;
1433             l_payment_struc(i).rule_information6 := l_lpayments_rec.amount;
1434             l_payment_struc(i).rule_information7 := l_lpayments_rec.stub_days;
1435             l_payment_struc(i).rule_information8 := l_lpayments_rec.stub_amount;
1436             l_payment_struc(i).rule_information10 := l_lpayments_rec.due_arrears_yn;
1437             l_payment_struc(i).RULE_INFORMATION_CATEGORY := 'LASLL';
1438             l_payment_struc(i).OBJECT1_ID1 := l_lpayments_rec.frequency;  --Freq
1439             -- ansethur 28-feb-08 bug # 6697542
1440             l_payment_struc(i).OBJECT2_ID2 := '#';
1441             -- ansethur 28-feb-08 bug # 6697542
1442             i := i + 1;
1443             l_prev_sty_id :=  l_lpayments_rec.sty_id;
1444 
1445        END LOOP;
1446 
1447 	--Get the earlier Unscheduled Principal Payments for this line.
1448        FOR l_lpayments_rec IN l_lpayments_csr(l_okcklines_rec.id,l_upp_sty_id) LOOP
1449         IF l_prev_sty_id <> l_lpayments_rec.sty_id THEN
1450             --Create the SLH here
1451             l_payment_struc(i).chr_id :=  l_lpayments_rec.khr_id;
1452             l_payment_struc(i).cle_id :=  l_lpayments_rec.cle_id;
1453             l_payment_struc(i).RULE_INFORMATION_CATEGORY := 'LASLH';
1454             l_payment_struc(i).OBJECT1_ID1 :=  l_lpayments_rec.sty_id;
1455             i := i+ 1;
1456         END IF;
1457               --Now populate LASLLs
1458             l_payment_struc(i).chr_id :=  l_lpayments_rec.khr_id;
1459             l_payment_struc(i).cle_id :=  l_lpayments_rec.cle_id;
1460             l_payment_struc(i).rule_information1 := l_lpayments_rec.seq_num;
1461             l_payment_struc(i).RULE_INFORMATION2 := l_lpayments_rec.start_date;
1462             l_payment_struc(i).rule_information3 := l_lpayments_rec.period_in_months;
1463             l_payment_struc(i).rule_information5 := l_lpayments_rec.advance_periods;
1464             l_payment_struc(i).rule_information6 := l_lpayments_rec.amount;
1465             l_payment_struc(i).rule_information7 := l_lpayments_rec.stub_days;
1466             l_payment_struc(i).rule_information8 := l_lpayments_rec.stub_amount;
1467             l_payment_struc(i).rule_information10 := l_lpayments_rec.due_arrears_yn;
1468             l_payment_struc(i).RULE_INFORMATION_CATEGORY := 'LASLL';
1469             l_payment_struc(i).OBJECT1_ID1 := l_lpayments_rec.frequency;  --Freq
1470             --asawanka added for bug #6679623 start
1471             l_payment_struc(i).OBJECT2_ID2 := '#';
1472             --asawanka added for bug #6679623 end
1473             i := i + 1;
1474             l_prev_sty_id :=  l_lpayments_rec.sty_id;
1475        END LOOP;
1476 
1477 
1478    END LOOP;
1479    --------------------end get current line level payments -----------------------
1480 
1481   -- set the return status and out variables
1482   x_payment_struc := l_payment_struc;
1483   x_primary_strm_type := l_strm_type;
1484   x_prim_sty_id       := l_prim_sty_id;
1485   x_upp_sty_id        := l_upp_sty_id;
1486 
1487   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1488        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.get_current_payments'
1489                                                                         ,'End(-)');
1490   END IF;
1491   END get_current_payments;
1492 
1493 PROCEDURE modify_payments(
1494     p_payment_struc     IN okl_mass_rebook_pvt.strm_lalevl_tbl_type,
1495     p_ppd_date		IN DATE,
1496     p_blank_amount	IN VARCHAR2,
1497     p_rent_sty_id	IN NUMBER,
1498     x_modified_payment_struc     OUT NOCOPY okl_mass_rebook_pvt.strm_lalevl_tbl_type)
1499 AS
1500 
1501 
1502    --The parameter p_blank_amount is very important and the allowable
1503    --values are 'Y', 'N' or 'NEGATE'
1504    --If the value is 'Y' , then the amount will be set to Zero
1505    --If the value is 'NEGATE', then the amount will be multiplied by -1 to
1506    --negate the value.
1507    --If the value is 'N', then the amount will not be touched.
1508    --In the CASE of ISG, the amount should not be touched.
1509    --In the CASE of ESG, the amount should be negated. We are doing this because
1510    --we need to figure out whether to lock the amount or rate or both when
1511    --sending the params to Pricing using ESG. So, if the amount is -ve, we
1512    --lock the rate and set the amount back to positive, if the amount is +ve,
1513    --we lock Both and send the amount as is.
1514 
1515  /*-----------------------------------------------------------------------+
1516  *  | Local Variable Declarations and initializations                       |
1517  *   +-----------------------------------------------------------------------*/
1518     l_prev_sty_id NUMBER := -99;
1519     l_payment_struc              okl_mass_rebook_pvt.strm_lalevl_tbl_type := p_payment_struc;
1520     i                            NUMBER :=1;
1521     x_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1522     l_sty_id			NUMBER;
1523 
1524    --Split
1525     l_end_date      DATE;
1526     l_upper_period        NUMBER;
1527     l_lower_period        NUMBER;
1528     l_payment_already_split VARCHAR2(1) := 'N';
1529     k       NUMBER := 1;
1530     l_modified_payments okl_mass_rebook_pvt.strm_lalevl_tbl_type;
1531     l_prev_cle_id NUMBER := -99;
1532     pymnt_knt   NUMBER;
1533     l_stub_pymnt    VARCHAR2(1);
1534     l_upper_stub_days   NUMBER;
1535     l_lower_stub_days   NUMBER;
1536     l_stub_days   NUMBER;
1537 
1538   BEGIN
1539     IF (G_DEBUG_ENABLED = 'Y') THEN
1540       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1541     END IF;
1542 
1543     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN --[1]
1544        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_payments'
1545                                                                         ,'Begin(+)');
1546     END IF; --[1]
1547 
1548 
1549    FOR j in l_payment_struc.FIRST..l_payment_struc.LAST LOOP
1550     IF l_prev_cle_id <> l_payment_struc(j).cle_id THEN --[2]
1551         l_payment_already_split := 'N';
1552         l_prev_cle_id   := l_payment_struc(j).cle_id;
1553         IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1554             FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_payments.',
1555               'cle_id is  :'||l_payment_struc(j).cle_id );
1556         END IF;
1557 
1558     END IF; --[2]
1559 
1560     IF l_payment_struc(j).RULE_INFORMATION_CATEGORY = 'LASLH' THEN --[3]
1561         --Copy the values to the other payment stuc table.
1562         l_modified_payments(k) :=  l_payment_struc(j);
1563 	l_sty_id	       := l_payment_struc(j).object1_id1;
1564         k := k+ 1;
1565     END IF; -- [3]
1566 
1567     IF l_payment_struc(j).RULE_INFORMATION_CATEGORY = 'LASLL' THEN --[4]
1568 	IF l_sty_id = p_rent_sty_id THEN --[5]
1569             l_end_date := get_final_end_date(
1570                      p_start_date => l_payment_struc(j).RULE_INFORMATION2
1571                     ,p_stub_days  => l_payment_struc(j).rule_information7
1572                     ,p_frequency  => l_payment_struc(j).OBJECT1_ID1
1573                     ,p_period     => l_payment_struc(j).rule_information3);
1574 
1575      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1576        	    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'End Date is : '|| l_end_date);
1577      END IF;
1578             IF l_end_date > p_ppd_date  THEN --[6]
1579 
1580                 IF l_payment_already_split <> 'Y' THEN --[7]
1581                     --Split Only this payment.
1582                     l_payment_already_split := 'Y';
1583                     IF l_payment_struc(j).rule_information7 <> 0 THEN
1584                         pymnt_knt := l_payment_struc(j).rule_information7; --Use Stub days
1585                         l_stub_pymnt := 'Y';
1586                     ELSE
1587                         pymnt_knt := l_payment_struc(j).rule_information3; --Use actual periods
1588                         l_stub_pymnt := 'N';
1589                     END IF;
1590       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1591         		    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Stub Payment is : '|| l_stub_pymnt);
1592       END IF;
1593                     FOR i in 1..pymnt_knt LOOP
1594                         IF l_stub_pymnt = 'Y' THEN
1595                             l_stub_days := i;
1596                         ELSE
1597                             l_stub_days := l_payment_struc(j).rule_information7;
1598                         END IF;
1599                         l_end_date := get_final_end_date(
1600                         p_start_date => l_payment_struc(j).RULE_INFORMATION2
1601                         ,p_stub_days  => l_stub_days
1602                         ,p_frequency  => l_payment_struc(j).OBJECT1_ID1
1603                         ,p_period     => i);
1604                         IF l_stub_pymnt = 'Y' THEN
1605                             l_upper_stub_days := i;
1606                         ELSE
1607                             l_upper_period := i;
1608                         END IF;
1609                         IF l_end_date >= p_ppd_date THEN --[8]
1610                             IF l_stub_pymnt = 'Y' THEN
1611                                 l_lower_stub_days := l_payment_struc(j).rule_information7 - l_upper_stub_days;
1612                             ELSE
1613                                 l_lower_period := l_payment_struc(j).rule_information3 - l_upper_period ;
1614                             END IF;
1615 			    --Check for Adv/arrears and split accordingly.
1616 		            IF l_payment_struc(j).rule_information10 = 'Y' THEN --Arrear payment
1617 				IF l_stub_pymnt = 'Y' THEN
1618 					l_upper_stub_days := l_upper_stub_days - 1;
1619 					l_lower_stub_days := l_lower_stub_days + 1;
1620 				ELSE
1621 					l_upper_period := l_upper_period -1;
1622 					l_lower_period := l_lower_period +1;
1623 				END IF;
1624 				--recalculate the end days.
1625                         	l_end_date := get_final_end_date(
1626                         		p_start_date => l_payment_struc(j).RULE_INFORMATION2
1627                         		,p_stub_days  => l_upper_stub_days
1628                         		,p_frequency  => l_payment_struc(j).OBJECT1_ID1
1629                         		,p_period     => l_upper_period);
1630 			    END IF;
1631        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1632          			    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Lower Period is :' || l_lower_period);
1633   			    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Upper Period is :' || l_upper_period);
1634        END IF;
1635                             EXIT;
1636                         END IF; --[8]
1637                     END LOOP;
1638                     l_modified_payments(k) :=  l_payment_struc(j);
1639                     IF l_stub_pymnt = 'N' THEN
1640                         l_modified_payments(k).rule_information3 := l_upper_period; --SEt the period
1641                     ELSE
1642                         l_modified_payments(k).rule_information7 := l_upper_stub_days; --Set the stub days
1643                     END IF;
1644                     k := K+1;
1645                     --For the second part of the split payment
1646                     l_modified_payments(k) :=  l_payment_struc(j);
1647                     --l_modified_payments(k).RULE_INFORMATION2 := to_date(l_end_date +1);
1648                     l_modified_payments(k).RULE_INFORMATION2 := FND_DATE.date_to_canonical(l_end_date +1);
1649                     --  l_modified_payments(k).RULE_INFORMATION2 := FND_DATE.date_to_canonical(l_end_date);
1650                     IF l_stub_pymnt = 'N' THEN --[9]
1651                         l_modified_payments(k).rule_information3 := l_lower_period;
1652 			IF p_blank_amount = 'Y' THEN
1653 	                        l_modified_payments(k).rule_information6 := 0;  --Set amount to Zero
1654             		ELSIF p_blank_amount = 'NEGATE' THEN
1655                             l_modified_payments(k).rule_information6 := -1
1656 							* NVL(l_modified_payments(k).rule_information6,0);
1657 
1658 			END IF;
1659                     ELSE --[9]
1660                         l_modified_payments(k).rule_information7 := l_lower_stub_days;
1661 			IF p_blank_amount = 'Y' THEN
1662                         	l_modified_payments(k).rule_information8 := 0; --Set Stub amount to Zero
1663             		ELSIF p_blank_amount = 'NEGATE' THEN
1664                             	l_modified_payments(k).rule_information8 := -1
1665 							 * NVL(l_modified_payments(k).rule_information8,0);
1666 
1667 			END IF;
1668                     END IF;                        --[9]
1669                     k := k+1;
1670                 ELSE --[7]
1671                     l_modified_payments(k) :=  l_payment_struc(j);
1672                     IF   l_payment_struc(j).rule_information7 <> 0 THEN
1673 			IF p_blank_amount = 'Y' THEN
1674                             l_modified_payments(k).rule_information8 := 0; --Set Stub amount to Zero
1675             		ELSIF p_blank_amount = 'NEGATE' THEN
1676                             	l_modified_payments(k).rule_information8 := -1
1677 							 * NVL(l_modified_payments(k).rule_information8,0);
1678 			END IF;
1679                     ELSE
1680 			IF p_blank_amount = 'Y' THEN
1681                             l_modified_payments(k).rule_information6 := 0; --Set amount to Zero
1682             		ELSIF p_blank_amount = 'NEGATE' THEN
1683                             l_modified_payments(k).rule_information6 := -1
1684 							* NVL(l_modified_payments(k).rule_information6,0);
1685 			END IF;
1686                     END IF;
1687                     k := k+ 1;
1688                 END IF; --[7]
1689             ELSE  --[6]
1690                 l_modified_payments(k) :=  l_payment_struc(j);
1691                 k := k+ 1;
1692             END IF; --[6]
1693 	ELSE --[5]
1694 	    l_modified_payments(k) :=  l_payment_struc(j);
1695             k := k+ 1;
1696 	END IF; --[5]
1697     END IF; --[4]
1698 END LOOP;
1699 
1700 
1701 
1702   -- set the return status and out variables
1703   x_modified_payment_struc := l_modified_payments;
1704 
1705 
1706   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1707        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_payments'
1708                                                                         ,'End(-)');
1709   END IF;
1710 END modify_payments;
1711 
1712 PROCEDURE modify_terms(
1713     p_payment_struc     IN okl_mass_rebook_pvt.strm_lalevl_tbl_type,
1714     p_chr_id                 IN NUMBER,
1715     p_ppd_date		         IN DATE,
1716     p_ppd_amount	         IN VARCHAR2,
1717     p_total_k_cost           IN NUMBER,
1718     p_sty_id	             IN NUMBER,
1719     p_upp_sty_id             IN NUMBER,
1720     x_modified_payment_struc     OUT NOCOPY okl_mass_rebook_pvt.strm_lalevl_tbl_type)
1721 AS
1722 
1723 
1724    --The parameter p_blank_amount is very important and the allowable
1725    --values are 'Y', 'N' or 'NEGATE'
1726    --If the value is 'Y' , then the amount will be set to Zero
1727    --If the value is 'NEGATE', then the amount will be multiplied by -1 to
1728    --negate the value.
1729    --If the value is 'N', then the amount will not be touched.
1730    --In the CASE of ISG, the amount should not be touched.
1731    --In the CASE of ESG, the amount should be negated. We are doing this because
1732    --we need to figure out whether to lock the amount or rate or both when
1733    --sending the params to Pricing using ESG. So, if the amount is -ve, we
1734    --lock the rate and set the amount back to positive, if the amount is +ve,
1735    --we lock Both and send the amount as is.
1736 
1737  /*-----------------------------------------------------------------------+
1738  *  | Local Variable Declarations and initializations                       |
1739  *   +-----------------------------------------------------------------------*/
1740     l_prev_sty_id NUMBER := -99;
1741     l_payment_struc              okl_mass_rebook_pvt.strm_lalevl_tbl_type := p_payment_struc;
1742     i                            NUMBER :=1;
1743     x_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1744     l_api_version                 CONSTANT NUMBER := 1;
1745     l_init_msg_list               VARCHAR2(1) := 'T';
1746     l_msg_count                   NUMBER;
1747     l_msg_data                    VARCHAR2(2000);
1748     l_message                     VARCHAR2(2000);
1749     l_sty_id			          NUMBER;
1750     l_currency_code			      VARCHAR2(30);
1751     l_acc_int                     NUMBER;
1752     l_current_amount              NUMBER;
1753 
1754    --Split
1755     l_end_date              DATE;
1756     l_upper_period          NUMBER;
1757     l_lower_period          NUMBER;
1758     l_term_already_split VARCHAR2(1) := 'N';
1759     k                       NUMBER := 1;
1760     l_modified_payments     okl_mass_rebook_pvt.strm_lalevl_tbl_type;
1761     l_prev_cle_id           NUMBER := -99;
1762     pymnt_knt               NUMBER;
1763     l_stub_pymnt            VARCHAR2(1);
1764     l_upper_stub_days       NUMBER;
1765     l_lower_stub_days       NUMBER;
1766     l_stub_days             NUMBER;
1767     l_principal_balance      NUMBER;
1768     l_asset_cost            NUMBER;
1769     l_ppd_for_asset         NUMBER;
1770     l_raw_ppd_amount        NUMBER;
1771     l_ppd_amount            NUMBER;
1772     l_raw_ppd_for_asset     NUMBER;
1773     l_total_princ_balance   NUMBER;
1774     l_amount                NUMBER;
1775 
1776   BEGIN
1777     IF (G_DEBUG_ENABLED = 'Y') THEN
1778       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1779     END IF;
1780 
1781     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN --[1]
1782        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_terms'
1783                                                                         ,'Begin(+)');
1784     END IF; --[1]
1785 
1786 
1787    FOR j in l_payment_struc.FIRST..l_payment_struc.LAST LOOP
1788     IF l_prev_cle_id <> l_payment_struc(j).cle_id THEN --[2]
1789         l_term_already_split := 'N';
1790 
1791         l_prev_cle_id   := l_payment_struc(j).cle_id;
1792         IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
1793             FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_payments.',
1794               'cle_id is  :'||l_payment_struc(j).cle_id );
1795         END IF;
1796 
1797     END IF; --[2]
1798 
1799     IF l_payment_struc(j).RULE_INFORMATION_CATEGORY = 'LASLH' THEN --[3]
1800         --Copy the values to the other payment stuc table.
1801         l_modified_payments(k) :=  l_payment_struc(j);
1802 	l_sty_id	       := l_payment_struc(j).object1_id1;
1803         k := k+ 1;
1804     END IF; -- [3]
1805 
1806     IF l_payment_struc(j).RULE_INFORMATION_CATEGORY = 'LASLL' THEN --[4]
1807 	IF l_sty_id = p_sty_id THEN --[5]
1808             l_end_date := get_final_end_date(
1809                      p_start_date => l_payment_struc(j).RULE_INFORMATION2
1810                     ,p_stub_days  => l_payment_struc(j).rule_information7
1811                     ,p_frequency  => l_payment_struc(j).OBJECT1_ID1
1812                     ,p_period     => l_payment_struc(j).rule_information3);
1813 
1814      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1815        	    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'End Date is : '|| l_end_date);
1816      END IF;
1817             IF l_end_date > p_ppd_date  THEN --[6]
1818 
1819                 IF l_term_already_split <> 'Y' THEN --[7]
1820                     --Split Only this payment.
1821                     l_term_already_split := 'Y';
1822                     --Bug#5100215 following cade added to drive upper period -dkagrawa
1823                     IF l_payment_struc(j).rule_information7 <> 0 THEN
1824                         pymnt_knt := l_payment_struc(j).rule_information7; --Use Stub days
1825                         l_stub_pymnt := 'Y';
1826                     ELSE
1827                         pymnt_knt := l_payment_struc(j).rule_information3; --Use actual periods
1828                         l_stub_pymnt := 'N';
1829                     END IF;
1830       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1831         		    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Stub Payment is : '|| l_stub_pymnt);
1832       END IF;
1833                     FOR i in 1..pymnt_knt LOOP
1834                         IF l_stub_pymnt = 'Y' THEN
1835                             l_stub_days := i;
1836                         ELSE
1837                             l_stub_days := l_payment_struc(j).rule_information7;
1838                         END IF;
1839                         l_end_date := get_final_end_date(
1840                         p_start_date => l_payment_struc(j).RULE_INFORMATION2
1841                         ,p_stub_days  => l_stub_days
1842                         ,p_frequency  => l_payment_struc(j).OBJECT1_ID1
1843                         ,p_period     => i);
1844                         IF l_stub_pymnt = 'Y' THEN
1845                             l_upper_stub_days := i;
1846                         ELSE
1847                             l_upper_period := i;
1848                         END IF;
1849                         IF l_end_date >= p_ppd_date THEN --[8]
1850 			    --Check for Adv/arrears and split accordingly.
1851 		            IF l_payment_struc(j).rule_information10 = 'Y' THEN --Arrear payment
1852 				IF l_stub_pymnt = 'Y' THEN
1853 					l_upper_stub_days := l_upper_stub_days - 1;
1854 				ELSE
1855 					l_upper_period := l_upper_period -1;
1856 				END IF;
1857 				--recalculate the end days.
1858                         	l_end_date := get_final_end_date(
1859                         		p_start_date => l_payment_struc(j).RULE_INFORMATION2
1860                         		,p_stub_days  => l_upper_stub_days
1861                         		,p_frequency  => l_payment_struc(j).OBJECT1_ID1
1862                         		,p_period     => l_upper_period);
1863 			    END IF;
1864        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1865          			    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Upper Period is :' || l_upper_period);
1866        END IF;
1867                             EXIT;
1868                         END IF; --[8]
1869                     END LOOP;
1870                     l_modified_payments(k) :=  l_payment_struc(j);
1871                     IF l_stub_pymnt = 'N' THEN
1872                        l_modified_payments(k).rule_information3 := l_upper_period; --SEt the period
1873                     ELSE
1874                        l_modified_payments(k).rule_information7 := l_upper_stub_days; --Set the stub days
1875                     END IF;
1876                     --l_current_amount := l_payment_struc(j).rule_information6;
1877                     --l_payment_struc(j).rule_information3 := (l_ppd_amount/l_current_amount);
1878 		    --l_modified_payments(k) :=  l_payment_struc(j);
1879                     --Bug#5100215 end
1880                 END IF; --[7]
1881                 k := k + 1;
1882              ELSE
1883                 l_modified_payments(k) :=  l_payment_struc(j);
1884                 k := k+ 1;
1885              END IF; --[6]
1886         ELSE
1887           l_modified_payments(k) :=  l_payment_struc(j);
1888           k := k+ 1;
1889         END IF; --[5]
1890     END IF; --[4]
1891     --populate the unscheduled principal payment here,
1892 
1893     l_modified_payments(k).chr_id := l_payment_struc(j).chr_id;
1894     l_modified_payments(k).cle_id := l_payment_struc(j).cle_id;
1895     l_modified_payments(k).rule_information2 := p_ppd_date;
1896     l_modified_payments(k).rule_information7 := 1;
1897     l_modified_payments(k).rule_information8 := p_ppd_amount;
1898     k := k + 1;
1899 END LOOP;
1900 
1901   -- set the return status and out variables
1902   x_modified_payment_struc := l_modified_payments;
1903 
1904 
1905 END modify_terms;
1906 
1907 
1908 PROCEDURE modify_principal_payments(
1909                 p_payment_struc         IN okl_mass_rebook_pvt.strm_lalevl_tbl_type,
1910                 p_chr_id                IN NUMBER,
1911                 p_ppd_date		         IN DATE,
1912                 p_ppd_amount	         IN VARCHAR2,
1913                 p_total_k_cost           IN NUMBER,
1914                 p_sty_id	             IN NUMBER,
1915                 p_upp_sty_id              IN NUMBER,
1916                 x_modified_payment_struc     OUT NOCOPY okl_mass_rebook_pvt.strm_lalevl_tbl_type)
1917 AS
1918 
1919  /*-----------------------------------------------------------------------+
1920  *  | Local Variable Declarations and initializations                       |
1921  *   +-----------------------------------------------------------------------*/
1922     l_prev_sty_id NUMBER := -99;
1923     l_payment_struc              okl_mass_rebook_pvt.strm_lalevl_tbl_type := p_payment_struc;
1924     i                            NUMBER :=1;
1925     x_return_status             VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1926     l_api_version                 CONSTANT NUMBER := 1;
1927     l_init_msg_list               VARCHAR2(1) := 'T';
1928     l_msg_count                   NUMBER;
1929     l_msg_data                    VARCHAR2(2000);
1930     l_message                     VARCHAR2(2000);
1931     l_sty_id			          NUMBER;
1932     l_currency_code			      VARCHAR2(30);
1933     l_acc_int                     NUMBER;
1934 
1935    --Split
1936     l_end_date              DATE;
1937     l_upper_period          NUMBER;
1938     l_lower_period          NUMBER;
1939     l_payment_already_split VARCHAR2(1) := 'N';
1940     k                       NUMBER := 1;
1941     l_modified_payments     okl_mass_rebook_pvt.strm_lalevl_tbl_type;
1942     l_prev_cle_id           NUMBER := -99;
1943     pymnt_knt               NUMBER;
1944     l_stub_pymnt            VARCHAR2(1);
1945     l_upper_stub_days       NUMBER;
1946     l_lower_stub_days       NUMBER;
1947     l_stub_days             NUMBER;
1948     l_principal_balance      NUMBER;
1949     l_asset_cost            NUMBER;
1950     l_ppd_for_asset         NUMBER;
1951     l_raw_ppd_amount        NUMBER;
1952     l_ppd_amount            NUMBER;
1953     l_raw_ppd_for_asset     NUMBER;
1954     l_total_princ_balance   NUMBER;
1955     l_amount                NUMBER;
1956     j                       NUMBER := 0;
1957 
1958     CURSOR c_get_cur(cp_khr_id IN NUMBER) IS
1959     	SELECT currency_code
1960     	FROM   okc_k_headers_b
1961     	WHERE  id = cp_khr_id;
1962 
1963   BEGIN
1964     IF (G_DEBUG_ENABLED = 'Y') THEN
1965       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1966     END IF;
1967 
1968     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN --[1]
1969        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_payments'
1970                                                                         ,'Begin(+)');
1971     END IF; --[1]
1972      open c_get_cur(p_chr_id);
1973      fetch c_get_cur into l_currency_code;
1974      close c_get_cur;
1975 
1976     IF l_payment_struc.COUNT > 0 THEN
1977        j := l_payment_struc.FIRST;
1978        LOOP
1979          IF l_prev_cle_id <> l_payment_struc(j).cle_id THEN --[2]
1980            l_payment_already_split := 'N';
1981 --get the line cost here.
1982           OKL_EXECUTE_FORMULA_PUB.execute(p_api_version   => l_api_version,
1983                                           p_init_msg_list => l_init_msg_list,
1984                                           x_return_status => x_return_status,
1985                                           x_msg_count     => l_msg_count,
1986                                           x_msg_data      => l_msg_data,
1987                                           p_formula_name  => 'LINE_CAP_AMNT',
1988                                           p_contract_id   => p_chr_id,
1989                                           p_line_id       => l_payment_struc(j).cle_id,
1990                                           x_value         => l_asset_cost);
1991 
1992            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1993                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After execute LINE_CAP_AMNT:  in modify principal payments'|| l_asset_cost);
1994            END IF;
1995                         If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1996                         	raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1997                         Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1998                         	raise OKC_API.G_EXCEPTION_ERROR;
1999 			End If;
2000 
2001 --Pro rate the ppd amt for this line
2002 			l_raw_ppd_for_asset := (l_asset_cost/p_total_k_cost)
2003 							* p_ppd_amount;
2004                             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2005                                                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'raw ppd for asset'||l_raw_ppd_for_asset);
2006                             END IF;
2007 
2008                         l_ppd_for_asset := Okl_Accounting_Util.ROUND_AMOUNT(
2009                                 		p_amount => l_raw_ppd_for_asset,
2010                                 		p_currency_code => l_currency_code);
2011                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2012                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PPD for Asset : '|| l_ppd_for_asset);
2013                         END IF;
2014 
2015         		OKL_STREAM_GENERATOR_PVT.get_sched_principal_bal(
2016                                          p_api_version       => l_api_version,
2017                                          p_init_msg_list     => l_init_msg_list,
2018                                          p_khr_id            => p_chr_id,
2019                                          p_kle_id            => l_payment_struc(j).cle_id,
2020                                          p_date              => p_ppd_date,
2021                                          x_principal_balance => l_principal_balance,
2022                                          x_accumulated_int   => l_acc_int,
2023                                          x_return_status     => x_return_status,
2024                                          x_msg_count         => l_msg_count,
2025                                          x_msg_data          => l_msg_data);
2026 
2027         		IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2028                 		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2029         		ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2030                 		RAISE OKL_API.G_EXCEPTION_ERROR;
2031         		END IF;
2032 		--l_total_princ_balance := l_principal_balance + l_acc_int ;
2033                   l_total_princ_balance := l_principal_balance;
2034                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2035                                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'total Principal Balance  : ' || l_total_princ_balance);
2036                  END IF;
2037 
2038 			--PPD amount for the asset = Principal Balance on asset
2039 			--				- Pro rated ppd for this asset.
2040 			--dkagrawa commented the following code for bug#5203265
2041                         --l_raw_ppd_amount := nvl(l_total_princ_balance,0) - nvl(l_ppd_for_asset,0);
2042                         --l_ppd_amount := Okl_Accounting_Util.ROUND_AMOUNT(
2043                         --        		p_amount => l_raw_ppd_amount,
2044                         --        		p_currency_code => l_currency_code);
2045                         --Bug# 5203265 end
2046 
2047 
2048 
2049 
2050         l_prev_cle_id   := l_payment_struc(j).cle_id;
2051         IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2052             FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_payments.',
2053               'cle_id is  :'||l_payment_struc(j).cle_id );
2054         END IF;
2055 
2056     END IF; --[2]
2057 
2058     IF l_payment_struc(j).RULE_INFORMATION_CATEGORY = 'LASLH' THEN --[3]
2059         --Copy the values to the other payment stuc table.
2060         l_modified_payments(k) :=  l_payment_struc(j);
2061 	l_sty_id	       := l_payment_struc(j).object1_id1;
2062         k := k+ 1;
2063     END IF; -- [3]
2064 
2065     IF l_payment_struc(j).RULE_INFORMATION_CATEGORY = 'LASLL' THEN --[4]
2066 	IF l_sty_id = p_sty_id THEN --[5]
2067             l_end_date := get_final_end_date(
2068                      p_start_date => l_payment_struc(j).RULE_INFORMATION2
2069                     ,p_stub_days  => l_payment_struc(j).rule_information7
2070                     ,p_frequency  => l_payment_struc(j).OBJECT1_ID1
2071                     ,p_period     => l_payment_struc(j).rule_information3);
2072 
2073      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2074        	    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'End Date is : '|| l_end_date);
2075      END IF;
2076             IF l_end_date > p_ppd_date  THEN --[6]
2077                 IF l_payment_already_split <> 'Y' THEN --[7]
2078                     --Split Only this payment.
2079                     l_payment_already_split := 'Y';
2080                     IF l_payment_struc(j).rule_information7 <> 0 THEN
2081                         pymnt_knt := l_payment_struc(j).rule_information7; --Use Stub days
2082                         l_stub_pymnt := 'Y';
2083                     ELSE
2084                         pymnt_knt := l_payment_struc(j).rule_information3; --Use actual periods
2085                         l_stub_pymnt := 'N';
2086                     END IF;
2087       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2088         		    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Stub Payment is : '|| l_stub_pymnt);
2089       END IF;
2090                     FOR i in 1..pymnt_knt LOOP
2091                         IF l_stub_pymnt = 'Y' THEN
2092                             l_stub_days := i;
2093                         ELSE
2094                             l_stub_days := l_payment_struc(j).rule_information7;
2095                         END IF;
2096                         l_end_date := get_final_end_date(
2097                         p_start_date => l_payment_struc(j).RULE_INFORMATION2
2098                         ,p_stub_days  => l_stub_days
2099                         ,p_frequency  => l_payment_struc(j).OBJECT1_ID1
2100                         ,p_period     => i);
2101                         IF l_stub_pymnt = 'Y' THEN
2102                             l_upper_stub_days := i;
2103                         ELSE
2104                             l_upper_period := i;
2105                         END IF;
2106                         IF l_end_date >= p_ppd_date THEN --[8]
2107                             IF l_stub_pymnt = 'Y' THEN
2108                                 l_lower_stub_days := l_payment_struc(j).rule_information7 - l_upper_stub_days;
2109                             ELSE
2110                                 l_lower_period := l_payment_struc(j).rule_information3 - l_upper_period ;
2111                             END IF;
2112 			    --Check for Adv/arrears and split accordingly.
2113 		            IF l_payment_struc(j).rule_information10 = 'Y' THEN --Arrear payment
2114 				IF l_stub_pymnt = 'Y' THEN
2115 					l_upper_stub_days := l_upper_stub_days - 1;
2116 					l_lower_stub_days := l_lower_stub_days + 1;
2117 				ELSE
2118 					l_upper_period := l_upper_period -1;
2119 					l_lower_period := l_lower_period +1;
2120 				END IF;
2121 				--recalculate the end days.
2122                         	l_end_date := get_final_end_date(
2123                         		p_start_date => l_payment_struc(j).RULE_INFORMATION2
2124                         		,p_stub_days  => l_upper_stub_days
2125                         		,p_frequency  => l_payment_struc(j).OBJECT1_ID1
2126                         		,p_period     => l_upper_period);
2127 			    END IF;
2128        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2129          			    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Lower Period is :' || l_lower_period);
2130   			    OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Upper Period is :' || l_upper_period);
2131        END IF;
2132                             EXIT;
2133                         END IF; --[8]
2134                     END LOOP;
2135                       l_modified_payments(k) :=  l_payment_struc(j);
2136                       IF l_stub_pymnt = 'N' THEN
2137                          l_modified_payments(k).rule_information3 := l_upper_period; --SEt the period
2138                       ELSE
2139                          l_modified_payments(k).rule_information7 := l_upper_stub_days; --Set the stub days
2140                       END IF;
2141                       k := K+1;
2142                       --For the second part of the split payment
2143                       l_modified_payments(k) :=  l_payment_struc(j);
2144                       --l_modified_payments(k).RULE_INFORMATION2 := to_date(l_end_date +1);
2145                       l_modified_payments(k).RULE_INFORMATION2 := FND_DATE.date_to_canonical(l_end_date +1);
2146                       IF l_stub_pymnt = 'N' THEN --[9]
2147                         l_modified_payments(k).rule_information3 := l_lower_period;
2148 
2149                         --dkagrawa modified the logic to calculate the amount for bug#5203265
2150                         --l_amount  := l_ppd_amount/l_lower_period;
2151                         l_amount := l_modified_payments(k).rule_information6 - (l_ppd_for_asset*l_modified_payments(k).rule_information6/l_total_princ_balance);
2152                         l_modified_payments(k).rule_information6 := l_amount;
2153 
2154                     ELSE --[9]
2155                         l_modified_payments(k).rule_information7 := l_lower_stub_days;
2156                         --how do we modfiy stib amounts? Need to verify
2157                         l_modified_payments(k).rule_information8 := l_payment_struc(j).rule_information8;
2158 
2159                     END IF;                        --[9]
2160                     k := k+1;
2161                 ELSE --[7]
2162                     l_modified_payments(k) :=  l_payment_struc(j);
2163                     IF   l_payment_struc(j).rule_information7 <> 0 THEN
2164                         l_modified_payments(k).rule_information8 := 0;
2165             	    ELSE
2166 	               --dkagrawa modified the logic to calculate the amount for bug#5203265
2167                         l_amount := l_modified_payments(k).rule_information6 - (l_ppd_for_asset*l_modified_payments(k).rule_information6/l_total_princ_balance);
2168                         l_modified_payments(k).rule_information6 := l_amount;
2169 	                --l_modified_payments(k).rule_information6 := l_payment_struc(j).rule_information6; --Set amount to Zero
2170                      END IF;
2171                      k := k+ 1;
2172                  END IF; --[7]
2173             ELSE  --[6]
2174                 l_modified_payments(k) :=  l_payment_struc(j);
2175                 k := k+ 1;
2176             END IF; --[6]
2177 	ELSE --[5]
2178 	    l_modified_payments(k) :=  l_payment_struc(j);
2179             k := k+ 1;
2180 	END IF; --[5]
2181     END IF; --[4]
2182 
2183    EXIT WHEN j = l_payment_struc.LAST;
2184         j := l_payment_struc.NEXT(j);
2185    END LOOP;
2186   END IF;
2187 
2188 
2189   -- set the return status and out variables
2190   x_modified_payment_struc := l_modified_payments;
2191 
2192 
2193   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2194        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.modify_payments'
2195                                                                         ,'End(-)');
2196   END IF;
2197 END Modify_Principal_Payments;
2198 
2199 
2200 
2201 PROCEDURE delete_payments(
2202                 p_api_version           IN      NUMBER,
2203                 p_init_msg_list         IN      VARCHAR2,
2204                 x_return_status         OUT NOCOPY VARCHAR2,
2205                 x_msg_count             OUT NOCOPY NUMBER,
2206                 x_msg_data              OUT NOCOPY VARCHAR2,
2207                 p_request_id            IN  NUMBER)
2208 AS
2209 
2210 
2211    SUBTYPE cafv_rec_type IS okl_cash_flows_pub.cafv_rec_type;
2212    SUBTYPE cflv_rec_type IS okl_cash_flow_levels_pub.cflv_rec_type;
2213 
2214     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2215     l_api_name          CONSTANT VARCHAR2(30) := 'delete_payments';
2216     lp_cafv_rec                  cafv_rec_type;
2217     lp_cflv_rec                  cflv_rec_type;
2218     l_caf_id                     NUMBER;
2219     l_cfo_id                     NUMBER;
2220 
2221 
2222 
2223     CURSOR l_cfo_id_csr(cp_request_id IN NUMBER) IS
2224     SELECT id
2225     FROM OKL_CASH_FLOW_OBJECTS
2226     WHERE source_id = cp_request_id;
2227 
2228 
2229     CURSOR l_caf_id_csr(cp_request_id IN NUMBER
2230                         ,cp_cfo_id  IN  NUMBER) IS
2231     SELECT id
2232     FROM OKL_CASH_FLOWS
2233     WHERE cfo_id=cp_cfo_id
2234     AND dnz_qte_id=cp_request_id;
2235 
2236     CURSOR l_cfl_id_csr(cp_caf_id  IN  NUMBER) IS
2237     SELECT id
2238     FROM OKL_CASH_FLOW_LEVELS
2239     WHERE caf_id=cp_caf_id;
2240 
2241 BEGIN
2242   IF (G_DEBUG_ENABLED = 'Y') THEN
2243     G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2244   END IF;
2245 
2246     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2247        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.delete_payments','Begin(+)');
2248     END IF;
2249 
2250     --Print Input Variables
2251     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2252        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.delete_payments.',
2253               'p_request_id :'||p_request_id);
2254     END IF;
2255     x_return_status    := OKL_API.G_RET_STS_SUCCESS;
2256 
2257     --Call start_activity to create savepoint,
2258     --check compatibility and initialize message list
2259 
2260     x_return_status := OKL_API.START_ACTIVITY(
2261                               l_api_name
2262                               ,p_init_msg_list
2263                               ,'_PVT'
2264                               ,x_return_status);
2265 
2266     --Check if activity started successfully
2267 
2268     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2269          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2270     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2271          RAISE OKL_API.G_EXCEPTION_ERROR;
2272     END IF;
2273 
2274     --Get the CFO Id for the Request id
2275     FOR cfo_rec IN l_cfo_id_csr(p_request_id) LOOP
2276 
2277         l_cfo_id := cfo_rec.id;
2278 
2279         FOR caf_rec IN l_caf_id_csr(p_request_id,l_cfo_id) LOOP
2280 
2281             l_caf_id := caf_rec.id;
2282             FOR cfl_rec IN l_cfl_id_csr(l_caf_id) LOOP
2283 
2284                 lp_cflv_rec.id := cfl_rec.id;
2285                 --Delete all the Cash flow levels for this Cash flow.
2286                  OKL_CASH_FLOW_LEVELS_PUB.delete_cash_flow_level(
2287                             p_api_version              =>    p_api_version,
2288                             p_init_msg_list            =>    OKL_API.G_FALSE,
2289                             x_return_status            =>    l_return_status,
2290                             x_msg_count                =>    x_msg_count,
2291                             x_msg_data                 =>    x_msg_data,
2292                             p_cflv_rec                 =>    lp_cflv_rec);
2293 
2294                   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2295                                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Deleting  CFL - Return Status: ' || l_return_status);
2296                   END IF;
2297                   IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2298                        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2299                   ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2300                        RAISE OKL_API.G_EXCEPTION_ERROR;
2301                   END IF;
2302             END LOOP;
2303             --Delete all the Cashflows for this Request.
2304             lp_cafv_rec.id := l_caf_id;
2305              okl_cash_flows_pub.delete_cash_flow(
2306                     p_api_version              =>    p_api_version,
2307                     p_init_msg_list            =>    OKL_API.G_FALSE,
2308                     x_return_status            =>    l_return_status,
2309                     x_msg_count                =>    x_msg_count,
2310                     x_msg_data                 =>    x_msg_data,
2311                     p_cafv_rec                 =>    lp_cafv_rec);
2312               IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2313                               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Deleting  CAF - Return Status: ' || l_return_status);
2314               END IF;
2315               IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2316                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2317               ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2318                   RAISE OKL_API.G_EXCEPTION_ERROR;
2319               END IF;
2320         END LOOP;
2321     END LOOP;
2322 
2323     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2324        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.delete_payments','End(-)');
2325     END IF;
2326 
2327 EXCEPTION
2328 
2329     WHEN OKL_API.G_EXCEPTION_ERROR THEN
2330        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2331             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.delete_payments ',
2332                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
2333        END IF;
2334 
2335         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2336                                l_api_name,
2337                                G_PKG_NAME,
2338                                'OKL_API.G_RET_STS_ERROR',
2339                                x_msg_count,
2340                                x_msg_data,
2341                                '_PVT');
2342     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2343        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2344             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.delete_payments ',
2345                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
2346        END IF;
2347 
2348         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2349                               l_api_name,
2350                               G_PKG_NAME,
2351                               'OKL_API.G_RET_STS_UNEXP_ERROR',
2352                               x_msg_count,
2353                               x_msg_data,
2354                               '_PVT');
2355     WHEN OTHERS THEN
2356        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2357             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.delete_payments ',
2358                   'EXCEPTION :'||sqlerrm);
2359        END IF;
2360 
2361        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2362                               l_api_name,
2363                               G_PKG_NAME,
2364                               'OTHERS',
2365                               x_msg_count,
2366                               x_msg_data,
2367                               '_PVT');
2368 END delete_payments;
2369 
2370 --*****************************************************88
2371 
2372 --Call the extraction API to extract info for the working copy.
2373 -- Populate the parameters, i.e Tweak with the output params....
2374 
2375 --*****************************************************88
2376    PROCEDURE calculate(
2377                 p_api_version           IN      NUMBER,
2378                 p_init_msg_list         IN      VARCHAR2 := OKL_API.G_FALSE,
2379                 x_return_status         OUT NOCOPY VARCHAR2,
2380                 x_msg_count             OUT NOCOPY NUMBER,
2381                 x_msg_data              OUT NOCOPY VARCHAR2,
2382                 p_trqv_tbl              IN okl_trx_requests_pub.trqv_tbl_type,
2383                 x_trqv_tbl              OUT NOCOPY okl_trx_requests_pub.trqv_tbl_type)
2384   AS
2385 	l_api_name          		CONSTANT VARCHAR2(30) := 'CALCULATE';
2386 	p_chr_id	    		NUMBER;
2387 	l_trans_id	    		NUMBER;
2388 	l_trans_status	    		VARCHAR2(100);
2389 	l_trqv_tbl          		okl_trx_requests_pub.trqv_tbl_type;
2390 	l_upd_trqv_tbl          	okl_trx_requests_pub.trqv_tbl_type;
2391     l_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
2392     lx_trqv_rec         okl_trx_requests_pub.trqv_rec_type;
2393         l_prim_sty_id                   NUMBER;
2394 
2395 	l_skip_prc_engine               VARCHAR2(1) := OKL_API.G_FALSE;
2396 	l_csm_loan_header               okl_create_streams_pvt.csm_loan_rec_type;
2397 	l_csm_loan_lines_tbl            okl_create_streams_pvt.csm_loan_line_tbl_type;
2398 	l_csm_loan_levels_tbl           okl_create_streams_pvt.csm_loan_level_tbl_type;
2399 	l_csm_one_off_fee_tbl           okl_create_streams_pub.csm_one_off_fee_tbl_type;
2400 	l_csm_periodic_expenses_tbl     okl_create_streams_pub.csm_periodic_expenses_tbl_type;
2401 	l_csm_yields_tbl                okl_create_streams_pub.csm_yields_tbl_type;
2402 	l_csm_stream_types_tbl          okl_create_streams_pub.csm_stream_types_tbl_type;
2403 
2404      	l_rents_tbl                	Okl_Create_Streams_Pub.csm_periodic_expenses_tbl_type;
2405      	l_reduce_residual_ptg_by    	NUMBER;
2406 	l_amount             		NUMBER := 0;
2407       	l_principal_amount              NUMBER := 0;
2408       	l_principal_balance              NUMBER := 0;
2409       	l_acc_int              		NUMBER := 0;
2410       	l_iir 				NUMBER;
2411       	l_line_iir 			NUMBER;
2412       	l_payments_remaining 		NUMBER;
2413 	l_pricing_engine   		VARCHAR2(100);
2414         l_primary_strm_type             VARCHAR2(80);
2415 
2416 	l_line_id 			NUMBER;
2417 	l_frequency 			VARCHAR2(50);
2418 	l_arrears_yn 			VARCHAR2(50);
2419       	l_new_payment_amount 		NUMBER;
2420 	l_payment_struc			okl_mass_rebook_pvt.strm_lalevl_tbl_type;
2421 	l_modified_payment_struc        okl_mass_rebook_pvt.strm_lalevl_tbl_type;
2422 	lx_cfo_id 			NUMBER;
2423 	knt 				NUMBER :=0;
2424 
2425     	l_total_ppd_to_date 		NUMBER;
2426     	l_asset_amount 			NUMBER;
2427     	l_total_k_cost 			NUMBER;
2428     	l_asset_cost 			NUMBER;
2429         l_raw_ppd_for_asset			NUMBER;
2430         l_ppd_for_asset			NUMBER;
2431         l_ppd_funding 			NUMBER;
2432 	l_total_princ_balance		NUMBER;
2433         l_raw_ppd_amount 			NUMBER;
2434         l_ppd_amount 			NUMBER;
2435         p        			NUMBER;
2436         q        			NUMBER :=0;
2437 	l_pay_level			okl_pricing_pvt.payment_tbl_type;
2438 	lx_pay_level			okl_pricing_pvt.payment_tbl_type;
2439 	l_payments_tbl			payment_tbl_type;
2440 	l_rent_sty_id			NUMBER;
2441 	l_upp_sty_id 			NUMBER;
2442 	l_currency_code			VARCHAR2(30);
2443         l_balance_type                  VARCHAR2(100);
2444 
2445 	l_freq 				VARCHAR2(50);
2446 	l_arr 				VARCHAR2(50);
2447 	l_days_to_reduce 		NUMBER;
2448 	l_index                         NUMBER;
2449         l_sum_ppd_amount                NUMBER := 0;
2450 
2451 
2452 
2453 
2454         CURSOR c_get_iir (c_khr_id NUMBER)
2455         IS
2456         SELECT implicit_interest_rate
2457         FROM okl_k_headers
2458         where id = c_khr_id;
2459 
2460         CURSOR c_get_line_iir (c_line_id NUMBER)
2461         IS
2462         SELECT implicit_interest_rate
2463         FROM okl_k_lines
2464         where id = c_line_id;
2465 
2466         CURSOR c_get_total_ppd (c_cle_id NUMBER
2467 			       ,c_sty_id NUMBER)
2468 	IS
2469 	SELECT  sum(sll_rul.rule_information8)
2470     	FROM okc_rules_b sll_rul,
2471         	okl_strmtyp_source_v sttyp,
2472         	okc_rules_b slh_rul,
2473         	okc_rule_groups_b rgp
2474     	WHERE   sll_rul.object2_id1 = to_char(slh_rul.id)
2475     	AND     sll_rul.rgp_id    = rgp.id
2476     	AND     sll_rul.rule_information_category = 'LASLL'
2477     	AND     sttyp.id1 = slh_rul.object1_id1
2478     	AND     slh_rul.rgp_id = rgp.id
2479     	AND     slh_rul.rule_information_category = 'LASLH'
2480     	AND     rgp.rgd_code = 'LALEVL'
2481     	AND     rgp.cle_id = c_cle_id
2482     	AND     sttyp.id1 = c_sty_id;
2483 
2484 	CURSOR c_get_payment_details (c_req_id NUMBER
2485 				     ,c_kle_id NUMBER
2486 				     ,c_sty_id NUMBER)
2487 	IS
2488 	SELECT KLE_ID
2489 	      ,NUMBER_OF_PERIODS
2490               ,amount
2491               ,frequency_code
2492               ,decode(arrears,'N','ADVANCE','ARREARS') advance_or_arrears
2493 	      ,start_date
2494               ,stub_days
2495               ,stub_amount
2496               ,advance_payments
2497 	FROM okl_cs_ppd_payments_uv
2498 	WHERE request_id = c_req_id
2499 	AND kle_id=c_kle_id
2500 	AND sty_id= c_sty_id
2501 	ORDER BY start_date;
2502 
2503     	CURSOR l_okcklines_csr(cp_chr_id IN NUMBER) IS
2504     	SELECT cle.id kle_id
2505     	FROM   okc_k_lines_b cle, okc_line_styles_b lse
2506     	WHERE  cle.lse_id = lse.id
2507     	AND    cle.sts_code = 'BOOKED'
2508     	AND    lse.lty_code = 'FREE_FORM1'
2509     	AND    chr_id = cp_chr_id;
2510 
2511         CURSOR c_get_future_pay_details (c_req_id NUMBER
2512                                      ,c_kle_id NUMBER
2513 				     ,c_start_date DATE
2514 				     ,c_sty_id NUMBER)
2515         IS
2516         SELECT KLE_ID
2517 	      ,START_DATE
2518               ,NUMBER_OF_PERIODS
2519               ,frequency_code
2520 	      ,ADVANCE_PAYMENTS
2521               ,arrears
2522               ,amount
2523 	      ,stub_days
2524 	      ,stub_amount
2525         FROM okl_cs_ppd_payments_uv
2526         WHERE request_id = c_req_id
2527         AND kle_id=c_kle_id
2528 	and start_date > c_start_date
2529 	AND sty_id = c_sty_id
2530         ORDER BY start_date;
2531 
2532 
2533     	CURSOR c_get_cur(cp_khr_id IN NUMBER) IS
2534     	SELECT currency_code
2535     	FROM   okc_k_headers_b
2536     	WHERE  id = cp_khr_id;
2537 
2538 	CURSOR c_get_freq_arr (c_req_id NUMBER
2539 			     ,c_kle_id NUMBER
2540 			     ,c_rent_sty_id NUMBER)
2541 	IS
2542 	SELECT distinct
2543               frequency_code
2544               ,arrears
2545 	       ,DECODE(frequency_code,'M',30,'Q',90,'S',180,'A',360)
2546 	FROM okl_cs_ppd_payments_uv
2547 	WHERE request_id = c_req_id
2548 	AND kle_id=c_kle_id
2549 	AND sty_id=c_rent_sty_id
2550 	AND stub_days is null;
2551 
2552 	-- added for ppd bug #6657481 ansethur
2553 	CURSOR c_get_object_ver (c_trq_id NUMBER)
2554 	is
2555 	select object_version_number
2556 	from OKL_TRX_REQUESTS
2557 	where id = c_trq_id ;
2558 	l_object_version_number number ;
2559 
2560    BEGIN
2561      IF (G_DEBUG_ENABLED = 'Y') THEN
2562        G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2563      END IF;
2564         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
2565 
2566         --Call start_activity to create savepoint, check compatibility and initialize message list
2567 
2568         x_return_status := OKL_API.START_ACTIVITY(
2569                               l_api_name
2570                               ,p_init_msg_list
2571                               ,'_PVT'
2572                               ,x_return_status);
2573 
2574         --Check if activity started successfully
2575 
2576         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2577                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2578         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2579                 RAISE OKL_API.G_EXCEPTION_ERROR;
2580         END IF;
2581 
2582         p_chr_id := p_trqv_tbl(1).dnz_khr_id;
2583 	--Commented for 11i10+.
2584 	--We will not be using parent_khr_id
2585 	--p_parent_chr_id := p_trqv_tbl(1).parent_khr_id;
2586         --Get the Rate
2587 
2588         open c_get_iir(p_chr_id);
2589         fetch c_get_iir into l_iir;
2590         close c_get_iir;
2591 
2592         open c_get_cur(p_chr_id);
2593         fetch c_get_cur into l_currency_code;
2594         close c_get_cur;
2595 
2596 	OKL_STREAM_GENERATOR_PVT.get_sched_principal_bal(
2597                                          p_api_version  => p_api_version,
2598                                          p_init_msg_list => p_init_msg_list,
2599                                          p_khr_id        => p_chr_id,
2600                                          p_kle_id        => NULL,
2601                                          p_date          => p_trqv_tbl(1).payment_date,
2602                                          x_principal_balance => l_principal_balance,
2603                                          x_accumulated_int => l_acc_int,
2604                                          x_return_status => x_return_status,
2605                                          x_msg_count     => x_msg_count,
2606                                          x_msg_data      => x_msg_data);
2607 
2608   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2609     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_sched_principal_bal  : ' || l_payment_struc.count);
2610   END IF;
2611         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2612                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2613         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2614                 RAISE OKL_API.G_EXCEPTION_ERROR;
2615         END IF;
2616 	l_principal_amount := l_principal_balance + l_acc_int ;
2617 	l_amount:=  (nvl(l_principal_amount,0) - nvl(p_trqv_tbl(1).payment_amount,0));
2618 
2619 
2620         OKL_EXECUTE_FORMULA_PUB.execute(p_api_version   => p_api_version,
2621                                         p_init_msg_list => p_init_msg_list,
2622                                         x_return_status => x_return_status,
2623                                         x_msg_count     => x_msg_count,
2624                                         x_msg_data      => x_msg_data,
2625                                         p_formula_name  => 'CONTRACT_CAP_AMNT',
2626                                         p_contract_id   => p_chr_id,
2627                                         p_line_id       => NULL,
2628                                         x_value         => l_total_k_cost);
2629                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2630                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After execute CONTRACT_CAP_AMNT: '|| l_total_k_cost || x_return_status);
2631                         END IF;
2632         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2633         	RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2634         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2635         	RAISE OKL_API.G_EXCEPTION_ERROR;
2636         END IF;
2637 
2638 
2639 	IF p_trqv_tbl(1).id IS NULL THEN
2640 		-- Call the public API for insertion here.
2641 		  okl_trx_requests_pub.insert_trx_requests(
2642                                      	      	p_api_version  	      => p_api_version,
2643 	       		                      	p_init_msg_list       =>p_init_msg_list,
2644                  		              	x_return_status       => x_return_status,
2645                                 		x_msg_count           => x_msg_count,
2646 						x_msg_data            => x_msg_data,
2647                                 		p_trqv_tbl            => p_trqv_tbl,
2648                                 		x_trqv_tbl            => x_trqv_tbl);
2649 
2650                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2651                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Insert Request:'|| x_return_status);
2652                      END IF;
2653 
2654 	          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2655        		      RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2656           	  ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2657             		RAISE OKL_API.G_EXCEPTION_ERROR;
2658           	  END IF;
2659 	ELSE
2660 		l_upd_trqv_tbl	:=	p_trqv_tbl;
2661 
2662 		--Reset the params before calling the API
2663 		    l_upd_trqv_tbl(1).amount := NULL;
2664 		    l_upd_trqv_tbl(1).request_status_code := 'ENTERED';
2665 
2666 
2667 		--Call update here.
2668                   okl_trx_requests_pub.update_trx_requests(
2669                                                 p_api_version         => p_api_version,
2670                                                 p_init_msg_list       =>p_init_msg_list,
2671                                                 x_return_status       => x_return_status,
2672                                                 x_msg_count           => x_msg_count,
2673                                                 x_msg_data            => x_msg_data,
2674                                                 p_trqv_tbl            => l_upd_trqv_tbl,
2675                                                 x_trqv_tbl            => x_trqv_tbl);
2676                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2677                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Update Request:'|| x_return_status);
2678                      END IF;
2679 
2680 	          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2681 	             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2682 	          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2683 	             RAISE OKL_API.G_EXCEPTION_ERROR;
2684 	          END IF;
2685 		 --Delete all the payments for this request.
2686                   delete_payments(
2687                                   p_api_version         => p_api_version,
2688                                   p_init_msg_list       =>p_init_msg_list,
2689                                   x_return_status       => x_return_status,
2690                                   x_msg_count           => x_msg_count,
2691                                   x_msg_data            => x_msg_data,
2692                                   p_request_id          => p_trqv_tbl(1).id);
2693                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2694                                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Delete PAyments:'|| x_return_status);
2695                      END IF;
2696 	          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2697 	             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2698 	          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2699 	             RAISE OKL_API.G_EXCEPTION_ERROR;
2700 	          END IF;
2701 
2702 	END IF;
2703 
2704    	--get the sty id for rent.
2705         OKL_STREAMS_UTIL.get_primary_stream_type
2706                 (p_khr_id => p_chr_id
2707                 ,p_primary_sty_purpose => G_RENT_STREAM
2708                 ,x_return_status    => x_return_status
2709                 ,x_primary_sty_id   => l_rent_sty_id);
2710         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2711                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Get primary strm type ' || x_return_status);
2712         END IF;
2713 
2714         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2715                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2716         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2717                 RAISE OKL_API.G_EXCEPTION_ERROR;
2718         END IF;
2719 
2720         --Get the Stream type id.
2721         OKL_STREAMS_UTIL.get_dependent_stream_type(
2722                  p_khr_id                        => p_chr_id
2723                  ,p_primary_sty_purpose          => G_RENT_STREAM
2724                  ,p_dependent_sty_purpose        => G_UNSCHED_PP_STREAM
2725                  ,x_return_status                => x_return_status
2726                  ,x_dependent_sty_id             => l_upp_sty_id);
2727         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2728                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type: '|| x_return_status);
2729         END IF;
2730 
2731         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2732         	RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2733         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2734         	RAISE OKL_API.G_EXCEPTION_ERROR;
2735         END IF;
2736 
2737 	OKL_STREAMS_UTIL.get_pricing_engine(
2738 		p_khr_id			=> p_chr_id
2739 		,x_pricing_engine		=> l_pricing_engine
2740 		,x_return_status		=> x_return_status);
2741 
2742  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2743    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Pricing Engine is : ' || l_pricing_engine
2744 			|| ' API return status: '|| x_return_status);
2745  END IF;
2746         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2747                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2748         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2749                 RAISE OKL_API.G_EXCEPTION_ERROR;
2750         END IF;
2751 
2752     	IF l_pricing_engine = 'INTERNAL' THEN
2753   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2754     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Using ISG for Pricing');
2755   END IF;
2756 		--get_payments for this contract
2757                 --Get the Existing payments from SLL/SLH
2758                 get_current_payments(p_khr_id    => p_chr_id,
2759                              x_payment_struc     => l_payment_struc,
2760                              x_prim_sty_id       => l_prim_sty_id,
2761                              x_upp_sty_id        => l_upp_sty_id,
2762                              x_primary_strm_type => l_primary_strm_type);
2763 
2764                 --Tweak these payments to split them based on the PPd date
2765 		--modify_payments for this contract
2766                 modify_payments( p_payment_struc  => l_payment_struc
2767                                 ,p_ppd_date => x_trqv_tbl(1).payment_date
2768                                 ,p_blank_amount => 'N'
2769 				,p_rent_sty_id => l_rent_sty_id
2770                                 ,x_modified_payment_struc  => l_modified_payment_struc);
2771                 --Store this whole lot of payments in Payment Schema.
2772                store_payments(p_api_version  => p_api_version,
2773                               p_init_msg_list => p_init_msg_list,
2774                               x_return_status => x_return_status,
2775                               x_msg_count     => x_msg_count,
2776                               x_msg_data      => x_msg_data,
2777                               p_ppd_request_id => x_trqv_tbl(1).id,
2778                               p_ppd_khr_id     => p_chr_id,
2779                               p_payment_structure => l_modified_payment_struc,
2780                               x_cfo_id         => lx_cfo_id);
2781 
2782                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2783                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2784                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2785                         RAISE OKL_API.G_EXCEPTION_ERROR;
2786                 END IF;
2787 
2788   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2789     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Store payments in ISG pricing:' || x_return_status
2790 				|| 'CFO Id: '|| lx_cfo_id);
2791   END IF;
2792 
2793 		--Get the Lines for this K
2794 		FOR l_okcklines_rec IN l_okcklines_csr(p_chr_id) LOOP
2795 
2796 			OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2797                                         p_init_msg_list => p_init_msg_list,
2798                                         x_return_status => x_return_status,
2799                                         x_msg_count     => x_msg_count,
2800                                         x_msg_data      => x_msg_data,
2801                                         p_formula_name  => 'LINE_CAP_AMNT',
2802                                         p_contract_id   => p_chr_id,
2803                                         p_line_id       => l_okcklines_rec.kle_id,
2804                                         x_value         => l_asset_cost);
2805 
2806                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2807                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After execute LINE_CAP_AMNT: '|| l_asset_cost);
2808                         END IF;
2809                         If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
2810                         	raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
2811                         Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
2812                         	raise OKC_API.G_EXCEPTION_ERROR;
2813 			End If;
2814 
2815 			--Pro rate the ppd amt for this line
2816 			l_raw_ppd_for_asset := (l_asset_cost/l_total_k_cost)
2817 							* x_trqv_tbl(1).payment_amount;
2818 
2819                         l_ppd_for_asset := Okl_Accounting_Util.ROUND_AMOUNT(
2820                                 		p_amount => l_raw_ppd_for_asset,
2821                                 		p_currency_code => l_currency_code);
2822                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2823                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PPD for Asset : '|| l_ppd_for_asset);
2824                         END IF;
2825 
2826         		OKL_STREAM_GENERATOR_PVT.get_sched_principal_bal(
2827                                          p_api_version  => p_api_version,
2828                                          p_init_msg_list => p_init_msg_list,
2829                                          p_khr_id        => p_chr_id,
2830                                          p_kle_id        => l_okcklines_rec.kle_id,
2831                                          p_date          => p_trqv_tbl(1).payment_date,
2832                                          x_principal_balance => l_principal_balance,
2833                                          x_accumulated_int => l_acc_int,
2834                                          x_return_status => x_return_status,
2835                                          x_msg_count     => x_msg_count,
2836                                          x_msg_data      => x_msg_data);
2837 
2838         		IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2839                 		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2840         		ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2841                 		RAISE OKL_API.G_EXCEPTION_ERROR;
2842         		END IF;
2843         		l_total_princ_balance := l_principal_balance + l_acc_int ;
2844                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2845                                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'total Principal Balance  : ' || l_total_princ_balance);
2846                  END IF;
2847 
2848 			--PPD amount for the asset = Principal Balance on asset
2849 			--				- Pro rated ppd for this asset.
2850 			l_raw_ppd_amount := nvl(l_total_princ_balance,0) - nvl(l_ppd_for_asset,0);
2851                         l_ppd_amount := Okl_Accounting_Util.ROUND_AMOUNT(
2852                                 		p_amount => l_raw_ppd_amount,
2853                                 		p_currency_code => l_currency_code);
2854 
2855 			--Get the iir for this line
2856 			OPEN c_get_line_iir(l_okcklines_rec.kle_id);
2857 			FETCH c_get_line_iir INTO l_line_iir;
2858 			CLOSE c_get_line_iir;
2859 
2860                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2861                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PPD Amount to Pricing : '|| l_ppd_amount);
2862                         END IF;
2863 
2864 			p := 0;
2865 
2866 
2867 			--For Arrear payments the query for c_get_future_pay_details
2868 			--would not fetch any rows, so we need to calculate the
2869 			--no.of days to reach a prior period.
2870 
2871 			OPEN c_get_freq_arr(x_trqv_tbl(1).id
2872 					   ,l_okcklines_rec.kle_id
2873 					   ,l_rent_sty_id);
2874 			FETCH c_get_freq_arr INTO l_freq,l_arr,l_days_to_reduce;
2875 			CLOSE c_get_freq_arr;
2876 
2877 			IF l_arr <> 'Y' THEN
2878 				l_days_to_reduce := 0;
2879 			END IF;
2880 			--Get the modified payments that we just stored for this asset.
2881 
2882                        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2883                                                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_trqv_tbl(1).id :'|| x_trqv_tbl(1).id);
2884                          OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_okcklines_rec.kle_id :'|| l_okcklines_rec.kle_id);
2885                          OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_trqv_tbl(1).payment_date :'|| x_trqv_tbl(1).payment_date);
2886                          OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'days_to_reduce :'|| l_days_to_reduce);
2887                          OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rent_sty_id :'|| l_rent_sty_id);
2888                        END IF;
2889                         FOR cur_rec in c_get_future_pay_details(x_trqv_tbl(1).id
2890                                                         ,l_okcklines_rec.kle_id
2891 							,(p_trqv_tbl(1).payment_date - l_days_to_reduce)
2892 							,l_rent_sty_id) LOOP
2893                          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2894                                                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In get_future_pay_details csr');
2895                          END IF;
2896 				p:=  p+1;
2897 				l_pay_level(p).start_date    := cur_rec.start_date;
2898 				l_pay_level(p).periods       := cur_rec.number_of_periods;
2899 				l_pay_level(p).frequency     := cur_rec.frequency_code;
2900 				l_pay_level(p).structure     := cur_rec.advance_payments;
2901 				l_pay_level(p).arrears_yn    := cur_rec.arrears;
2902 				l_pay_level(p).amount        := cur_rec.amount;
2903 				l_pay_level(p).stub_days     := cur_rec.stub_days;
2904 				l_pay_level(p).stub_amount   := cur_rec.stub_amount;
2905                         END LOOP;
2906 
2907 			--call the pricing api.
2908                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2909                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_kle_id: ' || l_okcklines_rec.kle_id);
2910                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_ppd_amount: ' || l_ppd_amount);
2911                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_rate: ' || l_line_iir);
2912                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_ppd_date: ' ||x_trqv_tbl(1).payment_date);
2913                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Printing l_pay_level');
2914                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'====================');
2915                         END IF;
2916 			print_isg_params(l_pay_level);
2917                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2918                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Calling the Pricing API');
2919                         END IF;
2920 			okl_pricing_pvt.get_payment_after_ppd( p_api_version        => p_api_version,
2921                               			       p_init_msg_list       => p_init_msg_list,
2922                                                        x_return_status       => x_return_status,
2923                                                        x_msg_count           => x_msg_count,
2924                                                        x_msg_data            => x_msg_data,
2925                                                        p_khr_id              => p_chr_id,
2926                                                        p_kle_id              => l_okcklines_rec.kle_id,
2927                           			       p_ppd_amt             => l_ppd_amount,
2928                           			       p_rate                => l_line_iir,
2929                           			       p_ppd_date            => x_trqv_tbl(1).payment_date,
2930 						       p_pay_level	     => l_pay_level,
2931 						       x_pay_level	     => lx_pay_level);
2932 
2933                		IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2934                         	RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2935                		ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2936                          	RAISE OKL_API.G_EXCEPTION_ERROR;
2937                		END IF;
2938 
2939 			--collect the out param.
2940 			--Build the pl/sql table of all payments
2941 			FOR pay_knt in lx_pay_level.FIRST..lx_pay_level.LAST LOOP
2942 			    q := q+1;
2943 			    l_payments_tbl(q).KHR_ID     := p_chr_id;
2944 			    l_payments_tbl(q).KLE_ID     := l_okcklines_rec.kle_id;
2945 			    l_payments_tbl(q).STY_ID     := l_rent_sty_id;
2946 			    l_payments_tbl(q).start_date := lx_pay_level(pay_knt).start_date;
2947 			    l_payments_tbl(q).structure  := lx_pay_level(pay_knt).structure;
2948 			    l_payments_tbl(q).arrears_yn := lx_pay_level(pay_knt).arrears_yn;
2949 			    l_payments_tbl(q).periods    := lx_pay_level(pay_knt).periods;
2950 			    l_payments_tbl(q).frequency  :=lx_pay_level(pay_knt).frequency;
2951 			    l_payments_tbl(q).amount     := lx_pay_level(pay_knt).amount;
2952 			    l_payments_tbl(q).stub_days  := lx_pay_level(pay_knt).stub_days;
2953 			    l_payments_tbl(q).stub_amount:= lx_pay_level(pay_knt).stub_amount;
2954 			END LOOP;
2955 			--Now populate the l_payments_tbl with the UNSCHEDULED_PRINCIPAL_PAYMENT
2956 			--to account for this ppd.
2957 			q := q+1;
2958 			l_payments_tbl(q).KHR_ID     := p_chr_id;
2959 			l_payments_tbl(q).KLE_ID     := l_okcklines_rec.kle_id;
2960 			l_payments_tbl(q).STY_ID     := l_upp_sty_id;
2961 			l_payments_tbl(q).start_date := x_trqv_tbl(1).payment_date;
2962 			l_payments_tbl(q).stub_days  := 1;
2963 			l_payments_tbl(q).stub_amount:= l_ppd_for_asset;
2964 			--Bug#5511937 by dkagrawa start
2965                         l_index := q;
2966                         l_sum_ppd_amount := l_sum_ppd_amount + l_ppd_for_asset;
2967                         --Bug#5511937 end
2968 		END LOOP;
2969                 --Bug#5332964 by dkagrawa start
2970                 IF ( x_trqv_tbl(1).payment_amount - l_sum_ppd_amount <> 0 ) THEN
2971                   l_payments_tbl(l_index).stub_amount := l_payments_tbl(l_index).stub_amount + (x_trqv_tbl(1).payment_amount - l_sum_ppd_amount );
2972                 END IF;
2973                 --Bug#5332964 end
2974 		--Store this at one time.
2975                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2976                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Printing l_payments_tbl');
2977                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'====================');
2978                         END IF;
2979 			print_stm_payments(l_payments_tbl);
2980                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2981                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'calling the Store stm API');
2982                         END IF;
2983 		store_stm_payments(p_api_version  => p_api_version,
2984                               p_init_msg_list => p_init_msg_list,
2985                               x_return_status => x_return_status,
2986                               x_msg_count     => x_msg_count,
2987                               x_msg_data      => x_msg_data,
2988                               p_ppd_request_id => x_trqv_tbl(1).id,
2989                               p_ppd_khr_id     => p_chr_id,
2990                               p_payment_tbl 	=> l_payments_tbl,
2991                               x_cfo_id         => lx_cfo_id);
2992   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2993     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Store stm payments in ISG pricing:' || x_return_status
2994 				|| 'CFO Id: '|| lx_cfo_id);
2995   END IF;
2996                	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2997                        	RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2998                	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2999                        	RAISE OKL_API.G_EXCEPTION_ERROR;
3000                	END IF;
3001 
3002 	        IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
3003                         l_trqv_tbl(1).id := x_trqv_tbl(1).id;
3004                         l_trqv_tbl(1).object_version_number := x_trqv_tbl(1).object_version_number;
3005                         l_trqv_tbl(1).request_status_code := 'COMPLETE';
3006                         --Call update here.
3007                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3008                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Updating TRX Requests');
3009                         END IF;
3010                         okl_trx_requests_pub.update_trx_requests(
3011                                                 p_api_version         => p_api_version,
3012                                                 p_init_msg_list       =>p_init_msg_list,
3013                                                 x_return_status       => x_return_status,
3014                                                 x_msg_count           => x_msg_count,
3015                                                 x_msg_data            => x_msg_data,
3016                                                 p_trqv_tbl            => l_trqv_tbl,
3017                                                 x_trqv_tbl            => x_trqv_tbl);
3018    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3019      			OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Updating trx request to Complete in ISG pricing:'
3020 				|| x_return_status );
3021    END IF;
3022 
3023                         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3024                                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3025                         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3026                                 RAISE OKL_API.G_EXCEPTION_ERROR;
3027                         END IF;
3028 		END IF;
3029 
3030 
3031 
3032 	ELSE
3033   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3034     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'======Using ESG for Pricing========');
3035   END IF;
3036 	--External stream generation from here.
3037        		--Send the Request to Supertrump only if the amount is not Zero.
3038 	       -- If it is Zero we are updating the payment amount to 0 and setting
3039 	       -- the status of request to Complete.
3040       		IF l_amount = 0 THEN
3041    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3042      			OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'New Prin balance is Zero');
3043    END IF;
3044 			l_trqv_tbl(1).id := x_trqv_tbl(1).id;
3045 	       		l_trqv_tbl(1).object_version_number := x_trqv_tbl(1).object_version_number;
3046 			l_trqv_tbl(1).amount := 0;
3047 			l_trqv_tbl(1).request_status_code := 'COMPLETE';
3048                 	--Call update here.
3049                   	okl_trx_requests_pub.update_trx_requests(
3050                                                 p_api_version         => p_api_version,
3051                                                 p_init_msg_list       =>p_init_msg_list,
3052                                                 x_return_status       => x_return_status,
3053                                                 x_msg_count           => x_msg_count,
3054                                                 x_msg_data            => x_msg_data,
3055                                                 p_trqv_tbl            => l_trqv_tbl,
3056                                                 x_trqv_tbl            => x_trqv_tbl);
3057 
3058                   	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3059                      		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3060                   	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3061                      		RAISE OKL_API.G_EXCEPTION_ERROR;
3062                   	END IF;
3063 
3064       		ELSE
3065      		--NEW Principal Balance is not Zero
3066 
3067             	--Get the Existing payments from SLL/SLH
3068 	        get_current_payments(p_khr_id => p_chr_id,
3069                                      x_payment_struc => l_payment_struc,
3070                                      x_prim_sty_id       => l_prim_sty_id,
3071                                      x_upp_sty_id        => l_upp_sty_id,
3072                                      x_primary_strm_type => l_primary_strm_type);
3073 
3074   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3075     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_current_payments payments count is : ' || l_payment_struc.count);
3076           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Total Contract cost '||l_total_k_cost);
3077   END IF;
3078 
3079        --rkuttiya added for 11i OKL.H Variable Rate Project
3080        --check for the Principal Payment Stream and Solve for Payment option
3081             IF l_primary_strm_type = 'PRINCIPAL_PAYMENT' AND x_trqv_tbl(1).method_of_calculation_code = 'P' THEN
3082                  modify_principal_payments(
3083                        p_payment_struc         => l_payment_struc,
3084                        p_chr_id                => x_trqv_tbl(1).dnz_khr_id,
3085                        p_ppd_date	       => x_trqv_tbl(1).payment_date,
3086                        p_ppd_amount	       => x_trqv_tbl(1).payment_amount,
3087                        p_total_k_cost          => l_total_k_cost,
3088                        p_sty_id	               => l_prim_sty_id,
3089                        p_upp_sty_id            => l_upp_sty_id,
3090                        x_modified_payment_struc => l_modified_payment_struc);
3091 
3092 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3093   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After modifying principal payments count is : ' || l_modified_payment_struc.count);
3094 END IF;
3095 
3096 
3097                  store_principal_payments(p_api_version  => p_api_version,
3098 	                      p_init_msg_list => p_init_msg_list,
3099 			      x_return_status => x_return_status,
3100 			      x_msg_count     => x_msg_count,
3101                               x_msg_data      => x_msg_data,
3102                               p_ppd_request_id => x_trqv_tbl(1).id,
3103                               p_ppd_khr_id     => p_chr_id,
3104                               p_payment_structure => l_modified_payment_struc,
3105                               x_cfo_id         => lx_cfo_id);
3106 
3107            IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3108                         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After storing principal payments'|| x_return_status);
3109            END IF;
3110 
3111                      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3112                      		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3113                   	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3114                      		RAISE OKL_API.G_EXCEPTION_ERROR;
3115                   	END IF;
3116 
3117                     --Update the Request with the status of complete.
3118                         l_trqv_tbl(1).id := x_trqv_tbl(1).id;
3119                         l_trqv_tbl(1).object_version_number := x_trqv_tbl(1).object_version_number;
3120 
3121                         l_trqv_tbl(1).request_status_code := 'COMPLETE';
3122 
3123                         --Call update here.
3124                         okl_trx_requests_pub.update_trx_requests(
3125                                                 p_api_version         => p_api_version,
3126                                                 p_init_msg_list       =>p_init_msg_list,
3127                                                 x_return_status       => x_return_status,
3128                                                 x_msg_count           => x_msg_count,
3129                                                 x_msg_data            => x_msg_data,
3130                                                 p_trqv_tbl            => l_trqv_tbl,
3131                                                 x_trqv_tbl            => x_trqv_tbl);
3132 
3133                IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3134                                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'after updating request status '|| x_return_Status);
3135                END IF;
3136                      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3137                          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3138                      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3139                          RAISE OKL_API.G_EXCEPTION_ERROR;
3140                      END IF;
3141 
3142 
3143            ELSE
3144               IF (l_primary_strm_type = 'RENT' AND x_trqv_tbl(1).method_of_calculation_code = 'P') THEN
3145             	--Tweak these payments to split them based on the PPd date
3146   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3147     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ppd_date : ' ||  x_trqv_tbl(1).payment_date);
3148   END IF;
3149 		--For ESG also we will not be setting the payments to be
3150 		--calculated as Zero, they will be sent as they are so that
3151 		--the proportions can be calculated.
3152 
3153 		modify_payments( p_payment_struc  => l_payment_struc
3154 				,p_ppd_date => x_trqv_tbl(1).payment_date
3155 				,p_blank_amount => 'NEGATE'
3156 				,p_rent_sty_id => l_rent_sty_id
3157     				,x_modified_payment_struc  => l_modified_payment_struc);
3158   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3159     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After modifying payments count is : ' || l_modified_payment_struc.count);
3160   END IF;
3161 
3162           	--Store this whole lot of payments in Payment Schema.
3163 	       store_payments(p_api_version  => p_api_version,
3164 	                      p_init_msg_list => p_init_msg_list,
3165 			      x_return_status => x_return_status,
3166 			      x_msg_count     => x_msg_count,
3167                               x_msg_data      => x_msg_data,
3168                               p_ppd_request_id => x_trqv_tbl(1).id,
3169                               p_ppd_khr_id     => p_chr_id,
3170                               p_payment_structure => l_modified_payment_struc,
3171                               x_cfo_id         => lx_cfo_id);
3172 
3173   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3174     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After store payments cfo id is : ' || lx_cfo_id || ' ret status is: '|| x_return_status);
3175   END IF;
3176 
3177      		IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3178        		    	RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3179           	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3180             		RAISE OKL_API.G_EXCEPTION_ERROR;
3181           	END IF;
3182          ELSIF x_trqv_tbl(1).method_of_calculation_code = 'T' THEN
3183           modify_terms(  p_payment_struc         => l_payment_struc,
3184                        p_chr_id                => x_trqv_tbl(1).dnz_khr_id,
3185                        p_ppd_date	       => x_trqv_tbl(1).payment_date,
3186                        p_ppd_amount	       => x_trqv_tbl(1).payment_amount,
3187                        p_total_k_cost          => l_total_k_cost,
3188                        p_sty_id	               => l_prim_sty_id,
3189                        p_upp_sty_id            => l_upp_sty_id,
3190                        x_modified_payment_struc => l_modified_payment_struc);
3191 
3192   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3193     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After modifying payments count is : ' || l_modified_payment_struc.count);
3194   END IF;
3195 
3196           	--Store this whole lot of payments in Payment Schema.
3197 	       store_payments(p_api_version  => p_api_version,
3198 	                      p_init_msg_list => p_init_msg_list,
3199 			      x_return_status => x_return_status,
3200 			      x_msg_count     => x_msg_count,
3201                               x_msg_data      => x_msg_data,
3202                               p_ppd_request_id => x_trqv_tbl(1).id,
3203                               p_ppd_khr_id     => p_chr_id,
3204                               p_payment_structure => l_modified_payment_struc,
3205                               x_cfo_id         => lx_cfo_id);
3206 
3207   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3208     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After store payments cfo id is : ' || lx_cfo_id || ' ret status is: '|| x_return_status);
3209   END IF;
3210      		IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3211        		    	RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3212           	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3213             		RAISE OKL_API.G_EXCEPTION_ERROR;
3214           	END IF;
3215 
3216          END IF;
3217 
3218 
3219 --rkuttiya commenting following code for 11i OKL.H Variable Rate Project
3220 --API name has changed from extract_params loan to extract_params_loan_paydown
3221               /*  -Call the Extract params API
3222     			OKL_LA_STREAM_PUB.extract_params_loan(p_api_version               => p_api_version,
3223 	               				                p_init_msg_list             => p_init_msg_list,
3224 								p_chr_id                    => p_chr_id,
3225 								x_return_status             => x_return_status,
3226 								x_msg_count                 => x_msg_count,
3227                                         			x_msg_data                  => x_msg_data,
3228 								x_csm_loan_header           => l_csm_loan_header,
3229 								x_csm_loan_lines_tbl        => l_csm_loan_lines_tbl,
3230 								x_csm_loan_levels_tbl       => l_csm_loan_levels_tbl,
3231 								x_csm_one_off_fee_tbl       => l_csm_one_off_fee_tbl,
3232 								x_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl,
3233 								x_csm_yields_tbl            => l_csm_yields_tbl,
3234 								x_csm_stream_types_tbl      => l_csm_stream_types_tbl);*/
3235 
3236 
3237 
3238 --rkuttiya added the following for 11i OKL.H Variable Rate
3239 
3240   -- Get the Balance type code
3241      IF x_trqv_tbl(1).method_of_calculation_code = 'T' THEN
3242        l_balance_type := 'BALANCE_TERM';
3243      ELSIF x_trqv_tbl(1).method_of_calculation_code = 'P' THEN
3244        l_balance_type := 'BALANCE_PAYMENT';
3245      END IF;
3246 
3247             	--Call the Extract params API
3248     			OKL_LA_STREAM_PUB.extract_params_loan_paydown(p_api_version         => p_api_version,
3249 	               				                p_init_msg_list             => p_init_msg_list,
3250 								p_chr_id                    => p_chr_id,
3251                                                                 p_deal_type                 => NULL,
3252                                                                 p_paydown_type              => 'PPD',
3253                                                                 p_paydown_date              => x_trqv_tbl(1).payment_date,
3254                                                                 p_paydown_amount            => x_trqv_tbl(1).payment_amount,
3255                                                                 --p_balance_type_code         => NULL,
3256 								p_balance_type_code         => l_balance_type,     --Bug#5100215
3257                                                                 x_return_status             => x_return_status,
3258 								x_msg_count                 => x_msg_count,
3259                                         			x_msg_data                  => x_msg_data,
3260 								x_csm_loan_header           => l_csm_loan_header,
3261 								x_csm_loan_lines_tbl        => l_csm_loan_lines_tbl,
3262 								x_csm_loan_levels_tbl       => l_csm_loan_levels_tbl,
3263 								x_csm_one_off_fee_tbl       => l_csm_one_off_fee_tbl,
3264 								x_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl,
3265 								x_csm_yields_tbl            => l_csm_yields_tbl,
3266 								x_csm_stream_types_tbl      => l_csm_stream_types_tbl);
3267 
3268    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3269      			OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After extract params loan: '|| x_return_status);
3270    END IF;
3271 			IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3272        		      		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3273           	  	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3274             			RAISE OKL_API.G_EXCEPTION_ERROR;
3275           	  	END IF;
3276 
3277 --rkuttiya commenting following lines of code for 11i OKL.H Variable Rate
3278 
3279 /*
3280 	        --Get the Stream type id.
3281         		OKL_STREAMS_UTIL.get_dependent_stream_type(
3282                         	p_khr_id                        => p_chr_id
3283                         	,p_primary_sty_purpose          => G_RENT_STREAM
3284                         	,p_dependent_sty_purpose        => G_UNSCHED_PP_STREAM
3285                         	,x_return_status                => x_return_status
3286                         	,x_dependent_sty_id             => l_upp_sty_id);
3287 
3288 			print_to_log('After get_depend_stream type: '|| x_return_status);
3289 			print_to_log('Rent Sty ID : ' || l_rent_sty_id);
3290 			print_to_log('Unsched Prin Pay Sty ID : ' || l_upp_sty_id);
3291 
3292 		        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3293                 		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3294         		ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3295                 		RAISE OKL_API.G_EXCEPTION_ERROR;
3296         		END IF;
3297 */
3298 
3299             	--Modify the x_csm_loan_header and x_csm_loan_levels_tbl
3300         		l_csm_loan_header.jtot_object1_code := 'OKL_TRX_REQUESTS';
3301         		l_csm_loan_header.object1_id1 :=  x_trqv_tbl(1).id;
3302 
3303 --rkuttiya commenting following lines of code for 11i OKL.H PPD Impacts of Variable Rate
3304 /*        		l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_RENEWAL;
3305 
3306 			l_csm_loan_levels_tbl.delete;
3307 
3308 			FOR i in 1..l_csm_loan_lines_tbl.COUNT LOOP
3309 				knt := knt+1;
3310 				l_index		:= 1;
3311 
3312     				OKL_EXECUTE_FORMULA_PUB.execute(p_api_version   => p_api_version,
3313                                   	p_init_msg_list => p_init_msg_list,
3314                                   	x_return_status => x_return_status,
3315                                   	x_msg_count     => x_msg_count,
3316                                   	x_msg_data      => x_msg_data,
3317                                   	p_formula_name  => 'LINE_CAP_AMNT',
3318                                   	p_contract_id   => p_chr_id,
3319                                   	p_line_id       => l_csm_loan_lines_tbl(i).kle_loan_id,
3320                                   	x_value         => l_asset_cost);
3321 
3322 				print_to_log('Asset Cost After executing LINE_CAP_AMNT: '|| l_asset_cost);
3323 
3324    				If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
3325         				raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
3326    				Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
3327          				raise OKC_API.G_EXCEPTION_ERROR;
3328    				End If;
3329 
3330 
3331 				l_csm_loan_levels_tbl(knt).DESCRIPTION := 'Funding';
3332 				l_csm_loan_levels_tbl(knt).date_start := l_csm_loan_header.date_start;
3333 				l_csm_loan_levels_tbl(knt).kle_loan_id := l_csm_loan_lines_tbl(i).kle_loan_id;
3334 				l_csm_loan_levels_tbl(knt).level_index_number := l_index;
3335 				l_csm_loan_levels_tbl(knt).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
3336 				l_csm_loan_levels_tbl(knt).amount := l_asset_cost;
3337 				l_csm_loan_levels_tbl(knt).lock_level_step := NULL;
3338 				l_csm_loan_levels_tbl(knt).period := NULL;
3339 				l_csm_loan_levels_tbl(knt).advance_or_arrears := NULL;
3340 				l_csm_loan_levels_tbl(knt).income_or_expense := NULL;
3341 				l_csm_loan_levels_tbl(knt).structure :=NULL;
3342 				l_csm_loan_levels_tbl(knt).query_level_yn := NULL;
3343 
3344 				--Now open a csr and get only the rent payments
3345 				FOR cur_rec in  c_get_payment_details(x_trqv_tbl(1).id
3346 							,l_csm_loan_lines_tbl(i).kle_loan_id
3347 							,l_rent_sty_id) LOOP
3348 					knt := knt+1;
3349 					l_index := l_index + 1;
3350                                         IF cur_rec.stub_days IS NOT NULL
3351                                             AND cur_rec.stub_amount IS NOT NULL THEN
3352                                         	l_csm_loan_levels_tbl(knt).description := 'RENT';
3353                                         	l_csm_loan_levels_tbl(knt).date_start := cur_rec.start_date + cur_rec.stub_days;
3354                                         	l_csm_loan_levels_tbl(knt).kle_loan_id := l_csm_loan_lines_tbl(i).kle_loan_id;
3355                                         	l_csm_loan_levels_tbl(knt).level_index_number := l_index;
3356                                         	l_csm_loan_levels_tbl(knt).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
3357                                         	l_csm_loan_levels_tbl(knt).number_of_periods := 1;
3358    						--In the CASE of ESG, the amount to be calculated is negated.
3359 						--We are doing this because, we need to figure out whether
3360 						--to lock the amount or rate or both when,
3361    						--sending the params to Pricing using ESG. So, if the amount
3362 						--is -ve, we lock the rate and set the amount back to positive,
3363 						--if the amount is +ve,we lock Both and send the amount as is.
3364 
3365                                         	IF cur_rec.stub_amount > 0 THEN
3366                                                 	l_csm_loan_levels_tbl(knt).lock_level_step := Okl_Create_Streams_Pub.G_LOCK_BOTH;
3367                                         		l_csm_loan_levels_tbl(knt).amount := cur_rec.stub_amount;
3368                                         	ELSE
3369                                                 	l_csm_loan_levels_tbl(knt).lock_level_step := Okl_Create_Streams_Pub.G_LOCK_RATE;
3370                                         		l_csm_loan_levels_tbl(knt).amount := -1 * NVL(cur_rec.stub_amount,0);
3371                                         	END IF;
3372                                         	l_csm_loan_levels_tbl(knt).rate := l_iir;
3373                                         	l_csm_loan_levels_tbl(knt).period := 'T';
3374                                         	l_csm_loan_levels_tbl(knt).advance_or_arrears := cur_rec.advance_or_arrears;
3375                                         	l_csm_loan_levels_tbl(knt).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
3376                                         	l_csm_loan_levels_tbl(knt).structure := nvl(cur_rec.advance_payments,0);
3377                                         	l_csm_loan_levels_tbl(knt).query_level_yn := Okl_Create_Streams_Pub.G_FND_YES;
3378                  			ELSE
3379 						l_csm_loan_levels_tbl(knt).description := 'RENT';
3380 						l_csm_loan_levels_tbl(knt).date_start := cur_rec.start_date;
3381 						l_csm_loan_levels_tbl(knt).kle_loan_id := l_csm_loan_lines_tbl(i).kle_loan_id;
3382 						l_csm_loan_levels_tbl(knt).level_index_number := l_index;
3383 						l_csm_loan_levels_tbl(knt).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
3384 						l_csm_loan_levels_tbl(knt).number_of_periods := cur_rec.number_of_periods;
3385    						--In the CASE of ESG, the amount to be calculated is negated.
3386 						--We are doing this because, we need to figure out whether
3387 						--to lock the amount or rate or both when,
3388    						--sending the params to Pricing using ESG. So, if the amount
3389 						--is -ve, we lock the rate and set the amount back to positive,
3390 						--if the amount is +ve,we lock Both and send the amount as is.
3391 						IF cur_rec.amount > 0 THEN
3392 							l_csm_loan_levels_tbl(knt).lock_level_step := Okl_Create_Streams_Pub.G_LOCK_BOTH;
3393 							l_csm_loan_levels_tbl(knt).amount := cur_rec.amount;
3394 						ELSE
3395 							l_csm_loan_levels_tbl(knt).lock_level_step := Okl_Create_Streams_Pub.G_LOCK_RATE;
3396 							l_csm_loan_levels_tbl(knt).amount := -1 * NVL(cur_rec.amount,0);
3397 				 		END IF;
3398 						l_csm_loan_levels_tbl(knt).rate := l_iir;
3399 						l_csm_loan_levels_tbl(knt).period := cur_rec.frequency_code;
3400 						l_csm_loan_levels_tbl(knt).advance_or_arrears := cur_rec.advance_or_arrears;
3401 						l_csm_loan_levels_tbl(knt).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
3402 						l_csm_loan_levels_tbl(knt).structure :=nvl(cur_rec.advance_payments,0);
3403 						l_csm_loan_levels_tbl(knt).query_level_yn := Okl_Create_Streams_Pub.G_FND_YES;
3404                  			END IF;
3405 				END LOOP;
3406 				--Open the cursor and get the PPD payments that
3407 				--have happenned before this PPD.
3408 
3409                                FOR cur_rec in c_get_payment_details(x_trqv_tbl(1).id
3410                                                         ,l_csm_loan_lines_tbl(i).kle_loan_id
3411                                                         ,l_upp_sty_id) LOOP
3412                                 	knt := knt+1;
3413                                 	l_index := l_index + 1;
3414 					l_csm_loan_levels_tbl(knt).DESCRIPTION := 'Funding';
3415 					l_csm_loan_levels_tbl(knt).date_start := cur_rec.start_date;
3416 					l_csm_loan_levels_tbl(knt).kle_loan_id := l_csm_loan_lines_tbl(i).kle_loan_id;
3417 					l_csm_loan_levels_tbl(knt).level_index_number := l_index;
3418 					l_csm_loan_levels_tbl(knt).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
3419 					l_csm_loan_levels_tbl(knt).lock_level_step := NULL;
3420 					l_csm_loan_levels_tbl(knt).period := NULL;
3421 					l_csm_loan_levels_tbl(knt).advance_or_arrears := NULL;
3422 					l_csm_loan_levels_tbl(knt).income_or_expense := NULL;
3423 					l_csm_loan_levels_tbl(knt).structure :=NULL;
3424 					l_csm_loan_levels_tbl(knt).query_level_yn := NULL;
3425 					l_csm_loan_levels_tbl(knt).amount :=  (-1 * cur_rec.stub_amount);
3426 			       END LOOP;
3427 
3428                                 knt := knt+1;
3429                                 l_index := l_index + 1;
3430 
3431 				--Now populate the PPD funding for this Asset
3432 				l_csm_loan_levels_tbl(knt).DESCRIPTION := 'Funding';
3433 				l_csm_loan_levels_tbl(knt).date_start := x_trqv_tbl(1).payment_date;
3434 				l_csm_loan_levels_tbl(knt).kle_loan_id := l_csm_loan_lines_tbl(i).kle_loan_id;
3435 				l_csm_loan_levels_tbl(knt).level_index_number := l_index;
3436 				l_csm_loan_levels_tbl(knt).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
3437 				l_csm_loan_levels_tbl(knt).lock_level_step := NULL;
3438 				l_csm_loan_levels_tbl(knt).period := NULL;
3439 				l_csm_loan_levels_tbl(knt).advance_or_arrears := NULL;
3440 				l_csm_loan_levels_tbl(knt).income_or_expense := NULL;
3441 				l_csm_loan_levels_tbl(knt).structure :=NULL;
3442 				l_csm_loan_levels_tbl(knt).query_level_yn := NULL;
3443 
3444 				--Pro rate the ppd amount for this asset.
3445 				--Formula would be: (asset_cost/total_cost) * Paydown amount
3446 
3447 				print_to_log('l_asset_cost: '|| l_asset_cost);
3448 				print_to_log('l_total_k_cost: '|| l_total_k_cost);
3449 				print_to_log('Payment amount: '|| x_trqv_tbl(1).payment_amount);
3450 				l_ppd_for_asset := ((l_asset_cost/l_total_k_cost) * x_trqv_tbl(1).payment_amount);
3451 
3452 				print_to_log('l_ppd_for_asset: '|| l_ppd_for_asset);
3453 				-- We need to send Negative Funding to ST.
3454 				l_ppd_funding := l_ppd_for_asset * -1;
3455  				print_to_log('l_ppd_funding amount: '|| l_ppd_funding);
3456 
3457 				l_csm_loan_levels_tbl(knt).amount := l_ppd_funding;
3458 
3459 			END LOOP;
3460 
3461  IF l_csm_loan_levels_tbl.count > 0 THEN
3462    FOR i IN l_csm_loan_levels_tbl.first..l_csm_loan_levels_tbl.last LOOP
3463 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').DESCRIPTION = '||l_csm_loan_levels_tbl(i).DESCRIPTION,1,255));
3464 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').DATE_START = '||TO_CHAR(l_csm_loan_levels_tbl(i).DATE_START), 1, 255));
3465 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').KLE_LOAN_ID = '||TO_CHAR(l_csm_loan_levels_tbl(i).KLE_LOAN_ID), 1, 255));
3466 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').LEVEL_INDEX_NUMBER = '||TO_CHAR(l_csm_loan_levels_tbl(i).LEVEL_INDEX_NUMBER), 1, 255));
3467 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').LEVEL_TYPE = '||l_csm_loan_levels_tbl(i).LEVEL_TYPE,1,255));
3468 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').NUMBER_OF_PERIODS = '||TO_CHAR(l_csm_loan_levels_tbl(i).NUMBER_OF_PERIODS), 1, 255));
3469 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').AMOUNT = '||TO_CHAR(l_csm_loan_levels_tbl(i).AMOUNT), 1, 255));
3470 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').LOCK_LEVEL_STEP = '||l_csm_loan_levels_tbl(i).LOCK_LEVEL_STEP,1,255));
3471 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').RATE = '||TO_CHAR(l_csm_loan_levels_tbl(i).RATE), 1, 255));
3472 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').PERIOD = '||l_csm_loan_levels_tbl(i).PERIOD,1,255));
3473 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').ADVANCE_OR_ARREARS = '||l_csm_loan_levels_tbl(i).ADVANCE_OR_ARREARS,1,255));
3474 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').INCOME_OR_EXPENSE = '||l_csm_loan_levels_tbl(i).INCOME_OR_EXPENSE,1,255));
3475 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').STRUCTURE = '||l_csm_loan_levels_tbl(i).STRUCTURE,1,255));
3476 print_to_log(SubStr('l_csm_loan_levels_tbl('||TO_CHAR(i)||').QUERY_LEVEL_YN = '||l_csm_loan_levels_tbl(i).QUERY_LEVEL_YN,1,255));
3477 print_to_log (' ');
3478     END LOOP;
3479   END IF;
3480 */
3481 --rkuttiya end commenting code for 11i OKL.H Variable Rate
3482 
3483     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3484       		 	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling ESG streams');
3485     END IF;
3486            	       --Call the Create streams
3487   			Okl_Create_Streams_Pub.Create_Streams_Loan_Restr(p_api_version  => p_api_version,
3488 								p_init_msg_list         => p_init_msg_list,
3489 								p_skip_prc_engine       => l_skip_prc_engine,
3490 								p_csm_loan_header       => l_csm_loan_header,
3491                                 				p_csm_loan_lines_tbl    => l_csm_loan_lines_tbl,
3492 								p_csm_loan_levels_tbl   => l_csm_loan_levels_tbl,
3493 								p_csm_one_off_fee_tbl   => l_csm_one_off_fee_tbl,
3494 								p_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl,
3495 								p_csm_yields_tbl        => l_csm_yields_tbl,
3496 								p_csm_stream_types_tbl  => l_csm_stream_types_tbl,
3497 								x_trans_id              => l_trans_id,
3498 								x_trans_status          => l_trans_status,
3499 								x_return_status	   	=> x_return_status,
3500 								x_msg_count	   	=> x_msg_count,
3501 								x_msg_data	   	=> x_msg_data);
3502 
3503 
3504     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3505       		 	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling ESG streams:'|| x_return_status);
3506     END IF;
3507 			IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3508        		      		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3509           	  	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3510             			RAISE OKL_API.G_EXCEPTION_ERROR;
3511           	  	END IF;
3512 			--Now update the Status and the Transaction id in the CS Request Table.
3513 			-- fetch the object version no from the db and update
3514 			        open c_get_object_ver(x_trqv_tbl(1).id);
3515 				fetch c_get_object_ver into l_object_version_number;
3516 				close c_get_object_ver;
3517 
3518 			l_trqv_tbl(1).id := x_trqv_tbl(1).id;
3519 			l_trqv_tbl(1).object_version_number := l_object_version_number;--x_trqv_tbl(1).object_version_number;
3520 			l_trqv_tbl(1).jtot_object1_code := 'OKL_STREAM_INTERFACES';
3521 			l_trqv_tbl(1).object1_id1 := l_trans_id;
3522 			if (l_object_version_number = x_trqv_tbl(1).object_version_number) then
3523 				l_trqv_tbl(1).request_status_code := 'PRICING';
3524                         end if ;
3525 
3526                 	--Call update here.
3527                   	okl_trx_requests_pub.update_trx_requests(
3528                                                 p_api_version         => p_api_version,
3529                                                 p_init_msg_list       =>p_init_msg_list,
3530                                                 x_return_status       => x_return_status,
3531                                                 x_msg_count           => x_msg_count,
3532                                                 x_msg_data            => x_msg_data,
3533                                                 p_trqv_tbl            => l_trqv_tbl,
3534                                                 x_trqv_tbl            => x_trqv_tbl);
3535 
3536                   	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3537                      		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3538                   	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3539                      		RAISE OKL_API.G_EXCEPTION_ERROR;
3540                   	END IF;
3541 
3542                    END IF; -- End If for Principal Payment and Solve for payment
3543 
3544   		END IF;-- End if for l_amount =0
3545 	END IF; -- End if for Check for profile
3546   EXCEPTION
3547     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3548     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3549                                l_api_name,
3550                                G_PKG_NAME,
3551                                'OKL_API.G_RET_STS_ERROR',
3552                                x_msg_count,
3553                                x_msg_data,
3554                                '_PVT');
3555     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3556     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3557                               l_api_name,
3558                               G_PKG_NAME,
3559                               'OKL_API.G_RET_STS_UNEXP_ERROR',
3560                               x_msg_count,
3561                               x_msg_data,
3562                               '_PVT');
3563     WHEN OTHERS THEN
3564        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3565                               l_api_name,
3566                               G_PKG_NAME,
3567                               'OTHERS',
3568                               x_msg_count,
3569                               x_msg_data,
3570                               '_PVT');
3571 
3572 
3573  END calculate;
3574 
3575 PROCEDURE update_ppd_request(
3576      p_api_version           IN  NUMBER
3577     ,p_init_msg_list         IN  VARCHAR2
3578     ,x_return_status         OUT  NOCOPY VARCHAR2
3579     ,x_msg_count             OUT  NOCOPY NUMBER
3580     ,x_msg_data              OUT  NOCOPY VARCHAR2
3581     ,p_trqv_rec              IN  okl_trx_requests_pub.trqv_rec_type
3582     ,x_trqv_rec              OUT  NOCOPY okl_trx_requests_pub.trqv_rec_type)
3583  AS
3584 
3585         l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_PPD_REQUEST';
3586     	l_trqv_rec          okl_trx_requests_pub.trqv_rec_type := p_trqv_rec;
3587 
3588 	CURSOR c_obj_vers_csr (a_id NUMBER)
3589 	IS
3590 	SELECT object_Version_number
3591 	FROM   okl_trx_requests
3592 	WHERE id=a_id;
3593 
3594    BEGIN
3595 
3596         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
3597 
3598         --Call start_activity to create savepoint, check compatibility and initialize message list
3599 
3600         x_return_status := OKL_API.START_ACTIVITY(
3601                               l_api_name
3602                               ,p_init_msg_list
3603                               ,'_PVT'
3604                               ,x_return_status);
3605 
3606         --Check if activity started successfully
3607 
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 	OPEN c_obj_vers_csr(l_trqv_rec.id);
3615 	FETCH c_obj_vers_csr INTO l_trqv_rec.object_Version_number;
3616 	CLOSE c_obj_vers_csr;
3617 
3618 	--Check the Status that is being passed in and decode that status before callin
3619 	-- the update API.
3620 	--The status should be present in the FND_LOOKUP.
3621 
3622 
3623 		IF (l_trqv_rec.request_status_code = 'PROCESS_COMPLETE' ) THEN
3624 			l_trqv_rec.request_status_code := 'COMPLETE';
3625 		ELSIF (l_trqv_rec.request_status_code = 'PROCESS_COMPLETE_ERROR' ) THEN
3626 			l_trqv_rec.request_status_code := 'INCOMPLETE';
3627 		END IF;
3628 
3629 
3630                 -- Call the public API for updation here.
3631                   okl_trx_requests_pub.update_trx_requests(
3632                                                 p_api_version         => p_api_version,
3633                                                 p_init_msg_list       =>p_init_msg_list,
3634                                                 x_return_status       => x_return_status,
3635                                                 x_msg_count           => x_msg_count,
3636                                                 x_msg_data            => x_msg_data,
3637                                                 p_trqv_rec            => l_trqv_rec,
3638                                                 x_trqv_rec            => x_trqv_rec);
3639 
3640 
3641                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3642                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3643                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3644                         RAISE OKL_API.G_EXCEPTION_ERROR;
3645                   END IF;
3646 
3647   EXCEPTION
3648     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3649     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3650                                l_api_name,
3651                                G_PKG_NAME,
3652                                'OKL_API.G_RET_STS_ERROR',
3653                                x_msg_count,
3654                                x_msg_data,
3655                                '_PVT');
3656     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3657     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3658                               l_api_name,
3659                               G_PKG_NAME,
3660                               'OKL_API.G_RET_STS_UNEXP_ERROR',
3661                               x_msg_count,
3662                               x_msg_data,
3663                               '_PVT');
3664     WHEN OTHERS THEN
3665        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3666                               l_api_name,
3667                               G_PKG_NAME,
3668                               'OTHERS',
3669                               x_msg_count,
3670                               x_msg_data,
3671                               '_PVT');
3672 
3673 
3674  END update_ppd_request;
3675 
3676 
3677   ------------------------------------------------------------------------------
3678   -- FUNCTION get_try_id
3679   ------------------------------------------------------------------------------
3680     -- Created by  : RVADURI
3681     --
3682     --  Purpose:
3683     --  Private Procedure to retrieve ID of a given Transaction Type
3684     --
3685     -- Known limitations/enhancements and/or remarks:
3686     --
3687   ------------------------------------------------------------------------------
3688 
3689   FUNCTION get_try_id (p_try_name IN VARCHAR2) RETURN NUMBER IS
3690 
3691     CURSOR c_try IS
3692       SELECT  id
3693       FROM    okl_trx_types_tl
3694       WHERE   name = p_try_name
3695         AND   language = 'US';
3696 
3697     l_try_id      NUMBER;
3698 
3699   BEGIN
3700 
3701     OPEN c_try;
3702     FETCH c_try INTO l_try_id;
3703     CLOSE c_try;
3704 
3705     RETURN  l_try_id;
3706 
3707   EXCEPTION
3708 
3709     WHEN OTHERS THEN
3710 
3711       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
3712                            p_msg_name     => G_UNEXPECTED_ERROR,
3713                            p_token1       => G_SQLCODE_TOKEN,
3714                            p_token1_value => SQLCODE,
3715                            p_token2       => G_SQLERRM_TOKEN,
3716                            p_token2_value => SQLERRM);
3717 
3718   END get_try_id;
3719 
3720 
3721   ------------------------------------------------------------------------------
3722   -- FUNCTION get_sty_id
3723   ------------------------------------------------------------------------------
3724     -- Created by  : RVADURI
3725     --
3726     --  Purpose:
3727     --  Private Procedure to retrieve ID of a given Stream Type
3728     --
3729     -- Known limitations/enhancements and/or remarks:
3730     --
3731   ------------------------------------------------------------------------------
3732 
3733   FUNCTION get_sty_id (p_sty_name IN VARCHAR2) RETURN NUMBER IS
3734 
3735     CURSOR c_sty IS
3736       SELECT  sty.id
3737       FROM    okl_strm_type_tl styt, okl_strm_type_b sty
3738       WHERE   styt.name = p_sty_name
3739         AND   styt.language = 'US'
3740         AND   sty.id = styt.id
3741         AND   sty.start_date <= TRUNC(SYSDATE)
3742         AND   NVL(sty.end_date, SYSDATE) >= TRUNC(SYSDATE);
3743 
3744     l_sty_id      NUMBER;
3745 
3746   BEGIN
3747 
3748     OPEN c_sty;
3749     FETCH c_sty INTO l_sty_id;
3750     CLOSE c_sty;
3751 
3752     RETURN  l_sty_id;
3753 
3754   EXCEPTION
3755 
3756     WHEN OTHERS THEN
3757 
3758       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
3759                            p_msg_name     => G_UNEXPECTED_ERROR,
3760                            p_token1       => G_SQLCODE_TOKEN,
3761                            p_token1_value => SQLCODE,
3762                            p_token2       => G_SQLERRM_TOKEN,
3763                            p_token2_value => SQLERRM);
3764 
3765   END get_sty_id;
3766 
3767   ------------------------------------------------------------------------------
3768   -- FUNCTION get_pdt_id
3769   ------------------------------------------------------------------------------
3770     -- Created by  : RVADURI
3771     --
3772     --  Purpose:
3773     --  Private Procedure to retrieve Product ID of a given Contract
3774     --
3775     -- Known limitations/enhancements and/or remarks:
3776     --
3777   ------------------------------------------------------------------------------
3778 
3779   FUNCTION get_pdt_id (p_khr_id IN VARCHAR2) RETURN NUMBER IS
3780 
3781     CURSOR c_pdt IS
3782       SELECT  pdt_id
3783       FROM    okl_k_headers
3784       WHERE   id = p_khr_id;
3785 
3786     l_pdt_id      NUMBER;
3787 
3788   BEGIN
3789 
3790     OPEN c_pdt;
3791     FETCH c_pdt INTO l_pdt_id;
3792     CLOSE c_pdt;
3793 
3794     RETURN  l_pdt_id;
3795 
3796   EXCEPTION
3797 
3798     WHEN OTHERS THEN
3799 
3800       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
3801                            p_msg_name     => G_UNEXPECTED_ERROR,
3802                            p_token1       => G_SQLCODE_TOKEN,
3803                            p_token1_value => SQLCODE,
3804                            p_token2       => G_SQLERRM_TOKEN,
3805                            p_token2_value => SQLERRM);
3806 
3807   END get_pdt_id;
3808 
3809 
3810   ------------------------------------------------------------------------------
3811   -- PROCEDURE create_ppd_invoice
3812   ------------------------------------------------------------------------------
3813     -- Created by  : RVADURI
3814     --
3815     --  Purpose:
3816     --  Create an Invoice Entry in the Internal OKL Invoice tables
3817     --
3818     -- Known limitations/enhancements and/or remarks:
3819     --
3820   ------------------------------------------------------------------------------
3821 
3822   PROCEDURE create_ppd_invoice (p_khr_id            IN NUMBER,
3823                                 p_ppd_amount        IN NUMBER,
3824                                 p_ppd_desc          IN VARCHAR2, --Will be default null
3825                                 p_syndication_code  IN VARCHAR2, --Will be default null
3826                                 p_factoring_code    IN VARCHAR2, --Will be default null
3827                                 x_tai_id            OUT NOCOPY NUMBER,
3828                                 x_return_status     OUT NOCOPY VARCHAR2,
3829                                 x_msg_count         OUT NOCOPY NUMBER,
3830                                 x_msg_data          OUT NOCOPY VARCHAR2) IS
3831 
3832     l_sysdate           DATE;
3833     l_khr_id            NUMBER;
3834     l_sty_name          VARCHAR2(150) := 'PRINCIPAL PAYMENT';
3835 
3836     l_ppd_amount        NUMBER;
3837     l_ppd_desc          VARCHAR2(4000);
3838 
3839     l_try_id            NUMBER;
3840     l_sty_id            NUMBER;
3841     l_pdt_id            NUMBER;
3842     l_factoring_synd    VARCHAR2(30);
3843     l_syndication_code  VARCHAR2(30);
3844     l_factoring_code    VARCHAR2(30);
3845 
3846     l_api_version       CONSTANT NUMBER    :=    1;
3847     l_init_msg_list     CONSTANT CHAR      :=    'F';
3848     l_return_status     VARCHAR2(1)        :=    OKL_API.G_RET_STS_SUCCESS;
3849     l_line_number       CONSTANT NUMBER    :=    1;
3850 
3851 
3852     -- Invoice Header
3853     i_taiv_rec          okl_trx_ar_invoices_pub.taiv_rec_type;
3854     r_taiv_rec          okl_trx_ar_invoices_pub.taiv_rec_type;
3855 
3856     -- Invoice Line
3857     i_tilv_rec          okl_txl_ar_inv_lns_pub.tilv_rec_type;
3858     r_tilv_rec          okl_txl_ar_inv_lns_pub.tilv_rec_type;
3859 
3860     -- Accouting Engine (AE) Records
3861     l_tmpl_identify_rec             OKL_ACCOUNT_DIST_PUB.TMPL_IDENTIFY_REC_TYPE;
3862     l_dist_info_rec                 OKL_ACCOUNT_DIST_PUB.DIST_INFO_REC_TYPE;
3863     l_ctxt_val_tbl                  OKL_ACCOUNT_DIST_PUB.CTXT_VAL_TBL_TYPE;
3864     l_acc_gen_primary_key_tbl       OKL_ACCOUNT_DIST_PUB.ACC_GEN_PRIMARY_KEY;
3865     lx_template_tbl                 OKL_ACCOUNT_DIST_PUB.AVLV_TBL_TYPE;
3866     lx_amount_tbl                   OKL_ACCOUNT_DIST_PUB.AMOUNT_TBL_TYPE;
3867 
3868 
3869   BEGIN
3870 
3871     l_syndication_code   := p_syndication_code;
3872     l_factoring_code     := p_factoring_code;
3873 
3874     IF (l_syndication_code IS NOT NULL) AND (l_factoring_code IS NOT NULL) THEN
3875       OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME,
3876                            p_msg_name => 'OKL_SYND_FACTOR_EXCLUSIVE');
3877       RAISE OKL_API.G_EXCEPTION_ERROR;
3878     END IF;
3879 
3880     l_sysdate         :=        TRUNC(SYSDATE);
3881     l_khr_id          :=        p_khr_id;
3882     l_ppd_amount      :=        p_ppd_amount;
3883     l_ppd_desc        :=        nvl(p_ppd_desc,'Principal Paydown');
3884 
3885     l_try_id          := get_try_id ('Billing');
3886     l_sty_id          := get_sty_id (l_sty_name);
3887     l_pdt_id          := get_pdt_id (l_khr_id);
3888 
3889     IF l_pdt_id IS NULL THEN
3890       OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME,
3891                            p_msg_name => 'OKL_NO_PRODUCT_FOUND');
3892       RAISE OKL_API.G_EXCEPTION_ERROR;
3893     END IF;
3894 
3895 
3896     ----------------------------------------------------------------------------------
3897     -- Preparing Invoice Header.  Assumption: Charge will be to Primary Leasee
3898     ----------------------------------------------------------------------------------
3899     i_taiv_rec.try_id            := l_try_id;
3900     i_taiv_rec.khr_id            := l_khr_id;
3901     i_taiv_rec.date_entered      := l_sysdate;
3902     i_taiv_rec.date_invoiced     := l_sysdate;
3903     i_taiv_rec.description       := l_ppd_desc;
3904     i_taiv_rec.amount            := l_ppd_amount;
3905     i_taiv_rec.trx_status_code   := 'SUBMITTED';
3906     i_taiv_rec.legal_entity_id   := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(l_khr_id);  --dkagrawa added to populate le_id
3907 
3908 
3909     ----------------------------------------------------------------------------------
3910     -- May be useful to other functional areas.  Not populated for now.
3911     ----------------------------------------------------------------------------------
3912     i_taiv_rec.svf_id           := NULL;
3913     i_taiv_rec.cra_id           := NULL;  -- OKL_CURE_REP_AMTS_V
3914     i_taiv_rec.qte_id           := NULL;  -- OKL_TRX_QUOTES_V
3915     i_taiv_rec.tcn_id           := NULL;  -- OKL_TRX_CONTRACTS
3916     i_taiv_rec.ipy_id           := NULL;  -- OKL_INS_POLICIES_V
3917     i_taiv_rec.tap_id           := NULL;  -- OKL_TRX_AP_INVOICES_V
3918 
3919     ----------------------------------------------------------------------------------
3920     -- Insert Invoice Header record
3921     ----------------------------------------------------------------------------------
3922     okl_trx_ar_invoices_pub.insert_trx_ar_invoices(p_api_version     => l_api_version,
3923                                                    p_init_msg_list   => l_init_msg_list,
3924                                                    x_return_status   => l_return_status,
3925                                                    x_msg_count       => x_msg_count,
3926                                                    x_msg_data        => x_msg_data,
3927                                                    p_taiv_rec        => i_taiv_rec,
3928                                                    x_taiv_rec        => r_taiv_rec);
3929 
3930     IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3931       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3932     ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
3933       RAISE OKL_API.G_EXCEPTION_ERROR;
3934     END IF;
3935 
3936     ----------------------------------------------------------------------------------
3937     -- Prepare Invoice Line
3938     ----------------------------------------------------------------------------------
3939     i_tilv_rec.line_number            := l_line_number;
3940     i_tilv_rec.tai_id                 := r_taiv_rec.id;
3941     i_tilv_rec.description            := l_ppd_desc;
3942     i_tilv_rec.amount                 := r_taiv_rec.amount;
3943     i_tilv_rec.sty_id                 := l_sty_id;
3944 
3945     -- this field is passed as invoice description in AR
3946     -- you can actually put 'LINE' or 'CHARGE'
3947     -- 'CHARGE' is used for financial charges and has some accounting
3948     -- implications in AR; till further notice please always use LINE
3949 
3950     i_tilv_rec.inv_receiv_line_code := 'LINE';
3951 
3952     ----------------------------------------------------------------------------------
3953     -- Insert transaction line record
3954     ----------------------------------------------------------------------------------
3955 
3956     okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (p_api_version       => l_api_version,
3957                                                    p_init_msg_list   => l_init_msg_list,
3958                                                    x_return_status   => l_return_status,
3959                                                    x_msg_count       => x_msg_count,
3960                                                    x_msg_data        => x_msg_data,
3961                                                    p_tilv_rec        => i_tilv_rec,
3962                                                    x_tilv_rec        => r_tilv_rec);
3963 
3964     IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3965       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3966     ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
3967       RAISE OKL_API.G_EXCEPTION_ERROR;
3968     END IF;
3969 
3970     ----------------------------------------------------------------------------------
3971     -- Prepare OKL Accounting Engine parameters
3972     ----------------------------------------------------------------------------------
3973       l_factoring_synd     := get_factor_synd(l_khr_id);
3974 
3975 
3976     l_tmpl_identify_rec.PRODUCT_ID              := l_pdt_id;
3977     l_tmpl_identify_rec.TRANSACTION_TYPE_ID     := l_try_id;
3978     l_tmpl_identify_rec.STREAM_TYPE_ID          := l_sty_id;
3979     l_tmpl_identify_rec.ADVANCE_ARREARS         := NULL;
3980     l_tmpl_identify_rec.FACTORING_SYND_FLAG     := l_factoring_synd;
3981     l_tmpl_identify_rec.SYNDICATION_CODE        := l_syndication_code;
3982     l_tmpl_identify_rec.FACTORING_CODE          := l_factoring_code;
3983     l_tmpl_identify_rec.MEMO_YN                 := 'N';
3984     l_tmpl_identify_rec.PRIOR_YEAR_YN           := 'N';
3985 
3986     l_dist_info_rec.SOURCE_ID                   := r_tilv_rec.id;
3987     l_dist_info_rec.SOURCE_TABLE                := 'OKL_TXL_AR_INV_LNS_B';
3988     l_dist_info_rec.ACCOUNTING_DATE             := l_sysdate;
3989     l_dist_info_rec.GL_REVERSAL_FLAG            := 'N';
3990     l_dist_info_rec.POST_TO_GL                  := 'N';
3991     l_dist_info_rec.AMOUNT                      := l_ppd_amount;
3992     l_dist_info_rec.CURRENCY_CODE               := NULL;
3993     l_dist_info_rec.CURRENCY_CONVERSION_TYPE    := NULL;
3994     l_dist_info_rec.CURRENCY_CONVERSION_DATE    := NULL;
3995     l_dist_info_rec.CONTRACT_ID                 := l_khr_id;
3996     l_dist_info_rec.CONTRACT_LINE_ID            := NULL;
3997 
3998     l_ctxt_val_tbl(1).name                      := NULL;
3999     l_ctxt_val_tbl(1).value                     := NULL;
4000 
4001     l_acc_gen_primary_key_tbl(1).source_table       := 'RA_CUST_TRX_TYPES';
4002     l_acc_gen_primary_key_tbl(1).primary_key_column := 'CUSTOMER_TRX_ID';
4003 
4004     okl_account_dist_pub.create_accounting_dist(p_api_version               => l_api_version,
4005                                                 p_init_msg_list             => l_init_msg_list,
4006                                                 x_return_status             => l_return_status,
4007                                                 x_msg_count                 => x_msg_count,
4008                                                 x_msg_data                  => x_msg_data,
4009                                                 p_tmpl_identify_rec         => l_tmpl_identify_rec,
4010                                                 p_dist_info_rec             => l_dist_info_rec,
4011                                                 p_ctxt_val_tbl              => l_ctxt_val_tbl,
4012                                                 p_acc_gen_primary_key_tbl   => l_acc_gen_primary_key_tbl,
4013                                                 x_template_tbl              => lx_template_tbl,
4014                                                 x_amount_tbl                => lx_amount_tbl);
4015 
4016     IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
4017       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4018     ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
4019       RAISE OKL_API.G_EXCEPTION_ERROR;
4020     END IF;
4021 
4022     x_tai_id        := r_taiv_rec.id;
4023     x_return_status := l_return_status;
4024 
4025 
4026   EXCEPTION
4027 
4028     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4029 
4030       x_return_status := OKL_API.G_RET_STS_ERROR;
4031 
4032     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4033 
4034       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4035 
4036     WHEN OTHERS THEN
4037 
4038       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
4039                            p_msg_name     => G_UNEXPECTED_ERROR,
4040                            p_token1       => G_SQLCODE_TOKEN,
4041                            p_token1_value => SQLCODE,
4042                            p_token2       => G_SQLERRM_TOKEN,
4043                            p_token2_value => SQLERRM);
4044 
4045       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4046 
4047   END create_ppd_invoice;
4048 
4049 --************************************************************************
4050 -- API for cancelling any unaccepted PPD requests on a contract.
4051 --This API accepts the Contract Id
4052 --LOGIC: Fetch all the ppd requests for the contract which are in statuses
4053 --       other than ('ACCEPTED','REJECTED','ERROR','PROCESSED','CANCELLED')
4054 --       Mark these requests as cancelled.
4055 --       This API will be called by rebook API to cancel any pending
4056 --       PPD requests on the contract.
4057 --************************************************************************
4058 
4059  PROCEDURE cancel_ppd(
4060                 p_api_version           IN  NUMBER
4061                 ,p_init_msg_list        IN  VARCHAR2 DEFAULT OKC_API.G_FALSE
4062                 ,x_return_status        OUT  NOCOPY VARCHAR2
4063                 ,x_msg_count            OUT  NOCOPY NUMBER
4064                 ,x_msg_data             OUT  NOCOPY VARCHAR2
4065                 ,p_khr_id               IN  NUMBER) IS
4066 
4067 
4068  l_api_name          CONSTANT VARCHAR2(30) := 'CANCEL_PPD';
4069  l_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
4070  x_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
4071 
4072  CURSOR c_get_unaccepted_ppd(c_khr_id IN NUMBER)
4073  IS
4074  SELECT ID
4075 	,OBJECT_VERSION_NUMBER
4076  FROM OKL_TRX_REQUESTS
4077  WHERE REQUEST_TYPE_CODE='PRINCIPAL_PAYDOWN'
4078  AND REQUEST_STATUS_CODE NOT IN ('ACCEPTED','REJECTED'
4079 				 ,'ERROR','PROCESSED','CANCELLED'
4080 				,'REBOOK_IN_PROCESS','REBOOK_COMPLETE')
4081  AND DNZ_KHR_ID = c_khr_id;
4082 
4083  BEGIN
4084    IF (G_DEBUG_ENABLED = 'Y') THEN
4085      G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4086    END IF;
4087 
4088         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
4089 
4090         --Call start_activity to create savepoint, check compatibility
4091 	--and initialize message list
4092         x_return_status := OKL_API.START_ACTIVITY(
4093                               l_api_name
4094                               ,p_init_msg_list
4095                               ,'_PVT'
4096                               ,x_return_status);
4097 
4098         --Check if activity started successfully
4099 
4100         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4101                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4102         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4103                 RAISE OKL_API.G_EXCEPTION_ERROR;
4104         END IF;
4105  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4106    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Cancel PPD');
4107  END IF;
4108 
4109 
4110  --Select all the unaccepted PPD requests for this contract.
4111  --Set the status of all these requests to CANCELLED.
4112 
4113  	FOR cur_rec in c_get_unaccepted_ppd(p_khr_id) LOOP
4114 
4115 		--Insert a log message here for cancelling the request.
4116  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4117    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Cancel PPD with Id:'|| l_trqv_rec.id);
4118  END IF;
4119 
4120 		l_trqv_rec.id := cur_rec.id;
4121 		l_trqv_rec.object_version_number := cur_rec.object_version_number;
4122 		l_trqv_rec.request_status_code := 'CANCELLED';
4123 
4124 		-- Call the public API for updation here.
4125                   okl_trx_requests_pub.update_trx_requests(
4126 					 p_api_version         => p_api_version,
4127                                          p_init_msg_list       => p_init_msg_list,
4128                                          x_return_status       => x_return_status,
4129                                          x_msg_count           => x_msg_count,
4130                                          x_msg_data            => x_msg_data,
4131                                          p_trqv_rec            => l_trqv_rec,
4132                                          x_trqv_rec            => x_trqv_rec);
4133  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4134    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Cancel PPD :'|| x_return_status);
4135  END IF;
4136 
4137                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4138                      RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4139                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4140                      RAISE OKL_API.G_EXCEPTION_ERROR;
4141                   END IF;
4142 
4143 	END LOOP;
4144       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4145                            x_msg_data    => x_msg_data);
4146 
4147   EXCEPTION
4148     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4149     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4150                                l_api_name,
4151                                G_PKG_NAME,
4152                                'OKL_API.G_RET_STS_ERROR',
4153                                x_msg_count,
4154                                x_msg_data,
4155                                '_PVT');
4156     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4157     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4158                               l_api_name,
4159                               G_PKG_NAME,
4160                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4161                               x_msg_count,
4162                               x_msg_data,
4163                               '_PVT');
4164     WHEN OTHERS THEN
4165        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4166                               l_api_name,
4167                               G_PKG_NAME,
4168                               'OTHERS',
4169                               x_msg_count,
4170                               x_msg_data,
4171                               '_PVT');
4172 
4173 
4174  END cancel_ppd;
4175 
4176 --************************************************************************
4177 -- API for invoicing the ppd, marking the ppd stream as billed,
4178 -- applying the selected receipt to the generated invoice.
4179 --Parameters: Contract Id, Transaction Id
4180 -- LOGIC:
4181 --       figure out if invoice application needs to be done.
4182 --       If not required, EXIT From API
4183 --       If Reqd, then
4184 --              Create online AR Invoice
4185 --              Mark the "Unscheduled Principal Payment" stream as Billed.
4186 --          	Apply the selected receipt on the generated invoices.
4187 --	             Update the status of the request to Processed.
4188 
4189 --************************************************************************
4190 
4191  PROCEDURE invoice_apply_ppd(
4192                 p_api_version           IN  NUMBER
4193                 ,p_init_msg_list        IN  VARCHAR2 DEFAULT OKC_API.G_FALSE
4194                 ,x_return_status        OUT  NOCOPY VARCHAR2
4195                 ,x_msg_count            OUT  NOCOPY NUMBER
4196                 ,x_msg_data             OUT  NOCOPY VARCHAR2
4197                 ,p_khr_id               IN  NUMBER
4198                 ,p_trx_id               IN  NUMBER) IS
4199 
4200 
4201  l_api_name          CONSTANT VARCHAR2(30) := 'INVOICE_APPLY_PPD';
4202  l_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
4203  lx_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
4204  l_trx_id            NUMBER := 0;
4205  l_src_trx_id            NUMBER := 0;
4206  l_req_id            NUMBER := 0;
4207  l_obj_ver	     VARCHAR2(10);
4208 
4209  CURSOR c_get_source_trx_id (c_trx_id NUMBER)
4210  IS
4211  SELECT SOURCE_TRX_ID
4212  FROM OKL_TRX_CONTRACTS
4213  WHERE ID=c_trx_id;
4214 
4215  CURSOR c_check_if_ppd (c_trx_id NUMBER)
4216  IS
4217  SELECT ID
4218  FROM OKL_TRX_CONTRACTS
4219  WHERE ID=c_trx_id
4220  AND TCN_TYPE='PPD';
4221 
4222 
4223  CURSOR c_get_req_id_csr (c_trx_id NUMBER)
4224  IS
4225  SELECT ID,object_Version_number
4226  FROM OKL_TRX_REQUESTS
4227  WHERE TCN_ID=c_trx_id;
4228 
4229 
4230  BEGIN
4231    IF (G_DEBUG_ENABLED = 'Y') THEN
4232      G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4233    END IF;
4234     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4235        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd'
4236 									,'Begin(+)');
4237     END IF;
4238 
4239     --Print Input Variables
4240     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4241        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd.',
4242               'p_trx_id :'||p_trx_id);
4243        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd.',
4244               'p_khr_id :'||p_khr_id);
4245     END IF;
4246 
4247 
4248     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4249    --Call start_activity to create savepoint,
4250    --check compatibility and initialize message list
4251 
4252 /*
4253     x_return_status := OKL_API.START_ACTIVITY(
4254                               l_api_name
4255                               ,p_init_msg_list
4256                               ,'_PVT'
4257                               ,x_return_status);
4258 
4259     --Check if activity started successfully
4260 
4261     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4262              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4263     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4264              RAISE OKL_API.G_EXCEPTION_ERROR;
4265     END IF;
4266 */
4267 
4268     OPEN c_get_source_trx_id(p_trx_id);
4269     FETCH c_get_source_trx_id INTO l_src_trx_id;
4270     CLOSE c_get_source_trx_id;
4271 
4272 
4273  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4274    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Source TRX Id for this transaction is :'|| l_src_trx_id);
4275  END IF;
4276   IF l_src_trx_id IS NOT NULL THEN
4277     OPEN c_check_if_ppd(l_src_trx_id);
4278     FETCH c_check_if_ppd INTO l_trx_id;
4279     CLOSE c_check_if_ppd;
4280 
4281     IF l_trx_id = 0 THEN
4282         --This rebook was not due PPD so Exit from the procedure.
4283     	IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4284        		FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd.',
4285               		'This transaction is not due to PPD. Return from invoice_app_ppd at this point.');
4286 	END IF;
4287 
4288  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4289    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The Transaction ' || p_trx_id || ' did not originate from PPD');
4290  END IF;
4291     ELSE
4292     	IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4293        		FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd.',
4294               		'This transaction is due to PPD.');
4295 	END IF;
4296 
4297  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4298    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The Transaction is due to PPD');
4299  END IF;
4300         --This rebook was due  to PPD.
4301 	OPEN c_get_req_id_csr(l_trx_id);
4302 	FETCH c_get_req_id_csr INTO l_req_id,l_obj_ver;
4303 	CLOSE c_get_req_id_csr;
4304 
4305     	IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4306        		FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd.',
4307               		'Request id :' || l_req_id);
4308 	END IF;
4309 
4310  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4311    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Req id is :' || l_req_id  || ' - '|| l_obj_ver);
4312  END IF;
4313 
4314 	--Update the Request to Rebook Complete.
4315     	--Get the request details.
4316         l_trqv_rec.id := l_req_id;
4317 	l_trqv_rec.object_Version_number := l_obj_ver;
4318         l_trqv_rec.request_status_code := 'REBOOK_COMPLETE';
4319 
4320 
4321  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4322    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before updating Request ');
4323  END IF;
4324         okl_trx_requests_pub.update_trx_requests( p_api_version         => p_api_version,
4325                                                 p_init_msg_list         => p_init_msg_list,
4326                                                 x_return_status         => x_return_status,
4327                                                 x_msg_count             => x_msg_count,
4328                                                 x_msg_data              => x_msg_data,
4329                                                 p_trqv_rec              => l_trqv_rec,
4330                                                 x_trqv_rec              => lx_trqv_rec);
4331 
4332  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4333    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After updating Request :' || x_return_status);
4334  END IF;
4335 /*
4336         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4337                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4338         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4339                 RAISE OKL_API.G_EXCEPTION_ERROR;
4340         END IF;
4341 */
4342 
4343 
4344 
4345     	IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4346        		FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd.',
4347               		'After updating the status of the request to REBOOK_COMPLETE');
4348 	END IF;
4349 
4350 	--Call the WF which does the following
4351         	-- 1. Create online AR Invoice.
4352         	-- 2. Mark the "Unscheduled Principal Payment" stream as Billed.
4353         	-- 3. Apply the selected receipt on the generated invoices.
4354         	-- 4. Update the status of the request to Processed.
4355 
4356  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4357    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling WF');
4358  END IF;
4359 	 OKL_CS_WF.raise_principal_paydown_event(l_req_id);
4360 
4361  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4362    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling WF');
4363  END IF;
4364 
4365     	IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4366        		FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_apply_ppd.',
4367               		'After invoking the Workflow for Principal Paydown ');
4368 	END IF;
4369  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4370    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'The Transaction ' || p_trx_id || ' originated from PPD');
4371  END IF;
4372 
4373     END IF;
4374  END IF;
4375 /*
4376       OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4377                            x_msg_data    => x_msg_data);
4378 */
4379 
4380 /*
4381   EXCEPTION
4382 
4383     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4384     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4385                                l_api_name,
4386                                G_PKG_NAME,
4387                                'OKL_API.G_RET_STS_ERROR',
4388                                x_msg_count,
4389                                x_msg_data,
4390                                '_PVT');
4391     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4392     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4393                               l_api_name,
4394                               G_PKG_NAME,
4395                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4396                               x_msg_count,
4397                               x_msg_data,
4398                               '_PVT');
4399     WHEN OTHERS THEN
4400        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4401                               l_api_name,
4402                               G_PKG_NAME,
4403                               'OTHERS',
4404                               x_msg_count,
4405                               x_msg_data,
4406                               '_PVT');
4407 
4408 
4409 */
4410  END invoice_apply_ppd;
4411 
4412   FUNCTION check_for_ppd
4413    (p_khr_id	IN	NUMBER
4414    ,p_effective_date IN DATE)
4415    RETURN VARCHAR2
4416   AS
4417 
4418     l_count    NUMBER :=0;
4419     l_ppd_exists VARCHAR2(5);
4420 
4421     --Check for any accepted/processed PPD requests
4422     -- after a date for a contract.
4423 
4424     CURSOR c_chk_ppd_csr (a_khr_id NUMBER,a_effective_date DATE)
4425 	IS
4426     SELECT count(id)
4427     FROM okl_trx_requests
4428     where request_type_code='PRINCIPAL_PAYDOWN'
4429     and dnz_khr_id = a_khr_id
4430     and payment_date > a_effective_date
4431     and request_status_code IN ('ACCEPTED','REBOOK_IN_PROCESS'
4432 				,'REBOOK_COMPLETE','PROCESSED');
4433 
4434 
4435   BEGIN
4436 	OPEN c_chk_ppd_csr(p_khr_id,p_effective_date);
4437 	FETCH c_chk_ppd_csr INTO l_count;
4438 	CLOSE c_chk_ppd_csr;
4439 
4440 	IF (l_count = 0) THEN
4441 		l_ppd_exists := 'N';
4442 	ELSE
4443 		l_ppd_exists := 'Y';
4444 	END IF;
4445 	RETURN l_ppd_exists;
4446   END check_for_ppd;
4447 
4448   FUNCTION check_if_ppd
4449    (p_request_id    IN      NUMBER)
4450    RETURN VARCHAR2
4451   AS
4452 
4453     l_count    NUMBER :=0;
4454     l_ppd_exists VARCHAR2(5);
4455 
4456 
4457     CURSOR c_chk_ppd_csr (a_id NUMBER)
4458     IS
4459     SELECT count(id)
4460     FROM okl_trx_requests
4461     where request_type_code='PRINCIPAL_PAYDOWN'
4462     and id=a_id;
4463 
4464   BEGIN
4465         OPEN c_chk_ppd_csr(p_request_id);
4466         FETCH c_chk_ppd_csr INTO l_count;
4467         CLOSE c_chk_ppd_csr;
4468 
4469         IF (l_count = 0) THEN
4470                 l_ppd_exists := 'N';
4471         ELSE
4472                 l_ppd_exists := 'Y';
4473         END IF;
4474         RETURN l_ppd_exists;
4475 
4476   END check_if_ppd;
4477 
4478 
4479 --================================================================
4480 PROCEDURE create_cash_flow_object(p_api_version    IN   NUMBER,
4481                                   x_msg_count      OUT 	NOCOPY NUMBER,
4482   			          x_msg_data       OUT 	NOCOPY VARCHAR2,
4483                                   p_obj_type_code  IN   VARCHAR2,
4484                                   p_src_table      IN   VARCHAR2,
4485                                   p_src_id         IN   NUMBER,
4486                                   p_base_src_id    IN   NUMBER,
4487                                   x_cfo_id         OUT  NOCOPY NUMBER,
4488                                   x_return_status  OUT 	NOCOPY   VARCHAR2) IS
4489 
4490 
4491 /*-----------------------------------------------------------------------+
4492  *  | Cursor Declarations                                                   |
4493  *   +-----------------------------------------------------------------------*/
4494   --This cursor checks if an object already exists
4495  CURSOR l_cash_flow_objects_csr(cp_oty_code IN VARCHAR2,
4496 				cp_source_table IN VARCHAR2,
4497                                 cp_source_id IN NUMBER,
4498                                 cp_base_src_id IN NUMBER) IS
4499  SELECT cfo.id
4500  FROM   okl_cash_flow_objects cfo, OKL_TRX_QTE_CF_OBJECTS qco
4501  WHERE  cfo.id = qco.cfo_id
4502  AND    cfo.oty_code = cp_oty_code
4503  AND    cfo.source_table = cp_source_table
4504  AND    cfo.source_id = cp_source_id
4505  AND    qco.base_source_id = cp_base_src_id;
4506 
4507 
4508  /*-----------------------------------------------------------------------+
4509  *  | SubType Declarations
4510  *   +-----------------------------------------------------------------------*/
4511 
4512  SUBTYPE cfov_rec_type IS okl_cash_flow_objects_pub.cfov_rec_type;
4513 
4514 
4515 /*-----------------------------------------------------------------------+
4516  *  | Local Variable Declarations and initializations                       |
4517  *   +-----------------------------------------------------------------------*/
4518 
4519  l_api_name          CONSTANT VARCHAR2(30) := 'CREATE_CASH_FLOW_OBJECT';
4520 l_cfo_id                     NUMBER;
4521 lp_cfov_rec                  cfov_rec_type;
4522 lx_cfov_rec                  cfov_rec_type;
4523 l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4524 
4525 
4526 BEGIN
4527   IF (G_DEBUG_ENABLED = 'Y') THEN
4528     G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4529   END IF;
4530 
4531    IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4532        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object','Begin(+)');
4533    END IF;
4534 
4535    --Print Input Variables
4536    IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4537        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object.',
4538               'p_obj_type_code :'||p_obj_type_code);
4539        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object.',
4540               'p_src_table :'||p_src_table);
4541        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object.',
4542               'p_src_id :'||p_src_id);
4543        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object.',
4544               'p_base_src_id :'||p_base_src_id);
4545 
4546     END IF;
4547 
4548 
4549 
4550 -- Check if Object already exists
4551   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4552       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Check for CFO');
4553   END IF;
4554   OPEN  l_cash_flow_objects_csr(p_obj_type_code, p_src_table, p_src_id,p_base_src_id);
4555   FETCH l_cash_flow_objects_csr INTO l_cfo_id;
4556 
4557   IF l_cash_flow_objects_csr%NOTFOUND THEN  -- Object does not exist
4558 
4559      lp_cfov_rec.oty_code := p_obj_type_code;
4560      lp_cfov_rec.source_table := p_src_table;
4561      lp_cfov_rec.source_id := p_src_id;
4562 
4563      okl_cash_flow_objects_pub.insert_cash_flow_object(p_api_version    => p_api_version,
4564                                                        p_init_msg_list  => OKL_API.G_FALSE,
4565                                                        x_return_status  => l_return_status,
4566                                                        x_msg_count      => x_msg_count,
4567                                                        x_msg_data       => x_msg_data,
4568                                                        p_cfov_rec       => lp_cfov_rec,
4569                                                        x_cfov_rec       => lx_cfov_rec);
4570 
4571  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4572    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Created CFO');
4573  END IF;
4574      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4575         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4576      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4577         RAISE OKL_API.G_EXCEPTION_ERROR;
4578      END IF;
4579 
4580 
4581      x_cfo_id := lx_cfov_rec.id;
4582 
4583   ELSE
4584 
4585  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4586    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CFO already exists - ' || l_cfo_id);
4587  END IF;
4588      x_cfo_id := l_cfo_id;
4589 
4590   END IF;
4591 
4592   CLOSE l_cash_flow_objects_csr;
4593   x_return_status := l_return_status;
4594 
4595   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4596        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object','end(-)');
4597   END IF;
4598  EXCEPTION
4599 
4600     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4601        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4602             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object ',
4603                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
4604        END IF;
4605 
4606         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4607                                l_api_name,
4608                                G_PKG_NAME,
4609                                'OKL_API.G_RET_STS_ERROR',
4610                                x_msg_count,
4611                                x_msg_data,
4612                                '_PVT');
4613     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4614        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4615             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object ',
4616                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
4617        END IF;
4618 
4619         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4620                               l_api_name,
4621                               G_PKG_NAME,
4622                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4623                               x_msg_count,
4624                               x_msg_data,
4625                               '_PVT');
4626     WHEN OTHERS THEN
4627        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4628             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.create_cash_flow_object ',
4629                   'EXCEPTION :'||sqlerrm);
4630        END IF;
4631 
4632        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4633                               l_api_name,
4634                               G_PKG_NAME,
4635                               'OTHERS',
4636                               x_msg_count,
4637                               x_msg_data,
4638                               '_PVT');
4639   END create_cash_flow_object;
4640 
4641 
4642 PROCEDURE store_esg_payments(
4643     p_api_version               IN  NUMBER,
4644     p_init_msg_list             IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
4645     x_return_status             OUT NOCOPY VARCHAR2,
4646     x_msg_count                 OUT NOCOPY NUMBER,
4647     x_msg_data                  OUT NOCOPY VARCHAR2,
4648     p_ppd_request_id            IN  NUMBER,
4649     p_ppd_khr_id                IN  NUMBER,
4650     p_payment_tbl               IN payment_tbl_type)
4651 
4652  AS
4653     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4654     l_api_name          CONSTANT VARCHAR2(30) := 'store_esg_payments';
4655     lx_cfo_id			NUMBER;
4656 
4657     l_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
4658     lx_trqv_rec         okl_trx_requests_pub.trqv_rec_type;
4659     l_rent_sty_id		NUMBER;
4660     l_upp_sty_id		NUMBER;
4661     l_payment_tbl	payment_tbl_type := p_payment_tbl;
4662     l_store_payment_tbl	payment_tbl_type;
4663     l_temp_tbl            payment_tbl_type;
4664 
4665     knt			NUMBER := 0;
4666     i			NUMBER := 0;
4667     l_total_k_cost	NUMBER := 0;
4668     l_asset_cost	NUMBER := 0;
4669     l_kle_id		NUMBER;
4670     l_prev_kle_id		NUMBER;
4671     l_pymt_count		NUMBER :=0;
4672     l_currency_code             VARCHAR2(30);
4673     l_raw_ppd_for_asset		NUMBER :=0;
4674     l_ppd_for_asset		NUMBER :=0;
4675     l_principal_count           NUMBER :=0; --Bug#5100215
4676     l_index                     NUMBER;
4677     l_ppd_amount                NUMBER := 0;
4678 
4679     CURSOR l_kheaders_csr(cp_khr_id IN NUMBER) IS
4680     SELECT currency_code
4681     FROM   okc_k_headers_b
4682     WHERE  id = cp_khr_id;
4683 
4684     CURSOR c_req_details_csr (a_id NUMBER)
4685     IS
4686     SELECT object_Version_number
4687 	      ,payment_amount
4688 	      ,payment_date
4689     FROM   okl_trx_requests
4690     WHERE id=a_id;
4691 
4692     --Bug#5100215 added cursor start --dkagrawa
4693     CURSOR  l_stream_type_csr(p_stream_type IN VARCHAR2
4694                            ,p_khr_id IN NUMBER) IS
4695     SELECT  COUNT(*)
4696     FROM    okc_rules_b sll_rul,
4697             okl_strmtyp_source_v sttyp,
4698             okc_rules_b slh_rul,
4699             okc_rule_groups_b rgp
4700     WHERE   sll_rul.object2_id1 = to_char(slh_rul.id)
4701     AND     sll_rul.rgp_id    = rgp.id
4702     AND     sll_rul.rule_information_category = 'LASLL'
4703     AND     sttyp.id1 = slh_rul.object1_id1
4704     AND     slh_rul.rgp_id = rgp.id
4705     AND     slh_rul.rule_information_category = 'LASLH'
4706     AND     rgp.rgd_code = 'LALEVL'
4707     AND     sttyp.stream_type_purpose = p_stream_type
4708     AND     rgp.dnz_chr_id = p_khr_id;
4709 
4710     ---Bug#5100215 end --dkagrawa
4711 
4712  BEGIN
4713    IF (G_DEBUG_ENABLED = 'Y') THEN
4714      G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4715    END IF;
4716  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4717    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Entering store_esg_payments: ');
4718  END IF;
4719     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4720        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments','Begin(+)');
4721     END IF;
4722 
4723     --Print Input Variables
4724     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
4725        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments.',
4726               'p_ppd_request_id :'||p_ppd_request_id);
4727        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments.',
4728               'p_ppd_khr_id :'||p_ppd_khr_id);
4729    END IF;
4730 
4731         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
4732 
4733         --Call start_activity to create savepoint,
4734         --check compatibility and initialize message list
4735 
4736         x_return_status := OKL_API.START_ACTIVITY(
4737                               l_api_name
4738                               ,p_init_msg_list
4739                               ,'_PVT'
4740                               ,x_return_status);
4741 
4742         --Check if activity started successfully
4743 
4744         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4745                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4746         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4747                 RAISE OKL_API.G_EXCEPTION_ERROR;
4748         END IF;
4749 
4750  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4751    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'===== Begin Payments sent to the API before any modifications ====');
4752  END IF;
4753 		 PRINT_STM_PAYMENTS(l_payment_tbl);
4754  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4755    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'===== End Payments sent to the API before any modifications ====');
4756  END IF;
4757 
4758        IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4759                 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,' before reorganizing');
4760        END IF;
4761 
4762       -- added by rkuttiya for 11i OKL.H
4763        --reorganize the payments
4764        l_temp_tbl := re_organize_payment_tbl(l_payment_tbl);
4765 
4766       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4767               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'===== Begin Payments after reorganizing ====');
4768       END IF;
4769 	  PRINT_STM_PAYMENTS(l_temp_tbl);
4770 
4771 
4772 
4773    	--Get the currency code for the Contract
4774    	OPEN  l_kheaders_csr(p_ppd_khr_id);
4775    	FETCH l_kheaders_csr INTO l_currency_code;
4776    	CLOSE l_kheaders_csr;
4777 
4778 	OPEN c_req_details_csr(p_ppd_request_id);
4779         FETCH c_req_details_csr INTO l_trqv_rec.object_Version_number
4780 				  ,l_trqv_rec.payment_amount
4781 				  ,l_trqv_rec.payment_date;
4782         CLOSE c_req_details_csr;
4783 
4784        --Bug#5100215 added the following code start -- dkagrawa
4785 
4786        OPEN l_stream_type_csr('PRINCIPAL_PAYMENT',p_ppd_khr_id);
4787        FETCH l_stream_type_csr INTO l_principal_count;
4788        CLOSE l_stream_type_csr;
4789 
4790        IF l_principal_count > 0
4791        THEN
4792          OKL_STREAMS_UTIL.get_dependent_stream_type
4793                      (p_khr_id                => p_ppd_khr_id
4794                      ,p_primary_sty_purpose   => G_RENT_STREAM
4795                     ,p_dependent_sty_purpose  => G_PRINCIPAL_PAYMENT
4796                     ,x_return_status          => x_return_status
4797                     ,x_dependent_sty_id       => l_rent_sty_id);
4798 
4799          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4800                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4801          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4802                  RAISE OKL_API.G_EXCEPTION_ERROR;
4803          END IF;
4804        ELSE
4805          OKL_STREAMS_UTIL.get_primary_stream_type
4806                       (p_khr_id => p_ppd_khr_id
4807                       ,p_primary_sty_purpose => G_RENT_STREAM
4808                       ,x_return_status    => x_return_status
4809                       ,x_primary_sty_id   => l_rent_sty_id);
4810          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4811                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4812          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4813                  RAISE OKL_API.G_EXCEPTION_ERROR;
4814          END IF;
4815        END IF;
4816        --Bug#5100215 end
4817 
4818 
4819         --Get the Stream type id for UPP.
4820         OKL_STREAMS_UTIL.get_dependent_stream_type(
4821                  p_khr_id                        => p_ppd_khr_id
4822                  ,p_primary_sty_purpose          => G_RENT_STREAM
4823                  ,p_dependent_sty_purpose        => G_UNSCHED_PP_STREAM
4824                  ,x_return_status                => x_return_status
4825                  ,x_dependent_sty_id             => l_upp_sty_id);
4826          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4827                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type: '|| x_return_status);
4828          END IF;
4829 
4830         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4831                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4832         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4833                 RAISE OKL_API.G_EXCEPTION_ERROR;
4834         END IF;
4835 
4836         OKL_EXECUTE_FORMULA_PUB.execute(p_api_version   => p_api_version,
4837                                         p_init_msg_list => p_init_msg_list,
4838                                         x_return_status => x_return_status,
4839                                         x_msg_count     => x_msg_count,
4840                                         x_msg_data      => x_msg_data,
4841                                         p_formula_name  => 'CONTRACT_CAP_AMNT',
4842                                         p_contract_id   => p_ppd_khr_id,
4843                                         p_line_id       => NULL,
4844                                         x_value         => l_total_k_cost);
4845         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4846                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After execute CONTRACT_CAP_AMNT: '|| l_total_k_cost || x_return_status);
4847         END IF;
4848         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4849                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4850         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4851                 RAISE OKL_API.G_EXCEPTION_ERROR;
4852         END IF;
4853 
4854         --Now populate the l_payments_tbl with the UNSCHEDULED_PRINCIPAL_PAYMENT
4855         --to account for this ppd.
4856 
4857 	--We will have to loop thru the payment table to get the asset id
4858 	--For this asset id calculate the ppd  and
4859 	--populate this value in the table after the RENT payment.
4860 	--An Example for this.
4861 	--If the raw payments sent to the API are as follows:
4862 	--     	p_payment_tbl(1).KHR_ID       :=26132
4863         --	p_payment_tbl(1).KLE_ID       :=360591535465800234004677727590576912380
4864      	--	p_payment_tbl(1).STY_ID       :=NULL
4865      	--	p_payment_tbl(1).start_date   :=01-Feb-2004
4866      	--	p_payment_tbl(1).structure    :=NULL
4867      	--	p_payment_tbl(1).arrears_yn   :=N
4868      	--	p_payment_tbl(1).periods      :=35
4869      	--	p_payment_tbl(1).frequency    :=M
4870      	--	p_payment_tbl(1).amount       :=4780.5860395779
4871      	--	p_payment_tbl(1).stub_days    :=NULL
4872      	--	p_payment_tbl(1).stub_amount  :=NULL
4873 	--
4874      	--	p_payment_tbl(2).KHR_ID       :=26132
4875      	--	p_payment_tbl(2).KLE_ID       :=360814321906377868722110133214346573627
4876      	--	p_payment_tbl(2).STY_ID       :=NULL
4877      	--	p_payment_tbl(2).start_date   :=01-Feb-2004
4878      	--	p_payment_tbl(2).structure    :=NULL
4879      	--	p_payment_tbl(2).arrears_yn   :=N
4880      	--	p_payment_tbl(2).periods      :=35
4881      	--	p_payment_tbl(2).frequency    :=M
4882      	--	p_payment_tbl(2).amount       :=2390.29303623929
4883      	--	p_payment_tbl(2).stub_days    :=NULL
4884      	--	p_payment_tbl(2).stub_amount  :=NULL
4885 
4886 	--After Modification they would be as follows:
4887 
4888 	--     	p_payment_tbl(1).KHR_ID       :=26132
4889         --	p_payment_tbl(1).KLE_ID       :=360591535465800234004677727590576912380
4890      	--	p_payment_tbl(1).STY_ID       :=251601487757888615031160220891184821165 --Rent Sty
4891      	--	p_payment_tbl(1).start_date   :=01-Feb-2004
4892      	--	p_payment_tbl(1).structure    :=NULL
4893      	--	p_payment_tbl(1).arrears_yn   :=N
4894      	--	p_payment_tbl(1).periods      :=35
4895      	--	p_payment_tbl(1).frequency    :=M
4896      	--	p_payment_tbl(1).amount       :=4780.5860395779
4897      	--	p_payment_tbl(1).stub_days    :=NULL
4898      	--	p_payment_tbl(1).stub_amount  :=NULL
4899 	--
4900 	--     	p_payment_tbl(2).KHR_ID       :=26132
4901         --	p_payment_tbl(2).KLE_ID       :=360591535465800234004677727590576912380
4902      	--	p_payment_tbl(2).STY_ID       :=352077033884154096951239569973480360897 --PPD STY
4903      	--	p_payment_tbl(2).start_date   :=01-Jan-2004
4904      	--	p_payment_tbl(2).structure    :=NULL
4905      	--	p_payment_tbl(2).arrears_yn   :=NULL
4906      	--	p_payment_tbl(2).periods      :=NULL
4907      	--	p_payment_tbl(2).frequency    :=NULL
4908      	--	p_payment_tbl(2).amount       :=NULL
4909      	--	p_payment_tbl(2).stub_days    :=1
4910      	--	p_payment_tbl(2).stub_amount  :=6666.66
4911 	--
4912      	--	p_payment_tbl(3).KHR_ID       :=26132
4913      	--	p_payment_tbl(3).KLE_ID       :=360814321906377868722110133214346573627
4914      	--	p_payment_tbl(3).STY_ID       :=251601487757888615031160220891184821165 --Rent Sty
4915      	--	p_payment_tbl(3).start_date   :=01-Feb-2004
4916      	--	p_payment_tbl(3).structure    :=NULL
4917      	--	p_payment_tbl(3).arrears_yn   :=N
4918      	--	p_payment_tbl(3).periods      :=35
4919      	--	p_payment_tbl(3).frequency    :=M
4920      	--	p_payment_tbl(3).amount       :=2390.29303623929
4921      	--	p_payment_tbl(3).stub_days    :=NULL
4922      	--	p_payment_tbl(3).stub_amount  :=NULL
4923 
4924 	--     	p_payment_tbl(4).KHR_ID       :=26132
4925         --	p_payment_tbl(4).KLE_ID       :=360814321906377868722110133214346573627
4926      	--	p_payment_tbl(4).STY_ID       :=352077033884154096951239569973480360897 --PPD STY
4927      	--	p_payment_tbl(4).start_date   :=01-Jan-2004
4928      	--	p_payment_tbl(4).structure    :=NULL
4929      	--	p_payment_tbl(4).arrears_yn   :=NULL
4930      	--	p_payment_tbl(4).periods      :=NULL
4931      	--	p_payment_tbl(4).frequency    :=NULL
4932      	--	p_payment_tbl(4).amount       :=NULL
4933      	--	p_payment_tbl(4).stub_days    :=1
4934      	--	p_payment_tbl(4).stub_amount  :=3333.34
4935 	--
4936 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4937   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before updating ppd amounts');
4938 END IF;
4939 
4940 	l_prev_kle_id	:= -99;
4941         knt := 1;
4942     IF l_temp_tbl.count > 0 THEN
4943       i:= l_temp_tbl.FIRST;
4944       LOOP
4945 		l_kle_id	:= l_temp_tbl(i).kle_id;
4946 		--ESG will not populate the styid for rent
4947 		--so populate for each row.
4948         	l_store_payment_tbl(knt) :=  l_temp_tbl(i);
4949 		l_store_payment_tbl(knt).sty_id	:= l_rent_sty_id;
4950 
4951 		If l_kle_id <> l_prev_kle_id THEN
4952 			l_prev_kle_id := l_kle_id;
4953 
4954 			OKL_EXECUTE_FORMULA_PUB.execute(
4955 				p_api_version => p_api_version,
4956                                 p_init_msg_list => p_init_msg_list,
4957                                 x_return_status => x_return_status,
4958                                 x_msg_count     => x_msg_count,
4959                                 x_msg_data      => x_msg_data,
4960                                 p_formula_name  => 'LINE_CAP_AMNT',
4961                                 p_contract_id   => p_ppd_khr_id,
4962                                 p_line_id       => l_kle_id,
4963                                 x_value         => l_asset_cost);
4964 
4965                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4966                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After execute LINE_CAP_AMNT: '|| l_asset_cost);
4967                         END IF;
4968                         If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
4969                                 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4970                         Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
4971                                 raise OKC_API.G_EXCEPTION_ERROR;
4972                         End If;
4973 
4974                         --Pro rate the ppd amt for this line
4975                         l_raw_ppd_for_asset := (l_asset_cost/l_total_k_cost)
4976                                                         * l_trqv_rec.payment_amount;
4977 
4978                         l_ppd_for_asset := Okl_Accounting_Util.ROUND_AMOUNT(
4979                                                 p_amount => l_raw_ppd_for_asset,
4980                                                 p_currency_code => l_currency_code);
4981                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4982                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PPD for Asset : '|| l_ppd_for_asset);
4983                         END IF;
4984 
4985 			knt := knt +1;
4986         		l_store_payment_tbl(knt).KHR_ID     := p_ppd_khr_id;
4987                 	l_store_payment_tbl(knt).KLE_ID     := l_kle_id;
4988                 	l_store_payment_tbl(knt).STY_ID     := l_upp_sty_id;
4989                 	l_store_payment_tbl(knt).start_date := l_trqv_rec.payment_date;
4990                 	l_store_payment_tbl(knt).stub_days  := 1;
4991                 	l_store_payment_tbl(knt).stub_amount:= l_ppd_for_asset;
4992         		--Bug#5511937 by dkagrawa start
4993                         l_index := knt;
4994                         l_ppd_amount := l_ppd_amount + l_ppd_for_asset;
4995                         --Bug#5511937 end
4996 		END IF;
4997 		knt := knt +1;
4998 		EXIT WHEN i = l_temp_tbl.LAST;
4999 	    i := l_temp_tbl.NEXT(i);
5000   	  END LOOP;
5001     END IF;
5002     --Bug#5511937 by dkagrawa start
5003     IF ( l_trqv_rec.payment_amount - l_ppd_amount <> 0 ) THEN
5004       l_store_payment_tbl(l_index).stub_amount := l_store_payment_tbl(l_index).stub_amount + (l_trqv_rec.payment_amount - l_ppd_amount );
5005     END IF;
5006     --Bug#5511937 end
5007 
5008 
5009 	PRINT_STM_PAYMENTS(l_store_payment_tbl);
5010 
5011 	--Call the Store stm payments api.
5012                 store_stm_payments(p_api_version  => p_api_version,
5013                               p_init_msg_list  => p_init_msg_list,
5014                               x_return_status  => x_return_status,
5015                               x_msg_count      => x_msg_count,
5016                               x_msg_data       => x_msg_data,
5017                               p_ppd_request_id => p_ppd_request_id,
5018                               p_ppd_khr_id     => p_ppd_khr_id,
5019                               p_payment_tbl    => l_store_payment_tbl,
5020                               x_cfo_id         => lx_cfo_id);
5021                 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5022                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Store stm payments in ESG Inbound:' || x_return_status
5023                                 || 'CFO Id: '|| lx_cfo_id);
5024                 END IF;
5025                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5026                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5027                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5028                         RAISE OKL_API.G_EXCEPTION_ERROR;
5029                 END IF;
5030 
5031 	--Update the Request with the status of complete.
5032 
5033         l_trqv_rec.request_status_code := 'COMPLETE';
5034         l_trqv_rec.id := p_ppd_request_id;
5035 
5036         okl_trx_requests_pub.update_trx_requests( p_api_version => p_api_version,
5037                                                 p_init_msg_list => p_init_msg_list,
5038                                                 x_return_status => x_return_status,
5039                                                 x_msg_count     => x_msg_count,
5040 						x_msg_data      => x_msg_data,
5041                                                 p_trqv_rec      => l_trqv_rec,
5042                                                 x_trqv_rec      => lx_trqv_rec);
5043         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5044                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5045         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5046                 RAISE OKL_API.G_EXCEPTION_ERROR;
5047         END IF;
5048 
5049 	IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5050        		FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments'
5051                                                                         ,'End(-)');
5052   	END IF;
5053 
5054  EXCEPTION
5055 
5056     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5057        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5058             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments ',
5059                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
5060        END IF;
5061 
5062         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5063                                l_api_name,
5064                                G_PKG_NAME,
5065                                'OKL_API.G_RET_STS_ERROR',
5066                                x_msg_count,
5067                                x_msg_data,
5068                                '_PVT');
5069     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5070        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5071             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments ',
5072                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
5073        END IF;
5074 
5075         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5076                               l_api_name,
5077                               G_PKG_NAME,
5078                               'OKL_API.G_RET_STS_UNEXP_ERROR',
5079                               x_msg_count,
5080                               x_msg_data,
5081                               '_PVT');
5082     WHEN OTHERS THEN
5083        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5084             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments ',
5085                   'EXCEPTION :'||sqlerrm);
5086        END IF;
5087 
5088        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5089                               l_api_name,
5090                               G_PKG_NAME,
5091                               'OTHERS',
5092                               x_msg_count,
5093                               x_msg_data,
5094                               '_PVT');
5095   END store_esg_payments;
5096 
5097 
5098 
5099  PROCEDURE store_stm_payments(
5100     p_api_version		IN  NUMBER,
5101     p_init_msg_list		IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
5102     x_return_status		OUT NOCOPY VARCHAR2,
5103     x_msg_count			OUT NOCOPY NUMBER,
5104     x_msg_data			OUT NOCOPY VARCHAR2,
5105     p_ppd_request_id    	IN  NUMBER,
5106     p_ppd_khr_id        	IN  NUMBER,
5107     p_payment_tbl       	IN payment_tbl_type,
5108     x_cfo_id            	OUT NOCOPY NUMBER)
5109 
5110  AS
5111 
5112   /*-----------------------------------------------------------------------+
5113  *  *  | Subype Declarations                                                   |
5114  *   *
5115  *   +-----------------------------------------------------------------------*/
5116 
5117    SUBTYPE cfov_rec_type IS okl_cash_flow_objects_pub.cfov_rec_type;
5118    SUBTYPE cafv_rec_type IS okl_cash_flows_pub.cafv_rec_type;
5119    SUBTYPE cflv_rec_type IS okl_cash_flow_levels_pub.cflv_rec_type;
5120    SUBTYPE qcov_rec_type IS okl_trx_qte_cf_objects_pub.qcov_rec_type;
5121 
5122 
5123  /*-----------------------------------------------------------------------+
5124  *  *  | Local Variable Declarations and initializations                       |
5125  *   *
5126  *   +-----------------------------------------------------------------------*/
5127     lp_cfov_rec                  cfov_rec_type;
5128     lx_cfov_rec                  cfov_rec_type;
5129 
5130     lp_cafv_rec                  cafv_rec_type;
5131     lx_cafv_rec                  cafv_rec_type;
5132 
5133     lp_cflv_rec                  cflv_rec_type;
5134     lx_cflv_rec                  cflv_rec_type;
5135 
5136     lp_qcov_rec                  qcov_rec_type;
5137     lx_qcov_rec                  qcov_rec_type;
5138 
5139 
5140     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5141     l_api_name          CONSTANT VARCHAR2(30) := 'store_stm_payments';
5142     l_prev_sty_id		NUMBER;
5143     l_sty_id			NUMBER;
5144     l_prev_kle_id               NUMBER;
5145     l_kle_id                    NUMBER;
5146     l_cfo_id			NUMBER;
5147     l_caf_id			NUMBER;
5148     l_cfl_id			NUMBER;
5149     l_stub_amount		NUMBER;
5150     l_amount			NUMBER;
5151     l_currency_code         	VARCHAR2(30);
5152     l_qco_id       		NUMBER;
5153 
5154 
5155     CURSOR l_kheaders_csr(cp_khr_id IN NUMBER) IS
5156     SELECT currency_code
5157     FROM   okc_k_headers_b
5158     WHERE  id = cp_khr_id;
5159 
5160     CURSOR l_qco_id_csr(cp_qte_id IN NUMBER
5161                         ,cp_cfo_id  IN  NUMBER
5162                         ,cp_base_src_id IN  NUMBER) IS
5163     SELECT id
5164     FROM OKL_TRX_QTE_CF_OBJECTS
5165     WHERE qte_id=cp_qte_id
5166     AND cfo_id=cp_cfo_id
5167     AND base_source_id=cp_base_src_id;
5168 
5169     CURSOR l_caf_id_csr(cp_qte_id IN NUMBER
5170                         ,cp_cfo_id  IN  NUMBER
5171                         ,cp_sty_id IN  NUMBER) IS
5172     SELECT id
5173     FROM OKL_CASH_FLOWS
5174     WHERE cfo_id=cp_cfo_id
5175     AND dnz_qte_id=cp_qte_id
5176     AND sty_id = cp_sty_id;
5177 
5178     CURSOR l_cfl_id_csr(cp_caf_id  IN  NUMBER
5179                         ,cp_start_date IN  DATE) IS
5180     SELECT id
5181     FROM OKL_CASH_FLOW_LEVELS
5182     WHERE caf_id=cp_caf_id
5183     AND start_date=cp_start_date;
5184 
5185     i        NUMBER := 0;
5186     --dkagrawa added the following code for bug#5443418 start
5187     CURSOR l_calc_method ( cp_trq_id IN NUMBER) IS
5188     SELECT method_of_calculation_code
5189     FROM okl_trx_requests
5190     WHERE id = cp_trq_id;
5191 
5192     CURSOR l_cfl_id_csr_esg(cp_caf_id IN  NUMBER
5193                            ,cp_amount IN  number) IS
5194     SELECT id,number_of_periods,start_date
5195     FROM OKL_CASH_FLOW_LEVELS
5196     WHERE caf_id=cp_caf_id
5197     AND amount = cp_amount
5198     AND stub_days IS null;
5199 
5200     l_periods        NUMBER;
5201     l_solve_type     VARCHAR2(10);
5202     l_start_date     DATE;
5203     l_pricing_engine VARCHAR2(50);
5204     --dkagrawa bug#5443418 end
5205  BEGIN
5206    IF (G_DEBUG_ENABLED = 'Y') THEN
5207      G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5208    END IF;
5209 
5210     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5211        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_stm_payments','Begin(+)');
5212     END IF;
5213 
5214     --Print Input Variables
5215     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5216        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_stm_payments.',
5217               'p_ppd_request_id :'||p_ppd_request_id);
5218        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_stm_payments.',
5219               'p_ppd_khr_id :'||p_ppd_khr_id);
5220    END IF;
5221 
5222    --Get the currency code for the Contract
5223    OPEN  l_kheaders_csr(p_ppd_khr_id);
5224    FETCH l_kheaders_csr INTO l_currency_code;
5225    CLOSE l_kheaders_csr;
5226 
5227         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
5228 
5229         --Call start_activity to create savepoint,
5230 	--check compatibility and initialize message list
5231 
5232         x_return_status := OKL_API.START_ACTIVITY(
5233                               l_api_name
5234                               ,p_init_msg_list
5235                               ,'_PVT'
5236                               ,x_return_status);
5237 
5238         --Check if activity started successfully
5239 
5240         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5241                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5242         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5243                 RAISE OKL_API.G_EXCEPTION_ERROR;
5244         END IF;
5245 
5246         l_prev_sty_id := 0;
5247         l_prev_kle_id := 0;  --Bug#5046204
5248    --Create a cash flow object for this type.
5249    IF p_payment_tbl.count > 0 THEN
5250       i:= p_payment_tbl.FIRST;
5251     LOOP
5252         create_cash_flow_object(p_api_version    => p_api_version,
5253                                   x_msg_count      => x_msg_count,
5254                        		  x_msg_data       => x_msg_data,
5255                                   p_obj_type_code  => G_FIN_ASSET_OBJECT_TYPE,
5256                                   p_src_table      => G_OBJECT_SRC_TABLE,
5257                                   p_src_id         => p_ppd_request_id,
5258                                   p_base_src_id    => p_payment_tbl(i).kle_id,
5259                                   x_cfo_id         => l_cfo_id,
5260                                   x_return_status  => l_return_status);
5261 
5262          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5263              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5264          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5265              RAISE OKL_API.G_EXCEPTION_ERROR;
5266          END IF;
5267 
5268       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5269             	 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Checking for  QCO');
5270       END IF;
5271          --Check if this association exists.
5272 	 l_qco_id := NULL;
5273          OPEN l_qco_id_csr(p_ppd_request_id,l_cfo_id,p_payment_tbl(i).kle_id);
5274          FETCH l_qco_id_csr INTO l_qco_id;
5275          CLOSE l_qco_id_csr;
5276 
5277          IF l_qco_id IS NULL THEN
5278              --Create the association to Request and kle_id
5279              l_qco_id           := NULL;
5280 	     lp_qcov_rec 	:= NULL;
5281              lp_qcov_rec.qte_id := p_ppd_request_id;
5282              lp_qcov_rec.cfo_id := l_cfo_id;
5283              lp_qcov_rec.BASE_SOURCE_ID := p_payment_tbl(i).kle_id;
5284              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5285                             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Creating QCO');
5286              END IF;
5287 
5288              OKL_TRX_QTE_CF_OBJECTS_PUB.insert_quote_cf_object(p_api_version => p_api_version,
5289                                                             p_init_msg_list  => OKL_API.G_FALSE,
5290                                                             x_return_status  => l_return_status,
5291                                                             x_msg_count      => x_msg_count,
5292                                                             x_msg_data       => x_msg_data,
5293                                                             p_qcov_rec       => lp_qcov_rec,
5294                                                             x_qcov_rec       => lx_qcov_rec);
5295          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5296                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Creating QCO - Return Status: ' || l_return_status);
5297          END IF;
5298 
5299              IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5300                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5301              ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5302                  RAISE OKL_API.G_EXCEPTION_ERROR;
5303              END IF;
5304 
5305 	 ELSE
5306   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5307     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'QCO ID :' || l_qco_id);
5308   END IF;
5309          END IF;
5310        --Create the Cash flows for this Object.
5311 
5312 	 l_sty_id := p_payment_tbl(i).sty_id;
5313          l_kle_id := p_payment_tbl(i).kle_id; --Bug#5046204
5314   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5315     	 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Sty ID in store_stm_payment: - ' ||i || ' -'|| l_sty_id);
5316   END IF;
5317 
5318 
5319          --This will be a CASH Flow
5320          --Create the Cash flow only if it is a different stream type,
5321          --otherwise only create the lines since it is for the same
5322          --stream type.
5323          --Bug#5046204 or if line id is different then also cash flow needs to be created
5324          IF l_sty_id <> l_prev_sty_id OR l_kle_id <> l_prev_kle_id THEN
5325 
5326                --check if a cash flow exists of this type.
5327 		l_caf_id := NULL;
5328                OPEN l_caf_id_csr(p_ppd_request_id,l_cfo_id,l_sty_id);
5329                FETCH l_caf_id_csr INTO l_caf_id;
5330                CLOSE l_caf_id_csr;
5331   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5332     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Check for CAF ID: - ' || l_caf_id);
5333   END IF;
5334 
5335                IF l_caf_id is NULL THEN
5336 	 		lp_cafv_rec		:= NULL;
5337                 	lp_cafv_rec.cfo_id := l_cfo_id;
5338                 	lp_cafv_rec.sts_code := G_PROPOSED_STATUS;
5339                 	lp_cafv_rec.sty_id := l_sty_id;
5340                 	lp_cafv_rec.cft_code := G_CASH_FLOW_TYPE;
5341                 	lp_cafv_rec.due_arrears_yn := nvl(p_payment_tbl(i).arrears_yn,'N');
5342         		lp_cafv_rec.start_date :=p_payment_tbl(i).start_date;
5343                 	lp_cafv_rec.number_of_advance_periods := p_payment_tbl(i).structure;
5344                 	lp_cafv_rec.dnz_khr_id := p_ppd_khr_id;
5345                 	lp_cafv_rec.dnz_qte_id := p_ppd_request_id;
5346                        --Call the API to create the Cash Flow.
5347                         okl_cash_flows_pub.insert_cash_flow(
5348                             p_api_version              =>    p_api_version,
5349                             p_init_msg_list            =>    OKL_API.G_FALSE,
5350                             x_return_status            =>    l_return_status,
5351                             x_msg_count                =>    x_msg_count,
5352                             x_msg_data                 =>    x_msg_data,
5353                             p_cafv_rec                 =>    lp_cafv_rec,
5354                             x_cafv_rec                 =>    lx_cafv_rec);
5355 
5356                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5357                                            	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Creating CAF - Return Status: ' || l_return_status);
5358                      END IF;
5359                         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5360                              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5361                         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5362                              RAISE OKL_API.G_EXCEPTION_ERROR;
5363                         END IF;
5364                         l_caf_id            := lx_cafv_rec.id;
5365                ELSE
5366 	 		lp_cafv_rec	:= NULL;
5367                         lp_cafv_rec.id := l_caf_id;
5368                 	lp_cafv_rec.cfo_id := l_cfo_id;
5369                 	lp_cafv_rec.sts_code := G_PROPOSED_STATUS;
5370                 	lp_cafv_rec.sty_id := l_sty_id;
5371                 	lp_cafv_rec.cft_code := G_CASH_FLOW_TYPE;
5372                 	lp_cafv_rec.due_arrears_yn := nvl(p_payment_tbl(i).arrears_yn,'N');
5373         		lp_cafv_rec.start_date :=p_payment_tbl(i).start_date;
5374                 	lp_cafv_rec.number_of_advance_periods := p_payment_tbl(i).structure;
5375                 	lp_cafv_rec.dnz_khr_id := p_ppd_khr_id;
5376                 	lp_cafv_rec.dnz_qte_id := p_ppd_request_id;
5377                        --Call the API to create the Cash Flow.
5378                         okl_cash_flows_pub.update_cash_flow(
5379                             p_api_version              =>    p_api_version,
5380                             p_init_msg_list            =>    OKL_API.G_FALSE,
5381                             x_return_status            =>    l_return_status,
5382                             x_msg_count                =>    x_msg_count,
5383                             x_msg_data                 =>    x_msg_data,
5384                             p_cafv_rec                 =>    lp_cafv_rec,
5385                             x_cafv_rec                 =>    lx_cafv_rec);
5386 
5387                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5388                                            	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Updating CAF - Return Status: ' || l_return_status);
5389                      END IF;
5390                         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5391                              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5392                         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5393                              RAISE OKL_API.G_EXCEPTION_ERROR;
5394                         END IF;
5395                END IF; --Check for existence of Caf
5396 
5397          END IF; --Check for Sty_id
5398 
5399          --Now create the Cash flow lines
5400        --check if a cash flow line exists of this type.
5401 	l_cfl_id := NULL;
5402         --dkagrawa added the following code for bug#5443418 start
5403         OKL_STREAMS_UTIL.get_pricing_engine(
5404                     p_khr_id                        => p_ppd_khr_id
5405                    ,x_pricing_engine                => l_pricing_engine
5406                    ,x_return_status                => x_return_status);
5407         IF l_pricing_engine = 'INTERNAL' THEN
5408           l_solve_type := 'P';   --assgining it to 'P' bcoz for ISG we have not handled solve for term
5409         ELSE
5410           OPEN l_calc_method(p_ppd_request_id);
5411           FETCH l_calc_method INTO l_solve_type;
5412           CLOSE l_calc_method;
5413         END IF;
5414         IF l_solve_type = 'T' THEN
5415           OPEN l_cfl_id_csr_esg(l_caf_id,p_payment_tbl(i).amount);
5416           FETCH l_cfl_id_csr_esg INTO l_cfl_id,l_periods,l_start_date;
5417           CLOSE l_cfl_id_csr_esg;
5418         ELSE
5419         --dkagrawa bug#5443418 end
5420           OPEN l_cfl_id_csr(l_caf_id,p_payment_tbl(i).start_date);
5421           FETCH l_cfl_id_csr INTO l_cfl_id;
5422           CLOSE l_cfl_id_csr;
5423 	END IF;
5424   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5425     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Check for CFL ID: - ' || l_cfl_id);
5426   END IF;
5427 
5428        IF l_cfl_id IS NULL THEN
5429 		lp_cflv_rec	   := NULL;
5430         	lp_cflv_rec.caf_id := l_caf_id;
5431 
5432         	IF p_payment_tbl(i).stub_days IS NOT NULL THEN --STUB DAYS
5433         		l_stub_amount     :=  Okl_Accounting_Util.ROUND_AMOUNT(
5434 					 p_amount => p_payment_tbl(i).stub_amount, --stub amount
5435 			                 p_currency_code => l_currency_code);
5436                 	lp_cflv_rec.stub_days := p_payment_tbl(i).stub_days;
5437                 	lp_cflv_rec.stub_amount := l_stub_amount;
5438         	ELSE
5439 --rkuttiya commetning out rounding for amount
5440 --for bug:4905281
5441 --because mass rebook fails in the qa checker when principal payments defined on the contract
5442 -- if the amounts are not accurate.
5443                 	/*l_amount     :=  Okl_Accounting_Util.ROUND_AMOUNT(
5444 		               		 p_amount => p_payment_tbl(i).amount, --amount
5445    			                 p_currency_code => l_currency_code);*/
5446                         l_amount := p_payment_tbl(i).amount;
5447 
5448                 	lp_cflv_rec.amount := l_amount;
5449                 	lp_cflv_rec.number_of_periods := p_payment_tbl(i).periods;
5450                 	lp_cflv_rec.fqy_code := p_payment_tbl(i).frequency;
5451         	END IF;
5452         	lp_cflv_rec.start_date := p_payment_tbl(i).start_date;
5453 
5454              IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5455                            	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Creating CFL');
5456              END IF;
5457                     OKL_CASH_FLOW_LEVELS_PUB.insert_cash_flow_level(
5458 					p_api_version     =>    p_api_version,
5459                                        p_init_msg_list   => OKL_API.G_FALSE,
5460                                        x_return_status   => l_return_status,
5461                                        x_msg_count       => x_msg_count,
5462                                        x_msg_data        => x_msg_data,
5463                                        p_cflv_rec        => lp_cflv_rec,
5464                                        x_cflv_rec        => lx_cflv_rec);
5465                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5466                                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Creating CFL - Return Status: ' || l_return_status);
5467                  END IF;
5468 
5469                     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5470                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5471                     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5472                         RAISE OKL_API.G_EXCEPTION_ERROR;
5473                     END IF;
5474         ELSE
5475 		lp_cflv_rec	   := NULL;
5476         	lp_cflv_rec.caf_id := l_caf_id;
5477 
5478         	IF p_payment_tbl(i).stub_days IS NOT NULL THEN --STUB DAYS
5479         		l_stub_amount     :=  Okl_Accounting_Util.ROUND_AMOUNT(
5480 					 p_amount => p_payment_tbl(i).stub_amount, --stub amount
5481 			                 p_currency_code => l_currency_code);
5482                 	lp_cflv_rec.stub_days := p_payment_tbl(i).stub_days;
5483                 	lp_cflv_rec.stub_amount := l_stub_amount;
5484         	ELSE
5485                 	/*l_amount     :=  Okl_Accounting_Util.ROUND_AMOUNT(
5486 		               		 p_amount => p_payment_tbl(i).amount, --amount
5487    			                 p_currency_code => l_currency_code); */
5488                         l_amount := p_payment_tbl(i).amount;
5489 
5490                 	lp_cflv_rec.amount := l_amount;
5491 			--dkagrawa added the following code for bug#5443418 start
5492                         IF l_solve_type = 'T' THEN
5493                           lp_cflv_rec.number_of_periods := nvl(l_periods,0) + p_payment_tbl(i).periods;
5494                         ELSE
5495                           lp_cflv_rec.number_of_periods := p_payment_tbl(i).periods;
5496 			END IF;
5497 			--dkagrawa bug#5443418 end
5498                 	lp_cflv_rec.fqy_code := p_payment_tbl(i).frequency;
5499         	END IF;
5500 		--dkagrawa added the following code for bug#5443418 start
5501                 IF l_solve_type = 'T' THEN
5502                   lp_cflv_rec.start_date := l_start_date;
5503                 ELSE
5504                   lp_cflv_rec.start_date := p_payment_tbl(i).start_date;
5505 		END IF;
5506                 --dkagrawa bug#5443418 end
5507                 lp_cflv_rec.id := l_cfl_id;
5508                 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5509                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Updating CFL');
5510                 END IF;
5511                     OKL_CASH_FLOW_LEVELS_PUB.update_cash_flow_level(
5512 					p_api_version     =>    p_api_version,
5513                                        p_init_msg_list   => OKL_API.G_FALSE,
5514                                        x_return_status   => l_return_status,
5515                                        x_msg_count       => x_msg_count,
5516                                        x_msg_data        => x_msg_data,
5517                                        p_cflv_rec        => lp_cflv_rec,
5518                                        x_cflv_rec        => lx_cflv_rec);
5519                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5520                                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Updating CFL - Return Status: ' || l_return_status);
5521                  END IF;
5522 
5523                     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5524                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5525                     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5526                         RAISE OKL_API.G_EXCEPTION_ERROR;
5527                     END IF;
5528 
5529          END IF; --check for Cash flow level.
5530               l_prev_sty_id := l_sty_id;
5531 	      l_prev_kle_id := l_kle_id; --missed assigntment in bug 5046204
5532       EXIT WHEN i = p_payment_tbl.LAST;
5533 	    i := p_payment_tbl.NEXT(i);
5534       END LOOP;
5535     END IF;
5536    x_cfo_id := l_cfo_id;
5537    IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5538                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_stm_payments'
5539                                                                         ,'End(-)');
5540    END IF;
5541 
5542  EXCEPTION
5543 
5544     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5545        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5546             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_stm_payments ',
5547                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
5548        END IF;
5549 
5550         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5551                                l_api_name,
5552                                G_PKG_NAME,
5553                                'OKL_API.G_RET_STS_ERROR',
5554                                x_msg_count,
5555                                x_msg_data,
5556                                '_PVT');
5557     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5558        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5559             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_stm_payments ',
5560                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
5561        END IF;
5562 
5563         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5564                               l_api_name,
5565                               G_PKG_NAME,
5566                               'OKL_API.G_RET_STS_UNEXP_ERROR',
5567                               x_msg_count,
5568                               x_msg_data,
5569                               '_PVT');
5570     WHEN OTHERS THEN
5571        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5572             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_stm_payments ',
5573                   'EXCEPTION :'||sqlerrm);
5574        END IF;
5575 
5576        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5577                               l_api_name,
5578                               G_PKG_NAME,
5579                               'OTHERS',
5580                               x_msg_count,
5581                               x_msg_data,
5582                               '_PVT');
5583   END store_stm_payments;
5584 
5585 
5586 
5587 
5588  PROCEDURE store_payments(
5589     p_api_version		IN  NUMBER,
5590     p_init_msg_list		IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
5591     x_return_status		OUT NOCOPY VARCHAR2,
5592     x_msg_count			OUT NOCOPY NUMBER,
5593     x_msg_data			OUT NOCOPY VARCHAR2,
5594     p_ppd_request_id    	IN  NUMBER,
5595     p_ppd_khr_id        	IN  NUMBER,
5596     p_payment_structure 	IN  okl_mass_rebook_pvt.strm_lalevl_tbl_type,
5597     x_cfo_id            	OUT NOCOPY NUMBER)
5598 
5599  AS
5600 
5601   /*-----------------------------------------------------------------------+
5602  *  | Subype Declarations                                                   |
5603  *   +-----------------------------------------------------------------------*/
5604 
5605    SUBTYPE cfov_rec_type IS okl_cash_flow_objects_pub.cfov_rec_type;
5606    SUBTYPE cafv_rec_type IS okl_cash_flows_pub.cafv_rec_type;
5607    SUBTYPE cflv_rec_type IS okl_cash_flow_levels_pub.cflv_rec_type;
5608    SUBTYPE qcov_rec_type IS okl_trx_qte_cf_objects_pub.qcov_rec_type;
5609 
5610 
5611  /*-----------------------------------------------------------------------+
5612  *  | Local Variable Declarations and initializations                       |
5613  *   +-----------------------------------------------------------------------*/
5614     lp_cfov_rec                  cfov_rec_type;
5615     lx_cfov_rec                  cfov_rec_type;
5616 
5617     lp_cafv_rec                  cafv_rec_type;
5618     lx_cafv_rec                  cafv_rec_type;
5619 
5620     lp_cflv_rec                  cflv_rec_type;
5621     lx_cflv_rec                  cflv_rec_type;
5622 
5623     lp_qcov_rec                  qcov_rec_type;
5624     lx_qcov_rec                  qcov_rec_type;
5625 
5626 
5627     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5628     l_api_name          CONSTANT VARCHAR2(30) := 'STORE_PAYMENTS';
5629     l_prev_sty_id		NUMBER;
5630     l_sty_id			NUMBER;
5631     l_cfo_id			NUMBER;
5632     l_caf_id			NUMBER;
5633     l_cfl_id			NUMBER;
5634     l_stub_amount		NUMBER;
5635     l_amount			NUMBER;
5636     l_currency_code         	VARCHAR2(30);
5637     l_qco_id       		NUMBER;
5638 
5639     l_prev_cle_id		NUMBER;
5640     l_cle_id			NUMBER;
5641     i                   NUMBER := 0;
5642 
5643 
5644     CURSOR l_kheaders_csr(cp_khr_id IN NUMBER) IS
5645     SELECT currency_code
5646     FROM   okc_k_headers_b
5647     WHERE  id = cp_khr_id;
5648 
5649     CURSOR l_qco_id_csr(cp_qte_id IN NUMBER
5650                         ,cp_cfo_id  IN  NUMBER
5651                         ,cp_base_src_id IN  NUMBER) IS
5652     SELECT id
5653     FROM OKL_TRX_QTE_CF_OBJECTS
5654     WHERE qte_id=cp_qte_id
5655     AND cfo_id=cp_cfo_id
5656     AND base_source_id=cp_base_src_id;
5657 
5658     CURSOR l_caf_id_csr(cp_qte_id IN NUMBER
5659                         ,cp_cfo_id  IN  NUMBER
5660                         ,cp_sty_id IN  NUMBER) IS
5661     SELECT id
5662     FROM OKL_CASH_FLOWS
5663     WHERE cfo_id=cp_cfo_id
5664     AND dnz_qte_id=cp_qte_id
5665     AND sty_id = cp_sty_id;
5666 
5667     CURSOR l_cfl_id_csr(cp_caf_id  IN  NUMBER
5668                         ,cp_start_date IN  DATE) IS
5669     SELECT id
5670     FROM OKL_CASH_FLOW_LEVELS
5671     WHERE caf_id=cp_caf_id
5672     AND start_date=cp_start_date;
5673 
5674 
5675  BEGIN
5676    IF (G_DEBUG_ENABLED = 'Y') THEN
5677      G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
5678    END IF;
5679 
5680     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5681        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments','Begin(+)');
5682     END IF;
5683 
5684     --Print Input Variables
5685     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
5686        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5687               'p_ppd_request_id :'||p_ppd_request_id);
5688        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5689               'p_ppd_khr_id :'||p_ppd_khr_id);
5690        FOR i in p_payment_structure.FIRST..p_payment_structure.LAST LOOP
5691            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5692               'p_payment_structure.Chr_Id :'||p_payment_structure(i).Chr_Id);
5693            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5694               'p_payment_structure.Cle_id :'||p_payment_structure(i).Cle_Id);
5695            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5696               'p_payment_structure.Rule_Information1 :'||p_payment_structure(i).Rule_Information1);
5697            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5698               'p_payment_structure.Rule_Information2 :'||p_payment_structure(i).Rule_Information2);
5699            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5700               'p_payment_structure.Rule_Information3 :'||p_payment_structure(i).Rule_Information3);
5701            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5702               'p_payment_structure.Rule_Information4 :'||p_payment_structure(i).Rule_Information4);
5703            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5704               'p_payment_structure.Rule_Information5 :'||p_payment_structure(i).Rule_Information5);
5705            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5706               'p_payment_structure.Rule_Information6 :'||p_payment_structure(i).Rule_Information6);
5707            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5708               'p_payment_structure.Rule_Information7 :'||p_payment_structure(i).Rule_Information7);
5709            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5710               'p_payment_structure.Rule_Information8 :'||p_payment_structure(i).Rule_Information8);
5711            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5712               'p_payment_structure.Rule_Information9 :'||p_payment_structure(i).Rule_Information9);
5713            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5714               'p_payment_structure.Rule_Information10 :'||p_payment_structure(i).Rule_Information10);
5715            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5716               'p_payment_structure.Rule_Information11 :'||p_payment_structure(i).Rule_Information11);
5717            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5718               'p_payment_structure.Rule_Information12 :'||p_payment_structure(i).Rule_Information12);
5719            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5720               'p_payment_structure.Rule_Information13 :'||p_payment_structure(i).Rule_Information13);
5721            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5722               'p_payment_structure.Rule_Information14 :'||p_payment_structure(i).Rule_Information14);
5723            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5724               'p_payment_structure.Rule_Information15 :'||p_payment_structure(i).Rule_Information15);
5725            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5726               'p_payment_structure.Rule_Information_Category :'||p_payment_structure(i).Rule_Information_Category);
5727 
5728            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5729               'p_payment_structure.Object1_Id1 :'||p_payment_structure(i).Object1_Id1);
5730            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5731               'p_payment_structure.Object1_Id2 :'||p_payment_structure(i).Object1_Id2);
5732            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5733               'p_payment_structure.Object2_Id1 :'||p_payment_structure(i).Object2_Id1);
5734            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5735               'p_payment_structure.Object2_Id2 :'||p_payment_structure(i).Object2_Id2);
5736            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5737               'p_payment_structure.Object3_Id1 :'||p_payment_structure(i).Object3_Id1);
5738 	   FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5739               'p_payment_structure.Object3_Id2 :'||p_payment_structure(i).Object3_Id2);
5740 
5741            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5742               'p_payment_structure.Jtot_Object1_Code :'||p_payment_structure(i).Jtot_Object1_Code);
5743 
5744            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5745               'p_payment_structure.Jtot_Object2_Code :'||p_payment_structure(i).Jtot_Object2_Code);
5746 
5747            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5748               'p_payment_structure.Jtot_Object3_Code :'||p_payment_structure(i).Jtot_Object3_Code);
5749            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
5750               'End of record:' ||i);
5751         END LOOP;
5752    END IF;
5753 
5754  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5755    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Printing Variables in store_payments');
5756   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'====================================');
5757  END IF;
5758 	print_messages(p_payment_structure);
5759 
5760    --Get the currency code for the Contract
5761    OPEN  l_kheaders_csr(p_ppd_khr_id);
5762    FETCH l_kheaders_csr INTO l_currency_code;
5763    CLOSE l_kheaders_csr;
5764 
5765         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
5766 
5767         --Call start_activity to create savepoint, check compatibility and initialize message list
5768 
5769         x_return_status := OKL_API.START_ACTIVITY(
5770                               l_api_name
5771                               ,p_init_msg_list
5772                               ,'_PVT'
5773                               ,x_return_status);
5774 
5775         --Check if activity started successfully
5776 
5777         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5778                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5779         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5780                 RAISE OKL_API.G_EXCEPTION_ERROR;
5781         END IF;
5782 
5783  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5784    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Creating CFO');
5785  END IF;
5786         l_prev_sty_id := 0;
5787 	l_prev_cle_id := 0;
5788 
5789     IF p_payment_structure.count > 0 THEN
5790       i:= p_payment_structure.FIRST;
5791      LOOP
5792    --Create a cash flow object for this type.
5793           create_cash_flow_object(p_api_version    => p_api_version,
5794                                   x_msg_count      => x_msg_count,
5795                        		  x_msg_data       => x_msg_data,
5796                                   p_obj_type_code  => G_FIN_ASSET_OBJECT_TYPE,
5797                                   p_src_table      => G_OBJECT_SRC_TABLE,
5798                                   p_src_id         => p_ppd_request_id,
5799                                   p_base_src_id    => p_payment_structure(i).cle_id,
5800                                   x_cfo_id         => l_cfo_id,
5801                                   x_return_status  => l_return_status);
5802 
5803          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5804              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5805          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5806              RAISE OKL_API.G_EXCEPTION_ERROR;
5807          END IF;
5808 
5809  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5810    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Checking for  QCO');
5811  END IF;
5812          --Check if this association exists.
5813 	 l_qco_id := NULL;
5814          OPEN l_qco_id_csr(p_ppd_request_id,l_cfo_id,p_payment_structure(i).cle_id);
5815          FETCH l_qco_id_csr INTO l_qco_id;
5816          CLOSE l_qco_id_csr;
5817 
5818          IF l_qco_id IS NULL THEN
5819              --Create the association to Request and cle_id
5820              l_qco_id           := NULL;
5821 	     lp_qcov_rec 	:= NULL;
5822              lp_qcov_rec.qte_id := p_ppd_request_id;
5823              lp_qcov_rec.cfo_id := l_cfo_id;
5824              lp_qcov_rec.BASE_SOURCE_ID := p_payment_structure(i).cle_id;
5825   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5826     		OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Creating QCO');
5827   END IF;
5828 
5829              OKL_TRX_QTE_CF_OBJECTS_PUB.insert_quote_cf_object(p_api_version => p_api_version,
5830                                                             p_init_msg_list  => OKL_API.G_FALSE,
5831                                                             x_return_status  => l_return_status,
5832                                                             x_msg_count      => x_msg_count,
5833                                                             x_msg_data       => x_msg_data,
5834                                                             p_qcov_rec       => lp_qcov_rec,
5835                                                             x_qcov_rec       => lx_qcov_rec);
5836 
5837          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5838                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Creating QCO - Return Status: ' || l_return_status);
5839          END IF;
5840 
5841              IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5842                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5843              ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5844                  RAISE OKL_API.G_EXCEPTION_ERROR;
5845              END IF;
5846 
5847          END IF;
5848        --Create the Cash flows for this Object.
5849 
5850         IF p_payment_structure(i).rule_information_category = 'LASLH' THEN
5851 	        	l_sty_id := p_payment_structure(i).object1_id1;
5852 			l_cle_id := p_payment_structure(i).cle_id;
5853 	END IF;
5854 
5855         IF p_payment_structure(i).rule_information_category = 'LASLL' THEN
5856                 --This will be a CASH Flow
5857                 --Create the Cash flow only if it is a different stream type,
5858                 --otherwise only create the lines since it is for the same
5859                 --stream type.
5860                 IF l_sty_id <> l_prev_sty_id  OR  l_cle_id <> l_prev_cle_id THEN
5861 		    l_caf_id := NULL;
5862                     OPEN l_caf_id_csr(p_ppd_request_id,l_cfo_id,l_sty_id);
5863                     FETCH l_caf_id_csr INTO l_caf_id;
5864                     CLOSE l_caf_id_csr;
5865 
5866                     IF l_caf_id is NULL THEN
5867 	 	    	lp_cafv_rec		:= NULL;
5868                     	lp_cafv_rec.cfo_id := l_cfo_id;
5869                     	lp_cafv_rec.sts_code := G_PROPOSED_STATUS;
5870                     	lp_cafv_rec.sty_id := l_sty_id;
5871                     	lp_cafv_rec.cft_code := G_CASH_FLOW_TYPE;
5872                     	lp_cafv_rec.due_arrears_yn := nvl(p_payment_structure(i).rule_information10,'N');
5873         	    	lp_cafv_rec.start_date := FND_DATE.canonical_to_date(
5874 							p_payment_structure(i).rule_information2);
5875                     	lp_cafv_rec.number_of_advance_periods := p_payment_structure(i).rule_information5;
5876                     	lp_cafv_rec.dnz_khr_id := p_ppd_khr_id;
5877                     	lp_cafv_rec.dnz_qte_id := p_ppd_request_id;
5878 
5879 
5880    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5881      			OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Creating CAF');
5882    END IF;
5883 
5884                 	--Call the API to create the Cash Flow.
5885                          okl_cash_flows_pub.insert_cash_flow(
5886                              p_api_version              =>    p_api_version,
5887                              p_init_msg_list            =>    OKL_API.G_FALSE,
5888                              x_return_status            =>    l_return_status,
5889                              x_msg_count                =>    x_msg_count,
5890                              x_msg_data                 =>    x_msg_data,
5891                              p_cafv_rec                 =>    lp_cafv_rec,
5892                              x_cafv_rec                 =>    lx_cafv_rec);
5893 
5894    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5895      			OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Creating CAF - Return Status: ' || l_return_status);
5896    END IF;
5897                          IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5898                               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5899                          ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5900                               RAISE OKL_API.G_EXCEPTION_ERROR;
5901                          END IF;
5902                          l_caf_id            := lx_cafv_rec.id;
5903                     ELSE
5904 	 	    	lp_cafv_rec		:= NULL;
5905                     	lp_cafv_rec.cfo_id := l_cfo_id;
5906                     	lp_cafv_rec.sts_code := G_PROPOSED_STATUS;
5907                     	lp_cafv_rec.sty_id := l_sty_id;
5908                     	lp_cafv_rec.cft_code := G_CASH_FLOW_TYPE;
5909                     	lp_cafv_rec.due_arrears_yn := nvl(p_payment_structure(i).rule_information10,'N');
5910         	    	lp_cafv_rec.start_date := FND_DATE.canonical_to_date(
5911 							p_payment_structure(i).rule_information2);
5912                     	lp_cafv_rec.number_of_advance_periods := p_payment_structure(i).rule_information5;
5913                     	lp_cafv_rec.dnz_khr_id := p_ppd_khr_id;
5914                     	lp_cafv_rec.dnz_qte_id := p_ppd_request_id;
5915                         lp_cafv_rec.id := l_caf_id;
5916                        --Call the API to create the Cash Flow.
5917                         okl_cash_flows_pub.update_cash_flow(
5918                             p_api_version              =>    p_api_version,
5919                             p_init_msg_list            =>    OKL_API.G_FALSE,
5920                             x_return_status            =>    l_return_status,
5921                             x_msg_count                =>    x_msg_count,
5922                             x_msg_data                 =>    x_msg_data,
5923                             p_cafv_rec                 =>    lp_cafv_rec,
5924                             x_cafv_rec                 =>    lx_cafv_rec);
5925 
5926                      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5927                                            	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Updating CAF - Return Status: ' || l_return_status);
5928                      END IF;
5929                         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5930                              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5931                         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5932                              RAISE OKL_API.G_EXCEPTION_ERROR;
5933                         END IF;
5934                      END IF; --Check for existence of Caf
5935                 END IF; --Check for Sty_id
5936 
5937                 --Now create the Cash flow lines
5938 		--check if a cash flow line exists of this type.
5939 		l_cfl_id := NULL;
5940        		OPEN l_cfl_id_csr(l_caf_id, FND_DATE.canonical_to_date(
5941                                                 p_payment_structure(i).rule_information2));
5942        		FETCH l_cfl_id_csr INTO l_cfl_id;
5943        		CLOSE l_cfl_id_csr;
5944 
5945        		IF l_cfl_id IS NULL THEN
5946 			lp_cflv_rec	   := NULL;
5947                 	lp_cflv_rec.caf_id := l_caf_id;
5948 
5949                 	IF p_payment_structure(i).rule_information7 IS NOT NULL THEN --STUB DAYS
5950                         	l_stub_amount :=  Okl_Accounting_Util.ROUND_AMOUNT(
5951 					p_amount => p_payment_structure(i).rule_information8,
5952 			        	p_currency_code => l_currency_code);
5953                         	lp_cflv_rec.stub_days := p_payment_structure(i).rule_information7;
5954                         	lp_cflv_rec.stub_amount := l_stub_amount;
5955                 	ELSE
5956                      		l_amount:= Okl_Accounting_Util.ROUND_AMOUNT(
5957 					p_amount => p_payment_structure(i).rule_information6, --amount
5958 			        	p_currency_code => l_currency_code);
5959 
5960                         	lp_cflv_rec.amount := l_amount;
5961                         	lp_cflv_rec.number_of_periods := p_payment_structure(i).rule_information3;
5962                         	lp_cflv_rec.fqy_code := p_payment_structure(i).object1_id1;
5963                 	END IF;
5964 
5965                 	lp_cflv_rec.level_sequence := p_payment_structure(i).rule_information1;
5966 			lp_cflv_rec.start_date := FND_DATE.canonical_to_date(
5967 						p_payment_structure(i).rule_information2);
5968 
5969 
5970     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5971       				OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Creating CFL');
5972     END IF;
5973                 	OKL_CASH_FLOW_LEVELS_PUB.insert_cash_flow_level(
5974 							p_api_version     =>    p_api_version,
5975                                                         p_init_msg_list   => OKL_API.G_FALSE,
5976                                                         x_return_status   => l_return_status,
5977                                                         x_msg_count       => x_msg_count,
5978                                                         x_msg_data        => x_msg_data,
5979                                                         p_cflv_rec        => lp_cflv_rec,
5980                                                         x_cflv_rec        => lx_cflv_rec);
5981    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5982      			OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Creating CFL - Return Status: ' || l_return_status);
5983    END IF;
5984 
5985                 	IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5986                     		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5987                 	ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5988                     		RAISE OKL_API.G_EXCEPTION_ERROR;
5989                 	END IF;
5990                 ELSE
5991 			lp_cflv_rec	   := NULL;
5992                 	lp_cflv_rec.caf_id := l_caf_id;
5993 
5994                 	IF p_payment_structure(i).rule_information7 IS NOT NULL THEN --STUB DAYS
5995                         	l_stub_amount :=  Okl_Accounting_Util.ROUND_AMOUNT(
5996 					p_amount => p_payment_structure(i).rule_information8,
5997 			        	p_currency_code => l_currency_code);
5998                         	lp_cflv_rec.stub_days := p_payment_structure(i).rule_information7;
5999                         	lp_cflv_rec.stub_amount := l_stub_amount;
6000                 	ELSE
6001                      		l_amount:= Okl_Accounting_Util.ROUND_AMOUNT(
6002 					p_amount => p_payment_structure(i).rule_information6, --amount
6003 			        	p_currency_code => l_currency_code);
6004 
6005                         	lp_cflv_rec.amount := l_amount;
6006                         	lp_cflv_rec.number_of_periods := p_payment_structure(i).rule_information3;
6007                         	lp_cflv_rec.fqy_code := p_payment_structure(i).object1_id1;
6008                 	END IF;
6009 
6010                 	lp_cflv_rec.level_sequence := p_payment_structure(i).rule_information1;
6011 			lp_cflv_rec.start_date := FND_DATE.canonical_to_date(
6012 						p_payment_structure(i).rule_information2);
6013 
6014 
6015                         lp_cflv_rec.id := l_cfl_id;
6016                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6017                                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before Updating CFL');
6018                  END IF;
6019                         OKL_CASH_FLOW_LEVELS_PUB.update_cash_flow_level(
6020 					p_api_version     =>    p_api_version,
6021                                        p_init_msg_list   => OKL_API.G_FALSE,
6022                                        x_return_status   => l_return_status,
6023                                        x_msg_count       => x_msg_count,
6024                                        x_msg_data        => x_msg_data,
6025                                        p_cflv_rec        => lp_cflv_rec,
6026                                        x_cflv_rec        => lx_cflv_rec);
6027                  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6028                                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Updating CFL - Return Status: ' || l_return_status);
6029                  END IF;
6030 
6031                         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6032                             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6033                         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6034                             RAISE OKL_API.G_EXCEPTION_ERROR;
6035                         END IF;
6036 
6037                 END IF; --check for Cash flow level.
6038 
6039               l_prev_sty_id := l_sty_id;
6040 	      l_prev_cle_id := l_cle_id;
6041         END IF;    --LASLL Check
6042        EXIT WHEN i = p_payment_structure.LAST;
6043 	    i := p_payment_structure.NEXT(i);
6044   	  END LOOP;
6045     END IF;
6046 	x_cfo_id := l_cfo_id;
6047  EXCEPTION
6048 
6049     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6050        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6051             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments ',
6052                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6053        END IF;
6054 
6055         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6056                                l_api_name,
6057                                G_PKG_NAME,
6058                                'OKL_API.G_RET_STS_ERROR',
6059                                x_msg_count,
6060                                x_msg_data,
6061                                '_PVT');
6062     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6063        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6064             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments ',
6065                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6066        END IF;
6067 
6068         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6069                               l_api_name,
6070                               G_PKG_NAME,
6071                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6072                               x_msg_count,
6073                               x_msg_data,
6074                               '_PVT');
6075     WHEN OTHERS THEN
6076        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6077             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments ',
6078                   'EXCEPTION :'||sqlerrm);
6079        END IF;
6080 
6081        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6082                               l_api_name,
6083                               G_PKG_NAME,
6084                               'OTHERS',
6085                               x_msg_count,
6086                               x_msg_data,
6087                               '_PVT');
6088   END store_payments;
6089 
6090 
6091 PROCEDURE store_principal_payments(
6092     p_api_version		IN  NUMBER,
6093     p_init_msg_list		IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
6094     x_return_status		OUT NOCOPY VARCHAR2,
6095     x_msg_count			OUT NOCOPY NUMBER,
6096     x_msg_data			OUT NOCOPY VARCHAR2,
6097     p_ppd_request_id    	IN  NUMBER,
6098     p_ppd_khr_id        	IN  NUMBER,
6099     p_payment_structure 	IN  okl_mass_rebook_pvt.strm_lalevl_tbl_type,
6100     x_cfo_id            	OUT NOCOPY NUMBER)
6101 
6102  AS
6103     l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6104     l_api_name          CONSTANT VARCHAR2(30) := 'store_esg_payments';
6105     lx_cfo_id			NUMBER;
6106 
6107     l_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
6108     lx_trqv_rec         okl_trx_requests_pub.trqv_rec_type;
6109     l_pp_sty_id		NUMBER;
6110     l_upp_sty_id		NUMBER;
6111     l_payment_tbl	payment_tbl_type ;
6112     l_store_payment_tbl	payment_tbl_type;
6113     l_temp_tbl            payment_tbl_type;
6114 
6115     knt			NUMBER := 0;
6116     i			NUMBER := 0;
6117     j           NUMBER := 0;
6118     l_total_k_cost	NUMBER := 0;
6119     l_asset_cost	NUMBER := 0;
6120     l_kle_id		NUMBER;
6121     l_prev_kle_id		NUMBER;
6122     l_pymt_count		NUMBER :=0;
6123     l_currency_code             VARCHAR2(30);
6124     l_raw_ppd_for_asset		NUMBER :=0;
6125     l_ppd_for_asset		NUMBER :=0;
6126     l_index                     NUMBER;
6127     l_ppd_amount                NUMBER := 0;
6128 
6129     CURSOR l_kheaders_csr(cp_khr_id IN NUMBER) IS
6130     SELECT currency_code
6131     FROM   okc_k_headers_b
6132     WHERE  id = cp_khr_id;
6133 
6134     CURSOR c_req_details_csr (a_id NUMBER)
6135     IS
6136     SELECT object_Version_number
6137 	      ,payment_amount
6138 	      ,payment_date
6139     FROM   okl_trx_requests
6140     WHERE id=a_id;
6141 
6142 
6143 
6144  BEGIN
6145    IF (G_DEBUG_ENABLED = 'Y') THEN
6146      G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6147    END IF;
6148 
6149     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6150        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments','Begin(+)');
6151     END IF;
6152 
6153     --Print Input Variables
6154     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6155        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6156               'p_ppd_request_id :'||p_ppd_request_id);
6157        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6158               'p_ppd_khr_id :'||p_ppd_khr_id);
6159        FOR i in p_payment_structure.FIRST..p_payment_structure.LAST LOOP
6160            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6161               'p_payment_structure.Chr_Id :'||p_payment_structure(i).Chr_Id);
6162            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6163               'p_payment_structure.Cle_id :'||p_payment_structure(i).Cle_Id);
6164            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6165               'p_payment_structure.Rule_Information1 :'||p_payment_structure(i).Rule_Information1);
6166            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6167               'p_payment_structure.Rule_Information2 :'||p_payment_structure(i).Rule_Information2);
6168            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6169               'p_payment_structure.Rule_Information3 :'||p_payment_structure(i).Rule_Information3);
6170            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6171               'p_payment_structure.Rule_Information4 :'||p_payment_structure(i).Rule_Information4);
6172            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6173               'p_payment_structure.Rule_Information5 :'||p_payment_structure(i).Rule_Information5);
6174            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6175               'p_payment_structure.Rule_Information6 :'||p_payment_structure(i).Rule_Information6);
6176            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6177               'p_payment_structure.Rule_Information7 :'||p_payment_structure(i).Rule_Information7);
6178            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6179               'p_payment_structure.Rule_Information8 :'||p_payment_structure(i).Rule_Information8);
6180            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6181               'p_payment_structure.Rule_Information9 :'||p_payment_structure(i).Rule_Information9);
6182            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6183               'p_payment_structure.Rule_Information10 :'||p_payment_structure(i).Rule_Information10);
6184            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6185               'p_payment_structure.Rule_Information11 :'||p_payment_structure(i).Rule_Information11);
6186            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6187               'p_payment_structure.Rule_Information12 :'||p_payment_structure(i).Rule_Information12);
6188            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6189               'p_payment_structure.Rule_Information13 :'||p_payment_structure(i).Rule_Information13);
6190            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6191               'p_payment_structure.Rule_Information14 :'||p_payment_structure(i).Rule_Information14);
6192            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6193               'p_payment_structure.Rule_Information15 :'||p_payment_structure(i).Rule_Information15);
6194            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6195               'p_payment_structure.Rule_Information_Category :'||p_payment_structure(i).Rule_Information_Category);
6196 
6197            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6198               'p_payment_structure.Object1_Id1 :'||p_payment_structure(i).Object1_Id1);
6199            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6200               'p_payment_structure.Object1_Id2 :'||p_payment_structure(i).Object1_Id2);
6201            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6202               'p_payment_structure.Object2_Id1 :'||p_payment_structure(i).Object2_Id1);
6203            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6204               'p_payment_structure.Object2_Id2 :'||p_payment_structure(i).Object2_Id2);
6205            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6206               'p_payment_structure.Object3_Id1 :'||p_payment_structure(i).Object3_Id1);
6207 	   FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6208               'p_payment_structure.Object3_Id2 :'||p_payment_structure(i).Object3_Id2);
6209 
6210            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6211               'p_payment_structure.Jtot_Object1_Code :'||p_payment_structure(i).Jtot_Object1_Code);
6212 
6213            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6214               'p_payment_structure.Jtot_Object2_Code :'||p_payment_structure(i).Jtot_Object2_Code);
6215 
6216            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6217               'p_payment_structure.Jtot_Object3_Code :'||p_payment_structure(i).Jtot_Object3_Code);
6218            FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments.',
6219               'End of record:' ||i);
6220         END LOOP;
6221    END IF;
6222 
6223        x_return_status    := OKL_API.G_RET_STS_SUCCESS;
6224 
6225         --Call start_activity to create savepoint, check compatibility and initialize message list
6226 
6227         x_return_status := OKL_API.START_ACTIVITY(
6228                               l_api_name
6229                               ,p_init_msg_list
6230                               ,'_PVT'
6231                               ,x_return_status);
6232 
6233         --Check if activity started successfully
6234 
6235         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6236                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6237         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6238                 RAISE OKL_API.G_EXCEPTION_ERROR;
6239         END IF;
6240 
6241  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6242    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Printing Variables in store_payments');
6243   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'====================================');
6244  END IF;
6245 	print_messages(p_payment_structure);
6246 
6247    --Get the currency code for the Contract
6248    OPEN  l_kheaders_csr(p_ppd_khr_id);
6249    FETCH l_kheaders_csr INTO l_currency_code;
6250    CLOSE l_kheaders_csr;
6251 
6252 
6253 
6254         OPEN c_req_details_csr(p_ppd_request_id);
6255         FETCH c_req_details_csr INTO l_trqv_rec.object_Version_number
6256 				  ,l_trqv_rec.payment_amount
6257 				  ,l_trqv_rec.payment_date;
6258         CLOSE c_req_details_csr;
6259 
6260 
6261 	--Get the Stream type id for UPP.
6262         OKL_STREAMS_UTIL.get_dependent_stream_type(
6263                  p_khr_id                        => p_ppd_khr_id
6264                  ,p_primary_sty_purpose          => G_RENT_STREAM
6265                  ,p_dependent_sty_purpose        => G_PRINCIPAL_PAYMENT
6266                  ,x_return_status                => x_return_status
6267                  ,x_dependent_sty_id             => l_pp_sty_id);
6268          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6269                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type: '|| x_return_status);
6270          END IF;
6271 
6272 
6273         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6274                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6275         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6276                 RAISE OKL_API.G_EXCEPTION_ERROR;
6277         END IF;
6278 
6279         --Get the Stream type id for UPP.
6280         OKL_STREAMS_UTIL.get_dependent_stream_type(
6281                  p_khr_id                        => p_ppd_khr_id
6282                  ,p_primary_sty_purpose          => G_RENT_STREAM
6283                  ,p_dependent_sty_purpose        => G_UNSCHED_PP_STREAM
6284                  ,x_return_status                => x_return_status
6285                  ,x_dependent_sty_id             => l_upp_sty_id);
6286          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6287                    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type: '|| x_return_status);
6288          END IF;
6289 
6290         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6291                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6292         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6293                 RAISE OKL_API.G_EXCEPTION_ERROR;
6294         END IF;
6295 
6296         OKL_EXECUTE_FORMULA_PUB.execute(p_api_version   => p_api_version,
6297                                         p_init_msg_list => p_init_msg_list,
6298                                         x_return_status => x_return_status,
6299                                         x_msg_count     => x_msg_count,
6300                                         x_msg_data      => x_msg_data,
6301                                         p_formula_name  => 'CONTRACT_CAP_AMNT',
6302                                         p_contract_id   => p_ppd_khr_id,
6303                                         p_line_id       => NULL,
6304                                         x_value         => l_total_k_cost);
6305         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6306                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After execute CONTRACT_CAP_AMNT: '|| l_total_k_cost || x_return_status);
6307         END IF;
6308         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6309                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6310         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6311                 RAISE OKL_API.G_EXCEPTION_ERROR;
6312         END IF;
6313 
6314 
6315       -- loop through the payment structure
6316         knt := 1;
6317         i := 0;
6318     IF p_payment_structure.count > 0 THEN
6319       i:= p_payment_structure.FIRST;
6320       --Bug#5046204 start
6321     LOOP
6322       IF p_payment_structure(i).rule_information_category = 'LASLH' THEN
6323          l_pp_sty_id := p_payment_structure(i).object1_id1;
6324       END IF;
6325       --Bug#5046204 end
6326       IF p_payment_structure(i).rule_information_category = 'LASLL' THEN
6327          l_payment_tbl(knt).khr_id := p_payment_Structure(i).chr_id;
6328          l_payment_tbl(knt).kle_id := p_payment_structure(i).cle_id;
6329          l_payment_tbl(knt).sty_id := l_pp_sty_id;
6330          l_payment_tbl(knt).start_date := FND_DATE.canonical_to_date(p_payment_structure(i).rule_information2);
6331          l_payment_tbl(knt).periods := p_payment_structure(i).rule_information3;
6332          l_payment_tbl(knt).frequency := p_payment_structure(i).object1_id1;
6333          l_payment_tbl(knt).arrears_yn := p_payment_structure(i).rule_information10;
6334          l_payment_tbl(knt).amount  := p_payment_structure(i).rule_information6;
6335          l_payment_tbl(knt).stub_days := p_payment_structure(i).rule_information7;
6336          l_payment_tbl(knt).stub_amount := p_payment_structure(i).rule_information8;
6337          knt := knt + 1;
6338       END IF;
6339       EXIT WHEN i = p_payment_structure.LAST;
6340         i := p_payment_structure.NEXT(i);
6341       END LOOP;
6342     END IF;
6343 
6344     PRINT_STM_PAYMENTS(l_payment_tbl);
6345 
6346    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6347         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'before updating ppd amounts');
6348    END IF;
6349 
6350 	l_prev_kle_id	:= -99;
6351         knt := 1;
6352         j := 0;
6353     IF l_payment_tbl.count > 0 THEN
6354       j:= l_payment_tbl.FIRST;
6355       LOOP
6356 		l_kle_id	:= l_payment_tbl(j).kle_id;
6357 		--ESG will not populate the styid for rent
6358 		--so populate for each row.
6359         	l_store_payment_tbl(knt) :=  l_payment_tbl(j);
6360 		--l_store_payment_tbl(knt).sty_id	:= l_rent_sty_id;
6361 
6362 		If l_kle_id <> l_prev_kle_id THEN
6363 			l_prev_kle_id := l_kle_id;
6364 
6365 			OKL_EXECUTE_FORMULA_PUB.execute(
6366 				p_api_version => p_api_version,
6367                                 p_init_msg_list => p_init_msg_list,
6368                                 x_return_status => x_return_status,
6369                                 x_msg_count     => x_msg_count,
6370                                 x_msg_data      => x_msg_data,
6371                                 p_formula_name  => 'LINE_CAP_AMNT',
6372                                 p_contract_id   => p_ppd_khr_id,
6373                                 p_line_id       => l_kle_id,
6374                                 x_value         => l_asset_cost);
6375 
6376                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6377                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After execute LINE_CAP_AMNT: '|| l_asset_cost);
6378                         END IF;
6379                         If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
6380                                 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6381                         Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
6382                                 raise OKC_API.G_EXCEPTION_ERROR;
6383                         End If;
6384 
6385                         --Pro rate the ppd amt for this line
6386                         l_raw_ppd_for_asset := (l_asset_cost/l_total_k_cost)
6387                                                         * l_trqv_rec.payment_amount;
6388 
6389                         l_ppd_for_asset := Okl_Accounting_Util.ROUND_AMOUNT(
6390                                                 p_amount => l_raw_ppd_for_asset,
6391                                                 p_currency_code => l_currency_code);
6392                         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6393                                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PPD for Asset : '|| l_ppd_for_asset);
6394                         END IF;
6395 
6396 			knt := knt +1;
6397         		l_store_payment_tbl(knt).KHR_ID     := p_ppd_khr_id;
6398                 	l_store_payment_tbl(knt).KLE_ID     := l_kle_id;
6399                 	l_store_payment_tbl(knt).STY_ID     := l_upp_sty_id;
6400                 	l_store_payment_tbl(knt).start_date := l_trqv_rec.payment_date;
6401                 	l_store_payment_tbl(knt).stub_days  := 1;
6402                 	l_store_payment_tbl(knt).stub_amount:= l_ppd_for_asset;
6403 			--Bug#5511937 by dkagrawa start
6404                         l_index := knt;
6405                         l_ppd_amount := l_ppd_amount + l_ppd_for_asset;
6406                         --Bug#5511937 end
6407 		END IF;
6408 		knt := knt +1;
6409 		EXIT WHEN j = l_payment_tbl.LAST;
6410 	    j := l_payment_tbl.NEXT(j);
6411   	  END LOOP;
6412     END IF;
6413     --Bug#5511937 by dkagrawa start
6414     IF ( l_trqv_rec.payment_amount - l_ppd_amount <> 0 ) THEN
6415       l_store_payment_tbl(l_index).stub_amount := l_store_payment_tbl(l_index).stub_amount + (l_trqv_rec.payment_amount - l_ppd_amount );
6416     END IF;
6417     --Bug#5511937 end
6418 
6419 
6420 	PRINT_STM_PAYMENTS(l_store_payment_tbl);
6421 
6422 	--Call the Store stm payments api.
6423                 store_stm_payments(p_api_version  => p_api_version,
6424                               p_init_msg_list  => p_init_msg_list,
6425                               x_return_status  => x_return_status,
6426                               x_msg_count      => x_msg_count,
6427                               x_msg_data       => x_msg_data,
6428                               p_ppd_request_id => p_ppd_request_id,
6429                               p_ppd_khr_id     => p_ppd_khr_id,
6430                               p_payment_tbl    => l_store_payment_tbl,
6431                               x_cfo_id         => lx_cfo_id);
6432                 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6433                                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Store stm payments in ESG Inbound:' || x_return_status
6434                                 || 'CFO Id: '|| lx_cfo_id);
6435                 END IF;
6436                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6437                         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6438                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6439                         RAISE OKL_API.G_EXCEPTION_ERROR;
6440                 END IF;
6441 
6442 
6443 	IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6444        		FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_esg_payments'
6445                                                                         ,'End(-)');
6446   	END IF;
6447 
6448 
6449 
6450  EXCEPTION
6451 
6452     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6453        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6454             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments ',
6455                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6456        END IF;
6457 
6458         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6459                                l_api_name,
6460                                G_PKG_NAME,
6461                                'OKL_API.G_RET_STS_ERROR',
6462                                x_msg_count,
6463                                x_msg_data,
6464                                '_PVT');
6465     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6466        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6467             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments ',
6468                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6469        END IF;
6470 
6471         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6472                               l_api_name,
6473                               G_PKG_NAME,
6474                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6475                               x_msg_count,
6476                               x_msg_data,
6477                               '_PVT');
6478     WHEN OTHERS THEN
6479        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6480             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.store_payments ',
6481                   'EXCEPTION :'||sqlerrm);
6482        END IF;
6483 
6484        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6485                               l_api_name,
6486                               G_PKG_NAME,
6487                               'OTHERS',
6488                               x_msg_count,
6489                               x_msg_data,
6490                               '_PVT');
6491   END store_principal_payments;
6492 
6493 
6494   PROCEDURE extract_payments(
6495     p_ppd_request_id    	IN  NUMBER,
6496     p_payment_struc         OUT NOCOPY okl_mass_rebook_pvt.strm_lalevl_tbl_type)
6497   IS
6498 
6499     i               NUMBER := 1;
6500     l_prev_sty_id   NUMBER := -1;
6501 
6502     CURSOR get_payments_csr(a_id NUMBER)
6503     IS
6504     SELECT  dnz_khr_id
6505             ,kle_id
6506             ,sty_id
6507             ,frequency_code
6508             ,Arrears
6509             ,number_of_periods
6510             ,amount
6511             ,stub_days
6512             ,stub_amount
6513             ,start_date
6514             ,advance_payments
6515     FROM    OKL_CS_PPD_PAYMENTS_UV
6516     WHERE   request_id = a_id
6517     order by kle_id,sty_id,start_date;
6518 
6519 
6520   BEGIN
6521 
6522     --Populate the Payments Table
6523     --Sample payments
6524     --RENT - Asset A1 -Advance - For Contract K1
6525     --3 Months 100$ 01-01-2004
6526     --6 Months 90$ 04-01-2004
6527     --3 Months 150$ 10-01-2004
6528     --PPD - Asset A1 - for Contract K1
6529     --1 Stub for 1 day - Start on 15-AUG-2004 for 1000$
6530 
6531 
6532     --Sample payment table should look like this.
6533     --SLH1
6534     --p_payment_struc(1).chr_id   := K1;
6535     --p_payment_struc(1).cle_id   := A1;
6536     --p_payment_struc(1).RULE_INFORMATION_CATEGORY := 'LASLH';
6537     --p_payment_struc(1).OBJECT1_ID1 := 251601487757888615031160220891184821165; --Sty id
6538 
6539     --SLL1.1
6540     --  p_payment_struc(2).chr_id   := K1;
6541     --  p_payment_struc(2).cle_id   := A1;
6542     --  p_payment_struc(2).RULE_INFORMATION2 := '2004/01/01 00:00:00';
6543     --  p_payment_struc(2).RULE_INFORMATION3 := '3';
6544     --  p_payment_struc(2).RULE_INFORMATION5 := '0'; --Adv Period
6545     --  p_payment_struc(2).RULE_INFORMATION6 := '100';
6546     --  p_payment_struc(2).RULE_INFORMATION7 := 'Stub Days';
6547     --  p_payment_struc(2).RULE_INFORMATION8 := 'Stub Amount;
6548     --  p_payment_struc(2).RULE_INFORMATION_CATEGORY := 'LASLL';
6549     --  p_payment_struc(2).OBJECT1_ID1 := 'M';  --Freq
6550     --  p_payment_struc(2).Jtot_Object2_Code := 'OKL_STRMHDR';
6551     --SLL1.2
6552     --  p_payment_struc(3).chr_id   := K1;
6553     --  p_payment_struc(3).cle_id   := A1;
6554     --  p_payment_struc(3).RULE_INFORMATION2 := '2004/04/01 00:00:00';
6555     --  p_payment_struc(3).RULE_INFORMATION3 := '6';
6556     --  p_payment_struc(3).RULE_INFORMATION5 := '0';
6557     --  p_payment_struc(3).RULE_INFORMATION6 := '90';
6558     --  p_payment_struc(3).RULE_INFORMATION7 := 'Stub Days';
6559     --  p_payment_struc(3).RULE_INFORMATION8 := 'Stub Amount;
6560     --  p_payment_struc(3).RULE_INFORMATION_CATEGORY := 'LASLL';
6561     --  p_payment_struc(3).OBJECT1_ID1 := 'M';
6562     --  p_payment_struc(3).Jtot_Object2_Code := 'OKL_STRMHDR';
6563     --
6564     --SLL1.3
6565     --  p_payment_struc(4).RULE_INFORMATION2 := '2004/10/01 00:00:00';
6566     --  p_payment_struc(4).RULE_INFORMATION3 := '3';
6567     --  p_payment_struc(4).RULE_INFORMATION5 := '0';
6568     --  p_payment_struc(4).RULE_INFORMATION6 := '120';
6569     --  p_payment_struc(4).RULE_INFORMATION7 := 'Stub Days';
6570     --  p_payment_struc(4).RULE_INFORMATION8 := 'Stub Amount;
6571     --  p_payment_struc(4).RULE_INFORMATION_CATEGORY := 'LASLL';
6572     --  p_payment_struc(4).OBJECT1_ID1 := 'M';
6573     --  p_payment_struc(4).Jtot_Object2_Code := 'OKL_STRMHDR';
6574 
6575 
6576     --SLH2
6577     --p_payment_struc(1).chr_id   := K1;
6578     --p_payment_struc(1).cle_id   := A1;
6579     --p_payment_struc(1).RULE_INFORMATION_CATEGORY := 'LASLH';
6580     --p_payment_struc(1).OBJECT1_ID1 := sty_id for PPD; --Sty id
6581 
6582     --SLL2.1
6583     --  p_payment_struc(2).chr_id   := K1;
6584     --  p_payment_struc(2).cle_id   := A1;
6585     --  p_payment_struc(2).RULE_INFORMATION2 := '2004/15/01 00:00:00';
6586     --  p_payment_struc(2).RULE_INFORMATION3 := NULL; --No of periods
6587     --  p_payment_struc(2).RULE_INFORMATION5 := '0'; --Adv Period
6588     --  p_payment_struc(2).RULE_INFORMATION6 := NULL; --Amount
6589     --  p_payment_struc(2).RULE_INFORMATION7 := 1; --Stub Days
6590     --  p_payment_struc(2).RULE_INFORMATION8 := 1000; -- Stub Amount
6591     --  p_payment_struc(2).RULE_INFORMATION_CATEGORY := 'LASLL';
6592     --  p_payment_struc(2).OBJECT1_ID1 := 'M'; --Freq
6593     --  p_payment_struc(2).Jtot_Object2_Code := 'OKL_STRMHDR';
6594 
6595 
6596     FOR cur_rec in get_payments_csr(p_ppd_request_id) LOOP
6597         IF l_prev_sty_id <>  cur_rec.sty_id THEN --Same Sty type so make it LASLH
6598             p_payment_struc(i).chr_id :=  cur_rec.dnz_khr_id;
6599             p_payment_struc(i).cle_id :=  cur_rec.kle_id;
6600             p_payment_struc(i).RULE_INFORMATION_CATEGORY := 'LASLH';
6601             p_payment_struc(i).OBJECT1_ID1 :=  cur_rec.sty_id;
6602 	    p_payment_struc(i).Jtot_Object1_Code := 'OKL_STRMTYP';
6603             i := i +1;
6604         END IF;
6605 
6606             --Now populate LASLLs
6607             p_payment_struc(i).chr_id :=  cur_rec.dnz_khr_id;
6608             p_payment_struc(i).cle_id :=  cur_rec.kle_id;
6609             p_payment_struc(i).RULE_INFORMATION2 := fnd_date.date_to_canonical(cur_rec.start_date);
6610             p_payment_struc(i).RULE_INFORMATION3 := cur_rec.number_of_periods;
6611 		--This will Null for Stubs,but we need to pass a value,
6612 		--so passing zero
6613             p_payment_struc(i).RULE_INFORMATION5 := NVL(cur_rec.advance_payments,0); --Adv Period
6614             p_payment_struc(i).RULE_INFORMATION6 := cur_rec.amount;
6615             p_payment_struc(i).RULE_INFORMATION7 := cur_rec.stub_days;
6616             p_payment_struc(i).RULE_INFORMATION8 := cur_rec.stub_amount;
6617             p_payment_struc(i).RULE_INFORMATION10 := cur_rec.arrears;
6618             p_payment_struc(i).RULE_INFORMATION_CATEGORY := 'LASLL';
6619 		--This will Null for Stubs,but we need to pass an amount.
6620             p_payment_struc(i).OBJECT1_ID1 := NVL(cur_rec.frequency_code,'M');  --Freq
6621             --asawanka added for bug #6679623 start
6622             p_payment_struc(i).OBJECT2_ID2 := '#';
6623             --asawanka added for bug #6679623 end
6624 	    p_payment_struc(i).Jtot_Object1_Code := 'OKL_TUOM';
6625 	    p_payment_struc(i).Jtot_Object2_Code := 'OKL_STRMHDR';
6626 
6627         i := i + 1;
6628         l_prev_sty_id :=  cur_rec.sty_id;
6629     END LOOP;
6630 
6631   EXCEPTION
6632     WHEN OTHERS THEN
6633       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
6634                            p_msg_name     => G_UNEXPECTED_ERROR,
6635                            p_token1       => G_SQLCODE_TOKEN,
6636                            p_token1_value => SQLCODE,
6637                            p_token2       => G_SQLERRM_TOKEN,
6638                            p_token2_value => SQLERRM);
6639   END extract_payments;
6640 
6641 
6642  PROCEDURE process_ppd(
6643     p_api_version		IN  NUMBER,
6644     p_init_msg_list		IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
6645     x_return_status		OUT NOCOPY VARCHAR2,
6646     x_msg_count			OUT NOCOPY NUMBER,
6647     x_msg_data			OUT NOCOPY VARCHAR2,
6648     p_ppd_request_id    	IN  NUMBER)
6649   AS
6650 
6651 	l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6652 	l_api_name          CONSTANT VARCHAR2(30) := 'PROCESS_PPD';
6653 	l_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
6654 	lx_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
6655 
6656 	l_post_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
6657 
6658 	l_kle_tbl        OKL_MASS_REBOOK_PVT.kle_tbl_type;
6659 	l_payment_struc  okl_mass_rebook_pvt.strm_lalevl_tbl_type;
6660         i                   NUMBER := 1;
6661 	l_tcnv_rec                   OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
6662 
6663 	CURSOR c_obj_vers_csr (a_id NUMBER)
6664 	IS
6665 	SELECT dnz_khr_id
6666            ,payment_date
6667            ,payment_amount
6668            ,object_Version_number
6669 	   ,request_status_code
6670 	FROM   okl_trx_requests
6671 	WHERE id=a_id;
6672 
6673     	CURSOR c_kle_id_csr (a_id NUMBER)
6674     	IS
6675     	SELECT base_source_id
6676     	FROM okl_trx_qte_cf_objects
6677     	WHERE qte_id=a_id;
6678 
6679 
6680    BEGIN
6681      IF (G_DEBUG_ENABLED = 'Y') THEN
6682        G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6683      END IF;
6684 
6685     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6686        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd','Begin(+)');
6687     END IF;
6688 
6689     --Print Input Variables
6690     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6691        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd.',
6692               'p_ppd_request_id :'||p_ppd_request_id);
6693     END IF;
6694 
6695     x_return_status    := OKL_API.G_RET_STS_SUCCESS;
6696 
6697    --Call start_activity to create savepoint, check compatibility and initialize message list
6698 
6699     x_return_status := OKL_API.START_ACTIVITY(
6700                               l_api_name
6701                               ,p_init_msg_list
6702                               ,'_PVT'
6703                               ,x_return_status);
6704 
6705     --Check if activity started successfully
6706 
6707     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6708              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6709     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6710              RAISE OKL_API.G_EXCEPTION_ERROR;
6711     END IF;
6712     --Get the request details.
6713 	l_trqv_rec.id := p_ppd_request_id;
6714 
6715 	OPEN c_obj_vers_csr(l_trqv_rec.id);
6716 	FETCH c_obj_vers_csr INTO l_trqv_rec.dnz_khr_id
6717                               ,l_trqv_rec.payment_date
6718                               ,l_trqv_rec.payment_amount
6719                               ,l_trqv_rec.object_Version_number
6720                               ,l_trqv_rec.request_status_code;
6721 
6722 	CLOSE c_obj_vers_csr;
6723 
6724       --Bug# 8756653
6725       -- Check if contract has been upgraded for effective dated rebook
6726       OKL_LLA_UTIL_PVT.check_rebook_upgrade
6727         (p_api_version     => p_api_version,
6728          p_init_msg_list   => p_init_msg_list,
6729          x_return_status   => x_return_status,
6730          x_msg_count       => x_msg_count,
6731          x_msg_data        => x_msg_data,
6732          p_chr_id          => l_trqv_rec.dnz_khr_id);
6733 
6734      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6735        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6736      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6737        RAISE OKL_API.G_EXCEPTION_ERROR;
6738      END IF;
6739 
6740     --Create the PPD Transaction in OKL_TRX_CONTRACTS
6741    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6742         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call to okl_transaction_pvt.create_ppd_transaction');
6743    END IF;
6744    okl_transaction_pvt.create_ppd_transaction(
6745          p_api_version        => p_api_version,
6746          p_init_msg_list      => p_init_msg_list,
6747          x_return_status      => x_return_status,
6748          x_msg_count          => x_msg_count,
6749          x_msg_data           => x_msg_data,
6750          p_chr_id             => l_trqv_rec.dnz_khr_id,
6751          p_trx_date           => l_trqv_rec.payment_date,
6752          p_trx_type           => 'PPD',
6753          p_reason_code        => G_PPD_REASON_CODE,
6754          x_tcnv_rec           => l_tcnv_rec);
6755 
6756    if (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
6757      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6758             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error occurred from okl_transaction_pvt.create_ppd_transaction');
6759        OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_msg_data=' || x_msg_data);
6760      END IF;
6761    end if;
6762    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6763        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6764    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6765        raise OKL_API.G_EXCEPTION_ERROR;
6766    END IF;
6767 
6768 
6769 
6770 
6771 	l_trqv_rec.request_status_code := 'ACCEPTED';
6772         l_trqv_rec.tcn_id              := l_tcnv_rec.id;
6773 
6774     --Update the status of the Request to "ACCEPTED"
6775 	okl_trx_requests_pub.update_trx_requests( p_api_version         => p_api_version,
6776                                                 p_init_msg_list 	=> p_init_msg_list,
6777                                                 x_return_status       	=> x_return_status,
6778                                                 x_msg_count           	=> x_msg_count,
6779                                                 x_msg_data            	=> x_msg_data,
6780                                                 p_trqv_rec            	=> l_trqv_rec,
6781                                                 x_trqv_rec            	=> lx_trqv_rec);
6782 	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6783        		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6784 	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6785 		RAISE OKL_API.G_EXCEPTION_ERROR;
6786 	END IF;
6787 
6788    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6789         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Updated Request to ACCEPTED');
6790    END IF;
6791     --Call the Rebook API to Rebook the contract.
6792 
6793     --Populate the kle ids Table.
6794     FOR cur_rec in c_kle_id_csr(p_ppd_request_id) LOOP
6795 
6796         l_kle_tbl(i).id :=  cur_rec.base_source_id;
6797         i := i+ 1;
6798     END LOOP;
6799 
6800     --Populate the Payments Table
6801 
6802 	extract_payments(p_ppd_request_id	=>  p_ppd_request_id
6803 			,p_payment_struc	=>  l_payment_struc);
6804 
6805 	IF (l_payment_struc.count = 0 ) THEN
6806 
6807 		OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
6808                            p_msg_name     => 'OKL_CS_PPD_NO_PAYMENTS');
6809                 RAISE OKL_API.G_EXCEPTION_ERROR;
6810 	END IF;
6811 
6812 	 --Print out the payment structure:
6813 
6814  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6815    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'=== Print out the payment structure before passing to OKL_PROCESS_PPD_PVT.apply_ppd === ');
6816   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Starting the Loop ....');
6817  END IF;
6818 	 FOR j in l_payment_struc.FIRST..l_payment_struc.LAST LOOP
6819  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6820    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'  ');
6821   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).chr_id ' || j ||' - '||l_payment_struc(j).chr_id);
6822   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).cle_id ' || j ||' - '||l_payment_struc(j).cle_id);
6823   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION_CATEGORY ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION_CATEGORY);
6824   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION2 ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION2);
6825   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION3 ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION3);
6826   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION5 ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION5);
6827   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION6 ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION6);
6828   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION7 ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION7);
6829   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION8 ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION8);
6830   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).RULE_INFORMATION10 ' || j ||' - '|| l_payment_struc(j).RULE_INFORMATION10);
6831   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).OBJECT1_ID1 ' || j ||' - '|| l_payment_struc(j).OBJECT1_ID1);
6832   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).jtot_object1_code ' || j ||' - '|| l_payment_struc(j).jtot_object1_code);
6833   	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_payment_struc(j).jtot_object2_code ' || j ||' - '|| l_payment_struc(j).jtot_object2_code);
6834  END IF;
6835 
6836 	 END LOOP;
6837 
6838 
6839 
6840        OKL_PROCESS_PPD_PVT.apply_ppd(p_api_version     => p_api_version,
6841                                   p_init_msg_list 	=> p_init_msg_list,
6842                                   x_return_status   => x_return_status,
6843                                   x_msg_count       => x_msg_count,
6844                                   x_msg_data        => x_msg_data,
6845                                   p_chr_id          => l_trqv_rec.dnz_khr_id,
6846                                   p_kle_tbl         => l_kle_tbl,
6847                                   p_transaction_date => l_trqv_rec.payment_date,
6848                                   p_ppd_amount      => l_trqv_rec.payment_amount,
6849                                   p_ppd_reason_code  => G_PPD_REASON_CODE,
6850                                   p_payment_struc   =>  l_payment_struc,
6851                                   p_ppd_txn_id      => l_tcnv_rec.id);
6852 
6853 
6854             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
6855                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Return Status after call to apply_ppd: '|| x_return_status);
6856             END IF;
6857 	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6858        		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6859 	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6860 		RAISE OKL_API.G_EXCEPTION_ERROR;
6861 	END IF;
6862 
6863     --Now the Rebook process has comeback succesffuly.
6864     --Update the status to "REBOOK_IN_PROCESS"
6865 
6866     	l_post_trqv_rec.id := p_ppd_request_id;
6867 
6868 	OPEN c_obj_vers_csr(l_post_trqv_rec.id);
6869 	FETCH c_obj_vers_csr INTO l_post_trqv_rec.dnz_khr_id
6870                               ,l_post_trqv_rec.payment_date
6871                               ,l_post_trqv_rec.payment_amount
6872                               ,l_post_trqv_rec.object_Version_number
6873                               ,l_post_trqv_rec.request_status_code;
6874 
6875 	CLOSE c_obj_vers_csr;
6876 
6877     IF l_post_trqv_rec.request_status_code NOT IN ('REBOOK_COMPLETE','REBOOK_IN_COMPLETE','PROCESSED') THEN
6878 	l_post_trqv_rec.request_status_code := 'REBOOK_IN_PROCESS';
6879 	--l_post_trqv_rec.tcn_id      := lx_ppd_txn_id;
6880 
6881 	okl_trx_requests_pub.update_trx_requests( p_api_version => p_api_version,
6882                                                 p_init_msg_list => p_init_msg_list,
6883                                                 x_return_status => x_return_status,
6884                                                 x_msg_count     => x_msg_count,
6885                                                 x_msg_data      => x_msg_data,
6886                                                 p_trqv_rec      => l_post_trqv_rec,
6887                                                 x_trqv_rec      => lx_trqv_rec);
6888 	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6889        		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6890 	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6891 		RAISE OKL_API.G_EXCEPTION_ERROR;
6892 	END IF;
6893     END IF;
6894 
6895 
6896     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6897        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd','End(+)');
6898     END IF;
6899 
6900  EXCEPTION
6901 
6902     WHEN OKL_API.G_EXCEPTION_ERROR THEN
6903        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6904             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd ',
6905                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
6906        END IF;
6907 
6908         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6909                                l_api_name,
6910                                G_PKG_NAME,
6911                                'OKL_API.G_RET_STS_ERROR',
6912                                x_msg_count,
6913                                x_msg_data,
6914                                '_PVT');
6915     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6916        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6917             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd ',
6918                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
6919        END IF;
6920 
6921         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6922                               l_api_name,
6923                               G_PKG_NAME,
6924                               'OKL_API.G_RET_STS_UNEXP_ERROR',
6925                               x_msg_count,
6926                               x_msg_data,
6927                               '_PVT');
6928     WHEN OTHERS THEN
6929        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6930             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd ',
6931                   'EXCEPTION :'||sqlerrm);
6932        END IF;
6933 
6934        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6935                               l_api_name,
6936                               G_PKG_NAME,
6937                               'OTHERS',
6938                               x_msg_count,
6939                               x_msg_data,
6940                               '_PVT');
6941   END process_ppd;
6942 
6943 
6944 --************************************************************************
6945 -- API for maeking the ppd stream as billed.
6946 -- Parameters: Contract Id, request Id Id
6947 -- LOGIC:
6948 
6949 --************************************************************************
6950 
6951 
6952   PROCEDURE invoice_bill_apply(
6953                 p_api_version           IN  NUMBER
6954                 ,p_init_msg_list        IN  VARCHAR2 DEFAULT OKC_API.G_FALSE
6955                 ,x_return_status        OUT  NOCOPY VARCHAR2
6956                 ,x_msg_count            OUT  NOCOPY NUMBER
6957                 ,x_msg_data             OUT  NOCOPY VARCHAR2
6958                 ,p_khr_id               IN  NUMBER
6959                 ,p_req_id               IN  NUMBER) IS
6960 
6961 	l_api_name          CONSTANT 	VARCHAR2(30) := 'INVOICE_BILL_APPLY';
6962 	l_contract_number	     	VARCHAR2(100);
6963 	l_payment_date			DATE;
6964 	l_from_bill_date		DATE;
6965 	l_to_bill_date			DATE;
6966 	l_receipt_id			NUMBER;
6967 	l_receipt_amount		NUMBER :=0; --Pass this as 0 as per BVAGHELA
6968         l_receipt_date                  DATE;
6969 
6970 	l_ar_inv_tbl 		OKL_BPD_ADVANCED_BILLING_PVT.ar_inv_tbl_type;
6971         l_xcav_tbl              OKL_BPD_ADVANCED_CASH_APP_PVT.xcav_tbl_type;
6972 	CURSOR c_get_k_number (c_id NUMBER)
6973 	IS
6974 	SELECT contract_number
6975 	from okc_k_headers_b
6976 	where id=c_id;
6977 
6978 	CURSOR c_get_req_details(c_req_id NUMBER)
6979 	IS
6980 	SELECT payment_date
6981 	      ,receipt_id
6982 	FROM okl_trx_requests
6983 	where id=c_req_id;
6984 
6985         --Bug#5032427 added cursor to get receipt_date by dkagrawa
6986         CURSOR  c_get_rcpt_date (c_rcpt_id IN NUMBER)
6987         IS
6988         SELECT receipt_date
6989         FROM OKL_CS_PPD_RECEIPTS_UV
6990         WHERE receipt_id = c_rcpt_id;
6991 
6992   BEGIN
6993     IF (G_DEBUG_ENABLED = 'Y') THEN
6994       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
6995     END IF;
6996     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
6997        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_bill_apply'
6998                                                                         ,'Begin(+)');
6999     END IF;
7000 
7001     --Print Input Variables
7002     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7003        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_bill_apply.',
7004               'p_request_id :'||p_req_id);
7005        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_bill_apply.',
7006               'p_khr_id :'||p_khr_id);
7007     END IF;
7008         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7009                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Entering invoice_bill_apply api:');
7010         END IF;
7011 
7012         x_return_status    := OKL_API.G_RET_STS_SUCCESS;
7013 
7014         --Call start_activity to create savepoint,
7015         --check compatibility and initialize message list
7016 /*
7017         x_return_status := OKL_API.START_ACTIVITY(
7018                               l_api_name
7019                               ,p_init_msg_list
7020                               ,'_PVT'
7021                               ,x_return_status);
7022 
7023         --Check if activity started successfully
7024 
7025         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7026                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7027         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7028                 RAISE OKL_API.G_EXCEPTION_ERROR;
7029         END IF;
7030 */
7031 
7032 	OPEN c_get_k_number(p_khr_id);
7033 	FETCH c_get_k_number INTO l_contract_number;
7034 	CLOSE c_get_k_number;
7035 
7036 	OPEN c_get_req_details(p_req_id);
7037 	FETCH c_get_req_details INTO l_payment_date,l_receipt_id;
7038 	CLOSE c_get_req_details;
7039 
7040 	--Set the dates for billing:
7041 	l_from_bill_date := l_payment_date -1;
7042 	l_to_bill_date := l_payment_date + 1;
7043 
7044         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7045                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Calling Invoice api:');
7046         END IF;
7047 	--Call the API to invoice the ppd stream
7048         OKL_BPD_ADVANCED_BILLING_PVT.advanced_billing( p_api_version => p_api_version,
7049                                                 p_init_msg_list => p_init_msg_list,
7050                                                 x_return_status => x_return_status,
7051                                                 x_msg_count     => x_msg_count,
7052                                                 x_msg_data      => x_msg_data,
7053                                                 p_contract_number  => l_contract_number,
7054                                                 p_from_bill_date => l_from_bill_date,
7055                                                 p_to_bill_date  => l_to_bill_date,
7056                                                 p_source  => 'PRINCIPAL_PAYDOWN',
7057                                                 x_ar_inv_tbl      => l_ar_inv_tbl,
7058 						p_ppd_flow => 'Y');
7059 
7060         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7061                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After Calling Invoice api: Count is :'|| l_ar_inv_tbl.COUNT);
7062           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Return Status after call to advanced_billing : '|| x_return_status);
7063         END IF;
7064 
7065 	--Now call the Receipt application API to apply the receipt to these
7066 	--AR invoices.
7067     IF l_receipt_id IS NOT NULL AND x_return_status = 'S' THEN
7068         --Bug#5032427 added cursor to get receipt_date by dkagrawa
7069        OPEN c_get_rcpt_date(l_receipt_id);
7070        FETCH c_get_rcpt_date INTO l_receipt_date;
7071        CLOSE c_get_rcpt_date;
7072        --Bug# 5032427 end
7073        OKL_BPD_ADVANCED_CASH_APP_PUB.AR_ADVANCE_RECEIPT( p_api_version => p_api_version,
7074                                                 p_init_msg_list => p_init_msg_list,
7075                                                 x_return_status => x_return_status,
7076                                                 x_msg_count     => x_msg_count,
7077                                                 x_msg_data      => x_msg_data,
7078 						p_xcav_tbl	=> l_xcav_tbl,
7079                                                 p_receipt_id    => l_receipt_id,
7080 						p_receipt_amount => l_receipt_amount, --PAss this as Zero
7081                                                 p_receipt_date  => l_receipt_date,  --Bug#5032427
7082                                                 p_ar_inv_tbl    => l_ar_inv_tbl);
7083 
7084     END IF;
7085 
7086  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7087    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Return Status at the end of invoice_bill_apply : '|| x_return_status);
7088  END IF;
7089 
7090     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7091        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.invoice_bill_apply'
7092                                                                         ,'End(-)');
7093     END IF;
7094 /*
7095   EXCEPTION
7096 
7097 
7098     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7099     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7100                                l_api_name,
7101                                G_PKG_NAME,
7102                                'OKL_API.G_RET_STS_ERROR',
7103                                x_msg_count,
7104                                x_msg_data,
7105                                '_PVT');
7106     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7107     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7108                               l_api_name,
7109                               G_PKG_NAME,
7110                               'OKL_API.G_RET_STS_UNEXP_ERROR',
7111                               x_msg_count,
7112                               x_msg_data,
7113                               '_PVT');
7114     WHEN OTHERS THEN
7115        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7116                               l_api_name,
7117                               G_PKG_NAME,
7118                               'OTHERS',
7119                               x_msg_count,
7120                               x_msg_data,
7121                               '_PVT');
7122 */
7123   END invoice_bill_apply;
7124 
7125 PROCEDURE process_lpd(
7126     p_api_version		IN  NUMBER,
7127     p_init_msg_list		IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
7128     x_return_status		OUT NOCOPY VARCHAR2,
7129     x_msg_count			OUT NOCOPY NUMBER,
7130     x_msg_data			OUT NOCOPY VARCHAR2,
7131     p_ppd_request_id    	IN  NUMBER)
7132   AS
7133 
7134 	l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7135 	l_api_name          CONSTANT VARCHAR2(30) := 'PROCESS_PPD';
7136 	l_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
7137 	lx_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
7138 
7139 	l_post_trqv_rec          okl_trx_requests_pub.trqv_rec_type;
7140 
7141 	l_kle_tbl        OKL_MASS_REBOOK_PVT.kle_tbl_type;
7142 	l_payment_struc  okl_mass_rebook_pvt.strm_lalevl_tbl_type;
7143 	l_tcnv_rec                   OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
7144         l_out_tcnv_rec               OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
7145 
7146 	CURSOR c_obj_vers_csr (a_id NUMBER)
7147 	IS
7148 	SELECT id
7149            ,dnz_khr_id
7150            ,payment_date
7151            ,payment_amount
7152            ,object_Version_number
7153 	   ,request_status_code,
7154            paydown_type
7155 	FROM   okl_trx_requests
7156 	WHERE id=a_id;
7157 
7158     	CURSOR c_kle_id_csr (a_id NUMBER)
7159     	IS
7160     	SELECT base_source_id
7161     	FROM okl_trx_qte_cf_objects
7162     	WHERE qte_id=a_id;
7163 
7164 
7165         CURSOR try_csr_lpd IS
7166         SELECT id
7167         FROM   okl_trx_types_tl
7168         WHERE  LANGUAGE = 'US'
7169         AND    name     = 'Loan Paydown';
7170 
7171         CURSOR try_csr_ppd IS
7172         SELECT id
7173         FROM okl_trx_types_tl
7174         WHERE LANGUAGE = 'US'
7175         AND name = 'Principal Paydown';
7176 
7177         CURSOR con_header_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
7178         SELECT currency_code,
7179                authoring_org_id
7180         FROM   okl_k_headers_full_v
7181         WHERE  id = p_chr_id;
7182 
7183         CURSOR c_tran_num_csr IS
7184         SELECT  okl_sif_seq.nextval
7185         FROM    dual;
7186 
7187         CURSOR c_stm_id_line_number(c_stm_id NUMBER) IS
7188         SELECT SE_LINE_NUMBER
7189         FROM   OKL_STRM_ELEMENTS_V
7190         WHERE  stm_id = c_stm_id
7191         ORDER BY SE_LINE_NUMBER DESC;
7192 
7193          l_stmv_rec          Okl_Streams_Pub.stmv_rec_type;
7194          lx_stmv_rec         Okl_Streams_Pub.stmv_rec_type;
7195          l_selv_rec          Okl_Streams_Pub.selv_rec_type;
7196          lx_selv_rec         Okl_Streams_Pub.selv_rec_type;
7197          L_rulv_tbl_type     OKL_RULE_PUB.rulv_tbl_type;
7198          l_pym_hdr_rec       okl_la_payments_pvt.pym_hdr_rec_type;
7199          l_pym_tbl           okl_la_payments_pvt.pym_tbl_type;
7200 
7201      CURSOR c_unscheduled_payment_str(p_contract_id IN NUMBER,
7202                                      p_sty_id      IN NUMBER) IS
7203     SELECT  rgp.cle_id cle_id,
7204         sttyp.id1   sty_id,
7205         sttyp.code  stream_type,
7206         tuom.id1 frequency,
7207         sll_rul.id rule_id,
7208         sll_rul.rule_information1 seq_num,
7209         to_date(sll_rul.rule_information2,'YYYY/MM/DD HH24:MI:SS') start_date,
7210         sll_rul.rule_information3 period_in_months,
7211         sll_rul.rule_information5 advance_periods,
7212         sll_rul.rule_information6 amount,
7213         sll_rul.rule_information10 due_arrears_yn,
7214         sll_rul.rule_information7 stub_days,
7215         sll_rul.rule_information8 stub_amount,
7216         rgp.dnz_chr_id khr_id
7217     FROM    okl_time_units_v tuom,
7218         okc_rules_b sll_rul,
7219         okl_strmtyp_source_v sttyp,
7220         okc_rules_b slh_rul,
7221         okc_rule_groups_b rgp
7222     WHERE   tuom.id1      = sll_rul.object1_id1
7223     AND     sll_rul.object2_id1 = to_char(slh_rul.id)
7224     AND     sll_rul.rgp_id    = rgp.id
7225     AND     sll_rul.rule_information_category = 'LASLL'
7226     AND     sttyp.id1 = slh_rul.object1_id1
7227     AND     slh_rul.rgp_id = rgp.id
7228     AND     slh_rul.rule_information_category = 'LASLH'
7229     AND     rgp.rgd_code = 'LALEVL'
7230     and     rgp.dnz_chr_id = p_contract_id
7231     AND     sttyp.id1 = p_sty_id;
7232 
7233      CURSOR c_unscheduled_count(p_contract_id IN NUMBER,
7234                                      p_sty_id      IN NUMBER) IS
7235     SELECT  COUNT(*)
7236     FROM    okl_time_units_v tuom,
7237         okc_rules_b sll_rul,
7238         okl_strmtyp_source_v sttyp,
7239         okc_rules_b slh_rul,
7240         okc_rule_groups_b rgp
7241     WHERE   tuom.id1      = sll_rul.object1_id1
7242     AND     sll_rul.object2_id1 = to_char(slh_rul.id)
7243     AND     sll_rul.rgp_id    = rgp.id
7244     AND     sll_rul.rule_information_category = 'LASLL'
7245     AND     sttyp.id1 = slh_rul.object1_id1
7246     AND     slh_rul.rgp_id = rgp.id
7247     AND     slh_rul.rule_information_category = 'LASLH'
7248     AND     rgp.rgd_code = 'LALEVL'
7249     and     rgp.dnz_chr_id = p_contract_id
7250     AND     sttyp.id1 = p_sty_id;
7251 
7252     CURSOR c_max_date(p_contract_id IN NUMBER,
7253                       p_sty_id      IN NUMBER) IS
7254 	SELECT  max(to_date(sll_rul.rule_information2,'YYYY/MM/DD HH24:MI:SS')) start_date
7255     FROM    okl_time_units_v tuom,
7256         okc_rules_b sll_rul,
7257         okl_strmtyp_source_v sttyp,
7258         okc_rules_b slh_rul,
7259         okc_rule_groups_b rgp
7260     WHERE   tuom.id1      = sll_rul.object1_id1
7261     AND     sll_rul.object2_id1 = to_char(slh_rul.id)
7262     AND     sll_rul.rgp_id    = rgp.id
7263     AND     sll_rul.rule_information_category = 'LASLL'
7264     AND     sttyp.id1 = slh_rul.object1_id1
7265     AND     slh_rul.rgp_id = rgp.id
7266     AND     slh_rul.rule_information_category = 'LASLH'
7267     AND     rgp.rgd_code = 'LALEVL'
7268     and     rgp.dnz_chr_id = p_contract_id
7269     AND     sttyp.id1 = p_sty_id;
7270 
7271 
7272     CURSOR c_contract_details(p_contract_id IN NUMBER) IS
7273     SELECT *
7274     FROM OKC_K_HEADERS_B
7275     WHERE ID = p_contract_id;
7276     l_contract_id      NUMBER ;
7277 
7278     l_contract_rec    okc_k_headers_b%rowtype;
7279     l_ppd_date       DATE;
7280     l_ppd_amount     NUMBER;
7281     l_new_start_date DATE;
7282     l_next_start_dt  DATE;
7283     l_no_months      NUMBER;
7284     l_no_Days        NUMBER;
7285     l_count          NUMBER;
7286     l_ppd_day        NUMBER;
7287     l_start_dt_day   NUMBER;
7288     i                NUMBER := 1;
7289     l_max_date       DATE;
7290     j                NUMBER;
7291     l_previous_month DATE;
7292     l_last_day       NUMBER;
7293     l_try_id            NUMBER;
7294     l_upp_sty_id        NUMBER;
7295     l_sty_id            NUMBER;
7296     l_khr_id            NUMBER;
7297     l_kle_id            NUMBER;
7298     l_rule_id           NUMBER;
7299     l_comments          VARCHAR2(1995);
7300 
7301    BEGIN
7302      IF (G_DEBUG_ENABLED = 'Y') THEN
7303        G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
7304      END IF;
7305 
7306     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7307        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_lpd','Begin(+)');
7308     END IF;
7309 
7310     --Print Input Variables
7311     IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7312        FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_lpd.',
7313               'p_ppd_request_id :'||p_ppd_request_id);
7314     END IF;
7315 
7316     x_return_status    := OKL_API.G_RET_STS_SUCCESS;
7317 
7318    --Call start_activity to create savepoint, check compatibility and initialize message list
7319 
7320     x_return_status := OKL_API.START_ACTIVITY(
7321                               l_api_name
7322                               ,p_init_msg_list
7323                               ,'_PVT'
7324                               ,x_return_status);
7325 
7326     --Check if activity started successfully
7327 
7328     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7329              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7330     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7331              RAISE OKL_API.G_EXCEPTION_ERROR;
7332     END IF;
7333     --Get the request details.
7334 	l_trqv_rec.id := p_ppd_request_id;
7335 
7336 	OPEN c_obj_vers_csr(l_trqv_rec.id);
7337 	FETCH c_obj_vers_csr INTO l_trqv_rec.id
7338                               ,l_trqv_rec.dnz_khr_id
7339                               ,l_trqv_rec.payment_date
7340                               ,l_trqv_rec.payment_amount
7341                               ,l_trqv_rec.object_Version_number
7342                               ,l_trqv_rec.request_status_code
7343                               ,l_trqv_rec.paydown_type;
7344 
7345 	CLOSE c_obj_vers_csr;
7346 
7347     --Create the LPD Transaction in OKL_TRX_CONTRACTS
7348    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7349         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before call to okl_transaction_pvt.create_ppd_transaction');
7350    END IF;
7351     l_try_id := NULL;
7352 
7353   --check the type of paydown
7354    IF l_trqv_rec.paydown_type = 'L' THEN
7355       OPEN try_csr_lpd;
7356       FETCH try_csr_lpd INTO l_try_id;
7357       CLOSE try_csr_lpd;
7358       l_tcnv_rec.description := 'Loan Paydown';
7359    ELSIF l_trqv_rec.paydown_type = 'P' THEN
7360       OPEN try_csr_ppd;
7361       FETCH try_csr_ppd INTO l_try_id;
7362       CLOSE try_csr_ppd;
7363       l_tcnv_rec.description := 'Principal Paydown';
7364    END IF;
7365 
7366       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7367               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'AFTER getting try id');
7368       END IF;
7369 
7370       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7371               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Try ID: '||l_try_id);
7372       END IF;
7373 
7374       l_tcnv_rec.try_id                    := l_try_id;
7375       l_tcnv_rec.tsu_code                  := 'ENTERED';
7376       l_tcnv_rec.tcn_type                  := 'LPD';
7377       l_tcnv_rec.khr_id                    := l_trqv_rec.dnz_khr_id;
7378       l_tcnv_rec.date_transaction_occurred := l_trqv_rec.payment_date;
7379       l_tcnv_rec.legal_entity_id           := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(l_trqv_rec.dnz_khr_id); --dkagrawa added to populate le_id
7380 
7381       FOR con_header_rec IN con_header_csr (l_trqv_rec.dnz_khr_id)
7382       LOOP
7383          l_tcnv_rec.org_id        := con_header_rec.authoring_org_id;
7384          l_tcnv_rec.currency_code := con_header_rec.currency_code;
7385       END LOOP;
7386 
7387  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7388     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'BEFORE calling okl_trx_contracts_pub.create_trx_contracts');
7389  END IF;
7390       -- Create Transaction Header only
7391       okl_trx_contracts_pub.create_trx_contracts(
7392                                                  p_api_version    => 1.0,
7393                                                  p_init_msg_list  => p_init_msg_list,
7394                                                  x_return_status  => x_return_status,
7395                                                  x_msg_count      => x_msg_count,
7396                                                  x_msg_data       => x_msg_data,
7397                                                  p_tcnv_rec       => l_tcnv_rec,
7398                                                  x_tcnv_rec       => l_out_tcnv_rec
7399                                                 );
7400 
7401       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7402               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'AFTER calling okl_trx_contracts_pub.create_trx_contracts');
7403       END IF;
7404 
7405       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
7406          RAISE OKC_API.G_EXCEPTION_ERROR;
7407       END IF;
7408 
7409 
7410 
7411    if (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
7412      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7413             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Error occurred from creating loan transactions');
7414        OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_msg_data=' || x_msg_data);
7415      END IF;
7416    end if;
7417    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7418        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7419    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7420        raise OKL_API.G_EXCEPTION_ERROR;
7421    END IF;
7422 
7423 
7424 
7425 
7426 	l_trqv_rec.request_status_code := 'ACCEPTED';
7427         l_trqv_rec.tcn_id              := l_out_tcnv_rec.id;
7428 
7429     --Update the status of the Request to "ACCEPTED"
7430 	okl_trx_requests_pub.update_trx_requests( 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_trqv_rec            	=> l_trqv_rec,
7436                                                 x_trqv_rec            	=> lx_trqv_rec);
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 
7443    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7444         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Updated Request to ACCEPTED');
7445    END IF;
7446 
7447 --get the dependent stream type
7448     --check whether loan paydown or principal paydown
7449     IF l_trqv_rec.paydown_type = 'L' THEN
7450         l_comments := 'Unscheduled Loan Payment';
7451 
7452          OKL_STREAMS_UTIL.get_dependent_stream_type(
7453                  p_khr_id                        => l_trqv_rec.dnz_khr_id
7454                  ,p_primary_sty_purpose          => G_RENT_STREAM
7455                  ,p_dependent_sty_purpose        => G_UNSCHED_LP_STREAM
7456                  ,x_return_status                => x_return_status
7457                  ,x_dependent_sty_id             => l_upp_sty_id);
7458         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7459                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type LP: '|| x_return_status);
7460         END IF;
7461 
7462 
7463 	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7464        		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7465 	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7466 		RAISE OKL_API.G_EXCEPTION_ERROR;
7467 	END IF;
7468     ELSIF l_trqv_rec.paydown_type = 'P' THEN
7469       l_comments := 'Unscheduled Principal Payment';
7470       OKL_STREAMS_UTIL.get_dependent_stream_type(
7471                  p_khr_id                        => l_trqv_rec.dnz_khr_id
7472                  ,p_primary_sty_purpose          => G_RENT_STREAM
7473                  ,p_dependent_sty_purpose        => G_UNSCHED_PP_STREAM
7474                  ,x_return_status                => x_return_status
7475                  ,x_dependent_sty_id             => l_upp_sty_id);
7476         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7477                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_depend_stream type PP: '|| x_return_status);
7478         END IF;
7479 
7480 
7481         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7482                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7483         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7484                 RAISE OKL_API.G_EXCEPTION_ERROR;
7485         END IF;
7486 
7487     END IF;
7488 
7489 --Updating Payments on the contract
7490 --Bug # 4880714
7491   l_contract_id  := l_trqv_rec.dnz_khr_id;
7492   l_ppd_date     := l_trqv_rec.payment_date;
7493   l_ppd_amount  :=  l_trqv_rec.payment_amount;
7494 
7495    OPEN c_unscheduled_count(l_contract_id,l_upp_sty_id);
7496    FETCH c_unscheduled_count INTO l_count;
7497    CLOSE c_unscheduled_count;
7498 
7499    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7500         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'payment count: ' ||l_count);
7501    END IF;
7502 
7503    OPEN c_contract_details(l_contract_id);
7504    FETCH c_contract_details INTO l_contract_rec;
7505    CLOSE c_contract_details;
7506 
7507    OPEN c_max_date(l_contract_id,l_upp_sty_id);
7508    FETCH c_max_date INTO l_max_date;
7509    CLOSE c_max_date;
7510   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7511       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'maximum date on the payments: '||l_max_date);
7512   END IF;
7513 
7514 
7515 --Populating the Payment header record.
7516      l_pym_hdr_rec.structure       := '0';
7517      l_pym_hdr_rec.frequency       := 'M';
7518      l_pym_hdr_rec.arrears         := 'N';
7519 
7520      IF NVL(l_count,0) = 0 THEN
7521         l_no_months := FLOOR(MONTHS_BETWEEN(l_ppd_date,l_contract_rec.start_date));
7522         l_ppd_day := to_number(substr(to_char(l_ppd_date,'DD-MON-YY'),1,2));
7523         l_start_dt_day := to_number(substr(to_char(l_contract_rec.start_date,'DD-MON-YY'),1,2));
7524 
7525         IF l_ppd_day > l_start_dt_day THEN
7526            l_no_days := l_ppd_day - l_start_Dt_day;
7527         ELSIF l_start_dt_day > l_ppd_day THEN
7528           l_previous_month := l_ppd_date - 30;
7529           l_no_months := FLOOR(MONTHS_BETWEEN(l_previous_month,l_contract_rec.start_date));
7530           l_last_day  := substr(to_char(last_day(trunc(l_previous_month)),'DD-MON-YYYY'),1,2);
7531           l_no_days  := (l_last_day - l_start_dt_day) + l_ppd_day;
7532         ELSIF l_ppd_day = l_start_dt_day THEN
7533           l_no_days := 0;
7534         END IF;
7535 
7536         l_new_start_date := ADD_MONTHS(l_contract_rec.start_date,l_no_months);
7537 
7538        IF l_no_months > 0 THEN
7539          l_pym_tbl(1).amount := 0;
7540          l_pym_tbl(1).period   := l_no_months;
7541          l_pym_tbl(1).update_type := 'CREATE';
7542 
7543          IF l_no_days <> 0 THEN
7544            l_pym_tbl(2).stub_amount := 0;
7545            l_pym_tbl(2).stub_days   := l_no_days;
7546            l_pym_tbl(2).update_type := 'CREATE';
7547          END IF;
7548        ELSE
7549          IF l_ppd_day > l_start_dt_day THEN
7550            l_no_days := l_ppd_day - l_start_Dt_day;
7551          ELSIF l_start_dt_day > l_ppd_day THEN
7552            l_last_day  := substr(to_char(last_day(trunc(l_contract_rec.start_Date)),'DD-MON-YYYY'),1,2);
7553            l_no_days  := (l_last_day - l_start_dt_day) + l_ppd_day;
7554          END IF;
7555          l_pym_tbl(1).stub_amount := 0;
7556          l_pym_tbl(1).stub_days   := l_no_days;
7557          l_pym_tbl(1).update_type := 'CREATE';
7558        END IF;
7559 
7560        l_pym_tbl(3).stub_amount := l_ppd_amount;
7561        l_pym_tbl(3).stub_days   := 1;
7562        l_pym_tbl(3).update_type := 'CREATE';
7563 
7564 
7565      ELSIF NVL(l_count,0) > 0 THEN
7566          FOR l_payment_rec IN c_unscheduled_payment_str(l_contract_id,l_upp_sty_id) LOOP
7567            l_pym_tbl(i).sort_date := l_payment_rec.start_date;
7568            IF l_payment_rec.period_in_months IS NOT NULL THEN
7569              l_pym_tbl(i).period := l_payment_rec.period_in_months;
7570              l_pym_tbl(i).amount := l_payment_rec.amount;
7571            ELSIF l_payment_rec.stub_days IS NOT NULL THEN
7572              l_pym_tbl(i).stub_days := l_payment_rec.stub_days;
7573  	     l_pym_tbl(i).stub_amount := l_payment_rec.stub_amount;
7574 	   END IF;
7575    	   l_pym_tbl(i).rule_id := l_payment_rec.rule_id;
7576        	   l_pym_tbl(i).update_type := 'DELETE';
7577 	   i := i + 1;
7578          END LOOP;
7579 
7580         okl_la_payments_pvt.process_payment(p_api_version                  => p_api_version,
7581                                           p_init_msg_list                  => p_init_msg_list,
7582                                           x_return_status                  => x_return_status,
7583                                           x_msg_count                      => x_msg_count,
7584                                           x_msg_data                       => x_msg_data,
7585                                           p_chr_id                         => l_contract_id,
7586                                           p_service_fee_id                 => NULL,
7587                                           p_asset_id                       => NULL,
7588                                           p_payment_id                     => l_upp_sty_id,
7589                                           p_pym_hdr_rec                    => l_pym_hdr_rec,
7590                                           p_pym_tbl                        => l_pym_tbl,
7591                                           p_update_type                    => 'DELETE',
7592                                           x_rulv_tbl                       => l_rulv_tbl_type    );
7593          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7594                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'status after deleting original payments: '||x_return_status);
7595          END IF;
7596 
7597          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7598                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7599          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7600                 RAISE OKL_API.G_EXCEPTION_ERROR;
7601          END IF;
7602 
7603         i := 0;
7604         IF l_pym_tbl.COUNT > 0 THEN
7605            i := l_pym_tbl.FIRST;
7606            LOOP
7607              l_pym_tbl(i).sort_date := NULL;
7608              l_pym_tbl(i).rule_id := NULL;
7609              l_pym_tbl(i).update_type := 'CREATE';
7610              EXIT WHEN i = l_pym_tbl.LAST;
7611              i := l_pym_tbl.NEXT(i);
7612            END LOOP;
7613         END IF;
7614 
7615         i := i + 1;
7616         l_new_start_date := l_max_date + 1;
7617         l_no_months := FLOOR(MONTHS_BETWEEN(l_ppd_date,l_new_start_date));
7618 
7619         l_ppd_day      := to_number(substr(to_char(l_ppd_date,'DD-MON-YY'),1,2));
7620         l_start_dt_day := to_number(substr(to_char(l_new_start_date,'DD-MON-YY'),1,2));
7621 
7622         IF l_ppd_day > l_start_dt_day THEN
7623            l_no_days := l_ppd_day - l_start_Dt_day;
7624         ELSIF l_start_dt_day > l_ppd_day THEN
7625            l_previous_month := l_ppd_date - 30;
7626            l_no_months := FLOOR(MONTHS_BETWEEN(l_previous_month,l_new_start_date));
7627            l_last_day  := substr(to_char(last_day(trunc(l_previous_month)),'DD-MON-YYYY'),1,2);
7628            l_no_days  := (l_last_day - l_start_dt_day) + l_ppd_day;
7629         ELSIF l_ppd_day = l_start_dt_day THEN
7630            l_no_days := 0;
7631         END IF;
7632 
7633         IF l_no_months > 0 THEN
7634            l_next_start_dt := ADD_MONTHS(l_new_start_date,l_no_months);
7635            l_pym_tbl(i).amount := 0;
7636            l_pym_tbl(i).period   := l_no_months;
7637            l_pym_tbl(i).update_type := 'CREATE';
7638 
7639            IF l_no_days <> 0 THEN
7640              i := i + 1;
7641              l_pym_tbl(i).stub_amount := 0;
7642              l_pym_tbl(i).stub_days   := l_no_days;
7643              l_pym_tbl(i).update_type := 'CREATE';
7644            END IF;
7645          ELSIF l_no_months = 0 THEN
7646            IF l_ppd_day > l_start_dt_day THEN
7647              l_no_days := l_ppd_day - l_start_Dt_day;
7648            ELSIF l_start_dt_day > l_ppd_day THEN
7649              l_last_day  := substr(to_char(last_day(trunc(l_new_start_Date)),'DD-MON-YYYY'),1,2);
7650              l_no_days  := (l_last_day - l_start_dt_day) + l_ppd_day;
7651            END IF;
7652            l_pym_tbl(i).stub_amount := 0;
7653            l_pym_tbl(i).stub_days   := l_no_days;
7654            l_pym_tbl(i).update_type := 'CREATE';
7655          END IF;
7656          i := i + 1;
7657            l_pym_tbl(i).stub_amount := l_ppd_amount;
7658            l_pym_tbl(i).stub_days   := 1;
7659            l_pym_tbl(i).update_type := 'CREATE';
7660 
7661      END IF;
7662 
7663      j := 0;
7664     IF l_pym_tbl.COUNT > 0 THEN
7665       j := l_pym_tbl.FIRST;
7666       LOOP
7667         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7668                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'period '   || l_pym_tbl(j).period);
7669           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'amount'  ||l_pym_tbl(j).amount);
7670           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'stub days '|| l_pym_tbl(j).stub_days);
7671           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'stub amount '||l_pym_tbl(j).stub_amount);
7672           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'update_type '||l_pym_tbl(j).update_type);
7673         END IF;
7674         EXIT WHEN j = l_pym_tbl.LAST;
7675         j := l_pym_tbl.NEXT(j);
7676       END LOOP;
7677     END IF;
7678 
7679      --Update the Payment on the contract with the Unscheduled  Payment.
7680         okl_la_payments_pvt.process_payment(p_api_version                  => p_api_version,
7681                                             p_init_msg_list                => p_init_msg_list,
7682                                             x_return_status                => x_return_status,
7683                                             x_msg_count                    => x_msg_count,
7684                                             x_msg_data                     => x_msg_data,
7685                                             p_chr_id                       => l_contract_id,
7686                                             p_service_fee_id               => NULL,
7687                                             p_asset_id                     => NULL,
7688                                             p_payment_id                   => l_upp_sty_id,
7689                                             p_pym_hdr_rec                  => l_pym_hdr_rec,
7690                                             p_pym_tbl                      => l_pym_tbl,
7691                                             p_update_type                  => 'CREATE',
7692                                             x_rulv_tbl                     => l_rulv_tbl_type    );
7693 
7694         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7695                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'status after updating payments: '||x_return_status);
7696         END IF;
7697         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7698                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7699         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7700                 RAISE OKL_API.G_EXCEPTION_ERROR;
7701         END IF;
7702 
7703 
7704 -- Creating stream for Unscheduled  Payment
7705 
7706                OPEN  c_tran_num_csr;
7707                FETCH c_tran_num_csr INTO l_stmv_rec.transaction_number;
7708                CLOSE c_tran_num_csr;
7709 
7710 
7711                l_stmv_rec.sty_id               := l_upp_sty_id;
7712                l_stmv_rec.khr_id                := l_trqv_rec.dnz_khr_id;
7713                l_stmv_rec.kle_id                := NULL;
7714                l_stmv_rec.sgn_code              := 'MANL';
7715                l_stmv_rec.say_code              := 'CURR';
7716                l_stmv_rec.active_yn             := 'Y';
7717                l_stmv_rec.date_current          := SYSDATE;
7718                l_stmv_rec.comments              := l_comments;
7719 
7720 
7721                Okl_Streams_Pub.create_streams(
7722                       p_api_version    =>     p_api_version,
7723                       p_init_msg_list  =>     p_init_msg_list,
7724                       x_return_status  =>     x_return_status,
7725                       x_msg_count      =>     x_msg_count,
7726                       x_msg_data       =>     x_msg_data,
7727                       p_stmv_rec       =>     l_stmv_rec,
7728                       x_stmv_rec       =>     lx_stmv_rec);
7729  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7730     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Return status from creating streams'|| x_return_status);
7731  END IF;
7732 
7733         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7734        		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7735 	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7736 		RAISE OKL_API.G_EXCEPTION_ERROR;
7737 	END IF;
7738 
7739        l_selv_rec.stm_id := lx_stmv_rec.id;
7740 
7741 --Creating stream elements
7742          l_selv_rec.accrued_yn   := 'N';
7743           l_selv_rec.comments     := l_comments;
7744           l_selv_rec.stream_element_date := l_trqv_rec.payment_date;
7745          --bug 4889833 commenting date billed
7746          --l_selv_rec.date_billed := SYSDATE;
7747           l_selv_rec.amount := l_trqv_rec.payment_amount;
7748 
7749           -- to populate mandatory field in table Okl_Strm_Elements.
7750           l_selv_rec.se_line_number := NULL;
7751           OPEN  c_stm_id_line_number(l_selv_rec.stm_id);
7752           FETCH c_stm_id_line_number INTO l_selv_rec.se_line_number;
7753           if(c_stm_id_line_number%rowcount = 0) THEN
7754             l_selv_rec.se_line_number := 1;
7755           else
7756             l_selv_rec.se_line_number := l_selv_rec.se_line_number+1;
7757           end if;
7758           CLOSE c_stm_id_line_number;
7759 
7760          Okl_Streams_Pub.create_stream_elements(
7761                 p_api_version    =>     p_api_version,
7762                 p_init_msg_list  =>     p_init_msg_list,
7763                 x_return_status  =>     x_return_status,
7764                 x_msg_count      =>     x_msg_count,
7765                 x_msg_data       =>     x_msg_data,
7766                 p_selv_rec       =>     l_selv_rec,
7767                 x_selv_rec       =>     lx_selv_rec);
7768 
7769  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7770     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Return status from creating stream elements'|| x_return_status);
7771  END IF;
7772 
7773 
7774               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7775                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7776               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7777                     RAISE OKL_API.G_EXCEPTION_ERROR;
7778               END IF;
7779 
7780 
7781 
7782 
7783 /*	l_trqv_rec.request_status_code := 'SUBMITTED';
7784 
7785 
7786 	okl_trx_requests_pub.update_trx_requests( p_api_version => p_api_version,
7787                                                 p_init_msg_list => p_init_msg_list,
7788                                                 x_return_status => x_return_status,
7789                                                 x_msg_count     => x_msg_count,
7790                                                 x_msg_data      => x_msg_data,
7791                                                 p_trqv_rec      => l_trqv_rec,
7792                                                 x_trqv_rec      => lx_trqv_rec);
7793 	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7794        		RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7795 	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7796 		RAISE OKL_API.G_EXCEPTION_ERROR;
7797 	END IF; */
7798 
7799       --Call the WF which does the following
7800         	-- 1. Create online AR Invoice.
7801         	-- 2. Mark the "Unscheduled Principal Payment" stream as Billed.
7802         	-- 3. Apply the selected receipt on the generated invoices.
7803         	-- 4. Update the status of the request to Processed. --Call BPD API to create AR journal entries
7804 
7805      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7806             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling WF');
7807      END IF;
7808 
7809 	 OKL_CS_WF.raise_principal_paydown_event(l_trqv_rec.id);
7810 
7811  IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
7812    	OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After calling WF');
7813  END IF;
7814 
7815 
7816     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7817        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd','End(+)');
7818     END IF;
7819 
7820  EXCEPTION
7821 
7822     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7823        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7824             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd ',
7825                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_ERROR');
7826        END IF;
7827 
7828         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7829                                l_api_name,
7830                                G_PKG_NAME,
7831                                'OKL_API.G_RET_STS_ERROR',
7832                                x_msg_count,
7833                                x_msg_data,
7834                                '_PVT');
7835     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7836        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7837             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd ',
7838                   'EXCEPTION :'||'OKL_API.G_EXCEPTION_UNEXPECTED_ERROR');
7839        END IF;
7840 
7841         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7842                               l_api_name,
7843                               G_PKG_NAME,
7844                               'OKL_API.G_RET_STS_UNEXP_ERROR',
7845                               x_msg_count,
7846                               x_msg_data,
7847                               '_PVT');
7848     WHEN OTHERS THEN
7849        IF (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
7850             FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,'OKL_CS_PRINCIPAL_PAYDOWN_PVT.process_ppd ',
7851                   'EXCEPTION :'||sqlerrm);
7852        END IF;
7853 
7854        x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7855                               l_api_name,
7856                               G_PKG_NAME,
7857                               'OTHERS',
7858                               x_msg_count,
7859                               x_msg_data,
7860                               '_PVT');
7861   END process_lpd;
7862 
7863 
7864 
7865 END OKL_CS_PRINCIPAL_PAYDOWN_PVT;