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