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