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