1 PACKAGE BODY hri_bpl_currency AS
2 /* $Header: hribcrnc.pkb 120.3 2006/10/09 15:18:21 jtitmas noship $ */
3
4 TYPE g_varchar_tabtype IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
5 g_rate_type_tab g_varchar_tabtype;
6 g_default_rate_type VARCHAR2(30) := fnd_profile.value('BIS_PRIMARY_RATE_TYPE');
7
8 /******************************************************************************/
9 /* Function to convert an amount from one currency to another, given a */
10 /* specified conversion rate type */
11 /******************************************************************************/
12 FUNCTION convert_currency_amount(p_from_currency IN VARCHAR2
13 ,p_to_currency IN VARCHAR2
14 ,p_conversion_date IN DATE
15 ,p_amount IN NUMBER
16 ,p_rate_type IN VARCHAR2)
17 RETURN NUMBER IS
18
19 l_converted_amount NUMBER;
20
21 BEGIN
22
23 -- Check all required parameters are passed in
24 IF (p_from_currency IS NOT NULL AND
25 p_to_currency IS NOT NULL AND
26 p_amount IS NOT NULL)
27 THEN
28 -- If from currency is unassigned don't convert amount
29 IF (p_from_currency = 'NA_EDW')
30 THEN
31 l_converted_amount := p_amount ;
32 ELSE
33 -- Call API to convert currency
34 l_converted_amount := hr_currency_pkg.convert_amount(
35 p_from_currency => p_from_currency
36 ,p_to_currency => p_to_currency
37 ,p_conversion_date => p_conversion_date
38 ,p_amount => p_amount
39 ,p_rate_type => NVL(p_rate_type, g_default_rate_type));
40 END IF;
41 ELSE
42 -- No salary for this assignment
43 l_converted_amount := 0;
44 END IF;
45
46 -- Return result
47 RETURN l_converted_amount;
48 /*
49 EXCEPTION
50 WHEN OTHERS THEN
51
52 RETURN(0);
53 */
54 EXCEPTION
55 WHEN gl_currency_api.invalid_currency THEN
56 --g_rate_conversion_tab(hash_number) := -2;
57 RETURN ( -2 );
58
59 WHEN gl_currency_api.NO_RATE THEN
60 --g_rate_conversion_tab(hash_number) := -1;
61 RETURN ( -1 );
62
63 WHEN OTHERS THEN
64 RETURN ( 0 );
65
66
67 END convert_currency_amount;
68
69 /******************************************************************************/
70 /* Function to convert an amount from one currency to another without a rate */
71 /* type given (uses the default from the bis profile option) but specifying */
72 /* a number of decimal places for the result */
73 /******************************************************************************/
74 FUNCTION convert_currency_amount(p_from_currency IN VARCHAR2,
75 p_to_currency IN VARCHAR2,
76 p_conversion_date IN DATE,
77 p_amount IN NUMBER,
78 p_precision IN NUMBER)
79 RETURN NUMBER IS
80
81 l_result NUMBER;
82 l_rate_type VARCHAR2(30);
83
84 BEGIN
85
86 l_result := hr_currency_pkg.convert_amount
87 (p_from_currency => p_from_currency,
88 p_to_currency => p_to_currency,
89 p_conversion_date => TRUNC(p_conversion_date),
90 p_amount => p_amount,
91 p_rate_type => g_default_rate_type,
92 p_round => p_precision);
93
94 RETURN l_result;
95 EXCEPTION
96 WHEN gl_currency_api.invalid_currency THEN
97 --g_rate_conversion_tab(hash_number) := -2;
98 RETURN ( -2 );
99
100 WHEN gl_currency_api.NO_RATE THEN
101 --g_rate_conversion_tab(hash_number) := -1;
102 RETURN ( -1 );
103
104 WHEN OTHERS THEN
105 RETURN ( 0 );
106 END convert_currency_amount;
107
108 /******************************************************************************/
109 /* Function to convert an amount from one currency to another without a rate */
110 /* type given (uses the default from the bis profile option) */
111 /******************************************************************************/
112 FUNCTION convert_currency_amount(p_from_currency IN VARCHAR2,
113 p_to_currency IN VARCHAR2,
114 p_conversion_date IN DATE,
115 p_amount IN NUMBER)
116 RETURN NUMBER IS
117
118 l_result NUMBER;
119 l_rate_type VARCHAR2(30);
120
121 BEGIN
122
123 l_result := hr_currency_pkg.convert_amount
124 (p_from_currency => p_from_currency,
125 p_to_currency => p_to_currency,
126 p_conversion_date => TRUNC(p_conversion_date),
127 p_amount => p_amount,
128 p_rate_type => g_default_rate_type);
129
130 RETURN l_result;
131 EXCEPTION
132 WHEN gl_currency_api.invalid_currency THEN
133 --g_rate_conversion_tab(hash_number) := -2;
134 RETURN ( -2 );
135
136 WHEN gl_currency_api.NO_RATE THEN
137 --g_rate_conversion_tab(hash_number) := -1;
138 RETURN ( -1 );
139
140 WHEN OTHERS THEN
141 RETURN ( 0 );
142 END convert_currency_amount;
143
144
145 -- -----------------------------------------------------------------------------
146 -- Converts currency amount to DBI primary currency using other parameters
147 -- - conversion date: sysdate
148 -- - rate type: DBI primary rate type
149 -- -----------------------------------------------------------------------------
150 FUNCTION convert_to_primary_crnc(p_from_currency IN VARCHAR2
151 ,p_amount IN NUMBER)
152 RETURN NUMBER IS
153
154 l_result NUMBER;
155
156 BEGIN
157
158 l_result := convert_currency_amount
159 (p_from_currency => p_from_currency
160 ,p_to_currency => bis_common_parameters.get_currency_code
161 ,p_conversion_date => TRUNC(SYSDATE)
162 ,p_amount => p_amount
163 ,p_rate_type => bis_common_parameters.get_rate_type);
164
165 RETURN l_result;
166
167 END convert_to_primary_crnc;
168
169 -- -----------------------------------------------------------------------------
170 -- Converts currency amount to DBI secondary currency using other parameters
171 -- - conversion date: sysdate
172 -- - rate type: DBI secondary rate type
173 -- -----------------------------------------------------------------------------
174 FUNCTION convert_to_secondary_crnc(p_from_currency IN VARCHAR2
175 ,p_amount IN NUMBER)
176 RETURN NUMBER IS
177
178 l_result NUMBER;
179
180 BEGIN
181
182 l_result := convert_currency_amount
183 (p_from_currency => p_from_currency
184 ,p_to_currency => bis_common_parameters.get_secondary_currency_code
185 ,p_conversion_date => TRUNC(SYSDATE)
186 ,p_amount => p_amount
187 ,p_rate_type => bis_common_parameters.get_secondary_rate_type);
188
189 RETURN l_result;
190
191 END convert_to_secondary_crnc;
192
193 END hri_bpl_currency;