[Home] [Help]
PACKAGE BODY: APPS.PAY_ES_BENEFIT_UPLIFT_CALC
Source
1 PACKAGE BODY pay_es_benefit_uplift_calc AS
2 /* $Header: pyesssbu.pkb 120.0 2005/05/29 04:39:34 appldev noship $ */
3 --
4 -- Global Variables
5 hr_formula_error EXCEPTION;
6 g_gross_per_day_formula_exists BOOLEAN := TRUE;
7 g_gross_per_day_formula_cached BOOLEAN := FALSE;
8 g_gross_per_day_formula_id ff_formulas_f.formula_id%TYPE;
9 g_gross_per_day_formula_name ff_formulas_f.formula_name%TYPE;
10 --
11 g_duration_formula_exists BOOLEAN := TRUE;
12 g_duration_formula_cached BOOLEAN := FALSE;
13 g_duration_formula_id ff_formulas_f.formula_id%TYPE;
14 g_duration_formula_name ff_formulas_f.formula_name%TYPE;
15 -------------------------------------------------------------------------------
16 -- FUNCTION get_gross_per_day
17 -------------------------------------------------------------------------------
18 FUNCTION get_gross_per_day(p_assignment_id IN NUMBER
19 ,p_business_group_id IN NUMBER
20 ,p_date_earned IN DATE
21 ,p_formula_name IN VARCHAR2
22 ) RETURN NUMBER IS
23 --
24 l_inputs ff_exec.inputs_t;
25 l_outputs ff_exec.outputs_t;
26 l_formula_exists BOOLEAN := TRUE;
27 l_formula_cached BOOLEAN := FALSE;
28 l_formula_id ff_formulas_f.formula_id%TYPE;
29 l_gross_per_day VARCHAR2(500);
30 --
31 BEGIN
32 -- hr_utility.trace_on(null,'EFT');
33 hr_utility.set_location('--In Gross per Day ',10);
34 --
35 g_gross_per_day_formula_name := p_formula_name;
36 --
37 IF g_gross_per_day_formula_exists THEN
38 --
39 IF g_gross_per_day_formula_exists THEN
40 --
41 IF g_gross_per_day_formula_cached = FALSE THEN
42 cache_formula(p_formula_name,p_business_group_id,p_date_earned,l_formula_id,l_formula_exists,l_formula_cached);
43 g_gross_per_day_formula_exists:=l_formula_exists;
44 g_gross_per_day_formula_cached:=l_formula_cached;
45 g_gross_per_day_formula_id:=l_formula_id;
46 END IF;
47 --
48 IF g_gross_per_day_formula_exists THEN
49 --
50 l_inputs(1).name := 'ASSIGNMENT_ID';
51 l_inputs(1).value := p_assignment_id;
52 l_inputs(2).name := 'DATE_EARNED';
53 l_inputs(2).value := fnd_date.date_to_canonical(p_date_earned);
54 l_inputs(3).name := 'BUSINESS_GROUP_ID';
55 l_inputs(3).value := p_business_group_id;
56 --
57 l_outputs(1).name := 'GROSS_PAY_PER_DAY';
58 --
59 run_formula(p_formula_id => g_gross_per_day_formula_id,
60 p_effective_date => p_date_earned,
61 p_formula_name => g_gross_per_day_formula_name,
62 p_inputs => l_inputs,
63 p_outputs => l_outputs);
64 --
65 l_gross_per_day := substr(l_outputs(1).value,1,32);
66 --
67 END IF;
68
69 END IF;
70
71 --
72 END IF;
73 hr_utility.set_location('--In Formula Return ',11);
74 --
75 RETURN l_gross_per_day;
76 --
77 END get_gross_per_day;
78 --------------------------------------------------------------------------------
79 -- FUNCTION get_duration
80 --------------------------------------------------------------------------------
81 FUNCTION get_duration(p_assignment_id IN NUMBER
82 ,p_business_group_id IN NUMBER
83 ,p_date_earned IN DATE
84 ,p_formula_name IN VARCHAR2
85 ,p_rate1 OUT NOCOPY NUMBER
86 ,p_value1 OUT NOCOPY NUMBER
87 ,p_rate2 OUT NOCOPY NUMBER
88 ,p_value2 OUT NOCOPY NUMBER
89 ,p_rate3 OUT NOCOPY NUMBER
90 ,p_value3 OUT NOCOPY NUMBER
91 ,p_rate4 OUT NOCOPY NUMBER
92 ,p_value4 OUT NOCOPY NUMBER
93 ,p_rate5 OUT NOCOPY NUMBER
94 ,p_value5 OUT NOCOPY NUMBER
95 ,p_rate6 OUT NOCOPY NUMBER
96 ,p_value6 OUT NOCOPY NUMBER
97 ,p_rate7 OUT NOCOPY NUMBER
98 ,p_value7 OUT NOCOPY NUMBER
99 ,p_rate8 OUT NOCOPY NUMBER
100 ,p_value8 OUT NOCOPY NUMBER
101 ,p_rate9 OUT NOCOPY NUMBER
102 ,p_value9 OUT NOCOPY NUMBER
103 ,p_rate10 OUT NOCOPY NUMBER
104 ,p_value10 OUT NOCOPY NUMBER
105 ) RETURN VARCHAR2 IS
106 --
107 l_inputs ff_exec.inputs_t;
108 l_outputs ff_exec.outputs_t;
109 l_formula_exists BOOLEAN := TRUE;
110 l_formula_cached BOOLEAN := FALSE;
111 l_formula_id ff_formulas_f.formula_id%TYPE;
112 l_return_indicator VARCHAR2(1);
113 --
114 BEGIN
115 -- hr_utility.trace_on(null,'EFT');
116 hr_utility.set_location('--In Get Duration ',10);
117 --
118 l_return_indicator := 'N';
119 g_duration_formula_name := p_formula_name;
120 --
121 IF g_duration_formula_exists = TRUE THEN
122 IF g_duration_formula_cached = FALSE THEN
123 cache_formula(p_formula_name,p_business_group_id,p_date_earned,l_formula_id,l_formula_exists,l_formula_cached);
124 g_duration_formula_exists:=l_formula_exists;
125 g_duration_formula_cached:=l_formula_cached;
126 g_duration_formula_id:=l_formula_id;
127 END IF;
128 --
129 IF g_duration_formula_exists THEN
130 --
131 l_inputs(1).name := 'ASSIGNMENT_ID';
132 l_inputs(1).value := p_assignment_id;
133 l_inputs(2).name := 'DATE_EARNED';
134 l_inputs(2).value := fnd_date.date_to_canonical(p_date_earned);
135 l_inputs(3).name := 'BUSINESS_GROUP_ID';
136 l_inputs(3).value := p_business_group_id;
137 --
138 l_outputs(1).name := 'RATE1';
139 l_outputs(2).name := 'VALUE1';
140 l_outputs(3).name := 'RATE2';
141 l_outputs(4).name := 'VALUE2';
142 l_outputs(5).name := 'RATE3';
143 l_outputs(6).name := 'VALUE3';
144 l_outputs(7).name := 'RATE4';
145 l_outputs(8).name := 'VALUE4';
146 l_outputs(9).name := 'RATE5';
147 l_outputs(10).name := 'VALUE5';
148 l_outputs(11).name := 'RATE6';
149 l_outputs(12).name := 'VALUE6';
150 l_outputs(13).name := 'RATE7';
151 l_outputs(14).name := 'VALUE7';
152 l_outputs(15).name := 'RATE8';
153 l_outputs(16).name := 'VALUE8';
154 l_outputs(17).name := 'RATE9';
155 l_outputs(18).name := 'VALUE9';
156 l_outputs(19).name := 'RATE10';
157 l_outputs(20).name := 'VALUE10';
158 --
159 run_formula(p_formula_id => g_duration_formula_id
160 ,p_effective_date => p_date_earned
161 ,p_formula_name => g_duration_formula_name
162 ,p_inputs => l_inputs
163 ,p_outputs => l_outputs);
164 --
165 p_rate1 := substr(l_outputs(1).value,1,32);
166 p_value1 := substr(l_outputs(2).value,1,32);
167 p_rate2 := substr(l_outputs(3).value,1,32);
168 p_value2 := substr(l_outputs(4).value,1,32);
169 p_rate3 := substr(l_outputs(5).value,1,32);
170 p_value3 := substr(l_outputs(6).value,1,32);
171 p_rate4 := substr(l_outputs(7).value,1,32);
172 p_value4 := substr(l_outputs(8).value,1,32);
173 p_rate5 := substr(l_outputs(9).value,1,32);
174 p_value5 := substr(l_outputs(10).value,1,32);
175 p_rate6 := substr(l_outputs(11).value,1,32);
176 p_value6 := substr(l_outputs(12).value,1,32);
177 p_rate7 := substr(l_outputs(13).value,1,32);
178 p_value7 := substr(l_outputs(14).value,1,32);
179 p_rate8 := substr(l_outputs(15).value,1,32);
180 p_value8 := substr(l_outputs(16).value,1,32);
181 p_rate9 := substr(l_outputs(17).value,1,32);
182 p_value9 := substr(l_outputs(18).value,1,32);
183 p_rate10 := substr(l_outputs(19).value,1,32);
184 p_value10 := substr(l_outputs(20).value,1,32);
185 --
186 IF p_rate1 IS NULL OR p_rate1 < 0 THEN
187 p_rate1 := 0;
188 END IF;
189 IF p_rate2 IS NULL OR p_rate2 < 0 THEN
190 p_rate2 := 0;
191 END IF;
192 IF p_rate3 IS NULL OR p_rate3 < 0 THEN
193 p_rate3 := 0;
194 END IF;
195 IF p_rate4 IS NULL OR p_rate4 < 0 THEN
196 p_rate4 := 0;
197 END IF;
198 IF p_rate5 IS NULL OR p_rate5 < 0 THEN
199 p_rate5 := 0;
200 END IF;
201 IF p_rate6 IS NULL OR p_rate6 < 0 THEN
202 p_rate6 := 0;
203 END IF;
204 IF p_rate7 IS NULL OR p_rate7 < 0 THEN
205 p_rate7 := 0;
206 END IF;
207 IF p_rate8 IS NULL OR p_rate8 < 0 THEN
208 p_rate8 := 0;
209 END IF;
210 IF p_rate9 IS NULL OR p_rate9 < 0 THEN
211 p_rate9 := 0;
212 END IF;
213 IF p_rate10 IS NULL OR p_rate10 < 0 THEN
214 p_rate10 := 0;
215 END IF;
216 --
217 IF p_value1 IS NULL OR p_value1 < 0 THEN
218 p_value1 := 0;
219 END IF;
220 IF p_value2 IS NULL OR p_value2 < 0 THEN
221 p_value2 := 0;
222 END IF;
223 IF p_value3 IS NULL OR p_value3 < 0 THEN
224 p_value3 := 0;
225 END IF;
226 IF p_value4 IS NULL OR p_value4 < 0 THEN
227 p_value4 := 0;
228 END IF;
229 IF p_value5 IS NULL OR p_value5 < 0 THEN
230 p_value5 := 0;
231 END IF;
232 IF p_value6 IS NULL OR p_value6 < 0 THEN
233 p_value6 := 0;
234 END IF;
235 IF p_value7 IS NULL OR p_value7 < 0 THEN
236 p_value7 := 0;
237 END IF;
238 IF p_value8 IS NULL OR p_value8 < 0 THEN
239 p_value8 := 0;
240 END IF;
241 IF p_value9 IS NULL OR p_value9 < 0 THEN
242 p_value9 := 0;
243 END IF;
244 IF p_value10 IS NULL OR p_value10 < 0 THEN
245 p_value10 := 0;
246 END IF;
247 --
248 l_return_indicator := 'Y';
249 --
250 END IF;
251 --
252 END IF;
253 hr_utility.set_location('--In Formula Return ',11);
254 --
255 RETURN l_return_indicator;
256 --
257 END get_duration;
258 -------------------------------------------------------------------------------
259 -- PROCEDURE cache_formula
260 -------------------------------------------------------------------------------
261 PROCEDURE cache_formula(p_formula_name IN VARCHAR2
262 ,p_business_group_id IN NUMBER
263 ,p_effective_date IN DATE
264 ,p_formula_id IN OUT NOCOPY NUMBER
265 ,p_formula_exists IN OUT NOCOPY BOOLEAN
266 ,p_formula_cached IN OUT NOCOPY BOOLEAN
267 ) IS
268
269 --
270 CURSOR c_compiled_formula_exist IS
271 SELECT 'Y'
272 FROM ff_formulas_f ff
273 ,ff_compiled_info_f ffci
274 WHERE ff.formula_id = ffci.formula_id
275 AND ff.effective_start_date = ffci.effective_start_date
276 AND ff.effective_end_date = ffci.effective_end_date
277 AND ff.formula_id = p_formula_id
278 AND ff.business_group_id = p_business_group_id
279 AND p_effective_date BETWEEN ff.effective_start_date
280 AND ff.effective_end_date;
281 --
282 CURSOR c_get_formula(p_formula_name ff_formulas_f.formula_name%TYPE
283 ,p_effective_date DATE) IS
284 SELECT ff.formula_id
285 FROM ff_formulas_f ff
286 WHERE ff.formula_name = p_formula_name
287 AND ff.business_group_id = p_business_group_id
288 AND p_effective_date BETWEEN ff.effective_start_date
289 AND ff.effective_end_date;
290 --
291 l_test VARCHAR2(1);
292 --
293 BEGIN
294 --
295 IF p_formula_cached = FALSE THEN
296 --
297 OPEN c_get_formula(p_formula_name,p_effective_date);
298 FETCH c_get_formula INTO p_formula_id;
299 IF c_get_formula%FOUND THEN
300 OPEN c_compiled_formula_exist;
301 FETCH c_compiled_formula_exist INTO l_test;
302 IF c_compiled_formula_exist%NOTFOUND THEN
303 p_formula_cached := FALSE;
304 p_formula_exists := FALSE;
305 --
306 fnd_message.set_name('PAY','FFX03A_FORMULA_NOT_FOUND');
307 fnd_message.set_token('1', p_formula_name);
308 fnd_message.raise_error;
309 ELSE
310 p_formula_cached := FALSE;
311 p_formula_exists := TRUE;
312 END IF;
313 ELSE
314 p_formula_cached := FALSE;
315 p_formula_exists := FALSE;
316 END IF;
317 CLOSE c_get_formula;
318 END IF;
319 --
320 END cache_formula;
321 -------------------------------------------------------------------------------
322 -- PROCEDURE run_formula
323 -------------------------------------------------------------------------------
324 PROCEDURE run_formula(p_formula_id IN NUMBER
325 ,p_effective_date IN DATE
326 ,p_formula_name IN VARCHAR2
327 ,p_inputs IN ff_exec.inputs_t
328 ,p_outputs IN OUT NOCOPY ff_exec.outputs_t) IS
329 --
330 l_inputs ff_exec.inputs_t;
331 l_outputs ff_exec.outputs_t;
332 --
333 BEGIN
334 hr_utility.set_location('--In Formula ',20);
335 --
336 -- Initialize the formula
337 --
338 ff_exec.init_formula(p_formula_id, p_effective_date , l_inputs, l_outputs);
339 --
340 -- Set up the input values
341 --
342 IF l_inputs.count > 0 and p_inputs.count > 0 THEN
343 FOR i IN l_inputs.first..l_inputs.last LOOP
344 FOR j IN p_inputs.first..p_inputs.last LOOP
345 IF l_inputs(i).name = p_inputs(j).name THEN
346 l_inputs(i).value := p_inputs(j).value;
347 exit;
348 END IF;
349 END LOOP;
350 END LOOP;
351 END IF;
352 --
353 -- Run the formula
354 --
355 ff_exec.run_formula(l_inputs,l_outputs);
356 --
357 -- Populate the output table
358 --
359 IF l_outputs.count > 0 and p_inputs.count > 0 then
360 FOR i IN l_outputs.first..l_outputs.last LOOP
361 FOR j IN p_outputs.first..p_outputs.last LOOP
362 IF l_outputs(i).name = p_outputs(j).name THEN
363 p_outputs(j).value := l_outputs(i).value;
364 exit;
365 END IF;
366 END LOOP;
367 END LOOP;
368 END IF;
369 hr_utility.set_location('--Leaving Formula ',21);
370 EXCEPTION
371 WHEN hr_formula_error THEN
372 fnd_message.set_name('PER','FFX22J_FORMULA_NOT_FOUND');
373 fnd_message.set_token('1', p_formula_name);
374 fnd_message.raise_error;
375 WHEN OTHERS THEN
376 raise;
377 --
378 END run_formula;
379 --
380 END pay_es_benefit_uplift_calc;