[Home] [Help]
PACKAGE BODY: APPS.PAY_IN_24QC_ARCHIVE
Source
1 PACKAGE BODY pay_in_24qc_archive AS
2 /* $Header: pyin24qc.pkb 120.11.12010000.2 2008/08/06 07:26:05 ubhat ship $ */
3
4 --------------------------------------------------------------------------
5 -- --
6 -- Name : TRACE_PL_SQL_TABLE_DATA --
7 -- Type : PROCEDURE --
8 -- Access : Private --
9 -- Description : This procedure is used to display PL/SQL table --
10 -- data depending on value of BOOLEAN g_debug --
11 -- Parameters : --
12 -- IN : N/A --
13 -- OUT : N/A --
14 -- --
15 -- Change History : --
16 --------------------------------------------------------------------------
17 -- Rev# Date Userid Description --
18 --------------------------------------------------------------------------
19 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
20 --------------------------------------------------------------------------
21 --
22 PROCEDURE trace_pl_sql_table_data
23 IS
24 l_procedure VARCHAR2(250);
25 l_message VARCHAR2(250);
26 BEGIN
27
28 g_debug := hr_utility.debug_enabled;
29 l_procedure := g_package || '.trace_pl_sql_table_data ';
30 pay_in_utils.set_location(g_debug,'Entering: '|| l_procedure,10);
31
32 pay_in_utils.set_location(g_debug,'************************************************************ ',3);
33 pay_in_utils.set_location(g_debug,'Displaying Data for Salary Records ',2);
34 pay_in_utils.set_location(g_debug,'========================================== ',3);
35 pay_in_utils.set_location(g_debug,'IN_24QC_PERSON Starts........ ',3);
36 pay_in_utils.set_location(g_debug,'Number of assignment actions deleted : '|| g_count_sal_delete ,4);
37 FOR i IN 1..g_count_sal_delete -1
38 LOOP
39 pay_in_utils.trace('Last Action Context ID is : ', g_sal_data_rec_del(i).last_action_context_id );
40 pay_in_utils.trace('Assignment ID is : ', g_sal_data_rec_del(i).assignment_id );
41 pay_in_utils.trace('Source ID is : ', g_sal_data_rec_del(i).source_id );
42 pay_in_utils.trace('Salary Mode is : ', g_sal_data_rec_del(i).salary_mode );
43 END LOOP;
44 pay_in_utils.set_location(g_debug,'IN_24QC_PERSON for deletion Ends........ ',5);
45 pay_in_utils.set_location(g_debug,'========================================== ',6);
46
47 pay_in_utils.set_location(g_debug,'IN_24QC_PERSON for Addition Starts........ ',7);
48 pay_in_utils.trace('Number of assignment actions added : ', g_count_sal_addition );
49 FOR i IN 1..g_count_sal_addition -1
50 LOOP
51 pay_in_utils.trace('Last Action Context ID is : ', g_sal_data_rec_add(i).last_action_context_id );
52 pay_in_utils.trace('Assignment ID is : ', g_sal_data_rec_add(i).assignment_id );
53 pay_in_utils.trace('Source ID is : ', g_sal_data_rec_add(i).source_id );
54 pay_in_utils.trace('Salary Mode is : ', g_sal_data_rec_add(i).salary_mode );
55 END LOOP;
56 pay_in_utils.set_location(g_debug,'IN_24QC_PERSON for addition Ends........ ',9);
57
58 pay_in_utils.set_location(g_debug,'IN_24QC_PERSON for addition Ends........ ',5);
59 pay_in_utils.set_location(g_debug,'========================================== ',6);
60
61 pay_in_utils.set_location(g_debug,'IN_24QC_PERSON for Updation Starts........ ',7);
62 pay_in_utils.trace('Number of assignment actions updated : ', g_count_sal_update );
63 FOR i IN 1..g_count_sal_update -1
64 LOOP
65 pay_in_utils.trace('Last Action Context ID is : ', g_sal_data_rec_upd(i).last_action_context_id );
66 pay_in_utils.trace('Assignment ID is : ', g_sal_data_rec_upd(i).assignment_id );
67 pay_in_utils.trace('Source ID is : ', g_sal_data_rec_upd(i).source_id );
68 pay_in_utils.trace('Salary Mode is : ', g_sal_data_rec_upd(i).salary_mode );
69 END LOOP;
70 pay_in_utils.set_location(g_debug,'IN_24QC_PERSON for updation Ends........ ',9);
71 pay_in_utils.set_location(g_debug,'Data for Salary Records Ends ',2);
72 pay_in_utils.set_location(g_debug,'************************************************************ ',3);
73
74
75 pay_in_utils.set_location(g_debug,'************************************************************ ',3);
76 pay_in_utils.set_location(g_debug,'Displaying Data for Deductee Records ',2);
77 pay_in_utils.set_location(g_debug,'========================================== ',3);
78 pay_in_utils.set_location(g_debug,'IN_24QC_DEDUCTEE Starts........ ',3);
79 pay_in_utils.set_location(g_debug,'Number of element entries deleted : '|| g_count_ee_delete ,4);
80 FOR i IN 1..g_count_ee_delete -1
81 LOOP
82 pay_in_utils.trace('Last Action Context ID is : ', g_ee_data_rec_del(i).last_action_context_id );
83 pay_in_utils.trace('Assignment ID is : ', g_ee_data_rec_del(i).assignment_id );
84 pay_in_utils.trace('Element Entry ID is : ', g_ee_data_rec_del(i).element_entry_id );
85 pay_in_utils.trace('Deductee Mode is : ', g_ee_data_rec_del(i).deductee_mode );
86 END LOOP;
87 pay_in_utils.set_location(g_debug,'IN_24QC_DEDUCTEE for deletion Ends........ ',5);
88 pay_in_utils.set_location(g_debug,'========================================== ',6);
89
90 pay_in_utils.set_location(g_debug,'IN_24QC_DEDUCTEE for Addition Starts........ ',7);
91 pay_in_utils.trace('Number of element entries added : ', g_count_ee_addition );
92 FOR i IN 1..g_count_ee_addition -1
93 LOOP
94 pay_in_utils.trace('Last Action Context ID is : ', g_ee_data_rec_add(i).last_action_context_id );
95 pay_in_utils.trace('Assignment ID is : ', g_ee_data_rec_add(i).assignment_id );
96 pay_in_utils.trace('Element Entry ID is : ', g_ee_data_rec_add(i).element_entry_id );
97 pay_in_utils.trace('Deductee Mode is : ', g_ee_data_rec_add(i).deductee_mode );
98 END LOOP;
99 pay_in_utils.set_location(g_debug,'IN_24QC_DEDUCTEE for addition Ends........ ',9);
100
101 pay_in_utils.set_location(g_debug,'IN_24QC_DEDUCTEE for addition Ends........ ',5);
102 pay_in_utils.set_location(g_debug,'========================================== ',6);
103
104 pay_in_utils.set_location(g_debug,'IN_24QC_DEDUCTEE for Updation Starts........ ',7);
105 pay_in_utils.trace('Number of element entries updated : ', g_count_ee_update );
106 FOR i IN 1..g_count_ee_update -1
107 LOOP
108 pay_in_utils.trace('Last Action Context ID is : ', g_ee_data_rec_upd(i).last_action_context_id );
109 pay_in_utils.trace('Assignment ID is : ', g_ee_data_rec_upd(i).assignment_id );
110 pay_in_utils.trace('Element Entry ID is : ', g_ee_data_rec_upd(i).element_entry_id );
111 pay_in_utils.trace('Deductee Mode is : ', g_ee_data_rec_upd(i).deductee_mode );
112 END LOOP;
113 pay_in_utils.set_location(g_debug,'IN_24QC_DEDUCTEE for updation Ends........ ',9);
114 pay_in_utils.set_location(g_debug,'Data for Deductee Records Ends ',2);
115 pay_in_utils.set_location(g_debug,'************************************************************ ',3);
116
117 pay_in_utils.set_location(g_debug,'************************************************************ ',3);
118 pay_in_utils.set_location(g_debug,'Displaying Data for Organization ',2);
119 pay_in_utils.set_location(g_debug,'========================================== ',3);
120 pay_in_utils.set_location(g_debug,'IN_24QC_ORG Starts........ ',3);
121 pay_in_utils.trace('Value of g_count_org is : ', g_count_org);
122 FOR i IN 1..g_count_org -1
123 LOOP
124 pay_in_utils.trace('Gre ID is : ', g_org_data(i).gre_id );
125 pay_in_utils.trace('Last Action Context ID is : ', g_org_data(i).last_action_context_id);
126 END LOOP;
127 pay_in_utils.set_location(g_debug,'IN_24QC_ORG Ends........ ',3);
128 pay_in_utils.set_location(g_debug,'========================================== ',3);
129 pay_in_utils.set_location(g_debug,'************************************************************ ',3);
130
131 pay_in_utils.set_location(g_debug,'************************************************************ ',3);
132 pay_in_utils.set_location(g_debug,'IN_24QC_CHALLAN Starts............ ',3);
133 pay_in_utils.set_location(g_debug,'========================================== ',3);
134 pay_in_utils.trace('Number of added challans is : ', g_count_challan_add);
135 FOR i IN 1..g_count_challan_add - 1
136 LOOP
137 pay_in_utils.trace('Transfer Voucher Number is :' , g_challan_data_add(i).transfer_voucher_number);
138 pay_in_utils.trace('Transfer Voucher Date is :' , g_challan_data_add(i).transfer_voucher_date );
139 pay_in_utils.trace('Amount is :' , g_challan_data_add(i).amount );
140 pay_in_utils.trace('Surcharge is :' , g_challan_data_add(i).surcharge );
141 pay_in_utils.trace('Education Cess is :' , g_challan_data_add(i).education_cess );
142 pay_in_utils.trace('Interest is :' , g_challan_data_add(i).interest );
143 pay_in_utils.trace('Other is :' , g_challan_data_add(i).other );
144 pay_in_utils.trace('Bank Branch Code is :' , g_challan_data_add(i).bank_branch_code );
145 pay_in_utils.trace('Cheque DD Number :' , g_challan_data_add(i).cheque_dd_num );
146 pay_in_utils.trace('Org Information ID is :' , g_challan_data_add(i).org_information_id );
147 pay_in_utils.trace('Mode is :' , g_challan_data_add(i).modes );
148 END LOOP;
149
150 pay_in_utils.set_location(g_debug,'========================================== ',3);
151 pay_in_utils.trace('Number of updated challans is : ', g_count_challan_upd);
152 FOR i IN 1..g_count_challan_upd - 1
153 LOOP
154 pay_in_utils.trace('Transfer Voucher Number is :' , g_challan_data_upd(i).transfer_voucher_number);
155 pay_in_utils.trace('Transfer Voucher Date is :' , g_challan_data_upd(i).transfer_voucher_date );
156 pay_in_utils.trace('Amount is :' , g_challan_data_upd(i).amount );
157 pay_in_utils.trace('Surcharge is :' , g_challan_data_upd(i).surcharge );
158 pay_in_utils.trace('Education Cess is :' , g_challan_data_upd(i).education_cess );
159 pay_in_utils.trace('Interest is :' , g_challan_data_upd(i).interest );
160 pay_in_utils.trace('Other is :' , g_challan_data_upd(i).other );
161 pay_in_utils.trace('Bank Branch Code is :' , g_challan_data_upd(i).bank_branch_code );
162 pay_in_utils.trace('Cheque DD Number :' , g_challan_data_upd(i).cheque_dd_num );
163 pay_in_utils.trace('Org Information ID is :' , g_challan_data_upd(i).org_information_id );
164 pay_in_utils.trace('Mode is :' , g_challan_data_upd(i).modes );
165 END LOOP;
166
167 pay_in_utils.set_location(g_debug,'========================================== ',3);
168 pay_in_utils.trace('Number of no change challans is : ', g_count_challan_noc);
169 FOR i IN 1..g_count_challan_noc - 1
170 LOOP
171 pay_in_utils.trace('Transfer Voucher Number is :' , g_challan_data_noc(i).transfer_voucher_number);
172 pay_in_utils.trace('Transfer Voucher Date is :' , g_challan_data_noc(i).transfer_voucher_date );
173 pay_in_utils.trace('Amount is :' , g_challan_data_noc(i).amount );
174 pay_in_utils.trace('Surcharge is :' , g_challan_data_noc(i).surcharge );
175 pay_in_utils.trace('Education Cess is :' , g_challan_data_noc(i).education_cess );
176 pay_in_utils.trace('Interest is :' , g_challan_data_noc(i).interest );
177 pay_in_utils.trace('Other is :' , g_challan_data_noc(i).other );
178 pay_in_utils.trace('Bank Branch Code is :' , g_challan_data_noc(i).bank_branch_code );
179 pay_in_utils.trace('Cheque DD Number :' , g_challan_data_noc(i).cheque_dd_num );
180 pay_in_utils.trace('Org Information ID is :' , g_challan_data_noc(i).org_information_id );
181 pay_in_utils.trace('Mode is :' , g_challan_data_noc(i).modes );
182 END LOOP;
183 pay_in_utils.set_location(g_debug,'Leaving :'|| g_package || '.trace_pl_sql_table_data ',1);
184
185
186 EXCEPTION
187 WHEN OTHERS THEN
188 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
189 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
190 END trace_pl_sql_table_data;
191
192 --------------------------------------------------------------------------
193 -- --
194 -- Name : REMOVE_CURR_FORMAT --
195 -- Type : FUNCTION --
196 -- Access : Private --
197 -- Description : This function is used to remove currency formatting --
198 -- --
199 -- Parameters : --
200 -- IN : p_value --
201 -- OUT : VARCHAR2 --
202 -- --
203 -- Change History : --
204 --------------------------------------------------------------------------
205 -- Rev# Date Userid Description --
206 --------------------------------------------------------------------------
207 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
208 --------------------------------------------------------------------------
209 FUNCTION remove_curr_format (p_value IN VARCHAR2)
210 RETURN VARCHAR2 IS
211 l_return_value VARCHAR2(240);
212 l_procedure VARCHAR2(100);
213 l_message VARCHAR2(250);
214 BEGIN
215
216 l_procedure := g_package||'.remove_curr_format';
217 pay_in_utils.set_location(g_debug, 'Entering: ' || l_procedure, 10);
218
219 IF g_debug THEN
220 pay_in_utils.trace('p_value',p_value);
221 END IF;
222
223 l_return_value := REPLACE(REPLACE(NVL(p_value,'0'), ',', ''), '+', '');
224 pay_in_utils.set_location(g_debug,'Leaving : '|| l_procedure, 30);
225
226 RETURN l_return_value;
227 EXCEPTION
228 WHEN OTHERS THEN
229 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
230 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
231 END remove_curr_format;
232
233 --------------------------------------------------------------------------
234 -- --
235 -- Name : CHECK_ARCHIVAL_STATUS --
236 -- Type : FUNCTION --
237 -- Access : Private --
238 -- Description : This function determines the presence of current --
239 -- data in archival table for the current payroll act id-
240 -- Parameters : --
241 -- IN : p_source_id NUMBER --
242 -- p_act_inf_category VARCHAR2 --
243 -- p_act_information1 VARCHAR2 --
244 -- p_mode VARCHAR2 --
245 -- OUT : NUMBER --
246 -- --
247 -- Change History : --
248 --------------------------------------------------------------------------
249 -- Rev# Date Userid Description --
250 --------------------------------------------------------------------------
251 -- 115.0 13-Mar-20066 aaagarwa Initial Version --
252 -- 115.1 07-Feb-2007 rpalli Added check for IN_24QC_PERSON --
253 --------------------------------------------------------------------------
254 FUNCTION check_archival_status(p_source_id IN NUMBER DEFAULT NULL
255 ,p_act_inf_category IN VARCHAR2
256 ,p_act_information1 IN VARCHAR2 DEFAULT NULL
257 ,p_mode IN VARCHAR2 DEFAULT NULL
258 )
259 RETURN NUMBER
260 IS
261
262 CURSOR c_chk_person_data
263 IS
264 SELECT 1
265 FROM pay_action_information
266 WHERE action_information_category = 'IN_24QC_PERSON'
267 AND action_context_type = 'AAP'
268 AND source_id = p_source_id
269 AND action_information10 = p_mode
270 AND action_context_id IN
271 (SELECT assignment_action_id
272 FROM pay_assignment_actions
273 WHERE payroll_action_id = g_payroll_action_id
274 );
275
276
277 CURSOR c_chk_ded_data
278 IS
279 SELECT 1
280 FROM pay_action_information
281 WHERE action_information_category = 'IN_24QC_DEDUCTEE'
282 AND action_context_type = 'AAP'
283 AND source_id = p_source_id
284 AND action_information15 = p_mode
285 AND action_context_id IN
286 (SELECT assignment_action_id
287 FROM pay_assignment_actions
288 WHERE payroll_action_id = g_payroll_action_id
289 );
290
291 CURSOR c_chk_org_data
292 IS
293 SELECT 1
294 FROM pay_action_information
295 WHERE action_information_category = 'IN_24QC_ORG'
296 AND action_context_type = 'PA'
297 AND action_context_id = g_payroll_action_id
298 AND action_information1 = g_gre_id;
299
300 CURSOR c_chk_challan_data
301 IS
302 SELECT 1
303 FROM pay_action_information
304 WHERE action_information_category = 'IN_24QC_CHALLAN'
305 AND action_context_type = 'PA'
306 AND action_context_id = g_payroll_action_id
307 AND action_information1 = p_act_information1
308 AND action_information3 = g_gre_id;
309
310 l_flag NUMBER := 0;
311 l_procedure VARCHAR2(250);
312 l_message VARCHAR2(250);
313 BEGIN
314 g_debug := hr_utility.debug_enabled;
315 l_procedure := g_package ||'.check_archival_status';
316 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
317
318 IF (p_act_inf_category = 'IN_24QC_DEDUCTEE')
319 THEN
320 OPEN c_chk_ded_data;
321 FETCH c_chk_ded_data INTO l_flag;
322 CLOSE c_chk_ded_data;
323 ELSIF (p_act_inf_category = 'IN_24QC_ORG')
324 THEN
325 OPEN c_chk_org_data;
326 FETCH c_chk_org_data INTO l_flag;
327 CLOSE c_chk_org_data;
328 ELSIF (p_act_inf_category = 'IN_24QC_PERSON')
329 THEN
330 OPEN c_chk_person_data;
331 FETCH c_chk_person_data INTO l_flag;
332 CLOSE c_chk_person_data;
333 ELSE
334 OPEN c_chk_challan_data;
335 FETCH c_chk_challan_data INTO l_flag;
336 CLOSE c_chk_challan_data;
337 END IF;
338
339 pay_in_utils.set_location(g_debug,'Leaving : '|| g_package||'.check_archival_status',2);
340
341 RETURN l_flag;
342 EXCEPTION
343 WHEN OTHERS THEN
344 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
345 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
346 END check_archival_status;
347
348 --------------------------------------------------------------------------
349 -- --
350 -- Name : GET_PARAMETERS --
351 -- Type : PROCEDURE --
352 -- Access : Private --
353 -- Description : This procedure determines the globals applicable --
354 -- through out the tenure of the process --
355 -- Parameters : --
356 -- IN : p_payroll_action_id NUMBER --
357 -- p_token_name VARCHAR2 --
358 -- OUT : p_token_value VARCHAR2 --
359 -- --
360 -- Change History : --
361 --------------------------------------------------------------------------
362 -- Rev# Date Userid Description --
363 --------------------------------------------------------------------------
364 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
365 --------------------------------------------------------------------------
366
367 PROCEDURE get_parameters(p_payroll_action_id IN NUMBER,
368 p_token_name IN VARCHAR2,
369 p_token_value OUT NOCOPY VARCHAR2
370 )
371 IS
372
373 CURSOR csr_parameter_info(p_pact_id NUMBER,
374 p_token CHAR) IS
375 SELECT SUBSTR(legislative_parameters,
376 INSTR(legislative_parameters,p_token)+(LENGTH(p_token)+1),
377 INSTR(legislative_parameters,' ',
378 INSTR(legislative_parameters,p_token))
379 - (INSTR(legislative_parameters,p_token)+LENGTH(p_token)))
380 ,business_group_id
381 FROM pay_payroll_actions
382 WHERE payroll_action_id = p_pact_id;
383
384 l_token_value VARCHAR2(150);
385 l_bg_id NUMBER;
386 l_procedure VARCHAR2(100);
387 l_message VARCHAR2(250);
388
389 BEGIN
390 g_debug := hr_utility.debug_enabled;
391 l_procedure := g_package||'.get_parameters';
392
393 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
394
395 OPEN csr_parameter_info(p_payroll_action_id,
396 p_token_name);
397 FETCH csr_parameter_info INTO l_token_value,l_bg_id;
398 CLOSE csr_parameter_info;
399
400 p_token_value := TRIM(l_token_value);
401
402 IF (p_token_name = 'BG_ID') THEN
403 p_token_value := l_bg_id;
404 END IF;
405
406 IF (p_token_value IS NULL) THEN
407 p_token_value := '%';
408 END IF;
409
410 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,20);
411 EXCEPTION
412 WHEN OTHERS THEN
413 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
414 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
415 END get_parameters;
416
417 --------------------------------------------------------------------------
418 -- --
419 -- Name : INITIALIZATION_CODE --
420 -- Type : PROCEDURE --
421 -- Access : Public --
422 -- Description : This procedure is used to set global contexts. --
423 -- Parameters : --
424 -- IN : p_payroll_action_id NUMBER --
425 -- OUT : N/A --
426 -- --
427 -- Change History : --
428 --------------------------------------------------------------------------
429 -- Rev# Date Userid Description --
430 --------------------------------------------------------------------------
431 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
432 -- 115.1 07-Feb-2007 rpalli Added code to initialize some dates --
433 --------------------------------------------------------------------------
434 --
435 PROCEDURE initialization_code (p_payroll_action_id IN NUMBER)
436 IS
437 --
438 CURSOR csr_arch_ref_no(p_payroll_action_id NUMBER)
439 IS
440 SELECT 1
441 FROM pay_action_information pai
442 ,pay_payroll_actions ppa
443 WHERE pai.action_information_category = 'IN_24QC_ORG'
444 AND pai.action_context_type = 'PA'
445 AND pai.action_information1 = g_gre_id
446 AND pai.action_information3 = g_year||g_quarter
447 AND pai.action_information30 = g_24qc_reference
448 AND pai.action_context_id = ppa.payroll_action_id
449 AND ppa.action_type = 'X'
450 AND ppa.action_status = 'C'
451 AND ppa.payroll_action_id <> p_payroll_action_id;
452
453 l_procedure VARCHAR2(100);
454 l_assess_yr_start DATE;
455 l_end_date DATE;
456 i NUMBER;
457 l_token_name pay_in_utils.char_tab_type;
458 l_token_value pay_in_utils.char_tab_type;
459 l_arch_ref_no_check NUMBER;
460 E_NON_UNIQUE_ARCH_REF_NO EXCEPTION;
461 --
462 BEGIN
463 --
464 g_debug := hr_utility.debug_enabled;
465 l_procedure := g_package || '.initialization_code';
466
467 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
468
469 g_payroll_action_id := p_payroll_action_id;
470 get_parameters(p_payroll_action_id,'YR' ,g_year);
471 get_parameters(p_payroll_action_id,'GRE',g_gre_id);
472 get_parameters(p_payroll_action_id,'QR' ,g_quarter);
473 get_parameters(p_payroll_action_id,'CT' ,g_correction_mode);
474 get_parameters(p_payroll_action_id,'AR' ,g_24qc_reference);
475 get_parameters(p_payroll_action_id,'EC' ,g_24qc_empr_change);
476 get_parameters(p_payroll_action_id,'RC' ,g_24qc_rep_adr_chg);
477 get_parameters(p_payroll_action_id,'RN' ,g_cancel_ref_number);
478
479 i := TO_NUMBER(SUBSTR(g_quarter,2,1)) - 1;
480 l_assess_yr_start := fnd_date.string_to_date(('01/04/'|| SUBSTR(g_year,1,4)),'DD/MM/YYYY');
481 l_end_date := fnd_date.string_to_date(('31/03/'|| SUBSTR(g_year,6)),'DD/MM/YYYY');
482
483 g_qr_start_date := ADD_MONTHS(l_assess_yr_start,(i*3)-12);
484 g_end_date := ADD_MONTHS(g_qr_start_date,3) -1;
485
486 pay_in_utils.set_location(g_debug,'Finding Globals : '||l_procedure,20);
487
488 g_qr_end_date := ADD_MONTHS(g_qr_start_date,3) - 1;
489
490 g_tax_year := TO_CHAR(TO_NUMBER(SUBSTR(g_year,1,4))-1)||'-'|| SUBSTR(g_year,1,4);
491
492 g_fin_start_date := ADD_MONTHS(l_assess_yr_start,-12);
493 g_fin_end_date := ADD_MONTHS(l_end_date,-12);
494
495 IF g_quarter ='Q4' THEN
496 g_start_date := ADD_MONTHS(l_assess_yr_start,-12);
497 ELSE
498 g_start_date := g_qr_start_date;
499 END IF;
500
501 l_arch_ref_no_check := 0;
502 OPEN csr_arch_ref_no(p_payroll_action_id);
503 FETCH csr_arch_ref_no INTO l_arch_ref_no_check;
504 CLOSE csr_arch_ref_no;
505
506 IF l_arch_ref_no_check = 1 THEN
507 l_token_name(1) := 'NUMBER_CATEGORY';
508 l_token_value(1) := hr_general.decode_lookup('IN_MESSAGE_TOKENS','ARCH_REF_NUM');--'Archive Reference Number';
509 RAISE E_NON_UNIQUE_ARCH_REF_NO;
510 END IF;
511
512 pay_in_utils.set_location(g_debug,'Global1: '||g_year||' '||' '||g_quarter||' '||g_gre_id,30);
513 pay_in_utils.set_location(g_debug,'Global2: '||g_end_date||g_qr_start_date||g_qr_end_date,40);
514 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,50);
515
516 --
517 EXCEPTION
518 WHEN E_NON_UNIQUE_ARCH_REF_NO THEN
519 pay_in_utils.raise_message(800, 'PER_IN_NON_UNIQUE_VALUE', l_token_name, l_token_value);
520 fnd_file.put_line(fnd_file.log,'Archive Reference Number '|| g_24qc_reference || 'is non-unique.');
521 RAISE;
522 WHEN OTHERS THEN
523 RAISE;
524 END initialization_code;
525
526 --------------------------------------------------------------------------
527 -- --
528 -- Name : ASSIGNMENT_END_DATE --
529 -- Type : FUNCTION --
530 -- Access : Private --
531 -- Description : This function determines the least of asg terminat- --
532 -- -ion date and quarter end date. --
533 -- Parameters : --
534 -- IN : p_assignment_id NUMBER --
535 -- OUT : DATE --
536 -- --
537 -- Change History : --
538 --------------------------------------------------------------------------
539 -- Rev# Date Userid Description --
540 --------------------------------------------------------------------------
541 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
542 --------------------------------------------------------------------------
543 FUNCTION assignment_end_date(p_assignment_id IN NUMBER
544 )
545 RETURN DATE
546 IS
547 CURSOR c_termination_check
548 IS
549 SELECT NVL(pos.actual_termination_date,(fnd_date.string_to_date('31-12-4712','DD-MM-YYYY')))
550 FROM per_all_assignments_f asg
551 ,per_periods_of_service pos
552 WHERE asg.person_id = pos.person_id
553 AND asg.assignment_id = p_assignment_id
554 AND asg.business_group_id = pos.business_group_id
555 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
556 AND NVL(pos.actual_termination_date,(TO_DATE('31-12-4712','DD-MM-YYYY')))
557 BETWEEN asg.effective_start_date AND asg.effective_end_date
558 ORDER BY 1 DESC;
559
560 l_date DATE;
561 l_procedure VARCHAR2(250);
562 l_message VARCHAR2(250);
563 BEGIN
564 g_debug := hr_utility.debug_enabled;
565 l_procedure := g_package ||'.assignment_end_date';
566 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
567 OPEN c_termination_check;
568 FETCH c_termination_check INTO l_date;
569 CLOSE c_termination_check;
570 pay_in_utils.set_location(g_debug,'Date Found is: '|| l_date,2);
571 pay_in_utils.set_location(g_debug,'Leaving :'||g_package||'.assignment_end_date',3);
572 RETURN LEAST(l_date,g_qr_end_date);
573 EXCEPTION
574 WHEN OTHERS THEN
575 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
576 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
577 END assignment_end_date;
578
579 --------------------------------------------------------------------------
580 -- --
581 -- Name : RANGE_CODE --
582 -- Type : PROCEDURE --
583 -- Access : Public --
584 -- Description : This procedure returns a sql string to select a --
585 -- range of assignments eligible for archival. --
586 -- --
587 -- Parameters : --
588 -- IN : p_payroll_action_id NUMBER --
589 -- OUT : p_sql VARCHAR2 --
590 -- --
591 -- Change History : --
592 --------------------------------------------------------------------------
593 -- Rev# Date Userid Description --
594 --------------------------------------------------------------------------
595 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
596 --------------------------------------------------------------------------
597 PROCEDURE range_code(p_payroll_action_id IN NUMBER
598 ,p_sql OUT NOCOPY VARCHAR2
599 )
600 IS
601 --
602 l_procedure VARCHAR2(100);
603 l_message VARCHAR2(250);
604 --
605 BEGIN
606 --
607 g_debug := hr_utility.debug_enabled;
608 l_procedure := g_package || '.range_code';
609
610 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
611
612 -- Call core package to return SQL string to SELECT a range
613 -- of assignments eligible for archival
614 --
615 pay_core_payslip_utils.range_cursor(p_payroll_action_id
616 ,p_sql);
617
618 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,20);
619 --
620 EXCEPTION
621 WHEN OTHERS THEN
622 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
623 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
624 --
625 END range_code;
626
627 --------------------------------------------------------------------------
628 -- --
629 -- Name : UPDATE_CHALLANS --
630 -- Type : FUNCTION --
631 -- Access : Private --
632 -- Description : This function returns the last statement detail --
633 -- Parameters : --
634 -- IN : p_challan_number VARCHAR2 --
635 -- --
636 -- OUT : VARCHAR2 --
637 -- --
638 -- Change History : --
639 --------------------------------------------------------------------------
640 -- Rev# Date Userid Description --
641 --------------------------------------------------------------------------
642 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
643 --------------------------------------------------------------------------
644 FUNCTION update_challans(p_challan_number IN VARCHAR2)
645 RETURN VARCHAR2
646 IS
647 CURSOR c_24q_ee_sum(p_challan_number VARCHAR2
648 ,p_24q_pay_action_id NUMBER
649 )
650 IS
651 SELECT SUM(NVL(pai.action_information9,0)) amount_deposited
652 FROM pay_action_information pai
653 ,pay_assignment_actions paa
654 WHERE pai.action_information_category = 'IN_24Q_DEDUCTEE'
655 AND paa.assignment_action_id = pai.action_context_id
656 AND pai.action_information1 = p_challan_number
657 AND paa.payroll_action_id = p_24q_pay_action_id;
658
659 l_action_info_id NUMBER;
660 l_ovn NUMBER;
661 l_last_sum VARCHAR2(2500);
662 l_procedure VARCHAR2(250);
663 l_message VARCHAR2(250);
664 BEGIN
665 g_debug := hr_utility.debug_enabled;
666 l_procedure := g_package ||'.update_challans';
667 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
668 pay_in_utils.set_location(g_debug,'g_24q_payroll_act_id ' || g_24q_payroll_act_id ,1);
669 pay_in_utils.set_location(g_debug,'g_24qc_payroll_act_id ' || g_24qc_payroll_act_id,1);
670
671 l_last_sum := NULL;
672 pay_in_utils.set_location(g_debug,'Starting updation of action_information19 for Challans ' ,1);
673 IF (g_24qc_payroll_act_id IS NOT NULL)
674 THEN
675 pay_in_utils.set_location(g_debug,'Using 24Q Correction Data',2);
676 l_last_sum := pay_in_24qc_er_returns.get_24qc_tax_values(p_challan_number
677 ,g_gre_id
678 ,g_24qc_payroll_act_id
679 );
680 l_last_sum := SUBSTR(l_last_sum,1,INSTR(l_last_sum,'^')-1);
681 END IF;
682
683 IF(TO_NUMBER(NVL(l_last_sum,0)) = 0)
684 THEN
685 pay_in_utils.set_location(g_debug,'Using 24Q Data',3);
686 OPEN c_24q_ee_sum(p_challan_number,g_24q_payroll_act_id);
687 FETCH c_24q_ee_sum INTO l_last_sum;
688 CLOSE c_24q_ee_sum;
689 l_last_sum := pay_in_24q_er_returns.get_format_value(l_last_sum);
690 END IF;
691
692 pay_in_utils.set_location(g_debug,'Leaving: '|| g_package||'.update_challans',1);
693 RETURN l_last_sum;
694 EXCEPTION
695 WHEN OTHERS THEN
696 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
697 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
698 END update_challans;
699
700 --------------------------------------------------------------------------
701 -- --
702 -- Name : CHECK_EE_IN_QC --
703 -- Type : PROCEDURE --
704 -- Access : Private --
705 -- Description : This determines cyclic change in Challan Number in --
706 -- an element entry --
707 -- Parameters : --
708 -- IN : p_element_entry_id --
709 -- OUT : VARCHAR2 --
710 -- --
711 -- Change History : --
712 --------------------------------------------------------------------------
713 -- Rev# Date Userid Description --
714 --------------------------------------------------------------------------
715 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
716 --------------------------------------------------------------------------
717 FUNCTION check_ee_in_qc(p_element_entry_id IN NUMBER)
718 RETURN VARCHAR2
719 IS
720 CURSOR check_ee
721 IS
722 SELECT pai.action_information1
723 ,MAX(pai.action_context_id)
724 FROM pay_action_information pai
725 ,pay_action_interlocks locks
726 ,pay_assignment_actions paa
727 ,pay_assignment_actions paa_24qc
728 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
729 AND locks.locking_action_id = pai.action_context_id
730 AND locks.locked_action_id = paa.assignment_action_id
731 AND paa.payroll_action_id = g_24q_payroll_act_id
732 AND paa.assignment_id = pai.assignment_id
733 AND pai.action_information2 = g_year||g_quarter
734 AND paa_24qc.assignment_id = pai.assignment_id
735 AND paa_24qc.assignment_action_id = pai.action_context_id
736 AND pai.action_information15 = 'A'
737 AND pai.source_id = p_element_entry_id
738 AND paa_24qc.payroll_action_id IN(
739 SELECT org_information3
740 FROM hr_organization_information
741 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
742 AND organization_id = g_gre_id
743 AND org_information1 = g_year
744 AND org_information2 = g_quarter
745 AND org_information5 = 'A'
746 AND org_information6 = 'C'
747 )
748 GROUP BY pai.action_information1;
749
750 l_challan_number VARCHAR2(250);
751 l_action_info_id NUMBER;
752 l_procedure VARCHAR2(250);
753 l_message VARCHAR2(250);
754
755 BEGIN
756 l_procedure := g_package || '.check_ee_in_qc';
757 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
758
759 OPEN check_ee;
760 FETCH check_ee INTO l_challan_number,l_action_info_id;
761 CLOSE check_ee;
762
763 l_challan_number := NVL(l_challan_number,pay_in_utils.get_ee_value(p_element_entry_id,'Challan or Voucher Number'));
764
765 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,20);
766 RETURN l_challan_number;
767 EXCEPTION
768 WHEN OTHERS THEN
769 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
770 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
771 END check_ee_in_qc;
772
773 --------------------------------------------------------------------------
774 -- --
775 -- Name : GENERATE_EMPLOYEE_DATA --
776 -- Type : PROCEDURE --
777 -- Access : Private --
778 -- Description : This procedure populates global tables used in --
779 -- deductee detail record --
780 -- Parameters : --
781 -- IN : p_payroll_action_id NUMBER --
782 -- OUT : N/A --
783 -- --
784 -- Change History : --
785 --------------------------------------------------------------------------
786 -- Rev# Date Userid Description --
787 --------------------------------------------------------------------------
788 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
789 --------------------------------------------------------------------------
790 --
791 PROCEDURE generate_employee_data(p_payroll_action_id IN NUMBER
792 )
793 IS
794
795 CURSOR c_delete_mode_entries(p_payroll_action_id NUMBER)
796 IS
797 SELECT pai.source_id element_entry_id
798 ,pai.assignment_id assignment_id
799 ,pai.action_context_id last_action_context_id
800 FROM pay_action_information pai
801 ,pay_assignment_actions paa
802 WHERE pai.action_information_category LIKE 'IN_24Q%_DEDUCTEE'
803 AND pai.action_context_id = paa.assignment_action_id
804 AND(
805 paa.payroll_action_id IN (
806 SELECT org_information3
807 FROM hr_organization_information
808 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
809 AND organization_id = g_gre_id
810 AND org_information1 = g_year
811 AND org_information2 = g_quarter
812 AND org_information5 = 'A'
813 )
814 )
815 AND pai.action_information3 = g_gre_id
816 AND (
817 pai.source_id NOT IN
818 (SELECT entry.element_entry_id
819 FROM pay_element_entries_f entry
820 ,pay_element_types_f types
821 WHERE entry.assignment_id = pai.assignment_id
822 AND entry.element_type_id = types.element_type_id
823 AND types.element_name = 'Income Tax Challan Information'
824 AND types.legislation_code = 'IN'
825 AND entry.effective_start_date BETWEEN g_qr_start_date
826 AND g_qr_end_date
827 )
828 OR
829 pai.action_information1 <> pay_in_utils.get_ee_value(pai.source_id,'Challan or Voucher Number')
830 )
831 AND (
832 pai.source_id NOT IN
833 (SELECT pai.source_id
834 FROM pay_action_information pai
835 ,pay_action_interlocks locks
836 ,pay_assignment_actions paa
837 ,pay_assignment_actions masters
838 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
839 AND pai.action_information15 = 'D'
840 AND locks.locking_action_id = pai.action_context_id
841 AND locks.locked_action_id = paa.assignment_action_id
842 AND paa.payroll_action_id = p_payroll_action_id
843 AND paa.assignment_id = pai.assignment_id
844 AND masters.assignment_id = pai.assignment_id
845 AND masters.assignment_action_id = pai.action_context_id
846 AND masters.payroll_action_id IN(
847 SELECT org_information3
848 FROM hr_organization_information
849 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
850 AND organization_id = g_gre_id
851 AND org_information1 = g_year
852 AND org_information2 = g_quarter
853 AND org_information5 = 'A'
854 AND org_information6 = 'C'
855 )
856 )
857 OR
858 pay_in_utils.get_ee_value(pai.source_id,'Challan or Voucher Number') NOT IN
859 (
860 (SELECT pai.action_information1
861 FROM pay_action_information pai
862 ,pay_action_interlocks locks
863 ,pay_assignment_actions paa
864 ,pay_assignment_actions masters
865 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
866 AND pai.action_information15 = 'A'
867 AND locks.locking_action_id = pai.action_context_id
868 AND locks.locked_action_id = paa.assignment_action_id
869 AND paa.payroll_action_id = p_payroll_action_id
870 AND paa.assignment_id = pai.assignment_id
871 AND masters.assignment_id = pai.assignment_id
872 AND masters.assignment_action_id = pai.action_context_id
873 AND masters.payroll_action_id IN(
874 SELECT org_information3
875 FROM hr_organization_information
876 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
877 AND organization_id = g_gre_id
878 AND org_information1 = g_year
879 AND org_information2 = g_quarter
880 AND org_information5 = 'A'
881 AND org_information6 = 'C'
882 )
883 )
884 )
885 )
886 ORDER BY 3 DESC;
887
888 CURSOR c_addition_mode_entries(p_payroll_action_id NUMBER)
889 IS
890 SELECT entry.element_entry_id element_entry_id
891 ,entry.assignment_id assignment_id
892 ,NULL last_action_context_id
893 ,pay_in_utils.get_ee_value(entry.element_entry_id,'Challan or Voucher Number')
894 FROM pay_element_entries_f entry
895 ,pay_element_types_f types
896 WHERE entry.element_type_id = types.element_type_id
897 AND types.element_name = 'Income Tax Challan Information'
898 AND types.legislation_code = 'IN'
899 AND entry.effective_start_date BETWEEN g_qr_start_date AND g_qr_end_date
900 AND (
901 entry.element_entry_id NOT IN
902 (SELECT pai.source_id
903 FROM pay_action_information pai
904 ,pay_assignment_actions paa
905 WHERE pai.action_information_category = 'IN_24Q_DEDUCTEE'
906 AND pai.action_context_id = paa.assignment_action_id
907 AND paa.payroll_action_id = p_payroll_action_id
908 )
909 OR
910 pay_in_utils.get_ee_value(entry.element_entry_id,'Challan or Voucher Number') NOT IN
911 (SELECT pai.action_information1
912 FROM pay_action_information pai
913 ,pay_assignment_actions paa
914 WHERE pai.action_information_category = 'IN_24Q_DEDUCTEE'
915 AND pai.action_context_id = paa.assignment_action_id
916 AND paa.payroll_action_id = p_payroll_action_id
917 AND pai.source_id = entry.element_entry_id
918 )
919 )
920 AND (
921 entry.element_entry_id NOT IN
922 (SELECT pai.source_id
923 FROM pay_action_information pai
924 ,pay_action_interlocks locks
925 ,pay_assignment_actions paa
926 ,pay_assignment_actions paa_24qc
927 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
928 AND locks.locking_action_id = pai.action_context_id
929 AND locks.locked_action_id = paa.assignment_action_id
930 AND paa.payroll_action_id = p_payroll_action_id
931 AND paa.assignment_id = pai.assignment_id
932 AND pai.action_information2 = g_year||g_quarter
933 AND paa_24qc.assignment_id = pai.assignment_id
934 AND paa_24qc.assignment_action_id = pai.action_context_id
935 AND paa_24qc.payroll_action_id IN(
936 SELECT org_information3
937 FROM hr_organization_information
938 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
939 AND organization_id = g_gre_id
940 AND org_information1 = g_year
941 AND org_information2 = g_quarter
942 AND org_information5 = 'A'
943 AND org_information6 = 'C'
944 )
945 )
946 OR
947 pay_in_utils.get_ee_value(entry.element_entry_id,'Challan or Voucher Number') NOT IN
948 (
949 (SELECT pai.action_information1
950 FROM pay_action_information pai
951 ,pay_action_interlocks locks
952 ,pay_assignment_actions paa
953 ,pay_assignment_actions paa_24qc
954 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
955 AND locks.locking_action_id = pai.action_context_id
956 AND locks.locked_action_id = paa.assignment_action_id
957 AND paa.payroll_action_id = p_payroll_action_id
958 AND paa.assignment_id = pai.assignment_id
959 AND pai.action_information2 = g_year||g_quarter
960 AND paa_24qc.assignment_id = pai.assignment_id
961 AND paa_24qc.assignment_action_id = pai.action_context_id
962 AND pai.source_id = entry.element_entry_id
963 AND paa_24qc.payroll_action_id IN(
964 SELECT org_information3
965 FROM hr_organization_information
966 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
967 AND organization_id = g_gre_id
968 AND org_information1 = g_year
969 AND org_information2 = g_quarter
970 AND org_information5 = 'A'
971 AND org_information6 = 'C'
972 )
973 )
974 )
975 )
976 AND pay_in_utils.get_ee_value(entry.element_entry_id,'Challan or Voucher Number') IN
977 (
978 SELECT hoi.org_information3
979 FROM hr_organization_information hoi
980 ,hr_organization_units hou
981 WHERE hoi.organization_id = g_gre_id
982 AND hoi.organization_id = hou.organization_id
983 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
984 AND hoi.org_information_context = 'PER_IN_IT_CHALLAN_INFO'
985 AND hoi.org_information1 = g_tax_year
986 AND hoi.org_information13 = g_quarter
987 )
988 AND (
989 (
990 g_correction_mode IN ('%','C3')
991 AND
992 pay_in_utils.get_ee_value(entry.element_entry_id,'Challan or Voucher Number') IN
993 (
994 SELECT action_information1
995 FROM pay_action_information
996 WHERE action_information_category IN('IN_24QC_CHALLAN','IN_24Q_CHALLAN')
997 AND (
998 action_information15 = p_payroll_action_id
999 AND action_information_category = 'IN_24QC_CHALLAN'
1000 AND action_information2 = g_year||g_quarter
1001 AND action_information15 IN
1002 (
1003 SELECT hoi.org_information3
1004 FROM hr_organization_information hoi
1005 ,hr_organization_units hou
1006 WHERE hoi.organization_id = g_gre_id
1007 AND hoi.organization_id = hou.organization_id
1008 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1009 AND hoi.org_information_context = 'PER_IN_IT_CHALLAN_INFO'
1010 AND hoi.org_information1 = g_tax_year
1011 AND hoi.org_information13 = g_quarter
1012 AND hoi.org_information6 = 'C'
1013 )
1014 )
1015 OR
1016 (
1017 action_information_category = 'IN_24Q_CHALLAN'
1018 AND action_context_id = p_payroll_action_id
1019 )
1020 )
1021 )
1022 OR
1023 (g_correction_mode IN ('%','C9')
1024 AND
1025 pay_in_utils.get_ee_value(entry.element_entry_id,'Challan or Voucher Number') NOT IN
1026 (
1027 SELECT action_information1
1028 FROM pay_action_information
1029 WHERE action_information_category IN('IN_24QC_CHALLAN','IN_24Q_CHALLAN')
1030 AND (
1031 action_information15 = p_payroll_action_id
1032 AND action_information_category = 'IN_24QC_CHALLAN'
1033 AND action_information2 = g_year||g_quarter
1034 AND action_information15 IN
1035 (
1036 SELECT hoi.org_information3
1037 FROM hr_organization_information hoi
1038 ,hr_organization_units hou
1039 WHERE hoi.organization_id = g_gre_id
1040 AND hoi.organization_id = hou.organization_id
1041 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1042 AND hoi.org_information_context = 'PER_IN_IT_CHALLAN_INFO'
1043 AND hoi.org_information1 = g_tax_year
1044 AND hoi.org_information13 = g_quarter
1045 AND hoi.org_information6 = 'C'
1046 )
1047 )
1048 OR
1049 (
1050 action_information_category = 'IN_24Q_CHALLAN'
1051 AND action_context_id = p_payroll_action_id
1052 )
1053 )
1054 )
1055 )
1056 ORDER BY 4;
1057
1058 CURSOR c_update_mode_entries(p_payroll_action_id NUMBER
1059 )
1060 IS
1061 SELECT pai.source_id element_entry_id
1062 ,pai.assignment_id assignment_id
1063 ,pai.action_context_id last_action_context_id
1064 ,pep.effective_end_date
1065 FROM pay_action_information pai
1066 ,pay_assignment_actions paa
1067 ,per_people_f pep
1068 ,per_assignments_f asg
1069 WHERE pai.action_information_category = 'IN_24Q_DEDUCTEE'
1070 AND pai.action_context_id = paa.assignment_action_id
1071 AND pai.action_information3 = g_gre_id
1072 AND paa.payroll_action_id = p_payroll_action_id
1073 AND asg.assignment_id = pai.assignment_id
1074 AND asg.person_id = pep.person_id
1075 AND asg.business_group_id = pep.business_group_id
1076 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1077 AND (
1078 (
1079 (NVL(pai.action_information13,'0') <> (SELECT NVL(paei.aei_information2,'0')
1080 FROM per_assignment_extra_info paei
1081 ,per_assignments_f paa
1082 WHERE paei.information_type = 'PER_IN_TAX_EXEMPTION_DF'
1083 AND paei.aei_information_category = 'PER_IN_TAX_EXEMPTION_DF'
1084 AND paei.assignment_id = paa.assignment_id
1085 AND paa.assignment_id = asg.assignment_id
1086 AND paei.aei_information1 = g_tax_year
1087 AND assignment_end_date(asg.assignment_id) BETWEEN paa.effective_start_date AND paa.effective_end_date
1088 AND ROWNUM = 1)
1089 )
1090 OR
1091 (TO_NUMBER(remove_curr_format(pai.action_information6)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Income Tax Deducted'))))
1092 OR
1093 (TO_NUMBER(remove_curr_format(pai.action_information7)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Surcharge Deducted'))))
1094 OR
1095 (TO_NUMBER(remove_curr_format(pai.action_information8)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Education Cess Deducted'))))
1096 OR
1097 (TO_NUMBER(remove_curr_format(pai.action_information5)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Taxable Income'))))
1098 OR
1099 (pai.action_information4 <> pay_in_utils.get_ee_value(pai.source_id,'Payment Date'))
1100 OR
1101 (pai.action_information12 <> hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title))
1102 OR
1103 (NVL(pai.action_information11,'0') <> NVL(pep.per_information14,'0'))
1104 OR(
1105 (
1106 g_correction_mode IN ('C5','%')
1107 AND (pai.action_information10 NOT IN('APPLIEDFOR','PANNOTAVBL'))
1108 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))NOT IN('APPLIEDFOR','PANNOTAVBL'))
1109 AND (pai.action_information10 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
1110 )
1111 OR
1112 (
1113 g_correction_mode NOT IN ('C5')
1114 AND (pai.action_information10 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
1115 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))IN('APPLIEDFOR','PANNOTAVBL'))
1116 )
1117 )
1118 )
1119 AND pay_in_utils.get_ee_value(pai.source_id,'Challan or Voucher Number') = pai.action_information1
1120 )
1121 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
1122 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date
1123 ORDER BY 4 DESC;
1124
1125 CURSOR c_check_entries_in_24q_correct(p_24q_arc_action_context_id NUMBER
1126 ,p_assignment_id NUMBER
1127 ,p_element_entry_id NUMBER
1128 ,p_mode VARCHAR2
1129 )
1130 IS
1131 SELECT pai_locking.action_context_id last_action_context_id
1132 FROM pay_action_information pai_locking
1133 ,pay_action_interlocks locks
1134 ,pay_assignment_actions paa
1135 WHERE pai_locking.action_information_category = 'IN_24QC_DEDUCTEE'
1136 AND pai_locking.action_information3 = g_gre_id
1137 AND pai_locking.action_information15 = p_mode
1138 AND pai_locking.action_context_id = paa.assignment_action_id
1139 AND paa.payroll_action_id IN
1140 (
1141 SELECT org_information3
1142 FROM hr_organization_information
1143 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1144 AND organization_id = g_gre_id
1145 AND org_information1 = g_year
1146 AND org_information2 = g_quarter
1147 AND org_information5 = 'A'
1148 AND org_information6 = 'C'
1149 )
1150 AND locks.locking_action_id = pai_locking.action_context_id
1151 AND locks.locked_action_id = p_24q_arc_action_context_id
1152 AND pai_locking.assignment_id = p_assignment_id
1153 AND pai_locking.source_id = p_element_entry_id
1154 ORDER BY pai_locking.action_context_id DESC;
1155
1156 CURSOR c_24qc_upd_mode_entries(p_assignment_action_id NUMBER
1157 ,p_element_entry_id NUMBER
1158 )
1159 IS
1160 SELECT pai.action_context_id
1161 FROM pay_action_information pai
1162 ,per_people_f pep
1163 ,per_assignments_f asg
1164 ,pay_assignment_actions paa
1165 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
1166 AND paa.assignment_action_id = pai.action_context_id
1167 AND pai.source_id = p_element_entry_id
1168 AND paa.payroll_action_id IN
1169 (
1170 SELECT org_information3
1171 FROM hr_organization_information
1172 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1173 AND organization_id = g_gre_id
1174 AND org_information1 = g_year
1175 AND org_information2 = g_quarter
1176 AND org_information5 = 'A'
1177 AND org_information6 = 'C'
1178 )
1179 AND pai.action_information3 = g_gre_id
1180 AND pai.action_context_id = p_assignment_action_id
1181 AND asg.assignment_id = pai.assignment_id
1182 AND asg.person_id = pep.person_id
1183 AND asg.business_group_id = pep.business_group_id
1184 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1185 AND (
1186 (NVL(pai.action_information18,'0') <> (SELECT NVL(paei.aei_information2,'0')
1187 FROM per_assignment_extra_info paei
1188 ,per_assignments_f paa
1189 WHERE paei.information_type = 'PER_IN_TAX_EXEMPTION_DF'
1190 AND paei.aei_information_category = 'PER_IN_TAX_EXEMPTION_DF'
1191 AND paei.assignment_id = paa.assignment_id
1192 AND paa.assignment_id = asg.assignment_id
1193 AND paei.aei_information1 = g_tax_year
1194 AND assignment_end_date(asg.assignment_id) BETWEEN paa.effective_start_date AND paa.effective_end_date
1195 AND ROWNUM = 1)
1196 )
1197 OR
1198 (TO_NUMBER(remove_curr_format(pai.action_information6)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Income Tax Deducted'))))
1199 OR
1200 (TO_NUMBER(remove_curr_format(pai.action_information7)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Surcharge Deducted'))))
1201 OR
1202 (TO_NUMBER(remove_curr_format(pai.action_information8)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Education Cess Deducted'))))
1203 OR
1204 (TO_NUMBER(remove_curr_format(pai.action_information5)) <> TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Taxable Income'))))
1205 OR
1206 (pai.action_information4 <> pay_in_utils.get_ee_value(pai.source_id,'Payment Date'))
1207 OR
1208 (pai.action_information10 <> hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title))
1209 OR(--Checking PAN Number
1210 (
1211 g_correction_mode IN ('C5','%')
1212 AND (pai.action_information9 NOT IN('APPLIEDFOR','PANNOTAVBL'))
1213 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))NOT IN('APPLIEDFOR','PANNOTAVBL'))
1214 AND (pai.action_information9 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
1215 )
1216 OR
1217 (
1218 g_correction_mode NOT IN ('C5')
1219 AND (pai.action_information9 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
1220 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))IN('APPLIEDFOR','PANNOTAVBL'))
1221 )
1222 )
1223 OR -- Checking PAN reference Number
1224 (NVL(pai.action_information11,'0') <> NVL(pep.per_information14,'0'))
1225 )
1226 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
1227 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date
1228 AND NOT EXISTS
1229 (
1230 SELECT 1
1231 FROM pay_action_information pai
1232 ,per_people_f pep
1233 ,per_assignments_f asg
1234 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
1235 AND pai.source_id = p_element_entry_id
1236 AND pai.action_information3 = g_gre_id
1237 AND pai.action_context_id = p_assignment_action_id
1238 AND asg.assignment_id = pai.assignment_id
1239 AND asg.person_id = pep.person_id
1240 AND asg.business_group_id = pep.business_group_id
1241 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1242 AND (
1243 (NVL(pai.action_information18,'0') = (SELECT NVL(paei.aei_information2,'0')
1244 FROM per_assignment_extra_info paei
1245 ,per_assignments_f paa
1246 WHERE paei.information_type = 'PER_IN_TAX_EXEMPTION_DF'
1247 AND paei.aei_information_category = 'PER_IN_TAX_EXEMPTION_DF'
1248 AND paei.assignment_id = paa.assignment_id
1249 AND paa.assignment_id = asg.assignment_id
1250 AND paei.aei_information1 = g_tax_year
1251 AND assignment_end_date(asg.assignment_id) BETWEEN paa.effective_start_date AND paa.effective_end_date
1252 AND ROWNUM = 1)
1253 )
1254 AND
1255 (TO_NUMBER(remove_curr_format(pai.action_information6)) = TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Income Tax Deducted'))))
1256 AND
1257 (TO_NUMBER(remove_curr_format(pai.action_information7)) = TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Surcharge Deducted'))))
1258 AND
1259 (TO_NUMBER(remove_curr_format(pai.action_information8)) = TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Education Cess Deducted'))))
1260 AND
1261 (TO_NUMBER(remove_curr_format(pai.action_information5)) = TO_NUMBER(remove_curr_format(pay_in_utils.get_ee_value(pai.source_id,'Taxable Income'))))
1262 AND
1263 (pai.action_information4 = pay_in_utils.get_ee_value(pai.source_id,'Payment Date'))
1264 AND
1265 (pai.action_information10 = hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title))
1266 AND(--Checking PAN Number
1267 (
1268 g_correction_mode IN ('C5','%')
1269 AND (pai.action_information9 NOT IN('APPLIEDFOR','PANNOTAVBL'))
1270 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))NOT IN('APPLIEDFOR','PANNOTAVBL'))
1271 AND (pai.action_information9 = (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
1272 )
1273 OR
1274 (
1275 g_correction_mode NOT IN ('C5')
1276 AND (pai.action_information9 = (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
1277 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))IN('APPLIEDFOR','PANNOTAVBL'))
1278 )
1279 )
1280 AND -- Checking PAN reference Number
1281 (NVL(pai.action_information11,'0') = NVL(pep.per_information14,'0'))
1282 )
1283 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
1284 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date
1285 );
1286
1287 CURSOR c_form_24qc_locking_id(p_mode VARCHAR2
1288 ,p_flag NUMBER
1289 )
1290 IS
1291 SELECT MAX(pai.action_context_id) last_action_context_id
1292 ,pai.source_id element_entry_id
1293 ,pai.assignment_id assignment_id
1294 FROM pay_action_information pai
1295 ,pay_assignment_actions paa
1296 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
1297 AND pai.action_information3 = g_gre_id
1298 AND pai.action_information2 = g_year||g_quarter
1299 AND pai.action_information15 = p_mode
1300 AND pai.action_context_id = paa.assignment_action_id
1301 AND paa.payroll_action_id IN
1302 (
1303 SELECT org_information3
1304 FROM hr_organization_information
1305 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1306 AND organization_id = g_gre_id
1307 AND org_information1 = g_year
1308 AND org_information2 = g_quarter
1309 AND org_information5 = 'A'
1310 AND org_information6 = 'C'
1311 )
1312 AND (
1313 p_flag = 1
1314 OR
1315 (
1316 pai.source_id NOT IN(
1317 SELECT pai.source_id
1318 FROM pay_action_information pai
1319 ,pay_assignment_actions paa
1320 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
1321 AND pai.action_information3 = g_gre_id
1322 AND pai.action_information2 = g_year||g_quarter
1323 AND pai.action_information15 = 'D'
1324 AND pai.action_context_id = paa.assignment_action_id
1325 AND paa.payroll_action_id IN
1326 (
1327 SELECT org_information3
1328 FROM hr_organization_information
1329 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1330 AND organization_id = g_gre_id
1331 AND org_information1 = g_year
1332 AND org_information2 = g_quarter
1333 AND org_information5 = 'A'
1334 AND org_information6 = 'C'
1335 )
1336 )
1337 AND pai.source_id IN
1338 (SELECT entry.element_entry_id
1339 FROM pay_element_entries_f entry
1340 ,pay_element_types_f types
1341 WHERE entry.assignment_id = pai.assignment_id
1342 AND entry.element_type_id = types.element_type_id
1343 AND types.element_name = 'Income Tax Challan Information'
1344 AND types.legislation_code = 'IN'
1345 AND entry.effective_start_date BETWEEN g_qr_start_date
1346 AND g_qr_end_date
1347 )
1348 )
1349 )
1350 GROUP BY pai.source_id,pai.assignment_id;
1351
1352 CURSOR c_live_ee
1353 IS
1354 SELECT entry.element_entry_id element_entry_id
1355 ,entry.assignment_id assignment_id
1356 ,pay_in_utils.get_ee_value(entry.element_entry_id,'Challan or Voucher Number') challan
1357 FROM pay_element_entries_f entry
1358 ,pay_element_types_f types
1359 WHERE entry.element_type_id = types.element_type_id
1360 AND types.element_name = 'Income Tax Challan Information'
1361 AND types.legislation_code = 'IN'
1362 AND entry.effective_start_date BETWEEN g_qr_start_date AND g_qr_end_date;
1363
1364 CURSOR c_bg_check(p_assignment_id NUMBER)
1365 IS
1366 SELECT 1
1367 FROM per_assignments_f
1368 WHERE business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1369 AND assignment_id = p_assignment_id;
1370
1371 l_procedure VARCHAR2(100);
1372 l_action_id NUMBER;
1373 l_dummy NUMBER;
1374 l_flag BOOLEAN;
1375 l_last_action_context_id NUMBER;
1376 i NUMBER;
1377 l_message VARCHAR2(250);
1378 l_bg_check NUMBER;
1379
1380 --
1381 BEGIN
1382 --
1383 g_debug := hr_utility.debug_enabled;
1384 l_procedure := g_package || '.generate_employee_data';
1385
1386 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
1387
1388 --The below process finds those Challan Element Entries which have MODE as Deletion(D)
1389 pay_in_utils.set_location(g_debug,'Finding element entries deleted since last statement ',2);
1390 FOR c_rec IN c_delete_mode_entries(p_payroll_action_id)
1391 LOOP
1392 l_bg_check := 0;
1393 OPEN c_bg_check(c_rec.assignment_id);
1394 FETCH c_bg_check INTO l_bg_check;
1395 CLOSE c_bg_check;
1396
1397 IF (l_bg_check = 1)
1398 THEN
1399 g_ee_data_rec_del(g_count_ee_delete).last_action_context_id := c_rec.last_action_context_id;
1400 g_ee_data_rec_del(g_count_ee_delete).assignment_id := c_rec.assignment_id;
1401 g_ee_data_rec_del(g_count_ee_delete).element_entry_id := c_rec.element_entry_id;
1402 g_ee_data_rec_del(g_count_ee_delete).deductee_mode := 'D';
1403 g_count_ee_delete := g_count_ee_delete + 1;
1404 END IF;
1405 END LOOP;
1406
1407 pay_in_utils.set_location(g_debug,'Finding element entries added since last statement ',3);
1408 --The below process finds those Challan Element Entries which have MODE as Addition(A)
1409 FOR c_rec IN c_addition_mode_entries(p_payroll_action_id)
1410 LOOP
1411 l_bg_check := 0;
1412 OPEN c_bg_check(c_rec.assignment_id);
1413 FETCH c_bg_check INTO l_bg_check;
1414 CLOSE c_bg_check;
1415
1416 IF (l_bg_check = 1)
1417 THEN
1418 g_ee_data_rec_add(g_count_ee_addition).last_action_context_id := c_rec.last_action_context_id;
1419 g_ee_data_rec_add(g_count_ee_addition).assignment_id := c_rec.assignment_id;
1420 g_ee_data_rec_add(g_count_ee_addition).element_entry_id := c_rec.element_entry_id;
1421 g_ee_data_rec_add(g_count_ee_addition).deductee_mode := 'A';
1422 g_count_ee_addition := g_count_ee_addition + 1;
1423 END IF;
1424 END LOOP;
1425 --The below cursor finds those Challan Element Entries that have cyclic challan number change
1426 FOR c_rec IN c_live_ee
1427 LOOP
1428 l_bg_check := 0;
1429 OPEN c_bg_check(c_rec.assignment_id);
1430 FETCH c_bg_check INTO l_bg_check;
1431 CLOSE c_bg_check;
1432
1433 IF (l_bg_check = 1)
1434 THEN
1435 IF (c_rec.challan <> check_ee_in_qc(c_rec.element_entry_id))
1436 THEN
1437 pay_in_utils.set_location(g_debug,'Live Challan Value is: '|| c_rec.challan,1);
1438 pay_in_utils.set_location(g_debug,'Old Challan Value is: '|| check_ee_in_qc(c_rec.element_entry_id),2);
1439 g_ee_data_rec_add(g_count_ee_addition).last_action_context_id := NULL;
1440 g_ee_data_rec_add(g_count_ee_addition).assignment_id := c_rec.assignment_id;
1441 g_ee_data_rec_add(g_count_ee_addition).element_entry_id := c_rec.element_entry_id;
1442 g_ee_data_rec_add(g_count_ee_addition).deductee_mode := 'A';
1443 g_count_ee_addition := g_count_ee_addition + 1;
1444 END IF;
1445 END IF;
1446 END LOOP;
1447 --The below process finds those Challan Element Entries which have MODE as Updation(U)
1448 -- This code checks U from Form 24Q Archival to Live Data
1449 pay_in_utils.set_location(g_debug,'Finding element entries updated since last statement ',4);
1450 pay_in_utils.set_location(g_debug,'Finding diff between live data and 24Q Archival ', 1);
1451
1452 l_flag := TRUE;
1453 FOR csr_rec IN c_update_mode_entries(p_payroll_action_id)
1454 LOOP
1455 pay_in_utils.set_location(g_debug,'Diff between live data and 24Q Archival found', 1);
1456 pay_in_utils.set_location(g_debug,'p_payroll_action_id is '|| p_payroll_action_id,2);
1457 pay_in_utils.set_location(g_debug,'Finding diff between live data and 24Q Correction Archival ', 1);
1458 pay_in_utils.set_location(g_debug,'csr_rec.last_action_context_id '|| csr_rec.last_action_context_id,2);
1459 pay_in_utils.set_location(g_debug,'csr_rec.assignment_id '|| csr_rec.assignment_id ,2);
1460 pay_in_utils.set_location(g_debug,'csr_rec.element_entry_id '|| csr_rec.element_entry_id ,2);
1461
1462 l_flag := TRUE;
1463
1464 FOR c_rec IN c_check_entries_in_24q_correct(csr_rec.last_action_context_id
1465 ,csr_rec.assignment_id
1466 ,csr_rec.element_entry_id
1467 ,'U'
1468 )
1469 LOOP
1470 IF ((c_rec.last_action_context_id IS NOT NULL)AND l_flag)
1471 THEN
1472 l_last_action_context_id := c_rec.last_action_context_id;
1473 pay_in_utils.set_location(g_debug,'Record was reported in 24Q Correction',11);
1474 pay_in_utils.set_location(g_debug,'with action context id as ' || l_last_action_context_id,1);
1475 l_flag := FALSE;
1476 END IF;
1477 END LOOP;
1478
1479 pay_in_utils.set_location(g_debug,'Mid way in finding updated element entries ', 5);
1480 IF (l_last_action_context_id IS NULL)
1481 THEN
1482 pay_in_utils.set_location(g_debug,'Record was not reported in 24Q Correction',1);
1483 pay_in_utils.set_location(g_debug,'Hence storing earlier values based on 24Q',1);
1484 g_ee_data_rec_upd(g_count_ee_update).last_action_context_id := csr_rec.last_action_context_id;
1485 g_ee_data_rec_upd(g_count_ee_update).assignment_id := csr_rec.assignment_id;
1486 g_ee_data_rec_upd(g_count_ee_update).element_entry_id := csr_rec.element_entry_id;
1487 g_ee_data_rec_upd(g_count_ee_update).deductee_mode := 'U';
1488 g_count_ee_update := g_count_ee_update + 1;
1489 ELSE --Present then need to check the present values with the archived values under Form 24QCorrection
1490 l_dummy := NULL;
1491 pay_in_utils.set_location(g_debug,'Record was reported in 24Q Correction',1);
1492 pay_in_utils.set_location(g_debug,'Need to compare the value from 24Q Correction now',1);
1493 OPEN c_24qc_upd_mode_entries(l_last_action_context_id,csr_rec.element_entry_id);
1494 FETCH c_24qc_upd_mode_entries INTO l_dummy;
1495 CLOSE c_24qc_upd_mode_entries;
1496
1497 IF (l_dummy IS NOT NULL) THEN
1498 pay_in_utils.set_location(g_debug,'Difference from 24Q Correction Data',1);
1499 pay_in_utils.set_location(g_debug,'l_dummy is '|| l_dummy,1);
1500 pay_in_utils.set_location(g_debug,'csr_rec.element_entry_id'|| csr_rec.element_entry_id,2);
1501 g_ee_data_rec_upd(g_count_ee_update).last_action_context_id := l_dummy;
1502 g_ee_data_rec_upd(g_count_ee_update).assignment_id := csr_rec.assignment_id;
1503 g_ee_data_rec_upd(g_count_ee_update).element_entry_id := csr_rec.element_entry_id;
1504 g_ee_data_rec_upd(g_count_ee_update).deductee_mode := 'U';
1505 g_count_ee_update := g_count_ee_update + 1;
1506 pay_in_utils.set_location(g_debug,'Stored data as 24Q Correction Data',1);
1507 END IF;
1508 END IF;
1509 END LOOP;
1510 pay_in_utils.set_location(g_debug,'Additional Checking on updated element entries ', 6);
1511 --Similarly need to repeat the above structure for the case when data after submission to authorities
1512 --was updated, form 24qc generated again updated to original form and 24qc again generated
1513 --The following code checks U for Data under Form 24Q Correction.
1514
1515 -- This cursor finds all those Form 24Q Corrections that are locking Form 24Q
1516 pay_in_utils.set_location(g_debug,'Now checking those element entries that have same data in live and 24QC ', 7);
1517 FOR c_rec IN c_form_24qc_locking_id('U',1)
1518 LOOP
1519
1520 l_flag := TRUE;
1521 l_dummy := NULL;
1522
1523 pay_in_utils.set_location(g_debug,'Checking 24qc+ and Live Here',1);
1524 pay_in_utils.set_location(g_debug,'c_rec.last_action_context_id' || c_rec.last_action_context_id,1);
1525 pay_in_utils.set_location(g_debug,'c_rec.element_entry_id' || c_rec.element_entry_id,2);
1526
1527 OPEN c_24qc_upd_mode_entries(c_rec.last_action_context_id,c_rec.element_entry_id);
1528 FETCH c_24qc_upd_mode_entries INTO l_dummy;
1529 CLOSE c_24qc_upd_mode_entries;
1530
1531 IF (l_dummy IS NOT NULL)
1532 THEN
1533 pay_in_utils.set_location(g_debug,'Diff found with the Live Data',3);
1534 FOR i IN 1.. g_count_ee_update - 1
1535 LOOP
1536 IF (
1537 (g_ee_data_rec_upd(i).last_action_context_id = c_rec.last_action_context_id)
1538 AND
1539 (g_ee_data_rec_upd(i).assignment_id = c_rec.assignment_id)
1540 AND
1541 (g_ee_data_rec_upd(i).element_entry_id = c_rec.element_entry_id)
1542 AND
1543 (g_ee_data_rec_upd(i).deductee_mode = 'U')
1544 )
1545 THEN
1546 l_flag := FALSE;
1547 END IF;
1548 END LOOP;
1549 ELSE
1550 pay_in_utils.set_location(g_debug,'No Diff found with the Live Data',3);
1551 l_flag := FALSE;
1552 END IF;
1553
1554 IF (l_flag)
1555 THEN
1556 g_ee_data_rec_upd(g_count_ee_update).last_action_context_id := c_rec.last_action_context_id;
1557 g_ee_data_rec_upd(g_count_ee_update).assignment_id := c_rec.assignment_id;
1558 g_ee_data_rec_upd(g_count_ee_update).element_entry_id := c_rec.element_entry_id;
1559 g_ee_data_rec_upd(g_count_ee_update).deductee_mode := 'U';
1560 g_count_ee_update := g_count_ee_update + 1;
1561 END IF;
1562
1563 END LOOP;
1564 --Now Searching for those updated element entries that were created after
1565 --form 24Q Correction generation
1566 pay_in_utils.set_location(g_debug,'Now Searching for those updated element entries that were 24QC+',1);
1567 FOR c_rec IN c_form_24qc_locking_id('A',2)
1568 LOOP
1569 l_dummy := NULL;
1570 pay_in_utils.set_location(g_debug,'c_rec.last_action_context_id '|| c_rec.last_action_context_id,1);
1571 pay_in_utils.set_location(g_debug,'c_rec.assignment_id '|| c_rec.assignment_id ,1);
1572 pay_in_utils.set_location(g_debug,'c_rec.element_entry_id '|| c_rec.element_entry_id ,1);
1573
1574 OPEN c_24qc_upd_mode_entries(c_rec.last_action_context_id,c_rec.element_entry_id);
1575 FETCH c_24qc_upd_mode_entries INTO l_dummy;
1576 CLOSE c_24qc_upd_mode_entries;
1577 pay_in_utils.set_location(g_debug,'l_dummy is '|| l_dummy,2);
1578 IF (l_dummy IS NOT NULL)
1579 THEN
1580 g_ee_data_rec_upd(g_count_ee_update).last_action_context_id := c_rec.last_action_context_id;
1581 g_ee_data_rec_upd(g_count_ee_update).assignment_id := c_rec.assignment_id;
1582 g_ee_data_rec_upd(g_count_ee_update).element_entry_id := c_rec.element_entry_id;
1583 g_ee_data_rec_upd(g_count_ee_update).deductee_mode := 'U';
1584 g_count_ee_update := g_count_ee_update + 1;
1585 END IF;
1586 END LOOP;
1587 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,30);
1588 --
1589 EXCEPTION
1590 WHEN OTHERS THEN
1591 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
1592 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
1593 END generate_employee_data;
1594
1595
1596 --------------------------------------------------------------------------
1597 -- --
1598 -- Name : GET_FORMAT_VALUE --
1599 -- Type : FUNCTION --
1600 -- Access : Public --
1601 -- Description : This function returns value with precision --
1602 -- of two decimal place --
1603 -- --
1604 -- Parameters : --
1605 -- IN : p_value VARCHAR2 --
1606 --------------------------------------------------------------------------
1607 FUNCTION get_format_value(p_value IN VARCHAR2)
1608 RETURN VARCHAR2 IS
1609
1610 l_value VARCHAR2(20);
1611 l_procedure VARCHAR2(100);
1612
1613 BEGIN
1614 g_debug := hr_utility.debug_enabled;
1615 l_procedure := g_package ||'.get_format_value';
1616 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1617 IF g_debug THEN
1618 pay_in_utils.trace('p_value',p_value);
1619 END IF;
1620
1621 IF(NVL(p_value,0)=0) THEN
1622 RETURN '0.00';
1623 END IF;
1624
1625 l_value := (p_value*100);
1626
1627 l_value := SUBSTR(l_value,1,length(l_value)-2)||'.'||SUBSTR(l_value,length(l_value)-1,length(l_value));
1628
1629
1630 IF g_debug THEN
1631 pay_in_utils.trace('l_value',l_value);
1632 END IF;
1633
1634 pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,20);
1635
1636 RETURN l_value;
1637
1638 END get_format_value;
1639
1640 --------------------------------------------------------------------------
1641 -- --
1642 -- Name : GET_24Q_VALUES --
1643 -- Type : FUNCTION --
1644 -- Access : Public --
1645 -- Description : This function returns the values corresponding to --
1646 -- the F16 Balances --
1647 -- Parameters : --
1648 -- IN : p_category VARCHAR2 --
1649 -- p_component_name VARCHAR2 --
1650 -- p_context_id NUMBER --
1651 -- p_source_id NUMBER --
1652 -- p_segment_num NUMBER --
1653 --------------------------------------------------------------------------
1654 FUNCTION get_24Q_values (p_category IN VARCHAR2
1655 ,p_component_name IN VARCHAR2
1656 ,p_context_id IN NUMBER
1657 ,p_source_id IN NUMBER
1658 ,p_segment_num IN NUMBER )
1659 RETURN VARCHAR2 IS
1660
1661 CURSOR c_form24Q_values IS
1662 SELECT NVL(action_information2,0)
1663 FROM pay_action_information
1664 WHERE action_information_category = p_category
1665 AND action_information1 = p_component_name
1666 AND action_context_id = p_context_id
1667 AND source_id = p_source_id;
1668
1669 l_value1 VARCHAR2(20);
1670 l_procedure varchar2(100);
1671
1672 BEGIN
1673 g_debug := hr_utility.debug_enabled;
1674 l_procedure := g_package ||'.get_24Q_values';
1675 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1676
1677 IF g_debug THEN
1678 pay_in_utils.trace('**************************************************','********************');
1679 pay_in_utils.trace('p_category',p_category);
1680 pay_in_utils.trace('p_component_name',p_component_name);
1681 pay_in_utils.trace('p_context_id',TO_CHAR(p_context_id));
1682 pay_in_utils.trace('p_source_id',TO_CHAR(p_source_id));
1683 pay_in_utils.trace('p_segment_num',TO_CHAR(p_segment_num));
1684 pay_in_utils.trace('**************************************************','********************');
1685 END IF;
1686
1687 OPEN c_form24Q_values;
1688 FETCH c_form24Q_values INTO l_value1;
1689 IF c_form24Q_values%NOTFOUND THEN
1690 CLOSE c_form24Q_values;
1691 RETURN '0.00';
1692 END IF;
1693 CLOSE c_form24Q_values;
1694
1695 pay_in_utils.set_location(g_debug,'l_value1 = : '||l_value1,15);
1696
1697 l_value1 := get_format_value(l_value1);
1698
1699 pay_in_utils.set_location(g_debug,'l_value1 = : '||l_value1,20);
1700
1701 pay_in_utils.set_location(g_debug,'LEAVING: '||l_procedure,40);
1702
1703 IF(p_segment_num=1) THEN
1704 RETURN l_value1;
1705 END IF;
1706
1707 END get_24Q_values;
1708
1709 --------------------------------------------------------------------------
1710 -- --
1711 -- Name : GENERATE_SALARY_DATA --
1712 -- Type : PROCEDURE --
1713 -- Access : Private --
1714 -- Description : This procedure populates global tables used in --
1715 -- salary detail record --
1716 -- Parameters : --
1717 -- IN : p_payroll_action_id NUMBER --
1718 -- OUT : N/A --
1719 -- --
1720 -- Change History : --
1721 --------------------------------------------------------------------------
1722 -- Rev# Date Userid Description --
1723 --------------------------------------------------------------------------
1724 -- 115.0 07-Feb-2007 rpalli 5754018 : 24QC Quarter4 Stat Update --
1725 --------------------------------------------------------------------------
1726 PROCEDURE generate_salary_data(p_payroll_action_id IN NUMBER
1727 ,p_start_person IN NUMBER
1728 ,p_end_person IN NUMBER)
1729 IS
1730
1731 CURSOR c_delete_mode_entries(p_payroll_action_id NUMBER)
1732 IS
1733 SELECT pai.source_id source_id
1734 ,pai.assignment_id assignment_id
1735 ,pai.action_context_id last_action_context_id
1736 FROM pay_action_information pai
1737 ,pay_assignment_actions paa
1738 WHERE pai.action_information_category LIKE 'IN_24Q%_PERSON'
1739 AND fnd_number.canonical_to_number(pai.action_information1)
1740 BETWEEN p_start_person AND p_end_person
1741 AND pai.action_context_id = paa.assignment_action_id
1742 AND
1743 ( pai.action_information_category = 'IN_24Q_PERSON'
1744 OR
1745 (pai.action_information_category = 'IN_24QC_PERSON' AND pai.action_information10 IN ('A'))
1746 )
1747 AND(
1748 paa.payroll_action_id IN (
1749 SELECT org_information3
1750 FROM hr_organization_information
1751 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1752 AND organization_id = g_gre_id
1753 AND org_information1 = g_year
1754 AND org_information2 = g_quarter
1755 AND org_information5 = 'A'
1756 )
1757 )
1758 AND pai.action_information3 = g_gre_id
1759 AND (
1760 pai.source_id NOT IN
1761 (
1762 SELECT
1763 paa.assignment_action_id run_asg_action_id
1764 FROM pay_assignment_actions paa
1765 ,pay_payroll_actions ppa
1766 ,per_assignments_f paf
1767 WHERE paf.assignment_id = paa.assignment_id
1768 AND paa.assignment_id = pai.assignment_id
1769 AND paa.tax_unit_id = pai.action_information3
1770 AND paa.payroll_action_id = ppa.payroll_action_id
1771 AND ppa.action_type IN('R','Q','I','B')
1772 AND ppa.payroll_id = paf.payroll_id
1773 AND ppa.action_status ='C'
1774 AND ppa.effective_date between g_start_date and g_end_date
1775 AND paa.source_action_id IS NULL
1776 AND (1 = DECODE(ppa.action_type,'I',1,0)
1777 OR EXISTS (SELECT ''
1778 FROM pay_action_interlocks intk,
1779 pay_assignment_actions paa1,
1780 pay_payroll_actions ppa1
1781 WHERE intk.locked_action_id = paa.assignment_Action_id
1782 AND intk.locking_action_id = paa1.assignment_action_id
1783 AND paa1.payroll_action_id =ppa1.payroll_action_id
1784 AND ppa1.action_type in('P','U')
1785 AND ppa.action_type in('R','Q','B')
1786 AND ppa1.action_status ='C'
1787 AND ppa1.effective_date BETWEEN g_start_date and g_end_date
1788 AND ROWNUM =1 ))
1789 )
1790 )
1791 AND (
1792 pai.source_id NOT IN
1793 (SELECT pai.source_id
1794 FROM pay_action_information pai
1795 ,pay_action_interlocks locks
1796 ,pay_assignment_actions paa
1797 ,pay_assignment_actions masters
1798 WHERE pai.action_information_category = 'IN_24QC_PERSON'
1799 AND pai.action_information10 IN ('D')
1800 AND locks.locking_action_id = pai.action_context_id
1801 AND locks.locked_action_id = paa.assignment_action_id
1802 AND paa.payroll_action_id = p_payroll_action_id
1803 AND paa.assignment_id = pai.assignment_id
1804 AND masters.assignment_id = pai.assignment_id
1805 AND masters.assignment_action_id = pai.action_context_id
1806 AND masters.payroll_action_id IN(
1807 SELECT org_information3
1808 FROM hr_organization_information
1809 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1810 AND organization_id = g_gre_id
1811 AND org_information1 = g_year
1812 AND org_information2 = g_quarter
1813 AND org_information5 = 'A'
1814 AND org_information6 = 'C'
1815 )
1816 )
1817 )
1818 ORDER BY 2 DESC;
1819
1820 CURSOR c_addition_mode_entries(p_payroll_action_id NUMBER)
1821 IS
1822 SELECT a.source_id,a.assignment_id,a.last_action_context_id
1823 FROM
1824 (SELECT
1825 FND_NUMBER.CANONICAL_TO_NUMBER(SUBSTR(MAX(LPAD(paa.action_sequence,15,'0')||paa.assignment_action_id),16)) source_id
1826 ,paf.assignment_id assignment_id
1827 ,NULL last_action_context_id
1828 FROM pay_assignment_actions paa
1829 ,pay_payroll_actions ppa
1830 ,per_assignments_f paf
1831 WHERE paf.person_id BETWEEN p_start_person AND p_end_person
1832 AND paf.assignment_id = paa.assignment_id
1833 AND paa.tax_unit_id = g_gre_id
1834 AND paa.payroll_action_id = ppa.payroll_action_id
1835 AND ppa.action_type IN('R','Q','I','B')
1836 AND ppa.payroll_id = paf.payroll_id
1837 AND ppa.action_status ='C'
1838 AND ppa.effective_date between g_start_date and g_end_date
1839 AND paa.source_action_id IS NULL
1840 AND (1 = DECODE(ppa.action_type,'I',1,0)
1841 OR EXISTS (SELECT ''
1842 FROM pay_action_interlocks intk,
1843 pay_assignment_actions paa1,
1844 pay_payroll_actions ppa1
1845 WHERE intk.locked_action_id = paa.assignment_Action_id
1846 AND intk.locking_action_id = paa1.assignment_action_id
1847 AND paa1.payroll_action_id =ppa1.payroll_action_id
1848 AND ppa1.action_type in('P','U')
1849 AND ppa.action_type in('R','Q','B')
1850 AND ppa1.action_status ='C'
1851 AND ppa1.effective_date BETWEEN g_start_date and g_end_date
1852 AND ROWNUM =1 ))
1853 GROUP BY paf.assignment_id) a
1854 WHERE (
1855 a.source_id NOT IN
1856 (SELECT pai.source_id
1857 FROM pay_action_information pai
1858 ,pay_assignment_actions paa
1859 WHERE pai.action_information_category = 'IN_24Q_PERSON'
1860 AND pai.action_context_id = paa.assignment_action_id
1861 AND paa.payroll_action_id = p_payroll_action_id
1862 )
1863 )
1864 AND (
1865 a.source_id NOT IN
1866 (SELECT pai.source_id
1867 FROM pay_action_information pai
1868 ,pay_action_interlocks locks
1869 ,pay_assignment_actions paa
1870 ,pay_assignment_actions paa_24qc
1871 WHERE pai.action_information_category = 'IN_24QC_PERSON'
1872 AND locks.locking_action_id = pai.action_context_id
1873 AND locks.locked_action_id = paa.assignment_action_id
1874 AND paa.payroll_action_id = p_payroll_action_id
1875 AND paa.assignment_id = pai.assignment_id
1876 AND pai.action_information2 = g_year||g_quarter
1877 AND paa_24qc.assignment_id = pai.assignment_id
1878 AND paa_24qc.assignment_action_id = pai.action_context_id
1879 AND paa_24qc.payroll_action_id IN(
1880 SELECT org_information3
1881 FROM hr_organization_information
1882 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1883 AND organization_id = g_gre_id
1884 AND org_information1 = g_year
1885 AND org_information2 = g_quarter
1886 AND org_information5 = 'A'
1887 AND org_information6 = 'C'
1888 )
1889 )
1890 )
1891 AND (
1892 a.source_id NOT IN
1893 (SELECT pai.source_id
1894 FROM pay_action_information pai
1895 ,pay_action_interlocks locks
1896 ,pay_assignment_actions paa
1897 ,pay_assignment_actions paa_24qc
1898 WHERE pai.action_information_category = 'IN_24QC_PERSON'
1899 AND locks.locking_action_id = pai.action_context_id
1900 AND locks.locked_action_id = paa.assignment_action_id
1901 AND paa.payroll_action_id = p_payroll_action_id
1902 AND paa.assignment_id = pai.assignment_id
1903 AND pai.action_information2 = g_year||g_quarter
1904 AND paa_24qc.assignment_id = pai.assignment_id
1905 AND paa_24qc.assignment_action_id = pai.action_context_id
1906 AND paa_24qc.payroll_action_id IN(
1907 SELECT org_information3
1908 FROM hr_organization_information
1909 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1910 AND organization_id = g_gre_id
1911 AND org_information1 = g_year
1912 AND org_information2 = g_quarter
1913 AND org_information5 = 'A'
1914 AND org_information6 = 'C'
1915 )
1916 )
1917 )
1918 AND (
1919 a.source_id NOT IN
1920 (SELECT pai.source_id
1921 FROM pay_action_information pai
1922 ,pay_assignment_actions paa_24qc
1923 WHERE pai.action_information_category = 'IN_24QC_PERSON'
1924 AND pai.action_information3 = g_gre_id
1925 AND pai.action_information2 = g_year||g_quarter
1926 AND paa_24qc.assignment_id = pai.assignment_id
1927 AND paa_24qc.assignment_action_id = pai.action_context_id
1928 AND paa_24qc.payroll_action_id IN(
1929 SELECT org_information3
1930 FROM hr_organization_information
1931 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
1932 AND organization_id = g_gre_id
1933 AND org_information1 = g_year
1934 AND org_information2 = g_quarter
1935 AND org_information5 = 'A'
1936 AND org_information6 = 'C'
1937 )
1938 )
1939 )
1940 ORDER BY 2 DESC;
1941
1942
1943 CURSOR c_update_mode_entries(p_payroll_action_id NUMBER
1944 )
1945 IS
1946 SELECT DISTINCT
1947 pai.source_id source_id
1948 ,pai.assignment_id assignment_id
1949 ,pai.action_context_id last_action_context_id
1950 ,pep.effective_end_date
1951 FROM pay_action_information pai
1952 ,pay_assignment_actions paa
1953 ,per_people_f pep
1954 ,per_assignments_f asg
1955 WHERE pai.action_information_category = 'IN_24Q_PERSON'
1956 AND fnd_number.canonical_to_number(pai.action_information1)
1957 BETWEEN p_start_person AND p_end_person
1958 AND pai.action_context_id = paa.assignment_action_id
1959 AND pai.action_information3 = g_gre_id
1960 AND paa.payroll_action_id = p_payroll_action_id
1961 AND asg.assignment_id = pai.assignment_id
1962 AND asg.person_id = pep.person_id
1963 AND asg.business_group_id = pep.business_group_id
1964 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
1965 AND pai.source_id IN
1966 (
1967 SELECT
1968 paa.assignment_action_id run_asg_action_id
1969 FROM pay_assignment_actions paa
1970 ,pay_payroll_actions ppa
1971 ,per_assignments_f paf
1972 WHERE paf.person_id BETWEEN p_start_person AND p_end_person
1973 AND paf.assignment_id = paa.assignment_id
1974 AND paa.assignment_id = pai.assignment_id
1975 AND paa.tax_unit_id = pai.action_information3
1976 AND paa.payroll_action_id = ppa.payroll_action_id
1977 AND ppa.action_type IN('R','Q','I','B')
1978 AND ppa.payroll_id = paf.payroll_id
1979 AND ppa.action_status ='C'
1980 AND ppa.effective_date between g_start_date and g_end_date
1981 AND paa.source_action_id IS NULL
1982 AND (1 = DECODE(ppa.action_type,'I',1,0)
1983 OR EXISTS (SELECT ''
1984 FROM pay_action_interlocks intk,
1985 pay_assignment_actions paa1,
1986 pay_payroll_actions ppa1
1987 WHERE intk.locked_action_id = paa.assignment_Action_id
1988 AND intk.locking_action_id = paa1.assignment_action_id
1989 AND paa1.payroll_action_id =ppa1.payroll_action_id
1990 AND ppa1.action_type in('P','U')
1991 AND ppa.action_type in('R','Q','B')
1992 AND ppa1.action_status ='C'
1993 AND ppa1.effective_date BETWEEN g_start_date and g_end_date
1994 AND ROWNUM =1 ))
1995 )
1996 AND (
1997 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Salary Under Section 17',pai.action_context_id,pai.source_id,1)))
1998 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Salary Under Section 17','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
1999 OR
2000 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Profit in lieu of Salary',pai.action_context_id,pai.source_id,1)))
2001 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Profit in lieu of Salary','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2002 OR
2003 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Value of Perquisites',pai.action_context_id,pai.source_id,1)))
2004 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Value of Perquisites','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2005 OR
2006 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Gross Salary less Allowances',pai.action_context_id,pai.source_id,1)))
2007 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Gross Salary less Allowances','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2008 OR
2009 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Allowances Exempt',pai.action_context_id,pai.source_id,1)))
2010 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Allowances Exempt','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2011 OR
2012 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Deductions under Sec 16',pai.action_context_id,pai.source_id,1)))
2013 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Deductions under Sec 16','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2014 OR
2015 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Income Chargeable Under head Salaries',pai.action_context_id,pai.source_id,1)))
2016 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Income Chargeable Under head Salaries','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2017 OR
2018 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Other Income',pai.action_context_id,pai.source_id,1)))
2019 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Other Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2020 OR
2021 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Gross Total Income',pai.action_context_id,pai.source_id,1)))
2022 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Gross Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2023 OR
2024 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Total Income',pai.action_context_id,pai.source_id,1)))
2025 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2026 OR
2027 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Tax on Total Income',pai.action_context_id,pai.source_id,1)))
2028 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Tax on Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2029 OR
2030 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Marginal Relief',pai.action_context_id,pai.source_id,1)))
2031 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Marginal Relief','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2032 OR
2033 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Total Tax payable',pai.action_context_id,pai.source_id,1)))
2034 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Tax payable','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2035 OR
2036 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Relief under Sec 89',pai.action_context_id,pai.source_id,1)))
2037 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Relief under Sec 89','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2038 OR
2039 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Employment Tax',pai.action_context_id,pai.source_id,1)))
2040 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Employment Tax','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2041 OR
2042 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Entertainment Allowance',pai.action_context_id,pai.source_id,1)))
2043 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Entertainment Allowance','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2044 OR
2045 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Surcharge',pai.action_context_id,pai.source_id,1)))
2046 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Surcharge','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2047 OR
2048 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Education Cess',pai.action_context_id,pai.source_id,1)))
2049 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Education Cess','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2050 OR
2051 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 TDS',pai.action_context_id,pai.source_id,1)))
2052 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 TDS','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2053 OR
2054 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_SALARY','F16 Total Chapter VI A Deductions',pai.action_context_id,pai.source_id,1)))
2055 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Chapter VI A Deductions','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2056 OR
2057 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24Q_VIA','80CCE',pai.action_context_id,pai.source_id,1)))
2058 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Deductions Sec 80CCE','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2059 OR
2060 (pai.action_information6 <> hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title))
2061 OR -- Checking PAN reference Number
2062 (NVL(pai.action_information5,'0') <> NVL(pep.per_information14,'0'))
2063 OR ( --Checking PAN Number
2064 (
2065 g_correction_mode IN ('C5','%')
2066 AND (pai.action_information4 NOT IN('APPLIEDFOR','PANNOTAVBL'))
2067 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))NOT IN('APPLIEDFOR','PANNOTAVBL'))
2068 AND (pai.action_information4 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
2069 )
2070 OR
2071 (
2072 g_correction_mode NOT IN ('C5')
2073 AND (pai.action_information4 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
2074 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))IN('APPLIEDFOR','PANNOTAVBL'))
2075 )
2076 )
2077 )
2078 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
2079 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date
2080 ORDER BY 2,4 DESC;
2081
2082
2083 CURSOR c_check_entries_in_24q_correct(p_24q_arc_action_context_id NUMBER
2084 ,p_assignment_id NUMBER
2085 ,p_source_id NUMBER
2086 )
2087 IS
2088 SELECT pai_locking.action_context_id last_action_context_id
2089 FROM pay_action_information pai_locking
2090 ,pay_action_interlocks locks
2091 ,pay_assignment_actions paa
2092 WHERE pai_locking.action_information_category = 'IN_24QC_PERSON'
2093 AND fnd_number.canonical_to_number(pai_locking.action_information1)
2094 BETWEEN p_start_person AND p_end_person
2095 AND pai_locking.action_information3 = g_gre_id
2096 AND pai_locking.action_context_id = paa.assignment_action_id
2097 AND paa.payroll_action_id IN
2098 (
2099 SELECT org_information3
2100 FROM hr_organization_information
2101 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
2102 AND organization_id = g_gre_id
2103 AND org_information1 = g_year
2104 AND org_information2 = g_quarter
2105 AND org_information5 = 'A'
2106 AND org_information6 = 'C'
2107 )
2108 AND locks.locking_action_id = pai_locking.action_context_id
2109 AND locks.locked_action_id = p_24q_arc_action_context_id
2110 AND pai_locking.assignment_id = p_assignment_id
2111 AND pai_locking.source_id = p_source_id
2112 ORDER BY pai_locking.action_context_id DESC;
2113
2114 CURSOR c_24qc_upd_mode_entries(p_assignment_action_id NUMBER
2115 ,p_source_id NUMBER
2116 )
2117 IS
2118 SELECT pai.action_context_id
2119 FROM pay_action_information pai
2120 ,per_people_f pep
2121 ,per_assignments_f asg
2122 ,pay_assignment_actions paa
2123 WHERE pai.action_information_category = 'IN_24QC_PERSON'
2124 AND fnd_number.canonical_to_number(pai.action_information1)
2125 BETWEEN p_start_person AND p_end_person
2126 AND paa.assignment_action_id = pai.action_context_id
2127 AND pai.source_id = p_source_id
2128 AND paa.payroll_action_id IN
2129 (
2130 SELECT org_information3
2131 FROM hr_organization_information
2132 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
2133 AND organization_id = g_gre_id
2134 AND org_information1 = g_year
2135 AND org_information2 = g_quarter
2136 AND org_information5 = 'A'
2137 AND org_information6 = 'C'
2138 )
2139 AND pai.action_information3 = g_gre_id
2140 AND pai.action_context_id = p_assignment_action_id
2141 AND asg.assignment_id = pai.assignment_id
2142 AND asg.person_id = pep.person_id
2143 AND asg.business_group_id = pep.business_group_id
2144 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2145 AND pai.source_id IN
2146 (
2147 SELECT
2148 paa.assignment_action_id run_asg_action_id
2149 FROM pay_assignment_actions paa
2150 ,pay_payroll_actions ppa
2151 ,per_assignments_f paf
2152 WHERE paf.person_id BETWEEN p_start_person AND p_end_person
2153 AND paf.assignment_id = paa.assignment_id
2154 AND paa.assignment_id = pai.assignment_id
2155 AND paa.tax_unit_id = pai.action_information3
2156 AND paa.payroll_action_id = ppa.payroll_action_id
2157 AND ppa.action_type IN('R','Q','I','B')
2158 AND ppa.payroll_id = paf.payroll_id
2159 AND ppa.action_status ='C'
2160 AND ppa.effective_date between g_start_date and g_end_date
2161 AND paa.source_action_id IS NULL
2162 AND (1 = DECODE(ppa.action_type,'I',1,0)
2163 OR EXISTS (SELECT ''
2164 FROM pay_action_interlocks intk,
2165 pay_assignment_actions paa1,
2166 pay_payroll_actions ppa1
2167 WHERE intk.locked_action_id = paa.assignment_Action_id
2168 AND intk.locking_action_id = paa1.assignment_action_id
2169 AND paa1.payroll_action_id =ppa1.payroll_action_id
2170 AND ppa1.action_type in('P','U')
2171 AND ppa.action_type in('R','Q','B')
2172 AND ppa1.action_status ='C'
2173 AND ppa1.effective_date BETWEEN g_start_date and g_end_date
2174 AND ROWNUM =1 ))
2175 )
2176 AND (
2177 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Salary Under Section 17',pai.action_context_id,pai.source_id,1)))
2178 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Salary Under Section 17','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2179 OR
2180 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Profit in lieu of Salary',pai.action_context_id,pai.source_id,1)))
2181 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Profit in lieu of Salary','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2182 OR
2183 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Value of Perquisites',pai.action_context_id,pai.source_id,1)))
2184 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Value of Perquisites','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2185 OR
2186 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Gross Salary less Allowances',pai.action_context_id,pai.source_id,1)))
2187 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Gross Salary less Allowances','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2188 OR
2189 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Allowances Exempt',pai.action_context_id,pai.source_id,1)))
2190 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Allowances Exempt','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2191 OR
2192 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Deductions under Sec 16',pai.action_context_id,pai.source_id,1)))
2193 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Deductions under Sec 16','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2194 OR
2195 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Income Chargeable Under head Salaries',pai.action_context_id,pai.source_id,1)))
2196 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Income Chargeable Under head Salaries','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2197 OR
2198 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Other Income',pai.action_context_id,pai.source_id,1)))
2199 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Other Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2200 OR
2201 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Gross Total Income',pai.action_context_id,pai.source_id,1)))
2202 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Gross Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2203 OR
2204 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Total Income',pai.action_context_id,pai.source_id,1)))
2205 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2206 OR
2207 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Tax on Total Income',pai.action_context_id,pai.source_id,1)))
2208 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Tax on Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2209 OR
2210 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Marginal Relief',pai.action_context_id,pai.source_id,1)))
2211 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Marginal Relief','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2212 OR
2213 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Total Tax payable',pai.action_context_id,pai.source_id,1)))
2214 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Tax payable','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2215 OR
2216 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Relief under Sec 89',pai.action_context_id,pai.source_id,1)))
2217 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Relief under Sec 89','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2218 OR
2219 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Employment Tax',pai.action_context_id,pai.source_id,1)))
2220 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Employment Tax','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2221 OR
2222 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Entertainment Allowance',pai.action_context_id,pai.source_id,1)))
2223 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Entertainment Allowance','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2224 OR
2225 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Surcharge',pai.action_context_id,pai.source_id,1)))
2226 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Surcharge','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2227 OR
2228 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Education Cess',pai.action_context_id,pai.source_id,1)))
2229 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Education Cess','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2230 OR
2231 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 TDS',pai.action_context_id,pai.source_id,1)))
2232 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 TDS','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2233 OR
2234 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Total Chapter VI A Deductions',pai.action_context_id,pai.source_id,1)))
2235 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Chapter VI A Deductions','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2236 OR
2237 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_VIA','80CCE',pai.action_context_id,pai.source_id,1)))
2238 <> FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Deductions Sec 80CCE','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2239 OR
2240 (pai.action_information6 <> hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title))
2241 OR
2242 (NVL(pai.action_information5,'0') <> NVL(pep.per_information14,'0'))
2243 OR(
2244 (
2245 g_correction_mode IN ('C5','%')
2246 AND (pai.action_information4 NOT IN('APPLIEDFOR','PANNOTAVBL'))
2247 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))NOT IN('APPLIEDFOR','PANNOTAVBL'))
2248 AND (pai.action_information4 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
2249 )
2250 OR
2251 (
2252 g_correction_mode NOT IN ('C5')
2253 AND (pai.action_information4 <> (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
2254 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))IN('APPLIEDFOR','PANNOTAVBL'))
2255 )
2256 )
2257 )
2258 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
2259 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date
2260 AND NOT EXISTS
2261 (
2262 SELECT 1
2263 FROM pay_action_information pai
2264 ,per_people_f pep
2265 ,per_assignments_f asg
2266 WHERE pai.action_information_category = 'IN_24QC_PERSON'
2267 AND fnd_number.canonical_to_number(pai.action_information1)
2268 BETWEEN p_start_person AND p_end_person
2269 AND pai.source_id = p_source_id
2270 AND pai.action_information3 = g_gre_id
2271 AND pai.action_context_id = p_assignment_action_id
2272 AND asg.assignment_id = pai.assignment_id
2273 AND asg.person_id = pep.person_id
2274 AND asg.business_group_id = pep.business_group_id
2275 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2276 AND (
2277 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Salary Under Section 17',pai.action_context_id,pai.source_id,1)))
2278 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Salary Under Section 17','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2279 AND
2280 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Profit in lieu of Salary',pai.action_context_id,pai.source_id,1)))
2281 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Profit in lieu of Salary','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2282 AND
2283 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Value of Perquisites',pai.action_context_id,pai.source_id,1)))
2284 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Value of Perquisites','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2285 AND
2286 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Gross Salary less Allowances',pai.action_context_id,pai.source_id,1)))
2287 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Gross Salary less Allowances','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2288 AND
2289 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Allowances Exempt',pai.action_context_id,pai.source_id,1)))
2290 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Allowances Exempt','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2291 AND
2292 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Deductions under Sec 16',pai.action_context_id,pai.source_id,1)))
2293 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Deductions under Sec 16','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2294 AND
2295 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Income Chargeable Under head Salaries',pai.action_context_id,pai.source_id,1)))
2296 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Income Chargeable Under head Salaries','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2297 AND
2298 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Other Income',pai.action_context_id,pai.source_id,1)))
2299 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Other Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2300 AND
2301 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Gross Total Income',pai.action_context_id,pai.source_id,1)))
2302 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Gross Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2303 AND
2304 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Total Income',pai.action_context_id,pai.source_id,1)))
2305 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2306 AND
2307 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Tax on Total Income',pai.action_context_id,pai.source_id,1)))
2308 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Tax on Total Income','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2309 AND
2310 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Marginal Relief',pai.action_context_id,pai.source_id,1)))
2311 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Marginal Relief','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2312 AND
2313 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Total Tax payable',pai.action_context_id,pai.source_id,1)))
2314 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Tax payable','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2315 AND
2316 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Relief under Sec 89',pai.action_context_id,pai.source_id,1)))
2317 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Relief under Sec 89','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2318 AND
2319 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Employment Tax',pai.action_context_id,pai.source_id,1)))
2320 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Employment Tax','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2321 AND
2322 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Entertainment Allowance',pai.action_context_id,pai.source_id,1)))
2323 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Entertainment Allowance','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2324 AND
2325 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Surcharge',pai.action_context_id,pai.source_id,1)))
2326 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Surcharge','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2327 AND
2328 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Education Cess',pai.action_context_id,pai.source_id,1)))
2329 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Education Cess','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2330 AND
2331 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 TDS',pai.action_context_id,pai.source_id,1)))
2332 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 TDS','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2333 AND
2334 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_SALARY','F16 Total Chapter VI A Deductions',pai.action_context_id,pai.source_id,1)))
2335 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Total Chapter VI A Deductions','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2336 AND
2337 (FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values('IN_24QC_VIA','80CCE',pai.action_context_id,pai.source_id,1)))
2338 = FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(pay_in_tax_utils.get_balance_value(pai.source_id,'F16 Deductions Sec 80CCE','_ASG_LE_PTD','TAX_UNIT_ID',g_gre_id))))
2339 AND
2340 (pai.action_information6 = hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title))
2341 AND(--Checking PAN Number
2342 (
2343 g_correction_mode IN ('C5','%')
2344 AND (pai.action_information4 NOT IN('APPLIEDFOR','PANNOTAVBL'))
2345 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))NOT IN('APPLIEDFOR','PANNOTAVBL'))
2346 AND (pai.action_information4 = (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
2347 )
2348 OR
2349 (
2350 g_correction_mode NOT IN ('C5')
2351 AND (pai.action_information4 = (DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4)))
2352 AND ((DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4))IN('APPLIEDFOR','PANNOTAVBL'))
2353 )
2354 )
2355 AND -- Checking PAN reference Number
2356 (NVL(pai.action_information5,'0') = NVL(pep.per_information14,'0'))
2357 )
2358 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
2359 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date
2360 );
2361
2362 CURSOR c_form_24qc_locking_id(p_mode VARCHAR2
2363 ,p_flag NUMBER
2364 )
2365 IS
2366 SELECT MAX(pai.action_context_id) last_action_context_id
2367 ,pai.source_id source_id
2368 ,pai.assignment_id assignment_id
2369 FROM pay_action_information pai
2370 ,pay_assignment_actions paa
2371 WHERE pai.action_information_category = 'IN_24QC_PERSON'
2372 AND fnd_number.canonical_to_number(pai.action_information1)
2373 BETWEEN p_start_person AND p_end_person
2374 AND pai.action_information3 = g_gre_id
2375 AND pai.action_information2 = g_year||g_quarter
2376 AND
2377 ( ((p_flag = 1) AND (pai.action_information10 IN ('A','NA')))
2378 OR ((p_flag = 2) AND (pai.action_information10 = p_mode))
2379 )
2380 AND pai.action_context_id = paa.assignment_action_id
2381 AND paa.payroll_action_id IN
2382 (
2383 SELECT org_information3
2384 FROM hr_organization_information
2385 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
2386 AND organization_id = g_gre_id
2387 AND org_information1 = g_year
2388 AND org_information2 = g_quarter
2389 AND org_information5 = 'A'
2390 AND org_information6 = 'C'
2391 )
2392 AND (
2393 p_flag = 1
2394 OR
2395 (
2396 pai.source_id NOT IN(
2397 SELECT pai.source_id
2398 FROM pay_action_information pai
2399 ,pay_assignment_actions paa
2400 WHERE pai.action_information_category = 'IN_24QC_PERSON'
2401 AND fnd_number.canonical_to_number(pai.action_information1)
2402 BETWEEN p_start_person AND p_end_person
2403 AND pai.action_information3 = g_gre_id
2404 AND pai.action_information2 = g_year||g_quarter
2405 AND pai.action_information10 = 'D'
2406 AND pai.action_context_id = paa.assignment_action_id
2407 AND paa.payroll_action_id IN
2408 (
2409 SELECT org_information3
2410 FROM hr_organization_information
2411 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
2412 AND organization_id = g_gre_id
2413 AND org_information1 = g_year
2414 AND org_information2 = g_quarter
2415 AND org_information5 = 'A'
2416 AND org_information6 = 'C'
2417 )
2418 )
2419 AND pai.source_id IN
2420 (SELECT a.source_id
2421 FROM
2422 (SELECT
2423 FND_NUMBER.CANONICAL_TO_NUMBER(SUBSTR(MAX(LPAD(paa.action_sequence,15,'0')||paa.assignment_action_id),16)) source_id
2424 ,paf.assignment_id assignment_id
2425 ,NULL last_action_context_id
2426 FROM pay_assignment_actions paa
2427 ,pay_payroll_actions ppa
2428 ,per_assignments_f paf
2429 WHERE paf.person_id BETWEEN p_start_person AND p_end_person
2430 AND paf.assignment_id = paa.assignment_id
2431 AND paa.tax_unit_id = g_gre_id
2432 AND paa.payroll_action_id = ppa.payroll_action_id
2433 AND ppa.action_type IN('R','Q','I','B')
2434 AND ppa.payroll_id = paf.payroll_id
2435 AND ppa.action_status ='C'
2436 AND ppa.effective_date between g_start_date and g_end_date
2437 AND paa.source_action_id IS NULL
2438 AND (1 = DECODE(ppa.action_type,'I',1,0)
2439 OR EXISTS (SELECT ''
2440 FROM pay_action_interlocks intk,
2441 pay_assignment_actions paa1,
2442 pay_payroll_actions ppa1
2443 WHERE intk.locked_action_id = paa.assignment_Action_id
2444 AND intk.locking_action_id = paa1.assignment_action_id
2445 AND paa1.payroll_action_id =ppa1.payroll_action_id
2446 AND ppa1.action_type in('P','U')
2447 AND ppa.action_type in('R','Q','B')
2448 AND ppa1.action_status ='C'
2449 AND ppa1.effective_date BETWEEN g_start_date and g_end_date
2450 AND ROWNUM =1 ))
2451 GROUP BY paf.assignment_id) a
2452 WHERE
2453 a.assignment_id = pai.assignment_id)
2454 )
2455 )
2456 GROUP BY pai.assignment_id,pai.source_id;
2457
2458 CURSOR c_bg_check(p_assignment_id NUMBER)
2459 IS
2460 SELECT 1
2461 FROM per_assignments_f
2462 WHERE business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2463 AND assignment_id = p_assignment_id;
2464
2465 l_procedure VARCHAR2(100);
2466 l_action_id NUMBER;
2467 l_dummy NUMBER;
2468 l_flag BOOLEAN;
2469 l_last_action_context_id NUMBER;
2470 i NUMBER;
2471 l_message VARCHAR2(250);
2472 l_bg_check NUMBER;
2473
2474 --
2475 BEGIN
2476 --
2477 g_debug := hr_utility.debug_enabled;
2478 l_procedure := g_package || '.generate_salary_data';
2479
2480 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
2481
2482 pay_in_utils.trace('p_start_person in generate_salary_data-> ',p_start_person);
2483 pay_in_utils.trace('p_end_person in generate_salary_data-> ',p_end_person);
2484
2485
2486 --The below process finds those Assignment Actions which have MODE as Deletion(D)
2487 pay_in_utils.set_location(g_debug,'Finding Assignment Actions deleted since last statement ',2);
2488 FOR c_rec IN c_delete_mode_entries(p_payroll_action_id)
2489 LOOP
2490 l_bg_check := 0;
2491 OPEN c_bg_check(c_rec.assignment_id);
2492 FETCH c_bg_check INTO l_bg_check;
2493 CLOSE c_bg_check;
2494
2495 IF (l_bg_check = 1)
2496 THEN
2497 g_sal_data_rec_del(g_count_sal_delete).source_id := c_rec.source_id;
2498 g_sal_data_rec_del(g_count_sal_delete).last_action_context_id := c_rec.last_action_context_id;
2499 g_sal_data_rec_del(g_count_sal_delete).assignment_id := c_rec.assignment_id;
2500 g_sal_data_rec_del(g_count_sal_delete).salary_mode := 'D';
2501 g_count_sal_delete := g_count_sal_delete + 1;
2502 END IF;
2503 END LOOP;
2504
2505 pay_in_utils.set_location(g_debug,'Finding Assignment Actions added since last statement ',3);
2506
2507 --The below process finds those Assignment Actions which have MODE as Addition(A)
2508 FOR c_rec IN c_addition_mode_entries(p_payroll_action_id)
2509 LOOP
2510 l_bg_check := 0;
2511 OPEN c_bg_check(c_rec.assignment_id);
2512 FETCH c_bg_check INTO l_bg_check;
2513 CLOSE c_bg_check;
2514
2515 IF (l_bg_check = 1)
2516 THEN
2517 g_sal_data_rec_add(g_count_sal_addition).source_id := c_rec.source_id;
2518 g_sal_data_rec_add(g_count_sal_addition).last_action_context_id := c_rec.last_action_context_id;
2519 g_sal_data_rec_add(g_count_sal_addition).assignment_id := c_rec.assignment_id;
2520 g_sal_data_rec_add(g_count_sal_addition).salary_mode := 'A';
2521 g_count_sal_addition := g_count_sal_addition + 1;
2522 END IF;
2523 END LOOP;
2524 --
2525
2526 --The below process finds those Assignment Actions which have been updated
2527 -- This code checks A from Form 24Q Archival to Live Data
2528 pay_in_utils.set_location(g_debug,'Finding Assignment Actions updated since last statement ',4);
2529 pay_in_utils.set_location(g_debug,'Finding diff between live data and 24Q Archival ', 1);
2530
2531 l_flag := TRUE;
2532 FOR csr_rec IN c_update_mode_entries(p_payroll_action_id)
2533 LOOP
2534 pay_in_utils.set_location(g_debug,'Diff between live data and 24Q Archival found', 1);
2535 pay_in_utils.set_location(g_debug,'p_payroll_action_id is '|| p_payroll_action_id,1);
2536 pay_in_utils.set_location(g_debug,'csr_rec.last_action_context_id '|| csr_rec.last_action_context_id,1);
2537 pay_in_utils.set_location(g_debug,'csr_rec.assignment_id '|| csr_rec.assignment_id ,1);
2538 pay_in_utils.set_location(g_debug,'csr_rec.source_id '|| csr_rec.source_id ,1);
2539
2540 pay_in_utils.set_location(g_debug,'Finding diff between live data and 24Q Correction Archival ', 1);
2541
2542 l_flag := TRUE;
2543 l_last_action_context_id := NULL;
2544
2545 FOR c_rec IN c_check_entries_in_24q_correct(csr_rec.last_action_context_id
2546 ,csr_rec.assignment_id
2547 ,csr_rec.source_id
2548 )
2549 LOOP
2550 IF ((c_rec.last_action_context_id IS NOT NULL) AND l_flag)
2551 THEN
2552 l_last_action_context_id := c_rec.last_action_context_id;
2553 pay_in_utils.set_location(g_debug,'Record was reported in 24Q Correction',2);
2554 pay_in_utils.set_location(g_debug,'with action context id as ' || l_last_action_context_id,2);
2555 l_flag := FALSE;
2556 END IF;
2557 END LOOP;
2558
2559 pay_in_utils.set_location(g_debug,'Mid way in finding updated assignment actions', 3);
2560 pay_in_utils.trace('l_last_action_context_id after c_check_entries_in_24q_correct is -> ',l_last_action_context_id);
2561
2562 IF (l_last_action_context_id IS NULL)
2563 THEN
2564 pay_in_utils.set_location(g_debug,'Record was not reported in 24Q Correction',4);
2565 pay_in_utils.set_location(g_debug,'Hence storing earlier values based on 24Q',4);
2566 g_sal_data_rec_upd(g_count_sal_update).last_action_context_id := csr_rec.last_action_context_id;
2567 g_sal_data_rec_upd(g_count_sal_update).assignment_id := csr_rec.assignment_id;
2568 g_sal_data_rec_upd(g_count_sal_update).source_id := csr_rec.source_id;
2569 g_sal_data_rec_upd(g_count_sal_update).salary_mode := 'U';
2570 g_count_sal_update := g_count_sal_update + 1;
2571
2572 ELSE --Present then need to check the present values with the archived values under Form 24QCorrection
2573 l_dummy := NULL;
2574 pay_in_utils.set_location(g_debug,'Record was reported in 24Q Correction',5);
2575 pay_in_utils.set_location(g_debug,'Need to compare the value from 24Q Correction now',5);
2576 OPEN c_24qc_upd_mode_entries(l_last_action_context_id,csr_rec.source_id);
2577 FETCH c_24qc_upd_mode_entries INTO l_dummy;
2578 CLOSE c_24qc_upd_mode_entries;
2579
2580 IF (l_dummy IS NOT NULL) THEN
2581 pay_in_utils.set_location(g_debug,'Difference from 24Q Correction Data',6);
2582 pay_in_utils.set_location(g_debug,'l_dummy is '|| l_dummy,6);
2583 pay_in_utils.set_location(g_debug,'csr_rec.source_id'|| csr_rec.source_id,6);
2584 g_sal_data_rec_upd(g_count_sal_update).last_action_context_id := l_dummy;
2585 g_sal_data_rec_upd(g_count_sal_update).assignment_id := csr_rec.assignment_id;
2586 g_sal_data_rec_upd(g_count_sal_update).source_id := csr_rec.source_id;
2587 g_sal_data_rec_upd(g_count_sal_update).salary_mode := 'U';
2588 g_count_sal_update := g_count_sal_update + 1;
2589
2590 pay_in_utils.set_location(g_debug,'Stored data as 24Q Correction Data',6);
2591 END IF;
2592 END IF;
2593 END LOOP;
2594
2595
2596 pay_in_utils.set_location(g_debug,'Additional Checking on updated assignment actions ', 7);
2597 --Similarly need to repeat the above structure for the case when data after submission to authorities
2598 --was updated, form 24qc generated again updated to original form and 24qc again generated
2599 --The following code checks U for Data under Form 24Q Correction.
2600
2601 -- This cursor finds all those Form 24Q Corrections that are locking Form 24Q
2602 pay_in_utils.set_location(g_debug,'Now checking those assignment actions that have same data in live and 24QC ', 7);
2603 FOR c_rec IN c_form_24qc_locking_id('A',1)
2604 LOOP
2605
2606 l_flag := TRUE;
2607 l_dummy := NULL;
2608
2609 pay_in_utils.set_location(g_debug,'Checking 24qc+ and Live Here',7);
2610 pay_in_utils.set_location(g_debug,'c_rec.last_action_context_id' || c_rec.last_action_context_id,7);
2611 pay_in_utils.set_location(g_debug,'c_rec.source_id' || c_rec.source_id,7);
2612
2613 OPEN c_24qc_upd_mode_entries(c_rec.last_action_context_id,c_rec.source_id);
2614 FETCH c_24qc_upd_mode_entries INTO l_dummy;
2615 CLOSE c_24qc_upd_mode_entries;
2616
2617 pay_in_utils.trace('l_dummy in c_form_24qc_locking_id 1',l_dummy);
2618
2619 IF (l_dummy IS NOT NULL)
2620 THEN
2621 pay_in_utils.set_location(g_debug,'Diff found with the Live Data',7);
2622 FOR i IN 1.. g_count_sal_update - 1
2623 LOOP
2624 IF (
2625 (g_sal_data_rec_upd(i).last_action_context_id = c_rec.last_action_context_id)
2626 AND
2627 (g_sal_data_rec_upd(i).assignment_id = c_rec.assignment_id)
2628 AND
2629 (g_sal_data_rec_upd(i).source_id = c_rec.source_id)
2630 AND
2631 (g_sal_data_rec_upd(i).salary_mode = 'U')
2632 )
2633 THEN
2634 l_flag := FALSE;
2635 END IF;
2636 END LOOP;
2637 ELSE
2638 pay_in_utils.set_location(g_debug,'No Diff found with the Live Data',7);
2639 l_flag := FALSE;
2640 END IF;
2641
2642 IF (l_flag)
2643 THEN
2644 g_sal_data_rec_upd(g_count_sal_update).last_action_context_id := c_rec.last_action_context_id;
2645 g_sal_data_rec_upd(g_count_sal_update).assignment_id := c_rec.assignment_id;
2646 g_sal_data_rec_upd(g_count_sal_update).source_id := c_rec.source_id;
2647 g_sal_data_rec_upd(g_count_sal_update).salary_mode := 'U';
2648 g_count_sal_update := g_count_sal_update + 1;
2649
2650 END IF;
2651
2652 END LOOP;
2653 --Now Searching for those updated assignment actions that were created after
2654 --form 24Q Correction generation
2655 pay_in_utils.set_location(g_debug,'Now Searching for those updated assignment actions that were 24QC+',8);
2656 FOR c_rec IN c_form_24qc_locking_id('A',2)
2657 LOOP
2658 l_dummy := NULL;
2659 pay_in_utils.set_location(g_debug,'c_rec.last_action_context_id '|| c_rec.last_action_context_id,8);
2660 pay_in_utils.set_location(g_debug,'c_rec.assignment_id '|| c_rec.assignment_id ,8);
2661 pay_in_utils.set_location(g_debug,'c_rec.source_id '|| c_rec.source_id ,8);
2662
2663 OPEN c_24qc_upd_mode_entries(c_rec.last_action_context_id,c_rec.source_id);
2664 FETCH c_24qc_upd_mode_entries INTO l_dummy;
2665 CLOSE c_24qc_upd_mode_entries;
2666 pay_in_utils.set_location(g_debug,'l_dummy is '|| l_dummy,8);
2667 IF (l_dummy IS NOT NULL)
2668 THEN
2669 g_sal_data_rec_upd(g_count_sal_update).last_action_context_id := c_rec.last_action_context_id;
2670 g_sal_data_rec_upd(g_count_sal_update).assignment_id := c_rec.assignment_id;
2671 g_sal_data_rec_upd(g_count_sal_update).source_id := c_rec.source_id;
2672 g_sal_data_rec_upd(g_count_sal_update).salary_mode := 'U';
2673 g_count_sal_update := g_count_sal_update + 1;
2674
2675 END IF;
2676 END LOOP;
2677
2678 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,120);
2679 --
2680
2681 EXCEPTION
2682 WHEN OTHERS THEN
2683 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
2684 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
2685 END generate_salary_data;
2686
2687
2688 --------------------------------------------------------------------------
2689 -- --
2690 -- Name : GET_ORG_DETAILS --
2691 -- Type : PROCEDURE --
2692 -- Access : Public --
2693 -- Description : This procedure returns the live value for an org --
2694 -- Parameters : --
2695 -- IN : p_gre_id NUMBER --
2696 -- OUT : --
2697 -- --
2698 -- Change History : --
2699 --------------------------------------------------------------------------
2700 -- Rev# Date Userid Description --
2701 --------------------------------------------------------------------------
2702 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
2703 -- 115.1 25-Sep-2007 rsaharay Modified c_pos,c_rep_address --
2704 --------------------------------------------------------------------------
2705 PROCEDURE get_org_details(p_gre_id IN NUMBER
2706 ,p_tan_number OUT NOCOPY VARCHAR2
2707 ,p_deductor_type OUT NOCOPY VARCHAR2
2708 ,p_branch_or_division OUT NOCOPY VARCHAR2
2709 ,p_org_location OUT NOCOPY NUMBER
2710 ,p_pan_number OUT NOCOPY VARCHAR2
2711 ,p_legal_name OUT NOCOPY VARCHAR2
2712 ,p_rep_name OUT NOCOPY VARCHAR2
2713 ,p_rep_position OUT NOCOPY VARCHAR2
2714 ,p_rep_location OUT NOCOPY NUMBER
2715 ,p_rep_email_id OUT NOCOPY VARCHAR2
2716 ,p_rep_work_phone OUT NOCOPY VARCHAR2
2717 ,p_rep_std_code OUT NOCOPY VARCHAR2
2718 )
2719 IS
2720 CURSOR c_org_inc_tax_df_details
2721 IS
2722 SELECT hoi.org_information1 tan
2723 ,hoi.org_information3 deductor_type
2724 ,hoi.org_information4 reg_org_id
2725 ,hoi.org_information7 division
2726 ,hou.location_id location_id
2727 FROM hr_organization_information hoi
2728 ,hr_organization_units hou
2729 WHERE hoi.organization_id = p_gre_id
2730 AND hoi.org_information_context = 'PER_IN_INCOME_TAX_DF'
2731 AND hou.organization_id = hoi.organization_id
2732 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2733 AND g_qr_end_date BETWEEN hou.date_from AND NVL(hou.date_to,TO_DATE('31-12-4712','DD-MM-YYYY'));
2734
2735 CURSOR c_reg_org_details(p_reg_org_id NUMBER)
2736 IS
2737 SELECT hoi.org_information3 pan
2738 ,hoi.org_information4 legal_name
2739 FROM hr_organization_information hoi
2740 ,hr_organization_units hou
2741 WHERE hoi.organization_id = p_reg_org_id
2742 AND hoi.org_information_context = 'PER_IN_COMPANY_DF'
2743 AND hou.organization_id = hoi.organization_id
2744 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2745 AND g_qr_end_date BETWEEN hou.date_from AND NVL(hou.date_to,TO_DATE('31-12-4712','DD-MM-YYYY'));
2746
2747 CURSOR c_pos(p_person_id NUMBER)
2748 IS
2749 SELECT nvl(pos.name,job.name) name
2750 FROM per_positions pos
2751 ,per_assignments_f asg
2752 ,per_jobs job
2753 WHERE asg.position_id=pos.position_id(+)
2754 AND asg.job_id=job.job_id(+)
2755 AND asg.person_id = p_person_id
2756 AND asg.primary_flag = 'Y'
2757 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2758 AND g_qr_end_date BETWEEN pos.date_effective(+) AND NVL(pos.date_end(+),TO_DATE('31-12-4712','DD-MM-YYYY'))
2759 AND g_qr_end_date BETWEEN job.date_from(+) AND NVL(job.date_to(+),TO_DATE('31-12-4712','DD-MM-YYYY'))
2760 AND g_qr_end_date BETWEEN asg.effective_start_date AND asg.effective_end_date;
2761
2762
2763 CURSOR c_rep_address(p_person_id NUMBER)
2764 IS
2765 SELECT hou.location_id rep_location
2766 FROM per_assignments_f asg
2767 ,hr_organization_units hou
2768 WHERE asg.person_id = p_person_id
2769 AND asg.primary_flag = 'Y'
2770 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2771 AND hou.organization_id = asg.organization_id
2772 AND hou.business_group_id = asg.business_group_id
2773 AND g_qr_end_date BETWEEN asg.effective_start_date AND asg.effective_end_date
2774 AND g_qr_end_date BETWEEN hou.date_from AND NVL(hou.date_to,TO_DATE('31-12-4712','DD-MM-YYYY'));
2775
2776 CURSOR c_representative_id
2777 IS
2778 SELECT pep.person_id
2779 ,hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title) rep_name
2780 ,pep.email_address email_id
2781 FROM hr_organization_information hoi
2782 ,hr_organization_units hou
2783 ,per_people_f pep
2784 WHERE hoi.org_information_context = 'PER_IN_INCOME_TAX_REP_DF'
2785 AND hoi.organization_id = p_gre_id
2786 AND hou.organization_id = hoi.organization_id
2787 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
2788 AND pep.person_id = hoi.org_information1
2789 AND pep.business_group_id = hou.business_group_id
2790 AND g_qr_end_date BETWEEN pep.effective_start_date AND pep.effective_end_date
2791 AND g_qr_end_date BETWEEN fnd_date.canonical_to_date(hoi.org_information2)
2792 AND NVL(fnd_date.canonical_to_date(hoi.org_information3),TO_DATE('31-12-4712','DD-MM-YYYY'))
2793 AND g_qr_end_date BETWEEN hou.date_from AND NVL(hou.date_to,TO_DATE('31-12-4712','DD-MM-YYYY'));
2794
2795 CURSOR c_rep_phone(p_person_id NUMBER)
2796 IS
2797 SELECT phone_number rep_phone_no
2798 ,SUBSTR(phone_number
2799 ,INSTR(phone_number,'-',1,1) + 1
2800 ,INSTR(phone_number,'-',1,2) - INSTR(phone_number,'-',1,1) -1
2801 )STD_CODE
2802 FROM per_phones
2803 WHERE parent_id = p_person_id
2804 AND phone_type = 'W1'
2805 AND g_qr_end_date BETWEEN date_from AND NVL(date_to,TO_DATE('31-12-4712','DD-MM-YYYY'));
2806
2807
2808 l_reg_org_id hr_organization_information.org_information4%TYPE;
2809 l_rep_person_id per_all_people_f.person_id%TYPE;
2810 l_procedure VARCHAR2(250);
2811 l_message VARCHAR2(250);
2812 BEGIN
2813 g_debug := hr_utility.debug_enabled;
2814 l_procedure := g_package ||'.get_org_details';
2815 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
2816 pay_in_utils.set_location(g_debug,'Fetching Live Details ',2);
2817 OPEN c_org_inc_tax_df_details;
2818 FETCH c_org_inc_tax_df_details INTO p_tan_number,p_deductor_type,l_reg_org_id,p_branch_or_division,p_org_location;
2819 CLOSE c_org_inc_tax_df_details;
2820
2821 pay_in_utils.set_location(g_debug,'p_tan_number : '|| p_tan_number ,1);
2822 pay_in_utils.set_location(g_debug,'p_org_location : '|| p_org_location ,1);
2823 pay_in_utils.set_location(g_debug,'p_branch_or_division : '|| p_branch_or_division,1);
2824 pay_in_utils.set_location(g_debug,'p_deductor_type : '|| p_deductor_type ,1);
2825 pay_in_utils.set_location(g_debug,'l_reg_org_id : '|| l_reg_org_id ,1);
2826
2827 OPEN c_reg_org_details(l_reg_org_id);
2828 FETCH c_reg_org_details INTO p_pan_number,p_legal_name;
2829 CLOSE c_reg_org_details;
2830
2831 pay_in_utils.set_location(g_debug,'p_pan_number : '|| p_pan_number ,2);
2832 pay_in_utils.set_location(g_debug,'p_legal_name : '|| p_legal_name ,2);
2833
2834 OPEN c_representative_id;
2835 FETCH c_representative_id INTO l_rep_person_id,p_rep_name,p_rep_email_id;
2836 CLOSE c_representative_id;
2837
2838 pay_in_utils.set_location(g_debug,'l_rep_person_id : '|| l_rep_person_id ,2);
2839 pay_in_utils.set_location(g_debug,'p_rep_name : '|| p_rep_name ,2);
2840 pay_in_utils.set_location(g_debug,'p_rep_email_id : '|| p_rep_email_id ,2);
2841
2842 OPEN c_pos(l_rep_person_id);
2843 FETCH c_pos INTO p_rep_position;
2844 CLOSE c_pos;
2845
2846 pay_in_utils.set_location(g_debug,'p_rep_position : '|| p_rep_position ,2);
2847
2848 OPEN c_rep_address(l_rep_person_id);
2849 FETCH c_rep_address INTO p_rep_location;
2850 CLOSE c_rep_address;
2851
2852 pay_in_utils.set_location(g_debug,'p_rep_location : '|| p_rep_location ,2);
2853
2854 OPEN c_rep_phone(l_rep_person_id);
2855 FETCH c_rep_phone INTO p_rep_work_phone,p_rep_std_code;
2856 CLOSE c_rep_phone;
2857
2858 pay_in_utils.set_location(g_debug,'p_rep_work_phone : '|| p_rep_work_phone ,2);
2859 pay_in_utils.set_location(g_debug,'p_rep_std_code : '|| p_rep_std_code ,2);
2860
2861 pay_in_utils.set_location(g_debug,'Leaving: '|| g_package||'.get_org_details ',1);
2862 EXCEPTION
2863 WHEN OTHERS THEN
2864 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
2865 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
2866 END get_org_details;
2867 --------------------------------------------------------------------------
2868 -- --
2869 -- Name : GENERATE_ORGANIZATION_DATA --
2870 -- Type : PROCEDURE --
2871 -- Access : Private --
2872 -- Description : This procedure populates global tables used in --
2873 -- organization detail record --
2874 -- Parameters : --
2875 -- IN : p_payroll_action_id NUMBER --
2876 -- OUT : N/A --
2877 -- --
2878 -- Change History : --
2879 --------------------------------------------------------------------------
2880 -- Rev# Date Userid Description --
2881 --------------------------------------------------------------------------
2882 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
2883 --------------------------------------------------------------------------
2884 --
2885 PROCEDURE generate_organization_data(p_payroll_action_id IN NUMBER
2886 ,p_gre_id IN NUMBER
2887 )
2888 IS
2889 -- The below cursor finds the Form 24Q Correction locking the Form 24Q Archival
2890 -- for a particulatr GRE as passed in the p_payroll_action_id
2891 CURSOR c_locking_24qc_pa_data
2892 IS
2893 SELECT DISTINCT pai.action_context_id locking_id
2894 ,pai.action_information1 gre_id
2895 FROM pay_action_information pai
2896 WHERE pai.action_context_type = 'PA'
2897 AND pai.action_information_category = 'IN_24QC_ORG'
2898 AND pai.action_information1 = p_gre_id
2899 AND pai.action_information3 = g_year||g_quarter
2900 AND pai.source_id = p_payroll_action_id
2901 AND pai.action_context_id IN
2902 (
2903 SELECT org_information3
2904 FROM hr_organization_information
2905 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
2906 AND organization_id = g_gre_id
2907 AND org_information1 = g_year
2908 AND org_information2 = g_quarter
2909 AND org_information5 = 'A'
2910 AND org_information6 = 'C'
2911 )
2912 ORDER BY pai.action_context_id DESC;
2913
2914 -- This cursor fetches the GREs that were reported in Form 24Q Archival
2915 CURSOR c_chk_organization
2916 IS
2917 SELECT action_information1 gre_id
2918 FROM pay_action_information
2919 WHERE action_information_category = 'IN_24Q_ORG'
2920 AND action_context_type = 'PA'
2921 AND action_information1 = p_gre_id
2922 AND action_information3 = g_year||g_quarter
2923 AND action_context_id = p_payroll_action_id;
2924
2925 -- After fetching the above values, need to take a diff of their archived data
2926 -- and live data. Also, diff of live and 24Q Correction data.
2927 -- For doing so first find the live data values.
2928
2929
2930 CURSOR c_diff_with_24q_data(p_gre_id NUMBER
2931 ,p_tan_number VARCHAR2
2932 ,p_deductor_type VARCHAR2
2933 ,p_branch_or_division VARCHAR2
2934 ,p_org_location NUMBER
2935 ,p_pan_number VARCHAR2
2936 ,p_legal_name VARCHAR2
2937 ,p_rep_name VARCHAR2
2938 ,p_rep_position VARCHAR2
2939 ,p_rep_location NUMBER
2940 ,p_rep_email_id VARCHAR2
2941 ,p_rep_work_phone VARCHAR2
2942 ,p_rep_std_code VARCHAR2
2943 ,p_act_inf_category VARCHAR2
2944 ,p_action_context_id NUMBER
2945 )
2946 IS
2947 SELECT pai.action_context_id last_action_context_id
2948 FROM pay_action_information pai
2949 WHERE pai.action_information_category = p_act_inf_category
2950 AND pai.action_context_type = 'PA'
2951 AND pai.action_context_id = p_action_context_id
2952 AND pai.action_information1 = p_gre_id
2953 AND pai.action_information2 = p_tan_number
2954 AND pai.action_information3 = g_year||g_quarter
2955 AND(
2956 (pai.action_information4 <> p_pan_number)
2957 OR
2958 (pai.action_information5 <> p_legal_name)
2959 OR
2960 (pai.action_information6 <> p_org_location)
2961 OR
2962 (pai.action_information7 <> p_deductor_type)
2963 OR
2964 (pai.action_information8 <> p_branch_or_division)
2965 OR
2966 (pai.action_information9 <> p_rep_name)
2967 OR
2968 (pai.action_information10 <> p_rep_email_id)
2969 OR
2970 (pai.action_information11 <> p_rep_position)
2971 OR
2972 (pai.action_information12 <> p_rep_location)
2973 OR
2974 (pai.action_information13 <> p_rep_work_phone)
2975 OR
2976 (SUBSTR(pai.action_information13
2977 ,INSTR(pai.action_information13,'-',1,1) + 1
2978 ,INSTR(pai.action_information13,'-',1,2) - INSTR(pai.action_information13,'-',1,1) -1
2979 ) <> p_rep_std_code
2980 )
2981 OR
2982 (DECODE(p_act_inf_category,'IN_24Q_ORG',p_rep_std_code,pai.action_information14) <> p_rep_std_code)
2983 );
2984 --
2985 l_last_action_context_id NUMBER;
2986 l_dummy NUMBER;
2987 l_flag BOOLEAN;
2988 l_tan_number hr_organization_information.org_information1%TYPE;
2989 l_deductor_type hr_organization_information.org_information3%TYPE;
2990 l_branch_or_division hr_organization_information.org_information7%TYPE;
2991 l_org_location hr_organization_units.location_id%TYPE;
2992 l_pan_number hr_organization_information.org_information3%TYPE;
2993 l_legal_name hr_organization_information.org_information4%TYPE;
2994 l_rep_name per_all_people_f.full_name%TYPE;
2995 l_rep_position per_all_positions.name%TYPE;
2996 l_rep_location hr_organization_units.location_id%TYPE;
2997 l_rep_email_id per_all_people_f.email_address%TYPE;
2998 l_rep_work_phone per_phones.phone_number%TYPE;
2999 l_rep_std_code per_phones.phone_number%TYPE;
3000 l_procedure VARCHAR2(250);
3001 l_message VARCHAR2(250);
3002 BEGIN
3003 g_debug := hr_utility.debug_enabled;
3004 l_procedure := g_package ||'.generate_organization_data';
3005 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
3006
3007 FOR c_rec IN c_chk_organization
3008 LOOP
3009 pay_in_utils.set_location(g_debug,'Organization ID in Form 24Q Archival is '||c_rec.gre_id,2);
3010 pay_in_utils.set_location(g_debug,'Fetching Live GRE Details',2);
3011 get_org_details(c_rec.gre_id,
3012 l_tan_number,
3013 l_deductor_type,
3014 l_branch_or_division,
3015 l_org_location,
3016 l_pan_number,
3017 l_legal_name,
3018 l_rep_name,
3019 l_rep_position,
3020 l_rep_location,
3021 l_rep_email_id,
3022 l_rep_work_phone,
3023 l_rep_std_code
3024 );
3025
3026 pay_in_utils.set_location(g_debug,'Fetched Live GRE Details ',3);
3027 pay_in_utils.set_location(g_debug,'Checking Diff with 24Q Archived Data',4);
3028 OPEN c_diff_with_24q_data(c_rec.gre_id,
3029 l_tan_number,
3030 l_deductor_type,
3031 l_branch_or_division,
3032 l_org_location,
3033 l_pan_number,
3034 l_legal_name,
3035 l_rep_name,
3036 l_rep_position,
3037 l_rep_location,
3038 l_rep_email_id,
3039 l_rep_work_phone,
3040 l_rep_std_code,
3041 'IN_24Q_ORG',
3042 p_payroll_action_id
3043 );
3044 FETCH c_diff_with_24q_data INTO l_last_action_context_id;
3045 CLOSE c_diff_with_24q_data;
3046
3047 pay_in_utils.set_location(g_debug,'Last Action Context ID in 24Q is :'|| l_last_action_context_id,5);
3048 IF (l_last_action_context_id IS NOT NULL)
3049 THEN
3050 -- This means that there is a diff from archived and present data.
3051 -- So need to check whether this diff was reported in any of the
3052 -- Form 24Q Corrections or not. For this find the Form 24Q Corrections
3053 -- on top of Form 24Q Archival and check if any of them has data as per
3054 -- present live data. If they too dont have any record, then need to
3055 -- insert this org data in a PL/SQL table.
3056 pay_in_utils.set_location(g_debug,'Diff with live and and 24Q Data found..',2);
3057 l_flag := TRUE;
3058
3059 FOR csr_rec IN c_locking_24qc_pa_data
3060 LOOP
3061 pay_in_utils.set_location(g_debug,'Checking Diff in 24Q Correction Data',6);
3062 OPEN c_diff_with_24q_data(c_rec.gre_id,
3063 l_tan_number,
3064 l_deductor_type,
3065 l_branch_or_division,
3066 l_org_location,
3067 l_pan_number,
3068 l_legal_name,
3069 l_rep_name,
3070 l_rep_position,
3071 l_rep_location,
3072 l_rep_email_id,
3073 l_rep_work_phone,
3074 l_rep_std_code,
3075 'IN_24QC_ORG',
3076 csr_rec.locking_id
3077 );
3078 FETCH c_diff_with_24q_data INTO l_dummy;
3079 CLOSE c_diff_with_24q_data;
3080
3081 IF ((l_dummy IS NULL)AND (l_flag))
3082 THEN
3083 pay_in_utils.set_location(g_debug,'Diff in 24Q Correction Data Found',6);
3084 l_flag := FALSE;
3085 END IF;
3086 END LOOP;
3087
3088 IF (l_flag)
3089 THEN
3090 g_org_data(g_count_org).gre_id := c_rec.gre_id;
3091 g_org_data(g_count_org).last_action_context_id := p_payroll_action_id;
3092 g_count_org := g_count_org + 1;
3093 END IF;
3094 END IF;
3095 END LOOP;
3096
3097 --The above logic found all those values of GRE that had a change from
3098 --24Q Archival to present state without getting reported in 24QC.
3099 --The following code finds those GREs that have undergone a change from
3100 --the last correction statement.
3101 FOR c_record IN c_locking_24qc_pa_data
3102 LOOP
3103 get_org_details(c_record.gre_id,
3104 l_tan_number,
3105 l_deductor_type,
3106 l_branch_or_division,
3107 l_org_location,
3108 l_pan_number,
3109 l_legal_name,
3110 l_rep_name,
3111 l_rep_position,
3112 l_rep_location,
3113 l_rep_email_id,
3114 l_rep_work_phone,
3115 l_rep_std_code
3116 );
3117
3118 OPEN c_diff_with_24q_data(c_record.gre_id,
3119 l_tan_number,
3120 l_deductor_type,
3121 l_branch_or_division,
3122 l_org_location,
3123 l_pan_number,
3124 l_legal_name,
3125 l_rep_name,
3126 l_rep_position,
3127 l_rep_location,
3128 l_rep_email_id,
3129 l_rep_work_phone,
3130 l_rep_std_code,
3131 'IN_24QC_ORG',
3132 c_record.locking_id
3133 );
3134 FETCH c_diff_with_24q_data INTO l_dummy;
3135 CLOSE c_diff_with_24q_data;
3136
3137 l_flag := TRUE;
3138
3139 IF (l_dummy IS NOT NULL)
3140 THEN
3141 -- Then this means that there is a difference from this corrections
3142 -- statement to the present live data, hence need to store this GRE
3143 -- and last action context id, but need to check that this correction
3144 -- might have been superceded by another correction. So check in global
3145 -- PL/SQL table, if this GRE ID exists then dont insert a new record.
3146 FOR i IN 1..g_count_org - 1
3147 LOOP
3148 IF ((g_org_data(i).gre_id = c_record.gre_id)AND(l_flag)AND(g_org_data(i).last_action_context_id < l_dummy))
3149 THEN
3150 l_flag := FALSE;
3151 g_org_data(i).last_action_context_id := l_dummy;
3152 END IF;
3153 END LOOP;
3154
3155 IF (l_flag)
3156 THEN
3157 g_org_data(g_count_org).gre_id := c_record.gre_id;
3158 g_org_data(g_count_org).last_action_context_id := l_dummy;
3159 g_count_org := g_count_org + 1;
3160 END IF;
3161 END IF;
3162 END LOOP;
3163 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.generate_organization_data ',5);
3164 EXCEPTION
3165 WHEN OTHERS THEN
3166 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
3167 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
3168 END generate_organization_data;
3169
3170 --------------------------------------------------------------------------
3171 -- --
3172 -- Name : GENERATE_CHALLAN_DATA --
3173 -- Type : PROCEDURE --
3174 -- Access : Private --
3175 -- Description : This procedure populates PL/SQL table for challans --
3176 -- Parameters : --
3177 -- IN : p_payroll_action_id NUMBER --
3178 -- OUT : N/A --
3179 -- --
3180 -- Change History : --
3181 --------------------------------------------------------------------------
3182 -- Rev# Date Userid Description --
3183 --------------------------------------------------------------------------
3184 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
3185 --------------------------------------------------------------------------
3186 PROCEDURE generate_challan_data(p_payroll_action_id IN NUMBER
3187 ,p_gre_id IN NUMBER
3188 )
3189 IS
3190 CURSOR c_challan_live_data_master(p_tax_year VARCHAR2
3191 ,p_challan_number VARCHAR2
3192 ,p_org_info_id NUMBER
3193 )
3194 IS
3195 SELECT hoi.org_information3 challan_number,
3196 hoi.org_information2 transfer_voucher_date,
3197 hoi.org_information4 amount,
3198 hoi.org_information7 surcharge,
3199 hoi.org_information8 education_cess,
3200 hoi.org_information10 other,
3201 hoi.org_information9 interest,
3202 (SELECT hoi_bank.org_information4
3203 FROM hr_organization_information hoi_bank
3204 WHERE hoi_bank.organization_id = p_gre_id
3205 AND hoi_bank.org_information_context = 'PER_IN_CHALLAN_BANK'
3206 AND hoi_bank.org_information_id = hoi.org_information5
3207 ) bank_branch_code,
3208 hoi.org_information11 cheque_dd_num,
3209 hoi.org_information_id org_information_id
3210 FROM hr_organization_information hoi
3211 WHERE hoi.org_information_id IN
3212 (
3213 SELECT hoi.org_information_id
3214 FROM hr_organization_information hoi
3215 ,hr_organization_units hou
3216 WHERE hoi.organization_id = p_gre_id
3217 AND hoi.organization_id = hou.organization_id
3218 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
3219 AND org_information_context = 'PER_IN_IT_CHALLAN_INFO'
3220 )
3221 AND hoi.org_information13 = g_quarter
3222 AND hoi.org_information1 = p_tax_year
3223 AND(
3224 hoi.org_information3 LIKE p_challan_number
3225 OR
3226 hoi.org_information_id = p_org_info_id
3227 );
3228
3229 --The below cursor gives the value of Challan Details as in the live Data.
3230 -- This cursor can return all the values as well as specific also based on
3231 -- p_challan_number and p_org_info_id
3232 CURSOR c_challan_live_data(p_tax_year VARCHAR2
3233 ,p_challan_number VARCHAR2
3234 ,p_org_info_id NUMBER
3235 )
3236 IS
3237 SELECT hoi.org_information3 challan_number,
3238 hoi.org_information2 transfer_voucher_date,
3239 hoi.org_information4 amount,
3240 hoi.org_information7 surcharge,
3241 hoi.org_information8 education_cess,
3242 hoi.org_information10 other,
3243 hoi.org_information9 interest,
3244 (SELECT hoi_bank.org_information4
3245 FROM hr_organization_information hoi_bank
3246 WHERE hoi_bank.organization_id = p_gre_id
3247 AND hoi_bank.org_information_context = 'PER_IN_CHALLAN_BANK'
3248 AND hoi_bank.org_information_id = hoi.org_information5
3249 ) bank_branch_code,
3250 hoi.org_information11 cheque_dd_num,
3251 hoi.org_information_id org_information_id
3252 FROM hr_organization_information hoi
3253 WHERE hoi.org_information_id IN
3254 (
3255 SELECT hoi.org_information_id
3256 FROM hr_organization_information hoi
3257 ,hr_organization_units hou
3258 WHERE hoi.organization_id = p_gre_id
3259 AND hoi.organization_id = hou.organization_id
3260 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
3261 AND org_information_context = 'PER_IN_IT_CHALLAN_INFO'
3262 )
3263 AND hoi.org_information13 = g_quarter
3264 AND hoi.org_information1 = p_tax_year
3265 AND(
3266 hoi.org_information3 LIKE p_challan_number
3267 OR
3268 hoi.org_information_id = p_org_info_id
3269 );
3270
3271 CURSOR c_challan_24q_data_master(p_act_info_category VARCHAR2
3272 ,p_voucher_number VARCHAR2
3273 ,p_org_information_id NUMBER
3274 )
3275 IS
3276 SELECT action_information_id,
3277 action_information1 transfer_voucher_number,
3278 action_information4 bank_branch_code,
3279 action_information5 transfer_voucher_date,
3280 action_information6 amount,
3281 action_information7 surcharge,
3282 action_information8 cess,
3283 action_information9 interest,
3284 action_information10 other,
3285 action_information11 cheque_dd_num,
3286 source_id org_information_id
3287 FROM pay_action_information
3288 WHERE action_information2 = g_year||g_quarter
3289 AND action_information3 = p_gre_id
3290 AND action_information_category = p_act_info_category
3291 AND action_context_id IN
3292 (
3293 SELECT org_information3
3294 FROM hr_organization_information
3295 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
3296 AND organization_id = g_gre_id
3297 AND org_information1 = g_year
3298 AND org_information2 = g_quarter
3299 AND org_information5 = 'A'
3300 )
3301 AND DECODE(p_act_info_category
3302 ,'IN_24Q_CHALLAN'
3303 ,action_context_id
3304 ,p_payroll_action_id
3305 ) = p_payroll_action_id
3306 AND (
3307 action_information1 LIKE p_voucher_number
3308 OR
3309 source_id = p_org_information_id
3310 )
3311 AND DECODE(p_act_info_category
3312 ,'IN_24QC_CHALLAN'
3313 ,action_information15
3314 ,p_payroll_action_id
3315 ) = p_payroll_action_id
3316 ORDER BY action_information_id DESC;
3317
3318 -- The below cursor fetches data both from Form 24Q Archival
3319 -- and Form 24Q Corrections. This cursor can retrun data specific to
3320 -- challan number or org_information_id
3321 CURSOR c_challan_24q_data(p_act_info_category VARCHAR2
3322 ,p_voucher_number VARCHAR2
3323 ,p_org_information_id NUMBER
3324 )
3325 IS
3326 SELECT action_information_id,
3327 action_information1 transfer_voucher_number,
3328 action_information4 bank_branch_code,
3329 action_information5 transfer_voucher_date,
3330 action_information6 amount,
3331 action_information7 surcharge,
3332 action_information8 cess,
3333 action_information9 interest,
3334 action_information10 other,
3335 action_information11 cheque_dd_num,
3336 source_id org_information_id
3337 FROM pay_action_information
3338 WHERE action_information2 = g_year||g_quarter
3339 AND action_information3 = p_gre_id
3340 AND action_information_category = p_act_info_category
3341 AND action_context_id IN
3342 (
3343 SELECT org_information3
3344 FROM hr_organization_information
3345 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
3346 AND organization_id = g_gre_id
3347 AND org_information1 = g_year
3348 AND org_information2 = g_quarter
3349 AND org_information5 = 'A'
3350 )
3351 AND DECODE(p_act_info_category
3352 ,'IN_24Q_CHALLAN'
3353 ,action_context_id
3354 ,p_payroll_action_id
3355 ) = p_payroll_action_id
3356 AND (
3357 action_information1 LIKE p_voucher_number
3358 OR
3359 source_id = p_org_information_id
3360 )
3361 AND DECODE(p_act_info_category
3362 ,'IN_24QC_CHALLAN'
3363 ,action_information15
3364 ,p_payroll_action_id
3365 ) = p_payroll_action_id
3366 ORDER BY action_information_id DESC;
3367
3368 l_transfer_voucher_number hr_organization_information.org_information3%TYPE;
3369 l_transfer_voucher_date hr_organization_information.org_information2%TYPE;
3370 l_amount hr_organization_information.org_information4%TYPE;
3371 l_surcharge hr_organization_information.org_information7%TYPE;
3372 l_education_cess hr_organization_information.org_information8%TYPE;
3373 l_interest hr_organization_information.org_information9%TYPE;
3374 l_others hr_organization_information.org_information10%TYPE;
3375 l_bank_branch_code hr_organization_information.org_information4%TYPE;
3376 l_cheque_dd_num hr_organization_information.org_information11%TYPE;
3377 l_org_information_id NUMBER;
3378 l_action_information_id NUMBER;
3379
3380 l_transfer_voucher_number_1 hr_organization_information.org_information3%TYPE;
3381 l_transfer_voucher_date_1 hr_organization_information.org_information2%TYPE;
3382 l_amount_1 hr_organization_information.org_information4%TYPE;
3383 l_surcharge_1 hr_organization_information.org_information7%TYPE;
3384 l_education_cess_1 hr_organization_information.org_information8%TYPE;
3385 l_interest_1 hr_organization_information.org_information9%TYPE;
3386 l_others_1 hr_organization_information.org_information10%TYPE;
3387 l_bank_branch_code_1 hr_organization_information.org_information4%TYPE;
3388 l_cheque_dd_num_1 hr_organization_information.org_information11%TYPE;
3389 l_org_information_id_1 NUMBER;
3390 l_dummy_boolean BOOLEAN;
3391 l_dummy NUMBER;
3392 l_procedure VARCHAR2(250);
3393 l_message VARCHAR2(250);
3394 BEGIN
3395 g_debug := hr_utility.debug_enabled;
3396 l_procedure := g_package ||'.generate_challan_data';
3397 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
3398 -- First Search for those challans that have been added since Form 24Q
3399 -- Last generation but were not reported in Form 24Q Correction.
3400 -- For this check existence of Live Challan Number in 24Q Archival.
3401 -- If its not there, then check its existence in Form 24Q Corrections
3402 -- done on its top. If its not even there, then this shows addition of
3403 -- challans.
3404
3405 FOR c_rec IN c_challan_live_data_master(g_tax_year,'%',NULL)
3406 LOOP
3407 pay_in_utils.set_location(g_debug,'Fetching Live Data ', 2);
3408 -- For the fetched live data checking its presence in 24Q Archived Data
3409 l_dummy_boolean := TRUE;
3410 l_dummy := NULL;
3411
3412 FOR csr_record IN c_challan_24q_data('IN_24Q_CHALLAN',c_rec.challan_number,NULL)
3413 LOOP
3414 IF (l_dummy_boolean)
3415 THEN
3416 pay_in_utils.set_location(g_debug,'Checking 24Q Archived Data',3);
3417 l_dummy := csr_record.transfer_voucher_number;
3418 l_dummy_boolean := FALSE;
3419 END IF;
3420 END LOOP;
3421
3422
3423 IF (l_dummy IS NULL)
3424 THEN
3425 -- This means that the present challan data was not reported in
3426 -- Form 24Q Archival. However this challan number might have been updated
3427 -- to a different challan number. So check in Form 24Q Archived Data for the
3428 -- presence of this record's org_information_id
3429 pay_in_utils.set_location(g_debug,'Again opened',1);
3430 l_dummy_boolean := TRUE;
3431 FOR csr_record IN c_challan_24q_data('IN_24Q_CHALLAN',NULL,c_rec.org_information_id)
3432 LOOP
3433 IF (l_dummy_boolean)
3434 THEN
3435 l_dummy := csr_record.transfer_voucher_number;
3436 l_dummy_boolean := FALSE;
3437 END IF;
3438 pay_in_utils.set_location(g_debug,'Again opened',2);
3439 END LOOP;
3440
3441 IF (l_dummy IS NULL)
3442 THEN
3443 -- This means that in 24Q Archival this record was never present. So,
3444 -- need to check in Form 24Q Correction, firstly on the basis of
3445 -- Challan Number and then on basis of org_information_id
3446 pay_in_utils.set_location(g_debug,'Again opened',3);
3447 l_dummy_boolean := TRUE;
3448 FOR csr_record IN c_challan_24q_data('IN_24QC_CHALLAN',c_rec.challan_number,NULL)
3449 LOOP
3450 IF (l_dummy_boolean)
3451 THEN
3452 l_dummy := csr_record.transfer_voucher_number;
3453 pay_in_utils.set_location(g_debug,'Again opened',4);
3454 l_dummy_boolean := FALSE;
3455 END IF;
3456 END LOOP;
3457
3458 pay_in_utils.set_location(g_debug,'Again opened',5);
3459 IF (l_dummy IS NULL)
3460 THEN
3461 -- This means that in Form 24QC no record with c_rec.challan_number
3462 -- was reported. However this may happen that challan number was
3463 -- updated and hence got reported in Form 24Q Correction. So,
3464 -- checking in correction data again using org_information_id.
3465 pay_in_utils.set_location(g_debug,'Again opened',6);
3466 l_dummy_boolean := TRUE;
3467 FOR csr_record IN c_challan_24q_data('IN_24QC_CHALLAN',NULL,c_rec.org_information_id)
3468 LOOP
3469 IF (l_dummy_boolean)
3470 THEN
3471 l_dummy := csr_record.transfer_voucher_number;
3472 pay_in_utils.set_location(g_debug,'Again opened',7);
3473 l_dummy_boolean := FALSE;
3474 END IF;
3475 END LOOP;
3476
3477 pay_in_utils.set_location(g_debug,'Again opened',8);
3478 IF (l_dummy IS NULL)
3479 THEN
3480 --This means that in Form 24Q Correction, this record was never
3481 -- present. So need to insert this record data in PL/SQL table.
3482 g_challan_data_add(g_count_challan_add).transfer_voucher_number := c_rec.challan_number;
3483 g_challan_data_add(g_count_challan_add).transfer_voucher_date := c_rec.transfer_voucher_date;
3484 g_challan_data_add(g_count_challan_add).amount := c_rec.amount;
3485 g_challan_data_add(g_count_challan_add).surcharge := c_rec.surcharge;
3486 g_challan_data_add(g_count_challan_add).education_cess := c_rec.education_cess;
3487 g_challan_data_add(g_count_challan_add).interest := c_rec.interest;
3488 g_challan_data_add(g_count_challan_add).other := c_rec.other;
3489 g_challan_data_add(g_count_challan_add).bank_branch_code := c_rec.bank_branch_code;
3490 g_challan_data_add(g_count_challan_add).cheque_dd_num := c_rec.cheque_dd_num;
3491 g_challan_data_add(g_count_challan_add).org_information_id := c_rec.org_information_id;
3492 g_challan_data_add(g_count_challan_add).modes := 'A';
3493 g_count_challan_add := g_count_challan_add + 1;
3494 pay_in_utils.set_location(g_debug,'Again opened',9);
3495 END IF;
3496 END IF;
3497 END IF;
3498 END IF;
3499 END LOOP;
3500
3501 pay_in_utils.set_location(g_debug,'Starting Search for Updated Challans',1);
3502 -- Lastly search for those challans that have been updated since Form 24Q
3503 -- last generation but were not reported in Form 24Q Correction.
3504 FOR c_rec IN c_challan_24q_data_master('IN_24Q_CHALLAN','%',NULL)
3505 LOOP
3506 pay_in_utils.set_location(g_debug,'Fetching 24Q Data ' ,1);
3507 -- Now, on the basis of org_information_id check if there is any change
3508 -- in challan details in the live data.
3509 OPEN c_challan_live_data(g_tax_year,NULL,c_rec.org_information_id);
3510 FETCH c_challan_live_data INTO l_transfer_voucher_number,
3511 l_transfer_voucher_date,
3512 l_amount,
3513 l_surcharge,
3514 l_education_cess,
3515 l_others,
3516 l_interest,
3517 l_bank_branch_code,
3518 l_cheque_dd_num,
3519 l_org_information_id;
3520 CLOSE c_challan_live_data;
3521 pay_in_utils.set_location(g_debug,'Fetching Live Data ' ,2);
3522
3523 IF (--24Q Archival Data Here Live Data Here
3524 (c_rec.transfer_voucher_number <> l_transfer_voucher_number) OR
3525 (c_rec.bank_branch_code <> l_bank_branch_code) OR
3526 (c_rec.transfer_voucher_date <> l_transfer_voucher_date) OR
3527 (c_rec.amount <> l_amount) OR
3528 (c_rec.surcharge <> l_surcharge) OR
3529 (c_rec.cess <> l_education_cess) OR
3530 (c_rec.interest <> l_interest) OR
3531 (c_rec.other <> l_others) OR
3532 (c_rec.cheque_dd_num <> l_cheque_dd_num)
3533 )
3534 THEN
3535 -- This means that there are certain records that have same org_information_id
3536 -- as in Live Data and in Form 24Q but have undergone a change in their data
3537 -- Now, need to check whether these changes were reported in Form 24Q Correction
3538 -- or not.
3539 pay_in_utils.set_location(g_debug,'Inside Check 1' ,1);
3540 l_action_information_id := NULL;
3541 OPEN c_challan_24q_data('IN_24QC_CHALLAN',NULL,c_rec.org_information_id);
3542 FETCH c_challan_24q_data INTO l_action_information_id,
3543 l_transfer_voucher_number_1,
3544 l_bank_branch_code_1,
3545 l_transfer_voucher_date_1,
3546 l_amount_1,
3547 l_surcharge_1,
3548 l_education_cess_1,
3549 l_interest_1,
3550 l_others_1,
3551 l_cheque_dd_num_1,
3552 l_org_information_id_1;
3553 CLOSE c_challan_24q_data;
3554 -- What may happen is that the values were reported in Form 24Q Correction
3555 -- but they might have still undergone another change. So need to check
3556 -- whether any change was reported in Form 24Q Correction or not.
3557 -- If yes(24QC), then are the values diff. If yes then store in PL/SQL on basis of 24QC, else reject
3558 -- If not, then store in PL/SQL on the basis of 24Q Archival
3559 IF (l_action_information_id IS NOT NULL)
3560 THEN
3561 IF (-- Live Data here --24Q Correction Data here
3562 (l_transfer_voucher_number <> l_transfer_voucher_number_1) OR
3563 (l_bank_branch_code <> l_bank_branch_code_1) OR
3564 (l_transfer_voucher_date <> l_transfer_voucher_date_1) OR
3565 (l_amount <> l_amount_1) OR
3566 (l_surcharge <> l_surcharge_1) OR
3567 (l_education_cess <> l_education_cess_1) OR
3568 (l_interest <> l_interest_1) OR
3569 (l_others <> l_others_1) OR
3570 (l_cheque_dd_num <> l_cheque_dd_num_1) OR
3571 (l_org_information_id <> l_org_information_id_1)
3572 )
3573 THEN
3574 pay_in_utils.set_location(g_debug,'Inside Check 2' ,2);
3575 --This means that in Form 24Q Correction, this record was present and now it has
3576 -- been further modified. So need to insert this record data in PL/SQL table.
3577 g_challan_data_upd(g_count_challan_upd).transfer_voucher_number := l_transfer_voucher_number_1;
3578 g_challan_data_upd(g_count_challan_upd).transfer_voucher_date := l_transfer_voucher_date_1;
3579 g_challan_data_upd(g_count_challan_upd).amount := l_amount_1;
3580 g_challan_data_upd(g_count_challan_upd).surcharge := l_surcharge_1;
3581 g_challan_data_upd(g_count_challan_upd).education_cess := l_education_cess_1;
3582 g_challan_data_upd(g_count_challan_upd).interest := l_interest_1;
3583 g_challan_data_upd(g_count_challan_upd).other := l_others_1;
3584 g_challan_data_upd(g_count_challan_upd).bank_branch_code := l_bank_branch_code_1;
3585 g_challan_data_upd(g_count_challan_upd).cheque_dd_num := l_cheque_dd_num_1;
3586 g_challan_data_upd(g_count_challan_upd).org_information_id := l_org_information_id_1;
3587 g_challan_data_upd(g_count_challan_upd).modes := 'U';
3588 g_count_challan_upd := g_count_challan_upd + 1;
3589 END IF;
3590 ELSE
3591 pay_in_utils.set_location(g_debug,'Inside Check 3' ,3);
3592 --This means that in Form 24Q Correction, this record was never present.
3593 --So need to insert this record data in PL/SQL table on basis of form 24q archival
3594 g_challan_data_upd(g_count_challan_upd).transfer_voucher_number := c_rec.transfer_voucher_number;
3595 g_challan_data_upd(g_count_challan_upd).transfer_voucher_date := c_rec.transfer_voucher_date;
3596 g_challan_data_upd(g_count_challan_upd).amount := c_rec.amount;
3597 g_challan_data_upd(g_count_challan_upd).surcharge := c_rec.surcharge;
3598 g_challan_data_upd(g_count_challan_upd).education_cess := c_rec.cess;
3599 g_challan_data_upd(g_count_challan_upd).interest := c_rec.interest;
3600 g_challan_data_upd(g_count_challan_upd).other := c_rec.other;
3601 g_challan_data_upd(g_count_challan_upd).bank_branch_code := c_rec.bank_branch_code;
3602 g_challan_data_upd(g_count_challan_upd).cheque_dd_num := c_rec.cheque_dd_num;
3603 g_challan_data_upd(g_count_challan_upd).org_information_id := c_rec.org_information_id;
3604 g_challan_data_upd(g_count_challan_upd).modes := 'U';
3605 g_count_challan_upd := g_count_challan_upd + 1;
3606 END IF;
3607 ELSE
3608 pay_in_utils.set_location(g_debug,'Inside Check 4' ,4);
3609 -- This means that the archived data and Live Data is identical. But there is a possibility that
3610 -- data was updated and reported in Form 24Q Correction and later again restored back to the data
3611 -- as in Form 24Q Archival. So need to check whether for c_rec.org_information_id any record is
3612 -- present in Form 24Q Correction or not. If its present, then check its status with Live Data.
3613 -- If there is a diff then mark that record, else reject it.
3614 OPEN c_challan_24q_data('IN_24QC_CHALLAN',NULL,c_rec.org_information_id);
3615 FETCH c_challan_24q_data INTO l_action_information_id,
3616 l_transfer_voucher_number_1,
3617 l_bank_branch_code_1,
3618 l_transfer_voucher_date_1,
3619 l_amount_1,
3620 l_surcharge_1,
3621 l_education_cess_1,
3622 l_interest_1,
3623 l_others_1,
3624 l_cheque_dd_num_1,
3625 l_org_information_id_1;
3626 CLOSE c_challan_24q_data;
3627
3628 IF (l_action_information_id IS NOT NULL)
3629 THEN
3630 -- This means that there is a reporting of this data in 24Q Correction. Now, need
3631 -- to check the diff of the two records. If diff exists then store this record
3632 -- on the basis of 24Q Correction else reject it.
3633 IF (--Live Data 24Q Correction Data
3634 (l_transfer_voucher_number <> l_transfer_voucher_number_1) OR
3635 (l_bank_branch_code <> l_bank_branch_code_1) OR
3636 (l_transfer_voucher_date <> l_transfer_voucher_date_1) OR
3637 (l_amount <> l_amount_1) OR
3638 (l_surcharge <> l_surcharge_1) OR
3639 (l_education_cess <> l_education_cess_1) OR
3640 (l_interest <> l_interest_1) OR
3641 (l_others <> l_others_1) OR
3642 (l_cheque_dd_num <> l_cheque_dd_num_1) OR
3643 (l_org_information_id <> l_org_information_id_1)
3644 )
3645 THEN
3646 pay_in_utils.set_location(g_debug,'Inside Check 5' ,5);
3647 --This means that in Form 24Q Correction, this record was never
3648 -- updated. So need to insert this record data in PL/SQL table.
3649 g_challan_data_upd(g_count_challan_upd).transfer_voucher_number := l_transfer_voucher_number_1;
3650 g_challan_data_upd(g_count_challan_upd).transfer_voucher_date := l_transfer_voucher_date_1;
3651 g_challan_data_upd(g_count_challan_upd).amount := l_amount_1;
3652 g_challan_data_upd(g_count_challan_upd).surcharge := l_surcharge_1;
3653 g_challan_data_upd(g_count_challan_upd).education_cess := l_education_cess_1;
3654 g_challan_data_upd(g_count_challan_upd).interest := l_interest_1;
3655 g_challan_data_upd(g_count_challan_upd).other := l_others_1;
3656 g_challan_data_upd(g_count_challan_upd).bank_branch_code := l_bank_branch_code_1;
3657 g_challan_data_upd(g_count_challan_upd).cheque_dd_num := l_cheque_dd_num_1;
3658 g_challan_data_upd(g_count_challan_upd).org_information_id := l_org_information_id_1;
3659 g_challan_data_upd(g_count_challan_upd).modes := 'U';
3660 g_count_challan_upd := g_count_challan_upd + 1;
3661 END IF;
3662 END IF;
3663 END IF;
3664 END LOOP;
3665 pay_in_utils.set_location(g_debug,'New Search Criteria Starting........' ,1);
3666 -- The above updation case handles only those cases when record was only updated
3667 -- and never re - created with the same Challan Number.
3668 FOR c_rec IN c_challan_24q_data_master('IN_24Q_CHALLAN','%',NULL)
3669 LOOP
3670 -- Now, on the basis of challan number check if there is any change
3671 -- in challan details in the live data.
3672 OPEN c_challan_live_data(g_tax_year,c_rec.transfer_voucher_number,NULL);
3673 FETCH c_challan_live_data INTO l_transfer_voucher_number,
3674 l_transfer_voucher_date,
3675 l_amount,
3676 l_surcharge,
3677 l_education_cess,
3678 l_others,
3679 l_interest,
3680 l_bank_branch_code,
3681 l_cheque_dd_num,
3682 l_org_information_id;
3683 CLOSE c_challan_live_data;
3684
3685 IF (c_rec.org_information_id <> l_org_information_id)
3686 THEN
3687 -- This means that there is a record which was deleted and recreated
3688 -- with the same challan number. Now, if rest of the details are same
3689 -- then no need to mark this record else mark it.
3690 IF (
3691 (c_rec.bank_branch_code <> l_bank_branch_code) OR
3692 (c_rec.transfer_voucher_date <> l_transfer_voucher_date) OR
3693 (c_rec.amount <> l_amount) OR
3694 (c_rec.surcharge <> l_surcharge) OR
3695 (c_rec.cess <> l_education_cess) OR
3696 (c_rec.interest <> l_interest) OR
3697 (c_rec.other <> l_others) OR
3698 (c_rec.cheque_dd_num <> l_cheque_dd_num)
3699 )
3700 THEN
3701 -- This means that this record has same challan number and different
3702 -- details in terms of org_information_id and other details.
3703 -- So check as to whether this diff was reported in Form 24Q Correction
3704 -- or not.
3705 OPEN c_challan_24q_data('IN_24QC_CHALLAN',c_rec.transfer_voucher_number,NULL);
3706 FETCH c_challan_24q_data INTO l_action_information_id,
3707 l_transfer_voucher_number_1,
3708 l_bank_branch_code_1,
3709 l_transfer_voucher_date_1,
3710 l_amount_1,
3711 l_surcharge_1,
3712 l_education_cess_1,
3713 l_interest_1,
3714 l_others_1,
3715 l_cheque_dd_num_1,
3716 l_org_information_id_1;
3717 CLOSE c_challan_24q_data;
3718 IF (l_action_information_id IS NOT NULL)
3719 THEN
3720 -- This means that record was present in Form 24Q Correction. If there is a diff in
3721 -- data then store in PL/SQL table based on 24Q Correction, else reject it.
3722 IF (--Live Data 24Q Correction Data
3723 (l_bank_branch_code <> l_bank_branch_code_1) OR
3724 (l_transfer_voucher_date <> l_transfer_voucher_date_1) OR
3725 (l_amount <> l_amount_1) OR
3726 (l_surcharge <> l_surcharge_1) OR
3727 (l_education_cess <> l_education_cess_1) OR
3728 (l_interest <> l_interest_1) OR
3729 (l_others <> l_others_1) OR
3730 (l_cheque_dd_num <> l_cheque_dd_num_1)
3731 )
3732 THEN
3733 -- This means that in Form 24Q Correction, this record was present and at present
3734 -- the data has undergone a change since then. So need to store this change based
3735 -- on 24Q Correction.
3736 g_challan_data_upd(g_count_challan_upd).transfer_voucher_number := l_transfer_voucher_number_1;
3737 g_challan_data_upd(g_count_challan_upd).transfer_voucher_date := l_transfer_voucher_date_1;
3738 g_challan_data_upd(g_count_challan_upd).amount := l_amount_1;
3739 g_challan_data_upd(g_count_challan_upd).surcharge := l_surcharge_1;
3740 g_challan_data_upd(g_count_challan_upd).education_cess := l_education_cess_1;
3741 g_challan_data_upd(g_count_challan_upd).interest := l_others_1;
3742 g_challan_data_upd(g_count_challan_upd).other := l_interest_1;
3743 g_challan_data_upd(g_count_challan_upd).bank_branch_code := l_bank_branch_code_1;
3744 g_challan_data_upd(g_count_challan_upd).cheque_dd_num := l_cheque_dd_num_1;
3745 g_challan_data_upd(g_count_challan_upd).org_information_id := l_org_information_id_1;
3746 g_challan_data_upd(g_count_challan_upd).modes := 'U';
3747 g_count_challan_upd := g_count_challan_upd + 1;
3748 ELSE
3749 --This means that in Form 24Q Correction, this record was never
3750 -- updated. So need to insert this record data in PL/SQL table based on 24Q Archival
3751 g_challan_data_upd(g_count_challan_upd).transfer_voucher_number := c_rec.transfer_voucher_number;
3752 g_challan_data_upd(g_count_challan_upd).transfer_voucher_date := c_rec.transfer_voucher_date;
3753 g_challan_data_upd(g_count_challan_upd).amount := c_rec.amount;
3754 g_challan_data_upd(g_count_challan_upd).surcharge := c_rec.surcharge;
3755 g_challan_data_upd(g_count_challan_upd).education_cess := c_rec.cess;
3756 g_challan_data_upd(g_count_challan_upd).interest := c_rec.interest;
3757 g_challan_data_upd(g_count_challan_upd).other := c_rec.other;
3758 g_challan_data_upd(g_count_challan_upd).bank_branch_code := c_rec.bank_branch_code;
3759 g_challan_data_upd(g_count_challan_upd).cheque_dd_num := c_rec.cheque_dd_num;
3760 g_challan_data_upd(g_count_challan_upd).org_information_id := c_rec.org_information_id;
3761 g_challan_data_upd(g_count_challan_upd).modes := 'U';
3762 g_count_challan_upd := g_count_challan_upd + 1;
3763 END IF;
3764 END IF;
3765 END IF;
3766 END IF;
3767 END LOOP;
3768 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.generate_challan_data', 1);
3769 EXCEPTION
3770 WHEN OTHERS THEN
3771 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
3772 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
3773 END generate_challan_data;
3774
3775 --------------------------------------------------------------------------
3776 -- --
3777 -- Name : GET_ELEMENT_ENTRY_VALUES --
3778 -- Type : PROCEDURE --
3779 -- Access : Public --
3780 -- Description : --
3781 -- --
3782 -- Parameters : --
3783 -- IN : p_element_entry_id NUMBER --
3784 -- : p_action_context_id NUMBER --
3785 -- : p_assignment_id NUMBER --
3786 -- OUT : p_ee_live_rec t_screen_entry_value_rec --
3787 -- p_ee_24qc_rec t_screen_entry_value_rec --
3788 --------------------------------------------------------------------------
3789 -- Rev# Date Userid Description --
3790 --------------------------------------------------------------------------
3791 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
3792 --------------------------------------------------------------------------
3793 PROCEDURE get_element_entry_values
3794 (
3795 p_element_entry_id IN NUMBER DEFAULT NULL
3796 ,p_action_context_id IN NUMBER DEFAULT NULL
3797 ,p_assignment_id IN NUMBER
3798 ,p_ee_live_rec OUT NOCOPY t_screen_entry_value_rec
3799 ,p_ee_24qc_rec OUT NOCOPY t_screen_entry_value_rec
3800 ,p_person_live_data OUT NOCOPY t_person_data_rec
3801 ,p_person_24q_data OUT NOCOPY t_person_data_rec
3802 )
3803 IS
3804 CURSOR c_get_ee_from_live_data
3805 IS
3806 SELECT pay_in_utils.get_ee_value(p_element_entry_id,'Challan or Voucher Number') Challan_or_Voucher_Number,
3807 pay_in_utils.get_ee_value(p_element_entry_id,'Payment Date') Payment_Date,
3808 pay_in_utils.get_ee_value(p_element_entry_id,'Taxable Income') Taxable_Income,
3809 pay_in_utils.get_ee_value(p_element_entry_id,'Income Tax Deducted') Income_Tax_Deducted,
3810 pay_in_utils.get_ee_value(p_element_entry_id,'Surcharge Deducted') Surcharge_Deducted,
3811 pay_in_utils.get_ee_value(p_element_entry_id,'Education Cess Deducted') Education_Cess_Deducted,
3812 pay_in_utils.get_ee_value(p_element_entry_id,'Amount Deposited') Amount_Deposited
3813 FROM dual;
3814
3815 CURSOR c_get_ee_from_24q_data
3816 IS
3817 SELECT action_information1 Challan_or_Voucher_Number,
3818 action_information4 Payment_Date,
3819 action_information5 Taxable_Income,
3820 action_information6 Income_Tax_Deducted,
3821 action_information7 Surcharge_Deducted,
3822 action_information8 Education_Cess_Deducted,
3823 DECODE(action_information_category,'IN_24Q_DEDUCTEE'
3824 ,action_information9,'IN_24QC_DEDUCTEE'
3825 ,action_information16) Amount_Deposited
3826 ,action_information_id
3827 FROM pay_action_information pai
3828 WHERE pai.action_context_id = p_action_context_id
3829 AND pai.action_information_category IN ('IN_24Q_DEDUCTEE','IN_24QC_DEDUCTEE')
3830 AND pai.assignment_id = p_assignment_id
3831 AND pai.source_id = p_element_entry_id
3832 AND pai.action_information3 = g_gre_id
3833 ORDER BY action_information_id DESC;
3834
3835 CURSOR c_get_person_data_from_24q
3836 IS
3837 SELECT action_information1 person_id
3838 ,action_information4 pan_number
3839 ,action_information5 pan_ref_number
3840 ,action_information6 full_name
3841 ,action_information_id
3842 FROM pay_action_information
3843 WHERE action_context_id = p_action_context_id
3844 AND action_context_type = 'AAP'
3845 AND action_information_category = 'IN_24Q_PERSON'
3846 AND assignment_id = p_assignment_id
3847 AND action_information2 = g_year||g_quarter
3848 AND action_information3 = g_gre_id
3849 ORDER BY action_information_id DESC;
3850
3851 CURSOR c_get_tax_rate_from_24q
3852 IS
3853 SELECT action_information13 tax_rate
3854 FROM pay_action_information
3855 WHERE action_context_id = p_action_context_id
3856 AND action_context_type = 'AAP'
3857 AND action_information_category = 'IN_24Q_DEDUCTEE'
3858 AND assignment_id = p_assignment_id
3859 AND source_id = p_element_entry_id
3860 AND action_information3 = g_gre_id;
3861
3862 CURSOR c_get_person_data_from_24qc
3863 IS
3864 SELECT action_information12 person_id
3865 ,action_information9 pan_number
3866 ,action_information11 pan_ref_number
3867 ,action_information18 tax_rate
3868 ,action_information10 full_name
3869 ,action_information_id
3870 FROM pay_action_information
3871 WHERE action_context_id = p_action_context_id
3872 AND action_context_type = 'AAP'
3873 AND action_information_category = 'IN_24QC_DEDUCTEE'
3874 AND assignment_id = p_assignment_id
3875 AND action_information2 = g_year||g_quarter
3876 AND action_information3 = g_gre_id
3877 ORDER BY action_information_id DESC;
3878
3879 CURSOR c_get_live_person_data
3880 IS
3881 SELECT asg.person_id person_id
3882 ,DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4) pan
3883 ,pep.per_information14 pan_ref_number
3884 ,hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title) full_name
3885 ,pep.effective_end_date
3886 FROM per_assignments_f asg
3887 ,per_people_f pep
3888 WHERE asg.assignment_id = p_assignment_id
3889 AND pep.person_id = asg.person_id
3890 AND pep.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
3891 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
3892 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
3893 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date
3894 ORDER BY 5 DESC;
3895
3896 CURSOR c_aei_tax_rate(p_person_id NUMBER)
3897 IS
3898 SELECT paei.aei_information2
3899 FROM per_assignment_extra_info paei
3900 ,per_assignments_f paa
3901 WHERE paei.information_type = 'PER_IN_TAX_EXEMPTION_DF'
3902 AND paei.aei_information_category = 'PER_IN_TAX_EXEMPTION_DF'
3903 AND paei.assignment_id = paa.assignment_id
3904 AND paa.person_id = p_person_id
3905 AND paei.aei_information1 = g_tax_year
3906 AND assignment_end_date(paa.assignment_id) BETWEEN paa.effective_start_date AND paa.effective_end_date
3907 AND ROWNUM = 1;
3908
3909
3910 l_person_id per_all_people_f.person_id%TYPE;
3911 l_pan_number per_all_people_f.per_information14%TYPE;
3912 l_pan_ref_number per_all_people_f.per_information14%TYPE;
3913 l_full_name per_all_people_f.full_name%TYPE;
3914 l_tax_rate per_assignment_extra_info.aei_information2 %TYPE;
3915 l_end_date DATE;
3916 l_old_tax_rate per_assignment_extra_info.aei_information2 %TYPE;
3917 l_action_information_id NUMBER;
3918 l_procedure VARCHAR2(250);
3919 l_message VARCHAR2(250);
3920 BEGIN
3921 g_debug := hr_utility.debug_enabled;
3922 l_procedure := g_package ||'.get_element_entry_values';
3923 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
3924 pay_in_utils.set_location(g_debug,'Fetching Live Data ' ,2);
3925 OPEN c_get_ee_from_live_data;
3926 FETCH c_get_ee_from_live_data INTO p_ee_live_rec.challan_number,
3927 p_ee_live_rec.payment_date,
3928 p_ee_live_rec.taxable_income,
3929 p_ee_live_rec.income_tax,
3930 p_ee_live_rec.surcharge,
3931 p_ee_live_rec.education_cess,
3932 p_ee_live_rec.amount_deposited;
3933 CLOSE c_get_ee_from_live_data;
3934
3935 pay_in_utils.set_location(g_debug,'Fetched Live Data ' ,2);
3936 pay_in_utils.set_location(g_debug,'Fetching 24Q Archival Data ' ,2);
3937
3938 pay_in_utils.set_location(g_debug,'p_element_entry_id '|| p_element_entry_id ,2);
3939 pay_in_utils.set_location(g_debug,'p_action_context_id '|| p_action_context_id ,2);
3940 pay_in_utils.set_location(g_debug,'p_assignment_id '|| p_assignment_id ,2);
3941
3942 OPEN c_get_ee_from_24q_data;
3943 FETCH c_get_ee_from_24q_data INTO p_ee_24qc_rec.challan_number,
3944 p_ee_24qc_rec.payment_date,
3945 p_ee_24qc_rec.taxable_income,
3946 p_ee_24qc_rec.income_tax,
3947 p_ee_24qc_rec.surcharge,
3948 p_ee_24qc_rec.education_cess,
3949 p_ee_24qc_rec.amount_deposited,
3950 l_action_information_id;
3951 CLOSE c_get_ee_from_24q_data;
3952 pay_in_utils.set_location(g_debug,'Fetched 24Q Archival Data ' ,2);
3953
3954 pay_in_utils.set_location(g_debug,'Searching in 24Q Correction ' ,2);
3955 OPEN c_get_person_data_from_24qc;
3956 FETCH c_get_person_data_from_24qc INTO l_person_id,l_pan_number,l_pan_ref_number,l_old_tax_rate,p_person_24q_data.full_name,l_action_information_id;
3957 CLOSE c_get_person_data_from_24qc;
3958 pay_in_utils.set_location(g_debug,'Found person id in 24Q Correction: '|| l_person_id ,2);
3959
3960 IF (l_person_id IS NULL)
3961 THEN
3962 pay_in_utils.set_location(g_debug,'Person ID is NULL' ,2);
3963 pay_in_utils.set_location(g_debug,'Hence Searching in 24Q Archival ' ,2);
3964 OPEN c_get_person_data_from_24q;
3965 FETCH c_get_person_data_from_24q INTO l_person_id,l_pan_number,l_pan_ref_number,p_person_24q_data.full_name,l_action_information_id;
3966 CLOSE c_get_person_data_from_24q;
3967
3968 OPEN c_get_tax_rate_from_24q;
3969 FETCH c_get_tax_rate_from_24q INTO l_old_tax_rate;
3970 CLOSE c_get_tax_rate_from_24q;
3971 pay_in_utils.set_location(g_debug,'Old Tax Rate was '|| l_old_tax_rate,2);
3972 END IF;
3973
3974 p_person_24q_data.person_id := l_person_id;
3975 p_person_24q_data.pan_number := l_pan_number;
3976 p_person_24q_data.pan_ref_number := l_pan_ref_number;
3977 p_person_24q_data.tax_rate := l_old_tax_rate;
3978
3979 pay_in_utils.set_location(g_debug,'Fetching Person Data from Live Data' ,2);
3980 OPEN c_get_live_person_data;
3981 FETCH c_get_live_person_data INTO p_person_live_data.person_id
3982 ,p_person_live_data.pan_number
3983 ,p_person_live_data.pan_ref_number
3984 ,p_person_live_data.full_name
3985 ,l_end_date;
3986 CLOSE c_get_live_person_data;
3987 pay_in_utils.set_location(g_debug,'Fetched Person Data from Live Data' ,2);
3988
3989 OPEN c_aei_tax_rate(p_person_live_data.person_id);
3990 FETCH c_aei_tax_rate INTO p_person_live_data.tax_rate;
3991 CLOSE c_aei_tax_rate;
3992
3993 p_ee_24qc_rec.taxable_income := TO_NUMBER(remove_curr_format(p_ee_24qc_rec.taxable_income));
3994 p_ee_24qc_rec.income_tax := TO_NUMBER(remove_curr_format(p_ee_24qc_rec.income_tax));
3995 p_ee_24qc_rec.surcharge := TO_NUMBER(remove_curr_format(p_ee_24qc_rec.surcharge));
3996 p_ee_24qc_rec.education_cess := TO_NUMBER(remove_curr_format(p_ee_24qc_rec.education_cess));
3997 p_ee_24qc_rec.amount_deposited := TO_NUMBER(remove_curr_format(p_ee_24qc_rec.amount_deposited));
3998
3999
4000 p_ee_live_rec.taxable_income := TO_NUMBER(remove_curr_format(p_ee_live_rec.taxable_income));
4001 p_ee_live_rec.income_tax := TO_NUMBER(remove_curr_format(p_ee_live_rec.income_tax));
4002 p_ee_live_rec.surcharge := TO_NUMBER(remove_curr_format(p_ee_live_rec.surcharge));
4003 p_ee_live_rec.education_cess := TO_NUMBER(remove_curr_format(p_ee_live_rec.education_cess));
4004 p_ee_live_rec.amount_deposited := TO_NUMBER(remove_curr_format(p_ee_live_rec.amount_deposited));
4005
4006 pay_in_utils.set_location(g_debug,'Leaving : '|| g_package||'.get_element_entry_values ', 1);
4007 EXCEPTION
4008 WHEN OTHERS THEN
4009 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
4010 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
4011 END get_element_entry_values;
4012
4013 --------------------------------------------------------------------------
4014 -- --
4015 -- Name : GET_LIVE_BALANCES --
4016 -- Type : PROCEDURE --
4017 -- Access : Private --
4018 -- Description : --
4019 -- --
4020 -- Parameters : --
4021 -- IN : p_run_asg_action_id NUMBER --
4022 -- p_gre_id NUMBER --
4023 -- OUT : p_balances t_balance_value_tab --
4024 --------------------------------------------------------------------------
4025 -- Rev# Date Userid Description --
4026 --------------------------------------------------------------------------
4027 -- 115.0 07-Feb-2007 rpalli 5754018 : 24QC Quarter4 Stat Update --
4028 --------------------------------------------------------------------------
4029 PROCEDURE get_live_balances(p_run_asg_action_id IN NUMBER
4030 ,p_gre_id IN NUMBER
4031 ,p_balances OUT NOCOPY t_balance_value_tab)
4032 IS
4033
4034 CURSOR c_f16_le_balances
4035 IS
4036 SELECT pdb.defined_balance_id balance_id
4037 ,pbt.balance_name balance_name
4038 FROM pay_balance_types pbt
4039 ,pay_balance_dimensions pbd
4040 ,pay_defined_balances pdb
4041 WHERE pbt.balance_name IN('F16 Salary Under Section 17'
4042 ,'F16 Profit in lieu of Salary'
4043 ,'F16 Value of Perquisites'
4044 ,'F16 Gross Salary less Allowances'
4045 ,'F16 Allowances Exempt'
4046 ,'F16 Deductions under Sec 16'
4047 ,'F16 Income Chargeable Under head Salaries'
4048 ,'F16 Other Income'
4049 ,'F16 Gross Total Income'
4050 ,'F16 Total Income'
4051 ,'F16 Tax on Total Income'
4052 ,'F16 Marginal Relief'
4053 ,'F16 Total Tax payable'
4054 ,'F16 Relief under Sec 89'
4055 ,'F16 Employment Tax'
4056 ,'F16 Entertainment Allowance'
4057 ,'F16 Surcharge'
4058 ,'F16 Education Cess'
4059 ,'F16 Sec and HE Cess'
4060 ,'F16 TDS'
4061 --Chapter VIA Balances
4062 ,'F16 Total Chapter VI A Deductions'
4063 ,'F16 Deductions Sec 80CCE'
4064 )
4065 AND pbd.dimension_name ='_ASG_LE_PTD'
4066 AND pbt.legislation_code = 'IN'
4067 AND pbd.legislation_code = 'IN'
4068 AND pdb.legislation_code = 'IN'
4069 AND pbt.balance_type_id = pdb.balance_type_id
4070 AND pbd.balance_dimension_id = pdb.balance_dimension_id;
4071
4072 g_bal_name_tab t_bal_name_tab;
4073 g_context_table pay_balance_pkg.t_context_tab;
4074 g_balance_value_tab pay_balance_pkg.t_balance_value_tab;
4075 g_result_table pay_balance_pkg.t_detailed_bal_out_tab;
4076
4077 l_balance_value NUMBER;
4078 i NUMBER;
4079 j NUMBER;
4080
4081 l_proc VARCHAR2(100);
4082 l_message VARCHAR2(255);
4083
4084 l_tot_via_qa NUMBER;
4085 l_q4_80cce_total NUMBER;
4086 l_q4_others_total NUMBER;
4087 l_cess NUMBER;
4088
4089 BEGIN
4090 g_debug := hr_utility.debug_enabled;
4091 l_proc := g_package||'.get_live_balances';
4092
4093 pay_in_utils.set_location(g_debug,'Entering : '||l_proc,10);
4094
4095 if g_debug then
4096 pay_in_utils.trace('******************************','********************');
4097 pay_in_utils.trace('p_run_asg_action_id : ',p_run_asg_action_id);
4098 pay_in_utils.trace('p_gre_id : ',p_gre_id);
4099 pay_in_utils.trace('******************************','********************');
4100 end if;
4101
4102 i := 1;
4103 g_bal_name_tab.DELETE;
4104 g_balance_value_tab.DELETE;
4105 g_result_table.DELETE;
4106 g_context_table.DELETE;
4107 g_context_table(1).tax_unit_id := p_gre_id;
4108
4109 --Step 1: Chapter VIA Balances - Initialise variables
4110 l_tot_via_qa := 0;
4111 l_q4_80cce_total := 0;
4112 l_q4_others_total := 0;
4113
4114 l_cess:=0;
4115
4116 --Step 2: Get F16 balances
4117
4118 FOR c_rec IN c_f16_le_balances
4119 LOOP
4120 g_balance_value_tab(i).defined_balance_id := c_rec.balance_id;
4121 g_bal_name_tab(i).balance_name := c_rec.balance_name;
4122 i := i + 1;
4123 END LOOP;
4124
4125 pay_balance_pkg.get_value(p_assignment_action_id => p_run_asg_action_id
4126 ,p_defined_balance_lst => g_balance_value_tab
4127 ,p_context_lst => g_context_table
4128 ,p_output_table => g_result_table
4129 );
4130
4131
4132 FOR i IN 1..g_balance_value_tab.COUNT
4133 LOOP
4134 IF (g_result_table(i).balance_value <> 0)
4135 THEN
4136 IF (g_bal_name_tab(i).balance_name ='F16 Total Chapter VI A Deductions')
4137 THEN
4138 l_tot_via_qa := g_result_table(i).balance_value ;
4139 ELSIF (g_bal_name_tab(i).balance_name = 'F16 Deductions Sec 80CCE')
4140 THEN
4141 l_q4_80cce_total := g_result_table(i).balance_value ;
4142 ELSIF (g_bal_name_tab(i).balance_name = 'F16 Education Cess' OR g_bal_name_tab(i).balance_name = 'F16 Sec and HE Cess')
4143 THEN
4144 l_cess := l_cess + g_result_table(i).balance_value ;
4145 END IF;
4146
4147 if g_debug then
4148 pay_in_utils.trace('balance_name : ',g_bal_name_tab(i).balance_name);
4149 pay_in_utils.trace('balance_value : ',g_result_table(i).balance_value);
4150 end if;
4151 END IF;
4152 END LOOP;
4153
4154 l_q4_others_total := l_tot_via_qa - l_q4_80cce_total;
4155
4156 i:= g_balance_value_tab.COUNT + 1;
4157 g_bal_name_tab(i).balance_name := '80CCE';
4158 g_result_table(i).balance_value := l_q4_80cce_total;
4159
4160 i:= i + 1;
4161 g_bal_name_tab(i).balance_name := 'Others';
4162 g_result_table(i).balance_value := l_q4_others_total;
4163
4164 FOR r IN 1..g_bal_name_tab.COUNT
4165 LOOP
4166 IF g_bal_name_tab(r).balance_name='F16 Education Cess' THEN
4167 p_balances(r).balance_name := g_bal_name_tab(r).balance_name;
4168 p_balances(r).balance_value := l_cess;
4169 ELSE
4170 p_balances(r).balance_name := g_bal_name_tab(r).balance_name;
4171 p_balances(r).balance_value := g_result_table(r).balance_value;
4172 END IF ;
4173 END LOOP;
4174
4175 --Step 3:Delete all PL/SQL tables
4176 g_bal_name_tab.DELETE;
4177 g_context_table.DELETE;
4178 g_balance_value_tab.DELETE;
4179 g_result_table.DELETE;
4180
4181 pay_in_utils.set_location(g_debug,'Leaving: '||l_proc,30);
4182
4183 EXCEPTION
4184 WHEN OTHERS THEN
4185 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_proc, 'SQLERRMC:'||sqlerrm);
4186 pay_in_utils.set_location(g_debug,'Leaving : '||l_proc, 150);
4187 END get_live_balances;
4188
4189
4190 --------------------------------------------------------------------------
4191 -- --
4192 -- Name : GET_BALANCE_VALUES --
4193 -- Type : PROCEDURE --
4194 -- Access : Private --
4195 -- Description : --
4196 -- --
4197 -- Parameters : --
4198 -- IN : p_source_id NUMBER --
4199 -- : p_action_context_id NUMBER --
4200 -- : p_assignment_id NUMBER --
4201 -- : p_24qa_pay_act_id NUMBER --
4202 -- : p_mode VARCHAR2 --
4203 -- OUT : p_ba_live_rec t_balance_value_rec --
4204 -- p_ba_24qc_rec t_balance_value_rec --
4205 -- : p_gre_count NUMBER --
4206 --------------------------------------------------------------------------
4207 -- Rev# Date Userid Description --
4208 --------------------------------------------------------------------------
4209 -- 115.0 07-Feb-2007 rpalli 5754018 : 24QC Quarter4 Stat Update --
4210 --------------------------------------------------------------------------
4211 PROCEDURE get_balance_values
4212 (
4213 p_source_id IN NUMBER DEFAULT NULL
4214 ,p_action_context_id IN NUMBER DEFAULT NULL
4215 ,p_assignment_id IN NUMBER
4216 ,p_24qa_pay_act_id IN NUMBER
4217 ,p_mode IN VARCHAR2
4218 ,p_ba_live_rec OUT NOCOPY t_balance_value_tab
4219 ,p_ba_24qc_rec OUT NOCOPY t_balance_value_tab
4220 ,p_person_live_data OUT NOCOPY t_person_data_sal_rec
4221 ,p_person_24q_data OUT NOCOPY t_person_data_sal_rec
4222 ,p_gre_count OUT NOCOPY NUMBER
4223 )
4224 IS
4225
4226 CURSOR c_get_bal_24q(p_action_context_id NUMBER, p_24q_source_id NUMBER, p_category VARCHAR2, p_balance_name VARCHAR2)
4227 IS
4228 SELECT DISTINCT
4229 FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values(p_category,p_balance_name,pai.action_context_id,pai.source_id,1)))
4230 FROM pay_action_information pai
4231 WHERE pai.action_context_id = p_action_context_id
4232 AND pai.action_information_category = p_category
4233 AND pai.source_id = p_24q_source_id;
4234
4235 CURSOR c_get_person_data_from_24q
4236 IS
4237 SELECT DISTINCT
4238 pai.action_information1 person_id
4239 ,pai.action_information4 pan_number
4240 ,pai.action_information5 pan_ref_number
4241 ,pai.action_information6 full_name
4242 ,fnd_date.canonical_to_date(pai.action_information9) start_date
4243 ,fnd_date.canonical_to_date(pai.action_information10) end_date
4244 ,pai.source_id
4245 FROM pay_action_information pai
4246 ,pay_assignment_actions paa
4247 WHERE pai.action_information_category IN('IN_24Q_PERSON')
4248 AND pai.action_information3 = g_gre_id
4249 AND pai.action_information2 = g_year||g_quarter
4250 AND pai.assignment_id = p_assignment_id
4251 AND (
4252 (pai.source_id = p_source_id AND p_mode NOT IN ('A'))
4253 OR (p_mode IN ('A'))
4254 )
4255 AND pai.action_context_id = paa.assignment_action_id
4256 AND paa.payroll_action_id = p_24qa_pay_act_id
4257 ORDER BY pai.source_id DESC;
4258
4259 CURSOR c_get_person_data_from_24qc
4260 IS
4261 SELECT DISTINCT
4262 pai.action_information1 person_id
4263 ,pai.action_information4 pan_number
4264 ,pai.action_information5 pan_ref_number
4265 ,pai.action_information6 full_name
4266 ,fnd_date.canonical_to_date(pai.action_information8) start_date
4267 ,fnd_date.canonical_to_date(pai.action_information9) end_date
4268 ,pai.source_id
4269 FROM pay_action_information pai
4270 ,pay_assignment_actions paa
4271 ,pay_action_interlocks locks
4272 ,pay_assignment_actions paa_master
4273 WHERE pai.action_information_category = 'IN_24QC_PERSON'
4274 AND pai.assignment_id = p_assignment_id
4275 AND pai.action_information3 = g_gre_id
4276 AND pai.action_information2 = g_year||g_quarter
4277 AND pai.action_information10 = 'NA'
4278 AND (
4279 (pai.source_id = p_source_id AND p_mode NOT IN ('A'))
4280 OR (p_mode IN ('A'))
4281 )
4282 AND locks.locking_action_id = pai.action_context_id
4283 AND locks.locked_action_id = paa.assignment_action_id
4284 AND paa.payroll_action_id = p_24qa_pay_act_id
4285 AND paa_master.assignment_action_id = pai.action_context_id
4286 AND paa_master.payroll_action_id IN(
4287 SELECT org_information3
4288 FROM hr_organization_information
4289 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
4290 AND organization_id = g_gre_id
4291 AND org_information1 = g_year
4292 AND org_information2 = g_quarter
4293 AND org_information5 = 'A'
4294 AND org_information6 = 'C'
4295 )
4296 ORDER BY pai.source_id DESC;
4297
4298 CURSOR c_get_live_person_data
4299 IS
4300 SELECT asg.person_id person_id
4301 ,DECODE(pep.per_information4,NULL,DECODE(pep.per_information5,'Yes','APPLIEDFOR','PANNOTAVBL'),pep.per_information4) pan
4302 ,pep.per_information14 pan_ref_number
4303 ,hr_in_utility.per_in_full_name(pep.first_name,pep.middle_names,pep.last_name,pep.title) full_name
4304 FROM per_assignments_f asg
4305 ,per_people_f pep
4306 WHERE asg.assignment_id = p_assignment_id
4307 AND pep.person_id = asg.person_id
4308 AND pep.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
4309 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
4310 AND assignment_end_date(asg.assignment_id) BETWEEN asg.effective_start_date AND asg.effective_end_date
4311 AND assignment_end_date(asg.assignment_id) BETWEEN pep.effective_start_date AND pep.effective_end_date;
4312
4313 CURSOR c_24qc_source_id(p_action_context_id NUMBER,
4314 p_assignment_id NUMBER
4315 )
4316 IS
4317 SELECT pai.action_context_id, pai.source_id
4318 FROM pay_action_information pai
4319 ,pay_assignment_actions paa
4320 ,pay_action_interlocks locks
4321 ,pay_assignment_actions paa_master
4322 WHERE pai.action_information_category = 'IN_24QC_PERSON'
4323 AND pai.assignment_id = p_assignment_id
4324 AND pai.action_information3 = g_gre_id
4325 AND pai.action_information2 = g_year||g_quarter
4326 AND pai.action_information10 = 'A'
4327 AND (
4328 (pai.source_id = p_source_id AND p_mode NOT IN ('A'))
4329 OR (p_mode IN ('A'))
4330 )
4331 AND locks.locking_action_id = pai.action_context_id
4332 AND locks.locked_action_id = paa.assignment_action_id
4333 AND paa.payroll_action_id = p_24qa_pay_act_id
4334 AND paa_master.assignment_action_id = pai.action_context_id
4335 AND paa_master.payroll_action_id IN(
4336 SELECT org_information3
4337 FROM hr_organization_information
4338 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
4339 AND organization_id = g_gre_id
4340 AND org_information1 = g_year
4341 AND org_information2 = g_quarter
4342 AND org_information5 = 'A'
4343 AND org_information6 = 'C'
4344 )
4345 ORDER BY pai.source_id DESC;
4346
4347
4348 CURSOR c_24qa_source_id(p_action_context_id NUMBER,
4349 p_assignment_id NUMBER
4350 )
4351 IS
4352 SELECT DISTINCT pai.action_context_id, pai.source_id
4353 FROM pay_action_information pai
4354 ,pay_assignment_actions paa
4355 WHERE pai.action_information_category IN('IN_24Q_PERSON')
4356 AND pai.action_information3 = g_gre_id
4357 AND pai.action_information2 = g_year||g_quarter
4358 AND pai.assignment_id = p_assignment_id
4359 AND (
4360 (pai.source_id = p_source_id AND p_mode NOT IN ('A'))
4361 OR (p_mode IN ('A'))
4362 )
4363 AND pai.action_context_id = paa.assignment_action_id
4364 AND paa.payroll_action_id = p_24qa_pay_act_id
4365 ORDER BY pai.source_id DESC;
4366
4367 CURSOR c_gre_records(p_assignment_id NUMBER)
4368 IS
4369 SELECT GREATEST(asg.effective_start_date,g_fin_start_date) start_date
4370 ,LEAST(asg.effective_end_date,g_fin_end_date) end_date
4371 ,scl.segment1
4372 FROM per_assignments_f asg
4373 ,hr_soft_coding_keyflex scl
4374 ,pay_assignment_actions paa
4375 WHERE asg.soft_coding_keyflex_id = scl.soft_coding_keyflex_id
4376 AND paa.assignment_action_id = p_action_context_id
4377 AND asg.assignment_id = paa.assignment_id
4378 AND paa.assignment_id = p_assignment_id
4379 AND scl.segment1 LIKE g_gre_id
4380 AND ( asg.effective_start_date BETWEEN g_fin_start_date AND g_end_date
4381 OR g_fin_start_date BETWEEN asg.effective_start_date AND asg.effective_end_date
4382 )
4383 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
4384 ORDER BY 1 ;
4385
4386 CURSOR get_eoy_archival_details(p_start_date DATE
4387 ,p_end_date DATE
4388 ,p_tax_unit_id NUMBER
4389 ,p_assignment_id NUMBER
4390 )
4391 IS
4392 SELECT FND_NUMBER.CANONICAL_TO_NUMBER(SUBSTR(MAX(LPAD(paa.action_sequence,15,'0')||paa.assignment_action_id),16)) run_asg_action_id
4393 FROM pay_assignment_actions paa
4394 ,pay_payroll_actions ppa
4395 ,per_assignments_f paf
4396 WHERE paf.assignment_id = paa.assignment_id
4397 AND paf.assignment_id = p_assignment_id
4398 AND paa.tax_unit_id = p_tax_unit_id
4399 AND paa.payroll_action_id = ppa.payroll_action_id
4400 AND ppa.action_type IN('R','Q','I','B')
4401 AND ppa.payroll_id = paf.payroll_id
4402 AND ppa.action_status ='C'
4403 AND ppa.effective_date between p_start_date and p_end_date
4404 AND paa.source_action_id IS NULL
4405 AND (1 = DECODE(ppa.action_type,'I',1,0)
4406 OR EXISTS (SELECT ''
4407 FROM pay_action_interlocks intk,
4408 pay_assignment_actions paa1,
4409 pay_payroll_actions ppa1
4410 WHERE intk.locked_action_id = paa.assignment_Action_id
4411 AND intk.locking_action_id = paa1.assignment_action_id
4412 AND paa1.payroll_action_id =ppa1.payroll_action_id
4413 AND paa1.assignment_id = p_assignment_id
4414 AND ppa1.action_type in('P','U')
4415 AND ppa.action_type in('R','Q','B')
4416 AND ppa1.action_status ='C'
4417 AND ppa1.effective_date BETWEEN p_start_date and p_end_date
4418 AND ROWNUM =1 ));
4419
4420
4421 CURSOR get_assignment_pact_id
4422 IS
4423 SELECT paa.assignment_id
4424 ,paa.payroll_action_id
4425 ,paf.person_id
4426 FROM pay_assignment_actions paa
4427 ,per_all_assignments_f paf
4428 WHERE paa.assignment_action_id = p_action_context_id
4429 AND paa.assignment_id = paf.assignment_id
4430 AND ROWNUM =1;
4431
4432 CURSOR c_termination_check(p_assignment_id NUMBER)
4433 IS
4434 SELECT NVL(pos.actual_termination_date,(fnd_date.string_to_date('31-12-4712','DD-MM-YYYY')))
4435 FROM per_all_assignments_f asg
4436 ,per_periods_of_service pos
4437 WHERE asg.person_id = pos.person_id
4438 AND asg.assignment_id = p_assignment_id
4439 AND asg.business_group_id = pos.business_group_id
4440 AND asg.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
4441 AND NVL(pos.actual_termination_date,(to_date('31-12-4712','DD-MM-YYYY')))
4442 BETWEEN asg.effective_start_date AND asg.effective_end_date
4443 ORDER BY 1 DESC;
4444
4445
4446 l_per_id per_all_people_f.person_id%TYPE;
4447 l_person_id per_all_people_f.person_id%TYPE;
4448 l_pan_number per_all_people_f.per_information14%TYPE;
4449 l_pan_ref_number per_all_people_f.per_information14%TYPE;
4450 l_full_name per_all_people_f.full_name%TYPE;
4451
4452 l_procedure VARCHAR2(250);
4453 l_message VARCHAR2(250);
4454
4455 l_source_id NUMBER;
4456 l_24qa_source_id NUMBER;
4457 l_arc_pay_action_id NUMBER;
4458
4459 l_run_asg_action_id NUMBER;
4460
4461 i NUMBER;
4462 j NUMBER;
4463 l_count NUMBER;
4464 l_balance_value NUMBER;
4465
4466 l_assignment_id NUMBER;
4467 l_action_context_id NUMBER;
4468 l_actual_term_date DATE;
4469 l_effective_start_date DATE;
4470 l_effective_end_date DATE;
4471
4472 l_last_run_ind BOOLEAN;
4473
4474 l_sal_category VARCHAR2(250);
4475 l_via_category VARCHAR2(250);
4476
4477 t_balance_name t_bal_name_tab;
4478
4479 BEGIN
4480
4481 g_debug := hr_utility.debug_enabled;
4482 l_procedure := g_package ||'.get_balance_values';
4483 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
4484 pay_in_utils.set_location(g_debug,'Fetching Live Data ' ,2);
4485
4486 --
4487 l_count := 1;
4488 i := 1;
4489 j := 1;
4490 g_asg_tab.DELETE;
4491
4492 t_balance_name(1).balance_name := 'F16 Salary Under Section 17';
4493 t_balance_name(2).balance_name := 'F16 Profit in lieu of Salary';
4494 t_balance_name(3).balance_name := 'F16 Value of Perquisites';
4495 t_balance_name(4).balance_name := 'F16 Gross Salary less Allowances';
4496 t_balance_name(5).balance_name := 'F16 Allowances Exempt';
4497 t_balance_name(6).balance_name := 'F16 Deductions under Sec 16';
4498 t_balance_name(7).balance_name := 'F16 Income Chargeable Under head Salaries';
4499 t_balance_name(8).balance_name := 'F16 Other Income';
4500 t_balance_name(9).balance_name := 'F16 Gross Total Income';
4501 t_balance_name(10).balance_name := 'F16 Total Income';
4502 t_balance_name(11).balance_name := 'F16 Tax on Total Income';
4503 t_balance_name(12).balance_name := 'F16 Marginal Relief';
4504 t_balance_name(13).balance_name := 'F16 Total Tax payable';
4505 t_balance_name(14).balance_name := 'F16 Relief under Sec 89';
4506 t_balance_name(15).balance_name := 'F16 Employment Tax';
4507 t_balance_name(16).balance_name := 'F16 Entertainment Allowance';
4508 t_balance_name(17).balance_name := 'F16 Surcharge';
4509 t_balance_name(18).balance_name := 'F16 Education Cess';
4510 t_balance_name(19).balance_name := 'F16 TDS';
4511 --Chapter VIA Balances
4512 t_balance_name(20).balance_name := 'F16 Total Chapter VI A Deductions';
4513 t_balance_name(21).balance_name := 'F16 Deductions Sec 80CCE';
4514 --Chapter VIA Balances - Archive
4515 t_balance_name(22).balance_name := '80CCE';
4516 t_balance_name(23).balance_name := 'Others';
4517
4518 --
4519 OPEN get_assignment_pact_id;
4520 FETCH get_assignment_pact_id INTO l_assignment_id ,l_arc_pay_action_id,l_per_id;
4521 CLOSE get_assignment_pact_id;
4522
4523 OPEN c_termination_check(l_assignment_id);
4524 FETCH c_termination_check INTO l_actual_term_date;
4525 CLOSE c_termination_check;
4526
4527 if g_debug then
4528 pay_in_utils.trace('l_assignment_id : ',l_assignment_id);
4529 pay_in_utils.trace('l_arc_pay_action_id : ',l_arc_pay_action_id);
4530 pay_in_utils.trace('l_per_id : ',l_per_id);
4531 pay_in_utils.trace('l_actual_term_date : ',l_actual_term_date);
4532 end if;
4533
4534 -- Get all records from financial year start till current quarter end to find out
4535 -- previous GRE assignment_action_id and remaining pay periods
4536 pay_in_utils.set_location(g_debug,'Entering : '||l_assignment_id,12);
4537 FOR c_rec IN c_gre_records(l_assignment_id)
4538 LOOP
4539 IF ((l_count <>1)
4540 AND
4541 (g_asg_tab(l_count-1).gre_id = c_rec.segment1)
4542 AND
4543 (g_asg_tab(l_count-1).end_date + 1 = c_rec.start_date)
4544 )
4545 THEN
4546 g_asg_tab(l_count-1).end_date := c_rec.end_date;
4547 l_count := l_count -1;
4548 ELSE
4549 g_asg_tab(l_count).gre_id := c_rec.segment1;
4550 g_asg_tab(l_count).start_date := c_rec.start_date;
4551 g_asg_tab(l_count).end_date := c_rec.end_date;
4552 END IF;
4553 l_count := l_count + 1;
4554 END LOOP;
4555
4556 pay_in_utils.set_location(g_debug,'l_count : '||l_count,20);
4557
4558 p_gre_count := l_count;
4559
4560 /* g_asg_tab.start/end date will contain the actual start/end of asg in a GRE or the the financial year .
4561 We need to change it to quarter date*/
4562
4563 FOR i IN 1..l_count-1
4564 LOOP
4565 --Get Live Balances only if it is a candidate for reporting in the specified quarter
4566 IF (g_start_date <= g_asg_tab(i).end_date AND
4567 g_end_date >= g_asg_tab(i).start_date) THEN
4568 pay_in_utils.set_location(g_debug,'l_assignment_id : '||l_assignment_id||' ' ||g_asg_tab(i).start_date||' ' ||g_asg_tab(i).end_date||' ' ||g_asg_tab(i).gre_id,30);
4569
4570
4571 -- Get assignment action id corresponding to the maximum action sequence record
4572 OPEN get_eoy_archival_details(GREATEST(g_asg_tab(i).start_date,g_start_date)
4573 ,LEAST(g_asg_tab(i).end_date,g_end_date)
4574 ,g_asg_tab(i).gre_id
4575 ,l_assignment_id
4576 );
4577 FETCH get_eoy_archival_details INTO l_run_asg_action_id;
4578 CLOSE get_eoy_archival_details;
4579
4580 pay_in_utils.trace('l_run_asg_action_id in LOOP: ', l_run_asg_action_id );
4581
4582 IF l_run_asg_action_id IS NOT NULL THEN
4583
4584 -- Get Person start date and end date
4585 IF g_asg_tab(i).start_date > LEAST(g_asg_tab(i).end_date,l_actual_term_date) THEN
4586 l_effective_end_date := g_end_date;
4587 ELSE
4588 l_effective_end_date := LEAST(g_end_date,g_asg_tab(i).end_date,l_actual_term_date);
4589 END IF;
4590
4591 IF g_quarter = 'Q4' THEN
4592 l_effective_start_date := g_asg_tab(i).start_date;
4593 ELSE
4594 l_effective_start_date := GREATEST(g_qr_start_date,g_asg_tab(i).start_date);
4595 END IF;
4596
4597 pay_in_utils.set_location(g_debug,'Fetching Live Balances Data ' ,2);
4598 pay_in_utils.set_location(g_debug,'p_mode in Live Balances Data : '||p_mode ,2);
4599 pay_in_utils.set_location(g_debug,'p_source_id in Live Balances Data : '||p_source_id ,2);
4600 pay_in_utils.set_location(g_debug,'l_run_asg_action_id in Live Balances Data : '||l_run_asg_action_id ,2);
4601
4602 IF (p_source_id = l_run_asg_action_id)
4603 THEN
4604
4605 get_live_balances(p_run_asg_action_id => l_run_asg_action_id
4606 ,p_gre_id => g_asg_tab(i).gre_id
4607 ,p_balances => p_ba_live_rec
4608 );
4609 pay_in_utils.set_location(g_debug,'Fetched Live Balances Data ' ,2);
4610 EXIT;
4611 END IF;
4612 pay_in_utils.set_location(g_debug,'Fetching Live Balances Data ' ,3);
4613
4614 IF ((p_mode = 'D') AND (p_source_id < l_run_asg_action_id))
4615 THEN
4616
4617 get_live_balances(p_run_asg_action_id => l_run_asg_action_id
4618 ,p_gre_id => g_asg_tab(i).gre_id
4619 ,p_balances => p_ba_live_rec
4620 );
4621 pay_in_utils.set_location(g_debug,'Fetched Live Balances Data ' ,3);
4622 EXIT;
4623 END IF;
4624
4625 END IF; -- Run Assact is NOT NULL
4626 END IF; -- End of Get Live Balances
4627 END LOOP;
4628
4629 pay_in_utils.set_location(g_debug,'Fetching 24Q Archival Balances Data ' ,3);
4630
4631 pay_in_utils.set_location(g_debug,'Searching in 24Q Correction ' ,3);
4632 pay_in_utils.set_location(g_debug,'Fetching 24Q Archival Source ID ' ,3);
4633
4634 pay_in_utils.set_location(g_debug,'p_action_context_id : '|| p_action_context_id ,3);
4635 pay_in_utils.set_location(g_debug,'p_assignment_id : '|| p_assignment_id ,3);
4636 pay_in_utils.set_location(g_debug,'p_source_id : '|| p_source_id ,3);
4637
4638 OPEN c_24qc_source_id(p_action_context_id,p_assignment_id);
4639 FETCH c_24qc_source_id INTO l_action_context_id,l_24qa_source_id;
4640 l_sal_category := 'IN_24QC_SALARY';
4641 l_via_category := 'IN_24QC_VIA';
4642 pay_in_utils.set_location(g_debug,'l_24qa_source_id in c_24qc_source_id : '|| l_24qa_source_id ,3);
4643 CLOSE c_24qc_source_id;
4644
4645 IF (l_24qa_source_id IS NULL)
4646 THEN
4647 pay_in_utils.set_location(g_debug,'Source ID is NULL' ,4);
4648 pay_in_utils.set_location(g_debug,'Hence Searching in 24Q Archival ' ,4);
4649 OPEN c_24qa_source_id(p_action_context_id,p_assignment_id);
4650 FETCH c_24qa_source_id INTO l_action_context_id,l_24qa_source_id;
4651 l_sal_category := 'IN_24Q_SALARY';
4652 l_via_category := 'IN_24Q_VIA';
4653 pay_in_utils.trace('l_24qa_source_id in c_24qa_source_id : ', l_24qa_source_id );
4654 CLOSE c_24qa_source_id;
4655 END IF;
4656
4657 pay_in_utils.trace('l_24qa_source_id : ', l_24qa_source_id );
4658 pay_in_utils.trace('l_sal_category : ', l_sal_category );
4659 pay_in_utils.trace('l_via_category : ', l_via_category );
4660
4661 IF (l_24qa_source_id IS NOT NULL) THEN
4662 FOR j IN 1..t_balance_name.COUNT
4663 LOOP
4664 IF (t_balance_name(j).balance_name IN ('80CCE','Others'))
4665 THEN
4666 OPEN c_get_bal_24q(l_action_context_id,l_24qa_source_id,l_via_category,t_balance_name(j).balance_name);
4667 FETCH c_get_bal_24q INTO l_balance_value;
4668 CLOSE c_get_bal_24q;
4669 ELSE
4670 OPEN c_get_bal_24q(l_action_context_id,l_24qa_source_id,l_sal_category,t_balance_name(j).balance_name);
4671 FETCH c_get_bal_24q INTO l_balance_value;
4672 CLOSE c_get_bal_24q;
4673 END IF;
4674 p_ba_24qc_rec(j).balance_name := t_balance_name(j).balance_name;
4675 p_ba_24qc_rec(j).balance_value := l_balance_value;
4676 END LOOP;
4677 END IF;
4678
4679 pay_in_utils.set_location(g_debug,'Fetched 24Q Archival Balances Data ' ,4);
4680
4681 pay_in_utils.set_location(g_debug,'Searching person data in 24Q Correction ' ,5);
4682 OPEN c_get_person_data_from_24qc;
4683 FETCH c_get_person_data_from_24qc INTO l_person_id,l_pan_number,l_pan_ref_number,p_person_24q_data.full_name,
4684 p_person_24q_data.start_date,p_person_24q_data.end_date,l_source_id;
4685 pay_in_utils.set_location(g_debug,'Value of person id found in 24Q Correction: '|| l_person_id ,5);
4686 CLOSE c_get_person_data_from_24qc;
4687
4688
4689 IF (l_person_id IS NULL)
4690 THEN
4691 pay_in_utils.set_location(g_debug,'Person ID is NULL' ,5);
4692 pay_in_utils.set_location(g_debug,'Hence Searching in 24Q Archival ' ,5);
4693 OPEN c_get_person_data_from_24q;
4694 FETCH c_get_person_data_from_24q INTO l_person_id,l_pan_number,l_pan_ref_number,p_person_24q_data.full_name,
4695 p_person_24q_data.start_date,p_person_24q_data.end_date,l_source_id;
4696 CLOSE c_get_person_data_from_24q;
4697 pay_in_utils.set_location(g_debug,'Value of person id found in 24Q Archival: '|| l_person_id ,5);
4698 END IF;
4699
4700 p_person_24q_data.person_id := l_person_id;
4701 p_person_24q_data.pan_number := l_pan_number;
4702 p_person_24q_data.pan_ref_number := l_pan_ref_number;
4703
4704 pay_in_utils.set_location(g_debug,'Fetched Person Data from 24Q Archival Data' ,5);
4705
4706 pay_in_utils.set_location(g_debug,'Fetching Person Data from Live Data' ,6);
4707 OPEN c_get_live_person_data;
4708 FETCH c_get_live_person_data INTO p_person_live_data.person_id
4709 ,p_person_live_data.pan_number
4710 ,p_person_live_data.pan_ref_number
4711 ,p_person_live_data.full_name;
4712 CLOSE c_get_live_person_data;
4713
4714 p_person_live_data.start_date := l_effective_start_date;
4715 p_person_live_data.end_date := l_effective_end_date;
4716
4717 pay_in_utils.set_location(g_debug,'Fetched Person Data from Live Data' ,6);
4718
4719 pay_in_utils.set_location(g_debug,'---------------------------------------------' ,7);
4720 pay_in_utils.set_location(g_debug,'Removing format for Live Balances Data' ,7);
4721 FOR i IN 1..p_ba_live_rec.COUNT
4722 LOOP
4723 p_ba_live_rec(i).balance_value := FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(p_ba_live_rec(i).balance_value));
4724 END LOOP;
4725
4726 pay_in_utils.set_location(g_debug,'---------------------------------------------' ,7);
4727
4728 pay_in_utils.set_location(g_debug,'---------------------------------------------' ,8);
4729 pay_in_utils.set_location(g_debug,'Removing format for 24Q Archive Balances Data' ,8);
4730 FOR i IN 1..p_ba_24qc_rec.COUNT
4731 LOOP
4732 p_ba_24qc_rec(i).balance_value := FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(p_ba_24qc_rec(i).balance_value));
4733 END LOOP;
4734 pay_in_utils.set_location(g_debug,'---------------------------------------------' ,8);
4735
4736 pay_in_utils.set_location(g_debug,'Leaving : '|| l_procedure, 120);
4737
4738 EXCEPTION
4739 WHEN OTHERS THEN
4740 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
4741 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
4742 END get_balance_values;
4743
4744
4745 --------------------------------------------------------------------------
4746 -- --
4747 -- Name : CHECK_C5_CHANGE_ONLY --
4748 -- Type : FUNCTION --
4749 -- Access : Private --
4750 -- Description : --
4751 -- --
4752 -- Parameters : --
4753 -- IN : p_element_entry_id NUMBER --
4754 -- : p_action_context_id NUMBER --
4755 -- : p_assignment_id NUMBER --
4756 -- OUT : p_flag BOOLEAN --
4757 --------------------------------------------------------------------------
4758 -- Rev# Date Userid Description --
4759 --------------------------------------------------------------------------
4760 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
4761 --------------------------------------------------------------------------
4762 FUNCTION check_c5_change_only
4763 (
4764 p_element_entry_id IN NUMBER
4765 ,p_action_context_id IN NUMBER
4766 ,p_assignment_id IN NUMBER
4767 )
4768 RETURN BOOLEAN
4769 IS
4770 t_ee_live_rec t_screen_entry_value_rec;
4771 t_ee_24qc_rec t_screen_entry_value_rec;
4772 t_person_live_data t_person_data_rec;
4773 t_person_24q_data t_person_data_rec;
4774 l_procedure VARCHAR2(250);
4775 l_message VARCHAR2(250);
4776 BEGIN
4777 g_debug := hr_utility.debug_enabled;
4778 l_procedure := g_package ||'.check_c5_change_only';
4779 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
4780 pay_in_utils.set_location(g_debug,'Fetching Live Data',2);
4781 get_element_entry_values
4782 (
4783 p_element_entry_id
4784 ,p_action_context_id
4785 ,p_assignment_id
4786 ,t_ee_live_rec
4787 ,t_ee_24qc_rec
4788 ,t_person_live_data
4789 ,t_person_24q_data
4790 );
4791 pay_in_utils.set_location(g_debug,'Fetched Live Data',3);
4792 pay_in_utils.set_location(g_debug,'Comparing Data',4);
4793
4794 IF(t_ee_live_rec.challan_number <> t_ee_24qc_rec.challan_number)
4795 THEN
4796 pay_in_utils.set_location(g_debug,'t_ee_live_rec.challan_number'|| t_ee_live_rec.challan_number,1);
4797 pay_in_utils.set_location(g_debug,'t_ee_24qc_rec.challan_number'|| t_ee_24qc_rec.challan_number,1);
4798 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 1',1);
4799 RETURN FALSE;
4800 END IF;
4801
4802 IF(t_ee_live_rec.payment_date <> t_ee_24qc_rec.payment_date)
4803 THEN
4804 pay_in_utils.set_location(g_debug,'t_ee_live_rec.payment_date'|| t_ee_live_rec.payment_date,2);
4805 pay_in_utils.set_location(g_debug,'t_ee_24qc_rec.payment_date'|| t_ee_24qc_rec.payment_date,2);
4806 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 2',2);
4807 RETURN FALSE;
4808 END IF;
4809
4810 IF(t_ee_live_rec.amount_deposited <> t_ee_24qc_rec.amount_deposited)
4811 THEN
4812 pay_in_utils.set_location(g_debug,'t_ee_live_rec.amount_deposited'|| t_ee_live_rec.amount_deposited,3);
4813 pay_in_utils.set_location(g_debug,'t_ee_24qc_rec.amount_deposited'|| t_ee_24qc_rec.amount_deposited,3);
4814 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 3',3);
4815 RETURN FALSE;
4816 END IF;
4817
4818 IF(t_ee_live_rec.surcharge <> t_ee_24qc_rec.surcharge)
4819 THEN
4820 pay_in_utils.set_location(g_debug,'t_ee_live_rec.surcharge'|| t_ee_live_rec.surcharge,4);
4821 pay_in_utils.set_location(g_debug,'t_ee_24qc_rec.surcharge'|| t_ee_24qc_rec.surcharge,4);
4822 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 4',4);
4823 RETURN FALSE;
4824 END IF;
4825
4826 IF(t_ee_live_rec.education_cess <> t_ee_24qc_rec.education_cess)
4827 THEN
4828 pay_in_utils.set_location(g_debug,'t_ee_live_rec.education_cess'|| t_ee_live_rec.education_cess,5);
4829 pay_in_utils.set_location(g_debug,'t_ee_24qc_rec.education_cess'|| t_ee_24qc_rec.education_cess,5);
4830 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 5',5);
4831 RETURN FALSE;
4832 END IF;
4833
4834 IF(t_ee_live_rec.income_tax <> t_ee_24qc_rec.income_tax)
4835 THEN
4836 pay_in_utils.set_location(g_debug,'t_ee_live_rec.income_tax'|| t_ee_live_rec.income_tax,6);
4837 pay_in_utils.set_location(g_debug,'t_ee_24qc_rec.income_tax'|| t_ee_24qc_rec.income_tax,6);
4838 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 6',6);
4839 RETURN FALSE;
4840 END IF;
4841
4842 IF(t_ee_live_rec.taxable_income <> t_ee_24qc_rec.taxable_income)
4843 THEN
4844 pay_in_utils.set_location(g_debug,'t_ee_live_rec.taxable_income'|| t_ee_live_rec.taxable_income,7);
4845 pay_in_utils.set_location(g_debug,'t_ee_24qc_rec.taxable_income'|| t_ee_24qc_rec.taxable_income,7);
4846 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 7',7);
4847 RETURN FALSE;
4848 END IF;
4849
4850 IF(t_person_live_data.full_name <> t_person_24q_data.full_name)
4851 THEN
4852 pay_in_utils.set_location(g_debug,'t_person_live_data.full_name'|| t_person_live_data.full_name,8);
4853 pay_in_utils.set_location(g_debug,'t_person_24q_data.full_name'|| t_person_24q_data.full_name,8);
4854 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 8',8);
4855 RETURN FALSE;
4856 END IF;
4857
4858 IF(NVL(t_person_live_data.tax_rate,'NA') <> NVL(t_person_24q_data.tax_rate,'NA'))
4859 THEN
4860 pay_in_utils.set_location(g_debug,'t_person_live_data.tax_rate'|| t_person_live_data.tax_rate,9);
4861 pay_in_utils.set_location(g_debug,'t_person_24q_data.tax_rate'|| t_person_24q_data.tax_rate,9);
4862 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 9',9);
4863 RETURN FALSE;
4864 END IF;
4865
4866 IF(NVL(t_person_live_data.pan_ref_number,'NA') <> NVL(t_person_24q_data.pan_ref_number,'NA'))
4867 THEN
4868 pay_in_utils.set_location(g_debug,'t_person_live_data.pan_ref_number'|| t_person_live_data.pan_ref_number,10);
4869 pay_in_utils.set_location(g_debug,'t_person_24q_data.pan_ref_number'|| t_person_24q_data.pan_ref_number,10);
4870 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only Diff 10',10);
4871 RETURN FALSE;
4872 END IF;
4873
4874 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.check_c5_change_only No Diff',11);
4875 RETURN TRUE;
4876 EXCEPTION
4877 WHEN OTHERS THEN
4878 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
4879 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
4880 END check_c5_change_only;
4881
4882
4883 --------------------------------------------------------------------------
4884 -- --
4885 -- Name : ARCHIVE_SALARY_DATA --
4886 -- Type : PROCEDURE --
4887 -- Access : Private --
4888 -- Description : Procedure to archive the salary data. --
4889 -- Parameters : --
4890 -- IN : --
4891 -- --
4892 -- OUT : N/A --
4893 -- --
4894 -- Change History : --
4895 --------------------------------------------------------------------------
4896 -- Rev# Date Userid Description --
4897 --------------------------------------------------------------------------
4898 -- 115.0 07-Feb-2007 rpalli 5754018 : 24QC Quarter4 Stat Update --
4899 --------------------------------------------------------------------------
4900 PROCEDURE archive_salary_data(p_payroll_action_id NUMBER
4901 ,p_24qa_pay_act_id NUMBER
4902 )
4903 IS
4904
4905 CURSOR c_salary_number_24q(p_person_id VARCHAR2
4906 ,p_source_id NUMBER
4907 )
4908 IS
4909 SELECT MAX(FND_NUMBER.CANONICAL_TO_NUMBER(action_information11))
4910 FROM pay_action_information pai
4911 ,pay_assignment_actions paa
4912 WHERE pai.action_information_category = 'IN_24Q_PERSON'
4913 AND pai.action_information3 = g_gre_id
4914 AND pai.action_information2 = g_year||g_quarter
4915 AND pai.action_information1 = p_person_id
4916 AND pai.source_id = p_source_id
4917 AND pai.action_context_id = paa.assignment_action_id
4918 AND paa.payroll_action_id = p_24qa_pay_act_id
4919 AND paa.payroll_action_id IN(
4920 SELECT org_information3
4921 FROM hr_organization_information
4922 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
4923 AND organization_id = g_gre_id
4924 AND org_information1 = g_year
4925 AND org_information2 = g_quarter
4926 AND org_information5 = 'A'
4927 AND org_information6 = 'O'
4928 );
4929
4930 CURSOR c_salary_number_24qc(p_person_id VARCHAR2
4931 ,p_source_id NUMBER
4932 )
4933 IS
4934 SELECT MAX(FND_NUMBER.CANONICAL_TO_NUMBER(action_information12))
4935 FROM pay_action_information pai
4936 ,pay_assignment_actions paa
4937 ,pay_action_interlocks locks
4938 ,pay_assignment_actions paa_master
4939 WHERE pai.action_information_category = 'IN_24QC_PERSON'
4940 AND pai.action_information3 = g_gre_id
4941 AND pai.action_information2 = g_year||g_quarter
4942 AND pai.action_information1 = p_person_id
4943 AND pai.source_id = p_source_id
4944 AND locks.locking_action_id = pai.action_context_id
4945 AND locks.locked_action_id = paa.assignment_action_id
4946 AND paa.payroll_action_id = p_24qa_pay_act_id
4947 AND paa_master.assignment_action_id = pai.action_context_id
4948 AND paa_master.payroll_action_id IN(
4949 SELECT org_information3
4950 FROM hr_organization_information
4951 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
4952 AND organization_id = g_gre_id
4953 AND org_information1 = g_year
4954 AND org_information2 = g_quarter
4955 AND org_information5 = 'A'
4956 AND org_information6 = 'C'
4957 );
4958
4959 CURSOR c_max_salary_number_24q
4960 IS
4961 SELECT MAX(FND_NUMBER.CANONICAL_TO_NUMBER(action_information11))
4962 FROM pay_action_information pai
4963 ,pay_assignment_actions paa
4964 WHERE pai.action_information_category = 'IN_24Q_PERSON'
4965 AND pai.action_information3 = g_gre_id
4966 AND pai.action_information2 = g_year||g_quarter
4967 AND pai.action_context_id = paa.assignment_action_id
4968 AND paa.payroll_action_id = p_24qa_pay_act_id
4969 AND paa.payroll_action_id IN(
4970 SELECT org_information3
4971 FROM hr_organization_information
4972 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
4973 AND organization_id = g_gre_id
4974 AND org_information1 = g_year
4975 AND org_information2 = g_quarter
4976 AND org_information5 = 'A'
4977 AND org_information6 = 'O'
4978 );
4979
4980
4981 CURSOR c_max_salary_number_24qc
4982 IS
4983 SELECT MAX(FND_NUMBER.CANONICAL_TO_NUMBER(action_information12))
4984 FROM pay_action_information pai
4985 ,pay_assignment_actions paa
4986 ,pay_action_interlocks locks
4987 ,pay_assignment_actions paa_master
4988 WHERE pai.action_information_category = 'IN_24QC_PERSON'
4989 AND pai.action_information3 = g_gre_id
4990 AND pai.action_information2 = g_year||g_quarter
4991 AND locks.locking_action_id = pai.action_context_id
4992 AND locks.locked_action_id = paa.assignment_action_id
4993 AND paa.payroll_action_id = p_24qa_pay_act_id
4994 AND paa_master.assignment_action_id = pai.action_context_id
4995 AND paa_master.payroll_action_id IN(
4996 SELECT org_information3
4997 FROM hr_organization_information
4998 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
4999 AND organization_id = g_gre_id
5000 AND org_information1 = g_year
5001 AND org_information2 = g_quarter
5002 AND org_information5 = 'A'
5003 AND org_information6 = 'C'
5004 );
5005
5006
5007 CURSOR c_asg_act_id(p_payroll_action_id NUMBER,
5008 p_assignment_id NUMBER
5009 )
5010 IS
5011 SELECT assignment_action_id
5012 FROM pay_assignment_actions
5013 WHERE payroll_action_id = p_payroll_action_id
5014 AND assignment_id = p_assignment_id;
5015
5016 CURSOR c_max_pact(p_assignment_id NUMBER)
5017 IS
5018 SELECT
5019 FND_NUMBER.CANONICAL_TO_NUMBER(SUBSTR(MAX(LPAD(paa.action_sequence,15,'0')||paa.assignment_action_id),16)) source_id
5020 ,paf.assignment_id assignment_id
5021 FROM pay_assignment_actions paa
5022 ,pay_payroll_actions ppa
5023 ,per_assignments_f paf
5024 WHERE paf.assignment_id = paa.assignment_id
5025 AND paf.assignment_id =p_assignment_id
5026 AND paa.tax_unit_id = g_gre_id
5027 AND paa.payroll_action_id = ppa.payroll_action_id
5028 AND ppa.action_type IN('R','Q','I','B')
5029 AND ppa.payroll_id = paf.payroll_id
5030 AND ppa.action_status ='C'
5031 AND ppa.effective_date between g_start_date and g_end_date
5032 AND paa.source_action_id IS NULL
5033 AND (1 = DECODE(ppa.action_type,'I',1,0)
5034 OR EXISTS (SELECT ''
5035 FROM pay_action_interlocks intk,
5036 pay_assignment_actions paa1,
5037 pay_payroll_actions ppa1
5038 WHERE intk.locked_action_id = paa.assignment_Action_id
5039 AND intk.locking_action_id = paa1.assignment_action_id
5040 AND paa1.payroll_action_id =ppa1.payroll_action_id
5041 AND ppa1.action_type in('P','U')
5042 AND ppa.action_type in('R','Q','B')
5043 AND ppa1.action_status ='C'
5044 AND ppa1.effective_date between g_start_date and g_end_date
5045 AND ROWNUM =1 ))
5046 GROUP BY paf.assignment_id;
5047
5048 CURSOR c_prev_max_pact(p_assignment_id NUMBER, p_max_asact_id NUMBER)
5049 IS
5050 SELECT
5051 FND_NUMBER.CANONICAL_TO_NUMBER(SUBSTR(MAX(LPAD(paa.action_sequence,15,'0')||paa.assignment_action_id),16)) source_id
5052 ,paf.assignment_id assignment_id
5053 FROM pay_assignment_actions paa
5054 ,pay_payroll_actions ppa
5055 ,per_assignments_f paf
5056 WHERE paf.assignment_id = paa.assignment_id
5057 AND paf.assignment_id =p_assignment_id
5058 AND paa.tax_unit_id = g_gre_id
5059 AND paa.payroll_action_id = ppa.payroll_action_id
5060 AND paa.assignment_action_id < p_max_asact_id
5061 AND ppa.action_type IN('R','Q','I','B')
5062 AND ppa.payroll_id = paf.payroll_id
5063 AND ppa.action_status ='C'
5064 AND ppa.effective_date between g_start_date and g_end_date
5065 AND paa.source_action_id IS NULL
5066 AND (1 = DECODE(ppa.action_type,'I',1,0)
5067 OR EXISTS (SELECT ''
5068 FROM pay_action_interlocks intk,
5069 pay_assignment_actions paa1,
5070 pay_payroll_actions ppa1
5071 WHERE intk.locked_action_id = paa.assignment_Action_id
5072 AND intk.locking_action_id = paa1.assignment_action_id
5073 AND paa1.payroll_action_id =ppa1.payroll_action_id
5074 AND ppa1.action_type in('P','U')
5075 AND ppa.action_type in('R','Q','B')
5076 AND ppa1.action_status ='C'
5077 AND ppa1.effective_date between g_start_date and g_end_date
5078 AND ROWNUM =1 ))
5079 GROUP BY paf.assignment_id;
5080
5081 CURSOR c_24qc_source_id(p_action_context_id NUMBER,
5082 p_assignment_id NUMBER
5083 )
5084 IS
5085 SELECT DISTINCT pai.source_id,pai.action_context_id
5086 FROM pay_action_information pai
5087 ,pay_assignment_actions paa
5088 ,pay_action_interlocks locks
5089 ,pay_assignment_actions paa_master
5090 WHERE pai.action_information_category = 'IN_24QC_PERSON'
5091 AND pai.assignment_id = p_assignment_id
5092 AND pai.action_information3 = g_gre_id
5093 AND pai.action_information2 = g_year||g_quarter
5094 AND pai.action_information10 = 'A'
5095 AND locks.locking_action_id = pai.action_context_id
5096 AND locks.locked_action_id = paa.assignment_action_id
5097 AND paa.payroll_action_id = p_24qa_pay_act_id
5098 AND paa_master.assignment_action_id = pai.action_context_id
5099 AND paa_master.payroll_action_id IN(
5100 SELECT org_information3
5101 FROM hr_organization_information
5102 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
5103 AND organization_id = g_gre_id
5104 AND org_information1 = g_year
5105 AND org_information2 = g_quarter
5106 AND org_information5 = 'A'
5107 AND org_information6 = 'C'
5108 )
5109 ORDER BY pai.source_id DESC;
5110
5111 CURSOR c_24qa_source_id(p_action_context_id NUMBER,
5112 p_assignment_id NUMBER
5113 )
5114 IS
5115 SELECT DISTINCT pai.source_id,pai.action_context_id
5116 FROM pay_action_information pai
5117 WHERE pai.action_information_category IN('IN_24Q_PERSON')
5118 AND pai.action_information3 = g_gre_id
5119 AND pai.assignment_id = p_assignment_id
5120 AND pai.action_context_id = p_action_context_id
5121 ORDER BY pai.source_id DESC;
5122
5123 CURSOR c_get_bal_24q(p_action_context_id NUMBER, p_24q_source_id NUMBER, p_category VARCHAR2, p_balance_name VARCHAR2)
5124 IS
5125 SELECT DISTINCT
5126 FND_NUMBER.CANONICAL_TO_NUMBER(remove_curr_format(get_24Q_values(p_category,p_balance_name,pai.action_context_id,pai.source_id,1)))
5127 FROM pay_action_information pai
5128 WHERE pai.action_context_id = p_action_context_id
5129 AND pai.action_information_category = p_category
5130 AND pai.source_id = p_24q_source_id;
5131
5132 tab_24q_ba_data t_balance_value_tab;
5133 tab_liv_ba_data t_balance_value_tab;
5134
5135 tab_24q_pe_data t_person_data_sal_rec;
5136 tab_liv_pe_data t_person_data_sal_rec;
5137
5138 l_action_information_category pay_action_information.action_information_category%TYPE;
5139 l_arch_asg_action_id NUMBER;
5140 l_24qa_asg_action_id NUMBER;
5141 l_24qa_source_id NUMBER;
5142 l_prev_asg_action_id NUMBER;
5143 l_prev_category VARCHAR2(250);
5144
5145 l_action_info_id NUMBER;
5146 l_ovn NUMBER;
5147 j NUMBER;
5148 k NUMBER;
5149 l NUMBER;
5150 s NUMBER;
5151 l_dummy NUMBER := -1;
5152 l_flag NUMBER := -1;
5153 l_flag1 NUMBER := -1;
5154 l_flag2 NUMBER := -1;
5155
5156 l_procedure VARCHAR2(250);
5157 l_message VARCHAR2(250);
5158 l_balance_value NUMBER;
5159
5160 l_c5_change_only BOOLEAN;
5161 l_prev_c5 BOOLEAN;
5162 l_c5_tot_income_flag BOOLEAN;
5163
5164 l_max_pact NUMBER;
5165 l_prev_max_pact NUMBER;
5166 l_count_delete NUMBER;
5167 l_gre_count NUMBER;
5168 l_assignment_id NUMBER;
5169 l_future_pay BOOLEAN;
5170 l_prev_pay BOOLEAN;
5171
5172 BEGIN
5173
5174 g_debug := hr_utility.debug_enabled;
5175 l_procedure := g_package ||'.archive_salary_data';
5176 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5177 pay_in_utils.set_location(g_debug,'Fetching Salary Data ', 1);
5178
5179 s := 1;
5180 l_24qa_source_id := NULL;
5181 l_24qa_asg_action_id := NULL;
5182 IF (g_correction_mode IN('C4','C5','%'))
5183 THEN
5184 pay_in_utils.set_location(g_debug,'Value of g_count_sal_delete : '|| g_count_sal_delete, 1);
5185 FOR i IN 1..g_count_sal_delete - 1
5186 LOOP
5187
5188 pay_in_utils.set_location(g_debug,'Checking archived presence of this deleted assignment action',1);
5189 l_flag := -1;
5190 l_flag1 := -1;
5191 l_flag2 := -1;
5192 l_gre_count := 0;
5193
5194 l_flag := check_archival_status(g_sal_data_rec_del(i).source_id,'IN_24QC_PERSON',NULL,'D');
5195 l_flag1 := check_archival_status(g_sal_data_rec_del(i).source_id,'IN_24QC_PERSON',NULL,'NA');
5196
5197 pay_in_utils.trace('l_flag in g_count_sal_delete ',l_flag);
5198 pay_in_utils.trace('l_flag1 in g_count_sal_delete ',l_flag1);
5199
5200 IF ((l_flag = 0) AND (l_flag1 = 0))
5201 THEN
5202 pay_in_utils.set_location(g_debug,'Deleted Salary Detail Record Not Archived. Hence doing '||g_sal_data_rec_del(i).source_id,1);
5203
5204 get_balance_values
5205 (
5206 g_sal_data_rec_del(i).source_id
5207 ,g_sal_data_rec_del(i).last_action_context_id
5208 ,g_sal_data_rec_del(i).assignment_id
5209 ,p_24qa_pay_act_id
5210 ,'D'
5211 ,tab_liv_ba_data
5212 ,tab_24q_ba_data
5213 ,tab_liv_pe_data
5214 ,tab_24q_pe_data
5215 ,l_gre_count
5216 );
5217
5218 -- if g_correction_mode = 'C5' and tab_24q_pe_data.pan_number IS VALID and
5219 -- tab_liv_pe_data.pan_number is also valid and not equal 2 each other
5220 -- then not only arhcive this assignment data, but also last organization PA data
5221
5222 pay_in_utils.trace('Delete Source ID : ', g_sal_data_rec_del(i).source_id );
5223 pay_in_utils.trace('tab_liv_pe_data.pan_number : ', tab_liv_pe_data.pan_number );
5224 pay_in_utils.trace('tab_24q_pe_data.pan_number : ', tab_24q_pe_data.pan_number );
5225
5226 IF ((g_correction_mode IN('C4','C5','%'))
5227 AND(tab_24q_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
5228 AND(tab_liv_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
5229 AND(tab_24q_pe_data.pan_number <> tab_liv_pe_data.pan_number)
5230 )
5231 THEN
5232 l_action_information_category := 'C4:C5';
5233 ELSE
5234 l_action_information_category := 'C4';
5235 END IF;
5236
5237 OPEN c_asg_act_id(p_payroll_action_id,g_sal_data_rec_del(i).assignment_id);
5238 FETCH c_asg_act_id INTO l_arch_asg_action_id;
5239 CLOSE c_asg_act_id;
5240
5241 OPEN c_asg_act_id(p_24qa_pay_act_id,g_sal_data_rec_del(i).assignment_id);
5242 FETCH c_asg_act_id INTO l_24qa_asg_action_id;
5243 CLOSE c_asg_act_id;
5244
5245 OPEN c_salary_number_24qc(tab_liv_pe_data.person_id,g_sal_data_rec_del(i).source_id);
5246 FETCH c_salary_number_24qc INTO k;
5247 CLOSE c_salary_number_24qc;
5248
5249 OPEN c_salary_number_24q(tab_liv_pe_data.person_id,g_sal_data_rec_del(i).source_id);
5250 FETCH c_salary_number_24q INTO j;
5251 CLOSE c_salary_number_24q;
5252
5253 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
5254 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
5255
5256 l_c5_change_only := TRUE;
5257 pay_in_utils.trace('Count of live balances : ', tab_liv_ba_data.COUNT );
5258 pay_in_utils.trace('Count of 24q balances : ', tab_24q_ba_data.COUNT );
5259
5260 FOR j IN 1..tab_liv_ba_data.COUNT
5261 LOOP
5262 FOR k IN 1..tab_24q_ba_data.COUNT
5263 LOOP
5264 IF (tab_liv_ba_data(j).balance_name = tab_24q_ba_data(k).balance_name)
5265 THEN
5266
5267 IF ((tab_liv_ba_data(j).balance_value <> 0) AND
5268 (tab_liv_ba_data(j).balance_value <> tab_24q_ba_data(k).balance_value) AND
5269 (tab_liv_ba_data(j).balance_name NOT IN ('F16 Deductions Sec 80CCE'))
5270 )
5271 THEN
5272 l_c5_change_only := FALSE;
5273 END IF;
5274
5275 END IF;
5276 END LOOP;
5277 END LOOP;
5278
5279 IF (tab_liv_ba_data.COUNT = 0)
5280 THEN
5281 l_c5_change_only := FALSE;
5282 tab_liv_pe_data.start_date := tab_24q_pe_data.start_date;
5283 tab_liv_pe_data.end_date := tab_24q_pe_data.end_date;
5284 END IF;
5285
5286
5287 IF (INSTR(l_action_information_category,'C4')<> 0) AND (g_correction_mode IN ('%','C4'))
5288 AND ((l_c5_change_only = FALSE)) AND (g_quarter IN ('Q4') AND (l_flag = 0))
5289 THEN
5290
5291 pay_action_information_api.create_action_information
5292 (p_action_context_id => l_arch_asg_action_id
5293 ,p_action_context_type => 'AAP'
5294 ,p_action_information_category => 'IN_24QC_PERSON'
5295 ,p_source_id => g_sal_data_rec_del(i).source_id
5296 ,p_assignment_id => g_sal_data_rec_del(i).assignment_id
5297 ,p_action_information1 => tab_liv_pe_data.person_id
5298 ,p_action_information2 => g_year||g_quarter
5299 ,p_action_information3 => g_gre_id
5300 ,p_action_information4 => tab_liv_pe_data.pan_number
5301 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
5302 ,p_action_information6 => tab_liv_pe_data.full_name
5303 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
5304 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
5305 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
5306 ,p_action_information10 => 'D'
5307 ,p_action_information11 => 'C4'
5308 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0))
5309 ,p_action_information_id => l_action_info_id
5310 ,p_object_version_number => l_ovn
5311 );
5312
5313
5314 FOR l IN 1..tab_24q_ba_data.COUNT
5315 LOOP
5316
5317 IF ((tab_24q_ba_data(l).balance_name IN ('F16 Gross Total Income')) AND
5318 (tab_24q_ba_data(l).balance_value <> 0)
5319 )
5320 THEN
5321
5322 pay_action_information_api.create_action_information
5323 (p_action_context_id => l_arch_asg_action_id
5324 ,p_action_context_type => 'AAP'
5325 ,p_action_information_category => 'IN_24QC_SALARY'
5326 ,p_source_id => g_sal_data_rec_del(i).source_id
5327 ,p_action_information1 => 'Prev F16 Gross Total Income'
5328 ,p_action_information2 => tab_24q_ba_data(l).balance_value
5329 ,p_action_information_id => l_action_info_id
5330 ,p_object_version_number => l_ovn
5331 );
5332 END IF;
5333 END LOOP;
5334
5335 OPEN c_asg_act_id(p_24qa_pay_act_id,g_sal_data_rec_del(i).assignment_id);
5336 FETCH c_asg_act_id INTO l_24qa_asg_action_id;
5337 CLOSE c_asg_act_id;
5338
5339
5340 OPEN c_24qa_source_id(l_24qa_asg_action_id,g_sal_data_rec_del(i).assignment_id);
5341 FETCH c_24qa_source_id INTO l_24qa_source_id,l_24qa_asg_action_id;
5342 CLOSE c_24qa_source_id;
5343
5344 OPEN c_get_bal_24q(l_24qa_asg_action_id,l_24qa_source_id,'IN_24Q_SALARY','F16 Gross Total Income');
5345 FETCH c_get_bal_24q INTO l_balance_value;
5346 CLOSE c_get_bal_24q;
5347
5348 IF ((l_24qa_source_id IS NOT NULL) AND (l_balance_value <> 0)) THEN
5349 pay_action_information_api.create_action_information
5350 (p_action_context_id => l_arch_asg_action_id
5351 ,p_action_context_type => 'AAP'
5352 ,p_action_information_category => 'IN_24QC_SALARY'
5353 ,p_source_id => g_sal_data_rec_del(i).source_id
5354 ,p_action_information1 => 'Form24Q F16 Gross Total Income'
5355 ,p_action_information2 => l_balance_value
5356 ,p_action_information_id => l_action_info_id
5357 ,p_object_version_number => l_ovn
5358 );
5359 END IF;
5360
5361 END IF;
5362 END IF;
5363
5364 l_prev_pay := FALSE;
5365 IF (l_c5_change_only=FALSE)
5366 THEN
5367 OPEN c_max_pact(g_sal_data_rec_del(i).assignment_id);
5368 FETCH c_max_pact INTO l_max_pact,l_assignment_id;
5369 CLOSE c_max_pact;
5370 IF (g_sal_data_rec_del(i).source_id < l_max_pact) AND (l_max_pact IS NOT NULL)
5371 THEN
5372 l_prev_pay := TRUE;
5373 END IF;
5374 END IF;
5375
5376 OPEN c_max_salary_number_24qc;
5377 FETCH c_max_salary_number_24qc INTO k;
5378 CLOSE c_max_salary_number_24qc;
5379
5380 OPEN c_max_salary_number_24q;
5381 FETCH c_max_salary_number_24q INTO j;
5382 CLOSE c_max_salary_number_24q;
5383
5384 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
5385 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
5386
5387 l_flag2 := check_archival_status(l_max_pact,'IN_24QC_PERSON',NULL,'A');
5388
5389 IF (INSTR(l_action_information_category,'C4')<> 0) AND (g_correction_mode IN ('%','C4'))
5390 AND ((l_c5_change_only=FALSE)) AND (l_prev_pay) AND (g_quarter IN ('Q4') AND (l_flag2=0))
5391 THEN
5392
5393 pay_in_utils.trace('Delete Source ID : ', g_sal_data_rec_del(i).source_id );
5394 pay_in_utils.trace('l_max_pact : ', l_max_pact );
5395
5396 pay_action_information_api.create_action_information
5397 (p_action_context_id => l_arch_asg_action_id
5398 ,p_action_context_type => 'AAP'
5399 ,p_action_information_category => 'IN_24QC_PERSON'
5400 ,p_source_id => l_max_pact
5401 ,p_assignment_id => g_sal_data_rec_del(i).assignment_id
5402 ,p_action_information1 => tab_liv_pe_data.person_id
5403 ,p_action_information2 => g_year||g_quarter
5404 ,p_action_information3 => g_gre_id
5405 ,p_action_information4 => tab_liv_pe_data.pan_number
5406 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
5407 ,p_action_information6 => tab_liv_pe_data.full_name
5408 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
5409 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
5410 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
5411 ,p_action_information10 => 'A'
5412 ,p_action_information11 => 'C4'
5413 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0)) + s
5414 ,p_action_information_id => l_action_info_id
5415 ,p_object_version_number => l_ovn
5416 );
5417
5418 FOR l IN 1..tab_liv_ba_data.COUNT
5419 LOOP
5420
5421 IF ((tab_liv_ba_data(l).balance_value <> 0) AND
5422 (tab_liv_ba_data(l).balance_name IN ('80CCE','Others'))
5423 )
5424 THEN
5425 pay_action_information_api.create_action_information
5426 (p_action_context_id => l_arch_asg_action_id
5427 ,p_action_context_type => 'AAP'
5428 ,p_action_information_category => 'IN_24QC_VIA'
5429 ,p_source_id => l_max_pact
5430 ,p_action_information1 => tab_liv_ba_data(l).balance_name
5431 ,p_action_information2 => tab_liv_ba_data(l).balance_value
5432 ,p_action_information3 => 0
5433 ,p_action_information_id => l_action_info_id
5434 ,p_object_version_number => l_ovn
5435 );
5436 ELSIF ((tab_liv_ba_data(l).balance_value <> 0) AND
5437 (tab_liv_ba_data(l).balance_name NOT IN ('F16 Deductions Sec 80CCE'))
5438 )
5439 THEN
5440 pay_action_information_api.create_action_information
5441 (p_action_context_id => l_arch_asg_action_id
5442 ,p_action_context_type => 'AAP'
5443 ,p_action_information_category => 'IN_24QC_SALARY'
5444 ,p_source_id => l_max_pact
5445 ,p_action_information1 => tab_liv_ba_data(l).balance_name
5446 ,p_action_information2 => tab_liv_ba_data(l).balance_value
5447 ,p_action_information_id => l_action_info_id
5448 ,p_object_version_number => l_ovn
5449 );
5450 END IF;
5451 END LOOP;
5452 s := s + 1;
5453 END IF;
5454
5455 OPEN c_salary_number_24qc(tab_liv_pe_data.person_id,g_sal_data_rec_del(i).source_id);
5456 FETCH c_salary_number_24qc INTO k;
5457 CLOSE c_salary_number_24qc;
5458
5459 OPEN c_salary_number_24q(tab_liv_pe_data.person_id,g_sal_data_rec_del(i).source_id);
5460 FETCH c_salary_number_24q INTO j;
5461 CLOSE c_salary_number_24q;
5462
5463 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
5464 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
5465
5466
5467 IF (INSTR(l_action_information_category,'C5')<> 0) AND (g_correction_mode IN ('%','C5') AND (l_prev_pay) AND (l_flag1=0))
5468 THEN
5469
5470 pay_action_information_api.create_action_information
5471 (p_action_context_id => l_arch_asg_action_id
5472 ,p_action_context_type => 'AAP'
5473 ,p_action_information_category => 'IN_24QC_PERSON'
5474 ,p_source_id => l_max_pact
5475 ,p_assignment_id => g_sal_data_rec_del(i).assignment_id
5476 ,p_action_information1 => tab_liv_pe_data.person_id
5477 ,p_action_information2 => g_year||g_quarter
5478 ,p_action_information3 => g_gre_id
5479 ,p_action_information4 => tab_liv_pe_data.pan_number
5480 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
5481 ,p_action_information6 => tab_liv_pe_data.full_name
5482 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
5483 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
5484 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
5485 ,p_action_information10 => 'NA'
5486 ,p_action_information11 => 'C5'
5487 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0))
5488 ,p_action_information_id => l_action_info_id
5489 ,p_object_version_number => l_ovn
5490 );
5491
5492 FOR l IN 1..tab_24q_ba_data.COUNT
5493 LOOP
5494
5495 IF ((tab_24q_ba_data(l).balance_name IN ('F16 Gross Total Income')) AND
5496 (tab_24q_ba_data(l).balance_value <> 0)
5497 )
5498 THEN
5499
5500 pay_action_information_api.create_action_information
5501 (p_action_context_id => l_arch_asg_action_id
5502 ,p_action_context_type => 'AAP'
5503 ,p_action_information_category => 'IN_24QC_SALARY'
5504 ,p_source_id => l_max_pact
5505 ,p_action_information1 => 'Prev F16 Gross Total Income'
5506 ,p_action_information2 => tab_24q_ba_data(l).balance_value
5507 ,p_action_information_id => l_action_info_id
5508 ,p_object_version_number => l_ovn
5509 );
5510 END IF;
5511 END LOOP;
5512
5513 END IF;
5514
5515 END LOOP;
5516 END IF;
5517
5518
5519 IF (s = 1) THEN
5520 s := 1;
5521 END IF;
5522 l_24qa_source_id := NULL;
5523 l_24qa_asg_action_id := NULL;
5524 l_prev_asg_action_id := NULL;
5525 l_prev_category := NULL;
5526 IF (g_correction_mode IN('C4','C5','%'))
5527 THEN
5528 pay_in_utils.set_location(g_debug,'Value of g_count_sal_addition : '|| g_count_sal_addition, 1);
5529 FOR i IN 1..g_count_sal_addition - 1
5530 LOOP
5531
5532 OPEN c_asg_act_id(p_24qa_pay_act_id,g_sal_data_rec_add(i).assignment_id);
5533 FETCH c_asg_act_id INTO l_24qa_asg_action_id;
5534 CLOSE c_asg_act_id;
5535
5536 OPEN c_24qc_source_id(l_24qa_asg_action_id,g_sal_data_rec_add(i).assignment_id);
5537 FETCH c_24qc_source_id INTO l_24qa_source_id,l_24qa_asg_action_id;
5538 pay_in_utils.set_location(g_debug,'Found source id in 24Q Correction: '|| l_24qa_source_id ,2);
5539 CLOSE c_24qc_source_id;
5540
5541 IF (l_24qa_source_id IS NOT NULL)
5542 THEN
5543 l_prev_asg_action_id := l_24qa_asg_action_id;
5544 l_prev_category := 'IN_24QC_SALARY';
5545 END IF;
5546
5547 IF (l_24qa_source_id IS NULL)
5548 THEN
5549 pay_in_utils.set_location(g_debug,'Source ID is NULL' ,2);
5550 pay_in_utils.set_location(g_debug,'Hence Searching in 24Q Archival ' ,2);
5551 OPEN c_24qa_source_id(l_24qa_asg_action_id,g_sal_data_rec_add(i).assignment_id);
5552 FETCH c_24qa_source_id INTO l_24qa_source_id,l_24qa_asg_action_id;
5553 CLOSE c_24qa_source_id;
5554 l_prev_asg_action_id := l_24qa_asg_action_id;
5555 l_prev_category := 'IN_24Q_SALARY';
5556 END IF;
5557
5558 pay_in_utils.trace('l_24qa_source_id in g_count_sal_addition ',l_24qa_source_id);
5559
5560 pay_in_utils.set_location(g_debug,'Checking archived presence of this added assignment action',1);
5561 l_flag := -1;
5562 l_flag1 := -1;
5563 l_flag2 := -1;
5564 l_gre_count := 0;
5565 l_prev_c5 := TRUE;
5566
5567 pay_in_utils.trace('l_24qa_source_id in g_count_sal_addition ',l_24qa_source_id);
5568
5569 l_flag := check_archival_status(g_sal_data_rec_add(i).source_id,'IN_24QC_PERSON',NULL,'A');
5570 l_flag1 := check_archival_status(g_sal_data_rec_add(i).source_id,'IN_24QC_PERSON',NULL,'NA');
5571
5572 pay_in_utils.trace('l_flag in g_count_sal_addition :',l_flag);
5573 pay_in_utils.trace('l_flag1 in g_count_sal_addition :',l_flag1);
5574
5575 IF ((l_flag = 0) AND (l_flag1 = 0))
5576 THEN
5577 pay_in_utils.set_location(g_debug,'Added Salary Detail Not Archived. Hence doing.. '||g_sal_data_rec_add(i).source_id,1);
5578
5579 pay_in_utils.set_location(g_debug,'Fetching balance data ', 1);
5580 pay_in_utils.set_location(g_debug,'For Assignment Action ID : '|| g_sal_data_rec_add(i).source_id,1);
5581 pay_in_utils.set_location(g_debug,'Calling....get_balance_values ',1);
5582 pay_in_utils.set_location(g_debug,'Assignment Action id is ' || g_sal_data_rec_add(i).last_action_context_id ,2);
5583 pay_in_utils.set_location(g_debug,'Assignment id is ' || g_sal_data_rec_add(i).assignment_id,3);
5584
5585
5586 IF (l_24qa_asg_action_id IS NULL) THEN
5587 l_24qa_asg_action_id := g_sal_data_rec_add(i).source_id;
5588 END IF;
5589
5590 get_balance_values
5591 (
5592 g_sal_data_rec_add(i).source_id
5593 ,l_24qa_asg_action_id
5594 ,g_sal_data_rec_add(i).assignment_id
5595 ,p_24qa_pay_act_id
5596 ,'A'
5597 ,tab_liv_ba_data
5598 ,tab_24q_ba_data
5599 ,tab_liv_pe_data
5600 ,tab_24q_pe_data
5601 ,l_gre_count
5602 );
5603
5604 pay_in_utils.set_location(g_debug,'Called....get_balance_values ',1);
5605 pay_in_utils.set_location(g_debug,'Fetched balance data ', 1);
5606
5607 pay_in_utils.trace('tab_liv_pe_data.pan_number : ', tab_liv_pe_data.pan_number );
5608 pay_in_utils.trace('tab_24q_pe_data.pan_number : ', tab_24q_pe_data.pan_number );
5609
5610
5611 IF ((g_correction_mode IN('C4','C5','%'))
5612 AND(tab_24q_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
5613 AND(tab_liv_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
5614 AND(tab_24q_pe_data.pan_number <> tab_liv_pe_data.pan_number)
5615 )
5616 THEN
5617 l_action_information_category := 'C4:C5';
5618 ELSE
5619 l_action_information_category := 'C4';
5620 END IF;
5621
5622 OPEN c_asg_act_id(p_payroll_action_id,g_sal_data_rec_add(i).assignment_id);
5623 FETCH c_asg_act_id INTO l_arch_asg_action_id;
5624 CLOSE c_asg_act_id;
5625
5626 j := -1;
5627 k := -1;
5628
5629 OPEN c_salary_number_24qc(tab_liv_pe_data.person_id,l_24qa_source_id);
5630 FETCH c_salary_number_24qc INTO k;
5631 CLOSE c_salary_number_24qc;
5632
5633 OPEN c_salary_number_24q(tab_liv_pe_data.person_id,l_24qa_source_id);
5634 FETCH c_salary_number_24q INTO j;
5635 CLOSE c_salary_number_24q;
5636
5637 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
5638 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
5639
5640 l_c5_change_only := TRUE;
5641 pay_in_utils.trace('Count of live balances : ', tab_liv_ba_data.COUNT );
5642 pay_in_utils.trace('Count of 24q balances : ', tab_24q_ba_data.COUNT );
5643
5644 FOR j IN 1..tab_liv_ba_data.COUNT
5645 LOOP
5646 FOR k IN 1..tab_24q_ba_data.COUNT
5647 LOOP
5648 IF (tab_liv_ba_data(j).balance_name = tab_24q_ba_data(k).balance_name)
5649 THEN
5650
5651 IF ((tab_liv_ba_data(j).balance_value <> 0) AND
5652 (tab_liv_ba_data(j).balance_value <> tab_24q_ba_data(k).balance_value) AND
5653 (tab_liv_ba_data(j).balance_name NOT IN ('F16 Deductions Sec 80CCE'))
5654 )
5655 THEN
5656 l_c5_change_only := FALSE;
5657 END IF;
5658
5659 END IF;
5660 END LOOP;
5661 END LOOP;
5662
5663 IF (tab_24q_ba_data.COUNT = 0)
5664 THEN
5665 l_c5_change_only := FALSE;
5666 l_prev_c5 := FALSE;
5667 END IF;
5668
5669 pay_in_utils.trace('Addition Source ID : ', g_sal_data_rec_add(i).source_id );
5670 pay_in_utils.trace('Addition Assignment ID : ', g_sal_data_rec_add(i).assignment_id );
5671
5672 IF (INSTR(l_action_information_category,'C5')<> 0) AND (g_correction_mode IN ('%','C5') AND (l_flag1=0) AND (l_prev_c5))
5673 THEN
5674 pay_action_information_api.create_action_information
5675 (p_action_context_id => l_arch_asg_action_id
5676 ,p_action_context_type => 'AAP'
5677 ,p_action_information_category => 'IN_24QC_PERSON'
5678 ,p_source_id => g_sal_data_rec_add(i).source_id
5679 ,p_assignment_id => g_sal_data_rec_add(i).assignment_id
5680 ,p_action_information1 => tab_liv_pe_data.person_id
5681 ,p_action_information2 => g_year||g_quarter
5682 ,p_action_information3 => g_gre_id
5683 ,p_action_information4 => tab_liv_pe_data.pan_number
5684 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
5685 ,p_action_information6 => tab_liv_pe_data.full_name
5686 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
5687 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
5688 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
5689 ,p_action_information10 => 'NA'
5690 ,p_action_information11 => 'C5'
5691 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0))
5692 ,p_action_information_id => l_action_info_id
5693 ,p_object_version_number => l_ovn
5694 );
5695
5696 FOR l IN 1..tab_24q_ba_data.COUNT
5697 LOOP
5698
5699 IF ((tab_24q_ba_data(l).balance_name IN ('F16 Gross Total Income')) AND
5700 (tab_24q_ba_data(l).balance_value <> 0)
5701 )
5702 THEN
5703
5704 pay_action_information_api.create_action_information
5705 (p_action_context_id => l_arch_asg_action_id
5706 ,p_action_context_type => 'AAP'
5707 ,p_action_information_category => 'IN_24QC_SALARY'
5708 ,p_source_id => g_sal_data_rec_add(i).source_id
5709 ,p_action_information1 => 'Prev F16 Gross Total Income'
5710 ,p_action_information2 => tab_24q_ba_data(l).balance_value
5711 ,p_action_information_id => l_action_info_id
5712 ,p_object_version_number => l_ovn
5713 );
5714 END IF;
5715 END LOOP;
5716
5717 END IF;
5718
5719
5720 OPEN c_max_salary_number_24qc;
5721 FETCH c_max_salary_number_24qc INTO k;
5722 CLOSE c_max_salary_number_24qc;
5723
5724 OPEN c_max_salary_number_24q;
5725 FETCH c_max_salary_number_24q INTO j;
5726 CLOSE c_max_salary_number_24q;
5727
5728 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
5729 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
5730
5731
5732 IF (INSTR(l_action_information_category,'C4')<> 0) AND (g_correction_mode IN ('%','C4'))
5733 AND ((l_c5_change_only=FALSE)) AND (g_quarter IN ('Q4') AND (l_flag=0))
5734 THEN
5735
5736 pay_action_information_api.create_action_information
5737 (p_action_context_id => l_arch_asg_action_id
5738 ,p_action_context_type => 'AAP'
5739 ,p_action_information_category => 'IN_24QC_PERSON'
5740 ,p_source_id => g_sal_data_rec_add(i).source_id
5741 ,p_assignment_id => g_sal_data_rec_add(i).assignment_id
5742 ,p_action_information1 => tab_liv_pe_data.person_id
5743 ,p_action_information2 => g_year||g_quarter
5744 ,p_action_information3 => g_gre_id
5745 ,p_action_information4 => tab_liv_pe_data.pan_number
5746 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
5747 ,p_action_information6 => tab_liv_pe_data.full_name
5748 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
5749 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
5750 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
5751 ,p_action_information10 => 'A'
5752 ,p_action_information11 => 'C4'
5753 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0)) + s
5754 ,p_action_information_id => l_action_info_id
5755 ,p_object_version_number => l_ovn
5756 );
5757
5758 FOR l IN 1..tab_liv_ba_data.COUNT
5759 LOOP
5760
5761 IF ((tab_liv_ba_data(l).balance_value <> 0) AND
5762 (tab_liv_ba_data(l).balance_name IN ('80CCE','Others'))
5763 )
5764 THEN
5765 pay_action_information_api.create_action_information
5766 (p_action_context_id => l_arch_asg_action_id
5767 ,p_action_context_type => 'AAP'
5768 ,p_action_information_category => 'IN_24QC_VIA'
5769 ,p_source_id => g_sal_data_rec_add(i).source_id
5770 ,p_action_information1 => tab_liv_ba_data(l).balance_name
5771 ,p_action_information2 => tab_liv_ba_data(l).balance_value
5772 ,p_action_information3 => 0
5773 ,p_action_information_id => l_action_info_id
5774 ,p_object_version_number => l_ovn
5775 );
5776 ELSIF ((tab_liv_ba_data(l).balance_value <> 0) AND
5777 (tab_liv_ba_data(l).balance_name NOT IN ('F16 Deductions Sec 80CCE'))
5778 )
5779 THEN
5780 pay_action_information_api.create_action_information
5781 (p_action_context_id => l_arch_asg_action_id
5782 ,p_action_context_type => 'AAP'
5783 ,p_action_information_category => 'IN_24QC_SALARY'
5784 ,p_source_id => g_sal_data_rec_add(i).source_id
5785 ,p_action_information1 => tab_liv_ba_data(l).balance_name
5786 ,p_action_information2 => tab_liv_ba_data(l).balance_value
5787 ,p_action_information_id => l_action_info_id
5788 ,p_object_version_number => l_ovn
5789 );
5790 END IF;
5791 END LOOP;
5792 s := s + 1;
5793 END IF;
5794 END IF;
5795
5796
5797
5798 l_future_pay := FALSE;
5799 l_prev_max_pact := NULL;
5800 l_count_delete := 0;
5801
5802 IF (l_c5_change_only)
5803 THEN
5804 NULL;
5805 ELSE
5806 OPEN c_prev_max_pact(g_sal_data_rec_add(i).assignment_id,g_sal_data_rec_add(i).source_id);
5807 FETCH c_prev_max_pact INTO l_prev_max_pact,l_assignment_id;
5808 CLOSE c_prev_max_pact;
5809 IF (l_prev_max_pact IS NOT NULL)
5810 THEN
5811 FOR p IN 1..g_count_sal_delete - 1
5812 LOOP
5813 IF (g_sal_data_rec_add(i).assignment_id = g_sal_data_rec_del(p).assignment_id)
5814 THEN
5815 l_count_delete := l_count_delete + 1;
5816 END IF;
5817 END LOOP;
5818 IF (l_count_delete = 0) THEN
5819 l_future_pay := TRUE;
5820 END IF;
5821 END IF;
5822 END IF;
5823
5824
5825
5826 OPEN c_salary_number_24qc(tab_liv_pe_data.person_id,l_prev_max_pact);
5827 FETCH c_salary_number_24qc INTO k;
5828 CLOSE c_salary_number_24qc;
5829
5830 OPEN c_salary_number_24q(tab_liv_pe_data.person_id,l_prev_max_pact);
5831 FETCH c_salary_number_24q INTO j;
5832 CLOSE c_salary_number_24q;
5833
5834 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
5835 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
5836
5837 l_flag2 := check_archival_status(l_prev_max_pact,'IN_24QC_PERSON',NULL,'D');
5838
5839 IF (INSTR(l_action_information_category,'C4')<> 0) AND (g_correction_mode IN ('%','C4'))
5840 AND ((l_c5_change_only=FALSE)) AND (l_future_pay=TRUE) AND ((j>0) OR (j IS NULL)) AND (g_quarter IN ('Q4') AND (l_flag2=0))
5841 THEN
5842
5843 pay_action_information_api.create_action_information
5844 (p_action_context_id => l_arch_asg_action_id
5845 ,p_action_context_type => 'AAP'
5846 ,p_action_information_category => 'IN_24QC_PERSON'
5847 ,p_source_id => l_prev_max_pact
5848 ,p_assignment_id => g_sal_data_rec_add(i).assignment_id
5849 ,p_action_information1 => tab_liv_pe_data.person_id
5850 ,p_action_information2 => g_year||g_quarter
5851 ,p_action_information3 => g_gre_id
5852 ,p_action_information4 => tab_liv_pe_data.pan_number
5853 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
5854 ,p_action_information6 => tab_liv_pe_data.full_name
5855 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
5856 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
5857 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
5858 ,p_action_information10 => 'D'
5859 ,p_action_information11 => 'C4'
5860 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0))
5861 ,p_action_information_id => l_action_info_id
5862 ,p_object_version_number => l_ovn
5863 );
5864
5865
5866 OPEN c_get_bal_24q(l_prev_asg_action_id,l_prev_max_pact,l_prev_category,'F16 Gross Total Income');
5867 FETCH c_get_bal_24q INTO l_balance_value;
5868 CLOSE c_get_bal_24q;
5869
5870 pay_in_utils.trace('l_balance_value : ',l_balance_value);
5871
5872 IF ((l_prev_asg_action_id IS NOT NULL) AND (l_balance_value <> 0))
5873 THEN
5874
5875 pay_action_information_api.create_action_information
5876 (p_action_context_id => l_arch_asg_action_id
5877 ,p_action_context_type => 'AAP'
5878 ,p_action_information_category => 'IN_24QC_SALARY'
5879 ,p_source_id => l_prev_max_pact
5880 ,p_action_information1 => 'Prev F16 Gross Total Income'
5881 ,p_action_information2 => l_balance_value--tab_24q_ba_data(l).balance_value
5882 ,p_action_information_id => l_action_info_id
5883 ,p_object_version_number => l_ovn
5884 );
5885 END IF;
5886
5887
5888 OPEN c_asg_act_id(p_24qa_pay_act_id,g_sal_data_rec_add(i).assignment_id);
5889 FETCH c_asg_act_id INTO l_24qa_asg_action_id;
5890 CLOSE c_asg_act_id;
5891
5892 OPEN c_24qa_source_id(l_24qa_asg_action_id,g_sal_data_rec_add(i).assignment_id);
5893 FETCH c_24qa_source_id INTO l_24qa_source_id,l_24qa_asg_action_id;
5894 CLOSE c_24qa_source_id;
5895
5896 OPEN c_get_bal_24q(l_24qa_asg_action_id,l_24qa_source_id,'IN_24Q_SALARY','F16 Gross Total Income');
5897 FETCH c_get_bal_24q INTO l_balance_value;
5898 CLOSE c_get_bal_24q;
5899
5900 IF ((l_24qa_source_id IS NOT NULL) AND (l_balance_value <> 0))
5901 THEN
5902 pay_action_information_api.create_action_information
5903 (p_action_context_id => l_arch_asg_action_id
5904 ,p_action_context_type => 'AAP'
5905 ,p_action_information_category => 'IN_24QC_SALARY'
5906 ,p_source_id => l_prev_max_pact
5907 ,p_action_information1 => 'Form24Q F16 Gross Total Income'
5908 ,p_action_information2 => l_balance_value
5909 ,p_action_information_id => l_action_info_id
5910 ,p_object_version_number => l_ovn
5911 );
5912 END IF;
5913
5914 END IF;
5915 END LOOP;
5916 END IF;
5917
5918
5919 IF (s = 1) THEN
5920 s := 1;
5921 END IF;
5922 l_24qa_source_id := NULL;
5923 l_24qa_asg_action_id := NULL;
5924 IF (g_correction_mode IN('C4','C5','%'))
5925 THEN
5926 pay_in_utils.set_location(g_debug,'Value of g_count_sal_update : '|| g_count_sal_update, 1);
5927
5928 FOR i IN 1..g_count_sal_update - 1
5929 LOOP
5930 pay_in_utils.set_location(g_debug,'Checking archived presence of this updated assignment action',1);
5931 l_flag := -1;
5932 l_flag1 := -1;
5933 l_flag2 := -1;
5934 l_gre_count := 0;
5935 l_c5_tot_income_flag := FALSE;
5936
5937 l_flag := check_archival_status(g_sal_data_rec_upd(i).source_id,'IN_24QC_PERSON',NULL,'A');
5938 l_flag1 := check_archival_status(g_sal_data_rec_upd(i).source_id,'IN_24QC_PERSON',NULL,'NA');
5939 l_flag2 := check_archival_status(g_sal_data_rec_upd(i).source_id,'IN_24QC_PERSON',NULL,'D');
5940
5941 pay_in_utils.trace('l_flag in g_count_sal_update : ', l_flag );
5942 pay_in_utils.trace('l_flag1 in g_count_sal_update : ', l_flag1 );
5943 pay_in_utils.trace('l_flag2 in g_count_sal_update : ', l_flag2 );
5944
5945
5946 IF ((l_flag = 0) AND (l_flag1 = 0) )
5947 THEN
5948 pay_in_utils.set_location(g_debug,'Updated Asg Action Not Archived. hence doing '||g_sal_data_rec_upd(i).source_id,1);
5949
5950 pay_in_utils.set_location(g_debug,'Fetching balances...',2);
5951
5952 get_balance_values
5953 (
5954 g_sal_data_rec_upd(i).source_id
5955 ,g_sal_data_rec_upd(i).last_action_context_id
5956 ,g_sal_data_rec_upd(i).assignment_id
5957 ,p_24qa_pay_act_id
5958 ,'U'
5959 ,tab_liv_ba_data
5960 ,tab_24q_ba_data
5961 ,tab_liv_pe_data
5962 ,tab_24q_pe_data
5963 ,l_gre_count
5964 );
5965
5966
5967 pay_in_utils.set_location(g_debug,'Fetched balances...',2);
5968 pay_in_utils.set_location(g_debug,'Fetching Archival Assignment Action ID...',2);
5969 pay_in_utils.set_location(g_debug,'Asg ID' || g_sal_data_rec_upd(i).assignment_id ,2);
5970 pay_in_utils.set_location(g_debug,'Payroll Action id is ' || p_payroll_action_id ,2);
5971
5972 OPEN c_asg_act_id(p_payroll_action_id,g_sal_data_rec_upd(i).assignment_id);
5973 FETCH c_asg_act_id INTO l_arch_asg_action_id;
5974 CLOSE c_asg_act_id;
5975
5976 pay_in_utils.set_location(g_debug,'Archival Assignment Action ID is :'|| l_arch_asg_action_id ,2);
5977
5978 -- if g_correction_mode = 'C5' and tab_24q_pe_data.pan_number IS VALID and
5979 -- tab_liv_pe_data.pan_number is also valid and not equal 2 each other
5980 -- then not only arhcive this assignment data, but also last organization PA data
5981
5982 pay_in_utils.trace('tab_liv_pe_data.pan_number : ', tab_liv_pe_data.pan_number );
5983 pay_in_utils.trace('tab_24q_pe_data.pan_number : ', tab_24q_pe_data.pan_number );
5984
5985 IF ((g_correction_mode IN('C4','C5','%'))
5986 AND(tab_24q_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
5987 AND(tab_liv_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
5988 AND(tab_24q_pe_data.pan_number <> tab_liv_pe_data.pan_number)
5989 )
5990 THEN
5991 l_action_information_category := 'C4:C5';
5992 ELSE
5993 l_action_information_category := 'C4';
5994 END IF;
5995
5996 OPEN c_salary_number_24qc(tab_liv_pe_data.person_id,g_sal_data_rec_upd(i).source_id);
5997 FETCH c_salary_number_24qc INTO k;
5998 CLOSE c_salary_number_24qc;
5999
6000 OPEN c_salary_number_24q(tab_liv_pe_data.person_id,g_sal_data_rec_upd(i).source_id);
6001 FETCH c_salary_number_24q INTO j;
6002 CLOSE c_salary_number_24q;
6003
6004 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
6005 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
6006
6007 l_c5_change_only := TRUE;
6008 pay_in_utils.trace('Count of live balances : ', tab_liv_ba_data.COUNT );
6009 pay_in_utils.trace('Count of 24q balances : ', tab_24q_ba_data.COUNT );
6010
6011 FOR j IN 1..tab_liv_ba_data.COUNT
6012 LOOP
6013 FOR k IN 1..tab_24q_ba_data.COUNT
6014 LOOP
6015
6016 IF (tab_liv_ba_data(j).balance_name = tab_24q_ba_data(k).balance_name)
6017 THEN
6018 IF ((tab_liv_ba_data(j).balance_value <> 0) AND
6019 (tab_liv_ba_data(j).balance_value <> tab_24q_ba_data(k).balance_value) AND
6020 (tab_liv_ba_data(j).balance_name NOT IN ('F16 Deductions Sec 80CCE'))
6021 )
6022 THEN
6023 l_c5_change_only := FALSE;
6024 END IF;
6025 END IF;
6026
6027 END LOOP;
6028 END LOOP;
6029
6030 l_future_pay := TRUE;
6031
6032 OPEN c_max_pact(g_sal_data_rec_upd(i).assignment_id);
6033 FETCH c_max_pact INTO l_max_pact,l_assignment_id;
6034 CLOSE c_max_pact;
6035
6036 IF ((g_sal_data_rec_upd(i).source_id < l_max_pact) AND (l_gre_count <= 2))
6037 THEN
6038 l_future_pay := FALSE;
6039 END IF;
6040
6041 pay_in_utils.trace('Update Source_id :',g_sal_data_rec_upd(i).source_id);
6042 pay_in_utils.trace('l_max_pact ',l_max_pact);
6043 pay_in_utils.trace('l_gre_count in g_count_sal_update: ',l_gre_count);
6044
6045 IF (INSTR(l_action_information_category,'C5')<> 0) AND (g_correction_mode IN ('%','C5') AND (l_flag1=0) AND (l_future_pay=TRUE))
6046 THEN
6047
6048 pay_action_information_api.create_action_information
6049 (p_action_context_id => l_arch_asg_action_id
6050 ,p_action_context_type => 'AAP'
6051 ,p_action_information_category => 'IN_24QC_PERSON'
6052 ,p_source_id => g_sal_data_rec_upd(i).source_id
6053 ,p_assignment_id => g_sal_data_rec_upd(i).assignment_id
6054 ,p_action_information1 => tab_liv_pe_data.person_id
6055 ,p_action_information2 => g_year||g_quarter
6056 ,p_action_information3 => g_gre_id
6057 ,p_action_information4 => tab_liv_pe_data.pan_number
6058 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
6059 ,p_action_information6 => tab_liv_pe_data.full_name
6060 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
6061 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
6062 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
6063 ,p_action_information10 => 'NA'
6064 ,p_action_information11 => 'C5'
6065 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0))
6066 ,p_action_information_id => l_action_info_id
6067 ,p_object_version_number => l_ovn
6068 );
6069
6070 FOR l IN 1..tab_24q_ba_data.COUNT
6071 LOOP
6072
6073 IF ((tab_24q_ba_data(l).balance_name IN ('F16 Gross Total Income')) AND
6074 (tab_24q_ba_data(l).balance_value <> 0)
6075 )
6076 THEN
6077
6078 pay_action_information_api.create_action_information
6079 (p_action_context_id => l_arch_asg_action_id
6080 ,p_action_context_type => 'AAP'
6081 ,p_action_information_category => 'IN_24QC_SALARY'
6082 ,p_source_id => g_sal_data_rec_upd(i).source_id
6083 ,p_action_information1 => 'Prev F16 Gross Total Income'
6084 ,p_action_information2 => tab_24q_ba_data(l).balance_value
6085 ,p_action_information_id => l_action_info_id
6086 ,p_object_version_number => l_ovn
6087 );
6088 l_c5_tot_income_flag := TRUE;
6089 END IF;
6090 END LOOP;
6091
6092 END IF;
6093
6094 IF (INSTR(l_action_information_category,'C4')<> 0) AND (g_correction_mode IN ('%','C4'))
6095 AND (l_c5_change_only=FALSE) AND (g_quarter IN ('Q4') AND (l_flag2 = 0))
6096 THEN
6097
6098 pay_action_information_api.create_action_information
6099 (p_action_context_id => l_arch_asg_action_id
6100 ,p_action_context_type => 'AAP'
6101 ,p_action_information_category => 'IN_24QC_PERSON'
6102 ,p_source_id => g_sal_data_rec_upd(i).source_id
6103 ,p_assignment_id => g_sal_data_rec_upd(i).assignment_id
6104 ,p_action_information1 => tab_liv_pe_data.person_id
6105 ,p_action_information2 => g_year||g_quarter
6106 ,p_action_information3 => g_gre_id
6107 ,p_action_information4 => tab_liv_pe_data.pan_number
6108 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
6109 ,p_action_information6 => tab_liv_pe_data.full_name
6110 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
6111 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
6112 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
6113 ,p_action_information10 => 'D'
6114 ,p_action_information11 => 'C4'
6115 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0))
6116 ,p_action_information_id => l_action_info_id
6117 ,p_object_version_number => l_ovn
6118 );
6119
6120 IF (l_c5_tot_income_flag=FALSE)
6121 THEN
6122 FOR l IN 1..tab_24q_ba_data.COUNT
6123 LOOP
6124
6125 IF ((tab_24q_ba_data(l).balance_name IN ('F16 Gross Total Income')) AND
6126 (tab_24q_ba_data(l).balance_value <> 0)
6127 )
6128 THEN
6129
6130 pay_action_information_api.create_action_information
6131 (p_action_context_id => l_arch_asg_action_id
6132 ,p_action_context_type => 'AAP'
6133 ,p_action_information_category => 'IN_24QC_SALARY'
6134 ,p_source_id => g_sal_data_rec_upd(i).source_id
6135 ,p_action_information1 => 'Prev F16 Gross Total Income'
6136 ,p_action_information2 => tab_24q_ba_data(l).balance_value
6137 ,p_action_information_id => l_action_info_id
6138 ,p_object_version_number => l_ovn
6139 );
6140 END IF;
6141 END LOOP;
6142 END IF;
6143
6144
6145 OPEN c_asg_act_id(p_24qa_pay_act_id,g_sal_data_rec_upd(i).assignment_id);
6146 FETCH c_asg_act_id INTO l_24qa_asg_action_id;
6147 CLOSE c_asg_act_id;
6148
6149 OPEN c_24qa_source_id(l_24qa_asg_action_id,g_sal_data_rec_upd(i).assignment_id);
6150 FETCH c_24qa_source_id INTO l_24qa_source_id,l_24qa_asg_action_id;
6151 CLOSE c_24qa_source_id;
6152
6153 OPEN c_get_bal_24q(l_24qa_asg_action_id,l_24qa_source_id,'IN_24Q_SALARY','F16 Gross Total Income');
6154 FETCH c_get_bal_24q INTO l_balance_value;
6155 CLOSE c_get_bal_24q;
6156
6157 IF ((l_24qa_source_id IS NOT NULL) AND (l_balance_value <> 0)) THEN
6158 pay_action_information_api.create_action_information
6159 (p_action_context_id => l_arch_asg_action_id
6160 ,p_action_context_type => 'AAP'
6161 ,p_action_information_category => 'IN_24QC_SALARY'
6162 ,p_source_id => g_sal_data_rec_upd(i).source_id
6163 ,p_action_information1 => 'Form24Q F16 Gross Total Income'
6164 ,p_action_information2 => l_balance_value
6165 ,p_action_information_id => l_action_info_id
6166 ,p_object_version_number => l_ovn
6167 );
6168 END IF;
6169
6170 END IF;
6171
6172 j := -1;
6173 k := -1;
6174
6175 OPEN c_max_salary_number_24qc;
6176 FETCH c_max_salary_number_24qc INTO k;
6177 CLOSE c_max_salary_number_24qc;
6178
6179 OPEN c_max_salary_number_24q;
6180 FETCH c_max_salary_number_24q INTO j;
6181 CLOSE c_max_salary_number_24q;
6182
6183 pay_in_utils.set_location(g_debug,'Previous Salary Detail Record Number was:' || j, 3);
6184 pay_in_utils.set_location(g_debug,'New Salary Detail Record Number is:' || k,4);
6185
6186 IF (INSTR(l_action_information_category,'C4')<> 0)AND(g_correction_mode IN ('%','C4'))
6187 AND (l_c5_change_only=FALSE) AND (g_quarter IN ('Q4') AND (l_flag = 0))
6188 THEN
6189
6190 pay_action_information_api.create_action_information
6191 (p_action_context_id => l_arch_asg_action_id
6192 ,p_action_context_type => 'AAP'
6193 ,p_action_information_category => 'IN_24QC_PERSON'
6194 ,p_source_id => g_sal_data_rec_upd(i).source_id
6195 ,p_assignment_id => g_sal_data_rec_upd(i).assignment_id
6196 ,p_action_information1 => tab_liv_pe_data.person_id
6197 ,p_action_information2 => g_year||g_quarter
6198 ,p_action_information3 => g_gre_id
6199 ,p_action_information4 => tab_liv_pe_data.pan_number
6200 ,p_action_information5 => tab_liv_pe_data.pan_ref_number
6201 ,p_action_information6 => tab_liv_pe_data.full_name
6202 ,p_action_information7 => pay_in_24q_er_returns.get_emp_category(tab_liv_pe_data.person_id)
6203 ,p_action_information8 => fnd_date.date_to_canonical(tab_liv_pe_data.start_date)
6204 ,p_action_information9 => fnd_date.date_to_canonical(tab_liv_pe_data.end_date)
6205 ,p_action_information10 => 'A'
6206 ,p_action_information11 => 'C4'
6207 ,p_action_information12 => GREATEST(NVL(j,0),NVL(k,0)) + s
6208 ,p_action_information_id => l_action_info_id
6209 ,p_object_version_number => l_ovn
6210 );
6211
6212 FOR l IN 1..tab_liv_ba_data.COUNT
6213 LOOP
6214
6215 IF ((tab_liv_ba_data(l).balance_value <> 0) AND
6216 (tab_liv_ba_data(l).balance_name IN ('80CCE','Others'))
6217 )
6218 THEN
6219 pay_action_information_api.create_action_information
6220 (p_action_context_id => l_arch_asg_action_id
6221 ,p_action_context_type => 'AAP'
6222 ,p_action_information_category => 'IN_24QC_VIA'
6223 ,p_source_id => g_sal_data_rec_upd(i).source_id
6224 ,p_action_information1 => tab_liv_ba_data(l).balance_name
6225 ,p_action_information2 => tab_liv_ba_data(l).balance_value
6226 ,p_action_information3 => 0
6227 ,p_action_information_id => l_action_info_id
6228 ,p_object_version_number => l_ovn
6229 );
6230 ELSIF ((tab_liv_ba_data(l).balance_value <> 0) AND
6231 (tab_liv_ba_data(l).balance_name NOT IN ('F16 Deductions Sec 80CCE'))
6232 )
6233 THEN
6234 pay_action_information_api.create_action_information
6235 (p_action_context_id => l_arch_asg_action_id
6236 ,p_action_context_type => 'AAP'
6237 ,p_action_information_category => 'IN_24QC_SALARY'
6238 ,p_source_id => g_sal_data_rec_upd(i).source_id
6239 ,p_action_information1 => tab_liv_ba_data(l).balance_name
6240 ,p_action_information2 => tab_liv_ba_data(l).balance_value
6241 ,p_action_information_id => l_action_info_id
6242 ,p_object_version_number => l_ovn
6243 );
6244 END IF;
6245 END LOOP;
6246 s := s + 1;
6247 END IF;
6248 END IF;
6249 END LOOP;
6250
6251 END IF;
6252
6253
6254 pay_in_utils.set_location(g_debug,'Leaving '|| l_procedure, 5);
6255
6256 EXCEPTION
6257 WHEN OTHERS THEN
6258 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
6259 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
6260 END archive_salary_data;
6261
6262
6263
6264 --------------------------------------------------------------------------
6265 -- --
6266 -- Name : ARCHIVE_DEDUCTEE_DATA --
6267 -- Type : PROCEDURE --
6268 -- Access : Private --
6269 -- Description : Procedure to actually archive the data. --
6270 -- Parameters : --
6271 -- IN : --
6272 -- --
6273 -- OUT : N/A --
6274 -- --
6275 -- Change History : --
6276 --------------------------------------------------------------------------
6277 -- Rev# Date Userid Description --
6278 --------------------------------------------------------------------------
6279 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
6280 --------------------------------------------------------------------------
6281 PROCEDURE archive_deductee_data(p_payroll_action_id NUMBER
6282 ,p_24qa_pay_act_id NUMBER
6283 )
6284 IS
6285 CURSOR c_c5_correction_type_details(p_last_arc_asg_action_id NUMBER)
6286 IS
6287 SELECT pai.action_information_category
6288 ,pai.action_context_id
6289 FROM pay_action_information pai
6290 ,pay_assignment_actions paa
6291 WHERE paa.assignment_action_id = p_last_arc_asg_action_id
6292 AND pai.action_context_id = paa.payroll_action_id
6293 AND pai.action_context_type = 'PA'
6294 ORDER BY pai.action_context_id DESC;
6295
6296 CURSOR c_deductee_number_24q(p_challan_number VARCHAR2
6297 ,p_element_entry_id NUMBER
6298 )
6299 IS
6300 SELECT action_information25
6301 FROM pay_action_information pai
6302 ,pay_assignment_actions paa
6303 WHERE pai.action_information_category = 'IN_24Q_DEDUCTEE'
6304 AND pai.action_information3 = g_gre_id
6305 AND pai.action_information1 = p_challan_number
6306 AND pai.action_context_id = paa.assignment_action_id
6307 AND paa.payroll_action_id = p_24qa_pay_act_id
6308 AND pai.source_id = p_element_entry_id;
6309
6310 CURSOR c_deductee_number_24qc(p_challan_number VARCHAR2
6311 ,p_element_entry_id NUMBER
6312 )
6313 IS
6314 SELECT action_information25
6315 FROM pay_action_information pai
6316 ,pay_assignment_actions paa
6317 ,pay_action_interlocks locks
6318 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
6319 AND pai.action_information3 = g_gre_id
6320 AND pai.action_information2 = g_year||g_quarter
6321 AND pai.action_information1 = p_challan_number
6322 AND locks.locking_action_id = pai.action_context_id
6323 AND locks.locked_action_id = paa.assignment_action_id
6324 AND paa.payroll_action_id = p_24qa_pay_act_id
6325 AND pai.source_id = p_element_entry_id;
6326
6327
6328 CURSOR c_max_challan_number_24qc(p_challan_number VARCHAR2)
6329 IS
6330 SELECT MAX(TO_NUMBER(action_information25))
6331 FROM pay_action_information pai
6332 ,pay_assignment_actions paa
6333 ,pay_action_interlocks locks
6334 ,pay_assignment_actions paa_master
6335 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
6336 AND pai.action_information3 = g_gre_id
6337 AND pai.action_information2 = g_year||g_quarter
6338 AND pai.action_information1 = p_challan_number
6339 AND locks.locking_action_id = pai.action_context_id
6340 AND locks.locked_action_id = paa.assignment_action_id
6341 AND paa.payroll_action_id = p_24qa_pay_act_id
6342 AND paa_master.assignment_action_id = pai.action_context_id
6343 AND paa_master.payroll_action_id IN(
6344 SELECT org_information3
6345 FROM hr_organization_information
6346 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
6347 AND organization_id = g_gre_id
6348 AND org_information1 = g_year
6349 AND org_information2 = g_quarter
6350 AND org_information5 = 'A'
6351 AND org_information6 = 'C'
6352 );
6353
6354 CURSOR c_max_challan_number_24q(p_challan_number VARCHAR2)
6355 IS
6356 SELECT MAX(TO_NUMBER(action_information25))
6357 FROM pay_action_information pai
6358 ,pay_assignment_actions paa
6359 WHERE pai.action_information_category = 'IN_24Q_DEDUCTEE'
6360 AND pai.action_information3 = g_gre_id
6361 AND pai.action_information1 = p_challan_number
6362 AND pai.action_context_id = paa.assignment_action_id
6363 AND paa.payroll_action_id = p_24qa_pay_act_id
6364 AND paa.payroll_action_id IN(
6365 SELECT org_information3
6366 FROM hr_organization_information
6367 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
6368 AND organization_id = g_gre_id
6369 AND org_information1 = g_year
6370 AND org_information2 = g_quarter
6371 AND org_information5 = 'A'
6372 AND org_information6 = 'O'
6373 );
6374
6375 CURSOR c_asg_act_id(p_assignment_id NUMBER)
6376 IS
6377 SELECT assignment_action_id
6378 FROM pay_assignment_actions
6379 WHERE payroll_action_id = p_payroll_action_id
6380 AND assignment_id = p_assignment_id;
6381
6382 tab_24q_ee_data t_screen_entry_value_rec;
6383 tab_liv_ee_data t_screen_entry_value_rec;
6384 tab_24q_pe_data t_person_data_rec;
6385 tab_liv_pe_data t_person_data_rec;
6386
6387 l_action_information_category pay_action_information.action_information_category%TYPE;
6388 l_action_context_id NUMBER;
6389 l_deductee_detail NUMBER;
6390 l_arch_asg_action_id NUMBER;
6391 l_action_info_id NUMBER;
6392 l_ovn NUMBER;
6393 j NUMBER;
6394 k NUMBER;
6395 s NUMBER;
6396 l_dummy NUMBER := -1;
6397 l_flag NUMBER := -1;
6398 l_c5_change BOOLEAN;
6399 l_category pay_action_information.action_information_category%TYPE;
6400 l_procedure VARCHAR2(250);
6401 l_message VARCHAR2(250);
6402 BEGIN
6403 g_debug := hr_utility.debug_enabled;
6404 l_procedure := g_package ||'.archive_deductee_data';
6405 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
6406 pay_in_utils.set_location(g_debug,'Fetching Deductee Data ', 1);
6407 pay_in_utils.set_location(g_debug,'Value of g_count_ee_delete : '|| g_count_ee_delete, 1);
6408 IF (g_correction_mode <> 'C9')
6409 THEN
6410 FOR i IN 1..g_count_ee_delete - 1
6411 LOOP
6412
6413 pay_in_utils.set_location(g_debug,'Checking archived presence of this deleted ee',1);
6414 l_flag := -1;
6415
6416 l_flag := check_archival_status(g_ee_data_rec_del(i).element_entry_id,'IN_24QC_DEDUCTEE',NULL,'D');
6417 IF (l_flag = 0)
6418 THEN
6419 pay_in_utils.set_location(g_debug,'Deleted EE Not Archived. hence doing '||g_ee_data_rec_del(i).element_entry_id,1);
6420
6421 get_element_entry_values
6422 (
6423 g_ee_data_rec_del(i).element_entry_id
6424 ,g_ee_data_rec_del(i).last_action_context_id
6425 ,g_ee_data_rec_del(i).assignment_id
6426 ,tab_liv_ee_data
6427 ,tab_24q_ee_data
6428 ,tab_liv_pe_data
6429 ,tab_24q_pe_data
6430 );
6431
6432 -- if g_correction_mode = 'C5' and tab_24q_pe_data.pan_number IS VALID and
6433 -- tab_liv_pe_data.pan_number is also valid and not equal 2 each other
6434 -- then not only arhcive this assignment data, but also last organization PA data
6435
6436 IF ((g_correction_mode IN('C3','C5','%'))
6437 AND(tab_24q_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
6438 AND(tab_liv_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
6439 AND(tab_24q_pe_data.pan_number <> tab_liv_pe_data.pan_number)
6440 )
6441 THEN
6442 l_action_information_category := 'C3:C5';
6443 l_action_context_id := -1;
6444 ELSE
6445 l_action_information_category := 'C3';
6446 l_action_context_id := -1;
6447 END IF;
6448
6449 OPEN c_asg_act_id(g_ee_data_rec_del(i).assignment_id);
6450 FETCH c_asg_act_id INTO l_arch_asg_action_id;
6451 CLOSE c_asg_act_id;
6452
6453 OPEN c_deductee_number_24qc(tab_24q_ee_data.challan_number,g_ee_data_rec_del(i).element_entry_id);
6454 FETCH c_deductee_number_24qc INTO k;
6455 CLOSE c_deductee_number_24qc;
6456
6457 OPEN c_deductee_number_24q(tab_24q_ee_data.challan_number,g_ee_data_rec_del(i).element_entry_id);
6458 FETCH c_deductee_number_24q INTO j;
6459 CLOSE c_deductee_number_24q;
6460
6461 pay_in_utils.set_location(g_debug,'Previous Challan Deductee Record Number was:' || j, 3);
6462 pay_in_utils.set_location(g_debug,'New Challan Deductee Record Number is:' || k,4);
6463
6464 IF (INSTR(l_action_information_category,'C5')<> 0)AND(g_correction_mode IN ('%','C5'))
6465 THEN
6466 l_category := SUBSTR(l_action_information_category
6467 ,1
6468 ,INSTR(l_action_information_category,'G')
6469 );
6470 l_category := l_category || 'C5';
6471
6472 pay_action_information_api.create_action_information
6473 (p_action_context_id => l_arch_asg_action_id
6474 ,p_action_context_type => 'AAP'
6475 ,p_action_information_category => 'IN_24QC_DEDUCTEE'
6476 ,p_source_id => g_ee_data_rec_del(i).element_entry_id
6477 ,p_assignment_id => g_ee_data_rec_del(i).assignment_id
6478 ,p_action_information1 => tab_24q_ee_data.challan_number
6479 ,p_action_information2 => g_year||g_quarter
6480 ,p_action_information3 => g_gre_id
6481 ,p_action_information4 => tab_24q_ee_data.payment_date
6482 ,p_action_information5 => tab_24q_ee_data.taxable_income
6483 ,p_action_information6 => tab_24q_ee_data.income_tax
6484 ,p_action_information7 => tab_24q_ee_data.surcharge
6485 ,p_action_information8 => tab_24q_ee_data.education_cess
6486 ,p_action_information9 => tab_liv_pe_data.pan_number
6487 ,p_action_information10 => tab_liv_pe_data.full_name
6488 ,p_action_information11 => tab_liv_pe_data.pan_ref_number
6489 ,p_action_information12 => tab_liv_pe_data.person_id
6490 ,p_action_information13 => tab_24q_pe_data.pan_number
6491 ,p_action_information14 => tab_24q_pe_data.pan_ref_number
6492 ,p_action_information15 => 'D'
6493 ,p_action_information16 => tab_24q_ee_data.amount_deposited
6494 ,p_action_information17 => NVL(tab_24q_ee_data.income_tax,0) + NVL(tab_24q_ee_data.surcharge,0) + NVL(tab_24q_ee_data.education_cess,0)
6495 ,p_action_information18 => tab_liv_pe_data.tax_rate
6496 ,p_action_information19 => l_category
6497 ,p_action_information20 => l_action_context_id
6498 ,p_action_information21 => tab_24q_ee_data.income_tax
6499 ,p_action_information22 => tab_24q_ee_data.surcharge
6500 ,p_action_information23 => tab_24q_ee_data.education_cess
6501 ,p_action_information24 => tab_24q_ee_data.amount_deposited
6502 ,p_action_information25 => GREATEST(NVL(j,0),NVL(k,0))
6503 ,p_action_information_id => l_action_info_id
6504 ,p_object_version_number => l_ovn
6505 );
6506 END IF;
6507
6508 IF (INSTR(l_action_information_category,'C3')<> 0)AND(g_correction_mode IN ('%','C3'))
6509 THEN
6510 l_category := SUBSTR(l_action_information_category
6511 ,1
6512 ,INSTR(l_action_information_category,'G')
6513 );
6514 l_category := l_category || 'C3';
6515
6516 pay_action_information_api.create_action_information
6517 (p_action_context_id => l_arch_asg_action_id
6518 ,p_action_context_type => 'AAP'
6519 ,p_action_information_category => 'IN_24QC_DEDUCTEE'
6520 ,p_source_id => g_ee_data_rec_del(i).element_entry_id
6521 ,p_assignment_id => g_ee_data_rec_del(i).assignment_id
6522 ,p_action_information1 => tab_24q_ee_data.challan_number
6523 ,p_action_information2 => g_year||g_quarter
6524 ,p_action_information3 => g_gre_id
6525 ,p_action_information4 => tab_24q_ee_data.payment_date
6526 ,p_action_information5 => tab_24q_ee_data.taxable_income
6527 ,p_action_information6 => tab_24q_ee_data.income_tax
6528 ,p_action_information7 => tab_24q_ee_data.surcharge
6529 ,p_action_information8 => tab_24q_ee_data.education_cess
6530 ,p_action_information9 => tab_liv_pe_data.pan_number
6531 ,p_action_information10 => tab_liv_pe_data.full_name
6532 ,p_action_information11 => tab_liv_pe_data.pan_ref_number
6533 ,p_action_information12 => tab_liv_pe_data.person_id
6534 ,p_action_information13 => tab_24q_pe_data.pan_number
6535 ,p_action_information14 => tab_24q_pe_data.pan_ref_number
6536 ,p_action_information15 => 'D'
6537 ,p_action_information16 => tab_24q_ee_data.amount_deposited
6538 ,p_action_information17 => NVL(tab_24q_ee_data.income_tax,0) + NVL(tab_24q_ee_data.surcharge,0) + NVL(tab_24q_ee_data.education_cess,0)
6539 ,p_action_information18 => tab_liv_pe_data.tax_rate
6540 ,p_action_information19 => l_category
6541 ,p_action_information20 => l_action_context_id
6542 ,p_action_information21 => tab_24q_ee_data.income_tax
6543 ,p_action_information22 => tab_24q_ee_data.surcharge
6544 ,p_action_information23 => tab_24q_ee_data.education_cess
6545 ,p_action_information24 => tab_24q_ee_data.amount_deposited
6546 ,p_action_information25 => GREATEST(NVL(j,0),NVL(k,0))
6547 ,p_action_information_id => l_action_info_id
6548 ,p_object_version_number => l_ovn
6549 );
6550 END IF;
6551 END IF;
6552 END LOOP;
6553 END IF;
6554 IF (g_correction_mode <> 'C5')
6555 THEN
6556 pay_in_utils.set_location(g_debug,'Value of g_count_ee_addition : '|| g_count_ee_addition, 1);
6557 FOR i IN 1..g_count_ee_addition - 1
6558 LOOP
6559
6560 pay_in_utils.set_location(g_debug,'Checking archived presence of this added ee',1);
6561 l_flag := -1;
6562
6563 l_flag := check_archival_status(g_ee_data_rec_add(i).element_entry_id,'IN_24QC_DEDUCTEE',NULL,'A');
6564 IF (l_flag = 0)
6565 THEN
6566 pay_in_utils.set_location(g_debug,'Added EE Not Archived. hence doing '||g_ee_data_rec_add(i).element_entry_id,1);
6567
6568 IF (l_dummy <> pay_in_utils.get_ee_value(g_ee_data_rec_add(i).element_entry_id,'Challan or Voucher Number'))
6569 THEN
6570 s := 1;
6571 l_dummy := pay_in_utils.get_ee_value(g_ee_data_rec_add(i).element_entry_id,'Challan or Voucher Number');
6572 END IF;
6573
6574 pay_in_utils.set_location(g_debug,'Fetching element entry data ', 1);
6575 pay_in_utils.set_location(g_debug,'For Element Entry ID : '|| g_ee_data_rec_add(i).element_entry_id,1);
6576 pay_in_utils.set_location(g_debug,'Calling....get_element_entry_values ',1);
6577 pay_in_utils.set_location(g_debug,'Assignment Action id is ' || g_ee_data_rec_add(i).last_action_context_id ,2);
6578 pay_in_utils.set_location(g_debug,'Assignment id is ' || g_ee_data_rec_add(i).assignment_id,3);
6579 get_element_entry_values
6580 (
6581 g_ee_data_rec_add(i).element_entry_id
6582 ,g_ee_data_rec_add(i).last_action_context_id
6583 ,g_ee_data_rec_add(i).assignment_id
6584 ,tab_liv_ee_data
6585 ,tab_24q_ee_data
6586 ,tab_liv_pe_data
6587 ,tab_24q_pe_data
6588 );
6589 pay_in_utils.set_location(g_debug,'Called....get_element_entry_values ',1);
6590 pay_in_utils.set_location(g_debug,'Fetched element entry data ', 1);
6591
6592 OPEN c_asg_act_id(g_ee_data_rec_add(i).assignment_id);
6593 FETCH c_asg_act_id INTO l_arch_asg_action_id;
6594 CLOSE c_asg_act_id;
6595
6596 j := -1;
6597 k := -1;
6598 pay_in_utils.set_location(g_debug,'Value of p_24qa_pay_act_id is ' || p_24qa_pay_act_id ,1);
6599 pay_in_utils.set_location(g_debug,'Checking Challan Deductee Number in 24Q for ' || tab_liv_ee_data.challan_number,1);
6600 OPEN c_max_challan_number_24q(tab_liv_ee_data.challan_number);
6601 FETCH c_max_challan_number_24q INTO k;
6602 CLOSE c_max_challan_number_24q;
6603 pay_in_utils.set_location(g_debug,'Number found is ' || k, 2);
6604 pay_in_utils.set_location(g_debug,'Checking Challan Deductee Number in 24QC for ' || tab_liv_ee_data.challan_number,1);
6605 OPEN c_max_challan_number_24qc(tab_liv_ee_data.challan_number);
6606 FETCH c_max_challan_number_24qc INTO j;
6607 CLOSE c_max_challan_number_24qc;
6608 pay_in_utils.set_location(g_debug,'Number found is ' || j, 2);
6609
6610 pay_action_information_api.create_action_information
6611 (p_action_context_id => l_arch_asg_action_id
6612 ,p_action_context_type => 'AAP'
6613 ,p_action_information_category => 'IN_24QC_DEDUCTEE'
6614 ,p_source_id => g_ee_data_rec_add(i).element_entry_id
6615 ,p_assignment_id => g_ee_data_rec_add(i).assignment_id
6616 ,p_action_information1 => tab_liv_ee_data.challan_number
6617 ,p_action_information2 => g_year||g_quarter
6618 ,p_action_information3 => g_gre_id
6619 ,p_action_information4 => tab_liv_ee_data.payment_date
6620 ,p_action_information5 => tab_liv_ee_data.taxable_income
6621 ,p_action_information6 => tab_liv_ee_data.income_tax
6622 ,p_action_information7 => tab_liv_ee_data.surcharge
6623 ,p_action_information8 => tab_liv_ee_data.education_cess
6624 ,p_action_information9 => tab_liv_pe_data.pan_number
6625 ,p_action_information10 => tab_liv_pe_data.full_name
6626 ,p_action_information11 => tab_liv_pe_data.pan_ref_number
6627 ,p_action_information12 => tab_liv_pe_data.person_id
6628 ,p_action_information13 => NULL
6629 ,p_action_information14 => NULL
6630 ,p_action_information15 => 'A'
6631 ,p_action_information16 => tab_liv_ee_data.amount_deposited
6632 ,p_action_information17 => NULL
6633 ,p_action_information18 => tab_liv_pe_data.tax_rate
6634 ,p_action_information19 => NULL
6635 ,p_action_information20 => NULL
6636 ,p_action_information21 => tab_24q_ee_data.income_tax
6637 ,p_action_information22 => tab_24q_ee_data.surcharge
6638 ,p_action_information23 => tab_24q_ee_data.education_cess
6639 ,p_action_information24 => tab_24q_ee_data.amount_deposited
6640 ,p_action_information25 => GREATEST(NVL(j,0),NVL(k,0))+ s
6641 ,p_action_information_id => l_action_info_id
6642 ,p_object_version_number => l_ovn
6643 );
6644 s := s + 1;
6645 END IF;
6646 END LOOP;
6647 END IF;
6648 pay_in_utils.set_location(g_debug,'Value of g_count_ee_update : '|| g_count_ee_update, 1);
6649 FOR i IN 1..g_count_ee_update - 1
6650 LOOP
6651 pay_in_utils.set_location(g_debug,'Checking archived presence of this updated ee',1);
6652 l_flag := -1;
6653
6654 l_flag := check_archival_status(g_ee_data_rec_upd(i).element_entry_id,'IN_24QC_DEDUCTEE',NULL,'U');
6655 IF (l_flag = 0)
6656 THEN
6657 pay_in_utils.set_location(g_debug,'Updated EE Not Archived. hence doing '||g_ee_data_rec_upd(i).element_entry_id,1);
6658
6659 pay_in_utils.set_location(g_debug,'Fetching element entries...',2);
6660 get_element_entry_values
6661 (
6662 g_ee_data_rec_upd(i).element_entry_id
6663 ,g_ee_data_rec_upd(i).last_action_context_id
6664 ,g_ee_data_rec_upd(i).assignment_id
6665 ,tab_liv_ee_data
6666 ,tab_24q_ee_data
6667 ,tab_liv_pe_data
6668 ,tab_24q_pe_data
6669 );
6670
6671 pay_in_utils.set_location(g_debug,'Fetched element entries...',2);
6672 pay_in_utils.set_location(g_debug,'Fetching Archival Assignment Action ID...',2);
6673 pay_in_utils.set_location(g_debug,'Asg ID' || g_ee_data_rec_upd(i).assignment_id ,1);
6674 pay_in_utils.set_location(g_debug,'Payroll Action id is ' || p_payroll_action_id ,1);
6675
6676 OPEN c_asg_act_id(g_ee_data_rec_upd(i).assignment_id);
6677 FETCH c_asg_act_id INTO l_arch_asg_action_id;
6678 CLOSE c_asg_act_id;
6679
6680 pay_in_utils.set_location(g_debug,'Archival Assignment Action ID is :'|| l_arch_asg_action_id ,2);
6681
6682 OPEN c_deductee_number_24qc(tab_24q_ee_data.challan_number,g_ee_data_rec_upd(i).element_entry_id);
6683 FETCH c_deductee_number_24qc INTO k;
6684 CLOSE c_deductee_number_24qc;
6685
6686 OPEN c_deductee_number_24q(tab_24q_ee_data.challan_number,g_ee_data_rec_upd(i).element_entry_id);
6687 FETCH c_deductee_number_24q INTO j;
6688 CLOSE c_deductee_number_24q;
6689
6690 pay_in_utils.set_location(g_debug,'Previous Challan Deductee Record Number was:' || j, 3);
6691
6692 pay_in_utils.set_location(g_debug,'New Challan Deductee Record Number is:' || k,4);
6693 -- if g_correction_mode = 'C5' and tab_24q_pe_data.pan_number IS VALID and
6694 -- tab_liv_pe_data.pan_number is also valid and not equal 2 each other
6695 -- then not only arhcive this assignment data, but also last organization PA data
6696
6697 IF ((g_correction_mode IN('C3','C5','%'))
6698 AND(tab_24q_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
6699 AND(tab_liv_pe_data.pan_number NOT IN ('APPLIEDFOR','PANNOTAVBL'))
6700 AND(tab_24q_pe_data.pan_number <> tab_liv_pe_data.pan_number)
6701 )
6702 THEN
6703 OPEN c_c5_correction_type_details(g_ee_data_rec_upd(i).last_action_context_id);
6704 FETCH c_c5_correction_type_details INTO l_action_information_category,l_action_context_id;
6705 CLOSE c_c5_correction_type_details;
6706
6707 pay_in_utils.set_location(g_debug,'C5 Change Found!!!',1);
6708 pay_in_utils.set_location(g_debug,'Checking C5 Change only',2);
6709 pay_in_utils.set_location(g_debug,'EE ID '|| g_ee_data_rec_upd(i).element_entry_id,1);
6710 pay_in_utils.set_location(g_debug,'Asg id '|| g_ee_data_rec_upd(i).assignment_id,2);
6711 pay_in_utils.set_location(g_debug,'Act cntxt id '|| g_ee_data_rec_upd(i).last_action_context_id,3);
6712
6713 l_c5_change := check_c5_change_only(g_ee_data_rec_upd(i).element_entry_id
6714 ,g_ee_data_rec_upd(i).last_action_context_id
6715 ,g_ee_data_rec_upd(i).assignment_id
6716 );
6717 IF (l_c5_change)
6718 THEN
6719 IF (g_correction_mode IN ('%','C5'))
6720 THEN
6721 pay_in_utils.set_location(g_debug,'Only C5 Change!!!',3);
6722 l_action_information_category := l_action_information_category || ':C5';
6723 END IF;
6724 ELSIF g_correction_mode = '%'
6725 THEN
6726 pay_in_utils.set_location(g_debug,'C3 and C5 Change is there!',4);
6727 l_action_information_category := l_action_information_category || ':C3:C5';
6728 ELSIF g_correction_mode = 'C5'
6729 THEN
6730 l_action_information_category := l_action_information_category || ':C5';
6731 ELSE
6732 l_action_information_category := l_action_information_category || ':C3';
6733 END IF;
6734 ELSE
6735 l_action_information_category := 'C3';
6736 l_action_context_id := NULL;
6737 END IF;
6738
6739 pay_in_utils.set_location(g_debug,'l_action_information_category is '|| l_action_information_category,1);
6740
6741 IF (INSTR(l_action_information_category,'C5')<> 0)AND(g_correction_mode IN ('%','C5'))
6742 THEN
6743 pay_in_utils.set_location(g_debug,'Archiving C5 data for this deductee',1);
6744 l_category := SUBSTR(l_action_information_category
6745 ,1
6746 ,INSTR(l_action_information_category,'G')
6747 );
6748 l_category := l_category || 'C5';
6749
6750 pay_action_information_api.create_action_information
6751 (p_action_context_id => l_arch_asg_action_id
6752 ,p_action_context_type => 'AAP'
6753 ,p_action_information_category => 'IN_24QC_DEDUCTEE'
6754 ,p_source_id => g_ee_data_rec_upd(i).element_entry_id
6755 ,p_assignment_id => g_ee_data_rec_upd(i).assignment_id
6756 ,p_action_information1 => tab_24q_ee_data.challan_number
6757 ,p_action_information2 => g_year||g_quarter
6758 ,p_action_information3 => g_gre_id
6759 ,p_action_information4 => tab_24q_ee_data.payment_date
6760 ,p_action_information5 => tab_24q_ee_data.taxable_income
6761 ,p_action_information6 => tab_24q_ee_data.income_tax
6762 ,p_action_information7 => tab_24q_ee_data.surcharge
6763 ,p_action_information8 => tab_24q_ee_data.education_cess
6764 ,p_action_information9 => tab_liv_pe_data.pan_number
6765 ,p_action_information10 => tab_liv_pe_data.full_name
6766 ,p_action_information11 => tab_liv_pe_data.pan_ref_number
6767 ,p_action_information12 => tab_liv_pe_data.person_id
6768 ,p_action_information13 => tab_24q_pe_data.pan_number
6769 ,p_action_information14 => tab_24q_pe_data.pan_ref_number
6770 ,p_action_information15 => 'U'
6771 ,p_action_information16 => tab_24q_ee_data.amount_deposited
6772 ,p_action_information17 => NVL(tab_24q_ee_data.income_tax,0) + NVL(tab_24q_ee_data.surcharge,0) + NVL(tab_24q_ee_data.education_cess,0)
6773 ,p_action_information18 => tab_liv_pe_data.tax_rate
6774 ,p_action_information19 => l_category
6775 ,p_action_information20 => l_action_context_id
6776 ,p_action_information21 => tab_24q_ee_data.income_tax
6777 ,p_action_information22 => tab_24q_ee_data.surcharge
6778 ,p_action_information23 => tab_24q_ee_data.education_cess
6779 ,p_action_information24 => tab_24q_ee_data.amount_deposited
6780 ,p_action_information25 => GREATEST(NVL(j,0),NVL(k,0))
6781 ,p_action_information_id => l_action_info_id
6782 ,p_object_version_number => l_ovn
6783 );
6784 END IF;
6785
6786 IF (INSTR(l_action_information_category,'C3')<> 0)AND(g_correction_mode IN ('%','C3'))
6787 THEN
6788 pay_in_utils.set_location(g_debug,'Archiving C3 data for this deductee',1);
6789 l_category := SUBSTR(l_action_information_category
6790 ,1
6791 ,INSTR(l_action_information_category,'G')
6792 );
6793 l_category := l_category || 'C3';
6794
6795 pay_action_information_api.create_action_information
6796 (p_action_context_id => l_arch_asg_action_id
6797 ,p_action_context_type => 'AAP'
6798 ,p_action_information_category => 'IN_24QC_DEDUCTEE'
6799 ,p_source_id => g_ee_data_rec_upd(i).element_entry_id
6800 ,p_assignment_id => g_ee_data_rec_upd(i).assignment_id
6801 ,p_action_information1 => tab_liv_ee_data.challan_number
6802 ,p_action_information2 => g_year||g_quarter
6803 ,p_action_information3 => g_gre_id
6804 ,p_action_information4 => tab_liv_ee_data.payment_date
6805 ,p_action_information5 => tab_liv_ee_data.taxable_income
6806 ,p_action_information6 => tab_liv_ee_data.income_tax
6807 ,p_action_information7 => tab_liv_ee_data.surcharge
6808 ,p_action_information8 => tab_liv_ee_data.education_cess
6809 ,p_action_information9 => tab_liv_pe_data.pan_number
6810 ,p_action_information10 => tab_liv_pe_data.full_name
6811 ,p_action_information11 => tab_liv_pe_data.pan_ref_number
6812 ,p_action_information12 => tab_liv_pe_data.person_id
6813 ,p_action_information13 => tab_24q_pe_data.pan_number
6814 ,p_action_information14 => tab_24q_pe_data.pan_ref_number
6815 ,p_action_information15 => 'U'
6816 ,p_action_information16 => tab_liv_ee_data.amount_deposited
6817 ,p_action_information17 => NVL(tab_24q_ee_data.income_tax,0) + NVL(tab_24q_ee_data.surcharge,0) + NVL(tab_24q_ee_data.education_cess,0)
6818 ,p_action_information18 => tab_liv_pe_data.tax_rate
6819 ,p_action_information19 => l_category
6820 ,p_action_information20 => l_action_context_id
6821 ,p_action_information21 => tab_24q_ee_data.income_tax
6822 ,p_action_information22 => tab_24q_ee_data.surcharge
6823 ,p_action_information23 => tab_24q_ee_data.education_cess
6824 ,p_action_information24 => tab_24q_ee_data.amount_deposited
6825 ,p_action_information25 => GREATEST(NVL(j,0),NVL(k,0))
6826 ,p_action_information_id => l_action_info_id
6827 ,p_object_version_number => l_ovn
6828 );
6829 END IF;
6830 END IF;
6831 END LOOP;
6832 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.archive_deductee_data ', 5);
6833 EXCEPTION
6834 WHEN OTHERS THEN
6835 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
6836 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
6837 END archive_deductee_data;
6838
6839 --------------------------------------------------------------------------
6840 -- --
6841 -- Name : ARCHIVE_NO_CHANGE_CHALLAN --
6842 -- Type : PROCEDURE --
6843 -- Access : Private --
6844 -- Description : Procedure to actually archive the data. --
6845 -- Parameters : --
6846 -- IN : --
6847 -- OUT : N/A --
6848 -- --
6849 -- Change History : --
6850 --------------------------------------------------------------------------
6851 -- Rev# Date Userid Description --
6852 --------------------------------------------------------------------------
6853 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
6854 --------------------------------------------------------------------------
6855 PROCEDURE archive_no_change_challan(p_24qc_pay_act_id NUMBER
6856 ,p_24qa_pay_act_id NUMBER
6857 )
6858 IS
6859 CURSOR c_latest_correction_details(p_transfer_voucher_number VARCHAR2)
6860 IS
6861 SELECT action_information13
6862 ,action_information14
6863 ,action_information17
6864 ,action_information25
6865 ,action_information_id
6866 FROM pay_action_information
6867 WHERE action_context_type = 'PA'
6868 AND action_information_category = 'IN_24QC_CHALLAN'
6869 AND action_information15 = p_24qa_pay_act_id
6870 AND action_information1 = p_transfer_voucher_number
6871 AND action_context_id IN(
6872 SELECT org_information3
6873 FROM hr_organization_information
6874 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
6875 AND organization_id = g_gre_id
6876 AND org_information1 = g_year
6877 AND org_information2 = g_quarter
6878 AND org_information5 = 'A'
6879 AND org_information6 = 'C'
6880 )
6881 ORDER BY action_information_id DESC;
6882
6883 CURSOR c_24q_details(p_transfer_voucher_number VARCHAR2)
6884 IS
6885 SELECT action_information4 bank_code
6886 ,action_information5 payment_date
6887 , NVL(action_information6,0)
6888 + NVL(action_information7,0)
6889 + NVL(action_information8,0)
6890 + NVL(action_information9,0)
6891 + NVL(action_information10,0)
6892 ,action_information25
6893 FROM pay_action_information pai
6894 WHERE pai.action_context_type = 'PA'
6895 AND pai.action_information_category = 'IN_24Q_CHALLAN'
6896 AND pai.action_context_id = p_24qa_pay_act_id
6897 AND pai.action_information1 = p_transfer_voucher_number
6898 ORDER BY action_information_id DESC;
6899
6900 CURSOR c_populate_no_change_data
6901 IS
6902 SELECT hoi.org_information3 challan_number,
6903 hoi.org_information2 transfer_voucher_date,
6904 hoi.org_information4 amount,
6905 hoi.org_information7 surcharge,
6906 hoi.org_information8 education_cess,
6907 hoi.org_information10 other,
6908 hoi.org_information9 interest,
6909 (SELECT hoi_bank.org_information4
6910 FROM hr_organization_information hoi_bank
6911 WHERE hoi_bank.organization_id = g_gre_id
6912 AND hoi_bank.org_information_context = 'PER_IN_CHALLAN_BANK'
6913 AND hoi_bank.org_information_id = hoi.org_information5
6914 ) bank_branch_code,
6915 hoi.org_information11 cheque_dd_num,
6916 hoi.org_information12 book_entry,
6917 hoi.org_information_id org_information_id
6918 FROM hr_organization_information hoi
6919 WHERE hoi.org_information_id IN
6920 (
6921 SELECT hoi.org_information_id
6922 FROM hr_organization_information hoi
6923 ,hr_organization_units hou
6924 WHERE hoi.organization_id = g_gre_id
6925 AND hoi.organization_id = hou.organization_id
6926 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
6927 AND org_information_context = 'PER_IN_IT_CHALLAN_INFO'
6928 )
6929 AND hoi.org_information13 = g_quarter
6930 AND hoi.org_information1 = g_tax_year;
6931
6932 l_flag BOOLEAN;
6933 l_action_information_id NUMBER;
6934 l_pre_bank_branch_code VARCHAR2(150);
6935 l_pre_transfer_voucher_date VARCHAR2(150);
6936 l_previous_total_amount NUMBER;
6937 l_challan_deductee_no NUMBER;
6938 l_action_info_id NUMBER;
6939 l_ovn NUMBER;
6940 l_flag_number NUMBER := -1;
6941 l_procedure VARCHAR2(250);
6942 l_message VARCHAR2(250);
6943 BEGIN
6944 g_debug := hr_utility.debug_enabled;
6945 l_procedure := g_package ||'.archive_no_change_challan';
6946 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
6947 FOR c_rec IN c_populate_no_change_data
6948 LOOP
6949 l_flag := TRUE;
6950
6951 pay_in_utils.set_location(g_debug,'Checking in Added Challans ', 1);
6952 -- Checking in Added Challans
6953 FOR i IN 1..g_count_challan_add - 1
6954 LOOP
6955 IF( (g_challan_data_add(i).transfer_voucher_number = c_rec.challan_number)
6956 OR
6957 (g_challan_data_add(i).org_information_id = c_rec.org_information_id)
6958 )
6959 THEN
6960 l_flag := FALSE;
6961 END IF;
6962 END LOOP;
6963
6964 pay_in_utils.set_location(g_debug,'Checking in Updated Challans ', 1);
6965 FOR i IN 1..g_count_challan_upd - 1
6966 LOOP
6967 IF ((g_challan_data_upd(i).transfer_voucher_number = c_rec.challan_number)
6968 OR
6969 (g_challan_data_upd(i).org_information_id = c_rec.org_information_id)
6970 )
6971 THEN
6972 l_flag := FALSE;
6973 END IF;
6974 END LOOP;
6975 --Insert Record in PL/SQL Table for no change Challans
6976 IF (l_flag)
6977 THEN
6978 g_challan_data_noc(g_count_challan_noc).transfer_voucher_number := c_rec.challan_number;
6979 g_challan_data_noc(g_count_challan_noc).transfer_voucher_date := c_rec.transfer_voucher_date;
6980 g_challan_data_noc(g_count_challan_noc).amount := c_rec.amount;
6981 g_challan_data_noc(g_count_challan_noc).surcharge := c_rec.surcharge;
6982 g_challan_data_noc(g_count_challan_noc).education_cess := c_rec.education_cess;
6983 g_challan_data_noc(g_count_challan_noc).interest := c_rec.interest;
6984 g_challan_data_noc(g_count_challan_noc).other := c_rec.other;
6985 g_challan_data_noc(g_count_challan_noc).bank_branch_code := c_rec.bank_branch_code;
6986 g_challan_data_noc(g_count_challan_noc).cheque_dd_num := c_rec.cheque_dd_num;
6987 g_challan_data_noc(g_count_challan_noc).org_information_id := c_rec.org_information_id;
6988 g_challan_data_noc(g_count_challan_noc).modes := 'NC';
6989 g_challan_data_noc(g_count_challan_noc).book_entry := c_rec.book_entry;
6990 g_count_challan_noc := g_count_challan_noc + 1;
6991 END IF;
6992 END LOOP;
6993
6994 FOR i IN 1..g_count_challan_noc - 1
6995 LOOP
6996 pay_in_utils.set_location(g_debug,'Checking Challan no change status',1);
6997 l_flag_number := -1;
6998 l_flag_number := check_archival_status(NULL,'IN_24QC_CHALLAN',g_challan_data_noc(i).transfer_voucher_number,NULL);
6999 IF (l_flag_number = 0 AND g_correction_mode <> 'C5')
7000 THEN
7001 pay_in_utils.set_location(g_debug,'Fetching details from 24Q Correction Archival',2);
7002 pay_in_utils.set_location(g_debug,'Fetching details from 24Q Correction Archival for g_challan_data_noc(i).transfer_voucher_number' || g_challan_data_noc(i).transfer_voucher_number,2);
7003 OPEN c_latest_correction_details(g_challan_data_noc(i).transfer_voucher_number);
7004 FETCH c_latest_correction_details INTO l_pre_bank_branch_code
7005 ,l_pre_transfer_voucher_date
7006 ,l_previous_total_amount
7007 ,l_challan_deductee_no
7008 ,l_action_information_id;
7009 CLOSE c_latest_correction_details;
7010 pay_in_utils.set_location(g_debug,'Fetched details from 24Q Correction Archival',2);
7011 pay_in_utils.set_location(g_debug,'l_pre_bank_branch_code '|| l_pre_bank_branch_code ,3);
7012 pay_in_utils.set_location(g_debug,'l_pre_transfer_voucher_date '|| l_pre_transfer_voucher_date ,3);
7013 pay_in_utils.set_location(g_debug,'l_previous_total_amount '|| l_previous_total_amount ,3);
7014 pay_in_utils.set_location(g_debug,'l_challan_deductee_no '|| l_challan_deductee_no ,3);
7015 pay_in_utils.set_location(g_debug,'l_action_information_id '|| l_action_information_id ,3);
7016
7017
7018 IF (l_action_information_id IS NULL)
7019 THEN
7020 pay_in_utils.set_location(g_debug,'Fetching details from 24Q Archival',2);
7021 pay_in_utils.set_location(g_debug,'Fetching details from 24Q Correction Archival for g_challan_data_noc(i).transfer_voucher_number' || g_challan_data_noc(i).transfer_voucher_number,2);
7022 OPEN c_24q_details(g_challan_data_noc(i).transfer_voucher_number);
7023 FETCH c_24q_details INTO l_pre_bank_branch_code
7024 ,l_pre_transfer_voucher_date
7025 ,l_previous_total_amount
7026 ,l_challan_deductee_no;
7027 CLOSE c_24q_details;
7028 pay_in_utils.set_location(g_debug,'Fetched details from 24Q Correction Archival',2);
7029 pay_in_utils.set_location(g_debug,'l_pre_bank_branch_code '|| l_pre_bank_branch_code ,3);
7030 pay_in_utils.set_location(g_debug,'l_pre_transfer_voucher_date '|| l_pre_transfer_voucher_date ,3);
7031 pay_in_utils.set_location(g_debug,'l_previous_total_amount '|| l_previous_total_amount ,3);
7032 pay_in_utils.set_location(g_debug,'l_challan_deductee_no '|| l_challan_deductee_no ,3);
7033 pay_in_utils.set_location(g_debug,'l_action_information_id '|| l_action_information_id ,3);
7034 END IF;
7035 -- Now Archive these details
7036 pay_action_information_api.create_action_information
7037 (p_action_context_id => p_24qc_pay_act_id
7038 ,p_action_context_type => 'PA'
7039 ,p_action_information_category => 'IN_24QC_CHALLAN'
7040 ,p_source_id => g_challan_data_noc(i).org_information_id
7041 ,p_action_information1 => g_challan_data_noc(i).transfer_voucher_number
7042 ,p_action_information2 => g_year||g_quarter
7043 ,p_action_information3 => g_gre_id
7044 ,p_action_information4 => g_challan_data_noc(i).bank_branch_code
7045 ,p_action_information5 => g_challan_data_noc(i).transfer_voucher_date
7046 ,p_action_information6 => g_challan_data_noc(i).amount
7047 ,p_action_information7 => g_challan_data_noc(i).surcharge
7048 ,p_action_information8 => g_challan_data_noc(i).education_cess
7049 ,p_action_information9 => g_challan_data_noc(i).interest
7050 ,p_action_information10 => g_challan_data_noc(i).other
7051 ,p_action_information11 => g_challan_data_noc(i).cheque_dd_num
7052 ,p_action_information12 => g_challan_data_noc(i).transfer_voucher_number
7053 ,p_action_information13 => l_pre_bank_branch_code
7054 ,p_action_information14 => l_pre_transfer_voucher_date
7055 ,p_action_information15 => p_24qa_pay_act_id
7056 ,p_action_information16 => g_challan_data_noc(i).book_entry
7057 ,p_action_information17 => l_previous_total_amount
7058 ,p_action_information18 => 'NC'
7059 ,p_action_information19 => update_challans(g_challan_data_noc(i).transfer_voucher_number)
7060 ,p_action_information25 => l_challan_deductee_no
7061 ,p_action_information_id => l_action_info_id
7062 ,p_object_version_number => l_ovn
7063 );
7064 END IF;
7065 END LOOP;
7066 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.archive_no_change_challan ', 5);
7067 EXCEPTION
7068 WHEN OTHERS THEN
7069 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
7070 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
7071 END archive_no_change_challan;
7072 --------------------------------------------------------------------------
7073 -- --
7074 -- Name : ARCHIVE_CHALLAN_DATA --
7075 -- Type : PROCEDURE --
7076 -- Access : Public --
7077 -- Description : Procedure to actually archive the data. --
7078 -- Parameters : --
7079 -- IN : --
7080 -- OUT : N/A --
7081 -- --
7082 -- Change History : --
7083 --------------------------------------------------------------------------
7084 -- Rev# Date Userid Description --
7085 --------------------------------------------------------------------------
7086 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
7087 --------------------------------------------------------------------------
7088 PROCEDURE archive_challan_data(p_24qc_pay_act_id NUMBER
7089 ,p_24qa_pay_act_id NUMBER
7090 )
7091 IS
7092 CURSOR c_challan_live_data(p_challan_number VARCHAR2
7093 ,p_org_information_id VARCHAR2
7094 )
7095 IS
7096 SELECT hoi.org_information3 challan_number,
7097 hoi.org_information2 transfer_voucher_date,
7098 hoi.org_information4 amount,
7099 hoi.org_information7 surcharge,
7100 hoi.org_information8 education_cess,
7101 hoi.org_information10 other,
7102 hoi.org_information9 interest,
7103 (SELECT hoi_bank.org_information4
7104 FROM hr_organization_information hoi_bank
7105 WHERE hoi_bank.organization_id = g_gre_id
7106 AND hoi_bank.org_information_context = 'PER_IN_CHALLAN_BANK'
7107 AND hoi_bank.org_information_id = hoi.org_information5
7108 ) bank_branch_code,
7109 hoi.org_information11 cheque_dd_num,
7110 hoi.org_information12 book_entry,
7111 hoi.org_information_id org_information_id
7112 FROM hr_organization_information hoi
7113 WHERE hoi.org_information_id IN
7114 (
7115 SELECT hoi.org_information_id
7116 FROM hr_organization_information hoi
7117 ,hr_organization_units hou
7118 WHERE hoi.organization_id = g_gre_id
7119 AND hoi.organization_id = hou.organization_id
7120 AND hou.business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID')
7121 AND org_information_context = 'PER_IN_IT_CHALLAN_INFO'
7122 )
7123 AND hoi.org_information13 = g_quarter
7124 AND hoi.org_information1 = g_tax_year
7125 AND (
7126 (hoi.org_information3 = p_challan_number)
7127 OR
7128 (hoi.org_information_id = p_org_information_id)
7129 );
7130
7131 l_transfer_voucher_number hr_organization_information.org_information3%TYPE;
7132 l_transfer_voucher_date hr_organization_information.org_information2%TYPE;
7133 l_amount hr_organization_information.org_information4%TYPE;
7134 l_surcharge hr_organization_information.org_information7%TYPE;
7135 l_education_cess hr_organization_information.org_information8%TYPE;
7136 l_others hr_organization_information.org_information10%TYPE;
7137 l_interest hr_organization_information.org_information9%TYPE;
7138 l_bank_branch_code hr_organization_information.org_information4%TYPE;
7139 l_cheque_dd_num hr_organization_information.org_information11%TYPE;
7140 l_book_entry hr_organization_information.org_information12%TYPE;
7141 l_org_information_id NUMBER;
7142 l_previous_total_amount NUMBER;
7143 l_challan_record_number NUMBER;
7144 l_action_info_id NUMBER;
7145 l_ovn NUMBER;
7146 j NUMBER;
7147 k NUMBER;
7148 l_flag NUMBER := -1;
7149 l_procedure VARCHAR2(250);
7150 l_message VARCHAR2(250);
7151 BEGIN
7152 g_debug := hr_utility.debug_enabled;
7153 l_procedure := g_package ||'.archive_challan_data';
7154 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
7155 pay_in_utils.set_location(g_debug,'Fetching Challan Data ', 1);
7156 BEGIN
7157 SELECT MAX(TO_NUMBER(action_information25))
7158 INTO j
7159 FROM pay_action_information
7160 WHERE action_information_category = 'IN_24Q_CHALLAN'
7161 AND action_information3 = g_gre_id
7162 AND action_information2 = g_year||g_quarter
7163 AND action_context_id = p_24qa_pay_act_id
7164 AND action_context_id IN(
7165 SELECT org_information3
7166 FROM hr_organization_information
7167 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
7168 AND organization_id = g_gre_id
7169 AND org_information1 = g_year
7170 AND org_information2 = g_quarter
7171 AND org_information5 = 'A'
7172 AND org_information6 = 'O'
7173 );
7174
7175 pay_in_utils.set_location(g_debug,'Addition:Value of j is : '|| j ,1);
7176 SELECT MAX(TO_NUMBER(action_information25))
7177 INTO k
7178 FROM pay_action_information
7179 WHERE action_information_category = 'IN_24QC_CHALLAN'
7180 AND action_information3 = g_gre_id
7181 AND action_information2 = g_year||g_quarter
7182 AND action_information15 = p_24qa_pay_act_id
7183 AND action_context_id IN(
7184 SELECT org_information3
7185 FROM hr_organization_information
7186 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
7187 AND organization_id = g_gre_id
7188 AND org_information1 = g_year
7189 AND org_information2 = g_quarter
7190 AND org_information5 = 'A'
7191 AND org_information6 = 'C'
7192 );
7193 EXCEPTION
7194 WHEN OTHERS THEN
7195 NULL;
7196 END;
7197
7198 pay_in_utils.set_location(g_debug,'Value of k is : '|| k ,1);
7199 l_challan_record_number := GREATEST(NVL(j,0),NVL(k,0));
7200
7201 pay_in_utils.set_location(g_debug,'Value of l_challan_record_number is : '|| l_challan_record_number ,1);
7202
7203 --if C9 only new Challans would (addition/Insert) be archived
7204 IF (g_correction_mode IN ('C9','%'))
7205 THEN
7206 FOR i IN 1.. g_count_challan_add - 1
7207 LOOP
7208 pay_in_utils.set_location(g_debug,'Checking archived presence of this added challan',1);
7209 l_flag := -1;
7210
7211 l_flag := check_archival_status(NULL,'IN_24QC_CHALLAN',g_challan_data_add(i).transfer_voucher_number,NULL);
7212 IF (l_flag = 0)
7213 THEN
7214 pay_in_utils.set_location(g_debug,'Archiving added challan ' || g_challan_data_add(i).transfer_voucher_number,1);
7215 pay_in_utils.set_location(g_debug,'Fetching Live Data ' ,1);
7216 OPEN c_challan_live_data(g_challan_data_add(i).transfer_voucher_number,g_challan_data_add(i).org_information_id);
7217 FETCH c_challan_live_data INTO l_transfer_voucher_number,
7218 l_transfer_voucher_date,
7219 l_amount,
7220 l_surcharge,
7221 l_education_cess,
7222 l_others,
7223 l_interest,
7224 l_bank_branch_code,
7225 l_cheque_dd_num,
7226 l_book_entry,
7227 l_org_information_id;
7228 CLOSE c_challan_live_data;
7229 pay_in_utils.set_location(g_debug,'Fetched Live Data ' ,1);
7230
7231 pay_in_utils.set_location(g_debug,'Archiving Data ' ,1);
7232 pay_action_information_api.create_action_information
7233 (p_action_context_id => p_24qc_pay_act_id
7234 ,p_action_context_type => 'PA'
7235 ,p_action_information_category => 'IN_24QC_CHALLAN'
7236 ,p_source_id => g_challan_data_add(i).org_information_id
7237 ,p_action_information1 => g_challan_data_add(i).transfer_voucher_number
7238 ,p_action_information2 => g_year||g_quarter
7239 ,p_action_information3 => g_gre_id
7240 ,p_action_information4 => g_challan_data_add(i).bank_branch_code
7241 ,p_action_information5 => g_challan_data_add(i).transfer_voucher_date
7242 ,p_action_information6 => NVL(g_challan_data_add(i).amount,0)
7243 ,p_action_information7 => NVL(g_challan_data_add(i).surcharge,0)
7244 ,p_action_information8 => NVL(g_challan_data_add(i).education_cess,0)
7245 ,p_action_information9 => NVL(g_challan_data_add(i).interest,0)
7246 ,p_action_information10 => NVL(g_challan_data_add(i).other,0)
7247 ,p_action_information11 => g_challan_data_add(i).cheque_dd_num
7248 ,p_action_information12 => NULL
7249 ,p_action_information13 => NULL
7250 ,p_action_information14 => NULL
7251 ,p_action_information15 => p_24qa_pay_act_id
7252 ,p_action_information16 => l_book_entry
7253 ,p_action_information17 => NULL
7254 ,p_action_information18 => 'A'
7255 ,p_action_information19 => update_challans(g_challan_data_add(i).transfer_voucher_number)
7256 ,p_action_information25 => l_challan_record_number + i
7257 ,p_action_information_id => l_action_info_id
7258 ,p_object_version_number => l_ovn
7259 );
7260 END IF;
7261 END LOOP;
7262 END IF;
7263
7264 pay_in_utils.set_location(g_debug,'Fetching Updated Challan Data ' ,1);
7265 --C2,C3 then archive only updated Challans
7266 --Later need to archive all those challans that have undergone no change under C3
7267 IF (g_correction_mode IN ('C2','C3','%'))
7268 THEN
7269 FOR i IN 1.. g_count_challan_upd - 1
7270 LOOP
7271 pay_in_utils.set_location(g_debug,'Checking archived presence of this updated challan',1);
7272 l_flag := -1;
7273
7274 l_flag := check_archival_status(NULL,'IN_24QC_CHALLAN',g_challan_data_upd(i).transfer_voucher_number,NULL);
7275 IF (l_flag = 0)
7276 THEN
7277
7278 j := -1;
7279 k := -1;
7280 BEGIN
7281 SELECT DISTINCT action_information25
7282 INTO j
7283 FROM pay_action_information
7284 WHERE action_information_category = 'IN_24Q_CHALLAN'
7285 AND action_information3 = g_gre_id
7286 AND action_information2 = g_year||g_quarter
7287 AND action_context_id = p_24qa_pay_act_id
7288 AND(action_information1 = g_challan_data_upd(i).transfer_voucher_number
7289 OR
7290 source_id = g_challan_data_upd(i).org_information_id
7291 )
7292 AND p_24qa_pay_act_id IN(
7293 SELECT org_information3
7294 FROM hr_organization_information
7295 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
7296 AND organization_id = g_gre_id
7297 AND org_information1 = g_year
7298 AND org_information2 = g_quarter
7299 AND org_information5 = 'A'
7300 AND org_information6 = 'O'
7301 );
7302 EXCEPTION
7303 WHEN OTHERS THEN
7304 NULL;
7305 END;
7306 pay_in_utils.set_location(g_debug,'Updation:Value of j is : '|| j ,1);
7307
7308 BEGIN
7309 SELECT DISTINCT action_information25
7310 INTO k
7311 FROM pay_action_information
7312 WHERE action_information_category = 'IN_24QC_CHALLAN'
7313 AND action_information3 = g_gre_id
7314 AND action_information2 = g_year||g_quarter
7315 AND action_context_id = p_24qa_pay_act_id
7316 AND(action_information1 = g_challan_data_upd(i).transfer_voucher_number
7317 OR
7318 source_id = g_challan_data_upd(i).org_information_id
7319 )
7320 AND action_information15 IN(
7321 SELECT org_information3
7322 FROM hr_organization_information
7323 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
7324 AND organization_id = g_gre_id
7325 AND org_information1 = g_year
7326 AND org_information2 = g_quarter
7327 AND org_information5 = 'A'
7328 AND org_information6 = 'C'
7329 );
7330 EXCEPTION
7331 WHEN OTHERS THEN
7332 NULL;
7333 END;
7334 pay_in_utils.set_location(g_debug,'Value of k is : '|| k ,1);
7335
7336 l_challan_record_number := GREATEST(j,k);
7337
7338 pay_in_utils.set_location(g_debug,'Value of l_challan_record_number is : '|| l_challan_record_number ,1);
7339
7340 OPEN c_challan_live_data(g_challan_data_upd(i).transfer_voucher_number,g_challan_data_upd(i).org_information_id);
7341 FETCH c_challan_live_data INTO l_transfer_voucher_number,
7342 l_transfer_voucher_date,
7343 l_amount,
7344 l_surcharge,
7345 l_education_cess,
7346 l_others,
7347 l_interest,
7348 l_bank_branch_code,
7349 l_cheque_dd_num,
7350 l_book_entry,
7351 l_org_information_id;
7352 CLOSE c_challan_live_data;
7353
7354 l_previous_total_amount := NVL(g_challan_data_upd(i).amount,0)
7355 + NVL(g_challan_data_upd(i).surcharge,0)
7356 + NVL(g_challan_data_upd(i).education_cess,0)
7357 + NVL(g_challan_data_upd(i).interest,0)
7358 + NVL(g_challan_data_upd(i).other,0);
7359
7360 pay_action_information_api.create_action_information
7361 (p_action_context_id => p_24qc_pay_act_id
7362 ,p_action_context_type => 'PA'
7363 ,p_action_information_category => 'IN_24QC_CHALLAN'
7364 ,p_source_id => l_org_information_id
7365 ,p_action_information1 => l_transfer_voucher_number
7366 ,p_action_information2 => g_year||g_quarter
7367 ,p_action_information3 => g_gre_id
7368 ,p_action_information4 => l_bank_branch_code
7369 ,p_action_information5 => l_transfer_voucher_date
7370 ,p_action_information6 => l_amount
7371 ,p_action_information7 => l_surcharge
7372 ,p_action_information8 => l_education_cess
7373 ,p_action_information9 => l_interest
7374 ,p_action_information10 => l_others
7375 ,p_action_information11 => l_cheque_dd_num
7376 ,p_action_information12 => g_challan_data_upd(i).transfer_voucher_number
7377 ,p_action_information13 => g_challan_data_upd(i).bank_branch_code
7378 ,p_action_information14 => g_challan_data_upd(i).transfer_voucher_date
7379 ,p_action_information15 => p_24qa_pay_act_id
7380 ,p_action_information16 => l_book_entry
7381 ,p_action_information17 => l_previous_total_amount
7382 ,p_action_information18 => 'U'
7383 ,p_action_information19 => update_challans(g_challan_data_upd(i).transfer_voucher_number)
7384 ,p_action_information25 => l_challan_record_number
7385 ,p_action_information_id => l_action_info_id
7386 ,p_object_version_number => l_ovn
7387 );
7388 END IF;
7389 END LOOP;
7390 END IF;
7391 IF (g_correction_mode IN ('C3','C5','%'))
7392 THEN
7393 pay_in_utils.set_location(g_debug,'Starting Archival of no change challans ',1);
7394 archive_no_change_challan(p_24qc_pay_act_id,p_24qa_pay_act_id);
7395 END IF;
7396 pay_in_utils.set_location(g_debug,'Leaving '|| g_package||'.archive_challan_data ',1);
7397 EXCEPTION
7398 WHEN OTHERS THEN
7399 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
7400 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
7401 END archive_challan_data;
7402
7403
7404 --------------------------------------------------------------------------
7405 -- --
7406 -- Name : ARCHIVE_CANCELLATION_DATA --
7407 -- Type : PROCEDURE --
7408 -- Access : Private --
7409 -- Description : Procedure to actually archive the data. --
7410 -- Parameters : --
7411 -- IN : --
7412 -- OUT : N/A --
7413 -- --
7414 -- Change History : --
7415 --------------------------------------------------------------------------
7416 -- Rev# Date Userid Description --
7417 --------------------------------------------------------------------------
7418 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
7419 --------------------------------------------------------------------------
7420 PROCEDURE archive_cancellation_data(p_payroll_action_id NUMBER)
7421 IS
7422 CURSOR c_get_act_ctxt_id
7423 IS
7424 SELECT org_information3
7425 FROM hr_organization_information
7426 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
7427 AND organization_id = g_gre_id
7428 AND org_information1 = g_year
7429 AND org_information4 = g_cancel_ref_number;
7430
7431 CURSOR c_get_last_stmt_details(p_action_context_id NUMBER)
7432 IS
7433 SELECT action_information2
7434 ,action_information5
7435 ,action_information7
7436 FROM pay_action_information
7437 WHERE action_context_id = p_action_context_id
7438 AND action_information_category LIKE 'IN_24Q%ORG'
7439 AND action_context_type = 'PA';
7440
7441 l_action_context_id NUMBER;
7442 l_tan_number VARCHAR2(250);
7443 l_legal_name VARCHAR2(250);
7444 l_deductor_type VARCHAR2(250);
7445 l_action_info_id NUMBER;
7446 l_ovn NUMBER;
7447 l_procedure VARCHAR2(250);
7448 l_message VARCHAR2(250);
7449 BEGIN
7450 g_debug := hr_utility.debug_enabled;
7451 l_procedure := g_package ||'.archive_cancellation_data';
7452 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
7453 pay_in_utils.set_location(g_debug,'In this procedure archive only Name ',2);
7454 pay_in_utils.set_location(g_debug,'and Deductor type and that too as per ',3);
7455 pay_in_utils.set_location(g_debug,'the receipt number passed in concurrent ',4);
7456 pay_in_utils.set_location(g_debug,'Program parameters ',5);
7457 pay_in_utils.set_location(g_debug,'Fetching Action Context ID ',5);
7458
7459 OPEN c_get_act_ctxt_id;
7460 FETCH c_get_act_ctxt_id INTO l_action_context_id;
7461 CLOSE c_get_act_ctxt_id;
7462
7463 OPEN c_get_last_stmt_details(l_action_context_id);
7464 FETCH c_get_last_stmt_details INTO l_tan_number
7465 ,l_legal_name
7466 ,l_deductor_type;
7467 CLOSE c_get_last_stmt_details;
7468
7469 pay_in_utils.set_location(g_debug,'Action Context ID is: ' || l_action_context_id, 6);
7470 pay_in_utils.set_location(g_debug,'TAN Number is : ' || l_tan_number,7);
7471 pay_in_utils.set_location(g_debug,'Legal Name is : ' || l_legal_name,8);
7472 pay_in_utils.set_location(g_debug,'Deductor Type is : ' || l_deductor_type,9);
7473
7474 pay_in_utils.set_location(g_debug,'Archiving Data ', 9);
7475
7476 pay_action_information_api.create_action_information
7477 (p_action_context_id => p_payroll_action_id
7478 ,p_action_context_type => 'PA'
7479 ,p_action_information_category => 'IN_24QC_ORG'
7480 ,p_source_id => l_action_context_id
7481 ,p_action_information1 => g_gre_id
7482 ,p_action_information2 => l_tan_number
7483 ,p_action_information3 => g_year||g_quarter
7484 ,p_action_information4 => NULL
7485 ,p_action_information5 => l_legal_name
7486 ,p_action_information6 => NULL
7487 ,p_action_information7 => l_deductor_type
7488 ,p_action_information8 => NULL
7489 ,p_action_information9 => NULL
7490 ,p_action_information10 => NULL
7491 ,p_action_information11 => NULL
7492 ,p_action_information12 => NULL
7493 ,p_action_information13 => NULL
7494 ,p_action_information14 => NULL
7495 ,p_action_information15 => NULL
7496 ,p_action_information16 => NULL
7497 ,p_action_information17 => NULL
7498 ,p_action_information18 => NULL
7499 ,p_action_information19 => NULL
7500 ,p_action_information30 => g_24qc_reference
7501 ,p_action_information25 => NULL
7502 ,p_action_information26 => NULL
7503 ,p_action_information29 => 'Y'
7504 ,p_action_information_id => l_action_info_id
7505 ,p_object_version_number => l_ovn
7506 );
7507
7508 pay_in_utils.set_location(g_debug,'Leaving: '|| g_package||'.archive_cancellation_data', 1);
7509 EXCEPTION
7510 WHEN OTHERS THEN
7511 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
7512 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
7513 END archive_cancellation_data;
7514
7515 --------------------------------------------------------------------------
7516 -- --
7517 -- Name : ARCHIVE_ORGANIZATION_DATA --
7518 -- Type : PROCEDURE --
7519 -- Access : Private --
7520 -- Description : Procedure to actually archive the data. --
7521 -- Parameters : --
7522 -- IN : --
7523 -- OUT : N/A --
7524 -- --
7525 -- Change History : --
7526 --------------------------------------------------------------------------
7527 -- Rev# Date Userid Description --
7528 --------------------------------------------------------------------------
7529 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
7530 --------------------------------------------------------------------------
7531 PROCEDURE archive_organization_data(p_24qc_pay_act_id NUMBER
7532 ,p_24qa_pay_act_id NUMBER
7533 )
7534 IS
7535 CURSOR c_prev_stmt_details(p_tan_number VARCHAR2
7536 ,p_last_act_cxt_id NUMBER
7537 )
7538 IS
7539 SELECT action_information5 legal_name
7540 ,action_information7 deductor_type
7541 ,1 BUI
7542 ,action_context_id
7543 FROM pay_action_information
7544 WHERE action_information_category IN ('IN_24Q_ORG','IN_24QC_ORG')
7545 AND action_context_id = p_last_act_cxt_id
7546 AND action_context_type = 'PA'
7547 AND action_information1 = g_gre_id
7548 AND action_information2 = p_tan_number
7549 AND action_information3 = g_year||g_quarter
7550 ORDER BY action_context_id DESC;
7551
7552 CURSOR c_24qa_nil_challan_indicator(p_tan_number VARCHAR2)
7553 IS
7554 SELECT action_information26
7555 FROM pay_action_information
7556 WHERE action_information_category = 'IN_24Q_ORG'
7557 AND action_context_id = p_24qa_pay_act_id
7558 AND action_context_type = 'PA'
7559 AND action_information1 = g_gre_id
7560 AND action_information2 = p_tan_number
7561 AND action_information3 = g_year||g_quarter
7562 ORDER BY action_context_id DESC;
7563
7564 l_tan_number hr_organization_information.org_information1%TYPE;
7565 l_deductor_type hr_organization_information.org_information3%TYPE;
7566 l_branch_or_division hr_organization_information.org_information7%TYPE;
7567 l_org_location hr_organization_units.location_id%TYPE;
7568 l_pan_number hr_organization_information.org_information3%TYPE;
7569 l_legal_name hr_organization_information.org_information4%TYPE;
7570 l_rep_name per_all_people_f.full_name%TYPE;
7571 l_rep_position per_all_positions.name%TYPE;
7572 l_rep_location hr_organization_units.location_id%TYPE;
7573 l_rep_email_id per_all_people_f.email_address%TYPE;
7574 l_rep_work_phone per_phones.phone_number%TYPE;
7575 l_rep_std_code per_phones.phone_number%TYPE;
7576
7577 l_action_info_id NUMBER;
7578 l_ovn NUMBER;
7579 l_new_nil_challan VARCHAR2(1);
7580 l_old_nil_challan VARCHAR2(1);
7581 l_previous_org_legal_name hr_organization_information.org_information4%TYPE;
7582 l_previous_deductor_type hr_organization_information.org_information3%TYPE;
7583 l_batch_upd_indicator NUMBER;
7584 i NUMBER;
7585 l_dummy NUMBER;
7586 l_flag NUMBER := -1;
7587 l_procedure VARCHAR2(250);
7588 l_message VARCHAR2(250);
7589 BEGIN
7590 g_debug := hr_utility.debug_enabled;
7591 l_procedure := g_package ||'.archive_organization_data';
7592 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
7593 pay_in_utils.set_location(g_debug,'Fetching Organization Data ', 1);
7594 get_org_details(g_gre_id,
7595 l_tan_number,
7596 l_deductor_type,
7597 l_branch_or_division,
7598 l_org_location,
7599 l_pan_number,
7600 l_legal_name,
7601 l_rep_name,
7602 l_rep_position,
7603 l_rep_location,
7604 l_rep_email_id,
7605 l_rep_work_phone,
7606 l_rep_std_code
7607 );
7608
7609 pay_in_utils.set_location(g_debug,'Received Organization Data ', 1);
7610
7611 l_previous_org_legal_name := NULL;
7612 l_previous_deductor_type := NULL;
7613 l_batch_upd_indicator := 0;
7614
7615 IF (g_count_org = 1)
7616 THEN
7617 pay_in_utils.set_location(g_debug,'Archiving ORG data',1);
7618 SELECT DECODE(DECODE(g_24qc_empr_change,'N',DECODE(g_24qc_rep_adr_chg,'Y','Y','N'),'Y'),'Y',1,0)
7619 INTO l_batch_upd_indicator
7620 FROM dual;
7621
7622 pay_in_utils.set_location(g_debug,'Checking Last NIL Challan Indicator details ',6);
7623 OPEN c_24qa_nil_challan_indicator(l_tan_number);
7624 FETCH c_24qa_nil_challan_indicator INTO l_old_nil_challan;
7625 CLOSE c_24qa_nil_challan_indicator;
7626
7627 IF ((g_count_challan_add > 1) OR (g_count_challan_upd > 1) OR (g_count_challan_noc > 1))
7628 THEN
7629 l_new_nil_challan := 'N';
7630 ELSE
7631 l_new_nil_challan := 'Y';
7632 END IF;
7633
7634 pay_action_information_api.create_action_information
7635 (p_action_context_id => p_24qc_pay_act_id
7636 ,p_action_context_type => 'PA'
7637 ,p_action_information_category => 'IN_24QC_ORG'
7638 ,p_source_id => p_24qa_pay_act_id
7639 ,p_action_information1 => g_gre_id
7640 ,p_action_information2 => l_tan_number
7641 ,p_action_information3 => g_year||g_quarter
7642 ,p_action_information4 => l_pan_number
7643 ,p_action_information5 => l_legal_name
7644 ,p_action_information6 => l_org_location
7645 ,p_action_information7 => l_deductor_type
7646 ,p_action_information8 => l_branch_or_division
7647 ,p_action_information9 => l_rep_name
7648 ,p_action_information10 => l_rep_email_id
7649 ,p_action_information11 => l_rep_position
7650 ,p_action_information12 => l_rep_location
7651 ,p_action_information13 => l_rep_work_phone
7652 ,p_action_information14 => l_rep_std_code
7653 ,p_action_information15 => l_batch_upd_indicator
7654 ,p_action_information16 => l_legal_name
7655 ,p_action_information17 => l_deductor_type
7656 ,p_action_information18 => g_24qc_empr_change
7657 ,p_action_information19 => g_24qc_rep_adr_chg
7658 ,p_action_information30 => g_24qc_reference
7659 ,p_action_information25 => l_old_nil_challan
7660 ,p_action_information26 => l_new_nil_challan
7661 ,p_action_information_id => l_action_info_id
7662 ,p_object_version_number => l_ovn
7663 );
7664 pay_in_utils.set_location(g_debug,'Leaving archive_organization_data NC',9);
7665
7666 RETURN;
7667 END IF;
7668
7669 pay_in_utils.set_location(g_debug,'Value of g_count_org is '|| g_count_org ,2);
7670
7671 FOR i IN 1.. g_count_org - 1
7672 LOOP
7673 IF (g_org_data(i).gre_id = g_gre_id)
7674 THEN
7675 pay_in_utils.set_location(g_debug,'Fetching previous statement details ',3);
7676 OPEN c_prev_stmt_details(l_tan_number,g_org_data(i).last_action_context_id);
7677 FETCH c_prev_stmt_details INTO l_previous_org_legal_name
7678 ,l_previous_deductor_type
7679 ,l_batch_upd_indicator
7680 ,l_dummy;
7681 CLOSE c_prev_stmt_details;
7682 pay_in_utils.set_location(g_debug,'Fetched previous statement details ',3);
7683
7684 pay_in_utils.set_location(g_debug,'Checking New NIL Challan Indicator details ',4);
7685 IF ((g_count_challan_add > 1) OR (g_count_challan_upd > 1) OR (g_count_challan_noc > 1))
7686 THEN
7687 l_new_nil_challan := 'N';
7688 ELSE
7689 l_new_nil_challan := 'Y';
7690 END IF;
7691 pay_in_utils.set_location(g_debug,'New NIL Challan Indicator is '|| l_new_nil_challan,5);
7692 END IF;
7693 END LOOP;
7694
7695 pay_in_utils.set_location(g_debug,'Checking Last NIL Challan Indicator details ',6);
7696 OPEN c_24qa_nil_challan_indicator(l_tan_number);
7697 FETCH c_24qa_nil_challan_indicator INTO l_old_nil_challan;
7698 CLOSE c_24qa_nil_challan_indicator;
7699
7700 pay_in_utils.set_location(g_debug,'Archiving Data ',7);
7701 pay_in_utils.set_location(g_debug,'Address Change is '|| g_24qc_empr_change , 2);
7702
7703 pay_action_information_api.create_action_information
7704 (p_action_context_id => p_24qc_pay_act_id
7705 ,p_action_context_type => 'PA'
7706 ,p_action_information_category => 'IN_24QC_ORG'
7707 ,p_source_id => p_24qa_pay_act_id
7708 ,p_action_information1 => g_gre_id
7709 ,p_action_information2 => l_tan_number
7710 ,p_action_information3 => g_year||g_quarter
7711 ,p_action_information4 => l_pan_number
7712 ,p_action_information5 => l_legal_name
7713 ,p_action_information6 => l_org_location
7714 ,p_action_information7 => l_deductor_type
7715 ,p_action_information8 => l_branch_or_division
7716 ,p_action_information9 => l_rep_name
7717 ,p_action_information10 => l_rep_email_id
7718 ,p_action_information11 => l_rep_position
7719 ,p_action_information12 => l_rep_location
7720 ,p_action_information13 => l_rep_work_phone
7721 ,p_action_information14 => l_rep_std_code
7722 ,p_action_information15 => l_batch_upd_indicator
7723 ,p_action_information16 => l_previous_org_legal_name
7724 ,p_action_information17 => l_previous_deductor_type
7725 ,p_action_information18 => g_24qc_empr_change
7726 ,p_action_information19 => g_24qc_rep_adr_chg
7727 ,p_action_information30 => g_24qc_reference
7728 ,p_action_information25 => l_old_nil_challan
7729 ,p_action_information26 => l_new_nil_challan
7730 ,p_action_information_id => l_action_info_id
7731 ,p_object_version_number => l_ovn
7732 );
7733 pay_in_utils.set_location(g_debug,'Leaving:'|| g_package||'.archive_organization_data',1);
7734 EXCEPTION
7735 WHEN OTHERS THEN
7736 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
7737 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
7738 END archive_organization_data;
7739 --------------------------------------------------------------------------
7740 -- --
7741 -- Name : CHECK_GRE --
7742 -- Type : FUNCTION --
7743 -- Access : Private --
7744 -- Description : --
7745 -- Parameters : --
7746 -- IN : p_assignment_act_id NUMBER --
7747 -- OUT : N/A --
7748 -- --
7749 -- Change History : --
7750 --------------------------------------------------------------------------
7751 -- Rev# Date Userid Description --
7752 --------------------------------------------------------------------------
7753 -- 115.0 02-May-2006 aaagarwa Initial Version --
7754 --------------------------------------------------------------------------
7755 FUNCTION check_gre(p_assignment_act_id IN NUMBER)
7756 RETURN BOOLEAN
7757 IS
7758 CURSOR c_24q_per_check
7759 IS
7760 SELECT 1
7761 FROM pay_action_information
7762 WHERE action_information_category = 'IN_24Q_PERSON'
7763 AND action_context_id = p_assignment_act_id
7764 AND action_information3 = g_gre_id;
7765
7766 CURSOR c_24qc_ded_check
7767 IS
7768 SELECT 1
7769 FROM pay_action_information
7770 WHERE action_information_category = 'IN_24QC_DEDUCTEE'
7771 AND action_context_id = p_assignment_act_id
7772 AND action_information3 = g_gre_id;
7773
7774 l_flag NUMBER;
7775 l_procedure VARCHAR2(250);
7776 l_message VARCHAR2(250);
7777 BEGIN
7778 l_procedure := g_package || '.check_gre';
7779 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
7780 pay_in_utils.set_location(g_debug,'Checking Asg Action ID: '|| p_assignment_act_id,20);
7781
7782 l_flag := -1;
7783
7784 OPEN c_24q_per_check;
7785 FETCH c_24q_per_check INTO l_flag;
7786 CLOSE c_24q_per_check;
7787
7788 pay_in_utils.set_location(g_debug,'Value of l_flag:'|| l_flag,25);
7789
7790 IF (l_flag = -1)
7791 THEN
7792 pay_in_utils.set_location(g_debug,'Checking in 24Q Correction',30);
7793 OPEN c_24qc_ded_check;
7794 FETCH c_24qc_ded_check INTO l_flag;
7795 CLOSE c_24qc_ded_check;
7796 pay_in_utils.set_location(g_debug,'Value of l_flag:'|| l_flag,40);
7797 END IF;
7798
7799 IF (l_flag = 1)
7800 THEN
7801 RETURN TRUE;
7802 ELSE
7803 RETURN FALSE;
7804 END IF;
7805 EXCEPTION
7806 WHEN OTHERS THEN
7807 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
7808 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
7809 END check_gre;
7810 --------------------------------------------------------------------------
7811 -- --
7812 -- Name : GENERATE_LOCKING --
7813 -- Type : PROCEDURE --
7814 -- Access : Private --
7815 -- Description : This procedure locks the assignments --
7816 -- Parameters : --
7817 -- IN : p_lcking_pay_act_id NUMBER --
7818 -- : p_locked_pay_act_id_q NUMBER --
7819 -- : p_locked_pay_act_id_qc NUMBER --
7820 -- : p_chunk NUMBER --
7821 -- OUT : N/A --
7822 -- --
7823 -- Change History : --
7824 --------------------------------------------------------------------------
7825 -- Rev# Date Userid Description --
7826 --------------------------------------------------------------------------
7827 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
7828 --------------------------------------------------------------------------
7829 PROCEDURE generate_locking(p_locking_pay_act_id IN NUMBER
7830 ,p_locked_pay_act_id_q IN NUMBER
7831 ,p_locked_pay_act_id_qc IN NUMBER
7832 ,p_chunk IN NUMBER
7833 )
7834 IS
7835 CURSOR c_assignment_action_id(p_payroll_action_id NUMBER)
7836 IS
7837 SELECT assignment_action_id
7838 ,assignment_id
7839 FROM pay_assignment_actions
7840 WHERE payroll_action_id = p_payroll_action_id;
7841
7842 CURSOR c_chk_asg_action(p_assignment_id NUMBER
7843 ,p_payroll_action_id NUMBER
7844 )
7845 IS
7846 SELECT assignment_action_id
7847 FROM pay_assignment_actions paa
7848 ,pay_action_interlocks pai
7849 WHERE paa.assignment_id = p_assignment_id
7850 AND paa.assignment_action_id = pai.locking_action_id
7851 AND paa.payroll_action_id = p_payroll_action_id;
7852
7853 CURSOR c_check_action(p_locking_act_id NUMBER
7854 ,p_locked_act_id NUMBER
7855 )
7856 IS
7857 SELECT 1
7858 FROM pay_action_interlocks pai
7859 WHERE pai.locking_action_id = p_locking_act_id
7860 AND pai.locked_action_id = p_locked_act_id;
7861
7862 CURSOR c_select_prev_24qc
7863 IS
7864 SELECT MAX(org_information3)
7865 FROM hr_organization_information
7866 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
7867 AND organization_id = g_gre_id
7868 AND org_information1 = g_year
7869 AND org_information2 = g_quarter
7870 AND org_information5 = 'A'
7871 AND org_information6 = 'C'
7872 AND org_information3 <> p_locked_pay_act_id_qc;
7873
7874 l_action_id NUMBER;
7875 l_procedure VARCHAR2(250);
7876 l_message VARCHAR2(250);
7877 l_flag NUMBER;
7878 l_24qc_prv_pay_act_id NUMBER;
7879 --
7880 BEGIN
7881 l_procedure := g_package || '.generate_locking';
7882 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
7883
7884 FOR c_rec IN c_assignment_action_id(p_locked_pay_act_id_q)
7885 LOOP
7886 IF (check_gre(c_rec.assignment_action_id))
7887 THEN
7888 l_action_id := NULL;
7889 OPEN c_chk_asg_action(c_rec.assignment_id,p_locking_pay_act_id);
7890 FETCH c_chk_asg_action INTO l_action_id;
7891 CLOSE c_chk_asg_action;
7892 IF (l_action_id IS NULL)
7893 THEN
7894 SELECT pay_assignment_actions_s.NEXTVAL
7895 INTO l_action_id
7896 FROM dual;
7897
7898 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 11);
7899 pay_in_utils.set_location(g_debug,'Value of l_locked_action_id is '|| c_rec.assignment_action_id, 12);
7900 pay_in_utils.set_location(g_debug,'Value of assignment_id is '|| c_rec.assignment_id, 13);
7901
7902 pay_in_utils.set_location(g_debug,'Inserting Assignment Actions ', 14);
7903 hr_nonrun_asact.insact(lockingactid => l_action_id
7904 ,assignid => c_rec.assignment_id
7905 ,pactid => p_locking_pay_act_id
7906 ,chunk => p_chunk
7907 );
7908 pay_in_utils.set_location(g_debug,'Enforcing Locking ', 15);
7909 hr_nonrun_asact.insint(lockingactid => l_action_id
7910 ,lockedactid => c_rec.assignment_action_id
7911 );
7912 pay_in_utils.set_location(g_debug,'Locking enforced', 16);
7913 END IF;
7914 END IF;
7915 END LOOP;
7916
7917 pay_in_utils.set_location(g_debug,'Now starting locking Latest 24Q Correction Assignments', 16);
7918 FOR c_rec IN c_assignment_action_id(p_locked_pay_act_id_qc)
7919 LOOP
7920 IF (check_gre(c_rec.assignment_action_id))
7921 THEN
7922 l_action_id := NULL;
7923 OPEN c_chk_asg_action(c_rec.assignment_id,p_locking_pay_act_id);
7924 FETCH c_chk_asg_action INTO l_action_id;
7925 CLOSE c_chk_asg_action;
7926 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 11);
7927
7928 IF (l_action_id IS NULL)
7929 THEN
7930 SELECT pay_assignment_actions_s.NEXTVAL
7931 INTO l_action_id
7932 FROM dual;
7933
7934 pay_in_utils.set_location(g_debug,'Inserting Assignment Actions as it was null', 14);
7935 hr_nonrun_asact.insact(lockingactid => l_action_id
7936 ,assignid => c_rec.assignment_id
7937 ,pactid => p_locking_pay_act_id
7938 ,chunk => p_chunk
7939 );
7940 END IF;
7941
7942 pay_in_utils.set_location(g_debug,'Value of l_locked_action_id is '|| c_rec.assignment_action_id, 12);
7943 pay_in_utils.set_location(g_debug,'Value of assignment_id is '|| c_rec.assignment_id, 13);
7944
7945 l_flag := NULL;
7946 OPEN c_check_action(l_action_id,c_rec.assignment_action_id);
7947 FETCH c_check_action INTO l_flag;
7948 CLOSE c_check_action;
7949
7950 IF (l_flag IS NULL)
7951 THEN
7952 pay_in_utils.set_location(g_debug,'Enforcing Locking ', 15);
7953 hr_nonrun_asact.insint(lockingactid => l_action_id
7954 ,lockedactid => c_rec.assignment_action_id
7955 );
7956 pay_in_utils.set_location(g_debug,'Locking enforced', 16);
7957 END IF;
7958 END IF;
7959 END LOOP;
7960
7961 OPEN c_select_prev_24qc;
7962 FETCH c_select_prev_24qc INTO l_24qc_prv_pay_act_id;
7963 CLOSE c_select_prev_24qc;
7964
7965 pay_in_utils.set_location(g_debug,'Payroll Action ID of previous 24Q Correction archival is '||l_24qc_prv_pay_act_id,1);
7966
7967 IF (l_24qc_prv_pay_act_id IS NOT NULL)
7968 THEN
7969 pay_in_utils.set_location(g_debug,'Now starting locking Previous 24Q Correction Assignments', 16);
7970 FOR c_rec IN c_assignment_action_id(l_24qc_prv_pay_act_id)
7971 LOOP
7972 IF (check_gre(c_rec.assignment_action_id))
7973 THEN
7974 l_action_id := NULL;
7975 OPEN c_chk_asg_action(c_rec.assignment_id,p_locking_pay_act_id);
7976 FETCH c_chk_asg_action INTO l_action_id;
7977 CLOSE c_chk_asg_action;
7978 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 11);
7979
7980 IF (l_action_id IS NULL)
7981 THEN
7982 SELECT pay_assignment_actions_s.NEXTVAL
7983 INTO l_action_id
7984 FROM dual;
7985
7986 pay_in_utils.set_location(g_debug,'Inserting Assignment Actions as it was null', 14);
7987 hr_nonrun_asact.insact(lockingactid => l_action_id
7988 ,assignid => c_rec.assignment_id
7989 ,pactid => p_locking_pay_act_id
7990 ,chunk => p_chunk
7991 );
7992 END IF;
7993
7994 pay_in_utils.set_location(g_debug,'Value of l_locked_action_id is '|| c_rec.assignment_action_id, 12);
7995 pay_in_utils.set_location(g_debug,'Value of assignment_id is '|| c_rec.assignment_id, 13);
7996
7997 l_flag := NULL;
7998 OPEN c_check_action(l_action_id,c_rec.assignment_action_id);
7999 FETCH c_check_action INTO l_flag;
8000 CLOSE c_check_action;
8001
8002 IF (l_flag IS NULL)
8003 THEN
8004 pay_in_utils.set_location(g_debug,'Enforcing Locking ', 15);
8005 hr_nonrun_asact.insint(lockingactid => l_action_id
8006 ,lockedactid => c_rec.assignment_action_id
8007 );
8008 pay_in_utils.set_location(g_debug,'Locking enforced', 16);
8009 END IF;
8010 END IF;
8011 END LOOP;
8012 END IF;
8013 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,10);
8014 EXCEPTION
8015 WHEN OTHERS THEN
8016 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
8017 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
8018 END generate_locking;
8019
8020 --------------------------------------------------------------------------
8021 -- --
8022 -- Name : ARCHIVE_C5_DATA_ONLY --
8023 -- Type : PROCEDURE --
8024 -- Access : Public --
8025 -- Description : --
8026 -- Parameters : --
8027 -- IN : p_payroll_action_id NUMBER --
8028 -- --
8029 -- OUT : N/A --
8030 -- --
8031 -- Change History : --
8032 --------------------------------------------------------------------------
8033 -- Rev# Date Userid Description --
8034 --------------------------------------------------------------------------
8035 -- 115.0 13-Mar-2006 abhjain Initial Version --
8036 --------------------------------------------------------------------------
8037 PROCEDURE archive_c5_data_only(p_payroll_action_id NUMBER)
8038 IS
8039 CURSOR c_select_deductee
8040 IS
8041 SELECT DISTINCT pai.action_information1 challan
8042 FROM pay_action_information pai
8043 ,pay_assignment_actions paa
8044 WHERE pai.action_information_category = 'IN_24QC_DEDUCTEE'
8045 AND paa.assignment_action_id = pai.action_context_id
8046 AND paa.payroll_action_id = p_payroll_action_id
8047 AND pai.action_information19 IS NOT NULL
8048 AND pai.action_information20 IS NOT NULL;
8049
8050 CURSOR c_challan_sequence(p_challan_number VARCHAR2)
8051 IS
8052 SELECT pai.action_information25 challan_seq
8053 FROM pay_action_information pai
8054 WHERE pai.action_information_category IN ('IN_24QC_CHALLAN','IN_24Q_CHALLAN')
8055 AND pai.action_information1 = p_challan_number
8056 AND pai.action_context_id IN
8057 (
8058 SELECT org_information3
8059 FROM hr_organization_information
8060 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
8061 AND organization_id = g_gre_id
8062 AND org_information1 = g_year
8063 AND org_information2 = g_quarter
8064 AND org_information5 = 'A'
8065 )
8066 AND ROWNUM = 1;
8067
8068 CURSOR c_prev_stmt_details(p_last_act_cxt_id NUMBER
8069 )
8070 IS
8071 SELECT action_information2 tan_number
8072 ,action_information5 legal_name
8073 ,action_information7 deductor_type
8074 FROM pay_action_information
8075 WHERE action_information_category IN ('IN_24Q_ORG','IN_24QC_ORG')
8076 AND action_context_id = p_last_act_cxt_id
8077 AND action_context_type = 'PA'
8078 AND action_information1 = g_gre_id
8079 AND action_information3 = g_year||g_quarter
8080 ORDER BY action_context_id DESC;
8081
8082 l_challan_deductee_no VARCHAR2(250);
8083 l_tan_number hr_organization_information.org_information1%TYPE;
8084 l_deductor_type hr_organization_information.org_information3%TYPE;
8085 l_branch_or_division hr_organization_information.org_information7%TYPE;
8086 l_org_location hr_organization_units.location_id%TYPE;
8087 l_pan_number hr_organization_information.org_information3%TYPE;
8088 l_legal_name hr_organization_information.org_information4%TYPE;
8089 l_rep_name per_all_people_f.full_name%TYPE;
8090 l_rep_position per_all_positions.name%TYPE;
8091 l_rep_location hr_organization_units.location_id%TYPE;
8092 l_rep_email_id per_all_people_f.email_address%TYPE;
8093 l_rep_work_phone per_phones.phone_number%TYPE;
8094 l_rep_std_code per_phones.phone_number%TYPE;
8095 l_flag_number NUMBER := -1;
8096 l_action_info_id NUMBER;
8097 l_ovn NUMBER;
8098
8099 l_procedure VARCHAR2(250);
8100 l_message VARCHAR2(250);
8101 BEGIN
8102 g_debug := hr_utility.debug_enabled;
8103 l_procedure := g_package ||'.archive_c5_data_only';
8104 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
8105
8106 pay_in_utils.set_location(g_debug,'Checking Challan Data', 1);
8107 FOR c_rec IN c_select_deductee
8108 LOOP
8109 OPEN c_challan_sequence(c_rec.challan);
8110 FETCH c_challan_sequence INTO l_challan_deductee_no;
8111 CLOSE c_challan_sequence;
8112
8113 pay_in_utils.set_location(g_debug,'Challan No is :'|| c_rec.challan, 1);
8114 pay_in_utils.set_location(g_debug,'Challan Seq No is :'|| l_challan_deductee_no, 1);
8115 pay_in_utils.set_location(g_debug,'Checking Challan Data in updated Data', 1);
8116 pay_in_utils.set_location(g_debug,'Value of g_count_challan_upd C5 is '|| g_count_challan_upd,2);
8117
8118 FOR i IN 1..g_count_challan_upd - 1
8119 LOOP
8120 pay_in_utils.set_location(g_debug,'Found Challan in updated Data', 1);
8121 l_flag_number := -1;
8122 l_flag_number := check_archival_status(NULL,'IN_24QC_CHALLAN',g_challan_data_upd(i).transfer_voucher_number,NULL);
8123 IF((g_challan_data_upd(i).transfer_voucher_number = c_rec.challan)AND(l_flag_number = 0))
8124 THEN
8125 pay_action_information_api.create_action_information
8126 (p_action_context_id => p_payroll_action_id
8127 ,p_action_context_type => 'PA'
8128 ,p_action_information_category => 'IN_24QC_CHALLAN'
8129 ,p_source_id => g_challan_data_upd(i).org_information_id
8130 ,p_action_information1 => g_challan_data_upd(i).transfer_voucher_number
8131 ,p_action_information2 => g_year||g_quarter
8132 ,p_action_information3 => g_gre_id
8133 ,p_action_information5 => g_challan_data_upd(i).transfer_voucher_date
8134 ,p_action_information17 => g_challan_data_upd(i).amount
8135 + g_challan_data_upd(i).surcharge
8136 + g_challan_data_upd(i).education_cess
8137 + g_challan_data_upd(i).interest
8138 + g_challan_data_upd(i).other
8139 ,p_action_information18 => 'NC'
8140 ,p_action_information19 => update_challans(g_challan_data_upd(i).transfer_voucher_number)
8141 ,p_action_information25 => l_challan_deductee_no
8142 ,p_action_information29 => 'C5'
8143 ,p_action_information_id => l_action_info_id
8144 ,p_object_version_number => l_ovn
8145 );
8146 END IF;
8147 END LOOP;
8148
8149 pay_in_utils.set_location(g_debug,'Checking Challan Data in No Change Data', 1);
8150 pay_in_utils.set_location(g_debug,'Value of g_count_challan_noc C5 is '|| g_count_challan_noc,2);
8151 FOR i IN 1..g_count_challan_noc - 1
8152 LOOP
8153 pay_in_utils.set_location(g_debug,'Found Challan in no change Data', 1);
8154 l_flag_number := -1;
8155 l_flag_number := check_archival_status(NULL,'IN_24QC_CHALLAN',g_challan_data_noc(i).transfer_voucher_number,NULL);
8156 IF((g_challan_data_noc(i).transfer_voucher_number = c_rec.challan)AND(l_flag_number =0))
8157 THEN
8158 pay_action_information_api.create_action_information
8159 (p_action_context_id => p_payroll_action_id
8160 ,p_action_context_type => 'PA'
8161 ,p_action_information_category => 'IN_24QC_CHALLAN'
8162 ,p_source_id => g_challan_data_noc(i).org_information_id
8163 ,p_action_information1 => g_challan_data_noc(i).transfer_voucher_number
8164 ,p_action_information2 => g_year||g_quarter
8165 ,p_action_information3 => g_gre_id
8166 ,p_action_information5 => g_challan_data_noc(i).transfer_voucher_date
8167 ,p_action_information17 => g_challan_data_noc(i).amount
8168 + g_challan_data_noc(i).surcharge
8169 + g_challan_data_noc(i).education_cess
8170 + g_challan_data_noc(i).interest
8171 + g_challan_data_noc(i).other
8172 ,p_action_information18 => 'NC'
8173 ,p_action_information19 => update_challans(g_challan_data_noc(i).transfer_voucher_number)
8174 ,p_action_information25 => l_challan_deductee_no
8175 ,p_action_information29 => 'C5'
8176 ,p_action_information_id => l_action_info_id
8177 ,p_object_version_number => l_ovn
8178 );
8179 END IF;
8180 END LOOP;
8181 END LOOP;
8182
8183 pay_in_utils.set_location(g_debug,'Checking Organization Data', 1);
8184 l_flag_number := -1;
8185 l_flag_number := check_archival_status(NULL,'IN_24QC_ORG',NULL,NULL);
8186 IF (l_flag_number <> 0)
8187 THEN
8188 RETURN;
8189 END IF;
8190 pay_in_utils.set_location(g_debug,'Value of g_count_org is ' || g_count_org,2);
8191
8192 IF (g_count_org = 1)
8193 THEN
8194 pay_in_utils.set_location(g_debug,'Fetching Live Organization Data ', 1);
8195 get_org_details(g_gre_id,
8196 l_tan_number,
8197 l_deductor_type,
8198 l_branch_or_division,
8199 l_org_location,
8200 l_pan_number,
8201 l_legal_name,
8202 l_rep_name,
8203 l_rep_position,
8204 l_rep_location,
8205 l_rep_email_id,
8206 l_rep_work_phone,
8207 l_rep_std_code
8208 );
8209 ELSE
8210 FOR c_rec IN c_prev_stmt_details(g_org_data(1).last_action_context_id)
8211 LOOP
8212 l_tan_number := c_rec.tan_number;
8213 l_legal_name := c_rec.legal_name;
8214 l_deductor_type := c_rec.deductor_type;
8215 END LOOP;
8216 END IF;
8217
8218 pay_in_utils.set_location(g_debug,'Archiving Org Data for C5 ', 9);
8219 pay_in_utils.set_location(g_debug,'p_payroll_action_id is '|| p_payroll_action_id, 10);
8220 l_action_info_id := NULL;
8221 l_ovn := NULL;
8222
8223 pay_action_information_api.create_action_information
8224 (p_action_context_id => p_payroll_action_id
8225 ,p_action_context_type => 'PA'
8226 ,p_action_information_category => 'IN_24QC_ORG'
8227 ,p_action_information1 => g_gre_id
8228 ,p_action_information2 => l_tan_number
8229 ,p_action_information3 => g_year||g_quarter
8230 ,p_action_information4 => NULL
8231 ,p_action_information5 => l_legal_name
8232 ,p_action_information6 => NULL
8233 ,p_action_information7 => l_deductor_type
8234 ,p_action_information15 => '0'
8235 ,p_action_information29 => 'C5'
8236 ,p_action_information30 => g_24qc_reference
8237 ,p_action_information_id => l_action_info_id
8238 ,p_object_version_number => l_ovn
8239 );
8240
8241 pay_in_utils.set_location(g_debug,'Archived Org Data for C5 ', 9);
8242 pay_in_utils.set_location(g_debug,'Leaving: '|| g_package||'.archive_c5_data_only', 1);
8243 EXCEPTION
8244 WHEN OTHERS THEN
8245 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
8246 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
8247 END archive_c5_data_only;
8248
8249 --------------------------------------------------------------------------
8250 -- --
8251 -- Name : ASSIGNMENT_ACTION_CODE --
8252 -- Type : PROCEDURE --
8253 -- Access : Public --
8254 -- Description : This procedure further restricts the assignment_id's--
8255 -- returned by range_code. --
8256 -- It selects assignments that have prepayments/balance--
8257 -- initialization in the specified duration OR those --
8258 -- that have Challan information entries --
8259 -- of challans in the specified quarter --
8260 -- Parameters : --
8261 -- IN : p_payroll_action_id NUMBER --
8262 -- p_start_person NUMBER --
8263 -- p_end_person NUMBER --
8264 -- p_chunk NUMBER --
8265 -- OUT : N/A --
8266 -- --
8267 -- Change History : --
8268 --------------------------------------------------------------------------
8269 -- Rev# Date Userid Description --
8270 --------------------------------------------------------------------------
8271 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
8272 -- 115.1 07-Feb-2007 rpalli 5754018 : 24QC Quarter4 Stat Update --
8273 --------------------------------------------------------------------------
8274 --
8275 PROCEDURE assignment_action_code(p_payroll_action_id IN NUMBER
8276 ,p_start_person IN NUMBER
8277 ,p_end_person IN NUMBER
8278 ,p_chunk IN NUMBER
8279 )
8280 IS
8281 CURSOR c_pay_act_id_last_24Q
8282 IS
8283 SELECT org_information3 -- payroll action id of this quarter Form 24Q A/C Archival
8284 ,org_information6 -- Archival Type (Original or Correction Statement)
8285 FROM hr_organization_information
8286 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
8287 AND organization_id = g_gre_id
8288 AND org_information1 = g_year
8289 AND org_information2 = g_quarter
8290 AND org_information5 = 'A'
8291 ORDER BY org_information3 DESC;
8292
8293 CURSOR c_chk_action_lock(p_locking_action_id NUMBER
8294 ,p_locked_action_id NUMBER
8295 )
8296 IS
8297 SELECT 1
8298 FROM pay_action_interlocks
8299 WHERE locking_action_id = p_locking_action_id
8300 AND locked_action_id = p_locked_action_id;
8301
8302 CURSOR c_chk_asg_action(p_assignment_id NUMBER
8303 ,p_payroll_act_id NUMBER
8304 )
8305 IS
8306 SELECT assignment_action_id
8307 FROM pay_assignment_actions
8308 WHERE payroll_action_id = p_payroll_act_id
8309 AND assignment_id = p_assignment_id;
8310
8311 CURSOR c_max_24qc_locking_24q(p_24qc_arc_asg_act_id NUMBER)
8312 IS
8313 SELECT max(locking_action_id)
8314 FROM pay_action_interlocks
8315 WHERE locked_action_id = p_24qc_arc_asg_act_id
8316 ORDER BY locking_action_id DESC;
8317
8318 CURSOR c_select_prev_24qc(p_locked_pay_act_id_qc NUMBER)
8319 IS
8320 SELECT MAX(org_information3)
8321 FROM hr_organization_information
8322 WHERE org_information_context = 'PER_IN_FORM24Q_RECEIPT_DF'
8323 AND organization_id = g_gre_id
8324 AND org_information1 = g_year
8325 AND org_information2 = g_quarter
8326 AND org_information5 = 'A'
8327 AND org_information6 = 'C'
8328 AND org_information3 <> p_locked_pay_act_id_qc;
8329
8330 CURSOR c_source_id(p_pay_act_id_last_24Q NUMBER)
8331 IS
8332 SELECT source_id
8333 FROM pay_action_information
8334 WHERE action_context_id = p_pay_act_id_last_24Q
8335 AND action_information_category = 'IN_24QC_ORG'
8336 AND action_context_type = 'PA'
8337 AND action_information3 = g_year||g_quarter;
8338
8339 CURSOR c_act_category(p_pay_act_id_last_24Q NUMBER)
8340 IS
8341 SELECT DECODE(pai.action_information_category,'IN_24Q_ORG',1,2)
8342 FROM pay_action_information pai
8343 WHERE pai.action_information_category IN ('IN_24QC_ORG','IN_24Q_ORG')
8344 AND pai.action_context_id = p_pay_act_id_last_24Q
8345 AND pai.action_context_type = 'PA'
8346 AND pai.action_information3 = g_year||g_quarter
8347 AND pai.action_information1 = g_gre_id;
8348
8349 l_max_24qc_locking_24q NUMBER;
8350 l_procedure VARCHAR2(100);
8351 l_message VARCHAR2(250);
8352 l_action_id NUMBER;
8353 l_pay_act_id_last_24Q NUMBER;
8354 l_dummy NUMBER;
8355 l_24q_asg_action_id NUMBER;
8356 l_24q_locked_pay_id NUMBER;
8357 l_24qc_locked_pay_id NUMBER;
8358 l_flag BOOLEAN;
8359 l_flag_number NUMBER := -1;
8360 l_last_24qc_pay_act_id NUMBER;
8361
8362 l_lock_exists NUMBER;
8363
8364 --
8365 BEGIN
8366 --
8367
8368 l_procedure := g_package || '.assignment_action_code';
8369 g_debug := hr_utility.debug_enabled;
8370 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,10);
8371
8372 pay_in_utils.set_location(g_debug,'Archival for C4,C5 Modes Starts : '||l_procedure,12);
8373
8374 --C4,C5 Salary Data Archival Starts
8375 IF (g_sal_action)
8376 THEN
8377 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,15);
8378
8379 initialization_code(p_payroll_action_id);
8380
8381 l_flag := TRUE;
8382 --Fetch last Form 24Q archival Payroll action id
8383 FOR c_rec IN c_pay_act_id_last_24Q
8384 LOOP
8385 pay_in_utils.set_location(g_debug,'ASSIGNMENT_ACTION_CODE : In c_pay_act_id_last_24Q ', 1);
8386 pay_in_utils.set_location(g_debug,'In c_rec.org_information6 : ' || c_rec.org_information6, 1);
8387 pay_in_utils.set_location(g_debug,'In c_rec.org_information3 : ' || c_rec.org_information3, 1);
8388 IF (l_flag)
8389 THEN
8390 IF (c_rec.org_information6 = 'O')
8391 THEN
8392 l_pay_act_id_last_24Q := c_rec.org_information3;
8393 pay_in_utils.set_location(g_debug,'In l_pay_act_id_last_24Q : ' || l_pay_act_id_last_24Q, 1);
8394 ELSE
8395 l_pay_act_id_last_24Q := c_rec.org_information3;
8396 pay_in_utils.set_location(g_debug,'In l_pay_act_id_last_24Q : ' || l_pay_act_id_last_24Q, 1);
8397 END IF;
8398 l_flag := FALSE;
8399 END IF;
8400 END LOOP;
8401 pay_in_utils.set_location(g_debug,' Archival Action with which we need comparison is '|| l_pay_act_id_last_24Q,1);
8402
8403 IF (l_pay_act_id_last_24Q IS NOT NULL)
8404 THEN
8405 OPEN c_act_category(l_pay_act_id_last_24Q);
8406 FETCH c_act_category INTO l_dummy;
8407 CLOSE c_act_category;
8408 END IF;
8409 pay_in_utils.set_location(g_debug,' l_dummy is : '|| l_dummy, 3);
8410
8411 IF (l_dummy = 1)
8412 THEN
8413 -- This means that l_pay_act_id_last_24Q corresponds to 24Q Archival only.
8414 l_24q_locked_pay_id := l_pay_act_id_last_24Q;
8415 l_24qc_locked_pay_id := NULL;
8416 ELSIF(l_dummy = 2)
8417 THEN
8418 -- This means that l_pay_act_id_last_24Q corresponds to 24QC Archival.
8419 OPEN c_source_id(l_pay_act_id_last_24Q);
8420 FETCH c_source_id INTO l_24q_locked_pay_id;
8421 CLOSE c_source_id;
8422
8423 l_24qc_locked_pay_id := l_pay_act_id_last_24Q;
8424 END IF;
8425 pay_in_utils.set_location(g_debug,' l_24q_locked_pay_id is '|| l_24q_locked_pay_id ,4);
8426 pay_in_utils.set_location(g_debug,' l_24qc_locked_pay_id is '|| l_24qc_locked_pay_id ,5);
8427
8428 g_payroll_action_id := p_payroll_action_id;
8429 g_24q_payroll_act_id := l_24q_locked_pay_id;
8430 g_24qc_payroll_act_id := l_24qc_locked_pay_id;
8431
8432 OPEN c_select_prev_24qc(g_24qc_payroll_act_id);
8433 FETCH c_select_prev_24qc INTO l_last_24qc_pay_act_id;
8434 CLOSE c_select_prev_24qc;
8435
8436 pay_in_utils.set_location(g_debug,'Payroll Action ID of previous 24Q Correction is '|| l_last_24qc_pay_act_id,2);
8437
8438 IF ((l_pay_act_id_last_24Q IS NULL)AND(g_correction_mode <> 'Y'))
8439 THEN
8440 RETURN;
8441 END IF;
8442
8443 IF (g_correction_mode <> 'Y')
8444 THEN
8445 pay_in_utils.set_location(g_debug,'Calling : generate_employee_data '|| l_procedure,10);
8446 pay_in_utils.set_location(g_debug,'l_24q_locked_pay_id is ' || l_24q_locked_pay_id ,11);
8447 generate_employee_data(l_24q_locked_pay_id);
8448
8449 pay_in_utils.set_location(g_debug,'Calling : generate_salary_data '|| l_procedure,20);
8450 pay_in_utils.set_location(g_debug,'l_24q_locked_pay_id is ' || l_24q_locked_pay_id ,21);
8451 generate_salary_data(l_24q_locked_pay_id, p_start_person, p_end_person);
8452
8453 pay_in_utils.set_location(g_debug,'Calling : generate_challan_data '|| l_procedure,30);
8454 generate_challan_data(l_24q_locked_pay_id,g_gre_id);
8455
8456 pay_in_utils.set_location(g_debug,'Calling : generate_organization_data '|| l_procedure,20);
8457 generate_organization_data(l_24q_locked_pay_id,g_gre_id);
8458 ELSE
8459 pay_in_utils.set_location(g_debug,'Calling : archive_cancellation_data '|| l_procedure,20);
8460 pay_in_utils.set_location(g_debug,'Checking Org archival status',1);
8461 l_flag_number := -1;
8462 l_flag_number := check_archival_status(NULL,'IN_24QC_ORG',NULL,NULL);
8463 IF (l_flag_number = 0)
8464 THEN
8465 archive_cancellation_data(p_payroll_action_id);
8466 END IF;
8467 g_sal_action := FALSE;
8468 generate_locking(p_payroll_action_id,l_24q_locked_pay_id,l_24qc_locked_pay_id,p_chunk);
8469 RETURN;
8470 END IF;
8471
8472 pay_in_utils.set_location(g_debug,'Inserting assignment action ids for Salary Records',30);
8473
8474 pay_in_utils.set_location(g_debug,'Inserting Asg Action ID for Deleted Assignment Actions ' ,35);
8475
8476 pay_in_utils.set_location(g_debug,'Value of g_count_sal_delete is '|| g_count_sal_delete, 39);
8477 IF ((g_count_sal_delete > 1) AND (g_correction_mode <> 'Y'))
8478 THEN
8479 FOR i IN 1..g_count_sal_delete - 1
8480 LOOP
8481 l_24q_asg_action_id := NULL;
8482 l_dummy := NULL;
8483 pay_in_utils.set_location(g_debug,'Checking for Assignment '|| g_sal_data_rec_del(i).assignment_id,1);
8484 pay_in_utils.set_location(g_debug,'Payroll Action id is ' || p_payroll_action_id,2);
8485 OPEN c_chk_asg_action(g_sal_data_rec_del(i).assignment_id,p_payroll_action_id);
8486 FETCH c_chk_asg_action INTO l_dummy;
8487 CLOSE c_chk_asg_action;
8488
8489
8490 pay_in_utils.trace('l_dummy in g_count_sal_delete ',l_dummy);
8491
8492 IF (l_dummy IS NULL)
8493 THEN
8494 SELECT pay_assignment_actions_s.NEXTVAL
8495 INTO l_action_id
8496 FROM dual;
8497
8498 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 61);
8499 pay_in_utils.set_location(g_debug,'Inserting Assignment action id ',61);
8500
8501 hr_nonrun_asact.insact(lockingactid => l_action_id
8502 ,assignid => g_sal_data_rec_del(i).assignment_id
8503 ,pactid => p_payroll_action_id
8504 ,chunk => p_chunk
8505 );
8506
8507 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
8508
8509 OPEN c_chk_asg_action(g_sal_data_rec_del(i).assignment_id,l_24q_locked_pay_id);
8510 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8511 CLOSE c_chk_asg_action;
8512
8513 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
8514
8515 IF (l_24q_asg_action_id IS NOT NULL)
8516 THEN
8517 hr_nonrun_asact.insint(lockingactid => l_action_id
8518 ,lockedactid => l_24q_asg_action_id
8519 );
8520 END IF;
8521
8522 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
8523 l_24q_asg_action_id := NULL;
8524 OPEN c_chk_asg_action(g_sal_data_rec_del(i).assignment_id,l_24qc_locked_pay_id);
8525 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8526 CLOSE c_chk_asg_action;
8527
8528 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
8529
8530 IF (l_24q_asg_action_id IS NOT NULL)
8531 THEN
8532 hr_nonrun_asact.insint(lockingactid => l_action_id
8533 ,lockedactid => l_24q_asg_action_id
8534 );
8535 END IF;
8536
8537 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
8538 l_24q_asg_action_id := NULL;
8539 OPEN c_chk_asg_action(g_sal_data_rec_del(i).assignment_id,l_last_24qc_pay_act_id);
8540 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8541 CLOSE c_chk_asg_action;
8542
8543 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
8544
8545 IF (l_24q_asg_action_id IS NOT NULL)
8546 THEN
8547 hr_nonrun_asact.insint(lockingactid => l_action_id
8548 ,lockedactid => l_24q_asg_action_id
8549 );
8550 END IF;
8551 END IF;
8552
8553 IF (l_dummy IS NOT NULL)
8554 THEN
8555
8556 pay_in_utils.set_location(g_debug,'Value of l_dummy is '|| l_dummy, 61);
8557
8558 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
8559 l_24q_asg_action_id := NULL;
8560 l_lock_exists := 0;
8561
8562 OPEN c_chk_asg_action(g_sal_data_rec_del(i).assignment_id,l_24q_locked_pay_id);
8563 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8564 CLOSE c_chk_asg_action;
8565
8566 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8567 FETCH c_chk_action_lock INTO l_lock_exists;
8568 CLOSE c_chk_action_lock;
8569
8570 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
8571
8572 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8573 THEN
8574 hr_nonrun_asact.insint(lockingactid => l_dummy
8575 ,lockedactid => l_24q_asg_action_id
8576 );
8577 END IF;
8578
8579 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
8580 l_24q_asg_action_id := NULL;
8581 l_lock_exists := 0;
8582 OPEN c_chk_asg_action(g_sal_data_rec_del(i).assignment_id,l_24qc_locked_pay_id);
8583 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8584 CLOSE c_chk_asg_action;
8585
8586 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8587 FETCH c_chk_action_lock INTO l_lock_exists;
8588 CLOSE c_chk_action_lock;
8589
8590 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
8591
8592 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8593 THEN
8594 hr_nonrun_asact.insint(lockingactid => l_dummy
8595 ,lockedactid => l_24q_asg_action_id
8596 );
8597 END IF;
8598
8599 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
8600 l_24q_asg_action_id := NULL;
8601 l_lock_exists := 0;
8602 OPEN c_chk_asg_action(g_sal_data_rec_del(i).assignment_id,l_last_24qc_pay_act_id);
8603 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8604 CLOSE c_chk_asg_action;
8605
8606 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8607 FETCH c_chk_action_lock INTO l_lock_exists;
8608 CLOSE c_chk_action_lock;
8609
8610 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
8611
8612 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8613 THEN
8614 hr_nonrun_asact.insint(lockingactid => l_dummy
8615 ,lockedactid => l_24q_asg_action_id
8616 );
8617 END IF;
8618 END IF;
8619
8620 END LOOP;
8621 END IF;
8622
8623
8624 pay_in_utils.set_location(g_debug,'Inserting Asg Action ID for Added Assignment Actions ' ,60);
8625 pay_in_utils.set_location(g_debug,'Value of g_count_sal_addition is '|| g_count_sal_addition, 61);
8626 IF ((g_count_sal_addition > 1) AND (g_correction_mode <> 'Y'))
8627 THEN
8628 FOR i IN 1..g_count_sal_addition - 1
8629 LOOP
8630 l_24q_asg_action_id := NULL;
8631 l_dummy := NULL;
8632 pay_in_utils.set_location(g_debug,'Checking for Assignment '|| g_sal_data_rec_add(i).assignment_id,1);
8633 pay_in_utils.set_location(g_debug,'Payroll Action id is ' || p_payroll_action_id,2);
8634
8635 OPEN c_chk_asg_action(g_sal_data_rec_add(i).assignment_id,p_payroll_action_id);
8636 FETCH c_chk_asg_action INTO l_dummy;
8637 CLOSE c_chk_asg_action;
8638
8639 pay_in_utils.trace('l_dummy in g_count_sal_addition ',l_dummy);
8640
8641 IF (l_dummy IS NULL)
8642 THEN
8643 SELECT pay_assignment_actions_s.NEXTVAL
8644 INTO l_action_id
8645 FROM dual;
8646
8647 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 61);
8648 pay_in_utils.set_location(g_debug,'Inserting Assignment action id ',61);
8649
8650 hr_nonrun_asact.insact(lockingactid => l_action_id
8651 ,assignid => g_sal_data_rec_add(i).assignment_id
8652 ,pactid => p_payroll_action_id
8653 ,chunk => p_chunk
8654 );
8655
8656 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
8657
8658 OPEN c_chk_asg_action(g_sal_data_rec_add(i).assignment_id,l_24q_locked_pay_id);
8659 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8660 CLOSE c_chk_asg_action;
8661
8662 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
8663
8664 IF (l_24q_asg_action_id IS NOT NULL)
8665 THEN
8666 hr_nonrun_asact.insint(lockingactid => l_action_id
8667 ,lockedactid => l_24q_asg_action_id
8668 );
8669 END IF;
8670
8671 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
8672 l_24q_asg_action_id := NULL;
8673 OPEN c_chk_asg_action(g_sal_data_rec_add(i).assignment_id,l_24qc_locked_pay_id);
8674 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8675 CLOSE c_chk_asg_action;
8676
8677 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
8678
8679 IF (l_24q_asg_action_id IS NOT NULL)
8680 THEN
8681 hr_nonrun_asact.insint(lockingactid => l_action_id
8682 ,lockedactid => l_24q_asg_action_id
8683 );
8684 END IF;
8685
8686 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
8687 l_24q_asg_action_id := NULL;
8688 OPEN c_chk_asg_action(g_sal_data_rec_add(i).assignment_id,l_last_24qc_pay_act_id);
8689 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8690 CLOSE c_chk_asg_action;
8691
8692 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
8693
8694 IF (l_24q_asg_action_id IS NOT NULL)
8695 THEN
8696 hr_nonrun_asact.insint(lockingactid => l_action_id
8697 ,lockedactid => l_24q_asg_action_id
8698 );
8699 END IF;
8700
8701 END IF;
8702
8703 IF (l_dummy IS NOT NULL)
8704 THEN
8705
8706 pay_in_utils.set_location(g_debug,'Value of l_dummy is '|| l_dummy, 61);
8707
8708 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
8709 l_24q_asg_action_id := NULL;
8710 l_lock_exists := 0;
8711
8712 OPEN c_chk_asg_action(g_sal_data_rec_add(i).assignment_id,l_24q_locked_pay_id);
8713 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8714 CLOSE c_chk_asg_action;
8715
8716 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8717 FETCH c_chk_action_lock INTO l_lock_exists;
8718 CLOSE c_chk_action_lock;
8719
8720 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
8721
8722 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8723 THEN
8724 hr_nonrun_asact.insint(lockingactid => l_dummy
8725 ,lockedactid => l_24q_asg_action_id
8726 );
8727 END IF;
8728
8729 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
8730 l_24q_asg_action_id := NULL;
8731 l_lock_exists := 0;
8732 OPEN c_chk_asg_action(g_sal_data_rec_add(i).assignment_id,l_24qc_locked_pay_id);
8733 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8734 CLOSE c_chk_asg_action;
8735
8736 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8737 FETCH c_chk_action_lock INTO l_lock_exists;
8738 CLOSE c_chk_action_lock;
8739
8740 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
8741
8742 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8743 THEN
8744 hr_nonrun_asact.insint(lockingactid => l_dummy
8745 ,lockedactid => l_24q_asg_action_id
8746 );
8747 END IF;
8748
8749 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
8750 l_24q_asg_action_id := NULL;
8751 l_lock_exists := 0;
8752 OPEN c_chk_asg_action(g_sal_data_rec_add(i).assignment_id,l_last_24qc_pay_act_id);
8753 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8754 CLOSE c_chk_asg_action;
8755
8756 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8757 FETCH c_chk_action_lock INTO l_lock_exists;
8758 CLOSE c_chk_action_lock;
8759
8760 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
8761
8762 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8763 THEN
8764 hr_nonrun_asact.insint(lockingactid => l_dummy
8765 ,lockedactid => l_24q_asg_action_id
8766 );
8767 END IF;
8768 END IF;
8769
8770 END LOOP;
8771 END IF;
8772
8773
8774 pay_in_utils.set_location(g_debug,'Inserting Asg Action ID for Updated Assignment Actions ' ,70);
8775 pay_in_utils.set_location(g_debug,'Value of g_count_sal_update is '|| g_count_sal_update, 71);
8776 IF ((g_count_sal_update > 1) AND (g_correction_mode <> 'Y'))
8777 THEN
8778 FOR i IN 1..g_count_sal_update - 1
8779 LOOP
8780 l_24q_asg_action_id := NULL;
8781 l_dummy := NULL;
8782
8783 pay_in_utils.set_location(g_debug,'Checking for Assignment '|| g_sal_data_rec_upd(i).assignment_id,1);
8784 pay_in_utils.set_location(g_debug,'Payroll Action id is ' || p_payroll_action_id,2);
8785 OPEN c_chk_asg_action(g_sal_data_rec_upd(i).assignment_id,p_payroll_action_id);
8786 FETCH c_chk_asg_action INTO l_dummy;
8787 CLOSE c_chk_asg_action;
8788
8789
8790 pay_in_utils.trace('l_dummy in g_count_sal_update ',l_dummy);
8791
8792 IF (l_dummy IS NULL)
8793 THEN
8794 SELECT pay_assignment_actions_s.NEXTVAL
8795 INTO l_action_id
8796 FROM dual;
8797
8798 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 61);
8799 pay_in_utils.set_location(g_debug,'Inserting Assignment action id ',61);
8800
8801 hr_nonrun_asact.insact(lockingactid => l_action_id
8802 ,assignid => g_sal_data_rec_upd(i).assignment_id
8803 ,pactid => p_payroll_action_id
8804 ,chunk => p_chunk
8805 );
8806
8807 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
8808
8809 OPEN c_chk_asg_action(g_sal_data_rec_upd(i).assignment_id,l_24q_locked_pay_id);
8810 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8811 CLOSE c_chk_asg_action;
8812
8813 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
8814
8815 IF (l_24q_asg_action_id IS NOT NULL)
8816 THEN
8817 hr_nonrun_asact.insint(lockingactid => l_action_id
8818 ,lockedactid => l_24q_asg_action_id
8819 );
8820 END IF;
8821 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
8822 l_24q_asg_action_id := NULL;
8823 OPEN c_chk_asg_action(g_sal_data_rec_upd(i).assignment_id,l_24qc_locked_pay_id);
8824 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8825 CLOSE c_chk_asg_action;
8826
8827 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
8828
8829 IF (l_24q_asg_action_id IS NOT NULL)
8830 THEN
8831 hr_nonrun_asact.insint(lockingactid => l_action_id
8832 ,lockedactid => l_24q_asg_action_id
8833 );
8834 END IF;
8835
8836 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
8837 l_24q_asg_action_id := NULL;
8838 OPEN c_chk_asg_action(g_sal_data_rec_upd(i).assignment_id,l_last_24qc_pay_act_id);
8839 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8840 CLOSE c_chk_asg_action;
8841
8842 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
8843
8844 IF (l_24q_asg_action_id IS NOT NULL)
8845 THEN
8846 hr_nonrun_asact.insint(lockingactid => l_action_id
8847 ,lockedactid => l_24q_asg_action_id
8848 );
8849 END IF;
8850 END IF;
8851
8852 IF (l_dummy IS NOT NULL)
8853 THEN
8854
8855 pay_in_utils.set_location(g_debug,'Value of l_dummy is '|| l_dummy, 61);
8856
8857 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
8858 l_24q_asg_action_id := NULL;
8859 l_lock_exists := 0;
8860
8861 OPEN c_chk_asg_action(g_sal_data_rec_upd(i).assignment_id,l_24q_locked_pay_id);
8862 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8863 CLOSE c_chk_asg_action;
8864
8865 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8866 FETCH c_chk_action_lock INTO l_lock_exists;
8867 CLOSE c_chk_action_lock;
8868
8869 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
8870
8871 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8872 THEN
8873 hr_nonrun_asact.insint(lockingactid => l_dummy
8874 ,lockedactid => l_24q_asg_action_id
8875 );
8876 END IF;
8877
8878 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
8879 l_24q_asg_action_id := NULL;
8880 l_lock_exists := 0;
8881 OPEN c_chk_asg_action(g_sal_data_rec_upd(i).assignment_id,l_24qc_locked_pay_id);
8882 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8883 CLOSE c_chk_asg_action;
8884
8885 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8886 FETCH c_chk_action_lock INTO l_lock_exists;
8887 CLOSE c_chk_action_lock;
8888
8889 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
8890
8891 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8892 THEN
8893 hr_nonrun_asact.insint(lockingactid => l_dummy
8894 ,lockedactid => l_24q_asg_action_id
8895 );
8896 END IF;
8897
8898 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
8899 l_24q_asg_action_id := NULL;
8900 l_lock_exists := 0;
8901 OPEN c_chk_asg_action(g_sal_data_rec_upd(i).assignment_id,l_last_24qc_pay_act_id);
8902 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8903 CLOSE c_chk_asg_action;
8904
8905 OPEN c_chk_action_lock(l_dummy,l_24q_asg_action_id);
8906 FETCH c_chk_action_lock INTO l_lock_exists;
8907 CLOSE c_chk_action_lock;
8908
8909 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
8910
8911 IF ((l_24q_asg_action_id IS NOT NULL) AND (l_lock_exists=0))
8912 THEN
8913 hr_nonrun_asact.insint(lockingactid => l_dummy
8914 ,lockedactid => l_24q_asg_action_id
8915 );
8916 END IF;
8917 END IF;
8918
8919 END LOOP;
8920 END IF;
8921
8922 pay_in_utils.set_location(g_debug,'Asg Action ID Insertion Over for Salary Records ', 80);
8923
8924 pay_in_utils.set_location(g_debug,'Archiving PL/SQL Data for Salary Records: archive_code ',90);
8925
8926 --For C4,C5 only salary data should be Archived
8927 IF (g_correction_mode IN('C4','C5','%'))
8928 THEN
8929 archive_salary_data(g_payroll_action_id,l_24q_locked_pay_id);
8930 END IF;
8931
8932 END IF;
8933 --C4,C5 Salary Data Archival Ends
8934 pay_in_utils.set_location(g_debug,'Archival for C4,C5 Modes Ends : '||l_procedure,100);
8935
8936
8937 IF (g_action)
8938 THEN
8939 pay_in_utils.set_location(g_debug,'Entering : '||l_procedure,110);
8940
8941 pay_in_utils.set_location(g_debug,'Inserting assignment action id in pay_assignment_actions ',40);
8942 pay_in_utils.set_location(g_debug,'Inserting Asg Action ID for Deleted Element Entries ' ,50);
8943
8944 pay_in_utils.set_location(g_debug,'Value of g_count_ee_delete is '|| g_count_ee_delete, 51);
8945 IF ((g_count_ee_delete > 1)AND (g_correction_mode <> 'Y'))
8946 THEN
8947 FOR i IN 1..g_count_ee_delete - 1
8948 LOOP
8949 l_24q_asg_action_id := NULL;
8950 l_dummy := NULL;
8951 OPEN c_chk_asg_action(g_ee_data_rec_del(i).assignment_id,p_payroll_action_id);
8952 FETCH c_chk_asg_action INTO l_dummy;
8953 CLOSE c_chk_asg_action;
8954
8955 IF (l_dummy IS NULL)
8956 THEN
8957 SELECT pay_assignment_actions_s.NEXTVAL
8958 INTO l_action_id
8959 FROM dual;
8960
8961 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 61);
8962 pay_in_utils.set_location(g_debug,'Inserting Assignment action id ',61);
8963
8964 hr_nonrun_asact.insact(lockingactid => l_action_id
8965 ,assignid => g_ee_data_rec_del(i).assignment_id
8966 ,pactid => p_payroll_action_id
8967 ,chunk => p_chunk
8968 );
8969
8970 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
8971
8972 OPEN c_chk_asg_action(g_ee_data_rec_del(i).assignment_id,l_24q_locked_pay_id);
8973 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8974 CLOSE c_chk_asg_action;
8975
8976 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
8977
8978 IF (l_24q_asg_action_id IS NOT NULL)
8979 THEN
8980 hr_nonrun_asact.insint(lockingactid => l_action_id
8981 ,lockedactid => l_24q_asg_action_id
8982 );
8983 END IF;
8984
8985 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
8986 l_24q_asg_action_id := NULL;
8987 OPEN c_chk_asg_action(g_ee_data_rec_del(i).assignment_id,l_24qc_locked_pay_id);
8988 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
8989 CLOSE c_chk_asg_action;
8990
8991 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
8992
8993 IF (l_24q_asg_action_id IS NOT NULL)
8994 THEN
8995 hr_nonrun_asact.insint(lockingactid => l_action_id
8996 ,lockedactid => l_24q_asg_action_id
8997 );
8998 END IF;
8999
9000 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
9001 l_24q_asg_action_id := NULL;
9002 OPEN c_chk_asg_action(g_ee_data_rec_del(i).assignment_id,l_last_24qc_pay_act_id);
9003 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
9004 CLOSE c_chk_asg_action;
9005
9006 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
9007
9008 IF (l_24q_asg_action_id IS NOT NULL)
9009 THEN
9010 hr_nonrun_asact.insint(lockingactid => l_action_id
9011 ,lockedactid => l_24q_asg_action_id
9012 );
9013 END IF;
9014 END IF;
9015 END LOOP;
9016 END IF;
9017
9018 pay_in_utils.set_location(g_debug,'Inserting Asg Action ID for Added Element Entries ' ,60);
9019 pay_in_utils.set_location(g_debug,'Value of g_count_ee_addition is '|| g_count_ee_addition, 61);
9020 IF ((g_count_ee_addition > 1)AND(g_correction_mode <> 'Y'))
9021 THEN
9022 FOR i IN 1..g_count_ee_addition - 1
9023 LOOP
9024 l_24q_asg_action_id := NULL;
9025 l_dummy := NULL;
9026 OPEN c_chk_asg_action(g_ee_data_rec_add(i).assignment_id,p_payroll_action_id);
9027 FETCH c_chk_asg_action INTO l_dummy;
9028 CLOSE c_chk_asg_action;
9029
9030 pay_in_utils.set_location(g_debug,'Value of l_dummy is '|| l_dummy, 61);
9031 IF (l_dummy IS NULL)
9032 THEN
9033 SELECT pay_assignment_actions_s.NEXTVAL
9034 INTO l_action_id
9035 FROM dual;
9036
9037 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 61);
9038 pay_in_utils.set_location(g_debug,'Inserting Assignment action id ',61);
9039
9040 hr_nonrun_asact.insact(lockingactid => l_action_id
9041 ,assignid => g_ee_data_rec_add(i).assignment_id
9042 ,pactid => p_payroll_action_id
9043 ,chunk => p_chunk
9044 );
9045
9046 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
9047
9048 OPEN c_chk_asg_action(g_ee_data_rec_add(i).assignment_id,l_24q_locked_pay_id);
9049 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
9050 CLOSE c_chk_asg_action;
9051
9052 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
9053
9054 IF (l_24q_asg_action_id IS NOT NULL)
9055 THEN
9056 hr_nonrun_asact.insint(lockingactid => l_action_id
9057 ,lockedactid => l_24q_asg_action_id
9058 );
9059 END IF;
9060
9061 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
9062 l_24q_asg_action_id := NULL;
9063 OPEN c_chk_asg_action(g_ee_data_rec_add(i).assignment_id,l_24qc_locked_pay_id);
9064 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
9065 CLOSE c_chk_asg_action;
9066
9067 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
9068
9069 IF (l_24q_asg_action_id IS NOT NULL)
9070 THEN
9071 hr_nonrun_asact.insint(lockingactid => l_action_id
9072 ,lockedactid => l_24q_asg_action_id
9073 );
9074 END IF;
9075
9076 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
9077 l_24q_asg_action_id := NULL;
9078 OPEN c_chk_asg_action(g_ee_data_rec_add(i).assignment_id,l_last_24qc_pay_act_id);
9079 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
9080 CLOSE c_chk_asg_action;
9081
9082 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
9083
9084 IF (l_24q_asg_action_id IS NOT NULL)
9085 THEN
9086 hr_nonrun_asact.insint(lockingactid => l_action_id
9087 ,lockedactid => l_24q_asg_action_id
9088 );
9089 END IF;
9090
9091 END IF;
9092 END LOOP;
9093 END IF;
9094
9095 pay_in_utils.set_location(g_debug,'Inserting Asg Action ID for Updated Element Entries ' ,70);
9096 pay_in_utils.set_location(g_debug,'Value of g_count_ee_update is '|| g_count_ee_update, 71);
9097 IF ((g_count_ee_update > 1)AND(g_correction_mode <> 'Y'))
9098 THEN
9099 FOR i IN 1..g_count_ee_update - 1
9100 LOOP
9101 l_24q_asg_action_id := NULL;
9102 l_dummy := NULL;
9103
9104 pay_in_utils.set_location(g_debug,'Checking for Assignment '|| g_ee_data_rec_upd(i).assignment_id,1);
9105 pay_in_utils.set_location(g_debug,'Payroll Action id is ' || p_payroll_action_id,2);
9106 OPEN c_chk_asg_action(g_ee_data_rec_upd(i).assignment_id,p_payroll_action_id);
9107 FETCH c_chk_asg_action INTO l_dummy;
9108 CLOSE c_chk_asg_action;
9109
9110 pay_in_utils.set_location(g_debug,'Value of dummy is ' || l_dummy ,3);
9111 IF (l_dummy IS NULL)
9112 THEN
9113 SELECT pay_assignment_actions_s.NEXTVAL
9114 INTO l_action_id
9115 FROM dual;
9116
9117 pay_in_utils.set_location(g_debug,'Value of l_action_id is '|| l_action_id, 61);
9118 pay_in_utils.set_location(g_debug,'Inserting Assignment action id ',61);
9119
9120 hr_nonrun_asact.insact(lockingactid => l_action_id
9121 ,assignid => g_ee_data_rec_upd(i).assignment_id
9122 ,pactid => p_payroll_action_id
9123 ,chunk => p_chunk
9124 );
9125
9126 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Archival', 61);
9127
9128 OPEN c_chk_asg_action(g_ee_data_rec_upd(i).assignment_id,l_24q_locked_pay_id);
9129 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
9130 CLOSE c_chk_asg_action;
9131
9132 pay_in_utils.trace('Value of l_locked_action_id for 24Q is ',l_24q_asg_action_id);
9133
9134 IF (l_24q_asg_action_id IS NOT NULL)
9135 THEN
9136 hr_nonrun_asact.insint(lockingactid => l_action_id
9137 ,lockedactid => l_24q_asg_action_id
9138 );
9139 END IF;
9140 pay_in_utils.set_location(g_debug,'Enforcing Locking on 24Q Correction', 61);
9141 l_24q_asg_action_id := NULL;
9142 OPEN c_chk_asg_action(g_ee_data_rec_upd(i).assignment_id,l_24qc_locked_pay_id);
9143 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
9144 CLOSE c_chk_asg_action;
9145
9146 pay_in_utils.trace('Value of l_locked_action_id for 24Q Correction is ',l_24q_asg_action_id);
9147
9148 IF (l_24q_asg_action_id IS NOT NULL)
9149 THEN
9150 hr_nonrun_asact.insint(lockingactid => l_action_id
9151 ,lockedactid => l_24q_asg_action_id
9152 );
9153 END IF;
9154
9155 pay_in_utils.set_location(g_debug,'Enforcing Locking on Previous 24Q Correction', 61);
9156 l_24q_asg_action_id := NULL;
9157 OPEN c_chk_asg_action(g_ee_data_rec_upd(i).assignment_id,l_last_24qc_pay_act_id);
9158 FETCH c_chk_asg_action INTO l_24q_asg_action_id;
9159 CLOSE c_chk_asg_action;
9160
9161 pay_in_utils.trace('Value of l_locked_action_id for Previous 24Q Correction is ',l_24q_asg_action_id);
9162
9163 IF (l_24q_asg_action_id IS NOT NULL)
9164 THEN
9165 hr_nonrun_asact.insint(lockingactid => l_action_id
9166 ,lockedactid => l_24q_asg_action_id
9167 );
9168 END IF;
9169 END IF;
9170 END LOOP;
9171 END IF;
9172
9173 pay_in_utils.set_location(g_debug,'Asg Action ID Insertion Over ', 80);
9174 pay_in_utils.set_location(g_debug,'Archiving PL/SQL Data : archive_code ',90);
9175
9176 --C2,C3 then archive only updated Challans, if C9 then only added challans
9177 IF (g_correction_mode NOT IN ('Y','C1'))
9178 THEN
9179 archive_challan_data(g_payroll_action_id,l_24q_locked_pay_id);
9180 END IF;
9181
9182 IF (g_correction_mode NOT IN ('C5','Y')) THEN
9183 pay_in_utils.set_location(g_debug,'Checking Org archival status',1);
9184 l_flag_number := -1;
9185 l_flag_number := check_archival_status(NULL,'IN_24QC_ORG',NULL,NULL);
9186 IF (l_flag_number = 0)
9187 THEN
9188 archive_organization_data(g_payroll_action_id,l_24q_locked_pay_id);
9189 END IF;
9190 END IF;
9191
9192 --For C3,C5,C9 only deductee data should be archived
9193 IF (g_correction_mode IN('C3','C5','C9','%'))
9194 THEN
9195 archive_deductee_data(g_payroll_action_id,l_24q_locked_pay_id);
9196 END IF;
9197
9198 pay_in_utils.set_location(g_debug,'Generating Locking...',1);
9199 --Inserting Assignment Actions and Locking if no deductee records exist for this archival.
9200 IF ((g_count_ee_delete = 1) AND (g_count_ee_addition = 1) AND (g_count_ee_update = 1))
9201 THEN
9202 pay_in_utils.set_location(g_debug,'Generating Locking...',2);
9203 pay_in_utils.set_location(g_debug,'p_payroll_action_id ' || p_payroll_action_id ,1);
9204 pay_in_utils.set_location(g_debug,'l_24q_locked_pay_id ' || l_24q_locked_pay_id ,1);
9205 pay_in_utils.set_location(g_debug,'l_24qc_locked_pay_id' || l_24qc_locked_pay_id,1);
9206 generate_locking(p_payroll_action_id,l_24q_locked_pay_id,l_24qc_locked_pay_id,p_chunk);
9207 END IF;
9208
9209 g_action := FALSE;
9210
9211 IF (g_correction_mode = 'C5')
9212 THEN
9213 archive_c5_data_only(p_payroll_action_id);
9214 END IF;
9215
9216 IF (g_debug)
9217 THEN
9218 trace_pl_sql_table_data();
9219 END IF;
9220
9221 END IF;
9222
9223 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure,100);
9224
9225 --
9226 EXCEPTION
9227 WHEN OTHERS THEN
9228 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
9229 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
9230 END assignment_action_code;
9231
9232 --------------------------------------------------------------------------
9233 -- --
9234 -- Name : ARCHIVE_CODE --
9235 -- Type : PROCEDURE --
9236 -- Access : Public --
9237 -- Description : Procedure to call the internal procedures to --
9238 -- actually archive the data. --
9239 -- Parameters : --
9240 -- IN : p_assignment_action_id NUMBER --
9241 -- p_effective_date DATE --
9242 -- --
9243 -- OUT : N/A --
9244 -- --
9245 -- Change History : --
9246 --------------------------------------------------------------------------
9247 -- Rev# Date Userid Description --
9248 --------------------------------------------------------------------------
9249 -- 115.0 13-Mar-2006 aaagarwa Initial Version --
9250 --------------------------------------------------------------------------
9251 PROCEDURE archive_code (p_assignment_action_id IN NUMBER
9252 ,p_effective_date IN DATE
9253 )
9254 IS
9255 BEGIN
9256 NULL;
9257 END archive_code;
9258
9259 --------------------------------------------------------------------------
9260 -- --
9261 -- Name : DEINITIALIZATION_CODE --
9262 -- Type : PROCEDURE --
9263 -- Access : Public --
9264 -- Description : --
9265 -- Parameters : --
9266 -- IN : p_payroll_action_id NUMBER --
9267 -- --
9268 -- OUT : N/A --
9269 -- --
9270 -- Change History : --
9271 --------------------------------------------------------------------------
9272 -- Rev# Date Userid Description --
9273 --------------------------------------------------------------------------
9274 -- 115.0 13-Mar-2006 abhjain Initial Version --
9275 -- 115.1 07-Feb-2007 rpalli 5754018 :24QC Quarter4 Stat Update --
9276 --------------------------------------------------------------------------
9277 PROCEDURE deinitialization_code (p_payroll_action_id IN NUMBER)
9278 IS
9279 CURSOR cur_org_recs(p_payroll_action_id NUMBER)
9280 IS
9281 SELECT DECODE(action_information15, 1, 'C1')
9282 ,action_information_id
9283 ,object_version_number
9284 ,action_information29
9285 FROM pay_action_information
9286 WHERE action_information1 = g_gre_id
9287 AND action_information3 = g_year||g_quarter
9288 AND action_context_type = 'PA'
9289 AND action_information_category = 'IN_24QC_ORG'
9290 AND action_context_id = p_payroll_action_id;
9291
9292 CURSOR cur_challan_recs(p_payroll_action_id NUMBER)
9293 IS
9294 SELECT action_information1 challan
9295 ,DECODE(action_information18, 'U', 'C2', 'A', 'C9', 'NC', null) correction_type
9296 ,action_information_id
9297 ,object_version_number
9298 FROM pay_action_information
9299 WHERE action_information3 = g_gre_id
9300 AND action_information2 = g_year||g_quarter
9301 AND action_context_type = 'PA'
9302 AND action_information_category = 'IN_24QC_CHALLAN'
9303 AND action_context_id = p_payroll_action_id;
9304
9305 CURSOR cur_deductee_recs(p_payroll_action_id NUMBER
9306 ,p_challan_number VARCHAR2)
9307 IS
9308 SELECT 'C3' correction_type
9309 FROM pay_action_information pai
9310 WHERE pai.action_context_id IN (SELECT assignment_action_id
9311 FROM pay_assignment_actions
9312 WHERE payroll_action_id = p_payroll_action_id
9313 AND assignment_id = pai.assignment_id
9314 )
9315 AND action_context_type = 'AAP'
9316 AND action_information_category = 'IN_24QC_DEDUCTEE'
9317 AND action_information3 = g_gre_id
9318 AND action_information2 = g_year||g_quarter
9319 AND action_information15 IN ('U', 'A', 'D')
9320 AND (
9321 ( action_information19 IS NULL
9322 AND action_information20 IS NULL
9323 )
9324 OR
9325 ( (INSTR(action_information19,'C3') <> 0)
9326 )
9327 )
9328 AND action_information1 = p_challan_number;
9329
9330 CURSOR cur_c5_deductee_recs(p_payroll_action_id NUMBER
9331 ,p_challan_number VARCHAR2)
9332 IS
9333 SELECT 'C5' correction_type
9334 FROM pay_action_information pai
9335 WHERE pai.action_context_id IN ( SELECT assignment_action_id
9336 FROM pay_assignment_actions
9337 WHERE payroll_action_id = p_payroll_action_id
9338 AND assignment_id = pai.assignment_id
9339 )
9340 AND action_context_type = 'AAP'
9341 AND action_information_category = 'IN_24QC_DEDUCTEE'
9342 AND action_information3 = g_gre_id
9343 AND action_information2 = g_year||g_quarter
9344 AND INSTR(action_information19,'C5') <> 0
9345 AND action_information20 IS NOT NULL
9346 AND action_information1 = p_challan_number;
9347
9348 CURSOR cur_c5_salary_recs(p_payroll_action_id NUMBER
9349 ,p_person_id NUMBER)
9350 IS
9351 SELECT 'C5' correction_type
9352 FROM pay_action_information pai
9353 WHERE pai.action_context_id IN ( SELECT assignment_action_id
9354 FROM pay_assignment_actions
9355 WHERE payroll_action_id = p_payroll_action_id
9356 AND assignment_id = pai.assignment_id
9357 )
9358 AND action_context_type = 'AAP'
9359 AND action_information_category = 'IN_24QC_PERSON'
9360 AND action_information3 = g_gre_id
9361 AND action_information2 = g_year||g_quarter
9362 AND INSTR(action_information11,'C5') <> 0
9363 AND action_information1 = p_person_id;
9364
9365 CURSOR cur_c4_salary_recs(p_payroll_action_id NUMBER
9366 ,p_person_id NUMBER)
9367 IS
9368 SELECT 'C4' correction_type
9369 FROM pay_action_information pai
9370 WHERE pai.action_context_id IN ( SELECT assignment_action_id
9371 FROM pay_assignment_actions
9372 WHERE payroll_action_id = p_payroll_action_id
9373 AND assignment_id = pai.assignment_id
9374 )
9375 AND action_context_type = 'AAP'
9376 AND action_information_category = 'IN_24QC_PERSON'
9377 AND action_information3 = g_gre_id
9378 AND action_information2 = g_year||g_quarter
9379 AND INSTR(action_information11,'C4') <> 0
9380 AND action_information1 = p_person_id;
9381
9382 CURSOR cur_salary_update_recs
9383 IS
9384 SELECT DISTINCT action_information3 gre_id
9385 FROM pay_action_information
9386 WHERE action_information_category = 'IN_24QC_PERSON'
9387 AND action_context_type = 'AAP'
9388 AND action_information10 = 'A'
9389 AND action_information11 = 'C4'
9390 AND action_context_id IN (SELECT assignment_action_id
9391 FROM pay_assignment_actions
9392 WHERE payroll_action_id = p_payroll_action_id)
9393 ORDER BY action_information3;
9394
9395
9396 CURSOR cur_person_update_recs( p_gre_id VARCHAR2)
9397 IS
9398 SELECT DISTINCT action_information1 person_id
9399 , source_id
9400 , action_information_id
9401 , object_version_number
9402 FROM pay_action_information
9403 WHERE action_information_category = 'IN_24QC_PERSON'
9404 AND action_context_type = 'AAP'
9405 AND action_information3 = fnd_number.canonical_to_number(p_gre_id)
9406 AND action_information10 = 'A'
9407 AND action_information11 = 'C4'
9408 AND action_context_id IN (SELECT assignment_action_id
9409 FROM pay_assignment_actions
9410 WHERE payroll_action_id = p_payroll_action_id)
9411 ORDER BY LENGTH(action_information1)
9412 ,action_information1
9413 ,source_id;
9414
9415 CURSOR cur_min_salary_record( p_gre_id VARCHAR2)
9416 IS
9417 SELECT MIN(fnd_number.canonical_to_number(action_information12)) min_salary_rec
9418 FROM pay_action_information
9419 WHERE action_information_category = 'IN_24QC_PERSON'
9420 AND action_context_type = 'AAP'
9421 AND action_information3 = fnd_number.canonical_to_number(p_gre_id)
9422 AND action_information10 = 'A'
9423 AND action_information11 = 'C4'
9424 AND action_context_id IN (SELECT assignment_action_id
9425 FROM pay_assignment_actions
9426 WHERE payroll_action_id = p_payroll_action_id);
9427
9428
9429 CURSOR cur_salary_recs(p_payroll_action_id NUMBER)
9430 IS
9431 SELECT DISTINCT action_information1 person_id
9432 FROM pay_action_information pai
9433 WHERE action_information_category = 'IN_24QC_PERSON'
9434 AND action_context_type = 'AAP'
9435 AND action_context_id IN (SELECT assignment_action_id
9436 FROM pay_assignment_actions
9437 WHERE payroll_action_id = p_payroll_action_id
9438 AND assignment_id = pai.assignment_id)
9439 AND action_information3 = g_gre_id
9440 AND action_information2 = g_year||g_quarter;
9441
9442 CURSOR c_24q_ee_sum(p_challan_number VARCHAR2
9443 ,p_24q_pay_action_id NUMBER
9444 )
9445 IS
9446 SELECT SUM(NVL(pai.action_information9,0)) amount_deposited
9447 FROM pay_action_information pai
9448 ,pay_assignment_actions paa
9449 WHERE pai.action_information_category = 'IN_24Q_DEDUCTEE'
9450 AND paa.assignment_action_id = pai.action_context_id
9451 AND pai.action_information1 = p_challan_number
9452 AND paa.payroll_action_id = p_24q_pay_action_id;
9453
9454 TYPE t_challan_data IS RECORD
9455 ( challan_no hr_organization_information.org_information1%TYPE
9456 ,correction_type VARCHAR2(100)
9457 ,action_information_id NUMBER
9458 ,object_version_number NUMBER
9459 );
9460
9461 TYPE t_challan_data_tab IS TABLE OF t_challan_data
9462 INDEX BY binary_integer;
9463 t_challan_nos t_challan_data_tab;
9464
9465 l_index NUMBER ;
9466 l_correction_type VARCHAR2(100);
9467 org_correction_type VARCHAR2(100);
9468 l_org_update_string VARCHAR(2400);
9469 l_action_info_id NUMBER;
9470 l_ovn NUMBER;
9471 l_y_flag VARCHAR2(10);
9472 l_last_sum VARCHAR2(250);
9473 l_procedure VARCHAR2(100);
9474 l_message VARCHAR2(300);
9475 BEGIN
9476
9477 l_procedure := g_package ||'.deinitialization_code';
9478 pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
9479
9480 IF (g_correction_mode = 'C5')
9481 THEN
9482 RETURN;
9483 END IF;
9484
9485 OPEN cur_org_recs(p_payroll_action_id);
9486 FETCH cur_org_recs INTO org_correction_type, l_action_info_id, l_ovn, l_y_flag;
9487 CLOSE cur_org_recs;
9488
9489 IF (l_y_flag IS NOT NULL)
9490 THEN
9491 RETURN;
9492 END IF;
9493
9494 pay_in_utils.set_location(g_debug,'Checking in Challans...',2);
9495 FOR i IN cur_challan_recs(p_payroll_action_id) LOOP
9496 l_index := nvl(l_index, 0) + 1;
9497 t_challan_nos(l_index).challan_no := i.challan;
9498 t_challan_nos(l_index).correction_type := i.correction_type;
9499 t_challan_nos(l_index).action_information_id := i.action_information_id;
9500 t_challan_nos(l_index).object_version_number := i.object_version_number;
9501
9502 l_correction_type := null;
9503
9504 OPEN cur_deductee_recs(p_payroll_action_id, t_challan_nos(l_index).challan_no);
9505 FETCH cur_deductee_recs INTO l_correction_type;
9506 CLOSE cur_deductee_recs;
9507
9508 IF nvl(t_challan_nos(l_index).correction_type, 'C2') = 'C2' AND l_correction_type = 'C3' THEN
9509 t_challan_nos(l_index).correction_type := 'C3';
9510 END IF;
9511
9512 OPEN cur_c5_deductee_recs(p_payroll_action_id, t_challan_nos(l_index).challan_no);
9513 FETCH cur_c5_deductee_recs INTO l_correction_type;
9514 CLOSE cur_c5_deductee_recs;
9515
9516 IF NVL(t_challan_nos(l_index).correction_type, '%') <> 'C9' AND l_correction_type = 'C5' THEN
9517 IF t_challan_nos(l_index).correction_type IS NULL THEN
9518 t_challan_nos(l_index).correction_type := 'C5';
9519 ELSE
9520 t_challan_nos(l_index).correction_type := t_challan_nos(l_index).correction_type||':C5';
9521 END IF;
9522 END IF;
9523
9524 pay_in_utils.set_location(g_debug,'Updating API called for Challan ', 3);
9525 pay_action_information_api.update_action_information
9526 (p_validate => FALSE
9527 ,p_action_information_id => t_challan_nos(l_index).action_information_id
9528 ,p_object_version_number => t_challan_nos(l_index).object_version_number
9529 ,p_action_information29 => t_challan_nos(l_index).correction_type
9530 );
9531 pay_in_utils.set_location(g_debug,'Updating API successful for Challan ', 3);
9532 l_org_update_string := NVL(l_org_update_string, '1') ||':'||t_challan_nos(l_index).correction_type;
9533
9534 END LOOP;
9535
9536 pay_in_utils.set_location(g_debug,'Checked Challans...',2);
9537
9538
9539 pay_in_utils.set_location(g_debug,'Updating SD Record Number for A mode in Salary Records : ',3);
9540
9541 l_index := 0;
9542 FOR c_salary_rec IN cur_salary_update_recs
9543 LOOP
9544 OPEN cur_min_salary_record(c_salary_rec.gre_id);
9545 FETCH cur_min_salary_record INTO l_index;
9546 CLOSE cur_min_salary_record;
9547 pay_in_utils.set_location(g_debug,'l_index...',1);
9548 pay_in_utils.set_location(g_debug,'c_salary_rec.gre_id...',c_salary_rec.gre_id);
9549
9550 FOR cur_rec IN cur_person_update_recs(c_salary_rec.gre_id)
9551 LOOP
9552 pay_action_information_api.update_action_information
9553 (p_validate => FALSE
9554 ,p_action_information_id => cur_rec.action_information_id
9555 ,p_object_version_number => cur_rec.object_version_number
9556 ,p_action_information12 => l_index
9557 );
9558 l_index := l_index + 1;
9559 pay_in_utils.set_location(g_debug,'l_index...',2);
9560 pay_in_utils.set_location(g_debug,'l_index...',2);
9561 END LOOP;
9562 END LOOP;
9563
9564 pay_in_utils.set_location(g_debug,'Updated SD Record Number for A mode in Salary Records : ',3);
9565
9566 pay_in_utils.set_location(g_debug,'Checking in Salary Records...',3);
9567
9568 FOR i IN cur_salary_recs(p_payroll_action_id) LOOP
9569
9570 OPEN cur_c5_salary_recs(p_payroll_action_id, i.person_id);
9571 FETCH cur_c5_salary_recs INTO l_correction_type;
9572 CLOSE cur_c5_salary_recs;
9573
9574 IF l_correction_type = 'C5' THEN
9575 l_org_update_string := NVL(l_org_update_string, '1') ||':'||l_correction_type;
9576 END IF;
9577
9578 OPEN cur_c4_salary_recs(p_payroll_action_id, i.person_id);
9579 FETCH cur_c4_salary_recs INTO l_correction_type;
9580 CLOSE cur_c4_salary_recs;
9581
9582 IF l_correction_type = 'C4' THEN
9583 l_org_update_string := NVL(l_org_update_string, '1') ||':'||l_correction_type;
9584 END IF;
9585
9586 END LOOP;
9587
9588 pay_in_utils.set_location(g_debug,'Checked Salary Records...',3);
9589
9590 IF INSTR(l_org_update_string, 'C2') <> 0 THEN
9591 IF org_correction_type is null or org_correction_type = 'C1' THEN
9592 org_correction_type := 'C2';
9593 ELSE
9594 org_correction_type := org_correction_type || ':C2';
9595 END IF;
9596 END IF;
9597 IF INSTR(l_org_update_string, 'C3') <> 0 THEN
9598 IF org_correction_type IS NULL OR org_correction_type = 'C1' THEN
9599 org_correction_type := 'C3';
9600 ELSE
9601 org_correction_type := org_correction_type || ':C3';
9602 END IF;
9603 END IF;
9604 IF INSTR(l_org_update_string, 'C4') <> 0 THEN
9605 IF org_correction_type IS NULL THEN
9606 org_correction_type := 'C4';
9607 ELSE
9608 org_correction_type := org_correction_type || ':C4';
9609 END IF;
9610 END IF;
9611 IF INSTR(l_org_update_string, 'C5') <> 0 THEN
9612 IF org_correction_type IS NULL THEN
9613 org_correction_type := 'C5';
9614 ELSE
9615 org_correction_type := org_correction_type || ':C5';
9616 END IF;
9617 END IF;
9618 IF INSTR(l_org_update_string, 'C9') <> 0 THEN
9619 IF org_correction_type IS NULL THEN
9620 org_correction_type := 'C9';
9621 ELSE
9622 org_correction_type := org_correction_type || ':C9';
9623 END IF;
9624 END IF;
9625
9626
9627 pay_in_utils.set_location(g_debug,'Updating API called for Org ', 3);
9628 pay_action_information_api.update_action_information
9629 (p_validate => FALSE
9630 ,p_action_information_id => l_action_info_id
9631 ,p_object_version_number => l_ovn
9632 ,p_action_information29 => org_correction_type
9633 );
9634 pay_in_utils.set_location(g_debug,'Updating API successful for Org ', 3);
9635 pay_in_utils.set_location(g_debug,'Leaving: '|| g_package||'.deinitialization_code',1);
9636
9637 EXCEPTION
9638 WHEN OTHERS THEN
9639 l_message := pay_in_utils.get_pay_message('PER_IN_ORACLE_GENERIC_ERROR', 'FUNCTION:'||l_procedure, 'SQLERRMC:'||sqlerrm);
9640 pay_in_utils.set_location(g_debug,'Leaving : '||l_procedure, 150);
9641 END deinitialization_code;
9642
9643
9644 END pay_in_24qc_archive;