DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_GL_TAX_OPTIONS_PKG

Source


1 PACKAGE BODY zx_gl_tax_options_pkg AS
2 /* $Header: zxgltaxoptionb.pls 120.22 2006/09/22 17:00:53 nipatel ship $ */
3 
4 
5   -- Logging Infra
6   G_PKG_NAME                   CONSTANT VARCHAR2(30) := 'ZX_GL_TAX_OPTIONS_PKG';
7   G_CURRENT_RUNTIME_LEVEL      NUMBER;
8   G_LEVEL_UNEXPECTED           CONSTANT NUMBER       := FND_LOG.LEVEL_UNEXPECTED;
9   G_LEVEL_ERROR                CONSTANT NUMBER       := FND_LOG.LEVEL_ERROR;
10   G_LEVEL_EXCEPTION            CONSTANT NUMBER       := FND_LOG.LEVEL_EXCEPTION;
11   G_LEVEL_EVENT                CONSTANT NUMBER       := FND_LOG.LEVEL_EVENT;
12   G_LEVEL_PROCEDURE            CONSTANT NUMBER       := FND_LOG.LEVEL_PROCEDURE;
13   G_LEVEL_STATEMENT            CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
14   G_MODULE_NAME                CONSTANT VARCHAR2(60) := 'ZX.PLSQL.ZX_GL_TAX_OPTIONS_PKG.';
15 
16 -- ***** PUBLIC PROCEDURES *****
17 /*===========================================================================+
18  | PROCEDURE
19  |    get_default_values
20  |
21  | IN
22  |    p_ledger_id          : Ledger ID
23  |    p_org_id             : Organization ID
24  |    p_le_id              : Legal Entity ID
25  |    p_account_segment    : Account Segment Number
26  |    p_account_type       : 'I' for Input Tax Rate Codes migrated from AP
27  |                           'O' for Output Tax Rate Codes migrated from AR
28  |                           'T'  for newly created Tax Rate Codes
29  |    p_trx_date           : Transaction Date
30  |
31  | OUT
32  |    x_default_regime_code     : Tax Regime Code
33  |    x_default_tax             : Tax
34  |    x_default_tax_status_code : Tax Status Code
35  |    x_default_tax_rate_code   : Tax Rate Code
36  |    x_default_tax_rate_id     : Tax Rate ID
37  |    x_default_rounding_code   : Rounding Code
38  |    x_default_incl_tax_flag   : Inclusive Tax Flag
39  |    x_return_status           : Either 'S' (Success), 'E' (Known Error),
40  |                                'U' (Unexpected Error/Exception)
41  |    x_msg_out                 : Output Message
42  |                                When x_return_status is 'E' x_msg_out returns
43  |                                message code.
44  |                                When x_return_status is 'U' x_msg_out returns
45  |                                SQLCODE.
46  |                                When x_return_status is 'S' x_msg_out returns
47  |                                NULL.
48  |
49  | DESCRIPTION
50  |     This routine returns Regime to Rate tax information for a particular
51  |     account segment value or a ledger.
52  |
53  | SCOPE - PUBLIC
54  |
55  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
56  |
57  | CALLED FROM
58  |
59  | NOTES
60  | 1. Mapping between tax_type_code at journal line and tax_class in setup
61  |
62  |    TAX_TYPE_CODE    TAX_CLASS
63  |    -------------    --------------
64  |    'I'              'INPUT'
65  |    'O'              'OUTPUT'
66  |    'T'              NULL
67  |    NULL             NON_TAXABLE
68  |
69  |
70  | MODIFICATION HISTORY
71  | 04/08/2005   Yoshimichi Konishi   Created.
72  |
73  +==========================================================================*/
74 PROCEDURE get_default_values
75 (   p_api_version      IN   NUMBER  DEFAULT NULL,
76     p_ledger_id        IN   NUMBER,
77     p_org_id           IN   NUMBER,
78     p_le_id            IN   NUMBER,
79     p_account_segment  IN   VARCHAR2,
80     p_account_type     IN   VARCHAR2,
81     p_trx_date         IN   DATE,
82     x_default_regime_code       OUT   NOCOPY  VARCHAR2,
83     x_default_tax               OUT   NOCOPY  VARCHAR2,
84     x_default_tax_status_code   OUT   NOCOPY  VARCHAR2,
85     x_default_tax_rate_code     OUT   NOCOPY  VARCHAR2,
86     x_default_tax_rate_id       OUT   NOCOPY  NUMBER,
87     x_default_rounding_code     OUT   NOCOPY  VARCHAR2,
88     x_default_incl_tax_flag     OUT   NOCOPY  VARCHAR2,
89     x_return_status             OUT   NOCOPY  VARCHAR2,
90     x_msg_out                   OUT   NOCOPY  VARCHAR2
91 ) IS
92 
93   -- ***** CURSORS *****
94   CURSOR acct_rate_cur (p_tax_class         VARCHAR2,
95                         p_ledger_id         NUMBER,
96                         p_account_segment   VARCHAR2)
97   IS
98   SELECT  acr.tax_regime_code,
99           acr.tax,
100           acr.tax_status_code,
101           acr.tax_rate_code,
102           nvl(rates.source_id, rates.tax_rate_id),
103           acr.tax_class
104   FROM    zx_account_rates       acr,
105           zx_sco_rates           rates
106   WHERE   rates.tax_regime_code = acr.tax_regime_code
107   AND     rates.tax = acr.tax
108   AND     rates.tax_status_code = acr.tax_status_code
109   AND     rates.tax_rate_code = acr.tax_rate_code
110   AND     rates.active_flag = 'Y'
111   AND     nvl(acr.tax_class, p_tax_class) = p_tax_class
112   AND     acr.ledger_id = p_ledger_id
113   AND     acr.account_segment_value = p_account_segment
114   AND     p_trx_date >= rates.effective_from and
115           (p_trx_date <= rates.effective_to OR rates.effective_to IS NULL)
116   AND exists ( select 1 from zx_sco_taxes taxes
117       where taxes.tax_regime_code = rates.tax_regime_code
118         AND taxes.tax = rates.tax
119         AND taxes.live_for_applicability_flag = 'Y'
120         AND taxes.live_for_processing_flag = 'Y'
121         AND nvl(taxes.offset_tax_flag,'N') <> 'Y');
122 
123 
124   CURSOR acct_rate_sob_cur (p_tax_class         VARCHAR2,
125                             p_ledger_id         NUMBER)
126   IS
127   SELECT  acr.tax_regime_code,
128           acr.tax,
129           acr.tax_status_code,
130           acr.tax_rate_code,
131           nvl(rates.source_id, rates.tax_rate_id),
132           acr.tax_class
133   FROM    zx_account_rates       acr,
134           zx_sco_rates           rates
135   WHERE   rates.tax_regime_code = acr.tax_regime_code
136   AND     rates.tax = acr.tax
137   AND     rates.tax_status_code = acr.tax_status_code
138   AND     rates.tax_rate_code = acr.tax_rate_code
139   AND     rates.active_flag = 'Y'
140   AND     nvl(acr.tax_class, p_tax_class) = p_tax_class
141   AND     acr.ledger_id = p_ledger_id
142   AND     acr.account_segment_value IS NULL
143   AND     p_trx_date >= rates.effective_from and
144           (p_trx_date <= rates.effective_to OR rates.effective_to IS NULL)
145   AND exists ( select 1 from zx_sco_taxes taxes
146       where taxes.tax_regime_code = rates.tax_regime_code
147         AND taxes.tax = rates.tax
148         AND taxes.live_for_applicability_flag = 'Y'
149         AND taxes.live_for_processing_flag = 'Y'
150         AND nvl(taxes.offset_tax_flag,'N') <> 'Y');
151 
152   -- ***** VARIABLES *****
153   l_tax_type_code          VARCHAR2(30);
154   l_tax_class              VARCHAR2(30);
155   l_tax_class_tmp          VARCHAR2(30);
156   l_tax_regime_code        VARCHAR2(30);
157   l_tax                    VARCHAR2(50);
158   l_tax_status_code        VARCHAR2(30);
159   l_tax_rate_code          VARCHAR2(50);
160   l_tax_rate_id            NUMBER(15);
161   l_content_owner_id       NUMBER(15);
162   l_rounding_rule_code     VARCHAR2(30);
163   l_incl_tax_flag          VARCHAR2(1);
164   l_ledger_flag            VARCHAR2(1);
165   l_return_status          VARCHAR2(1);
166   l_msg_out                VARCHAR2(30);
167 
168    -- Logging Infra
169    l_api_name       CONSTANT   VARCHAR2(30) := 'GET_DEFAULT_VALUES';
170    l_api_version    CONSTANT   NUMBER := 1.0;
171    l_procedure_name CONSTANT VARCHAR2(30) := 'GET_DEFAULT_VALUES';
172    l_log_msg   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
173    -- Logging Infra
174    l_set_security_context_flag VARCHAR2(1);
175 
176 BEGIN
177 
178   -- Logging Infra: Setting up runtime level
179   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
180 
181   -- Logging Infra: Procedure level
182   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
183      FND_LOG.STRING(G_LEVEL_PROCEDURE,
184                     G_MODULE_NAME || l_procedure_name,
185                     'get_default_values(+)');
186   END IF;
187   -- Logging Infra: Break point input parameters
188   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
189       l_log_msg := 'B: IN: api_version=' || p_api_version ||
190                    ', ledger_id=' || p_ledger_id ||
191                    ', org_id=' || p_org_id ||
192                    ', account_segment=' || p_account_segment ||
193                    ', account_type=' || p_account_type ||
194                    ', trx_date=' || p_trx_date;
195       FND_LOG.STRING(G_LEVEL_STATEMENT,
196                     G_MODULE_NAME || l_procedure_name,
197                     l_log_msg);
198   END IF;
199 
200   x_return_status := FND_API.G_RET_STS_SUCCESS;
201 
202   IF p_account_type IN ('E', 'I') THEN
203      l_tax_class_tmp := 'INPUT';
204   ELSIF p_account_type IN ('R' , 'O') THEN
205      l_tax_class_tmp := 'OUTPUT';
206   ELSIF p_account_type = 'T' THEN
207      l_tax_class_tmp := p_account_type;
208   END IF;
209 
210   IF  ZX_SECURITY.g_first_party_org_id is NULL THEN
211      l_set_security_context_flag := 'Y';
212   ELSE
213      l_set_security_context_flag := 'N';
214   END IF;
215 
216   IF l_set_security_context_flag = 'Y' Then
217     -- Logging Infra: Procedure level
218     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
219        FND_LOG.STRING(G_LEVEL_PROCEDURE,
220                       G_MODULE_NAME || l_procedure_name,
221                       'Setting Security Context');
222     END IF;
223 
224     ZX_SECURITY.set_security_context(p_le_id, p_org_id, NULL, x_return_status);
225 
226     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
227      -- Logging Infra: Statement level
228       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
229          FND_LOG.STRING(G_LEVEL_STATEMENT,
230                         G_MODULE_NAME || l_procedure_name,
231                         'Error Setting Security Context');
232       END IF;
233       Return;
234     END IF;
235   END IF;
236 
237   -- Logging Infra: Procedure level
238   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
239      FND_LOG.STRING(G_LEVEL_PROCEDURE,
240                     G_MODULE_NAME || l_procedure_name,
241                     'Fetching default tax rate info');
242   END IF;
243 
244   -- Account Level
245     -- Logging Infra: Break point acct_rate_cur
246     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
247         l_log_msg := 'B: CUR: acct_rate_cur: tax_class=' || l_tax_class_tmp ||
248                      ', ledger_id=' || p_ledger_id ||
249                      ', account_segment=' || p_account_segment;
250         FND_LOG.STRING(G_LEVEL_STATEMENT,
251                       G_MODULE_NAME || l_procedure_name,
252                       l_log_msg);
253     END IF;
254 
255     OPEN acct_rate_cur (l_tax_class_tmp,
256                         p_ledger_id,
257                         p_account_segment);
258     FETCH acct_rate_cur INTO x_default_regime_code,
259                              x_default_tax,
260                              x_default_tax_status_code,
261                              x_default_tax_rate_code,
262                              x_default_tax_rate_id,
263                              l_tax_class;
264     IF acct_rate_cur%FOUND THEN
265      l_ledger_flag := 'N';
266     ELSE
267      l_ledger_flag := 'Y';
268     END IF;
269 
270     CLOSE acct_rate_cur;
271 
272     -- Logging Infra: Break point acct_rate_cur
273     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
274         l_log_msg := 'B: CUR: acct_rate_cur: tax_regime_code=' || x_default_regime_code ||
275                      ', tax=' || x_default_tax ||
276                      ', tax_status_code=' || x_default_tax_status_code ||
277                      ', tax_rate_code=' || x_default_tax_rate_code ||
278                      ', tax_rate_id=' || x_default_tax_rate_id ||
279                      ', tax_class=' || l_tax_class;
280         FND_LOG.STRING(G_LEVEL_STATEMENT,
281                        G_MODULE_NAME || l_procedure_name,
282                        l_log_msg);
283     END IF;
284 
285   -- Ledger / Set Of Books Level
286   IF l_ledger_flag = 'Y' THEN
287 
288     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
289         l_log_msg := 'B: CUR: acct_rate_sob_cur: tax_class=' || l_tax_class_tmp ||
290                      ', ledger_id=' || p_ledger_id;
291         FND_LOG.STRING(G_LEVEL_STATEMENT,
292                       G_MODULE_NAME || l_procedure_name,
293                       l_log_msg);
294     END IF;
295 
296     OPEN acct_rate_sob_cur (l_tax_class_tmp,
297                             p_ledger_id);
298 
299     FETCH acct_rate_sob_cur INTO x_default_regime_code,
300                                  x_default_tax,
301                                  x_default_tax_status_code,
302                                  x_default_tax_rate_code,
303                                  x_default_tax_rate_id,
304                                  l_tax_class;
305     CLOSE acct_rate_sob_cur;
306 
307     -- Logging Infra: Break point acct_rate_cur
308     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
309         l_log_msg := 'B: CUR: acct_rate_sob_cur: tax_regime_code=' || x_default_regime_code ||
310                      ', tax=' || x_default_tax ||
311                      ', tax_status_code=' || x_default_tax_status_code ||
312                      ', tax_rate_code=' || x_default_tax_rate_code ||
313                      ', tax_rate_id=' || x_default_tax_rate_id ||
314                      ', tax_class=' || l_tax_class;
315         FND_LOG.STRING(G_LEVEL_STATEMENT,
316                       G_MODULE_NAME || l_procedure_name,
317                       l_log_msg);
318     END IF;
319   END IF;
320 
321 
322   IF l_set_security_context_flag = 'Y' Then
323 
324     -- Logging Infra: Procedure level
325     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
326        FND_LOG.STRING(G_LEVEL_PROCEDURE,
327                       G_MODULE_NAME || l_procedure_name,
328                       'Resetting First Party Org context to NULL');
329     END IF;
330 
331     ZX_SECURITY.G_FIRST_PARTY_ORG_ID := NULL;
332      --dbms_session.set_context('my_ctx','FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
333      ZX_SECURITY.name_value('FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
334   END IF;
335 
336   -- Setting l_tax_type_code to pass to APIs that default rounding
337   -- rule and default tax include flag
338 
339   IF l_tax_class IS NULL THEN
340      l_tax_type_code := 'T';
341   ELSIF l_tax_class = 'INPUT' THEN
342      l_tax_type_code := 'I';
343   ELSIF l_tax_class = 'OUTPUT' THEN
344      l_tax_type_code := 'O';
345   END IF;
346 
347   -- Logging Infra: Procedure level
348   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
349      FND_LOG.STRING(G_LEVEL_PROCEDURE,
350                     G_MODULE_NAME || l_procedure_name,
351                     'Fetching default rounding rule');
352   END IF;
353 
354   GET_ROUNDING_RULE_CODE(1.0,
355                          p_ledger_id,
356                          p_org_id,
357                          p_le_id,
358                          l_tax_type_code,
359                          x_default_rounding_code,
360                          x_return_status,
361                          x_msg_out);
362 
363   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
364    -- Logging Infra: Statement level
365     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
366        FND_LOG.STRING(G_LEVEL_STATEMENT,
367                       G_MODULE_NAME || l_procedure_name,
368                       'Error from API to default rounding rule');
369     END IF;
370     Return;
371   END IF;
372 
373   -- Logging Infra: Procedure level
374   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
375      FND_LOG.STRING(G_LEVEL_PROCEDURE,
376                     G_MODULE_NAME || l_procedure_name,
377                     'Fetching default tax include flag');
378   END IF;
379 
380   GET_DEFAULT_TAX_INCLUDE_FLAG(1.0,
381                                p_ledger_id,
382                                p_org_id,
383                                p_le_id,
384                                p_account_segment,
385                                l_tax_type_code,
386                                x_default_incl_tax_flag,
387                                x_return_status,
388                                x_msg_out);
389 
390   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
391    -- Logging Infra: Statement level
392     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
393        FND_LOG.STRING(G_LEVEL_STATEMENT,
394                       G_MODULE_NAME || l_procedure_name,
395                       'Error from API to default tax include flag');
396     END IF;
397     Return;
398   END IF;
399 
400   IF x_default_regime_code IS NULL THEN
401     IF x_default_rounding_code IS NULL THEN
402       -- Logging Infra: Break point acct_rate_sob_cur
403       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
404 	  l_log_msg := 'B: tax_regime_code/rounding_rule_code IS NULL';
405 	  FND_LOG.STRING(G_LEVEL_STATEMENT,
406 			G_MODULE_NAME || l_procedure_name,
407 			l_log_msg);
408       END IF;
409       l_return_status := FND_API.G_RET_STS_ERROR;
410       l_msg_out := 'ZX_GL_ROUNDING_CODE_NULL';
411       Return;
412     ELSE
413       -- ledger level information (rounding_rule_code) has been derived
414       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
415 	  l_log_msg := 'B: tax_regime_code IS NULL but rounding_rule_code IS NOT NULL';
416 	  FND_LOG.STRING(G_LEVEL_STATEMENT,
417 			G_MODULE_NAME || l_procedure_name,
418 			l_log_msg);
419       END IF;
420     END IF;
421   END IF;
422 
423   /* comment out as the user should be able to continue to enter journal even if
424      default value is not found. This is consistent with 11i behaviour.
425   IF x_default_tax_rate_id IS NULL THEN
426       x_return_status := FND_API.G_RET_STS_ERROR;
427       x_msg_out := 'ZX_GL_RATE_ID_NULL';
428      -- Logging Infra: Statement level
429       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
430          FND_LOG.STRING(G_LEVEL_STATEMENT,
431                         G_MODULE_NAME || l_procedure_name,
432                         x_msg_out);
433       END IF;
434       Return;
435   END IF;
436   */
437 
438    -- Logging Infra: Break point output parameters
439    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
440        l_log_msg := 'B: OUT: return_status=' || x_return_status ||
441                     ', tax_regime_code=' || x_default_regime_code ||
442                     ', tax=' || x_default_tax ||
443                     ', tax_status_code=' || x_default_tax_status_code ||
444                     ', tax_rate_code=' || x_default_tax_rate_code ||
445                     ', rounding_rule_code=' || x_default_rounding_code ||
446                     ', incl_tax_flag=' || x_default_incl_tax_flag ||
447                     ', tax_rate_id=' || x_default_tax_rate_id;
448        FND_LOG.STRING(G_LEVEL_STATEMENT,
449                      G_MODULE_NAME || l_procedure_name,
450                      l_log_msg);
451    END IF;
452    -- Logging Infra: Procedure level
453    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
454       FND_LOG.STRING(G_LEVEL_PROCEDURE,
455                      G_MODULE_NAME,
456                      'get_default_value(-)');
457    END IF;
458 
459 EXCEPTION
460   WHEN OTHERS THEN
461     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
462     x_msg_out := TO_CHAR(SQLCODE);
463     -- Logging Infra:
464     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
465        FND_LOG.STRING(G_LEVEL_STATEMENT,
466                       G_MODULE_NAME || l_procedure_name,
467                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
468     END IF;
469     app_exception.raise_exception;
470 END get_default_values;
471 
472 
473 /*===========================================================================+
474  | PROCEDURE
475  |    get_tax_rate_and_account
476  |
477  | IN
478  |    p_ledger_id          : Ledger ID
479  |    p_org_id             : Organization ID
480  |    p_tax_type_code      : 'I' for Input Tax Rate Codes migrated from AP
481  |                           'O' for Output Tax Rate Codes migrated from AR
482  |                           'T' for newly created Tax Rate Codes
483  |    p_tax_rate_id        : Tax Rate ID
484  |
485  | OUT
486  |    x_tax_rate_pct       : Tax Percentage Rate
487  |    x_tax_account_ccid   : Tax Account CCID
488  |    x_return_status      : Return Status. See get_default_value for details.
489  |    x_msg_out            : Output Message. See get_default_value for
490  |                           details.
491  |
492  | DESCRIPTION
493  |     This routine returns tax percentage rate and its accounting CCID for
494  |     a particular tax_rate_id.
495  |
496  | SCOPE - PUBLIC
497  |
498  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
499  |
500  | CALLED FROM
501  |
502  | NOTES
503  |
504  |
505  | MODIFICATION HISTORY
506  | 04/08/2005   Yoshimichi Konishi   Created.
507  |
508  +==========================================================================*/
509 PROCEDURE get_tax_rate_and_account
510 (   p_api_version       IN   NUMBER  DEFAULT NULL,
511     p_ledger_id         IN   NUMBER,
512     p_org_id            IN   NUMBER,
513     p_tax_type_code     IN   VARCHAR2,
514     p_tax_rate_id       IN   NUMBER,
515     x_tax_rate_pct      OUT  NOCOPY   NUMBER,
516     x_tax_account_ccid  OUT  NOCOPY   NUMBER,
517     x_return_status     OUT  NOCOPY   VARCHAR2,
518     x_msg_out           OUT  NOCOPY   VARCHAR2
519 ) IS
520 
521   -- ***** CURSORS *****
522   CURSOR get_pct_rate_ccid_cur (p_tax_rate_id  NUMBER,
523                                 p_org_id       NUMBER,
524                                 p_ledger_id    NUMBER)
525   IS
526   SELECT  zrb.percentage_rate,
527           NVL(za.tax_account_ccid, za.non_rec_account_ccid)
528           -- Bug 4766614
529           -- Added NVL so that when tax_account_ccid is null
530           -- the API returns non_rec_account_ccid
531   FROM    zx_rates_b zrb,
532           zx_accounts  za
533   WHERE   nvl(zrb.source_id, zrb.tax_rate_id) = p_tax_rate_id
534   AND     za.internal_organization_id(+) = p_org_id
535   AND     za.ledger_id(+) = p_ledger_id
536   AND     za.tax_account_entity_id(+) = zrb.tax_rate_id
537   AND     za.tax_account_entity_code(+) = 'RATES';
538 
539   -- ***** VARIABLES *****
540   l_pct_rate            NUMBER;
541   l_tax_account_ccid    NUMBER;
542   l_tax_rate_id         NUMBER(15);
543   l_source_id           NUMBER(15);
544   l_return_status       VARCHAR2(1);
545   l_msg_out             VARCHAR2(30);
546 
547   -- Logging Infra
548   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_TAX_RATE_AND_ACCOUNT';
549   l_api_version    CONSTANT   NUMBER := 1.0;
550   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_TAX_RATE_AND_ACCOUNT';
551   l_log_msg   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
552   -- Logging Infra
553 
554 BEGIN
555   -- Logging Infra: Setting up runtime level
556   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
557 
558   -- Logging Infra: Procedure level
559   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
560      FND_LOG.STRING(G_LEVEL_PROCEDURE,
561                     G_MODULE_NAME || l_procedure_name,
562                     'get_tax_rate_and_account(+)');
563   END IF;
564   -- Logging Infra: Break point input parameters
565   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
566       l_log_msg := 'B: IN: api_version=' || p_api_version ||
567                    ', tax_type_code=' || p_tax_type_code ||
568                    ', tax_rate_id=' || p_tax_rate_id;
572   END IF;
569       FND_LOG.STRING(G_LEVEL_STATEMENT,
570                     G_MODULE_NAME || l_procedure_name,
571                     l_log_msg);
573 
574   OPEN get_pct_rate_ccid_cur (p_tax_rate_id, p_org_id, p_ledger_id);
575 
576   FETCH get_pct_rate_ccid_cur INTO l_pct_rate,
577                                    l_tax_account_ccid;
578   IF get_pct_rate_ccid_cur%FOUND THEN
579     l_return_status := FND_API.G_RET_STS_SUCCESS;
580   ELSE
581     l_return_status := FND_API.G_RET_STS_ERROR;
582     x_msg_out := 'ZX_GL_OUT_RATE_CCID_NOTFOUND';
583   END IF;
584 
585   CLOSE get_pct_rate_ccid_cur;
586 
587   -- Logging Infra: Break point get_pct_rate_ccid_cur
588   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
589       l_log_msg := 'B: CUR: get_pct_rate_ccid_cur: pct_rate=' || l_pct_rate ||
590                    ', tax_account_ccid=' || l_tax_account_ccid;
591       FND_LOG.STRING(G_LEVEL_STATEMENT,
592                     G_MODULE_NAME || l_procedure_name,
593                     l_log_msg);
594   END IF;
595 
596   x_tax_rate_pct       := l_pct_rate;
597   x_tax_account_ccid   := l_tax_account_ccid;
598   x_return_status      := l_return_status;
599   x_msg_out            := l_msg_out;
600 
601   -- Logging Infra: Break point output parameters
602   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
603       l_log_msg := 'B: OUT: tax_rate_pct=' || l_pct_rate ||
604                    ', tax_account_ccid=' || l_tax_account_ccid ||
605                    ', return_status=' || l_return_status;
606       FND_LOG.STRING(G_LEVEL_STATEMENT,
607                     G_MODULE_NAME || l_procedure_name,
608                     l_log_msg);
609   END IF;
610   -- Logging Infra: Procedure level
611   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
612      FND_LOG.STRING(G_LEVEL_PROCEDURE,
613                     G_MODULE_NAME || l_procedure_name,
614                     'get_tax_rate_and_account(-)');
615   END IF;
616 
617 EXCEPTION
618   WHEN OTHERS THEN
619     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
620     x_msg_out := TO_CHAR(SQLCODE);
621     -- Logging Infra:
622     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
623        FND_LOG.STRING(G_LEVEL_STATEMENT,
624                       G_MODULE_NAME || l_procedure_name,
625                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
626     END IF;
627     app_exception.raise_exception;
628 END get_tax_rate_and_account;
629 
630 
631 /*===========================================================================+
632  | PROCEDURE
633  |    get_tax_ccid
634  |
635  | IN
636  |    p_tax_rate_id        : Tax Rate ID
637  |    p_org_id             : Organization ID
638  |    p_ledger_id          : Ledger ID
639  |
640  | OUT
644  |                           details.
641  |    x_tax_account_ccid   : Tax Account CCID
642  |    x_return_status      : Return Status. See get_default_value for details.
643  |    x_msg_out            : Output Message. See get_default_value for
645  |
646  | DESCRIPTION
647  |     This routine returns tax accounting CCID for a particular tax_rate_id.
648  |
649  |
650  | SCOPE - PUBLIC
651  |
652  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
653  |
654  | CALLED FROM
655  |
656  | NOTES
657  |
658  |
659  | MODIFICATION HISTORY
660  | 04/08/2005   Yoshimichi Konishi   Created.
661  |
662  +==========================================================================*/
663 PROCEDURE get_tax_ccid
664 (  p_api_version        IN   NUMBER,
665    p_tax_rate_id        IN   NUMBER,
666    p_org_id             IN   NUMBER,
667    p_ledger_id          IN   NUMBER,
668    x_tax_account_ccid   OUT  NOCOPY   NUMBER,
669    x_return_status      OUT  NOCOPY   VARCHAR2,
670    x_msg_out            OUT  NOCOPY   VARCHAR2
671 ) IS
672 
673   -- ***** CURSORS *****
674   CURSOR tax_acct_cur (p_tax_rate_id   NUMBER,
675                        p_ledger_id     NUMBER,
676                        p_org_id        NUMBER)
677   IS
678   SELECT  NVL(tax_account_ccid, non_rec_account_ccid)
679           -- Bug 4766614
680           -- Added NVL so that when tax_account_ccid is null
681           -- the API returns non_rec_account_ccid
682   FROM    zx_accounts   za, zx_rates_b rates
683   WHERE   nvl(rates.source_id, rates.tax_rate_id) = p_tax_rate_id
684   AND     za.tax_account_entity_id(+) = rates.tax_rate_id
685   AND     za.tax_account_entity_code(+) = 'RATES'
686   AND     za.ledger_id(+) = p_ledger_id
687   AND     za.internal_organization_id(+) = p_org_id;
688 
689   -- ***** VARIABLES *****
690 
691   -- Logging Infra
692   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_TAX_CCID';
693   l_api_version    CONSTANT   NUMBER := 1.0;
694   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_TAX_CCID';
695   l_log_msg   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
696   -- Logging Infra
697 
698 BEGIN
699   -- Logging Infra: Setting up runtime level
700   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
701 
702   -- Logging Infra: Procedure level
703   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
704      FND_LOG.STRING(G_LEVEL_PROCEDURE,
705                     G_MODULE_NAME || l_procedure_name,
706                     'get_tax_ccid(+)');
707   END IF;
708 
709   -- Logging Infra: Break point input parameters
710   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
711       l_log_msg := 'B: IN: api_version=' || p_api_version ||
712                    ', tax_rate_id=' || p_tax_rate_id ||
713                    ', org_id=' || p_org_id ||
714                    ', ledger_id=' || p_ledger_id;
715       FND_LOG.STRING(G_LEVEL_STATEMENT,
716                     G_MODULE_NAME || l_procedure_name,
717                     l_log_msg);
718   END IF;
719 
720   OPEN tax_acct_cur (p_tax_rate_id,
721                      p_ledger_id,
722                      p_org_id);
723 
724   FETCH tax_acct_cur INTO x_tax_account_ccid;
725 
726   IF tax_acct_cur%FOUND THEN
727     x_return_status := FND_API.G_RET_STS_SUCCESS;
728   ELSE
729     x_return_status := FND_API.G_RET_STS_ERROR;
730     x_msg_out := 'ZX_GL_TAXCCID_NOT_FOUND';
731   END IF;
732 
733   CLOSE tax_acct_cur;
734 
735   -- Logging Infra: Break point output parameters
736   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
737       l_log_msg := 'B: OUT: tax_account_ccid=' || x_tax_account_ccid ||
738                    ', return_status=' || x_return_status;
739       FND_LOG.STRING(G_LEVEL_STATEMENT,
740                     G_MODULE_NAME || l_procedure_name,
741                     l_log_msg);
742   END IF;
743 
744   -- Logging Infra: Procedure level
745   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
746      FND_LOG.STRING(G_LEVEL_PROCEDURE,
747                     G_MODULE_NAME || l_procedure_name,
748                     'get_tax_ccid(-)');
749   END IF;
750 
751 EXCEPTION
752   WHEN OTHERS THEN
753     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
754     x_msg_out := TO_CHAR(SQLCODE);
755     -- Logging Infra:
756     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
757        FND_LOG.STRING(G_LEVEL_STATEMENT,
758                       G_MODULE_NAME || l_procedure_name,
759                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
760     END IF;
761     app_exception.raise_exception;
762 END get_tax_ccid;
763 
764 
765 /*===========================================================================+
766  | PROCEDURE
767  |    get_tax_rate_id
768  |
769  | IN
770  |    p_org_id             : Organization ID
771  |    p_le_id              : Legal Entity ID
772  |    p_tax_rate_code      : Tax Rate Code
773  |    p_trx_date           : Transaction Date
774  |    p_tax_type_code      : 'I' for Input Tax Rate Codes migrated from AP
775  |                           'O' for Output Tax Rate Codes migrated from AR
776  |                           'T' for newly created Tax Rate Codes
777  |
778  | OUT
779  |    p_tax_type_code      : 'I' for Input Tax Rate Codes migrated from AP
780  |                           'O' for Output Tax Rate Codes migrated from AR
781  |                           'T' for newly created Tax Rate Codes
782  |    x_tax_rate_id        : Tax Rate ID
783  |    x_return_status      : Return Status. See get_default_value for details.
784  |    x_msg_out            : Output Message. See get_default_value for details.
785  |
786  | DESCRIPTION
787  |     This routine returns tax rate ID for active tax rate code at a particular
788  |     point in time.
789  |
790  | SCOPE - PUBLIC
791  |
792  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
793  |
794  | CALLED FROM
795  |
796  | NOTES
797  |
798  |
799  | MODIFICATION HISTORY
800  | 04/08/2005   Yoshimichi Konishi   Created.
801  |
802  +==========================================================================*/
803 PROCEDURE get_tax_rate_id
804 (   p_api_version       IN   NUMBER DEFAULT NULL,
805     p_org_id            IN   NUMBER,
806     p_le_id             IN   NUMBER,
807     p_tax_rate_code     IN   VARCHAR2,
808     p_trx_date          IN   DATE,
809     p_tax_type_code     IN OUT NOCOPY   VARCHAR2,
810     x_tax_rate_id       OUT    NOCOPY   NUMBER,
811     x_return_status     OUT    NOCOPY   VARCHAR2,
812     x_msg_out           OUT    NOCOPY   VARCHAR2
813 ) IS
814 
815   -- ***** CURSORS *****
816 
817   --
818   --  IF tax_type_code IS 'T'
819   --             THEN tax_class is NULL
820   --
821   -- This is the case for GL Tax Options records newly created after migration.
822   --
823   --
824   --
825   CURSOR rate_id_for_null_type_cur (p_tax_rate_code   VARCHAR2,
826                                     p_trx_date        DATE)
827   IS
828   SELECT   rates.tax_rate_id,
829            rates.tax_class
830   FROM     zx_sco_rates rates,
831            zx_taxes_b   taxes
832   WHERE    rates.tax_rate_code = p_tax_rate_code
833   AND      p_trx_date >= rates.effective_from
834   AND      p_trx_date <= NVL(rates.effective_to, p_trx_date)
835   AND      nvl(rates.active_flag,'Y') = 'Y'
836   AND      rates.rate_type_code = 'PERCENTAGE'
837   AND      taxes.tax_regime_code = rates.tax_regime_code
838   AND      taxes.tax = rates.tax
839   AND      taxes.source_tax_flag = 'Y'
840   AND      nvl(taxes.offset_tax_flag, 'N') <> 'Y'
841   AND      rates.tax_jurisdiction_code IS NULL;
842 
843 
844   --
845   -- Assumption: IF tax_type_code IS NOT NULL
846   --             THEN tax_class IS NOT NULL
847   --
848   -- This is the case for migrated GL Tax Options records.
849   --
850   CURSOR rate_id_for_mig_cur (p_tax_rate_code   VARCHAR2,
851                               p_tax_class       VARCHAR2,
852                               p_trx_date        DATE)
853   IS
854   SELECT  rates.tax_rate_id
855   FROM    zx_sco_rates rates,
856           zx_taxes_b   taxes
857   WHERE    rates.tax_rate_code = p_tax_rate_code
858   AND      p_trx_date >= rates.effective_from
859   AND      p_trx_date <= NVL(rates.effective_to, p_trx_date)
860   AND      nvl(rates.active_flag,'Y') = 'Y'
861   AND      rates.rate_type_code = 'PERCENTAGE'
862   AND      taxes.tax_regime_code = rates.tax_regime_code
863   AND      taxes.tax = rates.tax
864   AND      taxes.source_tax_flag = 'Y'
865   AND      nvl(taxes.offset_tax_flag, 'N') <> 'Y'
866   AND      rates.tax_jurisdiction_code IS NULL
867   AND      rates.tax_class = p_tax_class;
868 
869   -- ***** VARIABLES *****
870   l_tax_type_code   VARCHAR2(1);
871   l_tax_class       VARCHAR2(30);
872   l_tax_rate_id     NUMBER(15);
873   l_return_status   VARCHAR2(1);
874 
875   -- Logging Infra
876   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_TAX_RATE_ID';
877   l_api_version    CONSTANT   NUMBER := 1.0;
878   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_TAX_RATE_ID';
879   l_log_msg   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
880   -- Logging Infra
881   l_set_security_context_flag VARCHAR2(1);
882 
883 BEGIN
884   -- Logging Infra: Setting up runtime level
885   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
886 
887   -- Logging Infra: Procedure level
888   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
889      FND_LOG.STRING(G_LEVEL_PROCEDURE,
890                     G_MODULE_NAME || l_procedure_name,
891                     'get_tax_rate_id(+)');
892   END IF;
893   -- Logging Infra: Break point input parameters
894   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
895       l_log_msg := 'B: IN: api_version=' || p_api_version ||
896                    ', org_id=' || p_org_id ||
897                    ', tax_rate_code=' || p_tax_rate_code ||
898                    ', trx_date=' || p_trx_date ||
899                    ', tax_type_code=' || p_tax_type_code;
900       FND_LOG.STRING(G_LEVEL_STATEMENT,
901                     G_MODULE_NAME || l_procedure_name,
902                     l_log_msg);
903   END IF;
904 
905 
906   x_return_status := FND_API.G_RET_STS_SUCCESS;
907 
908   IF p_tax_rate_code = 'STD_AR_INPUT' THEN
909       x_return_status := FND_API.G_RET_STS_ERROR;
910       x_msg_out := 'ZX_GL_INVALID_TAX_RATE_CODE';
911     -- Logging Infra:
912     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
913        FND_LOG.STRING(G_LEVEL_STATEMENT,
914                       G_MODULE_NAME || l_procedure_name,
915                       'p_tax_rate_code is STD_AR_INPUT');
916     END IF;
917     Return;
918   END IF;
919 
920 
921   IF  ZX_SECURITY.g_first_party_org_id is NULL THEN
922      l_set_security_context_flag := 'Y';
923   ELSE
924      l_set_security_context_flag := 'N';
925   END IF;
926 
927   IF l_set_security_context_flag = 'Y' Then
928 
929       -- Logging Infra: Procedure level
930       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
931          FND_LOG.STRING(G_LEVEL_PROCEDURE,
932                         G_MODULE_NAME || l_procedure_name,
933                         'Setting Security Context');
934       END IF;
935 
936       ZX_SECURITY.set_security_context(p_le_id, p_org_id, NULL, x_return_status);
937 
938       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
939         -- Logging Infra: Statement level
940         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
941            FND_LOG.STRING(G_LEVEL_STATEMENT,
942                           G_MODULE_NAME || l_procedure_name,
943                           'Error Setting Security Context');
944         END IF;
945         Return;
946       END IF;
947 
948   END IF; -- l_set_security_context_flag
949 
950   -- Logging Infra: Procedure level
951   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
952      FND_LOG.STRING(G_LEVEL_PROCEDURE,
953                     G_MODULE_NAME || l_procedure_name,
954                     'Fetching Tax Rate Id');
955   END IF;
956 
957   IF p_tax_type_code IS NULL OR p_tax_type_code = 'T' THEN
958     OPEN rate_id_for_null_type_cur (p_tax_rate_code,
959                                     p_trx_date);
960     FETCH rate_id_for_null_type_cur INTO l_tax_rate_id,
961                                          l_tax_class;
962     CLOSE rate_id_for_null_type_cur;
963 
964     IF l_tax_class IS NULL THEN
965       p_tax_type_code := 'T';
966     ELSIF l_tax_class = 'INPUT' THEN
967       p_tax_type_code := 'I';
968     ELSIF l_tax_class = 'OUTPUT' THEN
969       p_tax_type_code := 'O';
970     END IF;
971 
972     -- Logging Infra: Break point rate_id_for_null_type_cur
973     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
974         l_log_msg := 'B: CUR: rate_id_for_null_type: tax_rate_id=' || l_tax_rate_id ||
975                      ', tax_type_code=' || p_tax_type_code;
976         FND_LOG.STRING(G_LEVEL_STATEMENT,
977                       G_MODULE_NAME || l_procedure_name,
978                       l_log_msg);
979     END IF;
980   ELSIF p_tax_type_code IN ('I', 'O') THEN
981 
982     IF p_tax_type_code = 'I' THEN
983       l_tax_class := 'INPUT';
984     ELSIF p_tax_type_code = 'O' THEN
985       l_tax_class := 'OUTPUT';
986     END IF;
987 
988     OPEN rate_id_for_mig_cur (p_tax_rate_code,
989                               l_tax_class,
990                               p_trx_date);
991     FETCH rate_id_for_mig_cur INTO l_tax_rate_id;
992     CLOSE rate_id_for_mig_cur;
993 
994     -- Logging Infra: Break point rate_id_for_mig_cur
995     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
996         l_log_msg := 'B: CUR: rate_id_for_mig_cur: tax_rate_id=' || l_tax_rate_id ||
997                      ', tax_type_code=' || p_tax_type_code;
998         FND_LOG.STRING(G_LEVEL_STATEMENT,
999                       G_MODULE_NAME || l_procedure_name,
1000                       l_log_msg);
1001     END IF;
1002 
1003   END IF;
1004 
1005   x_tax_rate_id   := l_tax_rate_id;
1006 
1007   -- Logging Infra: Break point output parameters
1008   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1009       l_log_msg := 'B: OUT: tax_type_code=' || l_tax_type_code ||
1010                    ', tax_rate_id=' || l_tax_rate_id ||
1011                    ', return_status=' || x_return_status;
1012       FND_LOG.STRING(G_LEVEL_STATEMENT,
1013                     G_MODULE_NAME || l_procedure_name,
1014                     l_log_msg);
1015   END IF;
1016 
1017   -- Logging Infra: Procedure level
1018   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1019      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1020                     G_MODULE_NAME || l_procedure_name,
1021                     'Resetting First Party Org context to NULL');
1022   END IF;
1023 
1024   IF l_set_security_context_flag = 'Y' Then
1025     ZX_SECURITY.G_FIRST_PARTY_ORG_ID := NULL;
1026      --dbms_session.set_context('my_ctx','FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1027      ZX_SECURITY.name_value('FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1028   END IF;
1029 
1030   -- Logging Infra: Procedure level
1034                     'get_tax_rate_id(-)');
1031   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1032      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1033                     G_MODULE_NAME || l_procedure_name,
1035   END IF;
1036 EXCEPTION
1037   WHEN OTHERS THEN
1038     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1039     x_msg_out := TO_CHAR(SQLCODE);
1040     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1041        FND_LOG.STRING(G_LEVEL_STATEMENT,
1042                       G_MODULE_NAME || l_procedure_name,
1043                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
1044     END IF;
1045     app_exception.raise_exception;
1046 END get_tax_rate_id;
1047 
1048 
1049 
1050 /*===========================================================================+
1051  | PROCEDURE
1052  |    get_tax_code
1053  |
1054  | IN
1055  |
1056  | OUT
1057  |
1058  | DESCRIPTION
1059  |    Will be obsolete.
1060  |
1061  | SCOPE - PUBLIC
1062  |
1063  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
1064  |
1065  | CALLED FROM
1066  |
1067  | NOTES
1068  |
1069  |
1070  | MODIFICATION HISTORY
1071  | 04/08/2005   Yoshimichi Konishi   Created.
1072  |
1073  +==========================================================================*/
1074 PROCEDURE get_tax_code
1075 (   p_api_version       IN   NUMBER  DEFAULT NULL,
1076     p_org_id            IN   NUMBER,
1077     p_tax_type_code     IN   VARCHAR2,
1078     p_tax_rate_id       IN   NUMBER,
1079     x_tax_rate_code     OUT  NOCOPY   VARCHAR2,
1080     x_return_status     OUT  NOCOPY   VARCHAR2,
1081     x_msg_out           OUT  NOCOPY   VARCHAR2
1082 ) IS
1083 BEGIN
1084   NULL;
1085 END  get_tax_code;
1086 
1087 
1088 /*===========================================================================+
1089  | PROCEDURE
1090  |    get_tax_rate_code
1091  |
1092  | IN
1093  |    p_tax_type_code  :  'I' for Input Tax Rate Codes migrated from AP
1094  |                        'O' for Output Tax Rate Codes migrated from AR
1095  |                        'T' for newly created Tax Rate Codes
1096  |
1097  |    p_tax_rate_id    :  Tax Rate ID
1098  |
1099  | OUT
1100  |    x_tax_rate_code  :  Tax Rate Code
1101  |
1102  | DESCRIPTION
1103  |    This routine returns tax rate code for a particular tax_rate_id.
1104  |
1105  | SCOPE - PUBLIC
1106  |
1107  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
1108  |
1109  | CALLED FROM
1110  |
1111  | NOTES
1112  |
1113  |
1114  | MODIFICATION HISTORY
1115  | 04/08/2005   Yoshimichi Konishi   Created.
1116  |
1117  +==========================================================================*/
1118 PROCEDURE get_tax_rate_code
1119 (   p_api_version       IN   NUMBER  DEFAULT NULL,
1120     p_tax_type_code     IN   VARCHAR2,
1121     p_tax_rate_id       IN   NUMBER,
1122     x_tax_rate_code     OUT  NOCOPY   VARCHAR2,
1123     x_return_status     OUT  NOCOPY   VARCHAR2,
1124     x_msg_out           OUT  NOCOPY   VARCHAR2
1125 ) IS
1126 
1127   -- ***** CURSORS *****
1128   CURSOR get_tax_rate_code_cur (p_tax_rate_id  NUMBER)
1129   IS
1130   SELECT  zrb.tax_rate_code
1131   FROM    zx_rates_b zrb
1132   WHERE   zrb.tax_rate_id = p_tax_rate_id;
1133 
1134   CURSOR get_source_rate_code_cur (p_tax_rate_id  NUMBER)
1135   IS
1136   SELECT  zrb.tax_rate_code
1137   FROM    zx_rates_b zrb
1138   WHERE   zrb.source_id = p_tax_rate_id;
1139 
1140   -- ***** VARIABLES *****
1141   l_tax_rate_code       VARCHAR2(50);
1142   l_tax_rate_id         NUMBER(15);
1143   l_source_id           NUMBER(15);
1144   l_return_status       VARCHAR2(1);
1145   l_source_indicator    VARCHAR2(1);
1146 
1147   -- Logging Infra
1148   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_TAX_RATE_CODE';
1149   l_api_version    CONSTANT   NUMBER := 1.0;
1150   l_procedure_name CONSTANT   VARCHAR2(30) := 'GET_TAX_RATE_CODE';
1151   l_log_msg                   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1152   -- Logging Infra
1153 
1154 BEGIN
1155   -- Logging Infra: Setting up runtime level
1156   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1157 
1158   -- Logging Infra: Procedure level
1159   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1160      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1161                     G_MODULE_NAME || l_procedure_name,
1162                     'get_tax_rate_code(+)');
1163   END IF;
1164   -- Logging Infra: Break point input parameters
1165   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1166       l_log_msg := 'B: IN: api_version=' || p_api_version ||
1167                    ', tax_type_code=' || p_tax_type_code ||
1168                    ', tax_rate_id=' || p_tax_rate_id;
1169       FND_LOG.STRING(G_LEVEL_STATEMENT,
1170                     G_MODULE_NAME || l_procedure_name,
1171                     l_log_msg);
1172   END IF;
1173 
1174   l_return_status := FND_API.G_RET_STS_SUCCESS;
1175 
1176   IF p_tax_type_code = 'I' THEN
1177 
1178     OPEN get_source_rate_code_cur (p_tax_rate_id);
1179     FETCH get_source_rate_code_cur INTO l_tax_rate_code;
1180     IF get_source_rate_code_cur%FOUND THEN
1181        l_source_indicator := 'Y';
1182     ELSE
1183        l_source_indicator := 'N';
1184     END IF;
1185     CLOSE get_source_rate_code_cur;
1186 
1187     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1188       l_log_msg := 'B: CUR: get_source_rate_code_cur: tax_rate_code=' ||
1189                    l_tax_rate_code;
1190       FND_LOG.STRING(G_LEVEL_STATEMENT,
1191                     G_MODULE_NAME || l_procedure_name,
1192                     l_log_msg);
1193       FND_LOG.STRING(G_LEVEL_STATEMENT,
1197     END IF;
1194                     G_MODULE_NAME || l_procedure_name,
1195                     'l_source_indicator : ' || l_source_indicator);
1196 
1198 
1199   ELSIF p_tax_type_code = 'O' or p_tax_type_code = 'T' THEN
1200 
1201     l_source_indicator := 'N';
1202 
1203   ELSE
1204 
1205     l_return_status := FND_API.G_RET_STS_ERROR;
1206     x_msg_out := 'ZX_GL_INVALID_PARAM';
1207     -- Logging Infra:
1208     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1209         l_log_msg := 'B: Unexpected tax_type_code';
1210         FND_LOG.STRING(G_LEVEL_STATEMENT,
1211                       G_MODULE_NAME || l_procedure_name,
1212                       l_log_msg);
1213     END IF;
1214     Return;
1215 
1216   END IF;
1217 
1218   IF l_source_indicator = 'N' THEN
1219 
1220     OPEN get_tax_rate_code_cur (p_tax_rate_id);
1221     FETCH get_tax_rate_code_cur INTO l_tax_rate_code;
1222     CLOSE get_tax_rate_code_cur;
1223 
1224   END IF;
1225 
1226   -- Logging Infra: Break point get_tax_rate_code_cur
1227   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1228       l_log_msg := 'B: CUR: get_tax_rate_code_cur: tax_rate_code=' || l_tax_rate_code;
1229       FND_LOG.STRING(G_LEVEL_STATEMENT,
1230                     G_MODULE_NAME || l_procedure_name,
1231                     l_log_msg);
1232 
1233   END IF;
1234 
1235   x_tax_rate_code      := l_tax_rate_code;
1236   x_return_status      := l_return_status;
1237 
1238   -- Logging Infra: Break point output parameters
1239   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1240       l_log_msg := 'B: OUT: tax_rate_code=' || l_tax_rate_code ||
1241                    ', return_status=' || l_return_status;
1242       FND_LOG.STRING(G_LEVEL_STATEMENT,
1243                     G_MODULE_NAME || l_procedure_name,
1244                     l_log_msg);
1245   END IF;
1246 
1247  -- Logging Infra: Procedure level
1248   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1249      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1250                     G_MODULE_NAME || l_procedure_name,
1251                     'get_tax_rate_and_account(-)');
1252   END IF;
1253 
1254 EXCEPTION
1255   WHEN OTHERS THEN
1256     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1257     x_msg_out := TO_CHAR(SQLCODE);
1258     -- Logging Infra:
1259     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1260        FND_LOG.STRING(G_LEVEL_STATEMENT,
1261                       G_MODULE_NAME || l_procedure_name,
1262                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
1263     END IF;
1264     app_exception.raise_exception;
1265 END get_tax_rate_code;
1266 
1267 /*===========================================================================+
1268  | PROCEDURE
1269  |    get_rouding_rule_code
1270  |
1271  | IN
1272  |    p_api_version    : API Version
1273  |    p_ledger_id      : Ledger ID
1274  |    p_org_id         : Org ID
1275  |    p_le_id          : Legal Entity ID
1276  |    p_tax_class      : Tax Class/Tax Type
1277  |
1278  | OUT
1279  |    x_rouding_rule_code  :  Tax Rate Code
1280  |    x_return_status      :  Return Status
1281  |
1282  | DESCRIPTION
1283  |    This routine returns rounding_rule_code defined for a ledger.
1284  |
1285  | SCOPE - PUBLIC
1286  |
1287  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
1288  |
1289  | CALLED FROM
1290  |
1291  | NOTES
1292  |
1293  |
1294  | MODIFICATION HISTORY
1295  | 06/30/2005   Yoshimichi Konishi   Created.
1296  |
1297  +==========================================================================*/
1298 
1299 PROCEDURE get_rounding_rule_code
1300 ( p_api_version         IN  NUMBER DEFAULT NULL,
1301   p_ledger_id           IN  NUMBER,
1302   p_org_id              IN  NUMBER,
1303   p_le_id               IN  NUMBER,
1304   p_tax_class           IN  VARCHAR2,
1305   x_rounding_rule_code  OUT NOCOPY VARCHAR2,
1306   x_return_status       OUT NOCOPY VARCHAR2,
1307   x_msg_out             OUT NOCOPY VARCHAR2
1308 )
1309 IS
1310 
1311 l_return_status VARCHAR2(1);
1312 l_tax_class     VARCHAR2(30);
1313 
1314 CURSOR rounding_rule_cur (p_ledger_id   NUMBER,
1315                           p_tax_class   VARCHAR) IS
1316 SELECT rounding_rule_code
1317 FROM   zx_account_rates
1318 WHERE  ledger_id = p_ledger_id
1319 AND    account_segment_value IS NULL
1320 AND    (tax_class = p_tax_class
1321         OR
1322         tax_class IS NULL);
1323 
1324   -- Logging Infrastructure
1325   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_ROUNDING_RULE_CODE';
1326   l_api_version    CONSTANT   NUMBER := 1.0;
1327   l_procedure_name CONSTANT   VARCHAR2(30) := 'GET_ROUNDING_RULE_CODE';
1328   l_log_msg                   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1329   -- Logging Infrastructure
1330   l_set_security_context_flag VARCHAR2(1);
1331 
1332 BEGIN
1333 
1334   -- Logging Infra: Setting up runtime level
1335   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1336 
1337   -- Logging Infra: Procedure level
1338   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1339      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1340                     G_MODULE_NAME || l_procedure_name,
1341                     'get_rounding_rule_code(+)');
1342   END IF;
1343 
1344   -- Logging Infra: Break point input parameters
1345   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1346       l_log_msg := 'B: IN: api_version=' || p_api_version ||
1347                    ', ledger_id=' || p_ledger_id ||
1348                    ', org_id=' || p_org_id ||
1349                    ', le_id=' || p_le_id ||
1350                    ', tax_class=' || p_tax_class;
1351       FND_LOG.STRING(G_LEVEL_STATEMENT,
1355 
1352                     G_MODULE_NAME || l_procedure_name,
1353                     l_log_msg);
1354   END IF;
1356     x_return_status := FND_API.G_RET_STS_SUCCESS;
1357 
1358   IF  ZX_SECURITY.g_first_party_org_id is NULL then
1359      l_set_security_context_flag := 'Y';
1360   ELSE
1361      l_set_security_context_flag := 'N';
1362   END IF;
1363 
1364   IF l_set_security_context_flag = 'Y' Then
1365 
1366      -- Logging Infra: Procedure level
1367      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1368         FND_LOG.STRING(G_LEVEL_PROCEDURE,
1369                        G_MODULE_NAME || l_procedure_name,
1370                        'Setting Security Context');
1371      END IF;
1372 
1373        ZX_SECURITY.set_security_context(p_le_id, p_org_id, NULL, x_return_status);
1374 
1375      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1376        -- Logging Infra: Statement level
1377        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1378           FND_LOG.STRING(G_LEVEL_STATEMENT,
1379                          G_MODULE_NAME || l_procedure_name,
1380                          'Error Setting Security Context');
1381        END IF;
1382        Return;
1383      END IF;
1384   END IF; -- l_set_security_context_flag
1385 
1386   -- Logging Infra: Procedure level
1387   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1388      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1389                     G_MODULE_NAME || l_procedure_name,
1390                     'Fetching rounding rule code');
1391   END IF;
1392 
1393 
1394   IF p_tax_class = 'I' THEN
1395     l_tax_class := 'INPUT';
1396   END IF;
1397 
1398   IF p_tax_class = 'O' THEN
1399     l_tax_class := 'OUTPUT';
1400   END IF;
1401 
1402 OPEN rounding_rule_cur (p_ledger_id, l_tax_class);
1403 FETCH rounding_rule_cur INTO x_rounding_rule_code;
1404 
1405 IF rounding_rule_cur%NOTFOUND THEN
1406   x_rounding_rule_code := NULL;
1407 END IF;
1408 
1409 CLOSE rounding_rule_cur;
1410 
1411 
1412   IF l_set_security_context_flag = 'Y' Then
1413 
1414     -- Logging Infra: Procedure level
1415     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1416        FND_LOG.STRING(G_LEVEL_PROCEDURE,
1417                       G_MODULE_NAME || l_procedure_name,
1418                       'Resetting First Party Org context to NULL');
1419     END IF;
1420 
1421     ZX_SECURITY.G_FIRST_PARTY_ORG_ID := NULL;
1422      --dbms_session.set_context('my_ctx','FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1423      ZX_SECURITY.name_value('FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1424   END IF;
1425 
1426   -- Logging Infra: Procedure level
1427   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1428      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1429                     G_MODULE_NAME || l_procedure_name,
1430                     'get_rounding_rule_code(-)');
1431   END IF;
1432 
1433 EXCEPTION
1434   WHEN OTHERS THEN
1435     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1436     x_msg_out := TO_CHAR(SQLCODE);
1437     -- Logging Infra:
1438     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1439        FND_LOG.STRING(G_LEVEL_STATEMENT,
1440                       G_MODULE_NAME || l_procedure_name,
1441                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
1442     END IF;
1443     app_exception.raise_exception;
1444 
1445 END get_rounding_rule_code;
1446 
1447 
1448 /*===========================================================================+
1449  | PROCEDURE
1450  |    get_precision_mau
1451  |
1452  | IN
1453  |    p_ledger_id      : Ledger ID
1454  |    p_org_id         : Org ID
1455  |    p_le_id          : Legal Entity ID
1456  |
1457  | OUT
1458  |    x_precision  :  Precision
1459  |    x_mau        :  Minimum accountable unit
1460  |
1461  | DESCRIPTION
1462  |    This routine returns rounding_rule_code defined for a ledger.
1463  |
1464  | SCOPE - PUBLIC
1465  |
1466  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED
1467  |
1468  | CALLED FROM
1469  |
1470  | NOTES
1471  |
1472  |
1473  | MODIFICATION HISTORY
1474  | 06/30/2005   Yoshimichi Konishi   Created.
1475  |
1476  +==========================================================================*/
1477 PROCEDURE get_precision_mau
1478 (  p_api_version IN NUMBER DEFAULT NULL,
1479    p_ledger_id   IN  NUMBER,
1480    p_org_id      IN  NUMBER,
1481    p_le_id       IN  NUMBER,
1482    x_precision   OUT NOCOPY  NUMBER,
1483    x_mau         OUT NOCOPY  NUMBER,
1484    x_return_status OUT NOCOPY VARCHAR2,
1485    x_msg_out       OUT NOCOPY VARCHAR2
1486 ) AS
1487 
1488 
1489 l_return_status VARCHAR2(1);
1490 l_first_pty_org_id NUMBER;
1491 
1492 
1493 CURSOR precision_mau_cur (p_ledger_id  NUMBER)
1494 IS
1495 SELECT tax_precision,
1496        tax_mau
1497 FROM   zx_account_rates
1498 WHERE  ledger_id = p_ledger_id
1499 AND    account_segment_value IS NULL
1500 AND    rownum = 1;
1501 
1502   -- Logging Infrastructure
1503   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_PRECISION_MAU';
1504   l_api_version    CONSTANT   NUMBER := 1.0;
1505   l_procedure_name CONSTANT   VARCHAR2(30) := 'GET_PRECISION_MAU';
1506   l_log_msg                   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1507   -- Logging Infrastructure
1508   l_set_security_context_flag VARCHAR2(1);
1509 
1510 BEGIN
1511 
1512   -- Logging Infra: Setting up runtime level
1513   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1514 
1515   -- Logging Infra: Procedure level
1516   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1517      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1521 
1518                     G_MODULE_NAME || l_procedure_name,
1519                     'get_precision_mau(+)');
1520   END IF;
1522   -- Logging Infra: Break point input parameters
1523   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1524       l_log_msg := 'B: IN: api_version=' || p_api_version ||
1525                    ', ledger_id=' || p_ledger_id ||
1526                    ', org_id=' || p_org_id ||
1527                    ', le_id=' || p_le_id;
1528       FND_LOG.STRING(G_LEVEL_STATEMENT,
1529                     G_MODULE_NAME || l_procedure_name,
1530                     l_log_msg);
1531   END IF;
1532 
1533     x_return_status := FND_API.G_RET_STS_SUCCESS;
1534 
1535   -- Logging Infra: Procedure level
1536   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1537      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1538                     G_MODULE_NAME || l_procedure_name,
1539                     'Setting Security Context');
1540   END IF;
1541 
1542   IF  ZX_SECURITY.g_first_party_org_id is NULL then
1543      l_set_security_context_flag := 'Y';
1544   ELSE
1545      l_set_security_context_flag := 'N';
1546   END IF;
1547 
1548   IF l_set_security_context_flag = 'Y' Then
1549 
1550      -- l_first_pty_org_id  := ZX_SECURITY.G_FIRST_PARTY_ORG_ID;
1551      --dbms_session.set_context('my_ctx','FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1552      --ZX_SECURITY.name_value('FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1553 
1554     ZX_SECURITY.set_security_context(p_le_id, p_org_id, NULL, x_return_status);
1555 
1556     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1557       -- Logging Infra: Statement level
1558       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1559          FND_LOG.STRING(G_LEVEL_STATEMENT,
1560                         G_MODULE_NAME || l_procedure_name,
1561                         'Error Setting Security Context');
1562       END IF;
1563       Return;
1564     END IF;
1565   END IF; -- l_set_security_context_flag
1566 
1567   -- Logging Infra: Procedure level
1568   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1569      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1570                     G_MODULE_NAME || l_procedure_name,
1571                     'Fetching precision and mau');
1572   END IF;
1573 
1574   OPEN precision_mau_cur (p_ledger_id);
1575 
1576   FETCH precision_mau_cur INTO x_precision, x_mau;
1577 
1578 
1579   IF precision_mau_cur%NOTFOUND THEN
1580    x_precision := NULL;
1581    x_mau := NULL;
1582   END IF;
1583 
1584   CLOSE precision_mau_cur;
1585 
1586   -- Logging Infra: Procedure level
1587   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1588      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1589                     G_MODULE_NAME || l_procedure_name,
1590                     'Resetting First Party Org context to NULL');
1591   END IF;
1592 
1593 -- This API gets called from the Journal Entry form also. So, resetting
1594 -- the security context to what was set by the form before thsi API
1595 -- got called.
1596 
1597 
1598    IF l_set_security_context_flag = 'Y' Then
1599 
1600       ZX_SECURITY.G_FIRST_PARTY_ORG_ID := NULL;
1601       --dbms_session.set_context('my_ctx','FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1602       ZX_SECURITY.name_value('FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1603    END IF;
1604 
1605   -- Logging Infra: Procedure level
1606   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1607      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1608                     G_MODULE_NAME || l_procedure_name,
1609                     'get_precision_mau(-)');
1610   END IF;
1611 
1612   EXCEPTION
1613     WHEN OTHERS THEN
1614       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1615       x_msg_out := TO_CHAR(SQLCODE);
1616       -- Logging Infra:
1617       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1618          FND_LOG.STRING(G_LEVEL_STATEMENT,
1619                         G_MODULE_NAME || l_procedure_name,
1620                         TO_CHAR(SQLCODE) || ': ' || SQLERRM);
1621       END IF;
1622       app_exception.raise_exception;
1623 
1624 END get_precision_mau;
1625 
1626 
1627 PROCEDURE get_default_tax_include_flag
1628 (
1629    p_api_version        IN NUMBER  DEFAULT NULL,
1630    p_ledger_id          IN NUMBER,
1631    p_org_id             IN NUMBER,
1632    p_le_id              IN NUMBER,
1633    p_account_value      IN VARCHAR2,
1634    p_tax_type_code      IN VARCHAR2,
1635    x_include_tax_flag       OUT NOCOPY  VARCHAR2,
1636    x_return_status      OUT NOCOPY  VARCHAR2,
1637    x_msg_out            OUT NOCOPY  VARCHAR2
1638 ) IS
1639 
1640 l_include_tax_flag  VARCHAR2(1);
1641 l_return_status     VARCHAR2(1);
1642 l_msg_out           VARCHAR2(30);
1643 l_tax_class         VARCHAR2(30);
1644 
1645 CURSOR rate_level_cur (p_ledger_id              NUMBER,
1646                        p_account_segment_value  VARCHAR2,
1647                        p_tax_class              VARCHAR2) IS
1648   SELECT amt_incl_tax_flag
1649   FROM   zx_account_rates
1650   WHERE  account_segment_value = p_account_segment_value
1651   AND    ledger_id = p_ledger_id
1652   AND    (tax_class = p_tax_class
1653           OR tax_class IS NULL);
1654 
1655 
1656 CURSOR ledger_level_cur (p_ledger_id   NUMBER,
1657                          p_tax_class   VARCHAR2) IS
1658   SELECT amt_incl_tax_flag
1659   FROM   zx_account_rates
1660   WHERE  ledger_id = p_ledger_id
1661   AND    (tax_class = p_tax_class
1662           OR tax_class IS NULL)
1663   AND    account_segment_value IS NULL;
1664 
1665   -- Logging Infrastructure
1666   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_DEFAULT_TAX_INCLUDE_FLAG';
1670   -- Logging Infrastructure
1667   l_api_version    CONSTANT   NUMBER := 1.0;
1668   l_procedure_name CONSTANT   VARCHAR2(30) := 'GET_DEFAULT_TAX_INCLUDE_FLAG';
1669   l_log_msg                   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1671   l_set_security_context_flag VARCHAR2(1);
1672 
1673 BEGIN
1674 
1675   -- Logging Infra: Setting up runtime level
1676   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1677 
1678   -- Logging Infra: Procedure level
1679   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1680      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1681                     G_MODULE_NAME || l_procedure_name,
1682                     'get_default_tax_include_flag(+)');
1683   END IF;
1684 
1685   -- Logging Infra: Break point input parameters
1686   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1687       l_log_msg := 'B: IN: api_version=' || p_api_version ||
1688                    ', ledger_id=' || p_ledger_id ||
1689                    ', org_id=' || p_org_id ||
1690                    ', le_id=' || p_le_id ||
1691                    ', account_value=' || p_account_value ||
1692                    ', tax_type_code=' || p_tax_type_code;
1693       FND_LOG.STRING(G_LEVEL_STATEMENT,
1694                     G_MODULE_NAME || l_procedure_name,
1695                     l_log_msg);
1696   END IF;
1697 
1698   l_return_status := FND_API.G_RET_STS_SUCCESS;
1699 
1700   IF  ZX_SECURITY.g_first_party_org_id is NULL then
1701      l_set_security_context_flag := 'Y';
1702   ELSE
1703      l_set_security_context_flag := 'N';
1704   END IF;
1705 
1706   IF l_set_security_context_flag = 'Y' Then
1707 
1708     -- Logging Infra: Procedure level
1709     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1710        FND_LOG.STRING(G_LEVEL_PROCEDURE,
1711                       G_MODULE_NAME || l_procedure_name,
1712                       'Setting Security Context');
1713     END IF;
1714 
1715     ZX_SECURITY.set_security_context(p_le_id, p_org_id, NULL, x_return_status);
1716 
1717     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1718       -- Logging Infra: Statement level
1719       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1720          FND_LOG.STRING(G_LEVEL_STATEMENT,
1721                         G_MODULE_NAME || l_procedure_name,
1722                         'Error Setting Security Context');
1723       END IF;
1724       Return;
1725     END IF;
1726   END IF; -- l_set_security_context_flag
1727 
1728   -- Logging Infra: Procedure level
1729   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1730      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1731                     G_MODULE_NAME || l_procedure_name,
1732                     'Fetching amount includes tax flag');
1733   END IF;
1734 
1735   IF p_tax_type_code = 'I' THEN
1736      l_tax_class := 'INPUT';
1737   END IF;
1738 
1739   IF p_tax_type_code = 'O' THEN
1740      l_tax_class := 'OUTPUT';
1741   END IF;
1742 
1743   OPEN rate_level_cur (p_ledger_id,
1744                        p_account_value,
1745                        l_tax_class);
1746   FETCH rate_level_cur INTO l_include_tax_flag;
1747 
1748   IF rate_level_cur%NOTFOUND THEN
1749     IF ledger_level_cur%ISOPEN THEN
1750       CLOSE ledger_level_cur;
1751     END IF;
1752 
1753     OPEN ledger_level_cur (p_ledger_id,
1754                            l_tax_class);
1755     FETCH ledger_level_cur INTO l_include_tax_flag;
1756 
1757     IF ledger_level_cur%FOUND THEN
1758       l_return_status := FND_API.G_RET_STS_SUCCESS;
1759     ELSE
1760       l_return_status := FND_API.G_RET_STS_ERROR;
1761       l_msg_out := 'ZX_GL_DEF_INCL_TAX_NOTFOUND';
1762     END IF;
1763 
1764     CLOSE ledger_level_cur;
1765 
1766   END IF;
1767 
1768   CLOSE rate_level_cur;
1769 
1770   x_include_tax_flag := l_include_tax_flag;
1771   x_return_status := l_return_status;
1772   x_msg_out := l_msg_out;
1773 
1774 
1775   IF l_set_security_context_flag = 'Y' Then
1776 
1777     -- Logging Infra: Procedure level
1778     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1779        FND_LOG.STRING(G_LEVEL_PROCEDURE,
1780                       G_MODULE_NAME || l_procedure_name,
1781                       'Resetting First Party Org context to NULL');
1782     END IF;
1783 
1784     ZX_SECURITY.G_FIRST_PARTY_ORG_ID := NULL;
1785     --dbms_session.set_context('my_ctx','FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1786      ZX_SECURITY.name_value('FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1787   END IF;
1788 
1789   -- Logging Infra: Procedure level
1790   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1791      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1792                     G_MODULE_NAME || l_procedure_name,
1793                     'get_default_tax_include_flag(-)');
1794   END IF;
1795 
1796 EXCEPTION
1797   WHEN OTHERS THEN
1798     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1799     x_msg_out := TO_CHAR(SQLCODE);
1800     -- Logging Infra:
1801     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1802        FND_LOG.STRING(G_LEVEL_STATEMENT,
1803                       G_MODULE_NAME || l_procedure_name,
1804                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
1805     END IF;
1806     app_exception.raise_exception;
1807 END;
1808 
1809 PROCEDURE get_ledger_controls
1810 (  p_api_version IN  NUMBER DEFAULT NULL,
1811    p_ledger_id   IN  NUMBER,
1812    p_org_id      IN  NUMBER,
1813    p_le_id       IN  NUMBER,
1814    x_calculation_level_code   OUT NOCOPY  VARCHAR2,
1815    x_tax_mau                  OUT NOCOPY  NUMBER,
1816    x_return_status            OUT NOCOPY VARCHAR2,
1817    x_msg_out                  OUT NOCOPY VARCHAR2
1818 ) IS
1819 
1823   l_procedure_name CONSTANT   VARCHAR2(30) := 'GET_LEDGER_CONTROLS';
1820   -- Logging Infrastructure
1821   l_api_name       CONSTANT   VARCHAR2(30) := 'GET_LEDGER_CONTROLS';
1822   l_api_version    CONSTANT   NUMBER := 1.0;
1824   l_log_msg                   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1825   -- Logging Infrastructure
1826   l_set_security_context_flag VARCHAR2(1);
1827 
1828 BEGIN
1829 
1830   -- Logging Infra: Setting up runtime level
1831   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1832 
1833   -- Logging Infra: Procedure level
1834   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1835      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1836                     G_MODULE_NAME || l_procedure_name,
1837                     'get_ledger_controls(+)');
1838   END IF;
1839 
1840   -- Logging Infra: Break point input parameters
1841   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1842       l_log_msg := 'B: IN: api_version=' || p_api_version ||
1843                    ', ledger_id=' || p_ledger_id ||
1844                    ', org_id=' || p_org_id ||
1845                    ', le_id=' || p_le_id;
1846       FND_LOG.STRING(G_LEVEL_STATEMENT,
1847                     G_MODULE_NAME || l_procedure_name,
1848                     l_log_msg);
1849   END IF;
1850 
1851   x_return_status := FND_API.G_RET_STS_SUCCESS;
1852 
1853   IF  ZX_SECURITY.g_first_party_org_id is NULL then
1854      l_set_security_context_flag := 'Y';
1855   ELSE
1856      l_set_security_context_flag := 'N';
1857   END IF;
1858 
1859   IF l_set_security_context_flag = 'Y' Then
1860 
1861      -- Logging Infra: Procedure level
1862      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1863         FND_LOG.STRING(G_LEVEL_PROCEDURE,
1864                        G_MODULE_NAME || l_procedure_name,
1865                        'Setting Security Context');
1866      END IF;
1867 
1868      ZX_SECURITY.set_security_context(p_le_id, p_org_id, NULL, x_return_status);
1869 
1870      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1871        -- Logging Infra: Statement level
1872        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1873           FND_LOG.STRING(G_LEVEL_STATEMENT,
1874                          G_MODULE_NAME || l_procedure_name,
1875                          'Error Setting Security Context');
1876        END IF;
1877        Return;
1878      END IF;
1879   END IF; -- l_set_security_context_flag
1880 
1881   -- Logging Infra: Procedure level
1882   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1883      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1884                     G_MODULE_NAME || l_procedure_name,
1885                     'Fetching calc level code and tax mau');
1886   END IF;
1887 
1888     SELECT calculation_level_code,
1889            decode(tax_mau, NULL, power(10,-1*tax_precision), tax_mau)
1890     INTO x_calculation_level_code,
1891          x_tax_mau
1892     FROM zx_account_rates
1893     WHERE ledger_id = p_ledger_id
1894     AND   account_segment_value IS NULL
1895     AND   rownum = 1;
1896 
1897   IF l_set_security_context_flag = 'Y' Then
1898     -- Logging Infra: Procedure level
1899     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1900        FND_LOG.STRING(G_LEVEL_PROCEDURE,
1901                       G_MODULE_NAME || l_procedure_name,
1902                       'Resetting First Party Org context to NULL');
1903     END IF;
1904 
1905     ZX_SECURITY.G_FIRST_PARTY_ORG_ID := NULL;
1906     --dbms_session.set_context('my_ctx','FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1907      ZX_SECURITY.name_value('FIRSTPTYORGID',to_char(ZX_SECURITY.G_FIRST_PARTY_ORG_ID));
1908   END IF;
1909 
1910   -- Logging Infra: Procedure level
1911   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1912      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1913                     G_MODULE_NAME || l_procedure_name,
1914                     'get_ledger_controls(-)');
1915   END IF;
1916 
1917 EXCEPTION
1918   WHEN NO_DATA_FOUND THEN
1919       x_return_status := FND_API.G_RET_STS_ERROR;
1920       x_msg_out := 'ZX_GL_LEDGER_CONTROLS_NOTFOUND';
1921     -- Logging Infra:
1922     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1923        FND_LOG.STRING(G_LEVEL_STATEMENT,
1924                       G_MODULE_NAME || l_procedure_name,
1925                       'NO_DATA_FOUND');
1926     END IF;
1927   WHEN OTHERS THEN
1928     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1929     x_msg_out := TO_CHAR(SQLCODE);
1930     -- Logging Infra:
1931     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1932        FND_LOG.STRING(G_LEVEL_STATEMENT,
1933                       G_MODULE_NAME || l_procedure_name,
1934                       TO_CHAR(SQLCODE) || ': ' || SQLERRM);
1935     END IF;
1936     app_exception.raise_exception;
1937 
1938 END;
1939 
1940 
1941 END zx_gl_tax_options_pkg;