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