DBA Data[Home] [Help]

PACKAGE BODY: APPS.PQP_CLM_BAL

Source


1 PACKAGE BODY PQP_CLM_BAL AS
2 /* $Header: pqpvmbal.pkb 115.2 2003/06/25 11:48:50 jcpereir noship $*/
3 -- This Function return Element Level balances given the Balance Name, Element Entry Id
4 -- and Assignment Action Id
5 FUNCTION get_vehicletype_balance
6   (p_assignment_id                    IN number
7   ,p_business_group_id                IN number
8   ,p_vehicle_type                     IN varchar2
9   ,p_ownership                        IN varchar2
10   ,p_usage_type                       IN varchar2
11   ,p_balance_name                     IN varchar2
12   ,p_element_entry_id                 IN NUMBER
13   ,p_assignment_action_id             IN NUMBER
14   ) RETURN NUMBER IS
15   --
16   --
17 CURSOR csr_balance IS
18 select    pet.element_name
19          ,pet.business_group_id
20          ,ppa.payroll_action_id
21          ,prr.source_type
22          ,prr.run_result_id
23         FROM pay_element_types_f pet
24         ,pay_element_type_extra_info pete
25         ,pay_run_results       prr
26         ,pay_assignment_actions paas
27         ,pay_payroll_actions   ppa
28         where
29         pete.EEI_INFORMATION_CATEGORY='PQP_VEHICLE_MILEAGE_INFO'
30         AND pet.element_type_id=pete.element_type_id
31         AND pete.EEI_INFORMATION1 in ('C','P','CM','CP','PP','PM')
32         AND pet.business_group_id=p_business_group_id
33         AND paas.assignment_id =p_assignment_id
34         AND paas.assignment_action_id=prr.assignment_action_id
35         AND pete.element_type_id=prr.element_type_id
36         AND paas.payroll_action_id=ppa.payroll_action_id
37         AND ppa.action_type in ('Q','R','V')
38         AND paas.action_status='C'
39         AND prr.source_id = p_element_entry_id
40         AND paas.assignment_action_id = p_assignment_action_id
41         AND pete.EEI_INFORMATION1 = nvl(p_vehicle_type,pete.EEI_INFORMATION1)
42         AND substr(pete.EEI_INFORMATION1,0,1) = nvl(p_ownership,substr(pete.EEI_INFORMATION1,0,1));
43 
44 CURSOR c_src_ele_entry_id(cp_run_result_id NUMBER)
45 IS
46 Select rr2.source_id
47        FROM pay_run_results rr1,
48        pay_run_results rr2
49        WHERE
50        rr1.run_result_id = cp_run_result_id
51        AND rr1.source_id = rr2.run_result_id;
52 
53 --
54   lsr_balance     csr_balance%ROWTYPE;
55   l_sum           number;
56   l_temp_element_entry_id    number;
57 --
58 BEGIN
59 
60    open csr_balance;
61    fetch csr_balance into lsr_balance;
62    close csr_balance;
63    hr_utility.set_location('SOURCE TYPE  '||lsr_balance.source_type,10);
64    IF lsr_balance.source_type = 'R' or lsr_balance.source_type = 'V' THEN
65     open c_src_ele_entry_id(lsr_balance.run_result_id);
66      fetch c_src_ele_entry_id into l_temp_element_entry_id;
67     close c_src_ele_entry_id;
68    ELSE
69     l_temp_element_entry_id := p_element_entry_id;
70    END IF;
71    l_sum := pqp_clm_bal.get_balance_value ( lsr_balance.element_name
72                                            ,p_assignment_action_id
73                                            ,l_temp_element_entry_id
74                                            ,lsr_balance.business_group_id
75                                            ,lsr_balance.payroll_action_id
76                                            ,p_balance_name);
77    /*IF lsr_balance.source_type = 'R' or lsr_balance.source_type = 'V' THEN
78     l_sum := -l_sum;
79    END IF;*/
80    return nvl(l_sum,0);
81 
82 END get_vehicletype_balance;
83 
84 --
85 FUNCTION get_balance_value ( p_element_name          IN VARCHAR2
86                     ,p_assignment_action_id  IN NUMBER
87                     ,p_element_entry_id      IN NUMBER
88                     ,p_business_group_id     IN NUMBER
89                     ,p_payroll_action_id     IN NUMBER
90                     ,p_balance_name          IN VARCHAR2
91                     )
92 return NUMBER
93 IS
94 CURSOR c_get_balance_det
95 IS
96 SELECT pbt.balance_name,pbt.balance_type_id ,pbd.balance_dimension_id
97   FROM pay_balance_types pbt
98       ,pay_defined_balances pdb
99        ,pay_balance_dimensions pbd
100  WHERE balance_name like p_element_name||' '||p_balance_name
101    AND pbd.legislation_code='GB'
102    AND pbd.dimension_name='_ELEMENT_ITD'
103    AND pdb.balance_type_id=pbt.balance_type_id
104    AND pdb.balance_dimension_id=pbd.balance_dimension_id
105    AND pbt.balance_type_id=pdb.balance_type_id;
106 
107 cursor c_get_balance_val(cp_balance_type_id       NUMBER
108           ,cp_assignment_action_id NUMBER
109           ,cp_element_entry_id     NUMBER
110           ,cp_payroll_action_id    NUMBER)
111 is
112 SELECT  nvl((fnd_number.canonical_to_number(TARGET.result_value)
113         * FEED.scale),0) tot
114 FROM pay_run_result_values   TARGET
115 ,      pay_balance_feeds_f     FEED
116 ,      pay_run_results         RR
117 ,      pay_assignment_actions  ASSACT
118 ,      pay_assignment_actions  BAL_ASSACT
119 ,      pay_payroll_actions     PACT
120 WHERE  BAL_ASSACT.assignment_action_id = cp_assignment_action_id
121 AND    FEED.balance_type_id  = cp_balance_type_id
122 AND    FEED.input_value_id     = TARGET.input_value_id
123 AND    TARGET.run_result_id    = RR.run_result_id
124 AND    RR.assignment_action_id = ASSACT.assignment_action_id
125 AND    ASSACT.payroll_action_id = PACT.payroll_action_id
126 AND    assact.payroll_action_id = cp_payroll_action_id
127 AND    PACT.effective_date between FEED.effective_start_date
128                                AND FEED.effective_end_date
129 AND    RR.status in ('P','PA')
130 AND    ASSACT.action_sequence <= BAL_ASSACT.action_sequence
131 AND    ASSACT.assignment_id = BAL_ASSACT.assignment_id
132 AND    (( RR.source_id = cp_element_entry_id and source_type in ( 'E','I'))
133  OR    ( rr.source_type in ('R','V') /* reversal */
134                 AND exists
135                 ( SELECT null from pay_run_results rr1
136                   WHERE rr1.source_id = cp_element_entry_id
137                   AND   rr1.run_result_id = rr.source_id
138                   AND   rr1.source_type in ( 'E','I'))));
139 
140 
141 
142 
143 l_get_balance_det        c_get_balance_det%ROWTYPE;
144 l_get_balance_val        c_get_balance_val%ROWTYPE;
145 l_balance_type_id        NUMBER := NULL;
146 l_cache_count            NUMBER;
147 BEGIN
148 
149 --Check the Balance Cache for Balance Type Id
150  FOR i in 1..g_balance_cache.count
151  LOOP
152   IF g_balance_cache(i).balance_name = p_element_name||' '||p_balance_name THEN
153    l_balance_type_id := g_balance_cache(i).balance_type_id;
154    exit;
155   END IF;
156  END LOOP;
157 
158  IF l_balance_type_id IS NULL THEN
159   OPEN c_get_balance_det;
160   FETCH c_get_balance_det INTO l_get_balance_det;
161   CLOSE c_get_balance_det;
162   l_balance_type_id := l_get_balance_det.balance_type_id;
163   -- Make An Entry in Balance Cache
164   l_cache_count := g_balance_cache.count+1;
165   g_balance_cache(l_cache_count).balance_name := p_element_name||' '||p_balance_name;
166   g_balance_cache(l_cache_count).balance_type_id := l_balance_type_id;
167 END IF;
168 
169  OPEN c_get_balance_val(l_balance_type_id
170          ,p_assignment_action_id
171          ,p_element_entry_id
172          ,p_payroll_action_id);
173  FETCH c_get_balance_val INTO l_get_balance_val;
174      return(NVL(l_get_balance_val.tot,0));
175  CLOSE c_get_balance_val;
176 
177 
178 return(0);
179 END;
180 END PQP_CLM_BAL;