DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMS_SUMM_FUNDING_PKG

Source


1 PACKAGE BODY GMS_SUMM_FUNDING_PKG AS
2 --$Header: gmsmfsfb.pls 120.1.12010000.2 2008/10/30 12:44:09 rrambati ship $
3 
4 FUNCTION ROW_EXISTS_IN_GMS_SUMM_FUNDING(X_Installment_Id IN NUMBER,
5                                         X_Project_Id     IN NUMBER,
6                                         X_Task_Id        IN NUMBER DEFAULT NULL,
7                                         X_Err_Code       OUT NOCOPY VARCHAR2,
8                                         X_Err_Stage      OUT NOCOPY VARCHAR2) RETURN BOOLEAN IS
9 Row_Check INTEGER;
10 Begin
11 fnd_msg_pub.initialize;
12   Select
13   1
14   into
15   Row_Check
16   from
17   GMS_SUMMARY_PROJECT_FUNDINGS
18   where
19   INSTALLMENT_ID = X_Installment_Id and
20   PROJECT_ID     = X_Project_Id     and
21   (TASK_ID        = X_Task_Id
22              OR
23    TASK_ID IS NULL) ;  --DECODE(X_Task_Id,NULL,NULL,X_Task_Id);
24                              X_Err_Code := 'S';
25                              RETURN TRUE;
26              EXCEPTION
27                    WHEN NO_DATA_FOUND THEN
28                              X_Err_Code := 'S';
29                              RETURN FALSE;
30                    WHEN TOO_MANY_ROWS THEN
31                         X_Err_Code := 'E';
32                  X_Err_Stage := 'There is more than one row for the Installment '||to_char(X_Installment_Id)||' and the Project '||to_char(X_Project_Id);
33                  FND_MESSAGE.SET_NAME('GMS','GMS_MULT_ROW_FOR_INST');
34                  FND_MESSAGE.SET_TOKEN('INSTALLMENT_ID',to_char(X_Installment_Id) );
35                  FND_MESSAGE.SET_TOKEN('PROJECT_ID',to_char(X_Project_Id) );
36                  FND_MESSAGE.SET_TOKEN('PROGRAM_NAME','GMS_SUMM_FUNDING_PKG : ROW_EXISTS_IN_GMS_SUMM_FUNDING');
37                  FND_MSG_PUB.add;
38                  FND_MSG_PUB.Count_And_Get(p_count => p_msg_count,
39                                            p_data  => X_Err_Stage);
40                              RETURN FALSE;
41                    WHEN OTHERS THEN
42                               X_Err_Code := 'U';
43                               X_Err_Stage := (SQLCODE||' '||SQLERRM);
44                  FND_MESSAGE.SET_NAME('GMS','GMS_UNEXPECTED_ERROR');
45                  FND_MESSAGE.SET_TOKEN('PROGRAM_NAME','GMS_SUMM_FUNDING_PKG : ROW_EXISTS_IN_GMS_SUMM_FUNDING');
46                  FND_MESSAGE.SET_TOKEN('OERRNO',SQLCODE);
47                  FND_MESSAGE.SET_TOKEN('OERRM',SQLERRM);
48                  FND_MSG_PUB.add;
49                  FND_MSG_PUB.Count_And_Get(p_count => p_msg_count,
50                                            p_data  => X_Err_Stage);
51 
52                                   RETURN FALSE;
53 END ROW_EXISTS_IN_GMS_SUMM_FUNDING;
54 
55 PROCEDURE  GET_GMS_SUMM_FUNDING(X_Installment_Id        IN NUMBER,
56                                 X_Project_Id            IN NUMBER,
57                                 X_Task_Id               IN NUMBER DEFAULT NULL,
58                                 X_Total_Funding_Amount  OUT NOCOPY NUMBER,
59                                 X_Total_Billed_Amount   OUT NOCOPY NUMBER,
60                                 X_Total_Revenue_Amount  OUT NOCOPY NUMBER,
61                                 X_Err_Code              OUT NOCOPY VARCHAR2,
62                                 X_Err_Stage             OUT NOCOPY VARCHAR2) IS
63 Begin
64 fnd_msg_pub.initialize;
65 
66 /*Bug 3643335: Added trunc for total_billed_amount and total_revenue_amount) */
67  select
68  total_funding_amount,
69  trunc(nvl(total_billed_amount,0)),
70  trunc(nvl(total_revenue_amount,0))
71  into
72  X_Total_Funding_Amount,
73  X_Total_Billed_Amount,
74  X_Total_Revenue_Amount
75  from
76  gms_summary_project_fundings gmf
77  where
78  gmf.installment_id     = X_Installment_Id and
79  gmf.project_id         = X_Project_Id     and
80  (gmf.task_id           =  X_Task_Id
81              OR
82   gmf.task_id is NULL);          -- decode(X_Task_Id,NULL,NULL,X_Task_Id);
83              X_Err_Code := 'S';
84    EXCEPTION
85     WHEN NO_DATA_FOUND THEN
86     X_Err_Code := 'E';
87     X_Err_Stage := 'No row found for Project and Task specified in GMS_SUMMARY_PROJECT_FUNDINGS';
88       X_Total_Funding_Amount := -99;
89       X_Total_Billed_Amount  := -99;
90       X_Total_Revenue_Amount := -99;
91       FND_MESSAGE.SET_NAME('GMS','GMS_NO_ACT_PRJ_TSK_IN_SF');
92       FND_MESSAGE.SET_TOKEN('PROGRAM_NAME','GMS_SUMM_FUNDING_PKG : GET_GMS_SUMM_FUNDING');
93       FND_MSG_PUB.add;
94       FND_MSG_PUB.Count_And_Get(p_count => p_msg_count,
95                                 p_data  => X_Err_Stage );
96     WHEN OTHERS THEN
97     X_Err_Code := 'U';
98     X_Err_Stage := SQLCODE||' '||SQLERRM;
99       FND_MESSAGE.SET_NAME('GMS','GMS_UNEXPECTED_ERROR');
100       FND_MESSAGE.SET_TOKEN('PROGRAM_NAME','GMS_SUMM_FUNDING_PKG : GET_GMS_SUMM_FUNDING');
101       FND_MESSAGE.SET_TOKEN('OERRNO',SQLCODE);
102       FND_MESSAGE.SET_TOKEN('OERRM',SQLERRM);
103       FND_MSG_PUB.add;
104       FND_MSG_PUB.Count_And_Get(p_count => p_msg_count,
105                                 p_data  => X_Err_Stage);
106 
107 END GET_GMS_SUMM_FUNDING;
108 
109 PROCEDURE UPDATE_GMS_SUMM_PROJ_FUNDING(X_Installment_Id      IN NUMBER,
110                                           X_Project_Id       IN NUMBER,
111                                           X_Task_Id          IN NUMBER DEFAULT NULL,
112                                           X_Funding_Amount   IN NUMBER,
113                                           X_Err_Code         OUT NOCOPY VARCHAR2,
114                                           X_Err_Stage        OUT NOCOPY VARCHAR2) IS
115 St_Total_Funding NUMBER(22,5);
116 Begin
117 fnd_msg_pub.initialize;
118 
119    update GMS_SUMMARY_PROJECT_FUNDINGS
120       set   TOTAL_FUNDING_AMOUNT = X_Funding_Amount,
121             LAST_UPDATE_DATE = SYSDATE ,
122             LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
123             LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
124       where
125             INSTALLMENT_ID   = X_Installment_Id and
126             PROJECT_ID       = X_Project_Id     and
127             (TASK_ID          = X_Task_Id
128                           OR
129              TASK_ID IS NULL );      --DECODE(X_Task_Id,NULL,NULL,X_Task_Id);
130 
131                X_Err_Code := 'S';
132              If SQL%NOTFOUND THEN
133              X_Err_Code := 'E';
134              X_Err_Stage := 'No Row to update for Installment '||to_char(X_Installment_Id)||' and Project '||to_char(X_Project_Id);
135        FND_MESSAGE.SET_NAME('GMS','GMS_NO_ROW_FOR_PRJ_TSK_SF');
136        FND_MESSAGE.SET_TOKEN('PROGRAM_NAME','GMS_SUMM_FUNDING_PKG : UPDATE_GMS_SUMM_PROJ_FUNDING');
137        FND_MESSAGE.SET_TOKEN('INSTALLMENT_ID',to_char(X_Installment_Id) );
138        FND_MESSAGE.SET_TOKEN('PROJECT_ID', to_char(X_Project_Id) );
139        FND_MSG_PUB.add;
140        FND_MSG_PUB.Count_And_Get(p_count  =>  p_msg_count,
141                                  p_data   =>  X_Err_Stage );
142              End If;
143 
144 END UPDATE_GMS_SUMM_PROJ_FUNDING;
145 
146 Procedure INSERT_GMS_SUMM_PROJ_FUNDING(X_Installment_Id IN NUMBER,
147                                        X_Project_Id     IN NUMBER,
148                                        X_Task_Id        IN NUMBER DEFAULT NULL,
149                                        X_Funding_Amount IN NUMBER,
150                                        X_Err_Code       OUT NOCOPY VARCHAR2,
151                                        X_Err_Stage      OUT NOCOPY VARCHAR2) IS
152 Begin
153 fnd_msg_pub.initialize;
154 
155    INSERT INTO GMS_SUMMARY_PROJECT_FUNDINGS
156    (INSTALLMENT_ID ,
157     PROJECT_ID,
158     TASK_ID ,
159     TOTAL_FUNDING_AMOUNT ,
160     LAST_UPDATE_DATE,
161     LAST_UPDATED_BY ,
162     CREATION_DATE,
163     CREATED_BY,
164     LAST_UPDATE_LOGIN)
165    VALUES
166    (X_Installment_Id,
167     X_Project_Id,
168     X_Task_Id,
169     X_Funding_Amount,
170     SYSDATE,
171     FND_GLOBAL.USER_ID,
172     SYSDATE,
173     FND_GLOBAL.USER_ID,
174     FND_GLOBAL.LOGIN_ID);
175                     X_Err_Code := 'S';
176    EXCEPTION
177 
178        WHEN OTHERS THEN
179            X_Err_Code := 'U';
180                  FND_MESSAGE.SET_NAME('GMS','GMS_UNEXPECTED_ERROR');
181                  FND_MESSAGE.SET_TOKEN('PROGRAM_NAME','GMS_SUMM_FUNDING_PKG : INSERT_GMS_SUMM_PROJ_FUNDING');
182                  FND_MESSAGE.SET_TOKEN('OERRNO',SQLCODE);
183                  FND_MESSAGE.SET_TOKEN('OERRM',SQLERRM);
184                  FND_MSG_PUB.add;
185                  FND_MSG_PUB.Count_And_Get(p_count => p_msg_count,
186                                            p_data  => X_Err_Stage);
187 
188 End INSERT_GMS_SUMM_PROJ_FUNDING;
189 
190 Procedure CREATE_GMS_SUMMARY_FUNDING(X_Installment_Id IN NUMBER,
191                                        X_Project_Id     IN NUMBER,
192                                        X_Task_Id        IN NUMBER DEFAULT NULL,
193                                        X_Funding_Amount IN NUMBER,
194                                        RETCODE          OUT NOCOPY VARCHAR2,
195                                        ERRBUF           OUT NOCOPY VARCHAR2) IS
196 X_Err_Code VARCHAR2(1);
197 X_Err_Stage VARCHAR2(200);
198 X_Total_Funding_Amount NUMBER(22,5);
199 X_Total_Billed_Amount  NUMBER(22,5);
200 X_Total_Revenue_Amount NUMBER(22,5);
201 
202 Begin
203  If ROW_EXISTS_IN_GMS_SUMM_FUNDING(X_Installment_Id,
204                                         X_Project_Id,
205                                         X_Task_Id,
206                                         X_Err_Code,
207                                         X_Err_Stage) THEN
208 
209         GET_GMS_SUMM_FUNDING(X_Installment_Id,
210                              X_Project_Id,
211                              X_Task_Id,
212                              X_Total_Funding_Amount,
213                              X_Total_Billed_Amount,
214                              X_Total_Revenue_Amount,
215                              X_Err_Code,
216                              X_Err_Stage);
217                If X_Err_Code <> 'S' then
218                  RAISE FND_API.G_EXC_ERROR;
219                End If;
220 
221           X_Total_Funding_Amount := X_Total_Funding_Amount + X_Funding_Amount;
222                UPDATE_GMS_SUMM_PROJ_FUNDING(X_Installment_Id,
223                                             X_Project_Id,
224                                             X_Task_Id,
225                                             X_Total_Funding_Amount,
226                                             X_Err_Code,
227                                             X_Err_Stage);
228                    If X_Err_Code <> 'S' then
229                      RAISE FND_API.G_EXC_ERROR;
230                    End If;
231  Else
232      If X_Err_Code = 'S' then
233          INSERT_GMS_SUMM_PROJ_FUNDING(X_Installment_Id,
234                                        X_Project_Id,
235                                        X_Task_Id,
236                                        X_Funding_Amount,
237                                        X_Err_Code,
238                                        X_Err_Stage);
239 
240                     If X_Err_Code <> 'S' then
241                      RAISE FND_API.G_EXC_ERROR;
242                    End If;
243      Else
244            RAISE FND_API.G_EXC_ERROR;
245      End If;
246  End If;
247 
248 
249 EXCEPTION
250  WHEN FND_API.G_EXC_ERROR THEN
251    RETCODE := X_Err_Code;
252    ERRBUF  := X_Err_Stage;
253 
254 END CREATE_GMS_SUMMARY_FUNDING;
255 
256 Procedure DELETE_GMS_SUMMARY_FUNDING(X_Installment_Id   IN NUMBER,
257                                      X_Project_Id       IN NUMBER,
258                                      X_Task_Id          IN NUMBER DEFAULT NULL,
259                                      X_Funding_Amount   IN NUMBER,
260                                      RETCODE            OUT NOCOPY VARCHAR2,
261                                      ERRBUF             OUT NOCOPY VARCHAR2) IS
262 -- Cursor is added as fix for bug 1583819
263 cursor Hard_Limit_Flag_cr is
264    	 select  hard_limit_flag,invoice_limit_flag  /*Bug 6642901*/
265 	 from    gms_awards  awd,
266  	 	 gms_installments_v ins
267  	 where   awd.award_id=ins.award_id
268 	 and     ins.installment_id = X_Installment_Id;
269 X_Hard_Limit_Flag VARCHAR2(1);  --Added to fix bug 1583819
270 X_Invoice_Limit_Flag VARCHAR2(1); /*Bug 6642901*/
271 X_Err_Code VARCHAR2(1);
272 X_Err_Stage VARCHAR2(200);
273 X_Total_Funding_Amount NUMBER(22,5);
274 X_Total_Billed_Amount  NUMBER(22,5);
275 X_Total_Revenue_Amount NUMBER(22,5);
276 --X_funding_exists VARCHAR2(1) := 'Y';
277 
278 -- Bug 2270436 : Added function gms_funding_exists
279 -- This function checks for existence of any record in gms_project_fundings before
280 -- deleting records from gms_summary_project_fundings
281 
282 FUNCTION gms_funding_exists (p_installment_id NUMBER, p_project_id NUMBER, p_task_id NUMBER)
283    RETURN BOOLEAN
284 IS
285    CURSOR c_funding_exists
286    IS SELECT 1 FROM DUAL
287       WHERE EXISTS (SELECT 1
288         	    FROM gms_project_fundings
289        		    WHERE installment_id = p_installment_id
290          	    AND project_id = p_project_id
291          	    AND nvl(task_id,0) = nvl(p_task_id,0));
292 
293 
294    x_dummy                       NUMBER := 0;
295 BEGIN
296    OPEN c_funding_exists;
297    FETCH c_funding_exists INTO x_dummy;
298    CLOSE c_funding_exists;
299 
300    IF x_dummy <> 0
301    THEN
302       RETURN TRUE;
303    ELSE
304       RETURN FALSE;
305    END IF;
306 END;
307 
308 Begin
309 
310 fnd_msg_pub.initialize;
311 	  -- Assume project funding row has been deleted.
312 
313           GET_GMS_SUMM_FUNDING(X_Installment_Id,
314                              X_Project_Id,
315                              X_Task_Id,
316                              X_Total_Funding_Amount,
317                              X_Total_Billed_Amount,
318                              X_Total_Revenue_Amount,
319                              X_Err_Code,
320                              X_Err_Stage);
321                If X_Err_Code <> 'S' then
322                  RAISE FND_API.G_EXC_ERROR;
323                End If;
324 
325 -- Debashis. This does not seem to be correct. Where is task id ? Use the function gms_funding_exists instead. Bug 2270436
326 /*
327 		Begin
328 		select 'Y' into x_funding_exists
329 		from dual
330 		where exists ( select 1 from gms_project_fundings
331 			       where  installment_id = x_installment_id
332 			       and project_id  = x_project_id);
333 		exception
334 		when no_data_found then
335 		x_funding_exists := 'N';
336 		End;
337 */
338 --Debashis
339 
340  -- Cursor is added as fix for bug 1583819
341        open  Hard_Limit_Flag_cr;
342        fetch Hard_Limit_Flag_cr
343        into  X_Hard_Limit_Flag,X_Invoice_Limit_Flag;   /*Bug 6445688*/
344        close Hard_Limit_Flag_cr;
345 -- Cursor is added as fix for bug 1583819
346 
347 /* Bug 6445688. Modified code to split the hard limit logic separately for revenue limit and invoice limit.
348    Also replaced the single message with 2 separate revenue/invoice specific error messages. */
349       If (X_Hard_Limit_Flag ='Y') and
350           ( /*((X_Total_Funding_Amount - X_Funding_Amount) < X_Total_Billed_Amount)
351                                           OR commented for bug 6642901*/
352            ((X_Total_Funding_Amount - X_Funding_Amount) < X_Total_Revenue_Amount)
353          ) then
354                      X_Err_Code := 'E';
355 /*                     X_Err_Stage := 'Total Funding Amount cannot go less than Total Billed Amount or Total Revenue Amount';
356         FND_MESSAGE.SET_NAME('GMS','GMS_FUND_LESS_REV_BILL');  commented for bug 6642901*/
357                              X_Err_Stage := 'You cannot delete the funding line, as this will cause total funds to be less than the total revenue amount';
358         FND_MESSAGE.SET_NAME('GMS','GMS_FUND_LESS_REV');
359         FND_MSG_PUB.add;
360         FND_MSG_PUB.Count_And_Get(p_count   =>   p_msg_count,
361                                   p_data    =>   X_Err_Stage );
362 
363                            RAISE FND_API.G_EXC_ERROR;
364       Elsif (X_Invoice_Limit_Flag ='Y') and ((X_Total_Funding_Amount - X_Funding_Amount) < X_Total_Billed_Amount) then
365                      X_Err_Code := 'E';
366                      X_Err_Stage := 'You cannot delete the funding line, as this will cause total funds to be less than the total billed amount';
367         FND_MESSAGE.SET_NAME('GMS','GMS_FUND_LESS_BILL');
368         FND_MSG_PUB.add;
369         FND_MSG_PUB.Count_And_Get(p_count   =>   p_msg_count,
370                                   p_data    =>   X_Err_Stage );
371 
372                            RAISE FND_API.G_EXC_ERROR;
373       End If;
374 
375 
376 	  If (((X_Total_Funding_Amount - X_Funding_Amount) = 0)
377 		 and not gms_funding_exists(X_installment_id,x_project_id,x_task_id))	-- Bug 2270436
378 	   then
379 	  	DELETE FROM GMS_SUMMARY_PROJECT_FUNDINGS
380 		WHERE
381 	        INSTALLMENT_ID   = X_Installment_Id and
382             	PROJECT_ID       = X_Project_Id     and
383             	(TASK_ID          = X_Task_Id
384                       OR
385                  TASK_ID IS NULL ); -- DECODE(X_Task_Id,NULL,NULL,X_Task_Id);
386                 X_Err_Code := 'S';
387 
388                 If SQL%ROWCOUNT = 0 THEN
389                    X_Err_Code := 'E';
390                    X_Err_Stage := 'No Row to delete for Installment '||to_char(X_Installment_Id)||' and Project '||to_char(X_Project_Id);
391 
392        FND_MESSAGE.SET_NAME('GMS','GMS_NO_ROW_FOR_PRJ_TSK_SF');
393        FND_MESSAGE.SET_TOKEN('PROGRAM_NAME','GMS_SUMM_FUNDING_PKG : DELETE_GMS_SUMM_PROJ_FUNDING');
394        FND_MESSAGE.SET_TOKEN('INSTALLMENT_ID',to_char(X_Installment_Id) );
395        FND_MESSAGE.SET_TOKEN('PROJECT_ID', to_char(X_Project_Id) );
396        FND_MSG_PUB.add;
397        FND_MSG_PUB.Count_And_Get(p_count  =>  p_msg_count,
398                                  p_data   =>  X_Err_Stage );
399                 End If;
400 	  Else
401 		X_Total_Funding_Amount := (X_Total_Funding_Amount - X_Funding_Amount);
402                 UPDATE_GMS_SUMM_PROJ_FUNDING(X_Installment_Id,
403                                              X_Project_Id,
404                                              X_Task_Id,
405                                              X_Total_Funding_Amount,
406                                              X_Err_Code,
407                                              X_Err_Stage);
408                 If X_Err_Code <> 'S' then
409                   RAISE FND_API.G_EXC_ERROR;
410                 End If;
411 	  end if;
412 
413 EXCEPTION
414  WHEN FND_API.G_EXC_ERROR THEN
415    RETCODE := X_Err_Code;
416    ERRBUF  := X_Err_Stage;
417 
418 End DELETE_GMS_SUMMARY_FUNDING;
419 
420 
421 Procedure UPDATE_GMS_SUMMARY_FUNDING(X_Installment_Id   IN NUMBER,
422                                      X_Project_Id       IN NUMBER,
423                                      X_Task_Id          IN NUMBER DEFAULT NULL,
424 				     X_old_amount	IN NUMBER,
425 				     X_new_amount	IN NUMBER,
426                                      RETCODE            OUT NOCOPY VARCHAR2,
427                                      ERRBUF             OUT NOCOPY VARCHAR2) IS
428 X_Err_Code VARCHAR2(1);
429 X_Err_Stage VARCHAR2(200);
430 X_Total_Funding_Amount NUMBER(22,5);
431 X_Total_Billed_Amount  NUMBER(22,5);
432 X_Total_Revenue_Amount NUMBER(22,5);
433 
434 -- For Bug fix 3150477
435 CURSOR 	 hard_limit_flag_cr IS
436          SELECT   	hard_limit_flag,invoice_limit_flag  /*Bug 6642901*/
437          FROM    	gms_awards  awd,
438                  	gms_installments_v ins
439          WHERE   	awd.award_id=ins.award_id
440          AND      	ins.installment_id = X_Installment_Id;
441 
442 X_Hard_Limit_Flag VARCHAR2(1);
443 X_Invoice_Limit_Flag VARCHAR2(1);  /*Bug 6642901*/
444 --End of bug fix 3150477
445 
446 Begin
447           GET_GMS_SUMM_FUNDING(X_Installment_Id,
448                                X_Project_Id,
449                                X_Task_Id,
450                                X_Total_Funding_Amount,
451                                X_Total_Billed_Amount,
452                                X_Total_Revenue_Amount,
453                                X_Err_Code,
454                                X_Err_Stage);
455                If X_Err_Code <> 'S' then
456                  RAISE FND_API.G_EXC_ERROR;
457                End If;
458 
459 -- For bug 3150477
460        OPEN hard_limit_flag_cr;
461        FETCH hard_limit_flag_cr INTO  X_Hard_Limit_Flag,X_Invoice_Limit_Flag; /*Bug 6642901*/
462        CLOSE hard_limit_flag_cr;
463 -- End of Bug fix  3150477
464 
465 	  X_Total_Funding_Amount := X_Total_Funding_Amount + ( X_new_amount  -  X_old_amount);
466 /* Bug 6445688. Modified code to split the hard limit logic separately for revenue limit and invoice limit.
467    Also replaced the single message with 2 separate revenue/invoice specific error messages. */
468 
469       --Added hard limit flag check for bug 3150477
470        If (X_Hard_Limit_Flag ='Y') AND
471 	( /*(X_Total_Funding_Amount < X_Total_Billed_Amount) OR  Commented for Bug 6642901*/
472             (X_Total_Funding_Amount < X_Total_Revenue_Amount)
473           ) then
474                   X_Err_Code   := 'E';
475 /*                  X_Err_Stage  := 'Total Funding cannot go less than the Total Revenue Amount or Total Billed Amount';
476         FND_MESSAGE.SET_NAME('GMS','GMS_FUND_LESS_REV_BILL'); Commented for bug 6445688*/
477                   X_Err_Stage  := 'You cannot delete the funding line, as this will cause total funds to be less than the total revenue amount';
478         FND_MESSAGE.SET_NAME('GMS','GMS_FUND_LESS_REV');
479         FND_MSG_PUB.add;
480         FND_MSG_PUB.Count_And_Get(p_count   =>   p_msg_count,
481                                   p_data    =>   X_Err_Stage );
482                         RAISE FND_API.G_EXC_ERROR;
483        Elsif (X_Invoice_Limit_Flag ='Y') AND (X_Total_Funding_Amount < X_Total_Billed_Amount) then
484                   X_Err_Code   := 'E';
485                   X_Err_Stage  := 'You cannot delete the funding line, as this will cause total funds to be less than the total billed amount';
486         FND_MESSAGE.SET_NAME('GMS','GMS_FUND_LESS_BILL');
487         FND_MSG_PUB.add;
488         FND_MSG_PUB.Count_And_Get(p_count   =>   p_msg_count,
489                                   p_data    =>   X_Err_Stage );
490                         RAISE FND_API.G_EXC_ERROR;
491        Else
492           UPDATE_GMS_SUMM_PROJ_FUNDING(X_Installment_Id,
493                                        X_Project_Id,
494                                        X_Task_Id,
495                                        X_Total_Funding_Amount,
496                                        X_Err_Code,
497                                        X_Err_Stage);
498                If X_Err_Code <> 'S' then
499                  RAISE FND_API.G_EXC_ERROR;
500                End If;
501        End If;
502 
503 
504 
505 EXCEPTION
506  WHEN FND_API.G_EXC_ERROR THEN
507    RETCODE := X_Err_Code;
508    ERRBUF  := X_Err_Stage;
509 
510 End UPDATE_GMS_SUMMARY_FUNDING;
511 
512 End GMS_SUMM_FUNDING_PKG;