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