DBA Data[Home] [Help]

PACKAGE BODY: APPS.IEX_CURRENCY_PVT

Source


1 PACKAGE BODY IEX_CURRENCY_PVT AS
2 /* $Header: iexvcurb.pls 120.2 2005/08/19 14:03:39 jypark noship $ */
3   TYPE CurrencyCodeType  IS TABLE OF VARCHAR2(15)  INDEX BY BINARY_INTEGER;
4   TYPE PrecisionType     IS TABLE OF NUMBER(1)     INDEX BY BINARY_INTEGER;
5   TYPE MauType           IS TABLE OF NUMBER        INDEX BY BINARY_INTEGER;
6 --Begin-08/16/2005-jypark-fix gscc error
7 --  g_next_element            BINARY_INTEGER := 0;
8   g_next_element            BINARY_INTEGER;
9   g_currency_code_tab       CurrencyCodeType;
10   g_precision_tab           PrecisionType;
11 --  PG_DEBUG NUMBER(2) := TO_NUMBER(NVL(FND_PROFILE.value('IEX_DEBUG_LEVEL'), '20'));
12   PG_DEBUG NUMBER(2);
13   g_mau_tab                 MauType;
14 --End-08/16/2005-jypark-fix gscc error
15 
16 --
17 --
18     CURSOR CurrencyCursor( cp_currency_code VARCHAR2 ) IS
19     SELECT  precision,
20             minimum_accountable_unit
21     FROM    fnd_currencies
22     WHERE   currency_code = cp_currency_code;
23 --
24 
25 /*===========================================================================+
26 | PROCEDURE                                                                 |
27 |              Get_Currency_Details                                         |
28 |                                                                           |
29 | DESCRIPTION                                                               |
30 |              This PROCEDURE returns Currency Details Information          |
31 |                                                                           |
32 | SCOPE - PRIVATE                                                           |
33 |                                                                           |
34 | ARGUMENTS  : IN:                                                          |
35 |                  p_currency_code : Currency Code                          |
36 |              OUT:                                                         |
37 |                  x_precision     : Precision                              |
38 |                  x_mau           : Minimum Accountable Unit               |
39 |          IN/ OUT:                                                         |
40 |                                                                           |
41 | RETURNS    : NONE                                                         |
42 |                                                                           |
43 | NOTES                                                                     |
44 |                                                                           |
45 | MODIFICATION HISTORY                                                      |
46 |    jypark          23-NOV-99 Created                                      |
47 |                                                                           |
48 +===========================================================================*/
49 
50 
51   PROCEDURE Get_Currency_Details(
52                            p_api_version               IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
53                            p_init_msg_list             IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
54                            p_commit                    IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
55                            p_validation_level          IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
56                            p_currency_code             IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
57                            x_precision                 OUT NOCOPY NUMBER,
58                            x_mau                       OUT NOCOPY NUMBER,
59                            x_return_status             OUT NOCOPY VARCHAR2,
60                            x_msg_count                 OUT NOCOPY NUMBER,
61                            x_msg_data                  OUT NOCOPY VARCHAR2
62   ) IS
63     i BINARY_INTEGER := 0;
64     l_api_version     CONSTANT   NUMBER :=  1.0;
65     l_api_name        CONSTANT   VARCHAR2(30) :=  'Get_Currency_Details';
66     l_return_status VARCHAR2(1);
67     l_msg_count NUMBER;
68     l_msg_data VARCHAR2(32767);
69 
70     l_currency_code   VARCHAR2(15) := p_currency_code;
71   BEGIN
72 --  Standard begin of API savepoint
73     SAVEPOINT	Get_Currency_Details_PVT;
74 
75     -- Standard call to check for call compatibility.
76     IF NOT FND_API.Compatible_API_Call (l_api_version,
77                                         p_api_version,
78                                         l_api_name,
79                                         G_PKG_NAME)
80     THEN
81 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
82     END IF;
83 
84     -- Check p_init_msg_list
85     IF FND_API.to_Boolean( p_init_msg_list ) THEN
86       FND_MSG_PUB.initialize;
87     END IF;
88 
89     --  Initialize API return status to success
90     x_return_status := FND_API.G_RET_STS_SUCCESS;
91 
92     WHILE i < g_next_element
93     LOOP
94       EXIT WHEN g_currency_code_tab(i) = l_currency_code;
95             i := i + 1;
96         END LOOP;
97 --
98         IF i = g_next_element
99         THEN
100             OPEN CurrencyCursor( l_currency_code );
101             DECLARE
102                 l_Precision NUMBER;
103                 l_Mau       NUMBER;
104             BEGIN
105                 FETCH CurrencyCursor
106                 INTO    l_Precision,
107                         l_Mau;
108                 IF CurrencyCursor%NOTFOUND THEN
109                     RAISE NO_DATA_FOUND;
110                 END IF;
111                 g_precision_tab(i)    := l_Precision;
112                 g_mau_tab(i)          := l_Mau;
113             END;
114             CLOSE CurrencyCursor;
115             g_currency_code_tab(i) := l_currency_code;
116             g_next_element     := i + 1;
117         END IF;
118         x_precision := g_precision_tab(i);
119         x_mau       := g_mau_tab(i);
120 
121 EXCEPTION
122   WHEN GL_CURRENCY_API.NO_RATE THEN
123     ROLLBACK TO Get_Currency_Details_PVT;
124     x_return_status := FND_API.G_RET_STS_ERROR;
125     FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
126     FND_MSG_PUB.ADD;
127     FND_MSG_PUB.Count_And_Get(
128       p_encoded => FND_API.G_FALSE,
129       p_count => x_msg_count,
130       p_data  => x_msg_data);
131   WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
132     ROLLBACK TO Get_Currency_Details_PVT;
133     x_return_status := FND_API.G_RET_STS_ERROR;
134     FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
135     FND_MSG_PUB.ADD;
136     FND_MSG_PUB.Count_And_Get(
137       p_encoded => FND_API.G_FALSE,
138       p_count => x_msg_count,
139       p_data  => x_msg_data);
140   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
141     ROLLBACK TO Get_Currency_Details_PVT;
142     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
143     FND_MSG_PUB.Count_And_Get(
144       p_encoded => FND_API.G_FALSE,
145       p_count => x_msg_count,
146       p_data  => x_msg_data);
147   WHEN OTHERS THEN
148     ROLLBACK TO Get_Currency_Details_PVT;
149     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
150     FND_MSG_PUB.Count_And_Get(
151       p_encoded => FND_API.G_FALSE,
152       p_count => x_msg_count,
153       p_data  => x_msg_data);
154  END;
155 --
156 
157 /*===========================================================================+
158 | PROCEDURE                                                                 |
159 |              Get_Curr_Round_Amount                                        |
160 |                                                                           |
161 | DESCRIPTION                                                               |
162 |              Thist PROCEDURE return Currency Rounded Amount               |
163 |                                                                           |
164 | SCOPE - PRIVATE                                                           |
165 |                                                                           |
166 |                                                                           |
167 | ARGUMENTS  : IN:                                                          |
168 |                  p_amount        : Amount                                 |
169 |                  p_currency_code : Currency Code                          |
170 |              OUT:                                                         |
171 |                  x_rounded_amount : Rounded currency amount               |
172 |                                                                           |
173 |          IN/ OUT:                                                         |
174 | NOTES                                                                     |
175 |                                                                           |
176 | MODIFICATION HISTORY                                                      |
177 |    jypark          23-NOV-99 Created                                      |
178 |                                                                           |
179 +===========================================================================*/
180   PROCEDURE Get_Curr_Round_Amount (
181                        p_api_version               IN  NUMBER  DEFAULT FND_API.G_MISS_NUM,
182                        p_init_msg_list             IN  VARCHAR2  DEFAULT FND_API.G_FALSE,
183                        p_commit                    IN  VARCHAR2  DEFAULT FND_API.G_FALSE,
184                        p_validation_level          IN  NUMBER  DEFAULT FND_API.G_MISS_NUM,
185                        p_amount                    IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
186                        p_currency_code             IN  VARCHAR2   DEFAULT g_functional_currency,
187                        x_rounded_amount            OUT NOCOPY NUMBER,
188                        x_return_status             OUT NOCOPY VARCHAR2,
189                        x_msg_count                 OUT NOCOPY NUMBER,
190                        x_msg_data                  OUT NOCOPY VARCHAR2
191   ) IS
192     l_precision NUMBER(1);
193     l_mau       NUMBER;
194     l_amount    NUMBER := p_amount;
195     l_currency_code VARCHAR2(15) := p_currency_code;
196     l_api_version     CONSTANT   NUMBER :=  1.0;
197     l_api_name        CONSTANT   VARCHAR2(30) :=  'Get_Currency_Details';
198     l_return_status      VARCHAR2(1);
199     l_msg_count          NUMBER;
200     l_msg_data	         VARCHAR2(100);
201   BEGIN
202 --  Standard begin of API savepoint
203     SAVEPOINT	Curr_Round_Amount_PVT;
204 
205     -- Standard call to check for call compatibility.
206     IF NOT FND_API.Compatible_API_Call (l_api_version,
207                                         p_api_version,
208                                         l_api_name,
209                                         G_PKG_NAME)
210     THEN
211 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
212     END IF;
213 
214     -- Check p_init_msg_list
215     IF FND_API.to_Boolean( p_init_msg_list ) THEN
216       FND_MSG_PUB.initialize;
217     END IF;
218 
219 
220     --  Initialize API return status to success
221     x_return_status := FND_API.G_RET_STS_SUCCESS;
222 
223     Get_Currency_Details( p_api_version => 1.0,
224                        p_init_msg_list => 'F',
225                        p_commit => 'F',
226                        p_currency_code => l_currency_code,
227                        x_precision => l_precision,
228                        x_mau => l_mau,
229                        x_return_status => l_return_status,
230                        x_msg_count => l_msg_count,
231                        x_msg_data => l_msg_data
232                       );
233 
234 
235    IF l_mau IS NOT NULL
236    THEN
237      x_rounded_amount := ROUND( l_amount / l_mau) * l_mau;
238    ELSE
239      x_rounded_amount := ROUND( l_amount, l_precision);
240    END IF;
241 EXCEPTION
242   WHEN GL_CURRENCY_API.NO_RATE THEN
243     ROLLBACK TO Curr_Round_Amount_PVT;
244     x_return_status := FND_API.G_RET_STS_ERROR;
245     FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
246     FND_MSG_PUB.ADD;
247     FND_MSG_PUB.Count_And_Get(
248       p_encoded => FND_API.G_FALSE,
249       p_count => x_msg_count,
250       p_data  => x_msg_data);
251   WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
252     ROLLBACK TO Curr_Round_Amount_PVT;
253     x_return_status := FND_API.G_RET_STS_ERROR;
254     FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
255     FND_MSG_PUB.ADD;
256     FND_MSG_PUB.Count_And_Get(
257       p_encoded => FND_API.G_FALSE,
258       p_count => x_msg_count,
259       p_data  => x_msg_data);
260   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
261     ROLLBACK TO Curr_Round_Amount_PVT;
262     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
263     FND_MSG_PUB.Count_And_Get(
264       p_encoded => FND_API.G_FALSE,
265       p_count => x_msg_count,
266       p_data  => x_msg_data);
267   WHEN OTHERS THEN
268     ROLLBACK TO Curr_Round_Amount_PVT;
269     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
270     FND_MSG_PUB.Count_And_Get(
271       p_encoded => FND_API.G_FALSE,
272       p_count => x_msg_count,
273       p_data  => x_msg_data);
274     END;
275 
276 /*===========================================================================+
277 | PROCEDURE                                                                 |
278 |              Get_Functional_Amount                                        |
279 |                                                                           |
280 | DESCRIPTION                                                               |
281 |   This PROCEDURE returns the functional amount for a given foreign amount.|
282 |   The functional amount is rounded to the correct precision.              |
283 |                                                                           |
284 |                                                                           |
285 | SCOPE - PRIVATE                                                           |
286 |                                                                           |
287 | ARGUMENTS  : IN:                                                          |
288 |                  p_amount - the original foreign amount                   |
289 |                  p_exchange_rate - to use when converting to functional   |
290 |                                      amount                               |
291 |                one of:                                                    |
292 |                  p_currency_code - of the functional amount               |
293 |                  p_precision     - of the functional amount               |
294 |                  p_minimum_accountable_unit - of the functional amount    |
295 |              OUT:                                                         |
296 |                  x_amount_functional -                                    |
297 |                           l_amount * l_exchange_rate to correct rounding  |
298 |                           for currency                                    |
299 |                                                                           |
300 |          IN/ OUT:                                                         |
301 | NOTES                                                                     |
302 | EXCEPTIONS RAISED                                                         |
303 |    Oracle Error      If Currency Code, Precision and minimum accountable  |
304 |                      are all NULL                                         |
305 |                                                                           |
306 |    Oracle Error      If can not find information for Currency Code        |
307 |                      supplied                                             |
308 |                                                                           |
309 | MODIFICATION HISTORY                                                      |
310 |    jypark          23-NOV-99 Created                                      |
311 |    acaraujo        09-FEB-00 Optional functional currency code            |
312 |                                                                           |
313 +===========================================================================*/
314 
315 
316 PROCEDURE Get_Functional_Amount(
317 			   p_api_version                 IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
318                            p_init_msg_list               IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
319                            p_commit                      IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
320 			   p_validation_level            IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
321                            p_amount                      IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
322                            p_currency_code               IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
323                            p_exchange_rate               IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
324                            p_precision                   IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
325                            p_min_acc_unit                IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
326                            x_functional_amount           OUT NOCOPY NUMBER,
327                            x_return_status               OUT NOCOPY VARCHAR2,
328                            x_msg_count                   OUT NOCOPY NUMBER,
329                            x_msg_data                    OUT NOCOPY VARCHAR2
330   ) IS
331 
332 /*----------------------------------------------------------------------------*
333  | PRIVATE CURSOR                                                             |
334  |      curr_info                                                             |
335  |                                                                            |
336  | DESCRIPTION                                                                |
337  |      Gets the precision and the minimum accountable unit for the currency  |
338  |      Supplied                                                              |
339  |                                                                            |
340  *----------------------------------------------------------------------------*/
341 
342     CURSOR curr_info (cc FND_CURRENCIES.CURRENCY_CODE%TYPE) IS
343         SELECT PRECISION,
344                MINIMUM_ACCOUNTABLE_UNIT,
345                CURRENCY_CODE
346         FROM   FND_CURRENCIES
347         WHERE  CURRENCY_CODE = cc;
348 
349 /*---------------------------------------------------------------------------*
350  | PRIVATE DATATYPES                                                         |
351  |                                                                           |
352  *---------------------------------------------------------------------------*/
353 
354 
355     l_curr_rec       curr_info%ROWTYPE;
356     l_loc_amount     NUMBER;
357     l_amount         NUMBER := p_amount;
358     l_currency_code  VARCHAR2(15) := p_currency_code;
359     l_exchange_rate  NUMBER := p_exchange_rate;
360     --l_precision      NUMBER(1) := p_precision; Removed by Andre Araujo 02/08/00
361     l_precision      NUMBER := p_precision;
362     l_min_acc_unit   NUMBER := p_min_acc_unit;
363 
364     l_invalid_params_exp EXCEPTION;
365     l_api_version     CONSTANT   NUMBER :=  1.0;
366     l_api_name        CONSTANT   VARCHAR2(30) :=  'Get_Functional_Amount';
367     l_return_status VARCHAR2(1);
368     l_msg_count NUMBER;
369     l_msg_data VARCHAR2(32767);
370 
371     l_init_msg_list		VARCHAR2(1) := 'F';	-- Andre Araujo 02/08/00
372     l_functional_currency	VARCHAR2(10);		-- Andre Araujo 02/08/00
373     l_commit			VARCHAR2(1) := 'F';		-- Andre Araujo 02/08/00
374 
375   BEGIN
376 
377 --  Standard begin of API savepoint
378     SAVEPOINT	Functional_Amount_PVT;
379 
380     -- Standard call to check for call compatibility.
381     IF NOT FND_API.Compatible_API_Call (l_api_version,
382                                         p_api_version,
383                                         l_api_name,
384                                         G_PKG_NAME)
385     THEN
386 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
387     END IF;
388 
389     -- Check p_init_msg_list
390     IF FND_API.to_Boolean( p_init_msg_list ) THEN
391       FND_MSG_PUB.initialize;
392     END IF;
393 
394 
395     --  Initialize API return status to success
396      x_return_status := FND_API.G_RET_STS_SUCCESS;
397 
398     /*--------------------------------------------------------------------*
399      | Validate Parameters                                                |
400      *--------------------------------------------------------------------*/
401 
402 -- Begin - Andre Araujo - Read functional currency if we do not get it
403     IF (p_currency_code = FND_API.G_MISS_CHAR) OR  (p_currency_code = '-1') THEN
404        IEX_CURRENCY_PVT.GET_FUNCT_CURR(p_api_version => l_api_version,
405        		p_init_msg_list => l_init_msg_list,
406        		p_commit => l_commit,
407        		x_return_status => l_return_status,
408        		x_msg_count => l_msg_count,
409        		x_msg_data => l_msg_data,
410        		x_functional_currency => l_functional_currency);
411 
412        	l_currency_code := l_functional_currency;
413     END IF;
414 
415     -- Now that we are here lets get precision and Minimum account unit
416     IF ((p_precision = -1) OR (p_min_acc_unit = -1)) OR
417     	((p_precision = FND_API.G_MISS_NUM) OR (p_min_acc_unit = FND_API.G_MISS_NUM)) THEN
418        IEX_CURRENCY_PVT.GET_CURRENCY_DETAILS
419        	       (p_api_version => l_api_version,
420        		p_init_msg_list => l_init_msg_list,
421        		p_commit => l_commit,
422        		x_return_status => l_return_status,
423        		x_msg_count => l_msg_count,
424        		x_msg_data => l_msg_data,
425        		p_currency_code => l_functional_currency,
426        		x_precision => l_precision,
427        		x_mau => l_min_acc_unit);
428 
429     END IF;
430 
431 -- End - Andre Araujo
432 
433     IF (((l_currency_code IS NULL) AND
434          (l_precision IS NULL) AND
435          (l_min_acc_unit IS NULL)) OR
436         (l_amount IS NULL) ) THEN
437       BEGIN
438 
439          /* fnd_message('STD-FUNCT-AMT-INV-PAR'); */
440 
441          RAISE l_invalid_params_exp;
442 
443       END;
444     END IF;
445 
446     /*--------------------------------------------------------------------*
447      | Only get currency info from database if not supplied as parameters |
448      *--------------------------------------------------------------------*/
449 
450 
451     IF ((l_precision IS NULL) AND (l_min_acc_unit IS NULL)) THEN
452       BEGIN
453          OPEN curr_info(l_currency_code);
454          FETCH curr_info INTO l_curr_rec;
455          CLOSE curr_info;
456 
457          IF (l_curr_rec.currency_code IS NULL) THEN
458 
459               /* fnd_message('STD-FUNCT-AMT-CURR-NF',
460                              'CURR',
461                              currency_code); */
462 
463               RAISE l_invalid_params_exp;
464 
465          END IF;
466 
467       END;
468     ELSE
469       l_curr_rec.precision := l_precision;
470       l_curr_rec.minimum_accountable_unit := l_min_acc_unit;
471     END IF;
472 
473     l_loc_amount := l_amount * NVL(l_exchange_rate, 1);
474 
475 
476 
477     /*-----------------*
478      | Round correctly |
479      *-----------------*/
480 
481     IF (l_curr_rec.minimum_accountable_unit IS NULL) THEN
482        x_functional_amount := ROUND(l_loc_amount, l_curr_rec.precision);
483     ELSE
484        x_functional_amount := ROUND((l_loc_amount / l_curr_rec.minimum_accountable_unit)) *
485                l_curr_rec.minimum_accountable_unit;
486     END IF;
487 
488   EXCEPTION
489     WHEN GL_CURRENCY_API.NO_RATE THEN
490       ROLLBACK TO Functional_Amount_PVT;
491       x_return_status := FND_API.G_RET_STS_ERROR;
492       FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
493       FND_MSG_PUB.ADD;
494       FND_MSG_PUB.Count_And_Get(
495         p_encoded => FND_API.G_FALSE,
496         p_count => x_msg_count,
497         p_data  => x_msg_data);
498     WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
499       ROLLBACK TO Functional_Amount_PVT;
500       x_return_status := FND_API.G_RET_STS_ERROR;
501       FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
502       FND_MSG_PUB.ADD;
503       FND_MSG_PUB.Count_And_Get(
504         p_encoded => FND_API.G_FALSE,
505         p_count => x_msg_count,
506         p_data  => x_msg_data);
507     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
508       ROLLBACK TO Functional_Amount_PVT;
509       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
510       FND_MSG_PUB.Count_And_Get(
511         p_encoded => FND_API.G_FALSE,
512         p_count => x_msg_count,
513         p_data  => x_msg_data);
514     WHEN OTHERS THEN
515       ROLLBACK TO Functional_Amount_PVT;
516       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
517       FND_MSG_PUB.Count_And_Get(
518         p_encoded => FND_API.G_FALSE,
519         p_count => x_msg_count,
520         p_data  => x_msg_data);
521   END Get_Functional_Amount;
522 
523 /*===========================================================================+
524 | PROCEDURE                                                                 |
525 |              Get_Func_Amt_Rate                                            |
526 |                                                                           |
527 | DESCRIPTION                                                               |
528 |   This PROCEDURE returns the functional amount for a given foreign amount.|
529 |   The functional amount is rounded to the correct precision.              |
530 |                                                                           |
531 |                                                                           |
532 | SCOPE - PRIVATE                                                           |
533 |                                                                           |
534 | ARGUMENTS  : IN:                                                          |
535 |                  p_amount_original - the original foreign amount                   |
536 |                  p_exchange_rate - to use when converting to functional   |
537 |                                      amount                               |
538 |              OUT:                                                         |
539 |                  x_amount_functional -                                    |
540 |                           l_amount_original* l_exchange_rate to correct rounding  |
541 |                           for currency                                    |
542 |                                                                           |
543 |          IN/ OUT:                                                         |
544 | NOTES                                                                     |
545 | EXCEPTIONS RAISED                                                         |
546 |                                                                           |
547 | MODIFICATION HISTORY                                                      |
548 |    jypark          01-MAR-2000 Created                                    |
549 |                                                                           |
550 +===========================================================================*/
551 
552   PROCEDURE Get_Func_Amt_Rate(
553 			   p_api_version                 IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
554                            p_init_msg_list               IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
555                            p_commit                      IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
556 			   p_validation_level            IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
557                            p_amount_original             IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
558                            p_exchange_rate               IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
559                            x_amount_functional           OUT NOCOPY NUMBER,
560                            x_return_status               OUT NOCOPY VARCHAR2,
561                            x_msg_count                   OUT NOCOPY NUMBER,
562                            x_msg_data                    OUT NOCOPY VARCHAR2
563   ) IS
564 
565 /*---------------------------------------------------------------------------*
566  | PRIVATE DATATYPES                                                         |
567  |                                                                           |
568  *---------------------------------------------------------------------------*/
569 
570     l_amount_functional     NUMBER;
571     l_amount_original       NUMBER := p_amount_original;
572     l_functional_currency   VARCHAR2(10);
573     l_exchange_rate         NUMBER := p_exchange_rate;
574     l_precision             NUMBER;
575     l_min_acc_unit          NUMBER;
576 
577     l_invalid_params_exp    EXCEPTION;
578     l_api_version CONSTANT  NUMBER :=  1.0;
579     l_api_name    CONSTANT  VARCHAR2(30) :=  'Get_Fun_Amt_Rate';
580     l_return_status         VARCHAR2(1);
581     l_msg_count             NUMBER;
582     l_msg_data              VARCHAR2(32767);
583 
584     l_init_msg_list	    VARCHAR2(1) := 'F';
585     l_commit                VARCHAR2(1) := 'F';
586 
587   BEGIN
588 
589 --  Standard begin of API savepoint
590     SAVEPOINT	Func_Amt_Rate_PVT;
591 
592     -- Standard call to check for call compatibility.
593     IF NOT FND_API.Compatible_API_Call (l_api_version,
594                                         p_api_version,
595                                         l_api_name,
596                                         G_PKG_NAME)
597     THEN
598 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
599     END IF;
600 
601     -- Check p_init_msg_list
602     IF FND_API.to_Boolean( p_init_msg_list ) THEN
603       FND_MSG_PUB.initialize;
604     END IF;
605 
606     --  Initialize API return status to success
607     x_return_status := FND_API.G_RET_STS_SUCCESS;
608 
609     -- Get functional currency
610     IEX_CURRENCY_PVT.GET_FUNCT_CURR(p_api_version => l_api_version,
611                  p_init_msg_list => l_init_msg_list,
612                  p_commit => l_commit,
613                  x_return_status => l_return_status,
614                  x_msg_count => l_msg_count,
615                  x_msg_data => l_msg_data,
616                  x_functional_currency => l_functional_currency);
617 
618     -- Get precision and minimum account unit for functional currency
619     IEX_CURRENCY_PVT.GET_CURRENCY_DETAILS
620               (p_api_version => l_api_version,
621                p_init_msg_list => l_init_msg_list,
622                p_commit => l_commit,
623                x_return_status => l_return_status,
624                x_msg_count => l_msg_count,
625                x_msg_data => l_msg_data,
626                p_currency_code => l_functional_currency,
627                x_precision => l_precision,
628                x_mau => l_min_acc_unit);
629 
630 
631     IF (((l_functional_currency IS NULL) AND
632          (l_precision IS NULL) AND
633          (l_min_acc_unit IS NULL)) OR
634         (l_amount_original IS NULL) ) THEN
635       BEGIN
636          /* fnd_message('STD-FUNCT-AMT-INV-PAR'); */
637          RAISE l_invalid_params_exp;
638       END;
639     END IF;
640 
641    l_amount_functional := l_amount_original * NVL(l_exchange_rate, 1);
642 
643    /*-----------------*
644      | Round correctly |
645     *-----------------*/
646 
647    IF (l_min_acc_unit IS NULL) THEN
648        x_amount_functional := ROUND(l_amount_functional, l_precision);
649    ELSE
650        x_amount_functional := ROUND((l_amount_functional / l_min_acc_unit)) *
651                l_min_acc_unit;
652    END IF;
653 
654 
655   EXCEPTION
656     WHEN GL_CURRENCY_API.NO_RATE THEN
657       ROLLBACK TO Func_Amt_Rate_PVT;
658       x_return_status := FND_API.G_RET_STS_ERROR;
659       FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
660       FND_MSG_PUB.ADD;
661       FND_MSG_PUB.Count_And_Get(
662         p_encoded => FND_API.G_FALSE,
663         p_count => x_msg_count,
664         p_data  => x_msg_data);
665     WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
666       ROLLBACK TO Func_Amt_Rate_PVT;
667       x_return_status := FND_API.G_RET_STS_ERROR;
668       FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
669       FND_MSG_PUB.ADD;
670       FND_MSG_PUB.Count_And_Get(
671         p_encoded => FND_API.G_FALSE,
672         p_count => x_msg_count,
673         p_data  => x_msg_data);
674     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
675       ROLLBACK TO Func_Amt_Rate_PVT;
676       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
677       FND_MSG_PUB.Count_And_Get(
678         p_encoded => FND_API.G_FALSE,
679         p_count => x_msg_count,
680         p_data  => x_msg_data);
681     WHEN OTHERS THEN
682       ROLLBACK TO Func_Amt_Rate_PVT;
683       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
684       FND_MSG_PUB.Count_And_Get(
685         p_encoded => FND_API.G_FALSE,
686         p_count => x_msg_count,
687         p_data  => x_msg_data);
688   END Get_Func_Amt_Rate;
689 
690 /*===========================================================================+
691 | PROCEDURE                                                                 |
692 |              Get_Func_Amt_Curr                                            |
693 |                                                                           |
694 | DESCRIPTION                                                               |
695 |   This PROCEDURE returns the functional amount for a given foreign amount |
696 |   and foreign currency and exchange date.                                 |
697 |   The functional amount is rounded to the correct precision.              |
698 |                                                                           |
699 |                                                                           |
700 | SCOPE - PRIVATE                                                           |
701 |                                                                           |
702 | ARGUMENTS  : IN:                                                          |
703 |                  p_amount_original - the original foreign amount          |
704 |                  p_currency_original - of the functional amount           |
705 |                                      amount                               |
706 |                  p_exchange_date - to use when converting to functional   |
707 |              OUT:                                                         |
708 |                  x_amount_functional -                                    |
709 |                           l_amount * l_exchange_rate to correct rounding  |
710 |                           for currency                                    |
711 |                                                                           |
712 |          IN/ OUT:                                                         |
713 | NOTES                                                                     |
714 | EXCEPTIONS RAISED                                                         |
715 |                                                                           |
716 |    Oracle Error      If can not find information for Currency Code        |
717 |                      supplied                                             |
718 |                                                                           |
719 | MODIFICATION HISTORY                                                      |
720 |    jypark          01-MAR-2000 Created                                    |
721 |                                                                           |
722 +===========================================================================*/
723 
724   PROCEDURE Get_Func_Amt_Curr(
725                            p_api_version                 IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
726                            p_init_msg_list               IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
727                            p_commit                      IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
728                            p_validation_level            IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
729                            p_amount_original             IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
730                            p_currency_original           IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
731                            p_exchange_date               IN  DATE DEFAULT FND_API.G_MISS_DATE,
732                            x_amount_functional           OUT NOCOPY NUMBER,
733                            x_return_status               OUT NOCOPY VARCHAR2,
734                            x_msg_count                   OUT NOCOPY NUMBER,
735                            x_msg_data                    OUT NOCOPY VARCHAR2
736   ) IS
737 
738 /*---------------------------------------------------------------------------*
739  | PRIVATE DATATYPES                                                         |
740  |                                                                           |
741  *---------------------------------------------------------------------------*/
742 
743     l_amount_functional        NUMBER;
744     l_amount_original          NUMBER := p_amount_original;
745     l_currency_original        VARCHAR2(15) := p_currency_original;
746     l_exchange_date            DATE := p_exchange_date;
747     l_conversion_type          VARCHAR2(100);
748     l_precision                NUMBER;
749     l_min_acc_unit             NUMBER;
750 
751     l_invalid_params_exp       EXCEPTION;
752     l_api_version     CONSTANT NUMBER :=  1.0;
753     l_api_name        CONSTANT VARCHAR2(30) :=  'Get_Func_Amt_Curr';
754     l_validation_level         NUMBER := 100;
755     l_return_status            VARCHAR2(1);
756     l_msg_count                NUMBER;
757     l_msg_data                 VARCHAR2(32767);
758 
759     l_init_msg_list            VARCHAR2(1) := 'F';
760     l_currency_functional      VARCHAR2(10);
761     l_commit                   VARCHAR2(1) := 'F';
762 
763   BEGIN
764 
765 --  Standard begin of API savepoint
766     SAVEPOINT Func_Amt_Curr_Pvt;
767 
768     -- Standard call to check for call compatibility.
769     IF NOT FND_API.Compatible_API_Call (l_api_version,
770                                         p_api_version,
771                                         l_api_name,
772                                         G_PKG_NAME)
773     THEN
774       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
775     END IF;
776 
777     -- Check p_init_msg_list
778     IF FND_API.to_Boolean( p_init_msg_list ) THEN
779       FND_MSG_PUB.initialize;
780     END IF;
781 
782 
783     --  Initialize API return status to success
784     x_return_status := FND_API.G_RET_STS_SUCCESS;
785 
786     -- Get Functional Currency
787     IEX_CURRENCY_PVT.GET_FUNCT_CURR(p_api_version => l_api_version,
788          p_init_msg_list => l_init_msg_list,
789          p_commit => l_commit,
790          x_return_status => l_return_status,
791          x_msg_count => l_msg_count,
792          x_msg_data => l_msg_data,
793          x_functional_currency => l_currency_functional);
794 
795     -- Get Collections default conversion type
796     l_conversion_type := fnd_profile.value('IEX_EXCHANGE_RATE_TYPE');
797 
798     -- Get precision and minimum account unit for functional currency
799     IEX_CURRENCY_PVT.GET_CURRENCY_DETAILS
800               (p_api_version => l_api_version,
801                p_init_msg_list => l_init_msg_list,
802                p_commit => l_commit,
803                x_return_status => l_return_status,
804                x_msg_count => l_msg_count,
805                x_msg_data => l_msg_data,
806                p_currency_code => l_currency_functional,
807                x_precision => l_precision,
808                x_mau => l_min_acc_unit);
809 
810     IF (((l_currency_functional IS NULL) AND
811          (l_precision IS NULL) AND
812          (l_min_acc_unit IS NULL)) OR
813         (l_amount_original IS NULL) ) THEN
814       BEGIN
815 
816          /* fnd_message('STD-FUNCT-AMT-INV-PAR'); */
817 
818          RAISE l_invalid_params_exp;
819 
820       END;
821     END IF;
822 
823     -- Get functional amount
824     Get_Convert_Amount_Curr(
825         p_api_version => l_api_version,
826         p_init_msg_list => l_init_msg_list,
827         p_commit => l_commit,
828         p_validation_level => l_validation_level,
829         p_from_currency => l_currency_original,
830         p_to_currency => l_currency_functional,
831         p_conversion_date => l_exchange_date,
832         p_conversion_type => l_conversion_type,
833         p_amount_original => l_amount_original,
834         x_amount_converted => l_amount_functional,
835         x_return_status => l_return_status,
836         x_msg_count => l_msg_count,
837         x_msg_data => l_msg_data);
838 
839     /*-----------------*
840      | Round correctly |
841      *-----------------*/
842 
843     IF (l_min_acc_unit IS NULL) THEN
844        x_amount_functional := ROUND(l_amount_functional, l_precision);
845     ELSE
846        x_amount_functional := ROUND((l_amount_functional / l_min_acc_unit)) *
847                l_min_acc_unit;
848     END IF;
849 
850 
851   EXCEPTION
852     WHEN GL_CURRENCY_API.NO_RATE THEN
853       ROLLBACK TO Func_Amt_Curr_Pvt;
854       x_return_status := FND_API.G_RET_STS_ERROR;
855       FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
856       FND_MSG_PUB.ADD;
857       FND_MSG_PUB.Count_And_Get(
858         p_encoded => FND_API.G_FALSE,
859         p_count => x_msg_count,
860         p_data  => x_msg_data);
861     WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
862       ROLLBACK TO Func_Amt_Curr_Pvt;
863       x_return_status := FND_API.G_RET_STS_ERROR;
864       FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
865       FND_MSG_PUB.ADD;
866       FND_MSG_PUB.Count_And_Get(
867         p_encoded => FND_API.G_FALSE,
868         p_count => x_msg_count,
869         p_data  => x_msg_data);
870     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
871       ROLLBACK TO Func_Amt_Curr_Pvt;
872       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
873       FND_MSG_PUB.Count_And_Get(
874         p_encoded => FND_API.G_FALSE,
875         p_count => x_msg_count,
876         p_data  => x_msg_data);
877     WHEN OTHERS THEN
878       ROLLBACK TO Func_Amt_Curr_Pvt;
879       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
880       FND_MSG_PUB.Count_And_Get(
881         p_encoded => FND_API.G_FALSE,
882         p_count => x_msg_count,
883         p_data  => x_msg_data);
884   END Get_Func_Amt_Curr;
885 
886 /*===========================================================================+
887 | PROCEDURE                                                                  |
888 |              Get_Convert_Amount_Curr                                      |
889 |                                                                           |
890 | DESCRIPTION                                                               |
891 |   This PROCEDURE takes from and to currencies, conversion date,            |
892 |   conversion type and amount and  returns the amount converted into the   |
893 |   appropriate currency.                                                   |
894 |                                                                           |
895 |                                                                           |
896 | SCOPE - PRIVATE                                                           |
897 |                                                                           |
898 |                                                                           |
899 | ARGUMENTS  : IN:                                                          |
900 |                  p_from_currency - From currency                          |
901 |                  p_to_currency - To currency                              |
902 |                  p_conversion_date - Conversion date                      |
903 |                  p_conversion_type - Conversion type                      |
904 |                  p_amount - the original foreign amount                   |
905 |              OUT:                                                         |
906 |                  x_amount_converted -                                     |
907 |                       the amount converted into the appropriate currency. |
908 |                                                                           |
909 |          IN/ OUT:                                                         |
910 |                                                                           |
911 | NOTES                                                                     |
912 |                                                                           |
913 | MODIFICATION HISTORY                                                      |
914 |    jypark          23-NOV-99 Created                                      |
915 |                                                                           |
916 +===========================================================================*/
917 
918   PROCEDURE Get_Convert_Amount_Curr(
919                            p_api_version               IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
920                            p_init_msg_list             IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
921                            p_commit                    IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
922                            p_validation_level          IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
923                            p_from_currency             IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
924                            p_to_currency               IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
925                            p_conversion_date           IN  DATE DEFAULT FND_API.G_MISS_DATE,
926                            p_conversion_type           IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
927                            p_amount_original           IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
928                            x_amount_converted          OUT NOCOPY NUMBER,
929                            x_return_status             OUT NOCOPY VARCHAR2,
930                            x_msg_count                 OUT NOCOPY NUMBER,
931                            x_msg_data                  OUT NOCOPY VARCHAR2
932   ) AS
933     l_from_currency VARCHAR2(15) := p_from_currency;
934     l_to_currency VARCHAR2(15) := p_to_currency;
935     l_conversion_date DATE := p_conversion_date;
936     l_conversion_type VARCHAR2(30) := p_conversion_type;
937     l_amount_original NUMBER := p_amount_original;
938 
939     l_api_version     CONSTANT   NUMBER :=  1.0;
940     l_api_name        CONSTANT   VARCHAR2(30) :=  'Get_Convert_Amount_Curr';
941     l_return_status VARCHAR2(1);
942     l_msg_count NUMBER;
943     l_msg_data VARCHAR2(32767);
944   BEGIN
945     --  Standard begin of API savepoint
946     SAVEPOINT	Convert_Amount_Curr_PVT;
947 
948     -- Standard call to check for call compatibility.
949     IF NOT FND_API.Compatible_API_Call (l_api_version,
950                                         p_api_version,
951                                         l_api_name,
952                                         G_PKG_NAME)
953     THEN
954 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
955     END IF;
956 
957     -- Check p_init_msg_list
958     IF FND_API.to_Boolean( p_init_msg_list ) THEN
959       FND_MSG_PUB.initialize;
960     END IF;
961 
962     --  Initialize API return status to success
963      x_return_status := FND_API.G_RET_STS_SUCCESS;
964 
965 
966     x_amount_converted := gl_currency_api.convert_amount(x_from_currency => l_from_currency,
967                             x_to_currency => l_to_currency,
968                             x_conversion_date => l_conversion_date,
969                             x_conversion_type => l_conversion_type,
970                             x_amount => l_amount_original);
971 
972   EXCEPTION
973     WHEN GL_CURRENCY_API.NO_RATE THEN
974       ROLLBACK TO Convert_Amount_Curr_PVT;
975       x_return_status := FND_API.G_RET_STS_ERROR;
976       FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
977       FND_MSG_PUB.ADD;
978       FND_MSG_PUB.Count_And_Get(
979         p_encoded => FND_API.G_FALSE,
980         p_count => x_msg_count,
981         p_data  => x_msg_data);
982     WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
983       ROLLBACK TO Convert_Amount_Curr_PVT;
984       x_return_status := FND_API.G_RET_STS_ERROR;
985       FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
986       FND_MSG_PUB.ADD;
987       FND_MSG_PUB.Count_And_Get(
988         p_encoded => FND_API.G_FALSE,
989         p_count => x_msg_count,
990         p_data  => x_msg_data);
991     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
992       ROLLBACK TO Convert_Amount_Curr_PVT;
993       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
994       FND_MSG_PUB.Count_And_Get(
995         p_encoded => FND_API.G_FALSE,
996         p_count => x_msg_count,
997         p_data  => x_msg_data);
998     WHEN OTHERS THEN
999       ROLLBACK TO Convert_Amount_Curr_PVT;
1000       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1001       FND_MSG_PUB.Count_And_Get(
1002         p_encoded => FND_API.G_FALSE,
1003         p_count => x_msg_count,
1004         p_data  => x_msg_data);
1005   END;
1006 
1007 /*===========================================================================+
1008 | PROCEDURE                                                                  |
1009 |              Get_Convert_Amount_Sob                                       |
1010 |                                                                           |
1011 | DESCRIPTION                                                               |
1012 |   This PROCEDURE takes from and to currencies, conversion date,            |
1013 |   conversion type and amount and  returns the amount converted into the   |
1014 |   appropriate currency.                                                   |
1015 |                                                                           |
1016 |                                                                           |
1017 |                                                                           |
1018 |                                                                           |
1019 | SCOPE - PRIVATE                                                           |
1020 |                                                                           |
1021 |                                                                           |
1022 | ARGUMENTS  : IN:                                                          |
1023 |                  p_set_of_books_id - Set of books id                      |
1024 |                  p_from_currency - From currency                          |
1025 |                  p_conversion_date - Conversion date                      |
1026 |                  p_conversion_type - Conversion type                      |
1027 |                  p_amount - the original foreign amount                   |
1028 |              OUT:                                                         |
1029 |                  x_amount_converted -                                     |
1030 |                       the amount converted into the appropriate currency. |
1031 |                                                                           |
1032 |          IN/ OUT:                                                         |
1033 | NOTES                                                                     |
1034 |                                                                           |
1035 | MODIFICATION HISTORY                                                      |
1036 |    jypark          23-NOV-99 Created                                      |
1037 |                                                                           |
1038 +===========================================================================*/
1039 
1040   PROCEDURE Get_Convert_Amount_Sob(
1041 					  p_api_version               IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1042                            p_init_msg_list             IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
1043                            p_commit                    IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
1044 					  p_validation_level          IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1045                            p_set_of_books_id           IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
1046                            p_from_currency             IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
1047                            p_conversion_date           IN  DATE DEFAULT FND_API.G_MISS_DATE,
1048                            p_conversion_type           IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
1049                            p_amount_original           IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1050                            x_amount_converted          OUT NOCOPY NUMBER,
1051                            x_return_status             OUT NOCOPY VARCHAR2,
1052                            x_msg_count                 OUT NOCOPY NUMBER,
1053                            x_msg_data                  OUT NOCOPY VARCHAR2
1054   ) IS
1055     l_set_of_books_id NUMBER(15) := p_set_of_books_id;
1056     l_from_currency VARCHAR2(15) := p_from_currency;
1057     l_conversion_date DATE := p_conversion_date;
1058     l_conversion_type VARCHAR2(30) := p_conversion_type;
1059     l_amount_original NUMBER := p_amount_original;
1060 
1061     l_api_version     CONSTANT   NUMBER :=  1.0;
1062     l_api_name        CONSTANT   VARCHAR2(30) :=  'Get_Convert_Amount_Sob';
1063     l_return_status VARCHAR2(1);
1064     l_msg_count NUMBER;
1065     l_msg_data VARCHAR2(32767);
1066 BEGIN
1067 
1068 --  Standard begin of API savepoint
1069     SAVEPOINT	Convert_Amount_Sob_PVT;
1070 
1071     -- Standard call to check for call compatibility.
1072     IF NOT FND_API.Compatible_API_Call (l_api_version,
1073                                         p_api_version,
1074                                         l_api_name,
1075                                         G_PKG_NAME)
1076     THEN
1077 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1078     END IF;
1079 
1080     -- Check p_init_msg_list
1081     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1082       FND_MSG_PUB.initialize;
1083     END IF;
1084 
1085     --  Initialize API return status to success
1086     x_return_status := FND_API.G_RET_STS_SUCCESS;
1087 
1088 
1089     x_amount_converted := gl_currency_api.convert_amount(x_set_of_books_id => p_set_of_books_id,
1090                             x_from_currency => p_from_currency,
1091                             x_conversion_date => p_conversion_date,
1092                             x_conversion_type => p_conversion_type,
1093                             x_amount => p_amount_original);
1094 
1095   EXCEPTION
1096     WHEN GL_CURRENCY_API.NO_RATE THEN
1097       ROLLBACK TO Convert_Amount_Sob_PVT;
1098       x_return_status := FND_API.G_RET_STS_ERROR;
1099       FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
1100       FND_MSG_PUB.ADD;
1101       FND_MSG_PUB.Count_And_Get(
1102         p_encoded => FND_API.G_FALSE,
1103         p_count => x_msg_count,
1104         p_data  => x_msg_data);
1105     WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
1106       ROLLBACK TO Convert_Amount_Sob_PVT;
1107       x_return_status := FND_API.G_RET_STS_ERROR;
1108       FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
1109       FND_MSG_PUB.ADD;
1110       FND_MSG_PUB.Count_And_Get(
1111         p_encoded => FND_API.G_FALSE,
1112         p_count => x_msg_count,
1113         p_data  => x_msg_data);
1114     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1115       ROLLBACK TO Convert_Amount_Sob_PVT;
1116       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1117       FND_MSG_PUB.Count_And_Get(
1118         p_encoded => FND_API.G_FALSE,
1119         p_count => x_msg_count,
1120         p_data  => x_msg_data);
1121     WHEN OTHERS THEN
1122       ROLLBACK TO Convert_Amount_Sob_PVT;
1123       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1124       FND_MSG_PUB.Count_And_Get(
1125         p_encoded => FND_API.G_FALSE,
1126         p_count => x_msg_count,
1127         p_data  => x_msg_data);
1128   END;
1129 /*===========================================================================+
1130 | PROCEDURE                                                                  |
1131 |              Get_Funct_Curr                                               |
1132 |                                                                           |
1133 | DESCRIPTION                                                               |
1134 |   This PROCEDURE return functional currency of set of books                |
1135 |                                                                           |
1136 |                                                                           |
1137 |                                                                           |
1138 |                                                                           |
1139 | SCOPE - PRIVATE                                                           |
1140 |                                                                           |
1141 |                                                                           |
1142 | ARGUMENTS  : IN:                                                          |
1143 |                                                                           |
1144 |              OUT:                                                         |
1145 |                  x_functional_currency - Functional currency              |
1146 |                                                                           |
1147 |          IN/ OUT:                                                         |
1148 | NOTES                                                                     |
1149 |                                                                           |
1150 | MODIFICATION HISTORY                                                      |
1151 |    jypark          23-NOV-99 Created                                      |
1152 |                                                                           |
1153 +===========================================================================*/
1154   PROCEDURE Get_Funct_Curr(
1155                            p_api_version               IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1156                            p_init_msg_list             IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
1157                            p_commit                    IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
1158                            p_validation_level          IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1159                            x_functional_currency       OUT NOCOPY VARCHAR2,
1160                            x_return_status             OUT NOCOPY VARCHAR2,
1161                            x_msg_count                 OUT NOCOPY NUMBER,
1162                            x_msg_data                  OUT NOCOPY VARCHAR2
1163   ) IS
1164 
1165     l_api_version     CONSTANT   NUMBER :=  1.0;
1166     l_api_name        CONSTANT   VARCHAR2(30) :=  'Get_Funct_Curr';
1167     l_return_status VARCHAR2(1);
1168     l_msg_count NUMBER;
1169     l_msg_data VARCHAR2(32767);
1170  BEGIN
1171 --  Standard begin of API savepoint
1172     SAVEPOINT	Funct_Curr_PVT;
1173 
1174     -- Standard call to check for call compatibility.
1175     IF NOT FND_API.Compatible_API_Call (l_api_version,
1176                                         p_api_version,
1177                                         l_api_name,
1178                                         G_PKG_NAME)
1179     THEN
1180 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1181     END IF;
1182 
1183     -- Check p_init_msg_list
1184     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1185       FND_MSG_PUB.initialize;
1186     END IF;
1187 
1188     --  Initialize API return status to success
1189      x_return_status := FND_API.G_RET_STS_SUCCESS;
1190 
1191 
1192 --Begin-Bug#4558398-08/16/2005-jypark-remove getting functional currency code from constructor and put in procedure get_funct_curr
1193 --     SELECT  currency_code
1194 --     INTO    x_functional_currency
1195 --     FROM    gl_sets_of_books
1196 --     WHERE   set_of_books_id = g_set_of_books_id;
1197 
1198     SELECT  gll.currency_code,
1199             gll.ledger_id
1200     INTO    g_functional_currency,
1201             g_set_of_books_id
1202     FROM    ar_system_parameters    sp,
1203             gl_ledgers_public_v     gll
1204     WHERE   gll.ledger_id = sp.set_of_books_id;
1205 
1206     x_functional_currency := g_functional_currency;
1207 
1208   EXCEPTION
1209 --    WHEN GL_CURRENCY_API.NO_RATE THEN
1210 --      ROLLBACK TO Funct_Curr_PVT;
1211 --      x_return_status := FND_API.G_RET_STS_ERROR;
1212 --      FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
1213 --      FND_MSG_PUB.ADD;
1214 --      FND_MSG_PUB.Count_And_Get(
1215 --        p_encoded => FND_API.G_FALSE,
1216 --        p_count => x_msg_count,
1217 --        p_data  => x_msg_data);
1218 --    WHEN GL_CURRENCY_API.INVALID_CURRENCY THEN
1219 --      ROLLBACK TO Funct_Curr_PVT;
1220 --      x_return_status := FND_API.G_RET_STS_ERROR;
1221 --      FND_MESSAGE.SET_NAME('SQLGL', 'GL INVALID CURRENCY CODE');
1222 --      FND_MSG_PUB.ADD;
1223 --      FND_MSG_PUB.Count_And_Get(
1224 --        p_encoded => FND_API.G_FALSE,
1225 --        p_count => x_msg_count,
1226 --        p_data  => x_msg_data);
1227 --    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1228 --      ROLLBACK TO Funct_Curr_PVT;
1229 --      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1230 --      FND_MSG_PUB.Count_And_Get(
1231 --        p_encoded => FND_API.G_FALSE,
1232 --        p_count => x_msg_count,
1233 --        p_data  => x_msg_data);
1234 --    WHEN OTHERS THEN
1235 --      ROLLBACK TO Funct_Curr_PVT;
1236 --      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1237 --      FND_MSG_PUB.Count_And_Get(
1238 --        p_encoded => FND_API.G_FALSE,
1239 --        p_count => x_msg_count,
1240 --        p_data  => x_msg_data);
1241    WHEN OTHERS THEN
1242    /* if there is no record or multiple org records then setting null */
1243      g_functional_currency := null;
1244      g_set_of_books_id := null;
1245 
1246 --End-Bug#4558398-08/16/2005-jypark-remove getting functional currency code from constructor and put in procedure get_funct_curr
1247   END Get_Funct_Curr;
1248 /*===========================================================================+
1249 | PROCEDURE                                                                 |
1250 |              Get_Format_Mask                                              |
1251 |                                                                           |
1252 | DESCRIPTION                                                               |
1253 |              This Procedure returns Format Mask For Currency              |
1254 |                                                                           |
1255 | SCOPE - PRIVATE                                                           |
1256 |                                                                           |
1257 | ARGUMENTS  : IN:                                                          |
1258 |                  p_currency_code : Currency Code                          |
1259 |                  p_field_length  : Field Length                           |
1260 |              OUT:                                                         |
1261 |                  x_format mask   : Format Mask                            |
1262 |                                                                           |
1263 | NOTES                                                                     |
1264 |                                                                           |
1265 | MODIFICATION HISTORY                                                      |
1266 |    jypark          23-NOV-99 Created                                      |
1267 |                                                                           |
1268 +===========================================================================*/
1269   PROCEDURE Get_Format_Mask(
1270                            p_api_version               IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1271                            p_init_msg_list             IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
1272                            p_commit                    IN  VARCHAR2 DEFAULT FND_API.G_FALSE,
1273                            p_validation_level          IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1274                            p_currency_code             IN  VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
1275                            p_field_length              IN  NUMBER DEFAULT FND_API.G_MISS_NUM,
1276                            x_format_mask               OUT NOCOPY VARCHAR2,
1277                            x_return_status             OUT NOCOPY VARCHAR2,
1278                            x_msg_count                 OUT NOCOPY NUMBER,
1279                            x_msg_data                  OUT NOCOPY VARCHAR2
1280   ) IS
1281     l_api_version     CONSTANT   NUMBER :=  1.0;
1282     l_api_name        CONSTANT   VARCHAR2(30) :=  'Get_Format_Mask';
1283     l_return_status VARCHAR2(1);
1284     l_msg_count NUMBER;
1285     l_msg_data VARCHAR2(32767);
1286 
1287     l_currency_code   VARCHAR2(15) := p_currency_code;
1288     l_field_length    NUMBER := p_field_length;
1289     l_format_mask     VARCHAR2(1000);
1290 
1291   BEGIN
1292 --  Standard begin of API savepoint
1293     SAVEPOINT   Get_Format_Mask_PVT;
1294 
1295     -- Standard call to check for call compatibility.
1296     IF NOT FND_API.Compatible_API_Call (l_api_version,
1297                                         p_api_version,
1298                                         l_api_name,
1299                                         G_PKG_NAME)
1300     THEN
1301 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1302     END IF;
1303 
1304     -- Check p_init_msg_list
1305     IF FND_API.to_Boolean( p_init_msg_list ) THEN
1306       FND_MSG_PUB.initialize;
1307     END IF;
1308 
1309     --  Initialize API return status to success
1310     x_return_status := FND_API.G_RET_STS_SUCCESS;
1311 
1312     x_format_mask := FND_CURRENCY.Get_Format_Mask(l_currency_code, l_field_length);
1313 
1314 EXCEPTION
1315   WHEN GL_CURRENCY_API.NO_RATE THEN
1316     ROLLBACK TO Get_Format_Mask_PVT;
1317     x_return_status := FND_API.G_RET_STS_ERROR;
1318     FND_MESSAGE.SET_NAME('SQLGL', 'GL_JE_INVALID_CONVERSION_INFO');
1319     FND_MSG_PUB.ADD;
1320     FND_MSG_PUB.Count_And_Get(
1321       p_encoded => FND_API.G_FALSE,
1322       p_count => x_msg_count,
1323       p_data  => x_msg_data);
1324   WHEN OTHERS THEN
1325     ROLLBACK TO Get_Format_Mask_PVT;
1326     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1327     FND_MSG_PUB.Count_And_Get(
1328       p_encoded => FND_API.G_FALSE,
1329       p_count => x_msg_count,
1330       p_data  => x_msg_data);
1331  END Get_Format_Mask;
1332 
1333 /*===========================================================================+
1334 | PROCEDURE                                                                 |
1335 |              Get_Currency_Count                                           |
1336 |                                                                           |
1337 | DESCRIPTION                                                               |
1338 |              This Procedure returns count of functional currency          |
1339                for which the mo profile has access.                         |
1340 |                                                                           |
1341 | SCOPE - PRIVATE                                                           |
1342 |                                                                           |
1343 | ARGUMENTS  : IN:                                                          |
1344 |                  NULL                                                     |
1345 |              RETURN :                                                     |
1346 |                  Number                                                   |
1347 |                                                                           |
1348 | NOTES                                                                     |
1349 |                                                                           |
1350 | MODIFICATION HISTORY                                                      |
1351 |   lkkumar          31-May-2005 Created                                    |
1352 |                                                                           |
1353 +===========================================================================*/
1354  FUNCTION Get_Currency_Count Return Number IS
1355  cnt_currency Number;
1356  BEGIN
1357   SELECT  count(distinct gll.currency_code)
1358   INTO    cnt_currency
1359   FROM    ar_system_parameters    sp,
1360           gl_ledgers_public_v     gll
1361   WHERE   gll.ledger_id = sp.set_of_books_id;
1362   Return (cnt_currency);
1363  EXCEPTION WHEN OTHERS THEN
1364    Return (Null);
1365  END Get_Currency_count;
1366 
1367 
1368 --
1369 
1370 --
1371 --
1372 --
1373 -- constructor section
1374 --
1375 --Begin-Bug#4558398-08/16/2005-jypark-remove getting functional currency code from constructor and put in procedure get_funct_curr
1376   BEGIN
1377 --    SELECT  sob.currency_code,
1378 --            sob.set_of_books_id
1379 --    INTO    g_functional_currency,
1380 --            g_set_of_books_id
1381 --    FROM    ar_system_parameters    sp,
1382 --            gl_sets_of_books        sob
1383 --    WHERE   sob.set_of_books_id = sp.set_of_books_id;
1384 --  EXCEPTION
1385 --    WHEN OTHERS THEN
1386 --            RAISE;
1387 --Begin-Bug#4558398-08/16/2005-jypark-remove getting functional currency code from constructor and put in procedure get_funct_curr
1388 --
1389   g_next_element            := 0;
1390   PG_DEBUG := TO_NUMBER(NVL(FND_PROFILE.value('IEX_DEBUG_LEVEL'), '20'));
1391 
1392 END IEX_CURRENCY_PVT;