DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_IN_TAX_DECLARATION

Source


1 PACKAGE body pay_in_tax_declaration AS
2 /* $Header: pyintaxd.pkb 120.16.12010000.4 2008/08/06 07:29:59 ubhat ship $ */
3 --
4 -- Global Variables Section
5 --
6   g_legislation_code     VARCHAR2(3);
7   g_approval_info_type   VARCHAR2(40);
8   g_element_value_list   t_element_values_tab;
9   g_80dd_values          t_entry_details_tab;
10   g_80g_values           t_entry_details_tab;
11   g_insurace_values      t_entry_details_tab;
12   g_80cce_values         t_entry_details_tab;
13   g_list_index           NUMBER;
14   g_80dd_index           NUMBER;
15   g_80g_index            NUMBER;
16   g_insurace_index       NUMBER;
17   g_80cce_index          NUMBER;
18   g_assignment_id        per_all_assignments_f.assignment_id%TYPE;
19   g_index_assignment_id  per_all_assignments_f.assignment_id%TYPE;
20   g_is_valid             BOOLEAN;
21   g_index_values_valid   BOOLEAN;
22   g_package              CONSTANT VARCHAR2(100) := 'pay_in_tax_declaration.';
23   g_debug                BOOLEAN;
24 --
25 -- The following type is declared to store all
26 -- the inputs values of tax elements.
27 --
28   type t_input_values_rec is record
29           (input_name      pay_input_values_f.name%TYPE
30           ,input_value_id  pay_input_values_f.input_value_id%TYPE
31           ,input_value     pay_element_entry_values.screen_entry_value%TYPE);
32 
33   type t_input_values_tab is table of t_input_values_rec
34      index by binary_integer;
35 --
36 --------------------------------------------------------------------------
37 --                                                                      --
38 -- Name           : IS_LOCKING_PERIOD                                   --
39 -- Type           : PROCEDURE                                           --
40 -- Access         : Public                                              --
41 -- Description    : The procedure is responsible for returning the      --
42 --                  freeze period details like start date, along with   --
43 --                  a flag to indicate if it is the freeze period.      --
44 --                                                                      --
45 -- Parameters     :                                                     --
46 --             IN : p_person_id   per_people_f.person_id%TYPE           --
47 --          OUT   : p_locked        VARCHAR2                            --
48 --                  p_lock_start    DATE                                --
49 --                                                                      --
50 -- Change History :                                                     --
51 --------------------------------------------------------------------------
52 -- Rev#  Date        Userid      Description                            --
53 --------------------------------------------------------------------------
54 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
55 -- 1.0  25-Sep-2007  RSAHARAY    Parameter p_person_id replaced with    --
56 --                               p_assignment_id                        --
57 -- 1.1	01-Oct-2007  RSAHARAY    Reverted to the initial IN parameters  --
58 --                               Modified the CURSOR                    --
59 --				 csr_locking_period_details             --
60 --------------------------------------------------------------------------
61 PROCEDURE is_locking_period
62    (p_person_id  IN         per_people_f.person_id%TYPE
63    ,p_locked     OUT NOCOPY VARCHAR2
64    ,p_lock_start OUT NOCOPY DATE)
65 IS
66    --
67    CURSOR csr_locking_period_details(c_person_id IN NUMBER)
68    IS
69    SELECT nvl(org.org_information1, 'N') locking_period
70         , nvl(org.org_information3, 0) window_period
71         , fnd_date.canonical_to_date(org.org_information2) locking_period_start
72         , TRUNC(SYSDATE - start_date) hire_duration
73      FROM hr_organization_information org
74         , per_people_f person
75         , per_assignments_f assign
76         , hr_soft_coding_keyflex scl
77     WHERE org.org_information_context = 'PER_IN_TAX_DECL_DETAILS'
78       AND person.person_id = c_person_id
79       AND assign.person_id = person.person_id
80       AND assign.soft_coding_keyflex_id = scl.soft_coding_keyflex_id
81       AND assign.primary_flag = 'Y'
82       AND org.organization_id = nvl(scl.segment1, person.business_group_id)
83       AND SYSDATE BETWEEN person.effective_start_date
84                       AND person.effective_end_date
85       AND SYSDATE BETWEEN assign.effective_start_date
86                       AND assign.effective_end_date;
87    --
88    l_proc VARCHAR2(120);
89    l_locking_period VARCHAR2(2);
90    l_window_period NUMBER;
91    l_hire_duration NUMBER;
92    l_procedure   VARCHAR(100);
93    l_message     VARCHAR2(250);
94    --
95 BEGIN
96    --
97     l_procedure := g_package || 'is_locking_period';
98     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
99 
100     IF g_debug THEN
101       pay_in_utils.trace('**************************************************','********************');
102       pay_in_utils.trace('p_person_id',p_person_id);
103       pay_in_utils.trace('**************************************************','********************');
104     END IF;
105     p_locked := 'Y';
106    --
107 
108    --
109    OPEN csr_locking_period_details(p_person_id);
110    FETCH csr_locking_period_details INTO l_locking_period
111                                        , l_window_period
112                                        , p_lock_start
113                                        , l_hire_duration;
114    CLOSE csr_locking_period_details;
115    --
116    pay_in_utils.set_location(g_debug, l_proc, 20);
117    --
118    -- If locking period if its a new hire falling within the window period
119    -- if so allow him access to declare his tax. For all other cases deny
120    -- access.
121    -- If declaration period allow access.
122    --
123    IF l_locking_period = 'Y' THEN
124       --
125       -- locking period logic
126       --
127       IF l_hire_duration < l_window_period THEN
128          --
129          pay_in_utils.set_location(g_debug, l_proc, 30);
130 	 --
131          p_locked := 'N';
132          --
133       END IF;
134       --
135       pay_in_utils.set_location(g_debug, l_proc, 40);
136       --
137    ELSE
138       --
139       -- Declaration period logic.
140       --
141       pay_in_utils.set_location(g_debug, l_proc, 50);
142       --
143       p_locked := 'N';
144       --
145    END IF;
146 
147     IF g_debug THEN
148       pay_in_utils.trace('**************************************************','********************');
149       pay_in_utils.trace('p_locked ',p_locked);
150       pay_in_utils.trace('p_lock_start ',p_lock_start);
151       pay_in_utils.trace('**************************************************','********************');
152     END IF;
153 
154    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
155 
156    --
157 END is_locking_period;
158 
159 --------------------------------------------------------------------------
160 --                                                                      --
161 -- Name           : IS_APPROVED                                         --
162 -- Type           : PROCEDURE                                           --
163 -- Access         : Public                                              --
164 -- Description    : The procedure is responsible for returning the      --
165 --                  the flag stating if the employee tax declaration    --
166 --                  details have been approved or not.                  --
167 --                                                                      --
168 -- Parameters     :                                                     --
169 --             IN : p_person_id       per_people_f.person_id%TYPE       --
170 --                  p_effective_date  DATE                              --
171 --            OUT : p_status          VARCHAR2                          --
172 --                                                                      --
173 -- Change History :                                                     --
174 --------------------------------------------------------------------------
175 -- Rev#  Date        Userid      Description                            --
176 --------------------------------------------------------------------------
177 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
178 --------------------------------------------------------------------------
179 PROCEDURE is_approved
180    (p_person_id      IN NUMBER
181    ,p_effective_date IN DATE default null
182    ,p_status         OUT NOCOPY VARCHAR2)
183 IS
184    --
185    l_procedure   VARCHAR(100);
186    l_message     VARCHAR2(250);
187    l_effective_date DATE;
188    l_assignment_id per_assignments_f.assignment_id%TYPE;
189    l_extra_info_id per_assignment_extra_info.assignment_extra_info_id%TYPE;
190    --
191 BEGIN
192    --
193     l_procedure := g_package || 'is_approved';
194     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
195 
196     IF g_debug THEN
197       pay_in_utils.trace('**************************************************','********************');
198       pay_in_utils.trace('p_person_id',p_person_id);
199       pay_in_utils.trace('p_effective_date',p_effective_date);
200       pay_in_utils.trace('**************************************************','********************');
201     END IF;
202    --
203    -- Get the currect effective date to be used.
204    --
205    l_effective_date:= pay_in_utils.get_effective_date(p_effective_date);
206     pay_in_utils.trace('l_effective_date ',l_effective_date);
207     pay_in_utils.set_location(g_debug,l_procedure,20);
208    --
209    -- Get the assignment Id for which to find the details.
210    --
211    l_assignment_id := pay_in_utils.get_assignment_id
212                          (p_person_id
213                          ,l_effective_date);
214     pay_in_utils.trace('l_assignment_id ',l_assignment_id);
215     pay_in_utils.set_location(g_debug,l_procedure,30);
216    --
217    -- Get the approval details for the above assignment ID
218    --
219    p_status := pay_in_tax_declaration.get_approval_status
220       (p_assignment_id => l_assignment_id
221       ,p_tax_year => pay_in_tax_declaration.get_tax_year(l_effective_date)
222       ,p_extra_info_id => l_extra_info_id);
223 
224     IF g_debug THEN
225       pay_in_utils.trace('**************************************************','********************');
226       pay_in_utils.trace('p_status ', p_status);
227       pay_in_utils.trace('**************************************************','********************');
228     END IF;
229 
230    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
231 
232 
233 END is_approved;
234 
235 --------------------------------------------------------------------------
236 --                                                                      --
237 -- Name           : GET_CITY_TYPE                                       --
238 -- Type           : FUNCTION                                            --
239 -- Access         : Public                                              --
240 -- Description    : The function is responsible for quering the city    --
241 --                  type of the primary address of the employee if the  --
242 --                  primary address is not available then return NA.    --
243 --                                                                      --
244 -- Parameters     :                                                     --
245 --             IN : p_person_id       per_people_f.person_id%TYPE       --
246 --                  p_effective_date  DATE                              --
247 --         RETURN : VARCHAR2                                            --
248 --                                                                      --
249 -- Change History :                                                     --
250 --------------------------------------------------------------------------
251 -- Rev#  Date        Userid      Description                            --
252 --------------------------------------------------------------------------
253 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
254 --------------------------------------------------------------------------
255 FUNCTION get_city_type
256         (p_person_id       IN    NUMBER
257         ,p_effective_date  IN    DATE)
258 RETURN varchar2
259 IS
260   --
261   -- Cursor to get the city type from per_addresses
262   --
263   CURSOR csr_city_type
264   IS
265   SELECT add_information16
266     FROM per_addresses
267    WHERE person_id = p_person_id
268      AND primary_flag = 'Y'
269      AND style = 'IN'
270      AND p_effective_date BETWEEN date_from
271                               AND NVL(date_to, hr_general.end_of_time);
272   --
273    l_lookup_code hr_lookups.lookup_code%TYPE;
274    l_procedure   VARCHAR(100);
275    l_message     VARCHAR2(250);
276 
277   --
278 BEGIN
279   --
280     l_procedure := g_package || 'get_city_type';
281     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
282 
283     IF g_debug THEN
284       pay_in_utils.trace('**************************************************','********************');
285       pay_in_utils.trace('p_person_id',p_person_id);
286       pay_in_utils.trace('p_effective_date',p_effective_date);
287       pay_in_utils.trace('**************************************************','********************');
288     END IF;
289   --
290   -- Comments should be of this form
291   --
292   OPEN csr_city_type;
293   FETCH csr_city_type INTO l_lookup_code;
294   --
295   IF csr_city_type%NOTFOUND THEN
296      l_lookup_code := 'NA';
297      pay_in_utils.trace('l_lookup_code ',l_lookup_code);
298      pay_in_utils.set_location(g_debug,l_procedure,20);
299   END IF;
300   --
301   CLOSE csr_city_type;
302   --
303    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
304 
305     IF g_debug THEN
306       pay_in_utils.trace('**************************************************','********************');
307       pay_in_utils.trace('Decoded Lookup Code',hr_general.decode_lookup('IN_CITY_TYPE', l_lookup_code));
308       pay_in_utils.trace('**************************************************','********************');
309     END IF;
310 
311 
312   return hr_general.decode_lookup('IN_CITY_TYPE', l_lookup_code);
313 
314 
315 
316 END get_city_type;
317 
318 --------------------------------------------------------------------------
319 --                                                                      --
320 -- Name           : GET_TAX_YEAR                                        --
321 -- Type           : FUNCTION                                            --
322 -- Access         : Public                                              --
323 -- Description    : The function is responsible returning the tax year  --
324 --                  created based on the effective date passed to it.   --
325 --                                                                      --
326 -- Parameters     :                                                     --
327 --             IN : p_effective_date  DATE                              --
328 --         RETURN : VARCHAR2                                            --
329 --                                                                      --
330 -- Change History :                                                     --
331 --------------------------------------------------------------------------
332 -- Rev#  Date        Userid      Description                            --
333 --------------------------------------------------------------------------
334 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
335 --------------------------------------------------------------------------
336 FUNCTION get_tax_year(p_effective_date IN DATE)
337 RETURN VARCHAR2
338 IS
339    --
340    l_procedure   VARCHAR(100);
341    l_message     VARCHAR2(250);
342    l_year NUMBER;
343    l_month NUMBER;
344    --
345 BEGIN
346    --
347     l_procedure := g_package || 'get_tax_year';
348     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
349 
350     IF g_debug THEN
351       pay_in_utils.trace('**************************************************','********************');
352       pay_in_utils.trace('p_effective_date',p_effective_date);
353       pay_in_utils.trace('**************************************************','********************');
354     END IF;
355    --
356    -- Get the year and month for the effective date
357    --
358    l_year := to_number(to_char(p_effective_date, 'YYYY'));
359    l_month := to_number(to_char(p_effective_date, 'MM'));
360    pay_in_utils.trace('l_year ',l_year);
361    pay_in_utils.set_location(g_debug,l_procedure,20);
362    pay_in_utils.trace('l_month ',l_month);
363    pay_in_utils.set_location(g_debug,l_procedure,30);
364    --
365    -- If it is Jan, Feb or Mar it is current_year-1 and current_year.
366    --
367    IF l_month in (1, 2, 3) THEN
368       --
369       pay_in_utils.set_location(g_debug,l_procedure,40);
370       pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,50);
371       RETURN (to_char(l_year-1)||'-'||to_char(l_year));
372       --
373    ELSE
374       --
375       -- Else it is current_year and current_year + 1
376       --
377      pay_in_utils.set_location(g_debug,l_procedure,60);
378      pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,80);
379 
380     IF g_debug THEN
381       pay_in_utils.trace('**************************************************','********************');
382       pay_in_utils.trace('Tax Year',(to_char(l_year)||'-'||to_char(l_year+1)));
383       pay_in_utils.trace('**************************************************','********************');
384     END IF;
385 
386       RETURN (to_char(l_year)||'-'||to_char(l_year+1));
387       --
388    END IF;
389    --
390 
391 
392 END get_tax_year;
393 
394 --------------------------------------------------------------------------
395 --                                                                      --
396 -- Name           : GET_APPROVAL_STATUS                                 --
397 -- Type           : FUNCTION                                            --
398 -- Access         : Public                                              --
399 -- Description    : The procedure is responsible for returning the      --
400 --                  the flag stating if the employee tax declaration    --
401 --                  details have been approved or not.           .      --
402 --                                                                      --
403 -- Parameters     :                                                     --
404 --             IN : p_assignment_id  per_assignments_f.assignment_id    --
405 --                  p_tax_year       VARCHAR2                           --
406 --                  p_extra_info_id  assignment_extra_info_id           --
407 --         RETURN : VARCHAR2                                            --
408 --                                                                      --
409 -- Change History :                                                     --
410 --------------------------------------------------------------------------
411 -- Rev#  Date        Userid      Description                            --
412 --------------------------------------------------------------------------
413 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
414 --------------------------------------------------------------------------
415 FUNCTION get_approval_status
416    (p_assignment_id IN per_assignments_f.assignment_id%TYPE
417    ,p_tax_year      IN VARCHAR2
418    ,p_extra_info_id OUT NOCOPY per_assignment_extra_info.assignment_extra_info_id%TYPE)
419 RETURN VARCHAR2
420 IS
421    --
422    CURSOR csr_approval_details
423    IS
424    SELECT assignment_extra_info_id
425         , aei_information2 flag
426      FROM per_assignment_extra_info
427     WHERE assignment_id = p_assignment_id
428       AND information_type = g_approval_info_type
429       AND aei_information1 = p_tax_year
430       AND aei_information_category = g_approval_info_type;
431    --
432    l_found VARCHAR2(2);
433    l_procedure   VARCHAR(100);
434    l_message     VARCHAR2(250);
435 
436    --
437 BEGIN
438    --
439     l_procedure := g_package || 'get_approval_status';
440     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
441 
442     IF g_debug THEN
443       pay_in_utils.trace('**************************************************','********************');
444       pay_in_utils.trace('p_assignment_id',p_assignment_id);
445       pay_in_utils.trace('p_tax_year',p_tax_year);
446       pay_in_utils.trace('**************************************************','********************');
447     END IF;
448    --
449    OPEN csr_approval_details;
450    FETCH csr_approval_details INTO p_extra_info_id, l_found;
451    CLOSE csr_approval_details;
452    --
453     IF g_debug THEN
454       pay_in_utils.trace('**************************************************','********************');
455       pay_in_utils.trace('l_found',l_found);
456       pay_in_utils.trace('p_extra_info_id',p_extra_info_id);
457       pay_in_utils.trace('**************************************************','********************');
458     END IF;
459 
460    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,20);
461 
462    RETURN l_found;
463 
464 
465 
466   --
467 END get_approval_status;
468 
469 --------------------------------------------------------------------------
470 --                                                                      --
471 -- Name           : GET_DONATION_TYPE                                   --
472 -- Type           : FUNCTION                                            --
473 -- Access         : Public                                              --
474 -- Description    : The function has the same code which is used to     --
475 --                  validate teh donation type details entered. Further --
476 --                  is used to validate the same in self-service        --
477 --                                                                      --
478 -- Parameters     :                                                     --
479 --             IN : p_lookup_code    VARCHAR2                           --
480 --         RETURN : pay_user_column_instances_f.value%TYPE              --
481 --                                                                      --
482 -- Change History :                                                     --
483 --------------------------------------------------------------------------
484 -- Rev#  Date        Userid      Description                            --
485 --------------------------------------------------------------------------
486 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
487 --------------------------------------------------------------------------
488 FUNCTION get_donation_type(p_lookup_code IN VARCHAR2)
489 RETURN pay_user_column_instances_f.value%TYPE
490 IS
491    --
492    CURSOR csr_get_meaning
493    IS
494    SELECT cinstances.value
495      FROM pay_user_tables utab
496         , pay_user_columns ucols
497         , pay_user_rows_f urows
498         , pay_user_column_instances_f cinstances
499     WHERE utab.user_table_id = ucols.user_table_id
500       AND utab.user_table_id = urows.user_table_id
501       AND ucols.user_column_id = cinstances.user_column_id
502       AND urows.user_row_id = cinstances.user_row_id
503       AND utab.user_table_name = 'PER_IN_DONATION_DETAILS'
504       AND utab.legislation_code  = 'IN'
505       AND ucols.user_column_name =  'Donation Type'
506       AND urows.row_low_range_or_name = p_lookup_code;
507    --
508    l_meaning pay_user_column_instances_f.value%TYPE;
509    l_procedure   VARCHAR(100);
510    l_message     VARCHAR2(250);
511 
512    --
513 BEGIN
514    --
515     l_procedure := g_package || 'get_donation_type';
516     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
517 
518     IF g_debug THEN
519       pay_in_utils.trace('**************************************************','********************');
520       pay_in_utils.trace('p_lookup_code',p_lookup_code);
521       pay_in_utils.trace('**************************************************','********************');
522     END IF;
523 
524    OPEN csr_get_meaning;
525    FETCH csr_get_meaning INTO l_meaning;
526    CLOSE csr_get_meaning;
527 
528     IF g_debug THEN
529       pay_in_utils.trace('**************************************************','********************');
530       pay_in_utils.trace('l_meaning',l_meaning);
531       pay_in_utils.trace('**************************************************','********************');
532     END IF;
533 
534    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
535 
536    RETURN l_meaning;
537 
538 
539 END get_donation_type;
540 
541 --------------------------------------------------------------------------
542 --                                                                      --
543 -- Name           : GET_PLANNED_VALUE                                   --
544 -- Type           : FUNCTION                                            --
545 -- Access         : Public                                              --
546 -- Description    : The function calculates the value of an element     --
547 --                  entries's input value on a date which is before the --
548 --                  freeze date for the financial year.                 --
549 --                                                                      --
550 -- Parameters     :                                                     --
551 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
552 --                  p_actual_value  VARCHAR2                            --
553 --                  p_ele_entry_id  element_entry_id%TYPE               --
554 --                  p_input_value_id input_value_id%TYPE                --
555 --         RETURN : VARCHAR2                                            --
556 --                                                                      --
557 -- Change History :                                                     --
558 --------------------------------------------------------------------------
559 -- Rev#  Date        Userid      Description                            --
560 --------------------------------------------------------------------------
561 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
562 --------------------------------------------------------------------------
563 FUNCTION get_planned_value
564         (p_assignment_id   IN per_assignments_f.assignment_id%TYPE
565         ,p_actual_value    IN VARCHAR2
566         ,p_ele_entry_id    IN pay_element_entries_f.element_entry_id%TYPE
567         ,p_input_value_id  IN pay_input_values_f.input_value_id%TYPE)
568 RETURN VARCHAR2
569 IS
570    --
571    CURSOR csr_entry_value(c_effective_date IN DATE)
572    IS
573    SELECT screen_entry_value
574      FROM pay_element_entry_values_f
575     WHERE element_entry_id = p_ele_entry_id
576       AND input_value_id = p_input_value_id
577       AND c_effective_date BETWEEN effective_start_date
578                                AND effective_end_date;
579    --
580    l_procedure   VARCHAR(100);
581    l_message     VARCHAR2(250);
582    l_value pay_element_entry_values.screen_entry_value%TYPE;
583    l_locked VARCHAR2(2);
584    l_date_start DATE;
585    --
586 BEGIN
587 
588     l_procedure := g_package || 'get_planned_value';
589     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
590 
591     IF g_debug THEN
592       pay_in_utils.trace('**************************************************','********************');
593       pay_in_utils.trace('p_assignment_id',p_assignment_id);
594       pay_in_utils.trace('p_actual_value',p_actual_value);
595       pay_in_utils.trace('p_ele_entry_id',p_ele_entry_id);
596       pay_in_utils.trace('p_input_value_id',p_input_value_id);
597       pay_in_utils.trace('**************************************************','********************');
598     END IF;
599     --
600    is_locking_period
601       (p_person_id => pay_in_utils.get_person_id(p_assignment_id)
602       ,p_locked        => l_locked
603       ,p_lock_start    => l_date_start);
604    --
605     pay_in_utils.set_location(g_debug,l_procedure,20);
606    --
607    IF l_locked = 'N' THEN
608      --
609     pay_in_utils.set_location(g_debug,l_procedure,30);
610      l_value := p_actual_value;
611      --
612    ELSE
613      --
614     pay_in_utils.set_location(g_debug,l_procedure,40);
615      OPEN csr_entry_value(l_date_start-1);
616      FETCH csr_entry_value INTO l_value;
617      CLOSE csr_entry_value;
618 
619     pay_in_utils.set_location(g_debug,l_procedure,50);
620 
621      IF l_value IS NULL THEN
622      pay_in_utils.set_location(g_debug, l_procedure, 60);
623        OPEN csr_entry_value(SYSDATE);
624        FETCH csr_entry_value INTO l_value;
625        CLOSE csr_entry_value;
626      END IF;
627 
628      pay_in_utils.set_location(g_debug, l_procedure, 70);
629      --
630    END IF;
631 
632     IF g_debug THEN
633       pay_in_utils.trace('**************************************************','********************');
634       pay_in_utils.trace('l_value',l_value);
635       pay_in_utils.trace('**************************************************','********************');
636     END IF;
637 
638    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,80);
639    --
640    RETURN l_value;
641 
642 
643 END get_planned_value;
644 
645 --------------------------------------------------------------------------
646 --                                                                      --
647 -- Name           : GET_VALUE                                           --
648 -- Type           : FUNCTION                                            --
649 -- Access         : Public                                              --
650 -- Description    : The function calculates the planned and the actual  --
651 --                  values of the following elements and stores then in --
652 --                  the cache when the function is first called on sub- --
653 --                  sequent calls it would used the cached value.       --
654 --                    1. Rebates under Section 88                       --
655 --                    2. Tuition Fee                                    --
656 --                    3. Deductions under Chapter VI A and              --
657 --                    4. Other Income                                   --
658 --                                                                      --
659 -- Parameters     :                                                     --
660 --             IN : p_assignment_id NUMBER                              --
661 --                  p_element_name  VARCHAR2                            --
662 --                  p_input_name    VARCHAR2                            --
663 --                  p_effective_date DATE                               --
664 --                  p_actual_value  VARCHAR2                            --
665 --         RETURN : VARCHAR2                                            --
666 --                                                                      --
667 -- Change History :                                                     --
668 --------------------------------------------------------------------------
669 -- Rev#  Date        Userid      Description                            --
670 --------------------------------------------------------------------------
671 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
672 --------------------------------------------------------------------------
673 FUNCTION get_value
674         (p_assignment_id   IN    number
675         ,p_element_name    IN    varchar2
676         ,p_input_name      IN    varchar2
677         ,p_effective_date  IN    date
678         ,p_actual_value    IN    varchar2
679         )
680 RETURN VARCHAR2
681 IS
682    --
683    CURSOR csr_element_details(c_effective_date IN DATE)
684    IS
685    SELECT types.element_name
686         , inputs.name name
687         , value.screen_entry_value planned
688         , value.screen_entry_value actual
689    FROM per_assignments_f assgn
690       , pay_element_links_f link
691       , pay_element_types_f types
692       , pay_element_entries_f entries
693       , pay_element_entry_values_f value
694       , pay_input_values_f inputs
695    WHERE assgn.assignment_id = p_assignment_id
696      AND link.element_link_id = pay_in_utils.get_element_link_id(p_assignment_id
697                                                                 ,c_effective_date
698                                                                 ,types.element_type_id
699                                                                 )
700      AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
701      AND link.business_group_id = assgn.business_group_id
702      AND link.element_type_id = types.element_type_id
703      AND types.element_name in ( 'House Rent Information'
704                                , 'Rebates under Section 88'
705                                , 'Tuition Fee'
706                                , 'Deduction under Section 80GG'
707 			       , 'Deduction under Section 80D'
708 			       , 'Deduction under Section 80DDB'
709 			       , 'Deduction under Section 80GGA'
710 			       , 'Deduction under Section 80E'
711 			       , 'Deduction under Section 80U' -- Check if it is really required
712                                , 'Other Income')
713      AND entries.element_type_id = types.element_type_id
714      AND entries.element_link_id = link.element_link_id
715      AND entries.assignment_id = assgn.assignment_id
716      AND entries.element_entry_id = value.element_entry_id
717      AND inputs.input_value_id = value.input_value_id
718      AND inputs.element_type_id = types.element_type_id
719      AND c_effective_date BETWEEN assgn.effective_start_date
720                               AND assgn.effective_end_date
721      AND c_effective_date BETWEEN link.effective_start_date
722                               AND link.effective_end_date
723      AND c_effective_date BETWEEN types.effective_start_date
724                               AND types.effective_end_date
725      AND c_effective_date BETWEEN entries.effective_start_date
726                               AND entries.effective_end_date
727      AND c_effective_date BETWEEN inputs.effective_start_date
728                               AND inputs.effective_end_date
729      AND c_effective_date BETWEEN value.effective_start_date
730                               AND value.effective_end_date
731      order by types.element_name, inputs.name;
732    --
733    l_procedure   VARCHAR(100);
734    l_message     VARCHAR2(250);
735    l_locked VARCHAR2(2);
736    l_date_start DATE;
737    iLoop NUMBER;
738    --
739 BEGIN
740    --
741    l_procedure := g_package || 'get_value';
742    pay_in_utils.set_location(g_debug, 'Entering: '||l_procedure, 10);
743    --
744    IF g_debug THEN
745       pay_in_utils.trace('**************************************************','********************');
746       pay_in_utils.trace('Assignment ID: ',p_assignment_id);
747       pay_in_utils.trace('Element Name: ', p_element_name);
748       pay_in_utils.trace('Input Name: ', p_input_name);
749       pay_in_utils.trace('Effective Date: ', p_effective_date);
750       pay_in_utils.trace('Actual Value? ', p_actual_value);
751       pay_in_utils.trace('**************************************************','********************');
752    END IF;
753    --
754    -- If the data in the global pl/sql table is valid
755    -- then check if the assignment id's are same for
756    -- the data in pl/sql table and the current assignment.
757    --
758    -- This is required in the case of superuser where in the
759    -- same session he might query the details for more than
760    -- one assignments.
761    --
762    IF g_is_valid THEN
763       IF g_assignment_id <> p_assignment_id THEN
764          --
765          -- If the details are invalid requery the details.
766          --
767          pay_in_utils.set_location(g_debug, l_procedure, 20);
768          g_is_valid := false;
769          --
770       END IF;
771    END IF;
772    --
773    IF g_is_valid = false THEN
774       --
775       -- Entering because of either of the following reasons:
776       -- 1) The pl/sql table doesn't have any data(first time).
777       -- 2) Data is being requeried for a different assignment.
778       --
779       pay_in_utils.set_location(g_debug, l_procedure, 30);
780       g_list_index := 0;
781       g_assignment_id := p_assignment_id;
782       --
783       FOR rec_element_details IN csr_element_details(p_effective_date) LOOP
784 	 --
785 	 IF g_debug THEN
786 	    hr_utility.trace(g_list_index||'...Input ->' || rec_element_Details.name ||' ['||rec_element_details.planned||']');
787 	 END IF;
788          g_element_value_list(g_list_index).element_name := rec_element_details.element_name;
789          g_element_value_list(g_list_index).input_name := rec_element_details.name;
790          g_element_value_list(g_list_index).planned_val := rec_element_details.planned;
791          g_element_value_list(g_list_index).actual_val := rec_element_details.actual;
792          g_list_index := g_list_index + 1;
793 	 --
794       END LOOP;
795       --
796       pay_in_utils.set_location(g_debug, l_procedure, 40);
797       --
798       is_locking_period
799          (p_person_id => pay_in_utils.get_person_id(p_assignment_id)
800          ,p_locked         => l_locked
801          ,p_lock_start     => l_date_start);
802       --
803       pay_in_utils.set_location(g_debug, l_procedure, 50);
804       --
805       IF l_locked = 'Y' THEN
806          --
807          pay_in_utils.set_location(g_debug, l_procedure, 60);
808 	 iLoop := 0;
809          --
810          FOR rec_element_details IN csr_element_details(l_date_start-1) LOOP
811             --
812             pay_in_utils.set_location(g_debug, l_procedure, 70);
813             --
814             IF (g_element_value_list(iLoop).element_name = rec_element_details.element_name
815                 AND g_element_value_list(iLoop).input_name = rec_element_details.name) THEN
816                --
817                pay_in_utils.set_location(g_debug, l_procedure, 80);
818                g_element_value_list(iLoop).planned_val := rec_element_details.actual;
819                --
820             END IF;
821             --
822 	    iLoop := iLoop+1;
823             --
824          END LOOP;
825 	 --
826       END IF;
827       --
828    END IF;
829 
830    IF g_debug THEN
831       hr_utility.trace('List Index: ' || g_list_index);
832    END IF;
833 
834    IF g_list_index = 0 THEN
835    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,90);
836    pay_in_utils.trace('**************************************************','********************');
837       return null;
838    ELSE
839       FOR indx IN 0..g_list_index LOOP
840         IF (g_element_value_list(indx).element_name = p_element_name AND
841             g_element_value_list(indx).input_name = p_input_name)
842         THEN
843            IF g_debug THEN
844               hr_utility.trace('...Value[' || g_element_value_list(indx).actual_val || ']');
845            END IF;
846            IF p_actual_value = 'TRUE' THEN
847                pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,100);
848                IF g_debug THEN
849                   pay_in_utils.trace('**************************************************','********************');
850                   pay_in_utils.trace('Actual Value ',g_element_value_list(indx).actual_val);
851                   pay_in_utils.trace('**************************************************','********************');
852                END IF;
853               pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,110);
854               return g_element_value_list(indx).actual_val;
855 
856            ELSE
857                IF g_debug THEN
858                   pay_in_utils.trace('**************************************************','********************');
859                   pay_in_utils.trace('Planned Value ',g_element_value_list(indx).planned_val);
860                   pay_in_utils.trace('**************************************************','********************');
861                END IF;
862                  pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,110);
863               return g_element_value_list(indx).planned_val;
864            END IF;
865         END IF;
866       END LOOP;
867    END IF;
868 
869    pay_in_utils.trace('**************************************************','********************');
870    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,110);
871    return null;
872 
873 END get_value;
874 
875 --------------------------------------------------------------------------
876 --                                                                      --
877 -- Name           : GET_NUMERIC_VALUE                                   --
878 -- Type           : FUNCTION                                            --
879 -- Access         : Public                                              --
880 -- Description    : The function calls get_value internally, but the    --
881 --                  value returned would be converted to number using   --
882 --                  to_number and the numeric value returned.           --
883 --                                                                      --
884 -- Parameters     :                                                     --
885 --             IN : p_assignment_id NUMBER                              --
886 --                  p_element_name  VARCHAR2                            --
887 --                  p_input_name    VARCHAR2                            --
888 --                  p_effective_date DATE                               --
889 --                  p_actual_value  VARCHAR2                            --
890 --         RETURN : NUMBER                                              --
891 --                                                                      --
892 -- Change History :                                                     --
893 --------------------------------------------------------------------------
894 -- Rev#  Date        Userid      Description                            --
895 --------------------------------------------------------------------------
896 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
897 --------------------------------------------------------------------------
898 FUNCTION get_numeric_value
899    (p_assignment_id   IN    number
900    ,p_element_name    IN    varchar2
901    ,p_input_name      IN    varchar2
902    ,p_effective_date  IN    date
903    ,p_actual_value    IN    varchar2
904    )
905 RETURN NUMBER
906 IS
907    l_procedure   VARCHAR(100);
908    l_message     VARCHAR2(250);
909 
910 BEGIN
911 
912     l_procedure := g_package || 'get_numeric_value';
913     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
914 
915    IF g_debug THEN
916       pay_in_utils.trace('**************************************************','********************');
917       pay_in_utils.trace('Assignment ID: ',p_assignment_id);
918       pay_in_utils.trace('Element Name: ', p_element_name);
919       pay_in_utils.trace('Input Name: ', p_input_name);
920       pay_in_utils.trace('Effective Date: ', p_effective_date);
921       pay_in_utils.trace('Actual Value? ', p_actual_value);
922       pay_in_utils.trace('**************************************************','********************');
923    END IF;
924 
925    IF g_debug THEN
926       pay_in_utils.trace('**************************************************','********************');
927       pay_in_utils.trace('Value: ',to_number(get_value(p_assignment_id,p_element_name,p_input_name,p_effective_date,p_actual_value)));
928       pay_in_utils.trace('**************************************************','********************');
929    END IF;
930       pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,20);
931    return to_number(get_value
932                       (p_assignment_id
933                       ,p_element_name
934                       ,p_input_name
935                       ,p_effective_date
936                       ,p_actual_value
937                       )
938                     );
939 
940 END get_numeric_value;
941 
942 --------------------------------------------------------------------------
943 --                                                                      --
944 -- Name           : GET_LAST_UPDATED_DATE                               --
945 -- Type           : FUNCTION                                            --
946 -- Access         : Public                                              --
947 -- Description    : The is called with one of these values and returns  --
948 --                  the last updated date of the associated element for --
949 --                  element type in question. The valid element types   --
950 --                  are:                                                --
951 --                      1. HOUSE                                        --
952 --                      2. CHAPTER6                                     --
953 --                      3. SECTION88                                    --
954 --                      4. OTHER                                        --
955 --                      5. ALL                                          --
956 --                                                                      --
957 -- Parameters     :                                                     --
958 --             IN : p_person_id      NUMBER                             --
959 --                  p_effective_date DATE                               --
960 --                  p_element_type   VARCHAR2                           --
961 --         RETURN : NUMBER                                              --
962 --                                                                      --
963 -- Change History :                                                     --
964 --------------------------------------------------------------------------
965 -- Rev#  Date        Userid      Description                            --
966 --------------------------------------------------------------------------
967 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
968 --------------------------------------------------------------------------
969 FUNCTION get_last_updated_date
970          (p_person_id      IN NUMBER
971          ,p_effective_date IN DATE
972          ,p_element_type   IN VARCHAR2)
973 RETURN DATE
974 IS
975    CURSOR csr_get_date(c_element_name1  IN VARCHAR2
976                       ,c_element_name2  IN VARCHAR2
977                       ,c_element_name3  IN VARCHAR2
978                       ,c_element_name4  IN VARCHAR2
979                       ,c_element_name5  IN VARCHAR2
980                       ,c_element_name6  IN VARCHAR2
981                       ,c_element_name7  IN VARCHAR2
982 	              ,c_element_name8  IN VARCHAR2
983 	              ,c_element_name9  IN VARCHAR2
984 		      ,c_element_name10 IN VARCHAR2
985 		      ,c_element_name11 IN VARCHAR2
986 		      ,c_element_name12 IN VARCHAR2
987                       ,c_element_name13 IN VARCHAR2)
988    IS
989    SELECT MAX(entries.last_update_date)
990      FROM pay_element_types_f ele
991         , pay_element_entries_f entries
992         , per_assignments_f assgn
993     WHERE ele.element_name in (c_element_name1
994                               ,c_element_name2
995                               ,c_element_name3
996                               ,c_element_name4
997                               ,c_element_name5
998                               ,c_element_name6
999                               ,c_element_name7
1000 			      ,c_element_name8
1001 			      ,c_element_name9
1002 			      ,c_element_name10
1003 			      ,c_element_name11
1004 			      ,c_element_name12
1005                               ,c_element_name13)
1006       AND ele.legislation_code = 'IN'
1007       AND assgn.person_id = p_person_id
1008       AND entries.assignment_id = assgn.assignment_id
1009       AND entries.element_type_id = ele.element_type_id
1010       AND p_effective_date BETWEEN assgn.effective_start_date
1011                                AND assgn.effective_end_date
1012       AND p_effective_date BETWEEN ele.effective_start_date
1013                                AND ele.effective_end_date
1014       AND p_effective_date BETWEEN entries.effective_start_date
1015                                AND entries.effective_end_date;
1016    --
1017    l_updated_date DATE;
1018    l_procedure     VARCHAR(100);
1019    l_message       VARCHAR2(250);
1020    l_element_name1 VARCHAR2(120);
1021    l_element_name2 VARCHAR2(120);
1022    l_element_name3 VARCHAR2(120);
1023    l_element_name4 VARCHAR2(120);
1024    l_element_name5 VARCHAR2(120);
1025    l_element_name6 VARCHAR2(120);
1026    l_element_name7 VARCHAR2(120);
1027    l_element_name8 VARCHAR2(120);
1028    l_element_name9 VARCHAR2(120);
1029    l_element_name10 VARCHAR2(120);
1030    l_element_name11 VARCHAR2(120);
1031    l_element_name12 VARCHAR2(120);
1032    l_element_name13 VARCHAR2(120);
1033 
1034    --
1035 BEGIN
1036    --
1037     l_procedure := g_package || 'get_last_updated_date';
1038     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1039 
1040    IF g_debug THEN
1041       pay_in_utils.trace('**************************************************','********************');
1042       pay_in_utils.trace('p_person_id: ',p_person_id);
1043       pay_in_utils.trace('p_element_type: ', p_element_type);
1044       pay_in_utils.trace('Effective Date: ', p_effective_date);
1045       pay_in_utils.trace('**************************************************','********************');
1046    END IF;
1047 
1048    --
1049    IF p_element_type = 'HOUSE' THEN
1050       pay_in_utils.set_location(g_debug, l_procedure, 20);
1051       l_element_name1 := 'House Rent Information';
1052    ELSIF p_element_type = 'CHAPTER6' THEN
1053       pay_in_utils.set_location(g_debug, l_procedure, 30);
1054       l_element_name1 := 'Deduction under Section 80GG';
1055       l_element_name2 := 'Deduction under Section 80DD';
1056       l_element_name3 := 'Deduction under Section 80G';
1057       l_element_name4 := 'Deduction under Section 80D';
1058       l_element_name5 := 'Deduction under Section 80DDB';
1059       l_element_name6 := 'Deduction under Section 80E';
1060       l_element_name7 := 'Deduction under Section 80GGA';
1061       l_element_name8 := 'Deduction under Section 80CCE';
1062       l_element_name9 := 'Life Insurance Premium';
1063    ELSIF p_element_type = 'SECTION88' THEN
1064       pay_in_utils.set_location(g_debug, l_procedure, 40);
1065 --      l_element_name1 := 'Rebates under Section 88';
1066 --      l_element_name2 := 'Tuition Fee';
1067 --      l_element_name3 := 'Life Insurance Premium';
1068    ELSIF p_element_type = 'OTHER' THEN
1069       pay_in_utils.set_location(g_debug, l_procedure, 50);
1070       l_element_name1 := 'Other Income';
1071    ELSIF p_element_type = 'ALL' THEN
1072       pay_in_utils.set_location(g_debug, l_procedure, 60);
1073       l_element_name1 := 'House Rent Information';
1074       l_element_name2 := 'Deduction under Section 80GG';
1075       l_element_name3 := 'Deduction under Section 80DD';
1076       l_element_name4 := 'Deduction under Section 80G';
1077       l_element_name5 := 'Rebates under Section 88';
1078       l_element_name6 := 'Tuition Fee';
1079       l_element_name7 := 'Life Insurance Premium';
1080       l_element_name8 := 'Other Income';
1081       l_element_name9 := 'Deduction under Section 80D';
1082       l_element_name10 := 'Deduction under Section 80DDB';
1083       l_element_name11 := 'Deduction under Section 80E';
1084       l_element_name12 := 'Deduction under Section 80GGA';
1085       l_element_name13 := 'Deduction under Section 80CCE';
1086    ELSE
1087       pay_in_utils.set_location(g_debug, l_procedure, 70);
1088       return null;
1089    END IF;
1090    --
1091    pay_in_utils.set_location(g_debug, l_procedure, 80);
1092    --
1093    OPEN csr_get_date(l_element_name1, l_element_name2, l_element_name3, l_element_name4,
1094                      l_element_name5, l_element_name6, l_element_name7, l_element_name8,
1095 		     l_element_name9, l_element_name10, l_element_name11, l_element_name12, l_element_name13);
1096    FETCH csr_get_date INTO l_updated_date;
1097    CLOSE csr_get_date;
1098    --
1099    IF g_debug THEN
1100    pay_in_utils.trace('**************************************************','********************');
1101    pay_in_utils.trace('l_updated_date',l_updated_date);
1102    pay_in_utils.trace('**************************************************','********************');
1103    END IF;
1104 
1105    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,90);
1106    --
1107    RETURN l_updated_date;
1108 
1109 
1110 END get_last_updated_date;
1111 
1112 
1113 
1114 
1115 
1116 
1117 
1118 PROCEDURE get_element_entry_ids
1119    (p_element_type_id  IN         pay_element_types_f.element_type_id%TYPE
1120    ,p_effective_date   IN         DATE
1121    ,p_expected_entries IN         NUMBER
1122    ,p_input_values     OUT NOCOPY t_input_values_tab)
1123 IS
1124 
1125    CURSOR csr_element_inputs
1126      (c_element_type_id IN pay_element_types_f.element_type_id%TYPE)
1127    IS
1128    SELECT inputs.name
1129         , inputs.input_value_id
1130      FROM pay_element_types_f types
1131         , pay_input_values_f inputs
1132     WHERE types.element_type_id = c_element_type_id
1133       AND inputs.element_type_id = types.element_type_id
1134       AND inputs.legislation_code = g_legislation_code
1135       AND sysdate BETWEEN types.effective_start_date
1136                       AND types.effective_end_date
1137       AND sysdate BETWEEN inputs.effective_start_date
1138                       AND inputs.effective_end_date
1139     ORDER BY inputs.display_sequence;
1140    --
1141    l_count                NUMBER;
1142    l_procedure            VARCHAR(100);
1143    l_message              VARCHAR2(250);
1144    --
1145 BEGIN
1146    --
1147     l_procedure := g_package || 'get_element_entry_ids';
1148     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1149 
1150    IF g_debug THEN
1151       pay_in_utils.trace('**************************************************','********************');
1152       pay_in_utils.trace('p_expected_entries: ',p_expected_entries);
1153       pay_in_utils.trace('p_element_type_id: ', p_element_type_id);
1154       pay_in_utils.trace('Effective Date: ', p_effective_date);
1155       pay_in_utils.trace('**************************************************','********************');
1156    END IF;
1157    --
1158    -- Query the details to get all the entries for the
1159    -- element type in question and then store it in the pl/sql table.
1160    l_count := 0;
1161    FOR rec_input_values IN csr_element_inputs(p_element_type_id)
1162    LOOP
1163      --
1164      pay_in_utils.set_location(g_debug, l_procedure, 20);
1165 
1166      p_input_values(l_count).input_value_id := rec_input_values.input_value_id;
1167     IF g_debug THEN
1168         pay_in_utils.trace('Input Name: '|| rec_input_values.name,p_input_values(l_count).input_value_id);
1169     END IF;
1170      l_count := l_count+1;
1171      --
1172    END LOOP;
1173    --
1174    pay_in_utils.set_location(g_debug, l_procedure, 30);
1175    --
1176    IF l_count < p_expected_entries THEN
1177       pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
1178       RETURN;
1179    END IF;
1180    --
1181 
1182 
1183      pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,50);
1184 
1185 END get_element_entry_ids;
1186 
1187 
1188 
1189 
1190 PROCEDURE get_entry_details
1191    (p_assignment_id         IN         per_assignments_f.assignment_id%TYPE
1192    ,p_element_name          IN         pay_element_types_f.element_name%TYPE
1193    ,p_effective_date        IN         DATE
1194    ,p_element_type_id       OUT NOCOPY pay_element_types_f.element_type_id%TYPE
1195    ,p_element_link_id       OUT NOCOPY pay_element_links_f.element_link_id%TYPE
1196    ,p_element_entry_id      OUT NOCOPY pay_element_entries_f.element_entry_id%TYPE
1197    ,p_expected_entries      IN         NUMBER
1198    ,p_business_group_id     OUT NOCOPY per_business_groups.business_group_id%TYPE
1199    ,p_object_version_number OUT NOCOPY pay_element_entries_f.object_version_number%TYPE
1200    ,p_input_values          OUT NOCOPY t_input_values_tab
1201    )
1202 IS
1203    --
1204    CURSOR csr_element_entry
1205      (c_element_link_id  IN pay_element_links_f.element_link_id%TYPE
1206      ,c_assignment_id IN per_assignments_f.assignment_id%TYPE)
1207    IS
1208    SELECT entries.element_entry_id
1209         , links.element_type_id
1210         , links.business_group_id
1211         , entries.object_version_number
1212      FROM pay_element_entries_f entries
1213         , pay_element_links_f links
1214     WHERE entries.element_link_id = links.element_link_id
1215       AND entries.assignment_id = c_assignment_id
1216       AND links.element_link_id = c_element_link_id
1217       AND links.element_type_id = entries.element_type_id
1218       AND p_effective_date BETWEEN entries.effective_start_date
1219                                AND entries.effective_end_date
1220       AND p_effective_date BETWEEN links.effective_start_date
1221                                AND links.effective_end_date;
1222    --
1223    CURSOR csr_element_details
1224      (c_element_link_id  IN pay_element_links_f.element_link_id%TYPE)
1225    IS
1226    SELECT links.element_type_id
1227         , links.business_group_id
1228      FROM pay_element_links_f links
1229     WHERE links.element_link_id = c_element_link_id
1230       AND p_effective_date BETWEEN links.effective_start_date
1231                                AND links.effective_end_date;
1232    --
1233    l_procedure   VARCHAR(100);
1234    l_message     VARCHAR2(250);
1235    l_status      VARCHAR2(30);
1236 
1237    --
1238 BEGIN
1239    --
1240     l_procedure := g_package || 'get_entry_details';
1241     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1242 
1243    IF g_debug THEN
1244       pay_in_utils.trace('**************************************************','********************');
1245       pay_in_utils.trace('p_assignment_id: ',p_assignment_id);
1246       pay_in_utils.trace('p_element_name: ', p_element_name);
1247       pay_in_utils.trace('Effective Date: ', p_effective_date);
1248       pay_in_utils.trace('p_expected_entries: ', p_expected_entries);
1249       pay_in_utils.trace('**************************************************','********************');
1250    END IF;
1251    --
1252    -- Query the link details for the assignment
1253    -- If link doesn't exists then error out.
1254    l_status := pay_in_utils.chk_element_link
1255                    (p_element_name => p_element_name
1256                    ,p_assignment_id => p_assignment_id
1257                    ,p_effective_date => p_effective_date
1258                    ,p_element_link_id => p_element_link_id);
1259    --
1260      pay_in_utils.set_location(g_debug,l_procedure,20);
1261    --
1262    IF l_status <> 'SUCCESS' THEN
1263       --
1264       hr_utility.set_message(800, 'PER_IN_MISSING_LINK');
1265       hr_utility.set_message_token('ELEMENT_NAME',p_element_name);
1266       hr_utility.raise_error;
1267       --
1268    END IF;
1269    --
1270     pay_in_utils.set_location(g_debug,l_procedure,30);
1271    --
1272    -- Query the details of the element required to update/create
1273    -- the element entries.
1274    OPEN csr_element_entry(p_element_link_id, p_assignment_id);
1275    FETCH csr_element_entry INTO p_element_entry_id
1276                               , p_element_type_id
1277                               , p_business_group_id
1278                               , p_object_version_number;
1279    --
1280    IF csr_element_entry%NOTFOUND THEN
1281      --
1282      pay_in_utils.set_location(g_debug, 'Alternate logic: ' || l_procedure, 40);
1283      OPEN csr_element_details(p_element_link_id);
1284      FETCH csr_element_details INTO p_element_type_id, p_business_group_id;
1285      CLOSE csr_element_details;
1286      --
1287    END IF;
1288    --
1289    CLOSE csr_element_entry;
1290    --
1291     pay_in_utils.set_location(g_debug,l_procedure,40);
1292    --
1293    IF g_debug THEN
1294       pay_in_utils.trace('**************************************************','********************');
1295       pay_in_utils.trace('Element Link ID: ', p_element_link_id);
1296       pay_in_utils.trace('Element Type ID: ', p_element_type_id);
1297       pay_in_utils.trace('Element Entry ID: ', p_element_entry_id);
1298       pay_in_utils.trace('Business Group : ', p_business_group_id);
1299       pay_in_utils.trace('p_object_version_number : ', p_object_version_number);
1300       pay_in_utils.trace('**************************************************','********************');
1301    --
1302    END IF;
1303    --
1304     pay_in_utils.set_location(g_debug,l_procedure,50);
1305    --
1306    -- Fetch all the input IDs into the pl/sql table
1307    -- These IDs would be used by the calling function.
1308    get_element_entry_ids(p_element_type_id
1309                         ,p_effective_date
1310                         ,p_expected_entries
1311                         ,p_input_values);
1312    --
1313    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,60);
1314 
1315 END get_entry_details;
1316 
1317 
1318 
1319 
1320 FUNCTION get_update_mode
1321    (p_element_entry_id IN pay_element_entries_f.element_entry_id%TYPE
1322    ,p_effective_date   IN DATE)
1323 RETURN VARCHAR2
1324 IS
1325    --
1326      l_procedure            VARCHAR(100);
1327      l_message              VARCHAR2(250);
1328      l_correction           BOOLEAN;
1329      l_update               BOOLEAN;
1330      l_update_override      BOOLEAN;
1331      l_update_change_insert BOOLEAN;
1332      l_update_mode          VARCHAR2(30);
1333    --
1334 BEGIN
1335    --
1336     l_procedure := g_package || 'get_update_mode';
1337     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1338 
1339    IF g_debug THEN
1340       pay_in_utils.trace('**************************************************','********************');
1341       pay_in_utils.trace('p_element_entry_id: ',p_element_entry_id);
1342       pay_in_utils.trace('Effective Date: ', p_effective_date);
1343       pay_in_utils.trace('**************************************************','********************');
1344    END IF;
1345    --
1346    -- Use the dt_api to get the valid values for the update mode
1347    dt_api.find_dt_upd_modes
1348       (p_effective_date      => p_effective_date
1349       ,p_base_table_name     => 'pay_element_entries_f'
1350       ,p_base_key_column     => 'element_entry_id'
1351       ,p_base_key_value      => p_element_entry_id
1352       ,p_correction          => l_correction
1353       ,p_update              => l_update
1354       ,p_update_override     => l_update_override
1355       ,p_update_change_insert=> l_update_change_insert);
1356    --
1357    pay_in_utils.set_location(g_debug, l_procedure, 20);
1358    --
1359    -- Check which flag has been set by DT_API.Find_DT_Upd_Modes
1360    -- Correction is always set to true hence check it's value at last
1361    -- as default. If effective start date is not same as effective date, then
1362    -- If any future row exists for element, then Update is false and Update
1363    -- override and Update Change Insert is set to true.
1364    -- If there are no future row exists then Update mode is used.
1365    --
1366    -- No need to use update_change_insert mode as both update_override
1367    -- and update_change_insert are always set to true or false.
1368    IF l_update THEN
1369       l_update_mode := hr_api.g_update;
1370    ELSIF l_update_override THEN
1371       l_update_mode := hr_api.g_update_override;
1372    ELSIF l_correction THEN
1373       l_update_mode := hr_api.g_correction;
1374    ELSE
1375       l_update_mode := hr_api.g_correction;
1376    END IF;
1377    --
1378 
1379    IF g_debug THEN
1380       pay_in_utils.trace('**************************************************','********************');
1381       pay_in_utils.trace('l_update_mode : ',l_update_mode);
1382       pay_in_utils.trace('**************************************************','********************');
1383    END IF;
1384 
1385    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,30);
1386 
1387    RETURN l_update_mode;
1388 
1389 
1390 END get_update_mode;
1391 
1392 --------------------------------------------------------------------------
1393 --                                                                      --
1394 -- Name           : DECLARE_HOUSE_RENT                                  --
1395 -- Type           : PROCEDURE                                           --
1396 -- Access         : Public                                              --
1397 -- Description    : The procedure is responsible for storing the detials--
1398 --                  in 'House Rent Information' element.                --
1399 --                                                                      --
1400 -- Parameters     :                                                     --
1401 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
1402 --                  p_apr             NUMBER                            --
1403 --                  p_may             NUMBER                            --
1404 --                  p_jun             NUMBER                            --
1405 --                  p_jul             NUMBER                            --
1406 --                  p_aug             NUMBER                            --
1407 --                  p_sep             NUMBER                            --
1408 --                  p_oct             NUMBER                            --
1409 --                  p_nov             NUMBER                            --
1410 --                  p_dec             NUMBER                            --
1411 --                  p_jan             NUMBER                            --
1412 --                  p_feb             NUMBER                            --
1413 --                  p_mar             NUMBER                            --
1414 --                  p_effective_date  DATE                              --
1415 --            OUT : p_warnings        BOOLEAN                           --
1416 --                                                                      --
1417 -- Change History :                                                     --
1418 --------------------------------------------------------------------------
1419 -- Rev#  Date        Userid      Description                            --
1420 --------------------------------------------------------------------------
1421 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
1422 --------------------------------------------------------------------------
1423 PROCEDURE declare_house_rent
1424    (p_assignment_id  IN per_assignments_f.assignment_id%TYPE
1425    ,p_apr            IN NUMBER
1426    ,p_may            IN NUMBER
1427    ,p_jun            IN NUMBER
1428    ,p_jul            IN NUMBER
1429    ,p_aug            IN NUMBER
1430    ,p_sep            IN NUMBER
1431    ,p_oct            IN NUMBER
1432    ,p_nov            IN NUMBER
1433    ,p_dec            IN NUMBER
1434    ,p_jan            IN NUMBER
1435    ,p_feb            IN NUMBER
1436    ,p_mar            IN NUMBER
1437    ,p_effective_date IN DATE DEFAULT NULL
1438    ,p_warnings       OUT NOCOPY BOOLEAN)
1439 IS
1440    --
1441    l_procedure   VARCHAR(100);
1442    l_message     VARCHAR2(250);
1443    l_input_values t_input_values_tab;
1444    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
1445    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
1446    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
1447    l_business_group_id per_business_groups.business_group_id%TYPE;
1448    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
1449    l_effective_start_date DATE;
1450    l_effective_end_date DATE;
1451    l_effective_date DATE;
1452    l_warnings VARCHAR2(6);
1453    --
1454 BEGIN
1455    --
1456     l_procedure := g_package || 'declare_house_rent';
1457     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1458 
1459     IF g_debug THEN
1460       pay_in_utils.trace('**************************************************','********************');
1461       pay_in_utils.trace('p_assignment_id  ',p_assignment_id);
1462       pay_in_utils.trace('p_apr ',p_apr);
1463       pay_in_utils.trace('p_may ',p_may);
1464       pay_in_utils.trace('p_jun ',p_jun);
1465       pay_in_utils.trace('p_jul ',p_jul);
1466       pay_in_utils.trace('p_aug ',p_aug);
1467       pay_in_utils.trace('p_sep ',p_sep);
1468       pay_in_utils.trace('p_oct ',p_oct);
1469       pay_in_utils.trace('p_nov ',p_nov);
1470       pay_in_utils.trace('p_dec ',p_dec);
1471       pay_in_utils.trace('p_jan ',p_jan);
1472       pay_in_utils.trace('p_feb ',p_feb);
1473       pay_in_utils.trace('p_mar ',p_mar);
1474       pay_in_utils.trace('p_effective_date ',p_effective_date);
1475       pay_in_utils.trace('**************************************************','********************');
1476     END IF;
1477    --
1478    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
1479    --
1480    get_entry_details(p_assignment_id        => p_assignment_id
1481                     ,p_element_name         => 'House Rent Information'
1482                     ,p_effective_date       => l_effective_date
1483                     ,p_element_type_id      => l_element_type_id
1484                     ,p_element_link_id      => l_element_link_id
1485                     ,p_element_entry_id     => l_element_entry_id
1486                     ,p_expected_entries     => 12
1487                     ,p_business_group_id    => l_business_group_id
1488                     ,p_object_version_number=> l_object_version_number
1489                     ,p_input_values         => l_input_values
1490                     );
1491    --
1492    IF g_debug THEN
1493       pay_in_utils.trace('**************************************************','********************');
1494       pay_in_utils.trace('Element Type ID: ',l_element_type_id);
1495       pay_in_utils.trace('Element Entry ID: ', l_element_entry_id);
1496       pay_in_utils.trace('Business Group ID: ', l_business_group_id);
1497       pay_in_utils.trace('Object Version Number: ', l_object_version_number);
1498       pay_in_utils.trace('**************************************************','********************');
1499    END IF;
1500    --
1501    pay_in_utils.set_location(g_debug, l_procedure, 20);
1502    --
1503    IF l_element_entry_id is null THEN
1504       --
1505       pay_in_utils.set_location(g_debug, l_procedure, 30);
1506       --
1507       -- In this case, we would have to create an element entry to the
1508       -- assignment and return the entry id, the rest would be handled
1509       -- by the update command in the calling procedure.
1510       --
1511       pay_element_entry_api.create_element_entry
1512          (p_effective_date        => l_effective_date
1513          ,p_business_group_id     => l_business_group_id
1514          ,p_assignment_id         => p_assignment_id
1515          ,p_element_link_id       => l_element_link_id
1516          ,p_entry_type            => 'E'
1517           -- April
1518          ,p_input_value_id1          => l_input_values(0).input_value_id
1519           -- May
1520          ,p_input_value_id2          => l_input_values(1).input_value_id
1521           -- June
1522          ,p_input_value_id3          => l_input_values(2).input_value_id
1523           -- July
1524          ,p_input_value_id4          => l_input_values(3).input_value_id
1525           -- August
1526          ,p_input_value_id5          => l_input_values(4).input_value_id
1527           -- September
1528          ,p_input_value_id6          => l_input_values(5).input_value_id
1529           -- October
1530          ,p_input_value_id7          => l_input_values(6).input_value_id
1531           -- November
1532          ,p_input_value_id8          => l_input_values(7).input_value_id
1533           -- December
1534          ,p_input_value_id9          => l_input_values(8).input_value_id
1535           -- January
1536          ,p_input_value_id10         => l_input_values(9).input_value_id
1537           -- February
1538          ,p_input_value_id11         => l_input_values(10).input_value_id
1539           -- March
1540          ,p_input_value_id12         => l_input_values(11).input_value_id
1541          ,p_entry_value1             => p_apr
1542          ,p_entry_value2             => p_may
1543          ,p_entry_value3             => p_jun
1544          ,p_entry_value4             => p_jul
1545          ,p_entry_value5             => p_aug
1546          ,p_entry_value6             => p_sep
1547          ,p_entry_value7             => p_oct
1548          ,p_entry_value8             => p_nov
1549          ,p_entry_value9             => p_dec
1550          ,p_entry_value10            => p_jan
1551          ,p_entry_value11            => p_feb
1552          ,p_entry_value12            => p_mar
1553          ,p_effective_start_date  => l_effective_start_date
1554          ,p_effective_end_date    => l_effective_end_date
1555          ,p_element_entry_id      => l_element_entry_id
1556          ,p_object_version_number => l_object_version_number
1557          ,p_create_warning        => p_warnings
1558          );
1559       --
1560       pay_in_utils.set_location(g_debug, l_procedure, 40);
1561       --
1562       -- End date the entry as of the financial year end date
1563       --
1564       delete_declaration
1565          (p_element_entry_id => l_element_entry_id
1566          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
1567          ,p_warnings         => l_warnings);
1568       --
1569    ELSE
1570       --
1571       pay_in_utils.set_location(g_debug, l_procedure, 50);
1572       --
1573       -- An element entry for this element already exists we have to
1574       -- update the element entry with the newly submitted date.
1575       --
1576         pay_element_entry_api.update_element_entry
1577          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
1578                                                        ,l_effective_date)
1579          ,p_effective_date           => l_effective_date
1580          ,p_business_group_id        => l_business_group_id
1581          ,p_element_entry_id         => l_element_entry_id
1582          ,p_object_version_number    => l_object_version_number
1583           -- April
1584          ,p_input_value_id1          => l_input_values(0).input_value_id
1585           -- May
1586          ,p_input_value_id2          => l_input_values(1).input_value_id
1587           -- June
1588          ,p_input_value_id3          => l_input_values(2).input_value_id
1589           -- July
1590          ,p_input_value_id4          => l_input_values(3).input_value_id
1591           -- August
1592          ,p_input_value_id5          => l_input_values(4).input_value_id
1593           -- September
1594          ,p_input_value_id6          => l_input_values(5).input_value_id
1595           -- October
1596          ,p_input_value_id7          => l_input_values(6).input_value_id
1597           -- November
1598          ,p_input_value_id8          => l_input_values(7).input_value_id
1599           -- December
1600          ,p_input_value_id9          => l_input_values(8).input_value_id
1601           -- January
1602          ,p_input_value_id10         => l_input_values(9).input_value_id
1603           -- February
1604          ,p_input_value_id11         => l_input_values(10).input_value_id
1605           -- March
1606          ,p_input_value_id12         => l_input_values(11).input_value_id
1607          ,p_entry_value1             => p_apr
1608          ,p_entry_value2             => p_may
1609          ,p_entry_value3             => p_jun
1610          ,p_entry_value4             => p_jul
1611          ,p_entry_value5             => p_aug
1612          ,p_entry_value6             => p_sep
1613          ,p_entry_value7             => p_oct
1614          ,p_entry_value8             => p_nov
1615          ,p_entry_value9             => p_dec
1616          ,p_entry_value10            => p_jan
1617          ,p_entry_value11            => p_feb
1618          ,p_entry_value12            => p_mar
1619          ,p_effective_start_date     => l_effective_start_date
1620          ,p_effective_end_date       => l_effective_end_date
1621          ,p_update_warning           => p_warnings
1622          );
1623       --
1624       pay_in_utils.set_location(g_debug, l_procedure, 60);
1625       --
1626       IF l_effective_end_date <> (pay_in_utils.next_tax_year(l_effective_date)-1)
1627       THEN
1628         --
1629         -- End date the entry as of the financial year end date
1630         --
1631         delete_declaration
1632            (p_element_entry_id =>l_element_entry_id
1633            ,p_effective_date   =>pay_in_utils.next_tax_year(l_effective_date)-1
1634            ,p_warnings         =>l_warnings);
1635         --
1636       END IF;
1637       --
1638    END IF;
1639    --
1640       pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
1641       pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
1642       pay_in_utils.set_location(g_debug,l_procedure,70);
1643 
1644    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,80);
1645    --
1646 EXCEPTION
1647    WHEN OTHERS THEN
1648       fnd_msg_pub.add_exc_msg
1649          (p_pkg_name => g_package
1650          ,p_procedure_name => 'declare_house_rent'
1651          ,p_error_text => substr(sqlerrm, 1, 240)
1652          );
1653    --
1654 END declare_house_rent;
1655 
1656 --------------------------------------------------------------------------
1657 --                                                                      --
1658 -- Name           : DECLARE_CHAPTER6A                                   --
1659 -- Type           : PROCEDURE                                           --
1660 -- Access         : Public                                              --
1661 -- Description    : The procedure calculates the value of permanent     --
1662 --                  disability 80u and then stores the detials in the   --
1663 --                  'Deductions under Chapter VI A' element.            --
1664 --                                                                      --
1665 -- Parameters     :                                                     --
1666 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
1667 --                  p_pension_fund_80ccc           NUMBER               --
1668 --                  p_medical_insurance_prem_80d   NUMBER               --
1669 --                  p_sec_80ddb_senior_citizen     VARCHAR2             --
1670 --                  p_disease_treatment_80ddb      NUMBER               --
1671 --                  p_sec_80d_senior_citizen       VARCHAR2             --
1672 --                  p_higher_education_loan_80e    NUMBER               --
1673 --                  p_claim_exemp_under_sec_80gg   VARCHAR2             --
1674 --                  p_donation_for_research_80gga  NUMBER               --
1675 --                  p_int_on_gen_investment_80L    NUMBER               --
1676 --                  p_int_on_securities_80L        NUMBER               --
1677 --                  p_effective_date               DATE                 --
1678 --            OUT : p_warnings        BOOLEAN                           --
1679 --                                                                      --
1680 -- Change History :                                                     --
1681 --------------------------------------------------------------------------
1682 -- Rev#  Date        Userid      Description                            --
1683 --------------------------------------------------------------------------
1684 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
1685 --------------------------------------------------------------------------
1686 PROCEDURE declare_chapter6a
1687    (p_assignment_id                   IN   per_assignments_f.assignment_id%TYPE
1688    ,p_pension_fund_80ccc              IN   NUMBER
1689    ,p_medical_insurance_prem_80d      IN   NUMBER
1690    ,p_sec_80ddb_senior_citizen        IN   VARCHAR2
1691    ,p_disease_treatment_80ddb         IN   NUMBER
1692    ,p_sec_80d_senior_citizen          IN   VARCHAR2
1693    ,p_higher_education_loan_80e       IN   NUMBER
1694    ,p_claim_exemp_under_sec_80gg      IN   VARCHAR2
1695    ,p_donation_for_research_80gga     IN   NUMBER
1696    ,p_int_on_gen_investment_80L       IN   NUMBER
1697    ,p_int_on_securities_80L           IN   NUMBER
1698    ,p_effective_date                  IN   DATE DEFAULT NULL
1699    ,p_warnings                        OUT  NOCOPY BOOLEAN)
1700 IS
1701    --
1702    l_procedure   VARCHAR(100);
1703    l_message     VARCHAR2(250);
1704    l_disability_proof VARCHAR2(2);
1705    l_permanent_disability_80u NUMBER;
1706    l_input_values t_input_values_tab;
1707    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
1708    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
1709    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
1710    l_business_group_id per_business_groups.business_group_id%TYPE;
1711    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
1712    l_effective_start_date DATE;
1713    l_effective_end_date DATE;
1714    l_effective_date DATE;
1715    l_endation_date DATE;
1716    l_category VARCHAR2(10);
1717    l_degree NUMBER;
1718    l_warnings VARCHAR2(6);
1719    --
1720    CURSOR get_permanent_disability_80u
1721    IS
1722    SELECT global_value
1723      FROM ff_globals_f
1724     WHERE global_name = 'IN_PERMANENT_PHYSICAL_DISABILITY_80U'
1725       AND legislation_code = g_legislation_code;
1726 BEGIN
1727    --
1728     l_procedure := g_package || 'declare_chapter6a';
1729     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
1730 
1731     IF g_debug THEN
1732       pay_in_utils.trace('**************************************************','********************');
1733       pay_in_utils.trace('p_assignment_id',p_assignment_id);
1734       pay_in_utils.trace('p_pension_fund_80ccc',p_pension_fund_80ccc);
1735       pay_in_utils.trace('p_medical_insurance_prem_80d',p_medical_insurance_prem_80d);
1736       pay_in_utils.trace('p_sec_80ddb_senior_citizen',p_sec_80ddb_senior_citizen);
1737       pay_in_utils.trace('p_disease_treatment_80ddb',p_disease_treatment_80ddb);
1738       pay_in_utils.trace('p_sec_80d_senior_citizen',p_sec_80d_senior_citizen);
1739       pay_in_utils.trace('p_higher_education_loan_80e',p_higher_education_loan_80e);
1740       pay_in_utils.trace('p_claim_exemp_under_sec_80gg',p_claim_exemp_under_sec_80gg);
1741       pay_in_utils.trace('p_donation_for_research_80gga',p_donation_for_research_80gga);
1742       pay_in_utils.trace('p_int_on_gen_investment_80L',p_int_on_gen_investment_80L);
1743       pay_in_utils.trace('p_int_on_securities_80L',p_int_on_securities_80L);
1744       pay_in_utils.trace('p_effective_date',p_effective_date);
1745       pay_in_utils.trace('**************************************************','********************');
1746     END IF;
1747    --
1748    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
1749    --
1750    -- Permanent Disability 80u Calculation
1751    -- Permanent disability is calculated based on the details
1752    -- entered in per_disabilities_f by the user. If the
1753    -- disability proof is submitted then only the exemption
1754    -- amount is entered i.e., when l_disability_proof = 'Y'.
1755    l_permanent_disability_80u :=
1756       pay_in_tax_utils.get_disability_details
1757          (p_assignment_id => p_assignment_id
1758          ,p_date_earned   => l_effective_date
1759          ,p_disable_catg  => l_category
1760          ,p_disable_degree=> l_degree
1761          ,p_disable_proof => l_disability_proof
1762          );
1763    --
1764    l_permanent_disability_80u := 0;
1765    --
1766    IF (l_disability_proof = 'Y' AND l_degree >= 40 AND l_category IN ('BLIND','SA_VIS_IMP','LC','SA_HEA_IMP','LD','07','MI','AU','CP','MD'))
1767    THEN
1768       --
1769       OPEN get_permanent_disability_80u;
1770       FETCH get_permanent_disability_80u INTO l_permanent_disability_80u;
1771       CLOSE get_permanent_disability_80u;
1772       --
1773    END IF;
1774    --
1775 
1776    get_entry_details(p_assignment_id        => p_assignment_id
1777                     ,p_element_name         => 'Deductions under Chapter VI A'
1778                     ,p_effective_date       => l_effective_date
1779                     ,p_element_type_id      => l_element_type_id
1780                     ,p_element_link_id      => l_element_link_id
1781                     ,p_element_entry_id     => l_element_entry_id
1782                     ,p_expected_entries     => 11
1783                     ,p_business_group_id    => l_business_group_id
1784                     ,p_object_version_number=> l_object_version_number
1785                     ,p_input_values         => l_input_values
1786                     );
1787    --
1788    IF g_debug THEN
1789       pay_in_utils.trace('**************************************************','********************');
1790       pay_in_utils.trace('Element Type ID: ',l_element_type_id);
1791       pay_in_utils.trace('Element Entry ID: ',l_element_entry_id);
1792       pay_in_utils.trace('Business Group ID: ',l_business_group_id);
1793       pay_in_utils.trace('Object Version Number: ',l_object_version_number);
1794       pay_in_utils.trace('**************************************************','********************');
1795    END IF;
1796    --
1797    pay_in_utils.set_location(g_debug, l_procedure, 20);
1798    --
1799    IF l_element_entry_id is null THEN
1800       --
1801       pay_in_utils.set_location(g_debug, l_procedure, 30);
1802       --
1803       --
1804       -- In this case, we would have to create an element entry to the
1805       -- assignment and return the entry id, the rest would be handled
1806       -- by the update command in the calling procedure.
1807       --
1808       pay_element_entry_api.create_element_entry
1809          (p_effective_date        => l_effective_date
1810          ,p_business_group_id     => l_business_group_id
1811          ,p_assignment_id         => p_assignment_id
1812          ,p_element_link_id       => l_element_link_id
1813          ,p_entry_type            => 'E'
1814            --Pension Fund 80CCC
1815          ,p_input_value_id1          => l_input_values(0).input_value_id
1816            --Medical Insurance Premium 80D
1817          ,p_input_value_id2          => l_input_values(1).input_value_id
1818            --Sec 80DDB Cover Senior Citizen
1819          ,p_input_value_id3          => l_input_values(2).input_value_id
1820            --Disease Treatment 80DDB
1821          ,p_input_value_id4          => l_input_values(3).input_value_id
1822            --Sec 80D Cover Senior Citizen
1823          ,p_input_value_id5          => l_input_values(4).input_value_id
1824            --Higher Education Loan 80E
1825          ,p_input_value_id6          => l_input_values(5).input_value_id
1826            --Claim Exemption under Sec 80GG
1827          ,p_input_value_id7          => l_input_values(6).input_value_id
1828            --Donation for Research 80GGA
1829          ,p_input_value_id8          => l_input_values(7).input_value_id
1830            --Int on Gen Investment 80L
1831          ,p_input_value_id9          => l_input_values(8).input_value_id
1832            --Int on Securities 80L
1833          ,p_input_value_id10         => l_input_values(9).input_value_id
1834            --Permanent Disability 80U
1835          ,p_input_value_id11         => l_input_values(10).input_value_id
1836          ,p_entry_value1             => p_pension_fund_80ccc
1837          ,p_entry_value2             => p_medical_insurance_prem_80d
1838          ,p_entry_value3             => p_sec_80ddb_senior_citizen
1839          ,p_entry_value4             => p_disease_treatment_80ddb
1840          ,p_entry_value5             => p_sec_80d_senior_citizen
1841          ,p_entry_value6             => p_higher_education_loan_80e
1842          ,p_entry_value7             => p_claim_exemp_under_sec_80gg
1843          ,p_entry_value8             => p_donation_for_research_80gga
1844          ,p_entry_value9             => p_int_on_gen_investment_80L
1845          ,p_entry_value10            => p_int_on_securities_80L
1846          ,p_entry_value11            => l_permanent_disability_80u
1847          ,p_effective_start_date     => l_effective_start_date
1848          ,p_effective_end_date       => l_effective_end_date
1849          ,p_element_entry_id         => l_element_entry_id
1850          ,p_object_version_number    => l_object_version_number
1851          ,p_create_warning           => p_warnings
1852          );
1853       --
1854       pay_in_utils.set_location(g_debug, l_procedure, 40);
1855       --
1856       -- End date the entry as of the financial year end date
1857       --
1858       IF l_disability_proof = 'N' THEN
1859         --
1860         --
1861         pay_in_utils.set_location(g_debug, l_procedure, 45);
1862         --
1863         delete_declaration
1864            (p_element_entry_id => l_element_entry_id
1865            ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
1866            ,p_warnings         => l_warnings);
1867         --
1868       END IF;
1869       --
1870    ELSE
1871       --
1872       pay_in_utils.set_location(g_debug, l_procedure, 50);
1873       --
1874       --
1875       -- An element entry for this element already exists we have to
1876       -- update the element entry with the newly submitted date.
1877       --
1878         pay_element_entry_api.update_element_entry
1879          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
1880                                                        ,l_effective_date)
1881          ,p_effective_date           => l_effective_date
1882          ,p_business_group_id        => l_business_group_id
1883          ,p_element_entry_id         => l_element_entry_id
1884          ,p_object_version_number    => l_object_version_number
1885            --Pension Fund 80CCC
1886          ,p_input_value_id1          => l_input_values(0).input_value_id
1887            --Medical Insurance Premium 80D
1888          ,p_input_value_id2          => l_input_values(1).input_value_id
1889            --Sec 80DDB Cover Senior Citizen
1890          ,p_input_value_id3          => l_input_values(2).input_value_id
1891            --Disease Treatment 80DDB
1892          ,p_input_value_id4          => l_input_values(3).input_value_id
1893            --Sec 80D Cover Senior Citizen
1894          ,p_input_value_id5          => l_input_values(4).input_value_id
1895            --Higher Education Loan 80E
1896          ,p_input_value_id6          => l_input_values(5).input_value_id
1897            --Claim Exemption under Sec 80GG
1898          ,p_input_value_id7          => l_input_values(6).input_value_id
1899            --Donation for Research 80GGA
1900          ,p_input_value_id8          => l_input_values(7).input_value_id
1901            --Int on Gen Investment 80L
1902          ,p_input_value_id9          => l_input_values(8).input_value_id
1903            --Int on Securities 80L
1904          ,p_input_value_id10         => l_input_values(9).input_value_id
1905          ,p_entry_value1             => p_pension_fund_80ccc
1906          ,p_entry_value2             => p_medical_insurance_prem_80d
1907          ,p_entry_value3             => p_sec_80ddb_senior_citizen
1908          ,p_entry_value4             => p_disease_treatment_80ddb
1909          ,p_entry_value5             => p_sec_80d_senior_citizen
1910          ,p_entry_value6             => p_higher_education_loan_80e
1911          ,p_entry_value7             => p_claim_exemp_under_sec_80gg
1912          ,p_entry_value8             => p_donation_for_research_80gga
1913          ,p_entry_value9             => p_int_on_gen_investment_80L
1914          ,p_entry_value10            => p_int_on_securities_80L
1915          ,p_effective_start_date     => l_effective_start_date
1916          ,p_effective_end_date       => l_effective_end_date
1917          ,p_update_warning           => p_warnings
1918          );
1919       --
1920       --
1921       pay_in_utils.set_location(g_debug, l_procedure, 60);
1922       --
1923       l_endation_date := pay_in_utils.next_tax_year(l_effective_date);
1924       --
1925       IF l_effective_end_date <> (l_endation_date-1)
1926       THEN
1927         --
1928         -- End date the entry as of the financial year end date
1929         --
1930         pay_in_utils.set_location(g_debug, l_procedure, 70);
1931         --
1932         IF l_disability_proof = 'Y' THEN
1933           --
1934           --
1935             pay_in_utils.set_location(g_debug, l_procedure, 80);
1936             --
1937             pay_element_entry_api.update_element_entry
1938              (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
1939                                                            ,l_endation_date)
1940              ,p_effective_date           => l_endation_date
1941              ,p_business_group_id        => l_business_group_id
1942              ,p_element_entry_id         => l_element_entry_id
1943              ,p_object_version_number    => l_object_version_number
1944                --Pension Fund 80CCC
1945              ,p_input_value_id1          => l_input_values(0).input_value_id
1946                 --Medical Insurance Premium 80D
1947              ,p_input_value_id2          => l_input_values(1).input_value_id
1948                --Sec 80DDB Cover Senior Citizen
1949              ,p_input_value_id3          => l_input_values(2).input_value_id
1950                --Disease Treatment 80DDB
1951              ,p_input_value_id4          => l_input_values(3).input_value_id
1952                --Sec 80D Cover Senior Citizen
1953              ,p_input_value_id5          => l_input_values(4).input_value_id
1954                --Higher Education Loan 80E
1955              ,p_input_value_id6          => l_input_values(5).input_value_id
1956                --Claim Exemption under Sec 80GG
1957              ,p_input_value_id7          => l_input_values(6).input_value_id
1958                --Donation for Research 80GGA
1959              ,p_input_value_id8          => l_input_values(7).input_value_id
1960                --Int on Gen Investment 80L
1961              ,p_input_value_id9          => l_input_values(8).input_value_id
1962                --Int on Securities 80L
1963              ,p_input_value_id10         => l_input_values(9).input_value_id
1964              ,p_entry_value1             => 0
1965              ,p_entry_value2             => 0
1966              ,p_entry_value3             => 'N'
1967              ,p_entry_value4             => 0
1968              ,p_entry_value5             => 'N'
1969              ,p_entry_value6             => 0
1970              ,p_entry_value7             => 'N'
1971              ,p_entry_value8             => 0
1972              ,p_entry_value9             => 0
1973              ,p_entry_value10            => 0
1974              ,p_effective_start_date     => l_effective_start_date
1975              ,p_effective_end_date       => l_effective_end_date
1976              ,p_update_warning           => p_warnings
1977              );
1978           --
1979         ELSE
1980           --
1981             pay_in_utils.set_location(g_debug, l_procedure, 90);
1982             --
1983             delete_declaration
1984              (p_element_entry_id => l_element_entry_id
1985              ,p_effective_date   => l_endation_date-1
1986              ,p_warnings         => l_warnings);
1987           --
1988         END IF;
1989         --
1990       END IF;
1991       --
1992    END IF;
1993    --
1994    IF g_debug THEN
1995       pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
1996       pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
1997    END IF;
1998 
1999    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
2000    --
2001 EXCEPTION
2002    WHEN OTHERS THEN
2003       fnd_msg_pub.add_exc_msg
2004          (p_pkg_name => g_package
2005          ,p_procedure_name => 'declare_chapter6a'
2006          ,p_error_text => substr(sqlerrm, 1, 240)
2007          );
2008    --
2009 END declare_chapter6a;
2010 
2011 --------------------------------------------------------------------------
2012 --                                                                      --
2013 -- Name           : DECLARE_SECTION88                                   --
2014 -- Type           : PROCEDURE                                           --
2015 -- Access         : Public                                              --
2016 -- Description    : The procedure is responsible for storing the detials--
2017 --                  in 'Rebates under Section 88' element.              --
2018 --                                                                      --
2019 -- Parameters     :                                                     --
2020 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
2021 --                  p_public_provident_fund           NUMBER            --
2022 --                  p_post_office_savings_scheme      NUMBER            --
2023 --                  p_deposit_in_nsc_vi_issue         NUMBER            --
2024 --                  p_deposit_in_nsc_viii_issue       NUMBER            --
2025 --                  p_interest_on_nsc_reinvested      NUMBER            --
2026 --                  p_house_loan_repayment            NUMBER            --
2027 --                  p_notified_mutual_fund_or_uti     NUMBER            --
2028 --                  p_national_housing_bank_scheme    NUMBER            --
2029 --                  p_unit_linked_insurance_plan      NUMBER            --
2030 --                  p_notified_annuity_plan           NUMBER            --
2031 --                  p_notified_pension_fund           NUMBER            --
2032 --                  p_public_sector_company_scheme    NUMBER            --
2033 --                  p_approved_superannuation_fund    NUMBER            --
2034 --                  p_infrastructure_bond             NUMBER            --
2035 --                  p_effective_date                  DATE              --
2036 --            OUT : p_warnings        BOOLEAN                           --
2037 --                                                                      --
2038 -- Change History :                                                     --
2039 --------------------------------------------------------------------------
2040 -- Rev#  Date        Userid      Description                            --
2041 --------------------------------------------------------------------------
2042 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
2043 -- 1.1  25-Apr-2005  VGSRINIV    Nulled out for stat update(Bug 4251141)--
2044 --------------------------------------------------------------------------
2045 PROCEDURE declare_section88
2046    (p_assignment_id                  IN per_assignments_f.assignment_id%TYPE
2047    ,p_deferred_annuity               IN NUMBER
2048    ,p_senior_citizen_sav_scheme      IN NUMBER
2049    ,p_public_provident_fund          IN NUMBER
2050    ,p_post_office_savings_scheme     IN NUMBER
2051    ,p_deposit_in_nsc_vi_issue        IN NUMBER
2052    ,p_deposit_in_nsc_viii_issue      IN NUMBER
2053    ,p_interest_on_nsc_reinvested     IN NUMBER
2054    ,p_house_loan_repayment           IN NUMBER
2055    ,p_notified_mutual_fund_or_uti    IN NUMBER
2056    ,p_national_housing_bank_scheme   IN NUMBER
2057    ,p_unit_linked_insurance_plan     IN NUMBER
2058    ,p_notified_annuity_plan          IN NUMBER
2059    ,p_notified_pension_fund          IN NUMBER
2060    ,p_public_sector_company_scheme   IN NUMBER
2061    ,p_approved_superannuation_fund   IN NUMBER
2062    ,p_infrastructure_bond            IN NUMBER
2063    ,p_effective_date                 IN DATE DEFAULT NULL
2064    ,p_warnings                       OUT NOCOPY BOOLEAN)
2065 IS
2066    --
2067    l_procedure   VARCHAR(100);
2068    l_message     VARCHAR2(250);
2069    l_input_values t_input_values_tab;
2070    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
2071    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
2072    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
2073    l_business_group_id per_business_groups.business_group_id%TYPE;
2074    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
2075    l_effective_start_date DATE;
2076    l_effective_end_date DATE;
2077    l_effective_date DATE;
2078    l_warnings VARCHAR2(6);
2079    --
2080 BEGIN
2081    --
2082     l_procedure := g_package || 'declare_section88';
2083     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
2084 
2085     IF g_debug THEN
2086       pay_in_utils.trace('**************************************************','********************');
2087       pay_in_utils.trace('p_assignment_id',p_assignment_id);
2088       pay_in_utils.trace('p_deferred_annuity',p_deferred_annuity);
2089       pay_in_utils.trace('p_senior_citizen_sav_scheme',p_senior_citizen_sav_scheme);
2090       pay_in_utils.trace('p_public_provident_fund',p_public_provident_fund);
2091       pay_in_utils.trace('p_post_office_savings_scheme',p_post_office_savings_scheme);
2092       pay_in_utils.trace('p_deposit_in_nsc_vi_issue',p_deposit_in_nsc_vi_issue);
2093       pay_in_utils.trace('p_deposit_in_nsc_viii_issue',p_deposit_in_nsc_viii_issue);
2094       pay_in_utils.trace('p_interest_on_nsc_reinvested',p_interest_on_nsc_reinvested);
2095       pay_in_utils.trace('p_house_loan_repayment',p_house_loan_repayment);
2096       pay_in_utils.trace('p_notified_mutual_fund_or_uti',p_notified_mutual_fund_or_uti);
2097       pay_in_utils.trace('p_national_housing_bank_scheme',p_national_housing_bank_scheme);
2098       pay_in_utils.trace('p_unit_linked_insurance_plan',p_unit_linked_insurance_plan);
2099       pay_in_utils.trace('p_notified_annuity_plan',p_notified_annuity_plan);
2100       pay_in_utils.trace('p_notified_pension_fund',p_notified_pension_fund);
2101       pay_in_utils.trace('p_public_sector_company_scheme',p_public_sector_company_scheme);
2102       pay_in_utils.trace('p_approved_superannuation_fund',p_approved_superannuation_fund);
2103       pay_in_utils.trace('p_infrastructure_bond',p_infrastructure_bond);
2104       pay_in_utils.trace('p_effective_date',p_effective_date);
2105       pay_in_utils.trace('**************************************************','********************');
2106     END IF;
2107 
2108 
2109    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,20);
2110    --
2111 EXCEPTION
2112    WHEN OTHERS THEN
2113       fnd_msg_pub.add_exc_msg
2114          (p_pkg_name => g_package
2115          ,p_procedure_name => 'declare_section88'
2116          ,p_error_text => substr(sqlerrm, 1, 240)
2117          );
2118    --
2119 END declare_section88;
2120 
2121 --------------------------------------------------------------------------
2122 --                                                                      --
2123 -- Name           : DECLARE_OTHER_INCOME                                --
2124 -- Type           : PROCEDURE                                           --
2125 -- Access         : Public                                              --
2126 -- Description    : The procedure is responsible for storing the        --
2127 --                  detials in 'Other Income' element.                  --
2128 --                                                                      --
2129 -- Parameters     :                                                     --
2130 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
2131 --                  p_income_from_house_property     NUMBER             --
2132 --                  p_profit_and_gain_from_busines   NUMBER             --
2133 --                  p_long_term_capital_gain         NUMBER             --
2134 --                  p_short_term_capital_gain        NUMBER             --
2135 --                  p_income_from_any_other_source   NUMBER             --
2136 --                  p_tds_paid_on_other_income       NUMBER             --
2137 --                  p_effective_date                  DATE              --
2138 --            OUT : p_warnings        BOOLEAN                           --
2139 --                                                                      --
2140 -- Change History :                                                     --
2141 --------------------------------------------------------------------------
2142 -- Rev#  Date        Userid      Description                            --
2143 --------------------------------------------------------------------------
2144 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
2145 --------------------------------------------------------------------------
2146 PROCEDURE declare_other_income
2147    (p_assignment_id                 IN per_assignments_f.assignment_id%TYPE
2148    ,p_income_from_house_property    IN NUMBER
2149    ,p_profit_and_gain_from_busines  IN NUMBER
2150    ,p_long_term_capital_gain        IN NUMBER
2151    ,p_short_term_capital_gain       IN NUMBER
2152    ,p_income_from_any_other_source  IN NUMBER
2153    ,p_tds_paid_on_other_income      IN NUMBER
2154    ,p_effective_date                IN DATE DEFAULT NULL
2155    ,p_warnings                      OUT NOCOPY BOOLEAN)
2156 IS
2157    --
2158    l_procedure   VARCHAR(100);
2159    l_message     VARCHAR2(250);
2160    l_input_values t_input_values_tab;
2161    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
2162    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
2163    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
2164    l_business_group_id per_business_groups.business_group_id%TYPE;
2165    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
2166    l_effective_start_date DATE;
2167    l_effective_end_date DATE;
2168    l_effective_date DATE;
2169    l_warnings VARCHAR2(6);
2170    --
2171 BEGIN
2172    --
2173     l_procedure := g_package || 'declare_other_income';
2174     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
2175 
2176     IF g_debug THEN
2177       pay_in_utils.trace('**************************************************','********************');
2178       pay_in_utils.trace('p_assignment_id',p_assignment_id);
2179       pay_in_utils.trace('p_income_from_house_property  ',p_income_from_house_property );
2180       pay_in_utils.trace('p_profit_and_gain_from_busines',p_profit_and_gain_from_busines);
2181       pay_in_utils.trace('p_long_term_capital_gain      ',p_long_term_capital_gain );
2182       pay_in_utils.trace('p_short_term_capital_gain     ',p_short_term_capital_gain);
2183       pay_in_utils.trace('p_income_from_any_other_source',p_income_from_any_other_source);
2184       pay_in_utils.trace('p_tds_paid_on_other_income    ',p_tds_paid_on_other_income);
2185       pay_in_utils.trace('**************************************************','********************');
2186     END IF;
2187    --
2188    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
2189    --
2190    get_entry_details(p_assignment_id        => p_assignment_id
2191                     ,p_element_name         => 'Other Income'
2192                     ,p_effective_date       => l_effective_date
2193                     ,p_element_type_id      => l_element_type_id
2194                     ,p_element_link_id      => l_element_link_id
2195                     ,p_element_entry_id     => l_element_entry_id
2196                     ,p_expected_entries     => 6
2197                     ,p_business_group_id    => l_business_group_id
2198                     ,p_object_version_number=> l_object_version_number
2199                     ,p_input_values         => l_input_values
2200                     );
2201    --
2202    IF g_debug THEN
2203       pay_in_utils.trace('Element Type ID: ', l_element_type_id);
2204       pay_in_utils.trace('Element Entry ID: ', l_element_entry_id);
2205       pay_in_utils.trace('Business Group ID: ', l_business_group_id);
2206       pay_in_utils.trace('Object Version Number: ', l_object_version_number);
2207       pay_in_utils.set_location(g_debug,l_procedure,20);
2208    END IF;
2209    --
2210    pay_in_utils.set_location(g_debug, l_procedure, 20);
2211    --
2212    IF l_element_entry_id is null THEN
2213       --
2214       pay_in_utils.set_location(g_debug, l_procedure, 30);
2215       --
2216       --
2217       -- In this case, we would have to create an element entry to the
2218       -- assignment and return the entry id, the rest would be handled
2219       -- by the update command in the calling procedure.
2220       --
2221       pay_element_entry_api.create_element_entry
2222          (p_effective_date        => l_effective_date
2223          ,p_business_group_id     => l_business_group_id
2224          ,p_assignment_id         => p_assignment_id
2225          ,p_element_link_id       => l_element_link_id
2226          ,p_entry_type            => 'E'
2227            -- Income from House Property
2228          ,p_input_value_id1       => l_input_values(0).input_value_id
2229            -- Profit and Gain from Business
2230          ,p_input_value_id2       => l_input_values(1).input_value_id
2231            -- Long Term Capital Gain
2232          ,p_input_value_id3       => l_input_values(2).input_value_id
2233            -- Short Term Capital Gain
2234          ,p_input_value_id4       => l_input_values(3).input_value_id
2235            -- Income from any other sources
2236          ,p_input_value_id5       => l_input_values(4).input_value_id
2237            -- TDS Paid on Other Income
2238          ,p_input_value_id6       => l_input_values(5).input_value_id
2239          ,p_entry_value1          => p_income_from_house_property
2240          ,p_entry_value2          => p_profit_and_gain_from_busines
2241          ,p_entry_value3          => p_long_term_capital_gain
2242          ,p_entry_value4          => p_short_term_capital_gain
2243          ,p_entry_value5          => p_income_from_any_other_source
2244          ,p_entry_value6          => p_tds_paid_on_other_income
2245          ,p_effective_start_date  => l_effective_start_date
2246          ,p_effective_end_date    => l_effective_end_date
2247          ,p_element_entry_id      => l_element_entry_id
2248          ,p_object_version_number => l_object_version_number
2249          ,p_create_warning        => p_warnings
2250          );
2251       --
2252       pay_in_utils.set_location(g_debug, l_procedure, 40);
2253       --
2254       -- End date the entry as of the financial year end date
2255       --
2256       delete_declaration
2257          (p_element_entry_id => l_element_entry_id
2258          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
2259          ,p_warnings         => l_warnings);
2260       --
2261    ELSE
2262       --
2263       pay_in_utils.set_location(g_debug, l_procedure, 50);
2264       --
2265       --
2266       -- An element entry for this element already exists we have to
2267       -- update the element entry with the newly submitted date.
2268       --
2269         pay_element_entry_api.update_element_entry
2270          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
2271                                                        ,l_effective_date)
2272          ,p_effective_date        => l_effective_date
2273          ,p_business_group_id     => l_business_group_id
2274          ,p_element_entry_id      => l_element_entry_id
2275          ,p_object_version_number => l_object_version_number
2276            -- Income from House Property
2277          ,p_input_value_id1       => l_input_values(0).input_value_id
2278            -- Profit and Gain from Business
2279          ,p_input_value_id2       => l_input_values(1).input_value_id
2280            -- Long Term Capital Gain
2281          ,p_input_value_id3       => l_input_values(2).input_value_id
2282            -- Short Term Capital Gain
2283          ,p_input_value_id4       => l_input_values(3).input_value_id
2284            -- Income from any other sources
2285          ,p_input_value_id5       => l_input_values(4).input_value_id
2286            -- TDS Paid on Other Income
2287          ,p_input_value_id6       => l_input_values(5).input_value_id
2288          ,p_entry_value1          => p_income_from_house_property
2289          ,p_entry_value2          => p_profit_and_gain_from_busines
2290          ,p_entry_value3          => p_long_term_capital_gain
2291          ,p_entry_value4          => p_short_term_capital_gain
2292          ,p_entry_value5          => p_income_from_any_other_source
2293          ,p_entry_value6          => p_tds_paid_on_other_income
2294          ,p_effective_start_date  => l_effective_start_date
2295          ,p_effective_end_date    => l_effective_end_date
2296          ,p_update_warning        => p_warnings
2297          );
2298       --
2299       pay_in_utils.set_location(g_debug, l_procedure, 60);
2300       --
2301       IF l_effective_end_date <> (pay_in_utils.next_tax_year(l_effective_date)-1)
2302       THEN
2303         --
2304         -- End date the entry as of the financial year end date
2305         --
2306         delete_declaration
2307            (p_element_entry_id =>l_element_entry_id
2308            ,p_effective_date   =>pay_in_utils.next_tax_year(l_effective_date)-1
2309            ,p_warnings         =>l_warnings);
2310         --
2311       END IF;
2312       --
2313    END IF;
2314    --
2315       pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
2316       pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
2317       pay_in_utils.set_location(g_debug,l_procedure,70);
2318    --
2319 
2320 
2321    pay_in_utils.set_location(g_debug, 'Leaving: ' || l_procedure, 80);
2322    --
2323 EXCEPTION
2324    WHEN OTHERS THEN
2325       fnd_msg_pub.add_exc_msg
2326          (p_pkg_name => g_package
2327          ,p_procedure_name => 'declare_other_income'
2328          ,p_error_text => substr(sqlerrm, 1, 240)
2329          );
2330     --
2331 END declare_other_income;
2332 
2333 --------------------------------------------------------------------------
2334 --                                                                      --
2335 -- Name           : DECLARE_SECTION80DD                                 --
2336 -- Type           : PROCEDURE                                           --
2337 -- Access         : Public                                              --
2338 -- Description    : The procedure is responsible for storing the        --
2339 --                  detials in 'Deduction under Section 80DD' element.  --
2340 --                                                                      --
2341 -- Parameters     :                                                     --
2342 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
2343 --                  p_disability_type        VARCHAR2                   --
2344 --                  p_disability_percentage  VARCHAR2                   --
2345 --                  p_treatment_amount       NUMBER                     --
2346 --                  p_effective_date         DATE                       --
2347 --                  p_element_entry_id       element_entry_id%TYPE      --
2348 --            OUT : p_warnings        BOOLEAN                           --
2349 --                                                                      --
2350 -- Change History :                                                     --
2351 --------------------------------------------------------------------------
2352 -- Rev#  Date        Userid      Description                            --
2353 --------------------------------------------------------------------------
2354 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
2355 --------------------------------------------------------------------------
2356 PROCEDURE declare_section80dd
2357    (p_assignment_id         IN per_assignments_f.assignment_id%TYPE
2358    ,p_disability_type       IN VARCHAR2
2359    ,p_disability_percentage IN VARCHAR2
2360    ,p_treatment_amount      IN NUMBER
2361    ,p_effective_date        IN DATE default null
2362    ,p_element_entry_id      IN pay_element_entries_f.element_entry_id%TYPE default null
2363    ,p_warnings              OUT NOCOPY VARCHAR2)
2364 IS
2365    --
2366    l_procedure   VARCHAR(100);
2367    l_message     VARCHAR2(250);
2368    l_warnings BOOLEAN;
2369    l_input_values t_input_values_tab;
2370    l_element_type_id pay_element_types_f.element_type_id%TYPE;
2371    l_element_link_id pay_element_links_f.element_link_id%TYPE;
2372    l_element_entry_id pay_element_entries.element_entry_id%TYPE;
2373    l_business_group_id per_business_groups.business_group_id%TYPE;
2374    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
2375    l_effective_date DATE;
2376    l_effective_start_date DATE;
2377    l_effective_end_date DATE;
2378    --
2379    -- Added as a part of bug fix 4774108
2380    CURSOR csr_element_type_id(p_element_name    VARCHAR2
2381                              ,p_effective_date  DATE)-- Added as a part of bug 4938573
2382    IS
2383    SELECT element_type_id
2384    FROM   pay_element_types_f
2385    WHERE  (legislation_code = 'IN' OR business_group_id = FND_PROFILE.VALUE('PER_BUSINESS_GROUP_ID'))
2386    AND    element_name = p_element_name
2387    AND    p_effective_date BETWEEN effective_start_date AND effective_end_date;
2388 
2389    CURSOR csr_element_link_details
2390     (c_assignment_id IN per_assignments_f.assignment_id%TYPE
2391     ,c_effective_date IN DATE
2392     ,c_element_link_id IN NUMBER)
2393    IS
2394    SELECT types.element_type_id
2395         , links.element_link_id
2396         , assgn.business_group_id
2397      FROM per_assignments_f assgn
2398         , pay_element_links_f links
2399         , pay_element_types_f types
2400     WHERE assgn.assignment_id = c_assignment_id
2401       AND links.element_link_id = c_element_link_id
2402       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
2403       AND links.business_group_id = assgn.business_group_id
2404       AND links.element_type_id = types.element_type_id
2405       AND types.element_name = 'Deduction under Section 80DD'
2406       AND c_effective_date BETWEEN assgn.effective_start_date
2407                                AND assgn.effective_end_date
2408       AND c_effective_date BETWEEN links.effective_start_date
2409                                AND links.effective_end_date
2410       AND c_effective_date BETWEEN types.effective_start_date
2411                                AND types.effective_end_date;
2412    --
2413    CURSOR csr_element_entry_details
2414     (c_element_entry_id IN pay_element_entries_f.element_entry_id%TYPE
2415     ,c_effective_date IN DATE)
2416    IS
2417    SELECT entries.element_type_id
2418         , entries.object_version_number
2419         , assgn.business_group_id
2420      FROM pay_element_entries_f entries
2421         , per_assignments_f assgn
2422     WHERE entries.element_entry_id = c_element_entry_id
2423     AND   entries.assignment_id = assgn.assignment_id
2424     AND   c_effective_date BETWEEN entries.effective_start_date
2425                                AND entries.effective_end_date
2426     AND   c_effective_date BETWEEN assgn.effective_start_date
2427                                AND assgn.effective_end_date;
2428 BEGIN
2429    --
2430 
2431 
2432     l_procedure := g_package || 'declare_section80dd';
2433     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
2434 
2435     IF g_debug THEN
2436       pay_in_utils.trace('**************************************************','********************');
2437       pay_in_utils.trace('p_assignment_id',p_assignment_id);
2438       pay_in_utils.trace('p_disability_type  ',p_disability_type );
2439       pay_in_utils.trace('p_disability_percentage',p_disability_percentage);
2440       pay_in_utils.trace('p_treatment_amount      ',p_treatment_amount );
2441       pay_in_utils.trace('p_effective_date     ',p_effective_date );
2442       pay_in_utils.trace('p_element_entry_id',p_element_entry_id);
2443       pay_in_utils.trace('**************************************************','********************');
2444     END IF;
2445 
2446    p_warnings := 'FALSE';
2447 
2448    --
2449    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
2450    -- Added for bug 3990922
2451    hr_session_utilities.insert_session_row(l_effective_date);
2452    --
2453    IF (NVL(p_element_entry_id, 0) = 0) THEN
2454       --
2455       pay_in_utils.set_location(g_debug, l_procedure, 20);
2456       --
2457       -- Added as a part of bug fix 4774108
2458       OPEN  csr_element_type_id('Deduction under Section 80DD',l_effective_date);-- Added as a part of bug 4938573
2459       FETCH csr_element_type_id INTO l_element_type_id;
2460       CLOSE csr_element_type_id;
2461 
2462       l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
2463                                                            ,l_effective_date-- Modified as a part of bug 4938573
2464                                                            ,l_element_type_id
2465                                                             );
2466 
2467       OPEN  csr_element_link_details(p_assignment_id
2468                                     ,l_effective_date
2469                                     ,l_element_link_id
2470                                     );
2471       FETCH csr_element_link_details INTO l_element_type_id
2472                                         , l_element_link_id
2473                                         , l_business_group_id;
2474       CLOSE csr_element_link_details;
2475       --
2476       IF l_element_link_id IS NULL THEN
2477          --
2478          hr_utility.set_message(800, 'PER_IN_MISSING_LINK');
2479          hr_utility.set_message_token('ELEMENT_NAME', 'Deduction under Section 80DD');
2480          hr_utility.raise_error;
2481          --
2482       END IF;
2483       --
2484       pay_in_utils.set_location(g_debug, l_procedure, 30);
2485       --
2486       IF g_debug THEN
2487         pay_in_utils.trace('Element Type ID: ', l_element_type_id);
2488         pay_in_utils.trace('Element Link ID: ', l_element_link_id);
2489         pay_in_utils.trace('Business Group ID: ', l_business_group_id);
2490       END IF;
2491       --
2492       -- Query the entry IDs required for creation of the element.
2493       get_element_entry_ids(l_element_type_id
2494                            ,l_effective_date
2495                            ,6
2496                            ,l_input_values);
2497       --
2498       pay_in_utils.set_location(g_debug, l_procedure, 40);
2499       --
2500       -- In this case, we would have to create an element entry to the
2501       -- assignment and return the entry id, the rest would be handled
2502       -- by the update command in the calling procedure.
2503       hr_utility.trace('Disability Type= '||p_disability_type);
2504       pay_element_entry_api.create_element_entry
2505          (p_effective_date        => l_effective_date
2506          ,p_business_group_id     => l_business_group_id
2507          ,p_assignment_id         => p_assignment_id
2508          ,p_element_link_id       => l_element_link_id
2509          ,p_entry_type            => 'E'
2510            -- Disability Type
2511          ,p_input_value_id1       => l_input_values(0).input_value_id
2512            -- Disability Percentage
2513          ,p_input_value_id2       => l_input_values(1).input_value_id
2514            -- Treatment Amount
2515          ,p_input_value_id3       => l_input_values(2).input_value_id
2516          ,p_entry_value1          => p_disability_type
2517          ,p_entry_value2          => p_disability_percentage
2518          ,p_entry_value3          => p_treatment_amount
2519          ,p_effective_start_date  => l_effective_start_date
2520          ,p_effective_end_date    => l_effective_end_date
2521          ,p_element_entry_id      => l_element_entry_id
2522          ,p_object_version_number => l_object_version_number
2523          ,p_create_warning        => l_warnings
2524          );
2525       --
2526       pay_in_utils.set_location(g_debug, l_procedure, 50);
2527       --
2528       -- End date the entry as of the financial year end date
2529       --
2530       delete_declaration
2531          (p_element_entry_id => l_element_entry_id
2532          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
2533          ,p_warnings         => p_warnings);
2534       --
2535    ELSE
2536       --
2537       pay_in_utils.set_location(g_debug, l_procedure, 60);
2538       --
2539       OPEN csr_element_entry_details(p_element_entry_id
2540                                     ,l_effective_date);
2541       FETCH csr_element_entry_details INTO l_element_type_id
2542                                          , l_object_version_number
2543 					 , l_business_group_id;
2544       CLOSE csr_element_entry_details;
2545       --
2546       --
2547       -- Query the entry IDs required for creation of the element.
2548       get_element_entry_ids(l_element_type_id
2549                            ,l_effective_date
2550                            ,6
2551                            ,l_input_values);
2552       --
2553       pay_in_utils.set_location(g_debug, l_procedure, 70);
2554       --
2555       -- An element entry for this element already exists we have to
2556       -- update the element entry with the newly submitted date.
2557       --
2558         pay_element_entry_api.update_element_entry
2559          (p_datetrack_update_mode    => get_update_mode(p_element_entry_id
2560                                                        ,l_effective_date)
2561          ,p_effective_date           => l_effective_date
2562          ,p_business_group_id        => l_business_group_id
2563          ,p_element_entry_id         => p_element_entry_id
2564          ,p_object_version_number    => l_object_version_number
2565            -- Disability Type
2566          ,p_input_value_id1          => l_input_values(0).input_value_id
2567            -- Disability Percentage
2568          ,p_input_value_id2          => l_input_values(1).input_value_id
2569            -- Treatment Amount
2570          ,p_input_value_id3          => l_input_values(2).input_value_id
2571          ,p_entry_value1             => p_disability_type
2572          ,p_entry_value2             => p_disability_percentage
2573          ,p_entry_value3             => p_treatment_amount
2574          ,p_effective_start_date     => l_effective_start_date
2575          ,p_effective_end_date       => l_effective_end_date
2576          ,p_update_warning           => l_warnings
2577          );
2578       --
2579       IF g_debug THEN
2580          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
2581          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
2582       END IF;
2583       --
2584       pay_in_utils.set_location(g_debug, l_procedure, 80);
2585       --
2586       IF l_effective_end_date <> (pay_in_utils.next_tax_year(l_effective_date)-1)
2587       THEN
2588         --
2589         -- End date the entry as of the financial year end date
2590         --
2591         delete_declaration
2592            (p_element_entry_id =>l_element_entry_id
2593            ,p_effective_date   =>pay_in_utils.next_tax_year(l_effective_date)-1
2594            ,p_warnings         =>p_warnings);
2595         --
2596       END IF;
2597       --
2598    END IF;
2599    --
2600    IF l_warnings = TRUE THEN
2601       --
2602       p_warnings := 'TRUE';
2603       --
2604    END IF;
2605 
2606 
2607    pay_in_utils.set_location(g_debug, 'Leaving: ' || l_procedure, 90);
2608    --
2609 EXCEPTION
2610    WHEN OTHERS THEN
2611       fnd_msg_pub.add_exc_msg
2612          (p_pkg_name => g_package
2613          ,p_procedure_name => 'declare_section80dd'
2614          ,p_error_text => substr(sqlerrm, 1, 240)
2615          );
2616    --
2617 END declare_section80dd;
2618 
2619 --------------------------------------------------------------------------
2620 --                                                                      --
2621 -- Name           : DECLARE_SECTION80G                                  --
2622 -- Type           : PROCEDURE                                           --
2623 -- Access         : Public                                              --
2624 -- Description    : The procedure is responsible for storing the        --
2625 --                  detials in 'Deduction under Section 80G' element.   --
2626 --                                                                      --
2627 -- Parameters     :                                                     --
2628 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
2629 --                  p_donation_type      VARCHAR2                       --
2630 --                  p_donation_amount    NUMBER                         --
2631 --                  p_effective_date     DATE                           --
2632 --                  p_element_entry_id   element_entry_id%TYPE          --
2633 --            OUT : p_warnings           BOOLEAN                        --
2634 --                                                                      --
2635 -- Change History :                                                     --
2636 --------------------------------------------------------------------------
2637 -- Rev#  Date        Userid      Description                            --
2638 --------------------------------------------------------------------------
2639 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
2640 --------------------------------------------------------------------------
2641 PROCEDURE declare_section80g
2642    (p_assignment_id         IN per_assignments_f.assignment_id%TYPE
2643    ,p_donation_type         IN VARCHAR2
2644    ,p_donation_amount       IN NUMBER
2645    ,p_effective_date        IN DATE default null
2646    ,p_element_entry_id      IN pay_element_entries_f.element_entry_id%TYPE default null
2647    ,p_warnings              OUT NOCOPY VARCHAR2)
2648 IS
2649    --
2650    l_procedure   VARCHAR(100);
2651    l_message     VARCHAR2(250);
2652    l_warnings BOOLEAN;
2653    l_input_values t_input_values_tab;
2654    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
2655    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
2656    l_element_entry_id pay_element_entries.element_entry_id%TYPE;
2657    l_business_group_id per_business_groups.business_group_id%TYPE;
2658    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
2659    l_effective_date DATE;
2660    l_effective_start_date DATE;
2661    l_effective_end_date DATE;
2662    --
2663    -- Added as a part of bug fix 4774108
2664    CURSOR csr_element_type_id(p_element_name VARCHAR2
2665                              ,p_effective_date DATE -- Added as a part of bug 4938573
2666                              )
2667    IS
2668    SELECT element_type_id
2669    FROM   pay_element_types_f
2670    WHERE  legislation_code = 'IN'
2671    AND    element_name = p_element_name
2672    AND    p_effective_date BETWEEN effective_start_date AND effective_end_date;
2673 
2674    CURSOR csr_element_link_details
2675     (c_assignment_id IN per_assignments_f.assignment_id%TYPE
2676     ,c_effective_date IN DATE
2677     ,c_element_link_id IN NUMBER)
2678    IS
2679    SELECT types.element_type_id
2680         , link.element_link_id
2681         , assgn.business_group_id
2682      FROM per_assignments_f assgn
2683         , pay_element_links_f link
2684         , pay_element_types_f types
2685     WHERE assgn.assignment_id = c_assignment_id
2686       AND link.element_link_id = c_element_link_id
2687       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
2688       AND link.business_group_id = assgn.business_group_id
2689       AND link.element_type_id = types.element_type_id
2690       AND types.element_name = 'Deduction under Section 80G'
2691       AND c_effective_date BETWEEN assgn.effective_start_date
2692                                AND assgn.effective_end_date
2693       AND c_effective_date BETWEEN link.effective_start_date
2694                                AND link.effective_end_date
2695       AND c_effective_date BETWEEN types.effective_start_date
2696                                AND types.effective_end_date;
2697    --
2698    CURSOR csr_element_entry_details
2699     (c_element_entry_id IN pay_element_entries_f.element_entry_id%TYPE
2700     ,c_effective_date IN DATE)
2701    IS
2702    SELECT entries.element_type_id
2703         , entries.object_version_number
2704         , assgn.business_group_id
2705      FROM pay_element_entries_f entries
2706         , per_assignments_f assgn
2707     WHERE entries.element_entry_id = c_element_entry_id
2708     AND   entries.assignment_id = assgn.assignment_id
2709     AND   c_effective_date BETWEEN entries.effective_start_date
2710                                AND entries.effective_end_date
2711     AND   c_effective_date BETWEEN assgn.effective_start_date
2712                                AND assgn.effective_end_date;
2713 BEGIN
2714    --
2715     l_procedure := g_package || 'declare_section80g';
2716     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
2717 
2718     IF g_debug THEN
2719       pay_in_utils.trace('**************************************************','********************');
2720       pay_in_utils.trace('p_assignment_id',p_assignment_id);
2721       pay_in_utils.trace('p_donation_type  ',p_donation_type );
2722       pay_in_utils.trace('p_donation_amount',p_donation_amount);
2723       pay_in_utils.trace('p_effective_date     ',p_effective_date );
2724       pay_in_utils.trace('p_element_entry_id',p_element_entry_id);
2725       pay_in_utils.trace('**************************************************','********************');
2726     END IF;
2727 
2728    p_warnings := 'FALSE';
2729 
2730    --
2731    IF g_debug THEN
2732       --
2733       pay_in_utils.trace('Donation Type: ', p_donation_type);
2734       pay_in_utils.trace('Donation Amount: ', p_donation_amount);
2735       --
2736    END IF;
2737    --
2738    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
2739    -- Added for bug 3990922
2740    hr_session_utilities.insert_session_row(l_effective_date);
2741    --
2742    IF (NVL(p_element_entry_id, 0) = 0) THEN
2743       --
2744       pay_in_utils.set_location(g_debug, l_procedure, 20);
2745       --
2746     -- Added as a part of bug fix 4774108
2747       OPEN  csr_element_type_id('Deduction under Section 80G',l_effective_date); -- Added as a part of bug 4938573
2748       FETCH csr_element_type_id INTO l_element_type_id;
2749       CLOSE csr_element_type_id;
2750 
2751       l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
2752                                                            ,l_effective_date -- Modified as a part of bug 4938573
2753                                                            ,l_element_type_id
2754                                                             );
2755       OPEN  csr_element_link_details(p_assignment_id
2756                                     ,l_effective_date
2757                                     ,l_element_link_id
2758                                     );
2759       FETCH csr_element_link_details INTO l_element_type_id
2760                                         , l_element_link_id
2761                                         , l_business_group_id;
2762       CLOSE csr_element_link_details;
2763       --
2764       pay_in_utils.set_location(g_debug, l_procedure, 30);
2765       --
2766       IF l_element_link_id IS NULL THEN
2767          --
2768          hr_utility.set_message(800, 'PER_IN_MISSING_LINK');
2769          hr_utility.set_message_token('ELEMENT_NAME', 'Deduction under Section 80G');
2770          hr_utility.raise_error;
2771          --
2772       END IF;
2773       --
2774       IF g_debug THEN
2775         pay_in_utils.trace('Element Type ID: ', l_element_type_id);
2776         pay_in_utils.trace('Element Link ID: ', l_element_link_id);
2777         pay_in_utils.trace('Business Group ID: ', l_business_group_id);
2778       END IF;
2779       --
2780       -- Query the entry IDs required for creation of the element.
2781       get_element_entry_ids(l_element_type_id
2782                            ,l_effective_date
2783                            ,5
2784                            ,l_input_values);
2785       --
2786       pay_in_utils.set_location(g_debug, l_procedure, 40);
2787       --
2788       -- In this case, we would have to create an element entry to the
2789       -- assignment and return the entry id, the rest would be handled
2790       -- by the update command in the calling procedure.
2791       pay_element_entry_api.create_element_entry
2792          (p_effective_date        => l_effective_date
2793          ,p_business_group_id     => l_business_group_id
2794          ,p_assignment_id         => p_assignment_id
2795          ,p_element_link_id       => l_element_link_id
2796          ,p_entry_type            => 'E'
2797            -- Donation Type
2798          ,p_input_value_id1       => l_input_values(0).input_value_id
2799            -- Donation Amount
2800          ,p_input_value_id2       => l_input_values(1).input_value_id
2801          ,p_entry_value1          => p_donation_type
2802          ,p_entry_value2          => p_donation_amount
2803          ,p_effective_start_date  => l_effective_start_date
2804          ,p_effective_end_date    => l_effective_end_date
2805          ,p_element_entry_id      => l_element_entry_id
2806          ,p_object_version_number => l_object_version_number
2807          ,p_create_warning        => l_warnings
2808          );
2809       --
2810       pay_in_utils.set_location(g_debug, l_procedure, 50);
2811       --
2812       -- End date the entry as of the financial year end date
2813       --
2814       delete_declaration
2815          (p_element_entry_id => l_element_entry_id
2816          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
2817          ,p_warnings         => p_warnings);
2818       --
2819    ELSE
2820       --
2821       pay_in_utils.set_location(g_debug, l_procedure, 60);
2822       --
2823       OPEN csr_element_entry_details(p_element_entry_id
2824                                     ,l_effective_date);
2825       FETCH csr_element_entry_details INTO l_element_type_id
2826                                          , l_object_version_number
2827                                          , l_business_group_id;
2828       CLOSE csr_element_entry_details;
2829       --
2830       --
2831       -- Query the entry IDs required for creation of the element.
2832       get_element_entry_ids(l_element_type_id
2833                            ,l_effective_date
2834                            ,5
2835                            ,l_input_values);
2836       --
2837       pay_in_utils.set_location(g_debug, l_procedure, 70);
2838       --
2839       -- An element entry for this element already exists we have to
2840       -- update the element entry with the newly submitted date.
2841       --
2842         pay_element_entry_api.update_element_entry
2843          (p_datetrack_update_mode    => get_update_mode(p_element_entry_id
2844                                                        ,l_effective_date)
2845          ,p_effective_date           => l_effective_date
2846          ,p_business_group_id        => l_business_group_id
2847          ,p_element_entry_id         => p_element_entry_id
2848          ,p_object_version_number    => l_object_version_number
2849            -- Donation Type
2850          ,p_input_value_id1          => l_input_values(0).input_value_id
2851            -- Donation Amount
2852          ,p_input_value_id2          => l_input_values(1).input_value_id
2853          ,p_entry_value1             => p_donation_type
2854          ,p_entry_value2             => p_donation_amount
2855          ,p_effective_start_date     => l_effective_start_date
2856          ,p_effective_end_date       => l_effective_end_date
2857          ,p_update_warning           => l_warnings
2858          );
2859       --
2860       IF g_debug THEN
2861          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
2862          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
2863       END IF;
2864       --
2865       pay_in_utils.set_location(g_debug, l_procedure, 80);
2866       --
2867       IF l_effective_end_date <> (pay_in_utils.next_tax_year(l_effective_date)-1)
2868       THEN
2869         --
2870         -- End date the entry as of the financial year end date
2871         --
2872         delete_declaration
2873            (p_element_entry_id =>l_element_entry_id
2874            ,p_effective_date   =>pay_in_utils.next_tax_year(l_effective_date)-1
2875            ,p_warnings         =>p_warnings);
2876         --
2877       END IF;
2878       --
2879    END IF;
2880    --
2881    IF l_warnings = TRUE THEN
2882       --
2883       p_warnings := 'TRUE';
2884       --
2885    END IF;
2886 
2887    pay_in_utils.set_location(g_debug, 'Leaving: ' || l_procedure, 90);
2888    --
2889 EXCEPTION
2890    WHEN OTHERS THEN
2891       fnd_msg_pub.add_exc_msg
2892          (p_pkg_name => g_package
2893          ,p_procedure_name => 'declare_section80g'
2894          ,p_error_text => substr(sqlerrm, 1, 240)
2895          );
2896    --
2897 END declare_section80g;
2898 
2899 --------------------------------------------------------------------------
2900 --                                                                      --
2901 -- Name           : DECLARE_LIFE_INSURANCE_PREMIUM                      --
2902 -- Type           : PROCEDURE                                           --
2903 -- Access         : Public                                              --
2904 -- Description    : The procedure is responsible for storing the        --
2905 --                  detials in 'Life Insurance Premium' element.        --
2906 --                                                                      --
2907 -- Parameters     :                                                     --
2908 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
2909 --                  p_premium_paid       VARCHAR2                       --
2910 --                  p_sum_assured        NUMBER                         --
2911 --                  p_effective_date     DATE                           --
2912 --                  p_element_entry_id   element_entry_id%TYPE          --
2913 --            OUT : p_warnings           BOOLEAN                        --
2914 --                                                                      --
2915 -- Change History :                                                     --
2916 --------------------------------------------------------------------------
2917 -- Rev#  Date        Userid      Description                            --
2918 --------------------------------------------------------------------------
2919 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
2920 --------------------------------------------------------------------------
2921 PROCEDURE declare_life_insurance_premium
2922    (p_assignment_id         IN per_assignments_f.assignment_id%TYPE
2923    ,p_premium_paid          IN VARCHAR2
2924    ,p_sum_assured           IN NUMBER
2925    ,p_effective_date        IN DATE default null
2926    ,p_element_entry_id      IN pay_element_entries_f.element_entry_id%TYPE default null
2927    ,p_warnings              OUT NOCOPY VARCHAR2)
2928 IS
2929    --
2930    l_procedure   VARCHAR(100);
2931    l_message     VARCHAR2(250);
2932    l_warnings BOOLEAN;
2933    l_input_values t_input_values_tab;
2934    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
2935    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
2936    l_element_entry_id pay_element_entries.element_entry_id%TYPE;
2937    l_business_group_id per_business_groups.business_group_id%TYPE;
2938    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
2939    l_effective_date DATE;
2940    l_effective_start_date DATE;
2941    l_effective_end_date DATE;
2942    --
2943    CURSOR csr_element_link_details
2944     (c_assignment_id IN per_assignments_f.assignment_id%TYPE
2945     ,c_effective_date IN DATE
2946     ,c_element_link_id IN NUMBER)
2947    IS
2948    SELECT types.element_type_id
2949         , link.element_link_id
2950         , assgn.business_group_id
2951      FROM per_assignments_f assgn
2952         , pay_element_links_f link
2953         , pay_element_types_f types
2954     WHERE assgn.assignment_id = c_assignment_id
2955       AND link.element_link_id = c_element_link_id
2956       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
2957       AND link.business_group_id = assgn.business_group_id
2958       AND link.element_type_id = types.element_type_id
2959       AND types.element_name = 'Life Insurance Premium'
2960       AND c_effective_date BETWEEN assgn.effective_start_date
2961                                AND assgn.effective_end_date
2962       AND c_effective_date BETWEEN link.effective_start_date
2963                                AND link.effective_end_date
2964       AND c_effective_date BETWEEN types.effective_start_date
2965                                AND types.effective_end_date;
2966    --
2967    CURSOR csr_element_entry_details
2968     (c_element_entry_id IN pay_element_entries_f.element_entry_id%TYPE
2969     ,c_effective_date IN DATE)
2970    IS
2971    SELECT entries.element_type_id
2972         , entries.object_version_number
2973         , assgn.business_group_id
2974      FROM pay_element_entries_f entries
2975         , per_assignments_f assgn
2976     WHERE entries.element_entry_id = c_element_entry_id
2977     AND   entries.assignment_id = assgn.assignment_id
2978     AND   c_effective_date BETWEEN entries.effective_start_date
2979                                AND entries.effective_end_date
2980     AND   c_effective_date BETWEEN assgn.effective_start_date
2981                                AND assgn.effective_end_date;
2982   -- Added as a part of bug fix 4774108
2983    CURSOR csr_element_type_id(p_element_name   VARCHAR2
2984                              ,p_effective_date DATE
2985                              )
2986    IS
2987    SELECT element_type_id
2988    FROM   pay_element_types_f
2989    WHERE  legislation_code = 'IN'
2990    AND    element_name = p_element_name
2991    AND    p_effective_date BETWEEN effective_start_date AND effective_end_date;
2992 BEGIN
2993    --
2994     l_procedure := g_package || 'declare_life_insurance_premium';
2995     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
2996 
2997     IF g_debug THEN
2998       pay_in_utils.trace('**************************************************','********************');
2999       pay_in_utils.trace('p_assignment_id',p_assignment_id);
3000       pay_in_utils.trace('p_premium_paid  ',p_premium_paid );
3001       pay_in_utils.trace('p_sum_assured',p_sum_assured);
3002       pay_in_utils.trace('p_effective_date     ',p_effective_date );
3003       pay_in_utils.trace('p_element_entry_id',p_element_entry_id);
3004       pay_in_utils.trace('**************************************************','********************');
3005     END IF;
3006 
3007    p_warnings := 'FALSE';
3008 
3009    --
3010    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
3011    --
3012    IF (NVL(p_element_entry_id, 0) = 0) THEN
3013       --
3014       pay_in_utils.set_location(g_debug, l_procedure, 20);
3015       --
3016       -- Added as a part of bug fix 4774108
3017       OPEN  csr_element_type_id('Life Insurance Premium',l_effective_date);
3018       FETCH csr_element_type_id INTO l_element_type_id;
3019       CLOSE csr_element_type_id;
3020 
3021       l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
3022                                                            ,l_effective_date
3023                                                            ,l_element_type_id
3024                                                            );
3025       OPEN  csr_element_link_details(p_assignment_id
3026                                     ,l_effective_date
3027                                     ,l_element_link_id);
3028       FETCH csr_element_link_details INTO l_element_type_id
3029                                         , l_element_link_id
3030                                         , l_business_group_id;
3031       CLOSE csr_element_link_details;
3032       --
3033       IF l_element_link_id IS NULL THEN
3034          --
3035          hr_utility.set_message(800, 'PER_IN_MISSING_LINK');
3036          hr_utility.set_message_token('ELEMENT_NAME', 'Life Insurance Premium');
3037          hr_utility.raise_error;
3038          --
3039       END IF;
3040       --
3041       pay_in_utils.set_location(g_debug, l_procedure, 30);
3042       --
3043       IF g_debug THEN
3044         pay_in_utils.trace('Element Type ID: ' , l_element_type_id);
3045         pay_in_utils.trace('Element Link ID: ' , l_element_link_id);
3046         pay_in_utils.trace('Business Group ID: ' , l_business_group_id);
3047       END IF;
3048       --
3049       -- Query the entry IDs required for creation of the element.
3050       get_element_entry_ids(l_element_type_id
3051                            ,l_effective_date
3052                            ,2
3053                            ,l_input_values);
3054       --
3055       pay_in_utils.set_location(g_debug, l_procedure, 40);
3056       --
3057       -- In this case, we would have to create an element entry to the
3058       -- assignment and return the entry id, the rest would be handled
3059       -- by the update command in the calling procedure.
3060       pay_element_entry_api.create_element_entry
3061          (p_effective_date        => l_effective_date
3062          ,p_business_group_id     => l_business_group_id
3063          ,p_assignment_id         => p_assignment_id
3064          ,p_element_link_id       => l_element_link_id
3065          ,p_entry_type            => 'E'
3066            -- Premium Paid
3067          ,p_input_value_id1       => l_input_values(0).input_value_id
3068            -- Sum Assured
3069          ,p_input_value_id2       => l_input_values(1).input_value_id
3070          ,p_entry_value1          => p_premium_paid
3071          ,p_entry_value2          => p_sum_assured
3072          ,p_effective_start_date  => l_effective_start_date
3073          ,p_effective_end_date    => l_effective_end_date
3074          ,p_element_entry_id      => l_element_entry_id
3075          ,p_object_version_number => l_object_version_number
3076          ,p_create_warning        => l_warnings
3077          );
3078       --
3079       pay_in_utils.set_location(g_debug, l_procedure, 50);
3080       --
3081       -- End date the entry as of the financial year end date
3082       --
3083       delete_declaration
3084          (p_element_entry_id => l_element_entry_id
3085          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
3086          ,p_warnings         => p_warnings);
3087       --
3088    ELSE
3089       --
3090       pay_in_utils.set_location(g_debug, l_procedure, 60);
3091       --
3092       OPEN csr_element_entry_details(p_element_entry_id
3093                                     ,l_effective_date);
3094       FETCH csr_element_entry_details INTO l_element_type_id
3095                                          , l_object_version_number
3096                                          , l_business_group_id;
3097 
3098       CLOSE csr_element_entry_details;
3099       --
3100       --
3101       -- Query the entry IDs required for creation of the element.
3102       get_element_entry_ids(l_element_type_id
3103                            ,l_effective_date
3104                            ,2
3105                            ,l_input_values);
3106       --
3107       pay_in_utils.set_location(g_debug, l_procedure, 70);
3108       --
3109       -- An element entry for this element already exists we have to
3110       -- update the element entry with the newly submitted date.
3111       --
3112         pay_element_entry_api.update_element_entry
3113          (p_datetrack_update_mode    => get_update_mode(p_element_entry_id
3114                                                        ,l_effective_date)
3115          ,p_effective_date           => l_effective_date
3116          ,p_business_group_id        => l_business_group_id
3117          ,p_element_entry_id         => p_element_entry_id
3118          ,p_object_version_number    => l_object_version_number
3119            -- Premium Paid
3120          ,p_input_value_id1          => l_input_values(0).input_value_id
3121            -- Sum Assured
3122          ,p_input_value_id2          => l_input_values(1).input_value_id
3123          ,p_entry_value1             => p_premium_paid
3124          ,p_entry_value2             => p_sum_assured
3125          ,p_effective_start_date     => l_effective_start_date
3126          ,p_effective_end_date       => l_effective_end_date
3127          ,p_update_warning           => l_warnings
3128          );
3129       --
3130       IF g_debug THEN
3131          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
3132          pay_in_utils.trace('Effective End Date: ' , l_effective_end_date);
3133       END IF;
3134       --
3135       pay_in_utils.set_location(g_debug, l_procedure, 80);
3136       --
3137       IF l_effective_end_date <> (pay_in_utils.next_tax_year(l_effective_date)-1)
3138       THEN
3139         --
3140         -- End date the entry as of the financial year end date
3141         --
3142         delete_declaration
3143            (p_element_entry_id =>l_element_entry_id
3144            ,p_effective_date   =>pay_in_utils.next_tax_year(l_effective_date)-1
3145            ,p_warnings         =>p_warnings);
3146         --
3147       END IF;
3148       --
3149    END IF;
3150    --
3151 
3152    --
3153    IF l_warnings = TRUE THEN
3154      --
3155      p_warnings := 'TRUE';
3156      --
3157    END IF;
3158 
3159 
3160 
3161    pay_in_utils.set_location(g_debug, 'Leaving: ' || l_procedure, 90);
3162 
3163 EXCEPTION
3164    WHEN OTHERS THEN
3165       fnd_msg_pub.add_exc_msg
3166          (p_pkg_name => g_package
3167          ,p_procedure_name => 'declare_life_insurance_premium'
3168          ,p_error_text => substr(sqlerrm, 1, 240)
3169          );
3170    --
3171 END declare_life_insurance_premium;
3172 
3173 --------------------------------------------------------------------------
3174 --                                                                      --
3175 -- Name           : DECLARE_TUITION_FEE                                 --
3176 -- Type           : PROCEDURE                                           --
3177 -- Access         : Public                                              --
3178 -- Description    : The procedure is responsible for storing the        --
3179 --                  detials in 'Tuition Fee' element.                   --
3180 --                                                                      --
3181 -- Parameters     :                                                     --
3182 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
3183 --                  p_tuition_fee_for_child_1 NUMBER                    --
3184 --                  p_tuition_fee_for_child_2 NUMBER                    --
3185 --                  p_effective_date          DATE                      --
3186 --                  p_element_entry_id        element_entry_id%TYPE     --
3187 --            OUT : p_warnings                BOOLEAN                   --
3188 --                                                                      --
3189 -- Change History :                                                     --
3190 --------------------------------------------------------------------------
3191 -- Rev#  Date        Userid      Description                            --
3192 --------------------------------------------------------------------------
3193 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
3194 -- 1.1  25-Apr-2005  VGSRINIV    Nulled out for Stat Update(Bug 4251141)--
3195 --------------------------------------------------------------------------
3196 PROCEDURE declare_tuition_fee
3197    (p_assignment_id           IN per_assignments_f.assignment_id%TYPE
3198    ,p_tuition_fee_for_child_1 IN NUMBER
3199    ,p_tuition_fee_for_child_2 IN NUMBER
3200    ,p_effective_date          IN DATE DEFAULT NULL
3201    ,p_warnings                OUT NOCOPY BOOLEAN)
3202 IS
3203    --
3204    l_procedure   VARCHAR(100);
3205    l_message     VARCHAR2(250);
3206    l_input_values t_input_values_tab;
3207    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
3208    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
3209    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
3210    l_business_group_id per_business_groups.business_group_id%TYPE;
3211    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
3212    l_effective_start_date DATE;
3213    l_effective_end_date DATE;
3214    l_effective_date DATE;
3215    l_warnings VARCHAR2(6);
3216    --
3217 BEGIN
3218    --
3219     l_procedure := g_package || 'declare_tuition_fee';
3220     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
3221 
3222     IF g_debug THEN
3223       pay_in_utils.trace('**************************************************','********************');
3224       pay_in_utils.trace('p_assignment_id',p_assignment_id);
3225       pay_in_utils.trace('p_tuition_fee_for_child_1 ',p_tuition_fee_for_child_1 );
3226       pay_in_utils.trace('p_tuition_fee_for_child_2 ',p_tuition_fee_for_child_2 );
3227       pay_in_utils.trace('p_effective_date     ',p_effective_date );
3228       pay_in_utils.trace('**************************************************','********************');
3229     END IF;
3230 
3231    --
3232    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,20);
3233    --
3234 EXCEPTION
3235    WHEN OTHERS THEN
3236       fnd_msg_pub.add_exc_msg
3237          (p_pkg_name => g_package
3238          ,p_procedure_name => 'declare_tuition_fee'
3239          ,p_error_text => substr(sqlerrm, 1, 240)
3240          );
3241     --
3242 END declare_tuition_fee;
3243 
3244 /* BUG 4251141: STAT UPDATE 2005 CHANGES START HERE */
3245 
3246 --------------------------------------------------------------------------
3247 --                                                                      --
3248 -- Name           : DECLARE_SECTION80CCE                                --
3249 -- Type           : PROCEDURE                                           --
3250 -- Access         : Public                                              --
3251 -- Description    : The procedure is responsible for storing the        --
3252 --                  detials in 'Deduction under Section 80CCE' element. --
3253 --                                                                      --
3254 -- Parameters     :                                                     --
3255 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
3256 --                  p_investment_type    VARCHAR2                       --
3257 --                  p_investment_amount  NUMBER                         --
3258 --                  p_effective_date     DATE                           --
3259 --                  p_element_entry_id   element_entry_id%TYPE          --
3260 --            OUT : p_warnings           BOOLEAN                        --
3261 --                                                                      --
3262 -- Change History :                                                     --
3263 --------------------------------------------------------------------------
3264 -- Rev#  Date        Userid      Description                            --
3265 --------------------------------------------------------------------------
3266 -- 1.0  14-Apr-2005  VGSRINIV    Initial Version                        --
3267 --------------------------------------------------------------------------
3268 
3269 PROCEDURE declare_section80cce
3270    (p_assignment_id         IN per_assignments_f.assignment_id%TYPE
3271    ,p_investment_type       IN VARCHAR2
3272    ,p_investment_amount     IN NUMBER
3273    ,p_effective_date        IN DATE default null
3274    ,p_element_entry_id      IN pay_element_entries_f.element_entry_id%TYPE DEFAULT NULL
3275    ,p_warnings              OUT NOCOPY VARCHAR2)
3276 IS
3277    --
3278    l_procedure   VARCHAR(100);
3279    l_message     VARCHAR2(250);
3280    l_warnings BOOLEAN;
3281    l_input_values t_input_values_tab;
3282    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
3283    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
3284    l_element_entry_id pay_element_entries.element_entry_id%TYPE;
3285    l_business_group_id per_business_groups.business_group_id%TYPE;
3286    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
3287    l_effective_date DATE;
3288    l_effective_start_date DATE;
3289    l_effective_end_date DATE;
3290    l_ele_entry_id pay_element_entries.element_entry_id%TYPE;
3291    l_ovn pay_element_entries_f.object_version_number%TYPE;
3292    l_entry_value pay_element_entry_values_f.screen_entry_value%TYPE;
3293    l_element_name     pay_element_types_f.element_name%TYPE;
3294    l_token1              VARCHAR2(240);
3295    --
3296    CURSOR csr_element_link_details
3297     (c_assignment_id IN per_assignments_f.assignment_id%TYPE
3298     ,c_effective_date IN DATE
3299     ,c_element_name   IN pay_element_types_f.element_name%TYPE)
3300    IS
3301    SELECT types.element_type_id
3302         , link.element_link_id
3303         , assgn.business_group_id
3304      FROM per_assignments_f assgn
3305         , pay_element_links_f link
3306         , pay_element_types_f types
3307     WHERE assgn.assignment_id = c_assignment_id
3308       AND link.element_link_id = pay_in_utils.get_element_link_id(c_assignment_id
3309                                                                  ,c_effective_date
3310                                                                  ,types.element_type_id
3311                                                                 )
3312       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
3313       AND link.business_group_id = assgn.business_group_id
3314       AND link.element_type_id = types.element_type_id
3315       AND types.element_name = c_element_name--'Deduction under Section 80CCE'
3316       AND c_effective_date BETWEEN assgn.effective_start_date
3317                                AND assgn.effective_end_date
3318       AND c_effective_date BETWEEN link.effective_start_date
3319                                AND link.effective_end_date
3320       AND c_effective_date BETWEEN types.effective_start_date
3321                                AND types.effective_end_date;
3322    --
3323    CURSOR csr_element_entry_details
3324     (c_element_entry_id IN pay_element_entries_f.element_entry_id%TYPE
3325     ,c_effective_date IN DATE)
3326    IS
3327    SELECT entries.element_type_id
3328         , entries.object_version_number
3329         , assgn.business_group_id
3330      FROM pay_element_entries_f entries
3331         , per_assignments_f assgn
3332     WHERE entries.element_entry_id = c_element_entry_id
3333     AND   entries.assignment_id = assgn.assignment_id
3334     AND   c_effective_date BETWEEN entries.effective_start_date
3335                                AND entries.effective_end_date
3336     AND   c_effective_date BETWEEN assgn.effective_start_date
3337                                AND assgn.effective_end_date;
3338 
3339    CURSOR c_check_entry(c_element_name   IN pay_element_types_f.element_name%TYPE
3340                        ,c_effective_date IN DATE)
3341    IS
3342    SELECT entries.element_entry_id entry_id
3343          ,entries.object_version_number
3344 	 ,value2.screen_entry_value
3345   FROM per_assignments_f assgn
3346      , pay_element_links_f link
3347      , pay_element_types_f types
3348      , pay_element_entries_f entries
3349      , pay_element_entry_values_f value1
3350      , pay_input_values_f inputs1
3351      , pay_element_entry_values_f value2
3352      , pay_input_values_f inputs2
3353  WHERE assgn.assignment_id = p_assignment_id
3354    AND link.element_link_id = pay_in_utils.get_element_link_id(p_assignment_id
3355                                                               ,c_effective_date
3356                                                               ,types.element_type_id
3357                                                                 )
3358    AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
3359    AND link.business_group_id = assgn.business_group_id
3360    AND link.element_type_id = types.element_type_id
3361    AND types.element_name = c_element_name--'Deduction under Section 80CCE'
3362    AND entries.element_type_id = types.element_type_id
3363    AND entries.element_link_id = link.element_link_id
3364    AND entries.assignment_id = assgn.assignment_id
3365    AND value1.element_entry_id =  entries.element_entry_id
3366    AND inputs1.input_value_id = value1.input_value_id
3367    AND inputs1.element_type_id = types.element_type_id
3368    AND inputs1.name = 'Component Name'
3369    AND value2.element_entry_id =  entries.element_entry_id
3370    AND inputs2.input_value_id = value2.input_value_id
3371    AND inputs2.element_type_id = types.element_type_id
3372    AND inputs2.name = 'Investment Amount'
3373    AND c_effective_date BETWEEN assgn.effective_start_date AND assgn.effective_end_date
3374    AND c_effective_date BETWEEN link.effective_start_date AND link.effective_end_date
3375    AND c_effective_date BETWEEN types.effective_start_date AND types.effective_end_date
3376    AND c_effective_date BETWEEN entries.effective_start_date AND entries.effective_end_date
3377    AND c_effective_date BETWEEN inputs1.effective_start_date AND inputs1.effective_end_date
3378    AND c_effective_date BETWEEN value1.effective_start_date AND value1.effective_end_date
3379    AND c_effective_date BETWEEN inputs2.effective_start_date AND inputs2.effective_end_date
3380    AND c_effective_date BETWEEN value2.effective_start_date AND value2.effective_end_date
3381    AND value1.screen_entry_value = p_investment_type;
3382 
3383    CURSOR c_screen_entry_value(p_effective_date DATE)
3384    IS
3385    SELECT peev.screen_entry_value
3386    FROM pay_element_entries_f  peef,
3387         pay_input_values_f piv,
3388         pay_element_entry_values_f peev
3389    WHERE peef.element_entry_id = p_element_entry_id
3390    AND  piv.element_type_id  = peef.element_type_id
3391    AND  piv.name = 'Component Name'
3392    AND  peev.input_value_id = piv.input_value_id
3393    AND  peev.element_entry_id = peef.element_entry_id
3394    AND  piv.legislation_code = 'IN'
3395    AND  p_effective_date BETWEEN peev.effective_start_date AND peev.effective_end_date
3396    AND  p_effective_date BETWEEN piv.effective_start_date  AND piv.effective_end_date
3397    AND  p_effective_date BETWEEN peef.effective_start_date AND peef.effective_end_date;
3398 
3399 BEGIN
3400    --
3401     l_procedure := g_package || 'declare_section80cce';
3402     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
3403 
3404     IF g_debug THEN
3405       pay_in_utils.trace('**************************************************','********************');
3406       pay_in_utils.trace('p_assignment_id',p_assignment_id);
3407       pay_in_utils.trace('p_investment_type  ',p_investment_type );
3408       pay_in_utils.trace('p_investment_amount',p_investment_amount);
3409       pay_in_utils.trace('p_effective_date     ',p_effective_date );
3410       pay_in_utils.trace('p_element_entry_id',p_element_entry_id);
3411       pay_in_utils.trace('**************************************************','********************');
3412     END IF;
3413 
3414    p_warnings := 'FALSE';
3415 
3416 
3417    --
3418    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
3419 
3420    hr_session_utilities.insert_session_row(l_effective_date);
3421    --
3422    SELECT DECODE(p_investment_type
3423                 ,'Pension Fund 80CCC','Pension Fund 80CCC'
3424                 ,'Deferred Annuity','Deferred Annuity'
3425                 ,'Senior Citizens Savings Scheme','Senior Citizens Savings Scheme'
3426                 ,'Deduction under Section 80CCE'
3427                 )
3428    INTO l_element_name
3429    FROM dual;
3430 
3431    IF (p_element_entry_id IS NOT NULL)
3432    THEN
3433        OPEN  c_screen_entry_value(l_effective_date);
3434        FETCH c_screen_entry_value INTO l_token1;
3435        CLOSE c_screen_entry_value;
3436 
3437        IF (l_token1 <> p_investment_type)
3438        THEN
3439          --
3440          p_warnings := 'PER_IN_INVESTMENT_80CCE'||l_token1;
3441          RETURN;
3442          --
3443        END IF;
3444    END IF;
3445 
3446    IF (NVL(p_element_entry_id, 0) = 0) THEN
3447       --
3448       pay_in_utils.set_location(g_debug, l_procedure, 20);
3449       --
3450       OPEN  csr_element_link_details(p_assignment_id
3451                                     ,l_effective_date
3452                                     ,l_element_name);
3453       FETCH csr_element_link_details INTO l_element_type_id
3454                                         , l_element_link_id
3455                                         , l_business_group_id;
3456       CLOSE csr_element_link_details;
3457       --
3458       pay_in_utils.set_location(g_debug, l_procedure, 30);
3459       --
3460       IF l_element_link_id IS NULL THEN
3461          --
3462          hr_utility.set_message(800, 'PER_IN_MISSING_LINK');
3463          hr_utility.set_message_token('ELEMENT_NAME', l_element_name);--'Deduction under Section 80CCE');
3464          hr_utility.raise_error;
3465          --
3466       END IF;
3467       --
3468       IF g_debug THEN
3469         pay_in_utils.trace('Element Type ID: ', l_element_type_id);
3470         pay_in_utils.trace('Element Link ID: ', l_element_link_id);
3471         pay_in_utils.trace('Business Group ID: ', l_business_group_id);
3472       END IF;
3473       --
3474       -- Query the entry IDs required for creation of the element.
3475       get_element_entry_ids(l_element_type_id
3476                            ,l_effective_date
3477                            ,2
3478                            ,l_input_values);
3479       --
3480       pay_in_utils.set_location(g_debug, l_procedure, 40);
3481 
3482       --  Check if the element entry with same component is already present.
3483       --  If so then Update the same element by adding the investment amount
3484       --  to the existing one
3485       OPEN c_check_entry(l_element_name,l_effective_date);
3486       FETCH c_check_entry INTO l_ele_entry_id,l_ovn,l_entry_value;
3487       IF c_check_entry%FOUND THEN
3488 
3489         pay_element_entry_api.update_element_entry
3490          (p_datetrack_update_mode    => get_update_mode(l_ele_entry_id
3491                                                        ,l_effective_date)
3492          ,p_effective_date           => l_effective_date
3493          ,p_business_group_id        => l_business_group_id
3494          ,p_element_entry_id         => l_ele_entry_id
3495          ,p_object_version_number    => l_ovn
3496            -- Investment Amount
3497          ,p_input_value_id1          => l_input_values(0).input_value_id
3498            -- Investment Type
3499          ,p_input_value_id2          => l_input_values(1).input_value_id
3500          ,p_entry_value1             => p_investment_amount+l_entry_value
3501          ,p_entry_value2             => p_investment_type
3502          ,p_effective_start_date     => l_effective_start_date
3503          ,p_effective_end_date       => l_effective_end_date
3504          ,p_update_warning           => l_warnings
3505          );
3506 
3507         IF l_effective_end_date <> (pay_in_utils.next_tax_year(l_effective_date)-1)
3508         THEN
3509           --
3510           -- End date the entry as of the financial year end date
3511           --
3512            delete_declaration
3513              (p_element_entry_id =>l_element_entry_id
3514              ,p_effective_date   =>pay_in_utils.next_tax_year(l_effective_date)-1
3515              ,p_warnings         =>p_warnings);
3516         --
3517         END IF;
3518 
3519       ELSE /* If Element Entry does not exist */
3520       --
3521       -- In this case, we would have to create an element entry to the
3522       -- assignment and return the entry id, the rest would be handled
3523       -- by the update command in the calling procedure.
3524       pay_element_entry_api.create_element_entry
3525          (p_effective_date        => l_effective_date
3526          ,p_business_group_id     => l_business_group_id
3527          ,p_assignment_id         => p_assignment_id
3528          ,p_element_link_id       => l_element_link_id
3529          ,p_entry_type            => 'E'
3530            -- Investment Amount
3531          ,p_input_value_id1       => l_input_values(0).input_value_id
3532            -- Investment Type
3533          ,p_input_value_id2       => l_input_values(1).input_value_id
3534          ,p_entry_value1          => p_investment_amount
3535          ,p_entry_value2          => p_investment_type
3536          ,p_effective_start_date  => l_effective_start_date
3537          ,p_effective_end_date    => l_effective_end_date
3538          ,p_element_entry_id      => l_element_entry_id
3539          ,p_object_version_number => l_object_version_number
3540          ,p_create_warning        => l_warnings
3541          );
3542       --
3543       pay_in_utils.set_location(g_debug, l_procedure, 50);
3544       --
3545       -- End date the entry as of the financial year end date
3546       --
3547       delete_declaration
3548          (p_element_entry_id => l_element_entry_id
3549          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
3550          ,p_warnings         => p_warnings);
3551 
3552       END IF;
3553       CLOSE c_check_entry;
3554    --
3555    ELSE
3556       --
3557       pay_in_utils.set_location(g_debug, l_procedure, 60);
3558       --
3559       OPEN csr_element_entry_details(p_element_entry_id
3560                                     ,l_effective_date);
3561       FETCH csr_element_entry_details INTO l_element_type_id
3562                                          , l_object_version_number
3563                                          , l_business_group_id;
3564       CLOSE csr_element_entry_details;
3565       --
3566       --
3567       -- Query the entry IDs required for creation of the element.
3568       get_element_entry_ids(l_element_type_id
3569                            ,l_effective_date
3570                            ,2
3571                            ,l_input_values);
3572       --
3573       pay_in_utils.set_location(g_debug, l_procedure, 70);
3574       --
3575       -- An element entry for this element already exists we have to
3576       -- update the element entry with the newly submitted date.
3577       --
3578         pay_element_entry_api.update_element_entry
3579          (p_datetrack_update_mode    => get_update_mode(p_element_entry_id
3580                                                        ,l_effective_date)
3581          ,p_effective_date           => l_effective_date
3582          ,p_business_group_id        => l_business_group_id
3583          ,p_element_entry_id         => p_element_entry_id
3584          ,p_object_version_number    => l_object_version_number
3585            -- Investment Amount
3586          ,p_input_value_id1          => l_input_values(0).input_value_id
3587            -- Investment Type
3588          ,p_input_value_id2          => l_input_values(1).input_value_id
3589          ,p_entry_value1             => p_investment_amount
3590          ,p_entry_value2             => p_investment_type
3591          ,p_effective_start_date     => l_effective_start_date
3592          ,p_effective_end_date       => l_effective_end_date
3593          ,p_update_warning           => l_warnings
3594          );
3595       --
3596       IF g_debug THEN
3597          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
3598          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
3599       END IF;
3600       --
3601       pay_in_utils.set_location(g_debug, l_procedure, 80);
3602       --
3603       IF l_effective_end_date <> (pay_in_utils.next_tax_year(l_effective_date)-1)
3604       THEN
3605         --
3606         -- End date the entry as of the financial year end date
3607         --
3608         delete_declaration
3609            (p_element_entry_id =>l_element_entry_id
3610            ,p_effective_date   =>pay_in_utils.next_tax_year(l_effective_date)-1
3611            ,p_warnings         =>p_warnings);
3612         --
3613       END IF;
3614       --
3615    END IF;
3616    --
3617    IF l_warnings = TRUE THEN
3618       --
3619       p_warnings := 'TRUE';
3620       --
3621    END IF;
3622    --
3623 
3624    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,90);
3625    --
3626 EXCEPTION
3627    WHEN OTHERS THEN
3628       fnd_msg_pub.add_exc_msg
3629          (p_pkg_name => g_package
3630          ,p_procedure_name => 'declare_section80cce'
3631          ,p_error_text => substr(sqlerrm, 1, 240)
3632          );
3633    --
3634 END declare_section80cce;
3635 
3636 --------------------------------------------------------------------------
3637 --                                                                      --
3638 -- Name           : DECLARE_SECTION80GG                                --
3639 -- Type           : PROCEDURE                                           --
3640 -- Access         : Public                                              --
3641 -- Description    : The procedure is responsible for storing the        --
3642 --                  detials in 'Deduction under Section 80GG' element. --
3643 --                                                                      --
3644 -- Parameters     :                                                     --
3645 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
3646 --                  p_effective_date             DATE                   --
3647 --                  p_claim_exemp_under_sec_80gg VARCHAR2               --
3648 --            OUT : p_warnings                   BOOLEAN                --
3649 --                                                                      --
3650 -- Change History :                                                     --
3651 --------------------------------------------------------------------------
3652 -- Rev#  Date        Userid      Description                            --
3653 --------------------------------------------------------------------------
3654 -- 1.0  14-Apr-2005  VGSRINIV    Initial Version                        --
3655 --------------------------------------------------------------------------
3656 
3657 PROCEDURE declare_section80gg
3658           (p_assignment_id              IN   per_assignments_f.assignment_id%TYPE
3659 	  ,p_effective_date             IN   DATE DEFAULT NULL
3660           ,p_claim_exemp_under_sec_80gg IN   VARCHAR2
3661           ,p_warnings                   OUT  NOCOPY BOOLEAN)
3662 IS
3663 
3664    l_procedure   VARCHAR(100);
3665    l_message     VARCHAR2(250);
3666    l_input_values t_input_values_tab;
3667    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
3668    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
3669    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
3670    l_business_group_id per_business_groups.business_group_id%TYPE;
3671    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
3672    l_effective_start_date DATE;
3673    l_effective_end_date DATE;
3674    l_effective_date DATE;
3675    l_endation_date DATE;
3676    l_warnings VARCHAR2(6);
3677    --
3678 BEGIN
3679    --
3680     l_procedure := g_package || 'declare_section80gg';
3681     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
3682 
3683     IF g_debug THEN
3684       pay_in_utils.trace('**************************************************','********************');
3685       pay_in_utils.trace('p_assignment_id',p_assignment_id);
3686       pay_in_utils.trace('p_effective_date     ',p_effective_date );
3687       pay_in_utils.trace('p_claim_exemp_under_sec_80gg',p_claim_exemp_under_sec_80gg);
3688       pay_in_utils.trace('**************************************************','********************');
3689     END IF;
3690    --
3691    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
3692 
3693 
3694    get_entry_details(p_assignment_id        => p_assignment_id
3695                     ,p_element_name         => 'Deduction under Section 80GG'
3696                     ,p_effective_date       => l_effective_date
3697                     ,p_element_type_id      => l_element_type_id
3698                     ,p_element_link_id      => l_element_link_id
3699                     ,p_element_entry_id     => l_element_entry_id
3700                     ,p_expected_entries     => 1
3701                     ,p_business_group_id    => l_business_group_id
3702                     ,p_object_version_number=> l_object_version_number
3703                     ,p_input_values         => l_input_values
3704                     );
3705    --
3706    IF g_debug THEN
3707       pay_in_utils.trace('Element Type ID: ' , l_element_type_id);
3708       pay_in_utils.trace('Element Entry ID: ' , l_element_entry_id);
3709       pay_in_utils.trace('Business Group ID: ' , l_business_group_id);
3710       pay_in_utils.trace('Object Version Number: ' , l_object_version_number);
3711    END IF;
3712 
3713    --
3714    pay_in_utils.set_location(g_debug, l_procedure, 20);
3715    --
3716    IF l_element_entry_id is null THEN
3717       --
3718       pay_in_utils.set_location(g_debug, l_procedure, 30);
3719       --
3720       --
3721       -- In this case, we would have to create an element entry to the
3722       -- assignment and return the entry id, the rest would be handled
3723       -- by the update command in the calling procedure.
3724       --
3725       pay_element_entry_api.create_element_entry
3726          (p_effective_date        => l_effective_date
3727          ,p_business_group_id     => l_business_group_id
3728          ,p_assignment_id         => p_assignment_id
3729          ,p_element_link_id       => l_element_link_id
3730          ,p_entry_type            => 'E'
3731            --Claim Exemption under Sec 80GG
3732          ,p_input_value_id1          => l_input_values(0).input_value_id
3733          ,p_entry_value1             => p_claim_exemp_under_sec_80gg
3734          ,p_effective_start_date     => l_effective_start_date
3735          ,p_effective_end_date       => l_effective_end_date
3736          ,p_element_entry_id         => l_element_entry_id
3737          ,p_object_version_number    => l_object_version_number
3738          ,p_create_warning           => p_warnings
3739          );
3740       --
3741       pay_in_utils.set_location(g_debug, l_procedure, 40);
3742       --
3743       -- End date the entry as of the financial year end date
3744       --
3745       --
3746       pay_in_utils.set_location(g_debug, l_procedure, 45);
3747         --
3748       delete_declaration
3749          (p_element_entry_id => l_element_entry_id
3750          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
3751          ,p_warnings         => l_warnings);
3752         --
3753       --
3754    ELSE
3755       --
3756       pay_in_utils.set_location(g_debug, l_procedure, 50);
3757       --
3758       --
3759       -- An element entry for this element already exists we have to
3760       -- update the element entry with the newly submitted date.
3761       --
3762         pay_element_entry_api.update_element_entry
3763          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
3764                                                        ,l_effective_date)
3765          ,p_effective_date           => l_effective_date
3766          ,p_business_group_id        => l_business_group_id
3767          ,p_element_entry_id         => l_element_entry_id
3768          ,p_object_version_number    => l_object_version_number
3769            --Claim Exemption under Sec 80GG
3770          ,p_input_value_id1          => l_input_values(0).input_value_id
3771          ,p_entry_value1             => p_claim_exemp_under_sec_80gg
3772          ,p_effective_start_date     => l_effective_start_date
3773          ,p_effective_end_date       => l_effective_end_date
3774          ,p_update_warning           => p_warnings
3775          );
3776       --
3777       --
3778       pay_in_utils.set_location(g_debug, l_procedure, 60);
3779       --
3780       l_endation_date := pay_in_utils.next_tax_year(l_effective_date);
3781       --
3782       IF l_effective_end_date <> (l_endation_date - 1) THEN
3783         --
3784         -- End date the entry as of the financial year end date
3785         --
3786         delete_declaration
3787            (p_element_entry_id =>l_element_entry_id
3788            ,p_effective_date   =>l_endation_date-1
3789            ,p_warnings         =>l_warnings);
3790         --
3791       END IF;
3792       --
3793 
3794       --
3795    END IF;
3796    --
3797    IF g_debug THEN
3798       pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
3799       pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
3800    END IF;
3801 
3802    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
3803    --
3804 EXCEPTION
3805    WHEN OTHERS THEN
3806       fnd_msg_pub.add_exc_msg
3807          (p_pkg_name => g_package
3808          ,p_procedure_name => 'declare_section80gg'
3809          ,p_error_text => substr(sqlerrm, 1, 240)
3810          );
3811 
3812 END;
3813 
3814 --------------------------------------------------------------------------
3815 --                                                                      --
3816 -- Name           : DECLARE_SECTION80E                                  --
3817 -- Type           : PROCEDURE                                           --
3818 -- Access         : Public                                              --
3819 -- Description    : The procedure is responsible for storing the        --
3820 --                  detials in 'Deduction under Section 80E' element.   --
3821 --                                                                      --
3822 -- Parameters     :                                                     --
3823 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
3824 --                  p_effective_date             DATE                   --
3825 --                  p_higher_education_loan_80e  NUMBER                 --
3826 --            OUT : p_warnings                   BOOLEAN                --
3827 --                                                                      --
3828 -- Change History :                                                     --
3829 --------------------------------------------------------------------------
3830 -- Rev#  Date        Userid      Description                            --
3831 --------------------------------------------------------------------------
3832 -- 1.0  14-Apr-2005  VGSRINIV    Initial Version                        --
3833 --------------------------------------------------------------------------
3834 
3835 PROCEDURE declare_section80e
3836           (p_assignment_id              IN   per_assignments_f.assignment_id%TYPE
3837 	  ,p_effective_date             IN   DATE DEFAULT NULL
3838           ,p_higher_education_loan_80e  IN   NUMBER DEFAULT NULL
3839           ,p_warnings                   OUT  NOCOPY BOOLEAN)
3840 IS
3841 
3842    l_procedure   VARCHAR(100);
3843    l_message     VARCHAR2(250);
3844    l_input_values t_input_values_tab;
3845    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
3846    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
3847    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
3848    l_business_group_id per_business_groups.business_group_id%TYPE;
3849    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
3850    l_effective_start_date DATE;
3851    l_effective_end_date DATE;
3852    l_effective_date DATE;
3853    l_endation_date DATE;
3854    l_warnings VARCHAR2(6);
3855    --
3856 BEGIN
3857    --
3858     l_procedure := g_package || 'declare_section80e';
3859     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
3860 
3861     IF g_debug THEN
3862       pay_in_utils.trace('**************************************************','********************');
3863       pay_in_utils.trace('p_assignment_id',p_assignment_id);
3864       pay_in_utils.trace('p_effective_date     ',p_effective_date );
3865       pay_in_utils.trace('p_higher_education_loan_80e ',p_higher_education_loan_80e);
3866       pay_in_utils.trace('**************************************************','********************');
3867     END IF;
3868    --
3869    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
3870    --
3871 
3872 
3873    get_entry_details(p_assignment_id        => p_assignment_id
3874                     ,p_element_name         => 'Deduction under Section 80E'
3875                     ,p_effective_date       => l_effective_date
3876                     ,p_element_type_id      => l_element_type_id
3877                     ,p_element_link_id      => l_element_link_id
3878                     ,p_element_entry_id     => l_element_entry_id
3879                     ,p_expected_entries     => 2
3880                     ,p_business_group_id    => l_business_group_id
3881                     ,p_object_version_number=> l_object_version_number
3882                     ,p_input_values         => l_input_values
3883                     );
3884    --
3885    IF g_debug THEN
3886       hr_utility.trace('Element Type ID: ' || l_element_type_id);
3887       hr_utility.trace('Element Entry ID: ' || l_element_entry_id);
3888       hr_utility.trace('Business Group ID: ' || l_business_group_id);
3889       hr_utility.trace('Object Version Number: ' || l_object_version_number);
3890    END IF;
3891    --
3892    pay_in_utils.set_location(g_debug, l_procedure, 20);
3893    --
3894    IF l_element_entry_id is null THEN
3895       --
3896       pay_in_utils.set_location(g_debug, l_procedure, 30);
3897       --
3898       --
3899       -- In this case, we would have to create an element entry to the
3900       -- assignment and return the entry id, the rest would be handled
3901       -- by the update command in the calling procedure.
3902       --
3903       pay_element_entry_api.create_element_entry
3904          (p_effective_date        => l_effective_date
3905          ,p_business_group_id     => l_business_group_id
3906          ,p_assignment_id         => p_assignment_id
3907          ,p_element_link_id       => l_element_link_id
3908          ,p_entry_type            => 'E'
3909            --Claim Exemption under Sec 80E
3910          ,p_input_value_id1          => l_input_values(0).input_value_id
3911          ,p_entry_value1             => p_higher_education_loan_80e
3912          ,p_effective_start_date     => l_effective_start_date
3913          ,p_effective_end_date       => l_effective_end_date
3914          ,p_element_entry_id         => l_element_entry_id
3915          ,p_object_version_number    => l_object_version_number
3916          ,p_create_warning           => p_warnings
3917          );
3918       --
3919       pay_in_utils.set_location(g_debug, l_procedure, 40);
3920       --
3921       -- End date the entry as of the financial year end date
3922       --
3923       --
3924       pay_in_utils.set_location(g_debug, l_procedure, 45);
3925         --
3926       delete_declaration
3927          (p_element_entry_id => l_element_entry_id
3928          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
3929          ,p_warnings         => l_warnings);
3930         --
3931       --
3932    ELSE
3933       --
3934       pay_in_utils.set_location(g_debug, l_procedure, 50);
3935       --
3936       --
3937       -- An element entry for this element already exists we have to
3938       -- update the element entry with the newly submitted date.
3939       --
3940       IF p_higher_education_loan_80e > 0 THEN
3941 
3942         pay_element_entry_api.update_element_entry
3943          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
3944                                                        ,l_effective_date)
3945          ,p_effective_date           => l_effective_date
3946          ,p_business_group_id        => l_business_group_id
3947          ,p_element_entry_id         => l_element_entry_id
3948          ,p_object_version_number    => l_object_version_number
3949            --Claim Exemption under Sec 80E
3950          ,p_input_value_id1          => l_input_values(0).input_value_id
3951          ,p_entry_value1             => p_higher_education_loan_80e
3952          ,p_effective_start_date     => l_effective_start_date
3953          ,p_effective_end_date       => l_effective_end_date
3954          ,p_update_warning           => p_warnings
3955          );
3956       --
3957       --
3958       pay_in_utils.set_location(g_debug, l_procedure, 60);
3959       --
3960       l_endation_date := pay_in_utils.next_tax_year(l_effective_date);
3961 
3962       IF l_effective_end_date <> (l_endation_date - 1) THEN
3963         --
3964         -- End date the entry as of the financial year end date
3965         --
3966         delete_declaration
3967            (p_element_entry_id =>l_element_entry_id
3968            ,p_effective_date   =>l_endation_date-1
3969            ,p_warnings         =>l_warnings);
3970         --
3971       END IF;
3972 
3973      ELSE
3974 
3975         delete_declaration
3976            (p_element_entry_id =>l_element_entry_id
3977            ,p_effective_date   =>l_effective_date
3978            ,p_warnings         =>l_warnings);
3979 
3980      END IF;
3981       --
3982 
3983       --
3984    END IF;
3985    --
3986       IF g_debug THEN
3987          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
3988          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
3989       END IF;
3990 
3991    --
3992    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,80);
3993    --
3994 EXCEPTION
3995    WHEN OTHERS THEN
3996       fnd_msg_pub.add_exc_msg
3997          (p_pkg_name => g_package
3998          ,p_procedure_name => 'declare_section80e'
3999          ,p_error_text => substr(sqlerrm, 1, 240)
4000          );
4001 
4002 END;
4003 
4004 --------------------------------------------------------------------------
4005 --                                                                      --
4006 -- Name           : DECLARE_SECTION80GGA                                --
4007 -- Type           : PROCEDURE                                           --
4008 -- Access         : Public                                              --
4009 -- Description    : The procedure is responsible for storing the        --
4010 --                  detials in 'Deduction under Section 80GGA' element. --
4011 --                                                                      --
4012 -- Parameters     :                                                     --
4013 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
4014 --                  p_effective_date              DATE                  --
4015 --                  p_donation_for_research_80gga NUMBER                --
4016 --            OUT : p_warnings                    BOOLEAN               --
4017 --                                                                      --
4018 -- Change History :                                                     --
4019 --------------------------------------------------------------------------
4020 -- Rev#  Date        Userid      Description                            --
4021 --------------------------------------------------------------------------
4022 -- 1.0  14-Apr-2005  VGSRINIV    Initial Version                        --
4023 --------------------------------------------------------------------------
4024 
4025 PROCEDURE declare_section80gga
4026           (p_assignment_id               IN   per_assignments_f.assignment_id%TYPE
4027 	  ,p_effective_date              IN   DATE DEFAULT NULL
4028           ,p_donation_for_research_80gga IN   NUMBER DEFAULT NULL
4029           ,p_warnings                    OUT  NOCOPY BOOLEAN)
4030 IS
4031 
4032    l_procedure   VARCHAR(100);
4033    l_message     VARCHAR2(250);
4034    l_input_values t_input_values_tab;
4035    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
4036    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
4037    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
4038    l_business_group_id per_business_groups.business_group_id%TYPE;
4039    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
4040    l_effective_start_date DATE;
4041    l_effective_end_date DATE;
4042    l_effective_date DATE;
4043    l_endation_date DATE;
4044    l_warnings VARCHAR2(6);
4045    --
4046 BEGIN
4047    --
4048     l_procedure := g_package || 'declare_section80gga';
4049     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
4050 
4051     IF g_debug THEN
4052       pay_in_utils.trace('**************************************************','********************');
4053       pay_in_utils.trace('p_assignment_id',p_assignment_id);
4054       pay_in_utils.trace('p_effective_date     ',p_effective_date );
4055       pay_in_utils.trace('p_donation_for_research_80gga ',p_donation_for_research_80gga);
4056       pay_in_utils.trace('**************************************************','********************');
4057     END IF;
4058    --
4059    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
4060    --
4061    --
4062 
4063    get_entry_details(p_assignment_id        => p_assignment_id
4064                     ,p_element_name         => 'Deduction under Section 80GGA'
4065                     ,p_effective_date       => l_effective_date
4066                     ,p_element_type_id      => l_element_type_id
4067                     ,p_element_link_id      => l_element_link_id
4068                     ,p_element_entry_id     => l_element_entry_id
4069                     ,p_expected_entries     => 3
4070                     ,p_business_group_id    => l_business_group_id
4071                     ,p_object_version_number=> l_object_version_number
4072                     ,p_input_values         => l_input_values
4073                     );
4074    --
4075    IF g_debug THEN
4076       pay_in_utils.trace('Element Type ID: ' , l_element_type_id);
4077       pay_in_utils.trace('Element Entry ID: ' , l_element_entry_id);
4078       pay_in_utils.trace('Business Group ID: ' , l_business_group_id);
4079       pay_in_utils.trace('Object Version Number: ' , l_object_version_number);
4080    END IF;
4081 
4082    --
4083    pay_in_utils.set_location(g_debug, l_procedure, 20);
4084    --
4085    IF l_element_entry_id is null THEN
4086       --
4087       pay_in_utils.set_location(g_debug, l_procedure, 30);
4088       --
4089       --
4090       -- In this case, we would have to create an element entry to the
4091       -- assignment and return the entry id, the rest would be handled
4092       -- by the update command in the calling procedure.
4093       --
4094       pay_element_entry_api.create_element_entry
4095          (p_effective_date        => l_effective_date
4096          ,p_business_group_id     => l_business_group_id
4097          ,p_assignment_id         => p_assignment_id
4098          ,p_element_link_id       => l_element_link_id
4099          ,p_entry_type            => 'E'
4100            --Deduction under Sec 80GGA
4101          ,p_input_value_id1          => l_input_values(0).input_value_id
4102          ,p_entry_value1             => p_donation_for_research_80gga
4103          ,p_effective_start_date     => l_effective_start_date
4104          ,p_effective_end_date       => l_effective_end_date
4105          ,p_element_entry_id         => l_element_entry_id
4106          ,p_object_version_number    => l_object_version_number
4107          ,p_create_warning           => p_warnings
4108          );
4109       --
4110       pay_in_utils.set_location(g_debug, l_procedure, 40);
4111       --
4112       -- End date the entry as of the financial year end date
4113       --
4114       --
4115       pay_in_utils.set_location(g_debug, l_procedure, 45);
4116         --
4117       delete_declaration
4118          (p_element_entry_id => l_element_entry_id
4119          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
4120          ,p_warnings         => l_warnings);
4121         --
4122       --
4123    ELSE
4124       --
4125       pay_in_utils.set_location(g_debug, l_procedure, 50);
4126       --
4127       --
4128       -- An element entry for this element already exists we have to
4129       -- update the element entry with the newly submitted date.
4130       --
4131       IF p_donation_for_research_80gga > 0 THEN
4132 
4133         pay_element_entry_api.update_element_entry
4134          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
4135                                                        ,l_effective_date)
4136          ,p_effective_date           => l_effective_date
4137          ,p_business_group_id        => l_business_group_id
4138          ,p_element_entry_id         => l_element_entry_id
4139          ,p_object_version_number    => l_object_version_number
4140            --Deduction under Sec 80GGA
4141          ,p_input_value_id1          => l_input_values(0).input_value_id
4142          ,p_entry_value1             => p_donation_for_research_80gga
4143          ,p_effective_start_date     => l_effective_start_date
4144          ,p_effective_end_date       => l_effective_end_date
4145          ,p_update_warning           => p_warnings
4146          );
4147       --
4148       --
4149       pay_in_utils.set_location(g_debug, l_procedure, 60);
4150       --
4151       l_endation_date := pay_in_utils.next_tax_year(l_effective_date);
4152       --
4153       IF l_effective_end_date <> (l_endation_date - 1) THEN
4154         --
4155         -- End date the entry as of the financial year end date
4156         --
4157         delete_declaration
4158            (p_element_entry_id =>l_element_entry_id
4159            ,p_effective_date   =>l_endation_date-1
4160            ,p_warnings         =>l_warnings);
4161         --
4162       END IF;
4163 
4164      ELSE
4165 
4166         delete_declaration
4167            (p_element_entry_id =>l_element_entry_id
4168            ,p_effective_date   =>l_effective_date
4169            ,p_warnings         =>l_warnings);
4170 
4171      END IF;
4172 
4173       --
4174    END IF;
4175    --
4176       IF g_debug THEN
4177          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
4178          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
4179       END IF;
4180    --
4181    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
4182    --
4183 EXCEPTION
4184    WHEN OTHERS THEN
4185       fnd_msg_pub.add_exc_msg
4186          (p_pkg_name => g_package
4187          ,p_procedure_name => 'declare_section80gga'
4188          ,p_error_text => substr(sqlerrm, 1, 240)
4189          );
4190 
4191 END;
4192 
4193 --------------------------------------------------------------------------
4194 --                                                                      --
4195 -- Name           : DECLARE_SECTION80D                                  --
4196 -- Type           : PROCEDURE                                           --
4197 -- Access         : Public                                              --
4198 -- Description    : The procedure is responsible for storing the        --
4199 --                  detials in 'Deduction under Section 80D' element.   --
4200 --                                                                      --
4201 -- Parameters     :                                                     --
4202 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
4203 --                  p_effective_date              DATE                  --
4204 --                  p_medical_insurance_prem_80d  NUMBER                --
4205 --                  p_sec_80d_senior_citizen      VARCHAR2              --
4206 --            OUT : p_warnings                    BOOLEAN               --
4207 --                                                                      --
4208 -- Change History :                                                     --
4209 --------------------------------------------------------------------------
4210 -- Rev#  Date        Userid      Description                            --
4211 --------------------------------------------------------------------------
4212 -- 1.0  14-Apr-2005  VGSRINIV    Initial Version                        --
4213 --------------------------------------------------------------------------
4214 
4215 PROCEDURE declare_section80d
4216           (p_assignment_id               IN   per_assignments_f.assignment_id%TYPE
4217 	  ,p_effective_date              IN   DATE DEFAULT NULL
4218           ,p_medical_insurance_prem_80d  IN   NUMBER DEFAULT NULL
4219 	  ,p_sec_80d_senior_citizen      IN   VARCHAR2 DEFAULT NULL
4220 	  ,p_med_par_insurance_prem_80d  IN   NUMBER DEFAULT NULL
4221 	  ,p_sec_80d_par_senior_citizen  IN   VARCHAR2 DEFAULT NULL
4222           ,p_warnings                    OUT  NOCOPY BOOLEAN)
4223 IS
4224 
4225    l_procedure   VARCHAR(100);
4226    l_message     VARCHAR2(250);
4227    l_input_values t_input_values_tab;
4228    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
4229    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
4230    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
4231    l_business_group_id per_business_groups.business_group_id%TYPE;
4232    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
4233    l_effective_start_date DATE;
4234    l_effective_end_date DATE;
4235    l_effective_date DATE;
4236    l_endation_date DATE;
4237    l_warnings VARCHAR2(6);
4238    --
4239 BEGIN
4240    --
4241     l_procedure := g_package || 'declare_section80d';
4242     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
4243 
4244     IF g_debug THEN
4245       pay_in_utils.trace('**************************************************','********************');
4246       pay_in_utils.trace('p_assignment_id',p_assignment_id);
4247       pay_in_utils.trace('p_effective_date     ',p_effective_date );
4248       pay_in_utils.trace('p_medical_insurance_prem_80d ',p_medical_insurance_prem_80d);
4249       pay_in_utils.trace('p_sec_80d_senior_citizen ',p_sec_80d_senior_citizen);
4250       pay_in_utils.trace('p_med_par_insurance_prem_80d ',p_med_par_insurance_prem_80d);
4251       pay_in_utils.trace('p_sec_80d_par_senior_citizen ',p_sec_80d_par_senior_citizen);
4252       pay_in_utils.trace('**************************************************','********************');
4253     END IF;
4254    --
4255    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
4256    --
4257    --
4258 
4259    get_entry_details(p_assignment_id        => p_assignment_id
4260                     ,p_element_name         => 'Deduction under Section 80D'
4261                     ,p_effective_date       => l_effective_date
4262                     ,p_element_type_id      => l_element_type_id
4263                     ,p_element_link_id      => l_element_link_id
4264                     ,p_element_entry_id     => l_element_entry_id
4265                     ,p_expected_entries     => 6
4266                     ,p_business_group_id    => l_business_group_id
4267                     ,p_object_version_number=> l_object_version_number
4268                     ,p_input_values         => l_input_values
4269                     );
4270    --
4271    IF g_debug THEN
4272       pay_in_utils.trace('Element Type ID: ' , l_element_type_id);
4273       pay_in_utils.trace('Element Entry ID: ' , l_element_entry_id);
4274       pay_in_utils.trace('Business Group ID: ' , l_business_group_id);
4275       pay_in_utils.trace('Object Version Number: ' , l_object_version_number);
4276    END IF;
4277    --
4278    pay_in_utils.set_location(g_debug, l_procedure, 20);
4279    --
4280    IF l_element_entry_id is null THEN
4281       --
4282       pay_in_utils.set_location(g_debug, l_procedure, 30);
4283       --
4284       --
4285       -- In this case, we would have to create an element entry to the
4286       -- assignment and return the entry id, the rest would be handled
4287       -- by the update command in the calling procedure.
4288       --
4289       pay_element_entry_api.create_element_entry
4290          (p_effective_date        => l_effective_date
4291          ,p_business_group_id     => l_business_group_id
4292          ,p_assignment_id         => p_assignment_id
4293          ,p_element_link_id       => l_element_link_id
4294          ,p_entry_type            => 'E'
4295            --Deduction under Sec 80D
4296          ,p_input_value_id1          => l_input_values(0).input_value_id
4297          ,p_entry_value1             => p_medical_insurance_prem_80d
4298          ,p_input_value_id2          => l_input_values(2).input_value_id
4299          ,p_entry_value2             => p_sec_80d_senior_citizen
4300 	 ,p_input_value_id3          => l_input_values(4).input_value_id
4301          ,p_entry_value3             => p_med_par_insurance_prem_80d
4302          ,p_input_value_id4          => l_input_values(5).input_value_id
4303          ,p_entry_value4             => p_sec_80d_par_senior_citizen
4304          ,p_effective_start_date     => l_effective_start_date
4305          ,p_effective_end_date       => l_effective_end_date
4306          ,p_element_entry_id         => l_element_entry_id
4307          ,p_object_version_number    => l_object_version_number
4308          ,p_create_warning           => p_warnings
4309          );
4310       --
4311       pay_in_utils.set_location(g_debug, l_procedure, 40);
4312       --
4313       -- End date the entry as of the financial year end date
4314       --
4315       --
4316       pay_in_utils.set_location(g_debug, l_procedure, 45);
4317         --
4318       delete_declaration
4319          (p_element_entry_id => l_element_entry_id
4320          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
4321          ,p_warnings         => l_warnings);
4322         --
4323       --
4324    ELSE
4325       --
4326       pay_in_utils.set_location(g_debug, l_procedure, 50);
4327       --
4328       --
4329       -- An element entry for this element already exists we have to
4330       -- update the element entry with the newly submitted date.
4331       --
4332 
4333 
4334         pay_element_entry_api.update_element_entry
4335          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
4336                                                        ,l_effective_date)
4337          ,p_effective_date           => l_effective_date
4338          ,p_business_group_id        => l_business_group_id
4339          ,p_element_entry_id         => l_element_entry_id
4340          ,p_object_version_number    => l_object_version_number
4341            --Deduction under Sec 80D
4342          ,p_input_value_id1          => l_input_values(0).input_value_id
4343          ,p_entry_value1             => p_medical_insurance_prem_80d
4344          ,p_input_value_id2          => l_input_values(2).input_value_id
4345          ,p_entry_value2             => p_sec_80d_senior_citizen
4346 	 ,p_input_value_id3          => l_input_values(4).input_value_id
4347          ,p_entry_value3             => p_med_par_insurance_prem_80d
4348          ,p_input_value_id4          => l_input_values(5).input_value_id
4349          ,p_entry_value4             => p_sec_80d_par_senior_citizen
4350          ,p_effective_start_date     => l_effective_start_date
4351          ,p_effective_end_date       => l_effective_end_date
4352          ,p_update_warning           => p_warnings
4353          );
4354       --
4355       --
4356       pay_in_utils.set_location(g_debug, l_procedure, 60);
4357       --
4358       l_endation_date := pay_in_utils.next_tax_year(l_effective_date);
4359       --
4360       IF l_effective_end_date <> (l_endation_date - 1) THEN
4361         --
4362         -- End date the entry as of the financial year end date
4363         --
4364         delete_declaration
4365            (p_element_entry_id =>l_element_entry_id
4366            ,p_effective_date   =>l_endation_date-1
4367            ,p_warnings         =>l_warnings);
4368         --
4369       END IF;
4370 
4371       --
4372 
4373       --
4374    END IF;
4375    --
4376       IF g_debug THEN
4377          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
4378          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
4379       END IF;
4380       pay_in_utils.set_location(g_debug, l_procedure, 70);
4381    --
4382    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
4383    --
4384 EXCEPTION
4385    WHEN OTHERS THEN
4386       fnd_msg_pub.add_exc_msg
4387          (p_pkg_name => g_package
4388          ,p_procedure_name => 'declare_section80d'
4389          ,p_error_text => substr(sqlerrm, 1, 240)
4390          );
4391 
4392 END;
4393 
4394 --------------------------------------------------------------------------
4395 --                                                                      --
4396 -- Name           : DECLARE_SECTION80DDB                                --
4397 -- Type           : PROCEDURE                                           --
4398 -- Access         : Public                                              --
4399 -- Description    : The procedure is responsible for storing the        --
4400 --                  detials in 'Deduction under Section 80DDB' element. --
4401 --                                                                      --
4402 -- Parameters     :                                                     --
4403 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
4404 --                  p_effective_date              DATE                  --
4405 --                  p_disease_treatment_80ddb     NUMBER                --
4406 --                  p_sec_80ddb_senior_citizen    VARCHAR2              --
4407 --            OUT : p_warnings                    BOOLEAN               --
4408 --                                                                      --
4409 -- Change History :                                                     --
4410 --------------------------------------------------------------------------
4411 -- Rev#  Date        Userid      Description                            --
4412 --------------------------------------------------------------------------
4413 -- 1.0  14-Apr-2005  VGSRINIV    Initial Version                        --
4414 --------------------------------------------------------------------------
4415 PROCEDURE declare_section80ddb
4416           (p_assignment_id               IN   per_assignments_f.assignment_id%TYPE
4417 	  ,p_effective_date              IN   DATE DEFAULT NULL
4418           ,p_disease_treatment_80ddb     IN   NUMBER DEFAULT NULL
4419 	  ,p_sec_80ddb_senior_citizen    IN   VARCHAR2 DEFAULT NULL
4420           ,p_warnings                    OUT  NOCOPY BOOLEAN)
4421 IS
4422 
4423    l_procedure   VARCHAR(100);
4424    l_message     VARCHAR2(250);
4425    l_input_values t_input_values_tab;
4426    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
4427    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
4428    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
4429    l_business_group_id per_business_groups.business_group_id%TYPE;
4430    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
4431    l_effective_start_date DATE;
4432    l_effective_end_date DATE;
4433    l_effective_date DATE;
4434    l_endation_date DATE;
4435    l_warnings VARCHAR2(6);
4436    --
4437 BEGIN
4438    --
4439     l_procedure := g_package || 'declare_section80ddb';
4440     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
4441 
4442     IF g_debug THEN
4443       pay_in_utils.trace('**************************************************','********************');
4444       pay_in_utils.trace('p_assignment_id',p_assignment_id);
4445       pay_in_utils.trace('p_effective_date     ',p_effective_date );
4446       pay_in_utils.trace('p_disease_treatment_80ddb ',p_disease_treatment_80ddb);
4447       pay_in_utils.trace('p_sec_80ddb_senior_citizen ',p_sec_80ddb_senior_citizen);
4448       pay_in_utils.trace('**************************************************','********************');
4449     END IF;
4450    --
4451    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
4452    --
4453 
4454    get_entry_details(p_assignment_id        => p_assignment_id
4455                     ,p_element_name         => 'Deduction under Section 80DDB'
4456                     ,p_effective_date       => l_effective_date
4457                     ,p_element_type_id      => l_element_type_id
4458                     ,p_element_link_id      => l_element_link_id
4459                     ,p_element_entry_id     => l_element_entry_id
4460                     ,p_expected_entries     => 4
4461                     ,p_business_group_id    => l_business_group_id
4462                     ,p_object_version_number=> l_object_version_number
4463                     ,p_input_values         => l_input_values
4464                     );
4465    --
4466    IF g_debug THEN
4467       pay_in_utils.trace('Element Type ID: ' , l_element_type_id);
4468       pay_in_utils.trace('Element Entry ID: ' , l_element_entry_id);
4469       pay_in_utils.trace('Business Group ID: ' , l_business_group_id);
4470       pay_in_utils.trace('Object Version Number: ' , l_object_version_number);
4471    END IF;
4472    --
4473    pay_in_utils.set_location(g_debug, l_procedure, 20);
4474    --
4475    IF l_element_entry_id is null THEN
4476       --
4477       pay_in_utils.set_location(g_debug, l_procedure, 30);
4478       --
4479       --
4480       -- In this case, we would have to create an element entry to the
4481       -- assignment and return the entry id, the rest would be handled
4482       -- by the update command in the calling procedure.
4483       --
4484       pay_element_entry_api.create_element_entry
4485          (p_effective_date        => l_effective_date
4486          ,p_business_group_id     => l_business_group_id
4487          ,p_assignment_id         => p_assignment_id
4488          ,p_element_link_id       => l_element_link_id
4489          ,p_entry_type            => 'E'
4490            --Deduction under Sec 80DDB
4491          ,p_input_value_id1          => l_input_values(0).input_value_id
4492          ,p_entry_value1             => p_disease_treatment_80ddb
4493          ,p_input_value_id2          => l_input_values(2).input_value_id
4494          ,p_entry_value2             => p_sec_80ddb_senior_citizen
4495          ,p_effective_start_date     => l_effective_start_date
4496          ,p_effective_end_date       => l_effective_end_date
4497          ,p_element_entry_id         => l_element_entry_id
4498          ,p_object_version_number    => l_object_version_number
4499          ,p_create_warning           => p_warnings
4500          );
4501       --
4502       pay_in_utils.set_location(g_debug, l_procedure, 40);
4503       --
4504       -- End date the entry as of the financial year end date
4505       --
4506       --
4507       pay_in_utils.set_location(g_debug, l_procedure, 45);
4508         --
4509       delete_declaration
4510          (p_element_entry_id => l_element_entry_id
4511          ,p_effective_date   => pay_in_utils.next_tax_year(l_effective_date)-1
4512          ,p_warnings         => l_warnings);
4513         --
4514       --
4515    ELSE
4516       --
4517       pay_in_utils.set_location(g_debug, l_procedure, 50);
4518       --
4519       --
4520       -- An element entry for this element already exists we have to
4521       -- update the element entry with the newly submitted date.
4522       --
4523 
4524       IF p_disease_treatment_80ddb > 0 THEN
4525 
4526         pay_element_entry_api.update_element_entry
4527          (p_datetrack_update_mode    => get_update_mode(l_element_entry_id
4528                                                        ,l_effective_date)
4529          ,p_effective_date           => l_effective_date
4530          ,p_business_group_id        => l_business_group_id
4531          ,p_element_entry_id         => l_element_entry_id
4532          ,p_object_version_number    => l_object_version_number
4533            --Deduction under Sec 80DDB
4534          ,p_input_value_id1          => l_input_values(0).input_value_id
4535          ,p_entry_value1             => p_disease_treatment_80ddb
4536          ,p_input_value_id2          => l_input_values(2).input_value_id
4537          ,p_entry_value2             => p_sec_80ddb_senior_citizen
4538          ,p_effective_start_date     => l_effective_start_date
4539          ,p_effective_end_date       => l_effective_end_date
4540          ,p_update_warning           => p_warnings
4541          );
4542       --
4543       --
4544       pay_in_utils.set_location(g_debug, l_procedure, 60);
4545       --
4546       l_endation_date := pay_in_utils.next_tax_year(l_effective_date);
4547       --
4548       IF l_effective_end_date <> (l_endation_date - 1) THEN
4549         --
4550         -- End date the entry as of the financial year end date
4551         --
4552         delete_declaration
4553            (p_element_entry_id =>l_element_entry_id
4554            ,p_effective_date   =>l_endation_date-1
4555            ,p_warnings         =>l_warnings);
4556         --
4557       END IF;
4558 
4559      ELSE
4560 
4561         delete_declaration
4562            (p_element_entry_id =>l_element_entry_id
4563            ,p_effective_date   =>l_effective_date
4564            ,p_warnings         =>l_warnings);
4565 
4566      END IF;
4567 
4568 
4569       --
4570 
4571       --
4572    END IF;
4573    --
4574       IF g_debug THEN
4575          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
4576          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
4577       END IF;
4578       pay_in_utils.set_location(g_debug, l_procedure, 70);
4579    --
4580    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,80);
4581    --
4582 EXCEPTION
4583    WHEN OTHERS THEN
4584       fnd_msg_pub.add_exc_msg
4585          (p_pkg_name => g_package
4586          ,p_procedure_name => 'declare_section80ddb'
4587          ,p_error_text => substr(sqlerrm, 1, 240)
4588          );
4589 
4590 END;
4591 
4592 --------------------------------------------------------------------------
4593 --                                                                      --
4594 -- Name           : DECLARE_SECTION80U                                  --
4595 -- Type           : PROCEDURE                                           --
4596 -- Access         : Public                                              --
4597 -- Description    : The procedure is responsible for storing the        --
4598 --                  detials in 'Deduction under Section 80U' element.   --
4599 --                                                                      --
4600 -- Parameters     :                                                     --
4601 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
4602 --                  p_effective_date              DATE                  --
4603 --            OUT : p_warnings                    BOOLEAN               --
4604 --                                                                      --
4605 -- Change History :                                                     --
4606 --------------------------------------------------------------------------
4607 -- Rev#  Date        Userid      Description                            --
4608 --------------------------------------------------------------------------
4609 -- 1.0  14-Apr-2005  VGSRINIV    Initial Version                        --
4610 --------------------------------------------------------------------------
4611 
4612 PROCEDURE declare_section80U
4613           (p_assignment_id               IN   per_assignments_f.assignment_id%TYPE
4614 	  ,p_effective_date              IN   DATE DEFAULT NULL
4615           ,p_warnings                    OUT  NOCOPY BOOLEAN)
4616 IS
4617 
4618    l_procedure   VARCHAR(100);
4619    l_message     VARCHAR2(250);
4620    l_input_values t_input_values_tab;
4621    l_element_type_id  pay_element_types_f.element_type_id%TYPE;
4622    l_element_link_id      pay_element_links_f.element_link_id%TYPE;
4623    l_element_entry_id pay_element_entries_f.element_entry_id%TYPE;
4624    l_business_group_id per_business_groups.business_group_id%TYPE;
4625    l_object_version_number pay_element_entries_f.object_version_number%TYPE;
4626    l_effective_start_date DATE;
4627    l_effective_end_date DATE;
4628    l_effective_date DATE;
4629    l_endation_date DATE;
4630    l_warnings VARCHAR2(6);
4631    --
4632 BEGIN
4633    --
4634     l_procedure := g_package || 'declare_section80U';
4635     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
4636 
4637     IF g_debug THEN
4638       pay_in_utils.trace('**************************************************','********************');
4639       pay_in_utils.trace('p_assignment_id',p_assignment_id);
4640       pay_in_utils.trace('p_effective_date     ',p_effective_date );
4641       pay_in_utils.trace('**************************************************','********************');
4642     END IF;
4643 
4644    --
4645    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
4646    --
4647    --
4648 
4649    get_entry_details(p_assignment_id        => p_assignment_id
4650                     ,p_element_name         => 'Deduction under Section 80U'
4651                     ,p_effective_date       => l_effective_date
4652                     ,p_element_type_id      => l_element_type_id
4653                     ,p_element_link_id      => l_element_link_id
4654                     ,p_element_entry_id     => l_element_entry_id
4655                     ,p_expected_entries     => 1
4656                     ,p_business_group_id    => l_business_group_id
4657                     ,p_object_version_number=> l_object_version_number
4658                     ,p_input_values         => l_input_values
4659                     );
4660    --
4661    IF g_debug THEN
4662       pay_in_utils.trace('Element Type ID: ' , l_element_type_id);
4663       pay_in_utils.trace('Element Entry ID: ' , l_element_entry_id);
4664       pay_in_utils.trace('Business Group ID: ' , l_business_group_id);
4665       pay_in_utils.trace('Object Version Number: ' , l_object_version_number);
4666    END IF;
4667    --
4668    pay_in_utils.set_location(g_debug, l_procedure, 20);
4669    --
4670    IF l_element_entry_id is null THEN
4671       --
4672       pay_in_utils.set_location(g_debug, l_procedure, 30);
4673       --
4674       --
4675       -- In this case, we would have to create an element entry to the
4676       -- assignment and return the entry id, the rest would be handled
4677       -- by the update command in the calling procedure.
4678       --
4679       pay_element_entry_api.create_element_entry
4680          (p_effective_date        => l_effective_date
4681          ,p_business_group_id     => l_business_group_id
4682          ,p_assignment_id         => p_assignment_id
4683          ,p_element_link_id       => l_element_link_id
4684          ,p_entry_type            => 'E'
4685          ,p_effective_start_date  => l_effective_start_date
4686          ,p_effective_end_date    => l_effective_end_date
4687          ,p_element_entry_id      => l_element_entry_id
4688          ,p_object_version_number => l_object_version_number
4689          ,p_create_warning        => p_warnings
4690          );
4691       --
4692       pay_in_utils.set_location(g_debug, l_procedure, 40);
4693       --
4694    END IF;
4695    --
4696       IF g_debug THEN
4697          pay_in_utils.trace('Effective Start Date: ', l_effective_start_date);
4698          pay_in_utils.trace('Effective End Date: ', l_effective_end_date);
4699       END IF;
4700       pay_in_utils.set_location(g_debug, l_procedure, 50);
4701 
4702    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,60);
4703    --
4704 EXCEPTION
4705    WHEN OTHERS THEN
4706       fnd_msg_pub.add_exc_msg
4707          (p_pkg_name => g_package
4708          ,p_procedure_name => 'declare_section80u'
4709          ,p_error_text => substr(sqlerrm, 1, 240)
4710          );
4711 
4712 END;
4713 
4714 /* BUG 4251141: STAT UPDATE 2005 CHANGES END HERE */
4715 
4716 PROCEDURE declare_tax
4717    (p_assignment_id                IN  per_assignments_f.assignment_id%TYPE
4718    ,p_is_monthly_rent_changed      IN  VARCHAR2
4719    ,p_apr                          IN  NUMBER   default null
4720    ,p_may                          IN  NUMBER   default null
4721    ,p_jun                          IN  NUMBER   default null
4722    ,p_jul                          IN  NUMBER   default null
4723    ,p_aug                          IN  NUMBER   default null
4724    ,p_sep                          IN  NUMBER   default null
4725    ,p_oct                          IN  NUMBER   default null
4726    ,p_nov                          IN  NUMBER   default null
4727    ,p_dec                          IN  NUMBER   default null
4728    ,p_jan                          IN  NUMBER   default null
4729    ,p_feb                          IN  NUMBER   default null
4730    ,p_mar                          IN  NUMBER   default null
4731    ,p_is_chapter6a_changed         IN  VARCHAR2
4732    ,p_pension_fund_80ccc           IN  NUMBER   default null
4733    ,p_medical_insurance_prem_80d   IN  NUMBER   default null
4734    ,p_med_par_insurance_prem_80d   IN  NUMBER   default NULL
4735    ,p_80d_par_prem_changed         IN  VARCHAR2 DEFAULT NULL
4736    ,p_sec_80d_par_senior_citizen   IN  VARCHAR2 default null
4737    ,p_80d_par_snr_changed          IN  VARCHAR2 DEFAULT NULL
4738    ,p_sec_80ddb_senior_citizen     IN  VARCHAR2 default null
4739    ,p_disease_treatment_80ddb      IN  NUMBER   default null
4740    ,p_sec_80d_senior_citizen       IN  VARCHAR2 default null
4741    ,p_higher_education_loan_80e    IN  NUMBER   default null
4742    ,p_claim_exemp_under_sec_80gg   IN  VARCHAR2 default null
4743    ,p_donation_for_research_80gga  IN  NUMBER   default null
4744    ,p_80gg_changed                 IN  VARCHAR2 DEFAULT NULL
4745    ,p_80e_changed                  IN  VARCHAR2 DEFAULT NULL
4746    ,p_80gga_changed                IN  VARCHAR2 DEFAULT NULL
4747    ,p_80d_changed                  IN  VARCHAR2 DEFAULT NULL
4748    ,p_80dsc_planned_value          IN  VARCHAR2 DEFAULT NULL
4749    ,p_80ddb_changed                IN  VARCHAR2 DEFAULT NULL
4750    ,p_80ddbsc_planned_value        IN  VARCHAR2 DEFAULT NULL
4751    ,p_int_on_gen_investment_80L    IN  NUMBER   default null
4752    ,p_int_on_securities_80L        IN  NUMBER   default null
4753    ,p_is_section88_changed         IN  VARCHAR2 DEFAULT NULL
4754    ,p_deferred_annuity             IN  NUMBER   default null
4755    ,p_senior_citizen_sav_scheme    IN  NUMBER   default null
4756    ,p_public_provident_fund        IN  NUMBER   default null
4757    ,p_post_office_savings_scheme   IN  NUMBER   default null
4758    ,p_deposit_in_nsc_vi_issue      IN  NUMBER   default null
4759    ,p_deposit_in_nsc_viii_issue    IN  NUMBER   default null
4760    ,p_interest_on_nsc_reinvested   IN  NUMBER   default null
4761    ,p_house_loan_repayment         IN  NUMBER   default null
4762    ,p_notified_mutual_fund_or_uti  IN  NUMBER   default null
4763    ,p_national_housing_bank_scheme IN  NUMBER   default null
4764    ,p_unit_linked_insurance_plan   IN  NUMBER   default null
4765    ,p_notified_annuity_plan        IN  NUMBER   default null
4766    ,p_notified_pension_fund        IN  NUMBER   default null
4767    ,p_public_sector_company_scheme IN  NUMBER   default null
4768    ,p_approved_superannuation_fund IN  NUMBER   default null
4769    ,p_infrastructure_bond          IN  NUMBER   default null
4770    ,p_tuition_fee_for_child_1      IN  NUMBER   default null
4771    ,p_tuition_fee_for_child_2      IN  NUMBER   default null
4772    ,p_is_other_income_changed      IN  VARCHAR2
4773    ,p_income_from_house_property   IN  NUMBER   default null
4774    ,p_profit_and_gain_from_busines IN  NUMBER   default null
4775    ,p_long_term_capital_gain       IN  NUMBER   default null
4776    ,p_short_term_capital_gain      IN  NUMBER   default null
4777    ,p_income_from_any_other_source IN  NUMBER   default null
4778    ,p_tds_paid_on_other_income     IN  NUMBER   default null
4779    ,p_approved_flag                IN  VARCHAR2 default null
4780    ,p_comment_text                 IN  VARCHAR2 default null
4781    ,p_effective_date               IN  DATE     default null
4782    ,p_warnings                     OUT NOCOPY VARCHAR2)
4783 IS
4784    --
4785    l_effective_date DATE;
4786    l_procedure   VARCHAR(100);
4787    l_message     VARCHAR2(250);
4788    l_disability_proof VARCHAR2(2);
4789    l_permanent_disability_80u NUMBER;
4790    l_category VARCHAR2(10);
4791    l_degree NUMBER;
4792    l_declare_warn BOOLEAN;
4793 
4794    CURSOR get_permanent_disability_80u
4795    IS
4796    SELECT global_value
4797      FROM ff_globals_f
4798     WHERE global_name = 'IN_PERMANENT_PHYSICAL_DISABILITY_80U'
4799       AND legislation_code = g_legislation_code;
4800    --
4801 BEGIN
4802    --
4803     l_procedure := g_package || 'declare_tax';
4804     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
4805 
4806     IF g_debug THEN
4807       pay_in_utils.trace('**************************************************','********************');
4808       pay_in_utils.trace ('p_assignment_id                ',p_assignment_id);
4809       pay_in_utils.trace ('p_is_monthly_rent_changed      ',p_is_monthly_rent_changed);
4810       pay_in_utils.trace ('p_apr                          ',p_apr);
4811       pay_in_utils.trace ('p_may                          ',p_may);
4812       pay_in_utils.trace ('p_jun                          ',p_jun);
4813       pay_in_utils.trace ('p_jul                          ',p_jul);
4814       pay_in_utils.trace ('p_aug                          ',p_aug);
4815       pay_in_utils.trace ('p_sep                          ',p_sep);
4816       pay_in_utils.trace ('p_oct                          ',p_oct);
4817       pay_in_utils.trace ('p_nov                          ',p_nov);
4818       pay_in_utils.trace ('p_dec                          ',p_dec);
4819       pay_in_utils.trace ('p_jan                          ',p_jan);
4820       pay_in_utils.trace ('p_feb                          ',p_feb);
4821       pay_in_utils.trace ('p_mar                          ',p_mar);
4822       pay_in_utils.trace ('p_is_chapter6a_changed         ',p_is_chapter6a_changed);
4823       pay_in_utils.trace ('p_pension_fund_80ccc           ',p_pension_fund_80ccc );
4824       pay_in_utils.trace ('p_medical_insurance_prem_80d   ',p_medical_insurance_prem_80d);
4825       pay_in_utils.trace ('p_sec_80ddb_senior_citizen     ',p_sec_80ddb_senior_citizen);
4826       pay_in_utils.trace ('p_disease_treatment_80ddb      ',p_disease_treatment_80ddb);
4827       pay_in_utils.trace ('p_sec_80d_senior_citizen       ',p_sec_80d_senior_citizen);
4828       pay_in_utils.trace ('p_higher_education_loan_80e    ',p_higher_education_loan_80e);
4829       pay_in_utils.trace ('p_claim_exemp_under_sec_80gg   ',p_claim_exemp_under_sec_80gg);
4830       pay_in_utils.trace ('p_donation_for_research_80gga  ',p_donation_for_research_80gga);
4831       pay_in_utils.trace ('p_80gg_changed                 ',p_80gg_changed);
4832       pay_in_utils.trace ('p_80e_changed                  ',p_80e_changed);
4833       pay_in_utils.trace ('p_80gga_changed                ',p_80gga_changed);
4834       pay_in_utils.trace ('p_80d_changed                  ',p_80d_changed);
4835       pay_in_utils.trace ('p_80dsc_planned_value          ',p_80dsc_planned_value);
4836       pay_in_utils.trace ('p_80ddb_changed                ',p_80ddb_changed);
4837       pay_in_utils.trace ('p_80ddbsc_planned_value        ',p_80ddbsc_planned_value);
4838       pay_in_utils.trace ('p_int_on_gen_investment_80L    ',p_int_on_gen_investment_80L);
4839       pay_in_utils.trace ('p_int_on_securities_80L        ',p_int_on_securities_80L);
4840       pay_in_utils.trace ('p_is_section88_changed         ',p_is_section88_changed);
4841       pay_in_utils.trace ('p_deferred_annuity             ',p_deferred_annuity);
4842       pay_in_utils.trace ('p_senior_citizen_sav_scheme    ',p_senior_citizen_sav_scheme);
4843       pay_in_utils.trace ('p_public_provident_fund        ',p_public_provident_fund);
4844       pay_in_utils.trace ('p_post_office_savings_scheme   ',p_post_office_savings_scheme);
4845       pay_in_utils.trace ('p_deposit_in_nsc_vi_issue      ',p_deposit_in_nsc_vi_issue);
4846       pay_in_utils.trace ('p_deposit_in_nsc_viii_issue    ',p_deposit_in_nsc_viii_issue);
4847       pay_in_utils.trace ('p_interest_on_nsc_reinvested   ',p_interest_on_nsc_reinvested);
4848       pay_in_utils.trace ('p_house_loan_repayment         ',p_house_loan_repayment);
4849       pay_in_utils.trace ('p_notified_mutual_fund_or_uti  ',p_notified_mutual_fund_or_uti);
4850       pay_in_utils.trace ('p_national_housing_bank_scheme ',p_national_housing_bank_scheme);
4851       pay_in_utils.trace ('p_unit_linked_insurance_plan   ',p_unit_linked_insurance_plan);
4852       pay_in_utils.trace ('p_notified_annuity_plan        ',p_notified_annuity_plan);
4853       pay_in_utils.trace ('p_notified_pension_fund        ',p_notified_pension_fund);
4854       pay_in_utils.trace ('p_public_sector_company_scheme ',p_public_sector_company_scheme );
4855       pay_in_utils.trace ('p_approved_superannuation_fund ',p_approved_superannuation_fund);
4856       pay_in_utils.trace ('p_infrastructure_bond          ',p_infrastructure_bond);
4857       pay_in_utils.trace ('p_tuition_fee_for_child_1      ',p_tuition_fee_for_child_1);
4858       pay_in_utils.trace ('p_tuition_fee_for_child_2      ',p_tuition_fee_for_child_2);
4859       pay_in_utils.trace ('p_is_other_income_changed      ',p_is_other_income_changed);
4860       pay_in_utils.trace ('p_income_from_house_property   ',p_income_from_house_property);
4861       pay_in_utils.trace ('p_profit_and_gain_from_busines ',p_profit_and_gain_from_busines);
4862       pay_in_utils.trace ('p_long_term_capital_gain       ',p_long_term_capital_gain);
4863       pay_in_utils.trace ('p_short_term_capital_gain      ',p_short_term_capital_gain);
4864       pay_in_utils.trace ('p_income_from_any_other_source ',p_income_from_any_other_source);
4865       pay_in_utils.trace ('p_tds_paid_on_other_income     ',p_tds_paid_on_other_income);
4866       pay_in_utils.trace ('p_approved_flag                ',p_approved_flag);
4867       pay_in_utils.trace ('p_comment_text                 ',p_comment_text);
4868       pay_in_utils.trace ('p_effective_date               ',p_effective_date);
4869       pay_in_utils.trace('**************************************************','********************');
4870     END IF;
4871    l_declare_warn := false;
4872    --
4873 
4874    --
4875    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
4876    -- Added for bug 3990922
4877    hr_session_utilities.insert_session_row(l_effective_date);
4878    --
4879    --
4880    IF p_is_monthly_rent_changed = 'Y' THEN
4881       --
4882       pay_in_utils.set_location(g_debug, l_procedure, 20);
4883       --
4884       declare_house_rent
4885          (p_assignment_id  => p_assignment_id
4886          ,p_effective_date => l_effective_date
4887          ,p_apr            => p_apr
4888          ,p_may            => p_may
4889          ,p_jun            => p_jun
4890          ,p_jul            => p_jul
4891          ,p_aug            => p_aug
4892          ,p_sep            => p_sep
4893          ,p_oct            => p_oct
4894          ,p_nov            => p_nov
4895          ,p_dec            => p_dec
4896          ,p_jan            => p_jan
4897          ,p_feb            => p_feb
4898          ,p_mar            => p_mar
4899          ,p_warnings       => l_declare_warn);
4900       --
4901       pay_in_utils.set_location(g_debug, l_procedure, 30);
4902       --
4903    END IF;
4904    --
4905    pay_in_utils.set_location(g_debug, 'Entering: '||l_procedure, 40);
4906    --
4907 
4908    IF p_is_chapter6a_changed = 'Y' THEN
4909       --
4910       pay_in_utils.set_location(g_debug, l_procedure, 50);
4911 
4912 /* STAT 2005 CHANGES START */
4913 
4914       -- Permanent Disability 80u Calculation
4915       -- Permanent disability is calculated based on the details
4916       -- entered in per_disabilities_f by the user. If the
4917       -- disability proof is submitted then only the exemption
4918       -- amount is entered i.e., when l_disability_proof = 'Y'.
4919 /*      l_permanent_disability_80u :=
4920         pay_in_tax_utils.get_disability_details
4921          (p_assignment_id => p_assignment_id
4922          ,p_date_earned   => l_effective_date
4923          ,p_disable_catg  => l_category
4924          ,p_disable_degree=> l_degree
4925          ,p_disable_proof => l_disability_proof
4926          );
4927       --
4928       l_permanent_disability_80u := 0;
4929       --
4930       IF (l_disability_proof = 'Y' AND l_degree >= 40 AND l_category IN ('BLIND','SA_VIS_IMP','LC','SA_HEA_IMP','LD','07','MI','AU','CP','MD'))
4931       THEN
4932       --
4933         declare_section80u
4934          (p_assignment_id                   => p_assignment_id
4935          ,p_effective_date                  => l_effective_date
4936          ,p_warnings                        => l_declare_warn);
4937       --
4938       END IF; */
4939 
4940 --      IF p_80gg_changed = 'Y' THEN
4941       IF p_80gg_changed = 'Y' THEN
4942 
4943         declare_section80gg
4944          (p_assignment_id                   => p_assignment_id
4945          ,p_effective_date                  => l_effective_date
4946          ,p_claim_exemp_under_sec_80gg      => p_claim_exemp_under_sec_80gg
4947          ,p_warnings                        => l_declare_warn);
4948 
4949       END IF;
4950 
4951      IF p_80e_changed = 'Y' THEN
4952 
4953         declare_section80e
4954          (p_assignment_id                   => p_assignment_id
4955          ,p_effective_date                  => l_effective_date
4956          ,p_higher_education_loan_80e       => p_higher_education_loan_80e
4957          ,p_warnings                        => l_declare_warn);
4958 
4959       END IF;
4960 
4961       IF p_80gga_changed = 'Y' THEN
4962 
4963         declare_section80gga
4964          (p_assignment_id                   => p_assignment_id
4965          ,p_effective_date                  => l_effective_date
4966          ,p_donation_for_research_80gga     => p_donation_for_research_80gga
4967          ,p_warnings                        => l_declare_warn);
4968 
4969       END IF;
4970 
4971       IF p_80d_changed = 'Y'
4972          OR p_80d_par_prem_changed = 'Y'
4973 	 OR p_80d_par_snr_changed = 'Y'
4974          OR p_sec_80d_senior_citizen <> p_80dsc_planned_value THEN
4975 
4976 
4977          declare_section80d
4978          (p_assignment_id                   => p_assignment_id
4979          ,p_effective_date                  => l_effective_date
4980          ,p_medical_insurance_prem_80d      => NVL (p_medical_insurance_prem_80d,0)
4981 	 ,p_sec_80d_senior_citizen          => p_sec_80d_senior_citizen
4982 	 ,p_med_par_insurance_prem_80d      => p_med_par_insurance_prem_80d
4983          ,p_sec_80d_par_senior_citizen      => p_sec_80d_par_senior_citizen
4984 	 ,p_warnings                        => l_declare_warn);
4985 
4986       END IF;
4987 
4988       IF p_80ddb_changed = 'Y' OR p_sec_80ddb_senior_citizen <> p_80ddbsc_planned_value THEN
4989 
4990          declare_section80ddb
4991          (p_assignment_id                   => p_assignment_id
4992          ,p_effective_date                  => l_effective_date
4993          ,p_disease_treatment_80ddb         => p_disease_treatment_80ddb
4994 	 ,p_sec_80ddb_senior_citizen        => p_sec_80ddb_senior_citizen
4995          ,p_warnings                        => l_declare_warn);
4996 
4997       END IF;
4998 
4999 /* Stat Changes 2005 End */
5000       --
5001 /*      declare_chapter6a
5002          (p_assignment_id                   => p_assignment_id
5003          ,p_effective_date                  => l_effective_date
5004          ,p_pension_fund_80ccc              => p_pension_fund_80ccc
5005          ,p_medical_insurance_prem_80d      => p_medical_insurance_prem_80d
5006          ,p_sec_80ddb_senior_citizen        => p_sec_80ddb_senior_citizen
5007          ,p_disease_treatment_80ddb         => p_disease_treatment_80ddb
5008          ,p_sec_80d_senior_citizen          => p_sec_80d_senior_citizen
5009          ,p_higher_education_loan_80e       => p_higher_education_loan_80e
5010          ,p_claim_exemp_under_sec_80gg      => p_claim_exemp_under_sec_80gg
5011          ,p_donation_for_research_80gga     => p_donation_for_research_80gga
5012          ,p_int_on_gen_investment_80L       => p_int_on_gen_investment_80L
5013          ,p_int_on_securities_80L           => p_int_on_securities_80L
5014          ,p_warnings                        => l_declare_warn);
5015   */    --
5016       pay_in_utils.set_location(g_debug, l_procedure, 60);
5017       --
5018    END IF; /* p_is_chapter6a_changed = 'Y' */
5019    --
5020    pay_in_utils.set_location(g_debug, 'Entering: '||l_procedure, 70);
5021    --
5022 
5023 /*   IF p_is_section88_changed = 'Y' THEN
5024       --
5025       pay_in_utils.set_location(g_debug, l_procedure, 61);
5026       --
5027       declare_section88
5028          (p_assignment_id                  => p_assignment_id
5029          ,p_effective_date                 => l_effective_date
5030          ,p_deferred_annuity               => p_deferred_annuity
5031          ,p_public_provident_fund          => p_public_provident_fund
5032          ,p_post_office_savings_scheme     => p_post_office_savings_scheme
5033          ,p_deposit_in_nsc_vi_issue        => p_deposit_in_nsc_vi_issue
5034          ,p_deposit_in_nsc_viii_issue      => p_deposit_in_nsc_viii_issue
5035          ,p_interest_on_nsc_reinvested     => p_interest_on_nsc_reinvested
5036          ,p_house_loan_repayment           => p_house_loan_repayment
5037          ,p_notified_mutual_fund_or_uti    => p_notified_mutual_fund_or_uti
5038          ,p_national_housing_bank_scheme   => p_national_housing_bank_scheme
5039          ,p_unit_linked_insurance_plan     => p_unit_linked_insurance_plan
5040          ,p_notified_annuity_plan          => p_notified_annuity_plan
5041          ,p_notified_pension_fund          => p_notified_pension_fund
5042          ,p_public_sector_company_scheme   => p_public_sector_company_scheme
5043          ,p_approved_superannuation_fund   => p_approved_superannuation_fund
5044          ,p_infrastructure_bond            => p_infrastructure_bond
5045          ,p_warnings                       => l_declare_warn);
5046       --
5047       pay_in_utils.set_location(g_debug, l_procedure, 80);
5048       --
5049       declare_tuition_fee
5050          (p_assignment_id           => p_assignment_id
5051          ,p_effective_date          => l_effective_date
5052          ,p_tuition_fee_for_child_1 => p_tuition_fee_for_child_1
5053          ,p_tuition_fee_for_child_2 => p_tuition_fee_for_child_2
5054          ,p_warnings                => l_declare_warn);
5055       --
5056       pay_in_utils.set_location(g_debug, l_procedure, 90);
5057       --
5058    END IF; */
5059    --
5060    pay_in_utils.set_location(g_debug, l_procedure, 100);
5061    --
5062 
5063    IF p_is_other_income_changed = 'Y' THEN
5064       --
5065       pay_in_utils.set_location(g_debug, l_procedure, 110);
5066       --
5067       declare_other_income
5068          (p_assignment_id                 => p_assignment_id
5069          ,p_effective_date                => l_effective_date
5070          ,p_income_from_house_property    => p_income_from_house_property
5071          ,p_profit_and_gain_from_busines  => p_profit_and_gain_from_busines
5072          ,p_long_term_capital_gain        => p_long_term_capital_gain
5073          ,p_short_term_capital_gain       => p_short_term_capital_gain
5074          ,p_income_from_any_other_source  => p_income_from_any_other_source
5075          ,p_tds_paid_on_other_income      => p_tds_paid_on_other_income
5076          ,p_warnings                      => l_declare_warn);
5077       --
5078       pay_in_utils.set_location(g_debug, l_procedure, 120);
5079    END IF;
5080    --
5081    IF p_approved_flag is not null THEN
5082       --
5083       pay_in_utils.set_location(g_debug, l_procedure, 130);
5084       --
5085       approve_declaration
5086          (p_assignment_id  => p_assignment_id
5087          ,p_approval_flag  => p_approved_flag
5088          ,p_effective_date => l_effective_date
5089          ,p_comment_text   => p_comment_text);
5090       --
5091       pay_in_utils.set_location(g_debug, l_procedure, 140);
5092       --
5093    END IF;
5094    --
5095    IF l_declare_warn THEN
5096       p_warnings := 'TRUE';
5097    ELSE
5098       p_warnings := 'FALSE';
5099    END IF;
5100    --
5101    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,150);
5102    --
5103 EXCEPTION
5104    WHEN OTHERS THEN
5105       fnd_msg_pub.add_exc_msg
5106          (p_pkg_name => g_package
5107          ,p_procedure_name => 'declare_tax'
5108          ,p_error_text => substr(sqlerrm, 1, 240)
5109          );
5110    --
5111 END declare_tax;
5112 
5113 --------------------------------------------------------------------------
5114 --                                                                      --
5115 -- Name           : DELETE_DECLARATION                                  --
5116 -- Type           : PROCEDURE                                           --
5117 -- Access         : Public                                              --
5118 -- Description    : The procedure is responsible for deletion of        --
5119 --                  element entries as of the effective date.           --
5120 --                                                                      --
5121 -- Parameters     :                                                     --
5122 --             IN : p_element_entry_id        element_entry_id%TYPE     --
5123 --                  p_effective_date          DATE                      --
5124 --            OUT : p_warnings                BOOLEAN                   --
5125 --                                                                      --
5126 -- Change History :                                                     --
5127 --------------------------------------------------------------------------
5128 -- Rev#  Date        Userid      Description                            --
5129 --------------------------------------------------------------------------
5130 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
5131 --------------------------------------------------------------------------
5132 PROCEDURE delete_declaration
5133    (p_element_entry_id IN NUMBER
5134    ,p_effective_date   IN DATE DEFAULT NULL
5135    ,p_warnings         OUT NOCOPY VARCHAR2)
5136 IS
5137    --
5138    l_effective_date DATE;
5139    l_effective_start_date DATE;
5140    l_effective_end_date DATE;
5141    l_object_version_number NUMBER;
5142    l_warnings BOOLEAN;
5143    l_procedure   VARCHAR(100);
5144    l_message     VARCHAR2(250);
5145    l_effective_end_date_check DATE;
5146    --
5147    CURSOR csr_entry_details(c_effective_date IN DATE)
5148    IS
5149    SELECT object_version_number
5150          ,effective_end_date
5151      FROM pay_element_entries_f
5152     WHERE element_entry_id = p_element_entry_id
5153       AND c_effective_date BETWEEN effective_start_date
5154                                AND effective_end_date;
5155    --
5156 BEGIN
5157    --
5158    p_warnings := 'FALSE';
5159 
5160     l_procedure := g_package || 'delete_declaration';
5161     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5162 
5163     IF g_debug THEN
5164       pay_in_utils.trace('**************************************************','********************');
5165       pay_in_utils.trace('Element Entry ID:',p_element_Entry_id);
5166       pay_in_utils.trace('Effective Date:',p_effective_date);
5167       pay_in_utils.trace('**************************************************','********************');
5168     END IF;
5169 
5170    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
5171    --
5172    IF g_debug THEN
5173       pay_in_utils.trace('Calculate Effective Date: ' , l_effective_date);
5174    END IF;
5175    --
5176    OPEN csr_entry_details(l_effective_date);
5177    FETCH csr_entry_details INTO l_object_version_number
5178                                ,l_effective_end_date_check;
5179    CLOSE csr_entry_details;
5180    --
5181    IF l_object_version_number is null
5182    or l_effective_end_date_check = l_effective_date THEN
5183       return;
5184    END IF;
5185    --
5186    pay_in_utils.set_location(g_debug, l_procedure, 40);
5187    --
5188      pay_element_entry_api.delete_element_entry
5189         (p_validate => FALSE
5190         ,p_datetrack_delete_mode => hr_api.g_delete
5191         ,p_effective_date => l_effective_date
5192         ,p_element_entry_id => p_element_entry_id
5193         ,p_object_version_number => l_object_version_number
5194         ,p_effective_start_date => l_effective_start_date
5195         ,p_effective_end_date => l_effective_end_date
5196         ,p_delete_warning => l_warnings
5197         );
5198    --
5199    pay_in_utils.set_location(g_debug, l_procedure, 50);
5200    --
5201    IF l_warnings = TRUE THEN
5202       --
5203       pay_in_utils.set_location(g_debug, l_procedure, 60);
5204       p_warnings := 'TRUE';
5205       --
5206    END IF;
5207 
5208    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,70);
5209    --
5210 EXCEPTION
5211    WHEN OTHERS THEN
5212       fnd_msg_pub.add_exc_msg
5213          (p_pkg_name => g_package
5214          ,p_procedure_name => 'delete_declaration'
5215          ,p_error_text => substr(sqlerrm, 1, 240)
5216          );
5217    --
5218 END delete_declaration;
5219 
5220 --------------------------------------------------------------------------
5221 --                                                                      --
5222 -- Name           : APPROVE_DECLARATION                                 --
5223 -- Type           : PROCEDURE                                           --
5224 -- Access         : Public                                              --
5225 -- Description    : The procedure is responsible for approval of        --
5226 --                  tax declaration for the assignment in question.     --
5227 --                                                                      --
5228 -- Parameters     :                                                     --
5229 --             IN :p_assignment_id  per_assignments_f.assignment_id%TYPE--
5230 --                  p_approval_flag  VARCHAR2                           --
5231 --                  p_effective_date DATE                               --
5232 --                  p_comment_text   VARCHAR2                           --
5233 -- Change History :                                                     --
5234 --------------------------------------------------------------------------
5235 -- Rev#  Date        Userid      Description                            --
5236 --------------------------------------------------------------------------
5237 -- 1.0  24-Sep-2004  PUCHIL      Initial Version                        --
5238 --------------------------------------------------------------------------
5239 PROCEDURE approve_declaration
5240    (p_assignment_id  IN per_assignments_f.assignment_id%TYPE
5241    ,p_approval_flag  IN VARCHAR2
5242    ,p_effective_date IN DATE
5243    ,p_comment_text   IN VARCHAR2)
5244 IS
5245    --
5246    l_procedure   VARCHAR(100);
5247    l_message     VARCHAR2(250);
5248    l_approval_status VARCHAR2(2);
5249    l_object_version_number NUMBER;
5250    l_extra_info_id per_assignment_extra_info.assignment_extra_info_id%TYPE;
5251    --
5252    CURSOR get_object_version(c_extra_info_id IN NUMBER)
5253    IS
5254    SELECT object_version_number
5255    FROM   per_assignment_extra_info
5256    WHERE  assignment_extra_info_id = c_extra_info_id;
5257    --
5258 BEGIN
5259    --
5260     l_procedure := g_package || 'approve_declaration';
5261     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5262 
5263     IF g_debug THEN
5264       pay_in_utils.trace('**************************************************','********************');
5265       pay_in_utils.trace('p_assignment_id',p_assignment_id);
5266       pay_in_utils.trace('p_effective_date     ',p_effective_date );
5267       pay_in_utils.trace('p_approval_flag ',p_approval_flag);
5268       pay_in_utils.trace('p_comment_text ',p_comment_text);
5269       pay_in_utils.trace('**************************************************','********************');
5270     END IF;
5271 
5272 
5273    --
5274    l_approval_status := get_approval_status
5275       (p_assignment_id
5276       ,get_tax_year(p_effective_date)
5277       ,l_extra_info_id);
5278    --
5279    pay_in_utils.set_location(g_debug, l_procedure, 20);
5280    --
5281    IF l_approval_status is not null THEN
5282       --
5283       pay_in_utils.set_location(g_debug, l_procedure, 30);
5284       --
5285       OPEN get_object_version(l_extra_info_id);
5286       FETCH get_object_version INTO l_object_version_number;
5287       CLOSE get_object_version;
5288       --
5289       pay_in_utils.set_location(g_debug, l_procedure, 40);
5290       --
5291       hr_assignment_extra_info_api.update_assignment_extra_info
5292          (p_assignment_extra_info_id => l_extra_info_id
5293          ,p_object_version_number    => l_object_version_number
5294          ,p_aei_information_category => g_approval_info_type
5295          ,p_aei_information1         => get_tax_year(p_effective_date)
5296          ,p_aei_information2         => p_approval_flag
5297          ,p_aei_information3         => substr(p_comment_text, 0, 150));
5298       --
5299       pay_in_utils.set_location(g_debug, l_procedure, 50);
5300       --
5301    ELSE
5302       --
5303       pay_in_utils.set_location(g_debug, l_procedure, 60);
5304       --
5305       hr_assignment_extra_info_api.create_assignment_extra_info
5306          (p_assignment_id            => p_assignment_id
5307          ,p_information_type         => g_approval_info_type
5308          ,p_aei_information_category => g_approval_info_type
5309          ,p_aei_information1         => get_tax_year(p_effective_date)
5310          ,p_aei_information2         => p_approval_flag
5311          ,p_aei_information3         => substr(p_comment_text, 0, 150)
5312          ,p_assignment_extra_info_id => l_extra_info_id
5313          ,p_object_version_number    => l_object_version_number);
5314       --
5315       pay_in_utils.set_location(g_debug, l_procedure, 70);
5316       --
5317    END IF;
5318    --
5319    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,80);
5320    --
5321 EXCEPTION
5322    WHEN OTHERS THEN
5323       fnd_msg_pub.add_exc_msg
5324          (p_pkg_name => g_package
5325          ,p_procedure_name => 'approve_declaration'
5326          ,p_error_text => substr(sqlerrm, 1, 240)
5327          );
5328    --
5329 END approve_declaration;
5330 
5331 -- Start changes to Enhancement 3886086(Web ADI)
5332 
5333 --------------------------------------------------------------------------
5334 --                                                                      --
5335 -- Name           : WEB_ADI_DECLARE_TAX                                 --
5336 -- Type           : PROCEDURE                                           --
5337 -- Access         : Public                                              --
5338 -- Description    : The procedure is responsible for storing the        --
5339 --                  details through WEB ADI                         .   --
5340 --                                                                      --
5341 -- Parameters     :                                                     --
5342 --             IN : p_assignment_id per_assignments_f.assignment_id%TYPE--
5343 --                  p_effective_date              DATE                  --
5344 --                  p_warnings                    BOOLEAN               --
5345 --                                                                      --
5346 -- Change History :                                                     --
5347 --------------------------------------------------------------------------
5348 -- Rev#  Date        Userid      Description                            --
5349 --------------------------------------------------------------------------
5350 -- 1.1  20-Jun-2005  abhjain     Added changes after stat update        --
5351 --------------------------------------------------------------------------
5352 
5353 PROCEDURE web_adi_declare_tax
5354    (p_assignment_id                 IN number
5355    ,p_effective_date                IN date default null
5356    ,p_april                         IN number default null
5357    ,p_may                           IN number default null
5358    ,p_june                          IN number default null
5359    ,p_july                          IN number default null
5360    ,p_august                        IN number default null
5361    ,p_september                     IN number default null
5362    ,p_october                       IN number default null
5363    ,p_november                      IN number default null
5364    ,p_december                      IN number default null
5365    ,p_january                       IN number default null
5366    ,p_february                      IN number default null
5367    ,p_march                         IN number default null
5368    ,p_cce_ee_id1                    IN number default null
5369    ,p_cce_component1                IN varchar2 default null
5370    ,p_investment_amount1            IN number default null
5371    ,p_cce_ee_id2                    IN number default null
5372    ,p_cce_component2                IN varchar2 default null
5373    ,p_investment_amount2            IN number default null
5374    ,p_cce_ee_id3                    IN number default null
5375    ,p_cce_component3                IN varchar2 default null
5376    ,p_investment_amount3            IN number default null
5377    ,p_cce_ee_id4                    IN number default null
5378    ,p_cce_component4                IN varchar2 default null
5379    ,p_investment_amount4            IN number default null
5380    ,p_cce_ee_id5                    IN number default null
5381    ,p_cce_component5                IN varchar2 default null
5382    ,p_investment_amount5            IN number default null
5383    ,p_cce_ee_id6                    IN number default null
5384    ,p_cce_component6                IN varchar2 default null
5385    ,p_investment_amount6            IN number default null
5386    ,p_cce_ee_id7                    IN number default null
5387    ,p_cce_component7                IN varchar2 default null
5388    ,p_investment_amount7            IN number default null
5389    ,p_cce_ee_id8                    IN number default null
5390    ,p_cce_component8                IN varchar2 default null
5391    ,p_investment_amount8            IN number default null
5392    ,p_cce_ee_id9                    IN number default null
5393    ,p_cce_component9                IN varchar2 default null
5394    ,p_investment_amount9            IN number default null
5395    ,p_cce_ee_id10                   IN number default null
5396    ,p_cce_component10               IN varchar2 default null
5397    ,p_investment_amount10           IN number default null
5398    ,p_cce_ee_id11                   IN number default null
5399    ,p_cce_component11               IN varchar2 default null
5400    ,p_investment_amount11           IN number default null
5401    ,p_cce_ee_id12                   IN number default null
5402    ,p_cce_component12               IN varchar2 default null
5403    ,p_investment_amount12           IN number default null
5404    ,p_cce_ee_id13                   IN number default null
5405    ,p_cce_component13               IN varchar2 default null
5406    ,p_investment_amount13           IN number default null
5407    ,p_cce_ee_id14                   IN number default null
5408    ,p_cce_component14               IN varchar2 default null
5409    ,p_investment_amount14           IN number default null
5410    ,p_cce_ee_id15                   IN number default null
5411    ,p_cce_component15               IN varchar2 default null
5412    ,p_investment_amount15           IN number default null
5413    ,p_cce_ee_id16                   IN number default null
5414    ,p_cce_component16               IN varchar2 default null
5415    ,p_investment_amount16           IN number default null
5416    ,p_cce_ee_id17                   IN number default null
5417    ,p_cce_component17               IN varchar2 default null
5418    ,p_investment_amount17           IN number default null
5419    ,p_cce_ee_id18                   IN number default null
5420    ,p_cce_component18               IN varchar2 default null
5421    ,p_investment_amount18           IN number default null
5422    ,p_cce_ee_id19                   IN number default null
5423    ,p_cce_component19               IN varchar2 default null
5424    ,p_investment_amount19           IN number default null
5425    ,p_cce_ee_id20                   IN number default null
5426    ,p_cce_component20               IN varchar2 default null
5427    ,p_investment_amount20           IN number default null
5428    ,p_cce_ee_id21                   IN number default null
5429    ,p_cce_component21               IN varchar2 default null
5430    ,p_investment_amount21           IN number default null
5431    ,p_higher_education_loan         IN number default null
5432    ,p_donation_for_research         IN number default null
5433    ,p_claim_exemption_sec_80gg      IN varchar2 default null
5434    ,p_premium_amount                IN number default null
5435    ,p_premium_covers_sc             IN varchar2 default null
5436    ,p_treatment_amount              IN number default null
5437    ,p_treatment_covers_sc           IN varchar2 default null
5438    ,p_income_from_house_property    IN number default null
5439    ,p_profit_and_gain               IN number default null
5440    ,p_long_term_capital_gain        IN number default null
5441    ,p_short_term_capital_gain       IN number default null
5442    ,p_income_from_other_sources     IN number default null
5443    ,p_tds_paid                      IN number default null
5444    ,p_disease_entry_id1             IN number default null
5445    ,p_disability_type1              IN varchar2 default null
5446    ,p_disability_percentage1        IN varchar2 default null
5447    ,p_treatment_amount1             IN number default null
5448    ,p_disease_entry_id2             IN number default null
5449    ,p_disability_type2              IN varchar2 default null
5450    ,p_disability_percentage2        IN varchar2 default null
5451    ,p_treatment_amount2             IN number default null
5452    ,p_donation_entry_id1            IN number default null
5453    ,p_donation_type1                IN varchar2 default null
5454    ,p_donation_amount1              IN number default null
5455    ,p_donation_entry_id2            IN number default null
5456    ,p_donation_type2                IN varchar2 default null
5457    ,p_donation_amount2              IN number default null
5458    ,p_lic_entry_id1                 IN number default null
5459    ,p_premium_paid1                 IN number default null
5460    ,p_sum_assured1                  IN number default null
5461    ,p_lic_entry_id2                 IN number default null
5462    ,p_premium_paid2                 IN number default null
5463    ,p_sum_assured2                  IN number default null
5464    ,p_lic_entry_id3                 IN number default null
5465    ,p_premium_paid3                 IN number default null
5466    ,p_sum_assured3                  IN number default null
5467    ,p_lic_entry_id4                 IN number default null
5468    ,p_premium_paid4                 IN number default null
5469    ,p_sum_assured4                  IN number default null
5470    ,p_lic_entry_id5                 IN number default null
5471    ,p_premium_paid5                 IN number default null
5472    ,p_sum_assured5                  IN number default null
5473    ,p_comment_text                  IN varchar2 default NULL
5474    ,P_PERSON_ID                     IN number default null
5475    ,P_FULL_NAME                     IN varchar2 default NULL
5476    ,P_EMPLOYEE_NUMBER               IN varchar2 default NULL
5477    ,P_ASSIGNMENT_NUMBER             IN varchar2 default NULL
5478    ,P_DEPARTMENT                    IN varchar2 default NULL
5479    ,P_LAST_UPDATED_DATE             IN date default null
5480    ,P_ORGANIZATION_ID               IN number default null
5481    ,P_BUSINESS_GROUP_ID             IN number default null
5482    ,P_START_DATE                    IN date default null
5483    ,P_GRADE_ID                      IN number default null
5484    ,P_JOB_ID                        IN number default null
5485    ,P_POSITION_ID                   IN number default null
5486    ,P_TAX_AREA_NUMBER               IN varchar2 default NULL
5487    ,P_APPROVAL_STATUS               IN varchar2 default NULL
5488    ,P_TAX_YEAR			    IN varchar2 default NULL
5489    ,p_parent_premium                IN number default null
5490    ,p_parent_sc                     IN varchar2 default null
5491 )
5492 IS
5493    --
5494    l_effective_date DATE;
5495    l_procedure   VARCHAR(100);
5496    l_message     VARCHAR2(250);
5497    l_declare_warn BOOLEAN;
5498    l_warnings VARCHAR2(256);
5499    l_approved_flag VARCHAR2(10);
5500    l_count NUMBER;
5501    --
5502    -- Added as a part of bug fix for 4774108
5503    l_element_type_id NUMBER;
5504    l_element_link_id NUMBER;
5505 
5506    CURSOR csr_element_type_id(p_element_name VARCHAR2)
5507    IS
5508    SELECT element_type_id
5509    FROM   pay_element_types_f
5510    WHERE  legislation_code = 'IN'
5511    AND    element_name = p_element_name
5512    AND    p_effective_date BETWEEN effective_start_date AND effective_end_date;
5513 
5514    CURSOR csr_number_of_entries
5515       (c_assignment_id IN per_assignments_f.assignment_id%TYPE
5516       ,c_element_name  IN pay_element_types_f.element_name%TYPE
5517       ,c_effective_date IN DATE
5518       ,c_element_link_id IN NUMBER)
5519    IS
5520    SELECT count(entries.element_entry_id)
5521      FROM per_assignments_f assgn
5522         , pay_element_links_f link
5523         , pay_element_types_f types
5524         , pay_element_entries_f entries
5525     WHERE assgn.assignment_id = c_assignment_id
5526       AND link.element_link_id = c_element_link_id
5527       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
5528       AND link.business_group_id = assgn.business_group_id
5529       AND link.element_type_id = types.element_type_id
5530       AND types.element_name = c_element_name
5531       AND entries.element_type_id = types.element_type_id
5532       AND entries.element_link_id = link.element_link_id
5533       AND entries.assignment_id = assgn.assignment_id
5534       AND c_effective_date BETWEEN assgn.effective_start_date
5535                                AND assgn.effective_end_date
5536       AND c_effective_date BETWEEN link.effective_start_date
5537                                AND link.effective_end_date
5538       AND c_effective_date BETWEEN types.effective_start_date
5539                                AND types.effective_end_date
5540       AND c_effective_date BETWEEN entries.effective_start_date
5541                                AND entries.effective_end_date;
5542 
5543 
5544 
5545 
5546    PROCEDURE store_Disability
5547       (p_assignment_id          IN number
5548       ,p_effective_date         IN date     default null
5549       ,p_disease_entry_id       IN number   default null
5550       ,p_disability_type        IN varchar2 default null
5551       ,p_disability_percentage  IN varchar2 default null
5552       ,p_treatment_amount       IN number   default null)
5553    IS
5554    l_procedure   VARCHAR(100);
5555    l_message     VARCHAR2(250);
5556 
5557    BEGIN
5558      --
5559     l_procedure := g_package || 'store_Disability';
5560     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5561 
5562     IF g_debug THEN
5563       pay_in_utils.trace('**************************************************','********************');
5564       pay_in_utils.trace('Disease Entry ID: ', p_disease_entry_id);
5565       pay_in_utils.trace('Disability _type: ', p_disability_type);
5566       pay_in_utils.trace('Disability Percentage: ',p_disability_percentage);
5567       pay_in_utils.trace('Treatment Amount: ' , p_treatment_amount);
5568       pay_in_utils.trace('**************************************************','********************');
5569     END IF;
5570 
5571 pay_in_utils.set_location(g_debug,'Entering Section80dd', 20);
5572 
5573      --
5574         declare_section80dd
5575            (p_assignment_id => p_assignment_id
5576            ,p_disability_type => p_disability_type
5577            ,p_disability_percentage => p_disability_percentage
5578            ,p_treatment_amount => p_treatment_amount
5579            ,p_effective_date => l_effective_date
5580            ,p_element_entry_id => p_disease_entry_id
5581            ,p_warnings => l_warnings);
5582          --
5583 pay_in_utils.set_location(g_debug,'Leaving Section80dd', 20);
5584 
5585 pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
5586      --
5587    END store_Disability;
5588 
5589 
5590 
5591 
5592    PROCEDURE store_Donation
5593       (p_assignment_id      IN number
5594       ,p_effective_date     IN date     default null
5595       ,p_donation_entry_id  IN number   default null
5596       ,p_donation_type      IN varchar2 default null
5597       ,p_donation_amount    IN number   default null)
5598    IS
5599    l_procedure   VARCHAR(100);
5600 
5601    BEGIN
5602 
5603     l_procedure := g_package || 'store_Donation';
5604     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5605 
5606     IF g_debug THEN
5607        pay_in_utils.trace('**************************************************','********************');
5608        pay_in_utils.trace('Donation Entry ID: ', p_donation_entry_id);
5609        pay_in_utils.trace('Donation Type: ', p_donation_type);
5610        pay_in_utils.trace('Donation Amount: ', p_donation_amount);
5611        pay_in_utils.trace('**************************************************','********************');
5612     END IF;
5613 
5614 pay_in_utils.set_location(g_debug,'Entering store_Donation', 20);
5615      --
5616        declare_section80g
5617         (p_assignment_id => p_assignment_id
5618         ,p_donation_type => p_donation_type
5619         ,p_donation_amount => p_donation_amount
5620         ,p_effective_date => p_effective_date
5621         ,p_element_entry_id => p_donation_entry_id
5622         ,p_warnings => l_warnings);
5623        --
5624 pay_in_utils.set_location(g_debug,'Leaving store_Donation', 20);
5625 
5626 pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
5627      --
5628    END store_Donation;
5629 
5630 
5631 
5632    PROCEDURE store_LIC
5633       (p_assignment_id   IN number
5634       ,p_effective_date  IN date default null
5635       ,p_lic_entry_id    IN number default null
5636       ,p_premium_paid    IN number default null
5637       ,p_sum_assured     IN number default null)
5638    IS
5639    l_procedure   VARCHAR(100);
5640    l_message     VARCHAR2(250);
5641 
5642    BEGIN
5643 
5644     l_procedure := g_package || 'store_LIC';
5645     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5646 
5647     IF g_debug THEN
5648        pay_in_utils.trace('**************************************************','********************');
5649        pay_in_utils.trace('LIC Entry ID: ' , p_lic_entry_id);
5650        pay_in_utils.trace('Premium Paid: ' , p_premium_paid);
5651        pay_in_utils.trace('Sum Assured: '  , p_sum_assured);
5652       pay_in_utils.trace('**************************************************','********************');
5653     END IF;
5654      --
5655        pay_in_utils.set_location(g_debug,'Entering store_LIC', 20);
5656 
5657        declare_life_insurance_premium
5658          (p_assignment_id => p_assignment_id
5659          ,p_premium_paid => p_premium_paid
5660          ,p_sum_assured => p_sum_assured
5661          ,p_effective_date => p_effective_date
5662          ,p_element_entry_id => p_lic_entry_id
5663          ,p_warnings => l_warnings);
5664      --
5665      pay_in_utils.set_location(g_debug,'Leaving store_LIC', 30);
5666 
5667      pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
5668 
5669      --
5670    END store_LIC;
5671 
5672 
5673 
5674    PROCEDURE raise_message
5675       (p_token1       IN VARCHAR2
5676       ,p_token2       IN VARCHAR2)
5677    IS
5678    l_procedure   VARCHAR(100);
5679    l_message     VARCHAR2(250);
5680    BEGIN
5681 
5682     l_procedure := g_package || 'raise_message';
5683      pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5684 
5685       IF g_debug THEN
5686          pay_in_utils.trace('**************************************************','********************');
5687          pay_in_utils.trace('p_token1 : ' , p_token1);
5688          pay_in_utils.trace('p_token2 : ' , p_token2);
5689          pay_in_utils.trace('**************************************************','********************');
5690       END IF;
5691 
5692        IF (INSTR(p_token1,'PER_IN_INVESTMENT_80CCE')= 1)
5693        THEN
5694          hr_utility.set_message(800, 'PER_IN_INVESTMENT_80CCE');
5695          hr_utility.set_message_token('FROM', SUBSTR(p_token1,LENGTH('PER_IN_INVESTMENT_80CCE') + 1));
5696          hr_utility.set_message_token('TO', p_token2);
5697          hr_utility.raise_error;
5698       END IF;
5699 
5700     pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,40);
5701 
5702    END raise_message;
5703 
5704 
5705 
5706    --
5707 BEGIN
5708 
5709 
5710     l_procedure := g_package || 'web_adi_declare_tax';
5711     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
5712 
5713 
5714    IF g_debug THEN
5715       pay_in_utils.trace('**************************************************','********************');
5716       pay_in_utils.trace('p_assignment_id ',p_assignment_id);
5717       pay_in_utils.trace('p_effective_date ',p_effective_date);
5718       pay_in_utils.trace ('p_apr                          ',p_april);
5719       pay_in_utils.trace ('p_may                          ',p_may);
5720       pay_in_utils.trace ('p_jun                          ',p_june);
5721       pay_in_utils.trace ('p_jul                          ',p_july);
5722       pay_in_utils.trace ('p_aug                          ',p_august);
5723       pay_in_utils.trace ('p_sep                          ',p_september);
5724       pay_in_utils.trace ('p_oct                          ',p_october);
5725       pay_in_utils.trace ('p_nov                          ',p_november);
5726       pay_in_utils.trace ('p_dec                          ',p_december);
5727       pay_in_utils.trace ('p_jan                          ',p_january);
5728       pay_in_utils.trace ('p_feb                          ',p_february);
5729       pay_in_utils.trace ('p_mar                          ',p_march);
5730       pay_in_utils.trace('p_cce_ee_id1                    ',p_cce_ee_id1);
5731       pay_in_utils.trace('p_cce_component1                ',p_cce_component1);
5732       pay_in_utils.trace('p_investment_amount1            ',p_investment_amount1);
5733       pay_in_utils.trace('p_cce_ee_id2                    ',p_cce_ee_id2);
5734       pay_in_utils.trace('p_cce_component2                ',p_cce_component2);
5735       pay_in_utils.trace('p_investment_amount2            ',p_investment_amount2);
5736       pay_in_utils.trace('p_cce_ee_id3                    ',p_cce_ee_id3);
5737       pay_in_utils.trace('p_cce_component3                ',p_cce_component3);
5738       pay_in_utils.trace('p_investment_amount3            ',p_investment_amount3);
5739       pay_in_utils.trace('p_cce_ee_id4                    ',p_cce_ee_id4);
5740       pay_in_utils.trace('p_cce_component4                ',p_cce_component4);
5741       pay_in_utils.trace('p_investment_amount4            ',p_investment_amount4);
5742       pay_in_utils.trace('p_cce_ee_id5                    ',p_cce_ee_id5);
5743       pay_in_utils.trace('p_cce_component5                ',p_cce_component5);
5744       pay_in_utils.trace('p_investment_amount5            ',p_investment_amount6);
5745       pay_in_utils.trace('p_cce_ee_id6                    ',p_cce_ee_id6);
5746       pay_in_utils.trace('p_cce_component6                ',p_cce_component6);
5747       pay_in_utils.trace('p_investment_amount6            ',p_investment_amount6);
5748       pay_in_utils.trace('p_cce_ee_id7                    ',p_cce_ee_id7);
5749       pay_in_utils.trace('p_cce_component7                ',p_cce_component7);
5750       pay_in_utils.trace('p_investment_amount7            ',p_investment_amount7);
5751       pay_in_utils.trace('p_cce_ee_id8                    ',p_cce_ee_id8);
5752       pay_in_utils.trace('p_cce_component8                ',p_cce_component8);
5753       pay_in_utils.trace('p_investment_amount8            ',p_investment_amount8);
5754       pay_in_utils.trace('p_cce_ee_id9                    ',p_cce_ee_id9);
5755       pay_in_utils.trace('p_cce_component9                ',p_cce_component9);
5756       pay_in_utils.trace('p_investment_amount9            ',p_investment_amount9);
5757       pay_in_utils.trace('p_cce_ee_id10                    ',p_cce_ee_id10);
5758       pay_in_utils.trace('p_cce_component10                ',p_cce_component10);
5759       pay_in_utils.trace('p_investment_amount10            ',p_investment_amount10);
5760       pay_in_utils.trace('p_cce_ee_id11                    ',p_cce_ee_id11);
5761       pay_in_utils.trace('p_cce_component11                ',p_cce_component11);
5762       pay_in_utils.trace('p_investment_amount11            ',p_investment_amount11);
5763       pay_in_utils.trace('p_cce_ee_id12                    ',p_cce_ee_id12);
5764       pay_in_utils.trace('p_cce_component12                ',p_cce_component12);
5765       pay_in_utils.trace('p_investment_amount12            ',p_investment_amount12);
5766       pay_in_utils.trace('p_cce_ee_id13                    ',p_cce_ee_id13);
5767       pay_in_utils.trace('p_cce_component13                ',p_cce_component13);
5768       pay_in_utils.trace('p_investment_amount13            ',p_investment_amount13);
5769       pay_in_utils.trace('p_cce_ee_id14                    ',p_cce_ee_id14);
5770       pay_in_utils.trace('p_cce_component14                ',p_cce_component14);
5771       pay_in_utils.trace('p_investment_amount14            ',p_investment_amount14);
5772       pay_in_utils.trace('p_cce_ee_id15                    ',p_cce_ee_id15);
5773       pay_in_utils.trace('p_cce_component15                ',p_cce_component15);
5774       pay_in_utils.trace('p_investment_amount15            ',p_investment_amount15);
5775       pay_in_utils.trace('p_cce_ee_id16                    ',p_cce_ee_id16);
5776       pay_in_utils.trace('p_cce_component16                ',p_cce_component16);
5777       pay_in_utils.trace('p_investment_amount16            ',p_investment_amount16);
5778       pay_in_utils.trace('p_cce_ee_id17                    ',p_cce_ee_id17);
5779       pay_in_utils.trace('p_cce_component17                ',p_cce_component17);
5780       pay_in_utils.trace('p_investment_amount17            ',p_investment_amount17);
5781       pay_in_utils.trace('p_cce_ee_id18                    ',p_cce_ee_id18);
5782       pay_in_utils.trace('p_cce_component18                ',p_cce_component18);
5783       pay_in_utils.trace('p_investment_amount18            ',p_investment_amount18);
5784       pay_in_utils.trace('p_cce_ee_id19                    ',p_cce_ee_id19);
5785       pay_in_utils.trace('p_cce_component19                ',p_cce_component19);
5786       pay_in_utils.trace('p_investment_amount19            ',p_investment_amount19);
5787       pay_in_utils.trace('p_cce_ee_id20                    ',p_cce_ee_id20);
5788       pay_in_utils.trace('p_cce_component20                ',p_cce_component20);
5789       pay_in_utils.trace('p_investment_amount20            ',p_investment_amount20);
5790       pay_in_utils.trace('p_cce_ee_id21                    ',p_cce_ee_id21);
5791       pay_in_utils.trace('p_cce_component21                ',p_cce_component21);
5792       pay_in_utils.trace('p_investment_amount21            ',p_investment_amount21);
5793       pay_in_utils.trace('p_higher_education_loan         ',p_higher_education_loan);
5794       pay_in_utils.trace('p_donation_for_research         ',p_donation_for_research);
5795       pay_in_utils.trace('p_claim_exemption_sec_80gg      ',p_claim_exemption_sec_80gg);
5796       pay_in_utils.trace('p_premium_amount                ',p_premium_amount);
5797       pay_in_utils.trace('p_premium_covers_sc             ',p_premium_covers_sc);
5798       pay_in_utils.trace('p_treatment_amount              ',p_treatment_amount);
5799       pay_in_utils.trace('p_treatment_covers_sc           ',p_treatment_covers_sc);
5800       pay_in_utils.trace('p_income_from_house_property    ',p_income_from_house_property);
5801       pay_in_utils.trace('p_profit_and_gain               ',p_profit_and_gain);
5802       pay_in_utils.trace('p_long_term_capital_gain        ',p_long_term_capital_gain);
5803       pay_in_utils.trace('p_short_term_capital_gain       ',p_short_term_capital_gain);
5804       pay_in_utils.trace('p_income_from_other_sources     ',p_income_from_other_sources);
5805       pay_in_utils.trace('p_tds_paid                      ',p_tds_paid);
5806       pay_in_utils.trace('p_disease_entry_id1             ',p_disease_entry_id1);
5807       pay_in_utils.trace('p_disability_type1              ',p_disability_type1);
5808       pay_in_utils.trace('p_disability_percentage1        ',p_disability_percentage1);
5809       pay_in_utils.trace('p_treatment_amount1             ',p_treatment_amount1);
5810       pay_in_utils.trace('p_disease_entry_id2             ',p_disease_entry_id2);
5811       pay_in_utils.trace('p_disability_type2              ',p_disability_type2);
5812       pay_in_utils.trace('p_disability_percentage2        ',p_disability_percentage2 );
5813       pay_in_utils.trace('p_treatment_amount2             ',p_treatment_amount2);
5814       pay_in_utils.trace('p_donation_entry_id1            ',p_donation_entry_id1);
5815       pay_in_utils.trace('p_donation_type1                ',p_donation_type1);
5816       pay_in_utils.trace('p_donation_amount1              ',p_donation_amount1);
5817       pay_in_utils.trace('p_donation_entry_id2            ',p_donation_amount1);
5818       pay_in_utils.trace('p_donation_type2                ',p_donation_type2);
5819       pay_in_utils.trace('p_donation_amount2              ',p_donation_amount2);
5820       pay_in_utils.trace('p_lic_entry_id1                 ',p_lic_entry_id1);
5821       pay_in_utils.trace('p_premium_paid1                 ',p_premium_paid1);
5822       pay_in_utils.trace('p_sum_assured1                  ',p_sum_assured1);
5823       pay_in_utils.trace('p_lic_entry_id2                 ',p_lic_entry_id2);
5824       pay_in_utils.trace('p_premium_paid2                 ',p_premium_paid2);
5825       pay_in_utils.trace('p_sum_assured2                  ',p_sum_assured2);
5826       pay_in_utils.trace('p_lic_entry_id3                 ',p_lic_entry_id3);
5827       pay_in_utils.trace('p_premium_paid3                 ',p_premium_paid3);
5828       pay_in_utils.trace('p_sum_assured3                  ',p_sum_assured3);
5829       pay_in_utils.trace('p_lic_entry_id4                 ',p_lic_entry_id4);
5830       pay_in_utils.trace('p_premium_paid4                 ',p_premium_paid4);
5831       pay_in_utils.trace('p_sum_assured4                  ',p_sum_assured4);
5832       pay_in_utils.trace('p_lic_entry_id5                 ',p_lic_entry_id5);
5833       pay_in_utils.trace('p_premium_paid5                 ',p_premium_paid5);
5834       pay_in_utils.trace('p_sum_assured5                  ',p_sum_assured5);
5835       pay_in_utils.trace('p_comment_text                  ',p_comment_text);
5836       pay_in_utils.trace('**************************************************','********************');
5837    END IF ;
5838 
5839    l_declare_warn := false;
5840    l_approved_flag := 'Y';
5841    --
5842    --
5843    l_effective_date := pay_in_utils.get_effective_date(p_effective_date);
5844    --
5845    declare_house_rent
5846          (p_assignment_id  => p_assignment_id
5847          ,p_effective_date => l_effective_date
5848          ,p_apr            => p_april
5849          ,p_may            => p_may
5850          ,p_jun            => p_june
5851          ,p_jul            => p_july
5852          ,p_aug            => p_august
5853          ,p_sep            => p_september
5854          ,p_oct            => p_october
5855          ,p_nov            => p_november
5856          ,p_dec            => p_december
5857          ,p_jan            => p_january
5858          ,p_feb            => p_february
5859          ,p_mar            => p_march
5860          ,p_warnings       => l_declare_warn);
5861     --
5862     pay_in_utils.set_location(g_debug, l_procedure, 20);
5863     --
5864 /*    declare_chapter6a
5865        (p_assignment_id                   => p_assignment_id
5866        ,p_effective_date                  => l_effective_date
5867        ,p_pension_fund_80ccc              => p_pension_fund
5868        ,p_medical_insurance_prem_80d      => p_premium_amount
5869        ,p_sec_80ddb_senior_citizen        => p_premium_covers_sc
5870        ,p_disease_treatment_80ddb         => p_treatment_amount
5871        ,p_sec_80d_senior_citizen          => p_treatment_covers_sc
5872        ,p_higher_education_loan_80e       => p_higher_education_loan
5873        ,p_claim_exemp_under_sec_80gg      => p_claim_exemption_sec_80gg
5874        ,p_donation_for_research_80gga     => p_donation_for_research
5875        ,p_int_on_gen_investment_80L       => p_general_investments
5876        ,p_int_on_securities_80L           => p_securities
5877        ,p_warnings                        => l_declare_warn);
5878 
5879     --
5880     pay_in_utils.set_location(g_debug, l_procedure, 30);
5881     --
5882     declare_section88
5883        (p_assignment_id                  => p_assignment_id
5884        ,p_effective_date                 => l_effective_date
5885        ,p_deferred_annuity               => p_deferred_annuity
5886        ,p_public_provident_fund          => p_public_provident_fund
5887        ,p_post_office_savings_scheme     => p_post_office_savings
5888        ,p_deposit_in_nsc_vi_issue        => p_nsc_6_Issue
5889        ,p_deposit_in_nsc_viii_issue      => p_nsc_8_Issue
5890        ,p_interest_on_nsc_reinvested     => p_interest_on_nsc
5891        ,p_house_loan_repayment           => p_housing_loan_principal
5892        ,p_notified_mutual_fund_or_uti    => p_notified_mutual_fund
5893        ,p_national_housing_bank_scheme   => p_national_housing_bank
5894        ,p_unit_linked_insurance_plan     => p_unit_linked_insurance
5895        ,p_notified_annuity_plan          => p_notified_annuity_plan
5896        ,p_notified_pension_fund          => p_notified_pension_fund
5897        ,p_public_sector_company_scheme   => p_public_sector_company
5898        ,p_approved_superannuation_fund   => p_approved_superannuation
5899        ,p_infrastructure_bond            => p_infrastructure_bonds
5900        ,p_warnings                       => l_declare_warn);
5901     --
5902 
5903     pay_in_utils.set_location(g_debug, l_procedure, 40);
5904     --
5905     declare_tuition_fee
5906        (p_assignment_id           => p_assignment_id
5907        ,p_effective_date          => l_effective_date
5908        ,p_tuition_fee_for_child_1 => p_tuition_fee_for_first_child
5909        ,p_tuition_fee_for_child_2 => p_tuition_fee_for_second_child
5910        ,p_warnings                => l_declare_warn);
5911     --
5912     pay_in_utils.set_location(g_debug, l_procedure, 50);
5913     */
5914     --
5915     declare_other_income
5916        (p_assignment_id                 => p_assignment_id
5917        ,p_effective_date                => l_effective_date
5918        ,p_income_from_house_property    => p_income_from_house_property
5919        ,p_profit_and_gain_from_busines  => p_profit_and_gain
5920        ,p_long_term_capital_gain        => p_long_term_capital_gain
5921        ,p_short_term_capital_gain       => p_short_term_capital_gain
5922        ,p_income_from_any_other_source  => p_income_from_other_sources
5923        ,p_tds_paid_on_other_income      => p_tds_paid
5924        ,p_warnings                      => l_declare_warn);
5925     --
5926     pay_in_utils.set_location(g_debug, l_procedure, 60);
5927     --
5928 
5929     declare_section80e
5930           (p_assignment_id              => p_assignment_id
5931 	  ,p_effective_date             => l_effective_date
5932           ,p_higher_education_loan_80e  => p_higher_education_loan
5933           ,p_warnings                   => l_declare_warn);
5934 
5935 
5936     --
5937     pay_in_utils.set_location(g_debug, l_procedure, 70);
5938     --
5939 
5940     declare_section80gga
5941           (p_assignment_id               => p_assignment_id
5942 	  ,p_effective_date              => l_effective_date
5943           ,p_donation_for_research_80gga => p_donation_for_research
5944           ,p_warnings                    => l_declare_warn);
5945 
5946     --
5947     pay_in_utils.set_location(g_debug, l_procedure, 80);
5948     --
5949     declare_section80gg
5950           (p_assignment_id              => p_assignment_id
5951 	  ,p_effective_date             => l_effective_date
5952           ,p_claim_exemp_under_sec_80gg => p_claim_exemption_sec_80gg
5953           ,p_warnings                   => l_declare_warn);
5954     --
5955     pay_in_utils.set_location(g_debug, l_procedure, 90);
5956     --
5957     declare_section80d
5958           (p_assignment_id               => p_assignment_id
5959 	  ,p_effective_date              => l_effective_date
5960           ,p_medical_insurance_prem_80d  => p_premium_amount
5961 	  ,p_sec_80d_senior_citizen      => p_premium_covers_sc
5962 	  ,p_med_par_insurance_prem_80d  => p_parent_premium
5963 	  ,p_sec_80d_par_senior_citizen  => p_parent_sc
5964           ,p_warnings                    => l_declare_warn);
5965     --
5966     pay_in_utils.set_location(g_debug, l_procedure, 100);
5967     --
5968     declare_section80ddb
5969           (p_assignment_id               => p_assignment_id
5970 	  ,p_effective_date              => l_effective_date
5971           ,p_disease_treatment_80ddb     => p_treatment_amount
5972 	  ,p_sec_80ddb_senior_citizen    => p_treatment_covers_sc
5973           ,p_warnings                    => l_declare_warn);
5974     --
5975     pay_in_utils.set_location(g_debug, l_procedure, 110);
5976     --
5977 
5978     --
5979     pay_in_utils.set_location(g_debug, l_procedure, 120);
5980     --
5981     store_Disability(p_assignment_id, l_effective_date, p_disease_entry_id1, p_disability_type1, p_disability_percentage1, p_treatment_amount1);
5982     store_Disability(p_assignment_id, l_effective_date, p_disease_entry_id2, p_disability_type2, p_disability_percentage2, p_treatment_amount2);
5983 
5984     --
5985     pay_in_utils.set_location(g_debug, l_procedure, 130);
5986     --
5987     store_Donation(p_assignment_id, l_effective_date, p_donation_entry_id1, p_donation_type1, p_donation_amount1);
5988     store_Donation(p_assignment_id, l_effective_date, p_donation_entry_id2, p_donation_type2, p_donation_amount2);
5989     --
5990     pay_in_utils.set_location(g_debug, l_procedure, 140);
5991     --
5992 
5993     store_LIC(p_assignment_id, l_effective_date, p_lic_entry_id1, p_premium_paid1, p_sum_assured1);
5994     store_LIC(p_assignment_id, l_effective_date, p_lic_entry_id2, p_premium_paid2, p_sum_assured2);
5995     store_LIC(p_assignment_id, l_effective_date, p_lic_entry_id3, p_premium_paid3, p_sum_assured3);
5996     store_LIC(p_assignment_id, l_effective_date, p_lic_entry_id4, p_premium_paid4, p_sum_assured4);
5997     store_LIC(p_assignment_id, l_effective_date, p_lic_entry_id5, p_premium_paid5, p_sum_assured5);
5998     --
5999     pay_in_utils.set_location(g_debug, l_procedure, 150);
6000     --
6001     declare_section80cce(p_assignment_id, p_cce_component1, p_investment_amount1, p_effective_date, p_cce_ee_id1, l_warnings);
6002     raise_message(l_warnings,p_cce_component1);
6003     declare_section80cce(p_assignment_id, p_cce_component2, p_investment_amount2, p_effective_date, p_cce_ee_id2, l_warnings);
6004     raise_message(l_warnings,p_cce_component2);
6005     declare_section80cce(p_assignment_id, p_cce_component3, p_investment_amount3, p_effective_date, p_cce_ee_id3, l_warnings);
6006     raise_message(l_warnings,p_cce_component3);
6007     declare_section80cce(p_assignment_id, p_cce_component4, p_investment_amount4, p_effective_date, p_cce_ee_id4, l_warnings);
6008     raise_message(l_warnings,p_cce_component4);
6009     declare_section80cce(p_assignment_id, p_cce_component5, p_investment_amount5, p_effective_date, p_cce_ee_id5, l_warnings);
6010     raise_message(l_warnings,p_cce_component5);
6011     declare_section80cce(p_assignment_id, p_cce_component6, p_investment_amount6, p_effective_date, p_cce_ee_id6, l_warnings);
6012     raise_message(l_warnings,p_cce_component6);
6013     declare_section80cce(p_assignment_id, p_cce_component7, p_investment_amount7, p_effective_date, p_cce_ee_id7, l_warnings);
6014     raise_message(l_warnings,p_cce_component7);
6015     declare_section80cce(p_assignment_id, p_cce_component8, p_investment_amount8, p_effective_date, p_cce_ee_id8, l_warnings);
6016     raise_message(l_warnings,p_cce_component8);
6017     declare_section80cce(p_assignment_id, p_cce_component9, p_investment_amount9, p_effective_date, p_cce_ee_id9, l_warnings);
6018     raise_message(l_warnings,p_cce_component9);
6019     declare_section80cce(p_assignment_id, p_cce_component10, p_investment_amount10, p_effective_date, p_cce_ee_id10, l_warnings);
6020     raise_message(l_warnings,p_cce_component10);
6021     declare_section80cce(p_assignment_id, p_cce_component11, p_investment_amount11, p_effective_date, p_cce_ee_id11, l_warnings);
6022     raise_message(l_warnings,p_cce_component11);
6023     declare_section80cce(p_assignment_id, p_cce_component12, p_investment_amount12, p_effective_date, p_cce_ee_id12, l_warnings);
6024     raise_message(l_warnings,p_cce_component12);
6025     declare_section80cce(p_assignment_id, p_cce_component13, p_investment_amount13, p_effective_date, p_cce_ee_id13, l_warnings);
6026     raise_message(l_warnings,p_cce_component13);
6027     declare_section80cce(p_assignment_id, p_cce_component14, p_investment_amount14, p_effective_date, p_cce_ee_id14, l_warnings);
6028     raise_message(l_warnings,p_cce_component14);
6029     declare_section80cce(p_assignment_id, p_cce_component15, p_investment_amount15, p_effective_date, p_cce_ee_id15, l_warnings);
6030     raise_message(l_warnings,p_cce_component15);
6031     declare_section80cce(p_assignment_id, p_cce_component16, p_investment_amount16, p_effective_date, p_cce_ee_id16, l_warnings);
6032     raise_message(l_warnings,p_cce_component16);
6033     declare_section80cce(p_assignment_id, p_cce_component17, p_investment_amount17, p_effective_date, p_cce_ee_id17, l_warnings);
6034     raise_message(l_warnings,p_cce_component17);
6035     declare_section80cce(p_assignment_id, p_cce_component18, p_investment_amount18, p_effective_date, p_cce_ee_id18, l_warnings);
6036     raise_message(l_warnings,p_cce_component18);
6037     declare_section80cce(p_assignment_id, p_cce_component19, p_investment_amount19, p_effective_date, p_cce_ee_id19, l_warnings);
6038     raise_message(l_warnings,p_cce_component19);
6039     declare_section80cce(p_assignment_id, p_cce_component20, p_investment_amount20, p_effective_date, p_cce_ee_id20, l_warnings);
6040     raise_message(l_warnings,p_cce_component20);
6041     declare_section80cce(p_assignment_id, p_cce_component21, p_investment_amount21, p_effective_date, p_cce_ee_id21, l_warnings);
6042     raise_message(l_warnings,p_cce_component21);
6043 
6044     l_count := 0;
6045     -- Added as a part of bug fix 4774108
6046     OPEN  csr_element_type_id('Deduction under Section 80DD');
6047     FETCH csr_element_type_id INTO l_element_type_id;
6048     CLOSE csr_element_type_id;
6049 
6050     l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6051                                                          ,l_effective_date
6052                                                          ,l_element_type_id
6053                                                          );
6054 
6055     OPEN csr_number_of_entries(p_assignment_id, 'Deduction under Section 80DD', l_effective_date,l_element_link_id);
6056     FETCH csr_number_of_entries INTO l_count;
6057     CLOSE csr_number_of_entries;
6058     --
6059     IF l_count > 2 THEN
6060       --
6061       l_approved_flag := 'N';
6062       --
6063     END IF;
6064     --
6065     pay_in_utils.set_location(g_debug, l_procedure, 160);
6066     --
6067     -- Added as a part of bug fix 4774108
6068     OPEN  csr_element_type_id('Deduction under Section 80G');
6069     FETCH csr_element_type_id INTO l_element_type_id;
6070     CLOSE csr_element_type_id;
6071 
6072     l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6073                                                          ,l_effective_date
6074                                                          ,l_element_type_id
6075                                                          );
6076 
6077     l_count := 0;
6078     OPEN csr_number_of_entries(p_assignment_id, 'Deduction under Section 80G',l_effective_date,l_element_link_id);
6079     FETCH csr_number_of_entries INTO l_count;
6080     CLOSE csr_number_of_entries;
6081     --
6082     IF l_count > 2 THEN
6083       --
6084       l_approved_flag := 'N';
6085       --
6086     END IF;
6087     --
6088     pay_in_utils.set_location(g_debug, l_procedure, 170);
6089     --
6090     l_count := 0;
6091     -- Added as a part of bug fix 4774108
6092     OPEN  csr_element_type_id('Life Insurance Premium');
6093     FETCH csr_element_type_id INTO l_element_type_id;
6094     CLOSE csr_element_type_id;
6095 
6096     l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6097                                                          ,l_effective_date
6098                                                          ,l_element_type_id
6099                                                          );
6100 
6101     OPEN csr_number_of_entries(p_assignment_id, 'Life Insurance Premium', l_effective_date,l_element_link_id);
6102     FETCH csr_number_of_entries INTO l_count;
6103     CLOSE csr_number_of_entries;
6104     --
6105     IF l_count > 5 THEN
6106       --
6107       l_approved_flag := 'N';
6108       --
6109     END IF;
6110     --
6111     pay_in_utils.set_location(g_debug, l_procedure, 180);
6112     --
6113     -- Added as a part of bug fix 4774108
6114     OPEN  csr_element_type_id('Deduction under Section 80CCE');
6115     FETCH csr_element_type_id INTO l_element_type_id;
6116     CLOSE csr_element_type_id;
6117 
6118     l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6119                                                          ,l_effective_date
6120                                                          ,l_element_type_id
6121                                                          );
6122 
6123     l_count := 0;
6124     OPEN csr_number_of_entries(p_assignment_id,'Deduction under Section 80CCE',l_effective_date,l_element_link_id);
6125     FETCH csr_number_of_entries INTO l_count;
6126     CLOSE csr_number_of_entries;
6127     --
6128     IF l_count > 19 THEN
6129       --
6130       l_approved_flag := 'N';
6131       --
6132     END IF;
6133     --
6134     pay_in_utils.set_location(g_debug, l_procedure, 190);
6135 
6136     -- Added as a part of bug fix 4774108
6137     OPEN  csr_element_type_id('Pension Fund 80CCC');
6138     FETCH csr_element_type_id INTO l_element_type_id;
6139     CLOSE csr_element_type_id;
6140 
6141     l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6142                                                          ,l_effective_date
6143                                                          ,l_element_type_id
6144                                                          );
6145 
6146     l_count := 0;
6147     OPEN csr_number_of_entries(p_assignment_id, 'Pension Fund 80CCC', l_effective_date,l_element_link_id);
6148     FETCH csr_number_of_entries INTO l_count;
6149     CLOSE csr_number_of_entries;
6150     --
6151     IF l_count > 1 THEN
6152       --
6153       l_approved_flag := 'N';
6154       --
6155     END IF;
6156     --
6157     pay_in_utils.set_location(g_debug, l_procedure, 200);
6158 
6159     l_count := 0;
6160     -- Added as a part of bug fix 4774108
6161     OPEN  csr_element_type_id('Deferred Annuity');
6162     FETCH csr_element_type_id INTO l_element_type_id;
6163     CLOSE csr_element_type_id;
6164 
6165     l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6166                                                          ,l_effective_date
6167                                                          ,l_element_type_id
6168                                                          );
6169 
6170     OPEN csr_number_of_entries(p_assignment_id, 'Deferred Annuity', l_effective_date,l_element_link_id);
6171     FETCH csr_number_of_entries INTO l_count;
6172     CLOSE csr_number_of_entries;
6173     --
6174     IF l_count > 1 THEN
6175       --
6176       l_approved_flag := 'N';
6177       --
6178     END IF;
6179 
6180     l_count := 0;
6181     OPEN  csr_element_type_id('Senior Citizens Savings Scheme');
6182     FETCH csr_element_type_id INTO l_element_type_id;
6183     CLOSE csr_element_type_id;
6184 
6185     l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6186                                                          ,l_effective_date
6187                                                          ,l_element_type_id
6188                                                          );
6189 
6190     OPEN csr_number_of_entries(p_assignment_id, 'Senior Citizens Savings Scheme', l_effective_date,l_element_link_id);
6191     FETCH csr_number_of_entries INTO l_count;
6192     CLOSE csr_number_of_entries;
6193     --
6194     IF l_count > 1 THEN
6195       --
6196       l_approved_flag := 'N';
6197       --
6198     END IF;
6199     --
6200     pay_in_utils.set_location(g_debug, l_procedure, 210);
6201     --
6202     approve_declaration
6203       (p_assignment_id  => p_assignment_id
6204       ,p_approval_flag  => l_approved_flag
6205       ,p_effective_date => l_effective_date
6206       ,p_comment_text   => p_comment_text);
6207     --
6208    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,220);
6209 
6210 END web_adi_declare_tax;
6211 
6212 --------------------------------------------------------------------------
6213 --                                                                      --
6214 -- Name           : GET_VALUE                                           --
6215 -- Type           : PROCEDURE                                           --
6216 -- Access         : Public                                              --
6217 -- Description    : The procedure is responsible for getting values     --
6218 --                  of the input values in case of multiple element     --
6219 --                  of an element in tax declaration                    --
6220 --                                                                      --
6221 -- Parameters     :                                                     --
6222 --             IN : p_assignment_id  NUMBER                             --
6223 --                  p_index          NUMBER                             --
6224 --                  p_element_name   VARCHAR2                           --
6225 --                  p_input_name     VARCHAR2                           --
6226 --                  p_effective_date DATE                               --
6227 --                                                                      --
6228 -- Change History :                                                     --
6229 --------------------------------------------------------------------------
6230 -- Rev#  Date        Userid      Description                            --
6231 --------------------------------------------------------------------------
6232 -- 1.1  20-Jun-2005  abhjain     Added changes after stat update        --
6233 --------------------------------------------------------------------------
6234 FUNCTION get_value
6235         (p_assignment_id   IN    number
6236         ,p_index           IN    number
6237         ,p_element_name    IN    varchar2
6238         ,p_input_name      IN    varchar2
6239         ,p_effective_date  IN    date
6240         )
6241 RETURN VARCHAR2
6242 IS
6243    --
6244    CURSOR csr_get_80dd_values(p_element_link_id NUMBER)
6245    IS
6246    SELECT entries.element_entry_id entry_id
6247         , value1.screen_entry_value Disability_Type
6248         , value2.screen_entry_value Treatment_Amount
6249         , value3.screen_entry_value Disability_Percentage
6250      FROM per_assignments_f assgn
6251         , pay_element_links_f link
6252         , pay_element_types_f types
6253         , pay_element_entries_f entries
6254         , pay_element_entry_values_f value1
6255         , pay_input_values_f inputs1
6256         , pay_element_entry_values_f value2
6257         , pay_input_values_f inputs2
6258         , pay_element_entry_values_f value3
6259         , pay_input_values_f inputs3
6260     WHERE assgn.assignment_id = p_assignment_id
6261       AND link.element_link_id = p_element_link_id-- Changed for bug 4774108
6262       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
6263       AND link.business_group_id = assgn.business_group_id
6264       AND link.element_type_id = types.element_type_id
6265       AND types.element_name = 'Deduction under Section 80DD'
6266       AND entries.element_type_id = types.element_type_id
6267       AND entries.element_link_id = link.element_link_id
6268       AND entries.assignment_id = assgn.assignment_id
6269       AND value1.element_entry_id =  entries.element_entry_id
6270       AND inputs1.input_value_id = value1.input_value_id
6271       AND inputs1.element_type_id = types.element_type_id
6272       AND inputs1.name = 'Disability Type'
6273       AND value2.element_entry_id =  entries.element_entry_id
6274       AND inputs2.input_value_id = value2.input_value_id
6275       AND inputs2.element_type_id = types.element_type_id
6276       AND inputs2.name = 'Treatment Amount'
6277       AND value3.element_entry_id =  entries.element_entry_id
6278       AND inputs3.input_value_id = value3.input_value_id
6279       AND inputs3.element_type_id = types.element_type_id
6280       AND inputs3.name = 'Disability Percentage'
6281       AND p_effective_date BETWEEN assgn.effective_start_date
6282                                AND assgn.effective_end_date
6283       AND p_effective_date BETWEEN link.effective_start_date
6284                                AND link.effective_end_date
6285       AND p_effective_date BETWEEN types.effective_start_date
6286                                AND types.effective_end_date
6287       AND p_effective_date BETWEEN entries.effective_start_date
6288                                AND entries.effective_end_date
6289       AND p_effective_date BETWEEN inputs1.effective_start_date
6290                                AND inputs1.effective_end_date
6291       AND p_effective_date BETWEEN value1.effective_start_date
6292                                AND value1.effective_end_date
6293       AND p_effective_date BETWEEN inputs2.effective_start_date
6294                                AND inputs2.effective_end_date
6295       AND p_effective_date BETWEEN value2.effective_start_date
6296                                AND value2.effective_end_date
6297       AND p_effective_date BETWEEN inputs3.effective_start_date
6298                                AND inputs3.effective_end_date
6299       AND p_effective_date BETWEEN value3.effective_start_date
6300                                AND value3.effective_end_date;
6301    --
6302    CURSOR csr_get_80g_values(p_element_link_id NUMBER)
6303    IS
6304    SELECT entries.element_entry_id entry_id
6305         , value1.screen_entry_value Donation_Type
6306         , value2.screen_entry_value Donation_Amount
6307      FROM per_assignments_f assgn
6308         , pay_element_links_f link
6309         , pay_element_types_f types
6310         , pay_element_entries_f entries
6311         , pay_element_entry_values_f value1
6312         , pay_input_values_f inputs1
6313         , pay_element_entry_values_f value2
6314         , pay_input_values_f inputs2
6315     WHERE assgn.assignment_id = p_assignment_id
6316       AND link.element_link_id = p_element_link_id
6317       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
6318       AND link.business_group_id = assgn.business_group_id
6319       AND link.element_type_id = types.element_type_id
6320       AND types.element_name = 'Deduction under Section 80G'
6321       AND entries.element_type_id = types.element_type_id
6322       AND entries.element_link_id = link.element_link_id
6323       AND entries.assignment_id = assgn.assignment_id
6324       AND value1.element_entry_id =  entries.element_entry_id
6325       AND inputs1.input_value_id = value1.input_value_id
6326       AND inputs1.element_type_id = types.element_type_id
6327       AND inputs1.name = 'Donation Type'
6328       AND value2.element_entry_id =  entries.element_entry_id
6329       AND inputs2.input_value_id = value2.input_value_id
6330       AND inputs2.element_type_id = types.element_type_id
6331       AND inputs2.name = 'Donation Amount'
6332       AND p_effective_date BETWEEN assgn.effective_start_date
6333                                AND assgn.effective_end_date
6334       AND p_effective_date BETWEEN link.effective_start_date
6335                                AND link.effective_end_date
6336       AND p_effective_date BETWEEN types.effective_start_date
6337                                AND types.effective_end_date
6338       AND p_effective_date BETWEEN entries.effective_start_date
6339                                AND entries.effective_end_date
6340       AND p_effective_date BETWEEN inputs1.effective_start_date
6341                                AND inputs1.effective_end_date
6342       AND p_effective_date BETWEEN value1.effective_start_date
6343                                AND value1.effective_end_date
6344       AND p_effective_date BETWEEN inputs2.effective_start_date
6345                                AND inputs2.effective_end_date
6346       AND p_effective_date BETWEEN value2.effective_start_date
6347                                AND value2.effective_end_date;
6348    --
6349    CURSOR csr_get_insurace_values(p_element_link_id     NUMBER)
6350    IS
6351    SELECT entries.element_entry_id entry_id
6352         , value1.screen_entry_value Premium_Paid
6353         , value2.screen_entry_value Sum_Assured
6354      FROM per_assignments_f assgn
6355         , pay_element_links_f link
6356         , pay_element_types_f types
6357         , pay_element_entries_f entries
6358         , pay_element_entry_values_f value1
6359         , pay_input_values_f inputs1
6360         , pay_element_entry_values_f value2
6361         , pay_input_values_f inputs2
6362     WHERE assgn.assignment_id = p_assignment_id
6363       AND link.element_link_id = p_element_link_id
6364       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
6365       AND link.business_group_id = assgn.business_group_id
6366       AND link.element_type_id = types.element_type_id
6367       AND types.element_name = 'Life Insurance Premium'
6368       AND entries.element_type_id = types.element_type_id
6369       AND entries.element_link_id = link.element_link_id
6370       AND entries.assignment_id = assgn.assignment_id
6371       AND value1.element_entry_id =  entries.element_entry_id
6372       AND inputs1.input_value_id = value1.input_value_id
6373       AND inputs1.element_type_id = types.element_type_id
6374       AND inputs1.name = 'Premium Paid'
6375       AND value2.element_entry_id =  entries.element_entry_id
6376       AND inputs2.input_value_id = value2.input_value_id
6377       AND inputs2.element_type_id = types.element_type_id
6378       AND inputs2.name = 'Sum Assured'
6379       AND p_effective_date BETWEEN assgn.effective_start_date
6380                                AND assgn.effective_end_date
6381       AND p_effective_date BETWEEN link.effective_start_date
6382                                AND link.effective_end_date
6383       AND p_effective_date BETWEEN types.effective_start_date
6384                                AND types.effective_end_date
6385       AND p_effective_date BETWEEN entries.effective_start_date
6386                                AND entries.effective_end_date
6387       AND p_effective_date BETWEEN inputs1.effective_start_date
6388                                AND inputs1.effective_end_date
6389       AND p_effective_date BETWEEN value1.effective_start_date
6390                                AND value1.effective_end_date
6391       AND p_effective_date BETWEEN inputs2.effective_start_date
6392                                AND inputs2.effective_end_date
6393       AND p_effective_date BETWEEN value2.effective_start_date
6394                                AND value2.effective_end_date;
6395    --
6396    CURSOR csr_get_80cce_values(p_element_name           VARCHAR2
6397                               ,p_element_link_id        NUMBER
6398                               )
6399    IS
6400    SELECT entries.element_entry_id  entry_id
6401         , value1.screen_entry_value Investment_Amount
6402         , value2.screen_entry_value Component_Name
6403      FROM per_assignments_f assgn
6404         , pay_element_links_f link
6405         , pay_element_types_f types
6406         , pay_element_entries_f entries
6407         , pay_element_entry_values_f value1
6408         , pay_input_values_f inputs1
6409         , pay_element_entry_values_f value2
6410         , pay_input_values_f inputs2
6411     WHERE assgn.assignment_id = p_assignment_id
6412       AND link.element_link_id = p_element_link_id
6413       AND (types.processing_type = 'R' OR assgn.payroll_id IS NOT NULL)
6414       AND link.business_group_id = assgn.business_group_id
6415       AND link.element_type_id = types.element_type_id
6416       AND types.element_name = p_element_name
6417       AND entries.element_type_id = types.element_type_id
6418       AND entries.element_link_id = link.element_link_id
6419       AND entries.assignment_id = assgn.assignment_id
6420       AND value1.element_entry_id =  entries.element_entry_id
6421       AND inputs1.input_value_id = value1.input_value_id
6422       AND inputs1.element_type_id = types.element_type_id
6423       AND inputs1.name = 'Investment Amount'
6424       AND value2.element_entry_id =  entries.element_entry_id
6425       AND inputs2.input_value_id = value2.input_value_id
6426       AND inputs2.element_type_id = types.element_type_id
6427       AND inputs2.name = 'Component Name'
6428       AND p_effective_date BETWEEN assgn.effective_start_date
6429                                AND assgn.effective_end_date
6430       AND p_effective_date BETWEEN link.effective_start_date
6431                                AND link.effective_end_date
6432       AND p_effective_date BETWEEN types.effective_start_date
6433                                AND types.effective_end_date
6434       AND p_effective_date BETWEEN entries.effective_start_date
6435                                AND entries.effective_end_date
6436       AND p_effective_date BETWEEN inputs1.effective_start_date
6437                                AND inputs1.effective_end_date
6438       AND p_effective_date BETWEEN value1.effective_start_date
6439                                AND value1.effective_end_date
6440       AND p_effective_date BETWEEN inputs2.effective_start_date
6441                                AND inputs2.effective_end_date
6442       AND p_effective_date BETWEEN value2.effective_start_date
6443                                AND value2.effective_end_date;
6444    --
6445    --Added as a part of bug fix 4774108
6446    CURSOR csr_element_type_id(p_element_name    VARCHAR2)
6447    IS
6448    SELECT element_type_id
6449    FROM   pay_element_types_f
6450    WHERE  legislation_code = 'IN'
6451    AND    element_name = p_element_name
6452    AND    p_effective_date BETWEEN effective_start_date AND effective_end_date;
6453 
6454    l_element_type_id     NUMBER; --Added as a part of bug fix 4774108
6455    l_element_link_id     NUMBER; --Added as a part of bug fix 4774108
6456    l_element_name        pay_element_types_f.element_name%TYPE;--Added as a part of bug fix 4774108
6457    l_procedure   VARCHAR(100);
6458    l_message     VARCHAR2(250);
6459 BEGIN
6460    --
6461     l_procedure := g_package || 'get_value';
6462     pay_in_utils.set_location(g_debug,'Entering: '||l_procedure,10);
6463 
6464 
6465     IF g_debug THEN
6466       pay_in_utils.trace('**************************************************','********************');
6467       pay_in_utils.trace('p_assignment_id',p_assignment_id);
6468       pay_in_utils.trace('p_index',p_index);
6469       pay_in_utils.trace('p_element_name',p_element_name);
6470       pay_in_utils.trace('p_input_name',p_input_name);
6471       pay_in_utils.trace('p_effective_date',p_effective_date);
6472       pay_in_utils.trace('**************************************************','********************');
6473     END IF;
6474 
6475 
6476    IF g_index_assignment_id <> p_assignment_id THEN
6477       --
6478       pay_in_utils.set_location(g_debug, l_procedure, 20);
6479       g_index_values_valid := false;
6480       --
6481    END IF;
6482    --
6483    IF NOT g_index_values_valid THEN
6484       --
6485       -- Put the details in the appropriate table available
6486       -- for each of the elements.
6487       --
6488       g_80dd_values.DELETE;
6489       g_80g_values.DELETE;
6490       g_insurace_values.DELETE;
6491       g_80cce_values.DELETE;
6492       g_80dd_index := 0;
6493       g_80g_index := 0;
6494       g_insurace_index := 0;
6495       g_80cce_index := 0;
6496       pay_in_utils.set_location(g_debug, l_procedure, 30);
6497       --
6498       --Added as a part of bug fix 4774108
6499       OPEN  csr_element_type_id('Deduction under Section 80DD');
6500       FETCH csr_element_type_id INTO l_element_type_id;
6501       CLOSE csr_element_type_id;
6502 
6503       l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6504                                                            ,p_effective_date
6505                                                            ,l_element_type_id
6506                                                            );
6507 
6508       FOR rec IN csr_get_80dd_values(l_element_link_id) LOOP
6509          --
6510          pay_in_utils.set_location(g_debug, l_procedure, 40);
6511          g_80dd_values(g_80dd_index).entry_id := rec.entry_id;
6512          g_80dd_values(g_80dd_index).input1_value := rec.disability_type;
6513          g_80dd_values(g_80dd_index).input2_value := rec.treatment_amount;
6514          g_80dd_values(g_80dd_index).input3_value := rec.disability_percentage;
6515          g_80dd_index := g_80dd_index + 1;
6516          --
6517       END LOOP;
6518       --
6519       --Added as a part of bug fix 4774108
6520       OPEN  csr_element_type_id('Deduction under Section 80G');
6521       FETCH csr_element_type_id INTO l_element_type_id;
6522       CLOSE csr_element_type_id;
6523 
6524       l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6525                                                            ,p_effective_date
6526                                                            ,l_element_type_id
6527                                                            );
6528 
6529       FOR rec IN csr_get_80g_values(l_element_link_id)LOOP
6530          --
6531          pay_in_utils.set_location(g_debug, l_procedure, 50);
6532          g_80g_values(g_80g_index).entry_id := rec.entry_id;
6533          g_80g_values(g_80g_index).input1_value := rec.donation_type;
6534          g_80g_values(g_80g_index).input2_value := rec.donation_amount;
6535          g_80g_index := g_80g_index + 1;
6536          --
6537       END LOOP;
6538       --Added as a part of bug fix 4774108
6539       OPEN  csr_element_type_id('Life Insurance Premium');
6540       FETCH csr_element_type_id INTO l_element_type_id;
6541       CLOSE csr_element_type_id;
6542 
6543       l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6544                                                            ,p_effective_date
6545                                                            ,l_element_type_id
6546                                                            );
6547 
6548       FOR rec IN csr_get_insurace_values(l_element_link_id) LOOP
6549          --
6550          pay_in_utils.set_location(g_debug, l_procedure, 60);
6551          g_insurace_values(g_insurace_index).entry_id := rec.entry_id;
6552          g_insurace_values(g_insurace_index).input1_value := rec.premium_paid;
6553          g_insurace_values(g_insurace_index).input2_value := rec.sum_assured;
6554          g_insurace_index := g_insurace_index + 1;
6555          --
6556       END LOOP;
6557       --
6558       FOR i IN 1..4
6559       LOOP
6560             IF (i = 1) THEN
6561                l_element_name := 'Deduction under Section 80CCE';
6562             ELSIF (i = 2) THEN
6563                l_element_name := 'Pension Fund 80CCC';
6564             ELSIF (i = 3) THEN
6565                l_element_name := 'Deferred Annuity';
6566 	    ELSE
6567 	       l_element_name := 'Senior Citizens Savings Scheme';
6568             END IF;
6569 
6570             --Added as a part of bug fix 4774108
6571             OPEN  csr_element_type_id(l_element_name);
6572             FETCH csr_element_type_id INTO l_element_type_id;
6573             CLOSE csr_element_type_id;
6574 
6575             l_element_link_id := pay_in_utils.get_element_link_id(p_assignment_id
6576                                                                  ,p_effective_date
6577                                                                  ,l_element_type_id
6578                                                                  );
6579 
6580             FOR rec IN csr_get_80cce_values(l_element_name,l_element_link_id) LOOP
6581                --
6582                pay_in_utils.set_location(g_debug, l_procedure, 70);
6583                g_80cce_values(g_80cce_index).entry_id := rec.entry_id;
6584                g_80cce_values(g_80cce_index).input1_value := rec.Investment_Amount;
6585                g_80cce_values(g_80cce_index).input2_value := rec.Component_Name;
6586                g_80cce_index := g_80cce_index + 1;
6587                --
6588             END LOOP;
6589       END LOOP;
6590       --
6591       pay_in_utils.set_location(g_debug, l_procedure, 70);
6592       g_index_values_valid := true;
6593       g_index_assignment_id := p_assignment_id;
6594       --
6595    END IF;
6596    --
6597    IF p_element_name = 'Deduction under Section 80DD' THEN
6598       --
6599       pay_in_utils.set_location(g_debug, l_procedure, 80);
6600       IF p_index <= g_80dd_index AND g_80dd_values.exists(p_index-1) THEN
6601          --
6602          pay_in_utils.set_location(g_debug, l_procedure, 90);
6603          IF p_input_name = 'Disability Type' THEN
6604 	    pay_in_utils.set_location(g_debug, l_procedure, 100);
6605             IF g_debug THEN
6606                 pay_in_utils.trace('**************************************************','********************');
6607                 pay_in_utils.trace('Disablity Type',g_80dd_values(p_index-1).input1_value);
6608                 pay_in_utils.trace('**************************************************','********************');
6609             END IF;
6610             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,110);
6611 	    RETURN g_80dd_values(p_index-1).input1_value;
6612 
6613          ELSIF p_input_name = 'Treatment Amount' THEN
6614             IF g_debug THEN
6615                 pay_in_utils.trace('**************************************************','********************');
6616                 pay_in_utils.trace('Treatment Amount',g_80dd_values(p_index-1).input2_value);
6617                 pay_in_utils.trace('**************************************************','********************');
6618             END IF;
6619             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,120);
6620             RETURN g_80dd_values(p_index-1).input2_value;
6621 
6622          ELSIF p_input_name = 'Disability Percentage' THEN
6623             IF g_debug THEN
6624                 pay_in_utils.trace('**************************************************','********************');
6625                 pay_in_utils.trace('Disability Percentage',g_80dd_values(p_index-1).input3_value);
6626                 pay_in_utils.trace('**************************************************','********************');
6627             END IF;
6628             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,130);
6629 	    pay_in_utils.set_location(g_debug, l_procedure, 120);
6630             RETURN g_80dd_values(p_index-1).input3_value;
6631 
6632          ELSIF p_input_name = 'Element Entry Id' THEN
6633             IF g_debug THEN
6634                 pay_in_utils.trace('**************************************************','********************');
6635                 pay_in_utils.trace('Element ',g_80dd_values(p_index-1).entry_id);
6636                 pay_in_utils.trace('**************************************************','********************');
6637             END IF;
6638             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,130);
6639 	    return g_80dd_values(p_index-1).entry_id;
6640          ELSE
6641 	    return NULL;
6642          END IF;
6643       ELSE
6644 	 pay_in_utils.set_location(g_debug, l_procedure, 130);
6645          return NULL;
6646       END IF;
6647 
6648    ELSIF p_element_name = 'Deduction under Section 80G' THEN
6649       --
6650       pay_in_utils.set_location(g_debug, l_procedure, 140);
6651       IF p_index <= g_80g_index AND g_80g_values.exists(p_index-1) THEN
6652          --
6653          IF p_input_name = 'Donation Type' THEN
6654             IF g_debug THEN
6655                 pay_in_utils.trace('**************************************************','********************');
6656                 pay_in_utils.trace('Donation Type',g_80g_values(p_index-1).input1_value);
6657                 pay_in_utils.trace('**************************************************','********************');
6658             END IF;
6659             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,140);
6660             return g_80g_values(p_index-1).input1_value;
6661 
6662          ELSIF p_input_name = 'Donation Amount' THEN
6663             IF g_debug THEN
6664                 pay_in_utils.trace('**************************************************','********************');
6665                 pay_in_utils.trace('Donation Amount',g_80g_values(p_index-1).input2_value);
6666                 pay_in_utils.trace('**************************************************','********************');
6667             END IF;
6668             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,150);
6669             return g_80g_values(p_index-1).input2_value;
6670 
6671          ELSIF p_input_name = 'Element Entry Id' THEN
6672             IF g_debug THEN
6673                 pay_in_utils.trace('**************************************************','********************');
6674                 pay_in_utils.trace('Element Entry',g_80g_values(p_index-1).entry_id);
6675                 pay_in_utils.trace('**************************************************','********************');
6676             END IF;
6677             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,160);
6678 	    return g_80g_values(p_index-1).entry_id;
6679          END IF;
6680 
6681       ELSE
6682          pay_in_utils.set_location(g_debug, l_procedure, 180);
6683          return NULL;
6684       END IF;
6685    ELSIF p_element_name = 'Life Insurance Premium' THEN
6686       --
6687       pay_in_utils.set_location(g_debug, l_procedure, 190);
6688       IF p_index <= g_insurace_index AND g_insurace_values.exists(p_index-1) THEN
6689          --
6690          IF p_input_name = 'Premium Paid' THEN
6691             IF g_debug THEN
6692                 pay_in_utils.trace('**************************************************','********************');
6693                 pay_in_utils.trace('Premium Amount',g_insurace_values(p_index-1).input1_value);
6694                 pay_in_utils.trace('**************************************************','********************');
6695             END IF;
6696             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,170);
6697             return g_insurace_values(p_index-1).input1_value;
6698 
6699          ELSIF p_input_name = 'Sum Assured' THEN
6700             IF g_debug THEN
6701                 pay_in_utils.trace('**************************************************','********************');
6702                 pay_in_utils.trace('Sum Assured',g_insurace_values(p_index-1).input2_value);
6703                 pay_in_utils.trace('**************************************************','********************');
6704             END IF;
6705             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,180);
6706 	    return g_insurace_values(p_index-1).input2_value;
6707 
6708          ELSIF p_input_name = 'Element Entry Id' THEN
6709             IF g_debug THEN
6710                 pay_in_utils.trace('**************************************************','********************');
6711                 pay_in_utils.trace('Element ',g_insurace_values(p_index-1).entry_id);
6712                 pay_in_utils.trace('**************************************************','********************');
6713             END IF;
6714             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,190);
6715 	    return g_insurace_values(p_index-1).entry_id;
6716          END IF;
6717 
6718       ELSE
6719          pay_in_utils.set_location(g_debug, l_procedure, 230);
6720 	 return NULL;
6721       END IF;
6722    ELSIF p_element_name = 'Deduction under Section 80CCE' THEN
6723       --
6724       pay_in_utils.set_location(g_debug, l_procedure, 240);
6725       IF p_index <= g_80cce_index AND g_80cce_values.exists(p_index-1) THEN
6726          --
6727          IF p_input_name = 'Investment Amount' THEN
6728             IF g_debug THEN
6729                 pay_in_utils.trace('**************************************************','********************');
6730                 pay_in_utils.trace('Investment Amount',g_80cce_values(p_index-1).input1_value);
6731                 pay_in_utils.trace('**************************************************','********************');
6732             END IF;
6733             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,200);
6734             return g_80cce_values(p_index-1).input1_value;
6735 
6736          ELSIF p_input_name = 'Component Name' THEN
6737             IF g_debug THEN
6738                 pay_in_utils.trace('**************************************************','********************');
6739                 pay_in_utils.trace('Component Name',g_80cce_values(p_index-1).input2_value);
6740                 pay_in_utils.trace('**************************************************','********************');
6741             END IF;
6742             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,210);
6743 	    return g_80cce_values(p_index-1).input2_value;
6744 
6745          ELSIF p_input_name = 'Element Entry Id' THEN
6746             IF g_debug THEN
6747                 pay_in_utils.trace('**************************************************','********************');
6748                 pay_in_utils.trace('Element',g_80cce_values(p_index-1).entry_id);
6749                 pay_in_utils.trace('**************************************************','********************');
6750             END IF;
6751             pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,220);
6752 	    pay_in_utils.set_location(g_debug, l_procedure, 270);
6753 	    return g_80cce_values(p_index-1).entry_id;
6754          END IF;
6755       ELSE
6756          pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,230);
6757 	 return NULL;
6758       END IF;
6759    ELSE
6760         pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,240);
6761       return null;
6762    END IF;
6763    --
6764    -- As per logic should not come here at all.
6765    return null;
6766    pay_in_utils.set_location(g_debug,'Leaving: '||l_procedure,250);
6767 
6768 END get_value;
6769 -- End changes to Enhancement 3886086(Web ADI)
6770 
6771 
6772 
6773 BEGIN
6774    --
6775    -- Global variable Initialization
6776    --
6777    g_legislation_code := 'IN';
6778    g_approval_info_type := 'PER_IN_TAX_DECL_DETAILS';
6779    g_is_valid := false;
6780 
6781    -- Following lines added for Web ADI Support
6782    g_index_values_valid := false;
6783    g_index_assignment_id := 0;
6784    g_80dd_index := 0;
6785    g_80g_index := 0;
6786    g_insurace_index := 0;
6787    g_80cce_index := 0;
6788 
6789    --
6790 END pay_in_tax_declaration;