[Home] [Help]
PACKAGE BODY: APPS.PQH_BDGT
Source
1 package body pqh_bdgt as
2 /* $Header: pqbudget.pkb 115.18 2002/11/27 04:43:00 rpasapul ship $ */
3 g_package varchar2(100) := 'PQH_BDGT.' ;
4
5 function get_bgv_budget( p_budget_version_id in number) return number is
6 cursor c1 is select budget_id
7 from pqh_budget_versions
8 where budget_version_id = p_budget_version_id ;
9 l_budget_id number;
10 begin
11 open c1;
12 fetch c1 into l_budget_id ;
13 close c1;
14 return l_budget_id;
15 end get_bgv_budget;
16 procedure propagate_version_changes (p_change_mode in varchar2,
17 p_budget_version_id in number,
18 p_budget_style_cd in varchar2,
19 p_new_bgv_unit1_value in number,
20 p_new_bgv_unit2_value in number,
21 p_new_bgv_unit3_value in number,
22 p_unit1_precision in number,
23 p_unit2_precision in number,
24 p_unit3_precision in number,
25 p_unit1_aggregate in varchar2,
26 p_unit2_aggregate in varchar2,
27 p_unit3_aggregate in varchar2,
28 p_budget_version_status in out nocopy varchar2,
29 p_bgv_unit1_available in out nocopy number,
30 p_bgv_unit2_available in out nocopy number,
31 p_bgv_unit3_available in out nocopy number
32 )is
33 cursor c1 is select budget_detail_id,budget_unit1_value,budget_unit2_value,budget_unit3_value,
34 budget_unit1_value_type_cd,budget_unit2_value_type_cd,budget_unit3_value_type_cd,
35 budget_unit1_percent,budget_unit2_percent,budget_unit3_percent,
36 budget_unit1_available,budget_unit2_available,budget_unit3_available,
37 object_version_number,gl_status
38 from pqh_budget_details
39 where budget_version_id = p_budget_version_id
40 for update of budget_unit1_value,budget_unit2_value,budget_unit3_value,
41 budget_unit1_available,budget_unit2_available,budget_unit3_available,
42 budget_unit1_percent,budget_unit2_percent,budget_unit3_percent ;
43
44 l_budget_unit1_value number;
45 l_budget_unit2_value number;
46 l_budget_unit3_value number;
47 l_budget_unit1_percent number;
48 l_budget_unit2_percent number;
49 l_budget_unit3_percent number;
50 l_budget_unit1_available number;
51 l_budget_unit2_available number;
52 l_budget_unit3_available number;
53 ini_budget_unit1_available number := p_bgv_unit1_available;
54 ini_budget_unit2_available number := p_bgv_unit2_available;
55 ini_budget_unit3_available number := p_bgv_unit3_available;
56 l_object_version_number number;
57 l_bgd_status varchar2(30);
58 l_proc varchar2(100) := g_package||'propagate_version_changes' ;
59 l_code varchar2(30) := p_change_mode;
60 begin
61 hr_utility.set_location('entering '||l_proc,10);
62 hr_utility.set_location('entering with bgv'||p_budget_version_id||l_proc,11);
63 hr_utility.set_location('l_code is'||l_code||l_proc,35);
64 for i in c1 loop
65 hr_utility.set_location('for each budgeted row '||l_proc,40);
66 if l_code = 'RV' then
67 hr_utility.set_location('unit1 for RV'||l_proc,45);
68 if nvl(p_new_bgv_unit1_value,0) <> 0 then
69 l_budget_unit1_percent := round((i.budget_unit1_value * 100)/p_new_bgv_unit1_value,2) ;
70 else
71 l_budget_unit1_percent := null;
72 end if;
73 l_budget_unit1_value := i.budget_unit1_value;
74 l_budget_unit1_available := i.budget_unit1_available;
75 elsif l_code = 'RP' then
76 hr_utility.set_location('unit1 for RP'||l_proc,50);
77 if nvl(p_new_bgv_unit1_value,0) <> 0 then
78 l_budget_unit1_value := round(p_new_bgv_unit1_value * nvl(i.budget_unit1_percent,0)/100,p_unit1_precision) ;
79 l_budget_unit1_available := nvl(i.budget_unit1_available,0) + nvl(l_budget_unit1_value,0) - nvl(i.budget_unit1_value,0);
80 p_bgv_unit1_available := nvl(p_bgv_unit1_available,0) - nvl(l_budget_unit1_value,0) + nvl(i.budget_unit1_value,0);
81 else
82 l_budget_unit1_value := i.budget_unit1_value;
83 l_budget_unit1_available := i.budget_unit1_available;
84 end if;
85 l_budget_unit1_percent := i.budget_unit1_percent;
86 else
87 hr_utility.set_location('unit1 for UE'||l_proc,55);
88 if nvl(p_new_bgv_unit1_value,0) <> 0 then
89 if i.budget_unit1_value_type_cd = 'P' then
90 l_budget_unit1_value := round(p_new_bgv_unit1_value * nvl(i.budget_unit1_percent,0)/100,p_unit1_precision) ;
91 l_budget_unit1_available := nvl(i.budget_unit1_available,0) + nvl(l_budget_unit1_value,0) - nvl(i.budget_unit1_value,0);
92 p_bgv_unit1_available := nvl(p_bgv_unit1_available,0) - nvl(l_budget_unit1_value,0) + nvl(i.budget_unit1_value,0);
93 l_budget_unit1_percent := i.budget_unit1_percent;
94 else
95 l_budget_unit1_value := i.budget_unit1_value;
96 l_budget_unit1_available := i.budget_unit1_available;
97 l_budget_unit1_percent := round((i.budget_unit1_value * 100)/p_new_bgv_unit1_value,2) ;
98 end if;
99 else
100 l_budget_unit1_value := i.budget_unit1_value;
101 l_budget_unit1_available := i.budget_unit1_available;
102 l_budget_unit1_percent := null;
103 end if;
104 end if;
105
106 if l_code ='RV' then
107 hr_utility.set_location('unit2 for RV'||l_proc,60);
108 if nvl(p_new_bgv_unit2_value,0) <> 0 then
109 l_budget_unit2_percent := round((i.budget_unit2_value * 100)/p_new_bgv_unit2_value,2) ;
110 else
111 l_budget_unit2_percent := null;
112 end if;
113 l_budget_unit2_value := i.budget_unit2_value;
114 l_budget_unit2_available := i.budget_unit2_available;
115 elsif l_code ='RP' then
116 hr_utility.set_location('unit2 for RP'||l_proc,65);
117 if nvl(p_new_bgv_unit2_value,0) <> 0 then
118 l_budget_unit2_value := round(p_new_bgv_unit2_value * nvl(i.budget_unit2_percent,0)/100,p_unit2_precision) ;
119 l_budget_unit2_available := nvl(i.budget_unit2_available,0) + nvl(l_budget_unit2_value,0) - nvl(i.budget_unit2_value,0);
120 p_bgv_unit2_available := nvl(p_bgv_unit2_available,0) - nvl(l_budget_unit2_value,0) + nvl(i.budget_unit2_value,0);
121 else
122 l_budget_unit2_value := i.budget_unit2_value;
123 l_budget_unit2_available := i.budget_unit2_available;
124 end if;
125 l_budget_unit2_percent := i.budget_unit2_percent;
126 else
127 hr_utility.set_location('unit2 for UE'||l_proc,70);
128 if nvl(p_new_bgv_unit2_value,0) <> 0 then
129 if i.budget_unit2_value_type_cd = 'P' then
130 l_budget_unit2_value := round(p_new_bgv_unit2_value * nvl(i.budget_unit2_percent,0)/100,p_unit2_precision) ;
131 l_budget_unit2_available := nvl(i.budget_unit2_available,0) + nvl(l_budget_unit2_value,0) - nvl(i.budget_unit2_value,0);
132 p_bgv_unit2_available := nvl(p_bgv_unit2_available,0) - nvl(l_budget_unit2_value,0) + nvl(i.budget_unit2_value,0);
133 l_budget_unit2_percent := i.budget_unit2_percent;
134 else
135 l_budget_unit2_value := i.budget_unit2_value;
136 l_budget_unit2_available := i.budget_unit2_available;
137 l_budget_unit2_percent := round((i.budget_unit2_value * 100)/p_new_bgv_unit2_value,2) ;
138 end if;
139 else
140 l_budget_unit2_value := i.budget_unit2_value;
141 l_budget_unit2_available := i.budget_unit2_available;
142 l_budget_unit2_percent := null;
143 end if;
144 end if;
145
146 if l_code ='RV' then
147 hr_utility.set_location('unit3 for RV'||l_proc,75);
148 if nvl(p_new_bgv_unit3_value,0) <> 0 then
149 l_budget_unit3_percent := round((i.budget_unit3_value * 100)/p_new_bgv_unit3_value,2) ;
150 else
151 l_budget_unit3_percent := null;
152 end if;
153 l_budget_unit3_value := i.budget_unit3_value;
154 l_budget_unit3_available := i.budget_unit3_available;
155 elsif l_code ='RP' then
156 hr_utility.set_location('unit3 for RP'||l_proc,80);
157 if nvl(p_new_bgv_unit3_value,0) <> 0 then
158 l_budget_unit3_value := round(p_new_bgv_unit3_value * nvl(i.budget_unit3_percent,0)/100,p_unit3_precision) ;
159 l_budget_unit3_available := nvl(i.budget_unit3_available,0) + nvl(l_budget_unit3_value,0) - nvl(i.budget_unit3_value,0);
160 p_bgv_unit3_available := nvl(p_bgv_unit3_available,0) - nvl(l_budget_unit3_value,0) + nvl(i.budget_unit3_value,0);
161 else
162 l_budget_unit3_value := i.budget_unit3_value;
163 l_budget_unit3_available := i.budget_unit3_available;
164 end if;
165 l_budget_unit3_percent := i.budget_unit3_percent;
166 else
167 hr_utility.set_location('unit3 for UE'||l_proc,85);
168 if nvl(p_new_bgv_unit3_value,0) <> 0 then
169 if i.budget_unit3_value_type_cd = 'P' then
170 l_budget_unit3_value := round(p_new_bgv_unit3_value * nvl(i.budget_unit3_percent,0)/100,p_unit3_precision) ;
171 l_budget_unit3_available := nvl(i.budget_unit3_available,0) + nvl(l_budget_unit3_value,0) - nvl(i.budget_unit3_value,0);
172 p_bgv_unit3_available := nvl(p_bgv_unit3_available,0) - nvl(l_budget_unit3_value,0) + nvl(i.budget_unit3_value,0);
173 l_budget_unit3_percent := i.budget_unit3_percent;
174 else
175 l_budget_unit3_value := i.budget_unit3_value;
176 l_budget_unit3_available := i.budget_unit3_available;
177 l_budget_unit3_percent := round((i.budget_unit3_value * 100)/p_new_bgv_unit3_value,2) ;
178 end if;
179 else
180 l_budget_unit3_value := i.budget_unit3_value;
181 l_budget_unit3_available := i.budget_unit3_available;
182 l_budget_unit3_percent := null;
183 end if;
184 end if;
185 hr_utility.set_location('before calling propagate_budget_changes'||l_proc,90);
186 hr_utility.set_location('values passed are'||l_proc,95);
187 hr_utility.set_location('unit1_value'||l_budget_unit1_value||l_proc,100);
188 hr_utility.set_location('unit2_value'||l_budget_unit2_value||l_proc,101);
189 hr_utility.set_location('unit3_value'||l_budget_unit3_value||l_proc,102);
190 hr_utility.set_location('unit1_available'||l_budget_unit1_available||l_proc,103);
191 hr_utility.set_location('unit2_available'||l_budget_unit2_available||l_proc,104);
192 hr_utility.set_location('unit3_available'||l_budget_unit3_available||l_proc,105);
193 l_object_version_number := i.object_version_number;
194 propagate_budget_changes (p_change_mode => l_code,
195 p_budget_detail_id => i.budget_detail_id,
196 p_new_bgt_unit1_value => l_budget_unit1_value,
197 p_new_bgt_unit2_value => l_budget_unit2_value,
198 p_new_bgt_unit3_value => l_budget_unit3_value,
199 p_unit1_precision => p_unit1_precision,
200 p_unit2_precision => p_unit2_precision,
201 p_unit3_precision => p_unit3_precision,
202 p_unit1_aggregate => p_unit1_aggregate,
203 p_unit2_aggregate => p_unit2_aggregate,
204 p_unit3_aggregate => p_unit3_aggregate,
205 p_bgt_unit1_available => l_budget_unit1_available,
206 p_bgt_unit2_available => l_budget_unit2_available,
207 p_bgt_unit3_available => l_budget_unit3_available);
208 hr_utility.set_location('values returned are'||l_proc,110);
209 hr_utility.set_location('unit1_available'||l_budget_unit1_available||l_proc,113);
210 hr_utility.set_location('unit2_available'||l_budget_unit2_available||l_proc,114);
211 hr_utility.set_location('unit3_available'||l_budget_unit3_available||l_proc,115);
212 if nvl(p_budget_version_status,'X') in ('POST','ERROR') then
213 l_bgd_status := 'ERROR';
214 p_budget_version_status := 'ERROR';
215 else
216 l_bgd_status := '';
217 end if;
218 update_budget_detail
219 (
220 p_budget_detail_id => i.budget_detail_id,
221 p_budget_unit1_percent => l_budget_unit1_percent,
222 p_budget_unit1_value => l_budget_unit1_value,
223 p_budget_unit2_percent => l_budget_unit2_percent,
224 p_budget_unit2_value => l_budget_unit2_value,
225 p_budget_unit3_percent => l_budget_unit3_percent,
226 p_budget_unit3_value => l_budget_unit3_value,
227 p_budget_unit1_available => l_budget_unit1_available,
228 p_budget_unit2_available => l_budget_unit2_available,
229 p_budget_unit3_available => l_budget_unit3_available,
230 p_gl_status => l_bgd_status,
231 p_object_version_number => l_object_version_number
232 );
233 hr_utility.set_location('budget row updated '||l_proc,120);
234 end loop;
235 hr_utility.set_location('values passed out nocopy are'||l_proc,270);
236 p_bgv_unit1_available := round(p_bgv_unit1_available,p_unit1_precision);
237 p_bgv_unit2_available := round(p_bgv_unit2_available,p_unit2_precision);
238 p_bgv_unit3_available := round(p_bgv_unit3_available,p_unit3_precision);
239 hr_utility.set_location('unit1_available'||p_bgv_unit1_available||l_proc,273);
240 hr_utility.set_location('unit2_available'||p_bgv_unit2_available||l_proc,274);
241 hr_utility.set_location('unit3_available'||p_bgv_unit3_available||l_proc,275);
242 hr_utility.set_location('exiting '||l_proc,1000);
243 exception when others then
244 p_bgv_unit1_available := ini_budget_unit1_available;
245 p_bgv_unit2_available := ini_budget_unit2_available;
246 p_bgv_unit3_available := ini_budget_unit3_available;
247 raise;
248 end propagate_version_changes;
249
250 procedure propagate_budget_changes (p_change_mode in varchar2,
251 p_budget_detail_id in number,
252 p_new_bgt_unit1_value in number,
253 p_new_bgt_unit2_value in number,
254 p_new_bgt_unit3_value in number,
255 p_unit1_precision in number,
256 p_unit2_precision in number,
257 p_unit3_precision in number,
258 p_unit1_aggregate in varchar2,
259 p_unit2_aggregate in varchar2,
260 p_unit3_aggregate in varchar2,
261 p_bgt_unit1_available in out nocopy number,
262 p_bgt_unit2_available in out nocopy number,
263 p_bgt_unit3_available in out nocopy number
264 )is
265 cursor c1 is select budget_period_id,budget_unit1_value,budget_unit2_value,budget_unit3_value,
266 budget_unit1_value_type_cd,budget_unit2_value_type_cd,budget_unit3_value_type_cd,
267 budget_unit1_percent,budget_unit2_percent,budget_unit3_percent,
268 budget_unit1_available,budget_unit2_available,budget_unit3_available
269 from pqh_budget_periods
270 where budget_detail_id = p_budget_detail_id
271 for update of budget_unit1_value,budget_unit2_value,budget_unit3_value,
272 budget_unit1_percent,budget_unit2_percent,budget_unit3_percent,
273 budget_unit1_available,budget_unit2_available,budget_unit3_available ;
274
275 l_period_unit1_value number;
276 l_period_unit2_value number;
277 l_period_unit3_value number;
278 l_period_unit1_percent number;
279 l_period_unit2_percent number;
280 l_period_unit3_percent number;
281 l_period_unit1_available number;
282 l_period_unit2_available number;
283 l_period_unit3_available number;
284 ini_budget_unit1_available number := p_bgt_unit1_available;
285 ini_budget_unit2_available number := p_bgt_unit2_available;
286 ini_budget_unit3_available number := p_bgt_unit3_available;
287 x_unit1_max number;
288 x_unit2_max number;
289 x_unit3_max number;
290 x_unit1_avg number;
291 x_unit2_avg number;
292 x_unit3_avg number;
293 x_unit1_sum number;
294 x_unit2_sum number;
295 x_unit3_sum number;
296 l_proc varchar2(100) := g_package||'propagate_budget_changes' ;
297 begin
298 hr_utility.set_location('entering '||l_proc,10);
299 if p_change_mode not in ('RP','RV','UE') then
300 hr_utility.set_message(8302,'PQH_WKS_PROPAGATION_METHOD_ERR');
304 /* make a call to sub_budgetrow to subtract the all period info. from the table*/
301 hr_utility.raise_error;
302 end if;
303
305 pqh_budget.sub_budgetrow(p_budget_detail_id => p_budget_detail_id,
306 p_unit1_aggregate => p_unit1_aggregate,
307 p_unit2_aggregate => p_unit2_aggregate,
308 p_unit3_aggregate => p_unit3_aggregate);
309
310 for i in c1 loop
311 hr_utility.set_location('for each period '||l_proc,20);
312 if p_change_mode ='RV' then
313 hr_utility.set_location('unit1 for RV '||l_proc,30);
314 if nvl(p_new_bgt_unit1_value,0) <> 0 then
315 l_period_unit1_percent := round((i.budget_unit1_value * 100)/p_new_bgt_unit1_value,2) ;
316 else
317 l_period_unit1_percent := null;
318 end if;
319 l_period_unit1_value := i.budget_unit1_value;
320 l_period_unit1_available := i.budget_unit1_available;
321 elsif p_change_mode ='RP' then
322 hr_utility.set_location('unit1 for RP '||l_proc,35);
323 if nvl(p_new_bgt_unit1_value,0) <> 0 then
324 l_period_unit1_value := round(p_new_bgt_unit1_value * nvl(i.budget_unit1_percent,0)/100,2) ;
325 l_period_unit1_available := nvl(i.budget_unit1_available,0) + nvl(l_period_unit1_value,0) - nvl(i.budget_unit1_value,0);
326 p_bgt_unit1_available := nvl(p_bgt_unit1_available,0) - nvl(l_period_unit1_value,0) + nvl(i.budget_unit1_value,0);
327 else
328 l_period_unit1_value := i.budget_unit1_value;
329 l_period_unit1_available := i.budget_unit1_available;
330 end if;
331 l_period_unit1_percent := i.budget_unit1_percent;
332 else
333 hr_utility.set_location('unit1 for UE '||l_proc,40);
334 if nvl(p_new_bgt_unit1_value,0) <> 0 then
335 if i.budget_unit1_value_type_cd = 'P' then
336 l_period_unit1_value := round(p_new_bgt_unit1_value * nvl(i.budget_unit1_percent,0)/100,2) ;
337 l_period_unit1_available := nvl(i.budget_unit1_available,0) + nvl(l_period_unit1_value,0) - nvl(i.budget_unit1_value,0);
338 p_bgt_unit1_available := nvl(p_bgt_unit1_available,0) - nvl(l_period_unit1_value,0) + nvl(i.budget_unit1_value,0);
339 l_period_unit1_percent := i.budget_unit1_percent;
340 else
341 l_period_unit1_value := i.budget_unit1_value;
342 l_period_unit1_available := i.budget_unit1_available;
343 l_period_unit1_percent := round((i.budget_unit1_value * 100)/p_new_bgt_unit1_value,2) ;
344 end if;
345 else
346 l_period_unit1_value := i.budget_unit1_value;
347 l_period_unit1_available := i.budget_unit1_available;
348 l_period_unit1_percent := null;
349 end if;
350 end if;
351
352 if p_change_mode ='RV' then
353 hr_utility.set_location('unit2 for RV '||l_proc,50);
354 if nvl(p_new_bgt_unit2_value,0) <> 0 then
355 l_period_unit2_percent := round((i.budget_unit2_value * 100)/p_new_bgt_unit2_value,2) ;
356 else
357 l_period_unit2_percent := null;
358 end if;
359 l_period_unit2_value := i.budget_unit2_value;
360 l_period_unit2_available := i.budget_unit2_available;
361 elsif p_change_mode ='RP' then
362 hr_utility.set_location('unit2 for RP '||l_proc,60);
363 if nvl(p_new_bgt_unit2_value,0) <> 0 then
364 l_period_unit2_value := round(p_new_bgt_unit2_value * nvl(i.budget_unit2_percent,0)/100,2) ;
365 l_period_unit2_available := nvl(i.budget_unit2_available,0) + nvl(l_period_unit2_value,0) - nvl(i.budget_unit2_value,0);
366 p_bgt_unit2_available := nvl(p_bgt_unit2_available,0) - nvl(l_period_unit2_value,0) + nvl(i.budget_unit2_value,0);
367 else
368 l_period_unit2_value := i.budget_unit2_value;
369 l_period_unit2_available := i.budget_unit2_available;
370 end if;
371 l_period_unit2_percent := i.budget_unit2_percent;
372 else
373 hr_utility.set_location('unit2 for UE '||l_proc,70);
374 if nvl(p_new_bgt_unit2_value,0) <> 0 then
375 if i.budget_unit2_value_type_cd = 'P' then
376 l_period_unit2_value := round(p_new_bgt_unit2_value * nvl(i.budget_unit2_percent,0)/100,2) ;
377 l_period_unit2_available := nvl(i.budget_unit2_available,0) + nvl(l_period_unit2_value,0) - nvl(i.budget_unit2_value,0);
378 p_bgt_unit2_available := nvl(p_bgt_unit2_available,0) - nvl(l_period_unit2_value,0) + nvl(i.budget_unit2_value,0);
379 l_period_unit2_percent := i.budget_unit2_percent;
380 else
381 l_period_unit2_value := i.budget_unit2_value;
382 l_period_unit2_available := i.budget_unit2_available;
383 l_period_unit2_percent := round((i.budget_unit2_value * 100)/p_new_bgt_unit2_value,2) ;
384 end if;
385 else
386 l_period_unit2_value := i.budget_unit2_value;
387 l_period_unit2_available := i.budget_unit2_available;
388 l_period_unit2_percent := null;
389 end if;
390 end if;
391
392 if p_change_mode ='RV' then
393 hr_utility.set_location('unit3 for RV '||l_proc,80);
394 if nvl(p_new_bgt_unit3_value,0) <> 0 then
395 l_period_unit3_percent := round((i.budget_unit3_value * 100)/p_new_bgt_unit3_value,2) ;
396 else
397 l_period_unit3_percent := null;
398 end if;
399 l_period_unit3_value := i.budget_unit3_value;
400 l_period_unit3_available := i.budget_unit3_available;
401 elsif p_change_mode ='RP' then
402 hr_utility.set_location('unit3 for RP '||l_proc,90);
406 p_bgt_unit3_available := nvl(p_bgt_unit3_available,0) - nvl(l_period_unit3_value,0) + nvl(i.budget_unit3_value,0);
403 if nvl(p_new_bgt_unit3_value,0) <> 0 then
404 l_period_unit3_value := round(p_new_bgt_unit3_value * nvl(i.budget_unit3_percent,0)/100,2) ;
405 l_period_unit3_available := nvl(i.budget_unit3_available,0) + nvl(l_period_unit3_value,0) - nvl(i.budget_unit3_value,0);
407 else
408 l_period_unit3_value := i.budget_unit3_value;
409 l_period_unit3_available := i.budget_unit3_available;
410 end if;
411 l_period_unit3_percent := i.budget_unit3_percent;
412 else
413 hr_utility.set_location('unit3 for UE '||l_proc,100);
414 if nvl(p_new_bgt_unit3_value,0) <> 0 then
415 if i.budget_unit3_value_type_cd = 'P' then
416 l_period_unit3_value := round(p_new_bgt_unit3_value * nvl(i.budget_unit3_percent,0)/100,2) ;
417 l_period_unit3_available := nvl(i.budget_unit3_available,0) + nvl(l_period_unit3_value,0) - nvl(i.budget_unit3_value,0);
418 p_bgt_unit3_available := nvl(p_bgt_unit3_available,0) - nvl(l_period_unit3_value,0) + nvl(i.budget_unit3_value,0);
419 l_period_unit3_percent := i.budget_unit3_percent;
420 else
421 l_period_unit3_value := i.budget_unit3_value;
422 l_period_unit3_available := i.budget_unit3_available;
423 l_period_unit3_percent := round((i.budget_unit3_value * 100)/p_new_bgt_unit3_value,2) ;
424 end if;
425 else
426 l_period_unit3_value := i.budget_unit3_value;
427 l_period_unit3_available := i.budget_unit3_available;
428 l_period_unit3_percent := null;
429 end if;
430 end if;
431 hr_utility.set_location('calling period changes with values '||l_proc,110);
432 hr_utility.set_location('unit1_value is '||l_period_unit1_value||l_proc,120);
433 hr_utility.set_location('unit2_value is '||l_period_unit2_value||l_proc,121);
434 hr_utility.set_location('unit3_value is '||l_period_unit3_value||l_proc,122);
435 hr_utility.set_location('unit1_available is '||l_period_unit1_available||l_proc,123);
436 hr_utility.set_location('unit2_available is '||l_period_unit2_available||l_proc,124);
437 hr_utility.set_location('unit3_available is '||l_period_unit3_available||l_proc,125);
438 propagate_period_changes (p_change_mode => p_change_mode,
439 p_budget_period_id => i.budget_period_id,
440 p_new_prd_unit1_value => l_period_unit1_value,
441 p_new_prd_unit2_value => l_period_unit2_value,
442 p_new_prd_unit3_value => l_period_unit3_value,
443 p_unit1_precision => p_unit1_precision,
444 p_unit2_precision => p_unit2_precision,
445 p_unit3_precision => p_unit3_precision,
446 p_prd_unit1_available => l_period_unit1_available,
447 p_prd_unit2_available => l_period_unit2_available,
448 p_prd_unit3_available => l_period_unit3_available);
449 hr_utility.set_location('after period changes values '||l_proc,130);
450 hr_utility.set_location('unit1_available is '||l_period_unit1_available||l_proc,133);
451 hr_utility.set_location('unit2_available is '||l_period_unit2_available||l_proc,134);
452 hr_utility.set_location('unit3_available is '||l_period_unit3_available||l_proc,135);
453 update pqh_budget_periods
454 set budget_unit1_value = l_period_unit1_value,
455 budget_unit2_value = l_period_unit2_value,
456 budget_unit3_value = l_period_unit3_value,
457 budget_unit1_percent = l_period_unit1_percent,
458 budget_unit2_percent = l_period_unit2_percent,
459 budget_unit3_percent = l_period_unit3_percent,
460 budget_unit1_available = l_period_unit1_available,
461 budget_unit2_available = l_period_unit2_available,
462 budget_unit3_available = l_period_unit3_available
463 where current of c1;
464 hr_utility.set_location('after period updated '||l_proc,140);
465 end loop;
466
467 /* make a call to add_budgetrow to add the all period info. from the table
468 and then get the available figures using each unit to be passed on to budget*/
469
470 pqh_budget.add_budgetrow(p_budget_detail_id => p_budget_detail_id,
471 p_unit1_aggregate => p_unit1_aggregate,
472 p_unit2_aggregate => p_unit2_aggregate,
473 p_unit3_aggregate => p_unit3_aggregate);
474 pqh_budget.chk_unit_sum(p_unit1_sum_value => x_unit1_sum,
475 p_unit2_sum_value => x_unit2_sum,
476 p_unit3_sum_value => x_unit3_sum);
477 pqh_budget.chk_unit_max(p_unit1_max_value => x_unit1_max,
478 p_unit2_max_value => x_unit2_max,
479 p_unit3_max_value => x_unit3_max);
480 pqh_budget.chk_unit_avg(p_unit1_avg_value => x_unit1_avg,
481 p_unit2_avg_value => x_unit2_avg,
482 p_unit3_avg_value => x_unit3_avg);
483 if p_unit1_aggregate ='ACCUMULATE' then
484 p_bgt_unit1_available := nvl(p_new_bgt_unit1_value,0) - nvl(x_unit1_sum,0);
485 elsif p_unit1_aggregate='MAXIMUM' then
486 p_bgt_unit1_available := nvl(p_new_bgt_unit1_value,0) - nvl(x_unit1_max,0);
487 elsif p_unit1_aggregate='AVERAGE' then
488 p_bgt_unit1_available := nvl(p_new_bgt_unit1_value,0) - nvl(x_unit1_avg,0);
489 end if;
490 if p_unit2_aggregate ='ACCUMULATE' then
491 p_bgt_unit2_available := nvl(p_new_bgt_unit2_value,0) - nvl(x_unit2_sum,0);
492 elsif p_unit2_aggregate='MAXIMUM' then
496 end if;
493 p_bgt_unit2_available := nvl(p_new_bgt_unit2_value,0) - nvl(x_unit2_max,0);
494 elsif p_unit2_aggregate='AVERAGE' then
495 p_bgt_unit2_available := nvl(p_new_bgt_unit2_value,0) - nvl(x_unit2_avg,0);
497 if p_unit3_aggregate ='ACCUMULATE' then
498 p_bgt_unit3_available := nvl(p_new_bgt_unit3_value,0) - nvl(x_unit3_sum,0);
499 elsif p_unit3_aggregate='MAXIMUM' then
500 p_bgt_unit3_available := nvl(p_new_bgt_unit3_value,0) - nvl(x_unit3_max,0);
501 elsif p_unit3_aggregate='AVERAGE' then
502 p_bgt_unit3_available := nvl(p_new_bgt_unit3_value,0) - nvl(x_unit3_avg,0);
503 end if;
504 hr_utility.set_location('values passed out nocopy are'||l_proc,150);
505 p_bgt_unit1_available := round(p_bgt_unit1_available,p_unit1_precision);
506 p_bgt_unit2_available := round(p_bgt_unit2_available,p_unit2_precision);
507 p_bgt_unit3_available := round(p_bgt_unit3_available,p_unit3_precision);
508 hr_utility.set_location('unit1_available is '||p_bgt_unit1_available||l_proc,153);
509 hr_utility.set_location('unit2_available is '||p_bgt_unit2_available||l_proc,154);
510 hr_utility.set_location('unit3_available is '||p_bgt_unit3_available||l_proc,155);
511 hr_utility.set_location('exiting '||l_proc,1000);
512 exception when others then
513 p_bgt_unit1_available := ini_budget_unit1_available;
514 p_bgt_unit2_available := ini_budget_unit2_available;
515 p_bgt_unit3_available := ini_budget_unit3_available;
516 raise;
517 end propagate_budget_changes;
518
519 procedure propagate_period_changes (p_change_mode in varchar2,
520 p_budget_period_id in number,
521 p_new_prd_unit1_value in number,
522 p_new_prd_unit2_value in number,
523 p_new_prd_unit3_value in number,
524 p_unit1_precision in number,
525 p_unit2_precision in number,
526 p_unit3_precision in number,
527 p_prd_unit1_available in out nocopy number,
528 p_prd_unit2_available in out nocopy number,
529 p_prd_unit3_available in out nocopy number
530 )is
531 cursor c1 is select budget_unit1_value,budget_unit2_value,budget_unit3_value,
532 budget_unit1_value_type_cd,budget_unit2_value_type_cd,budget_unit3_value_type_cd,
533 budget_unit1_percent,budget_unit2_percent,budget_unit3_percent,
534 budget_unit1_available,budget_unit2_available,budget_unit3_available
535 from pqh_budget_sets
536 where budget_period_id = p_budget_period_id
537 for update of budget_unit1_value,budget_unit2_value,budget_unit3_value,
538 budget_unit1_percent,budget_unit2_percent,budget_unit3_percent,
539 budget_unit1_available,budget_unit2_available,budget_unit3_available ;
540
541 l_budgetset_unit1_value number;
542 l_budgetset_unit2_value number;
543 l_budgetset_unit3_value number;
544 l_budgetset_unit1_available number;
545 l_budgetset_unit2_available number;
546 l_budgetset_unit3_available number;
547 l_prd_unit1_available number := p_prd_unit1_available;
548 l_prd_unit2_available number := p_prd_unit2_available;
549 l_prd_unit3_available number := p_prd_unit3_available;
550 l_budgetset_unit1_percent number;
551 l_budgetset_unit2_percent number;
552 l_budgetset_unit3_percent number;
553
554 l_proc varchar2(100) := g_package||'propagate_period_changes' ;
555 begin
556 hr_utility.set_location('entering '||l_proc,10);
557 if p_change_mode not in ('RP','RV','UE') then
558 hr_utility.set_message(8302,'PQH_WKS_PROPAGATION_METHOD_ERR');
559 hr_utility.raise_error;
560 end if;
561 for i in c1 loop
562 if p_change_mode ='RV' then
563 hr_utility.set_location('unit1 for RV '||l_proc,20);
564 if nvl(p_new_prd_unit1_value,0) <> 0 then
565 l_budgetset_unit1_percent := round((i.budget_unit1_value * 100)/p_new_prd_unit1_value,2) ;
566 else
567 l_budgetset_unit1_percent := null;
568 end if;
569 l_budgetset_unit1_value := i.budget_unit1_value;
570 l_budgetset_unit1_available := i.budget_unit1_available;
571 elsif p_change_mode ='RP' then
572 hr_utility.set_location('unit1 for RP '||l_proc,30);
573 if nvl(p_new_prd_unit1_value,0) <> 0 then
574 l_budgetset_unit1_value := round(p_new_prd_unit1_value * nvl(i.budget_unit1_percent,0)/100,p_unit1_precision) ;
575 l_budgetset_unit1_available := nvl(i.budget_unit1_available,0) + nvl(l_budgetset_unit1_value,0) - nvl(i.budget_unit1_value,0);
576 p_prd_unit1_available := nvl(p_prd_unit1_available,0) - nvl(l_budgetset_unit1_value,0) + nvl(i.budget_unit1_value,0);
577 else
578 l_budgetset_unit1_value := i.budget_unit1_value;
579 l_budgetset_unit1_available := i.budget_unit1_available;
580 end if;
581 l_budgetset_unit1_percent := i.budget_unit1_percent;
582 else
583 hr_utility.set_location('unit1 for UE '||l_proc,40);
584 if nvl(p_new_prd_unit1_value,0) <> 0 then
585 if i.budget_unit1_value_type_cd = 'P' then
586 l_budgetset_unit1_value := round(p_new_prd_unit1_value * nvl(i.budget_unit1_percent,0)/100,p_unit1_precision) ;
587 l_budgetset_unit1_available := nvl(i.budget_unit1_available,0) + nvl(l_budgetset_unit1_value,0) - nvl(i.budget_unit1_value,0);
591 l_budgetset_unit1_percent := round((i.budget_unit1_value * 100)/p_new_prd_unit1_value,2) ;
588 p_prd_unit1_available := nvl(p_prd_unit1_available,0) - nvl(l_budgetset_unit1_value,0) + nvl(i.budget_unit1_value,0);
589 l_budgetset_unit1_percent := i.budget_unit1_percent;
590 else
592 l_budgetset_unit1_value := i.budget_unit1_value;
593 l_budgetset_unit1_available := i.budget_unit1_available;
594 end if;
595 else
596 l_budgetset_unit1_value := i.budget_unit1_value;
597 l_budgetset_unit1_available := i.budget_unit1_available;
598 l_budgetset_unit1_percent := null;
599 end if;
600 end if;
601
602 if p_change_mode ='RV' then
603 hr_utility.set_location('unit2 for RV '||l_proc,50);
604 if nvl(p_new_prd_unit2_value,0) <> 0 then
605 l_budgetset_unit2_percent := round((i.budget_unit2_value * 100)/p_new_prd_unit2_value,2) ;
606 else
607 l_budgetset_unit2_percent := null;
608 end if;
609 l_budgetset_unit2_value := i.budget_unit2_value;
610 l_budgetset_unit2_available := i.budget_unit2_available;
611 elsif p_change_mode ='RP' then
612 hr_utility.set_location('unit2 for RP '||l_proc,60);
613 if nvl(p_new_prd_unit2_value,0) <> 0 then
614 l_budgetset_unit2_value := round(p_new_prd_unit2_value * nvl(i.budget_unit2_percent,0)/100,p_unit2_precision) ;
615 l_budgetset_unit2_available := nvl(i.budget_unit2_available,0) + nvl(l_budgetset_unit2_value,0) - nvl(i.budget_unit2_value,0);
616 p_prd_unit2_available := nvl(p_prd_unit2_available,0) - nvl(l_budgetset_unit2_value,0) + nvl(i.budget_unit2_value,0);
617 else
618 l_budgetset_unit2_value := i.budget_unit2_value;
619 l_budgetset_unit2_available := i.budget_unit2_available;
620 end if;
621 l_budgetset_unit2_percent := i.budget_unit2_percent;
622 else
623 hr_utility.set_location('unit2 for UE '||l_proc,70);
624 if nvl(p_new_prd_unit2_value,0) <> 0 then
625 if i.budget_unit2_value_type_cd = 'P' then
626 l_budgetset_unit2_value := round(p_new_prd_unit2_value * nvl(i.budget_unit2_percent,0)/100,p_unit2_precision) ;
627 l_budgetset_unit2_available := nvl(i.budget_unit2_available,0) + nvl(l_budgetset_unit2_value,0) - nvl(i.budget_unit2_value,0);
628 p_prd_unit2_available := nvl(p_prd_unit2_available,0) - nvl(l_budgetset_unit2_value,0) + nvl(i.budget_unit2_value,0);
629 l_budgetset_unit2_percent := i.budget_unit2_percent;
630 else
631 l_budgetset_unit2_value := i.budget_unit2_value;
632 l_budgetset_unit2_available := i.budget_unit2_available;
633 l_budgetset_unit2_percent := round((i.budget_unit2_value * 100)/p_new_prd_unit2_value,2) ;
634 end if;
635 else
636 l_budgetset_unit2_value := i.budget_unit2_value;
637 l_budgetset_unit2_available := i.budget_unit2_available;
638 l_budgetset_unit2_percent := null;
639 end if;
640 end if;
641
642 if p_change_mode ='RV' then
643 hr_utility.set_location('unit3 for RV '||l_proc,80);
644 if nvl(p_new_prd_unit3_value,0) <> 0 then
645 l_budgetset_unit3_percent := round((i.budget_unit3_value * 100)/p_new_prd_unit3_value,2) ;
646 else
647 l_budgetset_unit3_percent := null;
648 end if;
649 l_budgetset_unit3_value := i.budget_unit3_value;
650 l_budgetset_unit3_available := i.budget_unit3_available;
651 elsif p_change_mode ='RP' then
652 hr_utility.set_location('unit3 for RP '||l_proc,90);
653 if nvl(p_new_prd_unit3_value,0) <> 0 then
654 l_budgetset_unit3_value := round(p_new_prd_unit3_value * nvl(i.budget_unit3_percent,0)/100,p_unit3_precision) ;
655 l_budgetset_unit3_available := nvl(i.budget_unit3_available,0) + nvl(l_budgetset_unit3_value,0) - nvl(i.budget_unit3_value,0);
656 p_prd_unit3_available := nvl(p_prd_unit3_available,0) - nvl(l_budgetset_unit3_value,0) + nvl(i.budget_unit3_value,0);
657 else
658 l_budgetset_unit3_value := i.budget_unit3_value;
659 l_budgetset_unit3_available := i.budget_unit3_available;
660 end if;
661 l_budgetset_unit3_percent := i.budget_unit3_percent;
662 else
663 hr_utility.set_location('unit3 for UE '||l_proc,100);
664 if nvl(p_new_prd_unit3_value,0) <> 0 then
665 if i.budget_unit3_value_type_cd = 'P' then
666 l_budgetset_unit3_value := round(p_new_prd_unit3_value * nvl(i.budget_unit3_percent,0)/100,p_unit3_precision) ;
667 l_budgetset_unit3_available := nvl(i.budget_unit3_available,0) + nvl(l_budgetset_unit3_value,0) - nvl(i.budget_unit3_value,0);
668 p_prd_unit3_available := nvl(p_prd_unit3_available,0) - nvl(l_budgetset_unit3_value,0) + nvl(i.budget_unit3_value,0);
669 l_budgetset_unit3_percent := i.budget_unit3_percent;
670 else
671 l_budgetset_unit3_value := i.budget_unit3_value;
672 l_budgetset_unit3_available := i.budget_unit3_available;
673 l_budgetset_unit3_percent := round((i.budget_unit3_value * 100)/p_new_prd_unit3_value,2) ;
674 end if;
675 else
676 l_budgetset_unit3_value := i.budget_unit3_value;
677 l_budgetset_unit3_available := i.budget_unit3_available;
678 l_budgetset_unit3_percent := null;
679 end if;
680 end if;
681 hr_utility.set_location('before update values passed are '||l_proc,110);
682 hr_utility.set_location('unit1_value '||l_budgetset_unit1_value||l_proc,120);
686 hr_utility.set_location('unit2_percent '||l_budgetset_unit2_percent||l_proc,124);
683 hr_utility.set_location('unit2_value '||l_budgetset_unit2_value||l_proc,121);
684 hr_utility.set_location('unit3_value '||l_budgetset_unit3_value||l_proc,122);
685 hr_utility.set_location('unit1_percent '||l_budgetset_unit1_percent||l_proc,123);
687 hr_utility.set_location('unit3_percent '||l_budgetset_unit3_percent||l_proc,125);
688 hr_utility.set_location('unit1_available '||l_budgetset_unit1_available||l_proc,126);
689 hr_utility.set_location('unit2_available '||l_budgetset_unit2_available||l_proc,127);
690 hr_utility.set_location('unit3_available '||l_budgetset_unit3_available||l_proc,128);
691 update pqh_budget_sets
692 set budget_unit1_value = l_budgetset_unit1_value,
693 budget_unit2_value = l_budgetset_unit2_value,
694 budget_unit3_value = l_budgetset_unit3_value,
695 budget_unit1_percent = l_budgetset_unit1_percent,
696 budget_unit2_percent = l_budgetset_unit2_percent,
697 budget_unit3_percent = l_budgetset_unit3_percent,
698 budget_unit1_available = l_budgetset_unit1_available,
699 budget_unit2_available = l_budgetset_unit2_available,
700 budget_unit3_available = l_budgetset_unit3_available
701 where current of c1;
702 end loop;
703 hr_utility.set_location('after update out nocopy values passed are '||l_proc,130);
704 p_prd_unit1_available := round(p_prd_unit1_available,p_unit1_precision);
705 p_prd_unit2_available := round(p_prd_unit2_available,p_unit2_precision);
706 p_prd_unit3_available := round(p_prd_unit3_available,p_unit3_precision);
707 hr_utility.set_location('unit1_available '||p_prd_unit1_available||l_proc,136);
708 hr_utility.set_location('unit2_available '||p_prd_unit2_available||l_proc,137);
709 hr_utility.set_location('unit3_available '||p_prd_unit3_available||l_proc,138);
710 hr_utility.set_location('exiting '||l_proc,1000);
711 exception when others then
712 p_prd_unit1_available := l_prd_unit1_available;
713 p_prd_unit2_available := l_prd_unit2_available;
714 p_prd_unit3_available := l_prd_unit3_available;
715 raise;
716 end propagate_period_changes;
717
718 procedure insert_budget_detail(
719 p_budget_version_id in number,
720 p_organization_id in number default null,
721 p_job_id in number default null,
722 p_position_id in number default null,
723 p_grade_id in number default null,
724 p_budget_unit1_percent in number default null,
725 p_budget_unit1_value in number default null,
726 p_budget_unit2_percent in number default null,
727 p_budget_unit2_value in number default null,
728 p_budget_unit3_percent in number default null,
729 p_budget_unit3_value in number default null,
730 p_budget_unit1_value_type_cd in varchar2 default null,
731 p_budget_unit2_value_type_cd in varchar2 default null,
732 p_budget_unit3_value_type_cd in varchar2 default null,
733 p_gl_status in varchar2 default null,
734 p_budget_unit1_available in number default null,
735 p_budget_unit2_available in number default null,
736 p_budget_unit3_available in number default null,
737 p_budget_detail_id out nocopy number
738 ) is
739 l_object_version_number number;
740 begin
741 pqh_budget_details_api.create_budget_detail(
742 p_validate => FALSE
743 ,p_budget_detail_id => p_budget_detail_id
744 ,p_budget_version_id => p_budget_version_id
745 ,p_organization_id => p_organization_id
746 ,p_position_id => p_position_id
747 ,p_job_id => p_job_id
748 ,p_grade_id => p_grade_id
749 ,p_gl_status => p_gl_status
750 ,p_budget_unit1_value => p_budget_unit1_value
751 ,p_budget_unit1_percent => p_budget_unit1_percent
752 ,p_budget_unit1_available => p_budget_unit1_available
753 ,p_budget_unit1_value_type_cd => p_budget_unit1_value_type_cd
754 ,p_budget_unit2_value => p_budget_unit2_value
755 ,p_budget_unit2_percent => p_budget_unit2_percent
756 ,p_budget_unit2_available => p_budget_unit2_available
757 ,p_budget_unit2_value_type_cd => p_budget_unit2_value_type_cd
758 ,p_budget_unit3_value => p_budget_unit3_value
759 ,p_budget_unit3_percent => p_budget_unit3_percent
760 ,p_budget_unit3_available => p_budget_unit3_available
761 ,p_budget_unit3_value_type_cd => p_budget_unit3_value_type_cd
762 ,p_object_version_number => l_object_version_number
763 );
764 exception when others then
765 p_budget_detail_id := null;
766 raise;
767 end insert_budget_detail;
768
769 Procedure update_budget_detail
770 (
771 p_budget_detail_id in number,
772 p_budget_version_id in number default hr_api.g_number,
773 p_organization_id in number default hr_api.g_number,
774 p_job_id in number default hr_api.g_number,
775 p_position_id in number default hr_api.g_number,
776 p_grade_id in number default hr_api.g_number,
777 p_budget_unit1_percent in number default hr_api.g_number,
778 p_budget_unit1_value in number default hr_api.g_number,
782 p_budget_unit3_value in number default hr_api.g_number,
779 p_budget_unit2_percent in number default hr_api.g_number,
780 p_budget_unit2_value in number default hr_api.g_number,
781 p_budget_unit3_percent in number default hr_api.g_number,
783 p_object_version_number in out nocopy number,
784 p_budget_unit1_value_type_cd in varchar2 default hr_api.g_varchar2,
785 p_budget_unit2_value_type_cd in varchar2 default hr_api.g_varchar2,
786 p_budget_unit3_value_type_cd in varchar2 default hr_api.g_varchar2,
787 p_gl_status in varchar2 default hr_api.g_varchar2,
788 p_budget_unit1_available in number default hr_api.g_number,
789 p_budget_unit2_available in number default hr_api.g_number,
790 p_budget_unit3_available in number default hr_api.g_number
791 ) is
792 l_proc varchar2(61) := g_package||'Update_bgd';
793 l_object_version_number number := p_object_version_number;
794 begin
795 hr_utility.set_location('entering'||l_proc,10);
796 hr_utility.set_location('bgd id is'||p_budget_detail_id||l_proc,11);
797 hr_utility.set_location('ovn is'||p_object_version_number||l_proc,12);
798 pqh_budget_details_api.update_budget_detail(
799 p_validate => FALSE
800 ,p_budget_detail_id => p_budget_detail_id
801 ,p_budget_version_id => p_budget_version_id
802 ,p_organization_id => p_organization_id
803 ,p_position_id => p_position_id
804 ,p_job_id => p_job_id
805 ,p_grade_id => p_grade_id
806 ,p_budget_unit1_value => p_budget_unit1_value
807 ,p_budget_unit1_percent => p_budget_unit1_percent
808 ,p_budget_unit1_available => p_budget_unit1_available
809 ,p_budget_unit1_value_type_cd => p_budget_unit1_value_type_cd
810 ,p_budget_unit2_value => p_budget_unit2_value
811 ,p_budget_unit2_percent => p_budget_unit2_percent
812 ,p_budget_unit2_available => p_budget_unit2_available
813 ,p_budget_unit2_value_type_cd => p_budget_unit2_value_type_cd
814 ,p_budget_unit3_value => p_budget_unit3_value
815 ,p_budget_unit3_percent => p_budget_unit3_percent
816 ,p_budget_unit3_available => p_budget_unit3_available
817 ,p_budget_unit3_value_type_cd => p_budget_unit3_value_type_cd
818 ,p_gl_status => p_gl_status
819 ,p_object_version_number => p_object_version_number
820 );
821 hr_utility.set_location('wkd id is'||p_budget_detail_id||l_proc,20);
822 hr_utility.set_location('ovn is'||p_object_version_number||l_proc,30);
823 hr_utility.set_location('exiting'||l_proc,100);
824 exception when others then
825 p_object_version_number := l_object_version_number;
826 raise;
827 end update_budget_detail;
828 procedure bgv_date_validation( p_budget_id in number,
829 p_version_number in number ,
830 p_date_from in date,
831 p_date_to in date,
832 p_bgv_ll_date out nocopy date,
833 p_bgv_ul_date out nocopy date,
834 p_status out nocopy varchar2) is
835 l_max_version number;
836 l_min_version number;
837 cursor c0 is select max(version_number) from pqh_budget_versions
838 where budget_id = p_budget_id ;
839 cursor c1 is select min(version_number) from pqh_budget_versions
840 where budget_id = p_budget_id ;
841 -- cursor to fetch the end_date of the last_version
842 cursor c2 is select date_to from pqh_budget_versions
843 where version_number = l_max_version
844 and budget_id = p_budget_id;
845 -- cursor to fetch next version from the current version
846 cursor c5 is select date_from from pqh_budget_versions
847 where budget_id = p_budget_id
848 and version_number = (select min(version_number)
849 from pqh_budget_versions
850 where budget_id = p_budget_id
851 and version_number > p_version_number) ;
852 -- cursor to fetch previous version from the current version
853 cursor c6 is select date_to from pqh_budget_versions
854 where budget_id = p_budget_id
855 and version_number = (select max(version_number)
856 from pqh_budget_versions
857 where budget_id = p_budget_id
858 and version_number < p_version_number) ;
859 l_max_end_date date;
860 l_min_start_date date;
861 l_ver_end_date date;
862 l_next_ver_start_date date;
863 l_prev_ver_end_date date;
864 l_ver_chk varchar2(15);
865 l_ver_start_date date;
866 l_proc varchar2(61) := g_package ||'bgv_date_validation' ;
867 begin
868 hr_utility.set_location('entering '||l_proc,10);
869 hr_utility.set_location('ver # entered is '||p_version_number||l_proc,10);
870 hr_utility.set_location('start_date is '||p_date_from||l_proc,10);
871 hr_utility.set_location('end_date is '||p_date_to||l_proc,10);
872 if p_budget_id is null then
873 hr_utility.set_message(8302,'PQH_INVALID_BUDGET');
874 hr_utility.raise_error;
875 elsif p_version_number is null then
876 hr_utility.set_message(8302,'PQH_INVALID_VERSION_FOR_BDGT');
877 hr_utility.raise_error;
878 elsif p_date_from is null then
879 hr_utility.set_message(8302,'PQH_START_DT_NULL');
880 hr_utility.raise_error;
881 elsif p_date_to is null then
885 hr_utility.set_message(8302,'PQH_INVALID_END_DT');
882 hr_utility.set_message(8302,'PQH_END_DT_NULL');
883 hr_utility.raise_error;
884 elsif p_date_from > p_date_to then
886 hr_utility.set_message_token('STARTDATE',fnd_date.date_to_chardate(p_date_from));
887 hr_utility.set_message_token('ENDDATE',fnd_date.date_to_chardate(p_date_to));
888 hr_utility.raise_error;
889 end if;
890 -- we are here to correct a existing version or checking for the new version to be entered.
891 open c0;
892 fetch c0 into l_max_version;
893 close c0;
894 hr_utility.set_location('max_version is'||l_max_version||l_proc,70);
895 open c1;
896 fetch c1 into l_min_version;
897 close c1;
898 hr_utility.set_location('min_version is'||l_min_version||l_proc,80);
899 hr_utility.set_location('max_end_date is'||l_max_end_date||l_proc,90);
900 hr_utility.set_location('min_start_date is'||l_min_start_date||l_proc,100);
901 if p_version_number = l_max_version then
902 open c6;
903 fetch c6 into l_prev_ver_end_date;
904 close c6;
905 hr_utility.set_location('version_number = max_version'||l_proc,140);
906 -- last version is getting corrected
907 if p_version_number = l_min_version then
908 hr_utility.set_location('version_number = min version'||l_proc,142);
909 -- There is only one version and we are working on it.so any date user enters is okay.
910 p_status := 'SUCCESS' ;
911 else
912 hr_utility.set_location('Lower limit should be > '||l_prev_ver_end_date||l_proc,162);
913 if p_date_from > l_prev_ver_end_date then
914 hr_utility.set_location('between valid dates '||l_proc,145);
915 p_status := 'SUCCESS' ;
916 else
917 hr_utility.set_location('not between valid dates '||l_proc,148);
918 p_bgv_ll_date := l_prev_ver_end_date;
919 p_status := 'ERROR' ;
920 end if;
921 end if;
922 elsif p_version_number > l_max_version then
923 -- new version is getting added
924 open c2;
925 fetch c2 into l_max_end_date;
926 close c2;
927 hr_utility.set_location('version_number > max_version'||l_proc,150);
928 hr_utility.set_location('Lower limit should be > '||l_max_end_date||l_proc,162);
929 if p_date_from > l_max_end_date then
930 hr_utility.set_location('between valid dates '||l_proc,155);
931 p_status := 'SUCCESS' ;
932 else
933 hr_utility.set_location('not between valid dates '||l_proc,158);
934 p_bgv_ll_date := l_max_end_date;
935 p_status := 'ERROR' ;
936 end if;
937 elsif p_version_number = l_min_version then
938 open c5;
939 fetch c5 into l_next_ver_start_date;
940 close c5;
941 -- first version is getting corrected
942 -- but end date should be equal to ver_end_date
943 hr_utility.set_location('version_number = min_version'||l_proc,160);
944 hr_utility.set_location('Upper limit should be < '||l_next_ver_start_date||l_proc,162);
945 if p_date_to < l_next_ver_start_date then
946 hr_utility.set_location('between valid dates '||l_proc,165);
947 p_status := 'SUCCESS' ;
948 else
949 hr_utility.set_location('not between valid dates '||l_proc,168);
950 p_bgv_ul_date := l_next_ver_start_date;
954 open c5;
951 p_status := 'ERROR' ;
952 end if;
953 else
955 fetch c5 into l_next_ver_start_date;
956 close c5;
957 open c6;
958 fetch c6 into l_prev_ver_end_date;
959 close c6;
960 hr_utility.set_location('version_number in middle '||l_proc,170);
961 -- a version in middle is getting corrected
962 -- in this case start date of the worksheet should be less than or equal to start date
966 if p_date_from between l_prev_ver_end_date+1 and l_next_ver_start_date-1
963 -- of the version and worksheet end date should be greater than or equal to version
964 -- and also version start date should be between last_ver_end_date and next_ver_start_date
965 -- and also version_end_date should be between last_ver_end date and next_ver_start_date
967 and p_date_to between l_prev_ver_end_date+1 and l_next_ver_start_date-1 then
968 hr_utility.set_location('between valid dates '||l_proc,175);
969 p_status := 'SUCCESS' ;
970 else
971 hr_utility.set_location('not between valid dates '||l_proc,178);
972 p_bgv_ll_date := l_prev_ver_end_date+1;
973 p_bgv_ul_date := l_next_ver_start_date-1;
974 p_status := 'ERROR' ;
975 end if;
976 end if;
977 hr_utility.set_location('end of validation with status'||p_status||l_proc,270);
978 exception when others then
979 p_bgv_ll_date := null;
980 p_bgv_ul_date := null;
981 p_status := null;
982 raise;
983 end bgv_date_validation;
984
985 function gl_post(p_budget_version_id in number) return number is
986 l_req number := -1;
987 begin
988 l_req := fnd_request.submit_request(application => 'PQH',
989 program => 'PQHGLPOST',
990 argument1 => p_budget_version_id);
991 return l_req;
992 end gl_post;
993
994 end pqh_bdgt;