DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGW_BUDGET_PERIODS_PVT

Source


1 PACKAGE BODY IGW_BUDGET_PERIODS_PVT AS
2 --$Header: igwvbprb.pls 115.14 2002/11/14 18:41:02 vmedikon ship $
3 
4 
5 procedure check_duplicate_period(p_proposal_id         NUMBER
6                                 ,p_version_id         NUMBER
7                                 ,p_budget_period_id   NUMBER
8                                 ,x_return_status  OUT NOCOPY VARCHAR2)  is
9   l_exists      VARCHAR2(1);
10   l_api_name                    VARCHAR2(30)  := 'CHECK_DUPLICATE_PERIOD';
11 begin
12   select '1'
13   into   l_exists
14   from   igw_budget_periods
15   where  proposal_id = p_proposal_id
16   and    version_id =  p_version_id
17   and    budget_period_id = p_budget_period_id;
18 
19   if l_exists = '1' then
20     x_return_status := Fnd_Api.G_Ret_Sts_Error;
21     Fnd_Message.Set_Name('IGW','IGW_DUPLICATE_PERIOD');
22     Fnd_Message.set_token('PERIOD_ID', p_budget_period_id);
23     Fnd_Msg_Pub.Add;
24   end if;
25 exception
26   when no_data_found then
27     null;
28   when others then
29     x_return_status := Fnd_Api.G_Ret_Sts_Unexp_Error;
30     Fnd_Msg_Pub.Add_Exc_Msg(
31       p_pkg_name       => G_package_name,
32       p_procedure_name => l_api_name);
33     RAISE Fnd_Api.G_Exc_Unexpected_Error;
34 end;
35 
36 ------------------------------------------------------------------------------------------
37 procedure validate_period_date (p_proposal_id         NUMBER
38                                 ,p_version_id         NUMBER
39                                 ,p_budget_period_id   NUMBER
40                                 ,p_start_date         DATE
41                                 ,p_end_date           DATE
42                                 ,x_return_status  OUT NOCOPY VARCHAR2) is
43 
44   cursor c_version is
45   select start_date, end_date
46   from   igw_budgets
47   where  proposal_id = p_proposal_id
48   and    version_id =  p_version_id;
49 
50   cursor c_budget_line is
51   select min(pbpd.start_date)
52   ,      max(pbpd.end_date)
53   from   igw_budget_details            pbd
54   ,      igw_budget_personnel_details  pbpd
55   where  pbd.proposal_id = p_proposal_id
56   and    pbd.version_id = p_version_id
57   and    pbd.budget_period_id = p_budget_period_id
58   and    pbd.line_item_id = pbpd.line_item_id;
59 
60   l_api_name                    VARCHAR2(30)  := 'VALIDATE_PERIOD_DATE';
61   l_version_start_date          DATE;
62   l_version_end_date            DATE;
63   l_personnel_start_date        DATE;
64   l_personnel_end_date          DATE;
65 begin
66   open c_version;
67   fetch c_version into l_version_start_date, l_version_end_date;
68   close c_version;
69 
70   if p_start_date < l_version_start_date OR p_end_date > l_version_end_date then
71     x_return_status := Fnd_Api.G_Ret_Sts_Error;
72     Fnd_Message.Set_Name('IGW','IGW_PERIOD_OUTSIDE_VERSION');
73     Fnd_Msg_Pub.Add;
74   end if;
75 
76   open c_budget_line;
77   fetch c_budget_line into l_personnel_start_date, l_personnel_end_date;
78   close c_budget_line;
79 
80   if p_start_date > l_personnel_start_date OR p_end_date < l_personnel_end_date then
81     x_return_status := Fnd_Api.G_Ret_Sts_Error;
82     Fnd_Message.Set_Name('IGW','IGW_PERIOD_OUTSIDE_PERSONNEL');
83     Fnd_Msg_Pub.Add;
84   end if;
85 exception
86   when others then
87     x_return_status := Fnd_Api.G_Ret_Sts_Unexp_Error;
88     Fnd_Msg_Pub.Add_Exc_Msg(
89       p_pkg_name       => G_package_name,
90       p_procedure_name => l_api_name);
91     RAISE Fnd_Api.G_Exc_Unexpected_Error;
92 end;
93 
94 --------------------------------------------------------------------------------
95 
96 procedure validate_date_overlap(p_proposal_id        IN  NUMBER
97                                 ,p_version_id        IN  NUMBER
98                                 ,p_budget_period_id  IN  NUMBER
99                                 ,p_date              IN  DATE
100                                 ,x_return_status     OUT NOCOPY VARCHAR2)  is
101   x_dummy varchar2(1);
102   l_api_name                    VARCHAR2(30)  := 'VALIDATE_PERIOD_DATE';
103 begin
104     select  '1'
105     into    x_dummy
106     from    igw_budget_periods
107     where   proposal_id = p_proposal_id
108     and	    version_id =  p_version_id
109     and	    p_date  BETWEEN start_date and end_date
110     and	    budget_period_id <> p_budget_period_id
111     and     rownum < 2;
112 
113     fnd_message.set_name('IGW', 'IGW_BUDGET_DATE_OVERLAP');
114     Fnd_Msg_Pub.Add;
115 
116 exception
117   when no_data_found then null;
118   when others then
119     x_return_status := Fnd_Api.G_Ret_Sts_Unexp_Error;
120     Fnd_Msg_Pub.Add_Exc_Msg(
121       p_pkg_name       => G_package_name,
122       p_procedure_name => l_api_name);
123     RAISE Fnd_Api.G_Exc_Unexpected_Error;
124 end validate_date_overlap;
125 -------------------------------------------------------------------------------
126 procedure create_budget_period
127        (p_init_msg_list            IN  VARCHAR2   := FND_API.G_TRUE
128         ,p_commit                  IN  VARCHAR2   := FND_API.G_FALSE
129         ,p_validate_only           IN  VARCHAR2   := FND_API.G_TRUE
130         ,p_proposal_id		       NUMBER
131 	,p_version_id		       NUMBER
132         ,p_budget_period_id            NUMBER
133   	,p_start_date		       DATE
134   	,p_end_date		       DATE
135   	,p_total_cost		       NUMBER     := 0
136   	,p_total_direct_cost	       NUMBER     := 0
137 	,p_total_indirect_cost	       NUMBER     := 0
138 	,p_cost_sharing_amount	       NUMBER     := 0
139 	,p_underrecovery_amount	       NUMBER     := 0
140 	,p_total_cost_limit	       NUMBER     := 0
141 	,p_program_income              VARCHAR2   := 0
142 	,p_program_income_source       VARCHAR2
143         ,x_rowid                   OUT NOCOPY ROWID
144         ,x_return_status           OUT NOCOPY VARCHAR2
145         ,x_msg_count               OUT NOCOPY NUMBER
146         ,x_msg_data                OUT NOCOPY VARCHAR2) IS
147 
148   l_api_name          VARCHAR2(30)    := 'CREATE_BUDGET_PERIOD';
149   l_start_date        DATE            := p_start_date;
150   l_end_date          DATE            := p_end_date;
151   l_version_id        NUMBER          := p_version_id;
152   l_budget_period_id  NUMBER          := p_budget_period_id;
153   l_total_cost        NUMBER          := p_total_cost;
154 
155   l_return_status     VARCHAR2(1);
156   l_msg_count         NUMBER;
157   l_data              VARCHAR2(250);
158   l_msg_index_out     NUMBER;
159 
160 BEGIN
161     IF p_commit = FND_API.G_TRUE THEN
162       SAVEPOINT create_budget_version;
163     END IF;
164 
165     if FND_API.to_boolean(nvl(p_init_msg_list, FND_API.G_FALSE)) then
166       fnd_msg_pub.initialize;
167     end if;
168 
169     x_return_status := 'S';
170 
171     check_duplicate_period(p_proposal_id
172                            ,p_version_id
173                            ,p_budget_period_id
174                            ,x_return_status  );
175     if l_return_status = FND_API.G_RET_STS_ERROR     THEN
176       x_return_status := 'E';
177     end if;
178 
179     IGW_UTILS.Check_Date_Validity(
180                            p_context_field    => 'BUDGET_PERIOD_DATE'
181                            ,p_start_date      => nvl(p_start_date, sysdate-1)
182                            ,p_end_date        => nvl(p_end_date, sysdate+1)
183                            ,x_return_status   => l_return_status);
184 
185     if l_return_status = FND_API.G_RET_STS_ERROR     THEN
186       x_return_status := 'E';
187     end if;
188 
189     validate_period_date(p_proposal_id
190                          ,p_version_id
191                          ,p_budget_period_id
192                          ,p_start_date
193                          ,p_end_date
194                          ,l_return_status);
195 
196     if l_return_status = FND_API.G_RET_STS_ERROR     THEN
197       x_return_status := 'E';
198     end if;
199 
200     validate_date_overlap(p_proposal_id
201                          ,p_version_id
202                          ,p_budget_period_id
203                          ,p_start_date
204                          ,l_return_status);
205 
206     if l_return_status = FND_API.G_RET_STS_ERROR     THEN
207       x_return_status := 'E';
208     end if;
209 
210 
211     l_msg_count := FND_MSG_PUB.count_msg;
212     If l_msg_count > 0 THEN
213       x_msg_count := l_msg_count;
214       If l_msg_count = 1 THEN
215         fnd_msg_pub.get
216          (p_encoded        => FND_API.G_TRUE ,
217           p_msg_index      => 1,
218           p_data           => l_data,
219           p_msg_index_out  => l_msg_index_out );
220 
221           x_msg_data := l_data;
222       End if;
223       RAISE  FND_API.G_EXC_ERROR;
224     End if;
225 
226     x_return_status := 'S';
227 
228     if (NOT FND_API.TO_BOOLEAN (p_validate_only)) then
229 
230       l_total_cost := nvl(p_total_indirect_cost,0) + nvl(p_total_direct_Cost,0);
231       igw_budget_periods_tbh.insert_row(
232 	p_proposal_id             => p_proposal_id
233 	,p_version_id             => p_version_id
234         ,p_budget_period_id       => p_budget_period_id
235 	,p_start_date             => p_start_date
236 	,p_end_date               => p_end_date
237 	,p_total_cost             => l_total_cost
238 	,p_total_direct_cost      => p_total_direct_cost
239 	,p_total_indirect_cost    => p_total_indirect_cost
240 	,p_cost_sharing_amount    => p_cost_sharing_amount
241 	,p_underrecovery_amount   => p_underrecovery_amount
242 	,p_total_cost_limit       => p_total_cost_limit
243 	,p_program_income         => p_program_income
244 	,p_program_income_source  => p_program_income_source
245         ,x_rowid                  => x_rowid
246         ,x_return_status          => l_return_status);
247 
248        x_return_status := l_return_status;
249 
250 	IGW_BUDGET_OPERATIONS.recalculate_budget (
251                                 p_proposal_id         => p_proposal_id
252 				,p_version_id         => p_version_id
253                                 ,p_budget_period_id   => p_budget_period_id
254 				,x_return_status      => x_return_status
255 				,x_msg_data           => x_msg_data
256 				,x_msg_count          => x_msg_count);
257 
258 
259     end if; -- p_validate_only = 'Y'
260 
261     l_msg_count := FND_MSG_PUB.count_msg;
262     If l_msg_count > 0 THEN
263       x_msg_count := l_msg_count;
264       If l_msg_count = 1 THEN
265         fnd_msg_pub.get
266          (p_encoded        => FND_API.G_TRUE ,
267           p_msg_index      => 1,
268           p_data           => l_data,
269           p_msg_index_out  => l_msg_index_out );
270 
271           x_msg_data := l_data;
272       End if;
273       RAISE  FND_API.G_EXC_ERROR;
274     End if;
275 
276     x_return_status := FND_API.G_RET_STS_SUCCESS;
277 
278 EXCEPTION WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
279     IF p_commit = FND_API.G_TRUE THEN
280        ROLLBACK TO create_budget_version;
281     END IF;
282     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
283     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_package_name,
284                             p_procedure_name => l_api_name,
285                             p_error_text     => SUBSTRB(SQLERRM,1,240));
286     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
287     fnd_msg_pub.count_and_get(p_count => x_msg_count
288                               ,p_data => x_msg_data);
289 
290 WHEN FND_API.G_EXC_ERROR THEN
291     IF p_commit = FND_API.G_TRUE THEN
292        ROLLBACK TO create_budget_version;
293     END IF;
294     x_return_status := 'E';
295 
296 WHEN OTHERS THEN
297     IF p_commit = FND_API.G_TRUE THEN
298        ROLLBACK TO create_budget_version;
299     END IF;
300     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
301     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_package_name,
302                             p_procedure_name => l_api_name,
303                             p_error_text     => SUBSTRB(SQLERRM,1,240));
304     fnd_msg_pub.count_and_get(p_count => x_msg_count
305                               ,p_data => x_msg_data);
306     RAISE;
307 
308 
309 END; --CREATE BUDGET VERSION
310 
311 
312 ------------------------------------------------------------------------------------------
313 procedure update_budget_period
314        (p_init_msg_list            IN  VARCHAR2   := FND_API.G_TRUE
315         ,p_commit                  IN  VARCHAR2   := FND_API.G_FALSE
316         ,p_validate_only           IN  VARCHAR2   := FND_API.G_TRUE
317         ,p_proposal_id		       NUMBER
318 	,p_version_id		       NUMBER
319         ,p_budget_period_id            NUMBER
320   	,p_start_date		       DATE
321   	,p_end_date		       DATE
322   	,p_total_cost		       NUMBER
323   	,p_total_direct_cost	       NUMBER
324 	,p_total_indirect_cost	       NUMBER
325 	,p_cost_sharing_amount	       NUMBER
326 	,p_underrecovery_amount	       NUMBER
327 	,p_total_cost_limit	       NUMBER
328 	,p_program_income              VARCHAR2
329 	,p_program_income_source       VARCHAR2
330         ,p_record_version_number   IN  NUMBER
331         ,p_rowid                   IN  ROWID
332         ,x_return_status           OUT NOCOPY VARCHAR2
333         ,x_msg_count               OUT NOCOPY NUMBER
334         ,x_msg_data                OUT NOCOPY VARCHAR2) IS
335 
336   l_api_name          VARCHAR2(30)    := 'UPDATE_BUDGET_PERIOD';
337   l_start_date        DATE            := p_start_date;
338   l_end_date          DATE            := p_end_date;
339   l_version_id        NUMBER          := p_version_id;
340   l_budget_period_id  NUMBER          := p_budget_period_id;
341   l_orig_budget_period_id  NUMBER     := p_budget_period_id;
342   l_total_cost        NUMBER          := p_total_cost;
343 
344   l_return_status     VARCHAR2(1);
345   l_msg_count         NUMBER;
346   l_data              VARCHAR2(250);
347   l_msg_index_out     NUMBER;
348   l_dummy             VARCHAR2(1);
349 
350 BEGIN
351     IF p_commit = FND_API.G_TRUE THEN
352       SAVEPOINT update_budget_version;
353     END IF;
354 
355     if FND_API.to_boolean(nvl(p_init_msg_list, FND_API.G_FALSE)) then
356       fnd_msg_pub.initialize;
357      end if;
358 
359     x_return_status := 'S';
360 
361 
362     if p_rowid is not null then
363       select budget_period_id
364       into   l_orig_budget_period_id
365       from   igw_budget_periods
366       where  rowid = p_rowid;
367     end if;
368 
369 
370     /* check for duplicate period if the new period is different from the old period */
371     if l_orig_budget_period_id <> p_budget_period_id then
372       check_duplicate_period(p_proposal_id
373                            ,p_version_id
374                            ,p_budget_period_id
375                            ,x_return_status  );
376       if l_return_status = FND_API.G_RET_STS_ERROR     THEN
377         x_return_status := 'E';
378       end if;
379     end if;
380 
381     IGW_UTILS.Check_Date_Validity(
382                            p_context_field    => 'BUDGET_PERIOD_DATE'
383                            ,p_start_date      => nvl(p_start_date, sysdate-1)
384                            ,p_end_date        => nvl(p_end_date, sysdate+1)
385                            ,x_return_status   => l_return_status);
386 
387     IF l_return_status = FND_API.G_RET_STS_ERROR     THEN
388       x_return_status := 'E';
389     END IF;
390 
391     validate_period_date(p_proposal_id
392                          ,p_version_id
393                          ,p_budget_period_id
394                          ,p_start_date
395                          ,p_end_date
396                          ,l_return_status);
400     end if;
397 
398     if l_return_status = FND_API.G_RET_STS_ERROR     THEN
399       x_return_status := 'E';
401 
402     validate_date_overlap(p_proposal_id
403                          ,p_version_id
404                          ,l_orig_budget_period_id
405                          ,p_start_date
406                          ,l_return_status);
407 
408     if l_return_status = FND_API.G_RET_STS_ERROR     THEN
409       x_return_status := 'E';
410     end if;
411 
412 
413 
414 
415     l_msg_count := FND_MSG_PUB.count_msg;
416     If l_msg_count > 0 THEN
417       x_msg_count := l_msg_count;
418       If l_msg_count = 1 THEN
419         fnd_msg_pub.get
420          (p_encoded        => FND_API.G_TRUE ,
421           p_msg_index      => 1,
422           p_data           => l_data,
423           p_msg_index_out  => l_msg_index_out );
424 
425           x_msg_data := l_data;
426       End if;
427       RAISE  FND_API.G_EXC_ERROR;
428     End if;
429 
430     BEGIN
431       SELECT 'x' INTO l_dummy
432       FROM   igw_budget_periods
433       WHERE  ((proposal_id  = p_proposal_id  AND   version_id = p_version_id
434                        AND budget_period_id = p_budget_period_id)
435 	 OR rowid = p_rowid)
436       AND record_version_number  = p_record_version_number;
437     EXCEPTION
438       WHEN NO_DATA_FOUND THEN
439         FND_MESSAGE.SET_NAME('IGW','IGW_SS_RECORD_CHANGED');
440         FND_MSG_PUB.Add;
441         x_msg_data := 'IGW_SS_RECORD_CHANGED';
442         x_return_status := 'E' ;
443     END;
444 
445     l_msg_count := FND_MSG_PUB.count_msg;
446 
447       IF l_msg_count > 0 THEN
448          x_msg_count := l_msg_count;
449          x_return_status := 'E';
450          If l_msg_count = 1 THEN
451           fnd_msg_pub.get
452            (p_encoded        => FND_API.G_TRUE ,
453             p_msg_index      => 1,
454             p_data           => l_data,
455             p_msg_index_out  => l_msg_index_out );
456 
457             x_msg_data := l_data;
458          End if;
459          RAISE  FND_API.G_EXC_ERROR;
460       END IF;
461 
462     if (NOT FND_API.TO_BOOLEAN (p_validate_only)) then
463 
464       l_total_cost := nvl(p_total_indirect_cost,0) + nvl(p_total_direct_Cost,0);
465 
466       igw_budget_periods_tbh.update_row(
467         p_rowid                   =>  p_rowid
468 	,p_proposal_id            => p_proposal_id
469 	,p_version_id             => p_version_id
470         ,p_budget_period_id       => p_budget_period_id
471 	,p_start_date             => p_start_date
472 	,p_end_date               => p_end_date
473 	,p_total_cost             => l_total_cost
474 	,p_total_direct_cost      => p_total_direct_cost
475 	,p_total_indirect_cost    => p_total_indirect_cost
476 	,p_cost_sharing_amount    => p_cost_sharing_amount
477 	,p_underrecovery_amount   => p_underrecovery_amount
478 	,p_total_cost_limit       => p_total_cost_limit
479 	,p_program_income         => p_program_income
480 	,p_program_income_source  => p_program_income_source
481         ,p_record_version_number  => p_record_version_number
482         ,x_return_status          => l_return_status);
483 
484        x_return_status := l_return_status;
485 
486        --also update the corresponding detail records to reflect new budget period id
487        if l_orig_budget_period_id <> p_budget_period_id then
488          update igw_budget_details
489          set    budget_period_id = p_budget_period_id
490          where  proposal_id = p_proposal_id
491          and    version_id = p_version_id
492          and    budget_period_id = l_orig_budget_period_id;
493 
494          update igw_budget_details_cal_amts
495          set    budget_period_id = p_budget_period_id
496          where  proposal_id = p_proposal_id
497          and    version_id = p_version_id
498          and    budget_period_id = l_orig_budget_period_id;
499 
500          update igw_budget_personnel_details
501          set    budget_period_id = p_budget_period_id
502          where  proposal_id = p_proposal_id
503          and    version_id = p_version_id
504          and    budget_period_id = l_orig_budget_period_id;
505        end if;
506 
507 
508 
509 
510 	IGW_BUDGET_OPERATIONS.recalculate_budget (
511                                 p_proposal_id         => p_proposal_id
512 				,p_version_id         => p_version_id
513                                 ,p_budget_period_id   => p_budget_period_id
514 				,x_return_status      => x_return_status
515 				,x_msg_data           => x_msg_data
516 				,x_msg_count          => x_msg_count);
517 
518 
519     end if; -- p_validate_only = 'Y'
520 
521     l_msg_count := FND_MSG_PUB.count_msg;
522     If l_msg_count > 0 THEN
523       x_msg_count := l_msg_count;
524       If l_msg_count = 1 THEN
525         fnd_msg_pub.get
526          (p_encoded        => FND_API.G_TRUE ,
527           p_msg_index      => 1,
528           p_data           => l_data,
529           p_msg_index_out  => l_msg_index_out );
530 
531           x_msg_data := l_data;
532       End if;
533       RAISE  FND_API.G_EXC_ERROR;
534     End if;
535 
536   x_return_status := FND_API.G_RET_STS_SUCCESS;
537 
541     END IF;
538 EXCEPTION WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
539     IF p_commit = FND_API.G_TRUE THEN
540        ROLLBACK TO update_budget_version;
542     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
543     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_package_name,
544                             p_procedure_name => l_api_name,
545                             p_error_text     => SUBSTRB(SQLERRM,1,240));
546     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
547     fnd_msg_pub.count_and_get(p_count => x_msg_count
548                               ,p_data => x_msg_data);
549 
550 WHEN FND_API.G_EXC_ERROR THEN
551     IF p_commit = FND_API.G_TRUE THEN
552        ROLLBACK TO update_budget_version;
553     END IF;
554     x_return_status := 'E';
555 
556 WHEN OTHERS THEN
557     IF p_commit = FND_API.G_TRUE THEN
558        ROLLBACK TO update_budget_version;
559     END IF;
560     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
561     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_package_name,
562                             p_procedure_name => l_api_name,
563                             p_error_text     => SUBSTRB(SQLERRM,1,240));
564     fnd_msg_pub.count_and_get(p_count => x_msg_count
565                               ,p_data => x_msg_data);
566     RAISE;
567 
568 END; --UPDATE BUDGET VERSIONS
569 
570 -------------------------------------------------------------------------------------------
571 
572 procedure delete_budget_period
573        (p_init_msg_list            IN  VARCHAR2   := FND_API.G_TRUE
574         ,p_commit                  IN  VARCHAR2   := FND_API.G_FALSE
575         ,p_validate_only           IN  VARCHAR2   := FND_API.G_TRUE
576         ,p_proposal_id		       NUMBER
577 	,p_version_id		       NUMBER
578         ,p_budget_period_id            NUMBER
579         ,p_record_version_number   IN  NUMBER
580         ,p_rowid                   IN  ROWID
581         ,x_return_status           OUT NOCOPY VARCHAR2
582         ,x_msg_count               OUT NOCOPY NUMBER
583         ,x_msg_data                OUT NOCOPY VARCHAR2)  is
584 
585   l_api_name          VARCHAR2(30)    := 'DELETE_BUDGET_PERIOD';
586   l_return_status     VARCHAR2(1);
587   l_msg_count         NUMBER;
588   l_data              VARCHAR2(250);
589   l_msg_index_out     NUMBER;
590   l_dummy             VARCHAR2(1);
591 
592 
593 
594 BEGIN
595     IF p_commit = FND_API.G_TRUE THEN
596       SAVEPOINT delete_budget_version;
597     END IF;
598 
599     if FND_API.to_boolean(nvl(p_init_msg_list, FND_API.G_FALSE)) then
600       fnd_msg_pub.initialize;
601      end if;
602 
603     x_return_status := 'S';
604 
605     BEGIN
606       SELECT 'x' INTO l_dummy
607       FROM   igw_budget_periods
608       WHERE  ((proposal_id  = p_proposal_id  AND   version_id = p_version_id
609                        AND budget_period_id = p_budget_period_id)
610 	 OR rowid = p_rowid)
611       AND record_version_number  = p_record_version_number;
612     EXCEPTION
613       WHEN NO_DATA_FOUND THEN
614         FND_MESSAGE.SET_NAME('IGW','IGW_SS_RECORD_CHANGED');
615         FND_MSG_PUB.Add;
616         x_msg_data := 'IGW_SS_RECORD_CHANGED';
617         x_return_status := 'E' ;
618     END;
619 
620     l_msg_count := FND_MSG_PUB.count_msg;
621 
622       IF l_msg_count > 0 THEN
623          x_msg_count := l_msg_count;
624          x_return_status := 'E';
625          If l_msg_count = 1 THEN
626           fnd_msg_pub.get
627            (p_encoded        => FND_API.G_TRUE ,
628             p_msg_index      => 1,
629             p_data           => l_data,
630             p_msg_index_out  => l_msg_index_out );
631 
632             x_msg_data := l_data;
633          End if;
634          RAISE  FND_API.G_EXC_ERROR;
635       END IF;
636 
637     if (NOT FND_API.TO_BOOLEAN (p_validate_only)) then
638 
639      igw_budget_periods_tbh.delete_row (
640        p_rowid => p_rowid,
641        p_proposal_id => p_proposal_id,
642        p_version_id =>  p_version_id,
643        p_budget_period_id => p_budget_period_id,
644        p_record_version_number => p_record_version_number,
645        x_return_status => l_return_status);
646 
647 
648        igw_budgets_pvt.manage_budget_deletion(
649                    p_delete_level        =>  'BUDGET_PERIOD'
650 		   ,p_proposal_id        =>  p_proposal_id
651 		   ,p_version_id         =>  p_version_id
652                    ,p_budget_period_id   =>  p_budget_period_id
653                    ,x_return_status      =>  l_return_status);
654 
655        x_return_status := l_return_status;
656 
657 	IGW_BUDGET_OPERATIONS.recalculate_budget (
658                                 p_proposal_id         => p_proposal_id
659 				,p_version_id         => p_version_id
660 				,x_return_status      => x_return_status
661 				,x_msg_data           => x_msg_data
662 				,x_msg_count          => x_msg_count);
663 
664     end if; -- p_validate_only = 'Y'
665 
666 
667     l_msg_count := FND_MSG_PUB.count_msg;
668     If l_msg_count > 0 THEN
669       x_msg_count := l_msg_count;
670       If l_msg_count = 1 THEN
671         fnd_msg_pub.get
672          (p_encoded        => FND_API.G_TRUE ,
673           p_msg_index      => 1,
674           p_data           => l_data,
675           p_msg_index_out  => l_msg_index_out );
676 
677           x_msg_data := l_data;
678       End if;
679       RAISE  FND_API.G_EXC_ERROR;
680     End if;
681 
682     x_return_status := FND_API.G_RET_STS_SUCCESS;
683 
684 EXCEPTION WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
685   IF p_commit = FND_API.G_TRUE THEN
686        ROLLBACK TO delete_budget_version;
687     END IF;
688     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
689    fnd_msg_pub.add_exc_msg(p_pkg_name       => G_package_name,
690                             p_procedure_name => l_api_name,
691                             p_error_text     => SUBSTRB(SQLERRM,1,240));
692     fnd_msg_pub.count_and_get(p_count => x_msg_count
693                               ,p_data => x_msg_data);
694    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
695 
696 WHEN FND_API.G_EXC_ERROR THEN
697     IF p_commit = FND_API.G_TRUE THEN
698        ROLLBACK TO delete_budget_version;
699     END IF;
700     x_return_status := 'E';
701 
702 WHEN OTHERS THEN
703     IF p_commit = FND_API.G_TRUE THEN
704        ROLLBACK TO delete_budget_version;
705     END IF;
706     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
707     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_package_name,
708                             p_procedure_name => l_api_name,
709                             p_error_text     => SUBSTRB(SQLERRM,1,240));
710     fnd_msg_pub.count_and_get(p_count => x_msg_count
711                               ,p_data => x_msg_data);
712     RAISE;
713 
714 
715 END; --DELETE BUDGET VERSION
716 
717 
718 END IGW_BUDGET_PERIODS_PVT;