DBA Data[Home] [Help]

PACKAGE BODY: APPS.PQH_FR_SYNC_SAL_RATES

Source


1 Package Body  pqh_fr_sync_sal_rates as
2 /* $Header: pqfrssrt.pkb 115.1 2004/01/08 09:14:26 kgowripe noship $ */
3 --
4 -- ----------------------------------------------------------------------------
5 -- |                     Private Global Definitions                           |
6 -- ----------------------------------------------------------------------------
7 --
8 g_package  varchar2(33) := ' pqh_fr_sync_sal_rates.';  -- Global package name
9 g_debug    boolean := hr_utility.debug_enabled; -- check for debug enabled or not
10 g_status   varchar2(1) := 'S'; -- Status variable defaulted to success
11 -- point value for the salary as of the effective date
12 g_sal_point_rate pqh_fr_global_indices_f.basic_salary_rate%TYPE;
13 g_sal_point_currency pqh_fr_global_indices_f.currency_code%TYPE;
14 g_gl_cet_id     pqh_copy_entity_txns.copy_entity_txn_id%TYPE := -1;
15 g_gl_currency_cd pqh_fr_global_indices_f.currency_code%TYPE;
16 g_conv_factor   NUMBER  := 1;
17 --
18 -- ----------------------------------------------------------------------------
19 -- |                     Private Procedure/Function Definitions                |
20 -- ----------------------------------------------------------------------------
21 --
22 PROCEDURE sync_all_rates(p_effective_date IN DATE);
23 
24 PROCEDURE sync_rates_for_ib(p_effective_date IN DATE,
25                                 p_ib  IN NUMBER,
26                                 p_inm IN NUMBER);
27 PROCEDURE sync_rates_in_gsp_stage(p_effective_date IN DATE,
28                                   p_ib IN NUMBER,
29                                   p_inm IN NUMBER);
30 PROCEDURE get_bareme_point_value(p_effective_date IN DATE
31                                 ,p_basic_sal_rate OUT NOCOPY NUMBER
32                                 ,p_bareme_currency_cd OUT NOCOPY VARCHAR2);
33 --
34 -- ----------------------------------------------------------------------------
35 -- |                     sync_gsp_sal_rt_with_bareme                          |
36 -- ----------------------------------------------------------------------------
37 --
38 
39 PROCEDURE sync_gsp_sal_rt_with_bareme(errbuf OUT NOCOPY VARCHAR2,
40                                       retcode OUT NOCOPY VARCHAR2,
41                                       p_effective_date IN DATE,
42                                       p_mode IN VARCHAR2,
43                                       p_commit_mode IN VARCHAR2,
44                                       p_ib1  IN NUMBER Default NULL,
45                                       p_ib2  IN NUMBER Default NULL,
46                                       p_ib3  IN NUMBER Default NULL,
47                                       p_ib4  IN NUMBER Default NULL,
48                                       p_ib5  IN NUMBER Default NULL,
49                                       p_ib6  IN NUMBER Default NULL,
50                                       p_ib7  IN NUMBER Default NULL,
51                                       p_ib8  IN NUMBER Default NULL,
52                                       p_ib9  IN NUMBER Default NULL,
53                                       p_ib10 IN NUMBER Default NULL) IS
54 l_conc_status boolean;
55 CURSOR csr_inm_for_ib (p_ib IN Number) IS
56   SELECT  increased_index
57   FROM    pqh_fr_global_indices_f
58   WHERE   p_effective_date BETWEEN effective_start_date AND effective_end_date
59   AND     gross_index = p_ib;
60   l_inm1  NUMBER;
61   l_inm2  NUMBER;
62   l_inm3  NUMBER;
63   l_inm4  NUMBER;
64   l_inm5  NUMBER;
65   l_inm6  NUMBER;
66   l_inm7  NUMBER;
67   l_inm8  NUMBER;
68   l_inm9  NUMBER;
69   l_inm10 NUMBER;
70   l_proc  varchar2(72) := g_package||'sync_gsp_sal_rt_with_bareme';
71 BEGIN
72   g_debug := hr_utility.debug_enabled;
73   if g_debug then
74      hr_utility.set_location('Entering '||l_proc,10);
75   end if;
76   g_status := 'S';
77   IF p_commit_mode = 'VALIDATE' THEN
78      SAVEPOINT sync_sal_rates;
79   END IF;
80 --
81   get_bareme_point_value(p_effective_date => p_effective_date
82 			,p_basic_sal_rate => g_sal_point_rate
83 			,p_bareme_currency_cd => g_sal_point_currency);
84   IF p_mode = 'ALL' THEN
85 
86     sync_all_rates(p_effective_date => p_effective_date);
87 
88   ELSIF p_mode = 'SPECIFIC' THEN
89     IF p_ib1 IS NOT NULL THEN
90       OPEN csr_inm_for_ib(p_ib1);
91       FETCH csr_inm_for_ib INTO l_inm1;
92       CLOSE csr_inm_for_ib;
93       IF l_inm1 IS NOT NULL THEN
94          sync_rates_for_ib(p_effective_date => p_effective_date,
95                                p_ib => p_ib1,
96                                p_inm => l_inm1);
97       END IF;
98     END IF;
99     IF p_ib2 IS NOT NULL THEN
100       OPEN csr_inm_for_ib(p_ib2);
101       FETCH csr_inm_for_ib INTO l_inm2;
102       CLOSE csr_inm_for_ib;
103       IF l_inm2 IS NOT NULL THEN
104          sync_rates_for_ib(p_effective_date => p_effective_date,
105                                p_ib => p_ib2,
106                                p_inm => l_inm2);
107       END IF;
108     END IF;
109     IF p_ib3 IS NOT NULL THEN
110       OPEN csr_inm_for_ib(p_ib3);
111       FETCH csr_inm_for_ib INTO l_inm3;
112       CLOSE csr_inm_for_ib;
113       IF l_inm3 IS NOT NULL THEN
114          sync_rates_for_ib(p_effective_date => p_effective_date,
115                                p_ib => p_ib3,
116                                p_inm => l_inm3);
117       END IF;
118     END IF;
119     IF p_ib4 IS NOT NULL THEN
120       OPEN csr_inm_for_ib(p_ib4);
121       FETCH csr_inm_for_ib INTO l_inm4;
122       CLOSE csr_inm_for_ib;
123       IF l_inm4 IS NOT NULL THEN
124          sync_rates_for_ib(p_effective_date => p_effective_date,
125                                p_ib => p_ib4,
126                                p_inm => l_inm4);
127       END IF;
128     END IF;
129     IF p_ib5 IS NOT NULL THEN
130       OPEN csr_inm_for_ib(p_ib5);
131       FETCH csr_inm_for_ib INTO l_inm5;
132       CLOSE csr_inm_for_ib;
133       IF l_inm5 IS NOT NULL THEN
134          sync_rates_for_ib(p_effective_date => p_effective_date,
135                                p_ib => p_ib5,
136                                p_inm => l_inm5);
137       END IF;
138     END IF;
139     IF p_ib6 IS NOT NULL THEN
140       OPEN csr_inm_for_ib(p_ib6);
141       FETCH csr_inm_for_ib INTO l_inm6;
142       CLOSE csr_inm_for_ib;
143       IF l_inm6 IS NOT NULL THEN
144          sync_rates_for_ib(p_effective_date => p_effective_date,
145                                p_ib => p_ib6,
146                                p_inm => l_inm6);
147       END IF;
148     END IF;
149     IF p_ib7 IS NOT NULL THEN
150       OPEN csr_inm_for_ib(p_ib7);
151       FETCH csr_inm_for_ib INTO l_inm7;
152       CLOSE csr_inm_for_ib;
153       IF l_inm7 IS NOT NULL THEN
154          sync_rates_for_ib(p_effective_date => p_effective_date,
155                                p_ib => p_ib7,
156                                p_inm => l_inm7);
157       END IF;
158     END IF;
159     IF p_ib8 IS NOT NULL THEN
160       OPEN csr_inm_for_ib(p_ib8);
161       FETCH csr_inm_for_ib INTO l_inm8;
162       CLOSE csr_inm_for_ib;
163       IF l_inm8 IS NOT NULL THEN
164          sync_rates_for_ib(p_effective_date => p_effective_date,
165                                p_ib => p_ib8,
166                                p_inm => l_inm8);
167       END IF;
168     END IF;
169     IF p_ib9 IS NOT NULL THEN
170       OPEN csr_inm_for_ib(p_ib9);
171       FETCH csr_inm_for_ib INTO l_inm9;
172       CLOSE csr_inm_for_ib;
173       IF l_inm9 IS NOT NULL THEN
174          sync_rates_for_ib(p_effective_date => p_effective_date,
175                                p_ib => p_ib9,
176                                p_inm => l_inm9);
177       END IF;
178     END IF;
179     IF p_ib10 IS NOT NULL THEN
180       OPEN csr_inm_for_ib(p_ib10);
181       FETCH csr_inm_for_ib INTO l_inm10;
182       CLOSE csr_inm_for_ib;
183       IF l_inm10 IS NOT NULL THEN
184          sync_rates_for_ib(p_effective_date => p_effective_date,
185                                p_ib => p_ib10,
186                                p_inm => l_inm10);
187       END IF;
188     END IF;
189   END IF;   --End Mode Specific
190 
191   IF g_status = 'E' THEN
192     l_conc_status := fnd_concurrent.set_completion_status(status => 'ERROR'
193                                                          ,message=>SQLERRM);
194   END IF;
195   IF p_commit_mode = 'VALIDATE' THEN
196         ROLLBACK TO sync_sal_rates;
197   ELSE
198         COMMIT;
199   END IF;
200 
201   if g_debug then
202      hr_utility.set_location('Leaving '||l_proc,20);
203   end if;
204 
205 END sync_gsp_sal_rt_with_bareme;
206 --
207 -- ----------------------------------------------------------------------------
208 -- |                     sync_all_rates                                       |
209 -- ----------------------------------------------------------------------------
210 --
211 PROCEDURE sync_all_rates(p_effective_date IN DATE) IS
212 CURSOR csr_all_ib_inms IS
213   SELECT gross_index,increased_index
214   FROM   pqh_fr_global_indices_f
215   WHERE  p_effective_date BETWEEN effective_start_date AND effective_end_date;
216   l_proc  varchar2(72) := g_package||'.sync_all_rates';
217 BEGIN
218   if g_debug then
219      hr_utility.set_location('Entering '||l_proc,10);
220   end if;
221   FOR l_glb_ind_rec IN csr_all_ib_inms
222   LOOP
223       sync_rates_for_ib(p_effective_date => p_effective_date,
224                         p_ib             => l_glb_ind_rec.gross_index,
225                         p_inm            => l_glb_ind_rec.increased_index);
226   END LOOP;
227   if g_debug then
228      hr_utility.set_location('Entering '||l_proc,10);
229   end if;
230 EXCEPTION
231    When Others THEN
232     fnd_file.put_line(fnd_file.log,SQLERRM);
233     g_status := 'E';
234 END sync_all_rates;
235 --
236 -- ----------------------------------------------------------------------------
237 -- |                     sync_rates_for_ib                                    |
238 -- ----------------------------------------------------------------------------
239 --
240 PROCEDURE sync_rates_for_ib(p_effective_date IN DATE,
241                             p_ib  IN NUMBER,
242                             p_inm IN NUMBER) IS
243  CURSOR  csr_prog_points_with_ib IS
244     SELECT pps.parent_spine_id,pps.name,psp.spinal_point_id
245     FROM   per_spinal_points psp,
246            per_parent_spines pps
247     WHERE  psp.information_category = 'FR_PQH'
248     AND    psp.information1 = p_ib
249     AND    psp.parent_spine_id = pps.parent_spine_id;
250 
251 /* Update rates that have the name same as the Pay scale name */
252  CURSOR csr_hrrate_for_point(p_point_id IN NUMBER, p_scale_name varchar2) IS
253     SELECT pgr.grade_rule_id,pgr.currency_code,pgr.value,pgr.object_version_number
254     FROM   pay_grade_rules_f pgr,
255            pay_rates pr
256     WHERE  pgr.rate_type = 'SP'
257     AND    pgr.grade_or_spinal_point_id = p_point_id
258     AND    p_effective_date BETWEEN pgr.effective_start_date AND pgr.effective_end_date
259     AND    pgr.rate_id =pr.rate_id
260     AND    pr.name = p_scale_name;
261     l_rt_currency_cd  pay_grade_rules_f.currency_code%TYPE;
262     l_new_value NUMBER := 0;
263     l_conv_factor NUMBER := 1;
264     l_dt_upd_mode VARCHAR2(30);
265     l_effective_start_date DATE;
266     l_effective_end_date   DATE;
267     l_proc varchar2(72) := g_package||'.sync_rates_for_ib';
268 BEGIN
269 
270   if g_debug then
271      hr_utility.set_location('Entering '||l_proc,10);
272   end if;
273 
274  FOR l_sp_rec IN csr_prog_points_with_ib
275  LOOP
276     FOR l_rate_rec IN csr_hrrate_for_point(l_sp_rec.spinal_point_id,l_sp_rec.name)
277     LOOP
278        IF l_rate_rec.currency_code IS NOT NULL THEN
279          BEGIN
280              l_conv_factor := hr_currency_pkg.get_rate(p_from_currency => g_sal_point_currency,
281                                                        p_to_currency => l_rate_rec.currency_code,
282                                                        p_conversion_date => p_effective_date,
283                                                        p_rate_type => 'Corporate');
284              IF l_conv_factor IS NULL THEN
285                l_conv_factor := 1;
286              END IF;
287          EXCEPTION
288             When Others Then
289                l_conv_factor := 1;
290          END;
291        END IF;
292 -- Now apply the conversion rates to Grade ladder Currency from the Bareme Currency
293        l_new_value := (p_inm*g_sal_point_rate)*l_conv_factor;
294 
295        l_dt_upd_mode := pqh_gsp_stage_to_ben.get_update_mode(p_table_name => 'PAY_GRADE_RULES_F'
296                                                             ,p_key_column_name => 'GRADE_RULE_ID'
297                                                             ,p_key_column_value => l_rate_rec.grade_rule_id
298                                                             ,p_effective_date => p_effective_date);
299        hr_rate_values_api.update_rate_value
300        (p_effective_date           => p_effective_date
301        ,p_value                    => nvl(l_new_value,0)
302        ,p_grade_rule_id            => l_rate_rec.grade_rule_id
303        ,p_datetrack_mode           => l_dt_upd_mode
304        ,p_object_version_number    => l_rate_rec.object_version_number
305        ,p_effective_start_date     => l_effective_start_date
306        ,p_effective_end_date       => l_effective_end_date);
307     END LOOP;
308  END LOOP;
309 /*
310  sync_rates_in_gsp_stage(p_effective_date => p_effective_date,
311                          p_ib => p_ib,
312                          p_inm => p_inm);
313 */
314   if g_debug then
315      hr_utility.set_location('Leaving '||l_proc,20);
316   end if;
317 EXCEPTION
318    When Others THEN
319     fnd_file.put_line(fnd_file.log,SQLERRM);
320     g_status := 'E';
321 END sync_rates_for_ib;
322 --
323 -- ----------------------------------------------------------------------------
324 -- |                     get_bareme_point_value                               |
325 -- ----------------------------------------------------------------------------
326 --
327 PROCEDURE get_bareme_point_value(p_effective_date IN DATE
328                                 ,p_basic_sal_rate OUT NOCOPY NUMBER
329                                 ,p_bareme_currency_cd OUT NOCOPY VARCHAR2) IS
330   CURSOR csr_point_value IS
331      SELECT basic_salary_rate,currency_code
332      FROM   pqh_fr_global_indices_f
333      WHERE  p_effective_date BETWEEN effective_start_date AND effective_end_date
334      AND    type_of_record = 'INM';
335    l_proc varchar2(72) := g_package||'.get_bareme_point_value';
336 BEGIN
337   if g_debug then
338      hr_utility.set_location('Entering '||l_proc,10);
339   end if;
340     OPEN csr_point_value;
341     FETCH csr_point_value INTO p_basic_sal_rate,p_bareme_currency_cd;
342     CLOSE csr_point_value;
343   if g_debug then
344      hr_utility.set_location('Leaving '||l_proc,20);
345   end if;
346 END get_bareme_point_value;
347 --
348 -- ----------------------------------------------------------------------------
349 -- |                     sync_rates_in_gsp_stage                              |
350 -- ----------------------------------------------------------------------------
351 --
352 PROCEDURE sync_rates_in_gsp_stage(p_effective_date IN DATE,
353                                   p_ib IN NUMBER,
354                                   p_inm IN NUMBER) IS
355 CURSOR csr_sp_rows_in_stage IS
356   SELECT  cer.copy_entity_result_id,cer.copy_entity_txn_id
357   FROM    ben_copy_entity_results cer,
358           pqh_copy_entity_txns cet
359   WHERE   cer.table_alias = 'OPT'
360   AND     cer.dml_operation = 'INSERT'
361   AND     NVL(cer.information101,'XXX') = 'FR_PQH'
362   AND     NVL(cer.information173,-9999) = p_ib
363   AND     cer.copy_entity_txn_id = cet.copy_entity_txn_id
364   AND     cet.status <> 'COMPLETED'
365   ORDER BY cer.copy_entity_txn_id;
366 
367   CURSOR csr_gl_currency (p_cet_id IN NUMBER) IS
368       SELECT information50
369       FROM   ben_copy_entity_results
370       WHERE  copy_entity_txn_id = p_cet_id
371       AND    table_alias = 'PGM';
372 --Only Update rates for newly created rows.. as for completed information
373 --the udpates are done already.
374 CURSOR csr_hrrate_rows_in_stage(p_sp_cer_id IN NUMBER, p_cet_id IN NUMBER) IS
375   SELECT  copy_entity_result_id,information297
376   FROM    ben_copy_entity_results
377   WHERE   copy_entity_txn_id = p_cet_id
378   AND     table_alias = 'HRRATE'
379   AND     dml_operation  = 'INSERT'
380   AND     information278 = p_sp_cer_id
381   AND     information1 IS NULL;
382 
383   l_new_value NUMBER := 0;
384   l_proc  varchar2(72) := g_package||'sync_rates_in_gsp_stage';
385 BEGIN
386   if g_debug then
387      hr_utility.set_location('Entering '||l_proc,10);
388   end if;
389    FOR l_sp_rec IN csr_sp_rows_in_stage
390    LOOP
391 --get the GL currency code and the corresponding currency value for each CET
392    IF NVL(g_gl_cet_id,-1) <> l_sp_rec.copy_entity_txn_id THEN
393      OPEN csr_gl_currency(l_sp_rec.copy_entity_txn_id);
394      FETCH csr_gl_currency INTO g_gl_currency_cd;
395      CLOSE csr_gl_currency;
396      IF g_gl_currency_cd IS NOT NULL THEN
397        BEGIN
398           g_conv_factor := hr_currency_pkg.get_rate(p_from_currency => g_sal_point_currency,
399                                                   p_to_currency => g_gl_currency_cd,
400                                                   p_conversion_date => p_effective_date,
401                                                   p_rate_type => 'Corporate');
402           IF g_conv_factor IS NULL THEN
403              g_conv_factor := 1;
404           END IF;
405        EXCEPTION
406           When Others Then
407              g_conv_factor := 1;
408        END;
409      END IF;
410    END IF;
411 -- Now apply the conversion rates to Grade ladder Currency from the Bareme Currency
412    l_new_value := (p_inm*g_sal_point_rate)*g_conv_factor;
413 
414 
415        FOR l_hrrate_rec IN csr_hrrate_rows_in_stage(l_sp_rec.copy_entity_result_id,l_sp_rec.copy_entity_txn_id)
416        LOOP
417           UPDATE  ben_copy_entity_results
418           SET     information297 = NVL(l_new_value,0)
419           WHERE   copy_entity_result_id = l_hrrate_rec.copy_entity_result_id;
420        END LOOP;
421    END LOOP;
422   if g_debug then
423      hr_utility.set_location('Leaving '||l_proc,20);
424   end if;
425 EXCEPTION
426    When Others THEN
427     fnd_file.put_line(fnd_file.log,SQLERRM);
428     g_status := 'E';
429 END sync_rates_in_gsp_stage;
430 END pqh_fr_sync_sal_rates;