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