1 PACKAGE BODY PQP_GB_SCOTLAND_LGPS_PENSIONPY AS
2 /* $Header: pqgbsclgps.pkb 120.3.12010000.3 2008/09/26 06:43:38 pbalu noship $ */
3 --
4 g_package VARCHAR2(31) := 'PQP_GB_SCOTLAND_LGPS_PENSIONPY.';
5
6 --6666135 Begin
7 Type Formula_Element is RECORD
8 (
9 Element_name varchar2(150),
10 Formula_name varchar2(150),
11 formula_id Number(9)
12 );
13 Type Formula_Element_Tab_typ is table of Formula_Element index by Binary_integer;
14 Formula_Element_Tab Formula_Element_Tab_typ;
15 Type Formula_Tab_typ is table of varchar2(150) index by Binary_integer;
16 Formula_Tab Formula_Tab_typ;
17 Formula_Tab_new Formula_Tab_typ;
18
19 j_formula_count number;
20 k_aasgn_form_count number;
21 l_warning_msg varchar2(200);
22 --6666135 End
23
24
25 Function RUN_USER_FORMULA(p_assignment_id NUMBER
26 ,p_effective_date DATE
27 ,p_business_group_id NUMBER
28 ,p_payroll_id NUMBER
29 ,Formula_Tab Formula_Tab_typ
30 ,p_assignment_number VARCHAR2)
31 return number is
32
33 --6666135 Begin
34 cursor c_pqp_formula_id(P_FORMULA_NAME VARCHAR2)
35 is
36 select ffff.formula_id
37 From FF_FORMULAS_F ffff
38 where UPPER(ffff.FORMULA_NAME) = UPPER(P_FORMULA_NAME)
39 and ffff.business_group_id = p_business_group_id
40 and p_effective_date between ffff.EFFECTIVE_START_DATE and ffff.EFFECTIVE_END_DATE;
41 --6666135 End
42
43 --This cursor will fetch the seeded element details.
44 cursor c_additional_pension(p_assignment_id NUMBER
45 ,p_effective_date date)
46 is
47 SELECT peevf.element_entry_id
48 ,peevf.input_value_id
49 FROM pay_element_types_f petf
50 ,pay_element_entries_f peef
51 ,pay_element_entry_values_f peevf
52 where petf.element_name = 'PQP LGPS Additional Pensionable Pay'
53 and petf.legislation_code = 'GB'
54 -- and petf.business_group_id = p_business_group_id 6652351
55 and petf.element_type_id = peef.element_type_id
56 and peef.element_entry_id = peevf.element_entry_id
57 and peef.assignment_id = p_assignment_id
58 --and p_effective_date between petf.EFFECTIVE_START_DATE and petf.EFFECTIVE_END_DATE --6666135
59 and p_effective_date between peef.EFFECTIVE_START_DATE and peef.EFFECTIVE_END_DATE
60 and p_effective_date between peevf.EFFECTIVE_START_DATE and peevf.EFFECTIVE_END_DATE;
61
62 --6666135 Begin
63 cursor c_seeded_element_det
64 is
65 select pelf.element_link_id,plivf.input_value_id
66 from pay_element_links_f pelf
67 ,pay_link_input_values_f plivf
68 ,pay_element_types_f petf
69 where petf.element_name = 'PQP LGPS Additional Pensionable Pay'
70 and petf.legislation_code = 'GB'
71 and petf.element_type_id = pelf.element_type_id
72 and pelf.ELEMENT_LINK_ID = plivf.ELEMENT_LINK_ID
73 and pelf.business_group_id = p_business_group_id
74 and pelf.LINK_TO_ALL_PAYROLLS_FLAG = 'Y'
75 and p_effective_date between pelf.EFFECTIVE_START_DATE and pelf.EFFECTIVE_END_DATE;
76 --6666135 End
77
78 cursor c_action_ids(p_assignment_id NUMBER
79 ,p_effective_date date)
80 is
81 SELECT max(paa.assignment_action_id) ASSIGNMENT_ACTION_ID
82 ,max(ppa.payroll_action_id) PAYROLL_ACTION_ID
83 FROM pay_payroll_actions ppa,
84 pay_assignment_actions paa
85 WHERE ppa.action_type in ('Q','R')
86 AND paa.action_status = 'C'
87 AND ppa.business_group_id = p_business_group_id
88 AND paa.assignment_id = p_assignment_id
89 AND ppa.payroll_action_id = paa.payroll_action_id
90 AND effective_date <= p_effective_date;
91
92 c_additional_pension_row c_additional_pension%rowtype;
93 l_inputs ff_exec.inputs_t;
94 p_inputs ff_exec.inputs_t;
95 l_outputs ff_exec.outputs_t;
96 c_action_ids_row c_action_ids%rowtype;
97 n_sum_formula_val number :=0;
98 --6666135 Begin
99 c_seeded_element_det_row c_seeded_element_det%rowtype;
100 v_formula_id number(9);
101 Skip_formula Exception;
102 v_eff_start_date date;
103 v_eff_end_date date;
104 v_element_entry_id pay_element_entry_values_f.element_entry_value_id%type;
105 --6666135 End
106 BEGIN
107 -- setting the contexts
108 p_inputs(1).name := 'ASSIGNMENT_ID';
109 p_inputs(1).value := p_assignment_id;
110 p_inputs(2).name := 'DATE_EARNED';
111 p_inputs(2).value := fnd_date.date_to_canonical(p_effective_date);
112 p_inputs(3).name := 'BUSINESS_GROUP_ID';
113 p_inputs(3).value := p_business_group_id;
114 p_inputs(4).name := 'PAYROLL_ID';
115 p_inputs(4).value := p_payroll_id;
116 OPEN c_action_ids(p_assignment_id, p_effective_date);
117 FETCH c_action_ids into c_action_ids_row;
118 IF c_action_ids_row.ASSIGNMENT_ACTION_ID is not null
119 THEN
120 p_inputs(5).name := 'PAYROLL_ACTION_ID';
121 p_inputs(5).value := c_action_ids_row.PAYROLL_ACTION_ID;
122 p_inputs(6).name := 'ASSIGNMENT_ACTION_ID';
123 p_inputs(6).value := c_action_ids_row.ASSIGNMENT_ACTION_ID;
124 END IF;
125 CLOSE c_action_ids;
126 hr_utility.trace(' PAYROLL_ACTION_ID '|| c_action_ids_row.PAYROLL_ACTION_ID);
127 hr_utility.trace(' ASSIGNMENT_ACTION_ID '||c_action_ids_row.ASSIGNMENT_ACTION_ID);
128 hr_utility.trace(' p_assignment_id '||p_assignment_id);
129 hr_utility.trace('**Date earned '|| fnd_date.date_to_canonical(p_effective_date));
130 hr_utility.trace(' p_payroll_id '||p_payroll_id);
131
132 -- 6666135 Begin
133 FOR I in 1..Formula_Tab.COUNT
134 LOOP
135 v_formula_id := Null;
136 hr_utility.trace(' For Formula_Tab '||Formula_Tab(I));
137 OPEN c_pqp_formula_id(Formula_Tab(I));
138 Fetch c_pqp_formula_id into v_formula_id;
139 if c_pqp_formula_id%NOTFOUND then
140 hr_utility.set_location('Formula -'||Formula_Tab(I)||'- Not Present/effective in Table',11);
141 l_warning_msg := 'Formula -'||Formula_Tab(I)||'- Not Present or effective for Assignment '||p_assignment_number||' On '||p_effective_date;
142 fnd_file.put_line (fnd_file.LOG, l_warning_msg);
143 fnd_file.put_line(FND_FILE.OUTPUT, l_warning_msg);
144 raise_application_error(-20001,' Invalid Formula ');
145 end if;
146 Close c_pqp_formula_id;
147 if v_formula_id is not null then
148 hr_utility.trace(' Inside RUN_USER_FORMULA '||Formula_Tab(I));
149 ff_exec.init_formula(v_formula_id, p_effective_date , l_inputs, l_outputs);
150 --6666135 End
151 --Assigning the contexts to the input variables
152 IF l_inputs.count > 0 and p_inputs.count > 0
153 THEN
154 FOR i IN l_inputs.first..l_inputs.last
155 LOOP
156 FOR j IN p_inputs.first..p_inputs.last
157 LOOP
158 IF l_inputs(i).name = p_inputs(j).name
159 THEN
160 l_inputs(i).value := p_inputs(j).value;
161 exit;
162 END IF;
163 END LOOP;
164 END LOOP;
165 END IF;
166 FOR i IN l_inputs.first..l_inputs.last
167 LOOP
168 hr_utility.trace(' i= '||i||' name '||l_inputs(i).name ||' value '||l_inputs(i).value);
169 END LOOP;
170 --executing the formula
171 ff_exec.run_formula(l_inputs,l_outputs);
172 hr_utility.trace(' calculated value from User formula '||l_outputs(1).value);
173 fnd_file.put_line(FND_FILE.OUTPUT,' ------ Formula '||Formula_Tab(I)||' value '||l_outputs(1).value);
174 n_sum_formula_val := n_sum_formula_val+ nvl(l_outputs(1).value,0);
175 End if; --formula id not null check 6666135
176 END LOOP;
177 hr_utility.trace(' Total value from all User formulas '||n_sum_formula_val);
178 IF n_sum_formula_val > 0
179 THEN --if the formula returns value greater than 0 6666135
180 OPEN c_additional_pension(p_assignment_id
181 ,p_effective_date);
182 FETCH c_additional_pension INTO c_additional_pension_row;
183 IF c_additional_pension%NOTFOUND then
184 hr_utility.trace(' Inserting seeded element with value'||n_sum_formula_val);
185 OPEN c_seeded_element_det;
186 FETCH c_seeded_element_det into c_seeded_element_det_row;
187 if c_seeded_element_det%NOTFOUND then
188 hr_utility.set_location(' Seeded Element is not linked ',11);
189 l_warning_msg := 'Seeded Element is not linked to the Payroll of Assignment '||p_assignment_number||' On '||p_effective_date;
190 fnd_file.put_line (fnd_file.LOG, l_warning_msg);
191 Raise Skip_formula;
192 end if;
193 CLOSE c_seeded_element_det;
194 v_eff_start_date := p_effective_date;
195
196 hr_entry_api.insert_element_entry(
197 p_effective_start_date => v_eff_start_date,
198 p_effective_end_date => v_eff_end_date,
199 p_element_entry_id => v_element_entry_id,
200 p_assignment_id => p_assignment_id,
201 p_element_link_id => c_seeded_element_det_row.element_link_id,
202 p_creator_type => 'F',
203 p_entry_type => 'E',
204 p_date_earned => v_eff_start_date,
205 p_input_value_id1 => c_seeded_element_det_row.input_value_id,
206 p_entry_value1 => to_char(n_sum_formula_val)
207 );
208 ELSE
209 hr_utility.trace(' calling for correction of seeded element '||n_sum_formula_val);
210 --6666135 End
211 hr_entry_api.update_element_entry (p_dt_update_mode =>'CORRECTION',
212 p_session_date => p_effective_date,
213 p_check_for_update =>'N',
214 p_creator_type => 'F',
215 p_element_entry_id => c_additional_pension_row.element_entry_id,
216 p_input_value_id1 => c_additional_pension_row.input_value_id,
217 p_entry_value1 => n_sum_formula_val --n_pen_value 6666135
218 );
219
220 END IF; --Seeded element present or not
221 CLOSE c_additional_pension;
222 END IF; -- formula returned value greater than zero
223 hr_utility.trace(' formula completed');
224 return n_sum_formula_val;
225 Exception
226 When Skip_formula then
227 --seeded element is not linked to Payroll so skipping
228 Null;
229 When others then
230 hr_utility.trace(sqlerrm);
231 Raise;
232 --6666135 End
233 END RUN_USER_FORMULA;
234
235 PROCEDURE DERIVE_PENSIONABLE_PAY(errbuf out nocopy varchar2,
236 retcode out nocopy number,
237 p_effective_start_dt IN varchar2,
238 p_effective_end_dt IN varchar2,
239 p_payroll_id IN NUMBER,
240 p_assignment_set_id IN NUMBER,
241 p_assignment_number IN varchar2,
242 p_employee_no IN varchar2,
243 p_business_group_id IN NUMBER,
244 p_mode in varchar2 )
245 IS
246 --
247 v_eff_end_date date;
248 v_given_end_date date;
249 v_eff_end_date_corr date;
250 v_eff_start_date_corr date;
251 v_eff_start_date date;
252 v_max_date date;
253 v_assignment_eff_date date;
254 max_future_date date;
255 l_mode varchar2(20);
256 l_proc VARCHAR2(61) := g_package || 'DERIVE_PENSIONABLE_PAY';
257 n_object_version_no number;
258 l_eff_start_date_op date;
259 l_eff_end_date_op date;
260 n_prev_assignment_id per_all_assignments_f.assignment_id%type;
261 l_ELEMENT_NAME pay_element_types_f.ELEMENT_NAME%TYPE;
262
263 -- This cursor will fetch assignment ids
264 -- based on the payroll id or assignment id or employee number or assignment set id whichever entered by the user
265
266 CURSOR c_all_valid_assignment
267 IS
268 SELECT paaf.assignment_id, paaf.assignment_number,
269 paaf.payroll_id, MIN(paaf.EFFECTIVE_START_DATE) EFFECTIVE_START_DATE
270 FROM per_all_assignments_f paaf,
271 per_all_people_f papf,
272 per_assignment_status_types past
273 WHERE paaf.business_group_id = p_business_group_id
274 AND paaf.payroll_id= nvl(p_payroll_id, paaf.payroll_id)
275 -- AND paaf.assignment_id = nvl(p_assignment_id, paaf.assignment_id)
276 AND paaf.assignment_number = nvl(p_assignment_number, paaf.assignment_number)
277 AND paaf.EFFECTIVE_START_DATE <= v_given_end_date
278 AND paaf.EFFECTIVE_END_DATE > v_eff_start_date
279 AND paaf.person_id = papf.person_id
280 AND papf.employee_number = nvl(p_employee_no, papf.employee_number)
281 AND past.ASSIGNMENT_STATUS_TYPE_ID = paaf.ASSIGNMENT_STATUS_TYPE_ID
282 AND past.PER_SYSTEM_STATUS in ('ACTIVE_ASSIGN','SUSP_ASSIGN', 'TERM_ASSIGN')-- 'TERM_ASSIGN' added for bug 6868115
283 --6813970 begin
284 /* Moving Assignment set check from here, so that both types of Assignment set can be processed.
285 AND (p_assignment_set_id IS NULL -- don't check for assignment set in this case
286 OR EXISTS (SELECT 1 FROM hr_assignment_sets has1
287 WHERE has1.assignment_set_id = p_assignment_set_id
288 AND has1.business_group_id = paaf.business_group_id
289 AND nvl(has1.payroll_id, paaf.payroll_id) = paaf.payroll_id
290 AND (NOT EXISTS (SELECT 1 -- chk no amendmts
291 FROM hr_assignment_set_amendments hasa1
292 WHERE hasa1.assignment_set_id =
293 has1.assignment_set_id)
294 OR EXISTS (SELECT 1 -- chk include amendmts
295 FROM hr_assignment_set_amendments hasa2
296 WHERE hasa2.assignment_set_id =
297 has1.assignment_set_id
298 AND hasa2.assignment_id = paaf.assignment_id
299 AND nvl(hasa2.include_or_exclude,'I') = 'I')
300 OR (NOT EXISTS (SELECT 1 --chk no exlude amendmts
301 FROM hr_assignment_set_amendments hasa3
302 WHERE hasa3.assignment_set_id =
303 has1.assignment_set_id
304 AND hasa3.assignment_id = paaf.assignment_id
305 AND nvl(hasa3.include_or_exclude,'I') = 'E')
306 AND NOT EXISTS (SELECT 1 --and chk no Inc amendmts
307 FROM hr_assignment_set_amendments hasa4
308 WHERE hasa4.assignment_set_id =
309 has1.assignment_set_id
310 AND nvl(hasa4.include_or_exclude,'I') = 'I') ) -- end checking exclude amendmts
311 ) -- done checking amendments
312 ) -- done asg set check when not null
313 ) -- end of asg set check
314 6813970 end */
315 GROUP BY assignment_id, assignment_number, payroll_id
316 ORDER BY assignment_id, EFFECTIVE_START_DATE;
317
318 --6666135 Begin
319 --This cursor will fetch the formual and element details from the Configuration value
320 --7369484 Changed to Scottish configuration value
321 cursor c_pqp_formula_element_det
322 is
323 select distinct PCV_INFORMATION1
324 From pqp_configuration_values
325 where pcv_information_category = 'PQP_GB_LGPS_SCOTLAND_FF_INFO'
326 AND business_group_id=p_business_group_id; --New business group specific Condition is added in this cursor for bug 6856733
327
328 --6666135 End
329 --7369484 End
330
331 --This cursor will check for the presence of assignments in pqp_assignment_attributes_f table
332 CURSOR c_pqp_assignment(n_assignment_id NUMBER)
333 IS
334 SELECT pqpaaf.lgps_process_flag,
335 pqpaaf.assignment_attribute_id,
336 pqpaaf.EFFECTIVE_START_DATE,
337 pqpaaf.object_version_number
338 FROM pqp_assignment_attributes_f pqpaaf
339 WHERE pqpaaf.assignment_id = n_assignment_id
340 AND pqpaaf.business_group_id = p_business_group_id
341 AND nvl(pqpaaf.lgps_process_flag,'Nul') = nvl(l_mode,nvl(pqpaaf.lgps_process_flag,'Nul')) --l_mode will have value only in case of Incomplete and reprocess
342 AND ( v_assignment_eff_date between pqpaaf.EFFECTIVE_START_DATE and pqpaaf.EFFECTIVE_END_DATE
343 OR pqpaaf.EFFECTIVE_START_DATE = (select min(EFFECTIVE_START_DATE) from pqp_assignment_attributes_f where assignment_id = n_assignment_id
344 AND lgps_process_flag = nvl(l_mode,lgps_process_flag) AND business_group_id = p_business_group_id
345 AND EFFECTIVE_START_DATE BETWEEN v_assignment_eff_date AND v_eff_end_date));
346
347 --This cursor will fetch the all elements for the assigment
348 CURSOR c1_all_element(n_assignment_id NUMBER)
349 IS
350 SELECT peef.ELEMENT_TYPE_ID,petf.ELEMENT_NAME
351 FROM pay_element_entries_f peef, pay_element_types_f petf
352 WHERE peef.ASSIGNMENT_ID=n_assignment_id
353 AND peef.ELEMENT_TYPE_ID = petf.ELEMENT_TYPE_ID
354 AND petf.business_group_id = p_business_group_id
355 AND v_assignment_eff_date between peef.EFFECTIVE_START_DATE and peef.EFFECTIVE_END_DATE
356 AND v_assignment_eff_date between petf.EFFECTIVE_START_DATE and petf.EFFECTIVE_END_DATE;
357 --6666135 End
358
359 --For the element to get processed by pqp_rates_history_calc.get_historic_rate two rows should be present
360 --One row with data PQP_UK_RATE_TYPE and PQP_LGPS_SCOTLAND_PENSION_PAY
361 --and second row with PQP_UK_ELEMENT_ATTRIBUTION and Pay Value.
362 -- 7369484 Start Changes made in cursor to fetch both rate types
363 CURSOR c2_PQP_UK_RATE_TYPE(n_element_type_id NUMBER)
364 IS
365 SELECT pet.EEI_INFORMATION1
366 FROM pay_element_type_extra_info pet
367 WHERE pet.element_type_id = n_element_type_id
368 AND pet.INFORMATION_TYPE = 'PQP_UK_RATE_TYPE'
369 AND pet.EEI_INFORMATION1 IN ('PQP_LGPS_PENSION_PAY','PQP_LGPS_SCOTLAND_PENSION_PAY');
370 -- 7369484 End
371 CURSOR c3_pqp_lgps_pension_pay(n_element_type_id NUMBER)
372 IS
373 SELECT 1
374 FROM pay_element_type_extra_info pet
375 WHERE pet.element_type_id = n_element_type_id
376 AND pet.INFORMATION_TYPE = 'PQP_UK_ELEMENT_ATTRIBUTION';
377
378
379 --This cursor to check the future date track records in pqp_assignment_attributes_f
380 CURSOR c_future_date(n_assignment_id NUMBER)
381 IS
382 SELECT max(EFFECTIVE_START_DATE)
383 FROM pqp_assignment_attributes_f pqpaaf
384 WHERE pqpaaf.assignment_id = n_assignment_id
385 AND pqpaaf.business_group_id = p_business_group_id;
386 --
387 --This cursor to correct the entries till the end date
388 CURSOR c_correct_pqp(n_assignment_id NUMBER)
389 IS
390 SELECT ASSIGNMENT_ATTRIBUTE_ID, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE, object_version_number
391 FROM pqp_assignment_attributes_f pqpaaf
392 WHERE pqpaaf.assignment_id = n_assignment_id
393 and pqpaaf.business_group_id = p_business_group_id
394 and pqpaaf.EFFECTIVE_START_DATE > v_max_date
395 -- and pqpaaf.EFFECTIVE_START_DATE between v_eff_start_date and v_eff_end_date_corr;
396 and pqpaaf.EFFECTIVE_START_DATE between v_assignment_eff_date and v_eff_end_date_corr;
397
398 --
399
400 c1_all_element_data c1_all_element%rowtype;
401 c2_PQP_UK_RATE_TYPE_data c2_PQP_UK_RATE_TYPE%rowtype;
402 c3_pqp_lgps_pension_pay_data c3_pqp_lgps_pension_pay%rowtype;
403 --c_formula_pension_value pay_element_entry_values_f.SCREEN_ENTRY_VALUE%type;
404 c_formula_pension_value number;
405 v_mode varchar2(30);
406 N_start_year NUMBER;
407 n_present number;
408 b_rate_type boolean;
409 b_element_present boolean;
410 b_input_value_present boolean;
411 l_lgps_process_flag pqp_assignment_attributes_f.lgps_process_flag%type;
412 --l_lgps_pensionable_pay pqp_assignment_attributes_f.lgps_pensionable_pay%type;
413 l_lgps_pensionable_pay number;
414 b_pqp_assignment_found boolean;
415 b_pqp_found boolean;
416 c_pqp_assignment_row c_pqp_assignment%rowtype;
417 skip_assignment Exception;
418 skip_element Exception;
419 l_assignment_attribute_id number;
420
421
422 --6813970 begin
423
424 l_formula_id NUMBER;
425 l_tab_asg_set_amnds pqp_budget_maintenance.t_asg_set_amnds;
426 l_include_flag VARCHAR2(10);
427
428 --6813970 end
429
430 --7369484 Begin
431
432 b_eng_rate boolean;
433 b_scot_rate boolean;
434
435 --7369484 End
436
437 -- main
438 BEGIN
439 -- hr_utility.trace_on(null,'gag');
440 hr_utility.set_location('Entering: ' || l_proc, 10);
441 BEGIN
442 insert into fnd_sessions (SESSION_ID, EFFECTIVE_DATE)
443 values(userenv('sessionid'), trunc(SYSDATE));
444 EXCEPTION
445 WHEN others THEN
446 hr_utility.trace('SESSION ALREADY EXISTS :'|| sqlerrm);
447 Raise;
448 END;
449 v_eff_start_date := fnd_date.canonical_to_date(p_effective_start_dt);
450 --calculation of pension end date for the year
451 N_start_year := TO_NUMBER(TO_CHAR(v_eff_start_date,'YYYY'));
452 IF trunc(v_eff_start_date) > TO_DATE('31-03-'||N_start_year,'DD-MM-YYYY')
453 THEN
454 N_start_year := N_start_year+1;
455 END IF;
456 v_eff_end_date := TO_DATE('31-03-'||N_start_year,'DD-MM-YYYY');
457 v_given_end_date := v_eff_end_date;
458 IF p_effective_end_dt IS not NULL --to date entered by the user.
459 THEN
460 v_given_end_date := fnd_date.canonical_to_date(p_effective_end_dt);
461 --To check the given dates falls in the same pension year
462 IF ((v_eff_start_date BETWEEN to_date('01/04/'||to_char(v_eff_start_date,'YYYY'),'dd/mm/yyyy')
463 AND to_date('31/12/'||to_char(v_eff_start_date,'YYYY'),'dd/mm/yyyy'))
464 AND (v_eff_end_date BETWEEN to_date('01/04/'||to_char(v_eff_start_date,'YYYY'),'dd/mm/yyyy')
465 AND to_date('31/03/'||to_char(to_number(to_char(v_eff_start_date,'YYYY'))+1),'dd/mm/yyyy')))
466 OR ((v_eff_start_date BETWEEN to_date('01/01/'||to_char(v_eff_start_date,'YYYY'),'dd/mm/yyyy')
467 AND to_date('31/03/'||to_char(v_eff_start_date,'YYYY'),'dd/mm/yyyy'))
468 AND (v_eff_end_date BETWEEN to_date('01/01/'||to_char(v_eff_start_date,'YYYY'),'dd/mm/yyyy')
469 AND to_date('31/03/'||to_char(v_eff_start_date,'YYYY'),'dd/mm/yyyy')))
470 THEN
471 hr_utility.set_location('Start date and End date are in the same pension year ',6);
472 ELSE
473 fnd_file.put_line (fnd_file.LOG, 'Start date and End date should fall in the same pension year.');
474 hr_utility.set_location('Start date and End date should fall in the same tax year',8);
475 v_eff_start_date := Null; -- to exit the program
476 END IF;
477 END IF;
478 --6813970 begin
479 --Check for Assignment set
480 If p_assignment_set_id is not null then
481 pqp_budget_maintenance.get_asg_set_details(p_assignment_set_id => p_assignment_set_id
482 ,p_formula_id => l_formula_id
483 ,p_tab_asg_set_amnds => l_tab_asg_set_amnds
484 );
485 If l_formula_id is null and l_tab_asg_set_amnds.count = 0 then
486 fnd_file.put_line (fnd_file.LOG, ' Assignment set id entered '||p_assignment_set_id||' is not valid');
487 v_eff_start_date := Null; -- to exit the program
488 end if;
489 End if;
490 --6813970 end
491 --6666135 Begin
492 --Fetching formula details
493 j_formula_count := 0;
494 For I in c_pqp_formula_element_det
495 loop
496 j_formula_count := j_formula_count+1;
497 Formula_Element_Tab(j_formula_count).Element_name := substr(I.PCV_INFORMATION1,1,instr(I.PCV_INFORMATION1,'|')-1);
498 Formula_Element_Tab(j_formula_count).Formula_name := substr(I.PCV_INFORMATION1,instr(I.PCV_INFORMATION1,'|')+1);
499 hr_utility.trace(' Element_name '||j_formula_count|| Formula_Element_Tab(j_formula_count).Element_name);
500 hr_utility.trace(' Formula_name '||j_formula_count|| Formula_Element_Tab(j_formula_count).Formula_name);
501 end loop;
502 --6666135 End
503
504 v_eff_end_date_corr := v_eff_end_date;
505 hr_utility.set_location('Effective Start Date: ' || p_effective_start_dt,1);
506 hr_utility.set_location('Effective End Date: ' || p_effective_end_dt,2);
507 hr_utility.set_location('Calculated End Date: ' || v_eff_end_date_corr, 3);
508 hr_utility.set_location('Calculated Start Date: ' || v_eff_start_date, 3);
509 hr_utility.set_location('p_assignment_set_id: ' || p_assignment_set_id, 3);
510 hr_utility.set_location('p_assignment_number: ' || p_assignment_number, 3);
511 hr_utility.set_location('p_employee_no: ' || p_employee_no, 3);
512 hr_utility.set_location('p_payroll_id: ' || p_payroll_id, 3);
513 hr_utility.set_location('p_business_group_id: ' || p_business_group_id, 3);
514 hr_utility.set_location('p_mode: ' || p_mode, 3);
515 IF p_mode = 'Reprocess'
516 THEN
517 l_mode := 'Y';
518 ELSIF p_mode = 'Incomplete'
519 THEN
520 l_mode := 'I';
521 END IF;
522 --
523 hr_utility.set_location('l_mode: ' || l_mode, 3);
524 FOR c_all_assignments in c_all_valid_assignment
525 LOOP
526 Begin
527 hr_utility.set_location('Inside valid Assignments'||c_all_assignments.assignment_id,20);
528
529 if nvl(n_prev_assignment_id,'0.000') = c_all_assignments.assignment_id then
530 raise skip_assignment;
531 end if;
532
533
534
535 n_prev_assignment_id := c_all_assignments.assignment_id;
536 l_lgps_pensionable_pay := NULL;
537 c_formula_pension_value := NULL;
538 b_element_present := FALSE;
539 b_rate_type := FALSE;
540 b_input_value_present := FALSE;
541 b_pqp_found := NULL;
542 b_pqp_assignment_found := NULL;
543 c_pqp_assignment_row := NULL;
544 v_assignment_eff_date := NULL;
545 max_future_date := NULL;
546 Formula_Tab := Formula_Tab_new; --6666135
547 k_aasgn_form_count := 0; --6666135
548 -- 7369484 Begin
549 b_eng_rate := FALSE;
550 b_scot_rate := FALSE;
551 -- 7369484 End
552
553 v_assignment_eff_date := Greatest(c_all_assignments.EFFECTIVE_START_DATE,v_eff_start_date);
554
555 --6813970 begin
556 l_include_flag := 'N';
557 If p_assignment_set_id is not null then
558 l_include_flag := pqp_budget_maintenance.chk_is_asg_in_asg_set(p_assignment_id => c_all_assignments.assignment_id
559 ,p_formula_id => l_formula_id
560 ,p_tab_asg_set_amnds => l_tab_asg_set_amnds
561 ,p_effective_date => v_assignment_eff_date
562 );
563 if l_include_flag = 'N' then
564 raise skip_assignment;
565 end if;
566
567 end if;
568 --6813970 end
569
570 OPEN c_future_date(c_all_assignments.assignment_id);
571 FETCH c_future_date into max_future_date;
572 IF max_future_date is not NULL THEN
573 b_pqp_found := TRUE;
574 END IF;
575 CLOSE c_future_date;
576
577 IF b_pqp_found THEN
578 OPEN c_pqp_assignment(c_all_assignments.assignment_id);
579 FETCH c_pqp_assignment INTO c_pqp_assignment_row;
580 IF c_pqp_assignment%found
581 then
582 b_pqp_assignment_found := TRUE;
583 END IF;
584 CLOSE c_pqp_assignment;
585 IF b_pqp_assignment_found THEN
586 IF ((p_mode = 'Start of the Year' and nvl(c_pqp_assignment_row.lgps_process_flag,'Y') in ('Y','P','I','U'))
587 or l_mode in ('Y','I')
588 or nvl(c_pqp_assignment_row.lgps_process_flag,'New Hires') = p_mode) THEN
589 v_max_date := Greatest(c_pqp_assignment_row.EFFECTIVE_START_DATE, v_eff_start_date);
590 n_object_version_no := c_pqp_assignment_row.object_version_number;
591 ElSE
592 Raise skip_assignment;
593 END IF;
594
595 v_assignment_eff_date := Greatest(c_pqp_assignment_row.EFFECTIVE_START_DATE, v_assignment_eff_date);
596 END IF;
597 END IF;
598
599 IF b_pqp_assignment_found is NULL AND l_mode is not null THEN
600 --No records in PQP_ASSIGNMENT_ATTRIBUTES_F table matching mode - reprocess or incomplete.
601 raise skip_assignment;
602 END IF;
603
604 OPEN c1_all_element(c_all_assignments.assignment_id);
605 LOOP
606 BEGIN
607 hr_utility.set_location('Inside valid Elements for the Assignment'||c_all_assignments.assignment_id,20);
608 FETCH c1_all_element into c1_all_element_data;
609 IF c1_all_element%NOTFOUND
610 THEN
611 CLOSE c1_all_element;
612 EXIT;
613 END IF;
614 hr_utility.set_location('Checking for Historic rate type',25);
615 b_element_present := TRUE;
616
617 l_ELEMENT_NAME := null;
618
619 --6666135 Begin
620 FOR F in 1..j_formula_count
621 loop
622 if Formula_Element_Tab(F).Element_name = c1_all_element_data.Element_name then
623 k_aasgn_form_count := k_aasgn_form_count+1;
624 Formula_Tab(k_aasgn_form_count) := Formula_Element_Tab(F).Formula_name;
625 l_ELEMENT_NAME := c1_all_element_data.Element_name;
626 End if;
627 End loop;
628 --6666135 End
629
630 --To Check the values PQP_UK_RATE_TYPE, PQP_LGPS_PENSION_PAY, INPUT_VALUE AND PAY VALUE in pay_element_type_extra_info
631 OPEN c2_PQP_UK_RATE_TYPE(c1_all_element_data.element_type_id);
632 FETCH c2_PQP_UK_RATE_TYPE INTO c2_PQP_UK_RATE_TYPE_data;
633 IF c2_PQP_UK_RATE_TYPE%NOTFOUND
634 THEN
635 CLOSE c2_PQP_UK_RATE_TYPE;
636 RAISE skip_element;
637 END IF;
638 -- 7369484 Begin
639 IF c2_PQP_UK_RATE_TYPE_data.EEI_INFORMATION1 = 'PQP_LGPS_PENSION_PAY'
640 THEN
641 b_eng_rate := TRUE;
642 IF b_scot_rate = TRUE
643 THEN
644 fnd_file.put_line (fnd_file.LOG,'Assignment can not have both Types of RATE TYPE attached. Assignment Number : '||c_all_assignments.assignment_number);
645 CLOSE c1_all_element;
646 CLOSE c2_PQP_UK_RATE_TYPE;
647 RAISE skip_assignment;
648 END IF;
649 ELSIF c2_PQP_UK_RATE_TYPE_data.EEI_INFORMATION1 = 'PQP_LGPS_SCOTLAND_PENSION_PAY'
650 THEN
651 -- 7369484 End
652 hr_utility.set_location('Historic Rate Type present for Element '||c1_all_element_data.element_type_id,26);
653 b_rate_type := TRUE;
654 -- 7369484 Begin
655 b_scot_rate := TRUE;
656 IF b_eng_rate = TRUE
657 THEN
658 fnd_file.put_line (fnd_file.LOG,'Assignment can not have both Types of RATE TYPE attached. Assignment Number : '||c_all_assignments.assignment_number);
659 CLOSE c1_all_element;
660 CLOSE c2_PQP_UK_RATE_TYPE;
661 RAISE skip_assignment;
662 END IF;
663 END IF; -- 7369484 if rate type is English rate type
664 OPEN c3_pqp_lgps_pension_pay(c1_all_element_data.element_type_id);
665 FETCH c3_pqp_lgps_pension_pay INTO c3_pqp_lgps_pension_pay_data;
666 IF c3_pqp_lgps_pension_pay%NOTFOUND
667 THEN
668 hr_utility.set_location('Pay Value Not Present',27);
669 IF l_ELEMENT_NAME IS NULL THEN
670 l_warning_msg := 'PQP_LGPS_MISSING_HISTORIC_RATE_INFO: Historic Rate - Element Attribution information missing for Element '||c1_all_element_data.Element_name||' in Assignment '||c_all_assignments.assignment_number;
671 fnd_file.put_line (fnd_file.LOG, l_warning_msg);
672 END IF;
673 ELSE
674 b_input_value_present := TRUE;
675 hr_utility.set_location('Pay Value Present',28);
676 END IF;
677 CLOSE c2_PQP_UK_RATE_TYPE;
678 CLOSE c3_pqp_lgps_pension_pay;
679 EXCEPTION
680 WHEN skip_element THEN
681 NULL;
682 END;
683 END LOOP; --loop for all elements in a assignment
684
685
686 IF b_eng_rate = TRUE
687 THEN
688 raise skip_assignment;
689 END IF;
690
691
692 IF b_pqp_found THEN
693 IF b_pqp_assignment_found THEN
694 IF c_pqp_assignment_row.EFFECTIVE_START_DATE = v_assignment_eff_date
695 THEN
696 v_mode := 'CORRECTION';
697 ELSIF v_max_date < max_future_date
698 THEN
699 v_mode := 'UPDATE_CHANGE_INSERT';
700 ELSE
701 v_mode := 'UPDATE';
702 END IF;
703 hr_utility.set_location('Mode for update v_mode: ' || v_mode, 3);
704 --6813970 begin
705 -- IF (not b_element_present) or (not b_rate_type)
706 -- THEN
707 -- l_warning_msg := 'PQP_LGPS_MISSING_RATE_INFO: Historic Rate - Rate Type "LGPS Pensionable Pay" not set for elements against Assignment '||c_all_assignments.assignment_number;
708 IF ((not b_element_present) or (not b_rate_type)) and k_aasgn_form_count = 0
709 THEN
710 l_warning_msg := 'PQP_LGPS_MISSING_RATE_INFO: Neither Historic Rate - Rate Type "LGPS Scotland Pensionable Pay" nor User defined formula set for elements against Assignment '||c_all_assignments.assignment_number;
711 --6813970 end
712 fnd_file.put_line (fnd_file.LOG, l_warning_msg);
713 l_lgps_process_flag := 'I';
714 hr_utility.set_location('Calling API to update LGPS Process Flag I',35);
715 pqp_aat_api.update_assignment_attribute
716 (p_validate => false
717 ,p_effective_date => v_assignment_eff_date --v_eff_start_date
718 ,p_datetrack_mode => v_mode
719 ,p_assignment_attribute_id => c_pqp_assignment_row.assignment_attribute_id
720 ,p_business_group_id => p_business_group_id
721 ,p_effective_start_date => v_max_date
722 ,p_effective_end_date => v_eff_end_date
723 ,p_assignment_id => c_all_assignments.assignment_id
724 ,p_object_version_number => n_object_version_no
725 ,p_lgps_process_flag => l_lgps_process_flag
726 );
727 ---******************
728 FOR K IN c_correct_pqp(c_all_assignments.assignment_id)
729 LOOP
730 n_object_version_no := K.object_version_number;
731 v_eff_start_date_corr := K.EFFECTIVE_START_DATE;
732 pqp_aat_api.update_assignment_attribute
733 (p_validate => false
734 ,p_effective_date => v_eff_start_date_corr
735 ,p_datetrack_mode => 'CORRECTION'
736 ,p_assignment_attribute_id => K.assignment_attribute_id
737 ,p_business_group_id => p_business_group_id
738 ,p_effective_start_date => K.EFFECTIVE_START_DATE
739 ,p_effective_end_date => K.EFFECTIVE_END_DATE
740 ,p_assignment_id => c_all_assignments.assignment_id
741 ,p_object_version_number => n_object_version_no
742 ,p_lgps_process_flag => l_lgps_process_flag
743 );
744 END LOOP;
745 raise skip_assignment;
746 END IF;
747 ----------
748 ELSE
749 IF l_mode is null then
750 l_warning_msg := 'Cannot process Assignment : '||c_all_assignments.assignment_number||' Future changes present in table pqp_assignment_attributes_f ';
751 fnd_file.put_line (fnd_file.LOG, l_warning_msg);
752 END IF;
753 raise skip_assignment;
754 END IF; --b_pqp_assignment_found
755
756 ELSIF p_mode = 'New Hires' then --insert
757 --NO CURRENT RECORD IN pqp SO INSERT A RECORD WITH CP START DATE
758 --6813970 begin
759 -- IF (not b_element_present) or (not b_rate_type)
760 -- THEN
761 -- l_warning_msg := 'PQP_LGPS_MISSING_RATE_INFO: Historic Rate - Rate Type "LGPS Pensionable Pay" not set for elements against Assignment '||c_all_assignments.assignment_number;
762
763 IF ((not b_element_present) or (not b_rate_type)) and k_aasgn_form_count = 0
764 THEN
765 l_warning_msg := 'PQP_LGPS_MISSING_RATE_INFO: Neither Historic Rate - Rate Type "LGPS Scotland Pensionable Pay" nor User defined formula set for elements against Assignment '||c_all_assignments.assignment_number;
766 --6813970 end
767 fnd_file.put_line (fnd_file.LOG, l_warning_msg);
768 l_lgps_process_flag := 'I';
769 hr_utility.set_location('Calling API to insert LGPS Process Flag I',355);
770 pqp_aat_api.create_assignment_attribute
771 (p_effective_date => v_assignment_eff_date
772 ,p_business_group_id => p_business_group_id
773 ,p_assignment_id => c_all_assignments.assignment_id
774 ,p_assignment_attribute_id => l_assignment_attribute_id
775 ,p_object_version_number => n_object_version_no
776 ,p_effective_start_date => l_eff_start_date_op
777 ,p_effective_end_date => l_eff_end_date_op
778 ,p_lgps_process_flag => l_lgps_process_flag
779 );
780 raise skip_assignment;
781 END IF;
782
783 END IF; -- b_pqp_found
784
785 --6813970 begin
786 -- IF (b_element_present and b_input_value_present)
787 -- THEN
788 IF (b_rate_type and b_input_value_present)
789 THEN
790 --6813970 end
791 Begin
792 l_lgps_pensionable_pay:=pqp_rates_history_calc.get_historic_rate(p_assignment_id => c_all_assignments.assignment_id
793 ,p_rate_name => 'LGPS Scotland Pensionable Pay'
794 ,p_effective_date => v_assignment_eff_date --v_eff_start_date
795 ,p_time_dimension => 'A'
796 ,p_rate_type_or_element => 'R');
797 Exception
798 when others then
799 l_warning_msg := 'Cannot process Assignment : '||c_all_assignments.assignment_number||' Historic Rate calculations failed. Please check the error message ';
800 fnd_file.put_line (fnd_file.LOG, l_warning_msg);
801 fnd_file.put_line (fnd_file.LOG,'*** -ERROR- '||SQLCODE||' - '||SQLERRM);
802 b_rate_type := FALSE; --to skip processing of user defined formulae
803 k_aasgn_form_count := 0; --to skip processing of user defined formulae --6813970
804 b_input_value_present := FALSE; --to make the LGPS process flag as Incomplete.
805 End;
806 END IF;
807 hr_utility.set_location('Calculated Pensionable Pay'||l_lgps_pensionable_pay,40);
808
809 ---- To calculate the value from user defined formula and add it to the value from historic rates function
810 --6813970 begin
811 -- IF b_rate_type
812 -- THEN
813 IF b_rate_type or k_aasgn_form_count > 0
814 THEN -- Rate type defined for atleast one element
815 --6813970 end
816 IF b_input_value_present or k_aasgn_form_count > 0 then -- if b_input_value_present is true then Historic rates funciton will return value; if k_aasgn_form_count > 0 means user defined formula is attached
817 fnd_file.put_line(FND_FILE.OUTPUT, ' Assignment '||c_all_assignments.assignment_number ||' Historic rate value '||nvl(l_lgps_pensionable_pay,0));
818 END IF;
819 IF k_aasgn_form_count > 0 then
820
821 hr_utility.set_location(' Calling RUN_USER_FORMULA ',25);
822 -- Call the formula to calculate the additional pension pay
823 c_formula_pension_value := RUN_USER_FORMULA(c_all_assignments.assignment_id , v_assignment_eff_date , p_business_group_id , c_all_assignments.payroll_id, Formula_Tab , c_all_assignments.assignment_number);
824 hr_utility.set_location(' formula returned value '||c_formula_pension_value,40);
825
826 IF nvl(c_formula_pension_value,0) >= 0 -- equal to condition is added for bug 6857280
827 THEN
828 l_lgps_pensionable_pay := NVL(l_lgps_pensionable_pay,0) + c_formula_pension_value;
829 END IF;
830 hr_utility.set_location('After adding additional Pension Value'||l_lgps_pensionable_pay,42);
831
832 END IF; --check for presence of formula in configuration value screen
833
834 IF c_formula_pension_value is not null or l_lgps_pensionable_pay is not null
835 THEN
836 l_lgps_pensionable_pay := floor(l_lgps_pensionable_pay);
837 fnd_file.put_line(FND_FILE.OUTPUT, '-----------------------------Total value '||nvl(l_lgps_pensionable_pay,0));
838 l_lgps_process_flag := 'P';
839 IF b_pqp_found
840 THEN
841 hr_utility.trace(' updating the Contractual pay for effective date '||v_max_date|| ' mode '||v_mode||' OVN '||n_object_version_no);
842 pqp_aat_api.update_assignment_attribute
843 (p_validate => false
844 ,p_effective_date => v_assignment_eff_date --v_eff_start_date
845 ,p_datetrack_mode => v_mode
846 ,p_assignment_attribute_id => c_pqp_assignment_row.assignment_attribute_id
847 ,p_business_group_id => p_business_group_id
848 ,p_effective_start_date => v_max_date
849 ,p_effective_end_date => v_eff_end_date
850 ,p_assignment_id => c_all_assignments.assignment_id
851 ,p_object_version_number => n_object_version_no
852 ,p_lgps_process_flag => l_lgps_process_flag
853 ,p_lgps_pensionable_pay => l_lgps_pensionable_pay
854 );
855
856 FOR K IN c_correct_pqp(c_all_assignments.assignment_id)
857 LOOP
858 n_object_version_no := K.object_version_number;
859 v_eff_start_date_corr := K.EFFECTIVE_START_DATE;
860 pqp_aat_api.update_assignment_attribute
861 (p_validate => false
862 ,p_effective_date => v_eff_start_date_corr
863 ,p_datetrack_mode => 'CORRECTION'
864 ,p_assignment_attribute_id => K.assignment_attribute_id
865 ,p_business_group_id => p_business_group_id
866 ,p_effective_start_date => K.EFFECTIVE_START_DATE
867 ,p_effective_end_date => K.EFFECTIVE_END_DATE
868 ,p_assignment_id => c_all_assignments.assignment_id
869 ,p_object_version_number => n_object_version_no
870 ,p_lgps_process_flag => l_lgps_process_flag
871 ,p_lgps_pensionable_pay => l_lgps_pensionable_pay
872 );
873 END LOOP;
874
875 Else
876 hr_utility.set_location('Inserting the Contractual pay for effective date'||v_assignment_eff_date,555);
877 pqp_aat_api.create_assignment_attribute
878 (p_effective_date => v_assignment_eff_date
879 ,p_business_group_id => p_business_group_id
880 ,p_assignment_id => c_all_assignments.assignment_id
881 ,p_assignment_attribute_id => l_assignment_attribute_id
882 ,p_object_version_number => n_object_version_no
883 ,p_effective_start_date => l_eff_start_date_op
884 ,p_effective_end_date => l_eff_end_date_op
885 ,p_lgps_process_flag => l_lgps_process_flag
886 ,p_lgps_pensionable_pay => l_lgps_pensionable_pay
887 );
888 END IF; -- b_pqp_found
889 END IF; -- check for l_lgps_pensionable_pay
890 hr_utility.set_location('After updating Process flag to P'||c_all_assignments.assignment_id,45);
891 Raise skip_assignment;
892 END IF; --rate type entered
893
894
895 IF b_pqp_found THEN
896 IF (not b_input_value_present)
897 THEN
898 l_lgps_process_flag := 'I';
899 hr_utility.set_location('Calling API to update LGPS Process Flag I',30);
900 pqp_aat_api.update_assignment_attribute
901 (p_validate => false
902 ,p_effective_date => v_assignment_eff_date --v_eff_start_date
903 ,p_datetrack_mode => v_mode
904 ,p_assignment_attribute_id => c_pqp_assignment_row.assignment_attribute_id
905 ,p_business_group_id => p_business_group_id
906 ,p_effective_start_date => v_max_date
907 ,p_effective_end_date => v_eff_end_date
908 ,p_assignment_id => c_all_assignments.assignment_id
909 ,p_object_version_number => n_object_version_no
910 ,p_lgps_process_flag => l_lgps_process_flag
911 );
912
913 FOR K IN c_correct_pqp(c_all_assignments.assignment_id)
914 LOOP
915 n_object_version_no := K.object_version_number;
916 v_eff_start_date_corr := K.EFFECTIVE_START_DATE;
917 pqp_aat_api.update_assignment_attribute
918 (p_validate => false
919 ,p_effective_date => v_eff_start_date_corr
920 ,p_datetrack_mode => 'CORRECTION'
921 ,p_assignment_attribute_id => K.assignment_attribute_id
922 ,p_business_group_id => p_business_group_id
923 ,p_effective_start_date => K.EFFECTIVE_START_DATE
924 ,p_effective_end_date => K.EFFECTIVE_END_DATE
925 ,p_assignment_id => c_all_assignments.assignment_id
926 ,p_object_version_number => n_object_version_no
927 ,p_lgps_process_flag => l_lgps_process_flag
928 );
929 END LOOP;
930 END IF;
931 Else
932 IF (not b_input_value_present)
933 THEN
934 l_lgps_process_flag := 'I';
935 hr_utility.set_location('Calling API to insert LGPS Process Flag I',305);
936 pqp_aat_api.create_assignment_attribute
937 (p_effective_date => v_assignment_eff_date
938 ,p_business_group_id => p_business_group_id
939 ,p_assignment_id => c_all_assignments.assignment_id
940 ,p_assignment_attribute_id => l_assignment_attribute_id
941 ,p_object_version_number => n_object_version_no
942 ,p_effective_start_date => l_eff_start_date_op
943 ,p_effective_end_date => l_eff_end_date_op
944 ,p_lgps_process_flag => l_lgps_process_flag
945 );
946 END IF;
947 END IF;
948
949 Exception
950 when skip_assignment then
951 hr_utility.set_location('Skipped Assignment'||c_all_assignments.assignment_id,45);
952 END;
953 END LOOP; --loop for all valid assignments
954 COMMIT;
955 hr_utility.set_location('Leaving: ' || l_proc, 100);
956 END DERIVE_PENSIONABLE_PAY;
957 ---------------------------------------------------------------------
958 /* This section of code is ued by the formula functions
959 which inturn will be call from the pension element fast formula */
960 ---------------------------------------------------------------------
961 -- To fetch the Transitional flag for the assignment
962 /*FUNCTION GET_PQP_LGPS_TRANSITIONAL_FLAG(p_assignment_id IN NUMBER,
963 p_effective_date Date,
964 p_business_group_id NUMBER)
965 RETURN VARCHAR2
966 IS
967 v_trans_flag varchar2(30);
968 CURSOR C_Transtional_Flag
969 IS
970 SELECT LGPS_TRANS_ARRANG_FLAG
971 FROM pqp_assignment_attributes_f pqaaf
972 WHERE pqaaf.assignment_id = p_assignment_id
973 AND pqaaf.business_group_id = p_business_group_id
974 AND p_effective_date between pqaaf.effective_start_date and pqaaf.effective_end_date;
975 BEGIN
976 OPEN C_Transtional_Flag;
977 FETCH C_Transtional_Flag INTO v_trans_flag;
978 CLOSE C_Transtional_Flag;
979 return v_trans_flag;
980 END GET_PQP_LGPS_TRANSITIONAL_FLAG; */
981 -- To fetch the Contractual pay for the assignment
982 FUNCTION GET_PQP_LGPS_PENSION_PAY(p_assignment_id IN NUMBER,
983 p_effective_date Date,
984 p_business_group_id NUMBER)
985 RETURN number
986 IS
987 n_lgps_pension_pay pqp_assignment_attributes_f.LGPS_PENSIONABLE_PAY%type;
988 CURSOR c_pension_pay
989 IS
990 SELECT nvl(LGPS_PENSIONABLE_PAY,-1)
991 FROM pqp_assignment_attributes_f pqaaf
992 WHERE pqaaf.assignment_id = p_assignment_id
993 AND pqaaf.business_group_id = p_business_group_id
994 AND p_effective_date between pqaaf.effective_start_date and pqaaf.effective_end_date;
995 BEGIN
996 OPEN c_pension_pay;
997 FETCH c_pension_pay INTO n_lgps_pension_pay;
998 CLOSE c_pension_pay;
999 RETURN n_lgps_pension_pay;
1000 END GET_PQP_LGPS_PENSION_PAY;
1001
1002 -- To fetch the current Pension Financial year
1003 /*FUNCTION GET_FINANCIAL_YEAR(p_effective_date Date)
1004 RETURN NUMBER IS
1005 n_year NUMBER;
1006 n_date DATE;
1007 BEGIN
1008 IF p_effective_date between to_date('01-04-'||to_char(p_effective_date,'YYYY'),'DD-MM-YYYY') and to_date('31-12-'||to_char(p_effective_date,'YYYY'),'DD-MM-YYYY')
1009 THEN
1010 n_year := to_number(to_char(p_effective_date,'yyyy'));
1011 ELSE
1012 n_year := to_number(to_char(p_effective_date,'yyyy')) -1 ;
1013 END IF;
1014 RETURN n_year;
1015 END GET_FINANCIAL_YEAR; */
1016 end PQP_GB_SCOTLAND_LGPS_PENSIONPY;
1017