[Home] [Help]
PACKAGE BODY: APPS.LNS_FUNDING_PUB
Source
1 PACKAGE BODY LNS_FUNDING_PUB as
2 /* $Header: LNS_FUNDING_B.pls 120.65.12020000.2 2012/07/19 20:58:18 scherkas ship $ */
3
4
5 /*=======================================================================+
6 | Package Global Constants
7 +=======================================================================*/
8 G_PKG_NAME CONSTANT VARCHAR2(30):= 'LNS_FUNDING_PUB';
9 G_LOG_ENABLED varchar2(5);
10 G_MSG_LEVEL NUMBER;
11 g_org_id number;
12
13
14 PROCEDURE UPDATE_LOAN_FUNDING_STATUS(P_LOAN_ID number);
15
16 /*========================================================================
17 | PRIVATE PROCEDURE LogMessage
18 |
19 | DESCRIPTION
20 | This procedure logs debug messages to db and to CM log
21 |
22 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
23 | init
24 |
25 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
26 | None
27 |
28 | PARAMETERS
29 | p_msg_level IN Debug msg level
30 | p_msg IN Debug msg itself
31 |
32 | KNOWN ISSUES
33 | None
34 |
35 | NOTES
36 | Any interesting aspect of the code in the package body which needs
37 | to be stated.
38 |
39 | MODIFICATION HISTORY
40 | Date Author Description of Changes
41 | 01-01-2004 scherkas Created
42 |
43 *=======================================================================*/
44 Procedure LogMessage(p_msg_level IN NUMBER, p_msg in varchar2)
45 IS
46 BEGIN
47 if (p_msg_level >= G_MSG_LEVEL) then
48
49 FND_LOG.STRING(p_msg_level, G_PKG_NAME, p_msg);
50
51 end if;
52
53 EXCEPTION
54 WHEN OTHERS THEN
55 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'ERROR: ' || sqlerrm);
56 END;
57
58
59
60
61 /*========================================================================
62 | PUBLIC FUNCTION IS_SUBMIT_DISB_ENABLED
63 |
64 | DESCRIPTION
65 | This function returns is submition of a disbursement header enabled or not.
66 |
67 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
68 | None
69 |
70 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
71 | LogMessage
72 |
73 | PARAMETERS
74 | P_DISB_HEADER_D IN Disbursement header
75 |
76 | KNOWN ISSUES
77 | None
78 |
79 | NOTES
80 |
81 | MODIFICATION HISTORY
82 | Date Author Description of Changes
83 | 18-07-2005 scherkas Created
84 |
85 *=======================================================================*/
86 FUNCTION IS_SUBMIT_DISB_ENABLED(P_DISB_HEADER_ID IN NUMBER) RETURN VARCHAR2
87 IS
88
89 /*-----------------------------------------------------------------------+
90 | Local Variable Declarations and initializations |
91 +-----------------------------------------------------------------------*/
92 l_api_name CONSTANT VARCHAR2(30) := 'IS_SUBMIT_DISB_ENABLED';
93 l_return VARCHAR2(1);
94
95 /*-----------------------------------------------------------------------+
96 | Cursor Declarations |
97 +-----------------------------------------------------------------------*/
98
99 CURSOR get_data_crs(P_DISB_HEADER_ID NUMBER) IS
100 select
101 CASE
102 WHEN ((nvl(loan.CURRENT_PHASE, 'TERM') = 'OPEN' and (loan.LOAN_STATUS = 'ACTIVE' OR loan.LOAN_STATUS = 'APPROVED')) OR
103 (nvl(loan.CURRENT_PHASE, 'TERM') = 'TERM' and loan.MULTIPLE_FUNDING_FLAG = 'N' and loan.LOAN_STATUS = 'APPROVED'))
104 THEN
105 CASE
106 /*
107 WHEN ((select count(1) from LNS_COND_ASSIGNMENTS where DISB_HEADER_ID = head.DISB_HEADER_ID and
108 MANDATORY_FLAG = 'Y' and (CONDITION_MET_FLAG is null or CONDITION_MET_FLAG = 'N') and
109 (end_date_active is null or trunc(end_date_active) > trunc(sysdate))) > 0) THEN
110 'N'
111 ELSE
112 CASE
113 */
114 WHEN (head.status = 'IN_FUNDING') THEN
115 'N'
116 WHEN (head.status = 'FULLY_FUNDED') THEN
117 'N'
118 WHEN (head.status = 'PARTIALLY_FUNDED') THEN
119 CASE
120 WHEN ((select nvl(count(1), 0) from lns_disb_lines
121 where disb_header_id = head.DISB_HEADER_ID and (status is null or status = 'FUNDING_ERROR')) > 0) THEN
122 'Y'
123 ELSE
124 'N'
125 END
126 WHEN (head.status = 'FUNDING_ERROR') THEN
127 'Y'
128 WHEN (head.status = 'CANCELLED') THEN
129 'N'
130 WHEN (head.status is null) THEN
131 CASE
132 WHEN ((select nvl(max(DISBURSEMENT_NUMBER), 0) + 1 from lns_disb_headers
133 where loan_id = head.loan_id and status = 'FULLY_FUNDED') = head.DISBURSEMENT_NUMBER) THEN
134 'Y'
135 ELSE
136 'N'
137 END
138 END
139 -- END
140 ELSE
141 'N'
142 END
143 from lns_disb_headers head,
144 lns_loan_headers loan
145 where head.DISB_HEADER_ID = P_DISB_HEADER_ID and
146 head.LOAN_ID = loan.LOAN_ID;
147
148 BEGIN
149 l_return := 'N';
150 OPEN get_data_crs(P_DISB_HEADER_ID);
151 FETCH get_data_crs INTO l_return;
152 CLOSE get_data_crs;
153 LogMessage(FND_LOG.LEVEL_STATEMENT, 'IS_SUBMIT_DISB_ENABLED for disb header ' || P_DISB_HEADER_ID || ' = ' || l_return);
154
155 return l_return;
156 END;
157
158
159
160 /*========================================================================
161 | PUBLIC FUNCTION IS_CANCEL_DISB_ENABLED
162 |
163 | DESCRIPTION
164 | This function returns is cancel of a disbursements enabled or not.
165 |
166 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
167 | None
168 |
169 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
170 | LogMessage
171 |
172 | PARAMETERS
173 | P_LOAN_D IN Loan
174 |
175 | KNOWN ISSUES
176 | None
177 |
178 | NOTES
179 |
180 | MODIFICATION HISTORY
181 | Date Author Description of Changes
182 | 18-07-2005 scherkas Created
183 |
184 *=======================================================================*/
185 FUNCTION IS_CANCEL_DISB_ENABLED(P_LOAN_ID IN NUMBER) RETURN VARCHAR2
186 IS
187
188 /*-----------------------------------------------------------------------+
189 | Local Variable Declarations and initializations |
190 +-----------------------------------------------------------------------*/
191 l_api_name CONSTANT VARCHAR2(30) := 'IS_CANCEL_DISB_ENABLED';
192 l_return VARCHAR2(1);
193
194 /*-----------------------------------------------------------------------+
195 | Cursor Declarations |
196 +-----------------------------------------------------------------------*/
197
198 CURSOR get_data_crs(P_LOAN_ID NUMBER) IS
199 select
200 CASE
201 WHEN ((nvl(loan.CURRENT_PHASE, 'TERM') = 'OPEN' and
202 (loan.LOAN_STATUS = 'ACTIVE' OR loan.LOAN_STATUS = 'APPROVED')) OR
203 (nvl(loan.CURRENT_PHASE, 'TERM') = 'TERM' and
204 loan.MULTIPLE_FUNDING_FLAG = 'N' and loan.LOAN_STATUS = 'APPROVED'))
205 THEN
206 CASE
207 WHEN ((select nvl(count(1), 0) from lns_disb_lines line, lns_disb_headers head
208 where head.loan_id = loan.LOAN_ID and head.disb_header_id = line.disb_header_id and
209 (line.status is null or line.status = 'FUNDING_ERROR' or line.status = 'IN_FUNDING')) > 0) THEN
210 'Y'
211 ELSE
212 'N'
213 END
214 ELSE
215 'N'
216 END
217 from lns_loan_headers_all loan
218 where loan.LOAN_ID = P_LOAN_ID;
219
220 BEGIN
221 l_return := 'N';
222 OPEN get_data_crs(P_LOAN_ID);
223 FETCH get_data_crs INTO l_return;
224 CLOSE get_data_crs;
225 LogMessage(FND_LOG.LEVEL_STATEMENT, 'IS_CANCEL_DISB_ENABLED for loan ' || P_LOAN_ID || ' = ' || l_return);
226
227 return l_return;
228 END;
229
230
231
232 /*========================================================================
233 | PUBLIC FUNCTION IS_DISB_HDR_READ_ONLY
234 |
235 | DESCRIPTION
236 | This function returns is disb header read only or not.
237 |
238 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
239 | None
240 |
241 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
242 | LogMessage
243 |
244 | PARAMETERS
245 | P_DISB_HEADER_ID IN Disbursement header
246 |
247 | KNOWN ISSUES
248 | None
249 |
250 | NOTES
251 |
252 | MODIFICATION HISTORY
253 | Date Author Description of Changes
254 | 13-09-2005 scherkas Created
255 |
256 *=======================================================================*/
257 FUNCTION IS_DISB_HDR_READ_ONLY(P_DISB_HEADER_ID IN NUMBER) RETURN VARCHAR2
258 IS
259
260 /*-----------------------------------------------------------------------+
261 | Local Variable Declarations and initializations |
262 +-----------------------------------------------------------------------*/
263 l_api_name CONSTANT VARCHAR2(30) := 'IS_DISB_HDR_READ_ONLY';
264 l_return VARCHAR2(1);
265
266 /*-----------------------------------------------------------------------+
267 | Cursor Declarations |
268 +-----------------------------------------------------------------------*/
269
270 CURSOR get_data_crs(P_DISB_HEADER_ID NUMBER) IS
271 select
272 CASE
273 WHEN ((nvl(loan.CURRENT_PHASE, 'TERM') = 'OPEN' and (loan.LOAN_STATUS = 'ACTIVE' OR loan.LOAN_STATUS = 'APPROVED')) OR
274 (nvl(loan.CURRENT_PHASE, 'TERM') = 'TERM' and loan.MULTIPLE_FUNDING_FLAG = 'N' and loan.LOAN_STATUS = 'APPROVED'))
275 THEN
276 CASE
277 WHEN (head.status is not null and (head.status = 'FULLY_FUNDED' or head.status = 'CANCELLED' or head.status = 'IN_FUNDING')) THEN
278 'Y'
279 WHEN (head.status is not null and head.status = 'PARTIALLY_FUNDED') THEN
280 CASE
281 WHEN ((select nvl(count(1), 0) from lns_disb_lines
282 where disb_header_id = head.DISB_HEADER_ID and (status is null or status = 'FUNDING_ERROR')) > 0) THEN
283 'N'
284 ELSE
285 'Y'
286 END
287 ELSE
288 'N'
289 END
290 ELSE
291 'Y'
292 END
293 from lns_disb_headers head,
294 lns_loan_headers_all loan
295 where head.DISB_HEADER_ID = P_DISB_HEADER_ID and
296 head.loan_id = loan.loan_id;
297
298 BEGIN
299 l_return := 'N';
300 OPEN get_data_crs(P_DISB_HEADER_ID);
301 FETCH get_data_crs INTO l_return;
302 CLOSE get_data_crs;
303 LogMessage(FND_LOG.LEVEL_STATEMENT, 'IS_DISB_HDR_READ_ONLY for disb header ' || P_DISB_HEADER_ID || ' = ' || l_return);
304
305 return l_return;
306 END;
307
308
309
310 /*========================================================================
311 | PUBLIC FUNCTION IS_DISB_LINE_READ_ONLY
312 |
313 | DESCRIPTION
314 | This function returns is disb line read only or not.
315 |
316 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
317 | None
318 |
319 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
320 | LogMessage
321 |
322 | PARAMETERS
323 | P_DISB_LINE_ID IN Disbursement line
324 |
325 | KNOWN ISSUES
326 | None
327 |
328 | NOTES
329 |
330 | MODIFICATION HISTORY
331 | Date Author Description of Changes
332 | 13-09-2005 scherkas Created
333 |
334 *=======================================================================*/
335 FUNCTION IS_DISB_LINE_READ_ONLY(P_DISB_LINE_ID IN NUMBER) RETURN VARCHAR2
336 IS
337
338 /*-----------------------------------------------------------------------+
339 | Local Variable Declarations and initializations |
340 +-----------------------------------------------------------------------*/
341 l_api_name CONSTANT VARCHAR2(30) := 'IS_DISB_LINE_READ_ONLY';
342 l_return VARCHAR2(1);
343
344 /*-----------------------------------------------------------------------+
345 | Cursor Declarations |
346 +-----------------------------------------------------------------------*/
347
348 CURSOR get_data_crs(P_DISB_LINE_ID NUMBER) IS
349 select
350 CASE
351 WHEN (loan.loan_status = 'INCOMPLETE') THEN
352 'N'
353 WHEN LNS_FUNDING_PUB.IS_DISB_HDR_READ_ONLY(line.DISB_HEADER_ID) = 'Y' THEN
354 'Y'
355 ELSE
356 CASE
357 WHEN (line.status is not null and (line.status = 'FULLY_FUNDED' or
358 line.status = 'PARTIALLY_FUNDED' or line.status = 'CANCELLED' or
359 line.status = 'IN_FUNDING'))
360 THEN
361 'Y'
362 ELSE
363 'N'
364 END
365 END
366 from lns_disb_lines line,
367 lns_disb_headers head,
368 lns_loan_headers_all loan
369 where line.DISB_LINE_ID = P_DISB_LINE_ID and
370 line.disb_header_id = head.disb_header_id and
371 head.loan_id = loan.loan_id;
372
373 BEGIN
374 l_return := 'N';
375 OPEN get_data_crs(P_DISB_LINE_ID);
376 FETCH get_data_crs INTO l_return;
377 CLOSE get_data_crs;
378 LogMessage(FND_LOG.LEVEL_STATEMENT, 'IS_DISB_LINE_READ_ONLY for disb line ' || P_DISB_LINE_ID || ' = ' || l_return);
379
380 return l_return;
381 END;
382
383
384
385 /*========================================================================
386 | PUBLIC FUNCTION IS_LAST_DISB_BEFORE_CONV
387 |
388 | DESCRIPTION
389 | This function returns is it last disb header before loan conversion.
390 |
391 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
392 | None
393 |
394 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
395 | LogMessage
396 |
397 | PARAMETERS
398 | P_DISB_HEADER_ID IN Disbursement header
399 |
400 | KNOWN ISSUES
401 | None
402 |
403 | NOTES
404 |
405 | MODIFICATION HISTORY
406 | Date Author Description of Changes
407 | 13-09-2005 scherkas Created
408 |
409 *=======================================================================*/
410 FUNCTION IS_LAST_DISB_BEFORE_CONV(P_DISB_HEADER_ID IN NUMBER) RETURN VARCHAR2
411 IS
412
413 /*-----------------------------------------------------------------------+
414 | Local Variable Declarations and initializations |
415 +-----------------------------------------------------------------------*/
416 l_api_name CONSTANT VARCHAR2(30) := 'IS_LAST_DISB_BEFORE_CONV';
417 l_return VARCHAR2(1);
418
419 /*-----------------------------------------------------------------------+
420 | Cursor Declarations |
421 +-----------------------------------------------------------------------*/
422
423 CURSOR get_data_crs(P_DISB_HEADER_ID NUMBER) IS
424 select
425 CASE
426 WHEN (loan.current_phase = 'OPEN' and loan.OPEN_TO_TERM_FLAG = 'Y' and loan.OPEN_TO_TERM_EVENT = 'AUTO_FINAL_DISBURSEMENT') THEN
427 CASE
428 WHEN ((select max(DISBURSEMENT_NUMBER) from lns_disb_headers where loan_id = loan.loan_id) = head.DISBURSEMENT_NUMBER) THEN
429 'Y'
430 ELSE
431 'N'
432 END
433 ELSE
434 'N'
435 END
436 from lns_disb_headers head,
437 lns_loan_headers_all loan
438 where head.DISB_HEADER_ID = P_DISB_HEADER_ID and
439 head.loan_id = loan.loan_id;
440
441 BEGIN
442 l_return := 'N';
443 OPEN get_data_crs(P_DISB_HEADER_ID);
444 FETCH get_data_crs INTO l_return;
445 CLOSE get_data_crs;
446 LogMessage(FND_LOG.LEVEL_STATEMENT, l_api_name || ' for disb header ' || P_DISB_HEADER_ID || ' = ' || l_return);
447
448 return l_return;
449 END;
450
451
452
453 /*========================================================================
454 | PUBLIC PROCEDURE INSERT_DISB_HEADER
455 |
456 | DESCRIPTION
457 | This procedure inserts new disbursement header
458 |
459 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
460 | None
461 |
462 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
463 | LogMessage
464 |
465 | PARAMETERS
466 | P_API_VERSION IN Standard in parameter
467 | P_INIT_MSG_LIST IN Standard in parameter
468 | P_COMMIT IN Standard in parameter
469 | P_VALIDATION_LEVEL IN Standard in parameter
470 | P_DISB_HEADER_REC IN LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC
471 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
472 | X_MSG_COUNT OUT NOCOPY Standard out parameter
473 | X_MSG_DATA OUT NOCOPY Standard out parameter
474 |
475 | KNOWN ISSUES
476 | None
477 |
478 | NOTES
479 | Any interesting aspect of the code in the package body which needs
480 | to be stated.
481 |
482 | MODIFICATION HISTORY
483 | Date Author Description of Changes
484 | 09-22-2004 scherkas Created
485 |
486 *=======================================================================*/
487 PROCEDURE INSERT_DISB_HEADER(
488 P_API_VERSION IN NUMBER,
489 P_INIT_MSG_LIST IN VARCHAR2,
490 P_COMMIT IN VARCHAR2,
491 P_VALIDATION_LEVEL IN NUMBER,
492 P_DISB_HEADER_REC IN LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC,
493 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
494 X_MSG_COUNT OUT NOCOPY NUMBER,
495 X_MSG_DATA OUT NOCOPY VARCHAR2)
496 IS
497
498 /*-----------------------------------------------------------------------+
499 | Local Variable Declarations and initializations |
500 +-----------------------------------------------------------------------*/
501
502 l_api_name CONSTANT VARCHAR2(30) := 'INSERT_DISB_HEADER';
503 l_api_version CONSTANT NUMBER := 1.0;
504 l_return_status VARCHAR2(1);
505 l_msg_count NUMBER;
506 l_msg_data VARCHAR2(32767);
507 l_pk_id NUMBER;
508 l_phase VARCHAR2(30);
509 l_disb_number number;
510
511 /*-----------------------------------------------------------------------+
512 | Cursor Declarations |
513 +-----------------------------------------------------------------------*/
514
515 BEGIN
516
517 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
518 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
519
520 -- Standard start of API savepoint
521 SAVEPOINT INSERT_DISB_HEADER;
522 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
523
524 -- Standard call to check for call compatibility
525 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
526 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
527 END IF;
528
529 -- Initialize message list if p_init_msg_list is set to TRUE
530 IF FND_API.To_Boolean(p_init_msg_list) THEN
531 FND_MSG_PUB.initialize;
532 END IF;
533
534 -- Initialize API return status to success
535 l_return_status := FND_API.G_RET_STS_SUCCESS;
536
537 -- START OF BODY OF API
538
539 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Inserting disbursement header...');
540 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
541 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_ID: ' || P_DISB_HEADER_REC.LOAN_ID);
542 LogMessage(FND_LOG.LEVEL_STATEMENT, 'ACTIVITY_CODE: ' || P_DISB_HEADER_REC.ACTIVITY_CODE);
543 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISBURSEMENT_NUMBER: ' || P_DISB_HEADER_REC.DISBURSEMENT_NUMBER);
544 LogMessage(FND_LOG.LEVEL_STATEMENT, 'HEADER_AMOUNT: ' || P_DISB_HEADER_REC.HEADER_AMOUNT);
545 LogMessage(FND_LOG.LEVEL_STATEMENT, 'HEADER_PERCENT: ' || P_DISB_HEADER_REC.HEADER_PERCENT);
546 LogMessage(FND_LOG.LEVEL_STATEMENT, 'STATUS: ' || P_DISB_HEADER_REC.STATUS);
547 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OBJECT_VERSION_NUMBER: ' || P_DISB_HEADER_REC.OBJECT_VERSION_NUMBER);
548 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PAYMENT_REQUEST_DATE: ' || P_DISB_HEADER_REC.PAYMENT_REQUEST_DATE);
549 LogMessage(FND_LOG.LEVEL_STATEMENT, 'TARGET_DATE: ' || P_DISB_HEADER_REC.TARGET_DATE);
550 LogMessage(FND_LOG.LEVEL_STATEMENT, 'AUTOFUNDING_FLAG: ' || P_DISB_HEADER_REC.AUTOFUNDING_FLAG);
551 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PHASE: ' || P_DISB_HEADER_REC.PHASE);
552 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DESCRIPTION: ' || P_DISB_HEADER_REC.DESCRIPTION);
553
554 l_phase := P_DISB_HEADER_REC.PHASE;
555 if l_phase is null then
556 l_phase := 'OPEN';
557 end if;
558 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PHASE: ' || l_phase);
559
560 -- validation
561 l_pk_id := P_DISB_HEADER_REC.DISB_HEADER_ID;
562
563 if P_DISB_HEADER_REC.LOAN_ID is null then
564
565 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Loan ID is missing');
566 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
567 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'loan_id' );
568 FND_MSG_PUB.ADD;
569 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
570 RAISE FND_API.G_EXC_ERROR;
571
572 end if;
573
574 l_disb_number := P_DISB_HEADER_REC.DISBURSEMENT_NUMBER;
575 if P_DISB_HEADER_REC.DISBURSEMENT_NUMBER is null then
576
577 select nvl(max(disbursement_number),0)+1 into l_disb_number
578 from lns_disb_headers
579 where loan_id = P_DISB_HEADER_REC.LOAN_ID and phase = l_phase;
580
581 end if;
582
583 -- calling table handler api
584 LNS_DISB_HEADERS_PKG.Insert_Row(
585 X_DISB_HEADER_ID => l_pk_id,
586 P_LOAN_ID => P_DISB_HEADER_REC.LOAN_ID,
587 P_ACTIVITY_CODE => P_DISB_HEADER_REC.ACTIVITY_CODE,
588 P_DISBURSEMENT_NUMBER => l_disb_number,
589 P_HEADER_AMOUNT => P_DISB_HEADER_REC.HEADER_AMOUNT,
590 P_HEADER_PERCENT => P_DISB_HEADER_REC.HEADER_PERCENT,
591 P_STATUS => P_DISB_HEADER_REC.STATUS,
592 P_TARGET_DATE => P_DISB_HEADER_REC.TARGET_DATE,
593 P_PAYMENT_REQUEST_DATE => P_DISB_HEADER_REC.PAYMENT_REQUEST_DATE,
594 P_OBJECT_VERSION_NUMBER => nvl(P_DISB_HEADER_REC.OBJECT_VERSION_NUMBER, 1),
595 P_AUTOFUNDING_FLAG => P_DISB_HEADER_REC.AUTOFUNDING_FLAG,
596 P_PHASE => l_phase,
597 P_DESCRIPTION => P_DISB_HEADER_REC.DESCRIPTION);
598
599 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_HEADER_ID: ' || l_pk_id);
600
601 if P_COMMIT = FND_API.G_TRUE then
602 COMMIT WORK;
603 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
604 end if;
605
606 -- END OF BODY OF API
607 x_return_status := FND_API.G_RET_STS_SUCCESS;
608
609 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully inserted disbursement header' || l_pk_id);
610
611 -- Standard call to get message count and if count is 1, get message info
612 FND_MSG_PUB.Count_And_Get(
613 p_encoded => FND_API.G_FALSE,
614 p_count => x_msg_count,
615 p_data => x_msg_data);
616
617 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
618
619 EXCEPTION
620 WHEN FND_API.G_EXC_ERROR THEN
621 ROLLBACK TO INSERT_DISB_HEADER;
622 x_return_status := FND_API.G_RET_STS_ERROR;
623 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
624 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
625 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
626 ROLLBACK TO INSERT_DISB_HEADER;
627 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
628 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
629 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
630 WHEN OTHERS THEN
631 ROLLBACK TO INSERT_DISB_HEADER;
632 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
633 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
634 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
635 END IF;
636 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
637 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
638 END;
639
640
641
642
643 /*========================================================================
644 | PUBLIC PROCEDURE UPDATE_DISB_HEADER
645 |
646 | DESCRIPTION
647 | This procedure updates disbursement header
648 |
649 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
650 | None
651 |
652 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
653 | init
654 | LogMessage
655 |
656 | PARAMETERS
657 | P_API_VERSION IN Standard in parameter
658 | P_INIT_MSG_LIST IN Standard in parameter
659 | P_COMMIT IN Standard in parameter
660 | P_VALIDATION_LEVEL IN Standard in parameter
661 | P_DISB_HEADER_REC IN LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC
662 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
663 | X_MSG_COUNT OUT NOCOPY Standard out parameter
664 | X_MSG_DATA OUT NOCOPY Standard out parameter
665 |
666 | KNOWN ISSUES
667 | None
668 |
669 | NOTES
670 | Any interesting aspect of the code in the package body which needs
671 | to be stated.
672 |
673 | MODIFICATION HISTORY
674 | Date Author Description of Changes
675 | 09-22-2004 scherkas Created
676 |
677 *=======================================================================*/
678 PROCEDURE UPDATE_DISB_HEADER(
679 P_API_VERSION IN NUMBER,
680 P_INIT_MSG_LIST IN VARCHAR2,
681 P_COMMIT IN VARCHAR2,
682 P_VALIDATION_LEVEL IN NUMBER,
683 P_DISB_HEADER_REC IN LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC,
684 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
685 X_MSG_COUNT OUT NOCOPY NUMBER,
686 X_MSG_DATA OUT NOCOPY VARCHAR2)
687 IS
688
689 /*-----------------------------------------------------------------------+
690 | Local Variable Declarations and initializations |
691 +-----------------------------------------------------------------------*/
692
693 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_DISB_HEADER';
694 l_api_version CONSTANT NUMBER := 1.0;
695 l_return_status VARCHAR2(1);
696 l_msg_count NUMBER;
697 l_msg_data VARCHAR2(32767);
698 l_disb_header_version number;
699
700 /*-----------------------------------------------------------------------+
701 | Cursor Declarations |
702 +-----------------------------------------------------------------------*/
703
704 -- getting disbursement header info from db
705 CURSOR disb_head_cur(P_DISB_HEADER_ID number) IS
706 select OBJECT_VERSION_NUMBER
707 from lns_disb_headers
708 where disb_header_id = P_DISB_HEADER_ID;
709 -- FOR UPDATE OF disb_header_id NOWAIT;
710
711 BEGIN
712
713 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
714 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
715
716 -- Standard start of API savepoint
717 SAVEPOINT UPDATE_DISB_HEADER;
718 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
719
720 -- Standard call to check for call compatibility
721 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
722 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
723 END IF;
724
725 -- Initialize message list if p_init_msg_list is set to TRUE
726 IF FND_API.To_Boolean(p_init_msg_list) THEN
727 FND_MSG_PUB.initialize;
728 END IF;
729
730 -- Initialize API return status to success
731 l_return_status := FND_API.G_RET_STS_SUCCESS;
732
733 -- START OF BODY OF API
734
735 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating disbursement header...');
736 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
737 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_HEADER_ID: ' || P_DISB_HEADER_REC.DISB_HEADER_ID);
738 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_ID: ' || P_DISB_HEADER_REC.LOAN_ID);
739 LogMessage(FND_LOG.LEVEL_STATEMENT, 'ACTIVITY_CODE: ' || P_DISB_HEADER_REC.ACTIVITY_CODE);
740 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISBURSEMENT_NUMBER: ' || P_DISB_HEADER_REC.DISBURSEMENT_NUMBER);
741 LogMessage(FND_LOG.LEVEL_STATEMENT, 'HEADER_AMOUNT: ' || P_DISB_HEADER_REC.HEADER_AMOUNT);
742 LogMessage(FND_LOG.LEVEL_STATEMENT, 'HEADER_PERCENT: ' || P_DISB_HEADER_REC.HEADER_PERCENT);
743 LogMessage(FND_LOG.LEVEL_STATEMENT, 'STATUS: ' || P_DISB_HEADER_REC.STATUS);
744 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OBJECT_VERSION_NUMBER: ' || P_DISB_HEADER_REC.OBJECT_VERSION_NUMBER);
745 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PAYMENT_REQUEST_DATE: ' || P_DISB_HEADER_REC.PAYMENT_REQUEST_DATE);
746 LogMessage(FND_LOG.LEVEL_STATEMENT, 'TARGET_DATE: ' || P_DISB_HEADER_REC.TARGET_DATE);
747 LogMessage(FND_LOG.LEVEL_STATEMENT, 'AUTOFUNDING_FLAG: ' || P_DISB_HEADER_REC.AUTOFUNDING_FLAG);
748 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PHASE: ' || P_DISB_HEADER_REC.PHASE);
749 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DESCRIPTION: ' || P_DISB_HEADER_REC.DESCRIPTION);
750
751 -- validation
752
753 if P_DISB_HEADER_REC.DISB_HEADER_ID is null then
754
755 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement header ID is missing');
756 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
757 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'disb_header_id' );
758 FND_MSG_PUB.ADD;
759 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
760 RAISE FND_API.G_EXC_ERROR;
761
762 end if;
763
764 -- getting disbursement header info from db
765 open disb_head_cur(P_DISB_HEADER_REC.DISB_HEADER_ID);
766 fetch disb_head_cur into l_disb_header_version;
767
768 if disb_head_cur%NOTFOUND then
769
770 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'No disbursement header record found');
771 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
772 FND_MESSAGE.SET_TOKEN('RECORD', 'disbursement header');
773 FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(P_DISB_HEADER_REC.DISB_HEADER_ID), 'null'));
774 FND_MSG_PUB.ADD;
775 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
776 RAISE FND_API.G_EXC_ERROR;
777
778 end if;
779
780 close disb_head_cur;
781
782 if l_disb_header_version <> P_DISB_HEADER_REC.OBJECT_VERSION_NUMBER then
783
784 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement header record has already been changed');
785 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_RECORD_CHANGED');
786 FND_MESSAGE.SET_TOKEN('TABLE', 'LNS_DISB_HEADERS');
787 FND_MSG_PUB.ADD;
788 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
789 RAISE FND_API.G_EXC_ERROR;
790
791 end if;
792
793 l_disb_header_version := nvl(l_disb_header_version, 1) + 1;
794
795 -- calling table handler api
796 LNS_DISB_HEADERS_PKG.Update_Row(
797 P_DISB_HEADER_ID => P_DISB_HEADER_REC.DISB_HEADER_ID,
798 P_LOAN_ID => P_DISB_HEADER_REC.LOAN_ID,
799 P_ACTIVITY_CODE => P_DISB_HEADER_REC.ACTIVITY_CODE,
800 P_DISBURSEMENT_NUMBER => P_DISB_HEADER_REC.DISBURSEMENT_NUMBER,
801 P_HEADER_AMOUNT => P_DISB_HEADER_REC.HEADER_AMOUNT,
802 P_HEADER_PERCENT => P_DISB_HEADER_REC.HEADER_PERCENT,
803 P_STATUS => P_DISB_HEADER_REC.STATUS,
804 P_TARGET_DATE => P_DISB_HEADER_REC.TARGET_DATE,
805 P_PAYMENT_REQUEST_DATE => P_DISB_HEADER_REC.PAYMENT_REQUEST_DATE,
806 P_OBJECT_VERSION_NUMBER => l_disb_header_version,
807 P_AUTOFUNDING_FLAG => P_DISB_HEADER_REC.AUTOFUNDING_FLAG,
808 P_PHASE => P_DISB_HEADER_REC.PHASE,
809 P_DESCRIPTION => P_DISB_HEADER_REC.DESCRIPTION);
810
811 if P_COMMIT = FND_API.G_TRUE then
812 COMMIT WORK;
813 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
814 end if;
815
816 -- END OF BODY OF API
817 x_return_status := FND_API.G_RET_STS_SUCCESS;
818
819 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully updated disbursement header ' || P_DISB_HEADER_REC.DISB_HEADER_ID);
820
821 -- Standard call to get message count and if count is 1, get message info
822 FND_MSG_PUB.Count_And_Get(
823 p_encoded => FND_API.G_FALSE,
824 p_count => x_msg_count,
825 p_data => x_msg_data);
826
827 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
828
829 EXCEPTION
830 WHEN FND_API.G_EXC_ERROR THEN
831 ROLLBACK TO UPDATE_DISB_HEADER;
832 x_return_status := FND_API.G_RET_STS_ERROR;
833 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
834 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
835 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
836 ROLLBACK TO UPDATE_DISB_HEADER;
837 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
838 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
839 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
840 WHEN OTHERS THEN
841 ROLLBACK TO UPDATE_DISB_HEADER;
842 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
843 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
844 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
845 END IF;
846 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
847 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
848 END;
849
850
851
852
853 /*========================================================================
854 | PUBLIC PROCEDURE DELETE_DISB_HEADER
855 |
856 | DESCRIPTION
857 | This procedure updates disbursement header
858 |
859 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
860 | None
861 |
862 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
863 | init
864 | LogMessage
865 |
866 | PARAMETERS
867 | P_API_VERSION IN Standard in parameter
868 | P_INIT_MSG_LIST IN Standard in parameter
869 | P_COMMIT IN Standard in parameter
870 | P_VALIDATION_LEVEL IN Standard in parameter
871 | P_DISB_HEADER_IDC IN Disbursement Header ID
872 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
873 | X_MSG_COUNT OUT NOCOPY Standard out parameter
874 | X_MSG_DATA OUT NOCOPY Standard out parameter
875 |
876 | KNOWN ISSUES
877 | None
878 |
879 | NOTES
880 | Any interesting aspect of the code in the package body which needs
881 | to be stated.
882 |
883 | MODIFICATION HISTORY
884 | Date Author Description of Changes
885 | 09-22-2004 scherkas Created
886 |
887 *=======================================================================*/
888 PROCEDURE DELETE_DISB_HEADER(
889 P_API_VERSION IN NUMBER,
890 P_INIT_MSG_LIST IN VARCHAR2,
891 P_COMMIT IN VARCHAR2,
892 P_VALIDATION_LEVEL IN NUMBER,
893 P_DISB_HEADER_ID IN NUMBER,
894 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
895 X_MSG_COUNT OUT NOCOPY NUMBER,
896 X_MSG_DATA OUT NOCOPY VARCHAR2)
897 IS
898
899 /*-----------------------------------------------------------------------+
900 | Local Variable Declarations and initializations |
901 +-----------------------------------------------------------------------*/
902
903 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_DISB_HEADER';
904 l_api_version CONSTANT NUMBER := 1.0;
905 l_return_status VARCHAR2(1);
906 l_msg_count NUMBER;
907 l_msg_data VARCHAR2(32767);
908 l_status VARCHAR2(30);
909 l_disb_line_id number;
910
911 /*-----------------------------------------------------------------------+
912 | Cursor Declarations |
913 +-----------------------------------------------------------------------*/
914
915 -- getting disbursement header info from db
916 CURSOR disb_head_cur(P_DISB_HEADER_ID number) IS
917 select status
918 from lns_disb_headers
919 where disb_header_id = P_DISB_HEADER_ID;
920
921 -- getting disbursement lines
922 CURSOR disb_line_cur(P_DISB_HEADER_ID number) IS
923 select
924 DISB_LINE_ID
925 from LNS_DISB_LINES
926 where DISB_HEADER_ID = P_DISB_HEADER_ID;
927
928 BEGIN
929
930 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
931 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
932
933 -- Standard start of API savepoint
934 SAVEPOINT DELETE_DISB_HEADER;
935 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
936
937 -- Standard call to check for call compatibility
938 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
939 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
940 END IF;
941
942 -- Initialize message list if p_init_msg_list is set to TRUE
943 IF FND_API.To_Boolean(p_init_msg_list) THEN
944 FND_MSG_PUB.initialize;
945 END IF;
946
947 -- Initialize API return status to success
948 l_return_status := FND_API.G_RET_STS_SUCCESS;
949
950 -- START OF BODY OF API
951
952 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Deleting disbursement header...');
953 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
954 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_HEADER_ID: ' || P_DISB_HEADER_ID);
955 -- validation
956
957 if P_DISB_HEADER_ID is null then
958
959 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement header ID is missing');
960 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
961 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'disb_header_id' );
962 FND_MSG_PUB.ADD;
963 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
964 RAISE FND_API.G_EXC_ERROR;
965
966 end if;
967
968 -- getting disbursement header info from db
969 open disb_head_cur(P_DISB_HEADER_ID);
970 fetch disb_head_cur into l_status;
971
972 if disb_head_cur%NOTFOUND then
973
974 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'No disbursement header record found');
975 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
976 FND_MESSAGE.SET_TOKEN('RECORD', 'disbursement header');
977 FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(P_DISB_HEADER_ID), 'null'));
978 FND_MSG_PUB.ADD;
979 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
980 RAISE FND_API.G_EXC_ERROR;
981
982 end if;
983
984 close disb_head_cur;
985
986 if l_status is not null then
987
988 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Cannot delete disbursement header. It has already been processed.');
989 FND_MESSAGE.SET_NAME('LNS', 'LNS_CANT_DEL_DISB_HDR');
990 FND_MSG_PUB.ADD;
991 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
992 RAISE FND_API.G_EXC_ERROR;
993
994 end if;
995
996 open disb_line_cur(P_DISB_HEADER_ID);
997 LOOP
998
999 fetch disb_line_cur into l_disb_line_id;
1000 exit when disb_line_cur%NOTFOUND;
1001
1002 DELETE_DISB_LINE(
1003 P_API_VERSION => 1.0,
1004 P_INIT_MSG_LIST => FND_API.G_TRUE,
1005 P_COMMIT => FND_API.G_FALSE,
1006 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
1007 P_DISB_LINE_ID => l_disb_line_id,
1008 X_RETURN_STATUS => l_return_status,
1009 X_MSG_COUNT => l_msg_count,
1010 X_MSG_DATA => l_msg_data);
1011
1012 IF l_return_status <> 'S' THEN
1013 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Call to DELETE_DISB_LINE failed');
1014 RAISE FND_API.G_EXC_ERROR;
1015 END IF;
1016
1017 END LOOP;
1018 close disb_line_cur;
1019
1020 -- deteting conditions assignments and fees
1021 LNS_FEE_ASSIGNMENT_PUB.delete_DISB_FEE_ASSIGNMENT(P_DISB_HEADER_ID);
1022 LNS_COND_ASSIGNMENT_PUB.delete_DISB_COND_ASSIGNMENT(P_DISB_HEADER_ID);
1023
1024 delete from lns_distributions where disb_header_id = P_DISB_HEADER_ID;
1025
1026 -- calling table handler api
1027 LNS_DISB_HEADERS_PKG.Delete_Row(P_DISB_HEADER_ID);
1028
1029 if P_COMMIT = FND_API.G_TRUE then
1030 COMMIT WORK;
1031 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
1032 end if;
1033
1034 -- END OF BODY OF API
1035 x_return_status := FND_API.G_RET_STS_SUCCESS;
1036
1037 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully deleted disbursement header ' || P_DISB_HEADER_ID);
1038
1039 -- Standard call to get message count and if count is 1, get message info
1040 FND_MSG_PUB.Count_And_Get(
1041 p_encoded => FND_API.G_FALSE,
1042 p_count => x_msg_count,
1043 p_data => x_msg_data);
1044
1045 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
1046
1047 EXCEPTION
1048 WHEN FND_API.G_EXC_ERROR THEN
1049 ROLLBACK TO DELETE_DISB_HEADER;
1050 x_return_status := FND_API.G_RET_STS_ERROR;
1051 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1052 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1053 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1054 ROLLBACK TO DELETE_DISB_HEADER;
1055 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1056 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1057 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1058 WHEN OTHERS THEN
1059 ROLLBACK TO DELETE_DISB_HEADER;
1060 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1061 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1062 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1063 END IF;
1064 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1065 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1066 END;
1067
1068
1069
1070
1071 /*========================================================================
1072 | PUBLIC PROCEDURE INSERT_DISB_LINE
1073 |
1074 | DESCRIPTION
1075 | This procedure inserts new disbursement LINE
1076 |
1077 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
1078 | None
1079 |
1080 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
1081 | init
1082 | LogMessage
1083 |
1084 | PARAMETERS
1085 | P_API_VERSION IN Standard in parameter
1086 | P_INIT_MSG_LIST IN Standard in parameter
1087 | P_COMMIT IN Standard in parameter
1088 | P_VALIDATION_LEVEL IN Standard in parameter
1089 | P_DISB_LINE_REC IN LNS_FUNDING_PUB.LNS_DISB_LINES_REC
1090 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
1091 | X_MSG_COUNT OUT NOCOPY Standard out parameter
1092 | X_MSG_DATA OUT NOCOPY Standard out parameter
1093 |
1094 | KNOWN ISSUES
1095 | None
1096 |
1097 | NOTES
1098 | Any interesting aspect of the code in the package body which needs
1099 | to be stated.
1100 |
1101 | MODIFICATION HISTORY
1102 | Date Author Description of Changes
1103 | 09-22-2004 scherkas Created
1104 |
1105 *=======================================================================*/
1106 PROCEDURE INSERT_DISB_LINE(
1107 P_API_VERSION IN NUMBER,
1108 P_INIT_MSG_LIST IN VARCHAR2,
1109 P_COMMIT IN VARCHAR2,
1110 P_VALIDATION_LEVEL IN NUMBER,
1111 P_DISB_LINE_REC IN LNS_FUNDING_PUB.LNS_DISB_LINES_REC,
1112 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
1113 X_MSG_COUNT OUT NOCOPY NUMBER,
1114 X_MSG_DATA OUT NOCOPY VARCHAR2)
1115 IS
1116
1117 /*-----------------------------------------------------------------------+
1118 | Local Variable Declarations and initializations |
1119 +-----------------------------------------------------------------------*/
1120
1121 l_api_name CONSTANT VARCHAR2(30) := 'INSERT_DISB_LINE';
1122 l_api_version CONSTANT NUMBER := 1.0;
1123 l_return_status VARCHAR2(1);
1124 l_msg_count NUMBER;
1125 l_msg_data VARCHAR2(32767);
1126 l_pk_id NUMBER;
1127
1128 /*-----------------------------------------------------------------------+
1129 | Cursor Declarations |
1130 +-----------------------------------------------------------------------*/
1131
1132 BEGIN
1133
1134 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
1135 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
1136
1137 -- Standard start of API savepoint
1138 SAVEPOINT INSERT_DISB_LINE;
1139 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
1140
1141 -- Standard call to check for call compatibility
1142 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1143 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1144 END IF;
1145
1146 -- Initialize message list if p_init_msg_list is set to TRUE
1147 IF FND_API.To_Boolean(p_init_msg_list) THEN
1148 FND_MSG_PUB.initialize;
1149 END IF;
1150
1151 -- Initialize API return status to success
1152 l_return_status := FND_API.G_RET_STS_SUCCESS;
1153
1154 -- START OF BODY OF API
1155
1156 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Inserting disbursement line...');
1157 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input Data:');
1158 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.DISB_HEADER_ID: ' || P_DISB_LINE_REC.DISB_HEADER_ID);
1159 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.LINE_AMOUNT: ' || P_DISB_LINE_REC.LINE_AMOUNT);
1160 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.LINE_PERCENT: ' || P_DISB_LINE_REC.LINE_PERCENT);
1161 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.PAYEE_PARTY_ID: ' || P_DISB_LINE_REC.PAYEE_PARTY_ID);
1162 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.BANK_ACCOUNT_ID: ' || P_DISB_LINE_REC.BANK_ACCOUNT_ID);
1163 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.PAYMENT_METHOD_CODE: ' || P_DISB_LINE_REC.PAYMENT_METHOD_CODE);
1164 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.STATUS: ' || P_DISB_LINE_REC.STATUS);
1165 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.REQUEST_DATE: ' || P_DISB_LINE_REC.REQUEST_DATE);
1166 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.DISBURSEMENT_DATE: ' || P_DISB_LINE_REC.DISBURSEMENT_DATE);
1167 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.OBJECT_VERSION_NUMBER: ' || P_DISB_LINE_REC.OBJECT_VERSION_NUMBER);
1168 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.INVOICE_INTERFACE_ID: ' || P_DISB_LINE_REC.INVOICE_INTERFACE_ID);
1169 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.INVOICE_ID: ' || P_DISB_LINE_REC.INVOICE_ID);
1170 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.PARTY_SITE_ID: ' || P_DISB_LINE_REC.PARTY_SITE_ID);
1171 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.INCOME_TAX_REGION: ' || P_DISB_LINE_REC.INCOME_TAX_REGION);
1172 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.TYPE_1099: ' || P_DISB_LINE_REC.TYPE_1099);
1173
1174 -- validation
1175 l_pk_id := P_DISB_LINE_REC.DISB_LINE_ID;
1176
1177 if P_DISB_LINE_REC.DISB_HEADER_ID is null then
1178
1179 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement header ID is missing');
1180 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
1181 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'disb_header_id' );
1182 FND_MSG_PUB.ADD;
1183 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1184 RAISE FND_API.G_EXC_ERROR;
1185
1186 end if;
1187
1188 if P_DISB_LINE_REC.LINE_PERCENT is null then
1189
1190 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Line percent is missing');
1191 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAYEE_PERC');
1192 FND_MSG_PUB.ADD;
1193 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1194 RAISE FND_API.G_EXC_ERROR;
1195
1196 end if;
1197
1198 if P_DISB_LINE_REC.PAYEE_PARTY_ID is null then
1199
1200 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Payee party ID is missing');
1201 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAYEE' );
1202 FND_MSG_PUB.ADD;
1203 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1204 RAISE FND_API.G_EXC_ERROR;
1205
1206 end if;
1207
1208 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling LNS_DISB_LINES_PKG.Insert_Row');
1209
1210 -- calling table handler api
1211 LNS_DISB_LINES_PKG.Insert_Row(
1212 X_DISB_LINE_ID => l_pk_id,
1213 P_DISB_HEADER_ID => P_DISB_LINE_REC.DISB_HEADER_ID,
1214 P_DISB_LINE_NUMBER => P_DISB_LINE_REC.DISB_LINE_NUMBER,
1215 P_LINE_AMOUNT => P_DISB_LINE_REC.LINE_AMOUNT,
1216 P_LINE_PERCENT => P_DISB_LINE_REC.LINE_PERCENT,
1217 P_PAYEE_PARTY_ID => P_DISB_LINE_REC.PAYEE_PARTY_ID,
1218 P_BANK_ACCOUNT_ID => P_DISB_LINE_REC.BANK_ACCOUNT_ID,
1219 P_PAYMENT_METHOD_CODE => P_DISB_LINE_REC.PAYMENT_METHOD_CODE,
1220 P_STATUS => P_DISB_LINE_REC.STATUS,
1221 P_REQUEST_DATE => P_DISB_LINE_REC.REQUEST_DATE,
1222 P_DISBURSEMENT_DATE => P_DISB_LINE_REC.DISBURSEMENT_DATE,
1223 P_OBJECT_VERSION_NUMBER => nvl(P_DISB_LINE_REC.OBJECT_VERSION_NUMBER, 1),
1224 P_INVOICE_INTERFACE_ID => P_DISB_LINE_REC.INVOICE_INTERFACE_ID,
1225 P_INVOICE_ID => P_DISB_LINE_REC.INVOICE_ID,
1226 P_PARTY_SITE_ID => P_DISB_LINE_REC.PARTY_SITE_ID,
1227 P_INCOME_TAX_REGION => P_DISB_LINE_REC.INCOME_TAX_REGION,
1228 P_TYPE_1099 => P_DISB_LINE_REC.TYPE_1099);
1229
1230 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.DISB_LINE_ID: ' || l_pk_id);
1231
1232 if P_COMMIT = FND_API.G_TRUE then
1233 COMMIT WORK;
1234 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
1235 end if;
1236
1237 -- END OF BODY OF API
1238 x_return_status := FND_API.G_RET_STS_SUCCESS;
1239
1240 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully inserted disbursement line ' || l_pk_id);
1241
1242 -- Standard call to get message count and if count is 1, get message info
1243 FND_MSG_PUB.Count_And_Get(
1244 p_encoded => FND_API.G_FALSE,
1245 p_count => x_msg_count,
1246 p_data => x_msg_data);
1247
1248 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
1249
1250 EXCEPTION
1251 WHEN FND_API.G_EXC_ERROR THEN
1252 ROLLBACK TO INSERT_DISB_LINE;
1253 x_return_status := FND_API.G_RET_STS_ERROR;
1254 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1255 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1256 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1257 ROLLBACK TO INSERT_DISB_LINE;
1258 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1259 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1260 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1261 WHEN OTHERS THEN
1262 ROLLBACK TO INSERT_DISB_LINE;
1263 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1264 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1265 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1266 END IF;
1267 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1268 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1269 END;
1270
1271
1272
1273
1274 /*========================================================================
1275 | PUBLIC PROCEDURE UPDATE_DISB_LINE
1276 |
1277 | DESCRIPTION
1278 | This procedure updates disbursement LINE
1279 |
1280 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
1281 | None
1282 |
1283 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
1284 | init
1285 | LogMessage
1286 |
1287 | PARAMETERS
1288 | P_API_VERSION IN Standard in parameter
1289 | P_INIT_MSG_LIST IN Standard in parameter
1290 | P_COMMIT IN Standard in parameter
1291 | P_VALIDATION_LEVEL IN Standard in parameter
1292 | P_DISB_LINE_REC IN LNS_FUNDING_PUB.LNS_DISB_LINES_REC
1293 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
1294 | X_MSG_COUNT OUT NOCOPY Standard out parameter
1295 | X_MSG_DATA OUT NOCOPY Standard out parameter
1296 |
1297 | KNOWN ISSUES
1298 | None
1299 |
1300 | NOTES
1301 | Any interesting aspect of the code in the package body which needs
1302 | to be stated.
1303 |
1304 | MODIFICATION HISTORY
1305 | Date Author Description of Changes
1306 | 09-22-2004 scherkas Created
1307 |
1308 *=======================================================================*/
1309 PROCEDURE UPDATE_DISB_LINE(
1310 P_API_VERSION IN NUMBER,
1311 P_INIT_MSG_LIST IN VARCHAR2,
1312 P_COMMIT IN VARCHAR2,
1313 P_VALIDATION_LEVEL IN NUMBER,
1314 P_DISB_LINE_REC IN LNS_FUNDING_PUB.LNS_DISB_LINES_REC,
1315 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
1316 X_MSG_COUNT OUT NOCOPY NUMBER,
1317 X_MSG_DATA OUT NOCOPY VARCHAR2)
1318 IS
1319
1320 /*-----------------------------------------------------------------------+
1321 | Local Variable Declarations and initializations |
1322 +-----------------------------------------------------------------------*/
1323
1324 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_DISB_LINE';
1325 l_api_version CONSTANT NUMBER := 1.0;
1326 l_return_status VARCHAR2(1);
1327 l_msg_count NUMBER;
1328 l_msg_data VARCHAR2(32767);
1329 l_disb_line_version number;
1330
1331 /*-----------------------------------------------------------------------+
1332 | Cursor Declarations |
1333 +-----------------------------------------------------------------------*/
1334
1335 -- getting disbursement line info from db
1336 CURSOR disb_line_cur(P_DISB_LINE_ID number) IS
1337 select OBJECT_VERSION_NUMBER
1338 from lns_disb_lines
1339 where disb_line_id = P_DISB_LINE_ID;
1340 -- FOR UPDATE OF disb_line_id NOWAIT;
1341
1342 BEGIN
1343
1344 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
1345 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
1346
1347 -- Standard start of API savepoint
1348 SAVEPOINT UPDATE_DISB_LINE;
1349 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
1350
1351 -- Standard call to check for call compatibility
1352 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1353 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1354 END IF;
1355
1356 -- Initialize message list if p_init_msg_list is set to TRUE
1357 IF FND_API.To_Boolean(p_init_msg_list) THEN
1358 FND_MSG_PUB.initialize;
1359 END IF;
1360
1361 -- Initialize API return status to success
1362 l_return_status := FND_API.G_RET_STS_SUCCESS;
1363
1364 -- START OF BODY OF API
1365
1366 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating disbursement line...');
1367 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input Data:');
1368 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.DISB_LINE_ID: ' || P_DISB_LINE_REC.DISB_LINE_ID);
1369 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.DISB_HEADER_ID: ' || P_DISB_LINE_REC.DISB_HEADER_ID);
1370 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.LINE_AMOUNT: ' || P_DISB_LINE_REC.LINE_AMOUNT);
1371 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.LINE_PERCENT: ' || P_DISB_LINE_REC.LINE_PERCENT);
1372 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.PAYEE_PARTY_ID: ' || P_DISB_LINE_REC.PAYEE_PARTY_ID);
1373 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.BANK_ACCOUNT_ID: ' || P_DISB_LINE_REC.BANK_ACCOUNT_ID);
1374 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.PAYMENT_METHOD_CODE: ' || P_DISB_LINE_REC.PAYMENT_METHOD_CODE);
1375 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.STATUS: ' || P_DISB_LINE_REC.STATUS);
1376 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.REQUEST_DATE: ' || P_DISB_LINE_REC.REQUEST_DATE);
1377 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.DISBURSEMENT_DATE: ' || P_DISB_LINE_REC.DISBURSEMENT_DATE);
1378 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.OBJECT_VERSION_NUMBER: ' || P_DISB_LINE_REC.OBJECT_VERSION_NUMBER);
1379 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.INVOICE_INTERFACE_ID: ' || P_DISB_LINE_REC.INVOICE_INTERFACE_ID);
1380 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.INVOICE_ID: ' || P_DISB_LINE_REC.INVOICE_ID);
1381 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.PARTY_SITE_ID: ' || P_DISB_LINE_REC.PARTY_SITE_ID);
1382 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.INCOME_TAX_REGION: ' || P_DISB_LINE_REC.INCOME_TAX_REGION);
1383 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_REC.TYPE_1099: ' || P_DISB_LINE_REC.TYPE_1099);
1384
1385 -- validation
1386
1387 if P_DISB_LINE_REC.DISB_LINE_ID is null then
1388
1389 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement line ID is missing');
1390 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
1391 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'disb_line_id' );
1392 FND_MSG_PUB.ADD;
1393 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1394 RAISE FND_API.G_EXC_ERROR;
1395
1396 end if;
1397
1398 -- getting disbursement line info from db
1399 open disb_line_cur(P_DISB_LINE_REC.DISB_LINE_ID);
1400 fetch disb_line_cur into l_disb_line_version;
1401
1402 if disb_line_cur%NOTFOUND then
1403
1404 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'No disbursement line record found');
1405 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
1406 FND_MESSAGE.SET_TOKEN('RECORD', 'disbursement line');
1407 FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(P_DISB_LINE_REC.DISB_LINE_ID), 'null'));
1408 FND_MSG_PUB.ADD;
1409 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1410 RAISE FND_API.G_EXC_ERROR;
1411
1412 end if;
1413
1414 close disb_line_cur;
1415
1416 if l_disb_line_version <> P_DISB_LINE_REC.OBJECT_VERSION_NUMBER then
1417
1418 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement line record has already been changed');
1419 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_RECORD_CHANGED');
1420 FND_MESSAGE.SET_TOKEN('TABLE', 'LNS_DISB_LINES');
1421 FND_MSG_PUB.ADD;
1422 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1423 RAISE FND_API.G_EXC_ERROR;
1424
1425 end if;
1426
1427 l_disb_line_version := nvl(l_disb_line_version, 1) + 1;
1428
1429 -- calling table handler api
1430 LNS_DISB_LINES_PKG.Update_Row(
1431 P_DISB_LINE_ID => P_DISB_LINE_REC.DISB_LINE_ID,
1432 P_DISB_HEADER_ID => P_DISB_LINE_REC.DISB_HEADER_ID,
1433 P_DISB_LINE_NUMBER => P_DISB_LINE_REC.DISB_LINE_NUMBER,
1434 P_LINE_AMOUNT => P_DISB_LINE_REC.LINE_AMOUNT,
1435 P_LINE_PERCENT => P_DISB_LINE_REC.LINE_PERCENT,
1436 P_PAYEE_PARTY_ID => P_DISB_LINE_REC.PAYEE_PARTY_ID,
1437 P_BANK_ACCOUNT_ID => P_DISB_LINE_REC.BANK_ACCOUNT_ID,
1438 P_PAYMENT_METHOD_CODE => P_DISB_LINE_REC.PAYMENT_METHOD_CODE,
1439 P_STATUS => P_DISB_LINE_REC.STATUS,
1440 P_REQUEST_DATE => P_DISB_LINE_REC.REQUEST_DATE,
1441 P_DISBURSEMENT_DATE => P_DISB_LINE_REC.DISBURSEMENT_DATE,
1442 P_OBJECT_VERSION_NUMBER => l_disb_line_version,
1443 P_INVOICE_INTERFACE_ID => P_DISB_LINE_REC.INVOICE_INTERFACE_ID,
1444 P_INVOICE_ID => P_DISB_LINE_REC.INVOICE_ID,
1445 P_PARTY_SITE_ID => P_DISB_LINE_REC.PARTY_SITE_ID,
1446 P_INCOME_TAX_REGION => P_DISB_LINE_REC.INCOME_TAX_REGION,
1447 P_TYPE_1099 => P_DISB_LINE_REC.TYPE_1099);
1448
1449 if P_COMMIT = FND_API.G_TRUE then
1450 COMMIT WORK;
1451 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
1452 end if;
1453
1454 -- END OF BODY OF API
1455 x_return_status := FND_API.G_RET_STS_SUCCESS;
1456
1457 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully updated disbursement line ' || P_DISB_LINE_REC.DISB_LINE_ID);
1458
1459 -- Standard call to get message count and if count is 1, get message info
1460 FND_MSG_PUB.Count_And_Get(
1461 p_encoded => FND_API.G_FALSE,
1462 p_count => x_msg_count,
1463 p_data => x_msg_data);
1464
1465 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
1466
1467 EXCEPTION
1468 WHEN FND_API.G_EXC_ERROR THEN
1469 ROLLBACK TO UPDATE_DISB_LINE;
1470 x_return_status := FND_API.G_RET_STS_ERROR;
1471 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1472 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1473 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1474 ROLLBACK TO UPDATE_DISB_LINE;
1475 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1476 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1477 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1478 WHEN OTHERS THEN
1479 ROLLBACK TO UPDATE_DISB_LINE;
1480 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1481 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1482 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1483 END IF;
1484 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1485 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1486 END;
1487
1488
1489
1490
1491 /*========================================================================
1492 | PUBLIC PROCEDURE DELETE_DISB_LINE
1493 |
1494 | DESCRIPTION
1495 | This procedure updates disbursement LINE
1496 |
1497 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
1498 | None
1499 |
1500 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
1501 | init
1502 | LogMessage
1503 |
1504 | PARAMETERS
1505 | P_API_VERSION IN Standard in parameter
1506 | P_INIT_MSG_LIST IN Standard in parameter
1507 | P_COMMIT IN Standard in parameter
1508 | P_VALIDATION_LEVEL IN Standard in parameter
1509 | P_DISB_LINE_IDC IN Disbursement LINE ID
1510 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
1511 | X_MSG_COUNT OUT NOCOPY Standard out parameter
1512 | X_MSG_DATA OUT NOCOPY Standard out parameter
1513 |
1514 | KNOWN ISSUES
1515 | None
1516 |
1517 | NOTES
1518 | Any interesting aspect of the code in the package body which needs
1519 | to be stated.
1520 |
1521 | MODIFICATION HISTORY
1522 | Date Author Description of Changes
1523 | 09-22-2004 scherkas Created
1524 |
1525 *=======================================================================*/
1526 PROCEDURE DELETE_DISB_LINE(
1527 P_API_VERSION IN NUMBER,
1528 P_INIT_MSG_LIST IN VARCHAR2,
1529 P_COMMIT IN VARCHAR2,
1530 P_VALIDATION_LEVEL IN NUMBER,
1531 P_DISB_LINE_ID IN NUMBER,
1532 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
1533 X_MSG_COUNT OUT NOCOPY NUMBER,
1534 X_MSG_DATA OUT NOCOPY VARCHAR2)
1535 IS
1536
1537 /*-----------------------------------------------------------------------+
1538 | Local Variable Declarations and initializations |
1539 +-----------------------------------------------------------------------*/
1540
1541 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_DISB_LINE';
1542 l_api_version CONSTANT NUMBER := 1.0;
1543 l_return_status VARCHAR2(1);
1544 l_msg_count NUMBER;
1545 l_msg_data VARCHAR2(32767);
1546 l_status VARCHAR2(30);
1547
1548 /*-----------------------------------------------------------------------+
1549 | Cursor Declarations |
1550 +-----------------------------------------------------------------------*/
1551
1552 -- getting disbursement header and line info from db
1553 CURSOR disb_head_cur(P_DISB_LINE_ID number) IS
1554 select hdr.status
1555 from lns_disb_headers hdr,
1556 lns_disb_lines ln
1557 where hdr.disb_header_id = ln.disb_header_id and
1558 ln.disb_line_id = P_DISB_LINE_ID;
1559
1560 BEGIN
1561
1562 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
1563 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
1564
1565 -- Standard start of API savepoint
1566 SAVEPOINT DELETE_DISB_LINE;
1567 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
1568
1569 -- Standard call to check for call compatibility
1570 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1571 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1572 END IF;
1573
1574 -- Initialize message list if p_init_msg_list is set to TRUE
1575 IF FND_API.To_Boolean(p_init_msg_list) THEN
1576 FND_MSG_PUB.initialize;
1577 END IF;
1578
1579 -- Initialize API return status to success
1580 l_return_status := FND_API.G_RET_STS_SUCCESS;
1581
1582 -- START OF BODY OF API
1583
1584 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Deleting disbursement line...');
1585 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input Data:');
1586 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_LINE_ID: ' || P_DISB_LINE_ID);
1587
1588 -- validation
1589
1590 if P_DISB_LINE_ID is null then
1591
1592 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement line ID is missing');
1593 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
1594 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'disb_line_id' );
1595 FND_MSG_PUB.ADD;
1596 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1597 RAISE FND_API.G_EXC_ERROR;
1598
1599 end if;
1600
1601 -- getting disbursement header and line info from db
1602 open disb_head_cur(P_DISB_LINE_ID);
1603 fetch disb_head_cur into l_status;
1604
1605 if disb_head_cur%NOTFOUND then
1606
1607 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'No disbursement line record found');
1608 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
1609 FND_MESSAGE.SET_TOKEN('RECORD', 'disbursement line');
1610 FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(P_DISB_LINE_ID), 'null'));
1611 FND_MSG_PUB.ADD;
1612 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1613 RAISE FND_API.G_EXC_ERROR;
1614
1615 end if;
1616
1617 close disb_head_cur;
1618
1619 if l_status is not null then
1620
1621 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Cannot delete disbursement line. It has already been processed.');
1622 FND_MESSAGE.SET_NAME('LNS', 'LNS_CANT_DEL_DISB_LN');
1623 FND_MSG_PUB.ADD;
1624 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
1625 RAISE FND_API.G_EXC_ERROR;
1626
1627 end if;
1628
1629 -- calling table handler api
1630 LNS_DISB_LINES_PKG.Delete_Row(P_DISB_LINE_ID);
1631
1632 if P_COMMIT = FND_API.G_TRUE then
1633 COMMIT WORK;
1634 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
1635 end if;
1636
1637 -- END OF BODY OF API
1638 x_return_status := FND_API.G_RET_STS_SUCCESS;
1639
1640 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully deleted disbursement line ' || P_DISB_LINE_ID);
1641
1642 -- Standard call to get message count and if count is 1, get message info
1643 FND_MSG_PUB.Count_And_Get(
1644 p_encoded => FND_API.G_FALSE,
1645 p_count => x_msg_count,
1646 p_data => x_msg_data);
1647
1648 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
1649
1650 EXCEPTION
1651 WHEN FND_API.G_EXC_ERROR THEN
1652 ROLLBACK TO DELETE_DISB_LINE;
1653 x_return_status := FND_API.G_RET_STS_ERROR;
1654 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1655 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1656 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1657 ROLLBACK TO DELETE_DISB_LINE;
1658 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1659 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1660 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1661 WHEN OTHERS THEN
1662 ROLLBACK TO DELETE_DISB_LINE;
1663 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1664 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
1665 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1666 END IF;
1667 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
1668 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
1669 END;
1670
1671
1672
1673
1674 /*========================================================================
1675 | PUBLIC PROCEDURE CREATE_EXT_IBY_PAYEE
1676 |
1677 | DESCRIPTION
1678 | This procedure creates external IBY payee
1679 |
1680 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
1681 | None
1682 |
1683 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
1684 | LogMessage
1685 |
1686 | PARAMETERS
1687 | P_DISB_HEADER_ID IN Disbursement header ID
1688 |
1689 | KNOWN ISSUES
1690 | None
1691 |
1692 | NOTES
1693 | Any interesting aspect of the code in the package body which needs
1694 | to be stated.
1695 |
1696 | MODIFICATION HISTORY
1697 | Date Author Description of Changes
1698 | 07-27-2005 scherkas Created
1699 | 22-03-2006 karamach Added check for LOANS_PAYMENT payment_function in the payees_cur cursor to check for existing payees to fix bug5112534
1700 | 16-05-2006 karamach Made changes to fix api parameters and add error message checks to fix bug5226980
1701 |
1702 *=======================================================================*/
1703 PROCEDURE CREATE_EXT_IBY_PAYEE(
1704 P_DISB_HEADER_ID IN NUMBER)
1705 IS
1706
1707 /*-----------------------------------------------------------------------+
1708 | Local Variable Declarations and initializations |
1709 +-----------------------------------------------------------------------*/
1710
1711 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_EXT_IBY_PAYEE';
1712 l_api_version CONSTANT NUMBER := 1.0;
1713 l_return_status VARCHAR2(1);
1714 l_msg_count NUMBER;
1715 l_msg_data VARCHAR2(32767);
1716 l_Payee_Party_Id number;
1717 l_org_id number;
1718 l_count number;
1719
1720 l_External_Payee_Tab IBY_DISBURSEMENT_SETUP_PUB.External_Payee_Tab_Type;
1721 l_Ext_Payee_ID_Tab IBY_DISBURSEMENT_SETUP_PUB.Ext_Payee_ID_Tab_Type;
1722 l_Ext_Payee_Create_Tab IBY_DISBURSEMENT_SETUP_PUB.Ext_Payee_Create_Tab_Type;
1723
1724 /*-----------------------------------------------------------------------+
1725 | Cursor Declarations |
1726 +-----------------------------------------------------------------------*/
1727
1728 -- getting payees
1729 CURSOR payees_cur(P_DISB_HEADER_ID number) IS
1730 select line.PAYEE_PARTY_ID,
1731 loan.org_id
1732 from LNS_DISB_LINES line,
1733 LNS_DISB_HEADERS head,
1734 LNS_LOAN_HEADERS_ALL loan
1735 where head.DISB_HEADER_ID = P_DISB_HEADER_ID and
1736 head.DISB_HEADER_ID = line.DISB_HEADER_ID and
1737 head.loan_id = loan.loan_id and not exists
1738 (select PAYEE_PARTY_ID
1739 from IBY_EXTERNAL_PAYEES_ALL
1740 where PAYEE_PARTY_ID = line.PAYEE_PARTY_ID and org_id = loan.org_id and payment_function = 'LOANS_PAYMENTS');
1741 BEGIN
1742
1743 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
1744 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
1745
1746 -- START OF BODY OF API
1747
1748 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Creating external iby payees...');
1749
1750 -- getting payees
1751 l_count := 0;
1752 open payees_cur(P_DISB_HEADER_ID);
1753 LOOP
1754
1755 fetch payees_cur into l_Payee_Party_Id, l_org_id;
1756 exit when payees_cur%NOTFOUND;
1757
1758 l_count := l_count + 1;
1759 l_External_Payee_Tab(l_count).Payee_Party_Id := l_Payee_Party_Id;
1760
1761 -- fix for bug 8781164: dont pass Payer_Org_Id and Payer_Org_Type to Create_External_Payee
1762 --l_External_Payee_Tab(l_count).Payer_Org_Id := l_org_id;
1763 --karamach bug5226980 Pass Payer_Org_Type as well if passing org_id
1764 --l_External_Payee_Tab(l_count).Payer_Org_Type := 'OPERATING_UNIT';
1765
1766 l_External_Payee_Tab(l_count).Payment_Function := 'LOANS_PAYMENTS';
1767 l_External_Payee_Tab(l_count).Exclusive_Pay_Flag := 'N';
1768
1769 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee #' || l_count);
1770 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee_Party_Id: ' || l_External_Payee_Tab(l_count).Payee_Party_Id);
1771 --LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payer_Org_Id: ' || l_External_Payee_Tab(l_count).Payer_Org_Id);
1772 --LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payer_Org_Type: ' || l_External_Payee_Tab(l_count).Payer_Org_Type);
1773 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment_Function: ' || l_External_Payee_Tab(l_count).Payment_Function);
1774 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Exclusive_Pay_Flag: ' || l_External_Payee_Tab(l_count).Exclusive_Pay_Flag);
1775
1776 END LOOP;
1777 close payees_cur;
1778
1779 if l_External_Payee_Tab.count > 0 then
1780
1781 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling IBY_DISBURSEMENT_SETUP_PUB.Create_External_Payee...');
1782 IBY_DISBURSEMENT_SETUP_PUB.Create_External_Payee (
1783 p_api_version => 1.0,
1784 p_init_msg_list => FND_API.G_TRUE,
1785 p_ext_payee_tab => l_External_Payee_Tab,
1786 x_return_status => l_return_status,
1787 x_msg_count => l_msg_count,
1788 x_msg_data => l_msg_data,
1789 x_ext_payee_id_tab => l_Ext_Payee_ID_Tab,
1790 x_ext_payee_status_tab => l_Ext_Payee_Create_Tab);
1791
1792 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
1793
1794 FOR l_Count IN 1..l_Ext_Payee_ID_Tab.COUNT LOOP
1795 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_Ext_Payee_ID_Tab(' || l_Count || ').Ext_Payee_ID: ' || l_Ext_Payee_ID_Tab(l_Count).Ext_Payee_ID);
1796 END LOOP;
1797
1798 FOR l_Count IN 1..l_Ext_Payee_ID_Tab.COUNT LOOP
1799 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_Ext_Payee_Create_Tab(' || l_Count || ').Payee_Creation_Status: ' || l_Ext_Payee_Create_Tab(l_Count).Payee_Creation_Status);
1800 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_Ext_Payee_Create_Tab(' || l_Count || ').Payee_Creation_Msg: ' || l_Ext_Payee_Create_Tab(l_Count).Payee_Creation_Msg);
1801 --karamach bug5226980
1802 l_return_status := l_Ext_Payee_Create_Tab(l_Count).Payee_Creation_Status;
1803 if (l_Ext_Payee_Create_Tab(l_Count).Payee_Creation_Status = 'E') then
1804 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_OTHERS_EXCEP');
1805 FND_MESSAGE.SET_TOKEN('ERROR' ,'Failed API call: IBY_DISBURSEMENT_SETUP_PUB.Create_External_Payee' || ' Payee_Creation_Msg: ' || l_Ext_Payee_Create_Tab(l_Count).Payee_Creation_Msg);
1806 FND_MSG_PUB.ADD;
1807 RAISE FND_API.G_EXC_ERROR;
1808 end if;
1809 END LOOP;
1810
1811 if l_return_status = 'E' then
1812 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_OTHERS_EXCEP');
1813 FND_MESSAGE.SET_TOKEN('ERROR' ,'Failed API call: IBY_DISBURSEMENT_SETUP_PUB.Create_External_Payee');
1814 FND_MSG_PUB.ADD;
1815 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
1816 p_count => l_msg_count,
1817 p_data => l_msg_data);
1818 RAISE FND_API.G_EXC_ERROR;
1819 end if;
1820
1821 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully created external iby payees');
1822
1823 end if;
1824
1825 -- END OF BODY OF API
1826 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
1827
1828 END;
1829
1830
1831
1832 /*========================================================================
1833 | PUBLIC PROCEDURE VALIDATE_DISB_FOR_APPR
1834 |
1835 | DESCRIPTION
1836 | This procedure validates disbursement schedule for approval process.
1837 |
1838 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
1839 | None
1840 |
1841 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
1842 | LogMessage
1843 |
1844 | PARAMETERS
1845 | P_API_VERSION IN Standard in parameter
1846 | P_INIT_MSG_LIST IN Standard in parameter
1847 | P_COMMIT IN Standard in parameter
1848 | P_VALIDATION_LEVEL IN Standard in parameter
1849 | P_LOAN_ID IN Loan ID
1850 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
1851 | X_MSG_COUNT OUT NOCOPY Standard out parameter
1852 | X_MSG_DATA OUT NOCOPY Standard out parameter
1853 |
1854 | KNOWN ISSUES
1855 | None
1856 |
1857 | NOTES
1858 | Any interesting aspect of the code in the package body which needs
1859 | to be stated.
1860 |
1861 | MODIFICATION HISTORY
1862 | Date Author Description of Changes
1863 | 11-08-2004 scherkas Created
1864 |
1865 *=======================================================================*/
1866 PROCEDURE VALIDATE_DISB_FOR_APPR(
1867 P_API_VERSION IN NUMBER,
1868 P_INIT_MSG_LIST IN VARCHAR2,
1869 P_COMMIT IN VARCHAR2,
1870 P_VALIDATION_LEVEL IN NUMBER,
1871 P_LOAN_ID IN NUMBER,
1872 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
1873 X_MSG_COUNT OUT NOCOPY NUMBER,
1874 X_MSG_DATA OUT NOCOPY VARCHAR2)
1875 IS
1876
1877 /*-----------------------------------------------------------------------+
1878 | Local Variable Declarations and initializations |
1879 +-----------------------------------------------------------------------*/
1880
1881 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_DISB_FOR_APPR';
1882 l_api_version CONSTANT NUMBER := 1.0;
1883 l_return_status VARCHAR2(1);
1884 l_msg_count NUMBER;
1885 l_msg_data VARCHAR2(32767);
1886 l_count number;
1887 l_sum_percent number;
1888 l_running_sum number;
1889 l_count1 number;
1890 l_sum_percent1 number;
1891 l_running_sum1 number;
1892 l_funded_amount number;
1893 l_loan_currency varchar2(15);
1894 l_loan_start_date date;
1895 l_loan_maturity_date date;
1896 l_party_site_id number;
1897 l_due_date date;
1898 l_current_phase varchar2(30);
1899
1900 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
1901 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
1902
1903 /*-----------------------------------------------------------------------+
1904 | Cursor Declarations |
1905 +-----------------------------------------------------------------------*/
1906
1907 -- getting loan info
1908 CURSOR loan_info_cur(P_LOAN_ID number) IS
1909 select nvl(loan.current_phase, 'TERM')
1910 from LNS_LOAN_HEADERS loan
1911 where loan.LOAN_ID = P_LOAN_ID;
1912
1913 -- getting disbursement header info
1914 CURSOR disb_headers_cur(P_LOAN_ID number) IS
1915 select
1916 loan.REQUESTED_AMOUNT,
1917 loan.LOAN_CURRENCY,
1918 head.DISB_HEADER_ID,
1919 head.LOAN_ID,
1920 head.ACTIVITY_CODE,
1921 head.DISBURSEMENT_NUMBER,
1922 head.HEADER_AMOUNT,
1923 head.HEADER_PERCENT,
1924 head.STATUS,
1925 head.TARGET_DATE,
1926 decode(nvl(loan.CURRENT_PHASE, 'TERM'), 'TERM', loan.LOAN_START_DATE, loan.OPEN_LOAN_START_DATE),
1927 loan.OPEN_MATURITY_DATE
1928 from LNS_DISB_HEADERS head,
1929 LNS_LOAN_HEADERS_ALL loan
1930 where loan.LOAN_ID = P_LOAN_ID and
1931 head.LOAN_ID = loan.LOAN_ID
1932 order by head.DISBURSEMENT_NUMBER;
1933
1934 -- getting disbursement lines
1935 CURSOR disb_lines_cur(P_DISB_HEADER_ID number) IS
1936 select
1937 line.disb_header_id,
1938 line.DISB_LINE_NUMBER,
1939 line.LINE_AMOUNT,
1940 line.LINE_PERCENT,
1941 line.PAYEE_PARTY_ID,
1942 line.BANK_ACCOUNT_ID,
1943 line.PAYMENT_METHOD_CODE,
1944 line.REQUEST_DATE,
1945 nvl(head.PAYMENT_REQUEST_DATE, head.TARGET_DATE)
1946 from LNS_DISB_LINES line,
1947 LNS_DISB_HEADERS head
1948 where line.DISB_HEADER_ID = P_DISB_HEADER_ID and
1949 line.DISB_HEADER_ID = head.DISB_HEADER_ID
1950 order by line.DISB_LINE_NUMBER;
1951
1952 -- validate party_site for the party
1953 CURSOR party_site_cur(P_PARTY_ID number, P_DATE date) IS
1954 SELECT party_site_id
1955 FROM HZ_Party_Sites HPS
1956 WHERE HPS.Party_ID = P_PARTY_ID
1957 AND HPS.Identifying_Address_Flag = 'Y'
1958 AND NVL(HPS.Start_Date_Active, P_DATE) = P_DATE;
1959
1960 BEGIN
1961
1962 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
1963 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
1964
1965 -- Standard call to check for call compatibility
1966 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1967 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1968 END IF;
1969
1970 -- Initialize message list if p_init_msg_list is set to TRUE
1971 IF FND_API.To_Boolean(p_init_msg_list) THEN
1972 FND_MSG_PUB.initialize;
1973 END IF;
1974
1975 -- Initialize API return status to success
1976 l_return_status := FND_API.G_RET_STS_SUCCESS;
1977
1978 -- START OF BODY OF API
1979
1980 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input:');
1981 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_LOAN_ID: ' || P_LOAN_ID);
1982
1983 open loan_info_cur(P_LOAN_ID);
1984 fetch loan_info_cur into l_current_phase;
1985 close loan_info_cur;
1986 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Current phase: ' || l_current_phase);
1987
1988 if l_current_phase = 'TERM' then
1989 x_return_status := FND_API.G_RET_STS_SUCCESS;
1990 return;
1991 end if;
1992
1993 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Validating disbursement schedule...');
1994
1995 -- getting all disbursement headers
1996 l_count := 0;
1997 l_sum_percent := 0;
1998 l_running_sum := 0;
1999 open disb_headers_cur(P_LOAN_ID);
2000
2001 LOOP
2002
2003 fetch disb_headers_cur into
2004 l_funded_amount,
2005 l_loan_currency,
2006 l_DISB_HEADER_REC.DISB_HEADER_ID,
2007 l_DISB_HEADER_REC.LOAN_ID,
2008 l_DISB_HEADER_REC.ACTIVITY_CODE,
2009 l_DISB_HEADER_REC.DISBURSEMENT_NUMBER,
2010 l_DISB_HEADER_REC.HEADER_AMOUNT,
2011 l_DISB_HEADER_REC.HEADER_PERCENT,
2012 l_DISB_HEADER_REC.STATUS,
2013 l_DISB_HEADER_REC.TARGET_DATE,
2014 l_loan_start_date,
2015 l_loan_maturity_date;
2016
2017 if disb_headers_cur%NOTFOUND and l_count = 0 then
2018
2019 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2020 FND_MSG_PUB.ADD;
2021 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2022
2023 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'ERROR: Disbursement schedule is not found');
2024 FND_MESSAGE.SET_NAME('LNS', 'LNS_CREATE_DISB_SCHED');
2025 FND_MSG_PUB.ADD;
2026 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2027 RAISE FND_API.G_EXC_ERROR;
2028
2029 elsif disb_headers_cur%NOTFOUND and l_count > 0 then
2030 exit;
2031 end if;
2032
2033 l_count := l_count + 1;
2034
2035 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
2036 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement header #' || l_count);
2037 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan ID: ' || l_DISB_HEADER_REC.LOAN_ID);
2038 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header ID: ' || l_DISB_HEADER_REC.DISB_HEADER_ID);
2039 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Activity Code: ' || l_DISB_HEADER_REC.ACTIVITY_CODE);
2040 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement Number: ' || l_DISB_HEADER_REC.DISBURSEMENT_NUMBER);
2041 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Amount: ' || l_DISB_HEADER_REC.HEADER_AMOUNT);
2042 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Percent: ' || l_DISB_HEADER_REC.HEADER_PERCENT);
2043 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Status: ' || l_DISB_HEADER_REC.STATUS);
2044 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Target Date: ' || l_DISB_HEADER_REC.TARGET_DATE);
2045 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Requested Amount: ' || l_funded_amount);
2046 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Currency: ' || l_loan_currency);
2047 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Open loan start date: ' || l_loan_start_date);
2048 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Open loan maturity date: ' || l_loan_maturity_date);
2049
2050 if l_DISB_HEADER_REC.LOAN_ID is null then
2051
2052 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2053 FND_MSG_PUB.ADD;
2054 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2055
2056 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Loan ID is missing');
2057 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
2058 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'loan id' );
2059 FND_MSG_PUB.ADD;
2060 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2061 RAISE FND_API.G_EXC_ERROR;
2062
2063 end if;
2064
2065 if l_DISB_HEADER_REC.ACTIVITY_CODE is null then
2066
2067 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2068 FND_MSG_PUB.ADD;
2069 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2070
2071 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Activity code is missing');
2072 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_DISB_ACTIV' );
2073 FND_MSG_PUB.ADD;
2074 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2075 RAISE FND_API.G_EXC_ERROR;
2076
2077 end if;
2078
2079 if l_DISB_HEADER_REC.HEADER_PERCENT is null or l_DISB_HEADER_REC.HEADER_AMOUNT is null then
2080
2081 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2082 FND_MSG_PUB.ADD;
2083 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2084
2085 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement percent is missing');
2086 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_DISB_PERC' );
2087 FND_MSG_PUB.ADD;
2088 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2089 RAISE FND_API.G_EXC_ERROR;
2090
2091 end if;
2092
2093 if l_DISB_HEADER_REC.TARGET_DATE is null then
2094
2095 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2096 FND_MSG_PUB.ADD;
2097 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2098
2099 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Target date is missing');
2100 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_TARGET_DATE' );
2101 FND_MSG_PUB.ADD;
2102 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2103 RAISE FND_API.G_EXC_ERROR;
2104
2105 end if;
2106
2107 if trunc(l_DISB_HEADER_REC.TARGET_DATE) < trunc(l_loan_start_date) then
2108
2109 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Target date must be later that start date');
2110 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_DISB_TARGET_DATE_ERR' );
2111 FND_MSG_PUB.ADD;
2112 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2113 RAISE FND_API.G_EXC_ERROR;
2114
2115 end if;
2116
2117 l_sum_percent := l_sum_percent + l_DISB_HEADER_REC.HEADER_PERCENT;
2118 l_running_sum := l_running_sum + l_DISB_HEADER_REC.HEADER_AMOUNT;
2119
2120 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Validating disbursement lines...');
2121
2122 -- getting disbursement lines
2123 l_count1 := 0;
2124 l_sum_percent1 := 0;
2125 l_running_sum1 := 0;
2126 open disb_lines_cur(l_DISB_HEADER_REC.DISB_HEADER_ID);
2127
2128 LOOP
2129
2130 fetch disb_lines_cur into
2131 l_DISB_LINE_REC.DISB_HEADER_ID,
2132 l_DISB_LINE_REC.DISB_LINE_NUMBER,
2133 l_DISB_LINE_REC.LINE_AMOUNT,
2134 l_DISB_LINE_REC.LINE_PERCENT,
2135 l_DISB_LINE_REC.PAYEE_PARTY_ID,
2136 l_DISB_LINE_REC.BANK_ACCOUNT_ID,
2137 l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
2138 l_DISB_LINE_REC.REQUEST_DATE,
2139 l_due_date;
2140
2141 if disb_lines_cur%NOTFOUND and l_count1 = 0 then
2142
2143 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'ERROR: Disbursement lines are not found');
2144 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
2145 FND_MESSAGE.SET_TOKEN('RECORD', 'disbursement line record');
2146 FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(l_DISB_HEADER_REC.DISB_HEADER_ID), 'null'));
2147 FND_MSG_PUB.ADD;
2148 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2149 RAISE FND_API.G_EXC_ERROR;
2150
2151 elsif disb_lines_cur%NOTFOUND and l_count1 > 0 then
2152 exit;
2153 end if;
2154
2155 l_count1 := l_count1 + 1;
2156
2157 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
2158 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement line #' || l_count);
2159 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_HEADER_ID: ' || l_DISB_LINE_REC.DISB_HEADER_ID);
2160 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Number: ' || l_DISB_LINE_REC.DISB_LINE_NUMBER);
2161 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Amount: ' || l_DISB_LINE_REC.LINE_AMOUNT);
2162 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Percent: ' || l_DISB_LINE_REC.LINE_PERCENT);
2163 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee Party ID: ' || l_DISB_LINE_REC.PAYEE_PARTY_ID);
2164 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Bank Account ID: ' || l_DISB_LINE_REC.BANK_ACCOUNT_ID);
2165 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment Method Code: ' || l_DISB_LINE_REC.PAYMENT_METHOD_CODE);
2166 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Request Date: ' || l_DISB_LINE_REC.REQUEST_DATE);
2167 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Due date: ' || l_due_date);
2168
2169 if l_DISB_LINE_REC.DISB_HEADER_ID is null then
2170
2171 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2172 FND_MSG_PUB.ADD;
2173 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2174
2175 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement header is missing');
2176 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
2177 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'disb_header_id' );
2178 FND_MSG_PUB.ADD;
2179 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2180 RAISE FND_API.G_EXC_ERROR;
2181
2182 end if;
2183
2184 if l_DISB_LINE_REC.LINE_PERCENT is null or l_DISB_LINE_REC.LINE_AMOUNT is null then
2185
2186 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2187 FND_MSG_PUB.ADD;
2188 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2189
2190 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Line percent is missing');
2191 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAYEE_PERC' );
2192 FND_MSG_PUB.ADD;
2193 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2194 RAISE FND_API.G_EXC_ERROR;
2195
2196 end if;
2197
2198 if l_DISB_LINE_REC.PAYEE_PARTY_ID is null then
2199
2200 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2201 FND_MSG_PUB.ADD;
2202 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2203
2204 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Payee party ID is missing');
2205 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAYEE' );
2206 FND_MSG_PUB.ADD;
2207 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2208 RAISE FND_API.G_EXC_ERROR;
2209
2210 end if;
2211
2212 -- validate party_site for the party
2213 open party_site_cur(l_DISB_LINE_REC.PAYEE_PARTY_ID, l_due_date);
2214 fetch party_site_cur into l_party_site_id;
2215
2216 -- if no record exists - error; otherwise proceed
2217 if party_site_cur%NOTFOUND then
2218
2219 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2220 FND_MSG_PUB.ADD;
2221 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2222
2223 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'ERROR: No site exist for the party');
2224 FND_MESSAGE.SET_NAME('LNS', 'LNS_CREATE_PARTY_SITE');
2225 FND_MSG_PUB.ADD;
2226 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2227 RAISE FND_API.G_EXC_ERROR;
2228
2229 end if;
2230 close party_site_cur;
2231
2232 l_sum_percent1 := l_sum_percent1 + l_DISB_LINE_REC.LINE_PERCENT;
2233 l_running_sum1 := l_running_sum1 + l_DISB_LINE_REC.LINE_AMOUNT;
2234
2235 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement line ' || l_count1 || ' is OK');
2236
2237 END LOOP;
2238
2239 close disb_lines_cur;
2240
2241 -- checking for total percent
2242 if l_sum_percent1 <> 100 or l_running_sum1 <> l_DISB_HEADER_REC.HEADER_AMOUNT then
2243 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2244 FND_MSG_PUB.ADD;
2245 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2246
2247 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Total percentage of all lines: ' || l_sum_percent1);
2248 FND_MESSAGE.SET_NAME('LNS', 'LNS_DISB_LN_PERC_INVALID');
2249 FND_MESSAGE.SET_TOKEN('DISB_NUM', l_DISB_HEADER_REC.DISBURSEMENT_NUMBER);
2250 FND_MSG_PUB.ADD;
2251 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2252 RAISE FND_API.G_EXC_ERROR;
2253 end if;
2254
2255 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement header ' || l_count || ' is OK');
2256
2257 END LOOP;
2258
2259 close disb_headers_cur;
2260
2261 -- checking for total percent
2262 if l_sum_percent <> 100 or l_running_sum <> l_funded_amount then
2263 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBM_APPR_AND_DISB');
2264 FND_MSG_PUB.ADD;
2265 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2266
2267 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Total percentage of all disbursements: ' || l_sum_percent);
2268 FND_MESSAGE.SET_NAME('LNS', 'LNS_DISB_HDR_PERC_INVALID');
2269 FND_MSG_PUB.ADD;
2270 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2271 RAISE FND_API.G_EXC_ERROR;
2272 end if;
2273
2274 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully validated disbursement schedule');
2275
2276 -- END OF BODY OF API
2277 x_return_status := FND_API.G_RET_STS_SUCCESS;
2278
2279 -- Standard call to get message count and if count is 1, get message info
2280 FND_MSG_PUB.Count_And_Get(
2281 p_encoded => FND_API.G_FALSE,
2282 p_count => x_msg_count,
2283 p_data => x_msg_data);
2284
2285 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
2286
2287 EXCEPTION
2288 WHEN FND_API.G_EXC_ERROR THEN
2289 x_return_status := FND_API.G_RET_STS_ERROR;
2290 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2291 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2292 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2293 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2294 WHEN OTHERS THEN
2295 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2296 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
2297 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2298 END IF;
2299 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2300
2301 END;
2302
2303
2304
2305
2306 /*========================================================================
2307 | PUBLIC PROCEDURE VALIDATE_DISB_FOR_SUBMIT
2308 |
2309 | DESCRIPTION
2310 | This procedure validates all disbursement headers.
2311 |
2312 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
2313 | None
2314 |
2315 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
2316 | LogMessage
2317 |
2318 | PARAMETERS
2319 | P_API_VERSION IN Standard in parameter
2320 | P_INIT_MSG_LIST IN Standard in parameter
2321 | P_COMMIT IN Standard in parameter
2322 | P_VALIDATION_LEVEL IN Standard in parameter
2323 | P_DISB_HEADER_ID IN Disbursement header ID
2324 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
2325 | X_MSG_COUNT OUT NOCOPY Standard out parameter
2326 | X_MSG_DATA OUT NOCOPY Standard out parameter
2327 |
2328 | KNOWN ISSUES
2329 | None
2330 |
2331 | NOTES
2332 | Any interesting aspect of the code in the package body which needs
2333 | to be stated.
2334 |
2335 | MODIFICATION HISTORY
2336 | Date Author Description of Changes
2337 | 11-08-2004 scherkas Created
2338 |
2339 *=======================================================================*/
2340 PROCEDURE VALIDATE_DISB_FOR_SUBMIT(
2341 P_API_VERSION IN NUMBER,
2342 P_INIT_MSG_LIST IN VARCHAR2,
2343 P_COMMIT IN VARCHAR2,
2344 P_VALIDATION_LEVEL IN NUMBER,
2345 P_DISB_HEADER_ID IN NUMBER,
2346 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
2347 X_MSG_COUNT OUT NOCOPY NUMBER,
2348 X_MSG_DATA OUT NOCOPY VARCHAR2)
2349 IS
2350
2351 /*-----------------------------------------------------------------------+
2352 | Local Variable Declarations and initializations |
2353 +-----------------------------------------------------------------------*/
2354
2355 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_DISB_FOR_SUBMIT';
2356 l_api_version CONSTANT NUMBER := 1.0;
2357 l_return_status VARCHAR2(1);
2358 l_msg_count NUMBER;
2359 l_msg_data VARCHAR2(32767);
2360 l_no_pay_mtd_count NUMBER;
2361 l_open_start_date DATE;
2362
2363 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
2364
2365 /*-----------------------------------------------------------------------+
2366 | Cursor Declarations |
2367 +-----------------------------------------------------------------------*/
2368
2369 -- getting disbursement header and lines info
2370 CURSOR validate_cur(P_DISB_HEADER_ID number) IS
2371 select
2372 head.ACTIVITY_CODE,
2373 head.DESCRIPTION,
2374 head.HEADER_AMOUNT,
2375 head.HEADER_PERCENT,
2376 head.PAYMENT_REQUEST_DATE,
2377 head.phase,
2378 decode(loan.current_phase, 'OPEN', loan.OPEN_LOAN_START_DATE, loan.LOAN_START_DATE),
2379 (select count(1) from lns_disb_lines where disb_header_id = head.DISB_HEADER_ID and
2380 PAYMENT_METHOD_CODE is null)
2381 from LNS_DISB_HEADERS head,
2382 LNS_LOAN_HEADERS_ALL loan
2383 where head.DISB_HEADER_ID = P_DISB_HEADER_ID and
2384 head.LOAN_ID = loan.LOAN_ID and
2385 nvl(loan.current_phase, 'TERM') = nvl(head.phase, 'OPEN');
2386
2387 BEGIN
2388
2389 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
2390 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
2391
2392 -- Standard call to check for call compatibility
2393 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2394 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2395 END IF;
2396
2397 -- Initialize message list if p_init_msg_list is set to TRUE
2398 IF FND_API.To_Boolean(p_init_msg_list) THEN
2399 FND_MSG_PUB.initialize;
2400 END IF;
2401
2402 -- Initialize API return status to success
2403 l_return_status := FND_API.G_RET_STS_SUCCESS;
2404
2405 -- START OF BODY OF API
2406
2407 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Validating disbursement header for payment request submition...');
2408
2409 -- getting disbursement header and lines info
2410 open validate_cur(P_DISB_HEADER_ID);
2411 fetch validate_cur into l_DISB_HEADER_REC.ACTIVITY_CODE,
2412 l_DISB_HEADER_REC.DESCRIPTION,
2413 l_DISB_HEADER_REC.HEADER_AMOUNT,
2414 l_DISB_HEADER_REC.HEADER_PERCENT,
2415 l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE,
2416 l_DISB_HEADER_REC.PHASE,
2417 l_open_start_date,
2418 l_no_pay_mtd_count;
2419
2420 LogMessage(FND_LOG.LEVEL_STATEMENT, 'ACTIVITY_CODE: ' || l_DISB_HEADER_REC.ACTIVITY_CODE);
2421 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DESCRIPTION: ' || l_DISB_HEADER_REC.DESCRIPTION);
2422 LogMessage(FND_LOG.LEVEL_STATEMENT, 'HEADER_AMOUNT: ' || l_DISB_HEADER_REC.HEADER_AMOUNT);
2423 LogMessage(FND_LOG.LEVEL_STATEMENT, 'HEADER_PERCENT: ' || l_DISB_HEADER_REC.HEADER_PERCENT);
2424 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PAYMENT_REQUEST_DATE: ' || l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE);
2425 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PHASE: ' || l_DISB_HEADER_REC.PHASE);
2426 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_open_start_date: ' || l_open_start_date);
2427 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_no_pay_mtd_count: ' || l_no_pay_mtd_count);
2428
2429 -- if no record exists - return; otherwise proceed
2430 if validate_cur%NOTFOUND then
2431
2432 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'ERROR: Disbursement Header Record is not found');
2433 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
2434 FND_MESSAGE.SET_TOKEN('RECORD', 'disbursement header record');
2435 FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(P_DISB_HEADER_ID), 'null'));
2436 FND_MSG_PUB.ADD;
2437 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2438 RAISE FND_API.G_EXC_ERROR;
2439
2440 end if;
2441
2442 close validate_cur;
2443
2444 if l_DISB_HEADER_REC.ACTIVITY_CODE is null and l_DISB_HEADER_REC.DESCRIPTION is null then
2445
2446 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Activity code is missing');
2447 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_DISB_ACTIV' );
2448 FND_MSG_PUB.ADD;
2449 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2450 RAISE FND_API.G_EXC_ERROR;
2451
2452 end if;
2453
2454 if l_DISB_HEADER_REC.HEADER_AMOUNT is null then
2455
2456 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement percent is missing');
2457 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_DISB_PERC' );
2458 FND_MSG_PUB.ADD;
2459 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2460 RAISE FND_API.G_EXC_ERROR;
2461
2462 end if;
2463
2464 -- validate Payment request date
2465 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment request date: ' || l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE);
2466 if l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE is null then
2467 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Payment request date is missing');
2468 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAY_REQ_DATE' );
2469 FND_MSG_PUB.ADD;
2470 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2471 RAISE FND_API.G_EXC_ERROR;
2472 end if;
2473
2474 if trunc(l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE) < trunc(l_open_start_date) then
2475
2476 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Payment request date must be greater than open start date');
2477 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_PAY_REQ_DT_INVALID' );
2478 FND_MSG_PUB.ADD;
2479 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2480 RAISE FND_API.G_EXC_ERROR;
2481
2482 end if;
2483
2484 -- validate that no lines without payment method
2485 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Number of lines without payment method: ' || l_no_pay_mtd_count);
2486 if l_no_pay_mtd_count > 0 then
2487 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'There are disb lines without payment method');
2488 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAY_METHOD' );
2489 FND_MSG_PUB.ADD;
2490 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2491 RAISE FND_API.G_EXC_ERROR;
2492 end if;
2493
2494 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully validated disbursement header for payment request submition');
2495
2496 -- END OF BODY OF API
2497 x_return_status := FND_API.G_RET_STS_SUCCESS;
2498
2499 -- Standard call to get message count and if count is 1, get message info
2500 FND_MSG_PUB.Count_And_Get(
2501 p_encoded => FND_API.G_FALSE,
2502 p_count => x_msg_count,
2503 p_data => x_msg_data);
2504
2505 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
2506
2507 EXCEPTION
2508 WHEN FND_API.G_EXC_ERROR THEN
2509 x_return_status := FND_API.G_RET_STS_ERROR;
2510 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2511 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2512 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2513 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2514 WHEN OTHERS THEN
2515 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2516 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
2517 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2518 END IF;
2519 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2520
2521 END;
2522
2523
2524
2525
2526 /*========================================================================
2527 | PUBLIC PROCEDURE VALIDATE_DISB_LINES
2528 |
2529 | DESCRIPTION
2530 | This procedure validates all disbursement lines for a specific disbursement header.
2531 |
2532 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
2533 | None
2534 |
2535 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
2536 | LogMessage
2537 |
2538 | PARAMETERS
2539 | P_API_VERSION IN Standard in parameter
2540 | P_INIT_MSG_LIST IN Standard in parameter
2541 | P_COMMIT IN Standard in parameter
2542 | P_VALIDATION_LEVEL IN Standard in parameter
2543 | P_DISB_HEADER_ID IN Disbursement Header ID
2544 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
2545 | X_MSG_COUNT OUT NOCOPY Standard out parameter
2546 | X_MSG_DATA OUT NOCOPY Standard out parameter
2547 |
2548 | KNOWN ISSUES
2549 | None
2550 |
2551 | NOTES
2552 | Any interesting aspect of the code in the package body which needs
2553 | to be stated.
2554 |
2555 | MODIFICATION HISTORY
2556 | Date Author Description of Changes
2557 | 11-08-2004 scherkas Created
2558 |
2559 *=======================================================================*/
2560 PROCEDURE VALIDATE_DISB_LINES(
2561 P_API_VERSION IN NUMBER,
2562 P_INIT_MSG_LIST IN VARCHAR2,
2563 P_COMMIT IN VARCHAR2,
2564 P_VALIDATION_LEVEL IN NUMBER,
2565 P_DISB_HEADER_ID IN NUMBER,
2566 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
2567 X_MSG_COUNT OUT NOCOPY NUMBER,
2568 X_MSG_DATA OUT NOCOPY VARCHAR2)
2569 IS
2570
2571 /*-----------------------------------------------------------------------+
2572 | Local Variable Declarations and initializations |
2573 +-----------------------------------------------------------------------*/
2574
2575 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_DISB_LINES';
2576 l_api_version CONSTANT NUMBER := 1.0;
2577 l_return_status VARCHAR2(1);
2578 l_msg_count NUMBER;
2579 l_msg_data VARCHAR2(32767);
2580 l_count number;
2581 l_precision number;
2582 l_ext_precision number;
2583 l_min_acct_unit number;
2584 l_loan_currency varchar2(15);
2585 l_changed number;
2586 l_precision_queried number;
2587 l_running_sum number;
2588 l_line_amount number;
2589 l_sum_percent number;
2590 l_header_amount number;
2591 l_le_id number;
2592 l_org_id number;
2593 l_disb_number number;
2594 l_due_date date;
2595 l_party_site_id number;
2596
2597 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
2598 TYPE DISB_LINES_TBL IS TABLE OF LNS_FUNDING_PUB.LNS_DISB_LINES_REC INDEX BY BINARY_INTEGER;
2599 l_DISB_LINES_TBL DISB_LINES_TBL;
2600
2601
2602 /*-----------------------------------------------------------------------+
2603 | Cursor Declarations |
2604 +-----------------------------------------------------------------------*/
2605
2606 -- getting disbursement lines
2607 CURSOR disb_lines_cur(P_DISB_HEADER_ID number) IS
2608 select
2609 line.DISB_LINE_ID,
2610 line.DISB_HEADER_ID,
2611 line.DISB_LINE_NUMBER,
2612 line.LINE_AMOUNT,
2613 line.LINE_PERCENT,
2614 line.PAYEE_PARTY_ID,
2615 line.BANK_ACCOUNT_ID,
2616 line.PAYMENT_METHOD_CODE,
2617 line.REQUEST_DATE,
2618 line.OBJECT_VERSION_NUMBER,
2619 line.status,
2620 line.DISBURSEMENT_DATE,
2621 head.HEADER_AMOUNT,
2622 head.DISBURSEMENT_NUMBER,
2623 loan.LOAN_CURRENCY,
2624 loan.ORG_ID,
2625 loan.LEGAL_ENTITY_ID,
2626 nvl(head.PAYMENT_REQUEST_DATE, head.TARGET_DATE)
2627 from LNS_DISB_LINES line,
2628 LNS_DISB_HEADERS head,
2629 LNS_LOAN_HEADERS_ALL loan
2630 where line.DISB_HEADER_ID = P_DISB_HEADER_ID and
2631 line.DISB_HEADER_ID = head.DISB_HEADER_ID and
2632 head.LOAN_ID = loan.LOAN_ID
2633 order by line.DISB_LINE_ID;
2634
2635 -- validate party_site for the party
2636 CURSOR party_site_cur(P_PARTY_ID number, P_DATE date) IS
2637 SELECT party_site_id
2638 FROM HZ_Party_Sites HPS
2639 WHERE HPS.Party_ID = P_PARTY_ID
2640 AND HPS.Identifying_Address_Flag = 'Y'
2641 AND NVL(HPS.Start_Date_Active, P_DATE) = P_DATE;
2642
2643 BEGIN
2644
2645 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
2646 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
2647
2648 -- Standard start of API savepoint
2649 SAVEPOINT VALIDATE_DISB_LINES;
2650 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
2651
2652 -- Standard call to check for call compatibility
2653 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2654 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2655 END IF;
2656
2657 -- Initialize message list if p_init_msg_list is set to TRUE
2658 IF FND_API.To_Boolean(p_init_msg_list) THEN
2659 FND_MSG_PUB.initialize;
2660 END IF;
2661
2662 -- Initialize API return status to success
2663 l_return_status := FND_API.G_RET_STS_SUCCESS;
2664
2665 -- START OF BODY OF API
2666
2667 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Validating disbursement lines for header ' || P_DISB_HEADER_ID || '...');
2668
2669 -- getting disbursement lines
2670 l_precision_queried := 0;
2671 l_count := 0;
2672 l_sum_percent := 0;
2673 l_running_sum := 0;
2674 open disb_lines_cur(P_DISB_HEADER_ID);
2675
2676 LOOP
2677
2678 fetch disb_lines_cur into
2679 l_DISB_LINE_REC.DISB_LINE_ID,
2680 l_DISB_LINE_REC.DISB_HEADER_ID,
2681 l_DISB_LINE_REC.DISB_LINE_NUMBER,
2682 l_DISB_LINE_REC.LINE_AMOUNT,
2683 l_DISB_LINE_REC.LINE_PERCENT,
2684 l_DISB_LINE_REC.PAYEE_PARTY_ID,
2685 l_DISB_LINE_REC.BANK_ACCOUNT_ID,
2686 l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
2687 l_DISB_LINE_REC.REQUEST_DATE,
2688 l_DISB_LINE_REC.OBJECT_VERSION_NUMBER,
2689 l_DISB_LINE_REC.STATUS,
2690 l_DISB_LINE_REC.DISBURSEMENT_DATE,
2691 l_header_amount,
2692 l_disb_number,
2693 l_loan_currency,
2694 l_org_id,
2695 l_le_id,
2696 l_due_date;
2697
2698 exit when disb_lines_cur%NOTFOUND;
2699
2700 l_changed := 0;
2701 l_count := l_count + 1;
2702
2703 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
2704 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement line #' || l_count);
2705 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line ID: ' || l_DISB_LINE_REC.DISB_LINE_ID);
2706 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header ID: ' || l_DISB_LINE_REC.DISB_HEADER_ID);
2707 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Number: ' || l_DISB_LINE_REC.DISB_LINE_NUMBER);
2708 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Amount: ' || l_DISB_LINE_REC.LINE_AMOUNT);
2709 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Percent: ' || l_DISB_LINE_REC.LINE_PERCENT);
2710 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee Party ID: ' || l_DISB_LINE_REC.PAYEE_PARTY_ID);
2711 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Bank Account ID: ' || l_DISB_LINE_REC.BANK_ACCOUNT_ID);
2712 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment Method Code: ' || l_DISB_LINE_REC.PAYMENT_METHOD_CODE);
2713 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Request Date: ' || l_DISB_LINE_REC.REQUEST_DATE);
2714 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Version: ' || l_DISB_LINE_REC.OBJECT_VERSION_NUMBER);
2715 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Status: ' || l_DISB_LINE_REC.STATUS);
2716 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement Date: ' || l_DISB_LINE_REC.DISBURSEMENT_DATE);
2717 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header Amount: ' || l_header_amount);
2718 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement Number: ' || l_disb_number);
2719 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Currency: ' || l_loan_currency);
2720 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Org ID: ' || l_org_id);
2721 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LE ID: ' || l_le_id);
2722 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Due date: ' || l_due_date);
2723
2724 if l_DISB_LINE_REC.DISB_HEADER_ID is null then
2725
2726 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement header is missing');
2727 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
2728 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'disb_header_id' );
2729 FND_MSG_PUB.ADD;
2730 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2731 RAISE FND_API.G_EXC_ERROR;
2732
2733 end if;
2734
2735 if l_DISB_LINE_REC.LINE_PERCENT is null then
2736
2737 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Line percent is missing');
2738 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAYEE_PERC' );
2739 FND_MSG_PUB.ADD;
2740 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2741 RAISE FND_API.G_EXC_ERROR;
2742
2743 end if;
2744
2745 if l_DISB_LINE_REC.PAYEE_PARTY_ID is null then
2746
2747 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Payee party ID is missing');
2748 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_PAYEE' );
2749 FND_MSG_PUB.ADD;
2750 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2751 RAISE FND_API.G_EXC_ERROR;
2752
2753 end if;
2754
2755 /* -- disabled below validation as part of fix for bug 9709380
2756 -- validate party_site for the party
2757 open party_site_cur(l_DISB_LINE_REC.PAYEE_PARTY_ID, l_due_date);
2758 fetch party_site_cur into l_party_site_id;
2759
2760 -- if no record exists - error; otherwise proceed
2761 if party_site_cur%NOTFOUND then
2762
2763 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'ERROR: No site exist for the party');
2764 FND_MESSAGE.SET_NAME('LNS', 'LNS_CREATE_PARTY_SITE');
2765 FND_MSG_PUB.ADD;
2766 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2767 RAISE FND_API.G_EXC_ERROR;
2768
2769 end if;
2770 close party_site_cur;
2771 */
2772 l_sum_percent := l_sum_percent + l_DISB_LINE_REC.LINE_PERCENT;
2773
2774 if l_DISB_LINE_REC.DISBURSEMENT_DATE is not null then
2775
2776 LogMessage(FND_LOG.LEVEL_STATEMENT, 'This line has already been successfully disbursed - skiping it');
2777
2778 else
2779
2780 if l_precision_queried = 0 then
2781 -- get precision
2782 fnd_currency.GET_INFO(CURRENCY_CODE => l_loan_currency,
2783 PRECISION => l_precision,
2784 EXT_PRECISION => l_ext_precision,
2785 MIN_ACCT_UNIT => l_min_acct_unit);
2786
2787 l_precision_queried := 1;
2788 end if;
2789
2790 -- setting new values
2791 l_DISB_LINE_REC.DISB_LINE_NUMBER := l_count;
2792 l_DISB_LINE_REC.LINE_AMOUNT := round(l_header_amount * l_DISB_LINE_REC.LINE_PERCENT / 100, l_precision);
2793
2794 l_DISB_LINES_TBL(l_DISB_LINES_TBL.COUNT + 1) := l_DISB_LINE_REC;
2795
2796 l_changed := 1;
2797
2798 end if;
2799
2800 l_line_amount := l_DISB_LINE_REC.LINE_AMOUNT;
2801 l_running_sum := l_running_sum + l_line_amount;
2802
2803 END LOOP;
2804
2805 close disb_lines_cur;
2806
2807 if l_changed = 1 then
2808 l_DISB_LINES_TBL(l_DISB_LINES_TBL.COUNT).LINE_AMOUNT := l_header_amount - (l_running_sum - l_line_amount);
2809 end if;
2810
2811 -- checking for total percent
2812 if l_sum_percent <> 100 then
2813 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Total percentage of all lines: ' || l_sum_percent);
2814 FND_MESSAGE.SET_NAME('LNS', 'LNS_DISB_LN_PERC_INVALID');
2815 FND_MESSAGE.SET_TOKEN('DISB_NUM', l_disb_number);
2816 FND_MSG_PUB.ADD;
2817 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
2818 RAISE FND_API.G_EXC_ERROR;
2819 end if;
2820
2821 -- loop thru table and update disb lines table
2822 FOR l_Count1 IN 1..l_DISB_LINES_TBL.COUNT LOOP
2823
2824 UPDATE_DISB_LINE(
2825 P_API_VERSION => 1.0,
2826 P_INIT_MSG_LIST => FND_API.G_TRUE,
2827 P_COMMIT => FND_API.G_FALSE,
2828 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
2829 P_DISB_LINE_REC => l_DISB_LINES_TBL(l_Count1),
2830 X_RETURN_STATUS => l_return_status,
2831 X_MSG_COUNT => l_msg_count,
2832 X_MSG_DATA => l_msg_data);
2833
2834 IF l_return_status <> 'S' THEN
2835 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Call to UPDATE_DISB_LINE failed');
2836 RAISE FND_API.G_EXC_ERROR;
2837 END IF;
2838
2839 END LOOP;
2840
2841 if P_COMMIT = FND_API.G_TRUE then
2842 COMMIT WORK;
2843 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
2844 end if;
2845
2846 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully validated disbursement lines for header ' || P_DISB_HEADER_ID);
2847
2848 -- END OF BODY OF API
2849 x_return_status := FND_API.G_RET_STS_SUCCESS;
2850
2851 -- Standard call to get message count and if count is 1, get message info
2852 FND_MSG_PUB.Count_And_Get(
2853 p_encoded => FND_API.G_FALSE,
2854 p_count => x_msg_count,
2855 p_data => x_msg_data);
2856
2857 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
2858
2859 EXCEPTION
2860 WHEN FND_API.G_EXC_ERROR THEN
2861 ROLLBACK TO VALIDATE_DISB_LINES;
2862 x_return_status := FND_API.G_RET_STS_ERROR;
2863 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2864 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
2865 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2866 ROLLBACK TO VALIDATE_DISB_LINES;
2867 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2868 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2869 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
2870 WHEN OTHERS THEN
2871 ROLLBACK TO VALIDATE_DISB_LINES;
2872 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2873 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
2874 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2875 END IF;
2876 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
2877 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
2878
2879 END;
2880
2881
2882
2883
2884 /*========================================================================
2885 | PUBLIC PROCEDURE VALIDATE_DISB_HEADERS
2886 |
2887 | DESCRIPTION
2888 | This procedure validates all disbursement headers.
2889 |
2890 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
2891 | None
2892 |
2893 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
2894 | LogMessage
2895 |
2896 | PARAMETERS
2897 | P_API_VERSION IN Standard in parameter
2898 | P_INIT_MSG_LIST IN Standard in parameter
2899 | P_COMMIT IN Standard in parameter
2900 | P_VALIDATION_LEVEL IN Standard in parameter
2901 | P_LOAN_ID IN Loan ID
2902 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
2903 | X_MSG_COUNT OUT NOCOPY Standard out parameter
2904 | X_MSG_DATA OUT NOCOPY Standard out parameter
2905 |
2906 | KNOWN ISSUES
2907 | None
2908 |
2909 | NOTES
2910 | Any interesting aspect of the code in the package body which needs
2911 | to be stated.
2912 |
2913 | MODIFICATION HISTORY
2914 | Date Author Description of Changes
2915 | 11-08-2004 scherkas Created
2916 |
2917 *=======================================================================*/
2918 PROCEDURE VALIDATE_DISB_HEADERS(
2919 P_API_VERSION IN NUMBER,
2920 P_INIT_MSG_LIST IN VARCHAR2,
2921 P_COMMIT IN VARCHAR2,
2922 P_VALIDATION_LEVEL IN NUMBER,
2923 P_LOAN_ID IN NUMBER,
2924 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
2925 X_MSG_COUNT OUT NOCOPY NUMBER,
2926 X_MSG_DATA OUT NOCOPY VARCHAR2)
2927 IS
2928
2929 /*-----------------------------------------------------------------------+
2930 | Local Variable Declarations and initializations |
2931 +-----------------------------------------------------------------------*/
2932
2933 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_DISB_HEADERS';
2934 l_api_version CONSTANT NUMBER := 1.0;
2935 l_return_status VARCHAR2(1);
2936 l_msg_count NUMBER;
2937 l_msg_data VARCHAR2(32767);
2938 l_count number;
2939 l_funded_amount number;
2940 l_precision number;
2941 l_ext_precision number;
2942 l_min_acct_unit number;
2943 l_loan_currency varchar2(15);
2944 l_changed number;
2945 l_precision_queried number;
2946 l_running_sum number;
2947 l_line_amount number;
2948 l_sum_percent number;
2949 l_loan_start_date date;
2950 l_loan_maturity_date date;
2951 l_loan_status varchar2(30);
2952 l_move_maturity_date number;
2953
2954 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
2955 TYPE DISB_HEADERS_TBL IS TABLE OF LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC INDEX BY BINARY_INTEGER;
2956 l_DISB_HEADERS_TBL DISB_HEADERS_TBL;
2957
2958 /*-----------------------------------------------------------------------+
2959 | Cursor Declarations |
2960 +-----------------------------------------------------------------------*/
2961
2962 -- getting disbursement header info
2963 CURSOR disb_headers_cur(P_LOAN_ID number) IS
2964 select
2965 loan.REQUESTED_AMOUNT,
2966 loan.LOAN_CURRENCY,
2967 head.DISB_HEADER_ID,
2968 head.LOAN_ID,
2969 head.ACTIVITY_CODE,
2970 head.DISBURSEMENT_NUMBER,
2971 head.HEADER_AMOUNT,
2972 head.HEADER_PERCENT,
2973 head.STATUS,
2974 head.TARGET_DATE,
2975 head.OBJECT_VERSION_NUMBER,
2976 decode(nvl(loan.CURRENT_PHASE, 'TERM'), 'TERM', loan.LOAN_START_DATE, loan.OPEN_LOAN_START_DATE),
2977 decode(nvl(loan.CURRENT_PHASE, 'TERM'), 'TERM', loan.LOAN_MATURITY_DATE, loan.OPEN_MATURITY_DATE),
2978 loan.loan_status,
2979 head.payment_request_date,
2980 head.phase,
2981 head.description
2982 from LNS_DISB_HEADERS head,
2983 LNS_LOAN_HEADERS_ALL loan
2984 where loan.LOAN_ID = P_LOAN_ID and
2985 head.LOAN_ID = loan.LOAN_ID and
2986 nvl(loan.current_phase, 'TERM') = nvl(head.phase, 'OPEN')
2987 order by head.TARGET_DATE;
2988
2989 CURSOR move_maturity_date_cur(P_LOAN_ID number) IS
2990 select
2991 CASE
2992 WHEN (nvl(loan.CURRENT_PHASE, 'TERM') = 'OPEN') THEN
2993 sign(trunc(loan.OPEN_MATURITY_DATE) -
2994 (select trunc(max(PAYMENT_REQUEST_DATE)) from LNS_DISB_HEADERS where LOAN_ID = loan.LOAN_ID))
2995 WHEN (nvl(loan.CURRENT_PHASE, 'TERM') = 'TERM' and loan.MULTIPLE_FUNDING_FLAG = 'N') THEN
2996 sign(trunc(loan.LOAN_MATURITY_DATE) -
2997 (select trunc(max(PAYMENT_REQUEST_DATE)) from LNS_DISB_HEADERS where LOAN_ID = loan.LOAN_ID))
2998 ELSE
2999 1
3000 END
3001 from lns_loan_headers_all loan
3002 where loan.LOAN_ID = P_LOAN_ID;
3003
3004 BEGIN
3005
3006 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
3007 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
3008
3009 -- Standard start of API savepoint
3010 SAVEPOINT VALIDATE_DISB_HEADERS;
3011 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
3012
3013 -- Standard call to check for call compatibility
3014 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
3015 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3016 END IF;
3017
3018 -- Initialize message list if p_init_msg_list is set to TRUE
3019 IF FND_API.To_Boolean(p_init_msg_list) THEN
3020 FND_MSG_PUB.initialize;
3021 END IF;
3022
3023 -- Initialize API return status to success
3024 l_return_status := FND_API.G_RET_STS_SUCCESS;
3025
3026 -- START OF BODY OF API
3027
3028 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Validating all disbursement headers...');
3029
3030 -- getting all disbursement headers
3031 l_precision_queried := 0;
3032 l_count := 0;
3033 l_sum_percent := 0;
3034 l_running_sum := 0;
3035 open disb_headers_cur(P_LOAN_ID);
3036
3037 LOOP
3038
3039 fetch disb_headers_cur into
3040 l_funded_amount,
3041 l_loan_currency,
3042 l_DISB_HEADER_REC.DISB_HEADER_ID,
3043 l_DISB_HEADER_REC.LOAN_ID,
3044 l_DISB_HEADER_REC.ACTIVITY_CODE,
3045 l_DISB_HEADER_REC.DISBURSEMENT_NUMBER,
3046 l_DISB_HEADER_REC.HEADER_AMOUNT,
3047 l_DISB_HEADER_REC.HEADER_PERCENT,
3048 l_DISB_HEADER_REC.STATUS,
3049 l_DISB_HEADER_REC.TARGET_DATE,
3050 l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER,
3051 l_loan_start_date,
3052 l_loan_maturity_date,
3053 l_loan_status,
3054 l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE,
3055 l_DISB_HEADER_REC.PHASE,
3056 l_DISB_HEADER_REC.DESCRIPTION;
3057
3058 exit when disb_headers_cur%NOTFOUND;
3059
3060 l_changed := 0;
3061 l_count := l_count + 1;
3062
3063 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
3064 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement header #' || l_count);
3065 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan ID: ' || l_DISB_HEADER_REC.LOAN_ID);
3066 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header ID: ' || l_DISB_HEADER_REC.DISB_HEADER_ID);
3067 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Activity Code: ' || l_DISB_HEADER_REC.ACTIVITY_CODE);
3068 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Description: ' || l_DISB_HEADER_REC.DESCRIPTION);
3069 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement Number: ' || l_DISB_HEADER_REC.DISBURSEMENT_NUMBER);
3070 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Amount: ' || l_DISB_HEADER_REC.HEADER_AMOUNT);
3071 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Percent: ' || l_DISB_HEADER_REC.HEADER_PERCENT);
3072 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Status: ' || l_DISB_HEADER_REC.STATUS);
3073 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Version: ' || l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER);
3074 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Target Date: ' || l_DISB_HEADER_REC.TARGET_DATE);
3075 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment Request Date: ' || l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE);
3076 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Phase: ' || l_DISB_HEADER_REC.PHASE);
3077 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Requested Amount: ' || l_funded_amount);
3078 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Currency: ' || l_loan_currency);
3079 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan start date: ' || l_loan_start_date);
3080 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan maturity date: ' || l_loan_maturity_date);
3081 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan status: ' || l_loan_status);
3082
3083 if l_DISB_HEADER_REC.LOAN_ID is null then
3084
3085 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Loan ID is missing');
3086 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
3087 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'loan id' );
3088 FND_MSG_PUB.ADD;
3089 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3090 RAISE FND_API.G_EXC_ERROR;
3091
3092 end if;
3093
3094 if l_DISB_HEADER_REC.ACTIVITY_CODE is null and l_DISB_HEADER_REC.DESCRIPTION is null then
3095
3096 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Activity code is missing');
3097 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_DISB_ACTIV' );
3098 FND_MSG_PUB.ADD;
3099 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3100 RAISE FND_API.G_EXC_ERROR;
3101
3102 end if;
3103
3104 if l_DISB_HEADER_REC.HEADER_PERCENT is null and l_DISB_HEADER_REC.HEADER_AMOUNT is null then
3105
3106 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Disbursement percent is missing');
3107 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_DISB_PERC' );
3108 FND_MSG_PUB.ADD;
3109 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3110 RAISE FND_API.G_EXC_ERROR;
3111
3112 end if;
3113
3114 if l_DISB_HEADER_REC.TARGET_DATE is null and l_DISB_HEADER_REC.PHASE = 'OPEN' then
3115
3116 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Target date is missing');
3117 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_ENTER_TARGET_DATE' );
3118 FND_MSG_PUB.ADD;
3119 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3120 RAISE FND_API.G_EXC_ERROR;
3121
3122 end if;
3123 /*
3124 --karamach --Bug5295091
3125 if (l_DISB_HEADER_REC.STATUS NOT IN ('CANCELLED','IN_FUNDING','FUNDING_ERROR','PARTIALLY_FUNDED','FULLY_FUNDED')
3126 AND ( trunc(l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE) < trunc(sysdate))) then
3127
3128 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Payment Request date is less than today');
3129 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_DISB_REQ_DATE_ERR' );
3130 FND_MSG_PUB.ADD;
3131 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3132 RAISE FND_API.G_EXC_ERROR;
3133
3134 end if;
3135 */
3136 if l_loan_status = 'INCOMPLETE' then
3137 if l_DISB_HEADER_REC.PHASE = 'OPEN' then
3138 if trunc(l_DISB_HEADER_REC.TARGET_DATE) < trunc(l_loan_start_date) then
3139 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Target date must be later that start date');
3140 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_DISB_TARGET_DATE_ERR' );
3141 FND_MSG_PUB.ADD;
3142 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3143 RAISE FND_API.G_EXC_ERROR;
3144
3145 end if;
3146 else
3147 if trunc(l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE) < trunc(l_loan_start_date) then
3148 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Target date must be later that start date');
3149 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_DISB_TARGET_DATE_ERR' );
3150 FND_MSG_PUB.ADD;
3151 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3152 RAISE FND_API.G_EXC_ERROR;
3153
3154 end if;
3155 end if;
3156 end if;
3157
3158 if l_DISB_HEADER_REC.PHASE = 'OPEN' then
3159
3160 l_sum_percent := l_sum_percent + l_DISB_HEADER_REC.HEADER_PERCENT;
3161
3162 if l_DISB_HEADER_REC.STATUS is not null then
3163
3164 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Status is already set - nothing to change for this disbursement header');
3165
3166 else
3167
3168 if l_precision_queried = 0 then
3169 -- get precision
3170 fnd_currency.GET_INFO(CURRENCY_CODE => l_loan_currency,
3171 PRECISION => l_precision,
3172 EXT_PRECISION => l_ext_precision,
3173 MIN_ACCT_UNIT => l_min_acct_unit);
3174
3175 l_precision_queried := 1;
3176 end if;
3177
3178 -- setting new values
3179 l_DISB_HEADER_REC.DISBURSEMENT_NUMBER := l_count;
3180 l_DISB_HEADER_REC.HEADER_AMOUNT := round(l_funded_amount * l_DISB_HEADER_REC.HEADER_PERCENT / 100, l_precision);
3181
3182 l_DISB_HEADERS_TBL(l_DISB_HEADERS_TBL.COUNT + 1) := l_DISB_HEADER_REC;
3183
3184 l_changed := 1;
3185
3186 end if;
3187
3188 l_line_amount := l_DISB_HEADER_REC.HEADER_AMOUNT;
3189 l_running_sum := l_running_sum + l_line_amount;
3190
3191 else
3192
3193 if l_DISB_HEADER_REC.STATUS is not null then
3194 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Status is already set - nothing to change for this disbursement header');
3195 else
3196 l_DISB_HEADERS_TBL(l_DISB_HEADERS_TBL.COUNT + 1) := l_DISB_HEADER_REC;
3197 end if;
3198
3199 end if;
3200
3201 END LOOP;
3202
3203 close disb_headers_cur;
3204
3205 if l_DISB_HEADER_REC.PHASE = 'OPEN' then
3206
3207 if l_changed = 1 then
3208 l_DISB_HEADERS_TBL(l_DISB_HEADERS_TBL.COUNT).HEADER_AMOUNT := l_funded_amount - (l_running_sum - l_line_amount);
3209 end if;
3210
3211 -- checking for total percent
3212 if l_sum_percent <> 100 then
3213 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Total percentage of all disbursements: ' || l_sum_percent);
3214 FND_MESSAGE.SET_NAME('LNS', 'LNS_DISB_HDR_PERC_INVALID');
3215 FND_MSG_PUB.ADD;
3216 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
3217 RAISE FND_API.G_EXC_ERROR;
3218 end if;
3219
3220 end if;
3221
3222 -- loop thru table and update disb headers table
3223 FOR l_Count1 IN 1..l_DISB_HEADERS_TBL.COUNT LOOP
3224
3225 UPDATE_DISB_HEADER(
3226 P_API_VERSION => 1.0,
3227 P_INIT_MSG_LIST => FND_API.G_TRUE,
3228 P_COMMIT => FND_API.G_FALSE,
3229 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
3230 P_DISB_HEADER_REC => l_DISB_HEADERS_TBL(l_Count1),
3231 X_RETURN_STATUS => l_return_status,
3232 X_MSG_COUNT => l_msg_count,
3233 X_MSG_DATA => l_msg_data);
3234
3235 IF l_return_status <> 'S' THEN
3236 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_HEADER failed');
3237 RAISE FND_API.G_EXC_ERROR;
3238 END IF;
3239
3240 VALIDATE_DISB_LINES(
3241 P_API_VERSION => 1.0,
3242 P_INIT_MSG_LIST => FND_API.G_TRUE,
3243 P_COMMIT => FND_API.G_FALSE,
3244 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
3245 P_DISB_HEADER_ID => l_DISB_HEADERS_TBL(l_Count1).DISB_HEADER_ID,
3246 X_RETURN_STATUS => l_return_status,
3247 X_MSG_COUNT => l_msg_count,
3248 X_MSG_DATA => l_msg_data);
3249
3250 IF l_return_status <> 'S' THEN
3251 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to VALIDATE_DISB_LINES failed');
3252 RAISE FND_API.G_EXC_ERROR;
3253 END IF;
3254
3255 END LOOP;
3256 /*
3257 -- verify if we need to move open phase maturity date: bug 4884596
3258 open move_maturity_date_cur(P_LOAN_ID);
3259 fetch move_maturity_date_cur into l_move_maturity_date;
3260 close move_maturity_date_cur;
3261
3262 if l_move_maturity_date = -1 then
3263
3264 lns_financials.shiftLoan(
3265 p_loan_id => P_LOAN_ID
3266 ,p_init_msg_list => FND_API.G_TRUE
3267 ,p_commit => FND_API.G_FALSE
3268 ,x_return_status => l_return_status
3269 ,x_msg_count => l_msg_count
3270 ,x_msg_data => l_msg_data);
3271
3272 IF l_return_status <> 'S' THEN
3273 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to lns_financials.shiftLoan failed');
3274 RAISE FND_API.G_EXC_ERROR;
3275 END IF;
3276
3277 end if;
3278 */
3279 if P_COMMIT = FND_API.G_TRUE then
3280 COMMIT WORK;
3281 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
3282 end if;
3283
3284 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully validated all disbursement headers');
3285
3286 -- END OF BODY OF API
3287 x_return_status := FND_API.G_RET_STS_SUCCESS;
3288
3289 -- Standard call to get message count and if count is 1, get message info
3290 FND_MSG_PUB.Count_And_Get(
3291 p_encoded => FND_API.G_FALSE,
3292 p_count => x_msg_count,
3293 p_data => x_msg_data);
3294
3295 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
3296
3297 EXCEPTION
3298 WHEN FND_API.G_EXC_ERROR THEN
3299 ROLLBACK TO VALIDATE_DISB_HEADERS;
3300 x_return_status := FND_API.G_RET_STS_ERROR;
3301 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
3302 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
3303 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3304 ROLLBACK TO VALIDATE_DISB_HEADERS;
3305 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3306 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
3307 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
3308 WHEN OTHERS THEN
3309 ROLLBACK TO VALIDATE_DISB_HEADERS;
3310 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3311 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
3312 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3313 END IF;
3314 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
3315 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
3316
3317 END;
3318
3319
3320
3321
3322 /*========================================================================
3323 | PUBLIC PROCEDURE Get_Default_Payment_Attributes
3324 |
3325 | DESCRIPTION
3326 | This procedure returns default payment attributes from Oracle Payments
3327 |
3328 | PSEUDO CODE/LOGIC
3329 |
3330 | PARAMETERS
3331 | P_API_VERSION IN Standard in parameter
3332 | P_INIT_MSG_LIST IN Standard in parameter
3333 | P_COMMIT IN Standard in parameter
3334 | P_VALIDATION_LEVEL IN Standard in parameter
3335 | P_Trxn_Attributes_Rec IN LNS_FUNDING_PUB.Trxn_Attributes_Rec_Type,
3336 | x_default_pmt_attrs_rec OUT NOCOPY LNS_FUNDING_PUB.Default_Pmt_Attrs_Rec_Type,
3337 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
3338 | X_MSG_COUNT OUT NOCOPY Standard out parameter
3339 | X_MSG_DATA OUT NOCOPY Standard out parameter
3340 |
3341 | KNOWN ISSUES
3342 | None
3343 |
3344 | NOTES
3345 |
3346 | MODIFICATION HISTORY
3347 | Date Author Description of Changes
3348 | 06-07-2005 scherkas Created
3349 |
3350 *=======================================================================*/
3351 PROCEDURE Get_Default_Payment_Attributes(
3352 P_API_VERSION IN NUMBER,
3353 P_INIT_MSG_LIST IN VARCHAR2,
3354 P_COMMIT IN VARCHAR2,
3355 P_VALIDATION_LEVEL IN NUMBER,
3356 P_Trxn_Attributes_Rec IN LNS_FUNDING_PUB.Trxn_Attributes_Rec_Type,
3357 X_default_pmt_attrs_rec OUT NOCOPY LNS_FUNDING_PUB.Default_Pmt_Attrs_Rec_Type,
3358 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
3359 X_MSG_COUNT OUT NOCOPY NUMBER,
3360 X_MSG_DATA OUT NOCOPY VARCHAR2)
3361 IS
3362
3363 /*-----------------------------------------------------------------------+
3364 | Local Variable Declarations and initializations |
3365 +-----------------------------------------------------------------------*/
3366
3367 l_api_name CONSTANT VARCHAR2(30) := 'Get_Default_Payment_Attributes';
3368 l_api_version CONSTANT NUMBER := 1.0;
3369 l_return_status VARCHAR2(1);
3370 l_msg_count NUMBER;
3371 l_msg_data VARCHAR2(32767);
3372
3373 l_Trxn_Attributes_Rec IBY_DISBURSEMENT_COMP_PUB.Trxn_Attributes_Rec_Type;
3374 l_Default_Pmt_Attrs_Rec IBY_DISBURSEMENT_COMP_PUB.Default_Pmt_Attrs_Rec_Type;
3375
3376 /*-----------------------------------------------------------------------+
3377 | Cursor Declarations |
3378 +-----------------------------------------------------------------------*/
3379
3380 -- getting bank account number
3381 CURSOR bank_acc_cur(P_BANK_ACC_ID number) IS
3382 select masked_bank_account_num,
3383 bank_account_name
3384 from IBY_EXT_BANK_ACCOUNTS
3385 where ext_bank_account_id = P_BANK_ACC_ID;
3386
3387 BEGIN
3388
3389 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
3390 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
3391
3392 -- Standard start of API savepoint
3393 SAVEPOINT Get_Default_Payment_Attr;
3394 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
3395
3396 -- Standard call to check for call compatibility
3397 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
3398 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3399 END IF;
3400
3401 -- Initialize message list if p_init_msg_list is set to TRUE
3402 IF FND_API.To_Boolean(p_init_msg_list) THEN
3403 FND_MSG_PUB.initialize;
3404 END IF;
3405
3406 -- Initialize API return status to success
3407 l_return_status := FND_API.G_RET_STS_SUCCESS;
3408
3409 -- START OF BODY OF API
3410
3411 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
3412 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Application_Id: ' || P_Trxn_Attributes_Rec.Application_Id);
3413 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payer_Legal_Entity_Id: ' || P_Trxn_Attributes_Rec.Payer_Legal_Entity_Id);
3414 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payer_Org_Id: ' || P_Trxn_Attributes_Rec.Payer_Org_Id);
3415 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payer_Org_Type: ' || P_Trxn_Attributes_Rec.Payer_Org_Type);
3416 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee_Party_Id: ' || P_Trxn_Attributes_Rec.Payee_Party_Id);
3417 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee_Party_Site_Id: ' || P_Trxn_Attributes_Rec.Payee_Party_Site_Id);
3418 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Supplier_Site_Id: ' || P_Trxn_Attributes_Rec.Supplier_Site_Id);
3419 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Pay_Proc_Trxn_Type_Code: ' || P_Trxn_Attributes_Rec.Pay_Proc_Trxn_Type_Code);
3420 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment_Currency: ' || P_Trxn_Attributes_Rec.Payment_Currency);
3421 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment_Amount: ' || P_Trxn_Attributes_Rec.Payment_Amount);
3422 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment_Function: ' || P_Trxn_Attributes_Rec.Payment_Function);
3423
3424 if P_Trxn_Attributes_Rec.Payer_Org_Type is not null then
3425 l_Trxn_Attributes_Rec.Payer_Org_Type := P_Trxn_Attributes_Rec.Payer_Org_Type;
3426 else
3427 l_Trxn_Attributes_Rec.Payer_Org_Type := 'OPERATING_UNIT';
3428 end if;
3429
3430 l_Trxn_Attributes_Rec.Application_Id := P_Trxn_Attributes_Rec.Application_Id;
3431 l_Trxn_Attributes_Rec.Payer_Legal_Entity_Id := P_Trxn_Attributes_Rec.Payer_Legal_Entity_Id;
3432 l_Trxn_Attributes_Rec.Payer_Org_Id := P_Trxn_Attributes_Rec.Payer_Org_Id;
3433 l_Trxn_Attributes_Rec.Payee_Party_Id := P_Trxn_Attributes_Rec.Payee_Party_Id;
3434 l_Trxn_Attributes_Rec.Payee_Party_Site_Id := P_Trxn_Attributes_Rec.Payee_Party_Site_Id;
3435 l_Trxn_Attributes_Rec.Supplier_Site_Id := P_Trxn_Attributes_Rec.Supplier_Site_Id;
3436 l_Trxn_Attributes_Rec.Pay_Proc_Trxn_Type_Code := P_Trxn_Attributes_Rec.Pay_Proc_Trxn_Type_Code;
3437 l_Trxn_Attributes_Rec.Payment_Currency := P_Trxn_Attributes_Rec.Payment_Currency;
3438 l_Trxn_Attributes_Rec.Payment_Amount := P_Trxn_Attributes_Rec.Payment_Amount;
3439 l_Trxn_Attributes_Rec.Payment_Function := P_Trxn_Attributes_Rec.Payment_Function;
3440
3441 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling IBY_DISBURSEMENT_COMP_PUB.Get_Default_Payment_Attributes...');
3442 IBY_DISBURSEMENT_COMP_PUB.Get_Default_Payment_Attributes(
3443 p_api_version => 1.0,
3444 p_init_msg_list => FND_API.G_TRUE,
3445 p_ignore_payee_pref => null,
3446 p_trxn_attributes_rec => l_Trxn_Attributes_Rec,
3447 x_return_status => l_return_status,
3448 x_msg_count => l_msg_count,
3449 x_msg_data => l_msg_data,
3450 x_default_pmt_attrs_rec => l_Default_Pmt_Attrs_Rec);
3451
3452 IF l_return_status <> 'S' THEN
3453 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to IBY_DISBURSEMENT_COMP_PUB.Get_Default_Payment_Attributes has failed');
3454 RAISE FND_API.G_EXC_ERROR;
3455 END IF;
3456
3457 X_default_pmt_attrs_rec.Payment_Method_Name := l_Default_Pmt_Attrs_Rec.Payment_Method.Payment_Method_Name;
3458 X_default_pmt_attrs_rec.Payment_Method_Code := l_Default_Pmt_Attrs_Rec.Payment_Method.Payment_Method_Code;
3459 X_default_pmt_attrs_rec.Payee_BankAccount_Id := l_Default_Pmt_Attrs_Rec.Payee_BankAccount.Payee_BankAccount_Id;
3460
3461 -- getting bank account number
3462 open bank_acc_cur(X_default_pmt_attrs_rec.Payee_BankAccount_Id);
3463 fetch bank_acc_cur into X_default_pmt_attrs_rec.Payee_BankAccount_Number, X_default_pmt_attrs_rec.Payee_BankAccount_Name;
3464 close bank_acc_cur;
3465
3466 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Return data:');
3467 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment_Method_Name: ' || X_default_pmt_attrs_rec.Payment_Method_Name);
3468 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment_Method_Code: ' || X_default_pmt_attrs_rec.Payment_Method_Code);
3469 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee_BankAccount_Id: ' || X_default_pmt_attrs_rec.Payee_BankAccount_Id);
3470 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee_BankAccount_Number: ' || X_default_pmt_attrs_rec.Payee_BankAccount_Number);
3471 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee_BankAccount_Name: ' || X_default_pmt_attrs_rec.Payee_BankAccount_Name);
3472
3473 -- END OF BODY OF API
3474 x_return_status := FND_API.G_RET_STS_SUCCESS;
3475
3476 -- Standard call to get message count and if count is 1, get message info
3477 FND_MSG_PUB.Count_And_Get(
3478 p_encoded => FND_API.G_FALSE,
3479 p_count => x_msg_count,
3480 p_data => x_msg_data);
3481
3482 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
3483
3484 EXCEPTION
3485 WHEN FND_API.G_EXC_ERROR THEN
3486 ROLLBACK TO Get_Default_Payment_Attr;
3487 x_return_status := FND_API.G_RET_STS_ERROR;
3488 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
3489 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
3490 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3491 ROLLBACK TO Get_Default_Payment_Attr;
3492 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3493 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
3494 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
3495 WHEN OTHERS THEN
3496 ROLLBACK TO Get_Default_Payment_Attr;
3497 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3498 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
3499 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3500 END IF;
3501 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
3502 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
3503
3504 END;
3505
3506
3507
3508 /*========================================================================
3509 | PUBLIC PROCEDURE DEFAULT_PROD_DISBURSEMENTS
3510 |
3511 | DESCRIPTION
3512 | This procedure Defaults Disbursements for a loan based on product setup. |
3513 | PSEUDO CODE/LOGIC
3514 |
3515 | PARAMETERS
3516 | P_LOAN_ID IN Loan ID
3517 |
3518 | KNOWN ISSUES
3519 | None
3520 |
3521 | NOTES
3522 | Any interesting aspect of the code in the package body which needs
3523 | to be stated.
3524 |
3525 | MODIFICATION HISTORY
3526 | Date Author Description of Changes
3527 | 12-07-2005 gbellary Created
3528 |
3529 *=======================================================================*/
3530 PROCEDURE DEFAULT_PROD_DISBURSEMENTS(
3531 P_LOAN_ID IN NUMBER) IS
3532
3533 /*-----------------------------------------------------------------------+
3534 | Local Variable Declarations and initializations |
3535 +-----------------------------------------------------------------------*/
3536
3537 l_api_name CONSTANT VARCHAR2(30) := 'DEFAULT_PROD_DISBURSEMENTS';
3538 l_api_version CONSTANT NUMBER := 1.0;
3539 l_Trxn_Attributes_Rec IBY_DISBURSEMENT_COMP_PUB.Trxn_Attributes_Rec_Type;
3540 l_Default_Pmt_Attrs_Rec IBY_DISBURSEMENT_COMP_PUB.Default_Pmt_Attrs_Rec_Type;
3541 l_org_id lns_loan_headers_all.org_id%TYPE;
3542 l_legal_entity_id lns_Loan_headers_all.legal_entity_id%TYPE;
3543 l_payment_method_code lns_disb_lines.payment_method_code%TYPE;
3544 l_bank_account_id lns_disb_lines.bank_account_id%TYPE;
3545 l_payee_party_id lns_disb_lines.payee_party_id%TYPE;
3546 l_return_status varchar2(1);
3547 l_msg_count number;
3548 l_msg_data varchar2(4000);
3549 l_current_phase varchar2(30);
3550 l_requested_amount number;
3551 l_currency varchar2(15);
3552 l_precision number;
3553 l_ext_precision number;
3554 l_min_acct_unit number;
3555 l_disb_amount number;
3556 l_total_disb_percent number;
3557 l_total_disb_amount number;
3558
3559 BEGIN
3560
3561 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
3562 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
3563 LogMessage(FND_LOG.LEVEL_STATEMENT, 'p_loan_id: ' || p_loan_id);
3564
3565 -- standard start of API savepoint
3566 SAVEPOINT DEFAULT_PROD_DISBURSEMENTS;
3567
3568 IF p_loan_id IS NULL THEN
3569 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'LOAN ID is missing');
3570 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
3571 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'p_loan_id' );
3572 FND_MSG_PUB.ADD;
3573 RAISE FND_API.G_EXC_ERROR;
3574 END IF;
3575
3576 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Querying loan info...');
3577 SELECT llh.primary_borrower_id
3578 ,llh.org_id
3579 ,llh.legal_entity_id
3580 ,llh.current_phase
3581 ,llh.requested_amount + nvl(llh.ADD_REQUESTED_AMOUNT, 0)
3582 ,llh.LOAN_CURRENCY
3583 INTO l_payee_party_id
3584 ,l_org_id
3585 ,l_legal_entity_id
3586 ,l_current_phase
3587 ,l_requested_amount
3588 ,l_currency
3589 FROM lns_loan_headers_all llh
3590 WHERE llh.loan_id = p_loan_id;
3591
3592 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_payee_party_id: ' || l_payee_party_id);
3593 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_org_id: ' || l_org_id);
3594 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_legal_entity_id: ' || l_legal_entity_id);
3595 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_current_phase: ' || l_current_phase);
3596 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_requested_amount: ' || l_requested_amount);
3597 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_currency: ' || l_currency);
3598
3599 l_Trxn_Attributes_Rec.Application_Id := 206;
3600 l_Trxn_Attributes_Rec.Payer_Legal_Entity_Id := l_legal_entity_id;
3601 l_Trxn_Attributes_Rec.Payer_Org_Id := l_org_id;
3602 l_Trxn_Attributes_Rec.Payer_Org_Type := 'OPERATING_UNIT';
3603 l_Trxn_Attributes_Rec.Payee_Party_Id := l_payee_party_id;
3604 l_Trxn_Attributes_Rec.Pay_Proc_Trxn_Type_Code := 'LOAN_PAYMENT';
3605 l_Trxn_Attributes_Rec.Payment_Currency := l_currency;
3606 l_Trxn_Attributes_Rec.Payment_Function := 'LOANS_PAYMENTS';
3607
3608 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling IBY_DISBURSEMENT_COMP_PUB.Get_Default_Payment_Attributes...');
3609 IBY_DISBURSEMENT_COMP_PUB.Get_Default_Payment_Attributes(
3610 p_api_version => 1.0,
3611 p_init_msg_list => FND_API.G_TRUE,
3612 p_ignore_payee_pref => null,
3613 p_trxn_attributes_rec => l_Trxn_Attributes_Rec,
3614 x_return_status => l_return_status,
3615 x_msg_count => l_msg_count,
3616 x_msg_data => l_msg_data,
3617 x_default_pmt_attrs_rec => l_Default_Pmt_Attrs_Rec);
3618
3619 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
3620 IF l_return_status = 'S' THEN
3621 l_payment_method_code := l_Default_Pmt_Attrs_Rec.Payment_Method.Payment_Method_Code;
3622 l_bank_account_id := l_Default_Pmt_Attrs_Rec.Payee_BankAccount.Payee_BankAccount_Id;
3623 END IF;
3624 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_payment_method_code: ' || l_payment_method_code);
3625 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_bank_account_id: ' || l_bank_account_id);
3626
3627 -- get currency precision
3628 fnd_currency.GET_INFO(CURRENCY_CODE => l_currency,
3629 PRECISION => l_precision,
3630 EXT_PRECISION => l_ext_precision,
3631 MIN_ACCT_UNIT => l_min_acct_unit);
3632 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_precision: ' || l_precision);
3633
3634 l_total_disb_percent := 0;
3635 l_total_disb_amount := 0;
3636 FOR Disb_Rec in (SELECT lns_disb_headers_s.NEXTVAL disb_header_id
3637 , loan_product_lines_id
3638 , activity_code
3639 , disb_percent
3640 , sequence_number
3641 , llh.primary_borrower_id payee_party_id
3642 , lns_disb_lines_s.NEXTVAL disb_line_id
3643 FROM lns_loan_headers_all llh, lns_loan_product_lines lpl
3644 WHERE llh.loan_id = p_loan_id
3645 -- AND llh.multiple_funding_flag = 'Y' Bug#6613708
3646 AND lpl.LOAN_PRODUCT_ID = llh.PRODUCT_ID
3647 AND lpl.LOAN_PRODUCT_LINE_TYPE = 'DISBURSEMENT'
3648 AND SYSDATE BETWEEN NVL(lpl.start_date_active,SYSDATE)
3649 AND NVL(lpl.end_date_active,SYSDATE)
3650 AND NOT EXISTS (select 1
3651 from lns_disb_headers ldh
3652 where ldh.loan_id = llh.loan_id)) LOOP
3653
3654 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Creating default disbursement');
3655
3656 l_total_disb_percent := l_total_disb_percent + Disb_Rec.disb_percent;
3657 if l_total_disb_percent = 100 then
3658 l_disb_amount := l_requested_amount - l_total_disb_amount;
3659 else
3660 l_disb_amount := round(l_requested_amount * Disb_Rec.disb_percent / 100, l_precision);
3661 end if;
3662 l_total_disb_amount := l_total_disb_amount + l_disb_amount;
3663 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_disb_amount: ' || l_disb_amount);
3664
3665 -- Default Product Disbursements
3666 LNS_DISB_HEADERS_PKG.Insert_Row(
3667 X_DISB_HEADER_ID => Disb_Rec.disb_header_id,
3668 P_LOAN_ID => p_loan_id,
3669 P_ACTIVITY_CODE => Disb_Rec.activity_code,
3670 P_DISBURSEMENT_NUMBER => Disb_Rec.sequence_number,
3671 P_HEADER_PERCENT => Disb_Rec.disb_percent,
3672 P_HEADER_AMOUNT => l_disb_amount,
3673 P_OBJECT_VERSION_NUMBER => 1,
3674 P_PHASE => l_current_phase);
3675
3676 LNS_DISB_LINES_PKG.Insert_Row(
3677 X_DISB_LINE_ID => Disb_Rec.disb_line_id,
3678 P_DISB_HEADER_ID => Disb_Rec.disb_header_id,
3679 P_DISB_LINE_NUMBER => 1,
3680 P_LINE_PERCENT => 100,
3681 P_LINE_AMOUNT => l_disb_amount,
3682 P_PAYEE_PARTY_ID => Disb_Rec.payee_party_id,
3683 P_PAYMENT_METHOD_CODE => l_payment_method_code,
3684 P_BANK_ACCOUNT_ID => l_bank_account_id,
3685 P_OBJECT_VERSION_NUMBER => 1);
3686
3687 -- Default Product Conditions
3688 LNS_COND_ASSIGNMENT_PUB.CREATE_LP_DISB_COND_ASSIGNMENT(
3689 P_LOAN_ID => p_loan_id,
3690 P_DISB_HEADER_ID => Disb_Rec.disb_header_id
3691 ,P_LOAN_PRODUCT_LINE_ID => Disb_Rec.loan_product_lines_id);
3692
3693 -- Default Product Disbursement Fees
3694 LNS_FEE_ASSIGNMENT_PUB.CREATE_LP_DISB_FEE_ASSIGNMENT(
3695 P_DISB_HEADER_ID => Disb_Rec.disb_header_id
3696 ,P_LOAN_PRODUCT_LINE_ID => Disb_Rec.loan_product_lines_id
3697 ,P_LOAN_ID => P_LOAN_ID);
3698
3699 END LOOP;
3700
3701 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
3702
3703 EXCEPTION
3704 WHEN FND_API.G_EXC_ERROR THEN
3705 ROLLBACK TO DEFAULT_PROD_DISBURSEMENTS;
3706 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Changes Rolled back in '
3707 || G_PKG_NAME || '.' || l_api_name);
3708
3709 WHEN OTHERS THEN
3710 ROLLBACK TO DEFAULT_PROD_DISBURSEMENTS;
3711 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_OTHERS_EXCEP');
3712 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3713 FND_MSG_PUB.ADD;
3714
3715 END DEFAULT_PROD_DISBURSEMENTS;
3716
3717
3718
3719 /*========================================================================
3720 | PUBLIC PROCEDURE SUBMIT_SINGLE_PAY_REQ
3721 |
3722 | DESCRIPTION
3723 | This procedure submits single payment request to AP.
3724 |
3725 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
3726 | None
3727 |
3728 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
3729 | LogMessage
3730 |
3731 | PARAMETERS
3732 | P_API_VERSION IN Standard in parameter
3733 | P_INIT_MSG_LIST IN Standard in parameter
3734 | P_COMMIT IN Standard in parameter
3735 | P_VALIDATION_LEVEL IN Standard in parameter
3736 | P_DISB_HEADER_ID IN Disbursement Line ID
3737 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
3738 | X_MSG_COUNT OUT NOCOPY Standard out parameter
3739 | X_MSG_DATA OUT NOCOPY Standard out parameter
3740 |
3741 | KNOWN ISSUES
3742 | None
3743 |
3744 | NOTES
3745 | Any interesting aspect of the code in the package body which needs
3746 | to be stated.
3747 |
3748 | MODIFICATION HISTORY
3749 | Date Author Description of Changes
3750 | 06-23-2005 scherkas Created
3751 |
3752 *=======================================================================*/
3753 PROCEDURE SUBMIT_SINGLE_PAY_REQ(
3754 P_API_VERSION IN NUMBER,
3755 P_INIT_MSG_LIST IN VARCHAR2,
3756 P_COMMIT IN VARCHAR2,
3757 P_VALIDATION_LEVEL IN NUMBER,
3758 P_DISB_LINE_ID IN NUMBER,
3759 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
3760 X_MSG_COUNT OUT NOCOPY NUMBER,
3761 X_MSG_DATA OUT NOCOPY VARCHAR2)
3762 IS
3763
3764 /*-----------------------------------------------------------------------+
3765 | Local Variable Declarations and initializations |
3766 +-----------------------------------------------------------------------*/
3767
3768 l_api_name CONSTANT VARCHAR2(30) := 'SUBMIT_SINGLE_PAY_REQ';
3769 l_api_version CONSTANT NUMBER := 1.0;
3770 l_return_status VARCHAR2(1);
3771 l_msg_count NUMBER;
3772 l_msg_data VARCHAR2(32767);
3773 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
3774 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
3775
3776 TYPE DISB_LINES_TBL IS TABLE OF LNS_FUNDING_PUB.LNS_DISB_LINES_REC INDEX BY BINARY_INTEGER;
3777 l_DISB_LINES_TBL DISB_LINES_TBL;
3778
3779 l_org_id number;
3780 l_invoice_line_id number;
3781 l_loan_number varchar2(60);
3782 l_source VARCHAR2(80);
3783 l_description VARCHAR2(240);
3784 l_cc_id number;
3785 l_percent number;
3786 l_Count2 number;
3787 l_running_sum number;
3788 l_sum_percent number;
3789 l_line_amount number;
3790 l_EXCHANGE_RATE_TYPE VARCHAR2(30);
3791 l_EXCHANGE_DATE DATE;
3792 l_EXCHANGE_RATE NUMBER;
3793 l_precision number;
3794 l_ext_precision number;
3795 l_min_acct_unit number;
3796 l_invoice_number VARCHAR2(50);
3797 l_loan_currency VARCHAR2(15);
3798 l_invoice_id NUMBER;
3799 l_request_id number;
3800 l_Count1 number;
3801 l_loan_id number;
3802 l_le_id number;
3803 l_hist_id number;
3804 l_attempt number;
3805 l_invoice_row_id varchar2(100);
3806 l_inv_line_row_id varchar2(100);
3807 l_reject_desc VARCHAR2(240);
3808 l_payee varchar2(360);
3809 l_new_invoice varchar2(1);
3810 l_due_date date;
3811 l_ap_inv_id number;
3812 l_precision_queried number;
3813 l_phase varchar2(30);
3814
3815 l_rejections AP_IMPORT_INVOICES_PKG.rejection_tab_type;
3816 l_project_id LNS_DISTRIBUTIONS.project_id%TYPE;
3817 l_task_id LNS_DISTRIBUTIONS.task_id%TYPE;
3818 l_award_id LNS_DISTRIBUTIONS.award_id%TYPE;
3819 l_expenditure_type LNS_DISTRIBUTIONS.expenditure_type%TYPE;
3820 l_expenditure_item_date LNS_DISTRIBUTIONS.expenditure_item_date%TYPE;
3821 l_budgetary_control varchar2(1);
3822 l_expenditure_organization_id number;
3823 l_project_accounting_context varchar2(1);
3824
3825 /*-----------------------------------------------------------------------+
3826 | Cursor Declarations |
3827 +-----------------------------------------------------------------------*/
3828
3829 -- getting info about loan, disbursement header and line info
3830 CURSOR disb_line_cur(P_DISB_LINE_ID number) IS
3831 select
3832 line.DISB_LINE_ID,
3833 line.DISB_HEADER_ID,
3834 line.DISB_LINE_NUMBER,
3835 line.LINE_AMOUNT,
3836 line.LINE_PERCENT,
3837 line.PAYEE_PARTY_ID,
3838 line.BANK_ACCOUNT_ID,
3839 line.PAYMENT_METHOD_CODE,
3840 line.STATUS,
3841 line.REQUEST_DATE,
3842 line.OBJECT_VERSION_NUMBER,
3843 head.LOAN_ID,
3844 head.ACTIVITY_CODE,
3845 head.DISBURSEMENT_NUMBER,
3846 head.HEADER_AMOUNT,
3847 head.HEADER_PERCENT,
3848 head.STATUS,
3849 head.TARGET_DATE,
3850 head.PAYMENT_REQUEST_DATE,
3851 head.OBJECT_VERSION_NUMBER,
3852 nvl(lkp.meaning, head.DESCRIPTION),
3853 loan.LOAN_NUMBER,
3854 loan.EXCHANGE_RATE_TYPE,
3855 loan.EXCHANGE_DATE,
3856 loan.EXCHANGE_RATE,
3857 loan.LOAN_CURRENCY,
3858 loan.ORG_ID,
3859 loan.LEGAL_ENTITY_ID,
3860 loan.current_phase,
3861 line.INVOICE_INTERFACE_ID,
3862 line.PARTY_SITE_ID,
3863 line.INCOME_TAX_REGION,
3864 line.TYPE_1099
3865 from LNS_DISB_LINES line,
3866 LNS_DISB_HEADERS head,
3867 lns_lookups lkp,
3868 LNS_LOAN_HEADERS_ALL loan
3869 where line.DISB_LINE_ID = P_DISB_LINE_ID and
3870 head.DISB_HEADER_ID = line.DISB_HEADER_ID and
3871 lkp.lookup_type(+) = 'DISB_ACTIVITY' and
3872 lkp.lookup_code(+) = head.ACTIVITY_CODE and
3873 loan.loan_id = head.loan_id;
3874
3875 -- submition attemts info
3876 CURSOR attempts_cur(P_DISB_LINE_ID number) IS
3877 select count(1) + 1
3878 from LNS_DISB_HISTORIES_H
3879 where DISB_LINE_ID = P_DISB_LINE_ID;
3880
3881 -- query liability distribution info - invoice header
3882 CURSOR liability_distr_cur(P_LOAN_ID number) IS
3883 select CODE_COMBINATION_ID,
3884 DISTRIBUTION_PERCENT
3885 from lns_distributions
3886 where LOAN_ID = P_LOAN_ID and
3887 account_type = 'CR' and
3888 account_name = 'LOAN_LIABILITY' and
3889 line_type = 'PRIN';
3890
3891 -- query clearing distribution info - invoice lines
3892 CURSOR clearing_distr_cur(P_LOAN_ID number, P_DISB_HEADER_ID number) IS
3893 select CODE_COMBINATION_ID,
3894 DISTRIBUTION_PERCENT
3895 from lns_distributions
3896 where LOAN_ID = P_LOAN_ID and
3897 account_name = 'LOAN_PAYABLE' and
3898 line_type = 'CLEAR' and
3899 disb_header_id = P_DISB_HEADER_ID;
3900
3901 -- generating new invoice id
3902 CURSOR new_inv_id_cur IS
3903 select AP_INVOICES_INTERFACE_S.NEXTVAL from dual;
3904
3905 -- generating new invoice line id
3906 CURSOR new_inv_ln_id_cur IS
3907 select AP_INVOICE_LINES_INTERFACE_S.NEXTVAL from dual;
3908
3909 -- get rejection description
3910 CURSOR get_reject_cur(P_CODE VARCHAR2) IS
3911 select description
3912 from AP_LOOKUP_CODES
3913 where lookup_type = 'REJECT CODE' and
3914 lookup_code = P_CODE;
3915
3916 -- get party for rejection
3917 CURSOR get_party1_cur(P_ID VARCHAR2) IS
3918 select party.party_name
3919 from AP_INVOICES_INTERFACE inv,
3920 hz_parties party
3921 where inv.INVOICE_ID = P_ID and
3922 inv.party_id = party.party_id;
3923
3924 -- get party for rejection
3925 CURSOR get_party2_cur(P_ID VARCHAR2) IS
3926 select party.party_name
3927 from AP_INVOICES_INTERFACE inv,
3928 AP_INVOICE_LINES_INTERFACE line,
3929 hz_parties party
3930 where line.INVOICE_LINE_ID = P_ID and
3931 line.INVOICE_ID = inv.INVOICE_ID and
3932 inv.party_id = party.party_id;
3933
3934 -- get invoice_id from AP
3935 CURSOR get_invoice_cur(P_INVOICE_NUM VARCHAR2, P_PARTY_ID number) IS
3936 select invoice_id
3937 from ap_invoices_all
3938 where invoice_num = P_INVOICE_NUM and
3939 party_id = P_PARTY_ID;
3940
3941 -- get projects details from LNS_DISTRIBUTIONS
3942 CURSOR get_project_details(P_LOAN_ID NUMBER) IS
3943 select project_id, task_id, award_id, expenditure_type, expenditure_item_date
3944 from LNS_DISTRIBUTIONS dist
3945 where dist.loan_id = P_LOAN_ID
3946 and line_type = 'CLEAR'
3947 and account_name = 'LOAN_PAYABLE'
3948 and account_type = 'CR'
3949 and distribution_type='ORIGINATION'
3950 and activity ='LNS_APPROVAL';
3951
3952
3953 BEGIN
3954
3955 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
3956 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
3957
3958 -- Standard call to check for call compatibility
3959 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
3960 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3961 END IF;
3962
3963 -- Initialize message list if p_init_msg_list is set to TRUE
3964 IF FND_API.To_Boolean(p_init_msg_list) THEN
3965 FND_MSG_PUB.initialize;
3966 END IF;
3967
3968 -- Initialize API return status to success
3969 l_return_status := FND_API.G_RET_STS_SUCCESS;
3970
3971 -- START OF BODY OF API
3972
3973 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
3974 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Submitting payment request for line ' || P_DISB_LINE_ID);
3975
3976 open disb_line_cur(P_DISB_LINE_ID);
3977 fetch disb_line_cur into
3978 l_DISB_LINE_REC.DISB_LINE_ID,
3979 l_DISB_LINE_REC.DISB_HEADER_ID,
3980 l_DISB_LINE_REC.DISB_LINE_NUMBER,
3981 l_DISB_LINE_REC.LINE_AMOUNT,
3982 l_DISB_LINE_REC.LINE_PERCENT,
3983 l_DISB_LINE_REC.PAYEE_PARTY_ID,
3984 l_DISB_LINE_REC.BANK_ACCOUNT_ID,
3985 l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
3986 l_DISB_LINE_REC.STATUS,
3987 l_DISB_LINE_REC.REQUEST_DATE,
3988 l_DISB_LINE_REC.OBJECT_VERSION_NUMBER,
3989 l_DISB_HEADER_REC.LOAN_ID,
3990 l_DISB_HEADER_REC.ACTIVITY_CODE,
3991 l_DISB_HEADER_REC.DISBURSEMENT_NUMBER,
3992 l_DISB_HEADER_REC.HEADER_AMOUNT,
3993 l_DISB_HEADER_REC.HEADER_PERCENT,
3994 l_DISB_HEADER_REC.STATUS,
3995 l_DISB_HEADER_REC.TARGET_DATE,
3996 l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE,
3997 l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER,
3998 l_description,
3999 l_loan_number,
4000 l_EXCHANGE_RATE_TYPE,
4001 l_EXCHANGE_DATE,
4002 l_EXCHANGE_RATE,
4003 l_loan_currency,
4004 l_org_id,
4005 l_le_id,
4006 l_phase,
4007 l_DISB_LINE_REC.INVOICE_INTERFACE_ID,
4008 l_DISB_LINE_REC.PARTY_SITE_ID,
4009 l_DISB_LINE_REC.INCOME_TAX_REGION,
4010 l_DISB_LINE_REC.TYPE_1099;
4011
4012 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
4013 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement Line Details:');
4014 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line ID: ' || l_DISB_LINE_REC.DISB_LINE_ID);
4015 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header ID: ' || l_DISB_LINE_REC.DISB_HEADER_ID);
4016 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Number: ' || l_DISB_LINE_REC.DISB_LINE_NUMBER);
4017 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Amount: ' || l_DISB_LINE_REC.LINE_AMOUNT);
4018 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Percent: ' || l_DISB_LINE_REC.LINE_PERCENT);
4019 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee: ' || l_DISB_LINE_REC.PAYEE_PARTY_ID);
4020 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Bank Account: ' || l_DISB_LINE_REC.BANK_ACCOUNT_ID);
4021 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment Method: ' || l_DISB_LINE_REC.PAYMENT_METHOD_CODE);
4022 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Status: ' || l_DISB_LINE_REC.STATUS);
4023 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Request Date: ' || l_DISB_LINE_REC.REQUEST_DATE);
4024 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Version: ' || l_DISB_LINE_REC.OBJECT_VERSION_NUMBER);
4025 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Invoice Interface ID: ' || l_DISB_LINE_REC.INVOICE_INTERFACE_ID);
4026 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PARTY_SITE_ID: ' || l_DISB_LINE_REC.PARTY_SITE_ID);
4027 LogMessage(FND_LOG.LEVEL_STATEMENT, 'INCOME_TAX_REGION: ' || l_DISB_LINE_REC.INCOME_TAX_REGION);
4028 LogMessage(FND_LOG.LEVEL_STATEMENT, 'TYPE_1099: ' || l_DISB_LINE_REC.TYPE_1099);
4029
4030 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
4031 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement Header Details:');
4032 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header ID: ' || l_DISB_LINE_REC.DISB_HEADER_ID);
4033 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Activity Code: ' || l_DISB_HEADER_REC.ACTIVITY_CODE);
4034 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement Number: ' || l_DISB_HEADER_REC.DISBURSEMENT_NUMBER);
4035 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header Amount: ' || l_DISB_HEADER_REC.HEADER_AMOUNT);
4036 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header Percent: ' || l_DISB_HEADER_REC.HEADER_PERCENT);
4037 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header Status: ' || l_DISB_HEADER_REC.STATUS);
4038 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Target Date: ' || l_DISB_HEADER_REC.TARGET_DATE);
4039 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment Request Date: ' || l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE);
4040 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Version: ' || l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER);
4041 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Header Description: ' || l_description);
4042
4043 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
4044 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Details:');
4045 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan ID: ' || l_DISB_HEADER_REC.LOAN_ID);
4046 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Number: ' || l_loan_number);
4047 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Exchange Rate Type: ' || l_EXCHANGE_RATE_TYPE);
4048 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Exchange Date: ' || l_EXCHANGE_DATE);
4049 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Exchange Rate: ' || l_EXCHANGE_RATE);
4050 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan Currency: ' || l_loan_currency);
4051 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Org ID: ' || l_org_id);
4052 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LE ID: ' || l_le_id);
4053 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PHASE: ' || l_phase);
4054
4055 -- submition attemts info
4056 open attempts_cur(l_DISB_LINE_REC.DISB_LINE_ID);
4057 fetch attempts_cur into l_attempt;
4058 close attempts_cur;
4059
4060 -- generate invoice number
4061 /*
4062 l_invoice_number := l_loan_number || '-' ||
4063 l_DISB_HEADER_REC.DISBURSEMENT_NUMBER;
4064 */
4065
4066 l_invoice_number := l_loan_number || '-' || l_phase || '-' ||
4067 l_DISB_HEADER_REC.DISBURSEMENT_NUMBER || '-' ||
4068 l_DISB_LINE_REC.DISB_LINE_NUMBER;
4069
4070 -- create disbursement distribution records in lns_distributions
4071 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling create_DisbursementDistribs...');
4072 LNS_DISTRIBUTIONS_PUB.create_DisbursementDistribs(
4073 p_api_version => 1.0,
4074 p_init_msg_list => FND_API.G_FALSE,
4075 p_commit => FND_API.G_FALSE,
4076 p_loan_id => l_DISB_HEADER_REC.LOAN_ID,
4077 p_disb_header_id => l_DISB_LINE_REC.DISB_HEADER_ID,
4078 p_activity_type => 'DISBURSEMENT',
4079 x_return_status => l_return_status,
4080 x_msg_count => l_msg_count,
4081 x_msg_data => l_msg_data);
4082
4083 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Return status: ' || l_return_status);
4084 IF l_return_status <> 'S' THEN
4085 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to LNS_DISTRIBUTIONS_PUB.create_DisbursementDistribs failed');
4086 RAISE FND_API.G_EXC_ERROR;
4087 END IF;
4088
4089 -- query liability distribution info
4090 open liability_distr_cur(l_DISB_HEADER_REC.LOAN_ID);
4091 fetch liability_distr_cur into
4092 l_cc_id,
4093 l_percent;
4094 close liability_distr_cur;
4095
4096 l_due_date := l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE;
4097 l_source := 'LOANS';
4098
4099 LogMessage(FND_LOG.LEVEL_STATEMENT, 'AP Invoice datails:');
4100 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Invoice Number: ' || l_invoice_number);
4101 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Due Date: ' || l_due_date);
4102 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Amount: ' || l_DISB_LINE_REC.LINE_AMOUNT);
4103 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Currency: ' || l_loan_currency);
4104 LogMessage(FND_LOG.LEVEL_STATEMENT, 'EXCHANGE_RATE_TYPE: ' || l_EXCHANGE_RATE_TYPE);
4105 LogMessage(FND_LOG.LEVEL_STATEMENT, 'EXCHANGE_DATE: ' || l_EXCHANGE_DATE);
4106 LogMessage(FND_LOG.LEVEL_STATEMENT, 'EXCHANGE_RATE: ' || l_EXCHANGE_RATE);
4107 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payee Party ID: ' || l_DISB_LINE_REC.PAYEE_PARTY_ID);
4108 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Source: ' || l_source);
4109 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Payment Method: ' || l_DISB_LINE_REC.PAYMENT_METHOD_CODE);
4110 LogMessage(FND_LOG.LEVEL_STATEMENT, 'ACCTS_PAY_CODE_COMBINATION_ID: ' || l_cc_id);
4111
4112 -- analyzing exchange info
4113 if l_EXCHANGE_RATE_TYPE is null or
4114 (l_EXCHANGE_RATE_TYPE is not null and l_EXCHANGE_RATE_TYPE <> 'User') then
4115
4116 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Setting exchange rate = null');
4117 l_EXCHANGE_RATE := null;
4118
4119 end if;
4120
4121 l_new_invoice := 'N';
4122 BEGIN
4123
4124 SAVEPOINT SUBMIT_SINGLE_PAY_REQ;
4125
4126 if l_DISB_LINE_REC.INVOICE_INTERFACE_ID is null then
4127
4128 -- generating new invoice id
4129 open new_inv_id_cur;
4130 fetch new_inv_id_cur into l_invoice_id;
4131 close new_inv_id_cur;
4132
4133 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Invoice ID: ' || l_invoice_id);
4134
4135 l_new_invoice := 'Y';
4136 -- inserting invoice line
4137 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Inserting AP invoice into interface table...');
4138
4139 AP_INVOICES_INTERFACE_PKG.INSERT_ROW(
4140 X_ROWID => l_invoice_row_id,
4141 X_INVOICE_ID => l_invoice_id,
4142 X_INVOICE_NUM => l_invoice_number,
4143 X_INVOICE_TYPE_LOOKUP_CODE => 'PAYMENT REQUEST',
4144 X_INVOICE_DATE => l_due_date,
4145 X_PO_NUMBER => null,
4146 X_VENDOR_ID => null,
4147 X_VENDOR_SITE_ID => null,
4148 X_INVOICE_AMOUNT => l_DISB_LINE_REC.LINE_AMOUNT,
4149 X_INVOICE_CURRENCY_CODE => l_loan_currency,
4150 X_PAYMENT_CURRENCY_CODE => null,
4151 X_PAYMENT_CROSS_RATE => null,
4152 X_PAYMENT_CROSS_RATE_TYPE => null,
4153 X_PAYMENT_CROSS_RATE_DATE => null,
4154 X_EXCHANGE_RATE => l_EXCHANGE_RATE,
4155 X_EXCHANGE_RATE_TYPE => l_EXCHANGE_RATE_TYPE,
4156 X_EXCHANGE_DATE => l_EXCHANGE_DATE,
4157 X_TERMS_ID => null, -- fix for bug 9265018: let ap to default terms_id
4158 X_DESCRIPTION => l_description,
4159 X_AWT_GROUP_ID => null,
4160 X_AMT_APPLICABLE_TO_DISCOUNT => null,
4161 X_ATTRIBUTE_CATEGORY => null,
4162 X_ATTRIBUTE1 => null,
4163 X_ATTRIBUTE2 => null,
4164 X_ATTRIBUTE3 => null,
4165 X_ATTRIBUTE4 => null,
4166 X_ATTRIBUTE5 => null,
4167 X_ATTRIBUTE6 => null,
4168 X_ATTRIBUTE7 => null,
4169 X_ATTRIBUTE8 => null,
4170 X_ATTRIBUTE9 => null,
4171 X_ATTRIBUTE10 => null,
4172 X_ATTRIBUTE11 => null,
4173 X_ATTRIBUTE12 => null,
4174 X_ATTRIBUTE13 => null,
4175 X_ATTRIBUTE14 => null,
4176 X_ATTRIBUTE15 => null,
4177 X_GLOBAL_ATTRIBUTE_CATEGORY => null,
4178 X_GLOBAL_ATTRIBUTE1 => null,
4179 X_GLOBAL_ATTRIBUTE2 => null,
4180 X_GLOBAL_ATTRIBUTE3 => null,
4181 X_GLOBAL_ATTRIBUTE4 => null,
4182 X_GLOBAL_ATTRIBUTE5 => null,
4183 X_GLOBAL_ATTRIBUTE6 => null,
4184 X_GLOBAL_ATTRIBUTE7 => null,
4185 X_GLOBAL_ATTRIBUTE8 => null,
4186 X_GLOBAL_ATTRIBUTE9 => null,
4187 X_GLOBAL_ATTRIBUTE10 => null,
4188 X_GLOBAL_ATTRIBUTE11 => null,
4189 X_GLOBAL_ATTRIBUTE12 => null,
4190 X_GLOBAL_ATTRIBUTE13 => null,
4191 X_GLOBAL_ATTRIBUTE14 => null,
4192 X_GLOBAL_ATTRIBUTE15 => null,
4193 X_GLOBAL_ATTRIBUTE16 => null,
4194 X_GLOBAL_ATTRIBUTE17 => null,
4195 X_GLOBAL_ATTRIBUTE18 => null,
4196 X_GLOBAL_ATTRIBUTE19 => null,
4197 X_GLOBAL_ATTRIBUTE20 => null,
4198 X_STATUS => null,
4199 X_SOURCE => l_source,
4200 X_GROUP_ID => l_invoice_number,
4201 X_WORKFLOW_FLAG => null,
4202 X_DOC_CATEGORY_CODE => null,
4203 X_VOUCHER_NUM => null,
4204 X_PAY_GROUP_LOOKUP_CODE => null, --'Standard',
4205 X_GOODS_RECEIVED_DATE => null,
4206 X_INVOICE_RECEIVED_DATE => sysdate,
4207 X_GL_DATE => l_due_date,
4208 X_ACCTS_PAY_CCID => l_cc_id,
4209 -- X_USSGL_TRANSACTION_CODE => null,
4210 X_EXCLUSIVE_PAYMENT_FLAG => null,
4211 X_INVOICE_INCLUDES_PREPAY_FLAG => null,
4212 X_PREPAY_NUM => null,
4213 X_PREPAY_APPLY_AMOUNT => null,
4214 X_PREPAY_GL_DATE => null,
4215 X_CREATION_DATE => LNS_UTILITY_PUB.CREATION_DATE,
4216 X_CREATED_BY => LNS_UTILITY_PUB.CREATED_BY,
4217 X_LAST_UPDATE_DATE => LNS_UTILITY_PUB.LAST_UPDATE_DATE,
4218 X_LAST_UPDATED_BY => LNS_UTILITY_PUB.LAST_UPDATED_BY,
4219 X_LAST_UPDATE_LOGIN => LNS_UTILITY_PUB.LAST_UPDATE_LOGIN,
4220 X_ORG_ID => l_org_id,
4221 X_MODE => null,
4222 X_TERMS_DATE => null,
4223 X_REQUESTER_ID => null,
4224 X_OPERATING_UNIT => null,
4225 -- Invoice LINes Project Stage 1
4226 X_PREPAY_LINE_NUM => null,
4227 X_REQUESTER_FIRST_NAME => null,
4228 X_REQUESTER_LAST_NAME => null,
4229 X_REQUESTER_EMPLOYEE_NUM => null,
4230 -- eTax Uptake
4231 X_CALC_TAX_DURING_IMPORT_FLAG => null,
4232 X_CONTROL_AMOUNT => null,
4233 X_ADD_TAX_TO_INV_AMT_FLAG => null,
4234 X_TAX_RELATED_INVOICE_ID => null,
4235 X_TAXATION_COUNTRY => null,
4236 X_DOCUMENT_SUB_TYPE => null,
4237 X_SUPPLIER_TAX_INVOICE_NUMBER => null,
4238 X_SUPPLIER_TAX_INVOICE_DATE => null,
4239 X_SUPPLIER_TAX_EXCHANGE_RATE => null,
4240 X_TAX_INVOICE_RECORDING_DATE => null,
4241 X_TAX_INVOICE_INTERNAL_SEQ => null,
4242 X_LEGAL_ENTITY_ID => l_le_id,
4243 x_PAYMENT_METHOD_CODE => l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
4244 x_PAYMENT_REASON_CODE => null,
4245 X_PAYMENT_REASON_COMMENTS => null,
4246 x_UNIQUE_REMITTANCE_IDENTIFIER => null,
4247 x_URI_CHECK_DIGIT => null,
4248 x_BANK_CHARGE_BEARER => null,
4249 x_DELIVERY_CHANNEL_CODE => null,
4250 x_SETTLEMENT_PRIORITY => null,
4251 x_remittance_message1 => null,
4252 x_remittance_message2 => null,
4253 x_remittance_message3 => null,
4254 x_NET_OF_RETAINAGE_FLAG => null,
4255 x_PORT_OF_ENTRY_CODE => null,
4256 X_APPLICATION_ID => 206,
4257 X_PRODUCT_TABLE => null,
4258 X_REFERENCE_KEY1 => null,
4259 X_REFERENCE_KEY2 => null,
4260 X_REFERENCE_KEY3 => null,
4261 X_REFERENCE_KEY4 => null,
4262 X_REFERENCE_KEY5 => null,
4263 X_PARTY_ID => l_DISB_LINE_REC.PAYEE_PARTY_ID,
4264 X_PARTY_SITE_ID => l_DISB_LINE_REC.PARTY_SITE_ID,
4265 X_PAY_PROC_TRXN_TYPE_CODE => 'LOAN_PAYMENT',
4266 X_PAYMENT_FUNCTION => 'LOANS_PAYMENTS',
4267 X_PAYMENT_PRIORITY => null);
4268
4269 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully inserted new invoice');
4270
4271 else
4272
4273 l_invoice_id := l_DISB_LINE_REC.INVOICE_INTERFACE_ID;
4274 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Invoice ID: ' || l_invoice_id);
4275
4276 -- inserting invoice line
4277 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating AP invoice into interface table...');
4278
4279 AP_INVOICES_INTERFACE_PKG.UPDATE_ROW(
4280 X_INVOICE_ID => l_invoice_id,
4281 X_INVOICE_NUM => l_invoice_number,
4282 X_INVOICE_TYPE_LOOKUP_CODE => 'PAYMENT REQUEST',
4283 X_INVOICE_DATE => l_due_date,
4284 X_PO_NUMBER => null,
4285 X_VENDOR_ID => null,
4286 X_VENDOR_SITE_ID => null,
4287 X_INVOICE_AMOUNT => l_DISB_LINE_REC.LINE_AMOUNT,
4288 X_INVOICE_CURRENCY_CODE => l_loan_currency,
4289 X_PAYMENT_CURRENCY_CODE => null,
4290 X_PAYMENT_CROSS_RATE => null,
4291 X_PAYMENT_CROSS_RATE_TYPE => null,
4292 X_PAYMENT_CROSS_RATE_DATE => null,
4293 X_EXCHANGE_RATE => l_EXCHANGE_RATE,
4294 X_EXCHANGE_RATE_TYPE => l_EXCHANGE_RATE_TYPE,
4295 X_EXCHANGE_DATE => l_EXCHANGE_DATE,
4296 X_TERMS_ID => null, -- fix for bug 9265018: let ap to default terms_id
4297 X_DESCRIPTION => l_description,
4298 X_AWT_GROUP_ID => null,
4299 X_AMT_APPLICABLE_TO_DISCOUNT => null,
4300 X_ATTRIBUTE_CATEGORY => null,
4301 X_ATTRIBUTE1 => null,
4302 X_ATTRIBUTE2 => null,
4303 X_ATTRIBUTE3 => null,
4304 X_ATTRIBUTE4 => null,
4305 X_ATTRIBUTE5 => null,
4306 X_ATTRIBUTE6 => null,
4307 X_ATTRIBUTE7 => null,
4308 X_ATTRIBUTE8 => null,
4309 X_ATTRIBUTE9 => null,
4310 X_ATTRIBUTE10 => null,
4311 X_ATTRIBUTE11 => null,
4312 X_ATTRIBUTE12 => null,
4313 X_ATTRIBUTE13 => null,
4314 X_ATTRIBUTE14 => null,
4315 X_ATTRIBUTE15 => null,
4316 X_GLOBAL_ATTRIBUTE_CATEGORY => null,
4317 X_GLOBAL_ATTRIBUTE1 => null,
4318 X_GLOBAL_ATTRIBUTE2 => null,
4319 X_GLOBAL_ATTRIBUTE3 => null,
4320 X_GLOBAL_ATTRIBUTE4 => null,
4321 X_GLOBAL_ATTRIBUTE5 => null,
4322 X_GLOBAL_ATTRIBUTE6 => null,
4323 X_GLOBAL_ATTRIBUTE7 => null,
4324 X_GLOBAL_ATTRIBUTE8 => null,
4325 X_GLOBAL_ATTRIBUTE9 => null,
4326 X_GLOBAL_ATTRIBUTE10 => null,
4327 X_GLOBAL_ATTRIBUTE11 => null,
4328 X_GLOBAL_ATTRIBUTE12 => null,
4329 X_GLOBAL_ATTRIBUTE13 => null,
4330 X_GLOBAL_ATTRIBUTE14 => null,
4331 X_GLOBAL_ATTRIBUTE15 => null,
4332 X_GLOBAL_ATTRIBUTE16 => null,
4333 X_GLOBAL_ATTRIBUTE17 => null,
4334 X_GLOBAL_ATTRIBUTE18 => null,
4335 X_GLOBAL_ATTRIBUTE19 => null,
4336 X_GLOBAL_ATTRIBUTE20 => null,
4337 X_STATUS => null,
4338 X_SOURCE => l_source,
4339 X_GROUP_ID => l_invoice_number,
4340 X_WORKFLOW_FLAG => null,
4341 X_DOC_CATEGORY_CODE => null,
4342 X_VOUCHER_NUM => null,
4343 X_PAY_GROUP_LOOKUP_CODE => null, --'Standard',
4344 X_GOODS_RECEIVED_DATE => null,
4345 X_INVOICE_RECEIVED_DATE => sysdate,
4346 X_GL_DATE => l_due_date,
4347 X_ACCTS_PAY_CCID => l_cc_id,
4348 -- X_USSGL_TRANSACTION_CODE => null,
4349 X_EXCLUSIVE_PAYMENT_FLAG => null,
4350 X_INVOICE_INCLUDES_PREPAY_FLAG => null,
4351 X_PREPAY_NUM => null,
4352 X_PREPAY_APPLY_AMOUNT => null,
4353 X_PREPAY_GL_DATE => null,
4354 X_LAST_UPDATE_DATE => LNS_UTILITY_PUB.LAST_UPDATE_DATE,
4355 X_LAST_UPDATED_BY => LNS_UTILITY_PUB.LAST_UPDATED_BY,
4356 X_LAST_UPDATE_LOGIN => LNS_UTILITY_PUB.LAST_UPDATE_LOGIN,
4357 X_MODE => null,
4358 X_TERMS_DATE => null,
4359 X_REQUESTER_ID => null,
4360 X_OPERATING_UNIT => null,
4361 -- Invoice LINes Project Stage 1
4362 X_PREPAY_LINE_NUM => null,
4363 X_REQUESTER_FIRST_NAME => null,
4364 X_REQUESTER_LAST_NAME => null,
4365 X_REQUESTER_EMPLOYEE_NUM => null,
4366 -- eTax Uptake
4367 X_CALC_TAX_DURING_IMPORT_FLAG => null,
4368 X_CONTROL_AMOUNT => null,
4369 X_ADD_TAX_TO_INV_AMT_FLAG => null,
4370 X_TAX_RELATED_INVOICE_ID => null,
4371 X_TAXATION_COUNTRY => null,
4372 X_DOCUMENT_SUB_TYPE => null,
4373 X_SUPPLIER_TAX_INVOICE_NUMBER => null,
4374 X_SUPPLIER_TAX_INVOICE_DATE => null,
4375 X_SUPPLIER_TAX_EXCHANGE_RATE => null,
4376 X_TAX_INVOICE_RECORDING_DATE => null,
4377 X_TAX_INVOICE_INTERNAL_SEQ => null,
4378 X_LEGAL_ENTITY_ID => l_le_id,
4379 x_PAYMENT_METHOD_CODE => l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
4380 x_PAYMENT_REASON_CODE => null,
4381 X_PAYMENT_REASON_COMMENTS => null,
4382 x_UNIQUE_REMITTANCE_IDENTIFIER => null,
4383 x_URI_CHECK_DIGIT => null,
4384 x_BANK_CHARGE_BEARER => null,
4385 x_DELIVERY_CHANNEL_CODE => null,
4386 x_SETTLEMENT_PRIORITY => null,
4387 x_remittance_message1 => null,
4388 x_remittance_message2 => null,
4389 x_remittance_message3 => null,
4390 x_NET_OF_RETAINAGE_FLAG => null,
4391 x_PORT_OF_ENTRY_CODE => null,
4392 X_APPLICATION_ID => 206,
4393 X_PRODUCT_TABLE => null,
4394 X_REFERENCE_KEY1 => null,
4395 X_REFERENCE_KEY2 => null,
4396 X_REFERENCE_KEY3 => null,
4397 X_REFERENCE_KEY4 => null,
4398 X_REFERENCE_KEY5 => null,
4399 X_PARTY_ID => l_DISB_LINE_REC.PAYEE_PARTY_ID,
4400 X_PARTY_SITE_ID => l_DISB_LINE_REC.PARTY_SITE_ID,
4401 X_PAY_PROC_TRXN_TYPE_CODE => 'LOAN_PAYMENT',
4402 X_PAYMENT_FUNCTION => 'LOANS_PAYMENTS',
4403 X_PAYMENT_PRIORITY => null);
4404
4405 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully updated invoice');
4406
4407 end if;
4408
4409 EXCEPTION
4410 WHEN OTHERS THEN
4411 ROLLBACK TO SUBMIT_SINGLE_PAY_REQ;
4412
4413 if l_new_invoice = 'Y' then
4414 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Failed to insert invoice into interface table');
4415 FND_MESSAGE.SET_NAME('LNS', 'LNS_FAIL_INS_AP_INV');
4416 FND_MSG_PUB.Add;
4417 else
4418 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Failed to update invoice into interface table');
4419 FND_MESSAGE.SET_NAME('LNS', 'LNS_FAIL_UPD_AP_INV');
4420 FND_MSG_PUB.Add;
4421 end if;
4422
4423 RAISE FND_API.G_EXC_ERROR;
4424 END;
4425
4426 -- Deleting invoice interface lines
4427 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Deleting invoice interface lines...');
4428
4429 delete from AP_INVOICE_LINES_INTERFACE
4430 where INVOICE_ID = l_invoice_id;
4431
4432 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Deleted');
4433
4434 -- query clearing distribution info and generating invoice lines
4435 open clearing_distr_cur(l_DISB_HEADER_REC.LOAN_ID, l_DISB_LINE_REC.DISB_HEADER_ID);
4436
4437 l_precision_queried := 0;
4438 l_Count1 := 0;
4439 l_running_sum := 0;
4440 l_sum_percent := 0;
4441 LOOP
4442
4443 fetch clearing_distr_cur into
4444 l_cc_id,
4445 l_percent;
4446
4447 if clearing_distr_cur%NOTFOUND and l_Count1 > 0 then
4448 exit;
4449 elsif clearing_distr_cur%NOTFOUND and l_Count1 = 0 then
4450 LogMessage(FND_LOG.LEVEL_STATEMENT, 'No distribution record found - setting cc_id = null and percent = 100');
4451 l_cc_id := null;
4452 l_percent := 100;
4453 end if;
4454
4455 l_Count1 := l_Count1 + 1;
4456 l_sum_percent := l_sum_percent + l_percent;
4457
4458 if l_precision_queried = 0 then
4459 -- get precision
4460 fnd_currency.GET_INFO(CURRENCY_CODE => l_loan_currency,
4461 PRECISION => l_precision,
4462 EXT_PRECISION => l_ext_precision,
4463 MIN_ACCT_UNIT => l_min_acct_unit);
4464
4465 l_precision_queried := 1;
4466 end if;
4467
4468 -- for each distribution create seperate invoice line
4469 if l_percent < 100 then
4470
4471 if l_sum_percent < 100 then
4472
4473 l_line_amount := round(l_DISB_LINE_REC.LINE_AMOUNT * l_percent / 100, l_precision);
4474
4475 else
4476
4477 l_line_amount := l_DISB_LINE_REC.LINE_AMOUNT - l_running_sum;
4478
4479 end if;
4480
4481 l_running_sum := l_running_sum + l_line_amount;
4482
4483 else
4484 l_line_amount := l_DISB_LINE_REC.LINE_AMOUNT;
4485 end if;
4486
4487 l_description := l_invoice_number || ' line' || l_Count1;
4488
4489 -- generating new invoice line id
4490 open new_inv_ln_id_cur;
4491 fetch new_inv_ln_id_cur into l_invoice_line_id;
4492 close new_inv_ln_id_cur;
4493
4494 BEGIN
4495
4496 SAVEPOINT SUBMIT_SINGLE_PAY_REQ;
4497
4498 -- inserting invoice line
4499 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Inserting AP invoice line ' || l_Count1 || ' into interface table...');
4500 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line ID: ' || l_invoice_line_id);
4501 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Line Amount: ' || l_line_amount);
4502 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Description: ' || l_description);
4503 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Accounting Date: ' || l_due_date);
4504 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DIST_CODE_COMBINATION_ID: ' || l_cc_id);
4505
4506 --get projects specific information---
4507 open get_project_details(l_DISB_HEADER_REC.loan_id);
4508 fetch get_project_details into l_project_id, l_task_id, l_award_id, l_expenditure_type, l_expenditure_item_date;
4509 close get_project_details;
4510
4511 IF l_project_id is NOT NULL then
4512 l_cc_id := null;
4513 l_budgetary_control := 'Y';
4514 l_expenditure_organization_id := l_org_id;
4515 l_project_accounting_context := 'Y';
4516 ELSE
4517 l_budgetary_control := 'N';
4518 l_project_accounting_context := null;
4519 l_expenditure_organization_id := null;
4520 END IF;
4521
4522
4523
4524 AP_INVOICE_LINES_INTERFACE_PKG.INSERT_ROW(
4525 X_ROWID => l_inv_line_row_id,
4526 X_INVOICE_ID => l_invoice_id,
4527 X_INVOICE_LINE_ID => l_invoice_line_id,
4528 X_LINE_NUMBER => l_Count1,
4529 X_LINE_TYPE_LOOKUP_CODE => 'ITEM',
4530 X_LINE_GROUP_NUMBER => null,
4531 X_AMOUNT => l_line_amount,
4532 X_ACCOUNTING_DATE => l_due_date,
4533 X_DESCRIPTION => l_description,
4534 -- X_AMOUNT_INCLUDES_TAX_FLAG => null,
4535 X_PRORATE_ACROSS_FLAG => null,
4536 X_TAX_CODE => null,
4537 X_TAX_CODE_ID => null,
4538 -- X_TAX_CODE_OVERRIDE_FLAG => null,
4539 -- X_TAX_RECOVERY_RATE => null,
4540 -- X_TAX_RECOVERY_OVERRIDE_FLAG => null,
4541 -- X_TAX_RECOVERABLE_FLAG => null,
4542 X_FINAL_MATCH_FLAG => null,
4543 X_PO_HEADER_ID => null,
4544 X_PO_LINE_ID => null,
4545 X_PO_LINE_LOCATION_ID => null,
4546 X_PO_DISTRIBUTION_ID => null,
4547 X_UNIT_OF_MEAS_LOOKUP_CODE => null,
4548 X_INVENTORY_ITEM_ID => null,
4549 X_QUANTITY_INVOICED => null,
4550 X_UNIT_PRICE => null,
4551 X_DISTRIBUTION_SET_ID => null,
4552 X_DIST_CODE_CONCATENATED => null,
4553 X_DIST_CODE_COMBINATION_ID => l_cc_id,
4554 X_AWT_GROUP_ID => null,
4555 X_ATTRIBUTE_CATEGORY => null,
4556 X_ATTRIBUTE1 => null,
4557 X_ATTRIBUTE2 => null,
4558 X_ATTRIBUTE3 => null,
4559 X_ATTRIBUTE4 => null,
4560 X_ATTRIBUTE5 => null,
4561 X_ATTRIBUTE6 => null,
4562 X_ATTRIBUTE7 => null,
4563 X_ATTRIBUTE8 => null,
4564 X_ATTRIBUTE9 => null,
4565 X_ATTRIBUTE10 => null,
4566 X_ATTRIBUTE11 => null,
4567 X_ATTRIBUTE12 => null,
4568 X_ATTRIBUTE13 => null,
4569 X_ATTRIBUTE14 => null,
4570 X_ATTRIBUTE15 => null,
4571 X_GLOBAL_ATTRIBUTE_CATEGORY => null,
4572 X_GLOBAL_ATTRIBUTE1 => null,
4573 X_GLOBAL_ATTRIBUTE2 => null,
4574 X_GLOBAL_ATTRIBUTE3 => null,
4575 X_GLOBAL_ATTRIBUTE4 => null,
4576 X_GLOBAL_ATTRIBUTE5 => null,
4577 X_GLOBAL_ATTRIBUTE6 => null,
4578 X_GLOBAL_ATTRIBUTE7 => null,
4579 X_GLOBAL_ATTRIBUTE8 => null,
4580 X_GLOBAL_ATTRIBUTE9 => null,
4581 X_GLOBAL_ATTRIBUTE10 => null,
4582 X_GLOBAL_ATTRIBUTE11 => null,
4583 X_GLOBAL_ATTRIBUTE12 => null,
4584 X_GLOBAL_ATTRIBUTE13 => null,
4585 X_GLOBAL_ATTRIBUTE14 => null,
4586 X_GLOBAL_ATTRIBUTE15 => null,
4587 X_GLOBAL_ATTRIBUTE16 => null,
4588 X_GLOBAL_ATTRIBUTE17 => null,
4589 X_GLOBAL_ATTRIBUTE18 => null,
4590 X_GLOBAL_ATTRIBUTE19 => null,
4591 X_GLOBAL_ATTRIBUTE20 => null,
4592 X_PO_RELEASE_ID => null,
4593 X_BALANCING_SEGMENT => null,
4594 X_COST_CENTER_SEGMENT => null,
4595 X_ACCOUNT_SEGMENT => null,
4596 X_PROJECT_ID => l_project_id,
4597 X_TASK_ID => l_task_id,
4598 X_EXPENDITURE_TYPE => l_expenditure_type,
4599 X_EXPENDITURE_ITEM_DATE => l_expenditure_item_date,
4600 X_EXPENDITURE_ORGANIZATION_ID => l_expenditure_organization_id,
4601 X_PROJECT_ACCOUNTING_CONTEXT => l_project_accounting_context,
4602 X_PA_ADDITION_FLAG => null,
4603 X_PA_QUANTITY => null,
4604 X_STAT_AMOUNT => null,
4605 X_TYPE_1099 => l_DISB_LINE_REC.TYPE_1099,
4606 X_INCOME_TAX_REGION => l_DISB_LINE_REC.INCOME_TAX_REGION,
4607 X_ASSETS_TRACKING_FLAG => null,
4608 X_PRICE_CORRECTION_FLAG => null,
4609 -- X_USSGL_TRANSACTION_CODE => null,
4610 X_RECEIPT_NUMBER => null,
4611 X_MATCH_OPTION => null,
4612 X_RCV_TRANSACTION_ID => null,
4613 X_CREATION_DATE => LNS_UTILITY_PUB.CREATION_DATE,
4614 X_CREATED_BY => LNS_UTILITY_PUB.CREATED_BY,
4615 X_LAST_UPDATE_DATE => LNS_UTILITY_PUB.LAST_UPDATE_DATE,
4616 X_LAST_UPDATED_BY => LNS_UTILITY_PUB.LAST_UPDATED_BY,
4617 X_LAST_UPDATE_LOGIN => LNS_UTILITY_PUB.LAST_UPDATE_LOGIN,
4618 X_ORG_ID => l_org_id,
4619 X_MODE => null,
4620 X_Calling_Sequence => null,
4621 X_award_id => l_award_id,
4622 X_price_correct_inv_num => null,
4623 -- Invoice Lines Project Stage 1
4624 X_PRICE_CORRECT_INV_LINE_NUM => null,
4625 X_SERIAL_NUMBER => null,
4626 X_MANUFACTURER => null,
4627 X_MODEL_NUMBER => null,
4628 X_WARRANTY_NUMBER => null,
4629 X_ASSET_BOOK_TYPE_CODE => null,
4630 X_ASSET_CATEGORY_ID => null,
4631 X_REQUESTER_FIRST_NAME => null,
4632 X_REQUESTER_LAST_NAME => null,
4633 X_REQUESTER_EMPLOYEE_NUM => null,
4634 X_REQUESTER_ID => null,
4635 X_DEFERRED_ACCTG_FLAG => null,
4636 X_DEF_ACCTG_START_DATE => null,
4637 X_DEF_ACCTG_END_DATE => null,
4638 X_DEF_ACCTG_NUMBER_OF_PERIODS => null,
4639 X_DEF_ACCTG_PERIOD_TYPE => null,
4640 -- eTax Uptake
4641 X_CONTROL_AMOUNT => null,
4642 X_ASSESSABLE_VALUE => null,
4643 X_DEFAULT_DIST_CCID => null,
4644 X_PRIMARY_INTENDED_USE => null,
4645 X_SHIP_TO_LOCATION_ID => null,
4646 X_PRODUCT_TYPE => null,
4647 X_PRODUCT_CATEGORY => null,
4648 X_PRODUCT_FISC_CLASSIFICATION => null,
4649 X_USER_DEFINED_FISC_CLASS => null,
4650 X_TRX_BUSINESS_CATEGORY => null,
4651 X_TAX_REGIME_CODE => null,
4652 X_TAX => null,
4653 X_TAX_JURISDICTION_CODE => null,
4654 X_TAX_STATUS_CODE => null,
4655 X_TAX_RATE_ID => null,
4656 X_TAX_RATE_CODE => null,
4657 X_TAX_RATE => null,
4658 X_INCL_IN_TAXABLE_LINE_FLAG => null,
4659 X_PURCHASING_CATEGORY => null,
4660 X_PURCHASING_CATEGORY_ID => null,
4661 X_COST_FACTOR_NAME => null,
4662 X_COST_FACTOR_ID => null);
4663
4664 EXCEPTION
4665 WHEN OTHERS THEN
4666 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Failed to insert invoice line into interface table');
4667 ROLLBACK TO SUBMIT_SINGLE_PAY_REQ;
4668
4669 FND_MESSAGE.SET_NAME('LNS', 'LNS_FAIL_INS_AP_INV_LN');
4670 FND_MSG_PUB.Add;
4671 RAISE FND_API.G_EXC_ERROR;
4672 END;
4673
4674 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully inserted new invoice line.');
4675
4676 END LOOP;
4677
4678 close clearing_distr_cur;
4679
4680 l_DISB_LINE_REC.INVOICE_INTERFACE_ID := l_invoice_id;
4681
4682 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Submitted payment request...');
4683
4684 AP_IMPORT_INVOICES_PKG.SUBMIT_PAYMENT_REQUEST(
4685 p_api_version => '1.0',
4686 p_invoice_interface_id => l_invoice_id,
4687 p_budget_control => l_budgetary_control, --'N', --Loans takes care of reserving funds using BC - AP should not reserve funds again
4688 x_return_status => l_return_status,
4689 x_msg_count => l_msg_count,
4690 x_msg_data => l_msg_data,
4691 p_invoice_id => l_DISB_LINE_REC.INVOICE_ID,
4692 x_rejection_list => l_rejections,
4693 p_calling_sequence => l_api_name);
4694
4695 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'AP_IMPORT_INVOICES_PKG.SUBMIT_PAYMENT_REQUEST return status: ' || l_return_status);
4696 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'AP_IMPORT_INVOICES_PKG.SUBMIT_PAYMENT_REQUEST return invoice_id: ' || l_DISB_LINE_REC.INVOICE_ID);
4697
4698 -- sanity check: get invoice_id straight from AP
4699 open get_invoice_cur(l_invoice_number, l_DISB_LINE_REC.PAYEE_PARTY_ID);
4700 fetch get_invoice_cur into l_ap_inv_id;
4701 close get_invoice_cur;
4702 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Straight query of invoive_id from AP: ' || l_ap_inv_id);
4703
4704 if l_return_status <> 'S' and
4705 l_DISB_LINE_REC.INVOICE_ID is null and
4706 l_ap_inv_id is not null then
4707
4708 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'INTERNAL AP ERROR: AP_IMPORT_INVOICES_PKG.SUBMIT_PAYMENT_REQUEST failed but invoice WAS CREATED!!! Proceeding as its success');
4709 l_return_status := 'S';
4710 l_DISB_LINE_REC.INVOICE_ID := l_ap_inv_id;
4711
4712 elsif l_return_status <> 'S' and
4713 l_DISB_LINE_REC.INVOICE_ID is not null and
4714 l_ap_inv_id is not null and
4715 l_DISB_LINE_REC.INVOICE_ID = l_ap_inv_id then
4716
4717 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'INTERNAL AP ERROR: AP_IMPORT_INVOICES_PKG.SUBMIT_PAYMENT_REQUEST return status is not S but return invoice id is set!!! Proceeding as its success');
4718 l_return_status := 'S';
4719
4720 end if;
4721
4722 IF l_return_status = 'S' THEN
4723
4724 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully submitted payment request.');
4725 l_DISB_LINE_REC.STATUS := 'IN_FUNDING';
4726 l_DISB_LINE_REC.REQUEST_DATE := sysdate;
4727
4728 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Inserting new history record...');
4729 -- calling history table handler api
4730 LNS_DISB_HISTORIES_H_PKG.Insert_Row(
4731 X_DISB_HISTORY_ID => l_hist_id,
4732 P_DISB_LINE_ID => l_DISB_LINE_REC.DISB_LINE_ID,
4733 P_ATTEMPT_NUMBER => l_attempt,
4734 P_BANK_ACCOUNT_ID => l_DISB_LINE_REC.BANK_ACCOUNT_ID,
4735 P_PAYMENT_METHOD_CODE => l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
4736 P_REQUEST_DATE => l_DISB_LINE_REC.REQUEST_DATE,
4737 P_PAYMENT_REQUEST_DATE => l_due_date,
4738 P_STATUS => l_DISB_LINE_REC.STATUS,
4739 P_MESSAGES => null,
4740 P_OBJECT_VERSION_NUMBER => 1);
4741 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully inserted new history record with DISB_HISTORY_ID: ' || l_hist_id);
4742
4743 UPDATE_DISB_LINE(
4744 P_API_VERSION => 1.0,
4745 P_INIT_MSG_LIST => FND_API.G_FALSE,
4746 P_COMMIT => FND_API.G_TRUE,
4747 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
4748 P_DISB_LINE_REC => l_DISB_LINE_REC,
4749 X_RETURN_STATUS => l_return_status,
4750 X_MSG_COUNT => l_msg_count,
4751 X_MSG_DATA => l_msg_data);
4752
4753 IF l_return_status <> 'S' THEN
4754 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_LINE failed');
4755 END IF;
4756
4757 ELSIF l_return_status = 'R' THEN
4758
4759 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Submit payment request return status: ' || l_return_status);
4760 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rejections count: ' || l_rejections.COUNT);
4761
4762 if l_rejections.COUNT > 0 then
4763
4764 FOR l_Count2 IN 1..l_rejections.COUNT LOOP
4765
4766 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rejection ' || l_Count2);
4767 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'parent_table: ' || l_rejections(l_Count2).parent_table);
4768 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'parent_id: ' || l_rejections(l_Count2).parent_id);
4769 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'reject_lookup_code: ' || l_rejections(l_Count2).reject_lookup_code);
4770
4771 -- get rejection description
4772 open get_reject_cur(l_rejections(l_Count2).reject_lookup_code);
4773 fetch get_reject_cur into l_reject_desc;
4774 close get_reject_cur;
4775
4776 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rejection desc: ' || l_reject_desc);
4777
4778 if l_rejections(l_Count2).parent_table = 'AP_INVOICES_INTERFACE' then
4779
4780 -- get party for rejection
4781 open get_party1_cur(l_rejections(l_Count2).parent_id);
4782 fetch get_party1_cur into l_payee;
4783 close get_party1_cur;
4784
4785 elsif l_rejections(l_Count2).parent_table = 'AP_INVOICE_LINES_INTERFACE' then
4786
4787 -- get party for rejection
4788 open get_party2_cur(l_rejections(l_Count2).parent_id);
4789 fetch get_party2_cur into l_payee;
4790 close get_party2_cur;
4791
4792 end if;
4793
4794 FND_MESSAGE.SET_NAME('LNS', 'LNS_DISB_REJECTION');
4795 FND_MESSAGE.SET_TOKEN('PAYEE', l_payee);
4796 FND_MESSAGE.SET_TOKEN('REJECTION', l_reject_desc);
4797 FND_MSG_PUB.Add;
4798
4799 END LOOP;
4800
4801 else
4802 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'No rejections have been returned');
4803 end if;
4804
4805 RAISE FND_API.G_EXC_ERROR;
4806
4807 ELSE
4808
4809 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Submit payment request return status: ' || l_return_status);
4810 RAISE FND_API.G_EXC_ERROR;
4811
4812 END IF;
4813
4814 COMMIT WORK;
4815
4816 -- END OF BODY OF API
4817 x_return_status := FND_API.G_RET_STS_SUCCESS;
4818
4819 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Successfully submitted single payment request');
4820
4821 -- Standard call to get message count and if count is 1, get message info
4822 FND_MSG_PUB.Count_And_Get(
4823 p_encoded => FND_API.G_FALSE,
4824 p_count => x_msg_count,
4825 p_data => x_msg_data);
4826
4827 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
4828
4829 EXCEPTION
4830 WHEN OTHERS THEN
4831
4832 l_DISB_LINE_REC.STATUS := 'FUNDING_ERROR';
4833 l_DISB_LINE_REC.REQUEST_DATE := sysdate;
4834
4835 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Inserting new history record...');
4836 -- calling history table handler api
4837 LNS_DISB_HISTORIES_H_PKG.Insert_Row(
4838 X_DISB_HISTORY_ID => l_hist_id,
4839 P_DISB_LINE_ID => l_DISB_LINE_REC.DISB_LINE_ID,
4840 P_ATTEMPT_NUMBER => l_attempt,
4841 P_BANK_ACCOUNT_ID => l_DISB_LINE_REC.BANK_ACCOUNT_ID,
4842 P_PAYMENT_METHOD_CODE => l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
4843 P_REQUEST_DATE => sysdate,
4844 P_PAYMENT_REQUEST_DATE => l_due_date,
4845 P_STATUS => l_DISB_LINE_REC.STATUS,
4846 P_MESSAGES => null,
4847 P_OBJECT_VERSION_NUMBER => 1);
4848
4849 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully inserted new history record with DISB_HISTORY_ID: ' || l_hist_id);
4850
4851 UPDATE_DISB_LINE(P_API_VERSION => 1.0,
4852 P_INIT_MSG_LIST => FND_API.G_FALSE,
4853 P_COMMIT => FND_API.G_TRUE,
4854 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
4855 P_DISB_LINE_REC => l_DISB_LINE_REC,
4856 X_RETURN_STATUS => l_return_status,
4857 X_MSG_COUNT => l_msg_count,
4858 X_MSG_DATA => l_msg_data);
4859
4860 IF l_return_status <> 'S' THEN
4861 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_LINE failed');
4862 END IF;
4863
4864 COMMIT WORK;
4865
4866 x_return_status := FND_API.G_RET_STS_ERROR;
4867 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
4868 END;
4869
4870
4871
4872 /*========================================================================
4873 | PUBLIC PROCEDURE SUBMIT_AUTODISBURSEMENT
4874 |
4875 | DESCRIPTION
4876 | This procedure submits 1-st disbursement of a loan
4877 |
4878 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
4879 | None
4880 |
4881 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
4882 | LogMessage
4883 |
4884 | PARAMETERS
4885 | P_API_VERSION IN Standard in parameter
4886 | P_INIT_MSG_LIST IN Standard in parameter
4887 | P_COMMIT IN Standard in parameter
4888 | P_VALIDATION_LEVEL IN Standard in parameter
4889 | P_LOAN_ID IN Loan ID
4890 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
4891 | X_MSG_COUNT OUT NOCOPY Standard out parameter
4892 | X_MSG_DATA OUT NOCOPY Standard out parameter
4893 |
4894 | KNOWN ISSUES
4895 | None
4896 |
4897 | NOTES
4898 | Any interesting aspect of the code in the package body which needs
4899 | to be stated.
4900 |
4901 | MODIFICATION HISTORY
4902 | Date Author Description of Changes
4903 | 07-26-2005 scherkas Created
4904 |
4905 *=======================================================================*/
4906 PROCEDURE SUBMIT_AUTODISBURSEMENT(P_API_VERSION IN NUMBER,
4907 P_INIT_MSG_LIST IN VARCHAR2,
4908 P_COMMIT IN VARCHAR2,
4909 P_VALIDATION_LEVEL IN NUMBER,
4910 P_LOAN_ID IN NUMBER,
4911 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
4912 X_MSG_COUNT OUT NOCOPY NUMBER,
4913 X_MSG_DATA OUT NOCOPY VARCHAR2)
4914 IS
4915
4916 /*-----------------------------------------------------------------------+
4917 | Local Variable Declarations and initializations |
4918 +-----------------------------------------------------------------------*/
4919
4920 l_api_name CONSTANT VARCHAR2(30) := 'SUBMIT_AUTODISBURSEMENT';
4921 l_api_version CONSTANT NUMBER := 1.0;
4922 l_return_status VARCHAR2(1);
4923 l_msg_count NUMBER;
4924 l_msg_data VARCHAR2(32767);
4925 l_disb_header_id number;
4926 l_autofunding_flag varchar2(1);
4927
4928 /*-----------------------------------------------------------------------+
4929 | Cursor Declarations |
4930 +-----------------------------------------------------------------------*/
4931
4932 -- getting disbursement header info
4933 CURSOR disb_headers_cur(P_LOAN_ID number) IS
4934 select head.DISB_HEADER_ID,
4935 nvl(head.AUTOFUNDING_FLAG, 'N')
4936 from LNS_LOAN_HEADERS_ALL loan,
4937 LNS_DISB_HEADERS head
4938 where loan.LOAN_ID = P_LOAN_ID and
4939 loan.loan_id = head.loan_id and
4940 head.DISBURSEMENT_NUMBER = 1 and
4941 nvl(loan.CURRENT_PHASE, 'TERM') = nvl(head.PHASE, 'OPEN');
4942
4943 BEGIN
4944
4945 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
4946
4947 -- Standard call to check for call compatibility
4948 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
4949 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4950 END IF;
4951
4952 -- Initialize message list if p_init_msg_list is set to TRUE
4953 IF FND_API.To_Boolean(p_init_msg_list) THEN
4954 FND_MSG_PUB.initialize;
4955 END IF;
4956
4957 -- Initialize API return status to success
4958 l_return_status := FND_API.G_RET_STS_SUCCESS;
4959
4960 -- START OF BODY OF API
4961
4962 -- getting disbursement header info
4963 open disb_headers_cur(P_LOAN_ID);
4964 fetch disb_headers_cur into l_disb_header_id, l_autofunding_flag;
4965 close disb_headers_cur;
4966
4967 if l_autofunding_flag = 'Y' then
4968 LNS_COND_ASSIGNMENT_PUB.VALIDATE_CUSTOM_CONDITIONS(
4969 P_API_VERSION => 1.0,
4970 P_INIT_MSG_LIST => FND_API.G_FALSE,
4971 P_COMMIT => FND_API.G_FALSE,
4972 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
4973 P_OWNER_OBJECT_ID => l_disb_header_id,
4974 P_CONDITION_TYPE => 'DISBURSEMENT',
4975 P_COMPLETE_FLAG => 'Y',
4976 X_RETURN_STATUS => l_return_status,
4977 X_MSG_COUNT => l_msg_count,
4978 X_MSG_DATA => l_msg_data);
4979
4980 IF l_return_status <> 'S' THEN
4981 RAISE FND_API.G_EXC_ERROR;
4982 end if;
4983
4984 SUBMIT_DISBURSEMENT(P_API_VERSION => 1.0,
4985 P_INIT_MSG_LIST => FND_API.G_FALSE,
4986 P_COMMIT => FND_API.G_FALSE,
4987 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
4988 P_DISB_HEADER_ID => l_disb_header_id,
4989 X_RETURN_STATUS => l_return_status,
4990 X_MSG_COUNT => l_msg_count,
4991 X_MSG_DATA => l_msg_data);
4992
4993 x_return_status := l_return_status;
4994 else
4995 x_return_status := FND_API.G_RET_STS_SUCCESS;
4996 return;
4997 end if;
4998
4999 COMMIT WORK;
5000 LogMessage(FND_LOG.LEVEL_STATEMENT, 'SUBMIT_AUTODISBURSEMENT returned status: ' || x_return_status);
5001
5002 -- END OF BODY OF API
5003 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
5004
5005 -- Standard call to get message count and if count is 1, get message info
5006 FND_MSG_PUB.Count_And_Get(
5007 p_encoded => FND_API.G_FALSE,
5008 p_count => x_msg_count,
5009 p_data => x_msg_data);
5010
5011 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
5012
5013 EXCEPTION
5014 WHEN FND_API.G_EXC_ERROR THEN
5015 x_return_status := FND_API.G_RET_STS_ERROR;
5016 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
5017 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5018 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5019 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
5020 WHEN OTHERS THEN
5021 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5022 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
5023 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
5024 END IF;
5025 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
5026 END;
5027
5028
5029
5030
5031 /*========================================================================
5032 | PUBLIC PROCEDURE SUBMIT_DISBURSEMENT
5033 |
5034 | DESCRIPTION
5035 | This procedure submits disbursement to AP.
5036 |
5037 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
5038 | None
5039 |
5040 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
5041 | LogMessage
5042 |
5043 | PARAMETERS
5044 | P_API_VERSION IN Standard in parameter
5045 | P_INIT_MSG_LIST IN Standard in parameter
5046 | P_COMMIT IN Standard in parameter
5047 | P_VALIDATION_LEVEL IN Standard in parameter
5048 | P_DISB_HEADER_ID IN Disbursement Header ID
5049 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
5050 | X_MSG_COUNT OUT NOCOPY Standard out parameter
5051 | X_MSG_DATA OUT NOCOPY Standard out parameter
5052 |
5053 | KNOWN ISSUES
5054 | None
5055 |
5056 | NOTES
5057 | Any interesting aspect of the code in the package body which needs
5058 | to be stated.
5059 |
5060 | MODIFICATION HISTORY
5061 | Date Author Description of Changes
5062 | 06-23-2005 scherkas Created
5063 |
5064 *=======================================================================*/
5065 PROCEDURE SUBMIT_DISBURSEMENT(P_API_VERSION IN NUMBER,
5066 P_INIT_MSG_LIST IN VARCHAR2,
5067 P_COMMIT IN VARCHAR2,
5068 P_VALIDATION_LEVEL IN NUMBER,
5069 P_DISB_HEADER_ID IN NUMBER,
5070 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
5071 X_MSG_COUNT OUT NOCOPY NUMBER,
5072 X_MSG_DATA OUT NOCOPY VARCHAR2)
5073 IS
5074
5075 /*-----------------------------------------------------------------------+
5076 | Local Variable Declarations and initializations |
5077 +-----------------------------------------------------------------------*/
5078
5079 l_api_name CONSTANT VARCHAR2(30) := 'SUBMIT_DISBURSEMENT';
5080 l_api_version CONSTANT NUMBER := 1.0;
5081 l_return_status VARCHAR2(1);
5082 l_msg_count NUMBER;
5083 l_msg_data VARCHAR2(32767);
5084 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
5085 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
5086
5087 TYPE DISB_LINES_TBL IS TABLE OF LNS_FUNDING_PUB.LNS_DISB_LINES_REC INDEX BY BINARY_INTEGER;
5088 l_DISB_LINES_TBL DISB_LINES_TBL;
5089
5090 l_loan_number varchar2(60);
5091 l_Count number;
5092 l_Count1 number;
5093 l_loan_id number;
5094 l_cond_count number;
5095 l_loan_version number;
5096 l_disb_number number;
5097 l_loan_status VARCHAR2(30);
5098 l_submit_disb varchar2(1);
5099 l_status_code varchar2(10);
5100 l_funds_reserved_flag varchar2(1);
5101 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
5102 l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
5103
5104 /*-----------------------------------------------------------------------+
5105 | Cursor Declarations |
5106 +-----------------------------------------------------------------------*/
5107
5108 -- getting disbursement line info
5109 CURSOR disb_line_cur(P_DISB_HEADER_ID number) IS
5110 select
5111 DISB_LINE_ID,
5112 DISB_HEADER_ID,
5113 DISB_LINE_NUMBER,
5114 LINE_AMOUNT,
5115 LINE_PERCENT,
5116 PAYEE_PARTY_ID,
5117 BANK_ACCOUNT_ID,
5118 PAYMENT_METHOD_CODE,
5119 STATUS,
5120 REQUEST_DATE,
5121 OBJECT_VERSION_NUMBER
5122 from LNS_DISB_LINES
5123 where DISB_HEADER_ID = P_DISB_HEADER_ID and
5124 (status is null or status = 'FUNDING_ERROR');
5125
5126 -- query loan details
5127 CURSOR loan_detail_cur(P_DISB_HEADER_ID number) IS
5128 select loan.LOAN_ID,
5129 loan.LOAN_NUMBER,
5130 loan.OBJECT_VERSION_NUMBER,
5131 loan.LOAN_STATUS,
5132 head.DISBURSEMENT_NUMBER,
5133 nvl(loan.FUNDS_RESERVED_FLAG,'N')
5134 from LNS_LOAN_HEADERS_ALL loan,
5135 LNS_DISB_HEADERS head
5136 where head.DISB_HEADER_ID = P_DISB_HEADER_ID and
5137 head.LOAN_ID = loan.LOAN_ID;
5138
5139 -- checking for conditions
5140 CURSOR conditions_cur(P_DISB_HEADER_ID number) IS
5141 select count(1)
5142 from LNS_COND_ASSIGNMENTS
5143 where
5144 DISB_HEADER_ID = P_DISB_HEADER_ID and
5145 MANDATORY_FLAG = 'Y' and
5146 (CONDITION_MET_FLAG is null or CONDITION_MET_FLAG = 'N') and
5147 (end_date_active is null or trunc(end_date_active) > trunc(sysdate));
5148
5149 CURSOR obj_vers_cur(c_loan_id number) is
5150 select object_version_number
5151 from lns_loan_headers
5152 where loan_id = c_loan_id;
5153
5154 BEGIN
5155
5156 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
5157 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
5158
5159 -- Standard call to check for call compatibility
5160 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
5161 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5162 END IF;
5163
5164 -- Initialize message list if p_init_msg_list is set to TRUE
5165 IF FND_API.To_Boolean(p_init_msg_list) THEN
5166 FND_MSG_PUB.initialize;
5167 END IF;
5168
5169 -- Initialize API return status to success
5170 l_return_status := FND_API.G_RET_STS_SUCCESS;
5171
5172 -- START OF BODY OF API
5173
5174 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Submitting disbursement header ' || P_DISB_HEADER_ID || '...');
5175
5176 -- query loan details
5177 open loan_detail_cur(P_DISB_HEADER_ID);
5178 fetch loan_detail_cur into l_loan_id,
5179 l_loan_number,
5180 l_loan_version,
5181 l_loan_status,
5182 l_disb_number,
5183 l_funds_reserved_flag;
5184
5185 -- if no record exists - return; otherwise proceed
5186 if loan_detail_cur%NOTFOUND then
5187
5188 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'ERROR: Loan Record is not found');
5189 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
5190 FND_MESSAGE.SET_TOKEN('RECORD', 'loan header');
5191 FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(P_DISB_HEADER_ID), 'null'));
5192 FND_MSG_PUB.ADD;
5193 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
5194 RAISE FND_API.G_EXC_ERROR;
5195
5196 end if;
5197
5198 close loan_detail_cur;
5199
5200 -- if its 1-st disbursement and funds not already reserved, call BC to reserve funds
5201 -- Bug#10126147 - Reserve funds for encumbranc enabled also.
5202 if ( (lns_utility_pub.IS_FED_FIN_ENABLED = 'Y' or LNS_UTILITY_PUB.IS_ENCUM_FIN_ENABLED = 'Y') and l_funds_reserved_flag <> 'Y' ) then
5203 -- After introducing Term Disbursment, we can cancel 1st disbursement and we can
5204 -- submit any disbursement(Not only 1st disb) at first time
5205 --and l_disb_number = 1
5206
5207 LogMessage(FND_LOG.LEVEL_PROCEDURE, 'Calling lns_distributions_pub.budgetary_control...');
5208
5209 BEGIN
5210 lns_distributions_pub.budgetary_control(p_init_msg_list => FND_API.G_FALSE
5211 ,p_commit => FND_API.G_FALSE
5212 ,p_loan_id => l_loan_id
5213 ,p_budgetary_control_mode => 'R'
5214 ,x_budgetary_status_code => l_status_code
5215 ,x_return_status => l_return_status
5216 ,x_msg_count => l_msg_count
5217 ,x_msg_data => l_msg_data);
5218 EXCEPTION
5219 WHEN OTHERS THEN
5220 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'lns_distributions_pub.budgetary_control throws exception');
5221 RAISE FND_API.G_EXC_ERROR;
5222 END;
5223
5224 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'The l_status_code is '||l_status_code);
5225 IF l_return_status <> 'S' THEN
5226 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to lns_distributions_pub.budgetary_control failed');
5227 RAISE FND_API.G_EXC_ERROR;
5228 ELSE
5229 -- Bug#9964875
5230 IF (l_status_code = 'FAIL' or l_status_code = 'PARTIAL' or l_status_code = 'XLA_ERROR') THEN
5231 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBMIT_DISB_FUNDS_UNRESERV');
5232 FND_MSG_PUB.Add;
5233 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
5234 RAISE FND_API.G_EXC_ERROR;
5235 END IF;
5236 END IF;
5237
5238 end if;
5239
5240 VALIDATE_DISB_FOR_SUBMIT(P_API_VERSION => 1.0,
5241 P_INIT_MSG_LIST => FND_API.G_TRUE,
5242 P_COMMIT => FND_API.G_FALSE,
5243 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
5244 P_DISB_HEADER_ID => P_DISB_HEADER_ID,
5245 X_RETURN_STATUS => l_return_status,
5246 X_MSG_COUNT => l_msg_count,
5247 X_MSG_DATA => l_msg_data);
5248
5249 IF l_return_status <> 'S' THEN
5250 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to VALIDATE_DISB_FOR_SUBMIT failed');
5251 RAISE FND_API.G_EXC_ERROR;
5252 END IF;
5253
5254 -- checking for conditions
5255 open conditions_cur(P_DISB_HEADER_ID);
5256 fetch conditions_cur into l_cond_count;
5257 close conditions_cur;
5258
5259 if l_cond_count > 0 then
5260 FND_MESSAGE.SET_NAME('LNS', 'LNS_NOT_ALL_COND_MET');
5261 FND_MSG_PUB.Add;
5262 RAISE FND_API.G_EXC_ERROR;
5263 end if;
5264
5265 -- create iby external payee
5266 CREATE_EXT_IBY_PAYEE(P_DISB_HEADER_ID);
5267
5268 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
5269 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Searching for disbursement lines to creating payment requests...');
5270
5271 -- getting disbursement line info
5272 open disb_line_cur(P_DISB_HEADER_ID);
5273
5274 l_count := 0;
5275 l_count1 := 0;
5276 LOOP
5277
5278 fetch disb_line_cur into
5279 l_DISB_LINE_REC.DISB_LINE_ID,
5280 l_DISB_LINE_REC.DISB_HEADER_ID,
5281 l_DISB_LINE_REC.DISB_LINE_NUMBER,
5282 l_DISB_LINE_REC.LINE_AMOUNT,
5283 l_DISB_LINE_REC.LINE_PERCENT,
5284 l_DISB_LINE_REC.PAYEE_PARTY_ID,
5285 l_DISB_LINE_REC.BANK_ACCOUNT_ID,
5286 l_DISB_LINE_REC.PAYMENT_METHOD_CODE,
5287 l_DISB_LINE_REC.STATUS,
5288 l_DISB_LINE_REC.REQUEST_DATE,
5289 l_DISB_LINE_REC.OBJECT_VERSION_NUMBER;
5290
5291 exit when disb_line_cur%NOTFOUND;
5292
5293 l_count := l_count + 1;
5294 l_DISB_LINES_TBL(l_count) := l_DISB_LINE_REC;
5295
5296 SUBMIT_SINGLE_PAY_REQ(P_API_VERSION => 1.0,
5297 P_INIT_MSG_LIST => FND_API.G_FALSE,
5298 P_COMMIT => FND_API.G_FALSE,
5299 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
5300 P_DISB_LINE_ID => l_DISB_LINES_TBL(l_count).DISB_LINE_ID,
5301 X_RETURN_STATUS => l_return_status,
5302 X_MSG_COUNT => l_msg_count,
5303 X_MSG_DATA => l_msg_data);
5304
5305 LogMessage(FND_LOG.LEVEL_STATEMENT, 'SUBMIT_SINGLE_PAY_REQ return status: ' || l_return_status);
5306
5307 -- counting errors
5308 if l_return_status <> 'S' then
5309 l_count1 := l_count1 + 1;
5310 end if;
5311
5312 END LOOP;
5313
5314 close disb_line_cur;
5315
5316 if l_count = 0 then
5317 LogMessage(FND_LOG.LEVEL_STATEMENT, 'No disbursement lines found to create payment request');
5318 else
5319 if l_count1 = 0 then -- nothing has failed
5320 l_DISB_HEADER_REC.STATUS := 'IN_FUNDING';
5321 l_loan_header_rec.SECONDARY_STATUS := 'IN_FUNDING';
5322 elsif l_count = l_count1 then -- fully failed
5323 l_DISB_HEADER_REC.STATUS := 'FUNDING_ERROR';
5324 l_loan_header_rec.SECONDARY_STATUS := 'FUNDING_ERROR';
5325 else -- partially failed
5326 l_DISB_HEADER_REC.STATUS := 'FUNDING_ERROR';
5327 l_loan_header_rec.SECONDARY_STATUS := 'FUNDING_ERROR';
5328 end if;
5329
5330 l_DISB_HEADER_REC.DISB_HEADER_ID := l_DISB_LINE_REC.DISB_HEADER_ID;
5331 UPDATE_DISB_HEADER(
5332 P_API_VERSION => 1.0,
5333 P_INIT_MSG_LIST => FND_API.G_FALSE,
5334 P_COMMIT => FND_API.G_FALSE,
5335 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
5336 P_DISB_HEADER_REC => l_DISB_HEADER_REC,
5337 X_RETURN_STATUS => l_return_status,
5338 X_MSG_COUNT => l_msg_count,
5339 X_MSG_DATA => l_msg_data);
5340
5341 IF l_return_status <> 'S' THEN
5342 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_HEADER failed');
5343 END IF;
5344
5345 l_loan_header_rec.LOAN_ID := l_loan_id;
5346
5347 OPEN obj_vers_cur(l_loan_id);
5348 FETCH obj_vers_cur INTO l_loan_version ;
5349 CLOSE obj_vers_cur;
5350
5351 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
5352 LogMessage(FND_LOG.LEVEL_STATEMENT, 'status: ' || l_loan_header_rec.LOAN_STATUS);
5353 LogMessage(FND_LOG.LEVEL_STATEMENT, 'secondary status: ' || l_loan_header_rec.SECONDARY_STATUS);
5354
5355 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
5356 P_LOAN_HEADER_REC => l_loan_header_rec,
5357 P_INIT_MSG_LIST => FND_API.G_FALSE,
5358 X_RETURN_STATUS => l_return_status,
5359 X_MSG_COUNT => l_msg_count,
5360 X_MSG_DATA => l_msg_data);
5361
5362 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
5363
5364 IF l_return_status = 'S' THEN
5365 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_LOAN_HEADERS_ALL');
5366 ELSE
5367 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
5368 FND_MSG_PUB.Add;
5369 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
5370 -- RAISE FND_API.G_EXC_ERROR;
5371 END IF;
5372
5373 -- Only for Federal Direct Loans whose budget is reserved
5374 -- Dont submit_disbursement_bc if the disbursement is failed
5375 IF ((lns_utility_pub.IS_FED_FIN_ENABLED = 'Y') AND (l_funds_reserved_flag = 'Y') AND (l_DISB_HEADER_REC.STATUS <> 'FUNDING_ERROR')) THEN
5376 LogMessage(FND_LOG.LEVEL_STATEMENT, 'calling lns_distributions_pub.submit_disbursement_bc');
5377 -- Submit budgetary disbursement distributions if needed
5378 lns_distributions_pub.submit_disbursement_bc(p_init_msg_list => FND_API.G_FALSE
5379 ,p_commit => FND_API.G_FALSE
5380 ,p_loan_id => l_loan_header_rec.LOAN_ID
5381 ,p_disb_header_id => l_DISB_HEADER_REC.DISB_HEADER_ID
5382 ,p_activity => 'LNS_SUBMIT_DISBURSEMENT'
5383 ,X_RETURN_STATUS => l_return_status
5384 ,X_MSG_COUNT => l_msg_count
5385 ,X_MSG_DATA => l_msg_data);
5386
5387 logMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
5388 IF l_return_status <> 'S' THEN
5389 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_OTHERS_EXCEP');
5390 FND_MESSAGE.SET_TOKEN('ERROR' ,'Call to lns_distributions_pub.submit_disbursement_bc failed for acitivity = LNS_SUBMIT_DISBURSEMENT');
5391 FND_MSG_PUB.ADD;
5392 logMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
5393 RAISE FND_API.G_EXC_ERROR;
5394 END IF;
5395 END IF;
5396
5397
5398 end if;
5399
5400 COMMIT WORK;
5401 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
5402
5403 if l_count1 > 0 then
5404 RAISE FND_API.G_EXC_ERROR;
5405 end if;
5406
5407 -- END OF BODY OF API
5408 x_return_status := FND_API.G_RET_STS_SUCCESS;
5409 LogMessage(FND_LOG.LEVEL_STATEMENT, 'SUBMIT_DISBURSEMENT returned status: ' || x_return_status);
5410
5411 -- Standard call to get message count and if count is 1, get message info
5412 FND_MSG_PUB.Count_And_Get(
5413 p_encoded => FND_API.G_FALSE,
5414 p_count => x_msg_count,
5415 p_data => x_msg_data);
5416
5417 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
5418
5419 EXCEPTION
5420 WHEN OTHERS THEN
5421 x_return_status := FND_API.G_RET_STS_ERROR;
5422 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
5423
5424 if x_msg_count = 0 then
5425 FND_MESSAGE.SET_NAME('LNS', 'LNS_SUBMIT_DISB_FAILED');
5426 FND_MSG_PUB.Add;
5427 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
5428 end if;
5429
5430 LogMessage(FND_LOG.LEVEL_STATEMENT, 'SUBMIT_DISBURSEMENT returned status: ' || x_return_status);
5431
5432 END SUBMIT_DISBURSEMENT;
5433
5434 /*========================================================================
5435 | PRIVATE PROCEDURE PAY_SINGLE_INVOICE
5436 |
5437 | DESCRIPTION
5438 | This procedure pays single AP invoice
5439 |
5440 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
5441 | None
5442 |
5443 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
5444 | LogMessage
5445 |
5446 | PARAMETERS
5447 | P_INVOICE_ID IN Check ID
5448 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
5449 | X_MSG_COUNT OUT NOCOPY Standard out parameter
5450 | X_MSG_DATA OUT NOCOPY Standard out parameter
5451 |
5452 | KNOWN ISSUES
5453 | None
5454 |
5455 | NOTES
5456 | Any interesting aspect of the code in the package body which needs
5457 | to be stated.
5458 |
5459 | MODIFICATION HISTORY
5460 | Date Author Description of Changes
5461 | 07-25-2005 scherkas Created
5462 | 06-02-2006 karamach If this is the first funding for the disb header, then update the payment_request_date to be the sysdate to fix bug5232416
5463 | 13-JUL-2007 mbolli Bug#6169438 - If the loan dates are shifted then regenerate the Loan Agreements
5464 *=======================================================================*/
5465 PROCEDURE PAY_SINGLE_INVOICE
5466 (P_INVOICE_ID IN NUMBER,
5467 P_COMPLETE_FLAG IN VARCHAR2,
5468 X_Return_Status OUT NOCOPY VARCHAR2,
5469 X_Msg_Count OUT NOCOPY NUMBER,
5470 X_Msg_Data OUT NOCOPY VARCHAR2)
5471 IS
5472
5473 /*-----------------------------------------------------------------------+
5474 | Local Variable Declarations and initializations |
5475 +-----------------------------------------------------------------------*/
5476
5477 l_api_name CONSTANT VARCHAR2(30) := 'PAY_SINGLE_INVOICE';
5478 l_api_version CONSTANT NUMBER := 1.0;
5479 l_return_status VARCHAR2(1);
5480 l_msg_count NUMBER;
5481 l_msg_data VARCHAR2(32767);
5482 l_disb_line_id number;
5483 l_funded_count number;
5484 l_loan_version number;
5485 l_hist_id number;
5486 l_hist_version number;
5487 l_TERM_ID number;
5488 l_TERM_VERSION_NUMBER number;
5489 l_requested_amount number;
5490 l_do_billing number;
5491 l_request_id number;
5492 l_inv_amount number;
5493 l_inv_paid_amount number;
5494 l_MULTIPLE_FUNDING_FLAG varchar2(1);
5495 l_notify boolean;
5496 l_xml_output BOOLEAN;
5497 l_iso_language FND_LANGUAGES.iso_language%TYPE;
5498 l_iso_territory FND_LANGUAGES.iso_territory%TYPE;
5499 l_last_api_called varchar2(500);
5500 l_agreement_reason varchar2(500);
5501
5502 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
5503 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
5504 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
5505 l_term_rec LNS_TERMS_PUB.loan_term_rec_type;
5506 l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
5507 l_event_table lns_distributions_pub.acc_event_tbl;
5508 l_funded_lines_count number;
5509 l_dates_shifted_flag varchar2(1) := 'N';
5510 isDisbDateChange varchar2(1) := 'N';
5511 hdrIdCnt NUMBER;
5512 l_do_conversion_bill varchar2(1) := 'N';
5513 l_do_origination_bill varchar2(1) := 'N';
5514 l_currency varchar2(15);
5515 l_disb_desc varchar2(80);
5516 l_installment_number number;
5517
5518 TYPE lns_disb_hdr_id_type IS TABLE OF LNS_DISB_HEADERS.DISB_HEADER_ID%TYPE INDEX BY PLS_INTEGER;
5519 l_disb_hdr_id_tbl lns_disb_hdr_id_type;
5520 l_fee_basis_tbl LNS_FEE_ENGINE.FEE_BASIS_TBL;
5521 l_fee_structures LNS_FEE_ENGINE.FEE_STRUCTURE_TBL;
5522 l_fees_tbl LNS_FEE_ENGINE.FEE_CALC_TBL;
5523
5524 /*-----------------------------------------------------------------------+
5525 | Cursor Declarations |
5526 +-----------------------------------------------------------------------*/
5527
5528 -- getting disbursement line and header info
5529 CURSOR disb_line_cur(P_INVOICE_ID number) IS
5530 select
5531 lines.DISB_LINE_ID,
5532 lines.DISB_HEADER_ID,
5533 lines.OBJECT_VERSION_NUMBER,
5534 head.loan_id,
5535 head.OBJECT_VERSION_NUMBER,
5536 head.status,
5537 head.PAYMENT_REQUEST_DATE,
5538 loan.OBJECT_VERSION_NUMBER,
5539 loan.REQUESTED_AMOUNT + nvl(loan.ADD_REQUESTED_AMOUNT, 0),
5540 loan.current_phase,
5541 loan.OPEN_TO_TERM_FLAG,
5542 loan.OPEN_TO_TERM_EVENT,
5543 loan.loan_status,
5544 head.DISBURSEMENT_NUMBER,
5545 loan.secondary_status,
5546 loan.MULTIPLE_FUNDING_FLAG,
5547 head.phase,
5548 loan.LOAN_CURRENCY,
5549 decode(head.ACTIVITY_CODE, null, head.DESCRIPTION, lns_utility_pub.get_lookup_meaning('DISB_ACTIVITY', head.ACTIVITY_CODE))
5550 from LNS_DISB_LINES lines,
5551 LNS_DISB_HEADERS head,
5552 LNS_LOAN_HEADERS loan
5553 where lines.INVOICE_ID = P_INVOICE_ID and
5554 lines.DISB_HEADER_ID = head.DISB_HEADER_ID and
5555 lines.status is not null and lines.status <> 'FULLY_FUNDED' and
5556 head.LOAN_ID = loan.LOAN_ID;
5557
5558 -- getting partially or fully funded lines count
5559 CURSOR c_funded_lines_count_cur(P_DISB_HEADER_ID number) IS
5560 select count(1) from LNS_DISB_LINES
5561 where DISB_HEADER_ID = P_DISB_HEADER_ID and STATUS IN ('FULLY_FUNDED', 'PARTIALLY_FUNDED');
5562
5563 -- getting diff between total lines count and fully funded lines
5564 CURSOR funded_count_cur(P_DISB_HEADER_ID number) IS
5565 select
5566 (select count(1) from LNS_DISB_LINES
5567 where DISB_HEADER_ID = P_DISB_HEADER_ID)
5568 -
5569 (select count(1) from LNS_DISB_LINES
5570 where DISB_HEADER_ID = P_DISB_HEADER_ID and (STATUS is not null and STATUS = 'FULLY_FUNDED'))
5571 from dual;
5572
5573 -- getting sum of all disbursed amount for this loan from ap_invoices_all - real situation
5574 CURSOR disb_amount_cur(P_LOAN_ID number) IS
5575 select nvl(sum(inv.amount_paid), 0)
5576 from LNS_DISB_LINES lines,
5577 LNS_DISB_HEADERS head,
5578 ap_invoices_all inv,
5579 lns_loan_headers_all loan
5580 where head.LOAN_ID = P_LOAN_ID and
5581 head.loan_id = loan.loan_id and
5582 --nvl(loan.current_phase, 'TERM') = nvl(head.phase, 'OPEN') and
5583 lines.DISB_HEADER_ID = head.DISB_HEADER_ID and
5584 lines.invoice_id is not null and
5585 lines.invoice_id = inv.invoice_id;
5586
5587 -- getting sum of all disbursed amount for this loan from lns_disb_lines - testing
5588 CURSOR disb_amount_cur1(P_LOAN_ID number) IS
5589 select nvl(sum(lines.LINE_AMOUNT), 0)
5590 from LNS_DISB_LINES lines,
5591 LNS_DISB_HEADERS head
5592 where head.LOAN_ID = P_LOAN_ID and
5593 lines.DISB_HEADER_ID = head.DISB_HEADER_ID and
5594 (lines.STATUS is not null and lines.STATUS = 'FULLY_FUNDED') and
5595 lines.DISBURSEMENT_DATE is not null;
5596
5597 -- getting last history record to update status
5598 CURSOR last_hist_rec_cur(P_DISB_LINE_ID number) IS
5599 select max(DISB_HISTORY_ID), max(OBJECT_VERSION_NUMBER+1)
5600 from lns_disb_histories_h
5601 where DISB_LINE_ID = P_DISB_LINE_ID;
5602
5603 -- query term version
5604 CURSOR term_version_cur(P_LOAN_ID number) IS
5605 select TERM_ID,
5606 OBJECT_VERSION_NUMBER
5607 from LNS_TERMS
5608 where LOAN_ID = P_LOAN_ID;
5609
5610 -- check to start billing for 0-th installment
5611 CURSOR do_billing_cur(C_LOAN_ID number, C_PHASE varchar2) IS
5612 select nvl(count(1),0)
5613 from lns_fee_assignments
5614 where begin_installment_number = 0
5615 and end_installment_number = 0
5616 and end_date_active is null
5617 and (billing_option = 'ORIGINATION'
5618 -- Only for Term Pase, check the Event_conversion Fees
5619 OR billing_option = decode(nvl(C_PHASE, 'TERM'), 'TERM','TERM_CONVERSION', null)
5620 )
5621 and loan_id = C_LOAN_ID
5622 and phase = C_PHASE;
5623
5624 -- get invoice payment amount
5625 CURSOR inv_paid_amount_cur(P_INVOICE_ID number) IS
5626 select INVOICE_AMOUNT, AMOUNT_PAID
5627 from ap_invoices_all
5628 where invoice_id = P_INVOICE_ID;
5629
5630 -- get min payment date - fix for bug 6906841
5631 CURSOR payments_date_cur(P_INVOICE_ID number) IS
5632 select min(check_date)
5633 from AP_INVOICE_PAYMENTS_V
5634 where
5635 INVOICE_ID = P_INVOICE_ID;
5636 /*
5637 CURSOR c_disb_hdr_id(c_disb_hdr_id NUMBER) IS
5638 select dh.disb_header_id
5639 from lns_disb_headers dh
5640 where dh.loan_id = l_loan_header_rec.loan_id
5641 and dh.disb_header_id >= c_disb_hdr_id;
5642 */
5643 CURSOR get_instal_num(p_loan_id number, p_disb_header_id NUMBER) IS
5644 select begin_installment_number
5645 from lns_fee_assignments
5646 where loan_id = p_loan_id
5647 and disb_header_id = p_disb_header_id;
5648
5649 BEGIN
5650 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
5651 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
5652
5653 -- Standard start of API savepoint
5654 SAVEPOINT PAY_SINGLE_INVOICE;
5655 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
5656
5657 -- Initialize API return status to success
5658 l_return_status := FND_API.G_RET_STS_SUCCESS;
5659
5660 -- START OF BODY OF API
5661
5662 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Processing payment...');
5663 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input Data:');
5664 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_INVOICE_ID: ' || P_INVOICE_ID);
5665
5666 -- getting disbursement line info
5667 open disb_line_cur(P_INVOICE_ID);
5668 fetch disb_line_cur into l_DISB_LINE_REC.DISB_LINE_ID,
5669 l_DISB_HEADER_REC.DISB_HEADER_ID,
5670 l_DISB_LINE_REC.OBJECT_VERSION_NUMBER,
5671 l_loan_header_rec.loan_id,
5672 l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER,
5673 l_DISB_HEADER_REC.STATUS,
5674 l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE,
5675 l_loan_version,
5676 l_requested_amount,
5677 l_loan_header_rec.current_phase,
5678 l_loan_header_rec.OPEN_TO_TERM_FLAG,
5679 l_loan_header_rec.OPEN_TO_TERM_EVENT,
5680 l_loan_header_rec.loan_status,
5681 l_DISB_HEADER_REC.DISBURSEMENT_NUMBER,
5682 l_loan_header_rec.secondary_status,
5683 l_MULTIPLE_FUNDING_FLAG,
5684 l_DISB_HEADER_REC.PHASE,
5685 l_currency,
5686 l_disb_desc;
5687
5688 if disb_line_cur%NOTFOUND then
5689 close disb_line_cur;
5690 return;
5691 end if;
5692
5693 close disb_line_cur;
5694
5695 if P_COMPLETE_FLAG = 'Y' then -- testing
5696
5697 l_DISB_LINE_REC.STATUS := 'FULLY_FUNDED';
5698 l_DISB_LINE_REC.DISBURSEMENT_DATE := sysdate;
5699
5700 else -- real
5701
5702 -- get invoice payment amount
5703 open inv_paid_amount_cur(P_INVOICE_ID);
5704 fetch inv_paid_amount_cur into l_inv_amount, l_inv_paid_amount;
5705 close inv_paid_amount_cur;
5706
5707 if l_inv_amount = l_inv_paid_amount then
5708 l_DISB_LINE_REC.STATUS := 'FULLY_FUNDED';
5709 elsif l_inv_amount > l_inv_paid_amount then
5710 l_DISB_LINE_REC.STATUS := 'PARTIALLY_FUNDED';
5711 end if;
5712
5713 -- get min payment date - fix for bug 6906841
5714 open payments_date_cur(P_INVOICE_ID);
5715 fetch payments_date_cur into l_DISB_LINE_REC.DISBURSEMENT_DATE;
5716 close payments_date_cur;
5717
5718 end if;
5719
5720 LogMessage(FND_LOG.LEVEL_STATEMENT, 'L_DISB_HEADER_REC.PAYMENT_REQUEST_DATE = ' || L_DISB_HEADER_REC.PAYMENT_REQUEST_DATE);
5721 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_DISB_LINE_REC.DISBURSEMENT_DATE = ' || l_DISB_LINE_REC.DISBURSEMENT_DATE);
5722
5723 IF (L_DISB_HEADER_REC.PAYMENT_REQUEST_DATE <> l_DISB_LINE_REC.DISBURSEMENT_DATE) THEN
5724 isDisbDateChange := 'Y';
5725 END IF;
5726
5727 -- getting partially or fully funded lines count before updating disb lines with new status
5728 open c_funded_lines_count_cur(l_DISB_HEADER_REC.DISB_HEADER_ID);
5729 fetch c_funded_lines_count_cur into l_funded_lines_count;
5730 close c_funded_lines_count_cur;
5731
5732 -- updating disb line
5733 UPDATE_DISB_LINE(
5734 P_API_VERSION => 1.0,
5735 P_INIT_MSG_LIST => FND_API.G_TRUE,
5736 P_COMMIT => FND_API.G_FALSE,
5737 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
5738 P_DISB_LINE_REC => l_DISB_LINE_REC,
5739 X_RETURN_STATUS => l_return_status,
5740 X_MSG_COUNT => l_msg_count,
5741 X_MSG_DATA => l_msg_data);
5742
5743 IF l_return_status <> 'S' THEN
5744 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_LINE failed');
5745 RAISE FND_API.G_EXC_ERROR;
5746 END IF;
5747
5748 -- getting diff between total lines count and fully funded lines
5749 open funded_count_cur(l_DISB_HEADER_REC.DISB_HEADER_ID);
5750 fetch funded_count_cur into l_funded_count;
5751 close funded_count_cur;
5752
5753 if l_funded_count = 0 then
5754 l_DISB_HEADER_REC.STATUS := 'FULLY_FUNDED';
5755 else
5756 l_DISB_HEADER_REC.STATUS := 'PARTIALLY_FUNDED';
5757 end if;
5758
5759 -- updating disb header
5760 UPDATE_DISB_HEADER(
5761 P_API_VERSION => 1.0,
5762 P_INIT_MSG_LIST => FND_API.G_TRUE,
5763 P_COMMIT => FND_API.G_FALSE,
5764 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
5765 P_DISB_HEADER_REC => l_DISB_HEADER_REC,
5766 X_RETURN_STATUS => l_return_status,
5767 X_MSG_COUNT => l_msg_count,
5768 X_MSG_DATA => l_msg_data);
5769
5770 IF l_return_status <> 'S' THEN
5771 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_HEADER failed');
5772 RAISE FND_API.G_EXC_ERROR;
5773 END IF;
5774
5775 -- getting last history record to update status
5776 open last_hist_rec_cur(l_DISB_LINE_REC.DISB_LINE_ID);
5777 fetch last_hist_rec_cur into l_hist_id, l_hist_version;
5778 close last_hist_rec_cur;
5779
5780 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating history record...');
5781 -- calling history table handler api
5782 LNS_DISB_HISTORIES_H_PKG.Update_Row(
5783 P_DISB_HISTORY_ID => l_hist_id,
5784 P_STATUS => l_DISB_LINE_REC.STATUS,
5785 P_OBJECT_VERSION_NUMBER => l_hist_version);
5786
5787 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully updated history record with ID: ' || l_hist_id);
5788
5789 if P_COMPLETE_FLAG = 'Y' then -- testing
5790
5791 -- getting sum of all disbursed amount for this loan
5792 open disb_amount_cur1(l_loan_header_rec.loan_id);
5793 fetch disb_amount_cur1 into l_loan_header_rec.funded_amount;
5794 close disb_amount_cur1;
5795
5796 else -- real
5797
5798 -- getting sum of all disbursed amount for this loan
5799 open disb_amount_cur(l_loan_header_rec.loan_id);
5800 fetch disb_amount_cur into l_loan_header_rec.funded_amount;
5801 close disb_amount_cur;
5802
5803 end if;
5804
5805 if l_DISB_HEADER_REC.STATUS = 'FULLY_FUNDED' then
5806 /*
5807 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling to lns_fee_engine.processDisbursementFees...');
5808 -- processing disbursement fees
5809 lns_fee_engine.processDisbursementFees(
5810 p_init_msg_list => FND_API.G_TRUE,
5811 p_commit => FND_API.G_FALSE,
5812 p_phase => l_DISB_HEADER_REC.phase, --'OPEN',
5813 p_loan_id => l_loan_header_rec.loan_id,
5814 p_disb_head_id => l_DISB_HEADER_REC.DISB_HEADER_ID,
5815 x_return_status => l_return_status,
5816 x_msg_count => l_msg_count,
5817 x_msg_data => l_msg_data);
5818
5819 LogMessage(FND_LOG.LEVEL_STATEMENT, 'return of lns_fee_engine.processDisbursementFees: ' || l_return_status);
5820 IF l_return_status <> 'S' THEN
5821 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to lns_fee_engine.processDisbursementFees failed');
5822 -- RAISE FND_API.G_EXC_ERROR;
5823 END IF;
5824 */
5825 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling to LNS_DISTRIBUTIONS_PUB.create_event...');
5826 -- creating accounting event
5827 l_event_table(1).loan_id := l_loan_header_rec.loan_id;
5828 l_event_table(1).EVENT_TYPE_CODE := 'DISBURSEMENT_FUNDED';
5829 l_event_table(1).EVENT_DATE := l_DISB_LINE_REC.DISBURSEMENT_DATE;
5830 l_event_table(1).EVENT_STATUS := 'U';
5831 l_event_table(1).DISB_HEADER_ID := l_DISB_HEADER_REC.DISB_HEADER_ID;
5832
5833 LNS_DISTRIBUTIONS_PUB.create_event(
5834 p_acc_event_tbl => l_event_table,
5835 p_init_msg_list => FND_API.G_TRUE,
5836 p_commit => FND_API.G_FALSE,
5837 x_return_status => l_return_status,
5838 x_msg_count => l_msg_count,
5839 x_msg_data => l_msg_data);
5840
5841 LogMessage(FND_LOG.LEVEL_STATEMENT, 'return of LNS_DISTRIBUTIONS_PUB.create_event: ' || l_return_status);
5842 IF l_return_status <> 'S' THEN
5843 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to LNS_DISTRIBUTIONS_PUB.create_event failed');
5844 -- RAISE FND_API.G_EXC_ERROR;
5845 END IF;
5846
5847 end if;
5848
5849 LogMessage(FND_LOG.LEVEL_STATEMENT, 'current_phase: ' || l_loan_header_rec.current_phase);
5850 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_STATUS: ' || l_loan_header_rec.LOAN_STATUS);
5851 LogMessage(FND_LOG.LEVEL_STATEMENT, 'SECONDARY_STATUS: ' || l_loan_header_rec.SECONDARY_STATUS);
5852 LogMessage(FND_LOG.LEVEL_STATEMENT, 'funded_amount: ' || l_loan_header_rec.funded_amount);
5853 LogMessage(FND_LOG.LEVEL_STATEMENT, 'requested_amount: ' || l_requested_amount);
5854 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISBURSEMENT_DATE: ' || l_DISB_LINE_REC.DISBURSEMENT_DATE);
5855
5856 -- Retrieve agreement reason
5857 l_agreement_reason := null;
5858 FND_MESSAGE.SET_NAME('LNS', 'LNS_FUND_AGREEMENT_REASON1');
5859 FND_MESSAGE.SET_TOKEN('DISB', l_disb_desc);
5860 FND_MESSAGE.SET_TOKEN('DATE', l_DISB_LINE_REC.DISBURSEMENT_DATE);
5861 FND_MESSAGE.SET_TOKEN('AMOUNT', to_char(l_inv_paid_amount, FND_CURRENCY.SAFE_GET_FORMAT_MASK(l_currency,50)));
5862 FND_MESSAGE.SET_TOKEN('CURR', l_currency);
5863 FND_MSG_PUB.Add;
5864 l_agreement_reason := FND_MSG_PUB.Get(p_encoded => 'F');
5865 FND_MSG_PUB.DELETE_MSG(FND_MSG_PUB.COUNT_MSG);
5866
5867 if l_loan_header_rec.current_phase = 'OPEN' then
5868
5869 if l_loan_header_rec.LOAN_STATUS = 'APPROVED' then
5870
5871 l_do_origination_bill := 'Y';
5872
5873 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Its first payment for OPEN phase of the loan - getting new open loan dates...');
5874
5875 LNS_FINANCIALS.shiftLoanDates(p_loan_id => l_loan_header_rec.loan_id
5876 ,p_new_start_date => l_DISB_LINE_REC.DISBURSEMENT_DATE
5877 ,p_phase => 'OPEN'
5878 ,x_loan_details => l_loan_details
5879 ,x_dates_shifted_flag => l_dates_shifted_flag
5880 ,x_return_status => l_return_status
5881 ,x_msg_count => l_msg_count
5882 ,x_msg_data => l_msg_data);
5883
5884 IF l_return_status <> 'S' THEN
5885 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
5886 RAISE FND_API.G_EXC_ERROR;
5887 END IF;
5888
5889 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New open start date: ' || l_loan_details.loan_start_date);
5890 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New open first payment date: ' || l_loan_details.first_payment_Date);
5891 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New open maturity date: ' || l_loan_details.maturity_date);
5892 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'l_dates_shifted_flag: ' || l_dates_shifted_flag);
5893
5894 -- query term version
5895 open term_version_cur(l_loan_header_rec.loan_id);
5896 fetch term_version_cur into l_TERM_ID, l_TERM_VERSION_NUMBER;
5897 close term_version_cur;
5898
5899 -- setting term data for term update
5900 l_term_rec.TERM_ID := l_TERM_ID;
5901 l_term_rec.LOAN_ID := l_loan_header_rec.loan_id;
5902 l_term_rec.OPEN_FIRST_PAYMENT_DATE := l_loan_details.first_payment_Date;
5903 l_term_rec.OPEN_NEXT_PAYMENT_DATE := l_loan_details.first_payment_Date;
5904
5905 -- setting loanHeader data for Header Update
5906 l_loan_header_rec.OPEN_LOAN_START_DATE := l_loan_details.loan_start_date;
5907 l_loan_header_rec.OPEN_MATURITY_DATE := l_loan_details.maturity_date;
5908
5909 if NOT (l_loan_header_rec.funded_amount = l_requested_amount and
5910 (l_loan_header_rec.OPEN_TO_TERM_FLAG = 'Y' and
5911 l_loan_header_rec.OPEN_TO_TERM_EVENT = 'AUTO_FINAL_DISBURSEMENT'))
5912 then
5913
5914 -- Bug#6313658 Shifting LoanDates for Term also
5915 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Shifting also TERM phase dates...');
5916
5917 LNS_FINANCIALS.shiftLoanDates(p_loan_id => l_loan_header_rec.loan_id
5918 ,p_new_start_date => l_loan_header_rec.OPEN_MATURITY_DATE
5919 ,p_phase => 'TERM'
5920 ,x_loan_details => l_loan_details
5921 ,x_dates_shifted_flag => l_dates_shifted_flag
5922 ,x_return_status => l_return_status
5923 ,x_msg_count => l_msg_count
5924 ,x_msg_data => l_msg_data);
5925
5926 IF l_return_status <> 'S' THEN
5927 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
5928 RAISE FND_API.G_EXC_ERROR;
5929 END IF;
5930
5931 l_term_rec.FIRST_PAYMENT_DATE := l_loan_details.first_payment_Date;
5932 l_term_rec.PRIN_FIRST_PAY_DATE := l_loan_details.PRIN_FIRST_PAY_DATE; -- fix for bug 6938095
5933 l_term_rec.NEXT_PAYMENT_DUE_DATE := l_loan_details.first_payment_Date;
5934
5935 -- setting loan data for loan update
5936 l_loan_header_rec.LOAN_START_DATE := l_loan_details.loan_start_date;
5937 l_loan_header_rec.LOAN_MATURITY_DATE := l_loan_details.maturity_date;
5938
5939 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New LOAN_START_DATE: ' || l_loan_details.loan_start_date);
5940 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New LOAN_MATURITY_DATE: ' || l_loan_details.maturity_date);
5941
5942 if l_dates_shifted_flag = 'Y' then
5943 -- Retrieve agreement reason
5944 FND_MESSAGE.SET_NAME('LNS', 'LNS_FUND_AGREEMENT_REASON2');
5945 FND_MSG_PUB.Add;
5946 l_agreement_reason := l_agreement_reason || FND_MSG_PUB.Get(p_encoded => 'F');
5947 FND_MSG_PUB.DELETE_MSG(FND_MSG_PUB.COUNT_MSG);
5948 end if;
5949
5950 end if;
5951
5952 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating lns_terms w following values:');
5953 LogMessage(FND_LOG.LEVEL_STATEMENT, 'TERM_ID: ' || l_term_rec.TERM_ID);
5954 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_ID: ' || l_term_rec.LOAN_ID);
5955 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OPEN_FIRST_PAYMENT_DATE: ' || l_term_rec.OPEN_FIRST_PAYMENT_DATE);
5956 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OPEN_NEXT_PAYMENT_DATE: ' || l_term_rec.OPEN_NEXT_PAYMENT_DATE);
5957 LogMessage(FND_LOG.LEVEL_STATEMENT, 'FIRST_PAYMENT_DATE: ' || l_term_rec.FIRST_PAYMENT_DATE);
5958 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PRIN_FIRST_PAY_DATE: ' || l_term_rec.PRIN_FIRST_PAY_DATE);
5959 LogMessage(FND_LOG.LEVEL_STATEMENT, 'NEXT_PAYMENT_DUE_DATE: ' || l_term_rec.NEXT_PAYMENT_DUE_DATE);
5960
5961 LNS_TERMS_PUB.update_term(P_OBJECT_VERSION_NUMBER => l_TERM_VERSION_NUMBER,
5962 p_init_msg_list => FND_API.G_FALSE,
5963 p_loan_term_rec => l_term_rec,
5964 X_RETURN_STATUS => l_return_status,
5965 X_MSG_COUNT => l_msg_count,
5966 X_MSG_DATA => l_msg_data);
5967
5968 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
5969
5970 IF l_return_status = 'S' THEN
5971 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_TERMS');
5972 ELSE
5973 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'ERROR: LNS_TERMS_PUB.update_term returned error: ' || substr(l_msg_data,1,225));
5974 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_TERM_FAIL');
5975 FND_MSG_PUB.Add;
5976 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
5977 RAISE FND_API.G_EXC_ERROR;
5978 END IF;
5979
5980 end if;
5981
5982 if l_loan_header_rec.LOAN_STATUS <> 'PENDING_CANCELLATION' and
5983 l_loan_header_rec.LOAN_STATUS <> 'ACTIVE' and
5984 l_loan_header_rec.LOAN_STATUS <> 'DEFAULT' and
5985 l_loan_header_rec.LOAN_STATUS <> 'DELINQUENT'
5986 then
5987 l_loan_header_rec.LOAN_STATUS := 'ACTIVE';
5988 end if;
5989
5990 if l_loan_header_rec.funded_amount = l_requested_amount then
5991
5992 if l_loan_header_rec.SECONDARY_STATUS <> 'FULLY_FUNDED' then
5993 l_loan_header_rec.SECONDARY_STATUS := 'FULLY_FUNDED';
5994 end if;
5995
5996 if (l_loan_header_rec.OPEN_TO_TERM_FLAG = 'Y' and
5997 l_loan_header_rec.OPEN_TO_TERM_EVENT = 'AUTO_FINAL_DISBURSEMENT')
5998 then
5999
6000 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OPEN_TO_TERM_FLAG: ' || l_loan_header_rec.OPEN_TO_TERM_FLAG);
6001 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OPEN_TO_TERM_EVENT: ' || l_loan_header_rec.OPEN_TO_TERM_EVENT);
6002 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Getting new loan dates for TERM phase...');
6003
6004 LNS_FINANCIALS.shiftLoanDates(p_loan_id => l_loan_header_rec.loan_id
6005 ,p_new_start_date=> l_DISB_LINE_REC.DISBURSEMENT_DATE
6006 ,p_phase => 'TERM'
6007 ,x_loan_details => l_loan_details
6008 ,x_dates_shifted_flag => l_dates_shifted_flag
6009 ,x_return_status => l_return_status
6010 ,x_msg_count => l_msg_count
6011 ,x_msg_data => l_msg_data);
6012
6013 IF l_return_status <> 'S' THEN
6014 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to LNS_FINANCIALS.shiftLoanDates failed');
6015 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6016 RAISE FND_API.G_EXC_ERROR;
6017 END IF;
6018
6019 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New loan_start_date: ' || l_loan_details.loan_start_date);
6020 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New first_payment_Date: ' || l_loan_details.first_payment_Date);
6021 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New PRIN_FIRST_PAY_DATE: ' || l_loan_details.PRIN_FIRST_PAY_DATE);
6022 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New maturity_date: ' || l_loan_details.maturity_date);
6023 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'l_dates_shifted_flag: ' || l_dates_shifted_flag);
6024
6025 -- Retrieve agreement reason
6026 FND_MESSAGE.SET_NAME('LNS', 'LNS_FUND_AGREEMENT_REASON3');
6027 FND_MSG_PUB.Add;
6028 l_agreement_reason := l_agreement_reason || FND_MSG_PUB.Get(p_encoded => 'F');
6029 FND_MSG_PUB.DELETE_MSG(FND_MSG_PUB.COUNT_MSG);
6030
6031 if l_dates_shifted_flag = 'Y' then
6032 -- Retrieve agreement reason
6033 FND_MESSAGE.SET_NAME('LNS', 'LNS_FUND_AGREEMENT_REASON2');
6034 FND_MSG_PUB.Add;
6035 l_agreement_reason := l_agreement_reason || FND_MSG_PUB.Get(p_encoded => 'F');
6036 FND_MSG_PUB.DELETE_MSG(FND_MSG_PUB.COUNT_MSG);
6037 end if;
6038
6039 -- query term version
6040 open term_version_cur(l_loan_header_rec.loan_id);
6041 fetch term_version_cur into l_TERM_ID, l_TERM_VERSION_NUMBER;
6042 close term_version_cur;
6043
6044 -- setting term data for do term update
6045 l_term_rec.TERM_ID := l_TERM_ID;
6046 l_term_rec.LOAN_ID := l_loan_header_rec.loan_id;
6047 l_term_rec.FIRST_PAYMENT_DATE := l_loan_details.first_payment_Date;
6048 l_term_rec.PRIN_FIRST_PAY_DATE := l_loan_details.PRIN_FIRST_PAY_DATE; -- fix for bug 6938095
6049 l_term_rec.NEXT_PAYMENT_DUE_DATE := l_loan_details.first_payment_Date;
6050
6051 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating lns_terms w following values:');
6052 LogMessage(FND_LOG.LEVEL_STATEMENT, 'TERM_ID: ' || l_term_rec.TERM_ID);
6053 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_ID: ' || l_term_rec.LOAN_ID);
6054 LogMessage(FND_LOG.LEVEL_STATEMENT, 'FIRST_PAYMENT_DATE: ' || l_term_rec.FIRST_PAYMENT_DATE);
6055 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PRIN_FIRST_PAY_DATE: ' || l_term_rec.PRIN_FIRST_PAY_DATE);
6056 LogMessage(FND_LOG.LEVEL_STATEMENT, 'NEXT_PAYMENT_DUE_DATE: ' || l_term_rec.NEXT_PAYMENT_DUE_DATE);
6057
6058 LNS_TERMS_PUB.update_term(P_OBJECT_VERSION_NUMBER => l_TERM_VERSION_NUMBER,
6059 p_init_msg_list => FND_API.G_FALSE,
6060 p_loan_term_rec => l_term_rec,
6061 X_RETURN_STATUS => l_return_status,
6062 X_MSG_COUNT => l_msg_count,
6063 X_MSG_DATA => l_msg_data);
6064
6065 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
6066
6067 IF l_return_status = 'S' THEN
6068 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_TERMS');
6069 ELSE
6070 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'ERROR: LNS_TERMS_PUB.update_term returned error: ' || substr(l_msg_data,1,225));
6071 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_TERM_FAIL');
6072 FND_MSG_PUB.Add;
6073 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6074 RAISE FND_API.G_EXC_ERROR;
6075 END IF;
6076
6077 -- setting data for future loan update
6078
6079 l_loan_header_rec.LOAN_START_DATE := l_loan_details.loan_start_date;
6080 l_loan_header_rec.LOAN_MATURITY_DATE := l_loan_details.maturity_date;
6081 l_loan_header_rec.current_phase := 'TERM';
6082 l_loan_header_rec.LAST_PAYMENT_NUMBER := FND_API.G_MISS_NUM;
6083 l_loan_header_rec.LAST_AMORTIZATION_ID := FND_API.G_MISS_NUM;
6084 l_loan_header_rec.secondary_status := 'CONVERTED_TO_TERM_PHASE';
6085 l_do_conversion_bill := 'Y';
6086
6087 end if;
6088
6089 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
6090 LogMessage(FND_LOG.LEVEL_STATEMENT, 'loan_id: ' || l_loan_header_rec.loan_id);
6091 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_START_DATE: ' || l_loan_header_rec.LOAN_START_DATE);
6092 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_MATURITY_DATE: ' || l_loan_header_rec.LOAN_MATURITY_DATE);
6093 LogMessage(FND_LOG.LEVEL_STATEMENT, 'current_phase: ' || l_loan_header_rec.current_phase);
6094 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LAST_PAYMENT_NUMBER: ' || l_loan_header_rec.LAST_PAYMENT_NUMBER);
6095 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LAST_AMORTIZATION_ID: ' || l_loan_header_rec.LAST_AMORTIZATION_ID);
6096 LogMessage(FND_LOG.LEVEL_STATEMENT, 'funded_amount: ' || l_loan_header_rec.funded_amount);
6097 LogMessage(FND_LOG.LEVEL_STATEMENT, 'status: ' || l_loan_header_rec.LOAN_STATUS);
6098 LogMessage(FND_LOG.LEVEL_STATEMENT, 'secondary_status: ' || l_loan_header_rec.secondary_status);
6099
6100 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
6101 P_LOAN_HEADER_REC => l_loan_header_rec,
6102 P_INIT_MSG_LIST => FND_API.G_FALSE,
6103 X_RETURN_STATUS => l_return_status,
6104 X_MSG_COUNT => l_msg_count,
6105 X_MSG_DATA => l_msg_data);
6106
6107 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
6108
6109 IF l_return_status = 'S' THEN
6110 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_LOAN_HEADERS_ALL');
6111 ELSE
6112 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
6113 FND_MSG_PUB.Add;
6114 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6115 RAISE FND_API.G_EXC_ERROR;
6116 END IF;
6117
6118 /* No need to call this now, as the below method inserts records of conversionFees into feeSchds table
6119 However, now the conversionFees insert into feeScheds when this fee is assigned to the loan
6120 lns_fee_engine.processDisbursementFees(
6121 p_init_msg_list => FND_API.G_TRUE,
6122 p_commit => FND_API.G_FALSE,
6123 p_phase => 'TERM',
6124 p_loan_id => l_loan_header_rec.loan_id,
6125 p_disb_head_id => null,
6126 x_return_status => l_return_status,
6127 x_msg_count => l_msg_count,
6128 x_msg_data => l_msg_data);
6129 */
6130
6131 else -- l_loan_header_rec.funded_amount <> l_requested_amount
6132
6133 if l_loan_header_rec.SECONDARY_STATUS <> 'PARTIALLY_FUNDED' then
6134 l_loan_header_rec.SECONDARY_STATUS := 'PARTIALLY_FUNDED';
6135 end if;
6136
6137 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
6138 LogMessage(FND_LOG.LEVEL_STATEMENT, 'funded_amount: ' || l_loan_header_rec.funded_amount);
6139 LogMessage(FND_LOG.LEVEL_STATEMENT, 'status: ' || l_loan_header_rec.LOAN_STATUS);
6140 LogMessage(FND_LOG.LEVEL_STATEMENT, 'secondary_status: ' || l_loan_header_rec.secondary_status);
6141
6142 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
6143 P_LOAN_HEADER_REC => l_loan_header_rec,
6144 P_INIT_MSG_LIST => FND_API.G_FALSE,
6145 X_RETURN_STATUS => l_return_status,
6146 X_MSG_COUNT => l_msg_count,
6147 X_MSG_DATA => l_msg_data);
6148
6149 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
6150
6151 IF l_return_status = 'S' THEN
6152 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_LOAN_HEADERS_ALL');
6153 ELSE
6154 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
6155 FND_MSG_PUB.Add;
6156 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6157 RAISE FND_API.G_EXC_ERROR;
6158 END IF;
6159
6160 end if;
6161
6162 else -- TERM phase
6163
6164 if l_loan_header_rec.LOAN_STATUS = 'APPROVED' then
6165
6166 l_do_origination_bill := 'Y';
6167 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Its first payment for the TERM phase of the loan - getting new loan dates...');
6168
6169 LNS_FINANCIALS.shiftLoanDates(p_loan_id => l_loan_header_rec.loan_id
6170 ,p_new_start_date => l_DISB_LINE_REC.DISBURSEMENT_DATE
6171 ,p_phase => 'TERM'
6172 ,x_loan_details => l_loan_details
6173 ,x_dates_shifted_flag => l_dates_shifted_flag
6174 ,x_return_status => l_return_status
6175 ,x_msg_count => l_msg_count
6176 ,x_msg_data => l_msg_data);
6177
6178 IF l_return_status <> 'S' THEN
6179 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6180 RAISE FND_API.G_EXC_ERROR;
6181 END IF;
6182
6183 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New start date: ' || l_loan_details.loan_start_date);
6184 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New first payment date: ' || l_loan_details.first_payment_Date);
6185 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New principal first payment date: ' || l_loan_details.PRIN_FIRST_PAY_DATE);
6186 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'New maturity date: ' || l_loan_details.maturity_date);
6187 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'l_dates_shifted_flag: ' || l_dates_shifted_flag);
6188
6189 -- query term version
6190 open term_version_cur(l_loan_header_rec.loan_id);
6191 fetch term_version_cur into l_TERM_ID, l_TERM_VERSION_NUMBER;
6192 close term_version_cur;
6193
6194 -- setting term data for term update
6195 l_term_rec.TERM_ID := l_TERM_ID;
6196 l_term_rec.LOAN_ID := l_loan_header_rec.loan_id;
6197 l_term_rec.FIRST_PAYMENT_DATE := l_loan_details.first_payment_Date;
6198 l_term_rec.PRIN_FIRST_PAY_DATE := l_loan_details.PRIN_FIRST_PAY_DATE; -- fix for bug 6938095
6199 l_term_rec.NEXT_PAYMENT_DUE_DATE := l_loan_details.first_payment_Date;
6200
6201 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating lns_terms w following values:');
6202 LogMessage(FND_LOG.LEVEL_STATEMENT, 'TERM_ID: ' || l_term_rec.TERM_ID);
6203 LogMessage(FND_LOG.LEVEL_STATEMENT, 'LOAN_ID: ' || l_term_rec.LOAN_ID);
6204 LogMessage(FND_LOG.LEVEL_STATEMENT, 'FIRST_PAYMENT_DATE: ' || l_term_rec.FIRST_PAYMENT_DATE);
6205 LogMessage(FND_LOG.LEVEL_STATEMENT, 'PRIN_FIRST_PAY_DATE: ' || l_term_rec.PRIN_FIRST_PAY_DATE);
6206 LogMessage(FND_LOG.LEVEL_STATEMENT, 'NEXT_PAYMENT_DUE_DATE: ' || l_term_rec.NEXT_PAYMENT_DUE_DATE);
6207
6208 if l_dates_shifted_flag = 'Y' then
6209 -- Retrieve agreement reason
6210 FND_MESSAGE.SET_NAME('LNS', 'LNS_FUND_AGREEMENT_REASON2');
6211 FND_MSG_PUB.Add;
6212 l_agreement_reason := l_agreement_reason || FND_MSG_PUB.Get(p_encoded => 'F');
6213 FND_MSG_PUB.DELETE_MSG(FND_MSG_PUB.COUNT_MSG);
6214 end if;
6215
6216 LNS_TERMS_PUB.update_term(P_OBJECT_VERSION_NUMBER => l_TERM_VERSION_NUMBER,
6217 p_init_msg_list => FND_API.G_FALSE,
6218 p_loan_term_rec => l_term_rec,
6219 X_RETURN_STATUS => l_return_status,
6220 X_MSG_COUNT => l_msg_count,
6221 X_MSG_DATA => l_msg_data);
6222
6223 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
6224
6225 IF l_return_status = 'S' THEN
6226 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_TERMS');
6227 ELSE
6228 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'ERROR: LNS_TERMS_PUB.update_term returned error: ' || substr(l_msg_data,1,225));
6229 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_TERM_FAIL');
6230 FND_MSG_PUB.Add;
6231 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6232 RAISE FND_API.G_EXC_ERROR;
6233 END IF;
6234
6235 -- setting loan data for loan update
6236 l_loan_header_rec.LOAN_START_DATE := l_loan_details.loan_start_date;
6237 l_loan_header_rec.LOAN_MATURITY_DATE := l_loan_details.maturity_date;
6238
6239 end if;
6240
6241 if l_loan_header_rec.LOAN_STATUS <> 'PENDING_CANCELLATION' and
6242 l_loan_header_rec.LOAN_STATUS <> 'ACTIVE' and
6243 l_loan_header_rec.LOAN_STATUS <> 'DEFAULT' and
6244 l_loan_header_rec.LOAN_STATUS <> 'DELINQUENT'
6245 then
6246 l_loan_header_rec.LOAN_STATUS := 'ACTIVE';
6247 end if;
6248
6249 if l_loan_header_rec.funded_amount = l_requested_amount then
6250 if l_loan_header_rec.SECONDARY_STATUS <> 'FULLY_FUNDED' then
6251 l_loan_header_rec.SECONDARY_STATUS := 'FULLY_FUNDED';
6252 end if;
6253 else
6254 if l_loan_header_rec.SECONDARY_STATUS <> 'PARTIALLY_FUNDED' then
6255 l_loan_header_rec.SECONDARY_STATUS := 'PARTIALLY_FUNDED';
6256 end if;
6257 end if;
6258
6259 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
6260 LogMessage(FND_LOG.LEVEL_STATEMENT, 'loan_id: ' || l_loan_header_rec.loan_id);
6261 LogMessage(FND_LOG.LEVEL_STATEMENT, 'funded_amount: ' || l_loan_header_rec.funded_amount);
6262 LogMessage(FND_LOG.LEVEL_STATEMENT, 'status: ' || l_loan_header_rec.LOAN_STATUS);
6263 LogMessage(FND_LOG.LEVEL_STATEMENT, 'secondary status: ' || l_loan_header_rec.SECONDARY_STATUS);
6264
6265 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
6266 P_LOAN_HEADER_REC => l_loan_header_rec,
6267 P_INIT_MSG_LIST => FND_API.G_FALSE,
6268 X_RETURN_STATUS => l_return_status,
6269 X_MSG_COUNT => l_msg_count,
6270 X_MSG_DATA => l_msg_data);
6271
6272 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
6273
6274 IF l_return_status = 'S' THEN
6275 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_LOAN_HEADERS_ALL');
6276 ELSE
6277 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
6278 FND_MSG_PUB.Add;
6279 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6280 RAISE FND_API.G_EXC_ERROR;
6281 END IF;
6282
6283 end if;
6284
6285 -- set fees for fully funded disbursement
6286 if l_DISB_HEADER_REC.STATUS = 'FULLY_FUNDED' then
6287
6288 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating the feeInstallment for disbHdrId: '||l_DISB_HEADER_REC.DISB_HEADER_ID);
6289 LNS_FEE_ENGINE.SET_DISB_FEES_INSTALL(P_INIT_MSG_LIST => FND_API.G_FALSE
6290 ,P_DISB_HEADER_ID => l_DISB_HEADER_REC.DISB_HEADER_ID
6291 ,X_RETURN_STATUS => l_return_status
6292 ,X_MSG_COUNT => l_msg_count
6293 ,X_MSG_DATA => l_msg_data);
6294 IF l_return_status <> 'S' THEN
6295 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to LNS_FEE_ENGINE.SET_DISB_FEES_INSTALL failed');
6296 RAISE FND_API.G_EXC_ERROR;
6297 END IF;
6298
6299 l_loan_details := lns_financials.getLoanDetails(p_loan_id => l_loan_header_rec.loan_id
6300 ,p_based_on_terms => 'CURRENT'
6301 ,p_phase => l_loan_header_rec.current_phase);
6302
6303 l_fee_structures(1).fee_category := 'EVENT';
6304 l_fee_structures(1).fee_type := 'EVENT_FUNDING';
6305 l_fee_structures(1).phase := l_loan_details.LOAN_PHASE;
6306
6307 -- filling out basis table
6308 l_fee_basis_tbl(1).fee_basis_name := 'TOTAL_BAL';
6309 l_fee_basis_tbl(1).fee_basis_amount := l_loan_details.remaining_balance;
6310 l_fee_basis_tbl(2).fee_basis_name := 'ORIG_LOAN';
6311 l_fee_basis_tbl(2).fee_basis_amount := l_loan_details.requested_amount;
6312 l_fee_basis_tbl(3).fee_basis_name := 'TOTAL_DISB_AMT';
6313 l_fee_basis_tbl(3).fee_basis_amount := l_loan_details.funded_amount;
6314 l_fee_basis_tbl(4).fee_basis_name := 'OVERDUE_PRIN';
6315 l_fee_basis_tbl(4).fee_basis_amount := l_loan_details.unpaid_principal;
6316 l_fee_basis_tbl(5).fee_basis_name := 'OVERDUE_PRIN_INT';
6317 l_fee_basis_tbl(5).fee_basis_amount := l_loan_details.unpaid_principal + l_loan_details.UNPAID_INTEREST;
6318 l_fee_basis_tbl(6).fee_basis_name := 'CURR_LOAN';
6319 l_fee_basis_tbl(6).fee_basis_amount := l_loan_details.requested_amount + l_loan_details.ADD_REQUESTED_AMOUNT;
6320 l_fee_basis_tbl(7).fee_basis_name := 'TOTAL_UNDISB_AMT';
6321 l_fee_basis_tbl(7).fee_basis_amount := l_loan_details.requested_amount + l_loan_details.ADD_REQUESTED_AMOUNT - l_loan_details.funded_amount;
6322 l_fee_basis_tbl(8).fee_basis_name := 'OVERDUE_INT';
6323 l_fee_basis_tbl(8).fee_basis_amount := l_loan_details.UNPAID_INTEREST;
6324 l_fee_basis_tbl(9).fee_basis_name := 'IND_DISB_AMT';
6325 l_fee_basis_tbl(9).fee_basis_amount := l_inv_amount;
6326
6327 -- query assigned installment number
6328 open get_instal_num(l_loan_header_rec.loan_id, l_DISB_HEADER_REC.DISB_HEADER_ID);
6329 fetch get_instal_num into l_installment_number;
6330 close get_instal_num;
6331
6332 lns_fee_engine.processFees(p_init_msg_list => FND_API.G_TRUE
6333 ,p_commit => FND_API.G_FALSE
6334 ,p_loan_id => l_loan_header_rec.loan_id
6335 ,p_installment_number => l_installment_number
6336 ,p_fee_basis_tbl => l_fee_basis_tbl
6337 ,p_fee_structures => l_fee_structures
6338 ,x_fees_tbl => l_fees_tbl
6339 ,x_return_status => l_return_status
6340 ,x_msg_count => l_msg_count
6341 ,x_msg_data => l_msg_data);
6342
6343 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6344 FND_MESSAGE.SET_NAME('LNS', 'LNS_PROCESS_FEE_ERROR');
6345 FND_MSG_PUB.ADD;
6346 RAISE FND_API.G_EXC_ERROR;
6347 end if;
6348
6349 END IF;
6350
6351 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_do_origination_bill : ' || l_do_origination_bill );
6352 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_do_conversion_bill : ' || l_do_conversion_bill);
6353
6354 LNS_REP_UTILS.STORE_LOAN_AGREEMENT_CP(l_loan_header_rec.loan_id, l_agreement_reason);
6355
6356 -- Bug#9255294 - Do the 0th installment billing
6357 IF ((l_do_origination_bill = 'Y' ) OR (l_do_conversion_bill = 'Y')) THEN
6358
6359 -- check to start billing for 0-th installment
6360 open do_billing_cur(l_loan_header_rec.loan_id, l_loan_header_rec.current_phase);
6361 fetch do_billing_cur into l_do_billing;
6362 close do_billing_cur;
6363
6364 -- billing 0-th installment
6365 if l_do_billing > 0 then
6366
6367 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Submitting Billing Concurrent Program to bill 0-th installment...');
6368 FND_REQUEST.SET_ORG_ID(MO_GLOBAL.GET_CURRENT_ORG_ID());
6369
6370 -- Bug#6313716 : Invoke the function add_layout to specify the template type,code etc., before submitting request
6371 SELECT
6372 lower(iso_language),iso_territory
6373 INTO
6374 l_iso_language,l_iso_territory
6375 FROM
6376 FND_LANGUAGES
6377 WHERE
6378 language_code = USERENV('LANG');
6379
6380 l_xml_output:= fnd_request.add_layout(
6381 template_appl_name => 'LNS',
6382 template_code => 'LNSRPTBL', --fix for bug 8830573
6383 template_language => l_iso_language,
6384 template_territory => l_iso_territory,
6385 output_format => 'PDF'
6386 );
6387
6388 l_request_id := FND_REQUEST.SUBMIT_REQUEST(
6389 'LNS',
6390 'LNS_BILLING',
6391 '', '', FALSE,
6392 null,
6393 null,
6394 null,
6395 l_loan_header_rec.loan_id,
6396 null,
6397 null);
6398
6399 if l_request_id = 0 then
6400
6401 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'ERROR: Failed to start Billing Concurrent Program.');
6402 FND_MESSAGE.SET_NAME('LNS', 'LNS_BILLING_REQUEST_FAILED');
6403 FND_MSG_PUB.Add;
6404 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6405 RAISE FND_API.G_EXC_ERROR;
6406
6407 else
6408 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Successfully submited Billing Concurrent Program to bill 0-th installment. Request id: ' || l_request_id);
6409 end if;
6410
6411 end if; -- if l_do_billing > 0
6412
6413 END IF; -- IF ((l_do_origination_bill = 'Y' ) OR (l_do_conversion_bill = 'Y'))
6414
6415 -- COMMIT WORK;
6416 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
6417
6418 -- END OF BODY OF API
6419 X_Return_Status := FND_API.G_RET_STS_SUCCESS;
6420
6421 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully processed payment');
6422
6423 -- Standard call to get message count and if count is 1, get message info
6424 FND_MSG_PUB.Count_And_Get(
6425 p_encoded => FND_API.G_FALSE,
6426 p_count => x_msg_count,
6427 p_data => x_msg_data);
6428
6429 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
6430
6431 EXCEPTION
6432 WHEN FND_API.G_EXC_ERROR THEN
6433 ROLLBACK TO PAY_SINGLE_INVOICE;
6434 x_return_status := FND_API.G_RET_STS_ERROR;
6435 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
6436 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6437 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6438 ROLLBACK TO PAY_SINGLE_INVOICE;
6439 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6440 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
6441 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6442 WHEN OTHERS THEN
6443 ROLLBACK TO PAY_SINGLE_INVOICE;
6444 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6445 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
6446 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
6447 END IF;
6448 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
6449 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6450 END;
6451
6452
6453
6454
6455 /*========================================================================
6456 | PUBLIC PROCEDURE SubscribeTo_Payment_Event
6457 |
6458 | DESCRIPTION
6459 | This procedure called by AP to confirm payment on invoice
6460 |
6461 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
6462 | None
6463 |
6464 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
6465 | LogMessage
6466 |
6467 | PARAMETERS
6468 | P_Event_Type IN Event type
6469 | P_Check_ID IN Check ID
6470 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
6471 | X_MSG_COUNT OUT NOCOPY Standard out parameter
6472 | X_MSG_DATA OUT NOCOPY Standard out parameter
6473 |
6474 | KNOWN ISSUES
6475 | None
6476 |
6477 | NOTES
6478 | Any interesting aspect of the code in the package body which needs
6479 | to be stated.
6480 |
6481 | MODIFICATION HISTORY
6482 | Date Author Description of Changes
6483 | 07-25-2005 scherkas Created
6484 |
6485 *=======================================================================*/
6486 PROCEDURE SubscribeTo_Payment_Event
6487 (P_Event_Type IN VARCHAR2,
6488 P_Check_ID IN NUMBER,
6489 P_Return_Status OUT NOCOPY VARCHAR2,
6490 P_Msg_Count OUT NOCOPY NUMBER,
6491 P_Msg_Data OUT NOCOPY VARCHAR2)
6492 IS
6493
6494 /*-----------------------------------------------------------------------+
6495 | Local Variable Declarations and initializations |
6496 +-----------------------------------------------------------------------*/
6497
6498 l_api_name CONSTANT VARCHAR2(30) := 'SubscribeTo_Payment_Event';
6499 l_api_version CONSTANT NUMBER := 1.0;
6500 l_return_status VARCHAR2(1);
6501 l_msg_count NUMBER;
6502 l_msg_data VARCHAR2(32767);
6503 l_invoice_id number;
6504 l_count number;
6505
6506 /*-----------------------------------------------------------------------+
6507 | Cursor Declarations |
6508 +-----------------------------------------------------------------------*/
6509
6510 -- getting invoice by check id
6511 CURSOR get_invoice_cur(P_CHECK_ID number) IS
6512 select distinct(invoice_id)
6513 from AP_INVOICE_PAYMENTS_ALL
6514 where check_id = P_CHECK_ID;
6515
6516 BEGIN
6517 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
6518 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
6519
6520 -- Standard start of API savepoint
6521 SAVEPOINT SubscribeTo_Payment_Event;
6522 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
6523
6524 -- Initialize API return status to success
6525 l_return_status := FND_API.G_RET_STS_SUCCESS;
6526
6527 -- START OF BODY OF API
6528
6529 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Processing payment event...');
6530 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input Data:');
6531 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_Event_Type: ' || P_Event_Type);
6532 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_Check_ID: ' || P_Check_ID);
6533
6534 -- getting invoice by check id
6535 l_count := 0;
6536 open get_invoice_cur(P_Check_ID);
6537 LOOP
6538
6539 fetch get_invoice_cur into l_invoice_id;
6540 exit when get_invoice_cur%NOTFOUND;
6541
6542 l_count := l_count + 1;
6543 LogMessage(FND_LOG.LEVEL_STATEMENT, ' ');
6544 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Processing payment for invoice #' || l_count);
6545 PAY_SINGLE_INVOICE
6546 (P_INVOICE_ID => l_invoice_id,
6547 P_COMPLETE_FLAG => 'N',
6548 X_Return_Status => l_return_status,
6549 X_Msg_Count => l_msg_count,
6550 X_Msg_Data => l_msg_data);
6551
6552 IF l_return_status <> 'S' THEN
6553 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to PAY_SINGLE_INVOICE failed');
6554 RAISE FND_API.G_EXC_ERROR;
6555 END IF;
6556
6557 END LOOP;
6558 close get_invoice_cur;
6559
6560 -- COMMIT WORK;
6561 -- LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
6562
6563 -- END OF BODY OF API
6564 P_Return_Status := FND_API.G_RET_STS_SUCCESS;
6565
6566 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully processed payment event');
6567
6568 -- Standard call to get message count and if count is 1, get message info
6569 FND_MSG_PUB.Count_And_Get(
6570 p_encoded => FND_API.G_FALSE,
6571 p_count => p_msg_count,
6572 p_data => p_msg_data);
6573
6574 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
6575
6576 EXCEPTION
6577 WHEN FND_API.G_EXC_ERROR THEN
6578 ROLLBACK TO SubscribeTo_Payment_Event;
6579 p_return_status := FND_API.G_RET_STS_ERROR;
6580 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count, p_data => p_msg_data);
6581 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6582 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6583 ROLLBACK TO SubscribeTo_Payment_Event;
6584 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6585 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count, p_data => p_msg_data);
6586 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6587 WHEN OTHERS THEN
6588 ROLLBACK TO SubscribeTo_Payment_Event;
6589 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6590 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
6591 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
6592 END IF;
6593 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count, p_data => p_msg_data);
6594 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6595 END;
6596
6597
6598
6599
6600 /*========================================================================
6601 | PUBLIC PROCEDURE COMPLETE_ALL_DISB
6602 |
6603 | DESCRIPTION
6604 | This procedure is for testing purpose only.
6605 | It completes all available disbursements for a loan and sets all to status fully paid.
6606 |
6607 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
6608 | None
6609 |
6610 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
6611 | LogMessage
6612 |
6613 | PARAMETERS
6614 | P_API_VERSION IN Standard in parameter
6615 | P_INIT_MSG_LIST IN Standard in parameter
6616 | P_COMMIT IN Standard in parameter
6617 | P_VALIDATION_LEVEL IN Standard in parameter
6618 | P_LOAN_ID IN Loan
6619 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
6620 | X_MSG_COUNT OUT NOCOPY Standard out parameter
6621 | X_MSG_DATA OUT NOCOPY Standard out parameter
6622 |
6623 | KNOWN ISSUES
6624 | None
6625 |
6626 | NOTES
6627 | Any interesting aspect of the code in the package body which needs
6628 | to be stated.
6629 |
6630 | MODIFICATION HISTORY
6631 | Date Author Description of Changes
6632 | 07-26-2005 scherkas Created
6633 |
6634 *=======================================================================*/
6635 PROCEDURE COMPLETE_ALL_DISB(
6636 P_API_VERSION IN NUMBER,
6637 P_INIT_MSG_LIST IN VARCHAR2,
6638 P_COMMIT IN VARCHAR2,
6639 P_VALIDATION_LEVEL IN NUMBER,
6640 P_LOAN_ID IN NUMBER,
6641 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6642 X_MSG_COUNT OUT NOCOPY NUMBER,
6643 X_MSG_DATA OUT NOCOPY VARCHAR2)
6644 IS
6645
6646 /*-----------------------------------------------------------------------+
6647 | Local Variable Declarations and initializations |
6648 +-----------------------------------------------------------------------*/
6649
6650 l_api_name CONSTANT VARCHAR2(30) := 'COMPLETE_ALL_DISB';
6651 l_api_version CONSTANT NUMBER := 1.0;
6652 l_return_status VARCHAR2(1);
6653 l_msg_count NUMBER;
6654 l_msg_data VARCHAR2(32767);
6655 l_invoice_id number;
6656
6657 /*-----------------------------------------------------------------------+
6658 | Cursor Declarations |
6659 +-----------------------------------------------------------------------*/
6660
6661 -- getting all available disbursements
6662 CURSOR avail_disb_cur(P_LOAN_ID number) IS
6663 select line.INVOICE_ID
6664 from LNS_DISB_LINES line,
6665 LNS_DISB_HEADERS head
6666 where head.LOAN_ID = P_LOAN_ID and
6667 head.DISB_HEADER_ID = line.DISB_HEADER_ID and
6668 line.status is not null and
6669 line.status = 'IN_FUNDING' and
6670 line.invoice_id is not null;
6671
6672 BEGIN
6673 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
6674 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
6675
6676 -- Standard start of API savepoint
6677 SAVEPOINT COMPLETE_ALL_DISB;
6678 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
6679
6680 -- Standard call to check for call compatibility
6681 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
6682 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6683 END IF;
6684
6685 -- Initialize message list if p_init_msg_list is set to TRUE
6686 IF FND_API.To_Boolean(p_init_msg_list) THEN
6687 FND_MSG_PUB.initialize;
6688 END IF;
6689
6690 -- Initialize API return status to success
6691 l_return_status := FND_API.G_RET_STS_SUCCESS;
6692
6693 -- START OF BODY OF API
6694
6695 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Completing all disbursements...');
6696 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
6697 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_LOAN_ID: ' || P_LOAN_ID);
6698
6699 -- getting all available disbursements
6700 open avail_disb_cur(P_LOAN_ID);
6701 LOOP
6702
6703 fetch avail_disb_cur into l_invoice_id;
6704 exit when avail_disb_cur%NOTFOUND;
6705
6706 PAY_SINGLE_INVOICE
6707 (P_INVOICE_ID => l_invoice_id,
6708 P_COMPLETE_FLAG => 'Y',
6709 X_Return_Status => l_return_status,
6710 X_Msg_Count => l_msg_count,
6711 X_Msg_Data => l_msg_data);
6712
6713 IF l_return_status <> 'S' THEN
6714 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Call to PAY_SINGLE_INVOICE failed');
6715 -- RAISE FND_API.G_EXC_ERROR;
6716 END IF;
6717
6718 END LOOP;
6719 close avail_disb_cur;
6720
6721 if P_COMMIT = FND_API.G_TRUE then
6722 COMMIT WORK;
6723 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
6724 end if;
6725
6726 -- END OF BODY OF API
6727 x_return_status := FND_API.G_RET_STS_SUCCESS;
6728
6729 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully completed all disbursements for loan ' || P_LOAN_ID);
6730
6731 -- Standard call to get message count and if count is 1, get message info
6732 FND_MSG_PUB.Count_And_Get(
6733 p_encoded => FND_API.G_FALSE,
6734 p_count => x_msg_count,
6735 p_data => x_msg_data);
6736
6737 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
6738
6739 EXCEPTION
6740 WHEN FND_API.G_EXC_ERROR THEN
6741 ROLLBACK TO COMPLETE_ALL_DISB;
6742 x_return_status := FND_API.G_RET_STS_ERROR;
6743 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
6744 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6745 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6746 ROLLBACK TO COMPLETE_ALL_DISB;
6747 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6748 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
6749 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6750 WHEN OTHERS THEN
6751 ROLLBACK TO COMPLETE_ALL_DISB;
6752 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6753 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
6754 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
6755 END IF;
6756 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
6757 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
6758 END;
6759
6760
6761
6762 /*========================================================================
6763 | PUBLIC PROCEDURE CANCEL_SINGLE_DISB
6764 |
6765 | DESCRIPTION
6766 | This procedure cancels single disbursement header with lines
6767 |
6768 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
6769 | None
6770 |
6771 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
6772 | LogMessage
6773 |
6774 | PARAMETERS
6775 | P_INVOICE_ID IN Check ID
6776 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
6777 | X_MSG_COUNT OUT NOCOPY Standard out parameter
6778 | X_MSG_DATA OUT NOCOPY Standard out parameter
6779 |
6780 | KNOWN ISSUES
6781 | None
6782 |
6783 | NOTES
6784 | Any interesting aspect of the code in the package body which needs
6785 | to be stated.
6786 |
6787 | MODIFICATION HISTORY
6788 | Date Author Description of Changes
6789 | 07-25-2005 scherkas Created
6790 |
6791 *=======================================================================*/
6792 PROCEDURE CANCEL_SINGLE_DISB(
6793 P_API_VERSION IN NUMBER,
6794 P_INIT_MSG_LIST IN VARCHAR2,
6795 P_COMMIT IN VARCHAR2,
6796 P_VALIDATION_LEVEL IN NUMBER,
6797 P_DISB_HEADER_ID IN NUMBER,
6798 X_Return_Status OUT NOCOPY VARCHAR2,
6799 X_Msg_Count OUT NOCOPY NUMBER,
6800 X_Msg_Data OUT NOCOPY VARCHAR2)
6801 IS
6802
6803 /*-----------------------------------------------------------------------+
6804 | Local Variable Declarations and initializations |
6805 +-----------------------------------------------------------------------*/
6806
6807 l_api_name CONSTANT VARCHAR2(30) := 'CANCEL_SINGLE_DISB';
6808 l_api_version CONSTANT NUMBER := 1.0;
6809 l_return_status VARCHAR2(1);
6810 l_msg_count NUMBER;
6811 l_msg_data VARCHAR2(32767);
6812 l_hist_id number;
6813 l_hist_version number;
6814 l_count number;
6815 l_message_name varchar2(30);
6816 l_invoice_amount number;
6817 l_base_amount number;
6818 l_temp_cancelled_amount number;
6819 l_cancelled_by number;
6820 l_cancelled_amount number;
6821 l_cancelled_date date;
6822 l_last_update_date date;
6823 l_original_prepayment_amount number;
6824 l_pay_curr_invoice_amount number;
6825 l_Token varchar2(30);
6826 l_success boolean;
6827 l_success_str varchar2(10);
6828
6829 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
6830 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
6831 l_cancel_fed_disb varchar2(1);
6832 l_dist_count NUMBER;
6833
6834 /*-----------------------------------------------------------------------+
6835 | Cursor Declarations |
6836 +-----------------------------------------------------------------------*/
6837
6838 -- getting disbursement header info
6839 CURSOR disb_hdr_cur(P_DISB_HEADER_ID number) IS
6840 select head.DISB_HEADER_ID,
6841 head.OBJECT_VERSION_NUMBER,
6842 (select count(1)
6843 from lns_disb_lines
6844 where DISB_HEADER_ID = head.DISB_HEADER_ID and
6845 status <> 'CANCELLED'),
6846 head.LOAN_ID
6847 from LNS_DISB_HEADERS head
6848 where head.DISB_HEADER_ID = P_DISB_HEADER_ID;
6849
6850 -- getting disbursement lines info
6851 CURSOR disb_lines_cur(P_DISB_HEADER_ID number) IS
6852 select line.DISB_LINE_ID,
6853 line.OBJECT_VERSION_NUMBER,
6854 line.STATUS,
6855 line.INVOICE_ID
6856 from LNS_DISB_LINES line
6857 where line.DISB_HEADER_ID = P_DISB_HEADER_ID;
6858
6859 -- getting last history record to update status
6860 CURSOR last_hist_rec_cur(P_DISB_LINE_ID number) IS
6861 select max(DISB_HISTORY_ID), max(OBJECT_VERSION_NUMBER+1)
6862 from lns_disb_histories_h
6863 where DISB_LINE_ID = P_DISB_LINE_ID;
6864
6865 CURSOR submitDisb_exist_cur(c_disb_header_id NUMBER) IS
6866 select count(1)
6867 from lns_distributions
6868 where disb_header_id = c_disb_header_id
6869 and activity = 'LNS_SUBMIT_DISBURSEMENT';
6870 /*
6871 and NOT EXISTS (select 'X' from lns_distributions
6872 where disb_header_id = c_disb_header_id
6873 and activity = 'LNS_SUBMITTED_DISB_CANCEL'
6874 );
6875 */
6876
6877 BEGIN
6878 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
6879 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
6880
6881 -- Standard start of API savepoint
6882 SAVEPOINT CANCEL_SINGLE_DISB;
6883 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
6884
6885 -- Initialize message list if p_init_msg_list is set to TRUE
6886 IF FND_API.To_Boolean(p_init_msg_list) THEN
6887 FND_MSG_PUB.initialize;
6888 END IF;
6889
6890 -- Initialize API return status to success
6891 l_return_status := FND_API.G_RET_STS_SUCCESS;
6892
6893 -- START OF BODY OF API
6894
6895 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Canceling disbursement header ' || P_DISB_HEADER_ID || ' with lines...');
6896 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input Data:');
6897 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DISB_HEADER_ID: ' || P_DISB_HEADER_ID);
6898
6899 l_cancel_fed_disb := 'N';
6900
6901 -- getting disbursement lines info
6902 open disb_lines_cur(P_DISB_HEADER_ID);
6903 LOOP
6904
6905 fetch disb_lines_cur into l_DISB_LINE_REC.DISB_LINE_ID,
6906 l_DISB_LINE_REC.OBJECT_VERSION_NUMBER,
6907 l_DISB_LINE_REC.STATUS,
6908 l_DISB_LINE_REC.INVOICE_ID;
6909 exit when disb_lines_cur%NOTFOUND;
6910
6911 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_LINE_ID: ' || l_DISB_LINE_REC.DISB_LINE_ID);
6912 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OBJECT_VERSION_NUMBER: ' || l_DISB_LINE_REC.OBJECT_VERSION_NUMBER);
6913 LogMessage(FND_LOG.LEVEL_STATEMENT, 'STATUS: ' || l_DISB_LINE_REC.STATUS);
6914 LogMessage(FND_LOG.LEVEL_STATEMENT, 'INVOICE_ID: ' || l_DISB_LINE_REC.INVOICE_ID);
6915
6916 if l_DISB_LINE_REC.STATUS is null or
6917 l_DISB_LINE_REC.STATUS = 'FUNDING_ERROR' or
6918 l_DISB_LINE_REC.STATUS = 'IN_FUNDING' then
6919
6920 -- if its in funding - call ap cancel invoice api
6921 if l_DISB_LINE_REC.STATUS = 'IN_FUNDING' then
6922
6923 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling AP_CANCEL_PKG.AP_CANCEL_SINGLE_INVOICE...');
6924
6925 l_success := AP_CANCEL_PKG.AP_CANCEL_SINGLE_INVOICE(
6926 P_INVOICE_ID => l_DISB_LINE_REC.INVOICE_ID,
6927 P_LAST_UPDATED_BY => LNS_UTILITY_PUB.LAST_UPDATED_BY,
6928 P_LAST_UPDATE_LOGIN => LNS_UTILITY_PUB.LAST_UPDATE_LOGIN,
6929 P_ACCOUNTING_DATE => sysdate,
6930 P_MESSAGE_NAME => l_message_name,
6931 P_INVOICE_AMOUNT => l_invoice_amount,
6932 P_BASE_AMOUNT => l_base_amount,
6933 P_TEMP_CANCELLED_AMOUNT => l_temp_cancelled_amount,
6934 P_CANCELLED_BY => l_cancelled_by,
6935 P_CANCELLED_AMOUNT => l_cancelled_amount,
6936 P_CANCELLED_DATE => l_cancelled_date,
6937 P_LAST_UPDATE_DATE => l_last_update_date,
6938 P_ORIGINAL_PREPAYMENT_AMOUNT => l_original_prepayment_amount,
6939 P_PAY_CURR_INVOICE_AMOUNT => l_pay_curr_invoice_amount,
6940 P_TOKEN => l_Token,
6941 P_CALLING_SEQUENCE => G_PKG_NAME);
6942
6943 if l_success = TRUE then
6944 l_success_str := 'TRUE';
6945 elsif l_success = FALSE then
6946 l_success_str := 'FALSE';
6947 else
6948 l_success_str := null;
6949 end if;
6950
6951 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Return from AP_CANCEL_PKG.AP_CANCEL_SINGLE_INVOICE:');
6952 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_success: ' || l_success_str);
6953 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_message_name: ' || l_message_name);
6954 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_Token: ' || l_Token);
6955 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_invoice_amount: ' || l_invoice_amount);
6956 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_base_amount: ' || l_base_amount);
6957 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_temp_cancelled_amount: ' || l_temp_cancelled_amount);
6958 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_cancelled_by: ' || l_cancelled_by);
6959 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_cancelled_amount: ' || l_cancelled_amount);
6960 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_cancelled_date: ' || l_cancelled_date);
6961 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_last_update_date: ' || l_last_update_date);
6962 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_original_prepayment_amount: ' || l_original_prepayment_amount);
6963 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_pay_curr_invoice_amount: ' || l_pay_curr_invoice_amount);
6964
6965 IF NOT l_success THEN
6966 FND_MESSAGE.SET_NAME('SQLAP4', l_message_name);
6967 FND_MESSAGE.SET_TOKEN('ERROR', l_Token);
6968 FND_MSG_PUB.ADD;
6969 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
6970 RAISE FND_API.G_EXC_ERROR;
6971 ELSE
6972 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Successfully cancelled AP invoice');
6973 END IF;
6974
6975 end if;
6976
6977 -- getting last history record to update status
6978 open last_hist_rec_cur(l_DISB_LINE_REC.DISB_LINE_ID);
6979 fetch last_hist_rec_cur into l_hist_id, l_hist_version;
6980 close last_hist_rec_cur;
6981
6982 LogMessage(FND_LOG.LEVEL_STATEMENT, 'hist_id: ' || l_hist_id);
6983 LogMessage(FND_LOG.LEVEL_STATEMENT, 'hist_version: ' || l_hist_version);
6984
6985 if l_hist_id is not null and l_hist_version is not null then
6986
6987 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating history record...');
6988 -- calling history table handler api
6989 LNS_DISB_HISTORIES_H_PKG.Update_Row(
6990 P_DISB_HISTORY_ID => l_hist_id,
6991 P_STATUS => 'CANCELLED',
6992 P_OBJECT_VERSION_NUMBER => l_hist_version);
6993
6994 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully updated history record with ID: ' || l_hist_id);
6995
6996 end if;
6997
6998 l_DISB_LINE_REC.STATUS := 'CANCELLED';
6999
7000 -- updating disb line
7001 UPDATE_DISB_LINE(
7002 P_API_VERSION => 1.0,
7003 P_INIT_MSG_LIST => FND_API.G_TRUE,
7004 P_COMMIT => FND_API.G_FALSE,
7005 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
7006 P_DISB_LINE_REC => l_DISB_LINE_REC,
7007 X_RETURN_STATUS => l_return_status,
7008 X_MSG_COUNT => l_msg_count,
7009 X_MSG_DATA => l_msg_data);
7010
7011 IF l_return_status <> 'S' THEN
7012 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_LINE failed');
7013 RAISE FND_API.G_EXC_ERROR;
7014 END IF;
7015
7016 else
7017
7018 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Cannot cancel this disbursement line because its already processed.');
7019
7020 end if;
7021
7022 END LOOP;
7023 close disb_lines_cur;
7024
7025 -- getting disbursement header info
7026 open disb_hdr_cur(P_DISB_HEADER_ID);
7027 fetch disb_hdr_cur into l_DISB_HEADER_REC.DISB_HEADER_ID, l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER, l_count, l_DISB_HEADER_REC.LOAN_ID;
7028 close disb_hdr_cur;
7029
7030 -- if all lines are cancelled then cancel header as well
7031 if l_count = 0 then
7032
7033 l_DISB_HEADER_REC.STATUS := 'CANCELLED';
7034
7035 -- updating disb header
7036 UPDATE_DISB_HEADER(
7037 P_API_VERSION => 1.0,
7038 P_INIT_MSG_LIST => FND_API.G_TRUE,
7039 P_COMMIT => FND_API.G_FALSE,
7040 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
7041 P_DISB_HEADER_REC => l_DISB_HEADER_REC,
7042 X_RETURN_STATUS => l_return_status,
7043 X_MSG_COUNT => l_msg_count,
7044 X_MSG_DATA => l_msg_data);
7045
7046 IF l_return_status <> 'S' THEN
7047 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_HEADER failed');
7048 RAISE FND_API.G_EXC_ERROR;
7049 END IF;
7050 l_cancel_fed_disb := 'Y';
7051
7052 end if;
7053
7054 UPDATE_LOAN_FUNDING_STATUS(l_DISB_HEADER_REC.LOAN_ID);
7055
7056 -- Only for Federal Direct Loans whose budget is reserved
7057 IF (lns_utility_pub.IS_FED_FIN_ENABLED = 'Y' AND l_cancel_fed_disb = 'Y') THEN
7058
7059
7060 OPEN submitDisb_exist_cur(l_DISB_HEADER_REC.DISB_HEADER_ID);
7061 FETCH submitDisb_exist_cur INTO l_dist_count;
7062 CLOSE submitDisb_exist_cur;
7063
7064 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_dist_count is '||l_dist_count);
7065
7066 IF l_dist_count > 0 THEN
7067 LogMessage(FND_LOG.LEVEL_STATEMENT, 'calling lns_distributions_pub.submit_disbursement_bc');
7068 -- Submit budgetary disbursement distributions if needed
7069 lns_distributions_pub.submit_disbursement_bc(p_init_msg_list => FND_API.G_FALSE
7070 ,p_commit => FND_API.G_FALSE
7071 ,p_loan_id => l_DISB_HEADER_REC.LOAN_ID
7072 ,p_disb_header_id => l_DISB_HEADER_REC.DISB_HEADER_ID
7073 ,p_activity => 'LNS_SUBMITTED_DISB_CANCEL'
7074 ,X_RETURN_STATUS => l_return_status
7075 ,X_MSG_COUNT => l_msg_count
7076 ,X_MSG_DATA => l_msg_data);
7077
7078 logMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
7079 IF l_return_status <> 'S' THEN
7080 FND_MESSAGE.SET_NAME('LNS', 'LNS_API_OTHERS_EXCEP');
7081 FND_MESSAGE.SET_TOKEN('ERROR' ,'Call to lns_distributions_pub.submit_disbursement_bc failed for acitivity = LNS_SUBMITTED_DISB_CANCEL');
7082 FND_MSG_PUB.ADD;
7083 logMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
7084 RAISE FND_API.G_EXC_ERROR;
7085 END IF;
7086 END IF;
7087 END IF;
7088
7089
7090
7091 if P_COMMIT = FND_API.G_TRUE then
7092 COMMIT WORK;
7093 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
7094 end if;
7095
7096 -- END OF BODY OF API
7097 X_Return_Status := FND_API.G_RET_STS_SUCCESS;
7098
7099 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully cancelled disbursement header with lines');
7100
7101 -- Standard call to get message count and if count is 1, get message info
7102 FND_MSG_PUB.Count_And_Get(
7103 p_encoded => FND_API.G_FALSE,
7104 p_count => x_msg_count,
7105 p_data => x_msg_data);
7106
7107 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
7108
7109 EXCEPTION
7110 WHEN FND_API.G_EXC_ERROR THEN
7111 ROLLBACK TO CANCEL_SINGLE_DISB;
7112 x_return_status := FND_API.G_RET_STS_ERROR;
7113 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7114 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7115 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7116 ROLLBACK TO CANCEL_SINGLE_DISB;
7117 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7118 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7119 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7120 WHEN OTHERS THEN
7121 ROLLBACK TO CANCEL_SINGLE_DISB;
7122 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7123 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
7124 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
7125 END IF;
7126 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7127 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7128 END;
7129
7130
7131
7132
7133 /*========================================================================
7134 | PUBLIC PROCEDURE APPROVE_CANCEL_REM_DISB
7135 |
7136 | DESCRIPTION
7137 | This procedure to be called after approval of cancelation of disbursement schedule and
7138 | cancels all remaining disbursements of a loan
7139 |
7140 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
7141 | None
7142 |
7143 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
7144 | LogMessage
7145 |
7146 | PARAMETERS
7147 | P_API_VERSION IN Standard in parameter
7148 | P_INIT_MSG_LIST IN Standard in parameter
7149 | P_COMMIT IN Standard in parameter
7150 | P_VALIDATION_LEVEL IN Standard in parameter
7151 | P_LOAN_ID IN Loan
7152 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
7153 | X_MSG_COUNT OUT NOCOPY Standard out parameter
7154 | X_MSG_DATA OUT NOCOPY Standard out parameter
7155 |
7156 | KNOWN ISSUES
7157 | None
7158 |
7159 | NOTES
7160 | Any interesting aspect of the code in the package body which needs
7161 | to be stated.
7162 |
7163 | MODIFICATION HISTORY
7164 | Date Author Description of Changes
7165 | 07-26-2005 scherkas Created
7166 |
7167 *=======================================================================*/
7168 PROCEDURE APPROVE_CANCEL_REM_DISB(
7169 P_API_VERSION IN NUMBER,
7170 P_INIT_MSG_LIST IN VARCHAR2,
7171 P_COMMIT IN VARCHAR2,
7172 P_VALIDATION_LEVEL IN NUMBER,
7173 P_LOAN_ID IN NUMBER,
7174 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
7175 X_MSG_COUNT OUT NOCOPY NUMBER,
7176 X_MSG_DATA OUT NOCOPY VARCHAR2)
7177 IS
7178
7179 /*-----------------------------------------------------------------------+
7180 | Local Variable Declarations and initializations |
7181 +-----------------------------------------------------------------------*/
7182
7183 l_api_name CONSTANT VARCHAR2(30) := 'APPROVE_CANCEL_REM_DISB';
7184 l_api_version CONSTANT NUMBER := 1.0;
7185 l_return_status VARCHAR2(1);
7186 l_msg_count NUMBER;
7187 l_msg_data VARCHAR2(32767);
7188 l_disb_header_id number;
7189 l_loan_version number;
7190 l_submitted_disb_count number;
7191 l_current_phase varchar2(30);
7192
7193 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
7194 l_event_table lns_distributions_pub.acc_event_tbl;
7195
7196 /*-----------------------------------------------------------------------+
7197 | Cursor Declarations |
7198 +-----------------------------------------------------------------------*/
7199
7200 -- getting all available disbursements
7201 CURSOR avail_disb_cur(P_LOAN_ID number) IS
7202 select head.DISB_HEADER_ID,
7203 loan.LOAN_STATUS,
7204 loan.OBJECT_VERSION_NUMBER
7205 from LNS_DISB_HEADERS head,
7206 LNS_LOAN_HEADERS loan
7207 where head.LOAN_ID = P_LOAN_ID and
7208 head.LOAN_ID = loan.LOAN_ID and
7209 nvl(loan.current_phase, 'TERM') = nvl(head.phase, 'OPEN');
7210
7211 -- getting number of already submitted disbursements
7212 CURSOR submitted_disb_cur(P_LOAN_ID number) IS
7213 select count(head.DISB_HEADER_ID)
7214 from LNS_DISB_HEADERS head,
7215 LNS_LOAN_HEADERS loan
7216 where head.LOAN_ID = P_LOAN_ID and
7217 head.status <> 'CANCELLED' and
7218 head.LOAN_ID = loan.LOAN_ID and
7219 nvl(loan.current_phase, 'TERM') = nvl(head.phase, 'OPEN');
7220
7221 -- getting loan info
7222 CURSOR loan_info_cur(P_LOAN_ID number) IS
7223 select nvl(loan.current_phase, 'TERM'),
7224 loan.OBJECT_VERSION_NUMBER
7225 from LNS_LOAN_HEADERS loan
7226 where loan.LOAN_ID = P_LOAN_ID;
7227
7228 BEGIN
7229 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
7230 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
7231
7232 -- Standard start of API savepoint
7233 SAVEPOINT APPROVE_CANCEL_REM_DISB;
7234 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
7235
7236 -- Standard call to check for call compatibility
7237 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7239 END IF;
7240
7241 -- Initialize message list if p_init_msg_list is set to TRUE
7242 IF FND_API.To_Boolean(p_init_msg_list) THEN
7243 FND_MSG_PUB.initialize;
7244 END IF;
7245
7246 -- Initialize API return status to success
7247 l_return_status := FND_API.G_RET_STS_SUCCESS;
7248
7249 -- START OF BODY OF API
7250
7251 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Cancelling all remaining disbursements...');
7252 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
7253 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_LOAN_ID: ' || P_LOAN_ID);
7254
7255 -- getting all available disbursements
7256 open avail_disb_cur(P_LOAN_ID);
7257 LOOP
7258
7259 fetch avail_disb_cur into l_disb_header_id,
7260 l_loan_header_rec.LOAN_STATUS,
7261 l_loan_version;
7262 exit when avail_disb_cur%NOTFOUND;
7263
7264 CANCEL_SINGLE_DISB(
7265 P_API_VERSION => 1.0,
7266 P_INIT_MSG_LIST => FND_API.G_TRUE,
7267 P_COMMIT => FND_API.G_FALSE,
7268 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
7269 P_DISB_HEADER_ID => l_disb_header_id,
7270 X_RETURN_STATUS => l_return_status,
7271 X_MSG_COUNT => l_msg_count,
7272 X_MSG_DATA => l_msg_data);
7273
7274 IF l_return_status <> 'S' THEN
7275 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'CANCEL_SINGLE_DISB failed');
7276 RAISE FND_API.G_EXC_ERROR;
7277 END IF;
7278
7279 END LOOP;
7280 close avail_disb_cur;
7281
7282 open loan_info_cur(P_LOAN_ID);
7283 fetch loan_info_cur into l_current_phase, l_loan_version;
7284 close loan_info_cur;
7285
7286 if l_current_phase = 'OPEN' then
7287
7288 -- setting status and secondary status and update loan header
7289 open submitted_disb_cur(P_LOAN_ID);
7290 fetch submitted_disb_cur into l_submitted_disb_count;
7291 close submitted_disb_cur;
7292
7293 if l_submitted_disb_count = 0 then
7294 l_loan_header_rec.LOAN_STATUS := 'CANCELLED';
7295 l_loan_header_rec.SECONDARY_STATUS := 'ALL_DISB_CANCELLED';
7296 else
7297 if l_loan_header_rec.LOAN_STATUS <> 'ACTIVE' and
7298 l_loan_header_rec.LOAN_STATUS <> 'DEFAULT' and
7299 l_loan_header_rec.LOAN_STATUS <> 'DELINQUENT'
7300 then
7301 l_loan_header_rec.LOAN_STATUS := 'ACTIVE';
7302 end if;
7303 l_loan_header_rec.SECONDARY_STATUS := 'REMAINING_DISB_CANCELLED';
7304 end if;
7305
7306 l_loan_header_rec.loan_id := P_LOAN_ID;
7307
7308 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
7309 LogMessage(FND_LOG.LEVEL_STATEMENT, 'loan_id: ' || l_loan_header_rec.loan_id);
7310 LogMessage(FND_LOG.LEVEL_STATEMENT, 'status: ' || l_loan_header_rec.LOAN_STATUS);
7311 LogMessage(FND_LOG.LEVEL_STATEMENT, 'secondary status: ' || l_loan_header_rec.SECONDARY_STATUS);
7312
7313 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
7314 P_LOAN_HEADER_REC => l_loan_header_rec,
7315 P_INIT_MSG_LIST => FND_API.G_FALSE,
7316 X_RETURN_STATUS => l_return_status,
7317 X_MSG_COUNT => l_msg_count,
7318 X_MSG_DATA => l_msg_data);
7319
7320 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
7321
7322 IF l_return_status = 'S' THEN
7323 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_LOAN_HEADERS_ALL');
7324 ELSE
7325 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
7326 FND_MSG_PUB.Add;
7327 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
7328 RAISE FND_API.G_EXC_ERROR;
7329 END IF;
7330
7331 end if;
7332
7333 LogMessage(FND_LOG.LEVEL_STATEMENT, 'calling lns_distributions_pub.cancel_disbursements');
7334 -- Cancel budgetary disbursements if needed
7335 lns_distributions_pub.cancel_disbursements(p_init_msg_list => FND_API.G_FALSE
7336 ,p_commit => FND_API.G_FALSE
7337 ,p_loan_id => P_LOAN_ID
7338 ,X_RETURN_STATUS => l_return_status
7339 ,X_MSG_COUNT => l_msg_count
7340 ,X_MSG_DATA => l_msg_data);
7341
7342 logMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
7343 IF l_return_status <> 'S' THEN
7344 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'BUDGETARY CANCEL_FAILED');
7345 RAISE FND_API.G_EXC_ERROR;
7346 END IF;
7347
7348 IF P_COMMIT = FND_API.G_TRUE THEN
7349 COMMIT WORK;
7350 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
7351 END IF;
7352
7353 -- END OF BODY OF API
7354 x_return_status := FND_API.G_RET_STS_SUCCESS;
7355
7356 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully cancelled all remaining disbursements');
7357
7358 -- Standard call to get message count and if count is 1, get message info
7359 FND_MSG_PUB.Count_And_Get(
7360 p_encoded => FND_API.G_FALSE,
7361 p_count => x_msg_count,
7362 p_data => x_msg_data);
7363
7364 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
7365
7366 EXCEPTION
7367 WHEN FND_API.G_EXC_ERROR THEN
7368 ROLLBACK TO APPROVE_CANCEL_REM_DISB;
7369 x_return_status := FND_API.G_RET_STS_ERROR;
7370 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7371 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7372 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7373 ROLLBACK TO APPROVE_CANCEL_REM_DISB;
7374 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7375 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7376 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7377 WHEN OTHERS THEN
7378 ROLLBACK TO APPROVE_CANCEL_REM_DISB;
7379 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7380 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
7381 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
7382 END IF;
7383 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7384 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7385 END;
7386
7387
7388
7389 /*========================================================================
7390 | PUBLIC PROCEDURE REJECT_CANCEL_DISB
7391 |
7392 | DESCRIPTION
7393 | This procedure to be called after rejection of cancelation of disbursement schedule and
7394 | reactivate disbursement schedule of a loan
7395 |
7396 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
7397 | None
7398 |
7399 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
7400 | LogMessage
7401 |
7402 | PARAMETERS
7403 | P_API_VERSION IN Standard in parameter
7404 | P_INIT_MSG_LIST IN Standard in parameter
7405 | P_COMMIT IN Standard in parameter
7406 | P_VALIDATION_LEVEL IN Standard in parameter
7407 | P_LOAN_ID IN Loan
7408 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
7409 | X_MSG_COUNT OUT NOCOPY Standard out parameter
7410 | X_MSG_DATA OUT NOCOPY Standard out parameter
7411 |
7412 | KNOWN ISSUES
7413 | None
7414 |
7415 | NOTES
7416 | Any interesting aspect of the code in the package body which needs
7417 | to be stated.
7418 |
7419 | MODIFICATION HISTORY
7420 | Date Author Description of Changes
7421 | 07-26-2005 scherkas Created
7422 |
7423 *=======================================================================*/
7424 PROCEDURE REJECT_CANCEL_DISB(
7425 P_API_VERSION IN NUMBER,
7426 P_INIT_MSG_LIST IN VARCHAR2,
7427 P_COMMIT IN VARCHAR2,
7428 P_VALIDATION_LEVEL IN NUMBER,
7429 P_LOAN_ID IN NUMBER,
7430 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
7431 X_MSG_COUNT OUT NOCOPY NUMBER,
7432 X_MSG_DATA OUT NOCOPY VARCHAR2)
7433 IS
7434
7435 /*-----------------------------------------------------------------------+
7436 | Local Variable Declarations and initializations |
7437 +-----------------------------------------------------------------------*/
7438
7439 l_api_name CONSTANT VARCHAR2(30) := 'REJECT_CANCEL_DISB';
7440 l_api_version CONSTANT NUMBER := 1.0;
7441 l_return_status VARCHAR2(1);
7442 l_msg_count NUMBER;
7443 l_msg_data VARCHAR2(32767);
7444 l_loan_version number;
7445
7446 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
7447
7448 /*-----------------------------------------------------------------------+
7449 | Cursor Declarations |
7450 +-----------------------------------------------------------------------*/
7451
7452 -- getting loan info
7453 CURSOR loan_info_cur(P_LOAN_ID number) IS
7454 select loan.OBJECT_VERSION_NUMBER
7455 from LNS_LOAN_HEADERS loan
7456 where loan.LOAN_ID = P_LOAN_ID;
7457
7458 -- getting loan previous status
7459 CURSOR prev_status_cur(P_LOAN_ID number) IS
7460 select old_value
7461 from lns_loan_histories_h
7462 where table_name = 'LNS_LOAN_HEADERS_ALL' and
7463 column_name = 'LOAN_STATUS' and
7464 new_value = 'PENDING_CANCELLATION' and
7465 loan_id = P_LOAN_ID and
7466 loan_history_id =
7467 (select max(loan_history_id)
7468 from lns_loan_histories_h
7469 where table_name = 'LNS_LOAN_HEADERS_ALL' and
7470 column_name = 'LOAN_STATUS' and
7471 loan_id = P_LOAN_ID);
7472
7473 BEGIN
7474 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
7475 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
7476
7477 -- Standard start of API savepoint
7478 SAVEPOINT REJECT_CANCEL_DISB;
7479 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
7480
7481 -- Standard call to check for call compatibility
7482 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7483 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7484 END IF;
7485
7486 -- Initialize message list if p_init_msg_list is set to TRUE
7487 IF FND_API.To_Boolean(p_init_msg_list) THEN
7488 FND_MSG_PUB.initialize;
7489 END IF;
7490
7491 -- Initialize API return status to success
7492 l_return_status := FND_API.G_RET_STS_SUCCESS;
7493
7494 -- START OF BODY OF API
7495
7496 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Reactivation disbursement schedule...');
7497 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
7498 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_LOAN_ID: ' || P_LOAN_ID);
7499
7500 -- getting loan previous status
7501 open prev_status_cur(P_LOAN_ID);
7502 fetch prev_status_cur into l_loan_header_rec.LOAN_STATUS;
7503 close prev_status_cur;
7504
7505 -- getting loan info
7506 open loan_info_cur(P_LOAN_ID);
7507 fetch loan_info_cur into l_loan_version;
7508 close loan_info_cur;
7509
7510 -- setting status and update loan header
7511 l_loan_header_rec.loan_id := P_LOAN_ID;
7512
7513 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
7514 LogMessage(FND_LOG.LEVEL_STATEMENT, 'loan_id: ' || l_loan_header_rec.loan_id);
7515 LogMessage(FND_LOG.LEVEL_STATEMENT, 'status: ' || l_loan_header_rec.LOAN_STATUS);
7516
7517 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
7518 P_LOAN_HEADER_REC => l_loan_header_rec,
7519 P_INIT_MSG_LIST => FND_API.G_FALSE,
7520 X_RETURN_STATUS => l_return_status,
7521 X_MSG_COUNT => l_msg_count,
7522 X_MSG_DATA => l_msg_data);
7523
7524 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
7525
7526 IF l_return_status = 'S' THEN
7527 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_LOAN_HEADERS_ALL');
7528 ELSE
7529 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
7530 FND_MSG_PUB.Add;
7531 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
7532 RAISE FND_API.G_EXC_ERROR;
7533 END IF;
7534
7535 if P_COMMIT = FND_API.G_TRUE then
7536 COMMIT WORK;
7537 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
7538 end if;
7539
7540 -- END OF BODY OF API
7541 x_return_status := FND_API.G_RET_STS_SUCCESS;
7542
7543 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully reactivation disbursement schedule');
7544
7545 -- Standard call to get message count and if count is 1, get message info
7546 FND_MSG_PUB.Count_And_Get(
7547 p_encoded => FND_API.G_FALSE,
7548 p_count => x_msg_count,
7549 p_data => x_msg_data);
7550
7551 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
7552
7553 EXCEPTION
7554 WHEN FND_API.G_EXC_ERROR THEN
7555 ROLLBACK TO REJECT_CANCEL_DISB;
7556 x_return_status := FND_API.G_RET_STS_ERROR;
7557 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7558 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7559 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7560 ROLLBACK TO REJECT_CANCEL_DISB;
7561 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7562 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7563 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7564 WHEN OTHERS THEN
7565 ROLLBACK TO REJECT_CANCEL_DISB;
7566 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7567 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
7568 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
7569 END IF;
7570 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7571 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7572 END;
7573
7574
7575
7576 /*========================================================================
7577 | PUBLIC PROCEDURE CANCEL_DISB_SCHEDULE
7578 |
7579 | DESCRIPTION
7580 | This procedure only sets loan status to PENDING_CANCELLATION
7581 |
7582 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
7583 | None
7584 |
7585 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
7586 | LogMessage
7587 |
7588 | PARAMETERS
7589 | P_API_VERSION IN Standard in parameter
7590 | P_INIT_MSG_LIST IN Standard in parameter
7591 | P_COMMIT IN Standard in parameter
7592 | P_VALIDATION_LEVEL IN Standard in parameter
7593 | P_LOAN_ID IN Loan
7594 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
7595 | X_MSG_COUNT OUT NOCOPY Standard out parameter
7596 | X_MSG_DATA OUT NOCOPY Standard out parameter
7597 |
7598 | KNOWN ISSUES
7599 | None
7600 |
7601 | NOTES
7602 | Any interesting aspect of the code in the package body which needs
7603 | to be stated.
7604 |
7605 | MODIFICATION HISTORY
7606 | Date Author Description of Changes
7607 | 07-26-2005 scherkas Created
7608 |
7609 *=======================================================================*/
7610 PROCEDURE CANCEL_DISB_SCHEDULE(
7611 P_API_VERSION IN NUMBER,
7612 P_INIT_MSG_LIST IN VARCHAR2,
7613 P_COMMIT IN VARCHAR2,
7614 P_VALIDATION_LEVEL IN NUMBER,
7615 P_LOAN_ID IN NUMBER,
7616 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
7617 X_MSG_COUNT OUT NOCOPY NUMBER,
7618 X_MSG_DATA OUT NOCOPY VARCHAR2)
7619 IS
7620
7621 /*-----------------------------------------------------------------------+
7622 | Local Variable Declarations and initializations |
7623 +-----------------------------------------------------------------------*/
7624
7625 l_api_name CONSTANT VARCHAR2(30) := 'CANCEL_DISB_SCHEDULE';
7626 l_api_version CONSTANT NUMBER := 1.0;
7627 l_return_status VARCHAR2(1);
7628 l_msg_count NUMBER;
7629 l_msg_data VARCHAR2(32767);
7630 l_loan_version number;
7631 l_approve_flag varchar2(1);
7632
7633 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
7634
7635 /*-----------------------------------------------------------------------+
7636 | Cursor Declarations |
7637 +-----------------------------------------------------------------------*/
7638
7639 -- getting loan info
7640 CURSOR loan_info_cur(P_LOAN_ID number) IS
7641 select loan.OBJECT_VERSION_NUMBER
7642 from LNS_LOAN_HEADERS loan
7643 where loan.LOAN_ID = P_LOAN_ID;
7644
7645 -- querying required approval flag
7646 CURSOR appr_flag_cur(P_LOAN_ID number) IS
7647 select nvl(prod.APPR_REQ_FOR_CNCL_FLAG, 'N')
7648 from lns_loan_products_all prod,
7649 lns_loan_headers_all loan
7650 where loan.loan_id = P_LOAN_ID and
7651 loan.product_id = prod.loan_product_id;
7652 BEGIN
7653 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
7654 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
7655
7656 -- Standard start of API savepoint
7657 SAVEPOINT CANCEL_DISB_SCHEDULE;
7658 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
7659
7660 -- Standard call to check for call compatibility
7661 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7662 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7663 END IF;
7664
7665 -- Initialize message list if p_init_msg_list is set to TRUE
7666 IF FND_API.To_Boolean(p_init_msg_list) THEN
7667 FND_MSG_PUB.initialize;
7668 END IF;
7669
7670 -- Initialize API return status to success
7671 l_return_status := FND_API.G_RET_STS_SUCCESS;
7672
7673 -- START OF BODY OF API
7674
7675 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Cancel disbursements...');
7676 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Input data:');
7677 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_LOAN_ID: ' || P_LOAN_ID);
7678
7679 -- querying required approval flag
7680 open appr_flag_cur(P_LOAN_ID);
7681 fetch appr_flag_cur into l_approve_flag;
7682 close appr_flag_cur;
7683
7684 if l_approve_flag = 'Y' then
7685
7686 -- getting loan info
7687 open loan_info_cur(P_LOAN_ID);
7688 fetch loan_info_cur into l_loan_version;
7689 close loan_info_cur;
7690
7691 -- setting status and update loan header
7692 l_loan_header_rec.loan_id := P_LOAN_ID;
7693 l_loan_header_rec.LOAN_STATUS := 'PENDING_CANCELLATION';
7694
7695 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
7696 LogMessage(FND_LOG.LEVEL_STATEMENT, 'loan_id: ' || l_loan_header_rec.loan_id);
7697 LogMessage(FND_LOG.LEVEL_STATEMENT, 'status: ' || l_loan_header_rec.LOAN_STATUS);
7698
7699 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
7700 P_LOAN_HEADER_REC => l_loan_header_rec,
7701 P_INIT_MSG_LIST => FND_API.G_FALSE,
7702 X_RETURN_STATUS => l_return_status,
7703 X_MSG_COUNT => l_msg_count,
7704 X_MSG_DATA => l_msg_data);
7705
7706 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
7707
7708 IF l_return_status = 'S' THEN
7709 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully update LNS_LOAN_HEADERS_ALL');
7710 ELSE
7711 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
7712 FND_MSG_PUB.Add;
7713 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
7714 RAISE FND_API.G_EXC_ERROR;
7715 END IF;
7716
7717 else
7718
7719 APPROVE_CANCEL_REM_DISB(
7720 P_API_VERSION => 1.0,
7721 P_INIT_MSG_LIST => FND_API.G_FALSE,
7722 P_COMMIT => FND_API.G_FALSE,
7723 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
7724 P_LOAN_ID => P_LOAN_ID,
7725 X_RETURN_STATUS => l_return_status,
7726 X_MSG_COUNT => l_msg_count,
7727 X_MSG_DATA => l_msg_data);
7728
7729 IF l_return_status <> 'S' THEN
7730 RAISE FND_API.G_EXC_ERROR;
7731 END IF;
7732
7733 end if;
7734
7735 if P_COMMIT = FND_API.G_TRUE then
7736 COMMIT WORK;
7737 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
7738 end if;
7739
7740 -- END OF BODY OF API
7741 x_return_status := FND_API.G_RET_STS_SUCCESS;
7742
7743 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully cancel disbursements');
7744
7745 -- Standard call to get message count and if count is 1, get message info
7746 FND_MSG_PUB.Count_And_Get(
7747 p_encoded => FND_API.G_FALSE,
7748 p_count => x_msg_count,
7749 p_data => x_msg_data);
7750
7751 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
7752
7753 EXCEPTION
7754 WHEN FND_API.G_EXC_ERROR THEN
7755 ROLLBACK TO CANCEL_DISB_SCHEDULE;
7756 x_return_status := FND_API.G_RET_STS_ERROR;
7757 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7758 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7759 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7760 ROLLBACK TO CANCEL_DISB_SCHEDULE;
7761 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7762 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7763 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7764 WHEN OTHERS THEN
7765 ROLLBACK TO CANCEL_DISB_SCHEDULE;
7766 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7767 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
7768 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
7769 END IF;
7770 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
7771 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
7772 END;
7773
7774
7775
7776 /*========================================================================
7777 | PUBLIC PROCEDURE CREATE_PAYEE
7778 |
7779 | DESCRIPTION
7780 | This procedure creates loan payee in AP
7781 |
7782 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
7783 | None
7784 |
7785 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
7786 | init
7787 | LogMessage
7788 |
7789 | PARAMETERS
7790 | P_API_VERSION IN Standard in parameter
7791 | P_INIT_MSG_LIST IN Standard in parameter
7792 | P_COMMIT IN Standard in parameter
7793 | P_VALIDATION_LEVEL IN Standard in parameter
7794 | P_PAYEE_REC IN Payee record
7795 | X_PAYEE_ID OUT NOCOPY Return payee id
7796 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
7797 | X_MSG_COUNT OUT NOCOPY Standard out parameter
7798 | X_MSG_DATA OUT NOCOPY Standard out parameter
7799 |
7800 | KNOWN ISSUES
7801 | None
7802 |
7803 | NOTES
7804 | Any interesting aspect of the code in the package body which needs
7805 | to be stated.
7806 |
7807 | MODIFICATION HISTORY
7808 | Date Author Description of Changes
7809 | 09-22-2004 scherkas Created
7810 |
7811 *=======================================================================*/
7812 PROCEDURE CREATE_PAYEE(
7813 P_API_VERSION IN NUMBER,
7814 P_INIT_MSG_LIST IN VARCHAR2,
7815 P_COMMIT IN VARCHAR2,
7816 P_VALIDATION_LEVEL IN NUMBER,
7817 P_PAYEE_REC IN LNS_FUNDING_PUB.LOAN_PAYEE_REC,
7818 X_PAYEE_ID OUT NOCOPY NUMBER,
7819 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
7820 X_MSG_COUNT OUT NOCOPY NUMBER,
7821 X_MSG_DATA OUT NOCOPY VARCHAR2)
7822 IS
7823
7824 /*-----------------------------------------------------------------------+
7825 | Local Variable Declarations and initializations |
7826 +-----------------------------------------------------------------------*/
7827
7828 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_PAYEE';
7829 l_api_version CONSTANT NUMBER := 1.0;
7830 l_return_status VARCHAR2(1);
7831 l_msg_count NUMBER;
7832 l_msg_data VARCHAR2(32767);
7833 l_vendor_id number;
7834 l_status varchar2(10);
7835 l_exception_msg varchar2(255);
7836 -- l_supplier_number varchar2(30);
7837 -- l_vendor_num_code varchar2(25);
7838
7839 /*-----------------------------------------------------------------------+
7840 | Cursor Declarations |
7841 +-----------------------------------------------------------------------*/
7842 /*
7843 CURSOR vendor_num_code_cur IS
7844 select USER_DEFINED_VENDOR_NUM_CODE
7845 from FINANCIALS_SYSTEM_PARAMETERS;
7846
7847 CURSOR vendor_num_cur IS
7848 select max(to_number(segment1)) + 1 from PO_VENDORS;
7849 */
7850 BEGIN
7851 null;
7852 END;
7853
7854
7855
7856
7857 /*========================================================================
7858 | PUBLIC PROCEDURE CREATE_PAYEE_SITE
7859 |
7860 | DESCRIPTION
7861 | This procedure creates loan payee site in AP
7862 |
7863 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
7864 | None
7865 |
7866 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
7867 | LogMessage
7868 |
7869 | PARAMETERS
7870 | P_API_VERSION IN Standard in parameter
7871 | P_INIT_MSG_LIST IN Standard in parameter
7872 | P_COMMIT IN Standard in parameter
7873 | P_VALIDATION_LEVEL IN Standard in parameter
7874 | P_PAYEE_SITE_REC IN Payee site record
7875 | X_PAYEE_SITE_ID OUT NOCOPY Returns payee site id
7876 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
7877 | X_MSG_COUNT OUT NOCOPY Standard out parameter
7878 | X_MSG_DATA OUT NOCOPY Standard out parameter
7879 |
7880 | KNOWN ISSUES
7881 | None
7882 |
7883 | NOTES
7884 | Any interesting aspect of the code in the package body which needs
7885 | to be stated.
7886 |
7887 | MODIFICATION HISTORY
7888 | Date Author Description of Changes
7889 | 09-22-2004 scherkas Created
7890 |
7891 *=======================================================================*/
7892 PROCEDURE CREATE_PAYEE_SITE(
7893 P_API_VERSION IN NUMBER,
7894 P_INIT_MSG_LIST IN VARCHAR2,
7895 P_COMMIT IN VARCHAR2,
7896 P_VALIDATION_LEVEL IN NUMBER,
7897 P_PAYEE_SITE_REC IN LNS_FUNDING_PUB.LOAN_PAYEE_SITE_REC,
7898 X_PAYEE_SITE_ID OUT NOCOPY NUMBER,
7899 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
7900 X_MSG_COUNT OUT NOCOPY NUMBER,
7901 X_MSG_DATA OUT NOCOPY VARCHAR2)
7902 IS
7903
7904 /*-----------------------------------------------------------------------+
7905 | Local Variable Declarations and initializations |
7906 +-----------------------------------------------------------------------*/
7907
7908 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_PAYEE_SITE';
7909 l_api_version CONSTANT NUMBER := 1.0;
7910 l_return_status VARCHAR2(1);
7911 l_msg_count NUMBER;
7912 l_msg_data VARCHAR2(32767);
7913 l_vendor_site_id number;
7914 l_status varchar2(10);
7915 l_exception_msg varchar2(255);
7916 l_org_id number;
7917
7918 /*-----------------------------------------------------------------------+
7919 | Cursor Declarations |
7920 +-----------------------------------------------------------------------*/
7921
7922
7923 BEGIN
7924 null;
7925 END;
7926
7927
7928
7929 /*========================================================================
7930 | PUBLIC PROCEDURE CREATE_SITE_CONTACT
7931 |
7932 | DESCRIPTION
7933 | This procedure creates site contact in AP
7934 |
7935 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
7936 | None
7937 |
7938 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
7939 | LogMessage
7940 |
7941 | PARAMETERS
7942 | P_API_VERSION IN Standard in parameter
7943 | P_INIT_MSG_LIST IN Standard in parameter
7944 | P_COMMIT IN Standard in parameter
7945 | P_VALIDATION_LEVEL IN Standard in parameter
7946 | P_SITE_CONTACT_REC IN Site contact record
7947 | X_SITE_CONTACT_ID OUT NOCOPY Returns site contact id
7948 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
7949 | X_MSG_COUNT OUT NOCOPY Standard out parameter
7950 | X_MSG_DATA OUT NOCOPY Standard out parameter
7951 |
7952 | KNOWN ISSUES
7953 | None
7954 |
7955 | NOTES
7956 | Any interesting aspect of the code in the package body which needs
7957 | to be stated.
7958 |
7959 | MODIFICATION HISTORY
7960 | Date Author Description of Changes
7961 | 09-22-2004 scherkas Created
7962 |
7963 *=======================================================================*/
7964 PROCEDURE CREATE_SITE_CONTACT(
7965 P_API_VERSION IN NUMBER,
7966 P_INIT_MSG_LIST IN VARCHAR2,
7967 P_COMMIT IN VARCHAR2,
7968 P_VALIDATION_LEVEL IN NUMBER,
7969 P_SITE_CONTACT_REC IN LNS_FUNDING_PUB.SITE_CONTACT_REC,
7970 X_SITE_CONTACT_ID OUT NOCOPY NUMBER,
7971 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
7972 X_MSG_COUNT OUT NOCOPY NUMBER,
7973 X_MSG_DATA OUT NOCOPY VARCHAR2)
7974 IS
7975
7976 /*-----------------------------------------------------------------------+
7977 | Local Variable Declarations and initializations |
7978 +-----------------------------------------------------------------------*/
7979
7980 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_SITE_CONTACT';
7981 l_api_version CONSTANT NUMBER := 1.0;
7982 l_api_version CONSTANT NUMBER := 1.0;
7983 l_return_status VARCHAR2(1);
7984 l_msg_count NUMBER;
7985 l_msg_data VARCHAR2(32767);
7986 l_site_contact_id number;
7987 l_status varchar2(10);
7988 l_exception_msg varchar2(255);
7989
7990 /*-----------------------------------------------------------------------+
7991 | Cursor Declarations |
7992 +-----------------------------------------------------------------------*/
7993
7994
7995 BEGIN
7996 null;
7997 END;
7998
7999
8000
8001
8002 /*========================================================================
8003 | PUBLIC PROCEDURE CREATE_BANK_ACC_USE
8004 |
8005 | DESCRIPTION
8006 | This procedure creates bank account use.
8007 |
8008 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8009 | None
8010 |
8011 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8012 | LogMessage
8013 |
8014 | PARAMETERS
8015 | P_API_VERSION IN Standard in parameter
8016 | P_INIT_MSG_LIST IN Standard in parameter
8017 | P_COMMIT IN Standard in parameter
8018 | P_VALIDATION_LEVEL IN Standard in parameter
8019 | P_BANK_ACC_USE_REC IN Bank account use record
8020 | X_BANK_ACC_USE_ID OUT NOCOPY Returns bank account use id
8021 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8022 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8023 | X_MSG_DATA OUT NOCOPY Standard out parameter
8024 |
8025 | KNOWN ISSUES
8026 | None
8027 |
8028 | NOTES
8029 | Any interesting aspect of the code in the package body which needs
8030 | to be stated.
8031 |
8032 | MODIFICATION HISTORY
8033 | Date Author Description of Changes
8034 | 11-12-2004 scherkas Created
8035 |
8036 *=======================================================================*/
8037 PROCEDURE CREATE_BANK_ACC_USE(
8038 P_API_VERSION IN NUMBER,
8039 P_INIT_MSG_LIST IN VARCHAR2,
8040 P_COMMIT IN VARCHAR2,
8041 P_VALIDATION_LEVEL IN NUMBER,
8042 P_BANK_ACC_USE_REC IN LNS_FUNDING_PUB.BANK_ACCOUNT_USE_REC,
8043 X_BANK_ACC_USE_ID OUT NOCOPY NUMBER,
8044 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8045 X_MSG_COUNT OUT NOCOPY NUMBER,
8046 X_MSG_DATA OUT NOCOPY VARCHAR2)
8047 IS
8048
8049 /*-----------------------------------------------------------------------+
8050 | Local Variable Declarations and initializations |
8051 +-----------------------------------------------------------------------*/
8052
8053 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_BANK_ACC_USE';
8054 l_api_version CONSTANT NUMBER := 1.0;
8055 l_return_status VARCHAR2(1);
8056 l_msg_count NUMBER;
8057 l_msg_data VARCHAR2(32767);
8058 l_BANK_ACC_USE_REC LNS_FUNDING_PUB.BANK_ACCOUNT_USE_REC;
8059 l_bank_acc_use_id number;
8060 l_primary_flag varchar2(1);
8061 l_currency VARCHAR2(15);
8062
8063
8064 /*-----------------------------------------------------------------------+
8065 | Cursor Declarations |
8066 +-----------------------------------------------------------------------*/
8067
8068 BEGIN
8069 null;
8070 END;
8071
8072
8073
8074 /*========================================================================
8075 | PRIVATE PROCEDURE CREATE_AP_INVOICE
8076 |
8077 | DESCRIPTION
8078 | This procedure creates AP invoice and invoice lines
8079 |
8080 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8081 | None
8082 |
8083 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8084 | LogMessage
8085 |
8086 | PARAMETERS
8087 | P_FUNDING_ADVICE_REC IN OUT Funding record
8088 |
8089 | KNOWN ISSUES
8090 | None
8091 |
8092 | NOTES
8093 | Any interesting aspect of the code in the package body which needs
8094 | to be stated.
8095 |
8096 | MODIFICATION HISTORY
8097 | Date Author Description of Changes
8098 | 09-29-2004 scherkas Created
8099 |
8100 *=======================================================================*/
8101 PROCEDURE CREATE_AP_INVOICE(P_FUNDING_ADVICE_REC IN OUT NOCOPY LNS_FUNDING_PUB.FUNDING_ADVICE_REC)
8102 IS
8103
8104 /*-----------------------------------------------------------------------+
8105 | Local Variable Declarations and initializations |
8106 +-----------------------------------------------------------------------*/
8107
8108 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_AP_INVOICE';
8109 l_org_id number;
8110 l_invoice_line_id number;
8111 l_loan_number varchar2(60);
8112 l_source VARCHAR2(80);
8113 l_description VARCHAR2(240);
8114 l_cc_id number;
8115 l_percent number;
8116 l_USSGL_TRANSACTION_CODE VARCHAR2(30);
8117 l_Count number;
8118 l_running_sum number;
8119 l_sum_percent number;
8120 l_line_amount number;
8121 l_EXCHANGE_RATE_TYPE VARCHAR2(30);
8122 l_EXCHANGE_DATE DATE;
8123 l_EXCHANGE_RATE NUMBER;
8124 l_precision number;
8125 l_ext_precision number;
8126 l_min_acct_unit number;
8127
8128
8129 /*-----------------------------------------------------------------------+
8130 | Cursor Declarations |
8131 +-----------------------------------------------------------------------*/
8132
8133 BEGIN
8134 null;
8135 END;
8136
8137
8138
8139 /*========================================================================
8140 | PUBLIC PROCEDURE INIT_FUNDING_ADVICE
8141 |
8142 | DESCRIPTION
8143 | This procedure init funding advice.
8144 |
8145 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8146 | None
8147 |
8148 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8149 | LogMessage
8150 |
8151 | PARAMETERS
8152 | P_API_VERSION IN Standard in parameter
8153 | P_INIT_MSG_LIST IN Standard in parameter
8154 | P_COMMIT IN Standard in parameter
8155 | P_VALIDATION_LEVEL IN Standard in parameter
8156 | P_INIT_FUNDING_REC IN Init funding advice record
8157 | X_FUNDING_ADVICE_ID OUT NOCOPY Returns funding advice id
8158 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8159 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8160 | X_MSG_DATA OUT NOCOPY Standard out parameter
8161 |
8162 | KNOWN ISSUES
8163 | None
8164 |
8165 | NOTES
8166 | Any interesting aspect of the code in the package body which needs
8167 | to be stated.
8168 |
8169 | MODIFICATION HISTORY
8170 | Date Author Description of Changes
8171 | 11-08-2004 scherkas Created
8172 |
8173 *=======================================================================*/
8174 PROCEDURE INIT_FUNDING_ADVICE(
8175 P_API_VERSION IN NUMBER,
8176 P_INIT_MSG_LIST IN VARCHAR2,
8177 P_COMMIT IN VARCHAR2,
8178 P_VALIDATION_LEVEL IN NUMBER,
8179 P_INIT_FUNDING_REC IN LNS_FUNDING_PUB.INIT_FUNDING_ADVICE_REC,
8180 X_FUNDING_ADVICE_ID OUT NOCOPY NUMBER,
8181 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8182 X_MSG_COUNT OUT NOCOPY NUMBER,
8183 X_MSG_DATA OUT NOCOPY VARCHAR2)
8184 IS
8185
8186 /*-----------------------------------------------------------------------+
8187 | Local Variable Declarations and initializations |
8188 +-----------------------------------------------------------------------*/
8189
8190 l_api_name CONSTANT VARCHAR2(30) := 'INIT_FUNDING_ADVICE';
8191 l_api_version CONSTANT NUMBER := 1.0;
8192 l_return_status VARCHAR2(1);
8193 l_msg_count NUMBER;
8194 l_msg_data VARCHAR2(32767);
8195 l_funding_advice_id NUMBER;
8196 l_loan_class VARCHAR2(30);
8197 l_FUNDING_ADVICE_REC LNS_FUNDING_PUB.FUNDING_ADVICE_REC;
8198
8199 /*-----------------------------------------------------------------------+
8200 | Cursor Declarations |
8201 +-----------------------------------------------------------------------*/
8202
8203 BEGIN
8204 null;
8205 END;
8206
8207
8208
8209
8210 /*========================================================================
8211 | PUBLIC PROCEDURE SET_AUTOFUNDING
8212 |
8213 | DESCRIPTION
8214 | This procedure sets autofunding flag for a loan.
8215 |
8216 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8217 | None
8218 |
8219 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8220 | LogMessage
8221 |
8222 | PARAMETERS
8223 | P_API_VERSION IN Standard in parameter
8224 | P_INIT_MSG_LIST IN Standard in parameter
8225 | P_COMMIT IN Standard in parameter
8226 | P_VALIDATION_LEVEL IN Standard in parameter
8227 | P_LOAN_ID IN Loan ID
8228 | P_AUTOFUNDING_FLAG IN Autofunding flag
8229 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8230 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8231 | X_MSG_DATA OUT NOCOPY Standard out parameter
8232 |
8233 | KNOWN ISSUES
8234 | None
8235 |
8236 | NOTES
8237 | Any interesting aspect of the code in the package body which needs
8238 | to be stated.
8239 |
8240 | MODIFICATION HISTORY
8241 | Date Author Description of Changes
8242 | 11-15-2004 scherkas Created
8243 |
8244 *=======================================================================*/
8245 PROCEDURE SET_AUTOFUNDING(
8246 P_API_VERSION IN NUMBER,
8247 P_INIT_MSG_LIST IN VARCHAR2,
8248 P_COMMIT IN VARCHAR2,
8249 P_VALIDATION_LEVEL IN NUMBER,
8250 P_LOAN_ID IN NUMBER,
8251 P_AUTOFUNDING_FLAG IN VARCHAR2,
8252 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8253 X_MSG_COUNT OUT NOCOPY NUMBER,
8254 X_MSG_DATA OUT NOCOPY VARCHAR2)
8255 IS
8256
8257 /*-----------------------------------------------------------------------+
8258 | Local Variable Declarations and initializations |
8259 +-----------------------------------------------------------------------*/
8260
8261 l_api_name CONSTANT VARCHAR2(30) := 'SET_AUTOFUNDING';
8262 l_api_version CONSTANT NUMBER := 1.0;
8263 l_return_status VARCHAR2(1);
8264 l_msg_count NUMBER;
8265 l_msg_data VARCHAR2(32767);
8266 l_DISB_HEADER_ID NUMBER;
8267 l_OBJECT_VERSION_NUMBER NUMBER;
8268 l_cond_count number;
8269
8270 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
8271
8272 /*-----------------------------------------------------------------------+
8273 | Cursor Declarations |
8274 +-----------------------------------------------------------------------*/
8275
8276 -- getting disbursement header info
8277 CURSOR disb_headers_cur(P_LOAN_ID number) IS
8278 select
8279 head.DISB_HEADER_ID,
8280 head.OBJECT_VERSION_NUMBER
8281 from LNS_DISB_HEADERS head,
8282 LNS_LOAN_HEADERS_ALL loan
8283 where loan.LOAN_ID = P_LOAN_ID and
8284 head.LOAN_ID = loan.LOAN_ID and
8285 head.DISBURSEMENT_NUMBER = 1 and
8286 nvl(loan.current_phase, 'TERM') = nvl(head.phase, 'OPEN');
8287
8288 -- checking for conditions
8289 CURSOR conditions_cur(P_DISB_HEADER_ID number) IS
8290 select count(1)
8291 from LNS_CONDITIONS_VL cond,
8292 LNS_COND_ASSIGNMENTS cond_ass
8293 where cond_ass.DISB_HEADER_ID = P_DISB_HEADER_ID and
8294 cond_ass.MANDATORY_FLAG = 'Y' and
8295 cond_ass.condition_id = cond.condition_id and
8296 cond.CUSTOM_PROCEDURE is null and
8297 (cond_ass.CONDITION_MET_FLAG is null or cond_ass.CONDITION_MET_FLAG = 'N') and
8298 cond_ass.end_date_active is null;
8299
8300 BEGIN
8301
8302 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
8303
8304 -- Standard start of API savepoint
8305 SAVEPOINT SET_AUTOFUNDING;
8306 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
8307
8308 -- Standard call to check for call compatibility
8309 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
8310 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8311 END IF;
8312
8313 -- Initialize message list if p_init_msg_list is set to TRUE
8314 IF FND_API.To_Boolean(p_init_msg_list) THEN
8315 FND_MSG_PUB.initialize;
8316 END IF;
8317
8318 -- Initialize API return status to success
8319 l_return_status := FND_API.G_RET_STS_SUCCESS;
8320
8321 -- START OF BODY OF API
8322
8323 -- getting disbursement header info
8324 open disb_headers_cur(P_LOAN_ID);
8325 fetch disb_headers_cur into l_DISB_HEADER_REC.DISB_HEADER_ID, l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER;
8326
8327 -- if no record found and P_AUTOFUNDING_FLAG = Y - throw exception; otherwise return without error
8328 if disb_headers_cur%NOTFOUND then
8329
8330 close disb_headers_cur;
8331
8332 if P_AUTOFUNDING_FLAG = 'Y' then
8333
8334 -- LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'No disbursement header record found');
8335 FND_MESSAGE.SET_NAME('LNS', 'LNS_CREATE_DISB_SCHED');
8336 FND_MSG_PUB.ADD;
8337 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
8338 RAISE FND_API.G_EXC_ERROR;
8339
8340 end if;
8341
8342 X_RETURN_STATUS := l_return_status;
8343 return;
8344
8345 end if;
8346 close disb_headers_cur;
8347
8348 if P_AUTOFUNDING_FLAG = 'Y' then
8349
8350 -- validate headers and lines
8351 VALIDATE_DISB_HEADERS(
8352 P_API_VERSION => 1.0,
8353 P_INIT_MSG_LIST => FND_API.G_TRUE,
8354 P_COMMIT => FND_API.G_FALSE,
8355 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
8356 P_LOAN_ID => P_LOAN_ID,
8357 X_RETURN_STATUS => l_return_status,
8358 X_MSG_COUNT => l_msg_count,
8359 X_MSG_DATA => l_msg_data);
8360
8361 IF l_return_status <> 'S' THEN
8362 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to VALIDATE_DISB_HEADERS failed');
8363 RAISE FND_API.G_EXC_ERROR;
8364 END IF;
8365
8366 VALIDATE_DISB_FOR_SUBMIT(
8367 P_API_VERSION => 1.0,
8368 P_INIT_MSG_LIST => FND_API.G_TRUE,
8369 P_COMMIT => FND_API.G_FALSE,
8370 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
8371 P_DISB_HEADER_ID => l_DISB_HEADER_REC.DISB_HEADER_ID,
8372 X_RETURN_STATUS => l_return_status,
8373 X_MSG_COUNT => l_msg_count,
8374 X_MSG_DATA => l_msg_data);
8375
8376 IF l_return_status <> 'S' THEN
8377 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to VALIDATE_DISB_FOR_SUBMIT failed');
8378 RAISE FND_API.G_EXC_ERROR;
8379 END IF;
8380
8381 -- checking for conditions
8382 open conditions_cur(l_DISB_HEADER_REC.DISB_HEADER_ID);
8383 fetch conditions_cur into l_cond_count;
8384 close conditions_cur;
8385
8386 if l_cond_count > 0 then
8387 FND_MESSAGE.SET_NAME('LNS', 'LNS_AUTOFUND_AND_MAND_CONDIT');
8388 FND_MSG_PUB.Add;
8389 RAISE FND_API.G_EXC_ERROR;
8390 end if;
8391
8392 LNS_COND_ASSIGNMENT_PUB.VALIDATE_CUSTOM_CONDITIONS(
8393 P_API_VERSION => 1.0,
8394 P_INIT_MSG_LIST => FND_API.G_FALSE,
8395 P_COMMIT => FND_API.G_FALSE,
8396 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
8397 P_OWNER_OBJECT_ID => l_DISB_HEADER_REC.DISB_HEADER_ID,
8398 P_CONDITION_TYPE => 'DISBURSEMENT',
8399 P_COMPLETE_FLAG => 'N',
8400 X_RETURN_STATUS => l_return_status,
8401 X_MSG_COUNT => l_msg_count,
8402 X_MSG_DATA => l_msg_data);
8403
8404 IF l_return_status <> 'S' THEN
8405 RAISE FND_API.G_EXC_ERROR;
8406 end if;
8407
8408 end if;
8409
8410 -- getting disbursement header info again
8411 open disb_headers_cur(P_LOAN_ID);
8412 fetch disb_headers_cur into l_DISB_HEADER_REC.DISB_HEADER_ID, l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER;
8413 close disb_headers_cur;
8414
8415 l_DISB_HEADER_REC.AUTOFUNDING_FLAG := P_AUTOFUNDING_FLAG;
8416
8417 UPDATE_DISB_HEADER(
8418 P_API_VERSION => 1.0,
8419 P_INIT_MSG_LIST => FND_API.G_TRUE,
8420 P_COMMIT => FND_API.G_FALSE,
8421 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
8422 P_DISB_HEADER_REC => l_DISB_HEADER_REC,
8423 X_RETURN_STATUS => l_return_status,
8424 X_MSG_COUNT => l_msg_count,
8425 X_MSG_DATA => l_msg_data);
8426
8427 IF l_return_status <> 'S' THEN
8428 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_HEADER failed');
8429 RAISE FND_API.G_EXC_ERROR;
8430 END IF;
8431
8432 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully updated record into LNS_DISB_HEADERS');
8433
8434 if P_COMMIT = FND_API.G_TRUE then
8435 COMMIT WORK;
8436 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Commited');
8437 end if;
8438
8439 -- END OF BODY OF API
8440 x_return_status := FND_API.G_RET_STS_SUCCESS;
8441
8442 -- Standard call to get message count and if count is 1, get message info
8443 FND_MSG_PUB.Count_And_Get(
8444 p_encoded => FND_API.G_FALSE,
8445 p_count => x_msg_count,
8446 p_data => x_msg_data);
8447
8448 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
8449
8450 EXCEPTION
8451 WHEN FND_API.G_EXC_ERROR THEN
8452 ROLLBACK TO SET_AUTOFUNDING;
8453 x_return_status := FND_API.G_RET_STS_ERROR;
8454 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
8455 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
8456 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8457 ROLLBACK TO SET_AUTOFUNDING;
8458 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8459 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
8460 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
8461 WHEN OTHERS THEN
8462 ROLLBACK TO SET_AUTOFUNDING;
8463 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8464 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
8465 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
8466 END IF;
8467 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
8468 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Rollbacked');
8469 END;
8470
8471
8472
8473
8474 /*========================================================================
8475 | PUBLIC PROCEDURE VALIDATE_FUNDING_ADVICE
8476 |
8477 | DESCRIPTION
8478 | This procedure validates funding advice.
8479 |
8480 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8481 | None
8482 |
8483 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8484 | LogMessage
8485 |
8486 | PARAMETERS
8487 | P_API_VERSION IN Standard in parameter
8488 | P_INIT_MSG_LIST IN Standard in parameter
8489 | P_COMMIT IN Standard in parameter
8490 | P_VALIDATION_LEVEL IN Standard in parameter
8491 | P_LOAN_ID IN Loan ID
8492 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8493 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8494 | X_MSG_DATA OUT NOCOPY Standard out parameter
8495 |
8496 | KNOWN ISSUES
8497 | None
8498 |
8499 | NOTES
8500 | Any interesting aspect of the code in the package body which needs
8501 | to be stated.
8502 |
8503 | MODIFICATION HISTORY
8504 | Date Author Description of Changes
8505 | 11-08-2004 scherkas Created
8506 |
8507 *=======================================================================*/
8508 PROCEDURE VALIDATE_FUNDING_ADVICE(
8509 P_API_VERSION IN NUMBER,
8510 P_INIT_MSG_LIST IN VARCHAR2,
8511 P_COMMIT IN VARCHAR2,
8512 P_VALIDATION_LEVEL IN NUMBER,
8513 P_LOAN_ID IN NUMBER,
8514 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8515 X_MSG_COUNT OUT NOCOPY NUMBER,
8516 X_MSG_DATA OUT NOCOPY VARCHAR2)
8517 IS
8518
8519 /*-----------------------------------------------------------------------+
8520 | Local Variable Declarations and initializations |
8521 +-----------------------------------------------------------------------*/
8522
8523 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_FUNDING_ADVICE';
8524 l_api_version CONSTANT NUMBER := 1.0;
8525 l_return_status VARCHAR2(1);
8526 l_msg_count NUMBER;
8527 l_msg_data VARCHAR2(32767);
8528 l_FUNDING_ADVICE_REC LNS_FUNDING_PUB.FUNDING_ADVICE_REC;
8529 l_AUTOFUNDING_FLAG varchar2(1);
8530 l_loan_class varchar2(30);
8531
8532 /*-----------------------------------------------------------------------+
8533 | Cursor Declarations |
8534 +-----------------------------------------------------------------------*/
8535
8536 BEGIN
8537 null;
8538 END;
8539
8540
8541
8542
8543 /*========================================================================
8544 | PUBLIC PROCEDURE VALIDATE_FUNDING_ADVICE
8545 |
8546 | DESCRIPTION
8547 | This procedure validates funding advice.
8548 |
8549 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8550 | None
8551 |
8552 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8553 | LogMessage
8554 |
8555 | PARAMETERS
8556 | P_API_VERSION IN Standard in parameter
8557 | P_INIT_MSG_LIST IN Standard in parameter
8558 | P_COMMIT IN Standard in parameter
8559 | P_VALIDATION_LEVEL IN Standard in parameter
8560 | P_FUNDING_ADVICE_REC IN Funding advice record
8561 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8562 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8563 | X_MSG_DATA OUT NOCOPY Standard out parameter
8564 |
8565 | KNOWN ISSUES
8566 | None
8567 |
8568 | NOTES
8569 | Any interesting aspect of the code in the package body which needs
8570 | to be stated.
8571 |
8572 | MODIFICATION HISTORY
8573 | Date Author Description of Changes
8574 | 11-08-2004 scherkas Created
8575 |
8576 *=======================================================================*/
8577 PROCEDURE VALIDATE_FUNDING_ADVICE(
8578 P_API_VERSION IN NUMBER,
8579 P_INIT_MSG_LIST IN VARCHAR2,
8580 P_COMMIT IN VARCHAR2,
8581 P_VALIDATION_LEVEL IN NUMBER,
8582 P_FUNDING_ADVICE_REC IN LNS_FUNDING_PUB.FUNDING_ADVICE_REC,
8583 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8584 X_MSG_COUNT OUT NOCOPY NUMBER,
8585 X_MSG_DATA OUT NOCOPY VARCHAR2)
8586 IS
8587
8588 /*-----------------------------------------------------------------------+
8589 | Local Variable Declarations and initializations |
8590 +-----------------------------------------------------------------------*/
8591
8592 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_FUNDING_ADVICE';
8593 l_api_version CONSTANT NUMBER := 1.0;
8594 l_return_status VARCHAR2(1);
8595 l_msg_count NUMBER;
8596 l_msg_data VARCHAR2(32767);
8597
8598 /*-----------------------------------------------------------------------+
8599 | Cursor Declarations |
8600 +-----------------------------------------------------------------------*/
8601
8602 BEGIN
8603 null;
8604 END;
8605
8606
8607
8608
8609 /*========================================================================
8610 | PUBLIC PROCEDURE CREATE_FUNDING_ADVICE
8611 |
8612 | DESCRIPTION
8613 | This procedure is for automatic funding advice creation.
8614 |
8615 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8616 | None
8617 |
8618 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8619 | LogMessage
8620 |
8621 | PARAMETERS
8622 | P_API_VERSION IN Standard in parameter
8623 | P_INIT_MSG_LIST IN Standard in parameter
8624 | P_COMMIT IN Standard in parameter
8625 | P_VALIDATION_LEVEL IN Standard in parameter
8626 | P_LOAN_ID IN Loan ID
8627 | X_FUNDING_ADVICE_ID OUT NOCOPY Returns funding advice id
8628 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8629 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8630 | X_MSG_DATA OUT NOCOPY Standard out parameter
8631 |
8632 | KNOWN ISSUES
8633 | None
8634 |
8635 | NOTES
8636 | Any interesting aspect of the code in the package body which needs
8637 | to be stated.
8638 |
8639 | MODIFICATION HISTORY
8640 | Date Author Description of Changes
8641 | 11-08-2004 scherkas Created
8642 |
8643 *=======================================================================*/
8644 PROCEDURE CREATE_FUNDING_ADVICE(
8645 P_API_VERSION IN NUMBER,
8646 P_INIT_MSG_LIST IN VARCHAR2,
8647 P_COMMIT IN VARCHAR2,
8648 P_VALIDATION_LEVEL IN NUMBER,
8649 P_LOAN_ID IN NUMBER,
8650 X_FUNDING_ADVICE_ID OUT NOCOPY NUMBER,
8651 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8652 X_MSG_COUNT OUT NOCOPY NUMBER,
8653 X_MSG_DATA OUT NOCOPY VARCHAR2)
8654 IS
8655
8656 /*-----------------------------------------------------------------------+
8657 | Local Variable Declarations and initializations |
8658 +-----------------------------------------------------------------------*/
8659
8660 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_FUNDING_ADVICE';
8661 l_api_version CONSTANT NUMBER := 1.0;
8662 l_return_status VARCHAR2(1);
8663 l_msg_count NUMBER;
8664 l_msg_data VARCHAR2(32767);
8665 l_FUNDING_ADVICE_REC LNS_FUNDING_PUB.FUNDING_ADVICE_REC;
8666 l_AUTOFUNDING_FLAG VARCHAR2(1);
8667
8668 /*-----------------------------------------------------------------------+
8669 | Cursor Declarations |
8670 +-----------------------------------------------------------------------*/
8671
8672 BEGIN
8673 null;
8674 END;
8675
8676
8677
8678
8679 /*========================================================================
8680 | PUBLIC PROCEDURE CREATE_FUNDING_ADVICE
8681 |
8682 | DESCRIPTION
8683 | This procedure creates funding advice.
8684 |
8685 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8686 | None
8687 |
8688 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8689 | LogMessage
8690 |
8691 | PARAMETERS
8692 | P_API_VERSION IN Standard in parameter
8693 | P_INIT_MSG_LIST IN Standard in parameter
8694 | P_COMMIT IN Standard in parameter
8695 | P_VALIDATION_LEVEL IN Standard in parameter
8696 | P_FUNDING_ADVICE_REC IN Funding advice record
8697 | X_FUNDING_ADVICE_ID OUT NOCOPY Returns funding advice id
8698 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8699 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8700 | X_MSG_DATA OUT NOCOPY Standard out parameter
8701 |
8702 | KNOWN ISSUES
8703 | None
8704 |
8705 | NOTES
8706 | Any interesting aspect of the code in the package body which needs
8707 | to be stated.
8708 |
8709 | MODIFICATION HISTORY
8710 | Date Author Description of Changes
8711 | 11-03-2004 scherkas Created
8712 |
8713 *=======================================================================*/
8714 PROCEDURE CREATE_FUNDING_ADVICE(
8715 P_API_VERSION IN NUMBER,
8716 P_INIT_MSG_LIST IN VARCHAR2,
8717 P_COMMIT IN VARCHAR2,
8718 P_VALIDATION_LEVEL IN NUMBER,
8719 P_FUNDING_ADVICE_REC IN LNS_FUNDING_PUB.FUNDING_ADVICE_REC,
8720 X_FUNDING_ADVICE_ID OUT NOCOPY NUMBER,
8721 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8722 X_MSG_COUNT OUT NOCOPY NUMBER,
8723 X_MSG_DATA OUT NOCOPY VARCHAR2)
8724 IS
8725
8726 /*-----------------------------------------------------------------------+
8727 | Local Variable Declarations and initializations |
8728 +-----------------------------------------------------------------------*/
8729
8730 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_FUNDING_ADVICE';
8731 l_api_version CONSTANT NUMBER := 1.0;
8732 l_return_status VARCHAR2(1);
8733 l_msg_count NUMBER;
8734 l_msg_data VARCHAR2(32767);
8735 l_FUNDING_ADVICE_REC LNS_FUNDING_PUB.FUNDING_ADVICE_REC;
8736 l_loan_version number;
8737 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
8738 l_BANK_ACC_USE_REC LNS_FUNDING_PUB.BANK_ACCOUNT_USE_REC;
8739 l_BANK_ACC_USE_ID number;
8740 l_funding_advice_id number;
8741 l_loan_class varchar2(80);
8742
8743 /*-----------------------------------------------------------------------+
8744 | Cursor Declarations |
8745 +-----------------------------------------------------------------------*/
8746
8747 BEGIN
8748 null;
8749 END;
8750
8751
8752
8753 /*========================================================================
8754 | PUBLIC FUNCTION GET_FUNDING_ADVICE_NUMBER
8755 |
8756 | DESCRIPTION
8757 | This procedure generates new funding advice number.
8758 |
8759 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8760 | None
8761 |
8762 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8763 | None
8764 |
8765 | PARAMETERS
8766 | P_LOAN_ID IN Loan ID
8767 |
8768 | KNOWN ISSUES
8769 | None
8770 |
8771 | NOTES
8772 | Any interesting aspect of the code in the package body which needs
8773 | to be stated.
8774 |
8775 | MODIFICATION HISTORY
8776 | Date Author Description of Changes
8777 | 11-03-2004 scherkas Created
8778 |
8779 *=======================================================================*/
8780 FUNCTION GET_FUNDING_ADVICE_NUMBER(P_LOAN_ID IN NUMBER) RETURN VARCHAR2
8781 IS
8782
8783 /*-----------------------------------------------------------------------+
8784 | Local Variable Declarations and initializations |
8785 +-----------------------------------------------------------------------*/
8786 l_api_name CONSTANT VARCHAR2(30) := 'GET_FUNDING_ADVICE_NUMBER';
8787 l_return VARCHAR2(60);
8788 l_loan_number VARCHAR2(60);
8789 l_count number;
8790
8791 /*-----------------------------------------------------------------------+
8792 | Cursor Declarations |
8793 +-----------------------------------------------------------------------*/
8794
8795 BEGIN
8796 null;
8797 END;
8798
8799
8800
8801 /*========================================================================
8802 | PUBLIC FUNCTION GET_FUNDING_ADVICE_DESC
8803 |
8804 | DESCRIPTION
8805 | This procedure generates new funding advice description.
8806 |
8807 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8808 | None
8809 |
8810 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8811 | None
8812 |
8813 | PARAMETERS
8814 | P_LOAN_ID IN Loan ID
8815 |
8816 | KNOWN ISSUES
8817 | None
8818 |
8819 | NOTES
8820 | Any interesting aspect of the code in the package body which needs
8821 | to be stated.
8822 |
8823 | MODIFICATION HISTORY
8824 | Date Author Description of Changes
8825 | 11-03-2004 scherkas Created
8826 |
8827 *=======================================================================*/
8828 FUNCTION GET_FUNDING_ADVICE_DESC(P_LOAN_ID IN NUMBER) RETURN VARCHAR2
8829 IS
8830
8831 /*-----------------------------------------------------------------------+
8832 | Local Variable Declarations and initializations |
8833 +-----------------------------------------------------------------------*/
8834 l_api_name CONSTANT VARCHAR2(30) := 'GET_FUNDING_ADVICE_DESC';
8835 l_return VARCHAR2(60);
8836 l_loan_number VARCHAR2(60);
8837 l_count number;
8838
8839 /*-----------------------------------------------------------------------+
8840 | Cursor Declarations |
8841 +-----------------------------------------------------------------------*/
8842
8843 BEGIN
8844 null;
8845 END;
8846
8847
8848
8849 /*========================================================================
8850 | PRIVATE PROCEDURE PROCESS_SINGLE_FUNDING
8851 |
8852 | DESCRIPTION
8853 | This procedure processes single funding advice status.
8854 |
8855 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8856 | None
8857 |
8858 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8859 | LogMessage
8860 |
8861 | PARAMETERS
8862 | P_API_VERSION IN Standard in parameter
8863 | P_INIT_MSG_LIST IN Standard in parameter
8864 | P_COMMIT IN Standard in parameter
8865 | P_VALIDATION_LEVEL IN Standard in parameter
8866 | P_FUNDING_ADVICE_ID IN Funding advice id
8867 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8868 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8869 | X_MSG_DATA OUT NOCOPY Standard out parameter
8870 |
8871 | KNOWN ISSUES
8872 | None
8873 |
8874 | NOTES
8875 | Any interesting aspect of the code in the package body which needs
8876 | to be stated.
8877 |
8878 | MODIFICATION HISTORY
8879 | Date Author Description of Changes
8880 | 11-03-2004 scherkas Created
8881 |
8882 *=======================================================================*/
8883 PROCEDURE PROCESS_SINGLE_FUNDING(
8884 P_API_VERSION IN NUMBER,
8885 P_INIT_MSG_LIST IN VARCHAR2,
8886 P_COMMIT IN VARCHAR2,
8887 P_VALIDATION_LEVEL IN NUMBER,
8888 P_FUNDING_ADVICE_ID IN NUMBER,
8889 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8890 X_MSG_COUNT OUT NOCOPY NUMBER,
8891 X_MSG_DATA OUT NOCOPY VARCHAR2)
8892 IS
8893
8894 /*-----------------------------------------------------------------------+
8895 | Local Variable Declarations and initializations |
8896 +-----------------------------------------------------------------------*/
8897
8898 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_SINGLE_FUNDING';
8899 l_api_version CONSTANT NUMBER := 1.0;
8900 l_return_status VARCHAR2(1);
8901 l_msg_count NUMBER;
8902 l_msg_data VARCHAR2(32767);
8903 l_FUNDING_ADVICE_ID number;
8904 l_LOAN_ID number;
8905 l_ADVICE_NUMBER VARCHAR2(60);
8906 l_SUBMISSION_DATE DATE;
8907 l_AMOUNT number;
8908 l_CURRENCY VARCHAR2(15);
8909 l_DUE_DATE date;
8910 l_INVOICE_ID number;
8911 l_INVOICE_NUMBER VARCHAR2(50);
8912 l_PAYMENT_METHOD VARCHAR2(30);
8913 l_STATUS VARCHAR2(30);
8914 l_PAYEE_ID number;
8915 l_PAYEE_SITE_ID number;
8916 l_REQUEST_ID number;
8917 l_ADVICE_VERSION_NUMBER number;
8918 l_LOAN_START_DATE date;
8919 l_LOAN_VERSION_NUMBER number;
8920 l_LOAN_STATUS VARCHAR2(30);
8921 l_TERM_ID number;
8922 l_TERM_VERSION_NUMBER number;
8923 l_dummy varchar2(10);
8924 l_temp_id number;
8925 l_invoice_status VARCHAR2(80);
8926 l_actual_invoice_id number;
8927 l_last_payment_date date;
8928 l_new_loan_status VARCHAR2(30);
8929 l_new_funding_status VARCHAR2(30);
8930 l_rphase varchar2(80);
8931 l_rstatus varchar2(80);
8932 l_dphase varchar2(80);
8933 l_dstatus varchar2(80);
8934 l_request_msg varchar2(240);
8935 l_request_status boolean;
8936 l_do_billing number;
8937
8938 l_term_rec LNS_TERMS_PUB.loan_term_rec_type;
8939 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
8940 l_loan_details LNS_FINANCIALS.LOAN_DETAILS_REC;
8941
8942 /*-----------------------------------------------------------------------+
8943 | Cursor Declarations |
8944 +-----------------------------------------------------------------------*/
8945
8946 BEGIN
8947 null;
8948 END;
8949
8950
8951
8952
8953 /*========================================================================
8954 | PUBLIC PROCEDURE CHECK_FUNDING_STATUS
8955 |
8956 | DESCRIPTION
8957 | This procedure checks for funding status of:
8958 | - all funding advices or
8959 | - all funding advices for particular loan or
8960 | - one particular funding advice
8961 |
8962 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
8963 | None
8964 |
8965 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
8966 | LogMessage
8967 |
8968 | PARAMETERS
8969 | P_API_VERSION IN Standard in parameter
8970 | P_INIT_MSG_LIST IN Standard in parameter
8971 | P_COMMIT IN Standard in parameter
8972 | P_VALIDATION_LEVEL IN Standard in parameter
8973 | P_LOAN_ID IN Loan ID
8974 | P_FUNDING_ADVICE_ID IN Funding advice ID
8975 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
8976 | X_MSG_COUNT OUT NOCOPY Standard out parameter
8977 | X_MSG_DATA OUT NOCOPY Standard out parameter
8978 |
8979 | KNOWN ISSUES
8980 | None
8981 |
8982 | NOTES
8983 | Any interesting aspect of the code in the package body which needs
8984 | to be stated.
8985 |
8986 | MODIFICATION HISTORY
8987 | Date Author Description of Changes
8988 | 11-30-2004 scherkas Created
8989 |
8990 *=======================================================================*/
8991 PROCEDURE CHECK_FUNDING_STATUS(
8992 P_API_VERSION IN NUMBER,
8993 P_INIT_MSG_LIST IN VARCHAR2,
8994 P_COMMIT IN VARCHAR2,
8995 P_VALIDATION_LEVEL IN NUMBER,
8996 P_LOAN_ID IN NUMBER,
8997 P_FUNDING_ADVICE_ID IN NUMBER,
8998 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
8999 X_MSG_COUNT OUT NOCOPY NUMBER,
9000 X_MSG_DATA OUT NOCOPY VARCHAR2)
9001 IS
9002
9003 /*-----------------------------------------------------------------------+
9004 | Local Variable Declarations and initializations |
9005 +-----------------------------------------------------------------------*/
9006
9007 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_FUNDING_STATUS';
9008 l_api_version CONSTANT NUMBER := 1.0;
9009 l_return_status VARCHAR2(1);
9010 l_msg_count NUMBER;
9011 l_msg_data VARCHAR2(32767);
9012 l_funding_advice_id number;
9013 l_count number;
9014
9015 /*-----------------------------------------------------------------------+
9016 | Cursor Declarations |
9017 +-----------------------------------------------------------------------*/
9018
9019 BEGIN
9020 null;
9021 END;
9022
9023
9024 /*========================================================================
9025 | PUBLIC PROCEDURE LNS_CHK_FUND_STAT_CONCUR
9026 |
9027 | DESCRIPTION
9028 | This procedure got called from concurent manager to check funding status
9029 |
9030 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
9031 | None
9032 |
9033 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
9034 | CHECK_FUNDING_STATUS
9035 | LogMessage
9036 |
9037 | PARAMETERS
9038 | ERRBUF OUT Returns errors to CM
9039 | RETCODE OUT Returns error code to CM
9040 | LOAN_ID IN Inputs loan
9041 | FUNDING_ADVICE_ID IN Input funding advice
9042 |
9043 | KNOWN ISSUES
9044 | None
9045 |
9046 | NOTES
9047 | Any interesting aspect of the code in the package body which needs
9048 | to be stated.
9049 |
9050 | MODIFICATION HISTORY
9051 | Date Author Description of Changes
9052 | 12-02-2004 scherkas Created
9053 |
9054 *=======================================================================*/
9055 PROCEDURE LNS_CHK_FUND_STAT_CONCUR(
9056 ERRBUF OUT NOCOPY VARCHAR2,
9057 RETCODE OUT NOCOPY VARCHAR2,
9058 LOAN_ID IN NUMBER,
9059 FUNDING_ADVICE_ID IN NUMBER)
9060 IS
9061
9062 /*-----------------------------------------------------------------------+
9063 | Local Variable Declarations and initializations |
9064 +-----------------------------------------------------------------------*/
9065 l_msg_count number;
9066
9067 BEGIN
9068 null;
9069 END;
9070
9071
9072
9073
9074 /*========================================================================
9075 | PUBLIC PROCEDURE VALIDATE_DISB_FOR_PAYOFF
9076 |
9077 | DESCRIPTION
9078 | This procedure validates disbursements for payoff process
9079 |
9080 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
9081 | None
9082 |
9083 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
9084 | LogMessage
9085 |
9086 | PARAMETERS
9087 | P_API_VERSION IN Standard in parameter
9088 | P_INIT_MSG_LIST IN Standard in parameter
9089 | P_COMMIT IN Standard in parameter
9090 | P_VALIDATION_LEVEL IN Standard in parameter
9091 | P_LOAN_ID IN Loan ID
9092 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
9093 | X_MSG_COUNT OUT NOCOPY Standard out parameter
9094 | X_MSG_DATA OUT NOCOPY Standard out parameter
9095 |
9096 | KNOWN ISSUES
9097 | None
9098 |
9099 | NOTES
9100 | Any interesting aspect of the code in the package body which needs
9101 | to be stated.
9102 |
9103 | MODIFICATION HISTORY
9104 | Date Author Description of Changes
9105 | 12-08-2005 scherkas Created
9106 |
9107 *=======================================================================*/
9108 PROCEDURE VALIDATE_DISB_FOR_PAYOFF(
9109 P_API_VERSION IN NUMBER,
9110 P_INIT_MSG_LIST IN VARCHAR2,
9111 P_COMMIT IN VARCHAR2,
9112 P_VALIDATION_LEVEL IN NUMBER,
9113 P_LOAN_ID IN NUMBER,
9114 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
9115 X_MSG_COUNT OUT NOCOPY NUMBER,
9116 X_MSG_DATA OUT NOCOPY VARCHAR2)
9117 IS
9118
9119 /*-----------------------------------------------------------------------+
9120 | Local Variable Declarations and initializations |
9121 +-----------------------------------------------------------------------*/
9122
9123 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_DISB_FOR_PAYOFF';
9124 l_api_version CONSTANT NUMBER := 1.0;
9125 l_return_status VARCHAR2(1);
9126 l_msg_count NUMBER;
9127 l_msg_data VARCHAR2(32767);
9128 l_in_funding_count number;
9129
9130 /*-----------------------------------------------------------------------+
9131 | Cursor Declarations |
9132 +-----------------------------------------------------------------------*/
9133
9134 -- querying disbursement lines info
9135 CURSOR in_fund_count_cur(P_LOAN_ID number) IS
9136 select nvl(count(line.DISB_LINE_ID), 0)
9137 from LNS_DISB_LINES line,
9138 LNS_DISB_HEADERS head
9139 where head.LOAN_ID = P_LOAN_ID and
9140 line.DISB_HEADER_ID = head.DISB_HEADER_ID and
9141 line.status is not null and
9142 line.status = 'IN_FUNDING';
9143
9144 BEGIN
9145
9146 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
9147 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
9148
9149 -- Standard call to check for call compatibility
9150 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
9151 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9152 END IF;
9153
9154 -- Initialize message list if p_init_msg_list is set to TRUE
9155 IF FND_API.To_Boolean(p_init_msg_list) THEN
9156 FND_MSG_PUB.initialize;
9157 END IF;
9158
9159 -- Initialize API return status to success
9160 l_return_status := FND_API.G_RET_STS_SUCCESS;
9161
9162 -- START OF BODY OF API
9163
9164 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Validating disbursements for payoff process...');
9165 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan: ' || P_LOAN_ID);
9166
9167 open in_fund_count_cur(P_LOAN_ID);
9168 fetch in_fund_count_cur into l_in_funding_count;
9169 close in_fund_count_cur;
9170
9171 if l_in_funding_count > 0 then
9172 FND_MESSAGE.SET_NAME('LNS', 'LNS_CANT_PAYOFF_IN_FUND');
9173 FND_MSG_PUB.Add;
9174 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
9175 RAISE FND_API.G_EXC_ERROR;
9176 end if;
9177
9178 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully validated disbursements for payoff process');
9179
9180 -- END OF BODY OF API
9181 x_return_status := FND_API.G_RET_STS_SUCCESS;
9182
9183 -- Standard call to get message count and if count is 1, get message info
9184 FND_MSG_PUB.Count_And_Get(
9185 p_encoded => FND_API.G_FALSE,
9186 p_count => x_msg_count,
9187 p_data => x_msg_data);
9188
9189 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
9190
9191 EXCEPTION
9192 WHEN FND_API.G_EXC_ERROR THEN
9193 x_return_status := FND_API.G_RET_STS_ERROR;
9194 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9195 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9196 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9197 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9198 WHEN OTHERS THEN
9199 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9200 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
9201 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
9202 END IF;
9203 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9204
9205 END;
9206
9207
9208
9209 /*========================================================================
9210 | PUBLIC PROCEDURE CHECK_FOR_VOIDED_INVOICES
9211 |
9212 | DESCRIPTION
9213 | This procedure checks for voided AP invoices and cancelles appropriate disb lines and headers in Loans
9214 |
9215 | CALLED FROM PROCEDURES/FUNCTIONS (local to this package body)
9216 | None
9217 |
9218 | CALLS PROCEDURES/FUNCTIONS (local to this package body)
9219 | LogMessage
9220 |
9221 | PARAMETERS
9222 | P_API_VERSION IN Standard in parameter
9223 | P_INIT_MSG_LIST IN Standard in parameter
9224 | P_COMMIT IN Standard in parameter
9225 | P_VALIDATION_LEVEL IN Standard in parameter
9226 | P_LOAN_ID IN Loan ID
9227 | X_RETURN_STATUS OUT NOCOPY Standard out parameter
9228 | X_MSG_COUNT OUT NOCOPY Standard out parameter
9229 | X_MSG_DATA OUT NOCOPY Standard out parameter
9230 |
9231 | KNOWN ISSUES
9232 | None
9233 |
9234 | NOTES
9235 | Any interesting aspect of the code in the package body which needs
9236 | to be stated.
9237 |
9238 | MODIFICATION HISTORY
9239 | Date Author Description of Changes
9240 | 01-25-2010 scherkas Created
9241 |
9242 *=======================================================================*/
9243 PROCEDURE CHECK_FOR_VOIDED_INVOICES(
9244 P_API_VERSION IN NUMBER,
9245 P_INIT_MSG_LIST IN VARCHAR2,
9246 P_COMMIT IN VARCHAR2,
9247 P_VALIDATION_LEVEL IN NUMBER,
9248 P_LOAN_ID IN NUMBER,
9249 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
9250 X_MSG_COUNT OUT NOCOPY NUMBER,
9251 X_MSG_DATA OUT NOCOPY VARCHAR2)
9252 IS
9253
9254 /*-----------------------------------------------------------------------+
9255 | Local Variable Declarations and initializations |
9256 +-----------------------------------------------------------------------*/
9257
9258 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_FOR_VOIDED_INVOICES';
9259 l_api_version CONSTANT NUMBER := 1.0;
9260 l_return_status VARCHAR2(1);
9261 l_msg_count NUMBER;
9262 l_msg_data VARCHAR2(32767);
9263 l_count number;
9264 i number;
9265 k number;
9266 l_DISB_HEADER_ID number;
9267 l_invoice_number VARCHAR2(50);
9268 l_cancelled_date date;
9269 l_hist_id number;
9270 l_hist_version number;
9271 l_found boolean;
9272
9273 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
9274 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
9275 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
9276 l_ids_tbl DBMS_SQL.NUMBER_TABLE;
9277
9278 /*-----------------------------------------------------------------------+
9279 | Cursor Declarations |
9280 +-----------------------------------------------------------------------*/
9281
9282 -- querying disbursement lines info
9283 CURSOR voided_invoices_cur(P_LOAN_ID number) IS
9284 select lines.DISB_LINE_ID,
9285 lines.STATUS,
9286 lines.OBJECT_VERSION_NUMBER,
9287 head.DISB_HEADER_ID,
9288 inv.INVOICE_NUM,
9289 inv.cancelled_date
9290 from LNS_DISB_LINES lines,
9291 LNS_DISB_HEADERS head,
9292 ap_invoices_all inv
9293 where head.loan_id = P_LOAN_ID and
9294 head.DISB_HEADER_ID = lines.DISB_HEADER_ID and
9295 lines.status is not null and
9296 lines.status <> 'CANCELLED' and
9297 lines.invoice_id is not null and
9298 lines.invoice_id = inv.invoice_id and
9299 inv.cancelled_date is not null;
9300
9301 -- getting disbursement header info
9302 CURSOR disb_hdr_cur(P_DISB_HEADER_ID number) IS
9303 select head.DISB_HEADER_ID,
9304 head.STATUS,
9305 head.OBJECT_VERSION_NUMBER,
9306 (select count(1)
9307 from lns_disb_lines
9308 where DISB_HEADER_ID = head.DISB_HEADER_ID and
9309 status <> 'CANCELLED')
9310 from LNS_DISB_HEADERS head
9311 where head.DISB_HEADER_ID = P_DISB_HEADER_ID;
9312
9313 -- getting last history record to update status
9314 CURSOR last_hist_rec_cur(P_DISB_LINE_ID number) IS
9315 select max(DISB_HISTORY_ID), max(OBJECT_VERSION_NUMBER+1)
9316 from lns_disb_histories_h
9317 where DISB_LINE_ID = P_DISB_LINE_ID;
9318
9319 BEGIN
9320
9321 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
9322 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
9323
9324 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan: ' || P_LOAN_ID);
9325
9326 -- Standard start of API savepoint
9327 SAVEPOINT CHECK_FOR_VOIDED_INVOICES;
9328 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
9329
9330 -- Standard call to check for call compatibility
9331 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
9332 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9333 END IF;
9334
9335 -- Initialize message list if p_init_msg_list is set to TRUE
9336 IF FND_API.To_Boolean(p_init_msg_list) THEN
9337 FND_MSG_PUB.initialize;
9338 END IF;
9339
9340 -- Initialize API return status to success
9341 l_return_status := FND_API.G_RET_STS_SUCCESS;
9342
9343 -- START OF BODY OF API
9344
9345 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Searching voided AP invoices that are not cancelled in Loans yet...');
9346
9347 i := 0;
9348 k := 0;
9349 open voided_invoices_cur(P_LOAN_ID);
9350 LOOP
9351
9352 fetch voided_invoices_cur into
9353 l_DISB_LINE_REC.DISB_LINE_ID,
9354 l_DISB_LINE_REC.STATUS,
9355 l_DISB_LINE_REC.OBJECT_VERSION_NUMBER,
9356 l_DISB_HEADER_ID,
9357 l_invoice_number,
9358 l_cancelled_date;
9359 exit when voided_invoices_cur%NOTFOUND;
9360
9361 i := i + 1;
9362
9363 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Found invoice ' || i);
9364 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_LINE_ID: ' || l_DISB_LINE_REC.DISB_LINE_ID);
9365 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_LINE STATUS: ' || l_DISB_LINE_REC.STATUS);
9366 LogMessage(FND_LOG.LEVEL_STATEMENT, 'OBJECT_VERSION_NUMBER: ' || l_DISB_LINE_REC.OBJECT_VERSION_NUMBER);
9367 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_DISB_HEADER_ID: ' || l_DISB_HEADER_ID);
9368 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_invoice_number: ' || l_invoice_number);
9369 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_cancelled_date: ' || l_cancelled_date);
9370
9371 -- getting last history record to update status
9372 open last_hist_rec_cur(l_DISB_LINE_REC.DISB_LINE_ID);
9373 fetch last_hist_rec_cur into l_hist_id, l_hist_version;
9374 close last_hist_rec_cur;
9375
9376 LogMessage(FND_LOG.LEVEL_STATEMENT, 'hist_id: ' || l_hist_id);
9377 LogMessage(FND_LOG.LEVEL_STATEMENT, 'hist_version: ' || l_hist_version);
9378
9379 if l_hist_id is not null and l_hist_version is not null then
9380
9381 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating history record...');
9382 -- calling history table handler api
9383 LNS_DISB_HISTORIES_H_PKG.Update_Row(
9384 P_DISB_HISTORY_ID => l_hist_id,
9385 P_STATUS => 'CANCELLED',
9386 P_OBJECT_VERSION_NUMBER => l_hist_version);
9387
9388 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Successfully updated history record with ID: ' || l_hist_id);
9389
9390 end if;
9391
9392 l_DISB_LINE_REC.STATUS := 'CANCELLED';
9393 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating disb line to status ' || l_DISB_LINE_REC.STATUS);
9394 UPDATE_DISB_LINE(
9395 P_API_VERSION => 1.0,
9396 P_INIT_MSG_LIST => FND_API.G_TRUE,
9397 P_COMMIT => FND_API.G_FALSE,
9398 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
9399 P_DISB_LINE_REC => l_DISB_LINE_REC,
9400 X_RETURN_STATUS => l_return_status,
9401 X_MSG_COUNT => l_msg_count,
9402 X_MSG_DATA => l_msg_data);
9403
9404 IF l_return_status <> 'S' THEN
9405 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_LINE failed');
9406 RAISE FND_API.G_EXC_ERROR;
9407 ELSE
9408 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Success');
9409 END IF;
9410
9411 l_found := false;
9412 FOR j IN 1..l_ids_tbl.count LOOP
9413 if l_ids_tbl(j) = l_DISB_HEADER_ID then
9414 l_found := true;
9415 exit;
9416 end if;
9417 END LOOP;
9418
9419 if l_found = false then
9420 k := k + 1;
9421 l_ids_tbl(k) := l_DISB_HEADER_ID;
9422 end if;
9423
9424 END LOOP;
9425 close voided_invoices_cur;
9426
9427 if i = 0 then
9428 LogMessage(FND_LOG.LEVEL_STATEMENT, 'No voided AP invoices found');
9429 end if;
9430
9431 FOR j IN 1..l_ids_tbl.count LOOP
9432
9433 -- getting disbursement header info
9434 open disb_hdr_cur(l_ids_tbl(j));
9435 fetch disb_hdr_cur into l_DISB_HEADER_REC.DISB_HEADER_ID,
9436 l_DISB_HEADER_REC.STATUS,
9437 l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER,
9438 l_count;
9439 close disb_hdr_cur;
9440
9441 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Disbursement ' || j);
9442 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_HEADER_ID: ' || l_DISB_HEADER_REC.DISB_HEADER_ID);
9443 LogMessage(FND_LOG.LEVEL_STATEMENT, 'DISB_HEADER STATUS: ' || l_DISB_HEADER_REC.STATUS);
9444 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_count: ' || l_count);
9445
9446 -- if all lines are cancelled then cancel header as well
9447 if l_count = 0 then
9448
9449 l_DISB_HEADER_REC.STATUS := 'CANCELLED';
9450
9451 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating disb header to status ' || l_DISB_HEADER_REC.STATUS);
9452 -- updating disb header
9453 UPDATE_DISB_HEADER(
9454 P_API_VERSION => 1.0,
9455 P_INIT_MSG_LIST => FND_API.G_TRUE,
9456 P_COMMIT => FND_API.G_FALSE,
9457 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
9458 P_DISB_HEADER_REC => l_DISB_HEADER_REC,
9459 X_RETURN_STATUS => l_return_status,
9460 X_MSG_COUNT => l_msg_count,
9461 X_MSG_DATA => l_msg_data);
9462
9463 IF l_return_status <> 'S' THEN
9464 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'Call to UPDATE_DISB_HEADER failed');
9465 RAISE FND_API.G_EXC_ERROR;
9466 ELSE
9467 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Success');
9468 END IF;
9469
9470 end if;
9471
9472 END LOOP;
9473
9474 UPDATE_LOAN_FUNDING_STATUS(P_LOAN_ID);
9475
9476 -- END OF BODY OF API
9477 x_return_status := FND_API.G_RET_STS_SUCCESS;
9478
9479 -- Standard call to get message count and if count is 1, get message info
9480 FND_MSG_PUB.Count_And_Get(
9481 p_encoded => FND_API.G_FALSE,
9482 p_count => x_msg_count,
9483 p_data => x_msg_data);
9484
9485 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
9486
9487 EXCEPTION
9488 WHEN FND_API.G_EXC_ERROR THEN
9489 ROLLBACK TO CHECK_FOR_VOIDED_INVOICES;
9490 x_return_status := FND_API.G_RET_STS_ERROR;
9491 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9492 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9493 ROLLBACK TO CHECK_FOR_VOIDED_INVOICES;
9494 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9495 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9496 WHEN OTHERS THEN
9497 ROLLBACK TO CHECK_FOR_VOIDED_INVOICES;
9498 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9499 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
9500 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
9501 END IF;
9502 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9503
9504 END;
9505
9506
9507
9508 PROCEDURE UPDATE_LOAN_FUNDING_STATUS(P_LOAN_ID number)
9509 IS
9510
9511 /*-----------------------------------------------------------------------+
9512 | Local Variable Declarations and initializations |
9513 +-----------------------------------------------------------------------*/
9514
9515 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_LOAN_FUNDING_STATUS';
9516 l_return_status VARCHAR2(1);
9517 l_msg_count NUMBER;
9518 l_msg_data VARCHAR2(32767);
9519 l_funding_error_count number;
9520 l_in_funding_count number;
9521 l_loan_version number;
9522 l_requested_amount number;
9523 l_funded_amount number;
9524 l_loan_status varchar2(30);
9525 l_SECONDARY_STATUS varchar2(30);
9526 l_current_phase varchar2(30);
9527
9528 l_loan_header_rec LNS_LOAN_HEADER_PUB.loan_header_rec_type;
9529
9530 /*-----------------------------------------------------------------------+
9531 | Cursor Declarations |
9532 +-----------------------------------------------------------------------*/
9533
9534 CURSOR loan_cur(P_LOAN_ID number) IS
9535 select
9536 loan.loan_id,
9537 loan.OBJECT_VERSION_NUMBER,
9538 loan.REQUESTED_AMOUNT + nvl(loan.ADD_REQUESTED_AMOUNT, 0),
9539 loan.loan_status,
9540 loan.SECONDARY_STATUS,
9541 nvl(loan.CURRENT_PHASE, 'TERM')
9542 from LNS_LOAN_HEADERS loan
9543 where loan.LOAN_ID = P_LOAN_ID;
9544
9545 CURSOR disb_amount_cur(P_LOAN_ID number) IS
9546 select nvl(sum(lines.LINE_AMOUNT), 0)
9547 from LNS_DISB_LINES lines,
9548 LNS_DISB_HEADERS head
9549 where head.LOAN_ID = P_LOAN_ID and
9550 lines.DISB_HEADER_ID = head.DISB_HEADER_ID and
9551 (lines.STATUS is not null and lines.STATUS = 'FULLY_FUNDED') and
9552 lines.DISBURSEMENT_DATE is not null;
9553
9554 CURSOR disb_count_cur(P_LOAN_ID number, P_STATUS VARCHAR2) IS
9555 select count(1)
9556 from LNS_DISB_HEADERS head
9557 where head.LOAN_ID = P_LOAN_ID and
9558 (head.STATUS is not null and head.STATUS = P_STATUS);
9559
9560 BEGIN
9561
9562 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
9563 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
9564
9565 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Loan: ' || P_LOAN_ID);
9566
9567 open loan_cur(P_LOAN_ID);
9568 fetch loan_cur into l_loan_header_rec.LOAN_ID,
9569 l_loan_version,
9570 l_requested_amount,
9571 l_loan_status,
9572 l_SECONDARY_STATUS,
9573 l_current_phase;
9574 close loan_cur;
9575
9576 open disb_amount_cur(P_LOAN_ID);
9577 fetch disb_amount_cur into l_funded_amount;
9578 close disb_amount_cur;
9579
9580 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_requested_amount: ' || l_requested_amount);
9581 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_funded_amount: ' || l_funded_amount);
9582 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_loan_status: ' || l_loan_status);
9583 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_SECONDARY_STATUS: ' || l_SECONDARY_STATUS);
9584 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_current_phase: ' || l_current_phase);
9585
9586 if l_funded_amount > 0 and l_requested_amount > 0 and l_funded_amount = l_requested_amount and
9587 l_loan_status <> 'PAIDOFF' and l_loan_status <> 'CANCELLED' then
9588 l_loan_header_rec.SECONDARY_STATUS := 'FULLY_FUNDED';
9589 elsif (l_loan_status = 'PAIDOFF' or l_loan_status = 'CANCELLED') and l_current_phase = 'TERM' then
9590 if l_SECONDARY_STATUS is not null then
9591 l_loan_header_rec.SECONDARY_STATUS := FND_API.G_MISS_CHAR;
9592 end if;
9593 else
9594 open disb_count_cur(P_LOAN_ID, 'IN_FUNDING');
9595 fetch disb_count_cur into l_in_funding_count;
9596 close disb_count_cur;
9597
9598 open disb_count_cur(P_LOAN_ID, 'FUNDING_ERROR');
9599 fetch disb_count_cur into l_funding_error_count;
9600 close disb_count_cur;
9601
9602 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_in_funding_count: ' || l_in_funding_count);
9603 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_funding_error_count: ' || l_funding_error_count);
9604
9605 if l_funding_error_count > 0 then
9606 l_loan_header_rec.SECONDARY_STATUS := 'FUNDING_ERROR';
9607 elsif l_in_funding_count > 0 then
9608 l_loan_header_rec.SECONDARY_STATUS := 'IN_FUNDING';
9609 elsif l_funded_amount > 0 and l_requested_amount > 0 then
9610 l_loan_header_rec.SECONDARY_STATUS := 'PARTIALLY_FUNDED';
9611 else
9612 l_loan_header_rec.SECONDARY_STATUS := FND_API.G_MISS_CHAR;
9613 end if;
9614 end if;
9615
9616 if l_SECONDARY_STATUS <> l_loan_header_rec.SECONDARY_STATUS then
9617
9618 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Updating loan header...');
9619 LogMessage(FND_LOG.LEVEL_STATEMENT, 'secondary status: ' || l_loan_header_rec.SECONDARY_STATUS);
9620
9621 LNS_LOAN_HEADER_PUB.UPDATE_LOAN(P_OBJECT_VERSION_NUMBER => l_loan_version,
9622 P_LOAN_HEADER_REC => l_loan_header_rec,
9623 P_INIT_MSG_LIST => FND_API.G_FALSE,
9624 X_RETURN_STATUS => l_return_status,
9625 X_MSG_COUNT => l_msg_count,
9626 X_MSG_DATA => l_msg_data);
9627
9628 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
9629
9630 IF l_return_status <> 'S' THEN
9631 FND_MESSAGE.SET_NAME('LNS', 'LNS_UPD_LOAN_FAIL');
9632 FND_MSG_PUB.Add;
9633 LogMessage(FND_LOG.LEVEL_UNEXPECTED, FND_MSG_PUB.Get(p_encoded => 'F'));
9634 RAISE FND_API.G_EXC_ERROR;
9635 END IF;
9636
9637 end if;
9638 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
9639
9640 END;
9641
9642
9643
9644 /*========================================================================
9645 | PUBLIC PROCEDURE CREATE_DISBURSEMENT
9646 |
9647 | DESCRIPTION
9648 | This procedure creates quick disbursement
9649 | PSEUDO CODE/LOGIC
9650 |
9651 | PARAMETERS
9652 | P_LOAN_ID IN Loan ID
9653 | P_DESCRIPTION IN Descrition
9654 | P_AMOUNT IN Amount
9655 | P_DUE_DATE IN Due Date
9656 |
9657 | KNOWN ISSUES
9658 | None
9659 |
9660 | NOTES
9661 | Any interesting aspect of the code in the package body which needs
9662 | to be stated.
9663 |
9664 | MODIFICATION HISTORY
9665 | Date Author Description of Changes
9666 | 02-02-2010 scherkas Created
9667 |
9668 *=======================================================================*/
9669 PROCEDURE CREATE_DISBURSEMENT(
9670 P_API_VERSION IN NUMBER,
9671 P_INIT_MSG_LIST IN VARCHAR2,
9672 P_COMMIT IN VARCHAR2,
9673 P_VALIDATION_LEVEL IN NUMBER,
9674 P_LOAN_ID IN NUMBER,
9675 P_DESCRIPTION IN VARCHAR2,
9676 P_AMOUNT IN NUMBER,
9677 P_DUE_DATE IN DATE,
9678 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
9679 X_MSG_COUNT OUT NOCOPY NUMBER,
9680 X_MSG_DATA OUT NOCOPY VARCHAR2)
9681 IS
9682
9683 /*-----------------------------------------------------------------------+
9684 | Local Variable Declarations and initializations |
9685 +-----------------------------------------------------------------------*/
9686
9687 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_DISBURSEMENT';
9688 l_api_version CONSTANT NUMBER := 1.0;
9689 l_return_status VARCHAR2(1);
9690 l_msg_count NUMBER;
9691 l_msg_data VARCHAR2(32767);
9692 l_Trxn_Attributes_Rec IBY_DISBURSEMENT_COMP_PUB.Trxn_Attributes_Rec_Type;
9693 l_Default_Pmt_Attrs_Rec IBY_DISBURSEMENT_COMP_PUB.Default_Pmt_Attrs_Rec_Type;
9694 l_org_id lns_loan_headers_all.org_id%TYPE;
9695 l_legal_entity_id lns_Loan_headers_all.legal_entity_id%TYPE;
9696 l_payment_method_code lns_disb_lines.payment_method_code%TYPE;
9697 l_bank_account_id lns_disb_lines.bank_account_id%TYPE;
9698 l_payee_party_id lns_disb_lines.payee_party_id%TYPE;
9699 l_current_phase varchar2(30);
9700 l_currency varchar2(15);
9701
9702 l_DISB_HEADER_REC LNS_FUNDING_PUB.LNS_DISB_HEADERS_REC;
9703 l_DISB_LINE_REC LNS_FUNDING_PUB.LNS_DISB_LINES_REC;
9704
9705 /*-----------------------------------------------------------------------+
9706 | Cursor Declarations |
9707 +-----------------------------------------------------------------------*/
9708
9709 BEGIN
9710
9711 LogMessage(FND_LOG.LEVEL_PROCEDURE, ' ');
9712 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' +');
9713
9714 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_LOAN_ID: ' || P_LOAN_ID);
9715 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DESCRIPTION: ' || P_DESCRIPTION);
9716 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_AMOUNT: ' || P_AMOUNT);
9717 LogMessage(FND_LOG.LEVEL_STATEMENT, 'P_DUE_DATE: ' || P_DUE_DATE);
9718
9719 -- Standard start of API savepoint
9720 SAVEPOINT CREATE_DISBURSEMENT;
9721 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Savepoint is established');
9722
9723 -- Standard call to check for call compatibility
9724 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
9725 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9726 END IF;
9727
9728 -- Initialize message list if p_init_msg_list is set to TRUE
9729 IF FND_API.To_Boolean(p_init_msg_list) THEN
9730 FND_MSG_PUB.initialize;
9731 END IF;
9732
9733 -- Initialize API return status to success
9734 l_return_status := FND_API.G_RET_STS_SUCCESS;
9735
9736 -- START OF BODY OF API
9737
9738 IF P_LOAN_ID IS NULL THEN
9739 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'LOAN ID is missing');
9740 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
9741 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'P_LOAN_ID' );
9742 FND_MSG_PUB.ADD;
9743 RAISE FND_API.G_EXC_ERROR;
9744 END IF;
9745
9746 IF P_AMOUNT IS NULL THEN
9747 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'AMOUNT is missing');
9748 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
9749 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'P_AMOUNT' );
9750 FND_MSG_PUB.ADD;
9751 RAISE FND_API.G_EXC_ERROR;
9752 END IF;
9753
9754 IF P_DUE_DATE IS NULL THEN
9755 LogMessage(FND_LOG.LEVEL_UNEXPECTED, 'DUE_DATE is missing');
9756 FND_MESSAGE.SET_NAME( 'LNS', 'LNS_API_MISSING_COLUMN' );
9757 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'P_DUE_DATE' );
9758 FND_MSG_PUB.ADD;
9759 RAISE FND_API.G_EXC_ERROR;
9760 END IF;
9761
9762 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Querying loan info...');
9763 SELECT llh.primary_borrower_id
9764 ,llh.org_id
9765 ,llh.legal_entity_id
9766 ,llh.current_phase
9767 ,llh.LOAN_CURRENCY
9768 INTO l_payee_party_id
9769 ,l_org_id
9770 ,l_legal_entity_id
9771 ,l_current_phase
9772 ,l_currency
9773 FROM lns_loan_headers_all llh
9774 WHERE llh.loan_id = p_loan_id;
9775
9776 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_payee_party_id: ' || l_payee_party_id);
9777 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_org_id: ' || l_org_id);
9778 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_legal_entity_id: ' || l_legal_entity_id);
9779 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_current_phase: ' || l_current_phase);
9780 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_currency: ' || l_currency);
9781
9782 l_Trxn_Attributes_Rec.Application_Id := 206;
9783 l_Trxn_Attributes_Rec.Payer_Legal_Entity_Id := l_legal_entity_id;
9784 l_Trxn_Attributes_Rec.Payer_Org_Id := l_org_id;
9785 l_Trxn_Attributes_Rec.Payer_Org_Type := 'OPERATING_UNIT';
9786 l_Trxn_Attributes_Rec.Payee_Party_Id := l_payee_party_id;
9787 l_Trxn_Attributes_Rec.Pay_Proc_Trxn_Type_Code := 'LOAN_PAYMENT';
9788 l_Trxn_Attributes_Rec.Payment_Currency := l_currency;
9789 l_Trxn_Attributes_Rec.Payment_Function := 'LOANS_PAYMENTS';
9790
9791 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling IBY_DISBURSEMENT_COMP_PUB.Get_Default_Payment_Attributes...');
9792 IBY_DISBURSEMENT_COMP_PUB.Get_Default_Payment_Attributes(
9793 p_api_version => 1.0,
9794 p_init_msg_list => FND_API.G_TRUE,
9795 p_ignore_payee_pref => null,
9796 p_trxn_attributes_rec => l_Trxn_Attributes_Rec,
9797 x_return_status => l_return_status,
9798 x_msg_count => l_msg_count,
9799 x_msg_data => l_msg_data,
9800 x_default_pmt_attrs_rec => l_Default_Pmt_Attrs_Rec);
9801
9802 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
9803 IF l_return_status = 'S' THEN
9804 l_payment_method_code := l_Default_Pmt_Attrs_Rec.Payment_Method.Payment_Method_Code;
9805 l_bank_account_id := l_Default_Pmt_Attrs_Rec.Payee_BankAccount.Payee_BankAccount_Id;
9806 END IF;
9807 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_payment_method_code: ' || l_payment_method_code);
9808 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_bank_account_id: ' || l_bank_account_id);
9809
9810 -- create disb header
9811 select lns_disb_headers_s.NEXTVAL into l_DISB_HEADER_REC.DISB_HEADER_ID from dual;
9812
9813 l_DISB_HEADER_REC.LOAN_ID := p_loan_id;
9814 l_DISB_HEADER_REC.HEADER_AMOUNT := P_AMOUNT;
9815 l_DISB_HEADER_REC.PAYMENT_REQUEST_DATE := P_DUE_DATE;
9816 l_DISB_HEADER_REC.OBJECT_VERSION_NUMBER := 1;
9817 l_DISB_HEADER_REC.PHASE := l_current_phase;
9818 l_DISB_HEADER_REC.DESCRIPTION := nvl(P_DESCRIPTION, 'Disbursement');
9819
9820 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling INSERT_DISB_HEADER...');
9821 INSERT_DISB_HEADER(
9822 P_API_VERSION => 1.0,
9823 P_INIT_MSG_LIST => FND_API.G_TRUE,
9824 P_COMMIT => FND_API.G_FALSE,
9825 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
9826 P_DISB_HEADER_REC => l_DISB_HEADER_REC,
9827 X_RETURN_STATUS => l_return_status,
9828 X_MSG_COUNT => l_msg_count,
9829 X_MSG_DATA => l_msg_data);
9830
9831 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
9832 IF l_return_status <> 'S' THEN
9833 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Call to INSERT_DISB_HEADER failed');
9834 RAISE FND_API.G_EXC_ERROR;
9835 END IF;
9836
9837 -- create disb line
9838 select lns_disb_lines_s.NEXTVAL into l_DISB_LINE_REC.DISB_LINE_ID from dual;
9839
9840 l_DISB_LINE_REC.DISB_HEADER_ID := l_DISB_HEADER_REC.DISB_HEADER_ID;
9841 l_DISB_LINE_REC.DISB_LINE_NUMBER := 1;
9842 l_DISB_LINE_REC.LINE_AMOUNT := P_AMOUNT;
9843 l_DISB_LINE_REC.LINE_PERCENT := 100;
9844 l_DISB_LINE_REC.PAYEE_PARTY_ID := l_payee_party_id;
9845 l_DISB_LINE_REC.BANK_ACCOUNT_ID := l_bank_account_id;
9846 l_DISB_LINE_REC.PAYMENT_METHOD_CODE := l_payment_method_code;
9847 l_DISB_LINE_REC.OBJECT_VERSION_NUMBER := 1;
9848
9849 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling INSERT_DISB_LINE...');
9850 INSERT_DISB_LINE(
9851 P_API_VERSION => 1.0,
9852 P_INIT_MSG_LIST => FND_API.G_TRUE,
9853 P_COMMIT => FND_API.G_FALSE,
9854 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
9855 P_DISB_LINE_REC => l_DISB_LINE_REC,
9856 X_RETURN_STATUS => l_return_status,
9857 X_MSG_COUNT => l_msg_count,
9858 X_MSG_DATA => l_msg_data);
9859
9860 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
9861 IF l_return_status <> 'S' THEN
9862 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Call to INSERT_DISB_LINE failed');
9863 RAISE FND_API.G_EXC_ERROR;
9864 END IF;
9865
9866 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Calling LNS_COND_ASSIGNMENT_PUB.DEFAULT_COND_ASSIGNMENTS...');
9867 LNS_COND_ASSIGNMENT_PUB.DEFAULT_COND_ASSIGNMENTS(
9868 P_API_VERSION => 1.0,
9869 P_INIT_MSG_LIST => FND_API.G_FALSE,
9870 P_COMMIT => FND_API.G_TRUE,
9871 P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL,
9872 P_LOAN_ID => p_loan_id,
9873 P_OWNER_OBJECT_ID => l_DISB_HEADER_REC.DISB_HEADER_ID,
9874 P_CONDITION_TYPE => 'DISBURSEMENT',
9875 X_RETURN_STATUS => L_RETURN_STATUS,
9876 X_MSG_COUNT => L_MSG_COUNT,
9877 X_MSG_DATA => L_MSG_DATA);
9878
9879 LogMessage(FND_LOG.LEVEL_STATEMENT, 'l_return_status: ' || l_return_status);
9880 IF l_return_status <> 'S' THEN
9881 LogMessage(FND_LOG.LEVEL_STATEMENT, 'Call to LNS_COND_ASSIGNMENT_PUB.DEFAULT_COND_ASSIGNMENTS failed');
9882 RAISE FND_API.G_EXC_ERROR;
9883 END IF;
9884
9885 -- END OF BODY OF API
9886 x_return_status := FND_API.G_RET_STS_SUCCESS;
9887
9888 -- Standard call to get message count and if count is 1, get message info
9889 FND_MSG_PUB.Count_And_Get(
9890 p_encoded => FND_API.G_FALSE,
9891 p_count => x_msg_count,
9892 p_data => x_msg_data);
9893
9894 LogMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME || '.' || l_api_name || ' -');
9895
9896 EXCEPTION
9897 WHEN FND_API.G_EXC_ERROR THEN
9898 ROLLBACK TO CREATE_DISBURSEMENT;
9899 x_return_status := FND_API.G_RET_STS_ERROR;
9900 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9901 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9902 ROLLBACK TO CREATE_DISBURSEMENT;
9903 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9904 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9905 WHEN OTHERS THEN
9906 ROLLBACK TO CREATE_DISBURSEMENT;
9907 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9908 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
9909 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
9910 END IF;
9911 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
9912
9913 END;
9914
9915
9916
9917 BEGIN
9918 G_LOG_ENABLED := 'N';
9919 G_MSG_LEVEL := FND_LOG.LEVEL_UNEXPECTED;
9920
9921 -- getting msg logging info
9922 G_LOG_ENABLED := NVL(FND_PROFILE.VALUE('AFLOG_ENABLED'), 'N');
9923 if (G_LOG_ENABLED = 'N') then
9924 G_MSG_LEVEL := FND_LOG.LEVEL_UNEXPECTED;
9925 else
9926 G_MSG_LEVEL := NVL(to_number(FND_PROFILE.VALUE('AFLOG_LEVEL')), FND_LOG.LEVEL_UNEXPECTED);
9927 end if;
9928
9929 LogMessage(FND_LOG.LEVEL_STATEMENT, 'G_LOG_ENABLED: ' || G_LOG_ENABLED);
9930 LogMessage(FND_LOG.LEVEL_STATEMENT, 'G_MSG_LEVEL: ' || G_MSG_LEVEL);
9931
9932 END;